From 66e333bb9ef5264cb7baa62b636a6eaaef5c4d2b Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Tue, 24 Feb 2015 00:31:21 +0100 Subject: [PATCH 01/84] * Using PDO for database queries. * Fixed annoying notice messages. * Upgraded DB scheme to fix some fields issues with default values and types --- ajax/ajax_accountSave.php | 33 +- ajax/ajax_appMgmtSave.php | 8 +- ajax/ajax_search.php | 31 +- ajax/ajax_viewpass.php | 35 +- inc/account.class.php | 899 +++++++++++++++++++++----------------- inc/auth.class.php | 22 +- inc/backup.class.php | 16 +- inc/category.class.php | 107 +++-- inc/config.class.php | 67 +-- inc/customer.class.php | 98 ++--- inc/db.class.php | 506 +++++++++++++++------ inc/dbstructure.sql | 4 +- inc/files.class.php | 89 ++-- inc/groups.class.php | 227 +++++----- inc/import.class.php | 4 +- inc/installer.class.php | 70 +-- inc/log.class.php | 49 ++- inc/migrate.class.php | 534 +++++++++++----------- inc/profiles.class.php | 347 ++++++++------- inc/tpl/accounts.php | 37 +- inc/tpl/editpass.php | 9 +- inc/tpl/eventlog.php | 2 +- inc/tpl/profiles.php | 38 +- inc/upgrade.class.php | 13 +- inc/users.class.php | 696 +++++++++++++++-------------- inc/util.class.php | 6 +- 26 files changed, 2170 insertions(+), 1777 deletions(-) diff --git a/ajax/ajax_accountSave.php b/ajax/ajax_accountSave.php index 62a16c06..87761656 100644 --- a/ajax/ajax_accountSave.php +++ b/ajax/ajax_accountSave.php @@ -3,8 +3,8 @@ /** * sysPass * - * @author nuxsmin - * @link http://syspass.org + * @author nuxsmin + * @link http://syspass.org * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org * * This file is part of sysPass. @@ -61,7 +61,7 @@ $frmChangesHash = SP_Common::parseParams('p', 'hash'); $userId = SP_Common::parseParams('s', 'uid', 0); $groupId = SP_Common::parseParams('s', 'ugroup', 0); -if ($frmSaveType == 1) { +if ($frmSaveType == 1) { // Nueva Cuenta // Comprobaciones para nueva cuenta if (!$frmName) { SP_Common::printJSON(_('Es necesario un nombre de cuenta')); @@ -82,7 +82,7 @@ if ($frmSaveType == 1) { if ($frmPassword != $frmPasswordV) { SP_Common::printJSON(_('Las claves no coinciden')); } -} elseif ($frmSaveType == 2) { +} elseif ($frmSaveType == 2) { // Modificar Cuenta // Comprobaciones para modificación de cuenta if (!$frmSelCustomer && !$frmNewCustomer) { SP_Common::printJSON(_('Es necesario un nombre de cliente')); @@ -95,11 +95,11 @@ if ($frmSaveType == 1) { if (!$frmLogin) { SP_Common::printJSON(_('Es necesario un usuario')); } -} elseif ($frmSaveType == 3) { +} elseif ($frmSaveType == 3) { // Eliminar Cuenta if (!$frmAccountId) { SP_Common::printJSON(_('Id inválido')); } -} elseif ($frmSaveType == 4) { +} elseif ($frmSaveType == 4) { // Modificar Clave // Comprobaciones para modficación de clave if (!$frmPassword && !$frmPasswordV) { SP_Common::printJSON(_('La clave no puede estar en blanco')); @@ -108,7 +108,7 @@ if ($frmSaveType == 1) { if ($frmPassword != $frmPasswordV) { SP_Common::printJSON(_('Las claves no coinciden')); } -} elseif ($frmSaveType == 5) { +} elseif ($frmSaveType == 5) { // Restaurar Cuenta if (!$frmAccountId) { SP_Common::printJSON(_('Id inválido')); } @@ -135,12 +135,12 @@ if ($frmSaveType == 1 || $frmSaveType == 4) { $account = new SP_Account; switch ($frmSaveType) { - case 1: + case 1: // Nueva Cuenta SP_Customer::$customerName = $frmNewCustomer; // Comprobar si se ha introducido un nuevo cliente if ($frmNewCustomer) { - if (!SP_Customer::checkDupCustomer()) { + if (SP_Customer::checkDupCustomer()) { SP_Common::printJSON(_('Cliente duplicado')); } @@ -171,9 +171,10 @@ switch ($frmSaveType) { if ($account->createAccount()) { SP_Common::printJSON(_('Cuenta creada'), 0); } + SP_Common::printJSON(_('Error al crear la cuenta'), 0); break; - case 2: + case 2: // Modificar Cuenta SP_Customer::$customerName = $frmNewCustomer; $account->accountId = $frmAccountId; $account->accountName = $frmName; @@ -189,7 +190,7 @@ switch ($frmSaveType) { // Comprobar si se ha introducido un nuevo cliente if ($frmNewCustomer) { - if (!SP_Customer::checkDupCustomer()) { + if (SP_Customer::checkDupCustomer()) { SP_Common::printJSON(_('Cliente duplicado')); } @@ -211,9 +212,10 @@ switch ($frmSaveType) { if ($account->updateAccount()) { SP_Common::printJSON(_('Cuenta actualizada'), 0); } + SP_Common::printJSON(_('Error al modificar la cuenta')); break; - case 3: + case 3: // Eliminar Cuenta $account->accountId = $frmAccountId; // Eliminar cuenta @@ -222,7 +224,7 @@ switch ($frmSaveType) { } SP_Common::printJSON(_('Error al eliminar la cuenta')); break; - case 4: + case 4: // Modificar Clave $account->accountId = $frmAccountId; $account->accountPass = $accountPass; $account->accountIV = $accountIV; @@ -232,9 +234,10 @@ switch ($frmSaveType) { if ($account->updateAccountPass()) { SP_Common::printJSON(_('Clave actualizada'), 0); } + SP_Common::printJSON(_('Error al actualizar la clave')); break; - case 5: + case 5: // Restaurar Cuenta $account->accountId = $frmAccountId; $accountHistData = $account->getAccountHistory(); @@ -254,7 +257,7 @@ switch ($frmSaveType) { $account->accountUserEditId = $userId; // Restaurar cuenta y clave - if ($account->updateAccount(true) && $account->updateAccountPass(false,true)) { + if ($account->updateAccount(true) && $account->updateAccountPass(false, true)) { SP_Common::printJSON(_('Cuenta restaurada'), 0); } diff --git a/ajax/ajax_appMgmtSave.php b/ajax/ajax_appMgmtSave.php index b0d0d3a2..af45e783 100644 --- a/ajax/ajax_appMgmtSave.php +++ b/ajax/ajax_appMgmtSave.php @@ -192,7 +192,7 @@ if ($frmSaveType == 1 || $frmSaveType == 2) { SP_Groups::$groupName = $frmGrpName; SP_Groups::$groupDescription = $frmGrpDesc; - if (!SP_Groups::checkGroupExist()) { + if (SP_Groups::checkGroupExist()) { SP_Common::printJSON(_('Nombre de grupo duplicado'), 2); } @@ -272,7 +272,7 @@ if ($frmSaveType == 1 || $frmSaveType == 2) { SP_Profiles::$profileName = $frmProfileName; - if (!SP_Profiles::checkProfileExist()) { + if (SP_Profiles::checkProfileExist()) { SP_Common::printJSON(_('Nombre de perfil duplicado'), 2); } @@ -330,7 +330,7 @@ if ($frmSaveType == 1 || $frmSaveType == 2) { SP_Customer::$customerName = $frmCustomerName; SP_Customer::$customerDescription = $frmCustomerDesc; - if (!SP_Customer::checkDupCustomer($frmItemId)) { + if (SP_Customer::checkDupCustomer($frmItemId)) { SP_Common::printJSON(_('Nombre de cliente duplicado'), 2); } @@ -381,7 +381,7 @@ if ($frmSaveType == 1 || $frmSaveType == 2) { SP_Category::$categoryName = $frmCategoryName; SP_Category::$categoryDescription = $frmCategoryDesc; - if (!SP_Category::checkDupCategory($frmItemId)) { + if (SP_Category::checkDupCategory($frmItemId)) { SP_Common::printJSON(_('Nombre de categoría duplicado'), 2); } diff --git a/ajax/ajax_search.php b/ajax/ajax_search.php index bc9a3637..75aee8ec 100644 --- a/ajax/ajax_search.php +++ b/ajax/ajax_search.php @@ -71,23 +71,20 @@ $userId = SP_Common::parseParams('s', 'uid', 0); $filterOn = ($sortKey > 1 || $customerId || $categoryId || $searchTxt) ? true : false; $colors = array( - 'FF66CC', - 'FF99FF', - 'CC99FF', - '9999FF', - '6699FF', - '3399FF', - '0099FF', - '6699FF', - '3399FF', - '00CC66', - '00CC66', - '00CC99', - '00CCCC', - 'FFCC66', - 'FF9999', - 'FF6699', - 'FF99CC' + 'ef5350', + 'ec407a', + 'ab47bc', + '7e57c2', + '5c6bc0', + '42a5f5', + '29b6f6', + '26c6da', + '26a69a', + '66bb6a', + '9ccc65', + 'ff7043', + '8d6e63', + '78909c' ); $objAccount = new SP_Account; diff --git a/ajax/ajax_viewpass.php b/ajax/ajax_viewpass.php index bba9d9de..d7076dcc 100644 --- a/ajax/ajax_viewpass.php +++ b/ajax/ajax_viewpass.php @@ -34,7 +34,7 @@ if (!SP_Init::isLoggedIn()) { $accountId = SP_Common::parseParams('p', 'accountid', false); $fullTxt = SP_Common::parseParams('p', 'full', 0); -$isHistory = SP_Common::parseParams('p', 'isHistory', 0); +$isHistory = SP_Common::parseParams('p', 'isHistory', false); if (!$accountId) { return; @@ -43,24 +43,19 @@ if (!$accountId) { $account = new SP_Account; $account->accountParentId = ( isset($_SESSION["accParentId"]) ) ? $_SESSION["accParentId"] : ""; $account->accountId = $accountId; -$account->accountIsHistory = $isHistory; +//$account->accountIsHistory = $isHistory; -if (!$isHistory) { - $accountData = $account->getAccount(); +$accountData = $account->getAccountPass($isHistory); - if (!SP_ACL::checkAccountAccess("accviewpass", $account->getAccountDataForACL()) || !SP_ACL::checkUserAccess("accviewpass")) { - die('' . _('No tiene permisos para acceder a esta cuenta') . ''); - } -} else { - if ($account->checkAccountMPass()) { - $accountData = $account->getAccountHistory(); - if (!SP_ACL::checkAccountAccess("accviewpass", $account->getAccountDataForACL()) || !SP_ACL::checkUserAccess("accviewpass")) { - die('' . _('No tiene permisos para acceder a esta cuenta') . ''); - } - } else { - echo '
' . _('La clave maestra no coincide') . '
'; - return; - } +if ($isHistory && !$account->checkAccountMPass()){ + echo '
' . _('La clave maestra no coincide') . '
'; + return; +} + +$accountData = $account->getAccountPass($isHistory); + +if (!SP_ACL::checkAccountAccess("accviewpass", $account->getAccountDataForACL()) || !SP_ACL::checkUserAccess("accviewpass")) { + die('' . _('No tiene permisos para acceder a esta cuenta') . ''); } if (!SP_Users::checkUserUpdateMPass()) { @@ -72,14 +67,14 @@ if (!SP_Users::checkUserUpdateMPass()) { } $masterPass = SP_Crypt::getSessionMasterPass(); -$accountClearPass = SP_Crypt::getDecrypt($accountData->account_pass, $masterPass, $accountData->account_IV); +$accountClearPass = SP_Crypt::getDecrypt($accountData->pass, $masterPass, $accountData->iv); if (!$isHistory && $fullTxt) { $account->incrementDecryptCounter(); $message['action'] = _('Ver Clave'); $message['text'][] = _('ID') . ': ' . $accountId; - $message['text'][] = _('Cuenta') . ': ' . $accountData->customer_name . " / " . $accountData->account_name; + $message['text'][] = _('Cuenta') . ': ' . $accountData->customer_name . " / " . $accountData->name; SP_Log::wrLogInfo($message); } @@ -92,7 +87,7 @@ if ($fullTxt) { - + diff --git a/inc/account.class.php b/inc/account.class.php index 090e7a4c..3b07ae28 100644 --- a/inc/account.class.php +++ b/inc/account.class.php @@ -2,8 +2,8 @@ /** * sysPass * - * @author nuxsmin - * @link http://syspass.org + * @author nuxsmin + * @link http://syspass.org * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org * * This file is part of sysPass. @@ -74,14 +74,17 @@ class SP_Account */ public static function getAccountRequestData($accountId) { - $query = "SELECT account_userId," - . "account_userEditId," - . "account_name," - . "customer_name " - . "FROM accounts " - . "LEFT JOIN customers ON account_customerId = customer_id " - . "WHERE account_id = " . (int)$accountId . " LIMIT 1"; - $queryRes = DB::getResults($query, __FUNCTION__); + $query = 'SELECT account_userId,' + . 'account_userEditId,' + . 'account_name,' + . 'customer_name ' + . 'FROM accounts ' + . 'LEFT JOIN customers ON account_customerId = customer_id ' + . 'WHERE account_id = :id LIMIT 1'; + + $data['id'] = $accountId; + + $queryRes = DB::getResults($query, __FUNCTION__, $data); if ($queryRes === false) { return false; @@ -98,12 +101,14 @@ class SP_Account */ public static function getAccountUsersName($accountId) { - $query = "SELECT user_name " - . "FROM accUsers " - . "JOIN usrData ON accuser_userId = user_id " - . "WHERE accuser_accountId = " . (int)$accountId; + $query = 'SELECT user_name ' + . 'FROM accUsers ' + . 'JOIN usrData ON accuser_userId = user_id ' + . 'WHERE accuser_accountId = :id'; - $queryRes = DB::getResults($query, __FUNCTION__); + $data['id'] = $accountId; + + $queryRes = DB::getResults($query, __FUNCTION__, $data); if ($queryRes === false) { return false; @@ -130,116 +135,140 @@ class SP_Account */ public function getAccounts($searchFilter) { - $isAdmin = ($_SESSION["uisadminapp"] || $_SESSION["uisadminacc"]); - $globalSearch = (SP_Config::getValue('globalsearch', 0) && $searchFilter["globalSearch"] === 1); + $isAdmin = ($_SESSION['uisadminapp'] || $_SESSION['uisadminacc']); + $globalSearch = ($searchFilter['globalSearch'] === 1 && SP_Config::getValue('globalsearch', 0)); $arrFilterCommon = array(); $arrFilterSelect = array(); $arrFilterUser = array(); $arrQueryWhere = array(); - switch ($searchFilter["keyId"]) { + switch ($searchFilter['keyId']) { case 1: - $orderKey = "account_name"; + $orderKey = 'account_name'; break; case 2: - $orderKey = "category_name"; + $orderKey = 'category_name'; break; case 3: - $orderKey = "account_login"; + $orderKey = 'account_login'; break; case 4: - $orderKey = "account_url"; + $orderKey = 'account_url'; break; case 5: - $orderKey = "account_customerId"; + $orderKey = 'account_customerId'; break; default : - $orderKey = "customer_name, account_name"; + $orderKey = 'customer_name, account_name'; break; } - $querySelect = "SELECT SQL_CALC_FOUND_ROWS DISTINCT " - . "account_id," - . "account_customerId," - . "category_name," - . "account_name," - . "account_login," - . "account_url," - . "account_notes," - . "account_userId," - . "account_userGroupId," - . "account_otherUserEdit," - . "account_otherGroupEdit," - . "usergroup_name," - . "customer_name " - . "FROM accounts " - . "LEFT JOIN categories ON account_categoryId = category_id " - . "LEFT JOIN usrGroups ug ON account_userGroupId = usergroup_id " - . "LEFT JOIN customers ON customer_id = account_customerId " - . "LEFT JOIN accUsers ON accuser_accountId = account_id " - . "LEFT JOIN accGroups ON accgroup_accountId = account_id"; + $querySelect = 'SELECT DISTINCT ' + . 'account_id,' + . 'account_customerId,' + . 'category_name,' + . 'account_name,' + . 'account_login,' + . 'account_url,' + . 'account_notes,' + . 'account_userId,' + . 'account_userGroupId,' + . 'BIN(account_otherUserEdit) AS account_otherUserEdit,' + . 'BIN(account_otherGroupEdit) AS account_otherGroupEdit,' + . 'usergroup_name,' + . 'customer_name ' + . 'FROM accounts ' + . 'LEFT JOIN categories ON account_categoryId = category_id ' + . 'LEFT JOIN usrGroups ug ON account_userGroupId = usergroup_id ' + . 'LEFT JOIN customers ON customer_id = account_customerId ' + . 'LEFT JOIN accUsers ON accuser_accountId = account_id ' + . 'LEFT JOIN accGroups ON accgroup_accountId = account_id'; - if ($searchFilter["txtSearch"]) { - $arrFilterCommon[] = "account_name LIKE '%" . DB::escape($searchFilter["txtSearch"]) . "%'"; - $arrFilterCommon[] = "account_login LIKE '%" . DB::escape($searchFilter["txtSearch"]) . "%'"; - $arrFilterCommon[] = "account_url LIKE '%" . DB::escape($searchFilter["txtSearch"]) . "%'"; - $arrFilterCommon[] = "account_notes LIKE '%" . DB::escape($searchFilter["txtSearch"]) . "%'"; + if ($searchFilter['txtSearch']) { + $arrFilterCommon[] = 'account_name LIKE :name'; + $arrFilterCommon[] = 'account_login LIKE :login'; + $arrFilterCommon[] = 'account_url LIKE :url'; + $arrFilterCommon[] = 'account_notes LIKE :notes'; + + $data['name'] = '%' . $searchFilter['txtSearch'] . '%'; + $data['login'] = '%' . $searchFilter['txtSearch'] . '%'; + $data['url'] = '%' . $searchFilter['txtSearch'] . '%'; + $data['notes'] = '%' . $searchFilter['txtSearch'] . '%'; } - if ($searchFilter["categoryId"] != 0) { - $arrFilterSelect[] = "category_id = " . $searchFilter["categoryId"]; - } - if ($searchFilter["customerId"] != 0) { - $arrFilterSelect[] = "account_customerId = " . $searchFilter["customerId"]; - } + if ($searchFilter['categoryId'] != 0) { + $arrFilterSelect[] = 'category_id = :categoryId'; + $data['categoryId'] = $searchFilter['categoryId']; + } + if ($searchFilter['customerId'] != 0) { + $arrFilterSelect[] = 'account_customerId = :customerId'; + + $data['customerId'] = $searchFilter['customerId']; + } if (count($arrFilterCommon) > 0) { - $arrQueryWhere[] = "(" . implode(" OR ", $arrFilterCommon) . ")"; + $arrQueryWhere[] = '(' . implode(' OR ', $arrFilterCommon) . ')'; } if (count($arrFilterSelect) > 0) { - $arrQueryWhere[] = "(" . implode(" AND ", $arrFilterSelect) . ")"; + $arrQueryWhere[] = '(' . implode(' AND ', $arrFilterSelect) . ')'; } if (!$isAdmin && !$globalSearch) { - $arrFilterUser[] = "account_userGroupId = " . (int) $searchFilter["groupId"]; - $arrFilterUser[] = "account_userId = " . $searchFilter["userId"]; - $arrFilterUser[] = "accgroup_groupId = " . $searchFilter["groupId"]; - $arrFilterUser[] = "accuser_userId = " . $searchFilter["userId"]; + $arrFilterUser[] = 'account_userGroupId = :userGroupId'; + $arrFilterUser[] = 'account_userId = :userId'; + $arrFilterUser[] = 'accgroup_groupId = :accgroup_groupId'; + $arrFilterUser[] = 'accuser_userId = :accuser_userId'; - $arrQueryWhere[] = "(" . implode(" OR ", $arrFilterUser) . ")"; + $data['userGroupId'] = $searchFilter['groupId']; + $data['userId'] = $searchFilter['userId']; + $data['accgroup_groupId'] = $searchFilter['groupId']; + $data['accuser_userId'] = $searchFilter['userId']; + + //$arrQueryWhere[] = '(' . implode(' OR ', $arrFilterUser) . ')'; + $arrQueryWhere[] = implode(' OR ', $arrFilterUser); } - $order = ($searchFilter["txtOrder"] == 0) ? 'ASC' : 'DESC'; + $orderDir = ($searchFilter["txtOrder"] == 0) ? 'ASC' : 'DESC'; + $queryOrder = 'ORDER BY ' . $orderKey . ' ' . $orderDir; - $queryOrder = " ORDER BY $orderKey " . $order; + if ($searchFilter['limitCount'] != 99) { + $queryLimit = 'LIMIT :limitStart,:limitCount'; - if ($searchFilter["limitCount"] != 99) { - $queryLimit = "LIMIT " . $searchFilter["limitStart"] . ", " . $searchFilter["limitCount"]; + $data['limitStart'] = $searchFilter['limitStart']; + $data['limitCount'] = $searchFilter['limitCount']; } if (count($arrQueryWhere) === 1) { - $query = $querySelect . " WHERE " . implode($arrQueryWhere) . " " . $queryOrder . " " . $queryLimit; + $query = $querySelect . ' WHERE ' . implode($arrQueryWhere) . ' ' . $queryOrder . ' ' . $queryLimit; } elseif (count($arrQueryWhere) > 1) { - $query = $querySelect . " WHERE " . implode(" AND ", $arrQueryWhere) . " " . $queryOrder . " " . $queryLimit; + $query = $querySelect . ' WHERE ' . implode(' AND ', $arrQueryWhere) . ' ' . $queryOrder . ' ' . $queryLimit; } else { - $query = $querySelect . $queryOrder . " " . $queryLimit; + $query = $querySelect . ' ' . $queryOrder . ' ' . $queryLimit; } $this->query = $query; + // Obtener el número total de cuentas visibles por el usuario + DB::setFullRowCount(); + + // Obtener los resultados siempre en array de objetos + DB::setReturnArray(); + // Consulta de la búsqueda de cuentas - $queryRes = DB::getResults($query, __FUNCTION__, true); + $queryRes = DB::getResults($query, __FUNCTION__, $data); if ($queryRes === false) { +// print_r($query); +// var_dump($data); return false; } + // Obtenemos el número de registros totales de la consulta sin contar el LIMIT - $resQueryNumRows = DB::getResults("SELECT FOUND_ROWS() as numRows", __FUNCTION__); - $this->queryNumRows = $resQueryNumRows->numRows; + $this->queryNumRows = DB::$last_num_rows; $_SESSION["accountSearchTxt"] = $searchFilter["txtSearch"]; $_SESSION["accountSearchCustomer"] = $searchFilter["customerId"]; @@ -262,41 +291,43 @@ class SP_Account */ public function getAccountHistory() { - $query = "SELECT acchistory_accountId as account_id," - . "acchistory_customerId as account_customerId," - . "acchistory_categoryId as account_categoryId," - . "acchistory_name as account_name," - . "acchistory_login as account_login," - . "acchistory_url as account_url," - . "acchistory_pass as account_pass," - . "acchistory_IV as account_IV," - . "acchistory_notes as account_notes," - . "acchistory_countView as account_countView," - . "acchistory_countDecrypt as account_countDecrypt," - . "acchistory_dateAdd as account_dateAdd," - . "acchistory_dateEdit as account_dateEdit," - . "acchistory_userId as account_userId," - . "acchistory_userGroupId as account_userGroupId," - . "acchistory_userEditId as account_userEditId," - . "acchistory_isModify," - . "acchistory_isDeleted," - . "acchistory_otherUserEdit as account_otherUserEdit," - . "acchistory_otherGroupEdit as account_otherGroupEdit," - . "u1.user_name," - . "u1.user_login," - . "usergroup_name," - . "u2.user_name as user_editName," - . "u2.user_login as user_editLogin," - . "category_name, customer_name " - . "FROM accHistory " - . "LEFT JOIN categories ON acchistory_categoryId = category_id " - . "LEFT JOIN usrGroups ON acchistory_userGroupId = usergroup_id " - . "LEFT JOIN usrData u1 ON acchistory_userId = u1.user_id " - . "LEFT JOIN usrData u2 ON acchistory_userEditId = u2.user_id " - . "LEFT JOIN customers ON acchistory_customerId = customer_id " - . "WHERE acchistory_id = " . (int)$this->accountId . " LIMIT 1"; + $query = 'SELECT acchistory_accountId as account_id,' + . 'acchistory_customerId as account_customerId,' + . 'acchistory_categoryId as account_categoryId,' + . 'acchistory_name as account_name,' + . 'acchistory_login as account_login,' + . 'acchistory_url as account_url,' + . 'acchistory_pass as account_pass,' + . 'acchistory_IV as account_IV,' + . 'acchistory_notes as account_notes,' + . 'acchistory_countView as account_countView,' + . 'acchistory_countDecrypt as account_countDecrypt,' + . 'acchistory_dateAdd as account_dateAdd,' + . 'acchistory_dateEdit as account_dateEdit,' + . 'acchistory_userId as account_userId,' + . 'acchistory_userGroupId as account_userGroupId,' + . 'acchistory_userEditId as account_userEditId,' + . 'acchistory_isModify,' + . 'acchistory_isDeleted,' + . 'acchistory_otherUserEdit + 0 AS account_otherUserEdit,' + . 'acchistory_otherGroupEdit + 0 AS account_otherGroupEdit,' + . 'u1.user_name,' + . 'u1.user_login,' + . 'usergroup_name,' + . 'u2.user_name as user_editName,' + . 'u2.user_login as user_editLogin,' + . 'category_name, customer_name ' + . 'FROM accHistory ' + . 'LEFT JOIN categories ON acchistory_categoryId = category_id ' + . 'LEFT JOIN usrGroups ON acchistory_userGroupId = usergroup_id ' + . 'LEFT JOIN usrData u1 ON acchistory_userId = u1.user_id ' + . 'LEFT JOIN usrData u2 ON acchistory_userEditId = u2.user_id ' + . 'LEFT JOIN customers ON acchistory_customerId = customer_id ' + . 'WHERE acchistory_id = :id LIMIT 1'; - $queryRes = DB::getResults($query, __FUNCTION__); + $data['id'] = $this->accountId; + + $queryRes = DB::getResults($query, __FUNCTION__, $data); if ($queryRes === false) { return false; @@ -318,7 +349,7 @@ class SP_Account */ public function updateAccount($isRestore = false) { - $message['action'][] = __FUNCTION__; + $message['action'] = __FUNCTION__; // Guardamos una copia de la cuenta en el histórico if (!$this->addHistory($this->accountId, $this->accountUserEditId, false)) { @@ -327,7 +358,7 @@ class SP_Account return false; } - if ( ! $isRestore ){ + if (!$isRestore) { $message['action'] = _('Actualizar Cuenta'); if (!SP_Groups::updateGroupsForAccount($this->accountId, $this->accountUserGroupsId)) { @@ -345,21 +376,31 @@ class SP_Account $message['action'] = _('Restaurar Cuenta'); } - $query = "UPDATE accounts SET " - . "account_customerId = " . (int)$this->accountCustomerId . "," - . "account_categoryId = " . (int)$this->accountCategoryId . "," - . "account_name = '" . DB::escape($this->accountName) . "'," - . "account_login = '" . DB::escape($this->accountLogin) . "'," - . "account_url = '" . DB::escape($this->accountUrl) . "'," - . "account_notes = '" . DB::escape($this->accountNotes) . "'," - . "account_userEditId = " . (int)$this->accountUserEditId . "," - . "account_dateEdit = NOW(), " - . "account_otherUserEdit = " . (int)$this->accountOtherUserEdit . "," - . "account_otherGroupEdit = " . (int)$this->accountOtherGroupEdit . " " - . "WHERE account_id = " . (int)$this->accountId; + $query = 'UPDATE accounts SET ' + . 'account_customerId = :accountCustomerId,' + . 'account_categoryId = :accountCategoryId,' + . 'account_name = :accountName,' + . 'account_login = :accountLogin,' + . 'account_url = :accountUrl,' + . 'account_notes = :accountNotes,' + . 'account_userEditId = :accountUserEditId,' + . 'account_dateEdit = NOW(),' + . 'account_otherUserEdit = :accountOtherUserEdit,' + . 'account_otherGroupEdit = :accountOtherGroupEdit ' + . 'WHERE account_id = :accountId'; + $data['accountCustomerId'] = $this->accountCustomerId; + $data['accountCategoryId'] = $this->accountCategoryId; + $data['accountName'] = $this->accountName; + $data['accountLogin'] = $this->accountLogin; + $data['accountUrl'] = $this->accountUrl; + $data['accountNotes'] = $this->accountNotes; + $data['accountUserEditId'] = $this->accountUserEditId; + $data['accountOtherUserEdit'] = intval($this->accountOtherUserEdit); + $data['accountOtherGroupEdit'] = intval($this->accountOtherGroupEdit); + $data['accountId'] = $this->accountId; - if (DB::doQuery($query, __FUNCTION__) === false) { + if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } @@ -367,8 +408,8 @@ class SP_Account $this->getAccountInfoById($accountInfo); $message['action'] = _('Cuenta actualizada'); - $message['text'][] = SP_Html::strongText(_('Cliente') . ": ") . $this->cacheParams['customer_name']; - $message['text'][] = SP_Html::strongText(_('Cuenta') . ": ") . "$this->accountName ($this->accountId)"; + $message['text'][] = SP_Html::strongText(_('Cliente') . ': ') . $this->cacheParams['customer_name']; + $message['text'][] = SP_Html::strongText(_('Cuenta') . ': ') . "$this->accountName ($this->accountId)"; SP_Log::wrLogInfo($message); SP_Common::sendEmail($message); @@ -384,99 +425,57 @@ class SP_Account */ private function addHistory($isDelete = false) { - $objAccountHist = new SP_Account; + $query = 'INSERT INTO accHistory ' + . '(acchistory_accountId,' + . 'acchistory_categoryId,' + . 'acchistory_customerId,' + . 'acchistory_name,' + . 'acchistory_login,' + . 'acchistory_url,' + . 'acchistory_pass,' + . 'acchistory_IV,' + . 'acchistory_notes,' + . 'acchistory_countView,' + . 'acchistory_countDecrypt,' + . 'acchistory_dateAdd,' + . 'acchistory_dateEdit,' + . 'acchistory_userId,' + . 'acchistory_userGroupId,' + . 'acchistory_userEditId,' + . 'acchistory_otherUserEdit,' + . 'acchistory_otherGroupEdit,' + . 'acchistory_isModify,' + . 'acchistory_isDeleted,' + . 'acchistory_mPassHash) ' + . 'SELECT account_id,' + . 'account_categoryId,' + . 'account_customerId,' + . 'account_name,' + . 'account_login,' + . 'account_url,' + . 'account_pass,' + . 'account_IV,' + . 'account_notes,' + . 'account_countView,' + . 'account_countDecrypt,' + . 'account_dateAdd,' + . 'account_dateEdit,' + . 'account_userId,' + . 'account_userGroupId,' + . 'account_userEditId,' + . 'account_otherUserEdit,' + . 'account_otherGroupEdit,' + . ':isModify,' + . ':isDelete,' + . ':masterPwd ' + . 'FROM accounts WHERE account_id = :account_id'; - $objAccountHist->accountId = $this->accountId; - $accountData = $objAccountHist->getAccount(); + $data['account_id'] = $this->accountId; + $data['isModify'] = ($isDelete === false) ? 1 : 0; + $data['isDelete'] = ($isDelete === false) ? 0 : 1; + $data['masterPwd'] = SP_Config::getConfigValue('masterPwd'); - $isModify = ($isDelete === false) ? 1 : 0; - $isDelete = ($isDelete === false) ? 0 : 1; - - $query = "INSERT INTO accHistory SET " - . "acchistory_accountId = " . $objAccountHist->accountId . "," - . "acchistory_categoryId = " . $accountData->account_categoryId . "," - . "acchistory_customerId = " . $accountData->account_customerId . "," - . "acchistory_name = '" . DB::escape($accountData->account_name) . "'," - . "acchistory_login = '" . DB::escape($accountData->account_login) . "'," - . "acchistory_url = '" . DB::escape($accountData->account_url) . "'," - . "acchistory_pass = '" . DB::escape($accountData->account_pass) . "'," - . "acchistory_IV = '" . DB::escape($accountData->account_IV) . "'," - . "acchistory_notes = '" . DB::escape($accountData->account_notes) . "'," - . "acchistory_countView = " . $accountData->account_countView . "," - . "acchistory_countDecrypt = " . $accountData->account_countDecrypt . "," - . "acchistory_dateAdd = '" . $accountData->account_dateAdd . "'," - . "acchistory_dateEdit = '" . $accountData->account_dateEdit . "'," - . "acchistory_userId = " . $accountData->account_userId . "," - . "acchistory_userGroupId = " . $accountData->account_userGroupId . "," - . "acchistory_userEditId = " . $accountData->account_userEditId . "," - . "acchistory_isModify = " . $isModify . "," - . "acchistory_isDeleted = " . $isDelete . "," - . "acchistory_otherUserEdit = " . $accountData->account_otherUserEdit . "," - . "acchistory_otherGroupEdit = " . $accountData->account_otherGroupEdit . "," - . "acchistory_mPassHash = '" . DB::escape(SP_Config::getConfigValue('masterPwd')) . "'"; - - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } - - return true; - } - - /** - * Obtener los datos de una cuenta. - * Esta funcion realiza la consulta a la BBDD y guarda los datos en las variables de la clase. - * - * @return object|false - */ - public function getAccount() - { - $query = "SELECT account_id," - . "account_name," - . "account_categoryId," - . "account_userId," - . "account_customerId," - . "account_userGroupId," - . "account_userEditId," - . "category_name," - . "account_login," - . "account_url," - . "account_pass," - . "account_IV," - . "account_notes," - . "account_countView," - . "account_countDecrypt," - . "account_dateAdd," - . "account_dateEdit," - . "account_otherUserEdit," - . "account_otherGroupEdit," - . "u1.user_name," - . "u1.user_login," - . "u2.user_name as user_editName," - . "u2.user_login as user_editLogin," - . "usergroup_name," - . "customer_name, " - . "CONCAT(account_name,account_categoryId,account_customerId,account_login,account_url,account_notes,BIN(account_otherUserEdit),BIN(account_otherGroupEdit)) as modHash " - . "FROM accounts " - . "LEFT JOIN categories ON account_categoryId = category_id " - . "LEFT JOIN usrGroups ug ON account_userGroupId = usergroup_id " - . "LEFT JOIN usrData u1 ON account_userId = u1.user_id " - . "LEFT JOIN usrData u2 ON account_userEditId = u2.user_id " - . "LEFT JOIN customers ON account_customerId = customer_id " - . "WHERE account_id = " . (int)$this->accountId . " LIMIT 1"; - - $queryRes = DB::getResults($query, __FUNCTION__); - - if ($queryRes === false) { - return false; - } - - $this->accountUserId = $queryRes->account_userId; - $this->accountUserGroupId = $queryRes->account_userGroupId; - $this->accountOtherUserEdit = $queryRes->account_otherUserEdit; - $this->accountOtherGroupEdit = $queryRes->account_otherGroupEdit; - $this->accountModHash = $queryRes->modHash; - - return $queryRes; + return DB::getQuery($query, __FUNCTION__, $data); } /** @@ -507,14 +506,17 @@ class SP_Account } } - $query = "SELECT " . implode(',', $params) . " " - . "FROM accounts " - . "LEFT JOIN usrGroups ug ON account_userGroupId = usergroup_id " - . "LEFT JOIN usrData u1 ON account_userId = u1.user_id " - . "LEFT JOIN usrData u2 ON account_userEditId = u2.user_id " - . "LEFT JOIN customers ON account_customerId = customer_id " - . "WHERE account_id = " . (int)$this->accountId . " LIMIT 1"; - $queryRes = DB::getResults($query, __FUNCTION__); + $query = 'SELECT ' . implode(',', $params) . ' ' + . 'FROM accounts ' + . 'LEFT JOIN usrGroups ug ON account_userGroupId = usergroup_id ' + . 'LEFT JOIN usrData u1 ON account_userId = u1.user_id ' + . 'LEFT JOIN usrData u2 ON account_userEditId = u2.user_id ' + . 'LEFT JOIN customers ON account_customerId = customer_id ' + . 'WHERE account_id = :id LIMIT 1'; + + $data['id'] = $this->accountId; + + $queryRes = DB::getResults($query, __FUNCTION__, $data); if ($queryRes === false) { return false; @@ -527,6 +529,113 @@ class SP_Account 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 object|false + */ + public function getAccountPass($isHistory = false) + { + if (!$isHistory) { + $query = 'SELECT account_name AS name,' + . 'account_userId AS userId,' + . 'account_userGroupId AS groupId,' + . 'account_login AS login,' + . 'account_pass AS pass,' + . 'account_IV AS iv,' + . 'customer_name ' + . 'FROM accounts ' + . 'LEFT JOIN customers ON account_customerId = customer_id ' + . 'WHERE account_id = :id LIMIT 1'; + } else { + $query = 'SELECT acchistory_name AS name,' + . 'acchistory_userId AS userId,' + . 'acchistory_userGroupId AS groupId,' + . 'acchistory_login AS login,' + . 'acchistory_pass AS pass,' + . 'acchistory_IV AS iv,' + . 'customer_name ' + . 'FROM accHistory ' + . 'LEFT JOIN customers ON acchistory_customerId = customer_id ' + . 'WHERE acchistory_id = :id LIMIT 1'; + } + + $data['id'] = $this->accountId; + + $queryRes = DB::getResults($query, __FUNCTION__, $data); + + if ($queryRes === false) { + return false; + } + + $this->accountUserId = $queryRes->userId; + $this->accountUserGroupId = $queryRes->groupId; + $this->accountPass = $queryRes->pass; + $this->accountIV = $queryRes->iv; + + return $queryRes; + } + + /** + * Obtener los datos de una cuenta. + * Esta funcion realiza la consulta a la BBDD y guarda los datos en las variables de la clase. + * + * @return object|false + */ + public function getAccount() + { + $query = 'SELECT account_id,' + . 'account_name,' + . 'account_categoryId,' + . 'account_userId,' + . 'account_customerId,' + . 'account_userGroupId,' + . 'account_userEditId,' + . 'category_name,' + . 'account_login,' + . 'account_url,' + . 'account_pass,' + . 'account_IV,' + . 'account_notes,' + . 'account_countView,' + . 'account_countDecrypt,' + . 'account_dateAdd,' + . 'account_dateEdit,' + . 'BIN(account_otherUserEdit) AS account_otherUserEdit,' + . 'BIN(account_otherGroupEdit) AS account_otherGroupEdit,' + . 'u1.user_name,' + . 'u1.user_login,' + . 'u2.user_name as user_editName,' + . 'u2.user_login as user_editLogin,' + . 'usergroup_name,' + . 'customer_name, ' + . 'CONCAT(account_name,account_categoryId,account_customerId,account_login,account_url,account_notes,BIN(account_otherUserEdit),BIN(account_otherGroupEdit)) as modHash ' + . 'FROM accounts ' + . 'LEFT JOIN categories ON account_categoryId = category_id ' + . 'LEFT JOIN usrGroups ug ON account_userGroupId = usergroup_id ' + . 'LEFT JOIN usrData u1 ON account_userId = u1.user_id ' + . 'LEFT JOIN usrData u2 ON account_userEditId = u2.user_id ' + . 'LEFT JOIN customers ON account_customerId = customer_id ' + . 'WHERE account_id = :id LIMIT 1'; + + $data['id'] = $this->accountId; + + $queryRes = DB::getResults($query, __FUNCTION__, $data); + + if ($queryRes === false) { + return false; + } + + $this->accountUserId = $queryRes->account_userId; + $this->accountUserGroupId = $queryRes->account_userGroupId; + $this->accountOtherUserEdit = $queryRes->account_otherUserEdit; + $this->accountOtherGroupEdit = $queryRes->account_otherGroupEdit; + $this->accountModHash = $queryRes->modHash; + + return $queryRes; + } + /** * Crea una nueva cuenta en la BBDD * @@ -534,22 +643,35 @@ class SP_Account */ public function createAccount() { - $query = "INSERT INTO accounts SET " - . "account_customerId = " . (int)$this->accountCustomerId . "," - . "account_categoryId = " . (int)$this->accountCategoryId . "," - . "account_name = '" . DB::escape($this->accountName) . "'," - . "account_login = '" . DB::escape($this->accountLogin) . "'," - . "account_url = '" . DB::escape($this->accountUrl) . "'," - . "account_pass = '$this->accountPass'," - . "account_IV = '" . DB::escape($this->accountIV) . "'," - . "account_notes = '" . DB::escape($this->accountNotes) . "'," - . "account_dateAdd = NOW()," - . "account_userId = " . (int)$this->accountUserId . "," - . "account_userGroupId = " . (int)$this->accountUserGroupId . "," - . "account_otherUserEdit = " . (int)$this->accountOtherUserEdit . "," - . "account_otherGroupEdit = " . (int)$this->accountOtherGroupEdit; + $query = 'INSERT INTO accounts SET ' + . 'account_customerId = :accountCustomerId,' + . 'account_categoryId = :accountCategoryId,' + . 'account_name = :accountName,' + . 'account_login = :accountLogin,' + . 'account_url = :accountUrl,' + . 'account_pass = :accountPass,' + . 'account_IV = :accountIV,' + . 'account_notes = :accountNotes,' + . 'account_dateAdd = NOW(),' + . 'account_userId = :accountUserId,' + . 'account_userGroupId = :accountUserGroupId,' + . 'account_otherUserEdit = :accountOtherUserEdit,' + . 'account_otherGroupEdit = :accountOtherGroupEdit'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['accountCustomerId'] = $this->accountCustomerId; + $data['accountCategoryId'] = $this->accountCategoryId; + $data['accountName'] = $this->accountName; + $data['accountLogin'] = $this->accountLogin; + $data['accountUrl'] = $this->accountUrl; + $data['accountPass'] = $this->accountPass; + $data['accountIV'] = $this->accountIV; + $data['accountNotes'] = $this->accountNotes; + $data['accountUserId'] = $this->accountUserId; + $data['accountUserGroupId'] = $this->accountUserGroupId; + $data['accountOtherUserEdit'] = $this->accountOtherUserEdit; + $data['accountOtherGroupEdit'] = $this->accountOtherGroupEdit; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } @@ -557,7 +679,7 @@ class SP_Account $message['action'] = __FUNCTION__; - if ( is_array($this->accountUserGroupsId) ){ + if (is_array($this->accountUserGroupsId)) { if (!SP_Groups::addGroupsForAccount($this->accountId, $this->accountUserGroupsId)) { $message['text'][] = _('Error al actualizar los grupos secundarios'); SP_Log::wrLogInfo($message); @@ -565,7 +687,7 @@ class SP_Account } } - if ( is_array($this->accountUsersId) ){ + if (is_array($this->accountUsersId)) { if (!SP_Users::addUsersForAccount($this->accountId, $this->accountUsersId)) { $message['text'][] = _('Error al actualizar los usuarios de la cuenta'); SP_Log::wrLogInfo($message); @@ -577,8 +699,8 @@ class SP_Account $this->getAccountInfoById($accountInfo); $message['action'] = _('Nueva Cuenta'); - $message['text'][] = SP_Html::strongText(_('Cliente') . ": ") . $this->cacheParams['customer_name']; - $message['text'][] = SP_Html::strongText(_('Cuenta') . ": ") . "$this->accountName ($this->accountId)"; + $message['text'][] = SP_Html::strongText(_('Cliente') . ': ') . $this->cacheParams['customer_name']; + $message['text'][] = SP_Html::strongText(_('Cuenta') . ': ') . "$this->accountName ($this->accountId)"; SP_Log::wrLogInfo($message); SP_Common::sendEmail($message); @@ -600,13 +722,14 @@ class SP_Account $this->getAccountInfoById($accountInfo); $message['action'] = _('Eliminar Cuenta'); - $message['text'][] = SP_Html::strongText(_('Cliente') . ": ") . $this->cacheParams['customer_name']; - $message['text'][] = SP_Html::strongText(_('Cuenta') . ": ") . $this->cacheParams['account_name'] . " ($this->accountId)"; + $message['text'][] = SP_Html::strongText(_('Cliente') . ': ') . $this->cacheParams['customer_name']; + $message['text'][] = SP_Html::strongText(_('Cuenta') . ': ') . $this->cacheParams['account_name'] . " ($this->accountId)"; - $query = "DELETE FROM accounts " - . "WHERE account_id = " . (int)$this->accountId . " LIMIT 1"; + $query = 'DELETE FROM accounts WHERE account_id = :id LIMIT 1'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['id'] = $this->accountId; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } @@ -635,18 +758,22 @@ class SP_Account */ public function getAccountHistoryList() { - $query = "SELECT acchistory_id," - . "acchistory_dateEdit," - . "u1.user_login as user_edit," - . "u2.user_login as user_add," - . "acchistory_dateAdd " - . "FROM accHistory " - . "LEFT JOIN usrData u1 ON acchistory_userEditId = u1.user_id " - . "LEFT JOIN usrData u2 ON acchistory_userId = u2.user_id " - . "WHERE acchistory_accountId = " . $_SESSION["accParentId"] . " " - . "ORDER BY acchistory_id DESC"; + $query = 'SELECT acchistory_id,' + . 'acchistory_dateEdit,' + . 'u1.user_login as user_edit,' + . 'u2.user_login as user_add,' + . 'acchistory_dateAdd ' + . 'FROM accHistory ' + . 'LEFT JOIN usrData u1 ON acchistory_userEditId = u1.user_id ' + . 'LEFT JOIN usrData u2 ON acchistory_userId = u2.user_id ' + . 'WHERE acchistory_accountId = :id ' + . 'ORDER BY acchistory_id DESC'; - $queryRes = DB::getResults($query, __FUNCTION__, true); + $data['id'] = $_SESSION["accParentId"]; + + DB::setReturnArray(); + + $queryRes = DB::getResults($query, __FUNCTION__, $data); if ($queryRes === false) { return false; @@ -655,10 +782,11 @@ class SP_Account $arrHistory = array(); foreach ($queryRes as $history) { - if ($history->acchistory_dateEdit == '0000-00-00 00:00:00') { - $arrHistory[$history->acchistory_id] = $history->acchistory_dateAdd . " - " . $history->user_add; + // Comprobamos si la entrada en el historial es la primera (no tiene editor ni fecha de edición) + if ($history->acchistory_dateEdit === null || $history->acchistory_dateEdit == '0000-00-00 00:00:00') { + $arrHistory[$history->acchistory_id] = $history->acchistory_dateAdd . ' - ' . $history->user_add; } else { - $arrHistory[$history->acchistory_id] = $history->acchistory_dateEdit . " - " . $history->user_edit; + $arrHistory[$history->acchistory_id] = $history->acchistory_dateEdit . ' - ' . $history->user_edit; } } @@ -672,15 +800,11 @@ class SP_Account */ public function incrementViewCounter() { - $query = "UPDATE accounts " - . "SET account_countView = (account_countView + 1) " - . "WHERE account_id = " . (int)$this->accountId; + $query = 'UPDATE accounts SET account_countView = (account_countView + 1) WHERE account_id = :id LIMIT 1'; - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } + $data['id'] = $this->accountId; - return true; + return DB::getQuery($query, __FUNCTION__, $data); } /** @@ -690,14 +814,11 @@ class SP_Account */ public function incrementDecryptCounter() { - $query = "UPDATE accounts SET account_countDecrypt = (account_countDecrypt + 1) " - . "WHERE account_id = " . (int)$this->accountId; + $query = 'UPDATE accounts SET account_countDecrypt = (account_countDecrypt + 1) WHERE account_id = :id LIMIT 1'; - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } + $data['id'] = $this->accountId; - return true; + return DB::getQuery($query, __FUNCTION__, $data); } /** @@ -712,18 +833,25 @@ class SP_Account $userIsAdminApp = $_SESSION['uisadminapp']; $userIsAdminAcc = $_SESSION['uisadminacc']; + $data = null; + if (!$userIsAdminApp && !$userIsAdminAcc) { - $query = "SELECT COUNT(DISTINCT account_id) as numacc " - . "FROM accounts " - . "LEFT JOIN accGroups ON account_id = accgroup_accountId " - . "WHERE account_userGroupId = " . (int)$userGroupId . " " - . "OR account_userId = " . (int)$userId . " " - . "OR accgroup_groupId = " . (int)$userGroupId; + $query = 'SELECT COUNT(DISTINCT account_id) as numacc ' + . 'FROM accounts ' + . 'LEFT JOIN accGroups ON account_id = accgroup_accountId ' + . 'WHERE account_userGroupId = :userGroupId ' + . 'OR account_userId = :userId ' + . 'OR accgroup_groupId = :groupId'; + + $data['userGroupId'] = $userGroupId; + $data['groupId'] = $userGroupId; + $data['userId'] = $userId; + } else { - $query = "SELECT COUNT(account_id) as numacc FROM accounts"; + $query = "SELECT COUNT(*) as numacc FROM accounts"; } - $queryRes = DB::getResults($query, __FUNCTION__); + $queryRes = DB::getResults($query, __FUNCTION__, $data); if ($queryRes === false) { return false; @@ -736,13 +864,13 @@ class SP_Account * 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 $newMasterPass con la nueva clave maestra * @return bool */ public function updateAllAccountsMPass($currentMasterPass, $newMasterPass) { $accountsOk = array(); - $userId = $_SESSION["uid"]; + $userId = $_SESSION['uid']; $errorCount = 0; $demoEnabled = SP_Util::demoIsEnabled(); @@ -778,6 +906,12 @@ class SP_Account continue; } + if (strlen($account->account_IV) < 32){ + $errorCount++; + $message['text'][] = _('IV de encriptación incorrecto') . " (" . $account->account_id . ")"; + continue; + } + $decryptedPass = SP_Crypt::getDecrypt($account->account_pass, $currentMasterPass, $account->account_IV); $this->accountPass = SP_Crypt::mkEncrypt($decryptedPass, $newMasterPass); $this->accountIV = SP_Crypt::$strInitialVector; @@ -789,8 +923,10 @@ class SP_Account if (!$this->updateAccountPass(true)) { $errorCount++; - $message['text'][] = _('Fallo al actualizar la clave de la cuenta') . "(" . $this->accountId . ")"; + $message['text'][] = _('Fallo al actualizar la clave de la cuenta') . '(' . $this->accountId . ')'; + continue; } + $accountsOk[] = $this->accountId; } @@ -801,7 +937,7 @@ class SP_Account } if ($accountsOk) { - $message['text'][] = _('Cuentas actualizadas:') . ": " . implode(',', $accountsOk); + $message['text'][] = _('Cuentas actualizadas') . ': ' . implode(',', $accountsOk); SP_Log::wrLogInfo($message); $message['text'] = array(); } @@ -824,17 +960,9 @@ class SP_Account */ private function getAccountsPassData() { - $query = "SELECT account_id," - . "account_pass," - . "account_IV " - . "FROM accounts"; - $queryRes = DB::getResults($query, __FUNCTION__, true); + $query = 'SELECT account_id, account_pass, account_IV FROM accounts'; - if ($queryRes === false) { - return false; - } - - return $queryRes; + return DB::getResults($query, __FUNCTION__); } /** @@ -858,14 +986,20 @@ class SP_Account } } - $query = "UPDATE accounts SET " - . "account_pass = '" . DB::escape($this->accountPass) . "'," - . "account_IV = '" . DB::escape($this->accountIV) . "'," - . "account_userEditId = " . (int)$this->accountUserEditId . "," - . "account_dateEdit = NOW() " - . "WHERE account_id = " . (int)$this->accountId; + $query = 'UPDATE accounts SET ' + . 'account_pass = :accountPass,' + . 'account_IV = :accountIV,' + . 'account_userEditId = :accountUserEditId,' + . 'account_dateEdit = NOW() ' + . 'WHERE account_id = :accountId'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['accountPass'] = $this->accountPass; + $data['accountIV'] = $this->accountIV; + $data['accountUserEditId'] = $this->accountUserEditId; + $data['accountId'] = $this->accountId; + + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } @@ -876,8 +1010,8 @@ class SP_Account $this->getAccountInfoById($accountInfo); $message['action'] = _('Modificar Clave'); - $message['text'][] = SP_Html::strongText(_('Cliente') . ": ") . $this->cacheParams['customer_name']; - $message['text'][] = SP_Html::strongText(_('Cuenta') . ": ") . $this->cacheParams['account_name'] . " ($this->accountId)"; + $message['text'][] = SP_Html::strongText(_('Cliente') . ': ') . $this->cacheParams['customer_name']; + $message['text'][] = SP_Html::strongText(_('Cuenta') . ': ') . $this->cacheParams['account_name'] . " ($this->accountId)"; SP_Log::wrLogInfo($message); SP_Common::sendEmail($message); @@ -890,8 +1024,8 @@ class SP_Account * 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 + * @param string $newMasterPass con la nueva clave maestra + * @param string $newHash con el nuevo hash de la clave maestra * @return bool */ public function updateAllAccountsHistoryMPass($currentMasterPass, $newMasterPass, $newHash) @@ -931,7 +1065,13 @@ class SP_Account if (!$this->checkAccountMPass($account->acchistory_id)) { $errorCount++; - $message['text'][] = _('La clave maestra del registro no coincide') . " (" . $account->acchistory_id . ")"; + $message['text'][] = _('La clave maestra del registro no coincide') . ' (' . $account->acchistory_id . ')'; + continue; + } + + if (strlen($account->acchistory_IV) < 32){ + $errorCount++; + $message['text'][] = _('IV de encriptación incorrecto') . ' (' . $account->acchistory_id . ')'; continue; } @@ -947,7 +1087,8 @@ class SP_Account if (!$this->updateAccountHistoryPass($account->acchistory_id, $newHash)) { $errorCount++; - $message['text'][] = _('Fallo al actualizar la clave del histórico') . " (" . $account->acchistory_id . ")"; + $message['text'][] = _('Fallo al actualizar la clave del histórico') . ' (' . $account->acchistory_id . ')'; + continue; } $idOk[] = $account->acchistory_id; @@ -960,7 +1101,7 @@ class SP_Account } if ($idOk) { - $message['text'][] = _('Registros actualizados:') . ": " . implode(',', $idOk); + $message['text'][] = _('Registros actualizados') . ': ' . implode(',', $idOk); SP_Log::wrLogInfo($message); $message['text'] = array(); } @@ -982,17 +1123,11 @@ class SP_Account */ private function getAccountsHistoryPassData() { - $query = "SELECT acchistory_id," - . "acchistory_pass," - . "acchistory_IV " - . "FROM accHistory"; - $queryRes = DB::getResults($query, __FUNCTION__, true); + $query = 'SELECT acchistory_id, acchistory_pass, acchistory_IV FROM accHistory'; - if ($queryRes === false) { - return false; - } + DB::setReturnArray(); - return $queryRes; + return DB::getResults($query, __FUNCTION__); } /** @@ -1001,48 +1136,39 @@ class SP_Account * @param int $id opcional, con el Id del registro a comprobar * @return bool */ - public function checkAccountMPass($id = NULL) + public function checkAccountMPass($id = null) { - if (is_null($id)) { - $id = $this->accountId; - } + $query = 'SELECT acchistory_mPassHash ' . + 'FROM accHistory ' . + 'WHERE acchistory_id = :id AND acchistory_mPassHash = :mPassHash'; - $query = "SELECT acchistory_mPassHash " - . "FROM accHistory " - . "WHERE acchistory_id = " . (int)$id; - $queryRes = DB::getResults($query, __FUNCTION__); + $data['id'] = (is_null($id)) ? $this->accountId : $id; + $data['mPassHash'] = SP_Config::getConfigValue('masterPwd'); - if ($queryRes === false) { - return false; - } - - if ($queryRes->acchistory_mPassHash != SP_Config::getConfigValue('masterPwd')) { - return false; - } - - return true; + return (DB::getResults($query, __FUNCTION__, $data) !== false); } /** * Actualiza la clave del histórico de una cuenta en la BBDD. * - * @param int $id con el id del registro a actualizar + * @param int $id con el id del registro a actualizar * @param string $newHash con el hash de la clave maestra * @return bool */ public function updateAccountHistoryPass($id, $newHash) { - $query = "UPDATE accHistory SET " - . "acchistory_pass = '" . DB::escape($this->accountPass) . "'," - . "acchistory_IV = '" . DB::escape($this->accountIV) . "'," - . "acchistory_mPassHash = '" . DB::escape($newHash) . "' " - . "WHERE acchistory_id = " . (int)$id; + $query = 'UPDATE accHistory SET ' + . 'acchistory_pass = :accountPass,' + . 'acchistory_IV = :accountIV,' + . 'acchistory_mPassHash = :newHash ' + . 'WHERE acchistory_id = :id'; - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } + $data['accountPass'] = $this->accountPass; + $data['accountIV'] = $this->accountIV; + $data['newHash'] = $newHash; + $data['id'] = $id; - return true; + return DB::getQuery($query, __FUNCTION__, $data); } /** @@ -1081,19 +1207,19 @@ class SP_Account } } - if ( ! empty($this->accountModHash) ){ - $hashItems = $this->accountModHash.(int)$users.(int)$groups; + if (!empty($this->accountModHash)) { + $hashItems = $this->accountModHash . (int)$users . (int)$groups; //error_log("HASH MySQL: ".$hashItems); - } else{ - $hashItems = $this->accountName. - $this->accountCategoryId. - $this->accountCustomerId. - $this->accountLogin. - $this->accountUrl. - $this->accountNotes. - $this->accountOtherUserEdit. - $this->accountOtherGroupEdit. - (int)$users. + } else { + $hashItems = $this->accountName . + $this->accountCategoryId . + $this->accountCustomerId . + $this->accountLogin . + $this->accountUrl . + $this->accountNotes . + $this->accountOtherUserEdit . + $this->accountOtherGroupEdit . + (int)$users . (int)$groups; //error_log("HASH PHP: ".$hashItems); } @@ -1124,6 +1250,7 @@ class SP_Account /** * Obtiene el listado usuarios con acceso a una cuenta. + * Lo almacena en la cache de sesión como array de cuentas * * @return array Con los registros con id de cuenta como clave e id de usuario como valor */ @@ -1131,33 +1258,25 @@ class SP_Account { $accId = ($this->accountIsHistory && $this->accountParentId) ? $this->accountParentId : $this->accountId; - if (!is_array($this->accountCacheUsersId)) { - //error_log('Users cache MISS'); - $this->accountCacheUsersId = array($accId => array()); - } else { - if (array_key_exists($accId, $this->accountCacheUsersId)) { - //error_log('Users cache HIT'); - return $this->accountCacheUsersId[$accId]; - } + $cacheUsers = &$_SESSION['cache']['usersId']; + + if (!is_array($cacheUsers)) { + $cacheUsers = array($accId => array(), 'expires' => 0); } - //error_log('Users cache MISS '.$accId); - - $users = SP_Users::getUsersForAccount($accId); - - if (!is_array($users)) { - return array(); + if (!isset($cacheUsers[$accId]) + || time() > $cacheUsers['expires']) + { + $cacheUsers[$accId] = SP_Users::getUsersForAccount($accId); + $cacheUsers['expires'] = time() + 300; } - foreach ($users as $user) { - $this->accountCacheUsersId[$accId][] = $user->accuser_userId; - } - - return $this->accountCacheUsersId[$accId]; + return $cacheUsers[$accId]; } /** * Obtiene el listado de grupos secundarios de una cuenta. + * Lo almacena en la cache de sesión como array de cuentas * * @return array con los registros con id de cuenta como clave e id de grupo como valor */ @@ -1165,28 +1284,20 @@ class SP_Account { $accId = ($this->accountIsHistory && $this->accountParentId) ? $this->accountParentId : $this->accountId; - if (!is_array($this->accountCacheUserGroupsId)) { + $cacheUserGroups = &$_SESSION['cache']['userGroupsId']; + + if (!is_array($cacheUserGroups)) { //error_log('Groups cache NO_INIT'); - $this->accountCacheUserGroupsId = array($accId => array()); - } else { - if (array_key_exists($accId, $this->accountCacheUserGroupsId)) { - //error_log('Groups cache HIT'); - return $this->accountCacheUserGroupsId[$accId]; - } + $cacheUserGroups = array($accId => array(), 'expires' => 0); } - //error_log('Groups cache MISS'); - - $groups = SP_Groups::getGroupsForAccount($accId); - - if (!is_array($groups)) { - return array(); + if (!isset($cacheUserGroups[$accId]) + || time() > $cacheUserGroups['expires']) + { + $cacheUserGroups[$accId] = SP_Groups::getGroupsForAccount($accId); + $cacheUserGroups['expires'] = time() + 300; } - foreach ($groups as $group) { - $this->accountCacheUserGroupsId[$accId][] = $group->accgroup_groupId; - } - - return $this->accountCacheUserGroupsId[$accId]; + return $cacheUserGroups[$accId]; } } \ No newline at end of file diff --git a/inc/auth.class.php b/inc/auth.class.php index 7ddef49f..18217f00 100644 --- a/inc/auth.class.php +++ b/inc/auth.class.php @@ -152,22 +152,16 @@ class SP_Auth } } - $query = "SELECT user_login," - . "user_pass " - . "FROM usrData " - . "WHERE user_login = '" . DB::escape($userLogin) . "' " - . "AND user_isMigrate = 0 " - . "AND user_pass = SHA1(CONCAT(user_hashSalt,'" . DB::escape($userPass) . "')) LIMIT 1"; + $query = 'SELECT user_login, user_pass ' + . 'FROM usrData ' + . 'WHERE user_login = :login AND user_isMigrate = 0 ' + . 'AND user_pass = SHA1(CONCAT(user_hashSalt, :pass)) LIMIT 1'; - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } + $data['login'] = $userLogin; + $data['pass'] = $userPass; - if (count(DB::$last_result) == 0) { - return false; - } - - return true; + return (DB::getQuery($query, __FUNCTION__, $data) === true && DB::$last_num_rows === 1); +// return ($db->getFullRowCount($query) === 1); } /** diff --git a/inc/backup.class.php b/inc/backup.class.php index 174a33de..1fb2abdb 100644 --- a/inc/backup.class.php +++ b/inc/backup.class.php @@ -105,10 +105,14 @@ class SP_Backup $sqlOut .= $txtCreate->{'Create Table'} . ';' . PHP_EOL . PHP_EOL; fwrite($handle, $sqlOut); - // Consulta para obtener los registros de la tabla - $queryRes = DB::getResults('SELECT * FROM ' . $tableName, __FUNCTION__, false, true); + DB::setUnbuffered(); - while ($row = $queryRes->fetch_row()) { + // Consulta para obtener los registros de la tabla + $queryRes = DB::getResults('SELECT * FROM ' . $tableName, __FUNCTION__); + + $numColumns = $queryRes->columnCount(); + + while ($row = $queryRes->fetch(PDO::FETCH_NUM)) { fwrite($handle, 'INSERT INTO `' . $tableName . '` VALUES('); $field = 1; @@ -116,10 +120,10 @@ class SP_Backup if (is_numeric($value)) { fwrite($handle, $value); } else { - fwrite($handle, '"' . DB::escape($value) . '"'); + fwrite($handle, DB::escape($value)); } - if ($field < $queryRes->field_count) { + if ($field < $numColumns) { fwrite($handle, ','); } @@ -128,6 +132,8 @@ class SP_Backup fwrite($handle, ');' . PHP_EOL); } fwrite($handle, PHP_EOL . PHP_EOL); + + DB::setUnbuffered(false); } $sqlOut = '--' . PHP_EOL; diff --git a/inc/category.class.php b/inc/category.class.php index b242f1a0..10bdc14a 100644 --- a/inc/category.class.php +++ b/inc/category.class.php @@ -43,20 +43,17 @@ class SP_Category */ public static function getCategoryIdByName($categoryName) { - $query = "SELECT category_id " - . "FROM categories " - . "WHERE category_name = '" . DB::escape($categoryName) . "' LIMIT 1"; - $queryRes = DB::getResults($query, __FUNCTION__); + $query = 'SELECT category_id FROM categories WHERE category_name = :name LIMIT 1'; - if ($queryRes === false) { + $data['name'] = $categoryName; + + $queryRes = DB::getResults($query, __FUNCTION__, $data); + + if ($queryRes === false || DB::$last_num_rows === 0) { return false; } - if (DB::$num_rows == 0) { - return false; - } else { - return $queryRes->category_id; - } + return $queryRes->category_id; } /** @@ -66,11 +63,12 @@ class SP_Category */ public static function addCategory() { - $query = "INSERT INTO categories " - . "SET category_name = '" . DB::escape(self::$categoryName) . "'," - . "category_description = '" . DB::escape(self::$categoryDescription) . "'"; + $query = 'INSERT INTO categories SET category_name = :name ,category_description = :description'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['name'] = self::$categoryName; + $data['description'] = self::$categoryDescription; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } @@ -91,28 +89,20 @@ class SP_Category * @param int $id con el Id de la categoría a consultar * @return bool */ - public static function checkDupCategory($id = NULL) + public static function checkDupCategory($id = null) { if ($id === NULL) { - $query = "SELECT category_id " - . "FROM categories " - . "WHERE category_name = '" . DB::escape(self::$categoryName) . "'"; + $query = 'SELECT category_id FROM categories WHERE category_name = :name'; } else { - $query = "SELECT category_id " - . "FROM categories " - . "WHERE category_name = '" . DB::escape(self::$categoryName) . "' AND category_id <> " . $id; + $query = 'SELECT category_id FROM categories WHERE category_name = :name AND category_id <> :id'; + + $data['id'] = $id; } - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } + $data['name'] = self::$categoryName; - if (count(DB::$last_result) >= 1) { - return false; - } - - return true; + return (DB::getQuery($query, __FUNCTION__, $data) === false || DB::$last_num_rows >= 1); } /** @@ -125,10 +115,11 @@ class SP_Category { $categoryName = self::getCategoryNameById($id); - $query = "DELETE FROM categories " - . "WHERE category_id = " . (int)$id . " LIMIT 1"; + $query = 'DELETE FROM categories WHERE category_id = :id LIMIT 1'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['id'] = $id; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } @@ -149,10 +140,11 @@ class SP_Category */ public static function getCategoryNameById($id) { - $query = "SELECT category_name " - . "FROM categories " - . "WHERE category_id = " . (int)$id; - $queryRes = DB::getResults($query, __FUNCTION__); + $query = 'SELECT category_name FROM categories WHERE category_id = :id LIMIT 1'; + + $data['id'] = $id; + + $queryRes = DB::getResults($query, __FUNCTION__, $data); if ($queryRes === false) { return false; @@ -171,12 +163,15 @@ class SP_Category { $categoryName = self::getCategoryNameById($id); - $query = "UPDATE categories " - . "SET category_name = '" . DB::escape(self::$categoryName) . "'," - . "category_description = '" . DB::escape(self::$categoryDescription) . "' " - . "WHERE category_id = " . (int)$id . " LIMIT 1"; + $query = 'UPDATE categories ' + . 'SET category_name = :name, category_description = :description ' + . 'WHERE category_id = :id LIMIT 1'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['name'] = self::$categoryName; + $data['description'] = self::$categoryDescription; + $data['id'] = $id; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } @@ -223,20 +218,22 @@ class SP_Category * @param bool $retAssocArray para devolver un array asociativo * @return array con en id de categorioa como clave y en nombre como valor */ - public static function getCategories($id = NULL, $retAssocArray = false) + public static function getCategories($id = null, $retAssocArray = false) { - $query = "SELECT category_id," - . "category_name," - . "category_description " - . "FROM categories "; + $query = 'SELECT category_id, category_name,category_description FROM categories '; + + $data = null; if (!is_null($id)) { - $query .= "WHERE category_id = " . (int)$id . " LIMIT 1"; + $query .= "WHERE category_id = :id LIMIT 1"; + $data['id'] = $id; } else { $query .= "ORDER BY category_name"; } - $queryRes = DB::getResults($query, __FUNCTION__, true); + DB::setReturnArray(); + + $queryRes = DB::getResults($query, __FUNCTION__, $data); if ($queryRes === false) { return array(); @@ -286,17 +283,13 @@ class SP_Category */ private static function getCategoriesInAccounts($id) { - $query = "SELECT COUNT(*) as uses " - . "FROM accounts " - . "WHERE account_categoryId = " . (int)$id; + $query = 'SELECT account_id FROM accounts WHERE account_categoryId = :id'; - $queryRes = DB::getResults($query, __FUNCTION__); + $data['id'] = $id; - if ($queryRes === false) { - return false; - } - - return $queryRes->uses; + $db = new DB(); + $db->setParamData($data); + return $db->getFullRowCount($query); } } diff --git a/inc/config.class.php b/inc/config.class.php index 614afeba..ac8c853f 100644 --- a/inc/config.class.php +++ b/inc/config.class.php @@ -2,8 +2,8 @@ /** * sysPass * - * @author nuxsmin - * @link http://syspass.org + * @author nuxsmin + * @link http://syspass.org * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org * * This file is part of sysPass. @@ -56,10 +56,11 @@ class SP_Config */ public static function getConfigValue($param) { - $query = "SELECT config_value " - . "FROM config " - . "WHERE config_parameter = '$param'"; - $queryRes = DB::getResults($query, __FUNCTION__); + $query = 'SELECT config_value FROM config WHERE config_parameter = :parameter LIMIT 1'; + + $data['parameter'] = $param; + + $queryRes = DB::getResults($query, __FUNCTION__, $data); if ($queryRes === false) { return false; @@ -75,10 +76,9 @@ class SP_Config */ public static function getConfig() { - $query = "SELECT config_parameter," - . "config_value " - . "FROM config"; - $queryRes = DB::getResults($query, __FUNCTION__, true); + $query = 'SELECT config_parameter, config_value FROM config'; + + $queryRes = DB::getResults($query, __FUNCTION__); if ($queryRes === false) { return false; @@ -99,21 +99,19 @@ class SP_Config */ public static function writeConfig($mkInsert = false) { - foreach (self::$arrConfigValue as $key => $value) { - $key = DB::escape($key); - $value = DB::escape($value); - + foreach (self::$arrConfigValue as $param => $value) { if ($mkInsert) { - $query = "INSERT INTO config " - . "VALUES ('$key','$value') " - . "ON DUPLICATE KEY UPDATE config_value = '$value' "; + $query = 'INSERT INTO config VALUES (:param,:value) ON DUPLICATE KEY UPDATE config_value = :valuedup'; + + $data['valuedup'] = $value; } else { - $query = "UPDATE config SET " - . "config_value = '$value' " - . "WHERE config_parameter = '$key'"; + $query = 'UPDATE config SET config_value = :value WHERE config_parameter = :param'; } - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['param'] = $param; + $data['value'] = $value; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } } @@ -137,11 +135,15 @@ class SP_Config public static function setConfigValue($param, $value) { $query = "INSERT INTO config " - . "SET config_parameter = '" . DB::escape($param) . "'," - . "config_value = '" . DB::escape($value) . "'" - . "ON DUPLICATE KEY UPDATE config_value = '" . DB::escape($value) . "' "; + . "SET config_parameter = :param," + . "config_value = :value " + . "ON DUPLICATE KEY UPDATE config_value = :valuedup"; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['param'] = $param; + $data['value'] = $value; + $data['valuedup'] = $value; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } @@ -170,10 +172,9 @@ class SP_Config return true; } - $query = "SELECT config_parameter," - . "config_value " - . "FROM config"; - $queryRes = DB::getResults($query, __FUNCTION__, true); + $query = 'SELECT config_parameter, config_value FROM config'; + + $queryRes = DB::getResults($query, __FUNCTION__); if ($queryRes === false) { return false; @@ -196,7 +197,7 @@ class SP_Config /** * Obtiene un valor de configuración desde el archivo config.php * - * @param string $key clave + * @param string $key clave * @param string $default = null valor por defecto * @return string el valor o $default */ @@ -220,7 +221,7 @@ class SP_Config return true; } - $configFile = SP_Init::$SERVERROOT . DIRECTORY_SEPARATOR . 'config'. DIRECTORY_SEPARATOR . 'config.php'; + $configFile = SP_Init::$SERVERROOT . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'config.php'; if (!file_exists($configFile)) { return false; @@ -340,7 +341,7 @@ class SP_Config self::setValue('ldap_userattr', ''); self::setValue('mail_server', ''); self::setValue('mail_from', ''); - self::setValue('site_lang', str_replace('.utf8','',SP_Init::$LANG)); + self::setValue('site_lang', str_replace('.utf8', '', SP_Init::$LANG)); self::setValue('session_timeout', '300'); self::setValue('account_link', 1); self::setValue('account_count', 12); @@ -351,7 +352,7 @@ class SP_Config * Esta función establece el valor y reescribe config.php. Si el archivo * no se puede escribir, devolverá false. * - * @param string $key clave + * @param string $key clave * @param string $value valor * @return bool */ diff --git a/inc/customer.class.php b/inc/customer.class.php index 0d9e774a..6d8b8c6c 100644 --- a/inc/customer.class.php +++ b/inc/customer.class.php @@ -44,11 +44,12 @@ class SP_Customer */ public static function addCustomer() { - $query = "INSERT INTO customers " - . "SET customer_name = '" . DB::escape(self::$customerName) . "'," - . "customer_hash = '" . self::mkCustomerHash() . "'"; + $query = 'INSERT INTO customers SET customer_name = :name,customer_hash = :hash'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['name'] = self::$customerName; + $data['hash'] = self::mkCustomerHash(); + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } @@ -92,12 +93,17 @@ class SP_Customer $customerName = self::getCustomerById($id); $query = "UPDATE customers " - . "SET customer_name = '" . DB::escape(self::$customerName) . "'," - . "customer_description = '" . DB::escape(self::$customerDescription) . "'," - . "customer_hash = '" . self::mkCustomerHash() . "' " - . "WHERE customer_id = " . (int)$id; + . "SET customer_name = :name," + . "customer_description = :description," + . "customer_hash = :hash " + . "WHERE customer_id = :id"; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['name'] = self::$customerName; + $data['description'] = self::$customerDescription; + $data['hash'] = self::mkCustomerHash(); + $data['id'] = $id; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } @@ -120,10 +126,11 @@ class SP_Customer { $customerName = self::getCustomerById($id); - $query = "DELETE FROM customers " - . "WHERE customer_id = " . (int)$id . " LIMIT 1"; + $query = 'DELETE FROM customers WHERE customer_id = :id LIMIT 1'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['id'] = $id; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } @@ -144,10 +151,11 @@ class SP_Customer */ public static function getCustomerById($id) { - $query = "SELECT customer_name " - . "FROM customers " - . "WHERE customer_id = " . (int)$id . " LIMIT 1"; - $queryRes = DB::getResults($query, __FUNCTION__); + $query = 'SELECT customer_name FROM customers WHERE customer_id = :id LIMIT 1'; + + $data['id'] = $id; + + $queryRes = DB::getResults($query, __FUNCTION__, $data); if ($queryRes === false) { return false; @@ -165,24 +173,18 @@ class SP_Customer public static function checkDupCustomer($id = NULL) { if ($id === NULL) { - $query = "SELECT customer_id " - . "FROM customers " - . "WHERE customer_hash = '" . self::mkCustomerHash() . "'"; + $query = 'SELECT customer_id FROM customers WHERE customer_hash = :hash'; } else { - $query = "SELECT customer_id " - . "FROM customers " - . "WHERE customer_hash = '" . self::mkCustomerHash() . "' AND customer_id <> " . $id; + $query = 'SELECT customer_id FROM customers WHERE customer_hash = :hash AND customer_id <> :id'; + + $data['id'] = $id; } - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } + $data['hash'] = self::mkCustomerHash(); - if (count(DB::$last_result) >= 1) { - return false; - } + return (DB::getQuery($query, __FUNCTION__, $data) === false || DB::$last_num_rows >= 1); - return true; +// return ($db->getFullRowCount($query) >= 1); } /** @@ -192,10 +194,11 @@ class SP_Customer */ public static function getCustomerByName() { - $query = "SELECT customer_id " - . "FROM customers " - . "WHERE customer_hash = '" . self::mkCustomerHash() . "' LIMIT 1"; - $queryRes = DB::getResults($query, __FUNCTION__); + $query = 'SELECT customer_id FROM customers WHERE customer_hash = :hash LIMIT 1'; + + $data['hash'] = self::mkCustomerHash(); + + $queryRes = DB::getResults($query, __FUNCTION__, $data); if ($queryRes === false) { return false; @@ -238,20 +241,21 @@ class SP_Customer * @param bool $retAssocArray para devolver un array asociativo * @return array con el id de cliente como clave y el nombre como valor */ - public static function getCustomers($customerId = NULL, $retAssocArray = false) + public static function getCustomers($customerId = null, $retAssocArray = false) { - $query = "SELECT customer_id," - . "customer_name, " - . "customer_description " - . "FROM customers "; + $query = 'SELECT customer_id, customer_name, customer_description FROM customers '; + $data = null; if (!is_null($customerId)) { - $query .= "WHERE customer_id = " . (int)$customerId . " LIMIT 1"; + $query .= "WHERE customer_id = :id LIMIT 1"; + $data['id'] = $customerId; } else { $query .= "ORDER BY customer_name"; } - $queryRes = DB::getResults($query, __FUNCTION__, true); + DB::setReturnArray(); + + $queryRes = DB::getResults($query, __FUNCTION__, $data); if ($queryRes === false) { return array(); @@ -287,20 +291,16 @@ class SP_Customer * Obtener el número de cuentas que usan un cliente. * * @param int $id con el Id del cliente a consultar - * @return false|int con el número total de cuentas + * @return int con el número total de cuentas */ private static function getCustomerInAccounts($id) { - $query = "SELECT COUNT(*) as uses " - . "FROM accounts " - . "WHERE account_customerId = " . (int)$id; + $query = 'SELECT account_id FROM accounts WHERE account_customerId = :id'; - $queryRes = DB::getResults($query, __FUNCTION__); + $data['id'] = $id; - if ($queryRes === false) { - return false; - } + DB::getQuery($query, __FUNCTION__, $data); - return $queryRes->uses; + return DB::$last_num_rows; } } diff --git a/inc/db.class.php b/inc/db.class.php index 468db306..4b7dfdfa 100644 --- a/inc/db.class.php +++ b/inc/db.class.php @@ -3,8 +3,8 @@ /** * sysPass * - * @author nuxsmin - * @link http://syspass.org + * @author nuxsmin + * @link http://syspass.org * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org * * This file is part of sysPass. @@ -26,106 +26,145 @@ defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); +/** + * Class DBConnectionFactory + * + * Esta clase se encarga de crear las conexiones a la BD + */ +class DBConnectionFactory +{ + private static $factory; + private $db; + + public static function getFactory() + { + if (!self::$factory) { +// FIXME +// error_log('NEW FACTORY'); + self::$factory = new DBConnectionFactory(); + } + + return self::$factory; + } + + /** + * Realizar la conexión con la BBDD. + * Esta función utiliza PDO para conectar con la base de datos. + * + * @throws Exception + * @return object|bool + */ + + public function getConnection() + { + if (!$this->db) { +// FIXME +// error_log('NEW DB_CONNECTION'); + $isInstalled = SP_Config::getValue('installed'); + + $dbhost = SP_Config::getValue("dbhost"); + $dbuser = SP_Config::getValue("dbuser"); + $dbpass = SP_Config::getValue("dbpass"); + $dbname = SP_Config::getValue("dbname"); + + if (empty($dbhost) || empty($dbuser) || empty($dbpass) || empty($dbname)) { + if ($isInstalled) { + SP_Init::initError(_('No es posible conectar con la BD'), _('Compruebe los datos de conexión')); + } else { + throw new SPDatabaseException(_('No es posible conectar con la BD'), 1); + } + } + + try { + $dsn = 'mysql:host=' . $dbhost . ';dbname=' . $dbname . ';charset=utf8'; +// $this->db = new PDO($dsn, $dbuser, $dbpass, array(PDO::ATTR_PERSISTENT => true)); + $this->db = new PDO($dsn, $dbuser, $dbpass); + } catch (PDOException $e) { + if ($isInstalled) { + if ($this->db->connect_errno === 1049) { + SP_Config::setValue('installed', '0'); + } + + SP_Init::initError(_('No es posible conectar con la BD'), 'Error ' . $this->db->errorCode() . ': ' . $this->db->errorInfo()); + } else { + throw new SPDatabaseException($e->getMessage(), $e->getCode()); + } + } + } + + $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + return $this->db; + } +} + +/** + * Class SPDatabaseException + * + * Clase para excepciones de BD de sysPass + */ +class SPDatabaseException extends Exception +{ +} + /** * Esta clase es la encargada de realizar las operaciones con la BBDD de sysPass. */ class DB { - static $last_result; - static $affected_rows; - static $lastId; - static $txtError; - static $numError; - static $num_rows; - static $num_fields; - private static $_db; + static $txtError = ''; + static $numError = 0; + static $last_num_rows = 0; + static $lastId = null; + private static $retArray = false; + private static $unbuffered = false; + private static $fullRowCount = false; + + public $num_rows = 0; + public $num_fields = 0; + private $last_result = null; + private $querySource; + + /** + * Datos para el objeto PDOStatement + * + * @var array + */ + private $stData; /** * Comprobar que la base de datos existe. * * @return bool + * @throws SPDatabaseException */ public static function checkDatabaseExist() { - if (!self::connection()) { - return false; - } + try { + $db = DBConnectionFactory::getFactory()->getConnection(); - $query = 'SELECT COUNT(*) ' - . 'FROM information_schema.tables' - . " WHERE table_schema='" . SP_Config::getValue("dbname") . "' " - . "AND table_name = 'usrData';"; + $query = 'SELECT COUNT(*) ' + . 'FROM information_schema.tables ' + . 'WHERE table_schema=\'' . SP_Config::getValue("dbname") . '\' ' + . 'AND table_name = \'usrData\''; - $resquery = self::$_db->query($query); - - if ($resquery) { - $row = $resquery->fetch_row(); - } - - if (!$resquery || $row[0] == 0) { - return false; - } - - return true; - } - - /** - * Realizar la conexión con la BBDD. - * Esta función utiliza mysqli para conectar con la base de datos. - * Guarda el objeto creado en la variable $_db de la clase - * - * @return bool - */ - private static function connection() - { - if (is_object(self::$_db)) { - return true; - } - - $isInstalled = SP_Config::getValue('installed'); - - $dbhost = SP_Config::getValue("dbhost"); - $dbuser = SP_Config::getValue("dbuser"); - $dbpass = SP_Config::getValue("dbpass"); - $dbname = SP_Config::getValue("dbname"); - - if (empty($dbhost) || empty($dbuser) || empty($dbpass) || empty($dbname)) { - if ($isInstalled) { - SP_Init::initError(_('No es posible conectar con la BD'), _('Compruebe los datos de conexión')); - } else { - return false; + if ($db->query($query)->fetchColumn() !== 0) { + return true; } + } catch (PDOException $e) { + throw new SPDatabaseException($e->getMessage(), $e->getCode()); } - self::$_db = @new mysqli($dbhost, $dbuser, $dbpass, $dbname); - - if (!is_object(self::$_db) || self::$_db->connect_errno) { - if ($isInstalled) { - if (self::$_db->connect_errno === 1049) { - SP_Config::setValue('installed', '0'); - } - - SP_Init::initError(_('No es posible conectar con la BD'), 'Error ' . self::$_db->connect_errno . ': ' . self::$_db->connect_error); - } else { - return false; - } - } - - if (!self::$_db->set_charset("utf8")) { - SP_Init::initError(_('No es posible conectar con la BD'), 'Error ' . self::$_db->connect_errno . ': ' . self::$_db->connect_error); - } - - return true; + return false; } /** * Obtener los datos para generar un select. * - * @param string $tblName con el nombre de la tabla a cunsultar - * @param string $tblColId con el nombre de la columna del tipo Id a mostrar + * @param string $tblName con el nombre de la tabla a cunsultar + * @param string $tblColId con el nombre de la columna del tipo Id a mostrar * @param string $tblColName con el nombre de la columna del tipo Name a mostrar - * @param array $arrFilter con las columnas a filtrar - * @param array $arrOrder con el orden de las columnas + * @param array $arrFilter con las columnas a filtrar + * @param array $arrOrder con el orden de las columnas * @return false|array con los valores del select con el Id como clave y el nombre como valor */ public static function getValuesForSelect($tblName, $tblColId, $tblColName, $arrFilter = NULL, $arrOrder = NULL) @@ -138,7 +177,9 @@ class DB $strOrder = (is_array($arrOrder)) ? " ORDER BY " . implode(",", $arrOrder) : 'ORDER BY ' . $tblColName . ' ASC'; $query = "SELECT $tblColId, $tblColName FROM $tblName $strFilter $strOrder"; - $queryRes = self::getResults($query, __FUNCTION__, true); + + self::setReturnArray(); + $queryRes = self::getResults($query, __FUNCTION__); if ($queryRes === false) { return false; @@ -153,103 +194,217 @@ class DB return $arrValues; } + public static function setReturnArray() + { + self::$retArray = true; + } + /** * Obtener los resultados de una consulta. * - * @param string $query con la consulta a realizar + * @param string $query con la consulta a realizar * @param string $querySource con el nombre de la función que realiza la consulta - * @param bool $retArray devolver un array si la consulta tiene esultados - * @param bool $unbuffered devolver el resultado registro a registro + * @param array $data con los datos de la consulta * @return bool|array devuelve bool si hay un error. Devuelve array con el array de registros devueltos */ - public static function getResults($query, $querySource, $retArray = false, $unbuffered = false) + public static function getResults($query, $querySource, &$data = null) { - if ($query) { - self::doQuery($query, $querySource, $unbuffered); - } - - if (self::$numError || self::$num_rows === 0) { + if (empty($query)) { + self::resetVars(); return false; } - if (is_null(self::$numError) && count(self::$last_result) === 0) { - return true; + try { + $db = new DB(); + $db->querySource = $querySource; + $db->stData = $data; + $doQuery = $db->doQuery($query, $querySource, self::$unbuffered); + } catch (SPDatabaseException $e) { + $db->logDBException($query, $e->getMessage(), $e->getCode()); + return false; } - if ($retArray === true && is_object(self::$last_result)) { - return array(self::$last_result); + if (self::$unbuffered && is_object($doQuery) && get_class($doQuery) == "PDOStatement"){ + return $doQuery; } - return self::$last_result; + DB::$last_num_rows = (self::$fullRowCount === false) ? $db->num_rows : $db->getFullRowCount($query); + + if ($db->num_rows == 0) { + self::resetVars(); + return false; + } + + if ($db->num_rows == 1 && self::$retArray === false) { + self::resetVars(); + return $db->last_result[0]; + } + + self::resetVars(); + return $db->last_result; } /** * Realizar una consulta a la BBDD. * - * @param string $query con la consulta a realizar + * @param string $query con la consulta a realizar * @param string $querySource con el nombre de la función que realiza la consulta - * @param bool $unbuffered realizar la consulta para obtener registro a registro + * @param bool $unbuffered realizar la consulta para obtener registro a registro * @return false|int devuelve bool si hay un error. Devuelve int con el número de registros + * @throws SPDatabaseException */ - public static function doQuery($query, $querySource, $unbuffered = false) + public function doQuery(&$query, $querySource, $unbuffered = false) { - if (!self::connection()) { - return false; - } - - $isSelect = preg_match("/^.*(select|show)\s/i", $query); + $isSelect = preg_match("/^(select|show)\s/i", $query); // Limpiar valores de caché y errores - self::$last_result = array(); - self::$numError = 0; - self::$txtError = ''; + $this->last_result = array(); - // Comprobamos si la consulta debe de ser devuelta completa o por registro - if (!$unbuffered) { - $queryRes = self::$_db->query($query); - } else { - $queryRes = self::$_db->real_query($query); - } - - if (!$queryRes) { - self::$numError = self::$_db->errno; - self::$txtError = self::$_db->error; - - $message['action'] = $querySource; - $message['text'][] = self::$_db->error . '(' . self::$_db->errno . ')'; - $message['text'][] = "SQL: " . self::escape($query); - - SP_Log::wrLogInfo($message); - return false; + try { + $queryRes = $this->prepareQueryData($query); + } catch (SPDatabaseException $e) { + throw new SPDatabaseException($e->getMessage(), $e->getCode()); } if ($isSelect) { - //self::$num_rows = $queryRes->num_rows; - self::$num_rows = self::$_db->affected_rows; - if (!$unbuffered) { - self::$num_fields = self::$_db->field_count; - - if (self::$num_rows === 1) { - self::$last_result = @$queryRes->fetch_object(); - } else { - $num_row = 0; - - while ($row = @$queryRes->fetch_object()) { - self::$last_result[$num_row] = $row; - $num_row++; - } - } - - $queryRes->close(); - } else { - self::$last_result = self::$_db->use_result(); + $this->num_fields = $queryRes->columnCount(); + $this->last_result = $queryRes->fetchAll(PDO::FETCH_OBJ); + } else{ + return $queryRes; } + + $queryRes->closeCursor(); + +// $this->num_rows = $this->getFullRowCount($query); + $this->num_rows = count($this->last_result); + +// return $this->num_rows; + } + } + + /** + * Asociar los parámetros de la consulta utilizando el tipo adecuado + * + * @param &$query + * @param $isCount + * @return bool + * @throws SPDatabaseException + */ + private function prepareQueryData(&$query, $isCount = false) + { + if ($isCount === true) { + // No incluimos en el array de parámetros de posición los valores + // utilizados para LIMIT + preg_match_all('/(\?|:)/', $query, $count); + + // Indice a partir del cual no se incluyen valores + $paramMaxIndex = (count($count[1]) > 0) ? count($count[1]) : 0; } - self::$lastId = self::$_db->insert_id; + try { + $db = DBConnectionFactory::getFactory()->getConnection(); - return self::$num_rows; + if (is_array($this->stData)) { + $sth = $db->prepare($query); + $paramIndex = 0; + + foreach ($this->stData as $param => $value) { + // Si la clave es un número utilizamos marcadores de posición "?" en + // la consulta. En caso contrario marcadores de nombre + $param = (is_int($param)) ? $param + 1 : ':' . $param; + + if ($isCount === true && count($count) > 0 && $paramIndex >= $paramMaxIndex) { + continue; + } + + if ($param == 'blobcontent'){ + $sth->bindValue($param, $value, PDO::PARAM_LOB); + } elseif (is_int($value)) { + //error_log("INT: " . $param . " -> " . $value); + $sth->bindValue($param, $value, PDO::PARAM_INT); + } else { + //error_log("STR: " . $param . " -> " . $value); + $sth->bindValue($param, $value, PDO::PARAM_STR); + } + + $paramIndex++; + } + + $sth->execute(); + } else { + $sth = $db->query($query); + } + + DB::$lastId = $db->lastInsertId(); + + return $sth; + } catch (PDOException $e) { + error_log("Exception: " . $e->getMessage()); + throw new SPDatabaseException($e->getMessage()); + } + + return false; + } + + /** + * Obtener el número de filas de una consulta realizada + * + * @return int Número de files de la consulta + * @throws SPDatabaseException + */ + public function getFullRowCount(&$query) + { + if (empty($query)) { + return 0; + } + + $patterns = array('/(LIMIT|ORDER BY).*/i', '/SELECT.*FROM/i'); + $replace = array('', 'SELECT COUNT(*) FROM'); + + $query = preg_replace($patterns, $replace, $query); + + try { + $db = DBConnectionFactory::getFactory()->getConnection(); + + if (!is_array($this->stData)) { + $queryRes = $db->query($query); + $num = intval($queryRes->fetchColumn()); + } else { + if ($queryRes = $this->prepareQueryData($query, true)) { + $num = intval($queryRes->fetchColumn()); + } + } + + // FIXME + //error_log("numrows: " . $num); + + $queryRes->closeCursor(); + + return $num; + } catch (PDOException $e) { + error_log("Exception: " . $e->getMessage()); + throw new SPDatabaseException($e->getMessage()); + } + + return 0; + } + + /** + * Método para registar los eventos de BD en el log + * + * @param $query + * @param $errorMsg + * @param $errorCode + */ + private function logDBException($query, $errorMsg, $errorCode) + { + $message['action'] = $this->querySource; + $message['text'][] = $errorMsg . '(' . $errorCode . ')'; + $message['text'][] = "SQL: " . DB::escape($query); + + error_log($query); + error_log($errorMsg); } /** @@ -260,10 +415,71 @@ class DB */ public static function escape($str) { - if (self::connection()) { - return self::$_db->real_escape_string(trim($str)); - } else { + try { + $db = DBConnectionFactory::getFactory()->getConnection(); + + return $db->quote(trim($str)); + } catch (SPDatabaseException $e) { return $str; } } + + /** + * Realizar una consulta y devolver el resultado sin datos + * + * @param $query + * @param $querySource + * @param bool $unbuffered + * @return bool + */ + public static function getQuery($query, $querySource, &$data = null, $unbuffered = false) + { + if (empty($query)) { + return false; + } + + try { + $db = new DB(); + $db->querySource = $querySource; + $db->stData = $data; + $db->doQuery($query, $querySource, $unbuffered); + DB::$last_num_rows = $db->num_rows; + } catch (SPDatabaseException $e) { + $db->logDBException($query, $e->getMessage(), $e->getCode()); + + DB::$txtError = $e->getMessage(); + DB::$numError = $e->getCode(); + + return false; + } + + return true; + } + + public static function setUnbuffered($on = true) + { + self::$unbuffered = (bool)$on; + } + + public static function setFullRowCount() + { + self::$fullRowCount = true; + } + + private static function resetVars() + { + self::$unbuffered = false; + self::$fullRowCount = false; + self::$retArray = false; + } + + /** + * Establecer los parámetos de la consulta preparada + * + * @param &$data array Con los datos de los parámetros de la consulta + */ + public function setParamData(&$data) + { + $this->stData = $data; + } } diff --git a/inc/dbstructure.sql b/inc/dbstructure.sql index 5158d8cf..2e7c5e54 100644 --- a/inc/dbstructure.sql +++ b/inc/dbstructure.sql @@ -73,8 +73,8 @@ CREATE TABLE `accHistory` ( `acchistory_isModify` bit(1) DEFAULT NULL, `acchistory_isDeleted` bit(1) DEFAULT NULL, `acchistory_mPassHash` varbinary(128) NOT NULL, - `accHistory_otherUserEdit` bit(1) DEFAULT NULL, - `accHistory_otherGroupEdit` varchar(45) DEFAULT 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=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; diff --git a/inc/files.class.php b/inc/files.class.php index 3c35bad6..36738e69 100644 --- a/inc/files.class.php +++ b/inc/files.class.php @@ -38,17 +38,24 @@ class SP_Files * @param array $fileData con los datos y el contenido del archivo * @return bool */ - public static function fileUpload($accountId, $fileData = array()) + public static function fileUpload($accountId, &$fileData = array()) { $query = "INSERT INTO accFiles " - . "SET accfile_accountId = " . (int)$accountId . "," - . "accfile_name = '" . DB::escape($fileData['name']) . "'," - . "accfile_type = '" . $fileData['type'] . "'," - . "accfile_size = '" . $fileData['size'] . "'," - . "accfile_content = '" . DB::escape($fileData['content']) . "'," - . "accfile_extension = '" . DB::escape($fileData['extension']) . "'"; + . "SET accfile_accountId = :accountId," + . "accfile_name = :name," + . "accfile_type = :type," + . "accfile_size = :size," + . "accfile_content = :blobcontent," + . "accfile_extension = :extension"; - if (DB::doQuery($query, __FUNCTION__) !== false) { + $data['accountId'] = $accountId; + $data['name'] = $fileData['name']; + $data['type'] = $fileData['type']; + $data['size'] = $fileData['size']; + $data['blobcontent'] = $fileData['content']; + $data['extension'] = $fileData['extension']; + + if (DB::getQuery($query, __FUNCTION__, $data) === true) { $message['action'] = _('Subir Archivo'); $message['text'][] = _('Cuenta') . ": " . $accountId; $message['text'][] = _('Archivo') . ": " . $fileData['name']; @@ -74,19 +81,11 @@ class SP_Files public static function fileDownload($fileId) { // Obtenemos el archivo de la BBDD - $query = "SELECT * FROM accFiles " - . "WHERE accfile_id = " . (int)$fileId . " LIMIT 1"; - $queryRes = DB::getResults($query, __FUNCTION__); + $query = 'SELECT * FROM accFiles WHERE accfile_id = :id LIMIT 1'; - if ($queryRes === false) { - return false; - } + $data['id'] = $fileId; - if (DB::$num_rows == 0) { - return false; - } - - return $queryRes; + return DB::getResults($query, __FUNCTION__, $data); } /** @@ -100,11 +99,11 @@ class SP_Files $fileInfo = self::getFileInfo($fileId); // Eliminamos el archivo de la BBDD - $query = "DELETE FROM accFiles " - . "WHERE accfile_id = " . (int)$fileId . " LIMIT 1"; - $queryRes = DB::doQuery($query, __FUNCTION__); + $query = 'DELETE FROM accFiles WHERE accfile_id = :id LIMIT 1'; - if ($queryRes !== false) { + $data['id'] = $fileId; + + if (DB::getQuery($query, __FUNCTION__, $data) === true) { $message['action'] = _('Eliminar Archivo'); $message['text'][] = _('ID') . ": " . $fileId; $message['text'][] = _('Archivo') . ": " . $fileInfo->accfile_name; @@ -132,17 +131,11 @@ class SP_Files . "accfile_size," . "accfile_type " . "FROM accFiles " - . "WHERE accfile_id = " . (int)$fileId . " LIMIT 1"; - $queryRes = DB::getResults($query, __FUNCTION__); + . "WHERE accfile_id = :id LIMIT 1"; - if ($queryRes === false) { - return false; - } + $data['id'] = $fileId; - if (DB::$num_rows === 0) { - echo _('El archivo no existe'); - return false; - } + $queryRes = DB::getResults($query, __FUNCTION__, $data); return $queryRes; } @@ -159,8 +152,13 @@ class SP_Files . "accfile_name," . "accfile_size " . "FROM accFiles " - . "WHERE accfile_accountId = " . (int)$accountId; - $queryRes = DB::getResults($query, __FUNCTION__, true); + . "WHERE accfile_accountId = :id"; + + $data['id'] = $accountId; + + DB::setReturnArray(); + + $queryRes = DB::getResults($query, __FUNCTION__, $data); if ($queryRes === false) { return false; @@ -183,20 +181,18 @@ class SP_Files * Obtener el número de archivo de una cuenta. * * @param int $accountId con el Id de la cuenta - * @return false|int con el número de archivos + * @return int con el número de archivos */ public static function countFiles($accountId) { // Obtenemos los archivos de la BBDD para dicha cuenta - $query = "SELECT accfile_id " - . "FROM accFiles " - . "WHERE accfile_accountId = " . (int)$accountId; + $query = 'SELECT accfile_id FROM accFiles WHERE accfile_accountId = :id'; - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } + $data['id'] = $accountId; - return count(DB::$last_result); + DB::getQuery($query, __FUNCTION__, $data); + + return DB::$last_num_rows; } @@ -208,13 +204,10 @@ class SP_Files */ public static function deleteAccountFiles($accountId) { - $query = "DELETE FROM accFiles " - . "WHERE accfile_accountId = " . (int)$accountId; + $query = 'DELETE FROM accFiles WHERE accfile_accountId = :id'; - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } + $data['id'] = $accountId; - return true; + return DB::getQuery($query, __FUNCTION__, $data); } } \ No newline at end of file diff --git a/inc/groups.class.php b/inc/groups.class.php index d2ccd473..c11f4038 100644 --- a/inc/groups.class.php +++ b/inc/groups.class.php @@ -3,8 +3,8 @@ /** * sysPass * - * @author nuxsmin - * @link http://syspass.org + * @author nuxsmin + * @link http://syspass.org * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org * * This file is part of sysPass. @@ -67,25 +67,29 @@ class SP_Groups /** * Obtener los grupos de usuarios. * - * @param int $groupId opcional, con el Id del grupo a consultar + * @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) + 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 = " . (int)$groupId . " LIMIT 1"; + $query .= "WHERE usergroup_id = :id LIMIT 1"; + $data['id'] = $groupId; } else { $query .= "ORDER BY usergroup_name"; } - $queryRes = DB::getResults($query, __FUNCTION__, true); + DB::setReturnArray(); + + $queryRes = DB::getResults($query, __FUNCTION__, $data); if ($queryRes === false) { return false; @@ -113,25 +117,15 @@ class SP_Groups $groupName = strtoupper(self::$groupName); if ($groupId) { - $query = "SELECT usergroup_name - FROM usrGroups - WHERE UPPER(usergroup_name) = '" . DB::escape($groupName) . "' - AND usergroup_id != " . (int)$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) = '" . DB::escape($groupName) . "'"; + $query = "SELECT usergroup_name FROM usrGroups WHERE UPPER(usergroup_name) = :name"; } - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } + $data['name'] = $groupName; - if (count(DB::$last_result) >= 1) { - return false; - } - - return true; + return (DB::getQuery($query, __FUNCTION__, $data) === false || DB::$last_num_rows >= 1); } /** @@ -141,11 +135,12 @@ class SP_Groups */ public static function addGroup() { - $query = "INSERT INTO usrGroups SET - usergroup_name = '" . DB::escape(self::$groupName) . "', - usergroup_description = '" . DB::escape(self::$groupDescription) . "'"; + $query = 'INSERT INTO usrGroups SET usergroup_name = :name, usergroup_description = :description'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['name'] = self::$groupName; + $data['description'] = self::$groupDescription; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } @@ -169,12 +164,13 @@ class SP_Groups { $groupName = self::getGroupNameById(self::$groupId); - $query = "UPDATE usrGroups SET - usergroup_name = '" . DB::escape(self::$groupName) . "', - usergroup_description = '" . DB::escape(self::$groupDescription) . "' - WHERE usergroup_id = " . (int)self::$groupId; + $query = 'UPDATE usrGroups SET usergroup_name = :name, usergroup_description = :description WHERE usergroup_id = :id'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['name'] = self::$groupName; + $data['description'] = self::$groupDescription; + $data['id'] = self::$groupId; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } @@ -189,6 +185,27 @@ class SP_Groups 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; + } + /** * Eliminar un grupo. * @@ -198,10 +215,11 @@ class SP_Groups { $groupName = self::getGroupNameById(self::$groupId); - $query = "DELETE FROM usrGroups " - . "WHERE usergroup_id = " . (int)self::$groupId . " LIMIT 1"; + $query = 'DELETE FROM usrGroups WHERE usergroup_id = :id LIMIT 1'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['id'] = self::$groupId; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } @@ -231,41 +249,33 @@ class SP_Groups /** * Obtener el número de usuarios que usan un grupo. * - * @return false|int con el número total de cuentas + * @return int con el número total de cuentas */ private static function getGroupInUsers() { - $query = "SELECT COUNT(*) as uses " - . "FROM usrData " - . "WHERE user_groupId = " . (int)self::$groupId; + $query = 'SELECT user_groupId FROM usrData WHERE user_groupId = :id'; - $queryRes = DB::getResults($query, __FUNCTION__); + $data['id'] = self::$groupId; - if ($queryRes === false) { - return false; - } + DB::getQuery($query, __FUNCTION__, $data); - return $queryRes->uses; + return DB::$last_num_rows; } /** * Obtener el número de cuentas que usan un grupo como primario. * - * @return false|int con el número total de cuentas + * @return int con el número total de cuentas */ private static function getGroupInAccounts() { - $query = "SELECT COUNT(*) as uses " - . "FROM accounts " - . "WHERE account_userGroupId = " . (int)self::$groupId; + $query = 'SELECT account_userGroupId FROM accounts WHERE account_userGroupId = :id'; - $queryRes = DB::getResults($query, __FUNCTION__); + $data['id'] = self::$groupId; - if ($queryRes === false) { - return false; - } + DB::getQuery($query, __FUNCTION__, $data); - return $queryRes->uses; + return DB::$last_num_rows; } /** @@ -275,38 +285,13 @@ class SP_Groups */ private static function getGroupInAccountsSec() { - $query = "SELECT COUNT(*) as uses " - . "FROM accGroups " - . "WHERE accgroup_groupId = " . (int)self::$groupId; + $query = 'SELECT accgroup_groupId FROM accGroups WHERE accgroup_groupId = :id'; - $queryRes = DB::getResults($query, __FUNCTION__); + $data['id'] = self::$groupId; - if ($queryRes === false) { - return false; - } + DB::getQuery($query, __FUNCTION__, $data); - return $queryRes->uses; - } - - /** - * 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 = " . (int)$id . " LIMIT 1"; - - $queryRes = DB::getResults($query, __FUNCTION__); - - if ($queryRes === false) { - return false; - } - - return $queryRes->usergroup_name; + return DB::$last_num_rows; } /** @@ -317,13 +302,17 @@ class SP_Groups */ public static function getGroupsNameForAccount($accountId) { - $query = "SELECT usergroup_id," - . "usergroup_name " - . "FROM accGroups " - . "JOIN usrGroups ON accgroup_groupId = usergroup_id " - . "WHERE accgroup_accountId = " . (int)$accountId; + $query = 'SELECT usergroup_id,' + . 'usergroup_name ' + . 'FROM accGroups ' + . 'JOIN usrGroups ON accgroup_groupId = usergroup_id ' + . 'WHERE accgroup_accountId = :id'; - $queryRes = DB::getResults($query, __FUNCTION__, true); + $data['id'] = $accountId; + + DB::setReturnArray(); + + $queryRes = DB::getResults($query, __FUNCTION__, $data); if ($queryRes === false) { return false; @@ -341,7 +330,7 @@ class SP_Groups /** * Actualizar la asociación de grupos con cuentas. * - * @param int $accountId con el Id de la cuenta + * @param int $accountId con el Id de la cuenta * @param array $groupsId con los grupos de la cuenta * @return bool */ @@ -357,72 +346,62 @@ class SP_Groups /** * Eliminar la asociación de grupos con cuentas. * - * @param int $accountId con el Id de la cuenta + * @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) + public static function deleteGroupsForAccount($accountId, $groupsId = null) { $queryExcluded = ''; // Excluimos los grupos actuales if (is_array($groupsId)) { - $queryExcluded = ' AND accgroup_groupId NOT IN (' . implode(',', $groupsId) . ')'; + array_map('intval', $groupsId); + + $queryExcluded = 'AND accgroup_groupId NOT IN (' . implode(',', $groupsId) . ')'; } - $query = 'DELETE FROM accGroups ' - . 'WHERE accgroup_accountId = ' . (int)$accountId . $queryExcluded; + $query = 'DELETE FROM accGroups WHERE accgroup_accountId = :id ' . $queryExcluded; - //error_log($query); + $data['id'] = $accountId; - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } - - return true; + return DB::getQuery($query, __FUNCTION__, $data); } /** * Crear asociación de grupos con cuentas. * - * @param int $accountId con el Id de la cuenta + * @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 - $currentGroups = self::getGroupsForAccount($accountId); - - if (is_array($currentGroups)) { - foreach ($currentGroups as $group) { - $groupsExcluded[] = $group->accgroup_groupId; - } - } + $groupsExcluded = self::getGroupsForAccount($accountId); foreach ($groupsId as $groupId) { // Excluimos los grupos actuales - if (is_array($groupsExcluded) && in_array($groupId, $groupsExcluded)) { + if (isset($groupsExcluded) && is_array($groupsExcluded) && in_array($groupId, $groupsExcluded)) { continue; } - $values[] = '(' . $accountId . ',' . $groupId . ')'; + $values[] = '(' . (int)$accountId . ',' . (int)$groupId . ')'; } if (!is_array($values)) { return true; } - $query = 'INSERT INTO accGroups (accgroup_accountId, accgroup_groupId) ' - . 'VALUES ' . implode(',', $values); + $query = 'INSERT INTO accGroups (accgroup_accountId, accgroup_groupId) VALUES ' . implode(',', $values); - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } - - return true; + return DB::getQuery($query, __FUNCTION__); } /** @@ -433,17 +412,23 @@ class SP_Groups */ public static function getGroupsForAccount($accountId) { - $query = "SELECT accgroup_groupId " - . "FROM accGroups " - . "WHERE accgroup_accountId = " . (int)$accountId; + $query = 'SELECT accgroup_groupId FROM accGroups WHERE accgroup_accountId = :id'; - $queryRes = DB::getResults($query, __FUNCTION__, true); + $data['id'] = $accountId; - if ($queryRes === false) { + DB::setReturnArray(); + + $queryRes = DB::getResults($query, __FUNCTION__, $data); + + if ($queryRes === false){ return false; } - return $queryRes; + foreach ($queryRes as $group) { + $groups[]= $group->accgroup_groupId; + } + + return $groups; } } diff --git a/inc/import.class.php b/inc/import.class.php index e889b808..f6481777 100644 --- a/inc/import.class.php +++ b/inc/import.class.php @@ -165,6 +165,8 @@ class SP_Import $message['text'][] = $data; SP_Log::wrLogInfo($message); + + unset($message); } } @@ -189,7 +191,7 @@ class SP_Import // Comprobamos si existe el cliente o lo creamos SP_Customer::$customerName = $customerName; - if (!SP_Customer::checkDupCustomer()) { + if (SP_Customer::checkDupCustomer()) { $customerId = SP_Customer::getCustomerByName(); } else { SP_Customer::addCustomer(); diff --git a/inc/installer.class.php b/inc/installer.class.php index 97cda201..f151c2d6 100644 --- a/inc/installer.class.php +++ b/inc/installer.class.php @@ -172,7 +172,10 @@ class SP_Installer self::setupMySQLDatabase(); self::createAdminAccount(); } catch (InstallerException $e) { - $error[] = array('type' => $e->getType(), 'description' => $e->getMessage(), 'hint' => $e->getHint()); + $error[] = array( + 'type' => $e->getType(), + 'description' => $e->getMessage(), + 'hint' => $e->getHint()); return ($error); } @@ -196,9 +199,10 @@ class SP_Installer */ private static function checkDatabaseAdmin($dbhost, $dbadmin, $dbpass) { - self::$dbc = @new mysqli($dbhost, $dbadmin, $dbpass); - - if (!is_object(self::$dbc) || self::$dbc->connect_errno) { + try { + $dsn = 'mysql:host=' . $dbhost . ';charset=utf8'; + self::$dbc = new PDO($dsn, $dbadmin, $dbpass); + } catch (PDOException $e){ throw new InstallerException('critical' , _('El usuario/clave de MySQL no es correcto') , _('Verifique el usuario de conexión con la Base de Datos')); @@ -270,7 +274,9 @@ class SP_Installer $query = "CREATE USER '" . self::$dbuser . "'@'localhost' IDENTIFIED BY '" . $dbpassword . "'"; - if (!self::$dbc->query($query)) { + try { + self::$dbc->query($query); + } catch (PDOException $e){ throw new InstallerException('critical' , _('El usuario de MySQL ya existe') . " (" . self::$dbuser . ")" , _('Indique un nuevo usuario o elimine el existente')); @@ -288,20 +294,22 @@ class SP_Installer { $query = "CREATE DATABASE IF NOT EXISTS `" . self::$dbname . "`"; - if (!self::$dbc->query($query)) { + try { + self::$dbc->query($query); + } catch (PDOException $e){ throw new InstallerException('critical' - , _('Error al crear la BBDD') . " (" . self::$dbc->error . ")" + , _('Error al crear la BBDD') . " (" . $e->getMessage() . ")" , _('Verifique los permisos del usuario de la Base de Datos')); } if (!self::$isHostingMode) { $query = "GRANT ALL PRIVILEGES ON `" . self::$dbname . "`.* TO '" . self::$dbuser . "'@'" . self::$dbhost . "' IDENTIFIED BY '$dbpassword';"; - self::$dbc->query($query); - - if (!self::$dbc->query($query)) { + try { + self::$dbc->query($query); + } catch (PDOException $e){ throw new InstallerException('critical' - , _('Error al establecer permisos de la BBDD') . " (" . self::$dbc->error . ")" + , _('Error al establecer permisos de la BBDD') . " (" . $e->getMessage() . ")" , _('Verifique los permisos del usuario de la Base de Datos')); } } @@ -317,19 +325,9 @@ class SP_Installer $query = "SELECT COUNT(*) " . "FROM information_schema.tables " . "WHERE table_schema = '" . self::$dbname . "' " - . "AND table_name = 'usrData';"; + . "AND table_name = 'usrData' LIMIT 1"; - $resquery = self::$dbc->query($query); - - if ($resquery) { - $row = $resquery->fetch_row(); - } - - if (!$resquery || $row[0] == 0) { - return false; - } - - return true; + return (intval(self::$dbc->query($query)->fetchColumn()) === 0); } /** @@ -350,9 +348,11 @@ class SP_Installer } // Usar la base de datos de sysPass - if (!self::$dbc->select_db(self::$dbname)) { + try { + self::$dbc->query('USE ' . self::$dbname); + } catch (PDOException $e){ throw new InstallerException('critical' - , _('Error al seleccionar la BBDD') . " '" . self::$dbname . "' (" . self::$dbc->error . ")" + , _('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.')); } @@ -363,11 +363,14 @@ class SP_Installer while (!feof($handle)) { $buffer = stream_get_line($handle, 1000000, ";\n"); if (strlen(trim($buffer)) > 0) { - if (!self::$dbc->query($buffer)) { + try { + self::$dbc->query($buffer); + } catch (PDOException $e) { // drop database on error self::$dbc->query("DROP DATABASE " . self::$dbname . ";"); + throw new InstallerException('critical' - , _('Error al crear la BBDD') + , _('Error al crear la BBDD') . ' (' . $e->getMessage() . ')' , _('Error al crear la estructura de la Base de Datos.')); } } @@ -471,11 +474,14 @@ class SP_Installer */ private static function rollback() { - self::$dbc->query("DROP DATABASE IF EXISTS " . self::$dbname . ";"); - self::$dbc->query("DROP USER '" . self::$dbuser . "'@'" . self::$dbhost . "';"); - self::$dbc->query("DROP USER '" . self::$dbuser . "'@'%';"); - SP_Config::deleteKey('dbuser'); - SP_Config::deleteKey('dbpass'); + try { + self::$dbc->query("DROP DATABASE IF EXISTS " . self::$dbname . ";"); + self::$dbc->query("DROP USER '" . self::$dbuser . "'@'" . self::$dbhost . "';"); + self::$dbc->query("DROP USER '" . self::$dbuser . "'@'%';"); + } catch(PDOException $e){ + SP_Config::deleteKey('dbuser'); + SP_Config::deleteKey('dbpass'); + } } } \ No newline at end of file diff --git a/inc/log.class.php b/inc/log.class.php index 35bdb00d..24f8856d 100644 --- a/inc/log.class.php +++ b/inc/log.class.php @@ -40,26 +40,32 @@ class SP_Log */ public static function getEvents($start) { - $query = 'SELECT SQL_CALC_FOUND_ROWS ' . + $query = 'SELECT ' . 'log_id,' . - 'FROM_UNIXTIME(log_date) as date,' . + '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'; + 'LIMIT :start, 50'; - $queryRes = DB::getResults($query, __FUNCTION__, true); + $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; } - $numRows = DB::getResults("SELECT FOUND_ROWS() as numRows", __FUNCTION__); - - self::$numRows = $numRows->numRows; + self::$numRows = DB::$last_num_rows; return $queryRes; } @@ -73,14 +79,13 @@ class SP_Log { $query = 'TRUNCATE TABLE log'; - $queryRes = DB::doQuery($query, __FUNCTION__); - - if ($queryRes === false) { + if (DB::getQuery($query, __FUNCTION__) === false) { return false; } $message['action'] = _('Vaciar Eventos'); $message['text'][] = _('Vaciar registro de eventos'); + self::wrLogInfo($message); SP_Common::sendEmail($message); @@ -108,16 +113,20 @@ class SP_Log error_log('Action: ' . $action . ' -- Description: ' . $description); } - $query = "INSERT INTO log SET " . - "log_date = UNIX_TIMESTAMP()," . - "log_login = '" . DB::escape($login) . "'," . - "log_userId = " . $userId . "," . - "log_ipAddress = '" . DB::escape($_SERVER['REMOTE_ADDR']) . "'," . - "log_action = '" . DB::escape($action) . "'," . - "log_description = '" . DB::escape($description) . "'"; + $query = 'INSERT INTO log SET ' . + 'log_date = UNIX_TIMESTAMP(),' . + 'log_login = :login,' . + 'log_userId = :userId,' . + 'log_ipAddress = :ipAddress,' . + 'log_action = :action,' . + 'log_description = :description'; - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } + $data['login'] = $login; + $data['userId'] = $userId; + $data['ipAddress'] = $_SERVER['REMOTE_ADDR']; + $data['action'] = $action; + $data['description'] = $description; + + return DB::getQuery($query, __FUNCTION__, $data); } } \ No newline at end of file diff --git a/inc/migrate.class.php b/inc/migrate.class.php index 483246d9..d5bd4632 100644 --- a/inc/migrate.class.php +++ b/inc/migrate.class.php @@ -2,8 +2,8 @@ /** * sysPass * - * @author nuxsmin - * @link http://syspass.org + * @author nuxsmin + * @link http://syspass.org * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org * * This file is part of sysPass. @@ -119,47 +119,38 @@ class SP_Migrate /** * Comprobar si la conexión con la BBDD de phpPMS es posible. * - * @param string $dbhost host de conexión + * @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 $dbpass clave de conexión + * @param string $dbname nombre de la base de datos * @throws MigrateException * @return none */ private static function checkDatabaseAdmin($dbhost, $dbadmin, $dbpass, $dbname) { - self::$dbc = new mysqli($dbhost, $dbadmin, $dbpass, $dbname); - - if (self::$dbc->connect_errno) { - throw new MigrateException('critical', - _('El usuario/clave de MySQL no es correcto'), - _('Verifique el usuario de conexión con la Base de Datos')); + try { + $dsn = 'mysql:host=' . $dbhost . ';dbname=' . $dbname . ';charset=utf8'; + self::$dbc = new PDO($dsn, $dbadmin, $dbpass); + } catch (PDOException $e) { + throw new MigrateException('critical' + , _('El usuario/clave de MySQL no es correcto') + , _('Verifique el usuario de conexión con la Base de Datos')); } } /** * Comprobar si la BBDD existe. * - * @return none + * @return int */ private static function checkDatabaseExist() { - $query = "SELECT COUNT(*) " - . "FROM information_schema.tables " - . "WHERE table_schema='" . self::$dbname . "' " - . "AND table_name = 'users';"; + $query = 'SELECT COUNT(*) ' + . 'FROM information_schema.tables ' + . 'WHERE table_schema = \'' . self::$dbname . '\' ' + . 'AND table_name = \'usrData\' LIMIT 1'; - $queryRes = self::$dbc->query($query); - - if ($queryRes) { - $row = $queryRes->fetch_row(); - } - - if (!$queryRes || $row[0] == 0) { - return false; - } - - return true; + return (intval(self::$dbc->query($query)->fetchColumn()) === 0); } /** @@ -189,19 +180,15 @@ class SP_Migrate */ private static function getSourceConfig() { - $query = 'SELECT vacValue as value,' - . 'vacParameter as parameter ' - . 'FROM config'; - $queryRes = self::$dbc->query($query); + $query = 'SELECT vacValue as value,vacParameter as parameter FROM config'; + + try { + self::parseSourceConfig(self::$dbc->query($query)); + } catch (PDOException $e) { - if (!$queryRes) { throw new MigrateException('critical', _('Error al obtener la configuración'), - self::$dbc->error); - } - - while ($row = @$queryRes->fetch_assoc()) { - self::parseSourceConfig($row); + $e->getMessage()); } } @@ -225,8 +212,6 @@ class SP_Migrate // Guardar la configuración anterior self::$oldConfig[$config['parameter']] = $value; - - //error_log($config['parameter'].' >> '.$value); } /** @@ -243,9 +228,8 @@ class SP_Migrate // Limpiar datos de las tablas foreach ($tables as $table) { $query = 'TRUNCATE TABLE ' . $table; - $queryRes = DB::doQuery($query, __FUNCTION__); - if ($queryRes === false) { + if (DB::getQuery($query, __FUNCTION__) === false) { throw new MigrateException('critical', _('Error al vaciar tabla') . ' (' . $table . ')', DB::$txtError); @@ -257,17 +241,15 @@ class SP_Migrate // Limpiar datos de usuarios manteniendo el usuario actual if (self::checkAdminAccount($currentUserId)) { $query = 'DELETE FROM usrData WHERE user_id != ' . $currentUserId; - $queryRes = DB::doQuery($query, __FUNCTION__); - if ($queryRes === false) { + if (DB::getQuery($query, __FUNCTION__) === false) { throw new MigrateException('critical', _('Error al vaciar tabla') . ' (' . $table . ')', DB::$txtError); } } else { throw new MigrateException('critical', - _('Usuario actual no es administrador de la aplicación'), - DB::$txtError); + _('Usuario actual no es administrador de la aplicación'), 1); } } @@ -279,16 +261,14 @@ class SP_Migrate */ private static function checkAdminAccount($currentUserId) { - $query = 'SELECT COUNT(*) ' - . 'FROM usrData ' - . 'WHERE user_id = ' . $currentUserId . ' AND user_isAdminApp = 1'; - $queryRes = DB::doQuery($query, __FUNCTION__); + $query = 'SELECT user_id FROM usrData WHERE user_id = :id AND user_isAdminApp = 1 LIMIT 1'; - if ($queryRes !== 1) { - return false; - } + $data['id'] = $currentUserId; - return true; + $db = new DB(); + $db->setParamData($data); + + return ($db->getFullRowCount($query) === 0); } /** @@ -307,7 +287,7 @@ class SP_Migrate foreach ($customers as $customer) { SP_Customer::$customerName = $customer; - if (!SP_Customer::checkDupCustomer()) { + if (SP_Customer::checkDupCustomer()) { $num++; continue; } @@ -324,8 +304,6 @@ class SP_Migrate $message['text'][] = _('Registros') . ': ' . $num . ' / ' . $totalRecords; SP_Log::wrLogInfo($message); - -// self::$result['ok'][] = _('Importar Clientes')." - $num / $totalRecords"; } /** @@ -337,19 +315,18 @@ class SP_Migrate private static function getCustomers() { $query = 'SELECT DISTINCT vacCliente FROM accounts'; - $queryRes = self::$dbc->query($query); - if (!$queryRes) { + try { + foreach (self::$dbc->query($query) as $row) { + $customers[] = trim($row['vacCliente']); + } + + return $customers; + } catch (PDOException $e) { throw new MigrateException('critical', _('Error al obtener los clientes'), - self::$dbc->error); + $e->getMessage()); } - - while ($row = @$queryRes->fetch_row()) { - $customers[] = trim($row[0]); - } - - return $customers; } /** @@ -376,30 +353,28 @@ class SP_Migrate . 'intCountDecrypt,' . 'datAdded,datChanged ' . 'FROM accounts '; - $queryRes = self::$dbc->query($query); - if (!$queryRes) { - throw new MigrateException('critical', - _('Error al obtener cuentas'), - self::$dbc->error); - } - - $totalRecords = $queryRes->num_rows; + $totalRecords = 0; $num = 0; - while ($row = @$queryRes->fetch_assoc()) { - if (self::insertAccounts($row)) { - $num++; + try { + foreach (self::$dbc->query($query) as $row) { + if (self::insertAccounts($row)) { + $num++; + } + $totalRecords++; } + } catch (PDOException $e) { + throw new MigrateException('critical', + _('Error al obtener cuentas'), + $e->getMessage()); } $message['action'] = _('Importar Cuentas'); $message['text'][] = 'OK'; - $message['text'][] = _('Registros') . ': ' . $num . ' / ' . $totalRecords; + $message['text'][] = _('Registros') . ': ' . $num . '/' . $totalRecords; SP_Log::wrLogInfo($message); - -// self::$result['ok'][] = _('Importar Cuentas')." - $num / $totalRecords"; } /** @@ -426,25 +401,42 @@ class SP_Migrate return false; } - $query = "INSERT INTO accounts SET - account_id = " . $account['intAccountId'] . ", - account_userGroupId = " . $account['intUGroupFId'] . ", - account_userId = " . $account['intUserFId'] . ", - account_userEditId = " . $account['intUEditFId'] . ", - account_customerId = " . $customerId . ", - account_name = '" . DB::escape($account['vacName']) . "', - account_categoryId = " . $account['intCategoryFid'] . ", - account_login = '" . DB::escape($account['vacLogin']) . "', - account_url = '" . DB::escape($account['vacUrl']) . "', - account_pass = '" . $account['vacPassword'] . "', - account_IV = '" . $account['vacInitialValue'] . "', - account_notes = '" . DB::escape($account['txtNotice']) . "', - account_countView = " . $account['intCountView'] . ", - account_countDecrypt = " . $account['intCountDecrypt'] . ", - account_dateAdd = '" . $account['datAdded'] . "', - account_dateEdit = '" . $account['datChanged'] . "'"; + $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'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $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 MigrateException('critical', _('Error al migrar cuenta'), @@ -462,32 +454,29 @@ class SP_Migrate */ private static function migrateAccountsGroups() { - $query = 'SELECT intAccId,' - . 'intUGroupId ' - . 'FROM acc_usergroups'; - $queryRes = self::$dbc->query($query); + $query = 'SELECT intAccId,intUGroupId FROM acc_usergroups'; - if (!$queryRes) { - throw new MigrateException('critical', - _('Error al obtener los grupos de cuentas'), - self::$dbc->error); - } - - $totalRecords = $queryRes->num_rows; + $totalRecords = 0; $num = 0; - while ($row = @$queryRes->fetch_assoc()) { - if (self::insertAccountsGroups($row)) { - $num++; + try { + foreach(self::$dbc->query($query) as $row){ + if (self::insertAccountsGroups($row)) { + $num++; + } + $totalRecords++; } + } catch(PDOException $e){ + throw new MigrateException('critical', + _('Error al obtener los grupos de cuentas'), + $e->getMessage()); } $message['action'] = _('Importar Grupos de Cuentas'); $message['text'][] = 'OK'; - $message['text'][] = _('Registros') . ': ' . $num . ' / ' . $totalRecords; + $message['text'][] = _('Registros') . ': ' . $num . '/' . $totalRecords; SP_Log::wrLogInfo($message); -// self::$result['ok'][] = _('Importar Grupos de Cuentas')." - $num / $totalRecords"; } /** @@ -499,11 +488,12 @@ class SP_Migrate */ private static function insertAccountsGroups($accountGroup) { - $query = "INSERT INTO accGroups " - . "SET accgroup_accountId = " . $accountGroup['intAccId'] . "," - . "accgroup_groupId = " . $accountGroup['intUGroupId']; + $query = 'INSERT INTO accGroups SET accgroup_accountId = :accountId,accgroup_groupId = :groudId'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['accountId'] = $accountGroup['intAccId']; + $data['groupId'] = $accountGroup['intUGroupId']; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { throw new MigrateException('critical', _('Error al crear grupos de cuentas'), DB::$txtError); @@ -539,30 +529,28 @@ class SP_Migrate . 'blnModificada,' . 'blnEliminada ' . 'FROM acc_history'; - $queryRes = self::$dbc->query($query); - if (!$queryRes) { + $totalRecords = 0; + $num = 0; + + try { + foreach(self::$dbc->query($query) as $row){ + if (self::insertAccountsHistory($row)) { + $num++; + } + $totalRecords++; + } + } catch(PDOException $e){ throw new MigrateException('critical', _('Error al obtener el historico de cuentas'), self::$dbc->error); } - $totalRecords = $queryRes->num_rows; - $num = 0; - - while ($row = @$queryRes->fetch_assoc()) { - if (self::insertAccountsHistory($row)) { - $num++; - } - } - $message['action'] = _('Importar Histórico de Cuentas'); $message['text'][] = 'OK'; - $message['text'][] = _('Registros') . ': ' . $num . ' / ' . $totalRecords; + $message['text'][] = _('Registros') . ': ' . $num . '/' . $totalRecords; SP_Log::wrLogInfo($message); - -// self::$result['ok'][] = _('Importar Histórico de Cuentas')." - $num / $totalRecords"; } /** @@ -575,7 +563,7 @@ class SP_Migrate private static function insertAccountsHistory($accountHistory) { if (!is_array(self::$customersByName)) { - $customers = SP_Customer::getCustomers(NULL, true); + $customers = SP_Customer::getCustomers(null, true); self::$customersByName = array_flip($customers); } @@ -587,27 +575,46 @@ class SP_Migrate return false; } - $query = "INSERT INTO accHistory SET - acchistory_accountId = " . $accountHistory['intAccountId'] . ", - acchistory_userGroupId = " . $accountHistory['intUGroupFId'] . ", - acchistory_userId = " . $accountHistory['intUserFId'] . ", - acchistory_userEditId = " . $accountHistory['intUEditFId'] . ", - acchistory_customerId = " . $customerId . ", - acchistory_name = '" . DB::escape($accountHistory['vacName']) . "', - acchistory_categoryId = " . $accountHistory['intCategoryFid'] . ", - acchistory_login = '" . DB::escape($accountHistory['vacLogin']) . "', - acchistory_url = '" . DB::escape($accountHistory['vacUrl']) . "', - acchistory_pass = '" . $accountHistory['vacPassword'] . "', - acchistory_IV = '" . $accountHistory['vacInitialValue'] . "', - acchistory_notes = '" . DB::escape($accountHistory['txtNotice']) . "', - acchistory_countView = " . $accountHistory['intCountView'] . ", - acchistory_countDecrypt = " . $accountHistory['intCountDecrypt'] . ", - acchistory_dateAdd = '" . $accountHistory['datAdded'] . "', - acchistory_dateEdit = '" . $accountHistory['datChanged'] . "', - acchistory_isModify = " . $accountHistory['blnModificada'] . ", - acchistory_isDeleted = " . $accountHistory['blnEliminada']; + $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'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $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 MigrateException('critical', _('Error al crear historico de cuentas'), DB::$txtError); @@ -631,30 +638,28 @@ class SP_Migrate . 'blobContent,' . 'vacExtension ' . 'FROM files'; - $queryRes = self::$dbc->query($query); - if (!$queryRes) { + $totalRecords = 0; + $num = 0; + + try { + foreach(self::$dbc->query($query) as $row){ + if (self::insertAccountsFiles($row)) { + $num++; + } + $totalRecords++; + } + } catch(PDOException $e){ throw new MigrateException('critical', _('Error al obtener los archivos de cuentas'), self::$dbc->error); } - $totalRecords = $queryRes->num_rows; - $num = 0; - - while ($row = @$queryRes->fetch_assoc()) { - if (self::insertAccountsFiles($row)) { - $num++; - } - } - $message['action'] = _('Importar Archivos de Cuentas'); $message['text'][] = 'OK'; - $message['text'][] = _('Registros') . ': ' . $num . ' / ' . $totalRecords; + $message['text'][] = _('Registros') . ': ' . $num . '/' . $totalRecords; SP_Log::wrLogInfo($message); - -// self::$result['ok'][] = _('Importar Archivos de Cuentas')." - $num / $totalRecords"; } /** @@ -666,15 +671,22 @@ class SP_Migrate */ private static function insertAccountsFiles($accountFile) { - $query = "INSERT INTO accFiles " - . "SET accfile_accountId = " . $accountFile['intAccountId'] . "," - . "accfile_name = '" . DB::escape($accountFile['vacName']) . "'," - . "accfile_type = '" . DB::escape($accountFile['vacType']) . "'," - . "accfile_size = " . $accountFile['intSize'] . "," - . "accfile_content = '" . DB::escape($accountFile['blobContent']) . "'," - . "accfile_extension = '" . DB::escape($accountFile['vacExtension']) . "'"; + $query = 'INSERT INTO accFiles ' + . 'SET accfile_accountId = :id,' + . 'accfile_name = :name,' + . 'accfile_type = :type,' + . 'accfile_size = :size,' + . 'accfile_content = :blobcontent,' + . 'accfile_extension = :extension'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $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 MigrateException('critical', _('Error al crear archivos de cuentas'), DB::$txtError); @@ -691,33 +703,29 @@ class SP_Migrate */ private static function migrateAccountsCategories() { - $query = 'SELECT intCategoryId,' - . 'vacCategoryName ' - . 'FROM categories'; - $queryRes = self::$dbc->query($query); + $query = 'SELECT intCategoryId,vacCategoryName FROM categories'; - if (!$queryRes) { + $totalRecords = 0; + $num = 0; + + try { + foreach(self::$dbc->query($query) as $row){ + if (self::insertAccountsCategories($row)) { + $num++; + } + $totalRecords++; + } + } catch(PDOException $e){ throw new MigrateException('critical', _('Error al obtener las categorías de cuentas'), self::$dbc->error); } - $totalRecords = $queryRes->num_rows; - $num = 0; - - while ($row = @$queryRes->fetch_assoc()) { - if (self::insertAccountsCategories($row)) { - $num++; - } - } - $message['action'] = _('Importar Categorías de Cuentas'); $message['text'][] = 'OK'; - $message['text'][] = _('Registros') . ': ' . $num . ' / ' . $totalRecords; + $message['text'][] = _('Registros') . ': ' . $num . '/' . $totalRecords; SP_Log::wrLogInfo($message); - -// self::$result['ok'][] = _('Importar Categorías de Cuentas')." - $num / $totalRecords"; } /** @@ -729,11 +737,12 @@ class SP_Migrate */ private static function insertAccountsCategories($accountCategory) { - $query = "INSERT INTO categories " - . "SET category_id = " . $accountCategory['intCategoryId'] . "," - . "category_name = '" . DB::escape($accountCategory['vacCategoryName']) . "'"; + $query = 'INSERT INTO categories SET category_id = :id,category_name = :name'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['id'] = $accountCategory['intCategoryId']; + $data['name'] = $accountCategory['vacCategoryName']; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { throw new MigrateException('critical', _('Error al crear categorías de cuentas'), DB::$txtError); @@ -770,30 +779,28 @@ class SP_Migrate . 'blnDisabled ' . 'FROM users ' . 'WHERE intUserId <> ' . $_SESSION['uid']; - $queryRes = self::$dbc->query($query); - if (!$queryRes) { + $totalRecords = 0; + $num = 0; + + try { + foreach(self::$dbc->query($query) as $row){ + if (self::insertUsers($row)) { + $num++; + } + $totalRecords++; + } + } catch(PDOException $e){ throw new MigrateException('critical', _('Error al obtener los usuarios'), self::$dbc->error); } - $totalRecords = $queryRes->num_rows; - $num = 0; - - while ($row = @$queryRes->fetch_assoc()) { - if (self::insertUsers($row)) { - $num++; - } - } - $message['action'] = _('Importar Usuarios'); $message['text'][] = 'OK'; - $message['text'][] = _('Registros') . ': ' . $num . ' / ' . $totalRecords; + $message['text'][] = _('Registros') . ': ' . $num . '/' . $totalRecords; SP_Log::wrLogInfo($message); - -// self::$result['ok'][] = _('Importar Usuarios')." - $num / $totalRecords"; } /** @@ -807,28 +814,45 @@ class SP_Migrate */ private static function insertUsers($users) { - $query = "INSERT INTO usrData " - . "SET user_id = " . $users['intUserId'] . "," - . "user_name = '" . DB::escape($users['vacUName']) . "'," - . "user_groupId = " . $users['intUGroupFid'] . "," - . "user_login = '" . DB::escape($users['vacULogin']) . "'," - . "user_pass = '" . DB::escape($users['vacUPassword']) . "'," - . "user_mPass = '" . DB::escape($users['vacUserMPwd']) . "'," - . "user_mIV = '" . DB::escape($users['vacUserMIv']) . "'," - . "user_email = '" . DB::escape($users['vacUEmail']) . "'," - . "user_notes = '" . DB::escape($users['txtUNotes']) . "'," - . "user_count = " . $users['intUCount'] . "," - . "user_profileId = 0," - . "user_lastLogin = '" . $users['datULastLogin'] . "'," - . "user_lastUpdate = '" . $users['datULastUpdate'] . "'," - . "user_lastUpdateMPass = " . $users['datUserLastUpdateMPass'] . "," - . "user_isAdminApp = " . $users['blnIsAdminApp'] . "," - . "user_isAdminAcc = " . $users['blnIsAdminAcc'] . "," - . "user_isLdap = " . $users['blnFromLdap'] . "," - . "user_isDisabled = 1," - . "user_isMigrate = 1"; + $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'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $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 MigrateException('critical', _('Error al crear usuarios'), DB::$txtError); @@ -845,34 +869,29 @@ class SP_Migrate */ private static function migrateUsersGroups() { - $query = 'SELECT intUGroupId,' - . 'vacUGroupName,' - . 'vacUGroupDesc ' - . 'FROM usergroups'; - $queryRes = self::$dbc->query($query); + $query = 'SELECT intUGroupId,vacUGroupName,vacUGroupDesc FROM usergroups'; - if (!$queryRes) { + $totalRecords = 0; + $num = 0; + + try { + foreach(self::$dbc->query($query) as $row){ + if (self::insertUsersGroups($row)) { + $num++; + } + $totalRecords++; + } + } catch(PDOException $e){ throw new MigrateException('critical', _('Error al obtener los grupos de usuarios'), self::$dbc->error); } - $totalRecords = $queryRes->num_rows; - $num = 0; - - while ($row = @$queryRes->fetch_assoc()) { - if (self::insertUsersGroups($row)) { - $num++; - } - } - $message['action'] = _('Importar Grupos de Usuarios'); $message['text'][] = 'OK'; - $message['text'][] = _('Registros') . ': ' . $num . ' / ' . $totalRecords; + $message['text'][] = _('Registros') . ': ' . $num . '/' . $totalRecords; SP_Log::wrLogInfo($message); - -// self::$result['ok'][] = _('Importar Grupos de Usuarios')." - $num / $totalRecords"; } /** @@ -884,12 +903,16 @@ class SP_Migrate */ private static function insertUsersGroups($usersGroups) { - $query = "INSERT INTO usrGroups " - . "SET usergroup_id = " . $usersGroups['intUGroupId'] . "," - . "usergroup_name = '" . DB::escape($usersGroups['vacUGroupName']) . "'," - . "usergroup_description = '" . DB::escape($usersGroups['vacUGroupDesc']) . "'"; + $query = 'INSERT INTO usrGroups ' + . 'SET usergroup_id = :id,' + . 'usergroup_name = :name,' + . 'usergroup_description = :description'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['id'] = $usersGroups['intUGroupId']; + $data['name'] = $usersGroups['vacUGroupName']; + $data['description'] = $usersGroups['vacUGroupDesc']; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { throw new MigrateException('critical', _('Error al crear los grupos de usuarios'), DB::$txtError); @@ -923,7 +946,6 @@ class SP_Migrate 'password_show', 'lastupdatempass', 'passwordsalt'); - //$savedConfig = array_diff_key($skip, SP_Config::getKeys()); $totalParams = count(self::$oldConfig); $num = 0; @@ -939,10 +961,8 @@ class SP_Migrate $message['action'] = _('Importar Configuración'); $message['text'][] = 'OK'; - $message['text'][] = _('Registros') . ': ' . $num . ' / ' . $totalParams; + $message['text'][] = _('Registros') . ': ' . $num . '/' . $totalParams; SP_Log::wrLogInfo($message); - -// self::$result['ok'][] = _('Importar Configuración')." - $num / $totalParams"; } } \ No newline at end of file diff --git a/inc/profiles.class.php b/inc/profiles.class.php index 8f87b97c..f2c4d4b4 100644 --- a/inc/profiles.class.php +++ b/inc/profiles.class.php @@ -43,25 +43,25 @@ class SP_Profiles public static function getProfileData($id = 0) { - $profile = array('userprofile_id' => 0, - 'userprofile_name' => '', - 'userProfile_pView' => 0, - 'userProfile_pViewPass' => 0, - 'userProfile_pViewHistory' => 0, - 'userProfile_pEdit' => 0, - 'userProfile_pEditPass' => 0, - 'userProfile_pAdd' => 0, - 'userProfile_pDelete' => 0, - 'userProfile_pFiles' => 0, - 'userProfile_pConfig' => 0, - 'userProfile_pConfigMasterPass' => 0, - 'userProfile_pConfigBackup' => 0, - 'userProfile_pAppMgmtCategories' => 0, - 'userProfile_pAppMgmtCustomers' => 0, - 'userProfile_pUsers' => 0, - 'userProfile_pGroups' => 0, - 'userProfile_pProfiles' => 0, - 'userProfile_pEventlog' => 0, + $profile = array('id' => 0, + 'name' => '', + 'pView' => 0, + 'pViewPass' => 0, + 'pViewHistory' => 0, + 'pEdit' => 0, + 'pEditPass' => 0, + 'pAdd' => 0, + 'pDelete' => 0, + 'pFiles' => 0, + 'pConfig' => 0, + 'pConfigMasterPass' => 0, + 'pConfigBackup' => 0, + 'pAppMgmtCategories' => 0, + 'pAppMgmtCustomers' => 0, + 'pUsers' => 0, + 'pGroups' => 0, + 'pProfiles' => 0, + 'pEventlog' => 0, 'action' => 1); if ($id > 0) { @@ -69,8 +69,8 @@ class SP_Profiles if ($usersProfiles) { foreach ($usersProfiles[0] as $name => $value) { - if (preg_match('/^.*_p[A-Z].*$/', $name)) { - $profile[$name] = ((int)$value === 1) ? "CHECKED" : ""; + if (preg_match('/^p[A-Za-z].*$/', $name)) { + $profile[$name] = (intval($value) === 1) ? "CHECKED" : ""; } else { $profile[$name] = $value; } @@ -88,30 +88,34 @@ class SP_Profiles * @param int $profileId opcional, con el Id del perfil a consultar * @return array con la lista de perfiles */ - public static function getProfiles($profileId = NULL) + public static function getProfiles($profileId = null) { + $data = null; + if (!is_null($profileId)) { - $query = 'SELECT userprofile_id,' - . 'userprofile_name,' - . 'userProfile_pView,' - . 'userProfile_pViewPass,' - . 'userProfile_pViewHistory,' - . 'userProfile_pEdit,' - . 'userProfile_pEditPass,' - . 'userProfile_pAdd,' - . 'userProfile_pDelete,' - . 'userProfile_pFiles,' - . 'userProfile_pConfig,' - . 'userProfile_pConfigMasterPass,' - . 'userProfile_pConfigBackup,' - . 'userProfile_pAppMgmtCategories,' - . 'userProfile_pAppMgmtCustomers,' - . 'userProfile_pUsers,' - . 'userProfile_pGroups,' - . 'userProfile_pProfiles,' - . 'userProfile_pEventlog ' + $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 ' - . 'WHERE userprofile_id = ' . (int)$profileId . ' LIMIT 1'; + . 'WHERE userprofile_id = :id LIMIT 1'; + + $data['id'] = $profileId; } else { $query = 'SELECT userprofile_id,' . 'userprofile_name ' @@ -119,13 +123,9 @@ class SP_Profiles . 'ORDER BY userprofile_name'; } - $queryRes = DB::getResults($query, __FUNCTION__, true); + DB::setReturnArray(); - if ($queryRes === false) { - return false; - } - - return $queryRes; + return DB::getResults($query, __FUNCTION__, $data); } /** @@ -138,25 +138,21 @@ class SP_Profiles $profileName = strtoupper(self::$profileName); if ($profileId) { - $query = "SELECT userprofile_name " - . "FROM usrProfiles " - . "WHERE UPPER(userprofile_name) = '" . DB::escape($profileName) . "' " - . "AND userprofile_id != " . $profileId; + $query = 'SELECT userprofile_name ' + . 'FROM usrProfiles ' + . 'WHERE UPPER(userprofile_name) = :name ' + . 'AND userprofile_id != :id'; + + $data['id'] = $profileId; } else { - $query = "SELECT userprofile_name " - . "FROM usrProfiles " - . "WHERE UPPER(userprofile_name) = '" . DB::escape($profileName) . "'"; + $query = 'SELECT userprofile_name ' + . 'FROM usrProfiles ' + . 'WHERE UPPER(userprofile_name) = :name'; } - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } + $data['name'] = $profileName; - if (count(DB::$last_result) >= 1) { - return false; - } - - return true; + return (DB::getQuery($query, __FUNCTION__, $data) === true && DB::$last_num_rows >= 1); } /** @@ -164,36 +160,58 @@ class SP_Profiles * @param array $profileProp con las propiedades del perfil * @return bool */ - public static function addProfile($profileProp = NULL) + public static function addProfile(&$profileProp) { - $enableConfig = (int)($profileProp["pConfig"] || $profileProp["pConfigCat"] || $profileProp["pConfigMpw"] || $profileProp["pConfigBack"]); + $enableConfig = (int)($profileProp["pConfig"] || $profileProp["pConfigMpw"] || $profileProp["pConfigBack"]); $enableAppMgmt = (int)($profileProp["pAppMgmt"] || $profileProp["pAppMgmtCat"] || $profileProp["pAppMgmtCust"]); $enableUsers = (int)($profileProp["pUsers"] || $profileProp["pGroups"] || $profileProp["pProfiles"]); - $query = "INSERT INTO usrProfiles SET " - . "userprofile_name = '" . DB::escape(self::$profileName) . "'," - . "userProfile_pView = " . $profileProp["pAccView"] . "," - . "userProfile_pViewPass = " . $profileProp["pAccViewPass"] . "," - . "userProfile_pViewHistory = " . $profileProp["pAccViewHistory"] . "," - . "userProfile_pEdit = " . $profileProp["pAccEdit"] . "," - . "userProfile_pEditPass = " . $profileProp["pAccEditPass"] . "," - . "userProfile_pAdd = " . $profileProp["pAccAdd"] . "," - . "userProfile_pDelete = " . $profileProp["pAccDel"] . "," - . "userProfile_pFiles = " . $profileProp["pAccFiles"] . "," - . "userProfile_pConfigMenu = " . $enableConfig . "," - . "userProfile_pConfig = " . $profileProp["pConfig"] . "," - . "userProfile_pConfigMasterPass = " . $profileProp["pConfigMpw"] . "," - . "userProfile_pConfigBackup = " . $profileProp["pConfigBack"] . "," - . "userProfile_pAppMgmtMenu = " . $enableAppMgmt . "," - . "userProfile_pAppMgmtCategories = " . $profileProp["pAppMgmtCat"] . "," - . "userProfile_pAppMgmtCustomers = " . $profileProp["pAppMgmtCust"] . "," - . "userProfile_pUsersMenu = " . $enableUsers . "," - . "userProfile_pUsers = " . $profileProp["pUsers"] . "," - . "userProfile_pGroups = " . $profileProp["pGroups"] . "," - . "userProfile_pProfiles = " . $profileProp["pProfiles"] . "," - . "userProfile_pEventlog = " . $profileProp["pEventlog"]; + $query = 'INSERT INTO usrProfiles SET ' + . 'userprofile_name = :name,' + . 'userProfile_pView = :pView,' + . 'userProfile_pViewPass = :pViewPass,' + . 'userProfile_pViewHistory = :pViewHistory,' + . 'userProfile_pEdit = :pEdit,' + . 'userProfile_pEditPass = :pEditPass,' + . 'userProfile_pAdd = :pAdd,' + . 'userProfile_pDelete = :pDelete,' + . 'userProfile_pFiles = :pFiles,' + . 'userProfile_pConfigMenu = :pConfigMenu,' + . 'userProfile_pConfig = :pConfig,' + . 'userProfile_pConfigMasterPass = :pConfigMasterPass,' + . 'userProfile_pConfigBackup = :pConfigBackup,' + . 'userProfile_pAppMgmtMenu = :pAppMgmtMenu,' + . 'userProfile_pAppMgmtCategories = :pAppMgmtCategories,' + . 'userProfile_pAppMgmtCustomers = :pAppMgmtCustomers,' + . 'userProfile_pUsersMenu = :pUsersMenu,' + . 'userProfile_pUsers = :pUsers,' + . 'userProfile_pGroups = :pGroups,' + . 'userProfile_pProfiles = :pProfiles,' + . 'userProfile_pEventlog = :pEventlog'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['name'] = self::$profileName; + $data['pView'] = $profileProp["pAccView"]; + $data['pViewPass'] = $profileProp["pAccViewPass"]; + $data['pViewHistory'] = $profileProp["pAccViewHistory"]; + $data['pEdit'] = $profileProp["pAccEdit"]; + $data['pEditPass'] = $profileProp["pAccEditPass"]; + $data['pAdd'] = $profileProp["pAccAdd"]; + $data['pDelete'] = $profileProp["pAccDel"]; + $data['pFiles'] = $profileProp["pAccFiles"]; + $data['pConfigMenu'] = $enableConfig; + $data['pConfig'] = $profileProp["pConfig"]; + $data['pConfigMasterPass'] = $profileProp["pConfigMpw"]; + $data['pConfigBackup'] = $profileProp["pConfigBack"]; + $data['pAppMgmtMenu'] = $enableAppMgmt; + $data['pAppMgmtCategories'] = $profileProp["pAppMgmtCat"]; + $data['pAppMgmtCustomers'] = $profileProp["pAppMgmtCust"]; + $data['pUsersMenu'] = $enableUsers; + $data['pUsers'] = $profileProp["pUsers"]; + $data['pGroups'] = $profileProp["pGroups"]; + $data['pProfiles'] = $profileProp["pProfiles"]; + $data['pEventlog'] = $profileProp["pEventlog"]; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } @@ -214,38 +232,61 @@ class SP_Profiles * @param array $profileProp con las propiedades del perfil * @return bool */ - public static function updateProfile($profileProp = NULL) + public static function updateProfile(&$profileProp) { $enableConfig = (int)($profileProp["pConfig"] || $profileProp["pConfigMpw"] || $profileProp["pConfigBack"]); $enableAppMgmt = (int)($profileProp["pAppMgmtCat"] || $profileProp["pAppMgmtCust"]); $enableUsers = (int)($profileProp["pUsers"] || $profileProp["pGroups"] || $profileProp["pProfiles"]); $profileName = self::getProfileNameById(self::$profileId); - $query = "UPDATE usrProfiles SET " - . "userprofile_name = '" . DB::escape(self::$profileName) . "'," - . "userProfile_pView = " . $profileProp["pAccView"] . "," - . "userProfile_pViewPass = " . $profileProp["pAccViewPass"] . "," - . "userProfile_pViewHistory = " . $profileProp["pAccViewHistory"] . "," - . "userProfile_pEdit = " . $profileProp["pAccEdit"] . "," - . "userProfile_pEditPass = " . $profileProp["pAccEditPass"] . "," - . "userProfile_pAdd = " . $profileProp["pAccAdd"] . "," - . "userProfile_pDelete = " . $profileProp["pAccDel"] . "," - . "userProfile_pFiles = " . $profileProp["pAccFiles"] . "," - . "userProfile_pConfigMenu = " . $enableConfig . "," - . "userProfile_pConfig = " . $profileProp["pConfig"] . "," - . "userProfile_pConfigMasterPass = " . $profileProp["pConfigMpw"] . "," - . "userProfile_pConfigBackup = " . $profileProp["pConfigBack"] . "," - . "userProfile_pAppMgmtMenu = " . $enableAppMgmt . "," - . "userProfile_pAppMgmtCategories = " . $profileProp["pAppMgmtCat"] . "," - . "userProfile_pAppMgmtCustomers = " . $profileProp["pAppMgmtCust"] . "," - . "userProfile_pUsersMenu = " . $enableUsers . "," - . "userProfile_pUsers = " . $profileProp["pUsers"] . "," - . "userProfile_pGroups = " . $profileProp["pGroups"] . "," - . "userProfile_pProfiles = " . $profileProp["pProfiles"] . "," - . "userProfile_pEventlog = " . $profileProp["pEventlog"] . " " - . "WHERE userprofile_id = " . (int)self::$profileId . " LIMIT 1"; + $query = 'UPDATE usrProfiles SET ' + . 'userprofile_name = :name,' + . 'userProfile_pView = :pView,' + . 'userProfile_pViewPass = :pViewPass,' + . 'userProfile_pViewHistory = :pViewHistory,' + . 'userProfile_pEdit = :pEdit,' + . 'userProfile_pEditPass = :pEditPass,' + . 'userProfile_pAdd = :pAdd,' + . 'userProfile_pDelete = :pDelete,' + . 'userProfile_pFiles = :pFiles,' + . 'userProfile_pConfigMenu = :pConfigMenu,' + . 'userProfile_pConfig = :pConfig,' + . 'userProfile_pConfigMasterPass = :pConfigMasterPass,' + . 'userProfile_pConfigBackup = :pConfigBackup,' + . 'userProfile_pAppMgmtMenu = :pAppMgmtMenu,' + . 'userProfile_pAppMgmtCategories = :pAppMgmtCategories,' + . 'userProfile_pAppMgmtCustomers = :pAppMgmtCustomers,' + . 'userProfile_pUsersMenu = :pUsersMenu,' + . 'userProfile_pUsers = :pUsers,' + . 'userProfile_pGroups = :pGroups,' + . 'userProfile_pProfiles = :pProfiles,' + . 'userProfile_pEventlog = :pEventlog ' + . 'WHERE userprofile_id = :id LIMIT 1'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['id'] = self::$profileId; + $data['name'] = self::$profileName; + $data['pView'] = $profileProp["pAccView"]; + $data['pViewPass'] = $profileProp["pAccViewPass"]; + $data['pViewHistory'] = $profileProp["pAccViewHistory"]; + $data['pEdit'] = $profileProp["pAccEdit"]; + $data['pEditPass'] = $profileProp["pAccEditPass"]; + $data['pAdd'] = $profileProp["pAccAdd"]; + $data['pDelete'] = $profileProp["pAccDel"]; + $data['pFiles'] = $profileProp["pAccFiles"]; + $data['pConfigMenu'] = $enableConfig; + $data['pConfig'] = $profileProp["pConfig"]; + $data['pConfigMasterPass'] = $profileProp["pConfigMpw"]; + $data['pConfigBackup'] = $profileProp["pConfigBack"]; + $data['pAppMgmtMenu'] = $enableAppMgmt; + $data['pAppMgmtCategories'] = $profileProp["pAppMgmtCat"]; + $data['pAppMgmtCustomers'] = $profileProp["pAppMgmtCust"]; + $data['pUsersMenu'] = $enableUsers; + $data['pUsers'] = $profileProp["pUsers"]; + $data['pGroups'] = $profileProp["pGroups"]; + $data['pProfiles'] = $profileProp["pProfiles"]; + $data['pEventlog'] = $profileProp["pEventlog"]; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } @@ -267,10 +308,11 @@ class SP_Profiles */ public static function deleteProfile() { - $query = "DELETE FROM usrProfiles " - . "WHERE userprofile_id = " . (int)self::$profileId . " LIMIT 1"; + $query = 'DELETE FROM usrProfiles WHERE userprofile_id = :id LIMIT 1'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['id'] = self::$profileId; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } @@ -297,17 +339,13 @@ class SP_Profiles */ private static function getProfileInUsers() { - $query = "SELECT COUNT(*) as uses " - . "FROM usrData " - . "WHERE user_profileId = " . (int)self::$profileId; + $query = 'SELECT user_profileId FROM usrData WHERE user_profileId = :id'; - $queryRes = DB::getResults($query, __FUNCTION__); + $data['id'] = self::$profileId; - if ($queryRes === false) { - return false; - } + DB::getQuery($query, __FUNCTION__, $data); - return $queryRes->uses; + return DB::$last_num_rows; } /** @@ -318,11 +356,11 @@ class SP_Profiles */ public static function getProfileNameById($id) { - $query = "SELECT userprofile_name " - . "FROM usrProfiles " - . "WHERE userprofile_id = " . (int)$id . " LIMIT 1"; + $query = 'SELECT userprofile_name FROM usrProfiles WHERE userprofile_id = :id LIMIT 1'; - $queryRes = DB::getResults($query, __FUNCTION__); + $data['id'] = $id; + + $queryRes = DB::getResults($query, __FUNCTION__, $data); if ($queryRes === false) { return false; @@ -346,37 +384,30 @@ class SP_Profiles return false; } - $query = "SELECT user_profileId," - . "userProfile_pView," - . "userProfile_pViewPass," - . "userProfile_pViewHistory," - . "userProfile_pEdit," - . "userProfile_pEditPass," - . "userProfile_pAdd," - . "userProfile_pDelete," - . "userProfile_pFiles," - . "userProfile_pConfigMenu," - . "userProfile_pConfig," - . "userProfile_pConfigMasterPass," - . "userProfile_pConfigBackup," - . "userProfile_pAppMgmtMenu," - . 'userProfile_pAppMgmtCategories,' - . 'userProfile_pAppMgmtCustomers,' - . "userProfile_pUsersMenu," - . "userProfile_pUsers," - . "userProfile_pGroups," - . "userProfile_pProfiles," - . "userProfile_pEventlog " - . "FROM usrData " - . "JOIN usrProfiles ON userProfile_Id = user_profileId " - . "WHERE user_id = " . $userId . " LIMIT 1"; + $query = 'SELECT user_profileId,' + . '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 usrData ' + . 'JOIN usrProfiles ON userProfile_Id = user_profileId ' + . 'WHERE user_id = :id LIMIT 1'; - $queryRes = DB::getResults($query, __FUNCTION__); + $data['id'] = $userId; - if ($queryRes === false) { - return false; - } - - return $queryRes; + return DB::getResults($query, __FUNCTION__, $data); } } diff --git a/inc/tpl/accounts.php b/inc/tpl/accounts.php index 40ad80e4..2234f644 100644 --- a/inc/tpl/accounts.php +++ b/inc/tpl/accounts.php @@ -54,18 +54,18 @@ switch ($action) { $showform = true; $nextaction = 'acccopy'; - $accountUsers = $account->getUsersAccount(); - $accountGroups = $account->getGroupsAccount(); + $account->accountUsersId = SP_Users::getUsersForAccount($account->accountId); + $account->accountUserGroupsId = SP_Groups::getGroupsForAccount($account->accountId); $accountData = $account->getAccount(); break; case "accedit": $savetype = 2; $title = array('class' => 'titleOrange', 'name' => _('Editar Cuenta')); $showform = true; - $nextaction = 'accedit'; + $nextaction = 'accview'; - $accountUsers = $account->getUsersAccount(); - $accountGroups = $account->getGroupsAccount(); + $account->accountUsersId = SP_Users::getUsersForAccount($account->accountId); + $account->accountUserGroupsId = SP_Groups::getGroupsForAccount($account->accountId); $accountData = $account->getAccount(); break; case "accdelete": @@ -82,8 +82,8 @@ switch ($action) { $_SESSION["accParentId"] = $data['id']; $account->incrementViewCounter(); - $accountUsers = $account->getUsersAccount(); - $accountGroups = $account->getGroupsAccount(); + $account->accountUsersId = SP_Users::getUsersForAccount($account->accountId); + $account->accountUserGroupsId = SP_Groups::getGroupsForAccount($account->accountId); $accountData = $account->getAccount(); break; case "accviewhistory": @@ -92,8 +92,8 @@ switch ($action) { $showform = false; $account->accountIsHistory = true; - $accountUsers = $account->getUsersAccount(); - $accountGroups = $account->getGroupsAccount(); + $account->accountUsersId = SP_Users::getUsersForAccount($account->accountId); + $account->accountUserGroupsId = SP_Groups::getGroupsForAccount($account->accountId); $accountData = $account->getAccountHistory(); break; default : @@ -287,8 +287,8 @@ $maxFileSize = round(SP_Config::getValue('files_allowed_size') / 1024, 1); $userSelected = ''; if ($gotData && $otherUserId != $accountData->account_userId) { - if (isset($accountUsers) && is_array($accountUsers)) { - $userSelected = (in_array($otherUserId, $accountUsers)) ? "selected" : ""; + if (isset($account->accountUsersId ) && is_array($account->accountUsersId )) { + $userSelected = (in_array($otherUserId, $account->accountUsersId )) ? "selected" : ""; } echo ""; } else{ @@ -318,8 +318,8 @@ $maxFileSize = round(SP_Config::getValue('files_allowed_size') / 1024, 1); $uGroupSelected = ''; if ($gotData && $otherGroupId != $accountData->account_userGroupId) { - if (isset($accountGroups) && is_array($accountGroups)) { - $uGroupSelected = (in_array($otherGroupId, $accountGroups)) ? "selected" : ""; + if (isset($account->accountUserGroupsId) && is_array($account->accountUserGroupsId)) { + $uGroupSelected = (in_array($otherGroupId, $account->accountUserGroupsId)) ? "selected" : ""; } echo ""; } else{ @@ -429,7 +429,7 @@ $maxFileSize = round(SP_Config::getValue('files_allowed_size') / 1024, 1); - 0): ?> + accountUsersId) && $account->accountUsersId !== false): ?> - 0): ?> + accountUserGroupsId) && $account->accountUserGroupsId !== false): ?>
account_login; ?>login; ?>
usergroup_name; ?>
@@ -438,7 +438,7 @@ $maxFileSize = round(SP_Config::getValue('files_allowed_size') / 1024, 1); foreach ($users as $userId => $userName) { if ($userId != $accountData->account_userId) { - if (in_array($userId, $accountUsers)) { + if (in_array($userId, $account->accountUsersId )) { $accUsers[] = $userName; } } @@ -450,7 +450,7 @@ $maxFileSize = round(SP_Config::getValue('files_allowed_size') / 1024, 1);
@@ -459,7 +459,7 @@ $maxFileSize = round(SP_Config::getValue('files_allowed_size') / 1024, 1); foreach ($groups as $groupId => $groupName) { if ($groupId != $accountData->account_userGroupId) { - if (in_array($groupId, $accountGroups)) { + if (in_array($groupId, $account->accountUserGroupsId)) { $accGroups[] = $groupName; } } @@ -486,9 +486,8 @@ $maxFileSize = round(SP_Config::getValue('files_allowed_size') / 1024, 1); accountIsHistory): ?> -
+ - diff --git a/inc/tpl/editpass.php b/inc/tpl/editpass.php index eee0e8b3..153aadba 100644 --- a/inc/tpl/editpass.php +++ b/inc/tpl/editpass.php @@ -2,8 +2,8 @@ /** * sysPass * - * @author nuxsmin - * @link http://syspass.org + * @author nuxsmin + * @link http://syspass.org * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org * * This file is part of sysPass. @@ -56,7 +56,8 @@ $accountData = $account->getAccount();
- +    @@ -73,7 +74,7 @@ $accountData = $account->getAccount();
- + diff --git a/inc/tpl/eventlog.php b/inc/tpl/eventlog.php index 54e8340b..7a77a13a 100644 --- a/inc/tpl/eventlog.php +++ b/inc/tpl/eventlog.php @@ -81,7 +81,7 @@ $numRows = SP_Log::$numRows; log_id; ?> - date; ?> + log_date; ?> log_action); ?> diff --git a/inc/tpl/profiles.php b/inc/tpl/profiles.php index eca0cc71..5e626ac4 100644 --- a/inc/tpl/profiles.php +++ b/inc/tpl/profiles.php @@ -38,7 +38,7 @@ $activeTab = $data['activeTab']; - + @@ -46,24 +46,24 @@ $activeTab = $data['activeTab'];
- /> + /> - /> + />
- /> + /> - /> + />
- /> + /> - /> + />
- /> + /> - /> + />
@@ -72,12 +72,12 @@ $activeTab = $data['activeTab'];
- /> + /> - /> + />
- /> + />
@@ -86,17 +86,17 @@ $activeTab = $data['activeTab'];
- /> + /> - /> + />
- /> + /> - /> + />
- /> + />
@@ -105,7 +105,7 @@ $activeTab = $data['activeTab'];
- /> + />
@@ -114,7 +114,7 @@ $activeTab = $data['activeTab']; - + " /> diff --git a/inc/upgrade.class.php b/inc/upgrade.class.php index e0c8685d..5bec73bc 100644 --- a/inc/upgrade.class.php +++ b/inc/upgrade.class.php @@ -31,7 +31,7 @@ defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo' */ class SP_Upgrade { - private static $dbUpgrade = array(110, 1121, 1122, 1123,11213); + private static $dbUpgrade = array(110, 1121, 1122, 1123, 11213, 12001); private static $cfgUpgrade = array(1124); /** @@ -89,15 +89,22 @@ class SP_Upgrade $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 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\';'; + break; default : $result['text'][] = _('No es necesario actualizar la Base de Datos.'); return true; } foreach ($queries as $query) { - if (DB::doQuery($query, __FUNCTION__) === false && DB::$numError != 1060 && DB::$numError != 1050) { + try{ + DB::getQuery($query, __FUNCTION__); + } catch(SPDatabaseException $e){ $result['text'][] = _('Error al aplicar la actualización de la Base de Datos.') . ' (v' . $version . ')'; - $result['text'][] = 'ERROR: ' . DB::$txtError . ' (' . DB::$numError . ')'; + $result['text'][] = 'ERROR: ' . $e->getMessage() . ' (' . $e->getCode() . ')'; SP_Log::wrLogInfo($result); return false; } diff --git a/inc/users.class.php b/inc/users.class.php index 984a76cf..bc72f4ce 100644 --- a/inc/users.class.php +++ b/inc/users.class.php @@ -3,8 +3,8 @@ /** * sysPass * - * @author nuxsmin - * @link http://syspass.org + * @author nuxsmin + * @link http://syspass.org * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org * * This file is part of sysPass. @@ -123,54 +123,54 @@ class SP_Users * @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) + 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," - . "user_isAdminApp," - . "user_isAdminAcc," - . "user_isLdap," - . "user_isDisabled," - . "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 = " . (int)$itemId . " LIMIT 1"; + $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," - . "user_isAdminApp," - . "user_isAdminAcc," - . "user_isLdap," - . "user_isDisabled," - . "user_isChangePass " - . "FROM usrData " - . "LEFT JOIN usrProfiles ON user_profileId = userprofile_id " - . "LEFT JOIN usrGroups ON usrData.user_groupId = usergroup_id "; + $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["uisadminapp"] == 0) ? "WHERE user_isAdminApp = 0 ORDER BY user_name" : "ORDER BY user_name"; + $query .= ($_SESSION['uisadminapp'] == 0) ? 'WHERE user_isAdminApp = 0 ORDER BY user_name' : 'ORDER BY user_name'; } - $queryRes = DB::getResults($query, __FUNCTION__, true); + DB::setReturnArray(); - if ($queryRes === false) { - return false; - } - - return $queryRes; + return DB::getResults($query, __FUNCTION__, $data); } /** @@ -181,27 +181,20 @@ class SP_Users */ public static function checkUserIsMigrate($userLogin) { - $query = "SELECT user_isMigrate " - . "FROM usrData " - . "WHERE user_login = '" . DB::escape($userLogin) . "' LIMIT 1"; - $queryRes = DB::getResults($query, __FUNCTION__); + $query = 'SELECT BIN(user_isMigrate) AS user_isMigrate FROM usrData WHERE user_login = :login LIMIT 1'; - if ($queryRes === false) { - return false; - } + $data['login'] = $userLogin; - if ($queryRes->user_isMigrate == 0) { - return false; - } + $queryRes = DB::getResults($query, __FUNCTION__, $data); - return true; + 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 $userPass con la clave del usuario * @return bool * * Esta función actualiza la clave de un usuario que ha sido migrado desde phpPMS @@ -210,17 +203,23 @@ class SP_Users { $passdata = SP_Users::makeUserPass($userPass); - $query = "UPDATE usrData SET " - . "user_pass = '" . $passdata['pass'] . "'," - . "user_hashSalt = '" . $passdata['salt'] . "'," - . "user_lastUpdate = NOW()," - . "user_isMigrate = 0 " - . "WHERE user_login = '" . DB::escape($userLogin) . "' " - . "AND user_isMigrate = 1 " - . "AND (user_pass = SHA1(CONCAT(user_hashSalt,'" . DB::escape($userPass) . "')) " - . "OR user_pass = MD5('" . DB::escape($userPass) . "')) LIMIT 1"; + $query = 'UPDATE usrData SET ' + . 'user_pass = :pass,' + . 'user_hashSalt = :salt,' + . 'user_lastUpdate = NOW(),' + . 'user_isMigrate = 0 ' + . 'WHERE user_login = :login ' + . 'AND user_isMigrate = 1 ' + . 'AND (user_pass = SHA1(CONCAT(user_hashSalt,:passOld)) ' + . 'OR user_pass = MD5(:passOldMd5)) LIMIT 1'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['pass'] = $passdata['pass']; + $data['salt'] = $passdata['salt']; + $data['login'] = $userLogin; + $data['passOld'] = $userPass; + $data['passOldMd5'] = $userPass; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } @@ -241,32 +240,11 @@ class SP_Users private static function makeUserPass($userPass) { $salt = SP_Crypt::makeHashSalt(); - $userPass = DB::escape(sha1($salt . DB::escape($userPass))); + $userPass = sha1($salt . $userPass); return array('salt' => $salt, 'pass' => $userPass); } - /** - * 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 = " . (int)$id . " LIMIT 1"; - - $queryRes = DB::getResults($query, __FUNCTION__); - - if ($queryRes === false) { - return false; - } - - return $queryRes->user_login; - } - /** * Comprobar si el usuario tiene actualizada la clave maestra actual. * @@ -293,20 +271,14 @@ class SP_Users return false; } - $query = 'SELECT user_lastUpdateMPass ' - . 'FROM usrData ' - . 'WHERE user_id = ' . (int)$userId . ' LIMIT 1'; - $queryRes = DB::getResults($query, __FUNCTION__); + $query = 'SELECT user_lastUpdateMPass FROM usrData WHERE user_id = :id LIMIT 1'; - if ($queryRes === false) { - return false; - } + $data['id'] = $userId; - if ($configMPassTime > $queryRes->user_lastUpdateMPass) { - return false; - } + $queryRes = DB::getResults($query, __FUNCTION__, $data); + + return ($queryRes !== false && $queryRes->user_lastUpdateMPass > $configMPassTime); - return true; } /** @@ -317,11 +289,11 @@ class SP_Users */ public static function getUserIdByLogin($login) { - $query = "SELECT user_id " - . "FROM usrData " - . "WHERE user_login = '" . DB::escape($login) . "' LIMIT 1"; + $query = 'SELECT user_id FROM usrData WHERE user_login = :login LIMIT 1'; - $queryRes = DB::getResults($query, __FUNCTION__); + $data = array('login' => $login); + + $queryRes = DB::getResults($query, __FUNCTION__, $data); if ($queryRes === false) { return false; @@ -338,13 +310,17 @@ class SP_Users */ public static function getUsersNameForAccount($accountId) { - $query = "SELECT user_id," - . "user_login " - . "FROM accUsers " - . "JOIN usrData ON user_Id = accuser_userId " - . "WHERE accuser_accountId = " . (int)$accountId; + $query = 'SELECT user_id,' + . 'user_login ' + . 'FROM accUsers ' + . 'JOIN usrData ON user_Id = accuser_userId ' + . 'WHERE accuser_accountId = :id'; - $queryRes = DB::getResults($query, __FUNCTION__, true); + $data['id'] = $accountId; + + DB::setReturnArray(); + + $queryRes = DB::getResults($query, __FUNCTION__, $data); if ($queryRes === false) { return false; @@ -382,25 +358,21 @@ class SP_Users * @param array $usersId opcional con los grupos de la cuenta * @return bool */ - public static function deleteUsersForAccount($accountId, $usersId = NULL) + public static function deleteUsersForAccount($accountId, $usersId = null) { $queryExcluded = ''; - // Excluimos los grupos actuales + // Excluimos los usuarios actuales if (is_array($usersId)) { - $queryExcluded = ' AND accuser_userId NOT IN (' . implode(',', $usersId) . ')'; + array_map('intval', $usersId); + $queryExcluded = 'AND accuser_userId NOT IN (' . implode(',', $usersId) . ')'; } - $query = 'DELETE FROM accUsers ' - . 'WHERE accuser_accountId = ' . (int)$accountId . $queryExcluded; + $query = 'DELETE FROM accUsers WHERE accuser_accountId = :id ' . $queryExcluded; - //error_log($query); + $data['id'] = $accountId; - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } - - return true; + return DB::getQuery($query, __FUNCTION__, $data); } /** @@ -412,38 +384,31 @@ class SP_Users */ public static function addUsersForAccount($accountId, $usersId) { + if (!is_array($usersId)) { + return true; + } + $values = ''; // Obtenemos los grupos actuales - $currentUsers = self::getUsersForAccount($accountId); - - if (is_array($currentUsers)) { - foreach ($currentUsers as $user) { - $usersExcluded[] = $user->accuser_userId; - } - } + $usersExcluded = self::getUsersForAccount($accountId); foreach ($usersId as $userId) { // Excluimos los usuarios actuales - if (is_array($usersExcluded) && in_array($userId, $usersExcluded)) { + if (isset($usersExcluded) && is_array($usersExcluded) && in_array($userId, $usersExcluded)) { continue; } - $values[] = '(' . $accountId . ',' . $userId . ')'; + $values[] = '(' . (int)$accountId . ',' . (int)$userId . ')'; } if (!is_array($values)) { return true; } - $query = 'INSERT INTO accUsers (accuser_accountId, accuser_userId) ' - . 'VALUES ' . implode(',', $values); + $query = 'INSERT INTO accUsers (accuser_accountId, accuser_userId) VALUES ' . implode(',', $values); - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } - - return true; + return DB::getQuery($query, __FUNCTION__); } /** @@ -454,17 +419,23 @@ class SP_Users */ public static function getUsersForAccount($accountId) { - $query = "SELECT accuser_userId " - . "FROM accUsers " - . "WHERE accuser_accountId = " . (int)$accountId; + $query = 'SELECT accuser_userId FROM accUsers WHERE accuser_accountId = :id'; - $queryRes = DB::getResults($query, __FUNCTION__, true); + $data['id'] = $accountId; + + DB::setReturnArray(); + + $queryRes = DB::getResults($query, __FUNCTION__, $data); if ($queryRes === false) { return false; } - return $queryRes; + foreach ($queryRes as $user) { + $users[] = $user->accuser_userId; + } + + return $users; } /** @@ -476,9 +447,15 @@ class SP_Users */ public static function checkUserMail($login, $email) { - $userId = self::getUserIdByLogin($login); + $query = 'SELECT user_id FROM usrData WHERE user_login = :login AND user_email = :email LIMIT 1'; - return ($userId && self::getUserEmail($userId) == $email); + $data['login'] = $login; + $data['email'] = $email; + + return (DB::getQuery($query, __FUNCTION__, $data) === true && DB::$last_num_rows === 1); + +// $userId = self::getUserIdByLogin($login); +// return ($userId && self::getUserEmail($userId) == $email); } /** @@ -489,11 +466,11 @@ class SP_Users */ public static function getUserEmail($userId) { - $query = "SELECT user_email " - . "FROM usrData " - . "WHERE user_id = " . (int)$userId . " " - . "AND user_email IS NOT NULL LIMIT 1"; - $queryRes = DB::getResults($query, __FUNCTION__); + $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; @@ -506,24 +483,21 @@ class SP_Users * 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 + * @param string $hash con el hash para el cambio * @return bool */ public static function addPassRecover($login, $hash) { - $userId = self::getUserIdByLogin($login); + $query = 'INSERT INTO usrPassRecover SET ' + . 'userpassr_userId = :userId,' + . 'userpassr_hash = :hash,' + . 'userpassr_date = UNIX_TIMESTAMP(),' + . 'userpassr_used = 0'; - $query = "INSERT INTO usrPassRecover SET " - . "userpassr_userId = " . $userId . "," - . "userpassr_hash = '" . DB::escape($hash) . "'," - . "userpassr_date = UNIX_TIMESTAMP()," - . "userpassr_used = 0"; + $data['userId'] = self::getUserIdByLogin($login); + $data['hash'] = $hash; - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } - - return true; + return DB::getQuery($query, __FUNCTION__, $data); } /** @@ -534,44 +508,31 @@ class SP_Users */ public static function checkUserIsDisabled($userLogin) { - $query = "SELECT user_isDisabled " - . "FROM usrData " - . "WHERE user_login = '" . DB::escape($userLogin) . "' LIMIT 1"; - $queryRes = DB::getResults($query, __FUNCTION__); + $query = 'SELECT BIN(user_isDisabled) AS user_isDisabled FROM usrData WHERE user_login = :login LIMIT 1'; - if ($queryRes === false) { - return false; - } + $data['login'] = $userLogin; - if ($queryRes->user_isDisabled == 0) { - return false; - } + $queryRes = DB::getResults($query, __FUNCTION__, $data); - return true; + return ($queryRes !== false && intval($queryRes->user_isDisabled) === 1); } /** * Comprobar si un usuario autentifica mediante LDAP * . + * * @param string $userLogin con el login del usuario * @return bool */ public static function checkUserIsLDAP($userLogin) { - $query = "SELECT user_isLdap " - . "FROM usrData " - . "WHERE user_login = '" . DB::escape($userLogin) . "' LIMIT 1"; - $queryRes = DB::getResults($query, __FUNCTION__); + $query = 'SELECT BIN(user_isLdap) AS user_isLdap FROM usrData WHERE user_login = :login LIMIT 1'; - if ($queryRes === false) { - return false; - } + $data['login'] = $userLogin; - if ($queryRes->user_isLdap == 0) { - return false; - } + $queryRes = DB::getResults($query, __FUNCTION__, $data); - return true; + return ($queryRes !== false && intval($queryRes->user_isLdap) === 1); } /** @@ -582,13 +543,16 @@ class SP_Users */ public static function checkHashPassRecover($hash) { - $query = "SELECT userpassr_userId FROM usrPassRecover " - . "WHERE userpassr_hash = '" . DB::escape($hash) . "' " - . "AND userpassr_used = 0 " - . "AND userpassr_date >= " . (time() - self::MAX_PASS_RECOVER_TIME) . " " - . "ORDER BY userpassr_date DESC LIMIT 1"; + $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'; - $queryRes = DB::getResults($query, __FUNCTION__); + $data['hash'] = $hash; + $data['date'] = time() - self::MAX_PASS_RECOVER_TIME; + + $queryRes = DB::getResults($query, __FUNCTION__, $data); if ($queryRes === false) { return false; @@ -605,14 +569,11 @@ class SP_Users */ public static function updateHashPassRecover($hash) { - $query = "UPDATE usrPassRecover SET userpassr_used = 1 " . - "WHERE userpassr_hash = '" . DB::escape($hash) . "'"; + $query = 'UPDATE usrPassRecover SET userpassr_used = 1 WHERE userpassr_hash = :hash'; - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } + $data['hash'] = $hash; - return true; + return DB::getQuery($query, __FUNCTION__, $data); } /** @@ -623,19 +584,20 @@ class SP_Users */ public static function checkPassRecoverLimit($login) { - $query = "SELECT COUNT(*) as requests " . - "FROM usrPassRecover " . - "WHERE userpassr_userId = " . self::getUserIdByLogin($login) . " " . - "AND userpassr_used = 0 " . - "AND userpassr_date >= " . (time() - self::MAX_PASS_RECOVER_TIME); + $query = 'SELECT userpassr_userId ' . + 'FROM usrPassRecover ' . + 'WHERE userpassr_userId = :id ' . + 'AND userpassr_used = 0 ' . + 'AND userpassr_date >= :date'; - $queryRes = DB::getResults($query, __FUNCTION__); + $data['login'] = self::getUserIdByLogin($login); + $data['date'] = time() - self::MAX_PASS_RECOVER_TIME; - if ($queryRes === false) { - return false; - } + $db = new DB(); + $db->setParamData($data); - return ($queryRes->requests >= self::MAX_PASS_RECOVER_LIMIT); + return (DB::getQuery($query, __FUNCTION__, $data) === false || DB::$last_num_rows >= self::MAX_PASS_RECOVER_LIMIT); + //return ($db->getFullRowCount($query) >= self::MAX_PASS_RECOVER_LIMIT); } /** @@ -646,40 +608,43 @@ class SP_Users */ public function getUserInfo() { - $query = "SELECT user_id," - . "user_name," - . "user_groupId," - . "user_login," - . "user_email," - . "user_notes," - . "user_count," - . "user_profileId," - . "usergroup_name," - . "user_isAdminApp," - . "user_isAdminAcc," - . "user_isLdap," - . "user_isDisabled," - . "user_isChangePass " - . "FROM usrData " - . "LEFT JOIN usrGroups ON user_groupId = usergroup_id " - . "LEFT JOIN usrProfiles ON user_profileId = userprofile_id " - . "WHERE user_login = '" . DB::escape($this->userLogin) . "' LIMIT 1"; - $queryRes = DB::getResults($query, __FUNCTION__); + $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 = (int)$queryRes->user_id; + $this->userId = intval($queryRes->user_id); $this->userName = $queryRes->user_name; - $this->userGroupId = (int)$queryRes->user_groupId; + $this->userGroupId = intval($queryRes->user_groupId); $this->userGroupName = $queryRes->usergroup_name; $this->userEmail = $queryRes->user_email; - $this->userProfileId = (int)$queryRes->user_profileId; - $this->userIsAdminApp = (int)$queryRes->user_isAdminApp; - $this->userIsAdminAcc = (int)$queryRes->user_isAdminAcc; - $this->userIsLdap = (int)$queryRes->user_isLdap; - $this->userChangePass = (int)$queryRes->user_isChangePass; + $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; } @@ -694,12 +659,19 @@ class SP_Users $userLogin = strtoupper($this->userLogin); $userEmail = strtoupper($this->userEmail); - $query = "SELECT user_login, user_email " - . "FROM usrData " - . "WHERE (UPPER(user_login) = '" . DB::escape($userLogin) . "' " - . "OR UPPER(user_email) = '" . DB::escape($userEmail) . "') " - . "AND user_id != " . (int)$this->userId; - $queryRes = DB::getResults($query, __FUNCTION__, true); + $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; @@ -724,19 +696,12 @@ class SP_Users */ public function checkLDAPUserInDB() { - $query = "SELECT user_login " - . "FROM usrData " - . "WHERE user_login = '" . DB::escape($this->userLogin) . "' LIMIT 1"; + $query = 'SELECT user_login FROM usrData WHERE user_login = :login LIMIT 1'; - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } + $data['login'] = $this->userLogin; - if (count(DB::$last_result) == 0) { - return false; - } - - return true; + return (DB::getQuery($query, __FUNCTION__, $data) === true && DB::$last_num_rows === 1); +// return ($queryRes === true && $db->getFullRowCount($query) === 1); } /** @@ -750,19 +715,28 @@ class SP_Users { $passdata = SP_Users::makeUserPass($this->userPass); - $query = "INSERT INTO usrData SET " - . "user_name = '" . DB::escape($this->userName) . "'," - . "user_groupId = " . SP_Config::getValue('ldap_defaultgroup', 0) . "," - . "user_login = '" . DB::escape($this->userLogin) . "'," - . "user_pass = '" . $passdata['pass'] . "'," - . "user_hashSalt = '" . $passdata['salt'] . "'," - . "user_email = '" . DB::escape($this->userEmail) . "'," - . "user_notes = 'LDAP'," - . "user_profileId = " . SP_Config::getValue('ldap_defaultprofile', 0) . "," - . "user_isLdap = 1," - . "user_isDisabled = 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 = 0'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['name'] = $this->userName; + $data['login'] = $this->userLogin; + $data['pass'] = $passdata['pass']; + $data['hashSalt'] = $passdata['hash']; + $data['email'] = $this->userEmail; + $data['notes'] = 'LDAP'; + $data['groupId'] = SP_Config::getValue('ldap_defaultgroup', 0); + $data['profileId'] = SP_Config::getValue('ldap_defaultprofile', 0); + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } @@ -785,24 +759,37 @@ class SP_Users { $passdata = SP_Users::makeUserPass($this->userPass); - $query = "INSERT INTO usrData SET " - . "user_name = '" . DB::escape($this->userName) . "'," - . "user_login = '" . DB::escape($this->userLogin) . "'," - . "user_email = '" . DB::escape($this->userEmail) . "'," - . "user_notes = '" . DB::escape($this->userNotes) . "'," - . "user_groupId = " . (int)$this->userGroupId . "," - . "user_profileId = " . (int)$this->userProfileId . "," - . "user_mPass = ''," - . "user_mIV = ''," - . "user_isAdminApp = " . (int)$this->userIsAdminApp . "," - . "user_isAdminAcc = " . (int)$this->userIsAdminAcc . "," - . "user_isDisabled = " . (int)$this->userIsDisabled . "," - . "user_isChangePass = " . (int)$this->userChangePass . "," - . "user_pass = '" . $passdata['pass'] . "'," - . "user_hashSalt = '" . $passdata['salt'] . "'," - . "user_isLdap = 0"; + $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'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['name'] = $this->userName; + $data['login'] = $this->userLogin; + $data['email'] = $this->userEmail; + $data['notes'] = $this->userNotes; + $data['groupId'] = $this->userGroupId; + $data['profileId'] = $this->userProfileId; + $data['isAdminApp'] = $this->userIsAdminApp; + $data['isAdminAcc'] = $this->userIsAdminAcc; + $data['isDisabled'] = $this->userIsDisabled; + $data['isChangePass'] = $this->userChangePass; + $data['pass'] = $passdata['pass']; + $data['salt'] = $passdata['salt']; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } @@ -811,8 +798,8 @@ class SP_Users $message['action'] = _('Nuevo Usuario'); $message['text'][] = SP_Html::strongText(_('Usuario') . ': ') . $this->userName . ' (' . $this->userLogin . ')'; - if ($this->userChangePass){ - if ( ! SP_Auth::mailPassRecover(DB::escape($this->userLogin),DB::escape($this->userEmail)) ){ + if ($this->userChangePass) { + if (!SP_Auth::mailPassRecover(DB::escape($this->userLogin), DB::escape($this->userEmail))) { $message['text'][] = SP_Html::strongText(_('No se pudo realizar la petición de cambio de clave.')); } } @@ -830,21 +817,33 @@ class SP_Users */ public function updateUser() { - $query = "UPDATE usrData SET " - . "user_name = '" . DB::escape($this->userName) . "'," - . "user_login = '" . DB::escape($this->userLogin) . "'," - . "user_email = '" . DB::escape($this->userEmail) . "'," - . "user_notes = '" . DB::escape($this->userNotes) . "'," - . "user_groupId = " . (int)$this->userGroupId . "," - . "user_profileId = " . (int)$this->userProfileId . "," - . "user_isAdminApp = " . (int)$this->userIsAdminApp . "," - . "user_isAdminAcc = " . (int)$this->userIsAdminAcc . "," - . "user_isDisabled = " . (int)$this->userIsDisabled . "," - . "user_isChangePass = " . (int)$this->userChangePass . "," - . "user_lastUpdate = NOW() " - . "WHERE user_id = " . (int)$this->userId . " LIMIT 1"; + $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'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['name'] = $this->userName; + $data['login'] = $this->userLogin; + $data['email'] = $this->userEmail; + $data['notes'] = $this->userNotes; + $data['groupId'] = $this->userGroupId; + $data['profileId'] = $this->userProfileId; + $data['isAdminApp'] = $this->userIsAdminApp; + $data['isAdminAcc'] = $this->userIsAdminAcc; + $data['isDisabled'] = $this->userIsDisabled; + $data['isChangePass'] = $this->userChangePass; + $data['id'] = $this->userId; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } @@ -853,8 +852,8 @@ class SP_Users $message['action'] = _('Modificar Usuario'); $message['text'][] = SP_Html::strongText(_('Usuario') . ': ') . $this->userName . ' (' . $this->userLogin . ')'; - if ($this->userChangePass){ - if ( ! SP_Auth::mailPassRecover(DB::escape($this->userLogin),DB::escape($this->userEmail)) ){ + if ($this->userChangePass) { + if (!SP_Auth::mailPassRecover(DB::escape($this->userLogin), DB::escape($this->userEmail))) { $message['text'][] = SP_Html::strongText(_('No se pudo realizar la petición de cambio de clave.')); } } @@ -875,14 +874,18 @@ class SP_Users $passdata = SP_Users::makeUserPass($this->userPass); $userLogin = $this->getUserLoginById($this->userId); - $query = "UPDATE usrData SET " - . "user_pass = '" . $passdata['pass'] . "'," - . "user_hashSalt = '" . $passdata['salt'] . "'," - . "user_isChangePass = 0," - . "user_lastUpdate = NOW() " - . "WHERE user_id = " . (int)$this->userId . " LIMIT 1"; + $query = 'UPDATE usrData SET ' + . 'user_pass = :pass,' + . 'user_hashSalt = :salt,' + . 'user_isChangePass = 0,' + . 'user_lastUpdate = NOW() ' + . 'WHERE user_id = :id LIMIT 1'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['pass'] = $passdata['pass']; + $data['salt'] = $passdata['salt']; + $data['id'] = $this->userId; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } @@ -897,6 +900,27 @@ class SP_Users return true; } + /** + * Obtener el login de usuario a partir del Id. + * + * @param int $id con el id del usuario + * @return string con el login del usuario + */ + public static function getUserLoginById($id) + { + $query = 'SELECT user_login FROM usrData WHERE user_id = :id LIMIT 1'; + + $data['id'] = $id; + + $queryRes = DB::getResults($query, __FUNCTION__, $data); + + if ($queryRes === false) { + return false; + } + + return $queryRes->user_login; + } + /** * Eliminar un usuario. * @@ -906,10 +930,11 @@ class SP_Users { $userLogin = $this->getUserLoginById($this->userId); - $query = "DELETE FROM usrData " - . "WHERE user_id = " . (int)$this->userId . " LIMIT 1"; + $query = 'DELETE FROM usrData WHERE user_id = :id LIMIT 1'; - if (DB::doQuery($query, __FUNCTION__) === false) { + $data['id'] = $this->userId; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } @@ -933,20 +958,22 @@ class SP_Users { $passdata = SP_Users::makeUserPass($this->userPass); - $query = "UPDATE usrData SET " - . "user_pass = '" . $passdata['pass'] . "'," - . "user_hashSalt = '" . $passdata['salt'] . "'," - . "user_name = '" . DB::escape($this->userName) . "'," - . "user_email = '" . DB::escape($this->userEmail) . "'," - . "user_lastUpdate = NOW()," - . "user_isLdap = 1 " - . "WHERE user_id = " . $this->getUserIdByLogin($this->userLogin) . " LIMIT 1"; + $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'; - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } + $data['pass'] = $passdata['pass']; + $data['hashSalt'] = $passdata['salt']; + $data['name'] = $this->userName; + $data['email'] = $this->userEmail; + $data['id'] = $this->getUserIdByLogin($this->userLogin); - return true; + return DB::getQuery($query, __FUNCTION__, $data); } /** @@ -978,16 +1005,11 @@ class SP_Users */ private function setUserLastLogin() { - $query = "UPDATE usrData SET " - . "user_lastLogin = NOW()," - . "user_count = user_count + 1 " - . "WHERE user_id = " . (int)$this->userId . " LIMIT 1"; + $query = 'UPDATE usrData SET user_lastLogin = NOW(),user_count = user_count + 1 WHERE user_id = :id LIMIT 1'; - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } + $data['id'] = $this->userId; - return true; + return DB::getQuery($query, __FUNCTION__, $data); } /** @@ -1021,10 +1043,11 @@ class SP_Users */ public function getUserMPass($showPass = false) { - $query = "SELECT user_mPass, user_mIV " - . "FROM usrData " - . "WHERE user_id = " . (int)$this->userId . " LIMIT 1"; - $queryRes = DB::getResults($query, __FUNCTION__); + $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; @@ -1049,6 +1072,7 @@ class SP_Users return true; } } + return false; } @@ -1089,16 +1113,16 @@ class SP_Users return false; } - $query = "UPDATE usrData SET " - . "user_mPass = '" . DB::escape($strUserMPwd[0]) . "'," - . "user_mIV = '" . DB::escape($strUserMPwd[1]) . "'," - . "user_lastUpdateMPass = UNIX_TIMESTAMP() " - . "WHERE user_id = " . (int)$this->userId . " LIMIT 1"; + $query = 'UPDATE usrData SET ' + . 'user_mPass = :mPass,' + . 'user_mIV = :mIV,' + . 'user_lastUpdateMPass = UNIX_TIMESTAMP() ' + . 'WHERE user_id = :id LIMIT 1'; - if (DB::doQuery($query, __FUNCTION__) === false) { - return false; - } + $data['mPass'] = $strUserMPwd[0]; + $data['mIV'] = $strUserMPwd[1]; + $data['id'] = $this->userId; - return true; + return DB::getQuery($query, __FUNCTION__, $data); } } \ No newline at end of file diff --git a/inc/util.class.php b/inc/util.class.php index 2df1605d..72906562 100644 --- a/inc/util.class.php +++ b/inc/util.class.php @@ -182,7 +182,7 @@ class SP_Util */ public static function getVersionString() { - return '1.1'; + return '1.2'; } /** @@ -275,8 +275,8 @@ class SP_Util */ public static function getVersion($retBuild = false) { - $build = 17; - $version = array(1, 1, 2); + $build = '01'; + $version = array(1, 2, 0); if ($retBuild) { array_push($version, $build); From ec1a5c8cdc4fd7d92f651ef89d702678f662ac26 Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Wed, 4 Mar 2015 19:35:47 +0100 Subject: [PATCH 02/84] * Fixed row count method pattern replacement --- inc/category.class.php | 6 +++--- inc/db.class.php | 13 +++++++------ inc/migrate.class.php | 5 ++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/inc/category.class.php b/inc/category.class.php index 10bdc14a..1f757e11 100644 --- a/inc/category.class.php +++ b/inc/category.class.php @@ -287,9 +287,9 @@ class SP_Category $data['id'] = $id; - $db = new DB(); - $db->setParamData($data); - return $db->getFullRowCount($query); + DB::getQuery($query, __FUNCTION__, $data); + + return DB::$last_num_rows; } } diff --git a/inc/db.class.php b/inc/db.class.php index 4b7dfdfa..7819dd34 100644 --- a/inc/db.class.php +++ b/inc/db.class.php @@ -353,14 +353,18 @@ class DB * @return int Número de files de la consulta * @throws SPDatabaseException */ - public function getFullRowCount(&$query) + private function getFullRowCount(&$query) { if (empty($query)) { return 0; } - $patterns = array('/(LIMIT|ORDER BY).*/i', '/SELECT.*FROM/i'); - $replace = array('', 'SELECT COUNT(*) FROM'); + $patterns = array( + '/(LIMIT|ORDER BY|GROUP BY).*/i', + '/SELECT DISTINCT\s([\w_]+),.* FROM/i', + '/SELECT [\w_]+,.* FROM/i' + ); + $replace = array('','SELECT COUNT(DISTINCT \1) FROM', 'SELECT COUNT(*) FROM'); $query = preg_replace($patterns, $replace, $query); @@ -376,9 +380,6 @@ class DB } } - // FIXME - //error_log("numrows: " . $num); - $queryRes->closeCursor(); return $num; diff --git a/inc/migrate.class.php b/inc/migrate.class.php index d5bd4632..2593d4eb 100644 --- a/inc/migrate.class.php +++ b/inc/migrate.class.php @@ -265,10 +265,9 @@ class SP_Migrate $data['id'] = $currentUserId; - $db = new DB(); - $db->setParamData($data); + DB::getQuery($query, __FUNCTION__, $data); - return ($db->getFullRowCount($query) === 0); + return (DB::$last_num_rows === 0); } /** From 40acdb2ef89ef97b6289cf7aed0ac91920aa8d41 Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Sat, 28 Mar 2015 11:51:02 +0100 Subject: [PATCH 03/84] * Updated jQuery version * Updated ZeroClipboard version * New temporary master password function * New help boxes for some functions * New password box with copy to clipboard function * Updated some fields on db structure * Minor bugfixes and UI changes --- ajax/ajax_configSave.php | 11 +++ ajax/ajax_doLogin.php | 4 + ajax/ajax_getContent.php | 3 +- ajax/ajax_search.php | 41 ++++---- ajax/ajax_viewpass.php | 40 +++----- css/styles.css | 44 +++++++-- inc/common.class.php | 48 ++++++---- inc/config.class.php | 77 ++++++++++++++- inc/dbstructure.sql | 8 +- inc/tpl/accounts.php | 35 +++---- inc/tpl/backup.php | 16 +++- inc/tpl/config.php | 45 ++++----- inc/tpl/main.php | 2 +- inc/tpl/masterpass.php | 96 ++++++++++++++++++- inc/upgrade.class.php | 9 +- inc/users.class.php | 2 +- inc/util.class.php | 4 +- js/ZeroClipboard.min.js | 17 ++-- js/ZeroClipboard.swf | Bin 2157 -> 6580 bytes js/functions.js | 168 +++++++++++++++++++++++++++------ js/jquery-1.11.2.min.js | 4 + js/jquery-migrate-1.2.1.min.js | 2 + js/js.php | 6 +- 23 files changed, 510 insertions(+), 172 deletions(-) create mode 100644 js/jquery-1.11.2.min.js create mode 100644 js/jquery-migrate-1.2.1.min.js diff --git a/ajax/ajax_configSave.php b/ajax/ajax_configSave.php index 13af3185..751e9830 100644 --- a/ajax/ajax_configSave.php +++ b/ajax/ajax_configSave.php @@ -225,6 +225,17 @@ if ($frmAction == "config") { } SP_Common::printJSON(_('Error al guardar el hash de la clave maestra')); +} elseif ($frmAction == "tmpass") { + $tempMasterMaxTime = SP_Common::parseParams('p', 'tmpass_maxtime', 3600); + $tempMasterPass = SP_Config::setTempMasterPass($tempMasterMaxTime); + + if (!empty($tempMasterPass)){ + $message['action'] = _('Generar Clave Temporal'); + $message['text'][] = SP_Html::strongText(_('Clave') . ': ') . $tempMasterPass; + + SP_Common::sendEmail($message); + SP_Common::printJSON(_('Clave Temporal Generada'), 0, $doActionOnClose); + } } else { SP_Common::printJSON(_('Acción Inválida')); } \ No newline at end of file diff --git a/ajax/ajax_doLogin.php b/ajax/ajax_doLogin.php index d21d2d41..d87b2bf2 100644 --- a/ajax/ajax_doLogin.php +++ b/ajax/ajax_doLogin.php @@ -126,6 +126,10 @@ if (!$objUser->getUserInfo()) { if (!$masterPass && (!$objUser->checkUserMPass() || !SP_Users::checkUserUpdateMPass($userLogin) )) { SP_Common::printJSON(_('La clave maestra no ha sido guardada o es incorrecta'), 3); } elseif ($masterPass) { + if(SP_Config::checkTempMasterPass($masterPass)){ + $masterPass = SP_Config::getTempMasterPass($masterPass); + } + if (!$objUser->updateUserMPass($masterPass)) { $message['text'][] = _('Clave maestra incorrecta'); SP_Log::wrLogInfo($message); diff --git a/ajax/ajax_getContent.php b/ajax/ajax_getContent.php index 500ca10c..f00ae2cf 100644 --- a/ajax/ajax_getContent.php +++ b/ajax/ajax_getContent.php @@ -317,7 +317,7 @@ switch ($action) { echo '
'; echo ''; @@ -388,6 +388,7 @@ if (isset($_SESSION["uisadminapp"]) && SP_Config::getValue('debug')) { $debugTxt[] = "
  • SESSION:"; $debugTxt[] = "
    " . print_r($_SESSION, true) . "";
         $debugTxt[] = "
  • CONFIG:
    ";
         $debugTxt[] = "
    " . print_r(SP_Config::getKeys(true), true) . "
    "; $debugTxt[] = "
  • "; diff --git a/ajax/ajax_search.php b/ajax/ajax_search.php index 75aee8ec..42b000e4 100644 --- a/ajax/ajax_search.php +++ b/ajax/ajax_search.php @@ -2,8 +2,8 @@ /** * sysPass * - * @author nuxsmin - * @link http://syspass.org + * @author nuxsmin + * @link http://syspass.org * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org * * This file is part of sysPass. @@ -157,9 +157,9 @@ foreach ($resQuery as $account) { $color = array_rand($colors); if (!isset($customerColor)) { - $customerColor[$account->account_customerId] = '#'.$colors[$color]; + $customerColor[$account->account_customerId] = '#' . $colors[$color]; } elseif (isset($customerColor) && !array_key_exists($account->account_customerId, $customerColor)) { - $customerColor[$account->account_customerId] = '#'.$colors[$color]; + $customerColor[$account->account_customerId] = '#' . $colors[$color]; } //$hexColor = $customerColor[$account->account_customerId][0]; @@ -215,7 +215,7 @@ foreach ($resQuery as $account) { } } - if ($account->account_notes){ + if ($account->account_notes) { $strAccNotes = (strlen($account->account_notes) > 300) ? substr($account->account_notes, 0, 300) . "..." : $account->account_notes; $strAccNotes = nl2br(wordwrap(htmlspecialchars($strAccNotes), 50, '
    ', true)); } @@ -286,7 +286,8 @@ foreach ($resQuery as $account) { if ($accViewPass) { echo ''; - echo ''; +// echo ''; + echo ''; } if ($accEdit || $accCopy || $accDel || $accViewPass) { @@ -326,22 +327,26 @@ SP_Html::printQuerySearchNavBar($sortKey, $arrSearchFilter["limitStart"], $objAc //echo $objAccount->query; ?> - + \ No newline at end of file diff --git a/ajax/ajax_viewpass.php b/ajax/ajax_viewpass.php index d7076dcc..cfb68cf6 100644 --- a/ajax/ajax_viewpass.php +++ b/ajax/ajax_viewpass.php @@ -33,7 +33,6 @@ if (!SP_Init::isLoggedIn()) { } $accountId = SP_Common::parseParams('p', 'accountid', false); -$fullTxt = SP_Common::parseParams('p', 'full', 0); $isHistory = SP_Common::parseParams('p', 'isHistory', false); if (!$accountId) { @@ -48,28 +47,23 @@ $account->accountId = $accountId; $accountData = $account->getAccountPass($isHistory); if ($isHistory && !$account->checkAccountMPass()){ - echo '
    ' . _('La clave maestra no coincide') . '
    '; - return; + SP_Common::printJSON(_('La clave maestra no coincide')); } $accountData = $account->getAccountPass($isHistory); if (!SP_ACL::checkAccountAccess("accviewpass", $account->getAccountDataForACL()) || !SP_ACL::checkUserAccess("accviewpass")) { - die('' . _('No tiene permisos para acceder a esta cuenta') . ''); + SP_Common::printJSON(_('No tiene permisos para acceder a esta cuenta')); } if (!SP_Users::checkUserUpdateMPass()) { - if ($fullTxt) { - die('
    ' . _('Clave maestra actualizada') . '
    ' . _('Reinicie la sesión para cambiarla') . '
    '); - } else { - die(_('Clave maestra actualizada') . '
    ' . _('Reinicie la sesión para cambiarla')); - } + SP_Common::printJSON(_('Clave maestra actualizada') . '
    ' . _('Reinicie la sesión para cambiarla')); } $masterPass = SP_Crypt::getSessionMasterPass(); $accountClearPass = SP_Crypt::getDecrypt($accountData->pass, $masterPass, $accountData->iv); -if (!$isHistory && $fullTxt) { +if (!$isHistory) { $account->incrementDecryptCounter(); $message['action'] = _('Ver Clave'); @@ -81,22 +75,10 @@ if (!$isHistory && $fullTxt) { $accountPass = htmlentities(trim($accountClearPass),ENT_COMPAT,'UTF-8'); -if ($fullTxt) { - ?> -
    - - - - - - - - - -
    login; ?>
    -
    - \ No newline at end of file +$data = array( + 'title' => _('Clave de Cuenta'), +// 'acclogin' => _('Usuario') . ': ' . $accountData->login, + 'accpass' => $accountPass +); + +SP_Common::printJSON($data, 0); \ No newline at end of file diff --git a/css/styles.css b/css/styles.css index f0332ad4..74e5d353 100644 --- a/css/styles.css +++ b/css/styles.css @@ -73,26 +73,29 @@ input, select, textarea { background-color: #fffef0; color: black; font-size: 11px; + padding: 5px; +} + +td>input, td>select, td>textarea { border: 1px solid #dfdfdf; border-radius: 5px; -webkit-border-radius: 5px; -moz-border-radius: 5px; box-shadow: 0 0 8px rgba(0, 0, 0, 0.075) inset; - padding: 5px; } input:hover, select:hover, textarea:hover { background-color: #fffccd; } -input:active, select:hover, textarea:active { +td>input:active, td>select:hover, td>textarea:active { background-color: #fffde1; color: #045FB4; border: 1px solid #5897fb; box-shadow: 0 0 5px rgba(0, 0, 0, 0.1) inset, 0 0 5px rgba(88, 151, 251, 0.5); } -input:focus, select:hover, textarea:focus { +td>input:focus, td>select:hover, td>textarea:focus { background-color: #fffccd; color: #045FB4; border: 1px solid #5897fb; @@ -1478,6 +1481,16 @@ footer img { font-weight: bold; } +.dialog-pass-text{padding: .5em; border: transparent 1px solid; text-align: center; min-width: 200px; } +.dialog-buttons{text-align: center; padding: .5em; border-top: 1px solid #c9c9c9; line-height: 2.5em;} +.dialog-clip-pass-copy { + background-color: #ecfde4;; + color: green; + border: #dbfdcb 1px solid; +} + +.help-text{text-align: justify; line-height: 1.5em; margin-top: 1em;} + /*Login Page*/ #boxLogin { width: 450px; @@ -1750,11 +1763,22 @@ fieldset.warning a { text-align: center; } -#whatsNewIcon {text-align: center;} -#whatsNewIcon img{width: 64px; height: 64px;} -#whatsNewIcon h2{display: inline-block; color: #555; font-size: 16px;} +#whatsNewIcon { + text-align: center; +} -#whatsNew{ +#whatsNewIcon img { + width: 64px; + height: 64px; +} + +#whatsNewIcon h2 { + display: inline-block; + color: #555; + font-size: 16px; +} + +#whatsNew { margin: 0 auto; width: 500px; background-color: #fffde1; @@ -1767,7 +1791,11 @@ fieldset.warning a { display: none; } -#whatsNew ul{padding: 0; border: none;} +#whatsNew ul { + padding: 0; + border: none; +} + #whatsNew li { padding-left: 37px; background: url("../imgs/arrow-list.png") left center no-repeat; diff --git a/inc/common.class.php b/inc/common.class.php index a90f11c8..f339bb66 100644 --- a/inc/common.class.php +++ b/inc/common.class.php @@ -2,8 +2,8 @@ /** * sysPass * - * @author nuxsmin - * @link http://syspass.org + * @author nuxsmin + * @link http://syspass.org * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org * * This file is part of sysPass. @@ -35,7 +35,7 @@ class SP_Common * * @param array $message con el nombre de la accióm y el texto del mensaje * @param string $mailTo con el destinatario - * @param bool $isEvent para indicar si es um + * @param bool $isEvent para indicar si es um * @return bool */ public static function sendEmail($message, $mailTo = '', $isEvent = true) @@ -152,7 +152,7 @@ class SP_Common * Devuelve una respuesta en formato XML con el estado y el mensaje. * * @param string $description mensaje a devolver - * @param int $status devuelve el estado + * @param int $status devuelve el estado * @return bool */ public static function printXML($description, $status = 1) @@ -176,23 +176,37 @@ class SP_Common /** * Devuelve una respuesta en formato JSON con el estado y el mensaje. * - * @param string $description mensaje a devolver - * @param int $status devuelve el estado - * @param string $action con la accion a realizar + * @param string|array $data mensaje a devolver + * @param int $status devuelve el estado + * @param string $action con la accion a realizar * @return bool */ - public static function printJSON($description, $status = 1, $action = '') + public static function printJSON($data, $status = 1, $action = '') { - if (!is_string($description)) { + if (!is_string($data) && !is_array($data)) { return false; } $arrStrFrom = array("\\", '"', "'"); $arrStrTo = array("\\", '\"', "\'"); - $cleanDescription = str_replace($arrStrFrom, $arrStrTo, $description); + if (!is_array($data)) { + $json = array( + 'status' => $status, + 'description' => str_replace($arrStrFrom, $arrStrTo, $data), + 'action' => $action + ); + } else { + array_walk($data, + function (&$value, &$key, $arrStrFrom, $arrStrTo) { + return str_replace($arrStrFrom, $arrStrTo, $value); + } + ); - $json = array('status' => $status, 'description' => $cleanDescription, 'action' => $action); + $data['status'] = $status; + $data['action'] = $action; + $json = $data; + } header('Content-type: application/json'); exit(json_encode($json)); @@ -202,7 +216,7 @@ class SP_Common * Devuelve un icono de ayuda con el mensaje. * * @param int $type tipo de mensaje - * @param int $id id del mensaje + * @param int $id id del mensaje * @return string Con la etiqueta html del icono de ayuda */ public static function printHelpButton($type, $id) @@ -281,12 +295,12 @@ class SP_Common * Obtener los valores de variables $_GET, $_POST, $_REQUEST o $_SESSION * y devolverlos limpios con el tipo correcto o esperado. * - * @param string $method con el método a utilizar - * @param string $param con el parámetro a consultar - * @param mixed $default opcional, valor por defecto a devolver + * @param string $method con el método a utilizar + * @param string $param con el parámetro a consultar + * @param mixed $default opcional, valor por defecto a devolver * @param bool $onlyCHeck opcional, comprobar si el parámetro está presente - * @param mixed $force opcional, valor devuelto si el parámeto está definido - * @param bool $sanitize opcional, escapar/eliminar carácteres especiales + * @param mixed $force opcional, valor devuelto si el parámeto está definido + * @param bool $sanitize opcional, escapar/eliminar carácteres especiales * @return bool|string si está presente el parámeto en la petición devuelve bool. Si lo está, devuelve el valor. */ public static function parseParams($method, $param, $default = '', $onlyCHeck = false, $force = false, $sanitize = true) diff --git a/inc/config.class.php b/inc/config.class.php index ac8c853f..6bb79b46 100644 --- a/inc/config.class.php +++ b/inc/config.class.php @@ -130,9 +130,10 @@ class SP_Config * * @param string $param con el parámetro a guardar * @param string $value con el calor a guardar + * @param bool $email enviar email? * @return bool */ - public static function setConfigValue($param, $value) + public static function setConfigValue($param, $value, $email = true) { $query = "INSERT INTO config " . "SET config_parameter = :param," @@ -153,7 +154,10 @@ class SP_Config $message['text'][] = _('Valor') . ': ' . $value; SP_Log::wrLogInfo($message); - SP_Common::sendEmail($message); + + if ($email === true) { + SP_Common::sendEmail($message); + } return true; } @@ -367,4 +371,73 @@ class SP_Config self::writeData(); return true; } + + /** + * Crea una clave temporal para encriptar la clave maestra y guardarla. + * + * @return bool|string + */ + public static function setTempMasterPass($maxTime = 14400) + { + // Encriptar la clave maestra con hash aleatorio generado + $randomHash = SP_Util::generate_random_bytes(32); + $pass = SP_Crypt::mkCustomMPassEncrypt($randomHash, SP_Crypt::getSessionMasterPass()); + + if (!is_array($pass)){ + return false; + } + + self::setConfigValue('tempmaster_pass', bin2hex($pass[0]), false); + self::setConfigValue('tempmaster_passiv', bin2hex($pass[1]), false); + self::setConfigValue('tempmaster_passhash', sha1($randomHash), false); + self::setConfigValue('tempmaster_passtime', time(), false); + self::setConfigValue('tempmaster_maxtime', time() + $maxTime, false); + self::setConfigValue('tempmaster_attempts', 0, false); + + return $randomHash; + } + + /** + * Comprueba si la clave temporal es válida + * + * @param string $pass clave a comprobar + * @return bool + */ + public static function checkTempMasterPass($pass) + { + $passTime = self::getConfigValue('tempmaster_passtime'); + $passMaxTime = self::getConfigValue('tempmaster_maxtime'); + $attempts = self::getConfigValue('tempmaster_attempts'); + + // Comprobar si el tiempo de validez se ha superado + if ($passTime !== false && time() - $passTime > $passMaxTime || $attempts >= 5){ + self::setConfigValue('tempmaster_pass', '', false); + self::setConfigValue('tempmaster_passiv', '', false); + self::setConfigValue('tempmaster_passhash', '', false); + + return false; + } + + $isValid = (self::getConfigValue('tempmaster_passhash') == sha1($pass)); + + if (!$isValid){ + self::setConfigValue('tempmaster_attempts', $attempts + 1, false); + } + + return $isValid; + } + + /** + * Devuelve la clave maestra que ha sido encriptada con la clave temporal + * + * @param $pass con la clave utilizada para encriptar + * @return string con la clave maestra desencriptada + */ + public static function getTempMasterPass($pass) + { + $passLogin = hex2bin(self::getConfigValue('tempmaster_pass')); + $passLoginIV = hex2bin(self::getConfigValue('tempmaster_passiv')); + + return SP_Crypt::getDecrypt($passLogin, $pass, $passLoginIV); + } } diff --git a/inc/dbstructure.sql b/inc/dbstructure.sql index 2e7c5e54..14a04e46 100644 --- a/inc/dbstructure.sql +++ b/inc/dbstructure.sql @@ -63,7 +63,7 @@ CREATE TABLE `accHistory` ( `acchistory_categoryId` tinyint(3) unsigned NOT NULL, `acchistory_login` varchar(50) NOT NULL, `acchistory_url` varchar(255) DEFAULT NULL, - `acchistory_pass` varbinary(32) NOT 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', @@ -113,7 +113,7 @@ CREATE TABLE `accounts` ( `account_categoryId` tinyint(3) unsigned NOT NULL, `account_login` varchar(50) DEFAULT NULL, `account_url` varchar(255) DEFAULT NULL, - `account_pass` varbinary(32) NOT 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', @@ -208,8 +208,8 @@ CREATE TABLE `usrData` ( `user_groupId` tinyint(3) unsigned NOT NULL, `user_secGroupId` tinyint(3) unsigned DEFAULT NULL, `user_login` varchar(50) NOT NULL, - `user_pass` varbinary(40) NOT NULL, - `user_mPass` varbinary(32) DEFAULT 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, diff --git a/inc/tpl/accounts.php b/inc/tpl/accounts.php index 2234f644..b28a30ef 100644 --- a/inc/tpl/accounts.php +++ b/inc/tpl/accounts.php @@ -524,9 +524,9 @@ $maxFileSize = round(SP_Config::getValue('files_allowed_size') / 1024, 1);
  • + onmousedown="viewPass(accountId; ?>, false, accountIsHistory; ?>)" + data-clipboard-target="clip-pass-text" + class="inputImg clip-pass-button"/>
  • @@ -600,24 +600,27 @@ $maxFileSize = round(SP_Config::getValue('files_allowed_size') / 1024, 1); - + \ No newline at end of file diff --git a/inc/tpl/backup.php b/inc/tpl/backup.php index 431f3cc7..356a8b38 100644 --- a/inc/tpl/backup.php +++ b/inc/tpl/backup.php @@ -82,5 +82,19 @@ $lastBackupTime = (file_exists($backupFile['absolute'])) ? _('Último backup') . +
  • + +
    +

    +

    +
    +
  • -
    \ No newline at end of file + + + \ No newline at end of file diff --git a/inc/tpl/config.php b/inc/tpl/config.php index f10a6f27..4b11887f 100644 --- a/inc/tpl/config.php +++ b/inc/tpl/config.php @@ -106,7 +106,7 @@ $profilesSelProp = array('name' => 'ldap_defaultprofile', - /> + /> @@ -194,7 +194,7 @@ $profilesSelProp = array('name' => 'ldap_defaultprofile', - /> + /> @@ -203,14 +203,7 @@ $profilesSelProp = array('name' => 'ldap_defaultprofile', - + /> @@ -491,7 +484,7 @@ $profilesSelProp = array('name' => 'ldap_defaultprofile', \ No newline at end of file diff --git a/inc/tpl/main.php b/inc/tpl/main.php index e6416faf..45c3712c 100644 --- a/inc/tpl/main.php +++ b/inc/tpl/main.php @@ -67,7 +67,7 @@ $chpass = ( ! isset($_SESSION['uisldap']) || $_SESSION['uisldap'] == 0 ) ? ''; + echo '
  • '; } ?> diff --git a/inc/tpl/masterpass.php b/inc/tpl/masterpass.php index e1407fe8..9824d1a2 100644 --- a/inc/tpl/masterpass.php +++ b/inc/tpl/masterpass.php @@ -2,8 +2,8 @@ /** * sysPass * - * @author nuxsmin - * @link http://syspass.org + * @author nuxsmin + * @link http://syspass.org * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org * * This file is part of sysPass. @@ -32,8 +32,14 @@ $onCloseAction = $data['onCloseAction']; SP_ACL::checkUserAccess($action) || SP_Html::showCommonError('unavailable'); $lastUpdateMPass = SP_Config::getConfigValue("lastupdatempass"); +$tempMasterPassTime = SP_Config::getConfigValue("tempmaster_passtime"); +$tempMasterMaxTime = SP_Config::getConfigValue("tempmaster_maxtime"); ?> +
    + +
    +
    0): ?> @@ -113,6 +119,80 @@ $lastUpdateMPass = SP_Config::getConfigValue("lastupdatempass"); +
  • + +
    +

    +

    +
    +
  • + + + +
    + +
    + + +
    + + + + + + + + + + + + +
    + + + 0) { + echo date("r", $tempMasterPassTime); + } else { + echo _('No generada'); + } + ?> +
    + + + $tempMasterMaxTime) { + echo '' . date("r", $tempMasterMaxTime) . ''; + } elseif ($tempMasterMaxTime > 0) { + echo date("r", $tempMasterMaxTime); + } else { + echo _('No generada'); + } + ?> +
    + + + +
    + + + + + +
    +
    +
      +
    • + +
    • +
    • + +
      +

      +
      +
    @@ -127,4 +207,16 @@ $lastUpdateMPass = SP_Config::getConfigValue("lastupdatempass"); $(this).children().html(''); } }); + $("#tmpass_maxtime").spinner({ + step: 60, min: 60, numberFormat: "n", stop: function (event, ui) { + accSearch(0); + } + }); + $(".help-box").dialog({autoOpen: false, title: ''}); + $("#help_tmpass_button").click(function() { + $("#help_tmpass").dialog("open"); + }); + $("#help_mpass_button").click(function() { + $("#help_mpass").dialog("open"); + }); \ No newline at end of file diff --git a/inc/upgrade.class.php b/inc/upgrade.class.php index 5bec73bc..99c6c5ac 100644 --- a/inc/upgrade.class.php +++ b/inc/upgrade.class.php @@ -31,7 +31,7 @@ defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo' */ class SP_Upgrade { - private static $dbUpgrade = array(110, 1121, 1122, 1123, 11213, 12001); + private static $dbUpgrade = array(110, 1121, 1122, 1123, 11213, 11219, 11220, 12001); private static $cfgUpgrade = array(1124); /** @@ -89,6 +89,13 @@ class SP_Upgrade $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` `acchistory_pass` VARBINARY(255) DEFAULT NULL ;'; + break; case 12001: $queries[] = 'ALTER TABLE `accounts` CHANGE COLUMN `account_userEditId` `account_userEditId` TINYINT(3) UNSIGNED NULL DEFAULT NULL, CHANGE COLUMN `account_dateEdit` `account_dateEdit` DATETIME NULL DEFAULT NULL;'; $queries[] = 'ALTER TABLE `accHistory` CHANGE COLUMN `acchistory_userEditId` `acchistory_userEditId` TINYINT(3) UNSIGNED NULL DEFAULT NULL, CHANGE COLUMN `acchistory_dateEdit` `acchistory_dateEdit` DATETIME NULL DEFAULT NULL;'; diff --git a/inc/users.class.php b/inc/users.class.php index bc72f4ce..3301d275 100644 --- a/inc/users.class.php +++ b/inc/users.class.php @@ -1063,7 +1063,7 @@ class SP_Users if ($showPass == true) { return $clearMasterPass; } else { - $_SESSION['mPassPwd'] = substr(sha1(uniqid()), 0, 32); + $_SESSION['mPassPwd'] = SP_Util::generate_random_bytes(32); $sessionMasterPass = SP_Crypt::mkCustomMPassEncrypt($_SESSION["mPassPwd"], $clearMasterPass); diff --git a/inc/util.class.php b/inc/util.class.php index 72906562..21f87d41 100644 --- a/inc/util.class.php +++ b/inc/util.class.php @@ -506,7 +506,7 @@ class SP_Util * @param array $files archivos a parsear * @return none */ - public static function getMinified($type, &$files) + public static function getMinified($type, &$files, $disableMinify = false) { $offset = 3600 * 24 * 30; $nextCheck = time() + $offset; @@ -542,7 +542,7 @@ class SP_Util foreach ($files as $file) { $filePath = $path . $file['href']; - if ($file['min'] === true) { + if ($file['min'] === true && $disableMinify === false) { echo '/* MINIFIED FILE: ' . $file['href'] . ' */' . PHP_EOL; if ($type == 'js') { echo self::jsCompress(file_get_contents($filePath)); diff --git a/js/ZeroClipboard.min.js b/js/ZeroClipboard.min.js index 56402340..6ecd0885 100644 --- a/js/ZeroClipboard.min.js +++ b/js/ZeroClipboard.min.js @@ -1,9 +1,10 @@ /*! -* ZeroClipboard -* The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface. -* Copyright (c) 2014 Jon Rohan, James M. Greene -* Licensed MIT -* http://zeroclipboard.org/ -* v1.3.5 -*/ -!function(a){"use strict";function b(a){return a.replace(/,/g,".").replace(/[^0-9\.]/g,"")}function c(a){return parseFloat(b(a))>=10}var d,e={bridge:null,version:"0.0.0",disabled:null,outdated:null,ready:null},f={},g=0,h={},i=0,j={},k=null,l=null,m=function(){var a,b,c,d,e="ZeroClipboard.swf";if(document.currentScript&&(d=document.currentScript.src));else{var f=document.getElementsByTagName("script");if("readyState"in f[0])for(a=f.length;a--&&("interactive"!==f[a].readyState||!(d=f[a].src)););else if("loading"===document.readyState)d=f[f.length-1].src;else{for(a=f.length;a--;){if(c=f[a].src,!c){b=null;break}if(c=c.split("#")[0].split("?")[0],c=c.slice(0,c.lastIndexOf("/")+1),null==b)b=c;else if(b!==c){b=null;break}}null!==b&&(d=b)}}return d&&(d=d.split("#")[0].split("?")[0],e=d.slice(0,d.lastIndexOf("/")+1)+e),e}(),n=function(){var a=/\-([a-z])/g,b=function(a,b){return b.toUpperCase()};return function(c){return c.replace(a,b)}}(),o=function(b,c){var d,e,f;return a.getComputedStyle?d=a.getComputedStyle(b,null).getPropertyValue(c):(e=n(c),d=b.currentStyle?b.currentStyle[e]:b.style[e]),"cursor"!==c||d&&"auto"!==d||(f=b.tagName.toLowerCase(),"a"!==f)?d:"pointer"},p=function(b){b||(b=a.event);var c;this!==a?c=this:b.target?c=b.target:b.srcElement&&(c=b.srcElement),K.activate(c)},q=function(a,b,c){a&&1===a.nodeType&&(a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent&&a.attachEvent("on"+b,c))},r=function(a,b,c){a&&1===a.nodeType&&(a.removeEventListener?a.removeEventListener(b,c,!1):a.detachEvent&&a.detachEvent("on"+b,c))},s=function(a,b){if(!a||1!==a.nodeType)return a;if(a.classList)return a.classList.contains(b)||a.classList.add(b),a;if(b&&"string"==typeof b){var c=(b||"").split(/\s+/);if(1===a.nodeType)if(a.className){for(var d=" "+a.className+" ",e=a.className,f=0,g=c.length;g>f;f++)d.indexOf(" "+c[f]+" ")<0&&(e+=" "+c[f]);a.className=e.replace(/^\s+|\s+$/g,"")}else a.className=b}return a},t=function(a,b){if(!a||1!==a.nodeType)return a;if(a.classList)return a.classList.contains(b)&&a.classList.remove(b),a;if(b&&"string"==typeof b||void 0===b){var c=(b||"").split(/\s+/);if(1===a.nodeType&&a.className)if(b){for(var d=(" "+a.className+" ").replace(/[\n\t]/g," "),e=0,f=c.length;f>e;e++)d=d.replace(" "+c[e]+" "," ");a.className=d.replace(/^\s+|\s+$/g,"")}else a.className=""}return a},u=function(){var a,b,c,d=1;return"function"==typeof document.body.getBoundingClientRect&&(a=document.body.getBoundingClientRect(),b=a.right-a.left,c=document.body.offsetWidth,d=Math.round(b/c*100)/100),d},v=function(b,c){var d={left:0,top:0,width:0,height:0,zIndex:B(c)-1};if(b.getBoundingClientRect){var e,f,g,h=b.getBoundingClientRect();"pageXOffset"in a&&"pageYOffset"in a?(e=a.pageXOffset,f=a.pageYOffset):(g=u(),e=Math.round(document.documentElement.scrollLeft/g),f=Math.round(document.documentElement.scrollTop/g));var i=document.documentElement.clientLeft||0,j=document.documentElement.clientTop||0;d.left=h.left+e-i,d.top=h.top+f-j,d.width="width"in h?h.width:h.right-h.left,d.height="height"in h?h.height:h.bottom-h.top}return d},w=function(a,b){var c=null==b||b&&b.cacheBust===!0&&b.useNoCache===!0;return c?(-1===a.indexOf("?")?"?":"&")+"noCache="+(new Date).getTime():""},x=function(b){var c,d,e,f=[],g=[],h=[];if(b.trustedOrigins&&("string"==typeof b.trustedOrigins?g.push(b.trustedOrigins):"object"==typeof b.trustedOrigins&&"length"in b.trustedOrigins&&(g=g.concat(b.trustedOrigins))),b.trustedDomains&&("string"==typeof b.trustedDomains?g.push(b.trustedDomains):"object"==typeof b.trustedDomains&&"length"in b.trustedDomains&&(g=g.concat(b.trustedDomains))),g.length)for(c=0,d=g.length;d>c;c++)if(g.hasOwnProperty(c)&&g[c]&&"string"==typeof g[c]){if(e=E(g[c]),!e)continue;if("*"===e){h=[e];break}h.push.apply(h,[e,"//"+e,a.location.protocol+"//"+e])}return h.length&&f.push("trustedOrigins="+encodeURIComponent(h.join(","))),"string"==typeof b.jsModuleId&&b.jsModuleId&&f.push("jsModuleId="+encodeURIComponent(b.jsModuleId)),f.join("&")},y=function(a,b,c){if("function"==typeof b.indexOf)return b.indexOf(a,c);var d,e=b.length;for("undefined"==typeof c?c=0:0>c&&(c=e+c),d=c;e>d;d++)if(b.hasOwnProperty(d)&&b[d]===a)return d;return-1},z=function(a){if("string"==typeof a)throw new TypeError("ZeroClipboard doesn't accept query strings.");return a.length?a:[a]},A=function(b,c,d,e){e?a.setTimeout(function(){b.apply(c,d)},0):b.apply(c,d)},B=function(a){var b,c;return a&&("number"==typeof a&&a>0?b=a:"string"==typeof a&&(c=parseInt(a,10))&&!isNaN(c)&&c>0&&(b=c)),b||("number"==typeof N.zIndex&&N.zIndex>0?b=N.zIndex:"string"==typeof N.zIndex&&(c=parseInt(N.zIndex,10))&&!isNaN(c)&&c>0&&(b=c)),b||0},C=function(a,b){if(a&&b!==!1&&"undefined"!=typeof console&&console&&(console.warn||console.log)){var c="`"+a+"` is deprecated. See docs for more info:\n https://github.com/zeroclipboard/zeroclipboard/blob/master/docs/instructions.md#deprecations";console.warn?console.warn(c):console.log(c)}},D=function(){var a,b,c,d,e,f,g=arguments[0]||{};for(a=1,b=arguments.length;b>a;a++)if(null!=(c=arguments[a]))for(d in c)if(c.hasOwnProperty(d)){if(e=g[d],f=c[d],g===f)continue;void 0!==f&&(g[d]=f)}return g},E=function(a){if(null==a||""===a)return null;if(a=a.replace(/^\s+|\s+$/g,""),""===a)return null;var b=a.indexOf("//");a=-1===b?a:a.slice(b+2);var c=a.indexOf("/");return a=-1===c?a:-1===b||0===c?null:a.slice(0,c),a&&".swf"===a.slice(-4).toLowerCase()?null:a||null},F=function(){var a=function(a,b){var c,d,e;if(null!=a&&"*"!==b[0]&&("string"==typeof a&&(a=[a]),"object"==typeof a&&"length"in a))for(c=0,d=a.length;d>c;c++)if(a.hasOwnProperty(c)&&(e=E(a[c]))){if("*"===e){b.length=0,b.push("*");break}-1===y(e,b)&&b.push(e)}},b={always:"always",samedomain:"sameDomain",never:"never"};return function(c,d){var e,f=d.allowScriptAccess;if("string"==typeof f&&(e=f.toLowerCase())&&/^always|samedomain|never$/.test(e))return b[e];var g=E(d.moviePath);null===g&&(g=c);var h=[];a(d.trustedOrigins,h),a(d.trustedDomains,h);var i=h.length;if(i>0){if(1===i&&"*"===h[0])return"always";if(-1!==y(c,h))return 1===i&&c===g?"sameDomain":"always"}return"never"}}(),G=function(a){if(null==a)return[];if(Object.keys)return Object.keys(a);var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c);return b},H=function(a){if(a)for(var b in a)a.hasOwnProperty(b)&&delete a[b];return a},I=function(){try{return document.activeElement}catch(a){}return null},J=function(){var a=!1;if("boolean"==typeof e.disabled)a=e.disabled===!1;else{if("function"==typeof ActiveXObject)try{new ActiveXObject("ShockwaveFlash.ShockwaveFlash")&&(a=!0)}catch(b){}!a&&navigator.mimeTypes["application/x-shockwave-flash"]&&(a=!0)}return a},K=function(a,b){return this instanceof K?(this.id=""+g++,h[this.id]={instance:this,elements:[],handlers:{}},a&&this.clip(a),"undefined"!=typeof b&&(C("new ZeroClipboard(elements, options)",N.debug),K.config(b)),this.options=K.config(),"boolean"!=typeof e.disabled&&(e.disabled=!J()),e.disabled===!1&&e.outdated!==!0&&null===e.bridge&&(e.outdated=!1,e.ready=!1,O()),void 0):new K(a,b)};K.prototype.setText=function(a){return a&&""!==a&&(f["text/plain"]=a,e.ready===!0&&e.bridge&&"function"==typeof e.bridge.setText?e.bridge.setText(a):e.ready=!1),this},K.prototype.setSize=function(a,b){return e.ready===!0&&e.bridge&&"function"==typeof e.bridge.setSize?e.bridge.setSize(a,b):e.ready=!1,this};var L=function(a){e.ready===!0&&e.bridge&&"function"==typeof e.bridge.setHandCursor?e.bridge.setHandCursor(a):e.ready=!1};K.prototype.destroy=function(){this.unclip(),this.off(),delete h[this.id]};var M=function(){var a,b,c,d=[],e=G(h);for(a=0,b=e.length;b>a;a++)c=h[e[a]].instance,c&&c instanceof K&&d.push(c);return d};K.version="1.3.5";var N={swfPath:m,trustedDomains:a.location.host?[a.location.host]:[],cacheBust:!0,forceHandCursor:!1,zIndex:999999999,debug:!0,title:null,autoActivate:!0};K.config=function(a){"object"==typeof a&&null!==a&&D(N,a);{if("string"!=typeof a||!a){var b={};for(var c in N)N.hasOwnProperty(c)&&(b[c]="object"==typeof N[c]&&null!==N[c]?"length"in N[c]?N[c].slice(0):D({},N[c]):N[c]);return b}if(N.hasOwnProperty(a))return N[a]}},K.destroy=function(){K.deactivate();for(var a in h)if(h.hasOwnProperty(a)&&h[a]){var b=h[a].instance;b&&"function"==typeof b.destroy&&b.destroy()}var c=P(e.bridge);c&&c.parentNode&&(c.parentNode.removeChild(c),e.ready=null,e.bridge=null)},K.activate=function(a){d&&(t(d,N.hoverClass),t(d,N.activeClass)),d=a,s(a,N.hoverClass),Q();var b=N.title||a.getAttribute("title");if(b){var c=P(e.bridge);c&&c.setAttribute("title",b)}var f=N.forceHandCursor===!0||"pointer"===o(a,"cursor");L(f)},K.deactivate=function(){var a=P(e.bridge);a&&(a.style.left="0px",a.style.top="-9999px",a.removeAttribute("title")),d&&(t(d,N.hoverClass),t(d,N.activeClass),d=null)};var O=function(){var b,c,d=document.getElementById("global-zeroclipboard-html-bridge");if(!d){var f=K.config();f.jsModuleId="string"==typeof k&&k||"string"==typeof l&&l||null;var g=F(a.location.host,N),h=x(f),i=N.moviePath+w(N.moviePath,N),j=' ';d=document.createElement("div"),d.id="global-zeroclipboard-html-bridge",d.setAttribute("class","global-zeroclipboard-container"),d.style.position="absolute",d.style.left="0px",d.style.top="-9999px",d.style.width="15px",d.style.height="15px",d.style.zIndex=""+B(N.zIndex),document.body.appendChild(d),d.innerHTML=j}b=document["global-zeroclipboard-flash-bridge"],b&&(c=b.length)&&(b=b[c-1]),e.bridge=b||d.children[0].lastElementChild},P=function(a){for(var b=/^OBJECT|EMBED$/,c=a&&a.parentNode;c&&b.test(c.nodeName)&&c.parentNode;)c=c.parentNode;return c||null},Q=function(){if(d){var a=v(d,N.zIndex),b=P(e.bridge);b&&(b.style.top=a.top+"px",b.style.left=a.left+"px",b.style.width=a.width+"px",b.style.height=a.height+"px",b.style.zIndex=a.zIndex+1),e.ready===!0&&e.bridge&&"function"==typeof e.bridge.setSize?e.bridge.setSize(a.width,a.height):e.ready=!1}return this};K.prototype.on=function(a,b){var c,d,f,g={},i=h[this.id]&&h[this.id].handlers;if("string"==typeof a&&a)f=a.toLowerCase().split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)a.hasOwnProperty(c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&this.on(c,a[c]);if(f&&f.length){for(c=0,d=f.length;d>c;c++)a=f[c].replace(/^on/,""),g[a]=!0,i[a]||(i[a]=[]),i[a].push(b);g.noflash&&e.disabled&&T.call(this,"noflash",{}),g.wrongflash&&e.outdated&&T.call(this,"wrongflash",{flashVersion:e.version}),g.load&&e.ready&&T.call(this,"load",{flashVersion:e.version})}return this},K.prototype.off=function(a,b){var c,d,e,f,g,i=h[this.id]&&h[this.id].handlers;if(0===arguments.length)f=G(i);else if("string"==typeof a&&a)f=a.split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)a.hasOwnProperty(c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&this.off(c,a[c]);if(f&&f.length)for(c=0,d=f.length;d>c;c++)if(a=f[c].toLowerCase().replace(/^on/,""),g=i[a],g&&g.length)if(b)for(e=y(b,g);-1!==e;)g.splice(e,1),e=y(b,g,e);else i[a].length=0;return this},K.prototype.handlers=function(a){var b,c=null,d=h[this.id]&&h[this.id].handlers;if(d){if("string"==typeof a&&a)return d[a]?d[a].slice(0):null;c={};for(b in d)d.hasOwnProperty(b)&&d[b]&&(c[b]=d[b].slice(0))}return c};var R=function(b,c,d,e){var f=h[this.id]&&h[this.id].handlers[b];if(f&&f.length){var g,i,j,k=c||this;for(g=0,i=f.length;i>g;g++)j=f[g],c=k,"string"==typeof j&&"function"==typeof a[j]&&(j=a[j]),"object"==typeof j&&j&&"function"==typeof j.handleEvent&&(c=j,j=j.handleEvent),"function"==typeof j&&A(j,c,d,e)}return this};K.prototype.clip=function(a){a=z(a);for(var b=0;bd;d++)f=h[c[d]].instance,f&&f instanceof K&&g.push(f);return g};N.hoverClass="zeroclipboard-is-hover",N.activeClass="zeroclipboard-is-active",N.trustedOrigins=null,N.allowScriptAccess=null,N.useNoCache=!0,N.moviePath="ZeroClipboard.swf",K.detectFlashSupport=function(){return C("ZeroClipboard.detectFlashSupport",N.debug),J()},K.dispatch=function(a,b){if("string"==typeof a&&a){var c=a.toLowerCase().replace(/^on/,"");if(c)for(var e=d&&N.autoActivate===!0?S(d):M(),f=0,g=e.length;g>f;f++)T.call(e[f],c,b)}},K.prototype.setHandCursor=function(a){return C("ZeroClipboard.prototype.setHandCursor",N.debug),a="boolean"==typeof a?a:!!a,L(a),N.forceHandCursor=a,this},K.prototype.reposition=function(){return C("ZeroClipboard.prototype.reposition",N.debug),Q()},K.prototype.receiveEvent=function(a,b){if(C("ZeroClipboard.prototype.receiveEvent",N.debug),"string"==typeof a&&a){var c=a.toLowerCase().replace(/^on/,"");c&&T.call(this,c,b)}},K.prototype.setCurrent=function(a){return C("ZeroClipboard.prototype.setCurrent",N.debug),K.activate(a),this},K.prototype.resetBridge=function(){return C("ZeroClipboard.prototype.resetBridge",N.debug),K.deactivate(),this},K.prototype.setTitle=function(a){if(C("ZeroClipboard.prototype.setTitle",N.debug),a=a||N.title||d&&d.getAttribute("title")){var b=P(e.bridge);b&&b.setAttribute("title",a)}return this},K.setDefaults=function(a){C("ZeroClipboard.setDefaults",N.debug),K.config(a)},K.prototype.addEventListener=function(a,b){return C("ZeroClipboard.prototype.addEventListener",N.debug),this.on(a,b)},K.prototype.removeEventListener=function(a,b){return C("ZeroClipboard.prototype.removeEventListener",N.debug),this.off(a,b)},K.prototype.ready=function(){return C("ZeroClipboard.prototype.ready",N.debug),e.ready===!0};var T=function(a,g){a=a.toLowerCase().replace(/^on/,"");var h=g&&g.flashVersion&&b(g.flashVersion)||null,i=d,j=!0;switch(a){case"load":if(h){if(!c(h))return T.call(this,"onWrongFlash",{flashVersion:h}),void 0;e.outdated=!1,e.ready=!0,e.version=h}break;case"wrongflash":h&&!c(h)&&(e.outdated=!0,e.ready=!1,e.version=h);break;case"mouseover":s(i,N.hoverClass);break;case"mouseout":N.autoActivate===!0&&K.deactivate();break;case"mousedown":s(i,N.activeClass);break;case"mouseup":t(i,N.activeClass);break;case"datarequested":if(i){var k=i.getAttribute("data-clipboard-target"),l=k?document.getElementById(k):null;if(l){var m=l.value||l.textContent||l.innerText;m&&this.setText(m)}else{var n=i.getAttribute("data-clipboard-text");n&&this.setText(n)}}j=!1;break;case"complete":H(f),i&&i!==I()&&i.focus&&i.focus()}var o=i,p=[this,g];return R.call(this,a,o,p,j)};"function"==typeof define&&define.amd?define(["require","exports","module"],function(a,b,c){return k=c&&c.id||null,K}):"object"==typeof module&&module&&"object"==typeof module.exports&&module.exports&&"function"==typeof a.require?(l=module.id||null,module.exports=K):a.ZeroClipboard=K}(function(){return this}()); \ No newline at end of file + * ZeroClipboard + * The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface. + * Copyright (c) 2009-2014 Jon Rohan, James M. Greene + * Licensed MIT + * http://zeroclipboard.org/ + * v2.2.0 + */ +!function(a,b){"use strict";var c,d,e,f=a,g=f.document,h=f.navigator,i=f.setTimeout,j=f.clearTimeout,k=f.setInterval,l=f.clearInterval,m=f.getComputedStyle,n=f.encodeURIComponent,o=f.ActiveXObject,p=f.Error,q=f.Number.parseInt||f.parseInt,r=f.Number.parseFloat||f.parseFloat,s=f.Number.isNaN||f.isNaN,t=f.Date.now,u=f.Object.keys,v=f.Object.defineProperty,w=f.Object.prototype.hasOwnProperty,x=f.Array.prototype.slice,y=function(){var a=function(a){return a};if("function"==typeof f.wrap&&"function"==typeof f.unwrap)try{var b=g.createElement("div"),c=f.unwrap(b);1===b.nodeType&&c&&1===c.nodeType&&(a=f.unwrap)}catch(d){}return a}(),z=function(a){return x.call(a,0)},A=function(){var a,c,d,e,f,g,h=z(arguments),i=h[0]||{};for(a=1,c=h.length;c>a;a++)if(null!=(d=h[a]))for(e in d)w.call(d,e)&&(f=i[e],g=d[e],i!==g&&g!==b&&(i[e]=g));return i},B=function(a){var b,c,d,e;if("object"!=typeof a||null==a||"number"==typeof a.nodeType)b=a;else if("number"==typeof a.length)for(b=[],c=0,d=a.length;d>c;c++)w.call(a,c)&&(b[c]=B(a[c]));else{b={};for(e in a)w.call(a,e)&&(b[e]=B(a[e]))}return b},C=function(a,b){for(var c={},d=0,e=b.length;e>d;d++)b[d]in a&&(c[b[d]]=a[b[d]]);return c},D=function(a,b){var c={};for(var d in a)-1===b.indexOf(d)&&(c[d]=a[d]);return c},E=function(a){if(a)for(var b in a)w.call(a,b)&&delete a[b];return a},F=function(a,b){if(a&&1===a.nodeType&&a.ownerDocument&&b&&(1===b.nodeType&&b.ownerDocument&&b.ownerDocument===a.ownerDocument||9===b.nodeType&&!b.ownerDocument&&b===a.ownerDocument))do{if(a===b)return!0;a=a.parentNode}while(a);return!1},G=function(a){var b;return"string"==typeof a&&a&&(b=a.split("#")[0].split("?")[0],b=a.slice(0,a.lastIndexOf("/")+1)),b},H=function(a){var b,c;return"string"==typeof a&&a&&(c=a.match(/^(?:|[^:@]*@|.+\)@(?=http[s]?|file)|.+?\s+(?: at |@)(?:[^:\(]+ )*[\(]?)((?:http[s]?|file):\/\/[\/]?.+?\/[^:\)]*?)(?::\d+)(?::\d+)?/),c&&c[1]?b=c[1]:(c=a.match(/\)@((?:http[s]?|file):\/\/[\/]?.+?\/[^:\)]*?)(?::\d+)(?::\d+)?/),c&&c[1]&&(b=c[1]))),b},I=function(){var a,b;try{throw new p}catch(c){b=c}return b&&(a=b.sourceURL||b.fileName||H(b.stack)),a},J=function(){var a,c,d;if(g.currentScript&&(a=g.currentScript.src))return a;if(c=g.getElementsByTagName("script"),1===c.length)return c[0].src||b;if("readyState"in c[0])for(d=c.length;d--;)if("interactive"===c[d].readyState&&(a=c[d].src))return a;return"loading"===g.readyState&&(a=c[c.length-1].src)?a:(a=I())?a:b},K=function(){var a,c,d,e=g.getElementsByTagName("script");for(a=e.length;a--;){if(!(d=e[a].src)){c=null;break}if(d=G(d),null==c)c=d;else if(c!==d){c=null;break}}return c||b},L=function(){var a=G(J())||K()||"";return a+"ZeroClipboard.swf"},M=function(){return null==a.opener&&(!!a.top&&a!=a.top||!!a.parent&&a!=a.parent)}(),N={bridge:null,version:"0.0.0",pluginType:"unknown",disabled:null,outdated:null,sandboxed:null,unavailable:null,degraded:null,deactivated:null,overdue:null,ready:null},O="11.0.0",P={},Q={},R=null,S=0,T=0,U={ready:"Flash communication is established",error:{"flash-disabled":"Flash is disabled or not installed. May also be attempting to run Flash in a sandboxed iframe, which is impossible.","flash-outdated":"Flash is too outdated to support ZeroClipboard","flash-sandboxed":"Attempting to run Flash in a sandboxed iframe, which is impossible","flash-unavailable":"Flash is unable to communicate bidirectionally with JavaScript","flash-degraded":"Flash is unable to preserve data fidelity when communicating with JavaScript","flash-deactivated":"Flash is too outdated for your browser and/or is configured as click-to-activate.\nThis may also mean that the ZeroClipboard SWF object could not be loaded, so please check your `swfPath` configuration and/or network connectivity.\nMay also be attempting to run Flash in a sandboxed iframe, which is impossible.","flash-overdue":"Flash communication was established but NOT within the acceptable time limit","version-mismatch":"ZeroClipboard JS version number does not match ZeroClipboard SWF version number","clipboard-error":"At least one error was thrown while ZeroClipboard was attempting to inject your data into the clipboard","config-mismatch":"ZeroClipboard configuration does not match Flash's reality","swf-not-found":"The ZeroClipboard SWF object could not be loaded, so please check your `swfPath` configuration and/or network connectivity"}},V=["flash-unavailable","flash-degraded","flash-overdue","version-mismatch","config-mismatch","clipboard-error"],W=["flash-disabled","flash-outdated","flash-sandboxed","flash-unavailable","flash-degraded","flash-deactivated","flash-overdue"],X=new RegExp("^flash-("+W.map(function(a){return a.replace(/^flash-/,"")}).join("|")+")$"),Y=new RegExp("^flash-("+W.slice(1).map(function(a){return a.replace(/^flash-/,"")}).join("|")+")$"),Z={swfPath:L(),trustedDomains:a.location.host?[a.location.host]:[],cacheBust:!0,forceEnhancedClipboard:!1,flashLoadTimeout:3e4,autoActivate:!0,bubbleEvents:!0,containerId:"global-zeroclipboard-html-bridge",containerClass:"global-zeroclipboard-container",swfObjectId:"global-zeroclipboard-flash-bridge",hoverClass:"zeroclipboard-is-hover",activeClass:"zeroclipboard-is-active",forceHandCursor:!1,title:null,zIndex:999999999},$=function(a){if("object"==typeof a&&null!==a)for(var b in a)if(w.call(a,b))if(/^(?:forceHandCursor|title|zIndex|bubbleEvents)$/.test(b))Z[b]=a[b];else if(null==N.bridge)if("containerId"===b||"swfObjectId"===b){if(!nb(a[b]))throw new Error("The specified `"+b+"` value is not valid as an HTML4 Element ID");Z[b]=a[b]}else Z[b]=a[b];{if("string"!=typeof a||!a)return B(Z);if(w.call(Z,a))return Z[a]}},_=function(){return Tb(),{browser:C(h,["userAgent","platform","appName"]),flash:D(N,["bridge"]),zeroclipboard:{version:Vb.version,config:Vb.config()}}},ab=function(){return!!(N.disabled||N.outdated||N.sandboxed||N.unavailable||N.degraded||N.deactivated)},bb=function(a,d){var e,f,g,h={};if("string"==typeof a&&a)g=a.toLowerCase().split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof d)for(e in a)w.call(a,e)&&"string"==typeof e&&e&&"function"==typeof a[e]&&Vb.on(e,a[e]);if(g&&g.length){for(e=0,f=g.length;f>e;e++)a=g[e].replace(/^on/,""),h[a]=!0,P[a]||(P[a]=[]),P[a].push(d);if(h.ready&&N.ready&&Vb.emit({type:"ready"}),h.error){for(e=0,f=W.length;f>e;e++)if(N[W[e].replace(/^flash-/,"")]===!0){Vb.emit({type:"error",name:W[e]});break}c!==b&&Vb.version!==c&&Vb.emit({type:"error",name:"version-mismatch",jsVersion:Vb.version,swfVersion:c})}}return Vb},cb=function(a,b){var c,d,e,f,g;if(0===arguments.length)f=u(P);else if("string"==typeof a&&a)f=a.split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)w.call(a,c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&Vb.off(c,a[c]);if(f&&f.length)for(c=0,d=f.length;d>c;c++)if(a=f[c].toLowerCase().replace(/^on/,""),g=P[a],g&&g.length)if(b)for(e=g.indexOf(b);-1!==e;)g.splice(e,1),e=g.indexOf(b,e);else g.length=0;return Vb},db=function(a){var b;return b="string"==typeof a&&a?B(P[a])||null:B(P)},eb=function(a){var b,c,d;return a=ob(a),a&&!vb(a)?"ready"===a.type&&N.overdue===!0?Vb.emit({type:"error",name:"flash-overdue"}):(b=A({},a),tb.call(this,b),"copy"===a.type&&(d=Db(Q),c=d.data,R=d.formatMap),c):void 0},fb=function(){var a=N.sandboxed;if(Tb(),"boolean"!=typeof N.ready&&(N.ready=!1),N.sandboxed!==a&&N.sandboxed===!0)N.ready=!1,Vb.emit({type:"error",name:"flash-sandboxed"});else if(!Vb.isFlashUnusable()&&null===N.bridge){var b=Z.flashLoadTimeout;"number"==typeof b&&b>=0&&(S=i(function(){"boolean"!=typeof N.deactivated&&(N.deactivated=!0),N.deactivated===!0&&Vb.emit({type:"error",name:"flash-deactivated"})},b)),N.overdue=!1,Bb()}},gb=function(){Vb.clearData(),Vb.blur(),Vb.emit("destroy"),Cb(),Vb.off()},hb=function(a,b){var c;if("object"==typeof a&&a&&"undefined"==typeof b)c=a,Vb.clearData();else{if("string"!=typeof a||!a)return;c={},c[a]=b}for(var d in c)"string"==typeof d&&d&&w.call(c,d)&&"string"==typeof c[d]&&c[d]&&(Q[d]=c[d])},ib=function(a){"undefined"==typeof a?(E(Q),R=null):"string"==typeof a&&w.call(Q,a)&&delete Q[a]},jb=function(a){return"undefined"==typeof a?B(Q):"string"==typeof a&&w.call(Q,a)?Q[a]:void 0},kb=function(a){if(a&&1===a.nodeType){d&&(Lb(d,Z.activeClass),d!==a&&Lb(d,Z.hoverClass)),d=a,Kb(a,Z.hoverClass);var b=a.getAttribute("title")||Z.title;if("string"==typeof b&&b){var c=Ab(N.bridge);c&&c.setAttribute("title",b)}var e=Z.forceHandCursor===!0||"pointer"===Mb(a,"cursor");Rb(e),Qb()}},lb=function(){var a=Ab(N.bridge);a&&(a.removeAttribute("title"),a.style.left="0px",a.style.top="-9999px",a.style.width="1px",a.style.height="1px"),d&&(Lb(d,Z.hoverClass),Lb(d,Z.activeClass),d=null)},mb=function(){return d||null},nb=function(a){return"string"==typeof a&&a&&/^[A-Za-z][A-Za-z0-9_:\-\.]*$/.test(a)},ob=function(a){var b;if("string"==typeof a&&a?(b=a,a={}):"object"==typeof a&&a&&"string"==typeof a.type&&a.type&&(b=a.type),b){b=b.toLowerCase(),!a.target&&(/^(copy|aftercopy|_click)$/.test(b)||"error"===b&&"clipboard-error"===a.name)&&(a.target=e),A(a,{type:b,target:a.target||d||null,relatedTarget:a.relatedTarget||null,currentTarget:N&&N.bridge||null,timeStamp:a.timeStamp||t()||null});var c=U[a.type];return"error"===a.type&&a.name&&c&&(c=c[a.name]),c&&(a.message=c),"ready"===a.type&&A(a,{target:null,version:N.version}),"error"===a.type&&(X.test(a.name)&&A(a,{target:null,minimumVersion:O}),Y.test(a.name)&&A(a,{version:N.version})),"copy"===a.type&&(a.clipboardData={setData:Vb.setData,clearData:Vb.clearData}),"aftercopy"===a.type&&(a=Eb(a,R)),a.target&&!a.relatedTarget&&(a.relatedTarget=pb(a.target)),qb(a)}},pb=function(a){var b=a&&a.getAttribute&&a.getAttribute("data-clipboard-target");return b?g.getElementById(b):null},qb=function(a){if(a&&/^_(?:click|mouse(?:over|out|down|up|move))$/.test(a.type)){var c=a.target,d="_mouseover"===a.type&&a.relatedTarget?a.relatedTarget:b,e="_mouseout"===a.type&&a.relatedTarget?a.relatedTarget:b,h=Nb(c),i=f.screenLeft||f.screenX||0,j=f.screenTop||f.screenY||0,k=g.body.scrollLeft+g.documentElement.scrollLeft,l=g.body.scrollTop+g.documentElement.scrollTop,m=h.left+("number"==typeof a._stageX?a._stageX:0),n=h.top+("number"==typeof a._stageY?a._stageY:0),o=m-k,p=n-l,q=i+o,r=j+p,s="number"==typeof a.movementX?a.movementX:0,t="number"==typeof a.movementY?a.movementY:0;delete a._stageX,delete a._stageY,A(a,{srcElement:c,fromElement:d,toElement:e,screenX:q,screenY:r,pageX:m,pageY:n,clientX:o,clientY:p,x:o,y:p,movementX:s,movementY:t,offsetX:0,offsetY:0,layerX:0,layerY:0})}return a},rb=function(a){var b=a&&"string"==typeof a.type&&a.type||"";return!/^(?:(?:before)?copy|destroy)$/.test(b)},sb=function(a,b,c,d){d?i(function(){a.apply(b,c)},0):a.apply(b,c)},tb=function(a){if("object"==typeof a&&a&&a.type){var b=rb(a),c=P["*"]||[],d=P[a.type]||[],e=c.concat(d);if(e&&e.length){var g,h,i,j,k,l=this;for(g=0,h=e.length;h>g;g++)i=e[g],j=l,"string"==typeof i&&"function"==typeof f[i]&&(i=f[i]),"object"==typeof i&&i&&"function"==typeof i.handleEvent&&(j=i,i=i.handleEvent),"function"==typeof i&&(k=A({},a),sb(i,j,[k],b))}return this}},ub=function(a){var b=null;return(M===!1||a&&"error"===a.type&&a.name&&-1!==V.indexOf(a.name))&&(b=!1),b},vb=function(a){var b=a.target||d||null,f="swf"===a._source;switch(delete a._source,a.type){case"error":var g="flash-sandboxed"===a.name||ub(a);"boolean"==typeof g&&(N.sandboxed=g),-1!==W.indexOf(a.name)?A(N,{disabled:"flash-disabled"===a.name,outdated:"flash-outdated"===a.name,unavailable:"flash-unavailable"===a.name,degraded:"flash-degraded"===a.name,deactivated:"flash-deactivated"===a.name,overdue:"flash-overdue"===a.name,ready:!1}):"version-mismatch"===a.name&&(c=a.swfVersion,A(N,{disabled:!1,outdated:!1,unavailable:!1,degraded:!1,deactivated:!1,overdue:!1,ready:!1})),Pb();break;case"ready":c=a.swfVersion;var h=N.deactivated===!0;A(N,{disabled:!1,outdated:!1,sandboxed:!1,unavailable:!1,degraded:!1,deactivated:!1,overdue:h,ready:!h}),Pb();break;case"beforecopy":e=b;break;case"copy":var i,j,k=a.relatedTarget;!Q["text/html"]&&!Q["text/plain"]&&k&&(j=k.value||k.outerHTML||k.innerHTML)&&(i=k.value||k.textContent||k.innerText)?(a.clipboardData.clearData(),a.clipboardData.setData("text/plain",i),j!==i&&a.clipboardData.setData("text/html",j)):!Q["text/plain"]&&a.target&&(i=a.target.getAttribute("data-clipboard-text"))&&(a.clipboardData.clearData(),a.clipboardData.setData("text/plain",i));break;case"aftercopy":wb(a),Vb.clearData(),b&&b!==Jb()&&b.focus&&b.focus();break;case"_mouseover":Vb.focus(b),Z.bubbleEvents===!0&&f&&(b&&b!==a.relatedTarget&&!F(a.relatedTarget,b)&&xb(A({},a,{type:"mouseenter",bubbles:!1,cancelable:!1})),xb(A({},a,{type:"mouseover"})));break;case"_mouseout":Vb.blur(),Z.bubbleEvents===!0&&f&&(b&&b!==a.relatedTarget&&!F(a.relatedTarget,b)&&xb(A({},a,{type:"mouseleave",bubbles:!1,cancelable:!1})),xb(A({},a,{type:"mouseout"})));break;case"_mousedown":Kb(b,Z.activeClass),Z.bubbleEvents===!0&&f&&xb(A({},a,{type:a.type.slice(1)}));break;case"_mouseup":Lb(b,Z.activeClass),Z.bubbleEvents===!0&&f&&xb(A({},a,{type:a.type.slice(1)}));break;case"_click":e=null,Z.bubbleEvents===!0&&f&&xb(A({},a,{type:a.type.slice(1)}));break;case"_mousemove":Z.bubbleEvents===!0&&f&&xb(A({},a,{type:a.type.slice(1)}))}return/^_(?:click|mouse(?:over|out|down|up|move))$/.test(a.type)?!0:void 0},wb=function(a){if(a.errors&&a.errors.length>0){var b=B(a);A(b,{type:"error",name:"clipboard-error"}),delete b.success,i(function(){Vb.emit(b)},0)}},xb=function(a){if(a&&"string"==typeof a.type&&a){var b,c=a.target||null,d=c&&c.ownerDocument||g,e={view:d.defaultView||f,canBubble:!0,cancelable:!0,detail:"click"===a.type?1:0,button:"number"==typeof a.which?a.which-1:"number"==typeof a.button?a.button:d.createEvent?0:1},h=A(e,a);c&&d.createEvent&&c.dispatchEvent&&(h=[h.type,h.canBubble,h.cancelable,h.view,h.detail,h.screenX,h.screenY,h.clientX,h.clientY,h.ctrlKey,h.altKey,h.shiftKey,h.metaKey,h.button,h.relatedTarget],b=d.createEvent("MouseEvents"),b.initMouseEvent&&(b.initMouseEvent.apply(b,h),b._source="js",c.dispatchEvent(b)))}},yb=function(){var a=Z.flashLoadTimeout;if("number"==typeof a&&a>=0){var b=Math.min(1e3,a/10),c=Z.swfObjectId+"_fallbackContent";T=k(function(){var a=g.getElementById(c);Ob(a)&&(Pb(),N.deactivated=null,Vb.emit({type:"error",name:"swf-not-found"}))},b)}},zb=function(){var a=g.createElement("div");return a.id=Z.containerId,a.className=Z.containerClass,a.style.position="absolute",a.style.left="0px",a.style.top="-9999px",a.style.width="1px",a.style.height="1px",a.style.zIndex=""+Sb(Z.zIndex),a},Ab=function(a){for(var b=a&&a.parentNode;b&&"OBJECT"===b.nodeName&&b.parentNode;)b=b.parentNode;return b||null},Bb=function(){var a,b=N.bridge,c=Ab(b);if(!b){var d=Ib(f.location.host,Z),e="never"===d?"none":"all",h=Gb(A({jsVersion:Vb.version},Z)),i=Z.swfPath+Fb(Z.swfPath,Z);c=zb();var j=g.createElement("div");c.appendChild(j),g.body.appendChild(c);var k=g.createElement("div"),l="activex"===N.pluginType;k.innerHTML='"+(l?'':"")+'
     
    ',b=k.firstChild,k=null,y(b).ZeroClipboard=Vb,c.replaceChild(b,j),yb()}return b||(b=g[Z.swfObjectId],b&&(a=b.length)&&(b=b[a-1]),!b&&c&&(b=c.firstChild)),N.bridge=b||null,b},Cb=function(){var a=N.bridge;if(a){var d=Ab(a);d&&("activex"===N.pluginType&&"readyState"in a?(a.style.display="none",function e(){if(4===a.readyState){for(var b in a)"function"==typeof a[b]&&(a[b]=null);a.parentNode&&a.parentNode.removeChild(a),d.parentNode&&d.parentNode.removeChild(d)}else i(e,10)}()):(a.parentNode&&a.parentNode.removeChild(a),d.parentNode&&d.parentNode.removeChild(d))),Pb(),N.ready=null,N.bridge=null,N.deactivated=null,c=b}},Db=function(a){var b={},c={};if("object"==typeof a&&a){for(var d in a)if(d&&w.call(a,d)&&"string"==typeof a[d]&&a[d])switch(d.toLowerCase()){case"text/plain":case"text":case"air:text":case"flash:text":b.text=a[d],c.text=d;break;case"text/html":case"html":case"air:html":case"flash:html":b.html=a[d],c.html=d;break;case"application/rtf":case"text/rtf":case"rtf":case"richtext":case"air:rtf":case"flash:rtf":b.rtf=a[d],c.rtf=d}return{data:b,formatMap:c}}},Eb=function(a,b){if("object"!=typeof a||!a||"object"!=typeof b||!b)return a;var c={};for(var d in a)if(w.call(a,d))if("errors"===d){c[d]=a[d]?a[d].slice():[];for(var e=0,f=c[d].length;f>e;e++)c[d][e].format=b[c[d][e].format]}else if("success"!==d&&"data"!==d)c[d]=a[d];else{c[d]={};var g=a[d];for(var h in g)h&&w.call(g,h)&&w.call(b,h)&&(c[d][b[h]]=g[h])}return c},Fb=function(a,b){var c=null==b||b&&b.cacheBust===!0;return c?(-1===a.indexOf("?")?"?":"&")+"noCache="+t():""},Gb=function(a){var b,c,d,e,g="",h=[];if(a.trustedDomains&&("string"==typeof a.trustedDomains?e=[a.trustedDomains]:"object"==typeof a.trustedDomains&&"length"in a.trustedDomains&&(e=a.trustedDomains)),e&&e.length)for(b=0,c=e.length;c>b;b++)if(w.call(e,b)&&e[b]&&"string"==typeof e[b]){if(d=Hb(e[b]),!d)continue;if("*"===d){h.length=0,h.push(d);break}h.push.apply(h,[d,"//"+d,f.location.protocol+"//"+d])}return h.length&&(g+="trustedOrigins="+n(h.join(","))),a.forceEnhancedClipboard===!0&&(g+=(g?"&":"")+"forceEnhancedClipboard=true"),"string"==typeof a.swfObjectId&&a.swfObjectId&&(g+=(g?"&":"")+"swfObjectId="+n(a.swfObjectId)),"string"==typeof a.jsVersion&&a.jsVersion&&(g+=(g?"&":"")+"jsVersion="+n(a.jsVersion)),g},Hb=function(a){if(null==a||""===a)return null;if(a=a.replace(/^\s+|\s+$/g,""),""===a)return null;var b=a.indexOf("//");a=-1===b?a:a.slice(b+2);var c=a.indexOf("/");return a=-1===c?a:-1===b||0===c?null:a.slice(0,c),a&&".swf"===a.slice(-4).toLowerCase()?null:a||null},Ib=function(){var a=function(a){var b,c,d,e=[];if("string"==typeof a&&(a=[a]),"object"!=typeof a||!a||"number"!=typeof a.length)return e;for(b=0,c=a.length;c>b;b++)if(w.call(a,b)&&(d=Hb(a[b]))){if("*"===d){e.length=0,e.push("*");break}-1===e.indexOf(d)&&e.push(d)}return e};return function(b,c){var d=Hb(c.swfPath);null===d&&(d=b);var e=a(c.trustedDomains),f=e.length;if(f>0){if(1===f&&"*"===e[0])return"always";if(-1!==e.indexOf(b))return 1===f&&b===d?"sameDomain":"always"}return"never"}}(),Jb=function(){try{return g.activeElement}catch(a){return null}},Kb=function(a,b){var c,d,e,f=[];if("string"==typeof b&&b&&(f=b.split(/\s+/)),a&&1===a.nodeType&&f.length>0)if(a.classList)for(c=0,d=f.length;d>c;c++)a.classList.add(f[c]);else if(a.hasOwnProperty("className")){for(e=" "+a.className+" ",c=0,d=f.length;d>c;c++)-1===e.indexOf(" "+f[c]+" ")&&(e+=f[c]+" ");a.className=e.replace(/^\s+|\s+$/g,"")}return a},Lb=function(a,b){var c,d,e,f=[];if("string"==typeof b&&b&&(f=b.split(/\s+/)),a&&1===a.nodeType&&f.length>0)if(a.classList&&a.classList.length>0)for(c=0,d=f.length;d>c;c++)a.classList.remove(f[c]);else if(a.className){for(e=(" "+a.className+" ").replace(/[\r\n\t]/g," "),c=0,d=f.length;d>c;c++)e=e.replace(" "+f[c]+" "," ");a.className=e.replace(/^\s+|\s+$/g,"")}return a},Mb=function(a,b){var c=m(a,null).getPropertyValue(b);return"cursor"!==b||c&&"auto"!==c||"A"!==a.nodeName?c:"pointer"},Nb=function(a){var b={left:0,top:0,width:0,height:0};if(a.getBoundingClientRect){var c=a.getBoundingClientRect(),d=f.pageXOffset,e=f.pageYOffset,h=g.documentElement.clientLeft||0,i=g.documentElement.clientTop||0,j=0,k=0;if("relative"===Mb(g.body,"position")){var l=g.body.getBoundingClientRect(),m=g.documentElement.getBoundingClientRect();j=l.left-m.left||0,k=l.top-m.top||0}b.left=c.left+d-h-j,b.top=c.top+e-i-k,b.width="width"in c?c.width:c.right-c.left,b.height="height"in c?c.height:c.bottom-c.top}return b},Ob=function(a){if(!a)return!1;var b=m(a,null),c=r(b.height)>0,d=r(b.width)>0,e=r(b.top)>=0,f=r(b.left)>=0,g=c&&d&&e&&f,h=g?null:Nb(a),i="none"!==b.display&&"collapse"!==b.visibility&&(g||!!h&&(c||h.height>0)&&(d||h.width>0)&&(e||h.top>=0)&&(f||h.left>=0));return i},Pb=function(){j(S),S=0,l(T),T=0},Qb=function(){var a;if(d&&(a=Ab(N.bridge))){var b=Nb(d);A(a.style,{width:b.width+"px",height:b.height+"px",top:b.top+"px",left:b.left+"px",zIndex:""+Sb(Z.zIndex)})}},Rb=function(a){N.ready===!0&&(N.bridge&&"function"==typeof N.bridge.setHandCursor?N.bridge.setHandCursor(a):N.ready=!1)},Sb=function(a){if(/^(?:auto|inherit)$/.test(a))return a;var b;return"number"!=typeof a||s(a)?"string"==typeof a&&(b=Sb(q(a,10))):b=a,"number"==typeof b?b:"auto"},Tb=function(b){var c,d,e,f=N.sandboxed,g=null;if(b=b===!0,M===!1)g=!1;else{try{d=a.frameElement||null}catch(h){e={name:h.name,message:h.message}}if(d&&1===d.nodeType&&"IFRAME"===d.nodeName)try{g=d.hasAttribute("sandbox")}catch(h){g=null}else{try{c=document.domain||null}catch(h){c=null}(null===c||e&&"SecurityError"===e.name&&/(^|[\s\(\[@])sandbox(es|ed|ing|[\s\.,!\)\]@]|$)/.test(e.message.toLowerCase()))&&(g=!0)}}return N.sandboxed=g,f===g||b||Ub(o),g},Ub=function(a){function b(a){var b=a.match(/[\d]+/g);return b.length=3,b.join(".")}function c(a){return!!a&&(a=a.toLowerCase())&&(/^(pepflashplayer\.dll|libpepflashplayer\.so|pepperflashplayer\.plugin)$/.test(a)||"chrome.plugin"===a.slice(-13))}function d(a){a&&(i=!0,a.version&&(l=b(a.version)),!l&&a.description&&(l=b(a.description)),a.filename&&(k=c(a.filename)))}var e,f,g,i=!1,j=!1,k=!1,l="";if(h.plugins&&h.plugins.length)e=h.plugins["Shockwave Flash"],d(e),h.plugins["Shockwave Flash 2.0"]&&(i=!0,l="2.0.0.11");else if(h.mimeTypes&&h.mimeTypes.length)g=h.mimeTypes["application/x-shockwave-flash"],e=g&&g.enabledPlugin,d(e);else if("undefined"!=typeof a){j=!0;try{f=new a("ShockwaveFlash.ShockwaveFlash.7"),i=!0,l=b(f.GetVariable("$version"))}catch(m){try{f=new a("ShockwaveFlash.ShockwaveFlash.6"),i=!0,l="6.0.21"}catch(n){try{f=new a("ShockwaveFlash.ShockwaveFlash"),i=!0,l=b(f.GetVariable("$version"))}catch(o){j=!1}}}}N.disabled=i!==!0,N.outdated=l&&r(l)e;e++)a=g[e].replace(/^on/,""),h[a]=!0,j[a]||(j[a]=[]),j[a].push(d);if(h.ready&&N.ready&&this.emit({type:"ready",client:this}),h.error){for(e=0,f=W.length;f>e;e++)if(N[W[e].replace(/^flash-/,"")]){this.emit({type:"error",name:W[e],client:this});break}c!==b&&Vb.version!==c&&this.emit({type:"error",name:"version-mismatch",jsVersion:Vb.version,swfVersion:c})}}return this},bc=function(a,b){var c,d,e,f,g,h=Xb[this.id],i=h&&h.handlers;if(!i)return this;if(0===arguments.length)f=u(i);else if("string"==typeof a&&a)f=a.split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)w.call(a,c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&this.off(c,a[c]);if(f&&f.length)for(c=0,d=f.length;d>c;c++)if(a=f[c].toLowerCase().replace(/^on/,""),g=i[a],g&&g.length)if(b)for(e=g.indexOf(b);-1!==e;)g.splice(e,1),e=g.indexOf(b,e);else g.length=0;return this},cc=function(a){var b=null,c=Xb[this.id]&&Xb[this.id].handlers;return c&&(b="string"==typeof a&&a?c[a]?c[a].slice(0):[]:B(c)),b},dc=function(a){if(ic.call(this,a)){"object"==typeof a&&a&&"string"==typeof a.type&&a.type&&(a=A({},a));var b=A({},ob(a),{client:this});jc.call(this,b)}return this},ec=function(a){if(!Xb[this.id])throw new Error("Attempted to clip element(s) to a destroyed ZeroClipboard client instance");a=kc(a);for(var b=0;b0,e=!a.target||d&&-1!==c.indexOf(a.target),f=a.relatedTarget&&d&&-1!==c.indexOf(a.relatedTarget),g=a.client&&a.client===this;return b&&(e||f||g)?!0:!1},jc=function(a){var b=Xb[this.id];if("object"==typeof a&&a&&a.type&&b){var c=rb(a),d=b&&b.handlers["*"]||[],e=b&&b.handlers[a.type]||[],g=d.concat(e);if(g&&g.length){var h,i,j,k,l,m=this;for(h=0,i=g.length;i>h;h++)j=g[h],k=m,"string"==typeof j&&"function"==typeof f[j]&&(j=f[j]),"object"==typeof j&&j&&"function"==typeof j.handleEvent&&(k=j,j=j.handleEvent),"function"==typeof j&&(l=A({},a),sb(j,k,[l],c))}}},kc=function(a){return"string"==typeof a&&(a=[]),"number"!=typeof a.length?[a]:a},lc=function(a){if(a&&1===a.nodeType){var b=function(a){(a||(a=f.event))&&("js"!==a._source&&(a.stopImmediatePropagation(),a.preventDefault()),delete a._source)},c=function(c){(c||(c=f.event))&&(b(c),Vb.focus(a))};a.addEventListener("mouseover",c,!1),a.addEventListener("mouseout",b,!1),a.addEventListener("mouseenter",b,!1),a.addEventListener("mouseleave",b,!1),a.addEventListener("mousemove",b,!1),$b[a.zcClippingId]={mouseover:c,mouseout:b,mouseenter:b,mouseleave:b,mousemove:b}}},mc=function(a){if(a&&1===a.nodeType){var b=$b[a.zcClippingId];if("object"==typeof b&&b){for(var c,d,e=["move","leave","enter","out","over"],f=0,g=e.length;g>f;f++)c="mouse"+e[f],d=b[c],"function"==typeof d&&a.removeEventListener(c,d,!1);delete $b[a.zcClippingId]}}};Vb._createClient=function(){_b.apply(this,z(arguments))},Vb.prototype.on=function(){return ac.apply(this,z(arguments))},Vb.prototype.off=function(){return bc.apply(this,z(arguments))},Vb.prototype.handlers=function(){return cc.apply(this,z(arguments))},Vb.prototype.emit=function(){return dc.apply(this,z(arguments))},Vb.prototype.clip=function(){return ec.apply(this,z(arguments))},Vb.prototype.unclip=function(){return fc.apply(this,z(arguments))},Vb.prototype.elements=function(){return gc.apply(this,z(arguments))},Vb.prototype.destroy=function(){return hc.apply(this,z(arguments))},Vb.prototype.setText=function(a){if(!Xb[this.id])throw new Error("Attempted to set pending clipboard data from a destroyed ZeroClipboard client instance");return Vb.setData("text/plain",a),this},Vb.prototype.setHtml=function(a){if(!Xb[this.id])throw new Error("Attempted to set pending clipboard data from a destroyed ZeroClipboard client instance");return Vb.setData("text/html",a),this},Vb.prototype.setRichText=function(a){if(!Xb[this.id])throw new Error("Attempted to set pending clipboard data from a destroyed ZeroClipboard client instance");return Vb.setData("application/rtf",a),this},Vb.prototype.setData=function(){if(!Xb[this.id])throw new Error("Attempted to set pending clipboard data from a destroyed ZeroClipboard client instance");return Vb.setData.apply(this,z(arguments)),this},Vb.prototype.clearData=function(){if(!Xb[this.id])throw new Error("Attempted to clear pending clipboard data from a destroyed ZeroClipboard client instance");return Vb.clearData.apply(this,z(arguments)),this},Vb.prototype.getData=function(){if(!Xb[this.id])throw new Error("Attempted to get pending clipboard data from a destroyed ZeroClipboard client instance");return Vb.getData.apply(this,z(arguments))},"function"==typeof define&&define.amd?define(function(){return Vb}):"object"==typeof module&&module&&"object"==typeof module.exports&&module.exports?module.exports=Vb:a.ZeroClipboard=Vb}(function(){return this||window}()); +//# sourceMappingURL=ZeroClipboard.min.map \ No newline at end of file diff --git a/js/ZeroClipboard.swf b/js/ZeroClipboard.swf index 55ccf9608ed3cf01db575de40c0be1bfc5440a80..8bad6a3e34f1b0b055da3ee8e506fe627cf75987 100644 GIT binary patch literal 6580 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 literal 2157 zcmV-z2$J_hS5pr43;+Ol+I?2tQ`^`TzgL!YC1D%efJ4Zavmqf6femD{3n3(6;{X9n zFeKYFAHJ5aY$ZZ+C7F+QI?e2Kr+-1;voC$x_N9IAAJCbOOlEiA`_Sq1t^YvNBbfl+ zZmU7Z=lpcO&$$u@i2oZx@!ugdh*2SV9wGFrzQ16E=A4>7yHzM=4t7n;odxOMNW=4* zv)Sza{{F=N^n~ryvy(G3Guhl!c4}%IG{)US%cBS5mV0evK6FrEuI3m`&#{_lP_CUOI)A228dy(g_HMT6 z*tM1hIqBdkG(Kw*xM;Sjrr|c2GvBh_SoVG=#3>r+Xbz*E-L3Hv3!a!p)0c zKSSZQ_^&_wGY=F0tMZIFcHT6aRhv3B^ymIRDG0#>q&sw%O`-&vK-}AZ|4~F7I=)OK zmOaO?>SC$-nrU7%oWum%3&y9c+bx$Z1w6lJ8#S_M+a{xyxY63JGAGs*F4nQE8E(_0 zhhn+u7#B$F-dREgL^)QV^GVS|hnp+FD;&dsSE|Z!T=-mzTEEU1?5yRJ^!a zezjgI?5r)ldb+i+xw%w0V-t6&Wq9DX(;R7+d9*-1sx+zNvd1mv97gNRD+VP$0qDj} zy=7_PDY+T;PR&rK?y8y7dPg(AP;O;1d(_EvC6u|BaoEpVhQn^2QNF8;WHLXV_}KuU z$Nh3t++y{mgC_U~%CmYI={@VNXY~@r)XW_Ut%pscRn2@IAHVi$;7vC4a*6;)uHjVMGZNri~ z4lL$Hced7Gdz1YVAD&uKw-YbD318|JP)5WFc5mCo@A;>6$(oUXl8cWAR=Xs%pk;H+qvrV?iQ)Tnulo{(K;M!n%l zHHYqRLEE5!W`jz!R?9aGvnJ%%R`QP$Ach@WGaxk>jIv(ZDKEV$Jz3h4kJ+8=W3W(q zx*>Jgoz3|16b_&~i<-%$V4(rtuM1qQ{RC~h*O%cnT<$@D?veXhRXw!ri@m_GW z;Z;bt;4rYDPr`msi`WRu;Gy4U?+=C@>)MOte{E6v$Cs}!jnjNu8I%Pi-AIoL=p0Uu z56MFlL)oF+(B#lmdM5pxiwjtkWKQ9GqOo{yVw+%&;0WOaf<=M}!4knTiS!U5N`x2@ z;zZ~rLV^fMBBY4WM{qyE0|cjuaE=IrL>MB%1tMG|!X+YHCiof=M+g}s_!hyctYU(v z+_wE(<|~a?Z&ohpmv``6?)!Esh0y!9euZX$UZtM^y+((JktQ5{ zsfmd`gygDN6)uC>`zn7_<@M|I`jjXn|Nh~FBuc`2@EzeIk~|K+-*VrzQyGNX>ZipU zco-K)FmN~VSKqc%(32OV?bT6;`rQ#2@ex^)e~rV81h~Z=1o_lVd{jISI%682(h!0~ zNc&4oN~{HmNL2!f2<@s+9K)#@gg_kx{dxuerg#p6lPVuR+Z#*4j7Q;d0O;4@VO9Jl zNubuMP!*v9i6nmy6-W{ZDi8!-R=(zf5^jC(ub_&m&eL(A59q{;tgq+v$zm42&3+pM z)Ti3|ba99a3ej&vC<#IV_gi)On^ZqSz^W_7PcgWv+|fVFyf1yu9qBVCiZh`iY>p3n zqsMZ`xlQi^5aS}U(t8Z7 z13jV}0LKM@M+3Mg1)E=40jGMpeFSo;#3!O3p@H^MsT2W&UJhgFnxA8+!sRNPxys{Q jWh+-H=PDBXeSt28SA&3RsxNr4bpJQ|0FeIxQ+=8*M*tao diff --git a/js/functions.js b/js/functions.js index bd6c1df9..5923ba04 100644 --- a/js/functions.js +++ b/js/functions.js @@ -8,6 +8,8 @@ order.dir = 0; var passToClip = 0; // Variable para el ajuste óptimo del contenido a la altura del documento var windowAdjustSize = 350; +// Variable para almacena la llamada a setTimeout() +var timeout; var strPassword; var minPasswordLength = 8; @@ -36,7 +38,7 @@ jQuery.extend(jQuery.fancybox.defaults, { autoHeight: 'true', minHeight: 50, padding: 0, - helpers: {overlay: { css: { 'background': 'rgba(0, 0, 0, 0.1)'}}}, + helpers: {overlay: {css: {'background': 'rgba(0, 0, 0, 0.1)'}}}, afterShow: function () { "use strict"; @@ -58,6 +60,31 @@ $(document).ready(function () { $('input, textarea').placeholder(); }); +//$(function() { +// "use strict"; +// +// $.ajaxSetup({ +// error: function(jqXHR, exception) { +// if (jqXHR.status === 0) { +// $('#content').fadeIn().html(resMsg("nofancyerror", jqXHR.responseText)); +// } else if (jqXHR.status == 404) { +// $('#content').fadeIn().html(resMsg("nofancyerror", jqXHR.responseText)); +// } else if (jqXHR.status == 500) { +// $('#content').fadeIn().html(resMsg("nofancyerror", jqXHR.responseText)); +// } else if (exception === 'parsererror') { +// $('#content').fadeIn().html(resMsg("nofancyerror", jqXHR.responseText)); +// } else if (exception === 'timeout') { +// $('#content').fadeIn().html(resMsg("nofancyerror", jqXHR.responseText)); +// } else if (exception === 'abort') { +// $('#content').fadeIn().html(resMsg("nofancyerror", jqXHR.responseText)); +// } else { +// $('#content').fadeIn().html(resMsg("nofancyerror", jqXHR.responseText)); +// //alert('Uncaught Error.n' + jqXHR.responseText); +// } +// } +// }); +//}); + // Función para cargar el contenido de la acción del menú seleccionada function doAction(action, lastAction, id) { "use strict"; @@ -113,7 +140,7 @@ function setWindowAdjustSize() { function scrollUp() { "use strict"; - $('html, body').animate({ scrollTop: 0 }, 'slow'); + $('html, body').animate({scrollTop: 0}, 'slow'); } // Función para limpiar un formulario @@ -268,20 +295,78 @@ function viewPass(id, full, history) { $.ajax({ type: 'POST', url: APP_ROOT + '/ajax/ajax_viewpass.php', + dataType: "json", async: false, data: {'accountid': id, 'full': full, 'isHistory': history, 'isAjax': 1}, - success: function (data) { - if (data === "-1") { - doLogout(); - } else { - if (full === 0) { - // Copiamos la clave en el objeto que tiene acceso al portapapeles - $('#clip_pass_text').html(data); - passToClip = 1; - } else { - resMsg("none", data); - } + success: function (json) { + if (full === false) { + // Copiamos la clave en el objeto que tiene acceso al portapapeles + $('#clip-pass-text').html(json.accpass); + passToClip = 1; + return; } + + $('
    ').dialog({ + modal: true, + title: json.title, + width: 'auto', + open: function () { + var content; + + if (json.status === 0) { + content = '

    ' + json.accpass + '

    ' + + '
    ' + + '
    ' + + '' + + '
    '; + } else { + content = '' + json.description + ''; + + $(this).dialog("option", "buttons", + [{ + text: "Ok", + icons: {primary: "ui-icon-close"}, click: function () { + $(this).dialog("close"); + } + }] + ); + } + + $(this).html(content); + + // Recentrar después de insertar el contenido + $(this).dialog('option', 'position', 'center'); + + // Carga de objeto flash para copiar al portapapeles + var client = new ZeroClipboard($("#dialog-clip-pass-button-" + id), {swfPath: "js/ZeroClipboard.swf"}); + + client.on('ready', function (e) { + $("#dialog-clip-pass-button-" + id).attr("data-clip", 1); + + client.on('copy', function (e) { + e.clipboardData.setData('text/plain', json.accpass); + }); + client.on('aftercopy', function (e) { + $('.dialog-pass-text').addClass('dialog-clip-pass-copy round'); + }); + }); + client.on('error', function (e) { + ZeroClipboard.destroy(); + }); + + // Timeout del mensaje + var $this = $(this); + timeout = setTimeout(function(){$this.dialog('close');}, 30000); + }, + // Forzar la eliminación del objeto para que ZeroClipboard siga funcionando al abrirlo de nuevo + close: function () { + clearTimeout(timeout); + $(this).dialog("destroy"); + } + }); } }); } @@ -341,7 +426,8 @@ function doLogin() { 404: function () { var txt = LANG[1] + '

    ' + LANG[13] + '

    '; resMsg("error", txt); - }} + } + } }); return false; @@ -461,6 +547,10 @@ function configMgmt(action) { frm = 'frmCrypt'; url = '/ajax/ajax_configSave.php'; break; + case "gentmpass": + frm = 'frmTempMasterPass'; + url = '/ajax/ajax_configSave.php'; + break; case "backup": frm = 'frmBackup'; url = '/ajax/ajax_backup.php'; @@ -773,7 +863,7 @@ function appMgmtSave(frmId, isDel, id, type, sk, nextaction) { var url = '/ajax/ajax_appMgmtSave.php'; if (isDel === 1) { - data = {'id': id, 'type': type, 'action': 4, 'sk': sk, 'activeTab': frmId, 'onCloseAction': nextaction }; + data = {'id': id, 'type': type, 'action': 4, 'sk': sk, 'activeTab': frmId, 'onCloseAction': nextaction}; var atext = '

    ' + LANG[12] + '

    '; alertify.confirm(atext, function (e) { @@ -813,7 +903,7 @@ function clearEventlog(sk) { alertify.confirm(atext, function (e) { if (e) { - var data = { 'clear': 1, 'sk': sk, 'isAjax': 1}; + var data = {'clear': 1, 'sk': sk, 'isAjax': 1}; var url = '/ajax/ajax_eventlog.php'; sendAjax(data, url); @@ -1000,9 +1090,11 @@ function resMsg(type, txt, url, action) { "use strict"; if (typeof url !== "undefined") { - $.ajax({ url: url, type: 'get', dataType: 'html', async: false, success: function (data) { - txt = data; - }}); + $.ajax({ + url: url, type: 'get', dataType: 'html', async: false, success: function (data) { + txt = data; + } + }); } var html; @@ -1011,13 +1103,13 @@ function resMsg(type, txt, url, action) { switch (type) { case "ok": - alertify.set({ beforeCloseAction: action }); + alertify.set({beforeCloseAction: action}); return alertify.success(txt); case "error": - alertify.set({ beforeCloseAction: action }); + alertify.set({beforeCloseAction: action}); return alertify.error(txt); case "warn": - alertify.set({ beforeCloseAction: action }); + alertify.set({beforeCloseAction: action}); return alertify.log(txt); case "info": html = '
    ' + txt + '
    '; @@ -1026,20 +1118,26 @@ function resMsg(type, txt, url, action) { html = txt; break; case "nofancyerror": - html = '

    Oops...
    ' + LANG[1] + '
    ' + txt + '

    '; + html = '

    Oops...
    ' + LANG[1] + '
    ' + txt + '

    '; return html; default: - alertify.set({ beforeCloseAction: action }); + alertify.set({beforeCloseAction: action}); return alertify.error(txt); } - $.fancybox(html, {afterLoad: function () { - $('.fancybox-skin,.fancybox-outer,.fancybox-inner').css({'border-radius': '25px', '-moz-border-radius': '25px', '-webkit-border-radius': '25px'}); - }, afterClose: function () { - if (typeof action !== "undefined") { - eval(action); + $.fancybox(html, { + afterLoad: function () { + $('.fancybox-skin,.fancybox-outer,.fancybox-inner').css({ + 'border-radius': '25px', + '-moz-border-radius': '25px', + '-webkit-border-radius': '25px' + }); + }, afterClose: function () { + if (typeof action !== "undefined") { + eval(action); + } } - } }); + }); } // Función para comprobar la conexión con LDAP @@ -1052,7 +1150,15 @@ function checkLdapConn() { var ldapBindUser = $('#frmConfig').find('[name=ldap_binduser]').val(); var ldapBindPass = $('#frmConfig').find('[name=ldap_bindpass]').val(); var sk = $('#frmConfig').find('[name=sk]').val(); - var data = {'ldap_server': ldapServer, 'ldap_base': ldapBase, 'ldap_group': ldapGroup, 'ldap_binduser': ldapBindUser, 'ldap_bindpass': ldapBindPass, 'isAjax': 1, 'sk': sk}; + var data = { + 'ldap_server': ldapServer, + 'ldap_base': ldapBase, + 'ldap_group': ldapGroup, + 'ldap_binduser': ldapBindUser, + 'ldap_bindpass': ldapBindPass, + 'isAjax': 1, + 'sk': sk + }; sendAjax(data, '/ajax/ajax_checkLdap.php'); } diff --git a/js/jquery-1.11.2.min.js b/js/jquery-1.11.2.min.js new file mode 100644 index 00000000..e6a051d0 --- /dev/null +++ b/js/jquery-1.11.2.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.11.2 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.2",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; +return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
    a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/\s*$/g,rb={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:k.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("', - error : '

    The requested content cannot be loaded.
    Please try again later.

    ', - closeBtn : '', - next : '', - prev : '' - }, - - // Properties for each animation type - // Opening fancyBox - openEffect : 'fade', // 'elastic', 'fade' or 'none' - openSpeed : 250, - openEasing : 'swing', - openOpacity : true, - openMethod : 'zoomIn', - - // Closing fancyBox - closeEffect : 'fade', // 'elastic', 'fade' or 'none' - closeSpeed : 250, - closeEasing : 'swing', - closeOpacity : true, - closeMethod : 'zoomOut', - - // Changing next gallery item - nextEffect : 'elastic', // 'elastic', 'fade' or 'none' - nextSpeed : 250, - nextEasing : 'swing', - nextMethod : 'changeIn', - - // Changing previous gallery item - prevEffect : 'elastic', // 'elastic', 'fade' or 'none' - prevSpeed : 250, - prevEasing : 'swing', - prevMethod : 'changeOut', - - // Enable default helpers - helpers : { - overlay : true, - title : true - }, - - // Callbacks - onCancel : $.noop, // If canceling - beforeLoad : $.noop, // Before loading - afterLoad : $.noop, // After loading - beforeShow : $.noop, // Before changing in current item - afterShow : $.noop, // After opening - beforeChange : $.noop, // Before changing gallery item - beforeClose : $.noop, // Before closing - afterClose : $.noop // After closing - }, - - //Current state - group : {}, // Selected group - opts : {}, // Group options - previous : null, // Previous element - coming : null, // Element being loaded - current : null, // Currently loaded element - isActive : false, // Is activated - isOpen : false, // Is currently open - isOpened : false, // Have been fully opened at least once - - wrap : null, - skin : null, - outer : null, - inner : null, - - player : { - timer : null, - isActive : false - }, - - // Loaders - ajaxLoad : null, - imgPreload : null, - - // Some collections - transitions : {}, - helpers : {}, - - /* - * Static methods - */ - - open: function (group, opts) { - if (!group) { - return; - } - - if (!$.isPlainObject(opts)) { - opts = {}; - } - - // Close if already active - if (false === F.close(true)) { - return; - } - - // Normalize group - if (!$.isArray(group)) { - group = isQuery(group) ? $(group).get() : [group]; - } - - // Recheck if the type of each element is `object` and set content type (image, ajax, etc) - $.each(group, function(i, element) { - var obj = {}, - href, - title, - content, - type, - rez, - hrefParts, - selector; - - if ($.type(element) === "object") { - // Check if is DOM element - if (element.nodeType) { - element = $(element); - } - - if (isQuery(element)) { - obj = { - href : element.data('fancybox-href') || element.attr('href'), - title : element.data('fancybox-title') || element.attr('title'), - isDom : true, - element : element - }; - - if ($.metadata) { - $.extend(true, obj, element.metadata()); - } - - } else { - obj = element; - } - } - - href = opts.href || obj.href || (isString(element) ? element : null); - title = opts.title !== undefined ? opts.title : obj.title || ''; - - content = opts.content || obj.content; - type = content ? 'html' : (opts.type || obj.type); - - if (!type && obj.isDom) { - type = element.data('fancybox-type'); - - if (!type) { - rez = element.prop('class').match(/fancybox\.(\w+)/); - type = rez ? rez[1] : null; - } - } - - if (isString(href)) { - // Try to guess the content type - if (!type) { - if (F.isImage(href)) { - type = 'image'; - - } else if (F.isSWF(href)) { - type = 'swf'; - - } else if (href.charAt(0) === '#') { - type = 'inline'; - - } else if (isString(element)) { - type = 'html'; - content = element; - } - } - - // Split url into two pieces with source url and content selector, e.g, - // "/mypage.html #my_id" will load "/mypage.html" and display element having id "my_id" - if (type === 'ajax') { - hrefParts = href.split(/\s+/, 2); - href = hrefParts.shift(); - selector = hrefParts.shift(); - } - } - - if (!content) { - if (type === 'inline') { - if (href) { - content = $( isString(href) ? href.replace(/.*(?=#[^\s]+$)/, '') : href ); //strip for ie7 - - } else if (obj.isDom) { - content = element; - } - - } else if (type === 'html') { - content = href; - - } else if (!type && !href && obj.isDom) { - type = 'inline'; - content = element; - } - } - - $.extend(obj, { - href : href, - type : type, - content : content, - title : title, - selector : selector - }); - - group[ i ] = obj; - }); - - // Extend the defaults - F.opts = $.extend(true, {}, F.defaults, opts); - - // All options are merged recursive except keys - if (opts.keys !== undefined) { - F.opts.keys = opts.keys ? $.extend({}, F.defaults.keys, opts.keys) : false; - } - - F.group = group; - - return F._start(F.opts.index); - }, - - // Cancel image loading or abort ajax request - cancel: function () { - var coming = F.coming; - - if (!coming || false === F.trigger('onCancel')) { - return; - } - - F.hideLoading(); - - if (F.ajaxLoad) { - F.ajaxLoad.abort(); - } - - F.ajaxLoad = null; - - if (F.imgPreload) { - F.imgPreload.onload = F.imgPreload.onerror = null; - } - - // If the first item has been canceled, then clear everything - if (coming.wrap) { - coming.wrap.stop(true).trigger('onReset').remove(); - } - - if (!F.current) { - F.trigger('afterClose'); - } - - F.coming = null; - }, - - // Start closing animation if is open; remove immediately if opening/closing - close: function (immediately) { - F.cancel(); - - if (false === F.trigger('beforeClose')) { - return; - } - - F.unbindEvents(); - - if (!F.isOpen || immediately === true) { - $('.fancybox-wrap').stop(true).trigger('onReset').remove(); - - F._afterZoomOut(); - - } else { - F.isOpen = F.isOpened = false; - F.isClosing = true; - - $('.fancybox-item, .fancybox-nav').remove(); - - F.wrap.stop(true, true).removeClass('fancybox-opened'); - - if (F.wrap.css('position') === 'fixed') { - F.wrap.css(F._getPosition( true )); - } - - F.transitions[ F.current.closeMethod ](); - } - }, - - // Manage slideshow: - // $.fancybox.play(); - toggle slideshow - // $.fancybox.play( true ); - start - // $.fancybox.play( false ); - stop - play: function ( action ) { - var clear = function () { - clearTimeout(F.player.timer); - }, - set = function () { - clear(); - - if (F.current && F.player.isActive) { - F.player.timer = setTimeout(F.next, F.current.playSpeed); - } - }, - stop = function () { - clear(); - - $('body').unbind('.player'); - - F.player.isActive = false; - - F.trigger('onPlayEnd'); - }, - start = function () { - if (F.current && (F.current.loop || F.current.index < F.group.length - 1)) { - F.player.isActive = true; - - $('body').bind({ - 'afterShow.player onUpdate.player' : set, - 'onCancel.player beforeClose.player' : stop, - 'beforeLoad.player' : clear - }); - - set(); - - F.trigger('onPlayStart'); - } - }; - - if (action === true || (!F.player.isActive && action !== false)) { - start(); - } else { - stop(); - } - }, - - // Navigate to next gallery item - next: function ( direction ) { - var current = F.current; - - if (current) { - if (!isString(direction)) { - direction = current.direction.next; - } - - F.jumpto(current.index + 1, direction, 'next'); - } - }, - - // Navigate to previous gallery item - prev: function ( direction ) { - var current = F.current; - - if (current) { - if (!isString(direction)) { - direction = current.direction.prev; - } - - F.jumpto(current.index - 1, direction, 'prev'); - } - }, - - // Navigate to gallery item by index - jumpto: function ( index, direction, router ) { - var current = F.current; - - if (!current) { - return; - } - - index = getScalar(index); - - F.direction = direction || current.direction[ (index >= current.index ? 'next' : 'prev') ]; - F.router = router || 'jumpto'; - - if (current.loop) { - if (index < 0) { - index = current.group.length + (index % current.group.length); - } - - index = index % current.group.length; - } - - if (current.group[ index ] !== undefined) { - F.cancel(); - - F._start(index); - } - }, - - // Center inside viewport and toggle position type to fixed or absolute if needed - reposition: function (e, onlyAbsolute) { - var pos; - - if (F.isOpen) { - pos = F._getPosition(onlyAbsolute); - - if (e && e.type === 'scroll') { - delete pos.position; - - F.wrap.stop(true, true).animate(pos, 200); - - } else { - F.wrap.css(pos); - } - } - }, - - update: function (e) { - var type = (e && e.type), - anyway = !type || type === 'orientationchange'; - - if (anyway) { - clearTimeout(didUpdate); - - didUpdate = null; - } - - if (!F.isOpen || didUpdate) { - return; - } - - // Help browser to restore document dimensions - if (anyway || isTouch) { - F.wrap.removeAttr('style').addClass('fancybox-tmp'); - - F.trigger('onUpdate'); - } - - didUpdate = setTimeout(function() { - var current = F.current; - - if (!current) { - return; - } - - F.wrap.removeClass('fancybox-tmp'); - - if (type !== 'scroll') { - F._setDimension(); - } - - if (!(type === 'scroll' && current.canShrink)) { - F.reposition(e); - } - - F.trigger('onUpdate'); - - didUpdate = null; - - }, (isTouch ? 500 : (anyway ? 20 : 300))); - }, - - // Shrink content to fit inside viewport or restore if resized - toggle: function ( action ) { - if (F.isOpen) { - F.current.fitToView = $.type(action) === "boolean" ? action : !F.current.fitToView; - - F.update(); - } - }, - - hideLoading: function () { - D.unbind('keypress.fb'); - - $('#fancybox-loading').remove(); - }, - - showLoading: function () { - var el, viewport; - - F.hideLoading(); - - // If user will press the escape-button, the request will be canceled - D.bind('keypress.fb', function(e) { - if ((e.which || e.keyCode) === 27) { - e.preventDefault(); - F.cancel(); - } - }); - - el = $('
    ').click(F.cancel).appendTo('body'); - - if (!F.defaults.fixed) { - viewport = F.getViewport(); - - el.css({ - position : 'absolute', - top : (viewport.h * 0.5) + viewport.y, - left : (viewport.w * 0.5) + viewport.x - }); - } - }, - - getViewport: function () { - var locked = (F.current && F.current.locked) || false, - rez = { - x: W.scrollLeft(), - y: W.scrollTop() - }; - - if (locked) { - rez.w = locked[0].clientWidth; - rez.h = locked[0].clientHeight; - - } else { - // See http://bugs.jquery.com/ticket/6724 - rez.w = isTouch && window.innerWidth ? window.innerWidth : W.width(); - rez.h = isTouch && window.innerHeight ? window.innerHeight : W.height(); - } - - return rez; - }, - - // Unbind the keyboard / clicking actions - unbindEvents: function () { - if (F.wrap && isQuery(F.wrap)) { - F.wrap.unbind('.fb'); - } - - D.unbind('.fb'); - W.unbind('.fb'); - }, - - bindEvents: function () { - var current = F.current, - keys; - - if (!current) { - return; - } - - // Changing document height on iOS devices triggers a 'resize' event, - // that can change document height... repeating infinitely - W.bind('orientationchange.fb' + (current.autoResize ? ' resize.fb' : '' ) + (current.autoCenter && !current.locked ? ' scroll.fb' : ''), F.update); - - keys = current.keys; - - if (keys) { - D.bind('keydown.fb', function (e) { - var code = e.which || e.keyCode, - target = e.target || e.srcElement; - - // Ignore key combinations and key events within form elements - if (!e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey && !(target && (target.type || $(target).is('[contenteditable]')))) { - $.each(keys, function(i, val) { - if (current.group.length > 1 && val[ code ] !== undefined) { - F[ i ]( val[ code ] ); - - e.preventDefault(); - return false; - } - - if ($.inArray(code, val) > -1) { - F[ i ] (); - - e.preventDefault(); - return false; - } - }); - } - }); - } - - if ($.fn.mousewheel && current.mouseWheel) { - F.wrap.bind('mousewheel.fb', function (e, delta, deltaX, deltaY) { - var target = e.target || null, - parent = $(target), - canScroll = false; - - while (parent.length) { - if (canScroll || parent.is('.fancybox-skin') || parent.is('.fancybox-wrap')) { - break; - } - - canScroll = isScrollable( parent[0] ); - parent = $(parent).parent(); - } - - if (delta !== 0 && !canScroll) { - if (F.group.length > 1 && !current.canShrink) { - if (deltaY > 0 || deltaX > 0) { - F.prev( deltaY > 0 ? 'down' : 'left' ); - - } else if (deltaY < 0 || deltaX < 0) { - F.next( deltaY < 0 ? 'up' : 'right' ); - } - - e.preventDefault(); - } - } - }); - } - }, - - trigger: function (event, o) { - var ret, obj = o || F.coming || F.current; - - if (!obj) { - return; - } - - if ($.isFunction( obj[event] )) { - ret = obj[event].apply(obj, Array.prototype.slice.call(arguments, 1)); - } - - if (ret === false) { - return false; - } - - if (event === 'onCancel' && !F.isOpened) { - F.isActive = false; - } - - if (obj.helpers) { - $.each(obj.helpers, function (helper, opts) { - if (opts && F.helpers[helper] && $.isFunction(F.helpers[helper][event])) { - opts = $.extend(true, {}, F.helpers[helper].defaults, opts); - - F.helpers[helper][event](opts, obj); - } - }); - } - - $.event.trigger(event + '.fb'); - }, - - isImage: function (str) { - return isString(str) && str.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp)((\?|#).*)?$)/i); - }, - - isSWF: function (str) { - return isString(str) && str.match(/\.(swf)((\?|#).*)?$/i); - }, - - _start: function (index) { - var coming = {}, - obj, - href, - type, - margin, - padding; - - index = getScalar( index ); - obj = F.group[ index ] || null; - - if (!obj) { - return false; - } - - coming = $.extend(true, {}, F.opts, obj); - - // Convert margin and padding properties to array - top, right, bottom, left - margin = coming.margin; - padding = coming.padding; - - if ($.type(margin) === 'number') { - coming.margin = [margin, margin, margin, margin]; - } - - if ($.type(padding) === 'number') { - coming.padding = [padding, padding, padding, padding]; - } - - // 'modal' propery is just a shortcut - if (coming.modal) { - $.extend(true, coming, { - closeBtn : false, - closeClick : false, - nextClick : false, - arrows : false, - mouseWheel : false, - keys : null, - helpers: { - overlay : { - closeClick : false - } - } - }); - } - - // 'autoSize' property is a shortcut, too - if (coming.autoSize) { - coming.autoWidth = coming.autoHeight = true; - } - - if (coming.width === 'auto') { - coming.autoWidth = true; - } - - if (coming.height === 'auto') { - coming.autoHeight = true; - } - - /* - * Add reference to the group, so it`s possible to access from callbacks, example: - * afterLoad : function() { - * this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : ''); - * } - */ - - coming.group = F.group; - coming.index = index; - - // Give a chance for callback or helpers to update coming item (type, title, etc) - F.coming = coming; - - if (false === F.trigger('beforeLoad')) { - F.coming = null; - - return; - } - - type = coming.type; - href = coming.href; - - if (!type) { - F.coming = null; - - //If we can not determine content type then drop silently or display next/prev item if looping through gallery - if (F.current && F.router && F.router !== 'jumpto') { - F.current.index = index; - - return F[ F.router ]( F.direction ); - } - - return false; - } - - F.isActive = true; - - if (type === 'image' || type === 'swf') { - coming.autoHeight = coming.autoWidth = false; - coming.scrolling = 'visible'; - } - - if (type === 'image') { - coming.aspectRatio = true; - } - - if (type === 'iframe' && isTouch) { - coming.scrolling = 'scroll'; - } - - // Build the neccessary markup - coming.wrap = $(coming.tpl.wrap).addClass('fancybox-' + (isTouch ? 'mobile' : 'desktop') + ' fancybox-type-' + type + ' fancybox-tmp ' + coming.wrapCSS).appendTo( coming.parent || 'body' ); - - $.extend(coming, { - skin : $('.fancybox-skin', coming.wrap), - outer : $('.fancybox-outer', coming.wrap), - inner : $('.fancybox-inner', coming.wrap) - }); - - $.each(["Top", "Right", "Bottom", "Left"], function(i, v) { - coming.skin.css('padding' + v, getValue(coming.padding[ i ])); - }); - - F.trigger('onReady'); - - // Check before try to load; 'inline' and 'html' types need content, others - href - if (type === 'inline' || type === 'html') { - if (!coming.content || !coming.content.length) { - return F._error( 'content' ); - } - - } else if (!href) { - return F._error( 'href' ); - } - - if (type === 'image') { - F._loadImage(); - - } else if (type === 'ajax') { - F._loadAjax(); - - } else if (type === 'iframe') { - F._loadIframe(); - - } else { - F._afterLoad(); - } - }, - - _error: function ( type ) { - $.extend(F.coming, { - type : 'html', - autoWidth : true, - autoHeight : true, - minWidth : 0, - minHeight : 0, - scrolling : 'no', - hasError : type, - content : F.coming.tpl.error - }); - - F._afterLoad(); - }, - - _loadImage: function () { - // Reset preload image so it is later possible to check "complete" property - var img = F.imgPreload = new Image(); - - img.onload = function () { - this.onload = this.onerror = null; - - F.coming.width = this.width; - F.coming.height = this.height; - - F._afterLoad(); - }; - - img.onerror = function () { - this.onload = this.onerror = null; - - F._error( 'image' ); - }; - - img.src = F.coming.href; - - if (img.complete === undefined || !img.complete) { - F.showLoading(); - } - }, - - _loadAjax: function () { - var coming = F.coming; - - F.showLoading(); - - F.ajaxLoad = $.ajax($.extend({}, coming.ajax, { - url: coming.href, - error: function (jqXHR, textStatus) { - if (F.coming && textStatus !== 'abort') { - F._error( 'ajax', jqXHR ); - - } else { - F.hideLoading(); - } - }, - success: function (data, textStatus) { - if (textStatus === 'success') { - coming.content = data; - - F._afterLoad(); - } - } - })); - }, - - _loadIframe: function() { - var coming = F.coming, - iframe = $(coming.tpl.iframe.replace(/\{rnd\}/g, new Date().getTime())) - .attr('scrolling', isTouch ? 'auto' : coming.iframe.scrolling) - .attr('src', coming.href); - - // This helps IE - $(coming.wrap).bind('onReset', function () { - try { - $(this).find('iframe').hide().attr('src', '//about:blank').end().empty(); - } catch (e) {} - }); - - if (coming.iframe.preload) { - F.showLoading(); - - iframe.one('load', function() { - $(this).data('ready', 1); - - // iOS will lose scrolling if we resize - if (!isTouch) { - $(this).bind('load.fb', F.update); - } - - // Without this trick: - // - iframe won't scroll on iOS devices - // - IE7 sometimes displays empty iframe - $(this).parents('.fancybox-wrap').width('100%').removeClass('fancybox-tmp').show(); - - F._afterLoad(); - }); - } - - coming.content = iframe.appendTo( coming.inner ); - - if (!coming.iframe.preload) { - F._afterLoad(); - } - }, - - _preloadImages: function() { - var group = F.group, - current = F.current, - len = group.length, - cnt = current.preload ? Math.min(current.preload, len - 1) : 0, - item, - i; - - for (i = 1; i <= cnt; i += 1) { - item = group[ (current.index + i ) % len ]; - - if (item.type === 'image' && item.href) { - new Image().src = item.href; - } - } - }, - - _afterLoad: function () { - var coming = F.coming, - previous = F.current, - placeholder = 'fancybox-placeholder', - current, - content, - type, - scrolling, - href, - embed; - - F.hideLoading(); - - if (!coming || F.isActive === false) { - return; - } - - if (false === F.trigger('afterLoad', coming, previous)) { - coming.wrap.stop(true).trigger('onReset').remove(); - - F.coming = null; - - return; - } - - if (previous) { - F.trigger('beforeChange', previous); - - previous.wrap.stop(true).removeClass('fancybox-opened') - .find('.fancybox-item, .fancybox-nav') - .remove(); - - if (previous.wrap.css('position') === 'fixed') { - previous.wrap.css(F._getPosition( true )); - } - } - - F.unbindEvents(); - - current = coming; - content = coming.content; - type = coming.type; - scrolling = coming.scrolling; - - $.extend(F, { - wrap : current.wrap, - skin : current.skin, - outer : current.outer, - inner : current.inner, - current : current, - previous : previous - }); - - href = current.href; - - switch (type) { - case 'inline': - case 'ajax': - case 'html': - if (current.selector) { - content = $('
    ').html(content).find(current.selector); - - } else if (isQuery(content)) { - if (!content.data(placeholder)) { - content.data(placeholder, $('
    ').insertAfter( content ).hide() ); - } - - content = content.show().detach(); - - current.wrap.bind('onReset', function () { - if ($(this).find(content).length) { - content.hide().replaceAll( content.data(placeholder) ).data(placeholder, false); - } - }); - } - break; - - case 'image': - content = current.tpl.image.replace('{href}', href); - break; - - case 'swf': - content = ''; - embed = ''; - - $.each(current.swf, function(name, val) { - content += ''; - embed += ' ' + name + '="' + val + '"'; - }); - - content += ''; - break; - } - - if (!(isQuery(content) && content.parent().is(current.inner))) { - current.inner.append( content ); - } - - // Give a chance for helpers or callbacks to update elements - F.trigger('beforeShow'); - - // Set scrolling before calculating dimensions - current.inner.css('overflow', scrolling === 'yes' ? 'scroll' : (scrolling === 'no' ? 'hidden' : scrolling)); - - // Set initial dimensions and start position - F._setDimension(); - - current.wrap.removeClass('fancybox-tmp'); - - current.pos = $.extend({}, current.dim, F._getPosition( true )); - - F.isOpen = false; - F.coming = null; - - F.bindEvents(); - - if (!F.isOpened) { - $('.fancybox-wrap').not( current.wrap ).stop(true).trigger('onReset').remove(); - - } else if (previous.prevMethod) { - F.transitions[ previous.prevMethod ](); - } - - F.transitions[ F.isOpened ? current.nextMethod : current.openMethod ](); - - F._preloadImages(); - }, - - _setDimension: function () { - var viewport = F.getViewport(), - steps = 0, - canShrink = false, - canExpand = false, - wrap = F.wrap, - skin = F.skin, - inner = F.inner, - current = F.current, - width = current.width, - height = current.height, - minWidth = current.minWidth, - minHeight = current.minHeight, - maxWidth = current.maxWidth, - maxHeight = current.maxHeight, - scrolling = current.scrolling, - scrollOut = current.scrollOutside ? current.scrollbarWidth : 0, - margin = current.margin, - wMargin = margin[1] + margin[3], - hMargin = margin[0] + margin[2], - wPadding, - hPadding, - wSpace, - hSpace, - origWidth, - origHeight, - origMaxWidth, - origMaxHeight, - ratio, - width_, - height_, - maxWidth_, - maxHeight_, - iframe, - body; - - // Reset dimensions so we could re-check actual size - wrap.add(skin).add(inner).width('auto').height('auto'); - - wPadding = skin.outerWidth(true) - skin.width(); - hPadding = skin.outerHeight(true) - skin.height(); - - // Any space between content and viewport (margin, padding, border, title) - wSpace = wMargin + wPadding; - hSpace = hMargin + hPadding; - - origWidth = isPercentage(width) ? (viewport.w - wSpace) * getScalar(width) / 100 : width; - origHeight = isPercentage(height) ? (viewport.h - hSpace) * getScalar(height) / 100 : height; - - if (current.type === 'iframe') { - iframe = current.content; - - if (current.autoHeight && iframe.data('ready') === 1) { - try { - if (iframe[0].contentWindow.document.location) { - inner.width( origWidth ).height(9999); - - body = iframe.contents().find('body'); - - if (scrollOut) { - body.css('overflow-x', 'hidden'); - } - - origHeight = body.height(); - } - - } catch (e) {} - } - - } else if (current.autoWidth || current.autoHeight) { - inner.addClass( 'fancybox-tmp' ); - - // Set width or height in case we need to calculate only one dimension - if (!current.autoWidth) { - inner.width( origWidth ); - } - - if (!current.autoHeight) { - inner.height( origHeight ); - } - - if (current.autoWidth) { - origWidth = inner.width(); - } - - if (current.autoHeight) { - origHeight = inner.height(); - } - - inner.removeClass( 'fancybox-tmp' ); - } - - width = getScalar( origWidth ); - height = getScalar( origHeight ); - - ratio = origWidth / origHeight; - - // Calculations for the content - minWidth = getScalar(isPercentage(minWidth) ? getScalar(minWidth, 'w') - wSpace : minWidth); - maxWidth = getScalar(isPercentage(maxWidth) ? getScalar(maxWidth, 'w') - wSpace : maxWidth); - - minHeight = getScalar(isPercentage(minHeight) ? getScalar(minHeight, 'h') - hSpace : minHeight); - maxHeight = getScalar(isPercentage(maxHeight) ? getScalar(maxHeight, 'h') - hSpace : maxHeight); - - // These will be used to determine if wrap can fit in the viewport - origMaxWidth = maxWidth; - origMaxHeight = maxHeight; - - maxWidth_ = viewport.w - wMargin; - maxHeight_ = viewport.h - hMargin; - - if (current.aspectRatio) { - if (width > maxWidth) { - width = maxWidth; - height = width / ratio; - } - - if (height > maxHeight) { - height = maxHeight; - width = height * ratio; - } - - if (width < minWidth) { - width = minWidth; - height = width / ratio; - } - - if (height < minHeight) { - height = minHeight; - width = height * ratio; - } - - } else { - width = Math.max(minWidth, Math.min(width, maxWidth)); - height = Math.max(minHeight, Math.min(height, maxHeight)); - } - - // Try to fit inside viewport (including the title) - if (current.fitToView) { - maxWidth = Math.min(viewport.w - wSpace, maxWidth); - maxHeight = Math.min(viewport.h - hSpace, maxHeight); - - inner.width( getScalar( width ) ).height( getScalar( height ) ); - - wrap.width( getScalar( width + wPadding ) ); - - // Real wrap dimensions - width_ = wrap.width(); - height_ = wrap.height(); - - if (current.aspectRatio) { - while ((width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight) { - if (steps++ > 19) { - break; - } - - height = Math.max(minHeight, Math.min(maxHeight, height - 10)); - width = height * ratio; - - if (width < minWidth) { - width = minWidth; - height = width / ratio; - } - - if (width > maxWidth) { - width = maxWidth; - height = width / ratio; - } - - inner.width( getScalar( width ) ).height( getScalar( height ) ); - - wrap.width( getScalar( width + wPadding ) ); - - width_ = wrap.width(); - height_ = wrap.height(); - } - - } else { - width = Math.max(minWidth, Math.min(width, width - (width_ - maxWidth_))); - height = Math.max(minHeight, Math.min(height, height - (height_ - maxHeight_))); - } - } - - if (scrollOut && scrolling === 'auto' && height < origHeight && (width + wPadding + scrollOut) < maxWidth_) { - width += scrollOut; - } - - inner.width( getScalar( width ) ).height( getScalar( height ) ); - - wrap.width( getScalar( width + wPadding ) ); - - width_ = wrap.width(); - height_ = wrap.height(); - - canShrink = (width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight; - canExpand = current.aspectRatio ? (width < origMaxWidth && height < origMaxHeight && width < origWidth && height < origHeight) : ((width < origMaxWidth || height < origMaxHeight) && (width < origWidth || height < origHeight)); - - $.extend(current, { - dim : { - width : getValue( width_ ), - height : getValue( height_ ) - }, - origWidth : origWidth, - origHeight : origHeight, - canShrink : canShrink, - canExpand : canExpand, - wPadding : wPadding, - hPadding : hPadding, - wrapSpace : height_ - skin.outerHeight(true), - skinSpace : skin.height() - height - }); - - if (!iframe && current.autoHeight && height > minHeight && height < maxHeight && !canExpand) { - inner.height('auto'); - } - }, - - _getPosition: function (onlyAbsolute) { - var current = F.current, - viewport = F.getViewport(), - margin = current.margin, - width = F.wrap.width() + margin[1] + margin[3], - height = F.wrap.height() + margin[0] + margin[2], - rez = { - position: 'absolute', - top : margin[0], - left : margin[3] - }; - - if (current.autoCenter && current.fixed && !onlyAbsolute && height <= viewport.h && width <= viewport.w) { - rez.position = 'fixed'; - - } else if (!current.locked) { - rez.top += viewport.y; - rez.left += viewport.x; - } - - rez.top = getValue(Math.max(rez.top, rez.top + ((viewport.h - height) * current.topRatio))); - rez.left = getValue(Math.max(rez.left, rez.left + ((viewport.w - width) * current.leftRatio))); - - return rez; - }, - - _afterZoomIn: function () { - var current = F.current; - - if (!current) { - return; - } - - F.isOpen = F.isOpened = true; - - F.wrap.addClass('fancybox-opened').css('overflow', 'visible'); - - F.reposition(); - - // Assign a click event - if (current.closeClick || current.nextClick) { - F.inner.css('cursor', 'pointer').bind('click.fb', function(e) { - if (!$(e.target).is('a') && !$(e.target).parent().is('a')) { - F[ current.closeClick ? 'close' : 'next' ](); - } - }); - } - - // Create a close button - if (current.closeBtn) { - $(current.tpl.closeBtn).appendTo(F.skin).bind('click.fb', F.close); - } - - // Create navigation arrows - if (current.arrows && F.group.length > 1) { - if (current.loop || current.index > 0) { - $(current.tpl.prev).appendTo(F.outer).bind('click.fb', F.prev); - } - - if (current.loop || current.index < F.group.length - 1) { - $(current.tpl.next).appendTo(F.outer).bind('click.fb', F.next); - } - } - - F.trigger('afterShow'); - - // Stop the slideshow if this is the last item - if (!current.loop && current.index === current.group.length - 1) { - F.play( false ); - - } else if (F.opts.autoPlay && !F.player.isActive) { - F.opts.autoPlay = false; - - F.play(); - } - }, - - _afterZoomOut: function () { - var current = F.current; - - $('.fancybox-wrap').stop(true).trigger('onReset').remove(); - - $.extend(F, { - group : {}, - opts : {}, - router : false, - current : null, - isActive : false, - isOpened : false, - isOpen : false, - isClosing : false, - wrap : null, - skin : null, - outer : null, - inner : null - }); - - F.trigger('afterClose', current); - } - }); - - /* - * Default transitions - */ - - F.transitions = { - getOrigPosition: function () { - var current = F.current, - element = current.element, - orig = current.orig, - pos = {}, - width = 50, - height = 50, - hPadding = current.hPadding, - wPadding = current.wPadding, - viewport = F.getViewport(); - - if (!orig && current.isDom && element.is(':visible')) { - orig = element.find('img:first'); - - if (!orig.length) { - orig = element; - } - } - - if (isQuery(orig)) { - pos = orig.offset(); - - if (orig.is('img')) { - width = orig.outerWidth(); - height = orig.outerHeight(); - } - - } else { - pos.top = viewport.y + (viewport.h - height) * current.topRatio; - pos.left = viewport.x + (viewport.w - width) * current.leftRatio; - } - - if (current.locked) { - pos.top -= viewport.y; - pos.left -= viewport.x; - } - - pos = { - top : getValue(pos.top - hPadding * current.topRatio), - left : getValue(pos.left - wPadding * current.leftRatio), - width : getValue(width + wPadding), - height : getValue(height + hPadding) - }; - - return pos; - }, - - step: function (now, fx) { - var ratio, - padding, - value, - prop = fx.prop, - current = F.current, - wrapSpace = current.wrapSpace, - skinSpace = current.skinSpace; - - if (prop === 'width' || prop === 'height') { - ratio = fx.end === fx.start ? 1 : (now - fx.start) / (fx.end - fx.start); - - if (F.isClosing) { - ratio = 1 - ratio; - } - - padding = prop === 'width' ? current.wPadding : current.hPadding; - value = now - padding; - - F.skin[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) ) ); - F.inner[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) - (skinSpace * ratio) ) ); - } - }, - - zoomIn: function () { - var current = F.current, - startPos = current.pos, - effect = current.openEffect, - elastic = effect === 'elastic', - endPos = $.extend({opacity : 1}, startPos); - - // Remove "position" property that breaks older IE - delete endPos.position; - - if (elastic) { - startPos = this.getOrigPosition(); - - if (current.openOpacity) { - startPos.opacity = 0.1; - } - - } else if (effect === 'fade') { - startPos.opacity = 0.1; - } - - F.wrap.css(startPos).animate(endPos, { - duration : effect === 'none' ? 0 : current.openSpeed, - easing : current.openEasing, - step : elastic ? this.step : null, - complete : F._afterZoomIn - }); - }, - - zoomOut: function () { - var current = F.current, - effect = current.closeEffect, - elastic = effect === 'elastic', - endPos = {opacity : 0.1}; - - if (elastic) { - endPos = this.getOrigPosition(); - - if (current.closeOpacity) { - endPos.opacity = 0.1; - } - } - - F.wrap.animate(endPos, { - duration : effect === 'none' ? 0 : current.closeSpeed, - easing : current.closeEasing, - step : elastic ? this.step : null, - complete : F._afterZoomOut - }); - }, - - changeIn: function () { - var current = F.current, - effect = current.nextEffect, - startPos = current.pos, - endPos = { opacity : 1 }, - direction = F.direction, - distance = 200, - field; - - startPos.opacity = 0.1; - - if (effect === 'elastic') { - field = direction === 'down' || direction === 'up' ? 'top' : 'left'; - - if (direction === 'down' || direction === 'right') { - startPos[ field ] = getValue(getScalar(startPos[ field ]) - distance); - endPos[ field ] = '+=' + distance + 'px'; - - } else { - startPos[ field ] = getValue(getScalar(startPos[ field ]) + distance); - endPos[ field ] = '-=' + distance + 'px'; - } - } - - // Workaround for http://bugs.jquery.com/ticket/12273 - if (effect === 'none') { - F._afterZoomIn(); - - } else { - F.wrap.css(startPos).animate(endPos, { - duration : current.nextSpeed, - easing : current.nextEasing, - complete : F._afterZoomIn - }); - } - }, - - changeOut: function () { - var previous = F.previous, - effect = previous.prevEffect, - endPos = { opacity : 0.1 }, - direction = F.direction, - distance = 200; - - if (effect === 'elastic') { - endPos[ direction === 'down' || direction === 'up' ? 'top' : 'left' ] = ( direction === 'up' || direction === 'left' ? '-' : '+' ) + '=' + distance + 'px'; - } - - previous.wrap.animate(endPos, { - duration : effect === 'none' ? 0 : previous.prevSpeed, - easing : previous.prevEasing, - complete : function () { - $(this).trigger('onReset').remove(); - } - }); - } - }; - - /* - * Overlay helper - */ - - F.helpers.overlay = { - defaults : { - closeClick : true, // close if clicking on the overlay - speedOut : 200, // animation speed of fading out - showEarly : true, // should be opened immediately or wait until the content is ready - css : {}, // custom overlay style - locked : true // should be content locked into overlay - }, - - overlay : null, - - update : function () { - var width = '100%', offsetWidth; - - // Reset width/height so it will not mess - this.overlay.width(width).height('100%'); - - // jQuery does not return reliable result for IE - if ($.browser.msie) { - offsetWidth = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth); - - if (D.width() > offsetWidth) { - width = D.width(); - } - - } else if (D.width() > W.width()) { - width = D.width(); - } - - this.overlay.width(width).height(D.height()); - }, - - // This is where we can manipulate DOM, because later it would cause iframes to reload - onReady : function (opts, obj) { - $('.fancybox-overlay').stop(true, true); - - if (!this.overlay) { - $.extend(this, { - overlay : $('
    ').appendTo( obj.parent || 'body' ), - margin : D.height() > W.height() || $('body').css('overflow-y') === 'scroll' ? $('body').css('margin-right') : false, - el : document.all && !document.querySelector ? $('html') : $('body') - }); - } - - if (obj.fixed && !isTouch) { - this.overlay.addClass('fancybox-overlay-fixed'); - - if (obj.autoCenter && opts.locked) { - obj.locked = this.overlay.append( obj.wrap ); - } - } - - if (opts.showEarly === true) { - this.beforeShow.apply(this, arguments); - } - }, - - beforeShow : function(opts, obj) { - var overlay = this.overlay.unbind('.fb').width('auto').height('auto').css( opts.css ); - - if (opts.closeClick) { - overlay.bind('click.fb', function(e) { - if ($(e.target).hasClass('fancybox-overlay')) { - F.close(); - } - }); - } - - if (obj.fixed && !isTouch) { - if (obj.locked) { - this.el.addClass('fancybox-lock'); - - if (this.margin !== false) { - $('body').css('margin-right', getScalar( this.margin ) + obj.scrollbarWidth); - } - } - - } else { - this.update(); - } - - overlay.show(); - }, - - onUpdate : function(opts, obj) { - if (!obj.fixed || isTouch) { - this.update(); - } - }, - - afterClose: function (opts) { - var that = this, - speed = opts.speedOut || 0; - - // Remove overlay if exists and fancyBox is not opening - // (e.g., it is not being open using afterClose callback) - if (that.overlay && !F.isActive) { - that.overlay.fadeOut(speed || 0, function () { - $('body').css('margin-right', that.margin); - - that.el.removeClass('fancybox-lock'); - - that.overlay.remove(); - - that.overlay = null; - }); - } - } - }; - - /* - * Title helper - */ - - F.helpers.title = { - defaults : { - type : 'float', // 'float', 'inside', 'outside' or 'over', - position : 'bottom' // 'top' or 'bottom' - }, - - beforeShow: function (opts) { - var current = F.current, - text = current.title, - type = opts.type, - title, - target; - - if ($.isFunction(text)) { - text = text.call(current.element, current); - } - - if (!isString(text) || $.trim(text) === '') { - return; - } - - title = $('
    ' + text + '
    '); - - switch (type) { - case 'inside': - target = F.skin; - break; - - case 'outside': - target = F.wrap; - break; - - case 'over': - target = F.inner; - break; - - default: // 'float' - target = F.skin; - - title.appendTo('body'); - - if ($.browser.msie) { - title.width( title.width() ); - } - - title.wrapInner(''); - - //Increase bottom margin so this title will also fit into viewport - F.current.margin[2] += Math.abs( getScalar(title.css('margin-bottom')) ); - break; - } - - title[ (opts.position === 'top' ? 'prependTo' : 'appendTo') ](target); - } - }; - - // jQuery plugin initialization - $.fn.fancybox = function (options) { - var index, - that = $(this), - selector = this.selector || '', - run = function(e) { - var what = $(this).blur(), idx = index, relType, relVal; - - if (!(e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) && !what.is('.fancybox-wrap')) { - relType = options.groupAttr || 'data-fancybox-group'; - relVal = what.attr(relType); - - if (!relVal) { - relType = 'rel'; - relVal = what.get(0)[ relType ]; - } - - if (relVal && relVal !== '' && relVal !== 'nofollow') { - what = selector.length ? $(selector) : that; - what = what.filter('[' + relType + '="' + relVal + '"]'); - idx = what.index(this); - } - - options.index = idx; - - // Stop an event from bubbling if everything is fine - if (F.open(what, options) !== false) { - e.preventDefault(); - } - } - }; - - options = options || {}; - index = options.index || 0; - - if (!selector || options.live === false) { - that.unbind('click.fb-start').bind('click.fb-start', run); - } else { - D.undelegate(selector, 'click.fb-start').delegate(selector + ":not('.fancybox-item, .fancybox-nav')", 'click.fb-start', run); - } - - return this; - }; - - // Tests that need a body at doc ready - D.ready(function() { - if ( $.scrollbarWidth === undefined ) { - // http://benalman.com/projects/jquery-misc-plugins/#scrollbarwidth - $.scrollbarWidth = function() { - var parent = $('
    ').appendTo('body'), - child = parent.children(), - width = child.innerWidth() - child.height( 99 ).innerWidth(); - - parent.remove(); - - return width; - }; - } - - if ( $.support.fixedPosition === undefined ) { - $.support.fixedPosition = (function() { - var elem = $('
    ').appendTo('body'), - fixed = ( elem[0].offsetTop === 20 || elem[0].offsetTop === 15 ); - - elem.remove(); - - return fixed; - }()); - } - - $.extend(F.defaults, { - scrollbarWidth : $.scrollbarWidth(), - fixed : $.support.fixedPosition, - parent : $('body') - }); - }); - -}(window, document, jQuery)); \ No newline at end of file diff --git a/js/fancybox/jquery.fancybox.pack.js b/js/fancybox/jquery.fancybox.pack.js deleted file mode 100644 index 8e612456..00000000 --- a/js/fancybox/jquery.fancybox.pack.js +++ /dev/null @@ -1,44 +0,0 @@ -/*! fancyBox v2.1.1 fancyapps.com | fancyapps.com/fancybox/#license */ -(function(v,q,f,r){var p=f(v),n=f(q),b=f.fancybox=function(){b.open.apply(this,arguments)},A=null,m=q.createTouch!==r,y=function(a){return a&&a.hasOwnProperty&&a instanceof f},t=function(a){return a&&"string"===f.type(a)},D=function(a){return t(a)&&0
    ',image:'',iframe:'",error:'

    The requested content cannot be loaded.
    Please try again later.

    ',closeBtn:'',next:'',prev:''},openEffect:"fade",openSpeed:250,openEasing:"swing", -openOpacity:!0,openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:!0,title:!0},onCancel:f.noop,beforeLoad:f.noop,afterLoad:f.noop,beforeShow:f.noop,afterShow:f.noop,beforeChange:f.noop,beforeClose:f.noop,afterClose:f.noop},group:{},opts:{},previous:null,coming:null,current:null, -isActive:!1,isOpen:!1,isOpened:!1,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(a,d){if(a&&(f.isPlainObject(d)||(d={}),!1!==b.close(!0)))return f.isArray(a)||(a=y(a)?f(a).get():[a]),f.each(a,function(e,c){var j={},g,h,i,l,k;"object"===f.type(c)&&(c.nodeType&&(c=f(c)),y(c)?(j={href:c.data("fancybox-href")||c.attr("href"),title:c.data("fancybox-title")||c.attr("title"),isDom:!0,element:c},f.metadata&&f.extend(!0, -j,c.metadata())):j=c);g=d.href||j.href||(t(c)?c:null);h=d.title!==r?d.title:j.title||"";l=(i=d.content||j.content)?"html":d.type||j.type;!l&&j.isDom&&(l=c.data("fancybox-type"),l||(l=(l=c.prop("class").match(/fancybox\.(\w+)/))?l[1]:null));t(g)&&(l||(b.isImage(g)?l="image":b.isSWF(g)?l="swf":"#"===g.charAt(0)?l="inline":t(c)&&(l="html",i=c)),"ajax"===l&&(k=g.split(/\s+/,2),g=k.shift(),k=k.shift()));i||("inline"===l?g?i=f(t(g)?g.replace(/.*(?=#[^\s]+$)/,""):g):j.isDom&&(i=c):"html"===l?i=g:!l&&(!g&& -j.isDom)&&(l="inline",i=c));f.extend(j,{href:g,type:l,content:i,title:h,selector:k});a[e]=j}),b.opts=f.extend(!0,{},b.defaults,d),d.keys!==r&&(b.opts.keys=d.keys?f.extend({},b.defaults.keys,d.keys):!1),b.group=a,b._start(b.opts.index)},cancel:function(){var a=b.coming;a&&!1!==b.trigger("onCancel")&&(b.hideLoading(),b.ajaxLoad&&b.ajaxLoad.abort(),b.ajaxLoad=null,b.imgPreload&&(b.imgPreload.onload=b.imgPreload.onerror=null),a.wrap&&a.wrap.stop(!0).trigger("onReset").remove(),b.current||b.trigger("afterClose"), -b.coming=null)},close:function(a){b.cancel();!1!==b.trigger("beforeClose")&&(b.unbindEvents(),!b.isOpen||!0===a?(f(".fancybox-wrap").stop(!0).trigger("onReset").remove(),b._afterZoomOut()):(b.isOpen=b.isOpened=!1,b.isClosing=!0,f(".fancybox-item, .fancybox-nav").remove(),b.wrap.stop(!0,!0).removeClass("fancybox-opened"),"fixed"===b.wrap.css("position")&&b.wrap.css(b._getPosition(!0)),b.transitions[b.current.closeMethod]()))},play:function(a){var d=function(){clearTimeout(b.player.timer)},e=function(){d(); -b.current&&b.player.isActive&&(b.player.timer=setTimeout(b.next,b.current.playSpeed))},c=function(){d();f("body").unbind(".player");b.player.isActive=!1;b.trigger("onPlayEnd")};if(!0===a||!b.player.isActive&&!1!==a){if(b.current&&(b.current.loop||b.current.index=c.index?"next":"prev"],b.router=e||"jumpto",c.loop&&(0>a&&(a=c.group.length+a%c.group.length),a%=c.group.length),c.group[a]!==r&&(b.cancel(),b._start(a)))},reposition:function(a,d){var e;b.isOpen&&(e=b._getPosition(d),a&&"scroll"===a.type?(delete e.position,b.wrap.stop(!0,!0).animate(e, -200)):b.wrap.css(e))},update:function(a){var d=a&&a.type,e=!d||"orientationchange"===d;e&&(clearTimeout(A),A=null);if(b.isOpen&&!A){if(e||m)b.wrap.removeAttr("style").addClass("fancybox-tmp"),b.trigger("onUpdate");A=setTimeout(function(){var c=b.current;c&&(b.wrap.removeClass("fancybox-tmp"),"scroll"!==d&&b._setDimension(),"scroll"===d&&c.canShrink||b.reposition(a),b.trigger("onUpdate"),A=null)},m?500:e?20:300)}},toggle:function(a){b.isOpen&&(b.current.fitToView="boolean"===f.type(a)?a:!b.current.fitToView, -b.update())},hideLoading:function(){n.unbind("keypress.fb");f("#fancybox-loading").remove()},showLoading:function(){var a,d;b.hideLoading();n.bind("keypress.fb",function(a){if(27===(a.which||a.keyCode))a.preventDefault(),b.cancel()});a=f('
    ').click(b.cancel).appendTo("body");b.defaults.fixed||(d=b.getViewport(),a.css({position:"absolute",top:0.5*d.h+d.y,left:0.5*d.w+d.x}))},getViewport:function(){var a=b.current&&b.current.locked||!1,d={x:p.scrollLeft(), -y:p.scrollTop()};a?(d.w=a[0].clientWidth,d.h=a[0].clientHeight):(d.w=m&&v.innerWidth?v.innerWidth:p.width(),d.h=m&&v.innerHeight?v.innerHeight:p.height());return d},unbindEvents:function(){b.wrap&&y(b.wrap)&&b.wrap.unbind(".fb");n.unbind(".fb");p.unbind(".fb")},bindEvents:function(){var a=b.current,d;a&&(p.bind("orientationchange.fb"+(a.autoResize?" resize.fb":"")+(a.autoCenter&&!a.locked?" scroll.fb":""),b.update),(d=a.keys)&&n.bind("keydown.fb",function(e){var c=e.which||e.keyCode,j=e.target||e.srcElement; -!e.ctrlKey&&(!e.altKey&&!e.shiftKey&&!e.metaKey&&(!j||!j.type&&!f(j).is("[contenteditable]")))&&f.each(d,function(d,j){if(1h[0].clientWidth||h[0].clientHeight&&h[0].scrollHeight>h[0].clientHeight),h=f(h).parent();if(0!==c&&!i&&1g||0>j)b.next(0>g?"up":"right");d.preventDefault()}}))},trigger:function(a,d){var e,c=d||b.coming||b.current;if(c){f.isFunction(c[a])&&(e=c[a].apply(c,Array.prototype.slice.call(arguments,1)));if(!1===e)return!1;"onCancel"===a&&!b.isOpened&&(b.isActive=!1);c.helpers&&f.each(c.helpers,function(d,e){e&& -(b.helpers[d]&&f.isFunction(b.helpers[d][a]))&&(e=f.extend(!0,{},b.helpers[d].defaults,e),b.helpers[d][a](e,c))});f.event.trigger(a+".fb")}},isImage:function(a){return t(a)&&a.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp)((\?|#).*)?$)/i)},isSWF:function(a){return t(a)&&a.match(/\.(swf)((\?|#).*)?$/i)},_start:function(a){var d={},e,c,a=k(a);e=b.group[a]||null;if(!e)return!1;d=f.extend(!0,{},b.opts,e);e=d.margin;c=d.padding;"number"===f.type(e)&&(d.margin=[e,e,e,e]);"number"===f.type(c)&& -(d.padding=[c,c,c,c]);d.modal&&f.extend(!0,d,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1,mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}});d.autoSize&&(d.autoWidth=d.autoHeight=!0);"auto"===d.width&&(d.autoWidth=!0);"auto"===d.height&&(d.autoHeight=!0);d.group=b.group;d.index=a;b.coming=d;if(!1===b.trigger("beforeLoad"))b.coming=null;else{c=d.type;e=d.href;if(!c)return b.coming=null,b.current&&b.router&&"jumpto"!==b.router?(b.current.index=a,b[b.router](b.direction)):!1;b.isActive= -!0;if("image"===c||"swf"===c)d.autoHeight=d.autoWidth=!1,d.scrolling="visible";"image"===c&&(d.aspectRatio=!0);"iframe"===c&&m&&(d.scrolling="scroll");d.wrap=f(d.tpl.wrap).addClass("fancybox-"+(m?"mobile":"desktop")+" fancybox-type-"+c+" fancybox-tmp "+d.wrapCSS).appendTo(d.parent||"body");f.extend(d,{skin:f(".fancybox-skin",d.wrap),outer:f(".fancybox-outer",d.wrap),inner:f(".fancybox-inner",d.wrap)});f.each(["Top","Right","Bottom","Left"],function(a,b){d.skin.css("padding"+b,w(d.padding[a]))});b.trigger("onReady"); -if("inline"===c||"html"===c){if(!d.content||!d.content.length)return b._error("content")}else if(!e)return b._error("href");"image"===c?b._loadImage():"ajax"===c?b._loadAjax():"iframe"===c?b._loadIframe():b._afterLoad()}},_error:function(a){f.extend(b.coming,{type:"html",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:"no",hasError:a,content:b.coming.tpl.error});b._afterLoad()},_loadImage:function(){var a=b.imgPreload=new Image;a.onload=function(){this.onload=this.onerror=null;b.coming.width= -this.width;b.coming.height=this.height;b._afterLoad()};a.onerror=function(){this.onload=this.onerror=null;b._error("image")};a.src=b.coming.href;(a.complete===r||!a.complete)&&b.showLoading()},_loadAjax:function(){var a=b.coming;b.showLoading();b.ajaxLoad=f.ajax(f.extend({},a.ajax,{url:a.href,error:function(a,e){b.coming&&"abort"!==e?b._error("ajax",a):b.hideLoading()},success:function(d,e){"success"===e&&(a.content=d,b._afterLoad())}}))},_loadIframe:function(){var a=b.coming,d=f(a.tpl.iframe.replace(/\{rnd\}/g, -(new Date).getTime())).attr("scrolling",m?"auto":a.iframe.scrolling).attr("src",a.href);f(a.wrap).bind("onReset",function(){try{f(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(a){}});a.iframe.preload&&(b.showLoading(),d.one("load",function(){f(this).data("ready",1);m||f(this).bind("load.fb",b.update);f(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show();b._afterLoad()}));a.content=d.appendTo(a.inner);a.iframe.preload||b._afterLoad()},_preloadImages:function(){var a= -b.group,d=b.current,e=a.length,c=d.preload?Math.min(d.preload,e-1):0,f,g;for(g=1;g<=c;g+=1)f=a[(d.index+g)%e],"image"===f.type&&f.href&&((new Image).src=f.href)},_afterLoad:function(){var a=b.coming,d=b.current,e,c,j,g,h;b.hideLoading();if(a&&!1!==b.isActive)if(!1===b.trigger("afterLoad",a,d))a.wrap.stop(!0).trigger("onReset").remove(),b.coming=null;else{d&&(b.trigger("beforeChange",d),d.wrap.stop(!0).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove(),"fixed"===d.wrap.css("position")&& -d.wrap.css(b._getPosition(!0)));b.unbindEvents();e=a.content;c=a.type;j=a.scrolling;f.extend(b,{wrap:a.wrap,skin:a.skin,outer:a.outer,inner:a.inner,current:a,previous:d});g=a.href;switch(c){case "inline":case "ajax":case "html":a.selector?e=f("
    ").html(e).find(a.selector):y(e)&&(e.data("fancybox-placeholder")||e.data("fancybox-placeholder",f('
    ').insertAfter(e).hide()),e=e.show().detach(),a.wrap.bind("onReset",function(){f(this).find(e).length&&e.hide().replaceAll(e.data("fancybox-placeholder")).data("fancybox-placeholder", -!1)}));break;case "image":e=a.tpl.image.replace("{href}",g);break;case "swf":e='',h="",f.each(a.swf,function(a,b){e+='';h+=" "+a+'="'+b+'"'}),e+='"}(!y(e)||!e.parent().is(a.inner))&&a.inner.append(e);b.trigger("beforeShow"); -a.inner.css("overflow","yes"===j?"scroll":"no"===j?"hidden":j);b._setDimension();a.wrap.removeClass("fancybox-tmp");a.pos=f.extend({},a.dim,b._getPosition(!0));b.isOpen=!1;b.coming=null;b.bindEvents();if(b.isOpened){if(d.prevMethod)b.transitions[d.prevMethod]()}else f(".fancybox-wrap").not(a.wrap).stop(!0).trigger("onReset").remove();b.transitions[b.isOpened?a.nextMethod:a.openMethod]();b._preloadImages()}},_setDimension:function(){var a=b.getViewport(),d=0,e=!1,c=!1,e=b.wrap,j=b.skin,g=b.inner,h= -b.current,c=h.width,i=h.height,l=h.minWidth,u=h.minHeight,m=h.maxWidth,n=h.maxHeight,t=h.scrolling,r=h.scrollOutside?h.scrollbarWidth:0,x=h.margin,p=x[1]+x[3],q=x[0]+x[2],y,s,v,B,z,E,A,C,F;e.add(j).add(g).width("auto").height("auto");x=j.outerWidth(!0)-j.width();y=j.outerHeight(!0)-j.height();s=p+x;v=q+y;B=D(c)?(a.w-s)*k(c)/100:c;z=D(i)?(a.h-v)*k(i)/100:i;if("iframe"===h.type){if(F=h.content,h.autoHeight&&1===F.data("ready"))try{F[0].contentWindow.document.location&&(g.width(B).height(9999),E=F.contents().find("body"), -r&&E.css("overflow-x","hidden"),z=E.height())}catch(G){}}else if(h.autoWidth||h.autoHeight)g.addClass("fancybox-tmp"),h.autoWidth||g.width(B),h.autoHeight||g.height(z),h.autoWidth&&(B=g.width()),h.autoHeight&&(z=g.height()),g.removeClass("fancybox-tmp");c=k(B);i=k(z);C=B/z;l=k(D(l)?k(l,"w")-s:l);m=k(D(m)?k(m,"w")-s:m);u=k(D(u)?k(u,"h")-v:u);n=k(D(n)?k(n,"h")-v:n);E=m;A=n;p=a.w-p;q=a.h-q;h.aspectRatio?(c>m&&(c=m,i=c/C),i>n&&(i=n,c=i*C),cp||s>q)&&(c>l&&i>u)&&!(19m&&(c=m,i=c/C),g.width(k(c)).height(k(i)),e.width(k(c+x)),a=e.width(),s=e.height();else c=Math.max(l,Math.min(c,c-(a-p))),i=Math.max(u,Math.min(i,i-(s-q)));r&&("auto"===t&&ip||s>q)&&c>l&&i>u;c=h.aspectRatio?cu&&ib&&(a=n.width())):n.width()>p.width()&& -(a=n.width());this.overlay.width(a).height(n.height())},onReady:function(a,b){f(".fancybox-overlay").stop(!0,!0);this.overlay||f.extend(this,{overlay:f('
    ').appendTo(b.parent||"body"),margin:n.height()>p.height()||"scroll"===f("body").css("overflow-y")?f("body").css("margin-right"):!1,el:q.all&&!q.querySelector?f("html"):f("body")});b.fixed&&!m&&(this.overlay.addClass("fancybox-overlay-fixed"),b.autoCenter&&a.locked&&(b.locked=this.overlay.append(b.wrap)));!0=== -a.showEarly&&this.beforeShow.apply(this,arguments)},beforeShow:function(a,d){var e=this.overlay.unbind(".fb").width("auto").height("auto").css(a.css);a.closeClick&&e.bind("click.fb",function(a){f(a.target).hasClass("fancybox-overlay")&&b.close()});d.fixed&&!m?d.locked&&(this.el.addClass("fancybox-lock"),!1!==this.margin&&f("body").css("margin-right",k(this.margin)+d.scrollbarWidth)):this.update();e.show()},onUpdate:function(a,b){(!b.fixed||m)&&this.update()},afterClose:function(a){var d=this,a=a.speedOut|| -0;d.overlay&&!b.isActive&&d.overlay.fadeOut(a||0,function(){f("body").css("margin-right",d.margin);d.el.removeClass("fancybox-lock");d.overlay.remove();d.overlay=null})}};b.helpers.title={defaults:{type:"float",position:"bottom"},beforeShow:function(a){var d=b.current,e=d.title,c=a.type;f.isFunction(e)&&(e=e.call(d.element,d));if(t(e)&&""!==f.trim(e)){d=f('
    '+e+"
    ");switch(c){case "inside":c=b.skin;break;case "outside":c=b.wrap;break;case "over":c= -b.inner;break;default:c=b.skin,d.appendTo("body"),f.browser.msie&&d.width(d.width()),d.wrapInner(''),b.current.margin[2]+=Math.abs(k(d.css("margin-bottom")))}d["top"===a.position?"prependTo":"appendTo"](c)}}};f.fn.fancybox=function(a){var d,e=f(this),c=this.selector||"",j=function(g){var h=f(this).blur(),i=d,j,k;!g.ctrlKey&&(!g.altKey&&!g.shiftKey&&!g.metaKey)&&!h.is(".fancybox-wrap")&&(j=a.groupAttr||"data-fancybox-group",k=h.attr(j),k||(j="rel",k=h.get(0)[j]),k&&(""!== -k&&"nofollow"!==k)&&(h=c.length?f(c):e,h=h.filter("["+j+'="'+k+'"]'),i=h.index(this)),a.index=i,!1!==b.open(h,a)&&g.preventDefault())},a=a||{};d=a.index||0;!c||!1===a.live?e.unbind("click.fb-start").bind("click.fb-start",j):n.undelegate(c,"click.fb-start").delegate(c+":not('.fancybox-item, .fancybox-nav')","click.fb-start",j);return this};n.ready(function(){f.scrollbarWidth===r&&(f.scrollbarWidth=function(){var a=f('
    ').appendTo("body"), -b=a.children(),b=b.innerWidth()-b.height(99).innerWidth();a.remove();return b});if(f.support.fixedPosition===r){var a=f.support,d=f('
    ').appendTo("body"),e=20===d[0].offsetTop||15===d[0].offsetTop;d.remove();a.fixedPosition=e}f.extend(b.defaults,{scrollbarWidth:f.scrollbarWidth(),fixed:f.support.fixedPosition,parent:f("body")})})})(window,document,jQuery); \ No newline at end of file diff --git a/js/jquery.fancybox.pack.js b/js/jquery.fancybox.pack.js new file mode 100755 index 00000000..73f75784 --- /dev/null +++ b/js/jquery.fancybox.pack.js @@ -0,0 +1,46 @@ +/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */ +(function(r,G,f,v){var J=f("html"),n=f(r),p=f(G),b=f.fancybox=function(){b.open.apply(this,arguments)},I=navigator.userAgent.match(/msie/i),B=null,s=G.createTouch!==v,t=function(a){return a&&a.hasOwnProperty&&a instanceof f},q=function(a){return a&&"string"===f.type(a)},E=function(a){return q(a)&&0
    ',image:'',iframe:'",error:'

    The requested content cannot be loaded.
    Please try again later.

    ',closeBtn:'',next:'',prev:''},openEffect:"fade",openSpeed:250,openEasing:"swing",openOpacity:!0, +openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:!0,title:!0},onCancel:f.noop,beforeLoad:f.noop,afterLoad:f.noop,beforeShow:f.noop,afterShow:f.noop,beforeChange:f.noop,beforeClose:f.noop,afterClose:f.noop},group:{},opts:{},previous:null,coming:null,current:null,isActive:!1, +isOpen:!1,isOpened:!1,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(a,d){if(a&&(f.isPlainObject(d)||(d={}),!1!==b.close(!0)))return f.isArray(a)||(a=t(a)?f(a).get():[a]),f.each(a,function(e,c){var k={},g,h,j,m,l;"object"===f.type(c)&&(c.nodeType&&(c=f(c)),t(c)?(k={href:c.data("fancybox-href")||c.attr("href"),title:c.data("fancybox-title")||c.attr("title"),isDom:!0,element:c},f.metadata&&f.extend(!0,k, +c.metadata())):k=c);g=d.href||k.href||(q(c)?c:null);h=d.title!==v?d.title:k.title||"";m=(j=d.content||k.content)?"html":d.type||k.type;!m&&k.isDom&&(m=c.data("fancybox-type"),m||(m=(m=c.prop("class").match(/fancybox\.(\w+)/))?m[1]:null));q(g)&&(m||(b.isImage(g)?m="image":b.isSWF(g)?m="swf":"#"===g.charAt(0)?m="inline":q(c)&&(m="html",j=c)),"ajax"===m&&(l=g.split(/\s+/,2),g=l.shift(),l=l.shift()));j||("inline"===m?g?j=f(q(g)?g.replace(/.*(?=#[^\s]+$)/,""):g):k.isDom&&(j=c):"html"===m?j=g:!m&&(!g&& +k.isDom)&&(m="inline",j=c));f.extend(k,{href:g,type:m,content:j,title:h,selector:l});a[e]=k}),b.opts=f.extend(!0,{},b.defaults,d),d.keys!==v&&(b.opts.keys=d.keys?f.extend({},b.defaults.keys,d.keys):!1),b.group=a,b._start(b.opts.index)},cancel:function(){var a=b.coming;a&&!1!==b.trigger("onCancel")&&(b.hideLoading(),b.ajaxLoad&&b.ajaxLoad.abort(),b.ajaxLoad=null,b.imgPreload&&(b.imgPreload.onload=b.imgPreload.onerror=null),a.wrap&&a.wrap.stop(!0,!0).trigger("onReset").remove(),b.coming=null,b.current|| +b._afterZoomOut(a))},close:function(a){b.cancel();!1!==b.trigger("beforeClose")&&(b.unbindEvents(),b.isActive&&(!b.isOpen||!0===a?(f(".fancybox-wrap").stop(!0).trigger("onReset").remove(),b._afterZoomOut()):(b.isOpen=b.isOpened=!1,b.isClosing=!0,f(".fancybox-item, .fancybox-nav").remove(),b.wrap.stop(!0,!0).removeClass("fancybox-opened"),b.transitions[b.current.closeMethod]())))},play:function(a){var d=function(){clearTimeout(b.player.timer)},e=function(){d();b.current&&b.player.isActive&&(b.player.timer= +setTimeout(b.next,b.current.playSpeed))},c=function(){d();p.unbind(".player");b.player.isActive=!1;b.trigger("onPlayEnd")};if(!0===a||!b.player.isActive&&!1!==a){if(b.current&&(b.current.loop||b.current.index=c.index?"next":"prev"],b.router=e||"jumpto",c.loop&&(0>a&&(a=c.group.length+a%c.group.length),a%=c.group.length),c.group[a]!==v&&(b.cancel(),b._start(a)))},reposition:function(a,d){var e=b.current,c=e?e.wrap:null,k;c&&(k=b._getPosition(d),a&&"scroll"===a.type?(delete k.position,c.stop(!0,!0).animate(k,200)):(c.css(k),e.pos=f.extend({},e.dim,k)))},update:function(a){var d= +a&&a.type,e=!d||"orientationchange"===d;e&&(clearTimeout(B),B=null);b.isOpen&&!B&&(B=setTimeout(function(){var c=b.current;c&&!b.isClosing&&(b.wrap.removeClass("fancybox-tmp"),(e||"load"===d||"resize"===d&&c.autoResize)&&b._setDimension(),"scroll"===d&&c.canShrink||b.reposition(a),b.trigger("onUpdate"),B=null)},e&&!s?0:300))},toggle:function(a){b.isOpen&&(b.current.fitToView="boolean"===f.type(a)?a:!b.current.fitToView,s&&(b.wrap.removeAttr("style").addClass("fancybox-tmp"),b.trigger("onUpdate")), +b.update())},hideLoading:function(){p.unbind(".loading");f("#fancybox-loading").remove()},showLoading:function(){var a,d;b.hideLoading();a=f('
    ').click(b.cancel).appendTo("body");p.bind("keydown.loading",function(a){if(27===(a.which||a.keyCode))a.preventDefault(),b.cancel()});b.defaults.fixed||(d=b.getViewport(),a.css({position:"absolute",top:0.5*d.h+d.y,left:0.5*d.w+d.x}))},getViewport:function(){var a=b.current&&b.current.locked||!1,d={x:n.scrollLeft(), +y:n.scrollTop()};a?(d.w=a[0].clientWidth,d.h=a[0].clientHeight):(d.w=s&&r.innerWidth?r.innerWidth:n.width(),d.h=s&&r.innerHeight?r.innerHeight:n.height());return d},unbindEvents:function(){b.wrap&&t(b.wrap)&&b.wrap.unbind(".fb");p.unbind(".fb");n.unbind(".fb")},bindEvents:function(){var a=b.current,d;a&&(n.bind("orientationchange.fb"+(s?"":" resize.fb")+(a.autoCenter&&!a.locked?" scroll.fb":""),b.update),(d=a.keys)&&p.bind("keydown.fb",function(e){var c=e.which||e.keyCode,k=e.target||e.srcElement; +if(27===c&&b.coming)return!1;!e.ctrlKey&&(!e.altKey&&!e.shiftKey&&!e.metaKey&&(!k||!k.type&&!f(k).is("[contenteditable]")))&&f.each(d,function(d,k){if(1h[0].clientWidth||h[0].clientHeight&&h[0].scrollHeight>h[0].clientHeight),h=f(h).parent();if(0!==c&&!j&&1g||0>k)b.next(0>g?"up":"right");d.preventDefault()}}))},trigger:function(a,d){var e,c=d||b.coming||b.current;if(c){f.isFunction(c[a])&&(e=c[a].apply(c,Array.prototype.slice.call(arguments,1)));if(!1===e)return!1;c.helpers&&f.each(c.helpers,function(d,e){if(e&&b.helpers[d]&&f.isFunction(b.helpers[d][a]))b.helpers[d][a](f.extend(!0, +{},b.helpers[d].defaults,e),c)});p.trigger(a)}},isImage:function(a){return q(a)&&a.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)},isSWF:function(a){return q(a)&&a.match(/\.(swf)((\?|#).*)?$/i)},_start:function(a){var d={},e,c;a=l(a);e=b.group[a]||null;if(!e)return!1;d=f.extend(!0,{},b.opts,e);e=d.margin;c=d.padding;"number"===f.type(e)&&(d.margin=[e,e,e,e]);"number"===f.type(c)&&(d.padding=[c,c,c,c]);d.modal&&f.extend(!0,d,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1, +mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}});d.autoSize&&(d.autoWidth=d.autoHeight=!0);"auto"===d.width&&(d.autoWidth=!0);"auto"===d.height&&(d.autoHeight=!0);d.group=b.group;d.index=a;b.coming=d;if(!1===b.trigger("beforeLoad"))b.coming=null;else{c=d.type;e=d.href;if(!c)return b.coming=null,b.current&&b.router&&"jumpto"!==b.router?(b.current.index=a,b[b.router](b.direction)):!1;b.isActive=!0;if("image"===c||"swf"===c)d.autoHeight=d.autoWidth=!1,d.scrolling="visible";"image"===c&&(d.aspectRatio= +!0);"iframe"===c&&s&&(d.scrolling="scroll");d.wrap=f(d.tpl.wrap).addClass("fancybox-"+(s?"mobile":"desktop")+" fancybox-type-"+c+" fancybox-tmp "+d.wrapCSS).appendTo(d.parent||"body");f.extend(d,{skin:f(".fancybox-skin",d.wrap),outer:f(".fancybox-outer",d.wrap),inner:f(".fancybox-inner",d.wrap)});f.each(["Top","Right","Bottom","Left"],function(a,b){d.skin.css("padding"+b,w(d.padding[a]))});b.trigger("onReady");if("inline"===c||"html"===c){if(!d.content||!d.content.length)return b._error("content")}else if(!e)return b._error("href"); +"image"===c?b._loadImage():"ajax"===c?b._loadAjax():"iframe"===c?b._loadIframe():b._afterLoad()}},_error:function(a){f.extend(b.coming,{type:"html",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:"no",hasError:a,content:b.coming.tpl.error});b._afterLoad()},_loadImage:function(){var a=b.imgPreload=new Image;a.onload=function(){this.onload=this.onerror=null;b.coming.width=this.width/b.opts.pixelRatio;b.coming.height=this.height/b.opts.pixelRatio;b._afterLoad()};a.onerror=function(){this.onload= +this.onerror=null;b._error("image")};a.src=b.coming.href;!0!==a.complete&&b.showLoading()},_loadAjax:function(){var a=b.coming;b.showLoading();b.ajaxLoad=f.ajax(f.extend({},a.ajax,{url:a.href,error:function(a,e){b.coming&&"abort"!==e?b._error("ajax",a):b.hideLoading()},success:function(d,e){"success"===e&&(a.content=d,b._afterLoad())}}))},_loadIframe:function(){var a=b.coming,d=f(a.tpl.iframe.replace(/\{rnd\}/g,(new Date).getTime())).attr("scrolling",s?"auto":a.iframe.scrolling).attr("src",a.href); +f(a.wrap).bind("onReset",function(){try{f(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(a){}});a.iframe.preload&&(b.showLoading(),d.one("load",function(){f(this).data("ready",1);s||f(this).bind("load.fb",b.update);f(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show();b._afterLoad()}));a.content=d.appendTo(a.inner);a.iframe.preload||b._afterLoad()},_preloadImages:function(){var a=b.group,d=b.current,e=a.length,c=d.preload?Math.min(d.preload, +e-1):0,f,g;for(g=1;g<=c;g+=1)f=a[(d.index+g)%e],"image"===f.type&&f.href&&((new Image).src=f.href)},_afterLoad:function(){var a=b.coming,d=b.current,e,c,k,g,h;b.hideLoading();if(a&&!1!==b.isActive)if(!1===b.trigger("afterLoad",a,d))a.wrap.stop(!0).trigger("onReset").remove(),b.coming=null;else{d&&(b.trigger("beforeChange",d),d.wrap.stop(!0).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove());b.unbindEvents();e=a.content;c=a.type;k=a.scrolling;f.extend(b,{wrap:a.wrap,skin:a.skin, +outer:a.outer,inner:a.inner,current:a,previous:d});g=a.href;switch(c){case "inline":case "ajax":case "html":a.selector?e=f("
    ").html(e).find(a.selector):t(e)&&(e.data("fancybox-placeholder")||e.data("fancybox-placeholder",f('
    ').insertAfter(e).hide()),e=e.show().detach(),a.wrap.bind("onReset",function(){f(this).find(e).length&&e.hide().replaceAll(e.data("fancybox-placeholder")).data("fancybox-placeholder",!1)}));break;case "image":e=a.tpl.image.replace("{href}", +g);break;case "swf":e='',h="",f.each(a.swf,function(a,b){e+='';h+=" "+a+'="'+b+'"'}),e+='"}(!t(e)||!e.parent().is(a.inner))&&a.inner.append(e);b.trigger("beforeShow");a.inner.css("overflow","yes"===k?"scroll": +"no"===k?"hidden":k);b._setDimension();b.reposition();b.isOpen=!1;b.coming=null;b.bindEvents();if(b.isOpened){if(d.prevMethod)b.transitions[d.prevMethod]()}else f(".fancybox-wrap").not(a.wrap).stop(!0).trigger("onReset").remove();b.transitions[b.isOpened?a.nextMethod:a.openMethod]();b._preloadImages()}},_setDimension:function(){var a=b.getViewport(),d=0,e=!1,c=!1,e=b.wrap,k=b.skin,g=b.inner,h=b.current,c=h.width,j=h.height,m=h.minWidth,u=h.minHeight,n=h.maxWidth,p=h.maxHeight,s=h.scrolling,q=h.scrollOutside? +h.scrollbarWidth:0,x=h.margin,y=l(x[1]+x[3]),r=l(x[0]+x[2]),v,z,t,C,A,F,B,D,H;e.add(k).add(g).width("auto").height("auto").removeClass("fancybox-tmp");x=l(k.outerWidth(!0)-k.width());v=l(k.outerHeight(!0)-k.height());z=y+x;t=r+v;C=E(c)?(a.w-z)*l(c)/100:c;A=E(j)?(a.h-t)*l(j)/100:j;if("iframe"===h.type){if(H=h.content,h.autoHeight&&1===H.data("ready"))try{H[0].contentWindow.document.location&&(g.width(C).height(9999),F=H.contents().find("body"),q&&F.css("overflow-x","hidden"),A=F.outerHeight(!0))}catch(G){}}else if(h.autoWidth|| +h.autoHeight)g.addClass("fancybox-tmp"),h.autoWidth||g.width(C),h.autoHeight||g.height(A),h.autoWidth&&(C=g.width()),h.autoHeight&&(A=g.height()),g.removeClass("fancybox-tmp");c=l(C);j=l(A);D=C/A;m=l(E(m)?l(m,"w")-z:m);n=l(E(n)?l(n,"w")-z:n);u=l(E(u)?l(u,"h")-t:u);p=l(E(p)?l(p,"h")-t:p);F=n;B=p;h.fitToView&&(n=Math.min(a.w-z,n),p=Math.min(a.h-t,p));z=a.w-y;r=a.h-r;h.aspectRatio?(c>n&&(c=n,j=l(c/D)),j>p&&(j=p,c=l(j*D)),cz||y>r)&&(c>m&&j>u)&&!(19n&&(c=n,j=l(c/D)),g.width(c).height(j),e.width(c+x),a=e.width(),y=e.height();else c=Math.max(m,Math.min(c,c-(a-z))),j=Math.max(u,Math.min(j,j-(y-r)));q&&("auto"===s&&jz||y>r)&&c>m&&j>u;c=h.aspectRatio?cu&&j
    ').appendTo(b.coming?b.coming.parent:a.parent);this.fixed=!1;a.fixed&&b.defaults.fixed&&(this.overlay.addClass("fancybox-overlay-fixed"),this.fixed=!0)},open:function(a){var d=this;a=f.extend({},this.defaults,a);this.overlay?this.overlay.unbind(".overlay").width("auto").height("auto"):this.create(a);this.fixed||(n.bind("resize.overlay",f.proxy(this.update,this)),this.update());a.closeClick&&this.overlay.bind("click.overlay",function(a){if(f(a.target).hasClass("fancybox-overlay"))return b.isActive? +b.close():d.close(),!1});this.overlay.css(a.css).show()},close:function(){var a,b;n.unbind("resize.overlay");this.el.hasClass("fancybox-lock")&&(f(".fancybox-margin").removeClass("fancybox-margin"),a=n.scrollTop(),b=n.scrollLeft(),this.el.removeClass("fancybox-lock"),n.scrollTop(a).scrollLeft(b));f(".fancybox-overlay").remove().hide();f.extend(this,{overlay:null,fixed:!1})},update:function(){var a="100%",b;this.overlay.width(a).height("100%");I?(b=Math.max(G.documentElement.offsetWidth,G.body.offsetWidth), +p.width()>b&&(a=p.width())):p.width()>n.width()&&(a=p.width());this.overlay.width(a).height(p.height())},onReady:function(a,b){var e=this.overlay;f(".fancybox-overlay").stop(!0,!0);e||this.create(a);a.locked&&(this.fixed&&b.fixed)&&(e||(this.margin=p.height()>n.height()?f("html").css("margin-right").replace("px",""):!1),b.locked=this.overlay.append(b.wrap),b.fixed=!1);!0===a.showEarly&&this.beforeShow.apply(this,arguments)},beforeShow:function(a,b){var e,c;b.locked&&(!1!==this.margin&&(f("*").filter(function(){return"fixed"=== +f(this).css("position")&&!f(this).hasClass("fancybox-overlay")&&!f(this).hasClass("fancybox-wrap")}).addClass("fancybox-margin"),this.el.addClass("fancybox-margin")),e=n.scrollTop(),c=n.scrollLeft(),this.el.addClass("fancybox-lock"),n.scrollTop(e).scrollLeft(c));this.open(a)},onUpdate:function(){this.fixed||this.update()},afterClose:function(a){this.overlay&&!b.coming&&this.overlay.fadeOut(a.speedOut,f.proxy(this.close,this))}};b.helpers.title={defaults:{type:"float",position:"bottom"},beforeShow:function(a){var d= +b.current,e=d.title,c=a.type;f.isFunction(e)&&(e=e.call(d.element,d));if(q(e)&&""!==f.trim(e)){d=f('
    '+e+"
    ");switch(c){case "inside":c=b.skin;break;case "outside":c=b.wrap;break;case "over":c=b.inner;break;default:c=b.skin,d.appendTo("body"),I&&d.width(d.width()),d.wrapInner(''),b.current.margin[2]+=Math.abs(l(d.css("margin-bottom")))}d["top"===a.position?"prependTo":"appendTo"](c)}}};f.fn.fancybox=function(a){var d, +e=f(this),c=this.selector||"",k=function(g){var h=f(this).blur(),j=d,k,l;!g.ctrlKey&&(!g.altKey&&!g.shiftKey&&!g.metaKey)&&!h.is(".fancybox-wrap")&&(k=a.groupAttr||"data-fancybox-group",l=h.attr(k),l||(k="rel",l=h.get(0)[k]),l&&(""!==l&&"nofollow"!==l)&&(h=c.length?f(c):e,h=h.filter("["+k+'="'+l+'"]'),j=h.index(this)),a.index=j,!1!==b.open(h,a)&&g.preventDefault())};a=a||{};d=a.index||0;!c||!1===a.live?e.unbind("click.fb-start").bind("click.fb-start",k):p.undelegate(c,"click.fb-start").delegate(c+ +":not('.fancybox-item, .fancybox-nav')","click.fb-start",k);this.filter("[data-fancybox-start=1]").trigger("click");return this};p.ready(function(){var a,d;f.scrollbarWidth===v&&(f.scrollbarWidth=function(){var a=f('
    ').appendTo("body"),b=a.children(),b=b.innerWidth()-b.height(99).innerWidth();a.remove();return b});if(f.support.fixedPosition===v){a=f.support;d=f('
    ').appendTo("body");var e=20=== +d[0].offsetTop||15===d[0].offsetTop;d.remove();a.fixedPosition=e}f.extend(b.defaults,{scrollbarWidth:f.scrollbarWidth(),fixed:f.support.fixedPosition,parent:f("body")});a=f(r).width();J.addClass("fancybox-lock-test");d=f(r).width();J.removeClass("fancybox-lock-test");f("").appendTo("head")})})(window,document,jQuery); \ No newline at end of file diff --git a/js/js.php b/js/js.php index c96faed1..d8e2768e 100644 --- a/js/js.php +++ b/js/js.php @@ -34,7 +34,7 @@ $jsFilesBase = array( array('href' => 'js/jquery-migrate-1.2.1.min.js', 'min' => false), array('href' => 'js/jquery.placeholder.js', 'min' => true), array('href' => 'js/jquery-ui.min.js', 'min' => false), - array('href' => 'js/fancybox/jquery.fancybox.pack.js', 'min' => false), + array('href' => 'js/jquery.fancybox.pack.js', 'min' => false), array('href' => 'js/jquery.powertip.min.js', 'min' => false), array('href' => 'js/chosen.jquery.min.js', 'min' => false), array('href' => 'js/alertify.js', 'min' => true), From 9089d4f0b155a569384bb8cbf3b1131672c742c8 Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Wed, 22 Jul 2015 04:22:06 +0200 Subject: [PATCH 40/84] * [MOD] New Material Design using Google MDL (work in progress). --- css/css.php | 1 - inc/Init.class.php | 2 +- inc/themes/material-blue/js/jquery.color-2.1.2.min.js | 2 -- inc/themes/material-blue/js/js.php | 3 ++- js/js.php | 4 ++-- 5 files changed, 5 insertions(+), 7 deletions(-) delete mode 100644 inc/themes/material-blue/js/jquery.color-2.1.2.min.js diff --git a/css/css.php b/css/css.php index 5de082b7..a74ffadb 100644 --- a/css/css.php +++ b/css/css.php @@ -33,7 +33,6 @@ $cssFilesBase = array( array('href' => 'css/reset.css', 'min' => true), array('href' => 'css/jquery-ui.min.css', 'min' => false), array('href' => 'css/jquery-ui.structure.min.css', 'min' => false), - array('href' => 'css/jquery-ui.theme.min.css', 'min' => false), array('href' => 'css/jquery.powertip.css', 'min' => true), array('href' => 'css/jquery.powertip-yellow.min.css', 'min' => true), array('href' => 'css/chosen.css', 'min' => true), diff --git a/inc/Init.class.php b/inc/Init.class.php index ca2ee74a..03422e61 100644 --- a/inc/Init.class.php +++ b/inc/Init.class.php @@ -379,7 +379,7 @@ class Init */ private static function selectTheme() { - self::$THEME = Config::getValue('sitetheme', 'default'); + self::$THEME = Config::getValue('sitetheme', 'material-blue'); self::$THEMEURI = self::$WEBURI . '/inc/themes/' . self::$THEME; self::$THEMEPATH = DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'themes' . DIRECTORY_SEPARATOR . self::$THEME; diff --git a/inc/themes/material-blue/js/jquery.color-2.1.2.min.js b/inc/themes/material-blue/js/jquery.color-2.1.2.min.js deleted file mode 100644 index d77c4223..00000000 --- a/inc/themes/material-blue/js/jquery.color-2.1.2.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery Color v@2.1.2 http://github.com/jquery/jquery-color | jquery.org/license */ -(function(a,b){function m(a,b,c){var d=h[b.type]||{};return a==null?c||!b.def?null:b.def:(a=d.floor?~~a:parseFloat(a),isNaN(a)?b.def:d.mod?(a+d.mod)%d.mod:0>a?0:d.max")[0],k,l=a.each;j.style.cssText="background-color:rgba(1,1,1,.5)",i.rgba=j.style.backgroundColor.indexOf("rgba")>-1,l(g,function(a,b){b.cache="_"+a,b.props.alpha={idx:3,type:"percent",def:1}}),f.fn=a.extend(f.prototype,{parse:function(c,d,e,h){if(c===b)return this._rgba=[null,null,null,null],this;if(c.jquery||c.nodeType)c=a(c).css(d),d=b;var i=this,j=a.type(c),o=this._rgba=[];d!==b&&(c=[c,d,e,h],j="array");if(j==="string")return this.parse(n(c)||k._default);if(j==="array")return l(g.rgba.props,function(a,b){o[b.idx]=m(c[b.idx],b)}),this;if(j==="object")return c instanceof f?l(g,function(a,b){c[b.cache]&&(i[b.cache]=c[b.cache].slice())}):l(g,function(b,d){var e=d.cache;l(d.props,function(a,b){if(!i[e]&&d.to){if(a==="alpha"||c[a]==null)return;i[e]=d.to(i._rgba)}i[e][b.idx]=m(c[a],b,!0)}),i[e]&&a.inArray(null,i[e].slice(0,3))<0&&(i[e][3]=1,d.from&&(i._rgba=d.from(i[e])))}),this},is:function(a){var b=f(a),c=!0,d=this;return l(g,function(a,e){var f,g=b[e.cache];return g&&(f=d[e.cache]||e.to&&e.to(d._rgba)||[],l(e.props,function(a,b){if(g[b.idx]!=null)return c=g[b.idx]===f[b.idx],c})),c}),c},_space:function(){var a=[],b=this;return l(g,function(c,d){b[d.cache]&&a.push(c)}),a.pop()},transition:function(a,b){var c=f(a),d=c._space(),e=g[d],i=this.alpha()===0?f("transparent"):this,j=i[e.cache]||e.to(i._rgba),k=j.slice();return c=c[e.cache],l(e.props,function(a,d){var e=d.idx,f=j[e],g=c[e],i=h[d.type]||{};if(g===null)return;f===null?k[e]=g:(i.mod&&(g-f>i.mod/2?f+=i.mod:f-g>i.mod/2&&(f-=i.mod)),k[e]=m((g-f)*b+f,d))}),this[d](k)},blend:function(b){if(this._rgba[3]===1)return this;var c=this._rgba.slice(),d=c.pop(),e=f(b)._rgba;return f(a.map(c,function(a,b){return(1-d)*e[b]+d*a}))},toRgbaString:function(){var b="rgba(",c=a.map(this._rgba,function(a,b){return a==null?b>2?1:0:a});return c[3]===1&&(c.pop(),b="rgb("),b+c.join()+")"},toHslaString:function(){var b="hsla(",c=a.map(this.hsla(),function(a,b){return a==null&&(a=b>2?1:0),b&&b<3&&(a=Math.round(a*100)+"%"),a});return c[3]===1&&(c.pop(),b="hsl("),b+c.join()+")"},toHexString:function(b){var c=this._rgba.slice(),d=c.pop();return b&&c.push(~~(d*255)),"#"+a.map(c,function(a){return a=(a||0).toString(16),a.length===1?"0"+a:a}).join("")},toString:function(){return this._rgba[3]===0?"transparent":this.toRgbaString()}}),f.fn.parse.prototype=f.fn,g.hsla.to=function(a){if(a[0]==null||a[1]==null||a[2]==null)return[null,null,null,a[3]];var b=a[0]/255,c=a[1]/255,d=a[2]/255,e=a[3],f=Math.max(b,c,d),g=Math.min(b,c,d),h=f-g,i=f+g,j=i*.5,k,l;return g===f?k=0:b===f?k=60*(c-d)/h+360:c===f?k=60*(d-b)/h+120:k=60*(b-c)/h+240,h===0?l=0:j<=.5?l=h/i:l=h/(2-i),[Math.round(k)%360,l,j,e==null?1:e]},g.hsla.from=function(a){if(a[0]==null||a[1]==null||a[2]==null)return[null,null,null,a[3]];var b=a[0]/360,c=a[1],d=a[2],e=a[3],f=d<=.5?d*(1+c):d+c-d*c,g=2*d-f;return[Math.round(o(g,f,b+1/3)*255),Math.round(o(g,f,b)*255),Math.round(o(g,f,b-1/3)*255),e]},l(g,function(c,e){var g=e.props,h=e.cache,i=e.to,j=e.from;f.fn[c]=function(c){i&&!this[h]&&(this[h]=i(this._rgba));if(c===b)return this[h].slice();var d,e=a.type(c),k=e==="array"||e==="object"?c:arguments,n=this[h].slice();return l(g,function(a,b){var c=k[e==="object"?a:b.idx];c==null&&(c=n[b.idx]),n[b.idx]=m(c,b)}),j?(d=f(j(n)),d[h]=n,d):f(n)},l(g,function(b,e){if(f.fn[b])return;f.fn[b]=function(f){var g=a.type(f),h=b==="alpha"?this._hsla?"hsla":"rgba":c,i=this[h](),j=i[e.idx],k;return g==="undefined"?j:(g==="function"&&(f=f.call(this,j),g=a.type(f)),f==null&&e.empty?this:(g==="string"&&(k=d.exec(f),k&&(f=j+parseFloat(k[2])*(k[1]==="+"?1:-1))),i[e.idx]=f,this[h](i)))}})}),f.hook=function(b){var c=b.split(" ");l(c,function(b,c){a.cssHooks[c]={set:function(b,d){var e,g,h="";if(d!=="transparent"&&(a.type(d)!=="string"||(e=n(d)))){d=f(e||d);if(!i.rgba&&d._rgba[3]!==1){g=c==="backgroundColor"?b.parentNode:b;while((h===""||h==="transparent")&&g&&g.style)try{h=a.css(g,"backgroundColor"),g=g.parentNode}catch(j){}d=d.blend(h&&h!=="transparent"?h:"_default")}d=d.toRgbaString()}try{b.style[c]=d}catch(j){}}},a.fx.step[c]=function(b){b.colorInit||(b.start=f(b.elem,c),b.end=f(b.end),b.colorInit=!0),a.cssHooks[c].set(b.elem,b.start.transition(b.end,b.pos))}})},f.hook(c),a.cssHooks.borderColor={expand:function(a){var b={};return l(["Top","Right","Bottom","Left"],function(c,d){b["border"+d+"Color"]=a}),b}},k=a.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}})(jQuery); \ No newline at end of file diff --git a/inc/themes/material-blue/js/js.php b/inc/themes/material-blue/js/js.php index b987701e..320126cc 100644 --- a/inc/themes/material-blue/js/js.php +++ b/inc/themes/material-blue/js/js.php @@ -25,5 +25,6 @@ $jsFilesTheme = array( array('href' => \SP\Init::$THEMEPATH . '/js/functions.js', 'min' => true), - array('href' => \SP\Init::$THEMEPATH . '/js/material.min.js', 'min' => false) +// array('href' => \SP\Init::$THEMEPATH . '/js/material.min.js.map', 'min' => false), + array('href' => \SP\Init::$THEMEPATH . '/js/material.min.js', 'min' => false), ); \ No newline at end of file diff --git a/js/js.php b/js/js.php index d8e2768e..85b9f9e9 100644 --- a/js/js.php +++ b/js/js.php @@ -31,11 +31,11 @@ $themeJsPath = VIEW_PATH . DIRECTORY_SEPARATOR . \SP\Init::$THEME . DIRECTORY_SE $jsFilesBase = array( array('href' => 'js/jquery-1.11.2.min.js', 'min' => false), - array('href' => 'js/jquery-migrate-1.2.1.min.js', 'min' => false), +// array('href' => 'js/jquery-migrate-1.2.1.min.js', 'min' => false), array('href' => 'js/jquery.placeholder.js', 'min' => true), array('href' => 'js/jquery-ui.min.js', 'min' => false), array('href' => 'js/jquery.fancybox.pack.js', 'min' => false), - array('href' => 'js/jquery.powertip.min.js', 'min' => false), +// array('href' => 'js/jquery.powertip.min.js', 'min' => false), array('href' => 'js/chosen.jquery.min.js', 'min' => false), array('href' => 'js/alertify.js', 'min' => true), array('href' => 'js/jquery.fileDownload.js', 'min' => true), From ef05bb707d1fbbe19dae2838a33172cdc4b98cb4 Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Thu, 23 Jul 2015 01:00:53 +0200 Subject: [PATCH 41/84] * [MOD] New Material Design using Google MDL (work in progress). * [FIX] Fixed issue with action buttons. * [MOD] Minor UI tweaks. --- inc/themes/material-blue/account.inc | 62 ++++++++++---------- inc/themes/material-blue/categories.inc | 6 +- inc/themes/material-blue/css/styles.css | 23 ++------ inc/themes/material-blue/customers.inc | 6 +- inc/themes/material-blue/editpass.inc | 29 ++++----- inc/themes/material-blue/footer.inc | 57 +++++++++--------- inc/themes/material-blue/groups.inc | 6 +- inc/themes/material-blue/imgs/logo.png | Bin 5016 -> 5485 bytes inc/themes/material-blue/imgs/logo_full.png | Bin 21787 -> 24988 bytes inc/themes/material-blue/js/functions.js | 24 ++------ inc/themes/material-blue/js/js.php | 2 +- inc/themes/material-blue/login.inc | 4 +- inc/themes/material-blue/profiles.inc | 6 +- inc/themes/material-blue/request.inc | 32 +++++----- inc/themes/material-blue/search.inc | 6 +- inc/themes/material-blue/users.inc | 6 +- inc/themes/material-blue/userspass.inc | 18 +++--- web/SearchC.class.php | 31 +++++----- 18 files changed, 148 insertions(+), 170 deletions(-) diff --git a/inc/themes/material-blue/account.inc b/inc/themes/material-blue/account.inc index be08be8b..172f9c1e 100644 --- a/inc/themes/material-blue/account.inc +++ b/inc/themes/material-blue/account.inc @@ -8,7 +8,7 @@
    -
    +
    @@ -206,15 +206,15 @@ - - - - - - - - - + + + + + + + + + @@ -354,7 +354,7 @@ - + @@ -366,55 +366,55 @@
    - - - - - - - - + + + + + + - - - - - - - diff --git a/inc/themes/material-blue/categories.inc b/inc/themes/material-blue/categories.inc index 2de742d6..940203b1 100644 --- a/inc/themes/material-blue/categories.inc +++ b/inc/themes/material-blue/categories.inc @@ -1,7 +1,7 @@

    - +
    @@ -39,8 +39,8 @@
    -
    diff --git a/inc/themes/material-blue/css/styles.css b/inc/themes/material-blue/css/styles.css index aa7a8e31..6c57c9e7 100644 --- a/inc/themes/material-blue/css/styles.css +++ b/inc/themes/material-blue/css/styles.css @@ -155,32 +155,17 @@ i{cursor: pointer;} font-weight: bold; } -a { +a, a:visited { text-decoration: none; - color: #339; + color: rgba(68, 138, 255, 1); } -a:visited { +a:hover, a:active, a:focus { text-decoration: none; - color: #339; -} - -a:hover { - text-decoration: none; - color: orangered; + color: rgba(68, 138, 255, .6); cursor: pointer; } -a:active { - text-decoration: none; - color: #BB0000; -} - -a:focus { - text-decoration: none; - color: #FF0000; -} - #nojs { width: 80%; margin: auto; diff --git a/inc/themes/material-blue/customers.inc b/inc/themes/material-blue/customers.inc index 957751b5..fe297876 100644 --- a/inc/themes/material-blue/customers.inc +++ b/inc/themes/material-blue/customers.inc @@ -1,7 +1,7 @@

    -
    +
    @@ -39,8 +39,8 @@
    -
    diff --git a/inc/themes/material-blue/editpass.inc b/inc/themes/material-blue/editpass.inc index 99796a1a..c1022b94 100644 --- a/inc/themes/material-blue/editpass.inc +++ b/inc/themes/material-blue/editpass.inc @@ -3,7 +3,7 @@ - +
    @@ -39,7 +39,7 @@ diff --git a/inc/themes/material-blue/encryption.inc b/inc/themes/material-blue/encryption.inc index ad4ea7fd..1c8c722c 100644 --- a/inc/themes/material-blue/encryption.inc +++ b/inc/themes/material-blue/encryption.inc @@ -26,12 +26,10 @@ echo $encryption_tabIndex; ?>"> @@ -40,14 +38,11 @@ echo $encryption_tabIndex; ?>"> diff --git a/inc/themes/material-blue/imgs/logo.svg b/inc/themes/material-blue/imgs/logo.svg new file mode 100644 index 00000000..f53690ab --- /dev/null +++ b/inc/themes/material-blue/imgs/logo.svg @@ -0,0 +1,384 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + diff --git a/inc/themes/material-blue/imgs/logo_full.svg b/inc/themes/material-blue/imgs/logo_full.svg new file mode 100644 index 00000000..9f036e31 --- /dev/null +++ b/inc/themes/material-blue/imgs/logo_full.svg @@ -0,0 +1,454 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + #sysPass + Systems Password Manager + + diff --git a/inc/themes/material-blue/import.inc b/inc/themes/material-blue/import.inc index 0fee84d9..24dbf874 100644 --- a/inc/themes/material-blue/import.inc +++ b/inc/themes/material-blue/import.inc @@ -60,11 +60,10 @@ echo $import_tabIndex; ?>"> @@ -149,11 +148,10 @@ echo $import_tabIndex; ?>"> diff --git a/inc/themes/material-blue/js-common.inc b/inc/themes/material-blue/js-common.inc index 9b74492e..d1b2bb7f 100644 --- a/inc/themes/material-blue/js-common.inc +++ b/inc/themes/material-blue/js-common.inc @@ -44,28 +44,26 @@ $(".help-box").dialog({autoOpen: false, title: '', width: screen.width / 2.5 }); $('.passwordfield__input').parent().each(function(){ - var target = $(this).find('.passwordfield__input').parent(); + var targetContainer = $(this).find('.passwordfield__input').parent(); var targetId = $(this).find('.passwordfield__input').attr('id'); $(this) - .after('settings') - .after('remove_red_eye'); + .after('settings') + .after('remove_red_eye'); $('#passGen').each(function(){ $(this).click(function () { - password(11, true, true, "targetId"); + password(11, true, true, targetId); }); }); + }); - $(".showpass").each(function (index, input) { - // Cross-browser compatibility - $(this).on("mouseover", function () { - var pass = $('#' + targetId).val(); + $('.passwordfield__input-show').parent().each(function(){ + var targetId = $(this).find('.passwordfield__input-show').attr('id'); - $(this).attr('title', pass); - }); - }); - }) + $(this) + .after('remove_red_eye'); + }); // Stick the #nav to the top of the window var nav = $('#actionsBar'); diff --git a/inc/themes/material-blue/login.inc b/inc/themes/material-blue/login.inc index fd4dc782..4d645f51 100644 --- a/inc/themes/material-blue/login.inc +++ b/inc/themes/material-blue/login.inc @@ -1,7 +1,4 @@
    -
    -
    + maxlength="255" autocomplete="off">
    @@ -51,21 +51,22 @@ + +
    + + + +
    -
    - - - -
    - - - \ No newline at end of file +
    +
    +
    + +  ::  + cygnux.org +
    + + + + + \ No newline at end of file diff --git a/inc/themes/material-blue/groups.inc b/inc/themes/material-blue/groups.inc index 118e7942..267d279c 100644 --- a/inc/themes/material-blue/groups.inc +++ b/inc/themes/material-blue/groups.inc @@ -1,7 +1,7 @@

    -
    + @@ -39,8 +39,8 @@
    -
    diff --git a/inc/themes/material-blue/imgs/logo.png b/inc/themes/material-blue/imgs/logo.png index 4e21a7a87a529c7334d160a9d890f014b4ac20ab..765a19083f38e0d221edcae2f7c79b0744e7f475 100644 GIT binary patch delta 5446 zcmV-M6}jq|C+#YbBYy(@P)t-sh_LHil=D)T^jw$kWtZx0mgHZV@nxCiY?$9@ne20! z+HsobW1aSCo#}6!;%l7mdz#jEoZWMr>TRIybD!pKpYwO1+IpYhcA@ETqwjp7<7%b% zf}!4WrSW*A>wKl(f~47Vrt^QK=7FZ@e5db{rOJS)<9Dg{hJUEugQ)6>r{sRA@s+5} zgRAC+s_cNP^OCC7g{|nDs>+D0?~knAj;!g6uH%QV>Xoh7gs=CFujPxc@`JMTo37M~ zvF(Pj`Jb=Pl(FKEvgnqw){C?6jk5KIwDy^?-Hf#Ghqd>SwCbO-*p9XFoV3!TveK8d za4fYn7Z+yx#Xg{ z*r~YKpS$0py5^_5)2F)Nn!NL$yzQ^M$fUgIpuO&>yyB(3>8-ror@q~)zSpC_T)c zr^EHR!pg70>9fPutHbWB#NxBU;;_Wsy2972#PF`ga@hXxh>95Q1w#o3i%H6uj>a@)3yUOdn%H_Aq z@wm+8wtvm+y3Oaj%Bi31xzO*t&-TC1@W9aIz0vBs((=F3 z?7`9U!qVoz)a}I7=)KkS#MAW1)Z)U`@6FZTzt{G|*YL{K@yFNe!PxlB*yhFA^T^ow z$=U7A+4RTT^~>At&)ezD-0;fX_tf0w(B13K-hcAa-t5@k;LzXm(%$*h;O^Do@6O`; z*x~8Y;`Y|!@YLh@*W>Zpfq_|+Uow{ z>hj;~`s3{M=j`s}?e*gB{ps%U=I{6D@%ilX^y>5b>-7BW_5Shp`SbYu_4@tx`~Lm= z{|)#3|NQ^^{{Q^ZA!ZGexdA$V78M8(Cv7YK000r`NklQUsTKp~h`FRkN{VfL7@{7oRSR8(A*%C;Ndlxf`(VmDBO;7f4{YMUTSB=Kki@WYw=ls_9wsJT5D(R zz4P32|Iew*;l|RiY2ryZ7#3^e#?av4z`(#YB>u0svSP)GWi);?e|UL)#6D@mlL_fQ z?rtK)dJ!BZ#0XsZ%915ZUV7;z`tysfpa8%4xs-r_Sg!avA*sXcg$avq?sMrXmS!^$Z6S;{mRYK%SugFQHn4C

    o+A_cAUwAnn_Wchtd(@ep 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 diff --git a/inc/themes/material-blue/imgs/logo_full.png b/inc/themes/material-blue/imgs/logo_full.png index 1c16ccae35f1351a345c58e50de942102bc30175..bb6476b3a58f96dcdf65fe6571786fa8b99db42f 100644 GIT binary patch literal 24988 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 diff --git a/inc/themes/material-blue/js/functions.js b/inc/themes/material-blue/js/functions.js index 9da02d3f..f43c12ae 100644 --- a/inc/themes/material-blue/js/functions.js +++ b/inc/themes/material-blue/js/functions.js @@ -36,9 +36,13 @@ jQuery.extend(jQuery.fancybox.defaults, { type: 'ajax', autoWidth: 'true', autoHeight: 'true', + autoResize: 'true', + autoCenter: 'true', + fitToView: 'true', minHeight: 50, padding: 0, helpers: {overlay: {css: {'background': 'rgba(0, 0, 0, 0.1)'}}}, + keys: {close: [27]}, afterShow: function () { "use strict"; @@ -473,12 +477,8 @@ function saveAccount(frm) { var data = $("#" + frm).serialize(); var id = $('input[name="accountid"]').val(); - var savetyp = $('input[name="savetyp"]').val(); var action = $('input[name="next"]').val(); - $('#btnGuardar').attr('disabled', true); - $.fancybox.showLoading(); - $.ajax({ type: 'POST', dataType: 'json', @@ -491,20 +491,13 @@ function saveAccount(frm) { if (status === 0) { resMsg("ok", description); - if (savetyp === 1) { - $('#btnSave').hide(); - } else { - $('#btnSave').attr('disabled', true); - } - if (action && id) { - doAction(action, 'accsearch', id); + doAction(action, 1, id); } } else if (status === 10) { doLogout(); } else { resMsg("error", description); - $('#btnSave').removeAttr("disabled"); } }, error: function (jqXHR, textStatus, errorThrown) { @@ -512,7 +505,6 @@ function saveAccount(frm) { resMsg("error", txt); }, complete: function () { - $.fancybox.hideLoading(); } }); } @@ -1159,12 +1151,6 @@ function resMsg(type, txt, url, action) { return alertify.error(txt); } - jQuery('#dialog').load(html).dialog('open').afterClose(function () { - if (typeof action !== "undefined") { - eval(action); - } - }); - /* $.fancybox(html, { afterLoad: function () { $('.fancybox-skin,.fancybox-outer,.fancybox-inner').css({ diff --git a/inc/themes/material-blue/js/js.php b/inc/themes/material-blue/js/js.php index 320126cc..da0cd380 100644 --- a/inc/themes/material-blue/js/js.php +++ b/inc/themes/material-blue/js/js.php @@ -24,7 +24,7 @@ */ $jsFilesTheme = array( - array('href' => \SP\Init::$THEMEPATH . '/js/functions.js', 'min' => true), // array('href' => \SP\Init::$THEMEPATH . '/js/material.min.js.map', 'min' => false), array('href' => \SP\Init::$THEMEPATH . '/js/material.min.js', 'min' => false), + array('href' => \SP\Init::$THEMEPATH . '/js/functions.js', 'min' => true), ); \ No newline at end of file diff --git a/inc/themes/material-blue/login.inc b/inc/themes/material-blue/login.inc index b6327119..e1acbc4d 100644 --- a/inc/themes/material-blue/login.inc +++ b/inc/themes/material-blue/login.inc @@ -62,7 +62,7 @@

    -
    @@ -104,8 +104,6 @@ \ No newline at end of file diff --git a/web/SearchC.class.php b/web/SearchC.class.php index d8e3b48e..a5d5c038 100644 --- a/web/SearchC.class.php +++ b/web/SearchC.class.php @@ -154,20 +154,23 @@ class SearchC extends Controller implements ActionsInterface } $colors = array( - 'ef5350', - 'ec407a', - 'ab47bc', - '7e57c2', - '5c6bc0', - '42a5f5', - '29b6f6', - '26c6da', - '26a69a', - '66bb6a', - '9ccc65', - 'ff7043', - '8d6e63', - '78909c' + '2196F3', + '03A9F4', + '00BCD4', + '009688', + '4CAF50', + '8BC34A', + 'CDDC39', + 'FFC107', + '795548', + '607D8B', + '9E9E9E', + 'FF5722', + 'F44336', + 'E91E63', + '9C27B0', + '673AB7', + '3F51B5', ); $this->setSortFields(); From fd8c992195ee1dcbc18e05cf6ff5081bad76b496 Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Thu, 23 Jul 2015 13:29:15 +0200 Subject: [PATCH 42/84] * [MOD] New Material Design using Google MDL (work in progress). --- inc/themes/{default => classic}/account.inc | 0 inc/themes/{default => classic}/backup.inc | 0 inc/themes/{default => classic}/body.inc | 0 .../{default => classic}/categories.inc | 0 inc/themes/{default => classic}/config.inc | 0 inc/themes/{default => classic}/css/css.php | 0 .../css/jquery-ui.theme.min.css | 0 .../{default => classic}/css/search-grid.css | 0 .../{default => classic}/css/styles.css | 0 inc/themes/{default => classic}/customers.inc | 0 inc/themes/{default => classic}/debug.inc | 0 inc/themes/{default => classic}/editpass.inc | 0 .../{default => classic}/encryption.inc | 0 inc/themes/{default => classic}/error.inc | 0 .../{default => classic}/errorfancy.inc | 0 inc/themes/{default => classic}/eventlog.inc | 0 inc/themes/{default => classic}/files.inc | 0 inc/themes/{default => classic}/footer.inc | 0 inc/themes/{default => classic}/groups.inc | 0 inc/themes/{default => classic}/header.inc | 0 inc/themes/{default => classic}/import.inc | 0 inc/themes/{default => classic}/index.php | 2 +- inc/themes/{default => classic}/info.inc | 0 inc/themes/{default => classic}/install.inc | 0 inc/themes/{default => classic}/js-common.inc | 0 .../{default => classic}/js/functions.js | 0 inc/themes/{default => classic}/js/js.php | 0 inc/themes/{default => classic}/login.inc | 0 inc/themes/{default => classic}/menu.inc | 0 inc/themes/{default => classic}/mgmttabs.inc | 0 inc/themes/{default => classic}/passreset.inc | 0 inc/themes/{default => classic}/profiles.inc | 0 inc/themes/{default => classic}/request.inc | 0 inc/themes/{default => classic}/search.inc | 0 inc/themes/{default => classic}/searchbox.inc | 0 .../{default => classic}/sessionbar.inc | 0 inc/themes/{default => classic}/tabs-end.inc | 0 .../{default => classic}/tabs-start.inc | 0 inc/themes/{default => classic}/upgrade.inc | 0 inc/themes/{default => classic}/users.inc | 0 inc/themes/{default => classic}/userspass.inc | 0 inc/themes/material-blue/backup.inc | 18 +++++----- inc/themes/material-blue/config.inc | 15 +++----- inc/themes/material-blue/css/css.php | 2 +- .../material-blue/css/material-custom.css | 1 + inc/themes/material-blue/css/styles.css | 8 ++--- inc/themes/material-blue/encryption.inc | 13 ++++--- inc/themes/material-blue/header.inc | 2 +- inc/themes/material-blue/import.inc | 8 ++--- inc/themes/material-blue/js-common.inc | 35 ++++++++++++------- inc/themes/material-blue/js/functions.js | 10 ++++-- inc/themes/material-blue/login.inc | 7 +--- js/jquery-ui.js | 7 ---- js/js.php | 6 ++-- 54 files changed, 67 insertions(+), 67 deletions(-) rename inc/themes/{default => classic}/account.inc (100%) rename inc/themes/{default => classic}/backup.inc (100%) rename inc/themes/{default => classic}/body.inc (100%) rename inc/themes/{default => classic}/categories.inc (100%) rename inc/themes/{default => classic}/config.inc (100%) rename inc/themes/{default => classic}/css/css.php (100%) rename inc/themes/{default => classic}/css/jquery-ui.theme.min.css (100%) rename inc/themes/{default => classic}/css/search-grid.css (100%) rename inc/themes/{default => classic}/css/styles.css (100%) rename inc/themes/{default => classic}/customers.inc (100%) rename inc/themes/{default => classic}/debug.inc (100%) rename inc/themes/{default => classic}/editpass.inc (100%) rename inc/themes/{default => classic}/encryption.inc (100%) rename inc/themes/{default => classic}/error.inc (100%) rename inc/themes/{default => classic}/errorfancy.inc (100%) rename inc/themes/{default => classic}/eventlog.inc (100%) rename inc/themes/{default => classic}/files.inc (100%) rename inc/themes/{default => classic}/footer.inc (100%) rename inc/themes/{default => classic}/groups.inc (100%) rename inc/themes/{default => classic}/header.inc (100%) rename inc/themes/{default => classic}/import.inc (100%) rename inc/themes/{default => classic}/index.php (97%) rename inc/themes/{default => classic}/info.inc (100%) rename inc/themes/{default => classic}/install.inc (100%) rename inc/themes/{default => classic}/js-common.inc (100%) rename inc/themes/{default => classic}/js/functions.js (100%) rename inc/themes/{default => classic}/js/js.php (100%) rename inc/themes/{default => classic}/login.inc (100%) rename inc/themes/{default => classic}/menu.inc (100%) rename inc/themes/{default => classic}/mgmttabs.inc (100%) rename inc/themes/{default => classic}/passreset.inc (100%) rename inc/themes/{default => classic}/profiles.inc (100%) rename inc/themes/{default => classic}/request.inc (100%) rename inc/themes/{default => classic}/search.inc (100%) rename inc/themes/{default => classic}/searchbox.inc (100%) rename inc/themes/{default => classic}/sessionbar.inc (100%) rename inc/themes/{default => classic}/tabs-end.inc (100%) rename inc/themes/{default => classic}/tabs-start.inc (100%) rename inc/themes/{default => classic}/upgrade.inc (100%) rename inc/themes/{default => classic}/users.inc (100%) rename inc/themes/{default => classic}/userspass.inc (100%) delete mode 100644 js/jquery-ui.js diff --git a/inc/themes/default/account.inc b/inc/themes/classic/account.inc similarity index 100% rename from inc/themes/default/account.inc rename to inc/themes/classic/account.inc diff --git a/inc/themes/default/backup.inc b/inc/themes/classic/backup.inc similarity index 100% rename from inc/themes/default/backup.inc rename to inc/themes/classic/backup.inc diff --git a/inc/themes/default/body.inc b/inc/themes/classic/body.inc similarity index 100% rename from inc/themes/default/body.inc rename to inc/themes/classic/body.inc diff --git a/inc/themes/default/categories.inc b/inc/themes/classic/categories.inc similarity index 100% rename from inc/themes/default/categories.inc rename to inc/themes/classic/categories.inc diff --git a/inc/themes/default/config.inc b/inc/themes/classic/config.inc similarity index 100% rename from inc/themes/default/config.inc rename to inc/themes/classic/config.inc diff --git a/inc/themes/default/css/css.php b/inc/themes/classic/css/css.php similarity index 100% rename from inc/themes/default/css/css.php rename to inc/themes/classic/css/css.php diff --git a/inc/themes/default/css/jquery-ui.theme.min.css b/inc/themes/classic/css/jquery-ui.theme.min.css similarity index 100% rename from inc/themes/default/css/jquery-ui.theme.min.css rename to inc/themes/classic/css/jquery-ui.theme.min.css diff --git a/inc/themes/default/css/search-grid.css b/inc/themes/classic/css/search-grid.css similarity index 100% rename from inc/themes/default/css/search-grid.css rename to inc/themes/classic/css/search-grid.css diff --git a/inc/themes/default/css/styles.css b/inc/themes/classic/css/styles.css similarity index 100% rename from inc/themes/default/css/styles.css rename to inc/themes/classic/css/styles.css diff --git a/inc/themes/default/customers.inc b/inc/themes/classic/customers.inc similarity index 100% rename from inc/themes/default/customers.inc rename to inc/themes/classic/customers.inc diff --git a/inc/themes/default/debug.inc b/inc/themes/classic/debug.inc similarity index 100% rename from inc/themes/default/debug.inc rename to inc/themes/classic/debug.inc diff --git a/inc/themes/default/editpass.inc b/inc/themes/classic/editpass.inc similarity index 100% rename from inc/themes/default/editpass.inc rename to inc/themes/classic/editpass.inc diff --git a/inc/themes/default/encryption.inc b/inc/themes/classic/encryption.inc similarity index 100% rename from inc/themes/default/encryption.inc rename to inc/themes/classic/encryption.inc diff --git a/inc/themes/default/error.inc b/inc/themes/classic/error.inc similarity index 100% rename from inc/themes/default/error.inc rename to inc/themes/classic/error.inc diff --git a/inc/themes/default/errorfancy.inc b/inc/themes/classic/errorfancy.inc similarity index 100% rename from inc/themes/default/errorfancy.inc rename to inc/themes/classic/errorfancy.inc diff --git a/inc/themes/default/eventlog.inc b/inc/themes/classic/eventlog.inc similarity index 100% rename from inc/themes/default/eventlog.inc rename to inc/themes/classic/eventlog.inc diff --git a/inc/themes/default/files.inc b/inc/themes/classic/files.inc similarity index 100% rename from inc/themes/default/files.inc rename to inc/themes/classic/files.inc diff --git a/inc/themes/default/footer.inc b/inc/themes/classic/footer.inc similarity index 100% rename from inc/themes/default/footer.inc rename to inc/themes/classic/footer.inc diff --git a/inc/themes/default/groups.inc b/inc/themes/classic/groups.inc similarity index 100% rename from inc/themes/default/groups.inc rename to inc/themes/classic/groups.inc diff --git a/inc/themes/default/header.inc b/inc/themes/classic/header.inc similarity index 100% rename from inc/themes/default/header.inc rename to inc/themes/classic/header.inc diff --git a/inc/themes/default/import.inc b/inc/themes/classic/import.inc similarity index 100% rename from inc/themes/default/import.inc rename to inc/themes/classic/import.inc diff --git a/inc/themes/default/index.php b/inc/themes/classic/index.php similarity index 97% rename from inc/themes/default/index.php rename to inc/themes/classic/index.php index 695d2068..0e84617e 100644 --- a/inc/themes/default/index.php +++ b/inc/themes/classic/index.php @@ -24,7 +24,7 @@ */ $themeInfo = array( - 'name' => 'Default', + 'name' => 'Classic', 'creator' => 'nuxsmin', 'version' => '1.0', 'targetversion' => '1.2.0' diff --git a/inc/themes/default/info.inc b/inc/themes/classic/info.inc similarity index 100% rename from inc/themes/default/info.inc rename to inc/themes/classic/info.inc diff --git a/inc/themes/default/install.inc b/inc/themes/classic/install.inc similarity index 100% rename from inc/themes/default/install.inc rename to inc/themes/classic/install.inc diff --git a/inc/themes/default/js-common.inc b/inc/themes/classic/js-common.inc similarity index 100% rename from inc/themes/default/js-common.inc rename to inc/themes/classic/js-common.inc diff --git a/inc/themes/default/js/functions.js b/inc/themes/classic/js/functions.js similarity index 100% rename from inc/themes/default/js/functions.js rename to inc/themes/classic/js/functions.js diff --git a/inc/themes/default/js/js.php b/inc/themes/classic/js/js.php similarity index 100% rename from inc/themes/default/js/js.php rename to inc/themes/classic/js/js.php diff --git a/inc/themes/default/login.inc b/inc/themes/classic/login.inc similarity index 100% rename from inc/themes/default/login.inc rename to inc/themes/classic/login.inc diff --git a/inc/themes/default/menu.inc b/inc/themes/classic/menu.inc similarity index 100% rename from inc/themes/default/menu.inc rename to inc/themes/classic/menu.inc diff --git a/inc/themes/default/mgmttabs.inc b/inc/themes/classic/mgmttabs.inc similarity index 100% rename from inc/themes/default/mgmttabs.inc rename to inc/themes/classic/mgmttabs.inc diff --git a/inc/themes/default/passreset.inc b/inc/themes/classic/passreset.inc similarity index 100% rename from inc/themes/default/passreset.inc rename to inc/themes/classic/passreset.inc diff --git a/inc/themes/default/profiles.inc b/inc/themes/classic/profiles.inc similarity index 100% rename from inc/themes/default/profiles.inc rename to inc/themes/classic/profiles.inc diff --git a/inc/themes/default/request.inc b/inc/themes/classic/request.inc similarity index 100% rename from inc/themes/default/request.inc rename to inc/themes/classic/request.inc diff --git a/inc/themes/default/search.inc b/inc/themes/classic/search.inc similarity index 100% rename from inc/themes/default/search.inc rename to inc/themes/classic/search.inc diff --git a/inc/themes/default/searchbox.inc b/inc/themes/classic/searchbox.inc similarity index 100% rename from inc/themes/default/searchbox.inc rename to inc/themes/classic/searchbox.inc diff --git a/inc/themes/default/sessionbar.inc b/inc/themes/classic/sessionbar.inc similarity index 100% rename from inc/themes/default/sessionbar.inc rename to inc/themes/classic/sessionbar.inc diff --git a/inc/themes/default/tabs-end.inc b/inc/themes/classic/tabs-end.inc similarity index 100% rename from inc/themes/default/tabs-end.inc rename to inc/themes/classic/tabs-end.inc diff --git a/inc/themes/default/tabs-start.inc b/inc/themes/classic/tabs-start.inc similarity index 100% rename from inc/themes/default/tabs-start.inc rename to inc/themes/classic/tabs-start.inc diff --git a/inc/themes/default/upgrade.inc b/inc/themes/classic/upgrade.inc similarity index 100% rename from inc/themes/default/upgrade.inc rename to inc/themes/classic/upgrade.inc diff --git a/inc/themes/default/users.inc b/inc/themes/classic/users.inc similarity index 100% rename from inc/themes/default/users.inc rename to inc/themes/classic/users.inc diff --git a/inc/themes/default/userspass.inc b/inc/themes/classic/userspass.inc similarity index 100% rename from inc/themes/default/userspass.inc rename to inc/themes/classic/userspass.inc diff --git a/inc/themes/material-blue/backup.inc b/inc/themes/material-blue/backup.inc index 17ea2ec1..cb5cb93a 100644 --- a/inc/themes/material-blue/backup.inc +++ b/inc/themes/material-blue/backup.inc @@ -34,7 +34,7 @@
    -
    + @@ -42,7 +42,7 @@
    -
    - @@ -64,7 +64,7 @@
    -
    + @@ -126,7 +124,7 @@
    -
    - diff --git a/inc/themes/material-blue/config.inc b/inc/themes/material-blue/config.inc index ffdcbb12..b9412927 100644 --- a/inc/themes/material-blue/config.inc +++ b/inc/themes/material-blue/config.inc @@ -4,7 +4,7 @@ - +
    @@ -95,13 +95,11 @@
    -
    - remove_red_eye - settings
    @@ -451,12 +451,10 @@ @@ -670,13 +668,10 @@ @@ -740,8 +735,8 @@
    -
    diff --git a/inc/themes/material-blue/css/css.php b/inc/themes/material-blue/css/css.php index 4a8ea125..739ba107 100644 --- a/inc/themes/material-blue/css/css.php +++ b/inc/themes/material-blue/css/css.php @@ -25,7 +25,7 @@ $cssFilesTheme = array( // array('href' => 'https://fonts.googleapis.com/icon?family=Material+Icons', 'min' => false), - array('href' => 'http://fonts.googleapis.com/css?family=Roboto:300,400,500,700', 'min' => false), + array('href' => 'https://fonts.googleapis.com/css?family=Roboto:300,400,500,700', 'min' => false), array('href' => \SP\Init::$THEMEPATH . '/css/fonts.css', 'min' => true), array('href' => \SP\Init::$THEMEPATH . '/css/material.min.css', 'min' => false), array('href' => \SP\Init::$THEMEPATH . '/css/material-custom.css', 'min' => true), diff --git a/inc/themes/material-blue/css/material-custom.css b/inc/themes/material-blue/css/material-custom.css index dcdf2a84..28e9bc7e 100644 --- a/inc/themes/material-blue/css/material-custom.css +++ b/inc/themes/material-blue/css/material-custom.css @@ -27,6 +27,7 @@ .material-icons.md-24 { font-size: 24px; } .material-icons.md-36 { font-size: 36px; } .material-icons.md-48 { font-size: 48px; } +.material-icons.md-60 { font-size: 60px; } .material-icons.md-dark { color: rgba(0, 0, 0, 0.54); } .material-icons.md-dark.md-inactive { color: rgba(0, 0, 0, 0.26); } diff --git a/inc/themes/material-blue/css/styles.css b/inc/themes/material-blue/css/styles.css index 6c57c9e7..6b3b4296 100644 --- a/inc/themes/material-blue/css/styles.css +++ b/inc/themes/material-blue/css/styles.css @@ -424,11 +424,9 @@ a:hover, a:active, a:focus { } #content .data #dropzone { - width: 350px; - padding: 5px; - height: 50px; - margin-top: 10px; - border: 2px dashed #d9d9d9; + width: 30em; + padding: 1em; + border: 2px dashed rgb(0, 150, 136); text-align: center; } diff --git a/inc/themes/material-blue/encryption.inc b/inc/themes/material-blue/encryption.inc index 37cda088..ad4ea7fd 100644 --- a/inc/themes/material-blue/encryption.inc +++ b/inc/themes/material-blue/encryption.inc @@ -8,7 +8,7 @@ echo $encryption_tabIndex; ?>"> - +
    />
    - remove_red_eye - settings
    - />
    - remove_red_eye - settings
    0): ?> @@ -110,7 +110,8 @@ echo $encryption_tabIndex; ?>">
    - @@ -120,7 +121,8 @@ echo $encryption_tabIndex; ?>">

    - @@ -129,7 +131,7 @@ echo $encryption_tabIndex; ?>"> - +
    @@ -123,7 +123,7 @@ echo $import_tabIndex; ?>"> - +
    @@ -181,7 +183,8 @@ echo $encryption_tabIndex; ?>">

    - diff --git a/inc/themes/material-blue/header.inc b/inc/themes/material-blue/header.inc index dd3a88e1..53dec776 100644 --- a/inc/themes/material-blue/header.inc +++ b/inc/themes/material-blue/header.inc @@ -4,7 +4,7 @@ <?php echo $appInfo['appname'],' :: ',$appInfo['appdesc']; ?> - + diff --git a/inc/themes/material-blue/import.inc b/inc/themes/material-blue/import.inc index 51cfcc13..0fee84d9 100644 --- a/inc/themes/material-blue/import.inc +++ b/inc/themes/material-blue/import.inc @@ -90,7 +90,7 @@ echo $import_tabIndex; ?>">
    - upload + cloud_upload
    ",e.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(n)}):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_contactContainers:function(s){var n,o,a,r,h,l,c,u,d,p,f=null,g=null;for(n=this.containers.length-1;n>=0;n--)if(!t.contains(this.currentItem[0],this.containers[n].element[0]))if(this._intersectsWith(this.containers[n].containerCache)){if(f&&t.contains(this.containers[n].element[0],f.element[0]))continue;f=this.containers[n],g=n}else this.containers[n].containerCache.over&&(this.containers[n]._trigger("out",s,this._uiHash(this)),this.containers[n].containerCache.over=0);if(f)if(1===this.containers.length)this.containers[g].containerCache.over||(this.containers[g]._trigger("over",s,this._uiHash(this)),this.containers[g].containerCache.over=1);else{for(a=1e4,r=null,p=f.floating||i(this.currentItem),h=p?"left":"top",l=p?"width":"height",c=this.positionAbs[h]+this.offset.click[h],o=this.items.length-1;o>=0;o--)t.contains(this.containers[g].element[0],this.items[o].item[0])&&this.items[o].item[0]!==this.currentItem[0]&&(!p||e(this.positionAbs.top+this.offset.click.top,this.items[o].top,this.items[o].height))&&(u=this.items[o].item.offset()[h],d=!1,Math.abs(u-c)>Math.abs(u+this.items[o][l]-c)&&(d=!0,u+=this.items[o][l]),a>Math.abs(u-c)&&(a=Math.abs(u-c),r=this.items[o],this.direction=d?"up":"down"));if(!r&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[g])return;r?this._rearrange(s,r,null,!0):this._rearrange(s,null,this.containers[g].element,!0),this._trigger("change",s,this._uiHash()),this.containers[g]._trigger("change",s,this._uiHash(this)),this.currentContainer=this.containers[g],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[g]._trigger("over",s,this._uiHash(this)),this.containers[g].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,t("document"===n.containment?document:window).width()-this.helperProportions.width-this.margins.left,(t("document"===n.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():o?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,o=e.pageX,a=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==document&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.leftthis.containment[2]&&(o=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(a=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((a-this.originalPageY)/n.grid[1])*n.grid[1],a=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((o-this.originalPageX)/n.grid[0])*n.grid[0],o=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){this.reverting=!1;var i,s=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(i in this._storedCSS)("auto"===this._storedCSS[i]||"static"===this._storedCSS[i])&&(this._storedCSS[i]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&s.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||s.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(s.push(function(t){this._trigger("remove",t,this._uiHash())}),s.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),s.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),i=this.containers.length-1;i>=0;i--)e||s.push(function(t){return function(e){t._trigger("deactivate",e,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over&&(s.push(function(t){return function(e){t._trigger("out",e,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,this.cancelHelperRemoval){if(!e){for(this._trigger("beforeStop",t,this._uiHash()),i=0;s.length>i;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!1}if(e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null,!e){for(i=0;s.length>i;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!0},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}})})(jQuery);(function(t){var e=0,i={},s={};i.height=i.paddingTop=i.paddingBottom=i.borderTopWidth=i.borderBottomWidth="hide",s.height=s.paddingTop=s.paddingBottom=s.borderTopWidth=s.borderBottomWidth="show",t.widget("ui.accordion",{version:"1.10.3",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t(),content:this.active.length?this.active.next():t()}},_createIcons:function(){var e=this.options.icons;e&&(t("").addClass("ui-accordion-header-icon ui-icon "+e.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(e.header).addClass(e.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),undefined):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),"disabled"===t&&this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!e),undefined)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),o.focus(),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().focus()},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all"),this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide()},_refresh:function(){var i,s=this.options,n=s.heightStyle,o=this.element.parent(),a=this.accordionId="ui-accordion-"+(this.element.attr("id")||++e);this.active=this._findActive(s.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(e){var i=t(this),s=i.attr("id"),n=i.next(),o=n.attr("id");s||(s=a+"-header-"+e,i.attr("id",s)),o||(o=a+"-panel-"+e,n.attr("id",o)),i.attr("aria-controls",o),n.attr("aria-labelledby",s)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false",tabIndex:-1}).next().attr({"aria-expanded":"false","aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true",tabIndex:0}).next().attr({"aria-expanded":"true","aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(s.event),"fill"===n?(i=o.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.headers.each(function(){i-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===n&&(i=0,this.headers.next().each(function(){i=Math.max(i,t(this).css("height","").height())}).height(i))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),o=n[0]===s[0],a=o&&i.collapsible,r=a?t():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:a?t():n,newPanel:r};e.preventDefault(),o&&!i.collapsible||this._trigger("beforeActivate",e,l)===!1||(i.active=a?!1:this.headers.index(n),this.active=o?t():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),o||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-expanded":"false","aria-hidden":"true"}),s.prev().attr("aria-selected","false"),i.length&&s.length?s.prev().attr("tabIndex",-1):i.length&&this.headers.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr({"aria-expanded":"true","aria-hidden":"false"}).prev().attr({"aria-selected":"true",tabIndex:0})},_animate:function(t,e,n){var o,a,r,h=this,l=0,c=t.length&&(!e.length||t.index()",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n;this.isMultiLine=o?!0:a?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,undefined;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:case o.NUMPAD_ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),undefined;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),undefined):(this._searchTimeout(t),undefined)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,undefined):(clearTimeout(this.searching),this.close(t),this._change(t),undefined)}}),this._initSource(),this.menu=t("
    @@ -216,8 +216,8 @@ echo $import_tabIndex; ?>">
    -
    diff --git a/inc/themes/material-blue/js-common.inc b/inc/themes/material-blue/js-common.inc index 48447053..9b74492e 100644 --- a/inc/themes/material-blue/js-common.inc +++ b/inc/themes/material-blue/js-common.inc @@ -17,15 +17,6 @@ no_results_text: "" }); - $(".showpass").each(function (index, input) { - // Cross-browser compatibility - $(this).on("mouseover", function () { - var pass = $(this).prev().find('[type="password"]').val(); - - $(this).attr('title', pass); - }); - }); - $( ".download" ).button({ icons: { primary: " ui-icon-arrowthickstop-1-s"} }); @@ -52,9 +43,29 @@ $(".help-box").dialog({autoOpen: false, title: '', width: screen.width / 2.5 }); - $('#passGen').click(function () { - password(11, true, true); - }); + $('.passwordfield__input').parent().each(function(){ + var target = $(this).find('.passwordfield__input').parent(); + var targetId = $(this).find('.passwordfield__input').attr('id'); + + $(this) + .after('settings') + .after('remove_red_eye'); + + $('#passGen').each(function(){ + $(this).click(function () { + password(11, true, true, "targetId"); + }); + }); + + $(".showpass").each(function (index, input) { + // Cross-browser compatibility + $(this).on("mouseover", function () { + var pass = $('#' + targetId).val(); + + $(this).attr('title', pass); + }); + }); + }) // Stick the #nav to the top of the window var nav = $('#actionsBar'); diff --git a/inc/themes/material-blue/js/functions.js b/inc/themes/material-blue/js/functions.js index f43c12ae..ae8b4fe0 100644 --- a/inc/themes/material-blue/js/functions.js +++ b/inc/themes/material-blue/js/functions.js @@ -997,9 +997,15 @@ function password(length, special, fancy, dstId) { } if (dstId) { + var dstParent = $('#' + dstId).parent(); + checkPassLevel(genPassword); - $('#' + dstId + ' input:password').val(genPassword); - $('#' + dstId + ' #passLevel').show(500); + + // Poner la clave en el input de la + dstParent.find('input:password').val(genPassword); + // Poner la clave en el input de repetición + $('#' + dstId + 'R').val(genPassword); + dstParent.find('#passLevel').show(500); } else { checkPassLevel(genPassword); $('input:password, input.password').val(genPassword); diff --git a/inc/themes/material-blue/login.inc b/inc/themes/material-blue/login.inc index e1acbc4d..fd4dc782 100644 --- a/inc/themes/material-blue/login.inc +++ b/inc/themes/material-blue/login.inc @@ -3,7 +3,7 @@
    -
    + @@ -104,11 +104,6 @@ diff --git a/js/jquery-ui.js b/js/jquery-ui.js deleted file mode 100644 index 0b2ad8ee..00000000 --- a/js/jquery-ui.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! jQuery UI - v1.10.3 - 2013-10-06 -* http://jqueryui.com -* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js -* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ - -(function(t,e){function i(e,i){var n,o,a,r=e.nodeName.toLowerCase();return"area"===r?(n=e.parentNode,o=n.name,e.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap=#"+o+"]")[0],!!a&&s(a)):!1):(/input|select|textarea|button|object/.test(r)?!e.disabled:"a"===r?e.href||i:i)&&s(e)}function s(e){return t.expr.filters.visible(e)&&!t(e).parents().addBack().filter(function(){return"hidden"===t.css(this,"visibility")}).length}var n=0,o=/^ui-id-\d+$/;t.ui=t.ui||{},t.extend(t.ui,{version:"1.10.3",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),t.fn.extend({focus:function(e){return function(i,s){return"number"==typeof i?this.each(function(){var e=this;setTimeout(function(){t(e).focus(),s&&s.call(e)},i)}):e.apply(this,arguments)}}(t.fn.focus),scrollParent:function(){var e;return e=t.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(t.css(this,"position"))&&/(auto|scroll)/.test(t.css(this,"overflow")+t.css(this,"overflow-y")+t.css(this,"overflow-x"))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(t.css(this,"overflow")+t.css(this,"overflow-y")+t.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!e.length?t(document):e},zIndex:function(i){if(i!==e)return this.css("zIndex",i);if(this.length)for(var s,n,o=t(this[0]);o.length&&o[0]!==document;){if(s=o.css("position"),("absolute"===s||"relative"===s||"fixed"===s)&&(n=parseInt(o.css("zIndex"),10),!isNaN(n)&&0!==n))return n;o=o.parent()}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++n)})},removeUniqueId:function(){return this.each(function(){o.test(this.id)&&t(this).removeAttr("id")})}}),t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])},focusable:function(e){return i(e,!isNaN(t.attr(e,"tabindex")))},tabbable:function(e){var s=t.attr(e,"tabindex"),n=isNaN(s);return(n||s>=0)&&i(e,!n)}}),t("").outerWidth(1).jquery||t.each(["Width","Height"],function(i,s){function n(e,i,s,n){return t.each(o,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),n&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var o="Width"===s?["Left","Right"]:["Top","Bottom"],a=s.toLowerCase(),r={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+s]=function(i){return i===e?r["inner"+s].call(this):this.each(function(){t(this).css(a,n(this,i)+"px")})},t.fn["outer"+s]=function(e,i){return"number"!=typeof e?r["outer"+s].call(this,e):this.each(function(){t(this).css(a,n(this,e,!0,i)+"px")})}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t("").data("a-b","a").removeData("a-b").data("a-b")&&(t.fn.removeData=function(e){return function(i){return arguments.length?e.call(this,t.camelCase(i)):e.call(this)}}(t.fn.removeData)),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),t.support.selectstart="onselectstart"in document.createElement("div"),t.fn.extend({disableSelection:function(){return this.bind((t.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(t){t.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),t.extend(t.ui,{plugin:{add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i){var s,n=t.plugins[e];if(n&&t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType)for(s=0;n.length>s;s++)t.options[n[s][0]]&&n[s][1].apply(t.element,i)}},hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)}})})(jQuery);(function(t,e){var i=0,s=Array.prototype.slice,n=t.cleanData;t.cleanData=function(e){for(var i,s=0;null!=(i=e[s]);s++)try{t(i).triggerHandler("remove")}catch(o){}n(e)},t.widget=function(i,s,n){var o,a,r,h,l={},c=i.split(".")[0];i=i.split(".")[1],o=c+"-"+i,n||(n=s,s=t.Widget),t.expr[":"][o.toLowerCase()]=function(e){return!!t.data(e,o)},t[c]=t[c]||{},a=t[c][i],r=t[c][i]=function(t,i){return this._createWidget?(arguments.length&&this._createWidget(t,i),e):new r(t,i)},t.extend(r,a,{version:n.version,_proto:t.extend({},n),_childConstructors:[]}),h=new s,h.options=t.widget.extend({},h.options),t.each(n,function(i,n){return t.isFunction(n)?(l[i]=function(){var t=function(){return s.prototype[i].apply(this,arguments)},e=function(t){return s.prototype[i].apply(this,t)};return function(){var i,s=this._super,o=this._superApply;return this._super=t,this._superApply=e,i=n.apply(this,arguments),this._super=s,this._superApply=o,i}}(),e):(l[i]=n,e)}),r.prototype=t.widget.extend(h,{widgetEventPrefix:a?h.widgetEventPrefix:i},l,{constructor:r,namespace:c,widgetName:i,widgetFullName:o}),a?(t.each(a._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,r,i._proto)}),delete a._childConstructors):s._childConstructors.push(r),t.widget.bridge(i,r)},t.widget.extend=function(i){for(var n,o,a=s.call(arguments,1),r=0,h=a.length;h>r;r++)for(n in a[r])o=a[r][n],a[r].hasOwnProperty(n)&&o!==e&&(i[n]=t.isPlainObject(o)?t.isPlainObject(i[n])?t.widget.extend({},i[n],o):t.widget.extend({},o):o);return i},t.widget.bridge=function(i,n){var o=n.prototype.widgetFullName||i;t.fn[i]=function(a){var r="string"==typeof a,h=s.call(arguments,1),l=this;return a=!r&&h.length?t.widget.extend.apply(null,[a].concat(h)):a,r?this.each(function(){var s,n=t.data(this,o);return n?t.isFunction(n[a])&&"_"!==a.charAt(0)?(s=n[a].apply(n,h),s!==n&&s!==e?(l=s&&s.jquery?l.pushStack(s.get()):s,!1):e):t.error("no such method '"+a+"' for "+i+" widget instance"):t.error("cannot call methods on "+i+" prior to initialization; "+"attempted to call method '"+a+"'")}):this.each(function(){var e=t.data(this,o);e?e.option(a||{})._init():t.data(this,o,new n(a,this))}),l}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
    ",options:{disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this.bindings=t(),this.hoverable=t(),this.focusable=t(),s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:t.noop,_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(t.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:t.noop,widget:function(){return this.element},option:function(i,s){var n,o,a,r=i;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof i)if(r={},n=i.split("."),i=n.shift(),n.length){for(o=r[i]=t.widget.extend({},this.options[i]),a=0;n.length-1>a;a++)o[n[a]]=o[n[a]]||{},o=o[n[a]];if(i=n.pop(),s===e)return o[i]===e?null:o[i];o[i]=s}else{if(s===e)return this.options[i]===e?null:this.options[i];r[i]=s}return this._setOptions(r),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return this.options[t]=e,"disabled"===t&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!e).attr("aria-disabled",e),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(i,s,n){var o,a=this;"boolean"!=typeof i&&(n=s,s=i,i=!1),n?(s=o=t(s),this.bindings=this.bindings.add(s)):(n=s,s=this.element,o=this.widget()),t.each(n,function(n,r){function h(){return i||a.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof r?a[r]:r).apply(a,arguments):e}"string"!=typeof r&&(h.guid=r.guid=r.guid||h.guid||t.guid++);var l=n.match(/^(\w+)\s*(.*)$/),c=l[1]+a.eventNamespace,u=l[2];u?o.delegate(u,c,h):s.bind(c,h)})},_off:function(t,e){e=(e||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.unbind(e).undelegate(e)},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){t(e.currentTarget).addClass("ui-state-hover")},mouseleave:function(e){t(e.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){t(e.currentTarget).addClass("ui-state-focus")},focusout:function(e){t(e.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}})})(jQuery);(function(t){var e=!1;t(document).mouseup(function(){e=!1}),t.widget("ui.mouse",{version:"1.10.3",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.bind("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).bind("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):undefined}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&t(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(i){if(!e){this._mouseStarted&&this._mouseUp(i),this._mouseDownEvent=i;var s=this,n=1===i.which,a="string"==typeof this.options.cancel&&i.target.nodeName?t(i.target).closest(this.options.cancel).length:!1;return n&&!a&&this._mouseCapture(i)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){s.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(i)&&this._mouseDelayMet(i)&&(this._mouseStarted=this._mouseStart(i)!==!1,!this._mouseStarted)?(i.preventDefault(),!0):(!0===t.data(i.target,this.widgetName+".preventClickEvent")&&t.removeData(i.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return s._mouseMove(t)},this._mouseUpDelegate=function(t){return s._mouseUp(t)},t(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),i.preventDefault(),e=!0,!0)):!0}},_mouseMove:function(e){return t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button?this._mouseUp(e):this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){return t(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),!1},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})})(jQuery);(function(t,e){function i(t,e,i){return[parseFloat(t[0])*(p.test(t[0])?e/100:1),parseFloat(t[1])*(p.test(t[1])?i/100:1)]}function s(e,i){return parseInt(t.css(e,i),10)||0}function n(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}t.ui=t.ui||{};var o,a=Math.max,r=Math.abs,l=Math.round,h=/left|center|right/,c=/top|center|bottom/,u=/[\+\-]\d+(\.[\d]+)?%?/,d=/^\w+/,p=/%$/,f=t.fn.position;t.position={scrollbarWidth:function(){if(o!==e)return o;var i,s,n=t("
    "),a=n.children()[0];return t("body").append(n),i=a.offsetWidth,n.css("overflow","scroll"),s=a.offsetWidth,i===s&&(s=n[0].clientWidth),n.remove(),o=i-s},getScrollInfo:function(e){var i=e.isWindow?"":e.element.css("overflow-x"),s=e.isWindow?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widths?"left":i>0?"right":"center",vertical:0>o?"top":n>0?"bottom":"middle"};u>p&&p>r(i+s)&&(l.horizontal="center"),d>g&&g>r(n+o)&&(l.vertical="middle"),l.important=a(r(i),r(s))>a(r(n),r(o))?"horizontal":"vertical",e.using.call(this,t,l)}),c.offset(t.extend(M,{using:h}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,o=s.width,r=t.left-e.collisionPosition.marginLeft,l=n-r,h=r+e.collisionWidth-o-n;e.collisionWidth>o?l>0&&0>=h?(i=t.left+l+e.collisionWidth-o-n,t.left+=l-i):t.left=h>0&&0>=l?n:l>h?n+o-e.collisionWidth:n:l>0?t.left+=l:h>0?t.left-=h:t.left=a(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,o=e.within.height,r=t.top-e.collisionPosition.marginTop,l=n-r,h=r+e.collisionHeight-o-n;e.collisionHeight>o?l>0&&0>=h?(i=t.top+l+e.collisionHeight-o-n,t.top+=l-i):t.top=h>0&&0>=l?n:l>h?n+o-e.collisionHeight:n:l>0?t.top+=l:h>0?t.top-=h:t.top=a(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,a=n.width,l=n.isWindow?n.scrollLeft:n.offset.left,h=t.left-e.collisionPosition.marginLeft,c=h-l,u=h+e.collisionWidth-a-l,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-a-o,(0>i||r(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-l,(s>0||u>r(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,a=n.height,l=n.isWindow?n.scrollTop:n.offset.top,h=t.top-e.collisionPosition.marginTop,c=h-l,u=h+e.collisionHeight-a-l,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-a-o,t.top+p+f+g>c&&(0>s||r(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-l,t.top+p+f+g>u&&(i>0||u>r(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}},function(){var e,i,s,n,o,a=document.getElementsByTagName("body")[0],r=document.createElement("div");e=document.createElement(a?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},a&&t.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(o in s)e.style[o]=s[o];e.appendChild(r),i=a||document.documentElement,i.insertBefore(e,i.firstChild),r.style.cssText="position: absolute; left: 10.7432222px;",n=t(r).offset().left,t.support.offsetFractions=n>10&&11>n,e.innerHTML="",i.removeChild(e)}()})(jQuery);(function(t){t.widget("ui.draggable",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"!==this.options.helper||/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},_destroy:function(){this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy()},_mouseCapture:function(e){var i=this.options;return this.helper||i.disabled||t(e.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(e),this.handle?(t(i.iframeFix===!0?"iframe":i.iframeFix).each(function(){t("
    ").css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(t(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offsetParent=this.helper.offsetParent(),this.offsetParentCssPosition=this.offsetParent.css("position"),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},this.offset.scroll=!1,t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",e)===!1?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_mouseDrag:function(e,i){if("fixed"===this.offsetParentCssPosition&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",e,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),"original"!==this.options.helper||t.contains(this.element[0].ownerDocument,this.element[0])?("invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",e)!==!1&&i._clear()}):this._trigger("stop",e)!==!1&&this._clear(),!1):!1},_mouseUp:function(e){return t("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(e){return this.options.handle?!!t(e.target).closest(this.element.find(this.options.handle)).length:!0},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return s.parents("body").length||s.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s[0]===this.element[0]||/(fixed|absolute)/.test(s.css("position"))||s.css("position","absolute"),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.element.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;return n.containment?"window"===n.containment?(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):"document"===n.containment?(this.containment=[0,0,t(document).width()-this.helperProportions.width-this.margins.left,(t(document).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):n.containment.constructor===Array?(this.containment=n.containment,undefined):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=t(n.containment),s=i[0],s&&(e="hidden"!==i.css("overflow"),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(e?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=i),undefined):(this.containment=null,undefined)},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent;return this.offset.scroll||(this.offset.scroll={top:n.scrollTop(),left:n.scrollLeft()}),{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top)*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)*s}},_generatePosition:function(e){var i,s,n,a,o=this.options,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,l=e.pageX,h=e.pageY;return this.offset.scroll||(this.offset.scroll={top:r.scrollTop(),left:r.scrollLeft()}),this.originalPosition&&(this.containment&&(this.relative_container?(s=this.relative_container.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,e.pageX-this.offset.click.lefti[2]&&(l=i[2]+this.offset.click.left),e.pageY-this.offset.click.top>i[3]&&(h=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,h=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((l-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,l=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a)),{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top),left:l-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s]),"drag"===e&&(this.positionAbs=this._convertPositionTo("absolute")),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i){var s=t(this).data("ui-draggable"),n=s.options,a=t.extend({},i,{item:s.element});s.sortables=[],t(n.connectToSortable).each(function(){var i=t.data(this,"ui-sortable");i&&!i.options.disabled&&(s.sortables.push({instance:i,shouldRevert:i.options.revert}),i.refreshPositions(),i._trigger("activate",e,a))})},stop:function(e,i){var s=t(this).data("ui-draggable"),n=t.extend({},i,{item:s.element});t.each(s.sortables,function(){this.instance.isOver?(this.instance.isOver=0,s.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=this.shouldRevert),this.instance._mouseStop(e),this.instance.options.helper=this.instance.options._helper,"original"===s.options.helper&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",e,n))})},drag:function(e,i){var s=t(this).data("ui-draggable"),n=this;t.each(s.sortables,function(){var a=!1,o=this;this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this.instance._intersectsWith(this.instance.containerCache)&&(a=!0,t.each(s.sortables,function(){return this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this!==o&&this.instance._intersectsWith(this.instance.containerCache)&&t.contains(o.instance.element[0],this.instance.element[0])&&(a=!1),a})),a?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=t(n).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return i.helper[0]},e.target=this.instance.currentItem[0],this.instance._mouseCapture(e,!0),this.instance._mouseStart(e,!0,!0),this.instance.offset.click.top=s.offset.click.top,this.instance.offset.click.left=s.offset.click.left,this.instance.offset.parent.left-=s.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=s.offset.parent.top-this.instance.offset.parent.top,s._trigger("toSortable",e),s.dropped=this.instance.element,s.currentItem=s.element,this.instance.fromOutside=s),this.instance.currentItem&&this.instance._mouseDrag(e)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",e,this.instance._uiHash(this.instance)),this.instance._mouseStop(e,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),s._trigger("fromSortable",e),s.dropped=!1)})}}),t.ui.plugin.add("draggable","cursor",{start:function(){var e=t("body"),i=t(this).data("ui-draggable").options;e.css("cursor")&&(i._cursor=e.css("cursor")),e.css("cursor",i.cursor)},stop:function(){var e=t(this).data("ui-draggable").options;e._cursor&&t("body").css("cursor",e._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i){var s=t(i.helper),n=t(this).data("ui-draggable").options;s.css("opacity")&&(n._opacity=s.css("opacity")),s.css("opacity",n.opacity)},stop:function(e,i){var s=t(this).data("ui-draggable").options;s._opacity&&t(i.helper).css("opacity",s._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(){var e=t(this).data("ui-draggable");e.scrollParent[0]!==document&&"HTML"!==e.scrollParent[0].tagName&&(e.overflowOffset=e.scrollParent.offset())},drag:function(e){var i=t(this).data("ui-draggable"),s=i.options,n=!1;i.scrollParent[0]!==document&&"HTML"!==i.scrollParent[0].tagName?(s.axis&&"x"===s.axis||(i.overflowOffset.top+i.scrollParent[0].offsetHeight-e.pageY=0;u--)r=p.snapElements[u].left,l=r+p.snapElements[u].width,h=p.snapElements[u].top,c=h+p.snapElements[u].height,r-g>v||m>l+g||h-g>b||_>c+g||!t.contains(p.snapElements[u].item.ownerDocument,p.snapElements[u].item)?(p.snapElements[u].snapping&&p.options.snap.release&&p.options.snap.release.call(p.element,e,t.extend(p._uiHash(),{snapItem:p.snapElements[u].item})),p.snapElements[u].snapping=!1):("inner"!==f.snapMode&&(s=g>=Math.abs(h-b),n=g>=Math.abs(c-_),a=g>=Math.abs(r-v),o=g>=Math.abs(l-m),s&&(i.position.top=p._convertPositionTo("relative",{top:h-p.helperProportions.height,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:c,left:0}).top-p.margins.top),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r-p.helperProportions.width}).left-p.margins.left),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:l}).left-p.margins.left)),d=s||n||a||o,"outer"!==f.snapMode&&(s=g>=Math.abs(h-_),n=g>=Math.abs(c-b),a=g>=Math.abs(r-m),o=g>=Math.abs(l-v),s&&(i.position.top=p._convertPositionTo("relative",{top:h,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:c-p.helperProportions.height,left:0}).top-p.margins.top),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r}).left-p.margins.left),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:l-p.helperProportions.width}).left-p.margins.left)),!p.snapElements[u].snapping&&(s||n||a||o||d)&&p.options.snap.snap&&p.options.snap.snap.call(p.element,e,t.extend(p._uiHash(),{snapItem:p.snapElements[u].item})),p.snapElements[u].snapping=s||n||a||o||d)}}),t.ui.plugin.add("draggable","stack",{start:function(){var e,i=this.data("ui-draggable").options,s=t.makeArray(t(i.stack)).sort(function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)});s.length&&(e=parseInt(t(s[0]).css("zIndex"),10)||0,t(s).each(function(i){t(this).css("zIndex",e+i)}),this.css("zIndex",e+s.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i){var s=t(i.helper),n=t(this).data("ui-draggable").options;s.css("zIndex")&&(n._zIndex=s.css("zIndex")),s.css("zIndex",n.zIndex)},stop:function(e,i){var s=t(this).data("ui-draggable").options;s._zIndex&&t(i.helper).css("zIndex",s._zIndex)}})})(jQuery);(function(t){function e(t,e,i){return t>e&&e+i>t}t.widget("ui.droppable",{version:"1.10.3",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e=this.options,i=e.accept;this.isover=!1,this.isout=!0,this.accept=t.isFunction(i)?i:function(t){return t.is(i)},this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight},t.ui.ddmanager.droppables[e.scope]=t.ui.ddmanager.droppables[e.scope]||[],t.ui.ddmanager.droppables[e.scope].push(this),e.addClasses&&this.element.addClass("ui-droppable")},_destroy:function(){for(var e=0,i=t.ui.ddmanager.droppables[this.options.scope];i.length>e;e++)i[e]===this&&i.splice(e,1);this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(e,i){"accept"===e&&(this.accept=t.isFunction(i)?i:function(t){return t.is(i)}),t.Widget.prototype._setOption.apply(this,arguments)},_activate:function(e){var i=t.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",e,this.ui(i)))},_drop:function(e,i){var s=i||t.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var e=t.data(this,"ui-droppable");return e.options.greedy&&!e.options.disabled&&e.options.scope===s.options.scope&&e.accept.call(e.element[0],s.currentItem||s.element)&&t.ui.intersect(s,t.extend(e,{offset:e.element.offset()}),e.options.tolerance)?(n=!0,!1):undefined}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",e,this.ui(s)),this.element):!1):!1},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}}}),t.ui.intersect=function(t,i,s){if(!i.offset)return!1;var n,a,o=(t.positionAbs||t.position.absolute).left,r=o+t.helperProportions.width,l=(t.positionAbs||t.position.absolute).top,h=l+t.helperProportions.height,c=i.offset.left,u=c+i.proportions.width,d=i.offset.top,p=d+i.proportions.height;switch(s){case"fit":return o>=c&&u>=r&&l>=d&&p>=h;case"intersect":return o+t.helperProportions.width/2>c&&u>r-t.helperProportions.width/2&&l+t.helperProportions.height/2>d&&p>h-t.helperProportions.height/2;case"pointer":return n=(t.positionAbs||t.position.absolute).left+(t.clickOffset||t.offset.click).left,a=(t.positionAbs||t.position.absolute).top+(t.clickOffset||t.offset.click).top,e(a,d,i.proportions.height)&&e(n,c,i.proportions.width);case"touch":return(l>=d&&p>=l||h>=d&&p>=h||d>l&&h>p)&&(o>=c&&u>=o||r>=c&&u>=r||c>o&&r>u);default:return!1}},t.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,i){var s,n,a=t.ui.ddmanager.droppables[e.options.scope]||[],o=i?i.type:null,r=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||e&&!a[s].accept.call(a[s].element[0],e.currentItem||e.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions.height=0;continue t}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions={width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight})}},drop:function(e,i){var s=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&t.ui.intersect(e,this,this.options.tolerance)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(e,i){e.element.parentsUntil("body").bind("scroll.droppable",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=t.ui.intersect(e,this,this.options.tolerance),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return t.data(this,"ui-droppable").options.scope===n}),a.length&&(s=t.data(a[0],"ui-droppable"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(e,i){e.element.parentsUntil("body").unbind("scroll.droppable"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}}})(jQuery);(function(t){function e(t){return parseInt(t,10)||0}function i(t){return!isNaN(parseInt(t,10))}t.widget("ui.resizable",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_create:function(){var e,i,s,n,o,a=this,r=this.options;if(this.element.addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(t("
    ").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.data("ui-resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),e=this.handles.split(","),this.handles={},i=0;e.length>i;i++)s=t.trim(e[i]),o="ui-resizable-"+s,n=t("
    "),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String&&(this.handles[i]=t(this.handles[i],this.element).show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),t(this.handles[i]).length},this._renderAxis(this.element),this._handles=t(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){a.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),a.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),t(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(t(this).removeClass("ui-resizable-autohide"),a._handles.show())}).mouseleave(function(){r.disabled||a.resizing||(t(this).addClass("ui-resizable-autohide"),a._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(i){var s,n,o,a=this.options,r=this.element.position(),l=this.element;return this.resizing=!0,/absolute/.test(l.css("position"))?l.css({position:"absolute",top:l.css("top"),left:l.css("left")}):l.is(".ui-draggable")&&l.css({position:"absolute",top:r.top,left:r.left}),this._renderProxy(),s=e(this.helper.css("left")),n=e(this.helper.css("top")),a.containment&&(s+=t(a.containment).scrollLeft()||0,n+=t(a.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:s,top:n},this.size=this._helper?{width:l.outerWidth(),height:l.outerHeight()}:{width:l.width(),height:l.height()},this.originalSize=this._helper?{width:l.outerWidth(),height:l.outerHeight()}:{width:l.width(),height:l.height()},this.originalPosition={left:s,top:n},this.sizeDiff={width:l.outerWidth()-l.width(),height:l.outerHeight()-l.height()},this.originalMousePosition={left:i.pageX,top:i.pageY},this.aspectRatio="number"==typeof a.aspectRatio?a.aspectRatio:this.originalSize.width/this.originalSize.height||1,o=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===o?this.axis+"-resize":o),l.addClass("ui-resizable-resizing"),this._propagate("start",i),!0},_mouseDrag:function(e){var i,s=this.helper,n={},o=this.originalMousePosition,a=this.axis,r=this.position.top,l=this.position.left,h=this.size.width,c=this.size.height,u=e.pageX-o.left||0,d=e.pageY-o.top||0,p=this._change[a];return p?(i=p.apply(this,[e,u,d]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),this.position.top!==r&&(n.top=this.position.top+"px"),this.position.left!==l&&(n.left=this.position.left+"px"),this.size.width!==h&&(n.width=this.size.width+"px"),this.size.height!==c&&(n.height=this.size.height+"px"),s.css(n),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(n)||this._trigger("resize",e,this.ui()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,l,h=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&t.ui.hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null,l=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null,h.animate||this.element.css(t.extend(a,{top:l,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!h.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(t){var e,s,n,o,a,r=this.options;a={minWidth:i(r.minWidth)?r.minWidth:0,maxWidth:i(r.maxWidth)?r.maxWidth:1/0,minHeight:i(r.minHeight)?r.minHeight:0,maxHeight:i(r.maxHeight)?r.maxHeight:1/0},(this._aspectRatio||t)&&(e=a.minHeight*this.aspectRatio,n=a.minWidth/this.aspectRatio,s=a.maxHeight*this.aspectRatio,o=a.maxWidth/this.aspectRatio,e>a.minWidth&&(a.minWidth=e),n>a.minHeight&&(a.minHeight=n),a.maxWidth>s&&(a.maxWidth=s),a.maxHeight>o&&(a.maxHeight=o)),this._vBoundaries=a},_updateCache:function(t){this.offset=this.helper.offset(),i(t.left)&&(this.position.left=t.left),i(t.top)&&(this.position.top=t.top),i(t.height)&&(this.size.height=t.height),i(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,s=this.size,n=this.axis;return i(t.height)?t.width=t.height*this.aspectRatio:i(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===n&&(t.left=e.left+(s.width-t.width),t.top=null),"nw"===n&&(t.top=e.top+(s.height-t.height),t.left=e.left+(s.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,s=this.axis,n=i(t.width)&&e.maxWidth&&e.maxWidtht.width,r=i(t.height)&&e.minHeight&&e.minHeight>t.height,l=this.originalPosition.left+this.originalSize.width,h=this.position.top+this.size.height,c=/sw|nw|w/.test(s),u=/nw|ne|n/.test(s);return a&&(t.width=e.minWidth),r&&(t.height=e.minHeight),n&&(t.width=e.maxWidth),o&&(t.height=e.maxHeight),a&&c&&(t.left=l-e.minWidth),n&&c&&(t.left=l-e.maxWidth),r&&u&&(t.top=h-e.minHeight),o&&u&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_proportionallyResize:function(){if(this._proportionallyResizeElements.length){var t,e,i,s,n,o=this.helper||this.element;for(t=0;this._proportionallyResizeElements.length>t;t++){if(n=this._proportionallyResizeElements[t],!this.borderDif)for(this.borderDif=[],i=[n.css("borderTopWidth"),n.css("borderRightWidth"),n.css("borderBottomWidth"),n.css("borderLeftWidth")],s=[n.css("paddingTop"),n.css("paddingRight"),n.css("paddingBottom"),n.css("paddingLeft")],e=0;i.length>e;e++)this.borderDif[e]=(parseInt(i[e],10)||0)+(parseInt(s[e],10)||0);n.css({height:o.height()-this.borderDif[0]-this.borderDif[2]||0,width:o.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
    "),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).data("ui-resizable"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&t.ui.hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,l={width:i.size.width-r,height:i.size.height-a},h=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,c=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(l,c&&h?{top:c,left:h}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var i,s,n,o,a,r,l,h=t(this).data("ui-resizable"),c=h.options,u=h.element,d=c.containment,p=d instanceof t?d.get(0):/parent/.test(d)?u.parent().get(0):d;p&&(h.containerElement=t(p),/document/.test(d)||d===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(i=t(p),s=[],t(["Top","Right","Left","Bottom"]).each(function(t,n){s[t]=e(i.css("padding"+n))}),h.containerOffset=i.offset(),h.containerPosition=i.position(),h.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},n=h.containerOffset,o=h.containerSize.height,a=h.containerSize.width,r=t.ui.hasScroll(p,"left")?p.scrollWidth:a,l=t.ui.hasScroll(p)?p.scrollHeight:o,h.parentData={element:p,left:n.left,top:n.top,width:r,height:l}))},resize:function(e){var i,s,n,o,a=t(this).data("ui-resizable"),r=a.options,l=a.containerOffset,h=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement;d[0]!==document&&/static/.test(d.css("position"))&&(u=l),h.left<(a._helper?l.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-l.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio),a.position.left=r.helper?l.left:0),h.top<(a._helper?l.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-l.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio),a.position.top=a._helper?l.top:0),a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top,i=Math.abs((a._helper?a.offset.left-u.left:a.offset.left-u.left)+a.sizeDiff.width),s=Math.abs((a._helper?a.offset.top-u.top:a.offset.top-l.top)+a.sizeDiff.height),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o&&(i-=a.parentData.left),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio))},stop:function(){var e=t(this).data("ui-resizable"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),l=a.outerWidth()-e.sizeDiff.width,h=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:l,height:h}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:l,height:h})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).data("ui-resizable"),i=e.options,s=function(e){t(e).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseInt(e.width(),10),height:parseInt(e.height(),10),left:parseInt(e.css("left"),10),top:parseInt(e.css("top"),10)})})};"object"!=typeof i.alsoResize||i.alsoResize.parentNode?s(i.alsoResize):i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):t.each(i.alsoResize,function(t){s(t)})},resize:function(e,i){var s=t(this).data("ui-resizable"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0},l=function(e,s){t(e).each(function(){var e=t(this),n=t(this).data("ui-resizable-alsoresize"),o={},a=s&&s.length?s:e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(a,function(t,e){var i=(n[e]||0)+(r[e]||0);i&&i>=0&&(o[e]=i||null)}),e.css(o)})};"object"!=typeof n.alsoResize||n.alsoResize.nodeType?l(n.alsoResize):t.each(n.alsoResize,function(t,e){l(t,e)})},stop:function(){t(this).removeData("resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).data("ui-resizable"),i=e.options,s=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).data("ui-resizable");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).data("ui-resizable");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e=t(this).data("ui-resizable"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,a=e.axis,r="number"==typeof i.grid?[i.grid,i.grid]:i.grid,l=r[0]||1,h=r[1]||1,c=Math.round((s.width-n.width)/l)*l,u=Math.round((s.height-n.height)/h)*h,d=n.width+c,p=n.height+u,f=i.maxWidth&&d>i.maxWidth,g=i.maxHeight&&p>i.maxHeight,m=i.minWidth&&i.minWidth>d,v=i.minHeight&&i.minHeight>p;i.grid=r,m&&(d+=l),v&&(p+=h),f&&(d-=l),g&&(p-=h),/^(se|s|e)$/.test(a)?(e.size.width=d,e.size.height=p):/^(ne)$/.test(a)?(e.size.width=d,e.size.height=p,e.position.top=o.top-u):/^(sw)$/.test(a)?(e.size.width=d,e.size.height=p,e.position.left=o.left-c):(e.size.width=d,e.size.height=p,e.position.top=o.top-u,e.position.left=o.left-c)}})})(jQuery);(function(t){t.widget("ui.selectable",t.ui.mouse,{version:"1.10.3",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){e=t(i.options.filter,i.element[0]),e.addClass("ui-selectee"),e.each(function(){var e=t(this),i=e.offset();t.data(this,"selectable-item",{element:this,$element:e,left:i.left,top:i.top,right:i.left+e.outerWidth(),bottom:i.top+e.outerHeight(),startselected:!1,selected:e.hasClass("ui-selected"),selecting:e.hasClass("ui-selecting"),unselecting:e.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=e.addClass("ui-selectee"),this._mouseInit(),this.helper=t("
    ")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(e){var i=this,s=this.options;this.opos=[e.pageX,e.pageY],this.options.disabled||(this.selectees=t(s.filter,this.element[0]),this._trigger("start",e),t(s.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=t.data(this,"selectable-item");s.startselected=!0,e.metaKey||e.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",e,{unselecting:s.element}))}),t(e.target).parents().addBack().each(function(){var s,n=t.data(this,"selectable-item");return n?(s=!e.metaKey&&!e.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",e,{selecting:n.element}):i._trigger("unselecting",e,{unselecting:n.element}),!1):undefined}))},_mouseDrag:function(e){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,o=this.opos[0],a=this.opos[1],r=e.pageX,l=e.pageY;return o>r&&(i=r,r=o,o=i),a>l&&(i=l,l=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:l-a}),this.selectees.each(function(){var i=t.data(this,"selectable-item"),h=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?h=!(i.left>r||o>i.right||i.top>l||a>i.bottom):"fit"===n.tolerance&&(h=i.left>o&&r>i.right&&i.top>a&&l>i.bottom),h?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",e,{unselecting:i.element}))),i.selected&&(e.metaKey||e.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",e,{unselecting:i.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,t(".ui-unselecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",e,{unselected:s.element})}),t(".ui-selecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",e,{selected:s.element})}),this._trigger("stop",e),this.helper.remove(),!1}})})(jQuery);(function(t){function e(t,e,i){return t>e&&e+i>t}function i(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))}t.widget("ui.sortable",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_create:function(){var t=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?"x"===t.axis||i(this.items[0].item):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_setOption:function(e,i){"disabled"===e?(this.options[e]=i,this.widget().toggleClass("ui-sortable-disabled",!!i)):t.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(e,i){var s=null,n=!1,o=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(e),t(e.target).parents().each(function(){return t.data(this,o.widgetName+"-item")===o?(s=t(this),!1):undefined}),t.data(e.target,o.widgetName+"-item")===o&&(s=t(e.target)),s?!this.options.handle||i||(t(this.options.handle,s).find("*").addBack().each(function(){this===e.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(e,i,s){var n,o,a=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,a.cursorAt&&this._adjustOffsetFromHelper(a.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),a.containment&&this._setContainment(),a.cursor&&"auto"!==a.cursor&&(o=this.document.find("body"),this.storedCursor=o.css("cursor"),o.css("cursor",a.cursor),this.storedStylesheet=t("").appendTo(o)),a.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",a.opacity)),a.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",a.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,o,a=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY=0;i--)if(s=this.items[i],n=s.item[0],o=this._intersectsWithPointer(s),o&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===o?"next":"prev"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===o?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),o=this.options.axis,a={};o&&"x"!==o||(a.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft)),o&&"y"!==o||(a.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(a,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,h=r+t.height,l=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+l>r&&h>s+l,d="y"===this.options.axis||e+c>o&&a>e+c,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:e+this.helperProportions.width/2>o&&a>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var i="x"===this.options.axis||e(this.positionAbs.top+this.offset.click.top,t.top,t.height),s="y"===this.options.axis||e(this.positionAbs.left+this.offset.click.left,t.left,t.width),n=i&&s,o=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return n?this.floating?a&&"right"===a||"down"===o?2:1:o&&("down"===o?2:1):!1},_intersectsWithSides:function(t){var i=e(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),s=e(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),n=this._getDragVerticalDirection(),o=this._getDragHorizontalDirection();return this.floating&&o?"right"===o&&s||"left"===o&&!s:n&&("down"===n&&i||"up"===n&&!i)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){var i,s,n,o,a=[],r=[],h=this._connectWith();if(h&&e)for(i=h.length-1;i>=0;i--)for(n=t(h[i]),s=n.length-1;s>=0;s--)o=t.data(n[s],this.widgetFullName),o&&o!==this&&!o.options.disabled&&r.push([t.isFunction(o.options.items)?o.options.items.call(o.element):t(o.options.items,o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),o]);for(r.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),i=r.length-1;i>=0;i--)r[i][0].each(function(){a.push(this)});return t(a)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,o,a,r,h,l,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i]),s=n.length-1;s>=0;s--)o=t.data(n[s],this.widgetFullName),o&&o!==this&&!o.options.disabled&&(u.push([t.isFunction(o.options.items)?o.options.items.call(o.element[0],e,{item:this.currentItem}):t(o.options.items,o.element),o]),this.containers.push(o));for(i=u.length-1;i>=0;i--)for(a=u[i][1],r=u[i][0],s=0,l=r.length;l>s;s++)h=t(r[s]),h.data(this.widgetName+"-item",a),c.push({item:h,instance:a,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,o;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),o=n.offset(),s.left=o.left,s.top=o.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)o=this.containers[i].element.offset(),this.containers[i].containerCache.left=o.left,this.containers[i].containerCache.top=o.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]).addClass(i||e.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tr"===s?e.currentItem.children().each(function(){t("
     
    "+"",N=u?"":"",k=0;7>k;k++)P=(k+c)%7,N+="=5?" class='ui-datepicker-week-end'":"")+">"+""+p[P]+"";for(I+=N+"",T=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,T)),S=(this._getFirstDayOfMonth(te,Z)-c+7)%7,E=Math.ceil((S+T)/7),A=Q?this.maxRows>E?this.maxRows:E:E,this.maxRows=A,F=this._daylightSavingAdjust(new Date(te,Z,1-S)),Y=0;A>Y;Y++){for(I+="",O=u?"":"",k=0;7>k;k++)H=m?m.apply(t.input?t.input[0]:null,[F]):[!0,""],W=F.getMonth()!==Z,L=W&&!_||!H[0]||V&&V>F||J&&F>J,O+="",F.setDate(F.getDate()+1),F=this._daylightSavingAdjust(F);I+=O+""}Z++,Z>11&&(Z=0,te++),I+="
    "+this._get(t,"weekHeader")+"
    "+this._get(t,"calculateWeek")(F)+""+(W&&!v?" ":L?""+F.getDate()+"":""+F.getDate()+"")+"
    "+(Q?""+(X[0]>0&&x===X[1]-1?"
    ":""):""),w+=I}y+=w}return y+=h,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,a,r,o){var l,h,c,u,d,p,f,g,m=this._get(t,"changeMonth"),v=this._get(t,"changeYear"),_=this._get(t,"showMonthAfterYear"),b="
    ",y="";if(a||!m)y+=""+r[e]+"";else{for(l=s&&s.getFullYear()===i,h=n&&n.getFullYear()===i,y+=""}if(_||(b+=y+(!a&&m&&v?"":" ")),!t.yearshtml)if(t.yearshtml="",a||!v)b+=""+i+"";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10); -return isNaN(e)?d:e},f=p(u[0]),g=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,g=n?Math.min(g,n.getFullYear()):g,t.yearshtml+="",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),_&&(b+=(!a&&m&&v?"":" ")+y),b+="
    "},_adjustInstDate:function(t,e,i){var s=t.drawYear+("Y"===i?e:0),n=t.drawMonth+("M"===i?e:0),a=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),r=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,a)));t.selectedDay=r.getDate(),t.drawMonth=t.selectedMonth=r.getMonth(),t.drawYear=t.selectedYear=r.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),a=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(t,a)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),a=this._getMinMaxDate(t,"max"),r=null,o=null,l=this._get(t,"yearRange");return l&&(i=l.split(":"),s=(new Date).getFullYear(),r=parseInt(i[0],10),o=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(r+=s),i[1].match(/[+\-].*/)&&(o+=s)),(!n||e.getTime()>=n.getTime())&&(!a||e.getTime()<=a.getTime())&&(!r||e.getFullYear()>=r)&&(!o||o>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).mousedown(t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new i,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.10.3"})(jQuery);(function(t){var e={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},i={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0};t.widget("ui.dialog",{version:"1.10.3",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._destroyOverlay(),this.opener.filter(":focusable").focus().length||t(this.document[0].activeElement).blur(),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,e){var i=!!this.uiDialog.nextAll(":visible").insertBefore(this.uiDialog).length;return i&&!e&&this._trigger("focus",t),i},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),undefined):(this._isOpen=!0,this.opener=t(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._trigger("open"),undefined)},_focusTabbable:function(){var t=this.element.find("[autofocus]");t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).focus()},_keepFocus:function(e){function i(){var e=this.document[0].activeElement,i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("
    ").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),undefined;if(e.keyCode===t.ui.keyCode.TAB){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(n.focus(1),e.preventDefault()):(s.focus(1),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("
    ").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=t("").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(e),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title||t.html(" "),t.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=t("
    ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("
    ").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),undefined):(t.each(i,function(i,s){var n,a;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(e.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,t("",s).button(a).appendTo(e.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),undefined)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){t(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,a){s.position=[a.position.left-i.document.scrollLeft(),a.position.top-i.document.scrollTop()],t(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(a))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){t(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,a){s.height=t(this).height(),s.width=t(this).width(),t(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(a))}}).css("position",a)},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(s){var n=this,a=!1,o={};t.each(s,function(t,s){n._setOption(t,s),t in e&&(a=!0),t in i&&(o[t]=s)}),a&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",o)},_setOption:function(t,e){var i,s,n=this.uiDialog;"dialogClass"===t&&n.removeClass(this.options.dialogClass).addClass(e),"disabled"!==t&&(this._super(t,e),"appendTo"===t&&this.uiDialog.appendTo(this._appendTo()),"buttons"===t&&this._createButtons(),"closeText"===t&&this.uiDialogTitlebarClose.button({label:""+e}),"draggable"===t&&(i=n.is(":data(ui-draggable)"),i&&!e&&n.draggable("destroy"),!i&&e&&this._makeDraggable()),"position"===t&&this._position(),"resizable"===t&&(s=n.is(":data(ui-resizable)"),s&&!e&&n.resizable("destroy"),s&&"string"==typeof e&&n.resizable("option","handles",e),s||e===!1||this._makeResizable()),"title"===t&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("
    ").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=this,i=this.widgetFullName;t.ui.dialog.overlayInstances||this._delay(function(){t.ui.dialog.overlayInstances&&this.document.bind("focusin.dialog",function(s){e._allowInteraction(s)||(s.preventDefault(),t(".ui-dialog:visible:last .ui-dialog-content").data(i)._focusTabbable())})}),this.overlay=t("
    ").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),t.ui.dialog.overlayInstances++}},_destroyOverlay:function(){this.options.modal&&this.overlay&&(t.ui.dialog.overlayInstances--,t.ui.dialog.overlayInstances||this.document.unbind("focusin.dialog"),this.overlay.remove(),this.overlay=null)}}),t.ui.dialog.overlayInstances=0,t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{_position:function(){var e,i=this.options.position,s=[],n=[0,0];i?(("string"==typeof i||"object"==typeof i&&"0"in i)&&(s=i.split?i.split(" "):[i[0],i[1]],1===s.length&&(s[1]=s[0]),t.each(["left","top"],function(t,e){+s[t]===s[t]&&(n[t]=s[t],s[t]=e)}),i={my:s[0]+(0>n[0]?n[0]:"+"+n[0])+" "+s[1]+(0>n[1]?n[1]:"+"+n[1]),at:s.join(" ")}),i=t.extend({},t.ui.dialog.prototype.options.position,i)):i=t.ui.dialog.prototype.options.position,e=this.uiDialog.is(":visible"),e||this.uiDialog.show(),this.uiDialog.position(i),e||this.uiDialog.hide()}})})(jQuery);(function(t){t.widget("ui.menu",{version:"1.10.3",defaultElement:"
      ",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content ui-corner-all").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}).bind("click"+this.eventNamespace,t.proxy(function(t){this.options.disabled&&t.preventDefault()},this)),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item > a":function(t){t.preventDefault()},"click .ui-state-disabled > a":function(t){t.preventDefault()},"click .ui-menu-item:has(a)":function(e){var i=t(e.target).closest(".ui-menu-item");!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.mouseHandled=!0,this.select(e),i.has(".ui-menu").length?this.expand(e):this.element.is(":focus")||(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){var i=t(e.currentTarget);i.siblings().children(".ui-state-active").removeClass("ui-state-active"),this.focus(e,i)},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.children(".ui-menu-item").eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){t.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){t(e.target).closest(".ui-menu").length||this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").children("a").removeUniqueId().removeClass("ui-corner-all ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var e=t(this);e.data("ui-menu-submenu-carat")&&e.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(e){function i(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}var s,n,a,o,r,l=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:l=!1,n=this.previousFilter||"",a=String.fromCharCode(e.keyCode),o=!1,clearTimeout(this.filterTimer),a===n?o=!0:a=n+a,r=RegExp("^"+i(a),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return r.test(t(this).children("a").text())}),s=o&&-1!==s.index(this.active.next())?this.active.nextAll(".ui-menu-item"):s,s.length||(a=String.fromCharCode(e.keyCode),r=RegExp("^"+i(a),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return r.test(t(this).children("a").text())})),s.length?(this.focus(e,s),s.length>1?(this.previousFilter=a,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter):delete this.previousFilter}l&&e.preventDefault()},_activate:function(t){this.active.is(".ui-state-disabled")||(this.active.children("a[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i=this.options.icons.submenu,s=this.element.find(this.options.menus);s.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-corner-all").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),s=e.prev("a"),n=t("").addClass("ui-menu-icon ui-icon "+i).data("ui-menu-submenu-carat",!0);s.attr("aria-haspopup","true").prepend(n),e.attr("aria-labelledby",s.attr("id"))}),e=s.add(this.element),e.children(":not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","presentation").children("a").uniqueId().addClass("ui-corner-all").attr({tabIndex:-1,role:this._itemRole()}),e.children(":not(.ui-menu-item)").each(function(){var e=t(this);/[^\-\u2014\u2013\s]/.test(e.text())||e.addClass("ui-widget-content ui-menu-divider")}),e.children(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){"icons"===t&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(e.submenu),this._super(t,e)},focus:function(t,e){var i,s;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children("a").addClass("ui-state-focus"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=e.height(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this.active.children("a").removeClass("ui-state-focus"),this.active=null,this._trigger("blur",t,{item:this.active}))},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find("a.ui-state-active").removeClass("ui-state-active")},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").children(".ui-menu-item").first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.children(".ui-menu-item")[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.children(".ui-menu-item")[this.active?"last":"first"]())),undefined):(this.next(e),undefined)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.children(".ui-menu-item").first())),undefined):(this.next(e),undefined)},_hasScroll:function(){return this.element.outerHeight()
    ").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(t){return t===e?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),e)},_constrainedValue:function(t){return t===e&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).toggleClass("ui-corner-right",e===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("
    ").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}})})(jQuery);(function(t){var e=5;t.widget("ui.slider",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)o.push(a);this.handles=n.add(t(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e)})},_createRange:function(){var e=this.options,i="";e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=t("
    ").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===e.range||"max"===e.range?" ui-slider-range-"+e.range:""))):this.range=t([])},_setupEvents:function(){var t=this.handles.add(this.range).filter("a");this._off(t),this._on(t,this._handleEvents),this._hoverable(t),this._focusable(t)},_destroy:function(){this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,a,o,r,l,h,c=this,u=this.options;return u.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(s-c.values(e));(n>i||n===i&&(e===c._lastChangedValue||c.values(e)===u.min))&&(n=i,a=t(this),o=e)}),r=this._start(e,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),l=a.offset(),h=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=h?{left:0,top:0}:{left:e.pageX-l.left-a.width()/2,top:e.pageY-l.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,s,n,a;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(t,e){var i={handle:this.handles[e],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("start",t,i)},_slide:function(t,e,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(e?0:1),2===this.options.values.length&&this.options.range===!0&&(0===e&&i>s||1===e&&s>i)&&(i=s),i!==this.values(e)&&(n=this.values(),n[e]=i,a=this._trigger("slide",t,{handle:this.handles[e],value:i,values:n}),s=this.values(e?0:1),a!==!1&&this.values(e,i,!0))):i!==this.value()&&(a=this._trigger("slide",t,{handle:this.handles[e],value:i}),a!==!1&&this.value(i))},_stop:function(t,e){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("stop",t,i)},_change:function(t,e){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._lastChangedValue=e,this._trigger("change",t,i)}},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),undefined):this._value()},values:function(e,i){var s,n,a;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),undefined;if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(e):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(e,i){var s,n=0;switch("range"===e&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),t.Widget.prototype._setOption.apply(this,arguments),e){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"min":case"max":this._animateOff=!0,this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,s;if(arguments.length)return e=this.options.values[t],e=this._trimAlignValue(e);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return 2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var e,i,s,n,a,o=this.options.range,r=this.options,l=this,h=this._animateOff?!1:r.animate,c={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((l.values(s)-l._valueMin())/(l._valueMax()-l._valueMin())),c["horizontal"===l.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[h?"animate":"css"](c,r.animate),l.options.range===!0&&("horizontal"===l.orientation?(0===s&&l.range.stop(1,1)[h?"animate":"css"]({left:i+"%"},r.animate),1===s&&l.range[h?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&l.range.stop(1,1)[h?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&l.range[h?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,c["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[h?"animate":"css"](c,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[h?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[h?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(i){var s,n,a,o,r=t(i.target).data("ui-slider-handle-index");switch(i.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(i.preventDefault(),!this._keySliding&&(this._keySliding=!0,t(i.target).addClass("ui-state-active"),s=this._start(i,r),s===!1))return}switch(o=this.options.step,n=a=this.options.values&&this.options.values.length?this.values(r):this.value(),i.keyCode){case t.ui.keyCode.HOME:a=this._valueMin();break;case t.ui.keyCode.END:a=this._valueMax();break;case t.ui.keyCode.PAGE_UP:a=this._trimAlignValue(n+(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.PAGE_DOWN:a=this._trimAlignValue(n-(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(n===this._valueMax())return;a=this._trimAlignValue(n+o);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(n===this._valueMin())return;a=this._trimAlignValue(n-o)}this._slide(i,r,a)},click:function(t){t.preventDefault()},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),t(e.target).removeClass("ui-state-active"))}}})})(jQuery);(function(t){function e(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.widget("ui.spinner",{version:"1.10.3",defaultElement:"",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e={},i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);void 0!==n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var t=this.element[0]===this.document[0].activeElement;t||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var t=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=t.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*t.height())&&t.height()>0&&t.height(t.height()),this.options.disabled&&this.disable()},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_uiSpinnerHtml:function(){return""},_buttonHtml:function(){return""+""+""+""+""},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){if("culture"===t||"numberFormat"===t){var i=this._parse(this.element.val());return this.options[t]=e,this.element.val(this._format(i)),void 0}("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(e.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(e.down)),this._super(t,e),"disabled"===t&&(e?(this.element.prop("disabled",!0),this.buttons.button("disable")):(this.element.prop("disabled",!1),this.buttons.button("enable")))},_setOptions:e(function(t){this._super(t),this._value(this.element.val())}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:e(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:e(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:e(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:e(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(e(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}})})(jQuery);(function(t,e){function i(){return++n}function s(t){return t.hash.length>1&&decodeURIComponent(t.href.replace(o,""))===decodeURIComponent(location.href.replace(o,""))}var n=0,o=/#.*$/;t.widget("ui.tabs",{version:"1.10.3",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_create:function(){var e=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible).delegate(".ui-tabs-nav > li","mousedown"+this.eventNamespace,function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var i=this.options.active,s=this.options.collapsible,n=location.hash.substring(1);return null===i&&(n&&this.tabs.each(function(s,o){return t(o).attr("aria-controls")===n?(i=s,!1):e}),null===i&&(i=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===i||-1===i)&&(i=this.tabs.length?0:!1)),i!==!1&&(i=this.tabs.index(this.tabs.eq(i)),-1===i&&(i=s?!1:0)),!s&&i===!1&&this.anchors.length&&(i=0),i},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(i){var s=t(this.document[0].activeElement).closest("li"),n=this.tabs.index(s),o=!0;if(!this._handlePageNav(i)){switch(i.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:n++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:o=!1,n--;break;case t.ui.keyCode.END:n=this.anchors.length-1;break;case t.ui.keyCode.HOME:n=0;break;case t.ui.keyCode.SPACE:return i.preventDefault(),clearTimeout(this.activating),this._activate(n),e;case t.ui.keyCode.ENTER:return i.preventDefault(),clearTimeout(this.activating),this._activate(n===this.options.active?!1:n),e;default:return}i.preventDefault(),clearTimeout(this.activating),n=this._focusNextTab(n,o),i.ctrlKey||(s.attr("aria-selected","false"),this.tabs.eq(n).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",n)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.focus())},_handlePageNav:function(i){return i.altKey&&i.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):i.altKey&&i.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):e},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).focus(),t},_setOption:function(t,i){return"active"===t?(this._activate(i),e):"disabled"===t?(this._setupDisabled(i),e):(this._super(t,i),"collapsible"===t&&(this.element.toggleClass("ui-tabs-collapsible",i),i||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(i),"heightStyle"===t&&this._setupHeightStyle(i),e)},_tabId:function(t){return t.attr("aria-controls")||"ui-tabs-"+i()},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-expanded":"false","aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-expanded":"true","aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist"),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=t(),this.anchors.each(function(i,n){var o,a,r,h=t(n).uniqueId().attr("id"),l=t(n).closest("li"),c=l.attr("aria-controls");s(n)?(o=n.hash,a=e.element.find(e._sanitizeSelector(o))):(r=e._tabId(l),o="#"+r,a=e.element.find(o),a.length||(a=e._createPanel(r),a.insertAfter(e.panels[i-1]||e.tablist)),a.attr("aria-live","polite")),a.length&&(e.panels=e.panels.add(a)),c&&l.data("ui-tabs-aria-controls",c),l.attr({"aria-controls":o.substring(1),"aria-labelledby":h}),a.attr("aria-labelledby",h)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel")},_getList:function(){return this.element.find("ol,ul").eq(0)},_createPanel:function(e){return t("
    ").attr("id",e).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(e){t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1);for(var i,s=0;i=this.tabs[s];s++)e===!0||-1!==t.inArray(s,e)?t(i).addClass("ui-state-disabled").attr("aria-disabled","true"):t(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=e},_setupEvents:function(e){var i={click:function(t){t.preventDefault()}};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),o=n.closest("li"),a=o[0]===s[0],r=a&&i.collapsible,h=r?t():this._getPanelForTab(o),l=s.length?this._getPanelForTab(s):t(),c={oldTab:s,oldPanel:l,newTab:r?t():o,newPanel:h};e.preventDefault(),o.hasClass("ui-state-disabled")||o.hasClass("ui-tabs-loading")||this.running||a&&!i.collapsible||this._trigger("beforeActivate",e,c)===!1||(i.active=r?!1:this.tabs.index(o),this.active=a?t():o,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(o),e),this._toggle(e,c))},_toggle:function(e,i){function s(){o.running=!1,o._trigger("activate",e,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),a.length&&o.options.show?o._show(a,o.options.show,s):(a.show(),s())}var o=this,a=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr({"aria-expanded":"false","aria-hidden":"true"}),i.oldTab.attr("aria-selected","false"),a.length&&r.length?i.oldTab.attr("tabIndex",-1):a.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),a.attr({"aria-expanded":"true","aria-hidden":"false"}),i.newTab.attr({"aria-selected":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(t){return"string"==typeof t&&(t=this.anchors.index(this.anchors.filter("[href$='"+t+"']"))),t},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(i){var s=this.options.disabled;s!==!1&&(i===e?s=!1:(i=this._getIndex(i),s=t.isArray(s)?t.map(s,function(t){return t!==i?t:null}):t.map(this.tabs,function(t,e){return e!==i?e:null})),this._setupDisabled(s))},disable:function(i){var s=this.options.disabled;if(s!==!0){if(i===e)s=!0;else{if(i=this._getIndex(i),-1!==t.inArray(i,s))return;s=t.isArray(s)?t.merge([i],s).sort():[i]}this._setupDisabled(s)}},load:function(e,i){e=this._getIndex(e);var n=this,o=this.tabs.eq(e),a=o.find(".ui-tabs-anchor"),r=this._getPanelForTab(o),h={tab:o,panel:r};s(a[0])||(this.xhr=t.ajax(this._ajaxSettings(a,i,h)),this.xhr&&"canceled"!==this.xhr.statusText&&(o.addClass("ui-tabs-loading"),r.attr("aria-busy","true"),this.xhr.success(function(t){setTimeout(function(){r.html(t),n._trigger("load",i,h)},1)}).complete(function(t,e){setTimeout(function(){"abort"===e&&n.panels.stop(!1,!0),o.removeClass("ui-tabs-loading"),r.removeAttr("aria-busy"),t===n.xhr&&delete n.xhr},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href"),beforeSend:function(e,o){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:o},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}})})(jQuery);(function(t){function e(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))}function i(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")}var s=0;t.widget("ui.tooltip",{version:"1.10.3",options:{content:function(){var e=t(this).attr("title")||"";return t("").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable()},_setOption:function(e,i){var s=this;return"disabled"===e?(this[i?"_disable":"_enable"](),this.options[e]=i,void 0):(this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e)}),void 0)},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s[0],e.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var e=t(this);e.is("[title]")&&e.data("ui-tooltip-title",e.attr("title")).attr("title","")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))})},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,o=e?e.type:null;return"string"==typeof s?this._open(e,t,s):(i=s.call(t[0],function(i){t.data("ui-tooltip-open")&&n._delay(function(){e&&(e.type=o),this._open(e,t,i)})}),i&&this._open(e,t,i),void 0)},_open:function(i,s,n){function o(t){l.of=t,a.is(":hidden")||a.position(l)}var a,r,h,l=t.extend({},this.options.position);if(n){if(a=this._find(s),a.length)return a.find(".ui-tooltip-content").html(n),void 0;s.is("[title]")&&(i&&"mouseover"===i.type?s.attr("title",""):s.removeAttr("title")),a=this._tooltip(s),e(s,a.attr("id")),a.find(".ui-tooltip-content").html(n),this.options.track&&i&&/^mouse/.test(i.type)?(this._on(this.document,{mousemove:o}),o(i)):a.position(t.extend({of:s},this.options.position)),a.hide(),this._show(a,this.options.show),this.options.show&&this.options.show.delay&&(h=this.delayedShow=setInterval(function(){a.is(":visible")&&(o(l.of),clearInterval(h))},t.fx.interval)),this._trigger("open",i,{tooltip:a}),r={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var i=t.Event(e);i.currentTarget=s[0],this.close(i,!0)}},remove:function(){this._removeTooltip(a)}},i&&"mouseover"!==i.type||(r.mouseleave="close"),i&&"focusin"!==i.type||(r.focusout="close"),this._on(!0,s,r)}},close:function(e){var s=this,n=t(e?e.currentTarget:this.element),o=this._find(n);this.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&n.attr("title",n.data("ui-tooltip-title")),i(n),o.stop(!0),this._hide(o,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),this.closing=!0,this._trigger("close",e,{tooltip:o}),this.closing=!1)},_tooltip:function(e){var i="ui-tooltip-"+s++,n=t("
    ").attr({id:i,role:"tooltip"}).addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||""));return t("
    ").addClass("ui-tooltip-content").appendTo(n),n.appendTo(this.document[0].body),this.tooltips[i]=e,n},_find:function(e){var i=e.data("ui-tooltip-id");return i?t("#"+i):t()},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s[0],e.close(n,!0),t("#"+i).remove(),s.data("ui-tooltip-title")&&(s.attr("title",s.data("ui-tooltip-title")),s.removeData("ui-tooltip-title"))})}})})(jQuery);(function(t,e){var i="ui-effects-";t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=h(),n=s._rgba=[];return i=i.toLowerCase(),f(l,function(t,o){var a,r=o.re.exec(i),l=r&&o.parse(r),h=o.space||"rgba";return l?(a=s[h](l),s[c[h].cache]=a[c[h].cache],n=s._rgba=a._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,o.transparent),s):o[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var o,a="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,l=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],h=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=h.support={},p=t("

    ")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),h.fn=t.extend(h.prototype,{parse:function(n,a,r,l){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(a),a=e);var u=this,d=t.type(n),p=this._rgba=[];return a!==e&&(n=[n,a,r,l],d="array"),"string"===d?this.parse(s(n)||o._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof h?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var o=s.cache;f(s.props,function(t,e){if(!u[o]&&s.to){if("alpha"===t||null==n[t])return;u[o]=s.to(u._rgba)}u[o][e.idx]=i(n[t],e,!0)}),u[o]&&0>t.inArray(null,u[o].slice(0,3))&&(u[o][3]=1,s.from&&(u._rgba=s.from(u[o])))}),this):e},is:function(t){var i=h(t),s=!0,n=this;return f(c,function(t,o){var a,r=i[o.cache];return r&&(a=n[o.cache]||o.to&&o.to(n._rgba)||[],f(o.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===a[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=h(t),n=s._space(),o=c[n],a=0===this.alpha()?h("transparent"):this,r=a[o.cache]||o.to(a._rgba),l=r.slice();return s=s[o.cache],f(o.props,function(t,n){var o=n.idx,a=r[o],h=s[o],c=u[n.type]||{};null!==h&&(null===a?l[o]=h:(c.mod&&(h-a>c.mod/2?a+=c.mod:a-h>c.mod/2&&(a-=c.mod)),l[o]=i((h-a)*e+a,n)))}),this[n](l)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=h(e)._rgba;return h(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),h.fn.parse.prototype=h.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,o=t[2]/255,a=t[3],r=Math.max(s,n,o),l=Math.min(s,n,o),h=r-l,c=r+l,u=.5*c;return e=l===r?0:s===r?60*(n-o)/h+360:n===r?60*(o-s)/h+120:60*(s-n)/h+240,i=0===h?0:.5>=u?h/c:h/(2-c),[Math.round(e)%360,i,u,null==a?1:a]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],o=t[3],a=.5>=s?s*(1+i):s+i-s*i,r=2*s-a;return[Math.round(255*n(r,a,e+1/3)),Math.round(255*n(r,a,e)),Math.round(255*n(r,a,e-1/3)),o]},f(c,function(s,n){var o=n.props,a=n.cache,l=n.to,c=n.from;h.fn[s]=function(s){if(l&&!this[a]&&(this[a]=l(this._rgba)),s===e)return this[a].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[a].slice();return f(o,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=h(c(d)),n[a]=d,n):h(d)},f(o,function(e,i){h.fn[e]||(h.fn[e]=function(n){var o,a=t.type(n),l="alpha"===e?this._hsla?"hsla":"rgba":s,h=this[l](),c=h[i.idx];return"undefined"===a?c:("function"===a&&(n=n.call(this,c),a=t.type(n)),null==n&&i.empty?this:("string"===a&&(o=r.exec(n),o&&(n=c+parseFloat(o[2])*("+"===o[1]?1:-1))),h[i.idx]=n,this[l](h)))})})}),h.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var o,a,r="";if("transparent"!==n&&("string"!==t.type(n)||(o=s(n)))){if(n=h(o||n),!d.rgba&&1!==n._rgba[3]){for(a="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&a&&a.style;)try{r=t.css(a,"backgroundColor"),a=a.parentNode}catch(l){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(l){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=h(e.elem,i),e.end=h(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},h.hook(a),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},o=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(jQuery),function(){function i(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,o={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(o[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(o[i]=n[i]);return o}function s(e,i){var s,n,a={};for(s in i)n=i[s],e[s]!==n&&(o[s]||(t.fx.step[s]||!isNaN(parseFloat(n)))&&(a[s]=n));return a}var n=["add","remove","toggle"],o={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(jQuery.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(e,o,a,r){var l=t.speed(o,a,r);return this.queue(function(){var o,a=t(this),r=a.attr("class")||"",h=l.children?a.find("*").addBack():a;h=h.map(function(){var e=t(this);return{el:e,start:i(this)}}),o=function(){t.each(n,function(t,i){e[i]&&a[i+"Class"](e[i])})},o(),h=h.map(function(){return this.end=i(this.el[0]),this.diff=s(this.start,this.end),this}),a.attr("class",r),h=h.map(function(){var e=this,i=t.Deferred(),s=t.extend({},l,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,h.get()).done(function(){o(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),l.complete.call(a[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,o){return s?t.effects.animateClass.call(this,{add:i},s,n,o):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,o){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,o):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(i){return function(s,n,o,a,r){return"boolean"==typeof n||n===e?o?t.effects.animateClass.call(this,n?{add:s}:{remove:s},o,a,r):i.apply(this,arguments):t.effects.animateClass.call(this,{toggle:s},n,o,a)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,o){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,o)}})}(),function(){function s(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function n(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}t.extend(t.effects,{version:"1.10.3",save:function(t,e){for(var s=0;e.length>s;s++)null!==e[s]&&t.data(i+e[s],t[0].style[e[s]])},restore:function(t,s){var n,o;for(o=0;s.length>o;o++)null!==s[o]&&(n=t.data(i+s[o]),n===e&&(n=""),t.css(s[o],n))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("

    ").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},o=document.activeElement;try{o.id}catch(a){o=document.body}return e.wrap(s),(e[0]===o||t.contains(e[0],o))&&t(o).focus(),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).focus()),e},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var o=e.cssUnit(i);o[0]>0&&(n[i]=o[0]*s+o[1])}),n}}),t.fn.extend({effect:function(){function e(e){function s(){t.isFunction(o)&&o.call(n[0]),t.isFunction(e)&&e()}var n=t(this),o=i.complete,r=i.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),s()):a.call(n[0],i,s)}var i=s.apply(this,arguments),n=i.mode,o=i.queue,a=t.effects.effect[i.effect];return t.fx.off||!a?n?this[n](i.duration,i.complete):this.each(function(){i.complete&&i.complete.call(this)}):o===!1?this.each(e):this.queue(o||"fx",e)},show:function(t){return function(e){if(n(e))return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="show",this.effect.call(this,i)}}(t.fn.show),hide:function(t){return function(e){if(n(e))return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="hide",this.effect.call(this,i)}}(t.fn.hide),toggle:function(t){return function(e){if(n(e)||"boolean"==typeof e)return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="toggle",this.effect.call(this,i)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s}})}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}()})(jQuery);(function(t){var e=/up|down|vertical/,i=/up|left|vertical|horizontal/;t.effects.effect.blind=function(s,n){var a,o,r,l=t(this),h=["position","top","bottom","left","right","height","width"],c=t.effects.setMode(l,s.mode||"hide"),u=s.direction||"up",d=e.test(u),p=d?"height":"width",f=d?"top":"left",g=i.test(u),m={},v="show"===c;l.parent().is(".ui-effects-wrapper")?t.effects.save(l.parent(),h):t.effects.save(l,h),l.show(),a=t.effects.createWrapper(l).css({overflow:"hidden"}),o=a[p](),r=parseFloat(a.css(f))||0,m[p]=v?o:0,g||(l.css(d?"bottom":"right",0).css(d?"top":"left","auto").css({position:"absolute"}),m[f]=v?r:o+r),v&&(a.css(p,0),g||a.css(f,r+o)),a.animate(m,{duration:s.duration,easing:s.easing,queue:!1,complete:function(){"hide"===c&&l.hide(),t.effects.restore(l,h),t.effects.removeWrapper(l),n()}})}})(jQuery);(function(t){t.effects.effect.bounce=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","height","width"],l=t.effects.setMode(o,e.mode||"effect"),h="hide"===l,c="show"===l,u=e.direction||"up",d=e.distance,p=e.times||5,f=2*p+(c||h?1:0),g=e.duration/f,m=e.easing,v="up"===u||"down"===u?"top":"left",_="up"===u||"left"===u,b=o.queue(),y=b.length;for((c||h)&&r.push("opacity"),t.effects.save(o,r),o.show(),t.effects.createWrapper(o),d||(d=o["top"===v?"outerHeight":"outerWidth"]()/3),c&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,_?2*-d:2*d).animate(a,g,m)),h&&(d/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(_?"-=":"+=")+d,o.animate(n,g,m).animate(a,g,m),d=h?2*d:d/2;h&&(n={opacity:0},n[v]=(_?"-=":"+=")+d,o.animate(n,g,m)),o.queue(function(){h&&o.hide(),t.effects.restore(o,r),t.effects.removeWrapper(o),i()}),y>1&&b.splice.apply(b,[1,0].concat(b.splice(y,f+1))),o.dequeue()}})(jQuery);(function(t){t.effects.effect.clip=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","height","width"],l=t.effects.setMode(o,e.mode||"hide"),h="show"===l,c=e.direction||"vertical",u="vertical"===c,d=u?"height":"width",p=u?"top":"left",f={};t.effects.save(o,r),o.show(),s=t.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[d](),h&&(n.css(d,0),n.css(p,a/2)),f[d]=h?a:0,f[p]=h?0:a/2,n.animate(f,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){h||o.hide(),t.effects.restore(o,r),t.effects.removeWrapper(o),i()}})}})(jQuery);(function(t){t.effects.effect.drop=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","opacity","height","width"],o=t.effects.setMode(n,e.mode||"hide"),r="show"===o,l=e.direction||"left",h="up"===l||"down"===l?"top":"left",c="up"===l||"left"===l?"pos":"neg",u={opacity:r?1:0};t.effects.save(n,a),n.show(),t.effects.createWrapper(n),s=e.distance||n["top"===h?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(h,"pos"===c?-s:s),u[h]=(r?"pos"===c?"+=":"-=":"pos"===c?"-=":"+=")+s,n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}})}})(jQuery);(function(t){t.effects.effect.explode=function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),g||p.hide(),i()}var a,o,r,l,h,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=t.effects.setMode(p,e.mode||"hide"),g="show"===f,m=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/d),_=Math.ceil(p.outerHeight()/u),b=[];for(a=0;u>a;a++)for(l=m.top+a*_,c=a-(u-1)/2,o=0;d>o;o++)r=m.left+o*v,h=o-(d-1)/2,p.clone().appendTo("body").wrap("
    ").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*_}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:_,left:r+(g?h*v:0),top:l+(g?c*_:0),opacity:g?0:1}).animate({left:r+(g?0:h*v),top:l+(g?0:c*_),opacity:g?1:0},e.duration||500,e.easing,s)}})(jQuery);(function(t){t.effects.effect.fade=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}})(jQuery);(function(t){t.effects.effect.fold=function(e,i){var s,n,a=t(this),o=["position","top","bottom","left","right","height","width"],r=t.effects.setMode(a,e.mode||"hide"),l="show"===r,h="hide"===r,c=e.size||15,u=/([0-9]+)%/.exec(c),d=!!e.horizFirst,p=l!==d,f=p?["width","height"]:["height","width"],g=e.duration/2,m={},v={};t.effects.save(a,o),a.show(),s=t.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],u&&(c=parseInt(u[1],10)/100*n[h?0:1]),l&&s.css(d?{height:0,width:c}:{height:c,width:0}),m[f[0]]=l?n[0]:c,v[f[1]]=l?n[1]:0,s.animate(m,g,e.easing).animate(v,g,e.easing,function(){h&&a.hide(),t.effects.restore(a,o),t.effects.removeWrapper(a),i()})}})(jQuery);(function(t){t.effects.effect.highlight=function(e,i){var s=t(this),n=["backgroundImage","backgroundColor","opacity"],a=t.effects.setMode(s,e.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),t.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(o,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===a&&s.hide(),t.effects.restore(s,n),i()}})}})(jQuery);(function(t){t.effects.effect.pulsate=function(e,i){var s,n=t(this),a=t.effects.setMode(n,e.mode||"show"),o="show"===a,r="hide"===a,l=o||"hide"===a,h=2*(e.times||5)+(l?1:0),c=e.duration/h,u=0,d=n.queue(),p=d.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),u=1),s=1;h>s;s++)n.animate({opacity:u},c,e.easing),u=1-u;n.animate({opacity:u},c,e.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&d.splice.apply(d,[1,0].concat(d.splice(p,h+1))),n.dequeue()}})(jQuery);(function(t){t.effects.effect.puff=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"hide"),o="hide"===n,a=parseInt(e.percent,10)||150,r=a/100,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};t.extend(e,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:o?a:100,from:o?l:{height:l.height*r,width:l.width*r,outerHeight:l.outerHeight*r,outerWidth:l.outerWidth*r}}),s.effect(e)},t.effects.effect.scale=function(e,i){var s=t(this),n=t.extend(!0,{},e),o=t.effects.setMode(s,e.mode||"effect"),a=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"hide"===o?0:100),r=e.direction||"both",l=e.origin,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},c={y:"horizontal"!==r?a/100:1,x:"vertical"!==r?a/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==o&&(n.origin=l||["middle","center"],n.restore=!0),n.from=e.from||("show"===o?{height:0,width:0,outerHeight:0,outerWidth:0}:h),n.to={height:h.height*c.y,width:h.width*c.x,outerHeight:h.outerHeight*c.y,outerWidth:h.outerWidth*c.x},n.fade&&("show"===o&&(n.from.opacity=0,n.to.opacity=1),"hide"===o&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},t.effects.effect.size=function(e,i){var s,n,o,a=t(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],l=["position","top","bottom","left","right","overflow","opacity"],h=["width","height","overflow"],c=["fontSize"],u=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],d=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=t.effects.setMode(a,e.mode||"effect"),f=e.restore||"effect"!==p,g=e.scale||"both",m=e.origin||["middle","center"],v=a.css("position"),_=f?r:l,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&a.show(),s={height:a.height(),width:a.width(),outerHeight:a.outerHeight(),outerWidth:a.outerWidth()},"toggle"===e.mode&&"show"===p?(a.from=e.to||b,a.to=e.from||s):(a.from=e.from||("show"===p?b:s),a.to=e.to||("hide"===p?b:s)),o={from:{y:a.from.height/s.height,x:a.from.width/s.width},to:{y:a.to.height/s.height,x:a.to.width/s.width}},("box"===g||"both"===g)&&(o.from.y!==o.to.y&&(_=_.concat(u),a.from=t.effects.setTransition(a,u,o.from.y,a.from),a.to=t.effects.setTransition(a,u,o.to.y,a.to)),o.from.x!==o.to.x&&(_=_.concat(d),a.from=t.effects.setTransition(a,d,o.from.x,a.from),a.to=t.effects.setTransition(a,d,o.to.x,a.to))),("content"===g||"both"===g)&&o.from.y!==o.to.y&&(_=_.concat(c).concat(h),a.from=t.effects.setTransition(a,c,o.from.y,a.from),a.to=t.effects.setTransition(a,c,o.to.y,a.to)),t.effects.save(a,_),a.show(),t.effects.createWrapper(a),a.css("overflow","hidden").css(a.from),m&&(n=t.effects.getBaseline(m,s),a.from.top=(s.outerHeight-a.outerHeight())*n.y,a.from.left=(s.outerWidth-a.outerWidth())*n.x,a.to.top=(s.outerHeight-a.to.outerHeight)*n.y,a.to.left=(s.outerWidth-a.to.outerWidth)*n.x),a.css(a.from),("content"===g||"both"===g)&&(u=u.concat(["marginTop","marginBottom"]).concat(c),d=d.concat(["marginLeft","marginRight"]),h=r.concat(u).concat(d),a.find("*[width]").each(function(){var i=t(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};f&&t.effects.save(i,h),i.from={height:s.height*o.from.y,width:s.width*o.from.x,outerHeight:s.outerHeight*o.from.y,outerWidth:s.outerWidth*o.from.x},i.to={height:s.height*o.to.y,width:s.width*o.to.x,outerHeight:s.height*o.to.y,outerWidth:s.width*o.to.x},o.from.y!==o.to.y&&(i.from=t.effects.setTransition(i,u,o.from.y,i.from),i.to=t.effects.setTransition(i,u,o.to.y,i.to)),o.from.x!==o.to.x&&(i.from=t.effects.setTransition(i,d,o.from.x,i.from),i.to=t.effects.setTransition(i,d,o.to.x,i.to)),i.css(i.from),i.animate(i.to,e.duration,e.easing,function(){f&&t.effects.restore(i,h)})})),a.animate(a.to,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){0===a.to.opacity&&a.css("opacity",a.from.opacity),"hide"===p&&a.hide(),t.effects.restore(a,_),f||("static"===v?a.css({position:"relative",top:a.to.top,left:a.to.left}):t.each(["top","left"],function(t,e){a.css(e,function(e,i){var s=parseInt(i,10),n=t?a.to.left:a.to.top;return"auto"===i?n+"px":s+n+"px"})})),t.effects.removeWrapper(a),i()}})}})(jQuery);(function(t){t.effects.effect.shake=function(e,i){var s,n=t(this),o=["position","top","bottom","left","right","height","width"],a=t.effects.setMode(n,e.mode||"effect"),r=e.direction||"left",l=e.distance||20,h=e.times||3,c=2*h+1,u=Math.round(e.duration/c),d="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},g={},m={},v=n.queue(),_=v.length;for(t.effects.save(n,o),n.show(),t.effects.createWrapper(n),f[d]=(p?"-=":"+=")+l,g[d]=(p?"+=":"-=")+2*l,m[d]=(p?"-=":"+=")+2*l,n.animate(f,u,e.easing),s=1;h>s;s++)n.animate(g,u,e.easing).animate(m,u,e.easing);n.animate(g,u,e.easing).animate(f,u/2,e.easing).queue(function(){"hide"===a&&n.hide(),t.effects.restore(n,o),t.effects.removeWrapper(n),i()}),_>1&&v.splice.apply(v,[1,0].concat(v.splice(_,c+1))),n.dequeue()}})(jQuery);(function(t){t.effects.effect.slide=function(e,i){var s,n=t(this),o=["position","top","bottom","left","right","width","height"],a=t.effects.setMode(n,e.mode||"show"),r="show"===a,l=e.direction||"left",h="up"===l||"down"===l?"top":"left",c="up"===l||"left"===l,u={};t.effects.save(n,o),n.show(),s=e.distance||n["top"===h?"outerHeight":"outerWidth"](!0),t.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(h,c?isNaN(s)?"-"+s:-s:s),u[h]=(r?c?"+=":"-=":c?"-=":"+=")+s,n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===a&&n.hide(),t.effects.restore(n,o),t.effects.removeWrapper(n),i()}})}})(jQuery);(function(t){t.effects.effect.transfer=function(e,i){var s=t(this),n=t(e.to),o="fixed"===n.css("position"),a=t("body"),r=o?a.scrollTop():0,l=o?a.scrollLeft():0,h=n.offset(),c={top:h.top-r,left:h.left-l,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("
    ").appendTo(document.body).addClass(e.className).css({top:u.top-r,left:u.left-l,height:s.innerHeight(),width:s.innerWidth(),position:o?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),i()})}})(jQuery); \ No newline at end of file diff --git a/js/js.php b/js/js.php index 85b9f9e9..8176ff69 100644 --- a/js/js.php +++ b/js/js.php @@ -35,7 +35,7 @@ $jsFilesBase = array( array('href' => 'js/jquery.placeholder.js', 'min' => true), array('href' => 'js/jquery-ui.min.js', 'min' => false), array('href' => 'js/jquery.fancybox.pack.js', 'min' => false), -// array('href' => 'js/jquery.powertip.min.js', 'min' => false), + array('href' => 'js/jquery.powertip.min.js', 'min' => false), array('href' => 'js/chosen.jquery.min.js', 'min' => false), array('href' => 'js/alertify.js', 'min' => true), array('href' => 'js/jquery.fileDownload.js', 'min' => true), @@ -63,7 +63,7 @@ $arrJsLang = array( _('Eliminar archivo?'), _('Su navegador no soporta subir archivos con HTML5'), _('Demasiados archivos'), - _('No es posible guardar el archivo.
    Tamaño máximo:'), + sprintf(_('No es posible guardar el archivo.%sTamaño máximo:'), '
    '), _('Extensión no permitida'), _('Vaciar el registro de eventos?') ); @@ -80,4 +80,4 @@ if (file_exists($themeJsPath)){ } } -SP\Util::getMinified('js', $jsFilesBase, false); \ No newline at end of file +SP\Util::getMinified('js', $jsFilesBase, true); \ No newline at end of file From 1294595f905c8c8d32885230453dee54cf59cc5b Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Fri, 24 Jul 2015 02:09:44 +0200 Subject: [PATCH 43/84] * [MOD] Password view/generate modified * [ADD] New sysPass logo * [MOD] Fixed some UI styles --- ajax/ajax_accountSave.php | 10 +- inc/themes/classic/css/styles.css | 56 +-- inc/themes/classic/imgs/logo.svg | 384 +++++++++++++++ inc/themes/classic/imgs/logo_full.svg | 454 ++++++++++++++++++ inc/themes/classic/js/functions.js | 2 +- inc/themes/classic/login.inc | 3 +- inc/themes/material-blue/account.inc | 11 +- inc/themes/material-blue/backup.inc | 2 +- inc/themes/material-blue/css/css.php | 2 +- .../ui-bg_highlight-hard_100_448AFF_1x100.png | Bin 297 -> 0 bytes .../ui-bg_highlight-hard_100_536DFE_1x100.png | Bin 0 -> 323 bytes .../ui-bg_highlight-hard_100_ffffff_1x100.png | Bin 0 -> 203 bytes .../ui-bg_highlight-hard_60_536DFE_1x100.png | Bin 0 -> 318 bytes .../ui-bg_highlight-hard_65_ffffff_1x100.png | Bin 203 -> 0 bytes .../ui-bg_highlight-hard_75_448AFF_1x100.png | Bin 314 -> 0 bytes .../ui-bg_highlight-soft_75_448AFF_1x100.png | Bin 324 -> 0 bytes .../ui-bg_highlight-soft_75_536DFE_1x100.png | Bin 0 -> 334 bytes .../css/images/ui-icons_454545_256x240.png | Bin 6992 -> 0 bytes ...f_256x240.png => ui-icons_fff_256x240.png} | Bin .../material-blue/css/jquery-ui.theme.css | 410 ++++++++++++++++ .../material-blue/css/jquery-ui.theme.min.css | 5 - .../material-blue/css/material-custom.css | 20 +- inc/themes/material-blue/css/material.min.css | 4 +- inc/themes/material-blue/css/styles.css | 90 ++-- inc/themes/material-blue/editpass.inc | 10 +- inc/themes/material-blue/encryption.inc | 9 +- inc/themes/material-blue/imgs/logo.svg | 384 +++++++++++++++ inc/themes/material-blue/imgs/logo_full.svg | 454 ++++++++++++++++++ inc/themes/material-blue/import.inc | 6 +- inc/themes/material-blue/js-common.inc | 22 +- inc/themes/material-blue/login.inc | 3 - inc/themes/material-blue/searchbox.inc | 77 ++- inc/themes/material-blue/userspass.inc | 11 +- web/MainC.class.php | 4 +- 34 files changed, 2263 insertions(+), 170 deletions(-) create mode 100644 inc/themes/classic/imgs/logo.svg create mode 100644 inc/themes/classic/imgs/logo_full.svg delete mode 100644 inc/themes/material-blue/css/images/ui-bg_highlight-hard_100_448AFF_1x100.png create mode 100644 inc/themes/material-blue/css/images/ui-bg_highlight-hard_100_536DFE_1x100.png create mode 100644 inc/themes/material-blue/css/images/ui-bg_highlight-hard_100_ffffff_1x100.png create mode 100644 inc/themes/material-blue/css/images/ui-bg_highlight-hard_60_536DFE_1x100.png delete mode 100644 inc/themes/material-blue/css/images/ui-bg_highlight-hard_65_ffffff_1x100.png delete mode 100644 inc/themes/material-blue/css/images/ui-bg_highlight-hard_75_448AFF_1x100.png delete mode 100644 inc/themes/material-blue/css/images/ui-bg_highlight-soft_75_448AFF_1x100.png create mode 100644 inc/themes/material-blue/css/images/ui-bg_highlight-soft_75_536DFE_1x100.png delete mode 100644 inc/themes/material-blue/css/images/ui-icons_454545_256x240.png rename inc/themes/material-blue/css/images/{ui-icons_ffffff_256x240.png => ui-icons_fff_256x240.png} (100%) create mode 100644 inc/themes/material-blue/css/jquery-ui.theme.css delete mode 100644 inc/themes/material-blue/css/jquery-ui.theme.min.css create mode 100644 inc/themes/material-blue/imgs/logo.svg create mode 100644 inc/themes/material-blue/imgs/logo_full.svg diff --git a/ajax/ajax_accountSave.php b/ajax/ajax_accountSave.php index 044edced..010737f2 100644 --- a/ajax/ajax_accountSave.php +++ b/ajax/ajax_accountSave.php @@ -49,8 +49,8 @@ $customerId = SP\Request::analyze('customerId', 0); $newCustomer = SP\Request::analyze('customer_new'); $accountName = SP\Request::analyze('name'); $accountLogin = SP\Request::analyze('login'); -$accountPassword = SP\Request::analyze('password', '', false, false, false); -$accountPasswordV = SP\Request::analyze('password2', '', false, false, false); +$accountPassword = SP\Request::analyze('pass', '', false, false, false); +$accountPasswordR = SP\Request::analyze('passR', '', false, false, false); $categoryId = SP\Request::analyze('categoryId', 0); $accountOtherGroups = SP\Request::analyze('othergroups'); $accountOtherUsers = SP\Request::analyze('otherusers'); @@ -74,7 +74,7 @@ if ($actionId === \SP\Controller\ActionsInterface::ACTION_ACC_NEW) { SP\Common::printJSON(_('Es necesario un usuario')); } elseif (!$accountPassword) { SP\Common::printJSON(_('Es necesario una clave')); - } elseif ($accountPassword != $accountPasswordV) { + } elseif ($accountPassword != $accountPasswordR) { SP\Common::printJSON(_('Las claves no coinciden')); } } elseif ($actionId === \SP\Controller\ActionsInterface::ACTION_ACC_EDIT) { @@ -92,9 +92,9 @@ if ($actionId === \SP\Controller\ActionsInterface::ACTION_ACC_NEW) { } } elseif ($actionId == \SP\Controller\ActionsInterface::ACTION_ACC_EDIT_PASS) { // Comprobaciones para modficación de clave - if (!$accountPassword && !$accountPasswordV) { + if (!$accountPassword && !$accountPasswordR) { SP\Common::printJSON(_('La clave no puede estar en blanco')); - } elseif ($accountPassword != $accountPasswordV) { + } elseif ($accountPassword != $accountPasswordR) { SP\Common::printJSON(_('Las claves no coinciden')); } } elseif ($actionId == \SP\Controller\ActionsInterface::ACTION_ACC_EDIT_RESTORE) { diff --git a/inc/themes/classic/css/styles.css b/inc/themes/classic/css/styles.css index 96257467..288d5f36 100644 --- a/inc/themes/classic/css/styles.css +++ b/inc/themes/classic/css/styles.css @@ -248,7 +248,9 @@ a:focus { width: 100%; height: auto; min-height: 650px; - background: url("../imgs/logo_full.png") no-repeat left top transparent; + /*background: url("../imgs/logo_full.png") no-repeat left top transparent;*/ + background: url("../inc/themes/classic/imgs/logo_full.svg") no-repeat left top #f2f2f2; + background-size: 350px; } #container.error, #container.install, #container.passreset { @@ -287,11 +289,12 @@ a:focus { } #container #actionsBar { - float: left; + display: inline-block; position: relative; - top: 100px; - left: 30px; - margin-right: 80px; + top: 10em; + left: 5em; + height: 100%; + width: 5em; text-align: center; } @@ -329,11 +332,12 @@ a:focus { } #container #content { - float: left; - width: 88%; - min-height: 500px; - margin: 50px auto; - margin-bottom: 80px; + display: inline-block; + position: relative; + top: 1em; + left: 10em; + width: 85%; + margin: 50px auto 80px auto; } #content td.descField, #fancyContainer td.descField { @@ -1503,10 +1507,11 @@ footer img { /*Login Page*/ #boxLogin { width: 450px; - height: 150px; + min-height: 150px; margin: 75px auto; - padding: 25px; - background-color: #fff; + padding: 2em; + background: url("../inc/themes/classic/imgs/logo_full.svg") no-repeat left top #fff; + background-size: 300px auto; } #boxLogin .error { @@ -1519,25 +1524,10 @@ footer img { margin-right: auto; } -#boxLogin #boxLogo { - float: left; - width: 150px; - height: 100%; - text-align: center; -} - -#boxLogin #boxLogo #imgLogo { - float: left; - width: 100px; - height: 100px; - position: relative; - top: 25px; - left: 20px; - z-index: 90; - vertical-align: middle; -} - #boxLogin #boxData { + position: relative; + top: 3em; + left: 10em; float: left; width: 280px; min-height: 100px; @@ -1656,6 +1646,10 @@ fieldset.warning a { -moz-box-shadow: 0px 8px 6px -6px #a9a9a9; } +#actions #logo img { + width: 300px; +} + #actions #logo #pageDesc { position: relative; top: 30px; diff --git a/inc/themes/classic/imgs/logo.svg b/inc/themes/classic/imgs/logo.svg new file mode 100644 index 00000000..f53690ab --- /dev/null +++ b/inc/themes/classic/imgs/logo.svg @@ -0,0 +1,384 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + diff --git a/inc/themes/classic/imgs/logo_full.svg b/inc/themes/classic/imgs/logo_full.svg new file mode 100644 index 00000000..9f036e31 --- /dev/null +++ b/inc/themes/classic/imgs/logo_full.svg @@ -0,0 +1,454 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + #sysPass + Systems Password Manager + + diff --git a/inc/themes/classic/js/functions.js b/inc/themes/classic/js/functions.js index 9fc082c2..f4dbd1ba 100644 --- a/inc/themes/classic/js/functions.js +++ b/inc/themes/classic/js/functions.js @@ -100,13 +100,13 @@ function doAction(actionId, lastAction, itemId) { data: data, success: function (response) { $('#content').html(response); - setContentSize(); }, error: function () { $('#content').html(resMsg("nofancyerror")); }, complete: function () { $.fancybox.hideLoading(); + setContentSize(); } }); } diff --git a/inc/themes/classic/login.inc b/inc/themes/classic/login.inc index 90c29b85..f3c657ca 100644 --- a/inc/themes/classic/login.inc +++ b/inc/themes/classic/login.inc @@ -1,5 +1,4 @@
    -
    diff --git a/inc/themes/material-blue/account.inc b/inc/themes/material-blue/account.inc index 172f9c1e..65e9876c 100644 --- a/inc/themes/material-blue/account.inc +++ b/inc/themes/material-blue/account.inc @@ -95,22 +95,19 @@
    -
    - - remove_red_eye - settings
    - - + +
    diff --git a/inc/themes/material-blue/backup.inc b/inc/themes/material-blue/backup.inc index cb5cb93a..b93d6038 100644 --- a/inc/themes/material-blue/backup.inc +++ b/inc/themes/material-blue/backup.inc @@ -95,7 +95,7 @@
    - diff --git a/inc/themes/material-blue/css/css.php b/inc/themes/material-blue/css/css.php index 739ba107..00657b8a 100644 --- a/inc/themes/material-blue/css/css.php +++ b/inc/themes/material-blue/css/css.php @@ -29,7 +29,7 @@ $cssFilesTheme = array( array('href' => \SP\Init::$THEMEPATH . '/css/fonts.css', 'min' => true), array('href' => \SP\Init::$THEMEPATH . '/css/material.min.css', 'min' => false), array('href' => \SP\Init::$THEMEPATH . '/css/material-custom.css', 'min' => true), - array('href' => \SP\Init::$THEMEPATH . '/css/jquery-ui.theme.min.css', 'min' => false), + array('href' => \SP\Init::$THEMEPATH . '/css/jquery-ui.theme.css', 'min' => true), array('href' => \SP\Init::$THEMEPATH . '/css/styles.css', 'min' => true), array('href' => \SP\Init::$THEMEPATH . '/css/search-grid.css', 'min' => true), array('href' => \SP\Init::$THEMEPATH . '/css/chosen.css', 'min' => true), diff --git a/inc/themes/material-blue/css/images/ui-bg_highlight-hard_100_448AFF_1x100.png b/inc/themes/material-blue/css/images/ui-bg_highlight-hard_100_448AFF_1x100.png deleted file mode 100644 index f11654963c968a587c2594d78d8cf921f9ef26b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^j6j?szyu^`+!HJTQfx`y?k@kqfHUIz9iRwjfk$L9 zkoEv$x0Bg+Kt{T!i(`n!`Q#g){wRI^|KEoP3>J&%oqAd?&dhxI{mS}WNr@SCs(*H# zJ#gU5_By~M<7G~CH+LV#}EGltyC>>jVMV;EJ?LWE=mPb3`Pcqrn&~^x<-Z}hUQiV sCRQev+6D$z1_nRx>*b?p$jwj5OsmALp`&TqWuOKIPgg&ebxsLQ0G%gmC;$Ke diff --git a/inc/themes/material-blue/css/images/ui-bg_highlight-hard_100_536DFE_1x100.png b/inc/themes/material-blue/css/images/ui-bg_highlight-hard_100_536DFE_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..b155fb0314a70f3f0f889e4ab81df8a8ca7844a1 GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^j6j?szyu^`+!HJTQfx`y?k@kqfHUIz9iRwjfk$L9 zkoEv$x0Bg+Kt`jdi(`n!`M2j4g_;6HS|1vxOTTkcKAE#+GxPL=6XMc^Rc7Cn-M}C% zmhK{V=eOPiV+$AK!#yv#>wgti#$1jNU}&)4Z*fdm>G<;}30r;#IIhr}@?ypI4UNll zocpG2`aP-hcz5kGIo{H|S&NriXnC}Q!>*kacel1u%s8Lfx*+&&t;ucLK6TQ C<1aq| literal 0 HcmV?d00001 diff --git a/inc/themes/material-blue/css/images/ui-bg_highlight-hard_60_536DFE_1x100.png b/inc/themes/material-blue/css/images/ui-bg_highlight-hard_60_536DFE_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..107db9f73a716ded3931d916d60a1fb23024a2d2 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^j6j?szyu^`+!HJTQfx`y?k@kqfHUIz9iRwjfk$L9 zkoEv$x0Bg+Kt_$Hi(`n!`M2j4xtIbaSRN$$J!0G@vFEtk!AFig+7T^VZ?a4_FVIik z(slOxy)*CfD{ksEz2rX3!^1cGvrQNa!-MnceT9w%ZgTe~DWM4f5`u8v literal 0 HcmV?d00001 diff --git a/inc/themes/material-blue/css/images/ui-bg_highlight-hard_65_ffffff_1x100.png b/inc/themes/material-blue/css/images/ui-bg_highlight-hard_65_ffffff_1x100.png deleted file mode 100644 index 0e18fc834185bb1b3e34e7be2c6957ab84a0da7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^j6j?MA{g?+)6W7arX+877Y4?=UBXL%JkA1-$YLPv z0mg18v+aNkUQZXt5RU7~83__%0t}r`jTp0Rsz7F_mbgZgq$HN4S|t~y0x1R~14C0? z19M#?!w^GrD+3cNQ&VjN11kfAPgh-9Q8eV{r(~v8;?~gI@y8OVfx*+&&t;ucLK6UQ CSulkF diff --git a/inc/themes/material-blue/css/images/ui-bg_highlight-hard_75_448AFF_1x100.png b/inc/themes/material-blue/css/images/ui-bg_highlight-hard_75_448AFF_1x100.png deleted file mode 100644 index 0baccdd43e36faa06b4e90543d8b5b7b0f661da0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^j6j?szyu^`+!HJTQfx`y?k@kqfHUIz9iRwjfk$L9 zkoEv$x0Bg+Kt_e9i(`n!`M2j4g_;6H+#VX&Ph6Xj%KN7I5Zel~HF^yxX1kch9GWwh z?mPGR-gDy_XZwto98-h+{1-bK|IA}L(Y2-N+XSr(_iiwYq`!B(os=H1 zW-m+bR$0fwy5mQy19;*Z-%Qa{u>QeS<@fW~-?Q@{vGQFqOw8eJR06s|wZt`|BqgyV z)hf9t6-Y4{85o-C8kp-E8HN~|S(#c|nObNY7+4t?oU*-bgrXrgKP5A*61Rrk3CVpx O4Gf;HelF{r5}E)e=5GrC diff --git a/inc/themes/material-blue/css/images/ui-bg_highlight-soft_75_448AFF_1x100.png b/inc/themes/material-blue/css/images/ui-bg_highlight-soft_75_448AFF_1x100.png deleted file mode 100644 index fe10a782807aeaf2d1039e6c4297773d32ed9bc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^j6j?szyu^`+!HJTQfx`y?k@kqfHUIz9iRwjfk$L9 zkoEv$x0Bg+Kt_|Ni(`n!`KJ>$@*Z*!U~!iYWY0TX_H2D4TSh~ioS@+3nS3z}xf86^ zKHQf*sGOq3(3xR+DJv|>@A8&@0fs-mGCLa9d}d79yWER2C49bP>TAgmsnZJCHqFy= zWLKo*Ur*7^u&ldq?49=M)sedITUWhPZp_&tnX=uYIZ3?#{r)eHKeEir_eiXM{Qnft zHL4}95hW>!C8<`)MX5lF!N|bSRM)^<*T^u$(9Fuz(#p_6+rYrez`(Ek>IoDLx%nxX XX_dG&*lXp2f`!4;)z4*}Q$iB}XWDJ# diff --git a/inc/themes/material-blue/css/images/ui-bg_highlight-soft_75_536DFE_1x100.png b/inc/themes/material-blue/css/images/ui-bg_highlight-soft_75_536DFE_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..98a08859da7a7bf5a4ed994b289df1508c7e9dd2 GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0vp^j6j?szyu^`+!HJTQfx`y?k@kqfHUIz9iRwjfk$L9 zkoEv$x0Bg+Kt_+Ji(`n!`KJ>$@-i8UIP04C95mx`s$>F?|Q*yX3_cT(X1XB}rLpZH7zg>mR0X6QXOX_FRlJ)6<uVpv%`^XW0JaY9> z@onWf&i}KDCIa21TH+c}l9E`GYL#4+3Zxi}3=B?nIEix8W=oX{an^LB{Ts5{S$MR literal 0 HcmV?d00001 diff --git a/inc/themes/material-blue/css/images/ui-icons_454545_256x240.png b/inc/themes/material-blue/css/images/ui-icons_454545_256x240.png deleted file mode 100644 index d6169e8bf9389ab9b5b7d2c6f0c5fe3e4d363105..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6992 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.bar{display:block;position:absolute;top:0;bottom:0;width:0%;-webkit-transition:width .2s cubic-bezier(.4,0,.2,1);transition:width .2s cubic-bezier(.4,0,.2,1)}.mdl-progress>.progressbar{background-color:rgb(96,125,139);z-index:1;left:0}.mdl-progress>.bufferbar{background-image:-webkit-linear-gradient(left,rgba(255,255,255,.7),rgba(255,255,255,.7)),-webkit-linear-gradient(left,rgb(96,125,139),rgb(96,125,139));background-image:linear-gradient(to right,rgba(255,255,255,.7),rgba(255,255,255,.7)),linear-gradient(to right,rgb(96,125,139),rgb(96,125,139));z-index:0;left:0}.mdl-progress>.auxbar{right:0}@supports (-webkit-appearance:none){.mdl-progress:not(.mdl-progress__indeterminate):not(.mdl-progress__indeterminate)>.auxbar{background-image:-webkit-linear-gradient(left,rgba(255,255,255,.7),rgba(255,255,255,.7)),-webkit-linear-gradient(left,rgb(96,125,139),rgb(96,125,139));background-image:linear-gradient(to right,rgba(255,255,255,.7),rgba(255,255,255,.7)),linear-gradient(to right,rgb(96,125,139),rgb(96,125,139));-webkit-mask:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjQiIHZpZXdQb3J0PSIwIDAgMTIgNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxlbGxpcHNlIGN4PSIyIiBjeT0iMiIgcng9IjIiIHJ5PSIyIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImN4IiBmcm9tPSIyIiB0bz0iLTEwIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogIDwvZWxsaXBzZT4KICA8ZWxsaXBzZSBjeD0iMTQiIGN5PSIyIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJsb2FkZXIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iY3giIGZyb209IjE0IiB0bz0iMiIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICA8L2VsbGlwc2U+Cjwvc3ZnPgo=');mask:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjQiIHZpZXdQb3J0PSIwIDAgMTIgNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxlbGxpcHNlIGN4PSIyIiBjeT0iMiIgcng9IjIiIHJ5PSIyIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImN4IiBmcm9tPSIyIiB0bz0iLTEwIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogIDwvZWxsaXBzZT4KICA8ZWxsaXBzZSBjeD0iMTQiIGN5PSIyIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJsb2FkZXIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iY3giIGZyb209IjE0IiB0bz0iMiIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICA8L2VsbGlwc2U+Cjwvc3ZnPgo=')}}.mdl-progress:not(.mdl-progress__indeterminate)>.auxbar{background-image:-webkit-linear-gradient(left,rgba(255,255,255,.9),rgba(255,255,255,.9)),-webkit-linear-gradient(left,rgb(96,125,139),rgb(96,125,139));background-image:linear-gradient(to right,rgba(255,255,255,.9),rgba(255,255,255,.9)),linear-gradient(to right,rgb(96,125,139),rgb(96,125,139))}.mdl-progress.mdl-progress__indeterminate>.bar1{-webkit-animation-name:indeterminate1;animation-name:indeterminate1}.mdl-progress.mdl-progress__indeterminate>.bar1,.mdl-progress.mdl-progress__indeterminate>.bar3{background-color:rgb(96,125,139);-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function:linear}.mdl-progress.mdl-progress__indeterminate>.bar3{background-image:none;-webkit-animation-name:indeterminate2;animation-name:indeterminate2}@-webkit-keyframes indeterminate1{0%{left:0%;width:0%}50%{left:25%;width:75%}75%{left:100%;width:0%}}@keyframes indeterminate1{0%{left:0%;width:0%}50%{left:25%;width:75%}75%{left:100%;width:0%}}@-webkit-keyframes indeterminate2{0%,50%{left:0%;width:0%}75%{left:0%;width:25%}100%{left:100%;width:0%}}@keyframes indeterminate2{0%,50%{left:0%;width:0%}75%{left:0%;width:25%}100%{left:100%;width:0%}}.mdl-navigation{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;box-sizing:border-box}.mdl-navigation__link{color:#424242;text-decoration:none;font-weight:500;font-size:13px;margin:0}.mdl-layout{width:100%;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;overflow-y:auto;overflow-x:hidden;position:relative;-webkit-overflow-scrolling:touch}.mdl-layout.is-small-screen .mdl-layout--large-screen-only{display:none}.mdl-layout:not(.is-small-screen) .mdl-layout--small-screen-only{display:none}.mdl-layout__container{position:absolute;width:100%;height:100%}.mdl-layout-title{display:block;position:relative;font-family:'Roboto','Helvetica','Arial',sans-serif;font-size:20px;line-height:1;letter-spacing:.02em;font-weight:400;box-sizing:border-box}.mdl-layout-spacer{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.mdl-layout__drawer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;width:240px;height:100%;max-height:100%;position:absolute;top:0;left:0;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);box-sizing:border-box;border-right:1px solid #e0e0e0;background:#fafafa;-webkit-transform:translateX(-250px);-ms-transform:translateX(-250px);transform:translateX(-250px);-webkit-transform-style:preserve-3d;transform-style:preserve-3d;will-change:transform;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:-webkit-transform;transition-property:transform;color:#424242;overflow:visible;overflow-y:auto;z-index:5}.mdl-layout__drawer.is-visible{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.mdl-layout__drawer>*{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.mdl-layout__drawer>.mdl-layout-title{line-height:64px;padding-left:40px}@media screen and (max-width:1024px){.mdl-layout__drawer>.mdl-layout-title{line-height:56px;padding-left:16px}}.mdl-layout__drawer .mdl-navigation{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;padding-top:16px}.mdl-layout__drawer .mdl-navigation .mdl-navigation__link{display:block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;padding:16px 40px;margin:0;color:#757575}@media screen and (max-width:1024px){.mdl-layout__drawer .mdl-navigation .mdl-navigation__link{padding:16px}}.mdl-layout__drawer .mdl-navigation .mdl-navigation__link:hover{background-color:#e0e0e0}.mdl-layout__drawer .mdl-navigation .mdl-navigation__link--current{background-color:#000;color:rgb(96,125,139)}@media screen and (min-width:1025px){.mdl-layout--fixed-drawer>.mdl-layout__drawer{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.mdl-layout__drawer-button{display:block;position:absolute;height:48px;width:48px;border:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;overflow:hidden;text-align:center;cursor:pointer;font-size:26px;line-height:50px;font-family:Helvetica,Arial,sans-serif;margin:10px 12px;top:0;left:0;color:rgb(255,255,255);z-index:4}.mdl-layout__header .mdl-layout__drawer-button{position:absolute;color:rgb(255,255,255);background-color:inherit}@media screen and (max-width:1024px){.mdl-layout__header .mdl-layout__drawer-button{margin:4px}}@media screen and (max-width:1024px){.mdl-layout__drawer-button{margin:4px;color:rgba(0,0,0,.5)}}@media screen and (min-width:1025px){.mdl-layout--fixed-drawer>.mdl-layout__drawer-button{display:none}}.mdl-layout__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;box-sizing:border-box;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100%;margin:0;padding:0;border:none;min-height:64px;max-height:1000px;z-index:3;background-color:rgb(96,125,139);color:rgb(255,255,255);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:max-height,box-shadow;transition-property:max-height,box-shadow}@media screen and (max-width:1024px){.mdl-layout__header{min-height:56px}}.mdl-layout--fixed-drawer:not(.is-small-screen)>.mdl-layout__header{margin-left:240px;width:calc(100% - 240px)}.mdl-layout__header>.mdl-layout-icon{position:absolute;left:40px;top:16px;height:32px;width:32px;overflow:hidden;z-index:3;display:block}@media screen and (max-width:1024px){.mdl-layout__header>.mdl-layout-icon{left:16px;top:12px}}.mdl-layout.has-drawer .mdl-layout__header>.mdl-layout-icon{display:none}.mdl-layout__header.is-compact{max-height:64px}@media screen and (max-width:1024px){.mdl-layout__header.is-compact{max-height:56px}}.mdl-layout__header.is-compact.has-tabs{height:112px}@media screen and (max-width:1024px){.mdl-layout__header.is-compact.has-tabs{min-height:104px}}@media screen and (max-width:1024px){.mdl-layout__header{display:none}.mdl-layout--fixed-header>.mdl-layout__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}}.mdl-layout__header--transparent.mdl-layout__header--transparent{background-color:transparent;box-shadow:none}.mdl-layout__header--seamed,.mdl-layout__header--scroll{box-shadow:none}.mdl-layout__header--waterfall{box-shadow:none;overflow:hidden}.mdl-layout__header--waterfall.is-casting-shadow{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-layout__header-row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;box-sizing:border-box;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:64px;margin:0;padding:0 40px 0 80px}@media screen and (max-width:1024px){.mdl-layout__header-row{height:56px;padding:0 16px 0 72px}}.mdl-layout__header-row>*{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.mdl-layout__header--scroll .mdl-layout__header-row{width:100%}.mdl-layout__header-row .mdl-navigation{margin:0;padding:0;height:64px;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}@media screen and (max-width:1024px){.mdl-layout__header-row .mdl-navigation{height:56px}}.mdl-layout__header-row .mdl-navigation__link{display:block;color:rgb(255,255,255);line-height:64px;padding:0 24px}@media screen and (max-width:1024px){.mdl-layout__header-row .mdl-navigation__link{line-height:56px;padding:0 16px}}.mdl-layout__obfuscator{background-color:transparent;position:absolute;top:0;left:0;height:100%;width:100%;z-index:4;visibility:hidden;-webkit-transition-property:background-color;transition-property:background-color;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-layout__drawer.is-visible~.mdl-layout__obfuscator{background-color:rgba(0,0,0,.5);visibility:visible}.mdl-layout__content{-ms-flex:0 1 auto;display:inline-block;overflow-y:auto;overflow-x:hidden;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;z-index:1;-webkit-overflow-scrolling:touch}.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:240px}.mdl-layout__container.has-scrolling-header .mdl-layout__content{overflow:visible}@media screen and (max-width:1024px){.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:0}.mdl-layout__container.has-scrolling-header .mdl-layout__content{overflow-y:auto;overflow-x:hidden}}.mdl-layout__tab-bar{height:96px;margin:0;width:calc(100% - 112px);padding:0 0 0 56px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;background-color:rgb(96,125,139);overflow-y:hidden;overflow-x:scroll}.mdl-layout__tab-bar::-webkit-scrollbar{display:none}@media screen and (max-width:1024px){.mdl-layout__tab-bar{width:calc(100% - 60px);padding:0 0 0 60px}}.mdl-layout--fixed-tabs .mdl-layout__tab-bar{padding:0;overflow:hidden;width:100%}.mdl-layout__tab-bar-container{position:relative;height:48px;width:100%;border:none;margin:0;z-index:2;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;overflow:hidden}.mdl-layout__container>.mdl-layout__tab-bar-container{position:absolute;top:0;left:0}.mdl-layout__tab-bar-button{display:inline-block;position:absolute;top:0;height:48px;width:56px;z-index:4;text-align:center;background-color:rgb(96,125,139);color:transparent;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media screen and (max-width:1024px){.mdl-layout__tab-bar-button{display:none;width:60px}}.mdl-layout--fixed-tabs .mdl-layout__tab-bar-button{display:none}.mdl-layout__tab-bar-button .material-icons{line-height:48px}.mdl-layout__tab-bar-button.is-active{color:rgb(255,255,255)}.mdl-layout__tab-bar-left-button{left:0}.mdl-layout__tab-bar-right-button{right:0}.mdl-layout__tab{margin:0;border:none;padding:0 24px;float:left;position:relative;display:block;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;text-decoration:none;height:48px;line-height:48px;text-align:center;font-weight:500;font-size:14px;text-transform:uppercase;color:rgba(255,255,255,.6);overflow:hidden}@media screen and (max-width:1024px){.mdl-layout__tab{padding:0 12px}}.mdl-layout--fixed-tabs .mdl-layout__tab{float:none;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0}.mdl-layout.is-upgraded .mdl-layout__tab.is-active{color:rgb(255,255,255)}.mdl-layout.is-upgraded .mdl-layout__tab.is-active::after{height:2px;width:100%;display:block;content:" ";bottom:0;left:0;position:absolute;background:rgb(68,138,255);-webkit-animation:border-expand .2s cubic-bezier(.4,0,.4,1).01s alternate forwards;animation:border-expand .2s cubic-bezier(.4,0,.4,1).01s alternate forwards;-webkit-transition:all 1s cubic-bezier(.4,0,1,1);transition:all 1s cubic-bezier(.4,0,1,1)}.mdl-layout__tab .mdl-layout__tab-ripple-container{display:block;position:absolute;height:100%;width:100%;left:0;top:0;z-index:1;overflow:hidden}.mdl-layout__tab .mdl-layout__tab-ripple-container .mdl-ripple{background-color:rgb(255,255,255)}.mdl-layout__tab-panel{display:block}.mdl-layout.is-upgraded .mdl-layout__tab-panel{display:none}.mdl-layout.is-upgraded .mdl-layout__tab-panel.is-active{display:block}.mdl-radio{position:relative;font-size:16px;line-height:24px;display:inline-block;box-sizing:border-box;margin:0;padding-left:0}.mdl-radio.is-upgraded{padding-left:24px}.mdl-radio__button{line-height:24px}.mdl-radio.is-upgraded .mdl-radio__button{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-radio__outer-circle{position:absolute;top:2px;left:0;display:inline-block;box-sizing:border-box;width:16px;height:16px;margin:0;cursor:pointer;border:2px solid rgba(0,0,0,.54);border-radius:50%;z-index:2}.mdl-radio.is-checked .mdl-radio__outer-circle{border:2px solid rgb(96,125,139)}.mdl-radio.is-disabled .mdl-radio__outer-circle{border:2px solid rgba(0,0,0,.26);cursor:auto}.mdl-radio__inner-circle{position:absolute;z-index:1;margin:0;top:6px;left:4px;box-sizing:border-box;width:8px;height:8px;cursor:pointer;-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:-webkit-transform;transition-property:transform;-webkit-transform:scale3d(0,0,0);transform:scale3d(0,0,0);border-radius:50%;background:rgb(96,125,139)}.mdl-radio.is-checked .mdl-radio__inner-circle{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}.mdl-radio.is-disabled .mdl-radio__inner-circle{background:rgba(0,0,0,.26);cursor:auto}.mdl-radio.is-focused .mdl-radio__inner-circle{box-shadow:0 0 0 10px rgba(0,0,0,.1)}.mdl-radio__label{cursor:pointer}.mdl-radio.is-disabled .mdl-radio__label{color:rgba(0,0,0,.26);cursor:auto}.mdl-radio__ripple-container{position:absolute;z-index:2;top:-9px;left:-13px;box-sizing:border-box;width:42px;height:42px;border-radius:50%;cursor:pointer;overflow:hidden;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-radio__ripple-container .mdl-ripple{background:rgb(96,125,139)}.mdl-radio.is-disabled .mdl-radio__ripple-container{cursor:auto}.mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple{background:0 0}_:-ms-input-placeholder,:root .mdl-slider.mdl-slider.is-upgraded{-ms-appearance:none;height:32px;margin:0}.mdl-slider{width:calc(100% - 40px);margin:0 20px}.mdl-slider.is-upgraded{-webkit-appearance:none;-moz-appearance:none;appearance:none;height:2px;background:0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:0;padding:0;color:rgb(96,125,139);-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;z-index:1}.mdl-slider.is-upgraded::-moz-focus-outer{border:0}.mdl-slider.is-upgraded::-ms-tooltip{display:none}.mdl-slider.is-upgraded::-webkit-slider-runnable-track{background:0 0}.mdl-slider.is-upgraded::-moz-range-track{background:0 0;border:none}.mdl-slider.is-upgraded::-ms-track{background:0 0;color:transparent;height:2px;width:100%;border:none}.mdl-slider.is-upgraded::-ms-fill-lower{padding:0;background:linear-gradient(to right,transparent,transparent 16px,rgb(96,125,139)16px,rgb(96,125,139)0)}.mdl-slider.is-upgraded::-ms-fill-upper{padding:0;background:linear-gradient(to left,transparent,transparent 16px,rgba(0,0,0,.26)16px,rgba(0,0,0,.26)0)}.mdl-slider.is-upgraded::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;box-sizing:border-box;border-radius:50%;background:rgb(96,125,139);border:none;-webkit-transition:-webkit-transform .18s cubic-bezier(.4,0,.2,1),border .18s cubic-bezier(.4,0,.2,1),box-shadow .18s cubic-bezier(.4,0,.2,1),background .28s cubic-bezier(.4,0,.2,1);transition:transform .18s cubic-bezier(.4,0,.2,1),border .18s cubic-bezier(.4,0,.2,1),box-shadow .18s cubic-bezier(.4,0,.2,1),background .28s cubic-bezier(.4,0,.2,1)}.mdl-slider.is-upgraded::-moz-range-thumb{-moz-appearance:none;width:12px;height:12px;box-sizing:border-box;border-radius:50%;background-image:none;background:rgb(96,125,139);border:none}.mdl-slider.is-upgraded:focus:not(:active)::-webkit-slider-thumb{box-shadow:0 0 0 10px rgba(96,125,139,.26)}.mdl-slider.is-upgraded:focus:not(:active)::-moz-range-thumb{box-shadow:0 0 0 10px rgba(96,125,139,.26)}.mdl-slider.is-upgraded:active::-webkit-slider-thumb{background-image:none;background:rgb(96,125,139);-webkit-transform:scale(1.5);transform:scale(1.5)}.mdl-slider.is-upgraded:active::-moz-range-thumb{background-image:none;background:rgb(96,125,139);transform:scale(1.5)}.mdl-slider.is-upgraded::-ms-thumb{width:32px;height:32px;border:none;border-radius:50%;background:rgb(96,125,139);-ms-transform:scale(.375);transform:scale(.375);transition:transform .18s cubic-bezier(.4,0,.2,1),background .28s cubic-bezier(.4,0,.2,1)}.mdl-slider.is-upgraded:focus:not(:active)::-ms-thumb{background:radial-gradient(circle closest-side,rgb(96,125,139)0%,rgb(96,125,139)37.5%,rgba(96,125,139,.26)37.5%,rgba(96,125,139,.26)100%);-ms-transform:scale(1);transform:scale(1)}.mdl-slider.is-upgraded:active::-ms-thumb{background:rgb(96,125,139);-ms-transform:scale(.5625);transform:scale(.5625)}.mdl-slider.is-upgraded.is-lowest-value::-webkit-slider-thumb{border:2px solid rgba(0,0,0,.26);background:0 0}.mdl-slider.is-upgraded.is-lowest-value::-moz-range-thumb{border:2px solid rgba(0,0,0,.26);background:0 0}.mdl-slider.is-upgraded.is-lowest-value~.mdl-slider__background-flex>.mdl-slider__background-upper{left:6px}.mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-webkit-slider-thumb{box-shadow:0 0 0 10px rgba(0,0,0,.12);background:rgba(0,0,0,.12)}.mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-moz-range-thumb{box-shadow:0 0 0 10px rgba(0,0,0,.12);background:rgba(0,0,0,.12)}.mdl-slider.is-upgraded.is-lowest-value:active::-webkit-slider-thumb{border:1.6px solid rgba(0,0,0,.26);-webkit-transform:scale(1.5);transform:scale(1.5)}.mdl-slider.is-upgraded.is-lowest-value:active~.mdl-slider__background-flex>.mdl-slider__background-upper{left:9px}.mdl-slider.is-upgraded.is-lowest-value:active::-moz-range-thumb{border:1.5px solid rgba(0,0,0,.26);transform:scale(1.5)}.mdl-slider.is-upgraded.is-lowest-value::-ms-thumb{background:radial-gradient(circle closest-side,transparent 0%,transparent 66.67%,rgba(0,0,0,.26)66.67%,rgba(0,0,0,.26)100%)}.mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-ms-thumb{background:radial-gradient(circle closest-side,rgba(0,0,0,.12)0%,rgba(0,0,0,.12)25%,rgba(0,0,0,.26)25%,rgba(0,0,0,.26)37.5%,rgba(0,0,0,.12)37.5%,rgba(0,0,0,.12)100%);-ms-transform:scale(1);transform:scale(1)}.mdl-slider.is-upgraded.is-lowest-value:active::-ms-thumb{-ms-transform:scale(.5625);transform:scale(.5625);background:radial-gradient(circle closest-side,transparent 0%,transparent 77.78%,rgba(0,0,0,.26)77.78%,rgba(0,0,0,.26)100%)}.mdl-slider.is-upgraded.is-lowest-value::-ms-fill-lower{background:0 0}.mdl-slider.is-upgraded.is-lowest-value::-ms-fill-upper{margin-left:6px}.mdl-slider.is-upgraded.is-lowest-value:active::-ms-fill-upper{margin-left:9px}.mdl-slider.is-upgraded:disabled:focus::-webkit-slider-thumb,.mdl-slider.is-upgraded:disabled:active::-webkit-slider-thumb,.mdl-slider.is-upgraded:disabled::-webkit-slider-thumb{-webkit-transform:scale(.667);transform:scale(.667);background:rgba(0,0,0,.26)}.mdl-slider.is-upgraded:disabled:focus::-moz-range-thumb,.mdl-slider.is-upgraded:disabled:active::-moz-range-thumb,.mdl-slider.is-upgraded:disabled::-moz-range-thumb{transform:scale(.667);background:rgba(0,0,0,.26)}.mdl-slider.is-upgraded:disabled~.mdl-slider__background-flex>.mdl-slider__background-lower{background-color:rgba(0,0,0,.26);left:-6px}.mdl-slider.is-upgraded:disabled~.mdl-slider__background-flex>.mdl-slider__background-upper{left:6px}.mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-webkit-slider-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-webkit-slider-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled::-webkit-slider-thumb{border:3px solid rgba(0,0,0,.26);background:0 0;-webkit-transform:scale(.667);transform:scale(.667)}.mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-moz-range-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-moz-range-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled::-moz-range-thumb{border:3px solid rgba(0,0,0,.26);background:0 0;transform:scale(.667)}.mdl-slider.is-upgraded.is-lowest-value:disabled:active~.mdl-slider__background-flex>.mdl-slider__background-upper{left:6px}.mdl-slider.is-upgraded:disabled:focus::-ms-thumb,.mdl-slider.is-upgraded:disabled:active::-ms-thumb,.mdl-slider.is-upgraded:disabled::-ms-thumb{-ms-transform:scale(.25);transform:scale(.25);background:rgba(0,0,0,.26)}.mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-ms-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled::-ms-thumb{-ms-transform:scale(.25);transform:scale(.25);background:radial-gradient(circle closest-side,transparent 0%,transparent 50%,rgba(0,0,0,.26)50%,rgba(0,0,0,.26)100%)}.mdl-slider.is-upgraded:disabled::-ms-fill-lower{margin-right:6px;background:linear-gradient(to right,transparent,transparent 25px,rgba(0,0,0,.26)25px,rgba(0,0,0,.26)0)}.mdl-slider.is-upgraded:disabled::-ms-fill-upper{margin-left:6px}.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-fill-upper{margin-left:6px}.mdl-slider__ie-container{height:18px;overflow:visible;border:none;margin:none;padding:none}.mdl-slider__container{height:18px;position:relative;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.mdl-slider__container,.mdl-slider__background-flex{background:0 0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.mdl-slider__background-flex{position:absolute;height:2px;width:calc(100% - 52px);top:50%;left:0;margin:0 26px;overflow:hidden;border:0;padding:0;-webkit-transform:translate(0,-1px);-ms-transform:translate(0,-1px);transform:translate(0,-1px)}.mdl-slider__background-lower{background:rgb(96,125,139)}.mdl-slider__background-lower,.mdl-slider__background-upper{-webkit-box-flex:0;-webkit-flex:0;-ms-flex:0;flex:0;position:relative;border:0;padding:0}.mdl-slider__background-upper{background:rgba(0,0,0,.26);-webkit-transition:left .18s cubic-bezier(.4,0,.2,1);transition:left .18s cubic-bezier(.4,0,.2,1)}.mdl-spinner{display:inline-block;position:relative;width:28px;height:28px}.mdl-spinner:not(.is-upgraded).is-active:after{content:"Loading..."}.mdl-spinner.is-upgraded.is-active{-webkit-animation:mdl-spinner__container-rotate 1568.2352941176ms linear infinite;animation:mdl-spinner__container-rotate 1568.2352941176ms linear infinite}@-webkit-keyframes mdl-spinner__container-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes mdl-spinner__container-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.mdl-spinner__layer{position:absolute;width:100%;height:100%;opacity:0}.mdl-spinner__layer-1{border-color:#42a5f5}.mdl-spinner--single-color .mdl-spinner__layer-1{border-color:rgb(96,125,139)}.mdl-spinner.is-active .mdl-spinner__layer-1{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-1-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-1-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both}.mdl-spinner__layer-2{border-color:#f44336}.mdl-spinner--single-color .mdl-spinner__layer-2{border-color:rgb(96,125,139)}.mdl-spinner.is-active .mdl-spinner__layer-2{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-2-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-2-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both}.mdl-spinner__layer-3{border-color:#fdd835}.mdl-spinner--single-color .mdl-spinner__layer-3{border-color:rgb(96,125,139)}.mdl-spinner.is-active .mdl-spinner__layer-3{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-3-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-3-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both}.mdl-spinner__layer-4{border-color:#4caf50}.mdl-spinner--single-color .mdl-spinner__layer-4{border-color:rgb(96,125,139)}.mdl-spinner.is-active .mdl-spinner__layer-4{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-4-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-4-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both}@-webkit-keyframes mdl-spinner__fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg);transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg);transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg);transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg);transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg);transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg);transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg);transform:rotate(1080deg)}}@keyframes mdl-spinner__fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg);transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg);transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg);transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg);transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg);transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg);transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg);transform:rotate(1080deg)}}@-webkit-keyframes mdl-spinner__layer-1-fade-in-out{from,25%{opacity:.99}26%,89%{opacity:0}90%,100%{opacity:.99}}@keyframes mdl-spinner__layer-1-fade-in-out{from,25%{opacity:.99}26%,89%{opacity:0}90%,100%{opacity:.99}}@-webkit-keyframes mdl-spinner__layer-2-fade-in-out{from,15%{opacity:0}25%,50%{opacity:.99}51%{opacity:0}}@keyframes mdl-spinner__layer-2-fade-in-out{from,15%{opacity:0}25%,50%{opacity:.99}51%{opacity:0}}@-webkit-keyframes mdl-spinner__layer-3-fade-in-out{from,40%{opacity:0}50%,75%{opacity:.99}76%{opacity:0}}@keyframes mdl-spinner__layer-3-fade-in-out{from,40%{opacity:0}50%,75%{opacity:.99}76%{opacity:0}}@-webkit-keyframes mdl-spinner__layer-4-fade-in-out{from,65%{opacity:0}75%,90%{opacity:.99}100%{opacity:0}}@keyframes mdl-spinner__layer-4-fade-in-out{from,65%{opacity:0}75%,90%{opacity:.99}100%{opacity:0}}.mdl-spinner__gap-patch{position:absolute;box-sizing:border-box;top:0;left:45%;width:10%;height:100%;overflow:hidden;border-color:inherit}.mdl-spinner__gap-patch .mdl-spinner__circle{width:1000%;left:-450%}.mdl-spinner__circle-clipper{display:inline-block;position:relative;width:50%;height:100%;overflow:hidden;border-color:inherit}.mdl-spinner__circle-clipper .mdl-spinner__circle{width:200%}.mdl-spinner__circle{box-sizing:border-box;height:100%;border-width:3px;border-style:solid;border-color:inherit;border-bottom-color:transparent!important;border-radius:50%;-webkit-animation:none;animation:none;position:absolute;top:0;right:0;bottom:0;left:0}.mdl-spinner__left .mdl-spinner__circle{border-right-color:transparent!important;-webkit-transform:rotate(129deg);-ms-transform:rotate(129deg);transform:rotate(129deg)}.mdl-spinner.is-active .mdl-spinner__left .mdl-spinner__circle{-webkit-animation:mdl-spinner__left-spin 1333ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__left-spin 1333ms cubic-bezier(.4,0,.2,1)infinite both}.mdl-spinner__right .mdl-spinner__circle{left:-100%;border-left-color:transparent!important;-webkit-transform:rotate(-129deg);-ms-transform:rotate(-129deg);transform:rotate(-129deg)}.mdl-spinner.is-active .mdl-spinner__right .mdl-spinner__circle{-webkit-animation:mdl-spinner__right-spin 1333ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__right-spin 1333ms cubic-bezier(.4,0,.2,1)infinite both}@-webkit-keyframes mdl-spinner__left-spin{from{-webkit-transform:rotate(130deg);transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg);transform:rotate(130deg)}}@keyframes mdl-spinner__left-spin{from{-webkit-transform:rotate(130deg);transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg);transform:rotate(130deg)}}@-webkit-keyframes mdl-spinner__right-spin{from{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}}@keyframes mdl-spinner__right-spin{from{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}}.mdl-switch{position:relative;z-index:1;vertical-align:middle;display:inline-block;box-sizing:border-box;width:100%;height:24px;margin:0;padding:0;overflow:visible;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mdl-switch.is-upgraded{padding-left:28px}.mdl-switch__input{line-height:24px}.mdl-switch.is-upgraded .mdl-switch__input{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-switch__track{background:rgba(0,0,0,.26);position:absolute;left:0;top:5px;height:14px;width:36px;border-radius:14px;cursor:pointer}.mdl-switch.is-checked .mdl-switch__track{background:rgba(96,125,139,.5)}.mdl-switch.is-disabled .mdl-switch__track{background:rgba(0,0,0,.12);cursor:auto}.mdl-switch__thumb{background:#fafafa;position:absolute;left:0;top:2px;height:20px;width:20px;border-radius:50%;cursor:pointer;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:left;transition-property:left}.mdl-switch.is-checked .mdl-switch__thumb{background:rgb(96,125,139);left:16px;box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12)}.mdl-switch.is-disabled .mdl-switch__thumb{background:#bdbdbd;cursor:auto}.mdl-switch__focus-helper{position:absolute;top:50%;left:50%;-webkit-transform:translate(-4px,-4px);-ms-transform:translate(-4px,-4px);transform:translate(-4px,-4px);display:inline-block;box-sizing:border-box;width:8px;height:8px;border-radius:50%;background-color:transparent}.mdl-switch.is-focused .mdl-switch__focus-helper{box-shadow:0 0 0 20px rgba(0,0,0,.1);background-color:rgba(0,0,0,.1)}.mdl-switch.is-focused.is-checked .mdl-switch__focus-helper{box-shadow:0 0 0 20px rgba(96,125,139,.26);background-color:rgba(96,125,139,.26)}.mdl-switch__label{position:relative;cursor:pointer;font-size:16px;line-height:24px;margin:0;left:24px}.mdl-switch.is-disabled .mdl-switch__label{color:#bdbdbd;cursor:auto}.mdl-switch__ripple-container{position:absolute;z-index:2;top:-12px;left:-14px;box-sizing:border-box;width:48px;height:48px;border-radius:50%;cursor:pointer;overflow:hidden;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000);-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-timing-function:step-end;transition-timing-function:step-end;-webkit-transition-property:left;transition-property:left}.mdl-switch__ripple-container .mdl-ripple{background:rgb(96,125,139)}.mdl-switch.is-disabled .mdl-switch__ripple-container{cursor:auto}.mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple{background:0 0}.mdl-switch.is-checked .mdl-switch__ripple-container{cursor:auto;left:2px}.mdl-tabs{display:block;width:100%}.mdl-tabs__tab-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;height:48px;padding:0;margin:0;border-bottom:1px solid #e0e0e0}.mdl-tabs__tab{margin:0;border:none;padding:0 24px;float:left;position:relative;display:block;color:red;text-decoration:none;height:48px;line-height:48px;text-align:center;font-weight:500;font-size:14px;text-transform:uppercase;color:rgba(0,0,0,.54);overflow:hidden}.mdl-tabs.is-upgraded .mdl-tabs__tab.is-active{color:rgba(0,0,0,.87)}.mdl-tabs.is-upgraded .mdl-tabs__tab.is-active:after{height:2px;width:100%;display:block;content:" ";bottom:0;left:0;position:absolute;background:rgb(96,125,139);-webkit-animation:border-expand .2s cubic-bezier(.4,0,.4,1).01s alternate forwards;animation:border-expand .2s cubic-bezier(.4,0,.4,1).01s alternate forwards;-webkit-transition:all 1s cubic-bezier(.4,0,1,1);transition:all 1s cubic-bezier(.4,0,1,1)}.mdl-tabs__tab .mdl-tabs__ripple-container{display:block;position:absolute;height:100%;width:100%;left:0;top:0;z-index:1;overflow:hidden}.mdl-tabs__tab .mdl-tabs__ripple-container .mdl-ripple{background:rgb(96,125,139)}.mdl-tabs__panel{display:block}.mdl-tabs.is-upgraded .mdl-tabs__panel{display:none}.mdl-tabs.is-upgraded .mdl-tabs__panel.is-active{display:block}@-webkit-keyframes border-expand{0%{opacity:0;width:0}100%{opacity:1;width:100%}}@keyframes border-expand{0%{opacity:0;width:0}100%{opacity:1;width:100%}}.mdl-textfield{position:relative;font-size:16px;display:inline-block;box-sizing:border-box;width:300px;max-width:100%;margin:0;padding:20px 0}.mdl-textfield .mdl-button{position:absolute;bottom:20px}.mdl-textfield--align-right{text-align:right}.mdl-textfield--full-width{width:100%}.mdl-textfield--expandable{min-width:32px;width:auto;min-height:32px}.mdl-textfield__input{border:none;border-bottom:1px solid rgba(0,0,0,.12);display:inline-block;font-size:16px;margin:0;padding:4px 0;width:100%;background:16px;text-align:left;color:inherit}.mdl-textfield.is-focused .mdl-textfield__input{outline:none}.mdl-textfield.is-invalid .mdl-textfield__input{border-color:#de3226;box-shadow:none}.mdl-textfield.is-disabled .mdl-textfield__input{background-color:transparent;border-bottom:1px dotted rgba(0,0,0,.12)}.mdl-textfield__label{bottom:0;color:rgba(0,0,0,.26);font-size:16px;left:0;right:0;pointer-events:none;position:absolute;top:24px;width:100%;overflow:hidden;white-space:nowrap;text-align:left}.mdl-textfield.is-dirty .mdl-textfield__label{visibility:hidden}.mdl-textfield--floating-label .mdl-textfield__label{-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-textfield--floating-label.is-focused .mdl-textfield__label,.mdl-textfield--floating-label.is-dirty .mdl-textfield__label{color:rgb(96,125,139);font-size:12px;top:4px;visibility:visible}.mdl-textfield--floating-label.is-focused .mdl-textfield__expandable-holder .mdl-textfield__label,.mdl-textfield--floating-label.is-dirty .mdl-textfield__expandable-holder .mdl-textfield__label{top:-16px}.mdl-textfield--floating-label.is-invalid .mdl-textfield__label{color:#de3226;font-size:12px}.mdl-textfield__label:after{background-color:rgb(96,125,139);bottom:20px;content:'';height:2px;left:45%;position:absolute;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);visibility:hidden;width:10px}.mdl-textfield.is-focused .mdl-textfield__label:after{left:0;visibility:visible;width:100%}.mdl-textfield.is-invalid .mdl-textfield__label:after{background-color:#de3226}.mdl-textfield__error{color:#de3226;position:absolute;font-size:12px;margin-top:3px;visibility:hidden}.mdl-textfield.is-invalid .mdl-textfield__error{visibility:visible}.mdl-textfield__expandable-holder{display:inline-block;position:relative;margin-left:32px;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);display:inline-block;max-width:.1px}.mdl-textfield.is-focused .mdl-textfield__expandable-holder,.mdl-textfield.is-dirty .mdl-textfield__expandable-holder{max-width:600px}.mdl-textfield__expandable-holder .mdl-textfield__label:after{bottom:0}.mdl-tooltip{-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:top center;-ms-transform-origin:top center;transform-origin:top center;will-change:transform;z-index:999;background:rgba(97,97,97,.9);border-radius:2px;color:#fff;display:inline-block;font-size:10px;font-weight:500;line-height:14px;max-width:170px;position:fixed;top:-500px;left:-500px;padding:8px;text-align:center}.mdl-tooltip.is-active{-webkit-animation:pulse 200ms cubic-bezier(0,0,.2,1)forwards;animation:pulse 200ms cubic-bezier(0,0,.2,1)forwards}.mdl-tooltip--large{line-height:14px;font-size:14px;padding:16px}@-webkit-keyframes pulse{0%{-webkit-transform:scale(0);transform:scale(0);opacity:0}50%{-webkit-transform:scale(.99);transform:scale(.99)}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1;visibility:visible}}@keyframes pulse{0%{-webkit-transform:scale(0);transform:scale(0);opacity:0}50%{-webkit-transform:scale(.99);transform:scale(.99)}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1;visibility:visible}}.mdl-shadow--2dp{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-shadow--3dp{box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12)}.mdl-shadow--4dp{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2)}.mdl-shadow--6dp{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.2)}.mdl-shadow--8dp{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.2)}.mdl-shadow--16dp{box-shadow:0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.2)}.mdl-grid{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;margin:0 auto;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.mdl-grid.mdl-grid--no-spacing{padding:0}.mdl-cell{box-sizing:border-box}.mdl-cell--top{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start}.mdl-cell--middle{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.mdl-cell--bottom{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end}.mdl-cell--stretch{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch}.mdl-grid.mdl-grid--no-spacing>.mdl-cell{margin:0}@media (max-width:479px){.mdl-grid{padding:8px}.mdl-cell{margin:8px;width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell{width:100%}.mdl-cell--hide-phone{display:none!important}.mdl-cell--1-col{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col{width:25%}.mdl-cell--1-col-phone.mdl-cell--1-col-phone{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col-phone.mdl-cell--1-col-phone{width:25%}.mdl-cell--2-col{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col{width:50%}.mdl-cell--2-col-phone.mdl-cell--2-col-phone{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col-phone.mdl-cell--2-col-phone{width:50%}.mdl-cell--3-col{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col{width:75%}.mdl-cell--3-col-phone.mdl-cell--3-col-phone{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col-phone.mdl-cell--3-col-phone{width:75%}.mdl-cell--4-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col{width:100%}.mdl-cell--4-col-phone.mdl-cell--4-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col-phone.mdl-cell--4-col-phone{width:100%}.mdl-cell--5-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col{width:100%}.mdl-cell--5-col-phone.mdl-cell--5-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col-phone.mdl-cell--5-col-phone{width:100%}.mdl-cell--6-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col{width:100%}.mdl-cell--6-col-phone.mdl-cell--6-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col-phone.mdl-cell--6-col-phone{width:100%}.mdl-cell--7-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col{width:100%}.mdl-cell--7-col-phone.mdl-cell--7-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col-phone.mdl-cell--7-col-phone{width:100%}.mdl-cell--8-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col{width:100%}.mdl-cell--8-col-phone.mdl-cell--8-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col-phone.mdl-cell--8-col-phone{width:100%}.mdl-cell--9-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col{width:100%}.mdl-cell--9-col-phone.mdl-cell--9-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col-phone.mdl-cell--9-col-phone{width:100%}.mdl-cell--10-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col{width:100%}.mdl-cell--10-col-phone.mdl-cell--10-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col-phone.mdl-cell--10-col-phone{width:100%}.mdl-cell--11-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col{width:100%}.mdl-cell--11-col-phone.mdl-cell--11-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col-phone.mdl-cell--11-col-phone{width:100%}.mdl-cell--12-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col{width:100%}.mdl-cell--12-col-phone.mdl-cell--12-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col-phone.mdl-cell--12-col-phone{width:100%}}@media (min-width:480px) and (max-width:839px){.mdl-grid{padding:8px}.mdl-cell{margin:8px;width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell{width:50%}.mdl-cell--hide-tablet{display:none!important}.mdl-cell--1-col{width:calc(12.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col{width:12.5%}.mdl-cell--1-col-tablet.mdl-cell--1-col-tablet{width:calc(12.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col-tablet.mdl-cell--1-col-tablet{width:12.5%}.mdl-cell--2-col{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col{width:25%}.mdl-cell--2-col-tablet.mdl-cell--2-col-tablet{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col-tablet.mdl-cell--2-col-tablet{width:25%}.mdl-cell--3-col{width:calc(37.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col{width:37.5%}.mdl-cell--3-col-tablet.mdl-cell--3-col-tablet{width:calc(37.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col-tablet.mdl-cell--3-col-tablet{width:37.5%}.mdl-cell--4-col{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col{width:50%}.mdl-cell--4-col-tablet.mdl-cell--4-col-tablet{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col-tablet.mdl-cell--4-col-tablet{width:50%}.mdl-cell--5-col{width:calc(62.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col{width:62.5%}.mdl-cell--5-col-tablet.mdl-cell--5-col-tablet{width:calc(62.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col-tablet.mdl-cell--5-col-tablet{width:62.5%}.mdl-cell--6-col{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col{width:75%}.mdl-cell--6-col-tablet.mdl-cell--6-col-tablet{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col-tablet.mdl-cell--6-col-tablet{width:75%}.mdl-cell--7-col{width:calc(87.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col{width:87.5%}.mdl-cell--7-col-tablet.mdl-cell--7-col-tablet{width:calc(87.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col-tablet.mdl-cell--7-col-tablet{width:87.5%}.mdl-cell--8-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col{width:100%}.mdl-cell--8-col-tablet.mdl-cell--8-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col-tablet.mdl-cell--8-col-tablet{width:100%}.mdl-cell--9-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col{width:100%}.mdl-cell--9-col-tablet.mdl-cell--9-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col-tablet.mdl-cell--9-col-tablet{width:100%}.mdl-cell--10-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col{width:100%}.mdl-cell--10-col-tablet.mdl-cell--10-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col-tablet.mdl-cell--10-col-tablet{width:100%}.mdl-cell--11-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col{width:100%}.mdl-cell--11-col-tablet.mdl-cell--11-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col-tablet.mdl-cell--11-col-tablet{width:100%}.mdl-cell--12-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col{width:100%}.mdl-cell--12-col-tablet.mdl-cell--12-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col-tablet.mdl-cell--12-col-tablet{width:100%}}@media (min-width:840px){.mdl-grid{padding:8px}.mdl-cell{margin:8px;width:calc(33.33333% - 16px)}.mdl-grid--no-spacing>.mdl-cell{width:33.33333%}.mdl-cell--hide-desktop{display:none!important}.mdl-cell--1-col{width:calc(8.33333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col{width:8.33333%}.mdl-cell--1-col-desktop.mdl-cell--1-col-desktop{width:calc(8.33333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col-desktop.mdl-cell--1-col-desktop{width:8.33333%}.mdl-cell--2-col{width:calc(16.66667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col{width:16.66667%}.mdl-cell--2-col-desktop.mdl-cell--2-col-desktop{width:calc(16.66667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col-desktop.mdl-cell--2-col-desktop{width:16.66667%}.mdl-cell--3-col{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col{width:25%}.mdl-cell--3-col-desktop.mdl-cell--3-col-desktop{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col-desktop.mdl-cell--3-col-desktop{width:25%}.mdl-cell--4-col{width:calc(33.33333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col{width:33.33333%}.mdl-cell--4-col-desktop.mdl-cell--4-col-desktop{width:calc(33.33333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col-desktop.mdl-cell--4-col-desktop{width:33.33333%}.mdl-cell--5-col{width:calc(41.66667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col{width:41.66667%}.mdl-cell--5-col-desktop.mdl-cell--5-col-desktop{width:calc(41.66667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col-desktop.mdl-cell--5-col-desktop{width:41.66667%}.mdl-cell--6-col{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col{width:50%}.mdl-cell--6-col-desktop.mdl-cell--6-col-desktop{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col-desktop.mdl-cell--6-col-desktop{width:50%}.mdl-cell--7-col{width:calc(58.33333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col{width:58.33333%}.mdl-cell--7-col-desktop.mdl-cell--7-col-desktop{width:calc(58.33333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col-desktop.mdl-cell--7-col-desktop{width:58.33333%}.mdl-cell--8-col{width:calc(66.66667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col{width:66.66667%}.mdl-cell--8-col-desktop.mdl-cell--8-col-desktop{width:calc(66.66667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col-desktop.mdl-cell--8-col-desktop{width:66.66667%}.mdl-cell--9-col{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col{width:75%}.mdl-cell--9-col-desktop.mdl-cell--9-col-desktop{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col-desktop.mdl-cell--9-col-desktop{width:75%}.mdl-cell--10-col{width:calc(83.33333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col{width:83.33333%}.mdl-cell--10-col-desktop.mdl-cell--10-col-desktop{width:calc(83.33333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col-desktop.mdl-cell--10-col-desktop{width:83.33333%}.mdl-cell--11-col{width:calc(91.66667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col{width:91.66667%}.mdl-cell--11-col-desktop.mdl-cell--11-col-desktop{width:calc(91.66667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col-desktop.mdl-cell--11-col-desktop{width:91.66667%}.mdl-cell--12-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col{width:100%}.mdl-cell--12-col-desktop.mdl-cell--12-col-desktop{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col-desktop.mdl-cell--12-col-desktop{width:100%}}body{margin:0}.styleguide-demo h1{margin:48px 24px 0}.styleguide-demo h1:after{content:'';display:block;width:100%;border-bottom:1px solid rgba(0,0,0,.5);margin-top:24px}.styleguide-demo{opacity:0;-webkit-transition:opacity .6s ease;transition:opacity .6s ease}.styleguide-masthead{height:256px;background:#212121;padding:115px 16px 0}.styleguide-container{position:relative;max-width:960px;width:100%}.styleguide-title{color:#fff;bottom:auto;position:relative;font-size:56px;font-weight:300;line-height:1;letter-spacing:-.02em}.styleguide-title:after{border-bottom:0}.styleguide-title span{font-weight:300}.mdl-styleguide .mdl-layout__drawer .mdl-navigation__link{padding:10px 24px}.demosLoaded .styleguide-demo{opacity:1}iframe{display:block;width:100%;border:none}iframe.heightSet{overflow:hidden}.demo-wrapper{margin:24px}.demo-wrapper iframe{border:1px solid rgba(0,0,0,.5)} \ No newline at end of file +@charset "UTF-8";html{color:rgba(0,0,0,.87)}::-moz-selection{background:#b3d4fc;text-shadow:none}::selection{background:#b3d4fc;text-shadow:none}hr{display:block;height:1px;border:0;border-top:1px solid #ccc;margin:1em 0;padding:0}audio,canvas,img,svg,video{vertical-align:middle}fieldset{border:0;margin:0;padding:0}textarea{resize:vertical}.browsehappy{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}@media print{*,*:before,*:after{background:transparent!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href)")"}abbr[title]:after{content:" (" attr(title)")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}a,.mdl-accordion,.mdl-button,.mdl-card,.mdl-checkbox,.mdl-dropdown-menu,.mdl-icon-toggle,.mdl-item,.mdl-radio,.mdl-slider,.mdl-switch,.mdl-tabs__tab{-webkit-tap-highlight-color:transparent;-webkit-tap-highlight-color:rgba(255,255,255,0)}html{width:100%;height:100%;-ms-touch-action:manipulation;touch-action:manipulation}body{width:100%;min-height:100%}main{display:block}*[hidden]{display:none!important}html,body{font-family:"Helvetica","Arial",sans-serif;font-size:14px;font-weight:400;line-height:20px}h1,h2,h3,h4,h5,h6,p{padding:0}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;line-height:1.35;letter-spacing:-.02em;opacity:.54;font-size:.6em}h1{font-size:56px;line-height:1.35;letter-spacing:-.02em;margin:24px 0}h1,h2{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400}h2{font-size:45px;line-height:48px}h2,h3{margin:24px 0}h3{font-size:34px;line-height:40px}h3,h4{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400}h4{font-size:24px;line-height:32px;-moz-osx-font-smoothing:grayscale;margin:24px 0 16px}h5{font-size:20px;font-weight:500;line-height:1;letter-spacing:.02em}h5,h6{font-family:"Roboto","Helvetica","Arial",sans-serif;margin:24px 0 16px}h6{font-size:16px;letter-spacing:.04em}h6,p{font-weight:400;line-height:24px}p{font-size:14px;letter-spacing:0;margin:0 0 16px}a{color:rgb(83,109,254);font-weight:500}blockquote{font-family:"Roboto","Helvetica","Arial",sans-serif;position:relative;font-size:24px;font-weight:300;font-style:italic;line-height:1.35;letter-spacing:.08em}blockquote:before{position:absolute;left:-.5em;content:'“'}blockquote:after{content:'”';margin-left:-.05em}mark{background-color:#f4ff81}dt{font-weight:700}address{font-size:12px;line-height:1;font-style:normal}address,ul,ol{font-weight:400;letter-spacing:0}ul,ol{font-size:14px;line-height:24px}.mdl-typography--display-4,.mdl-typography--display-4-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:112px;font-weight:300;line-height:1;letter-spacing:-.04em}.mdl-typography--display-4-color-contrast{opacity:.54}.mdl-typography--display-3,.mdl-typography--display-3-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:56px;font-weight:400;line-height:1.35;letter-spacing:-.02em}.mdl-typography--display-3-color-contrast{opacity:.54}.mdl-typography--display-2,.mdl-typography--display-2-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:45px;font-weight:400;line-height:48px}.mdl-typography--display-2-color-contrast{opacity:.54}.mdl-typography--display-1,.mdl-typography--display-1-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:34px;font-weight:400;line-height:40px}.mdl-typography--display-1-color-contrast{opacity:.54}.mdl-typography--headline,.mdl-typography--headline-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:24px;font-weight:400;line-height:32px;-moz-osx-font-smoothing:grayscale}.mdl-typography--headline-color-contrast{opacity:.87}.mdl-typography--title,.mdl-typography--title-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:20px;font-weight:500;line-height:1;letter-spacing:.02em}.mdl-typography--title-color-contrast{opacity:.87}.mdl-typography--subhead,.mdl-typography--subhead-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:16px;font-weight:400;line-height:24px;letter-spacing:.04em}.mdl-typography--subhead-color-contrast{opacity:.87}.mdl-typography--body-2,.mdl-typography--body-2-color-contrast{font-size:14px;font-weight:700;line-height:24px;letter-spacing:0}.mdl-typography--body-2-color-contrast{opacity:.87}.mdl-typography--body-1,.mdl-typography--body-1-color-contrast{font-size:14px;font-weight:400;line-height:24px;letter-spacing:0}.mdl-typography--body-1-color-contrast{opacity:.87}.mdl-typography--body-2-force-preferred-font,.mdl-typography--body-2-force-preferred-font-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:14px;font-weight:500;line-height:24px;letter-spacing:0}.mdl-typography--body-2-force-preferred-font-color-contrast{opacity:.87}.mdl-typography--body-1-force-preferred-font,.mdl-typography--body-1-force-preferred-font-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:14px;font-weight:400;line-height:24px;letter-spacing:0}.mdl-typography--body-1-force-preferred-font-color-contrast{opacity:.87}.mdl-typography--caption,.mdl-typography--caption-force-preferred-font{font-size:12px;font-weight:400;line-height:1;letter-spacing:0}.mdl-typography--caption-force-preferred-font{font-family:"Roboto","Helvetica","Arial",sans-serif}.mdl-typography--caption-color-contrast,.mdl-typography--caption-force-preferred-font-color-contrast{font-size:12px;font-weight:400;line-height:1;letter-spacing:0;opacity:.54}.mdl-typography--caption-force-preferred-font-color-contrast,.mdl-typography--menu{font-family:"Roboto","Helvetica","Arial",sans-serif}.mdl-typography--menu{font-size:14px;font-weight:500;line-height:1;letter-spacing:0}.mdl-typography--menu-color-contrast{opacity:.87}.mdl-typography--menu-color-contrast,.mdl-typography--button,.mdl-typography--button-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:14px;font-weight:500;line-height:1;letter-spacing:0}.mdl-typography--button,.mdl-typography--button-color-contrast{text-transform:uppercase}.mdl-typography--button-color-contrast{opacity:.87}.mdl-typography--text-left{text-align:left}.mdl-typography--text-right{text-align:right}.mdl-typography--text-center{text-align:center}.mdl-typography--text-justify{text-align:justify}.mdl-typography--text-nowrap{white-space:nowrap}.mdl-typography--text-lowercase{text-transform:lowercase}.mdl-typography--text-uppercase{text-transform:uppercase}.mdl-typography--text-capitalize{text-transform:capitalize}.mdl-typography--font-thin{font-weight:200!important}.mdl-typography--font-light{font-weight:300!important}.mdl-typography--font-regular{font-weight:400!important}.mdl-typography--font-medium{font-weight:500!important}.mdl-typography--font-bold{font-weight:700!important}.mdl-typography--font-black{font-weight:900!important}.mdl-color-text--red{color:#f44336 !important}.mdl-color--red{background-color:#f44336 !important}.mdl-color-text--red-50{color:#ffebee !important}.mdl-color--red-50{background-color:#ffebee !important}.mdl-color-text--red-100{color:#ffcdd2 !important}.mdl-color--red-100{background-color:#ffcdd2 !important}.mdl-color-text--red-200{color:#ef9a9a !important}.mdl-color--red-200{background-color:#ef9a9a !important}.mdl-color-text--red-300{color:#e57373 !important}.mdl-color--red-300{background-color:#e57373 !important}.mdl-color-text--red-400{color:#ef5350 !important}.mdl-color--red-400{background-color:#ef5350 !important}.mdl-color-text--red-500{color:#f44336 !important}.mdl-color--red-500{background-color:#f44336 !important}.mdl-color-text--red-600{color:#e53935 !important}.mdl-color--red-600{background-color:#e53935 !important}.mdl-color-text--red-700{color:#d32f2f !important}.mdl-color--red-700{background-color:#d32f2f !important}.mdl-color-text--red-800{color:#c62828 !important}.mdl-color--red-800{background-color:#c62828 !important}.mdl-color-text--red-900{color:#b71c1c !important}.mdl-color--red-900{background-color:#b71c1c !important}.mdl-color-text--red-A100{color:#ff8a80 !important}.mdl-color--red-A100{background-color:#ff8a80 !important}.mdl-color-text--red-A200{color:#ff5252 !important}.mdl-color--red-A200{background-color:#ff5252 !important}.mdl-color-text--red-A400{color:#ff1744 !important}.mdl-color--red-A400{background-color:#ff1744 !important}.mdl-color-text--red-A700{color:#d50000 !important}.mdl-color--red-A700{background-color:#d50000 !important}.mdl-color-text--pink{color:#e91e63 !important}.mdl-color--pink{background-color:#e91e63 !important}.mdl-color-text--pink-50{color:#fce4ec !important}.mdl-color--pink-50{background-color:#fce4ec !important}.mdl-color-text--pink-100{color:#f8bbd0 !important}.mdl-color--pink-100{background-color:#f8bbd0 !important}.mdl-color-text--pink-200{color:#f48fb1 !important}.mdl-color--pink-200{background-color:#f48fb1 !important}.mdl-color-text--pink-300{color:#f06292 !important}.mdl-color--pink-300{background-color:#f06292 !important}.mdl-color-text--pink-400{color:#ec407a !important}.mdl-color--pink-400{background-color:#ec407a !important}.mdl-color-text--pink-500{color:#e91e63 !important}.mdl-color--pink-500{background-color:#e91e63 !important}.mdl-color-text--pink-600{color:#d81b60 !important}.mdl-color--pink-600{background-color:#d81b60 !important}.mdl-color-text--pink-700{color:#c2185b !important}.mdl-color--pink-700{background-color:#c2185b !important}.mdl-color-text--pink-800{color:#ad1457 !important}.mdl-color--pink-800{background-color:#ad1457 !important}.mdl-color-text--pink-900{color:#880e4f !important}.mdl-color--pink-900{background-color:#880e4f !important}.mdl-color-text--pink-A100{color:#ff80ab !important}.mdl-color--pink-A100{background-color:#ff80ab !important}.mdl-color-text--pink-A200{color:#ff4081 !important}.mdl-color--pink-A200{background-color:#ff4081 !important}.mdl-color-text--pink-A400{color:#f50057 !important}.mdl-color--pink-A400{background-color:#f50057 !important}.mdl-color-text--pink-A700{color:#c51162 !important}.mdl-color--pink-A700{background-color:#c51162 !important}.mdl-color-text--purple{color:#9c27b0 !important}.mdl-color--purple{background-color:#9c27b0 !important}.mdl-color-text--purple-50{color:#f3e5f5 !important}.mdl-color--purple-50{background-color:#f3e5f5 !important}.mdl-color-text--purple-100{color:#e1bee7 !important}.mdl-color--purple-100{background-color:#e1bee7 !important}.mdl-color-text--purple-200{color:#ce93d8 !important}.mdl-color--purple-200{background-color:#ce93d8 !important}.mdl-color-text--purple-300{color:#ba68c8 !important}.mdl-color--purple-300{background-color:#ba68c8 !important}.mdl-color-text--purple-400{color:#ab47bc !important}.mdl-color--purple-400{background-color:#ab47bc !important}.mdl-color-text--purple-500{color:#9c27b0 !important}.mdl-color--purple-500{background-color:#9c27b0 !important}.mdl-color-text--purple-600{color:#8e24aa !important}.mdl-color--purple-600{background-color:#8e24aa !important}.mdl-color-text--purple-700{color:#7b1fa2 !important}.mdl-color--purple-700{background-color:#7b1fa2 !important}.mdl-color-text--purple-800{color:#6a1b9a !important}.mdl-color--purple-800{background-color:#6a1b9a !important}.mdl-color-text--purple-900{color:#4a148c !important}.mdl-color--purple-900{background-color:#4a148c !important}.mdl-color-text--purple-A100{color:#ea80fc !important}.mdl-color--purple-A100{background-color:#ea80fc !important}.mdl-color-text--purple-A200{color:#e040fb !important}.mdl-color--purple-A200{background-color:#e040fb !important}.mdl-color-text--purple-A400{color:#d500f9 !important}.mdl-color--purple-A400{background-color:#d500f9 !important}.mdl-color-text--purple-A700{color:#a0f !important}.mdl-color--purple-A700{background-color:#a0f !important}.mdl-color-text--deep-purple{color:#673ab7 !important}.mdl-color--deep-purple{background-color:#673ab7 !important}.mdl-color-text--deep-purple-50{color:#ede7f6 !important}.mdl-color--deep-purple-50{background-color:#ede7f6 !important}.mdl-color-text--deep-purple-100{color:#d1c4e9 !important}.mdl-color--deep-purple-100{background-color:#d1c4e9 !important}.mdl-color-text--deep-purple-200{color:#b39ddb !important}.mdl-color--deep-purple-200{background-color:#b39ddb !important}.mdl-color-text--deep-purple-300{color:#9575cd !important}.mdl-color--deep-purple-300{background-color:#9575cd !important}.mdl-color-text--deep-purple-400{color:#7e57c2 !important}.mdl-color--deep-purple-400{background-color:#7e57c2 !important}.mdl-color-text--deep-purple-500{color:#673ab7 !important}.mdl-color--deep-purple-500{background-color:#673ab7 !important}.mdl-color-text--deep-purple-600{color:#5e35b1 !important}.mdl-color--deep-purple-600{background-color:#5e35b1 !important}.mdl-color-text--deep-purple-700{color:#512da8 !important}.mdl-color--deep-purple-700{background-color:#512da8 !important}.mdl-color-text--deep-purple-800{color:#4527a0 !important}.mdl-color--deep-purple-800{background-color:#4527a0 !important}.mdl-color-text--deep-purple-900{color:#311b92 !important}.mdl-color--deep-purple-900{background-color:#311b92 !important}.mdl-color-text--deep-purple-A100{color:#b388ff !important}.mdl-color--deep-purple-A100{background-color:#b388ff !important}.mdl-color-text--deep-purple-A200{color:#7c4dff !important}.mdl-color--deep-purple-A200{background-color:#7c4dff !important}.mdl-color-text--deep-purple-A400{color:#651fff !important}.mdl-color--deep-purple-A400{background-color:#651fff !important}.mdl-color-text--deep-purple-A700{color:#6200ea !important}.mdl-color--deep-purple-A700{background-color:#6200ea !important}.mdl-color-text--indigo{color:#3f51b5 !important}.mdl-color--indigo{background-color:#3f51b5 !important}.mdl-color-text--indigo-50{color:#e8eaf6 !important}.mdl-color--indigo-50{background-color:#e8eaf6 !important}.mdl-color-text--indigo-100{color:#c5cae9 !important}.mdl-color--indigo-100{background-color:#c5cae9 !important}.mdl-color-text--indigo-200{color:#9fa8da !important}.mdl-color--indigo-200{background-color:#9fa8da !important}.mdl-color-text--indigo-300{color:#7986cb !important}.mdl-color--indigo-300{background-color:#7986cb !important}.mdl-color-text--indigo-400{color:#5c6bc0 !important}.mdl-color--indigo-400{background-color:#5c6bc0 !important}.mdl-color-text--indigo-500{color:#3f51b5 !important}.mdl-color--indigo-500{background-color:#3f51b5 !important}.mdl-color-text--indigo-600{color:#3949ab !important}.mdl-color--indigo-600{background-color:#3949ab !important}.mdl-color-text--indigo-700{color:#303f9f !important}.mdl-color--indigo-700{background-color:#303f9f !important}.mdl-color-text--indigo-800{color:#283593 !important}.mdl-color--indigo-800{background-color:#283593 !important}.mdl-color-text--indigo-900{color:#1a237e !important}.mdl-color--indigo-900{background-color:#1a237e !important}.mdl-color-text--indigo-A100{color:#8c9eff !important}.mdl-color--indigo-A100{background-color:#8c9eff !important}.mdl-color-text--indigo-A200{color:#536dfe !important}.mdl-color--indigo-A200{background-color:#536dfe !important}.mdl-color-text--indigo-A400{color:#3d5afe !important}.mdl-color--indigo-A400{background-color:#3d5afe !important}.mdl-color-text--indigo-A700{color:#304ffe !important}.mdl-color--indigo-A700{background-color:#304ffe !important}.mdl-color-text--blue{color:#2196f3 !important}.mdl-color--blue{background-color:#2196f3 !important}.mdl-color-text--blue-50{color:#e3f2fd !important}.mdl-color--blue-50{background-color:#e3f2fd !important}.mdl-color-text--blue-100{color:#bbdefb !important}.mdl-color--blue-100{background-color:#bbdefb !important}.mdl-color-text--blue-200{color:#90caf9 !important}.mdl-color--blue-200{background-color:#90caf9 !important}.mdl-color-text--blue-300{color:#64b5f6 !important}.mdl-color--blue-300{background-color:#64b5f6 !important}.mdl-color-text--blue-400{color:#42a5f5 !important}.mdl-color--blue-400{background-color:#42a5f5 !important}.mdl-color-text--blue-500{color:#2196f3 !important}.mdl-color--blue-500{background-color:#2196f3 !important}.mdl-color-text--blue-600{color:#1e88e5 !important}.mdl-color--blue-600{background-color:#1e88e5 !important}.mdl-color-text--blue-700{color:#1976d2 !important}.mdl-color--blue-700{background-color:#1976d2 !important}.mdl-color-text--blue-800{color:#1565c0 !important}.mdl-color--blue-800{background-color:#1565c0 !important}.mdl-color-text--blue-900{color:#0d47a1 !important}.mdl-color--blue-900{background-color:#0d47a1 !important}.mdl-color-text--blue-A100{color:#82b1ff !important}.mdl-color--blue-A100{background-color:#82b1ff !important}.mdl-color-text--blue-A200{color:#448aff !important}.mdl-color--blue-A200{background-color:#448aff !important}.mdl-color-text--blue-A400{color:#2979ff !important}.mdl-color--blue-A400{background-color:#2979ff !important}.mdl-color-text--blue-A700{color:#2962ff !important}.mdl-color--blue-A700{background-color:#2962ff !important}.mdl-color-text--light-blue{color:#03a9f4 !important}.mdl-color--light-blue{background-color:#03a9f4 !important}.mdl-color-text--light-blue-50{color:#e1f5fe !important}.mdl-color--light-blue-50{background-color:#e1f5fe !important}.mdl-color-text--light-blue-100{color:#b3e5fc !important}.mdl-color--light-blue-100{background-color:#b3e5fc !important}.mdl-color-text--light-blue-200{color:#81d4fa !important}.mdl-color--light-blue-200{background-color:#81d4fa !important}.mdl-color-text--light-blue-300{color:#4fc3f7 !important}.mdl-color--light-blue-300{background-color:#4fc3f7 !important}.mdl-color-text--light-blue-400{color:#29b6f6 !important}.mdl-color--light-blue-400{background-color:#29b6f6 !important}.mdl-color-text--light-blue-500{color:#03a9f4 !important}.mdl-color--light-blue-500{background-color:#03a9f4 !important}.mdl-color-text--light-blue-600{color:#039be5 !important}.mdl-color--light-blue-600{background-color:#039be5 !important}.mdl-color-text--light-blue-700{color:#0288d1 !important}.mdl-color--light-blue-700{background-color:#0288d1 !important}.mdl-color-text--light-blue-800{color:#0277bd !important}.mdl-color--light-blue-800{background-color:#0277bd !important}.mdl-color-text--light-blue-900{color:#01579b !important}.mdl-color--light-blue-900{background-color:#01579b !important}.mdl-color-text--light-blue-A100{color:#80d8ff !important}.mdl-color--light-blue-A100{background-color:#80d8ff !important}.mdl-color-text--light-blue-A200{color:#40c4ff !important}.mdl-color--light-blue-A200{background-color:#40c4ff !important}.mdl-color-text--light-blue-A400{color:#00b0ff !important}.mdl-color--light-blue-A400{background-color:#00b0ff !important}.mdl-color-text--light-blue-A700{color:#0091ea !important}.mdl-color--light-blue-A700{background-color:#0091ea !important}.mdl-color-text--cyan{color:#00bcd4 !important}.mdl-color--cyan{background-color:#00bcd4 !important}.mdl-color-text--cyan-50{color:#e0f7fa !important}.mdl-color--cyan-50{background-color:#e0f7fa !important}.mdl-color-text--cyan-100{color:#b2ebf2 !important}.mdl-color--cyan-100{background-color:#b2ebf2 !important}.mdl-color-text--cyan-200{color:#80deea !important}.mdl-color--cyan-200{background-color:#80deea !important}.mdl-color-text--cyan-300{color:#4dd0e1 !important}.mdl-color--cyan-300{background-color:#4dd0e1 !important}.mdl-color-text--cyan-400{color:#26c6da !important}.mdl-color--cyan-400{background-color:#26c6da !important}.mdl-color-text--cyan-500{color:#00bcd4 !important}.mdl-color--cyan-500{background-color:#00bcd4 !important}.mdl-color-text--cyan-600{color:#00acc1 !important}.mdl-color--cyan-600{background-color:#00acc1 !important}.mdl-color-text--cyan-700{color:#0097a7 !important}.mdl-color--cyan-700{background-color:#0097a7 !important}.mdl-color-text--cyan-800{color:#00838f !important}.mdl-color--cyan-800{background-color:#00838f !important}.mdl-color-text--cyan-900{color:#006064 !important}.mdl-color--cyan-900{background-color:#006064 !important}.mdl-color-text--cyan-A100{color:#84ffff !important}.mdl-color--cyan-A100{background-color:#84ffff !important}.mdl-color-text--cyan-A200{color:#18ffff !important}.mdl-color--cyan-A200{background-color:#18ffff !important}.mdl-color-text--cyan-A400{color:#00e5ff !important}.mdl-color--cyan-A400{background-color:#00e5ff !important}.mdl-color-text--cyan-A700{color:#00b8d4 !important}.mdl-color--cyan-A700{background-color:#00b8d4 !important}.mdl-color-text--teal{color:#009688 !important}.mdl-color--teal{background-color:#009688 !important}.mdl-color-text--teal-50{color:#e0f2f1 !important}.mdl-color--teal-50{background-color:#e0f2f1 !important}.mdl-color-text--teal-100{color:#b2dfdb !important}.mdl-color--teal-100{background-color:#b2dfdb !important}.mdl-color-text--teal-200{color:#80cbc4 !important}.mdl-color--teal-200{background-color:#80cbc4 !important}.mdl-color-text--teal-300{color:#4db6ac !important}.mdl-color--teal-300{background-color:#4db6ac !important}.mdl-color-text--teal-400{color:#26a69a !important}.mdl-color--teal-400{background-color:#26a69a !important}.mdl-color-text--teal-500{color:#009688 !important}.mdl-color--teal-500{background-color:#009688 !important}.mdl-color-text--teal-600{color:#00897b !important}.mdl-color--teal-600{background-color:#00897b !important}.mdl-color-text--teal-700{color:#00796b !important}.mdl-color--teal-700{background-color:#00796b !important}.mdl-color-text--teal-800{color:#00695c !important}.mdl-color--teal-800{background-color:#00695c !important}.mdl-color-text--teal-900{color:#004d40 !important}.mdl-color--teal-900{background-color:#004d40 !important}.mdl-color-text--teal-A100{color:#a7ffeb !important}.mdl-color--teal-A100{background-color:#a7ffeb !important}.mdl-color-text--teal-A200{color:#64ffda !important}.mdl-color--teal-A200{background-color:#64ffda !important}.mdl-color-text--teal-A400{color:#1de9b6 !important}.mdl-color--teal-A400{background-color:#1de9b6 !important}.mdl-color-text--teal-A700{color:#00bfa5 !important}.mdl-color--teal-A700{background-color:#00bfa5 !important}.mdl-color-text--green{color:#4caf50 !important}.mdl-color--green{background-color:#4caf50 !important}.mdl-color-text--green-50{color:#e8f5e9 !important}.mdl-color--green-50{background-color:#e8f5e9 !important}.mdl-color-text--green-100{color:#c8e6c9 !important}.mdl-color--green-100{background-color:#c8e6c9 !important}.mdl-color-text--green-200{color:#a5d6a7 !important}.mdl-color--green-200{background-color:#a5d6a7 !important}.mdl-color-text--green-300{color:#81c784 !important}.mdl-color--green-300{background-color:#81c784 !important}.mdl-color-text--green-400{color:#66bb6a !important}.mdl-color--green-400{background-color:#66bb6a !important}.mdl-color-text--green-500{color:#4caf50 !important}.mdl-color--green-500{background-color:#4caf50 !important}.mdl-color-text--green-600{color:#43a047 !important}.mdl-color--green-600{background-color:#43a047 !important}.mdl-color-text--green-700{color:#388e3c !important}.mdl-color--green-700{background-color:#388e3c !important}.mdl-color-text--green-800{color:#2e7d32 !important}.mdl-color--green-800{background-color:#2e7d32 !important}.mdl-color-text--green-900{color:#1b5e20 !important}.mdl-color--green-900{background-color:#1b5e20 !important}.mdl-color-text--green-A100{color:#b9f6ca !important}.mdl-color--green-A100{background-color:#b9f6ca !important}.mdl-color-text--green-A200{color:#69f0ae !important}.mdl-color--green-A200{background-color:#69f0ae !important}.mdl-color-text--green-A400{color:#00e676 !important}.mdl-color--green-A400{background-color:#00e676 !important}.mdl-color-text--green-A700{color:#00c853 !important}.mdl-color--green-A700{background-color:#00c853 !important}.mdl-color-text--light-green{color:#8bc34a !important}.mdl-color--light-green{background-color:#8bc34a !important}.mdl-color-text--light-green-50{color:#f1f8e9 !important}.mdl-color--light-green-50{background-color:#f1f8e9 !important}.mdl-color-text--light-green-100{color:#dcedc8 !important}.mdl-color--light-green-100{background-color:#dcedc8 !important}.mdl-color-text--light-green-200{color:#c5e1a5 !important}.mdl-color--light-green-200{background-color:#c5e1a5 !important}.mdl-color-text--light-green-300{color:#aed581 !important}.mdl-color--light-green-300{background-color:#aed581 !important}.mdl-color-text--light-green-400{color:#9ccc65 !important}.mdl-color--light-green-400{background-color:#9ccc65 !important}.mdl-color-text--light-green-500{color:#8bc34a !important}.mdl-color--light-green-500{background-color:#8bc34a !important}.mdl-color-text--light-green-600{color:#7cb342 !important}.mdl-color--light-green-600{background-color:#7cb342 !important}.mdl-color-text--light-green-700{color:#689f38 !important}.mdl-color--light-green-700{background-color:#689f38 !important}.mdl-color-text--light-green-800{color:#558b2f !important}.mdl-color--light-green-800{background-color:#558b2f !important}.mdl-color-text--light-green-900{color:#33691e !important}.mdl-color--light-green-900{background-color:#33691e !important}.mdl-color-text--light-green-A100{color:#ccff90 !important}.mdl-color--light-green-A100{background-color:#ccff90 !important}.mdl-color-text--light-green-A200{color:#b2ff59 !important}.mdl-color--light-green-A200{background-color:#b2ff59 !important}.mdl-color-text--light-green-A400{color:#76ff03 !important}.mdl-color--light-green-A400{background-color:#76ff03 !important}.mdl-color-text--light-green-A700{color:#64dd17 !important}.mdl-color--light-green-A700{background-color:#64dd17 !important}.mdl-color-text--lime{color:#cddc39 !important}.mdl-color--lime{background-color:#cddc39 !important}.mdl-color-text--lime-50{color:#f9fbe7 !important}.mdl-color--lime-50{background-color:#f9fbe7 !important}.mdl-color-text--lime-100{color:#f0f4c3 !important}.mdl-color--lime-100{background-color:#f0f4c3 !important}.mdl-color-text--lime-200{color:#e6ee9c !important}.mdl-color--lime-200{background-color:#e6ee9c !important}.mdl-color-text--lime-300{color:#dce775 !important}.mdl-color--lime-300{background-color:#dce775 !important}.mdl-color-text--lime-400{color:#d4e157 !important}.mdl-color--lime-400{background-color:#d4e157 !important}.mdl-color-text--lime-500{color:#cddc39 !important}.mdl-color--lime-500{background-color:#cddc39 !important}.mdl-color-text--lime-600{color:#c0ca33 !important}.mdl-color--lime-600{background-color:#c0ca33 !important}.mdl-color-text--lime-700{color:#afb42b !important}.mdl-color--lime-700{background-color:#afb42b !important}.mdl-color-text--lime-800{color:#9e9d24 !important}.mdl-color--lime-800{background-color:#9e9d24 !important}.mdl-color-text--lime-900{color:#827717 !important}.mdl-color--lime-900{background-color:#827717 !important}.mdl-color-text--lime-A100{color:#f4ff81 !important}.mdl-color--lime-A100{background-color:#f4ff81 !important}.mdl-color-text--lime-A200{color:#eeff41 !important}.mdl-color--lime-A200{background-color:#eeff41 !important}.mdl-color-text--lime-A400{color:#c6ff00 !important}.mdl-color--lime-A400{background-color:#c6ff00 !important}.mdl-color-text--lime-A700{color:#aeea00 !important}.mdl-color--lime-A700{background-color:#aeea00 !important}.mdl-color-text--yellow{color:#ffeb3b !important}.mdl-color--yellow{background-color:#ffeb3b !important}.mdl-color-text--yellow-50{color:#fffde7 !important}.mdl-color--yellow-50{background-color:#fffde7 !important}.mdl-color-text--yellow-100{color:#fff9c4 !important}.mdl-color--yellow-100{background-color:#fff9c4 !important}.mdl-color-text--yellow-200{color:#fff59d !important}.mdl-color--yellow-200{background-color:#fff59d !important}.mdl-color-text--yellow-300{color:#fff176 !important}.mdl-color--yellow-300{background-color:#fff176 !important}.mdl-color-text--yellow-400{color:#ffee58 !important}.mdl-color--yellow-400{background-color:#ffee58 !important}.mdl-color-text--yellow-500{color:#ffeb3b !important}.mdl-color--yellow-500{background-color:#ffeb3b !important}.mdl-color-text--yellow-600{color:#fdd835 !important}.mdl-color--yellow-600{background-color:#fdd835 !important}.mdl-color-text--yellow-700{color:#fbc02d !important}.mdl-color--yellow-700{background-color:#fbc02d !important}.mdl-color-text--yellow-800{color:#f9a825 !important}.mdl-color--yellow-800{background-color:#f9a825 !important}.mdl-color-text--yellow-900{color:#f57f17 !important}.mdl-color--yellow-900{background-color:#f57f17 !important}.mdl-color-text--yellow-A100{color:#ffff8d !important}.mdl-color--yellow-A100{background-color:#ffff8d !important}.mdl-color-text--yellow-A200{color:#ff0 !important}.mdl-color--yellow-A200{background-color:#ff0 !important}.mdl-color-text--yellow-A400{color:#ffea00 !important}.mdl-color--yellow-A400{background-color:#ffea00 !important}.mdl-color-text--yellow-A700{color:#ffd600 !important}.mdl-color--yellow-A700{background-color:#ffd600 !important}.mdl-color-text--amber{color:#ffc107 !important}.mdl-color--amber{background-color:#ffc107 !important}.mdl-color-text--amber-50{color:#fff8e1 !important}.mdl-color--amber-50{background-color:#fff8e1 !important}.mdl-color-text--amber-100{color:#ffecb3 !important}.mdl-color--amber-100{background-color:#ffecb3 !important}.mdl-color-text--amber-200{color:#ffe082 !important}.mdl-color--amber-200{background-color:#ffe082 !important}.mdl-color-text--amber-300{color:#ffd54f !important}.mdl-color--amber-300{background-color:#ffd54f !important}.mdl-color-text--amber-400{color:#ffca28 !important}.mdl-color--amber-400{background-color:#ffca28 !important}.mdl-color-text--amber-500{color:#ffc107 !important}.mdl-color--amber-500{background-color:#ffc107 !important}.mdl-color-text--amber-600{color:#ffb300 !important}.mdl-color--amber-600{background-color:#ffb300 !important}.mdl-color-text--amber-700{color:#ffa000 !important}.mdl-color--amber-700{background-color:#ffa000 !important}.mdl-color-text--amber-800{color:#ff8f00 !important}.mdl-color--amber-800{background-color:#ff8f00 !important}.mdl-color-text--amber-900{color:#ff6f00 !important}.mdl-color--amber-900{background-color:#ff6f00 !important}.mdl-color-text--amber-A100{color:#ffe57f !important}.mdl-color--amber-A100{background-color:#ffe57f !important}.mdl-color-text--amber-A200{color:#ffd740 !important}.mdl-color--amber-A200{background-color:#ffd740 !important}.mdl-color-text--amber-A400{color:#ffc400 !important}.mdl-color--amber-A400{background-color:#ffc400 !important}.mdl-color-text--amber-A700{color:#ffab00 !important}.mdl-color--amber-A700{background-color:#ffab00 !important}.mdl-color-text--orange{color:#ff9800 !important}.mdl-color--orange{background-color:#ff9800 !important}.mdl-color-text--orange-50{color:#fff3e0 !important}.mdl-color--orange-50{background-color:#fff3e0 !important}.mdl-color-text--orange-100{color:#ffe0b2 !important}.mdl-color--orange-100{background-color:#ffe0b2 !important}.mdl-color-text--orange-200{color:#ffcc80 !important}.mdl-color--orange-200{background-color:#ffcc80 !important}.mdl-color-text--orange-300{color:#ffb74d !important}.mdl-color--orange-300{background-color:#ffb74d !important}.mdl-color-text--orange-400{color:#ffa726 !important}.mdl-color--orange-400{background-color:#ffa726 !important}.mdl-color-text--orange-500{color:#ff9800 !important}.mdl-color--orange-500{background-color:#ff9800 !important}.mdl-color-text--orange-600{color:#fb8c00 !important}.mdl-color--orange-600{background-color:#fb8c00 !important}.mdl-color-text--orange-700{color:#f57c00 !important}.mdl-color--orange-700{background-color:#f57c00 !important}.mdl-color-text--orange-800{color:#ef6c00 !important}.mdl-color--orange-800{background-color:#ef6c00 !important}.mdl-color-text--orange-900{color:#e65100 !important}.mdl-color--orange-900{background-color:#e65100 !important}.mdl-color-text--orange-A100{color:#ffd180 !important}.mdl-color--orange-A100{background-color:#ffd180 !important}.mdl-color-text--orange-A200{color:#ffab40 !important}.mdl-color--orange-A200{background-color:#ffab40 !important}.mdl-color-text--orange-A400{color:#ff9100 !important}.mdl-color--orange-A400{background-color:#ff9100 !important}.mdl-color-text--orange-A700{color:#ff6d00 !important}.mdl-color--orange-A700{background-color:#ff6d00 !important}.mdl-color-text--deep-orange{color:#ff5722 !important}.mdl-color--deep-orange{background-color:#ff5722 !important}.mdl-color-text--deep-orange-50{color:#fbe9e7 !important}.mdl-color--deep-orange-50{background-color:#fbe9e7 !important}.mdl-color-text--deep-orange-100{color:#ffccbc !important}.mdl-color--deep-orange-100{background-color:#ffccbc !important}.mdl-color-text--deep-orange-200{color:#ffab91 !important}.mdl-color--deep-orange-200{background-color:#ffab91 !important}.mdl-color-text--deep-orange-300{color:#ff8a65 !important}.mdl-color--deep-orange-300{background-color:#ff8a65 !important}.mdl-color-text--deep-orange-400{color:#ff7043 !important}.mdl-color--deep-orange-400{background-color:#ff7043 !important}.mdl-color-text--deep-orange-500{color:#ff5722 !important}.mdl-color--deep-orange-500{background-color:#ff5722 !important}.mdl-color-text--deep-orange-600{color:#f4511e !important}.mdl-color--deep-orange-600{background-color:#f4511e !important}.mdl-color-text--deep-orange-700{color:#e64a19 !important}.mdl-color--deep-orange-700{background-color:#e64a19 !important}.mdl-color-text--deep-orange-800{color:#d84315 !important}.mdl-color--deep-orange-800{background-color:#d84315 !important}.mdl-color-text--deep-orange-900{color:#bf360c !important}.mdl-color--deep-orange-900{background-color:#bf360c !important}.mdl-color-text--deep-orange-A100{color:#ff9e80 !important}.mdl-color--deep-orange-A100{background-color:#ff9e80 !important}.mdl-color-text--deep-orange-A200{color:#ff6e40 !important}.mdl-color--deep-orange-A200{background-color:#ff6e40 !important}.mdl-color-text--deep-orange-A400{color:#ff3d00 !important}.mdl-color--deep-orange-A400{background-color:#ff3d00 !important}.mdl-color-text--deep-orange-A700{color:#dd2c00 !important}.mdl-color--deep-orange-A700{background-color:#dd2c00 !important}.mdl-color-text--brown{color:#795548 !important}.mdl-color--brown{background-color:#795548 !important}.mdl-color-text--brown-50{color:#efebe9 !important}.mdl-color--brown-50{background-color:#efebe9 !important}.mdl-color-text--brown-100{color:#d7ccc8 !important}.mdl-color--brown-100{background-color:#d7ccc8 !important}.mdl-color-text--brown-200{color:#bcaaa4 !important}.mdl-color--brown-200{background-color:#bcaaa4 !important}.mdl-color-text--brown-300{color:#a1887f !important}.mdl-color--brown-300{background-color:#a1887f !important}.mdl-color-text--brown-400{color:#8d6e63 !important}.mdl-color--brown-400{background-color:#8d6e63 !important}.mdl-color-text--brown-500{color:#795548 !important}.mdl-color--brown-500{background-color:#795548 !important}.mdl-color-text--brown-600{color:#6d4c41 !important}.mdl-color--brown-600{background-color:#6d4c41 !important}.mdl-color-text--brown-700{color:#5d4037 !important}.mdl-color--brown-700{background-color:#5d4037 !important}.mdl-color-text--brown-800{color:#4e342e !important}.mdl-color--brown-800{background-color:#4e342e !important}.mdl-color-text--brown-900{color:#3e2723 !important}.mdl-color--brown-900{background-color:#3e2723 !important}.mdl-color-text--grey{color:#9e9e9e !important}.mdl-color--grey{background-color:#9e9e9e !important}.mdl-color-text--grey-50{color:#fafafa !important}.mdl-color--grey-50{background-color:#fafafa !important}.mdl-color-text--grey-100{color:#f5f5f5 !important}.mdl-color--grey-100{background-color:#f5f5f5 !important}.mdl-color-text--grey-200{color:#eee !important}.mdl-color--grey-200{background-color:#eee !important}.mdl-color-text--grey-300{color:#e0e0e0 !important}.mdl-color--grey-300{background-color:#e0e0e0 !important}.mdl-color-text--grey-400{color:#bdbdbd !important}.mdl-color--grey-400{background-color:#bdbdbd !important}.mdl-color-text--grey-500{color:#9e9e9e !important}.mdl-color--grey-500{background-color:#9e9e9e !important}.mdl-color-text--grey-600{color:#757575 !important}.mdl-color--grey-600{background-color:#757575 !important}.mdl-color-text--grey-700{color:#616161 !important}.mdl-color--grey-700{background-color:#616161 !important}.mdl-color-text--grey-800{color:#424242 !important}.mdl-color--grey-800{background-color:#424242 !important}.mdl-color-text--grey-900{color:#212121 !important}.mdl-color--grey-900{background-color:#212121 !important}.mdl-color-text--blue-grey{color:#607d8b !important}.mdl-color--blue-grey{background-color:#607d8b !important}.mdl-color-text--blue-grey-50{color:#eceff1 !important}.mdl-color--blue-grey-50{background-color:#eceff1 !important}.mdl-color-text--blue-grey-100{color:#cfd8dc !important}.mdl-color--blue-grey-100{background-color:#cfd8dc !important}.mdl-color-text--blue-grey-200{color:#b0bec5 !important}.mdl-color--blue-grey-200{background-color:#b0bec5 !important}.mdl-color-text--blue-grey-300{color:#90a4ae !important}.mdl-color--blue-grey-300{background-color:#90a4ae !important}.mdl-color-text--blue-grey-400{color:#78909c !important}.mdl-color--blue-grey-400{background-color:#78909c !important}.mdl-color-text--blue-grey-500{color:#607d8b !important}.mdl-color--blue-grey-500{background-color:#607d8b !important}.mdl-color-text--blue-grey-600{color:#546e7a !important}.mdl-color--blue-grey-600{background-color:#546e7a !important}.mdl-color-text--blue-grey-700{color:#455a64 !important}.mdl-color--blue-grey-700{background-color:#455a64 !important}.mdl-color-text--blue-grey-800{color:#37474f !important}.mdl-color--blue-grey-800{background-color:#37474f !important}.mdl-color-text--blue-grey-900{color:#263238 !important}.mdl-color--blue-grey-900{background-color:#263238 !important}.mdl-color--black{background-color:#000 !important}.mdl-color-text--black{color:#000 !important}.mdl-color--white{background-color:#fff !important}.mdl-color-text--white{color:#fff !important}.mdl-color--primary{background-color:rgb(96,125,139)!important}.mdl-color--primary-contrast{background-color:rgb(255,255,255)!important}.mdl-color--primary-dark{background-color:rgb(69,90,100)!important}.mdl-color--accent{background-color:rgb(83,109,254)!important}.mdl-color--accent-contrast{background-color:rgb(255,255,255)!important}.mdl-color-text--primary{color:rgb(96,125,139)!important}.mdl-color-text--primary-contrast{color:rgb(255,255,255)!important}.mdl-color-text--primary-dark{color:rgb(69,90,100)!important}.mdl-color-text--accent{color:rgb(83,109,254)!important}.mdl-color-text--accent-contrast{color:rgb(255,255,255)!important}.mdl-ripple{background:#000;border-radius:50%;height:50px;left:0;opacity:0;pointer-events:none;position:absolute;top:0;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:50px;overflow:hidden}.mdl-ripple.is-animating{-webkit-transition:-webkit-transform .3s cubic-bezier(0,0,.2,1),width .3s cubic-bezier(0,0,.2,1),height .3s cubic-bezier(0,0,.2,1),opacity .6s cubic-bezier(0,0,.2,1);transition:transform .3s cubic-bezier(0,0,.2,1),width .3s cubic-bezier(0,0,.2,1),height .3s cubic-bezier(0,0,.2,1),opacity .6s cubic-bezier(0,0,.2,1)}.mdl-ripple.is-visible{opacity:.3}.mdl-animation--default,.mdl-animation--fast-out-slow-in{-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-animation--linear-out-slow-in{-webkit-transition-timing-function:cubic-bezier(0,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1)}.mdl-animation--fast-out-linear-in{-webkit-transition-timing-function:cubic-bezier(.4,0,1,1);transition-timing-function:cubic-bezier(.4,0,1,1)}.mdl-badge{position:relative;white-space:nowrap;margin-right:24px}.mdl-badge:not([data-badge]){margin-right:auto}.mdl-badge[data-badge]:after{content:attr(data-badge);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;position:absolute;top:-11px;right:-24px;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:600;font-size:12px;width:22px;height:22px;border-radius:50%;background:rgb(83,109,254);color:#fff}.mdl-button .mdl-badge[data-badge]:after{top:-10px;right:-5px}.mdl-badge.mdl-badge--no-background[data-badge]:after{color:rgb(83,109,254);background:rgba(255,255,255,.2);box-shadow:0 0 1px gray}.mdl-button{background:0 0;border:none;border-radius:2px;color:#000;display:block;position:relative;height:36px;min-width:64px;padding:0 8px;display:inline-block;font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:14px;font-weight:500;text-transform:uppercase;letter-spacing:0;overflow:hidden;will-change:box-shadow,transform;-webkit-transition:box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);transition:box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);outline:none;cursor:pointer;text-decoration:none;text-align:center;line-height:36px;vertical-align:middle}.mdl-button::-moz-focus-inner{border:0}.mdl-button:hover{background-color:rgba(158,158,158,.2)}.mdl-button:focus:not(:active){background-color:rgba(0,0,0,.12)}.mdl-button:active{background-color:rgba(158,158,158,.4)}.mdl-button.mdl-button--colored{color:rgb(96,125,139)}.mdl-button.mdl-button--colored:focus:not(:active){background-color:rgba(0,0,0,.12)}input.mdl-button[type="submit"]{-webkit-appearance:none}.mdl-button--raised{background:rgba(158,158,158,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-button--raised:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:rgba(158,158,158,.4)}.mdl-button--raised:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:rgba(158,158,158,.4)}.mdl-button--raised.mdl-button--colored{background:rgb(96,125,139);color:rgb(255,255,255)}.mdl-button--raised.mdl-button--colored:hover{background-color:rgb(96,125,139)}.mdl-button--raised.mdl-button--colored:active{background-color:rgb(96,125,139)}.mdl-button--raised.mdl-button--colored:focus:not(:active){background-color:rgb(96,125,139)}.mdl-button--raised.mdl-button--colored .mdl-ripple{background:rgb(255,255,255)}.mdl-button--fab{border-radius:50%;font-size:24px;height:56px;margin:auto;min-width:56px;width:56px;padding:0;overflow:hidden;background:rgba(158,158,158,.2);box-shadow:0 1px 1.5px 0 rgba(0,0,0,.12),0 1px 1px 0 rgba(0,0,0,.24);position:relative;line-height:normal}.mdl-button--fab .material-icons{position:absolute;top:50%;left:50%;-webkit-transform:translate(-12px,-12px);-ms-transform:translate(-12px,-12px);transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--fab.mdl-button--mini-fab{height:40px;min-width:40px;width:40px}.mdl-button--fab .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button--fab:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:rgba(158,158,158,.4)}.mdl-button--fab:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:rgba(158,158,158,.4)}.mdl-button--fab.mdl-button--colored{background:rgb(83,109,254);color:rgb(255,255,255)}.mdl-button--fab.mdl-button--colored:hover{background-color:rgb(83,109,254)}.mdl-button--fab.mdl-button--colored:focus:not(:active){background-color:rgb(83,109,254)}.mdl-button--fab.mdl-button--colored:active{background-color:rgb(83,109,254)}.mdl-button--fab.mdl-button--colored .mdl-ripple{background:rgb(255,255,255)}.mdl-button--icon{border-radius:50%;font-size:24px;height:32px;margin-left:0;margin-right:0;min-width:32px;width:32px;padding:0;overflow:hidden;color:inherit;line-height:normal}.mdl-button--icon .material-icons{position:absolute;top:50%;left:50%;-webkit-transform:translate(-12px,-12px);-ms-transform:translate(-12px,-12px);transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--icon.mdl-button--mini-icon{height:24px;min-width:24px;width:24px}.mdl-button--icon.mdl-button--mini-icon .material-icons{top:0;left:0}.mdl-button--icon .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button__ripple-container{display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:0;overflow:hidden}.mdl-button[disabled] .mdl-button__ripple-container .mdl-ripple{background-color:transparent}.mdl-button--primary.mdl-button--primary{color:rgb(96,125,139)}.mdl-button--primary.mdl-button--primary .mdl-ripple{background:rgb(255,255,255)}.mdl-button--primary.mdl-button--primary.mdl-button--raised,.mdl-button--primary.mdl-button--primary.mdl-button--fab{color:rgb(255,255,255);background-color:rgb(96,125,139)}.mdl-button--accent.mdl-button--accent{color:rgb(83,109,254)}.mdl-button--accent.mdl-button--accent .mdl-ripple{background:rgb(255,255,255)}.mdl-button--accent.mdl-button--accent.mdl-button--raised,.mdl-button--accent.mdl-button--accent.mdl-button--fab{color:rgb(255,255,255);background-color:rgb(83,109,254)}.mdl-button[disabled][disabled]{color:rgba(0,0,0,.26);cursor:auto;background-color:transparent}.mdl-button--fab[disabled][disabled],.mdl-button--raised[disabled][disabled],.mdl-button--colored[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-card{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;font-size:16px;font-weight:400;min-height:200px;overflow:hidden;width:330px;z-index:1;position:relative;background:#fff;border-radius:2px;box-sizing:border-box}.mdl-card__media{background-color:rgb(83,109,254);background-repeat:repeat;background-position:50% 50%;background-size:cover;background-origin:padding-box;background-attachment:scroll;box-sizing:border-box}.mdl-card__title{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;color:#000;display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:stretch;-webkit-justify-content:stretch;-ms-flex-pack:stretch;justify-content:stretch;line-height:normal;padding:16px;-webkit-perspective-origin:165px 56px;perspective-origin:165px 56px;-webkit-transform-origin:165px 56px;-ms-transform-origin:165px 56px;transform-origin:165px 56px;box-sizing:border-box}.mdl-card__title.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__title-text{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end;color:inherit;display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;font-size:24px;font-weight:300;line-height:normal;overflow:hidden;-webkit-transform-origin:149px 48px;-ms-transform-origin:149px 48px;transform-origin:149px 48px;margin:0}.mdl-card__subtitle-text{font-size:14px;color:grey;margin:0}.mdl-card__supporting-text{color:rgba(0,0,0,.54);font-size:13px;line-height:18px;overflow:hidden;padding:16px;width:90%}.mdl-card__actions{font-size:16px;line-height:normal;width:100%;background-color:transparent;padding:8px;box-sizing:border-box}.mdl-card__actions.mdl-card--border{border-top:1px solid rgba(0,0,0,.1)}.mdl-card--expand{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.mdl-card__menu{position:absolute;right:16px;top:16px}.mdl-checkbox{position:relative;z-index:1;vertical-align:middle;display:inline-block;box-sizing:border-box;width:100%;height:24px;margin:0;padding:0}.mdl-checkbox.is-upgraded{padding-left:24px}.mdl-checkbox__input{line-height:24px}.mdl-checkbox.is-upgraded .mdl-checkbox__input{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-checkbox__box-outline{position:absolute;top:3px;left:0;display:inline-block;box-sizing:border-box;width:16px;height:16px;margin:0;cursor:pointer;overflow:hidden;border:2px solid rgba(0,0,0,.54);border-radius:2px;z-index:2}.mdl-checkbox.is-checked .mdl-checkbox__box-outline{border:2px solid rgb(96,125,139)}.mdl-checkbox.is-disabled .mdl-checkbox__box-outline{border:2px solid rgba(0,0,0,.26);cursor:auto}.mdl-checkbox__focus-helper{position:absolute;top:3px;left:0;display:inline-block;box-sizing:border-box;width:16px;height:16px;border-radius:50%;background-color:transparent}.mdl-checkbox.is-focused .mdl-checkbox__focus-helper{box-shadow:0 0 0 8px rgba(0,0,0,.1);background-color:rgba(0,0,0,.1)}.mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper{box-shadow:0 0 0 8px rgba(96,125,139,.26);background-color:rgba(96,125,139,.26)}.mdl-checkbox__tick-outline{position:absolute;top:0;left:0;height:100%;width:100%;-webkit-mask:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8ZGVmcz4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gMCwwIDAsMSAxLDEgMSwwIDAsMCB6IE0gMC44NTM0Mzc1LDAuMTY3MTg3NSAwLjk1OTY4NzUsMC4yNzMxMjUgMC40MjkzNzUsMC44MDM0Mzc1IDAuMzIzMTI1LDAuOTA5Njg3NSAwLjIxNzE4NzUsMC44MDM0Mzc1IDAuMDQwMzEyNSwwLjYyNjg3NSAwLjE0NjU2MjUsMC41MjA2MjUgMC4zMjMxMjUsMC42OTc1IDAuODUzNDM3NSwwLjE2NzE4NzUgeiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8bWFzayBpZD0ibWFzayIgbWFza1VuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgbWFza0NvbnRlbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giPgogICAgICA8cGF0aAogICAgICAgICBkPSJNIDAsMCAwLDEgMSwxIDEsMCAwLDAgeiBNIDAuODUzNDM3NSwwLjE2NzE4NzUgMC45NTk2ODc1LDAuMjczMTI1IDAuNDI5Mzc1LDAuODAzNDM3NSAwLjMyMzEyNSwwLjkwOTY4NzUgMC4yMTcxODc1LDAuODAzNDM3NSAwLjA0MDMxMjUsMC42MjY4NzUgMC4xNDY1NjI1LDAuNTIwNjI1IDAuMzIzMTI1LDAuNjk3NSAwLjg1MzQzNzUsMC4xNjcxODc1IHoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+CiAgICA8L21hc2s+CiAgPC9kZWZzPgogIDxyZWN0CiAgICAgd2lkdGg9IjEiCiAgICAgaGVpZ2h0PSIxIgogICAgIHg9IjAiCiAgICAgeT0iMCIKICAgICBjbGlwLXBhdGg9InVybCgjY2xpcCkiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KPC9zdmc+Cg==");mask:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8ZGVmcz4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gMCwwIDAsMSAxLDEgMSwwIDAsMCB6IE0gMC44NTM0Mzc1LDAuMTY3MTg3NSAwLjk1OTY4NzUsMC4yNzMxMjUgMC40MjkzNzUsMC44MDM0Mzc1IDAuMzIzMTI1LDAuOTA5Njg3NSAwLjIxNzE4NzUsMC44MDM0Mzc1IDAuMDQwMzEyNSwwLjYyNjg3NSAwLjE0NjU2MjUsMC41MjA2MjUgMC4zMjMxMjUsMC42OTc1IDAuODUzNDM3NSwwLjE2NzE4NzUgeiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8bWFzayBpZD0ibWFzayIgbWFza1VuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgbWFza0NvbnRlbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giPgogICAgICA8cGF0aAogICAgICAgICBkPSJNIDAsMCAwLDEgMSwxIDEsMCAwLDAgeiBNIDAuODUzNDM3NSwwLjE2NzE4NzUgMC45NTk2ODc1LDAuMjczMTI1IDAuNDI5Mzc1LDAuODAzNDM3NSAwLjMyMzEyNSwwLjkwOTY4NzUgMC4yMTcxODc1LDAuODAzNDM3NSAwLjA0MDMxMjUsMC42MjY4NzUgMC4xNDY1NjI1LDAuNTIwNjI1IDAuMzIzMTI1LDAuNjk3NSAwLjg1MzQzNzUsMC4xNjcxODc1IHoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+CiAgICA8L21hc2s+CiAgPC9kZWZzPgogIDxyZWN0CiAgICAgd2lkdGg9IjEiCiAgICAgaGVpZ2h0PSIxIgogICAgIHg9IjAiCiAgICAgeT0iMCIKICAgICBjbGlwLXBhdGg9InVybCgjY2xpcCkiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KPC9zdmc+Cg==");background:0 0;-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:background;transition-property:background}.mdl-checkbox.is-checked .mdl-checkbox__tick-outline{background:rgb(96,125,139)url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K")}.mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline{background:rgba(0,0,0,.26)url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K")}.mdl-checkbox__label{position:relative;cursor:pointer;font-size:16px;line-height:24px;margin:0}.mdl-checkbox.is-disabled .mdl-checkbox__label{color:rgba(0,0,0,.26);cursor:auto}.mdl-checkbox__ripple-container{position:absolute;z-index:2;top:-6px;left:-10px;box-sizing:border-box;width:36px;height:36px;border-radius:50%;cursor:pointer;overflow:hidden;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-checkbox__ripple-container .mdl-ripple{background:rgb(96,125,139)}.mdl-checkbox.is-disabled .mdl-checkbox__ripple-container{cursor:auto}.mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple{background:0 0}.mdl-data-table{position:relative;border:1px solid rgba(0,0,0,.12);border-collapse:collapse;white-space:nowrap;font-size:13px;background-color:#fff}.mdl-data-table thead{padding-bottom:3px}.mdl-data-table thead .mdl-data-table__select{margin-top:0}.mdl-data-table tbody tr{position:relative;height:48px;-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:background-color;transition-property:background-color}.mdl-data-table tbody tr.is-selected{background-color:#e0e0e0}.mdl-data-table tbody tr:hover{background-color:#eee}.mdl-data-table td{text-align:right}.mdl-data-table th{padding:0 18px 0 18px;text-align:right}.mdl-data-table td:first-of-type,.mdl-data-table th:first-of-type{padding-left:24px}.mdl-data-table td:last-of-type,.mdl-data-table th:last-of-type{padding-right:24px}.mdl-data-table td{position:relative;vertical-align:top;height:48px;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);padding:12px 18px 0;box-sizing:border-box}.mdl-data-table td .mdl-data-table__select{vertical-align:top;position:absolute;left:24px}.mdl-data-table th{position:relative;vertical-align:bottom;text-overflow:ellipsis;font-weight:700;line-height:24px;letter-spacing:0;height:48px;font-size:12px;color:rgba(0,0,0,.54);padding-bottom:8px;box-sizing:border-box}.mdl-data-table th .mdl-data-table__select{position:relative}.mdl-data-table__select{width:16px}.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric{text-align:left}.mdl-mega-footer{padding:16px 40px;color:#9e9e9e;background-color:#424242}.mdl-mega-footer--top-section:after,.mdl-mega-footer--middle-section:after,.mdl-mega-footer--bottom-section:after,.mdl-mega-footer__top-section:after,.mdl-mega-footer__middle-section:after,.mdl-mega-footer__bottom-section:after{content:'';display:block;clear:both}.mdl-mega-footer--left-section,.mdl-mega-footer__left-section,.mdl-mega-footer--right-section,.mdl-mega-footer__right-section{margin-bottom:16px}.mdl-mega-footer--right-section a,.mdl-mega-footer__right-section a{display:block;margin-bottom:16px;color:inherit;text-decoration:none}@media screen and (min-width:760px){.mdl-mega-footer--left-section,.mdl-mega-footer__left-section{float:left}.mdl-mega-footer--right-section,.mdl-mega-footer__right-section{float:right}.mdl-mega-footer--right-section a,.mdl-mega-footer__right-section a{display:inline-block;margin-left:16px;line-height:36px;vertical-align:middle}}.mdl-mega-footer--social-btn,.mdl-mega-footer__social-btn{width:36px;height:36px;padding:0;margin:0;background-color:#9e9e9e;border:none}.mdl-mega-footer--drop-down-section,.mdl-mega-footer__drop-down-section{display:block;position:relative}@media screen and (min-width:760px){.mdl-mega-footer--drop-down-section,.mdl-mega-footer__drop-down-section{width:33%}.mdl-mega-footer--drop-down-section:nth-child(1),.mdl-mega-footer--drop-down-section:nth-child(2),.mdl-mega-footer__drop-down-section:nth-child(1),.mdl-mega-footer__drop-down-section:nth-child(2){float:left}.mdl-mega-footer--drop-down-section:nth-child(3),.mdl-mega-footer__drop-down-section:nth-child(3){float:right}.mdl-mega-footer--drop-down-section:nth-child(3):after,.mdl-mega-footer__drop-down-section:nth-child(3):after{clear:right}.mdl-mega-footer--drop-down-section:nth-child(4),.mdl-mega-footer__drop-down-section:nth-child(4){clear:right;float:right}.mdl-mega-footer--middle-section:after,.mdl-mega-footer__middle-section:after{content:'';display:block;clear:both}.mdl-mega-footer--bottom-section,.mdl-mega-footer__bottom-section{padding-top:0}}@media screen and (min-width:1024px){.mdl-mega-footer--drop-down-section,.mdl-mega-footer--drop-down-section:nth-child(3),.mdl-mega-footer--drop-down-section:nth-child(4),.mdl-mega-footer__drop-down-section,.mdl-mega-footer__drop-down-section:nth-child(3),.mdl-mega-footer__drop-down-section:nth-child(4){width:24%;float:left}}.mdl-mega-footer--heading-checkbox,.mdl-mega-footer__heading-checkbox{position:absolute;width:100%;height:55.8px;padding:32px;margin:-16px 0 0;cursor:pointer;z-index:1;opacity:0}.mdl-mega-footer--heading-checkbox~.mdl-mega-footer--heading:after,.mdl-mega-footer--heading-checkbox~.mdl-mega-footer__heading:after,.mdl-mega-footer__heading-checkbox~.mdl-mega-footer--heading:after,.mdl-mega-footer__heading-checkbox~.mdl-mega-footer__heading:after{font-family:'Material Icons';content:'\E5CE'}.mdl-mega-footer--heading-checkbox:checked~ul,.mdl-mega-footer__heading-checkbox:checked~ul{display:none}.mdl-mega-footer--heading-checkbox:checked~.mdl-mega-footer--heading:after,.mdl-mega-footer--heading-checkbox:checked~.mdl-mega-footer__heading:after,.mdl-mega-footer__heading-checkbox:checked~.mdl-mega-footer--heading:after,.mdl-mega-footer__heading-checkbox:checked~.mdl-mega-footer__heading:after{font-family:'Material Icons';content:'\E5CF'}.mdl-mega-footer--heading,.mdl-mega-footer__heading{position:relative;width:100%;padding-right:39.8px;margin-bottom:16px;box-sizing:border-box;font-size:14px;line-height:23.8px;font-weight:500;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;color:#e0e0e0}.mdl-mega-footer--heading:after,.mdl-mega-footer__heading:after{content:'';position:absolute;top:0;right:0;display:block;width:23.8px;height:23.8px;background-size:cover}.mdl-mega-footer--link-list,.mdl-mega-footer__link-list{list-style:none;padding:0;margin:0 0 32px}.mdl-mega-footer--link-list:after,.mdl-mega-footer__link-list:after{clear:both;display:block;content:''}.mdl-mega-footer--link-list li,.mdl-mega-footer__link-list li{font-size:14px;font-weight:400;letter-spacing:0;line-height:20px}.mdl-mega-footer--link-list a,.mdl-mega-footer__link-list a{color:inherit;text-decoration:none;white-space:nowrap}@media screen and (min-width:760px){.mdl-mega-footer--heading-checkbox,.mdl-mega-footer__heading-checkbox{display:none}.mdl-mega-footer--heading-checkbox~.mdl-mega-footer--heading:after,.mdl-mega-footer--heading-checkbox~.mdl-mega-footer__heading:after,.mdl-mega-footer__heading-checkbox~.mdl-mega-footer--heading:after,.mdl-mega-footer__heading-checkbox~.mdl-mega-footer__heading:after{background-image:none}.mdl-mega-footer--heading-checkbox:checked~ul,.mdl-mega-footer__heading-checkbox:checked~ul{display:block}.mdl-mega-footer--heading-checkbox:checked~.mdl-mega-footer--heading:after,.mdl-mega-footer--heading-checkbox:checked~.mdl-mega-footer__heading:after,.mdl-mega-footer__heading-checkbox:checked~.mdl-mega-footer--heading:after,.mdl-mega-footer__heading-checkbox:checked~.mdl-mega-footer__heading:after{content:''}}.mdl-mega-footer--bottom-section,.mdl-mega-footer__bottom-section{padding-top:16px;margin-bottom:16px}.mdl-logo{margin-bottom:16px;color:#fff}.mdl-mega-footer--bottom-section .mdl-mega-footer--link-list li,.mdl-mega-footer__bottom-section .mdl-mega-footer__link-list li{float:left;margin-bottom:0;margin-right:16px}@media screen and (min-width:760px){.mdl-logo{float:left;margin-bottom:0;margin-right:16px}}.mdl-mini-footer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:32px 16px;color:#9e9e9e;background-color:#424242}.mdl-mini-footer:after{content:'';display:block}.mdl-mini-footer .mdl-logo{line-height:36px}.mdl-mini-footer--link-list,.mdl-mini-footer__link-list{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;list-style:none;margin:0;padding:0}.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li{margin-bottom:0;margin-right:16px}@media screen and (min-width:760px){.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li{line-height:36px}}.mdl-mini-footer--link-list a,.mdl-mini-footer__link-list a{color:inherit;text-decoration:none;white-space:nowrap}.mdl-mini-footer--left-section,.mdl-mini-footer__left-section{display:inline-block;-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.mdl-mini-footer--right-section,.mdl-mini-footer__right-section{display:inline-block;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.mdl-mini-footer--social-btn,.mdl-mini-footer__social-btn{width:36px;height:36px;padding:0;margin:0;background-color:#9e9e9e;border:none}.mdl-icon-toggle{position:relative;z-index:1;vertical-align:middle;display:inline-block;height:32px;margin:0;padding:0}.mdl-icon-toggle__input{line-height:32px}.mdl-icon-toggle.is-upgraded .mdl-icon-toggle__input{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-icon-toggle__label{display:inline-block;position:relative;cursor:pointer;height:32px;width:32px;min-width:32px;color:#616161;border-radius:50%;padding:0;margin-left:0;margin-right:0;text-align:center;background-color:transparent;will-change:background-color;-webkit-transition:background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);transition:background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1)}.mdl-icon-toggle__label.material-icons{line-height:32px;font-size:24px}.mdl-icon-toggle.is-checked .mdl-icon-toggle__label{color:rgb(96,125,139)}.mdl-icon-toggle.is-disabled .mdl-icon-toggle__label{color:rgba(0,0,0,.26);cursor:auto;-webkit-transition:none;transition:none}.mdl-icon-toggle.is-focused .mdl-icon-toggle__label{background-color:rgba(0,0,0,.12)}.mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label{background-color:rgba(96,125,139,.26)}.mdl-icon-toggle__ripple-container{position:absolute;z-index:2;top:-2px;left:-2px;box-sizing:border-box;width:36px;height:36px;border-radius:50%;cursor:pointer;overflow:hidden;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-icon-toggle__ripple-container .mdl-ripple{background:#616161}.mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container{cursor:auto}.mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple{background:0 0}.mdl-menu__container{display:block;margin:0;padding:0;border:none;position:absolute;overflow:visible;height:0;width:0;z-index:-1}.mdl-menu__container.is-visible{z-index:999}.mdl-menu__outline{display:block;background:#fff;margin:0;padding:0;border:none;border-radius:2px;position:absolute;top:0;left:0;overflow:hidden;opacity:0;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);will-change:transform;-webkit-transition:-webkit-transform .3s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1);transition:transform .3s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1);z-index:-1}.mdl-menu__container.is-visible .mdl-menu__outline{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);z-index:999}.mdl-menu__outline.mdl-menu--bottom-right{-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.mdl-menu__outline.mdl-menu--top-left{-webkit-transform-origin:0 100%;-ms-transform-origin:0 100%;transform-origin:0 100%}.mdl-menu__outline.mdl-menu--top-right{-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.mdl-menu{position:absolute;list-style:none;top:0;left:0;height:auto;width:auto;min-width:124px;padding:8px 0;margin:0;opacity:0;clip:rect(0 0 0 0);z-index:-1}.mdl-menu__container.is-visible .mdl-menu{opacity:1;z-index:999}.mdl-menu.is-animating{-webkit-transition:opacity .2s cubic-bezier(.4,0,.2,1),clip .3s cubic-bezier(.4,0,.2,1);transition:opacity .2s cubic-bezier(.4,0,.2,1),clip .3s cubic-bezier(.4,0,.2,1)}.mdl-menu.mdl-menu--bottom-right{left:auto;right:0}.mdl-menu.mdl-menu--top-left{top:auto;bottom:0}.mdl-menu.mdl-menu--top-right{top:auto;left:auto;bottom:0;right:0}.mdl-menu.mdl-menu--unaligned{top:auto;left:auto}.mdl-menu__item{display:block;border:none;color:rgba(0,0,0,.87);background-color:transparent;text-align:left;margin:0;padding:0 16px;outline-color:#bdbdbd;position:relative;overflow:hidden;font-size:14px;font-weight:400;letter-spacing:0;text-decoration:none;cursor:pointer;height:48px;line-height:48px;white-space:nowrap;opacity:0;-webkit-transition:opacity .2s cubic-bezier(.4,0,.2,1);transition:opacity .2s cubic-bezier(.4,0,.2,1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mdl-menu__container.is-visible .mdl-menu__item{opacity:1}.mdl-menu__item::-moz-focus-inner{border:0}.mdl-menu__item[disabled]{color:#bdbdbd;background-color:transparent;cursor:auto}.mdl-menu__item[disabled]:hover{background-color:transparent}.mdl-menu__item[disabled]:focus{background-color:transparent}.mdl-menu__item[disabled] .mdl-ripple{background:0 0}.mdl-menu__item:hover{background-color:#eee}.mdl-menu__item:focus{outline:none;background-color:#eee}.mdl-menu__item:active{background-color:#e0e0e0}.mdl-menu__item--ripple-container{display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:0;overflow:hidden}.mdl-progress{display:block;position:relative;height:4px;width:500px}.mdl-progress>.bar{display:block;position:absolute;top:0;bottom:0;width:0%;-webkit-transition:width .2s cubic-bezier(.4,0,.2,1);transition:width .2s cubic-bezier(.4,0,.2,1)}.mdl-progress>.progressbar{background-color:rgb(96,125,139);z-index:1;left:0}.mdl-progress>.bufferbar{background-image:-webkit-linear-gradient(left,rgba(255,255,255,.7),rgba(255,255,255,.7)),-webkit-linear-gradient(left,rgb(96,125,139),rgb(96,125,139));background-image:linear-gradient(to right,rgba(255,255,255,.7),rgba(255,255,255,.7)),linear-gradient(to right,rgb(96,125,139),rgb(96,125,139));z-index:0;left:0}.mdl-progress>.auxbar{right:0}@supports (-webkit-appearance:none){.mdl-progress:not(.mdl-progress__indeterminate):not(.mdl-progress__indeterminate)>.auxbar{background-image:-webkit-linear-gradient(left,rgba(255,255,255,.7),rgba(255,255,255,.7)),-webkit-linear-gradient(left,rgb(96,125,139),rgb(96,125,139));background-image:linear-gradient(to right,rgba(255,255,255,.7),rgba(255,255,255,.7)),linear-gradient(to right,rgb(96,125,139),rgb(96,125,139));-webkit-mask:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjQiIHZpZXdQb3J0PSIwIDAgMTIgNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxlbGxpcHNlIGN4PSIyIiBjeT0iMiIgcng9IjIiIHJ5PSIyIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImN4IiBmcm9tPSIyIiB0bz0iLTEwIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogIDwvZWxsaXBzZT4KICA8ZWxsaXBzZSBjeD0iMTQiIGN5PSIyIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJsb2FkZXIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iY3giIGZyb209IjE0IiB0bz0iMiIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICA8L2VsbGlwc2U+Cjwvc3ZnPgo=");mask:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjQiIHZpZXdQb3J0PSIwIDAgMTIgNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxlbGxpcHNlIGN4PSIyIiBjeT0iMiIgcng9IjIiIHJ5PSIyIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImN4IiBmcm9tPSIyIiB0bz0iLTEwIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogIDwvZWxsaXBzZT4KICA8ZWxsaXBzZSBjeD0iMTQiIGN5PSIyIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJsb2FkZXIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iY3giIGZyb209IjE0IiB0bz0iMiIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICA8L2VsbGlwc2U+Cjwvc3ZnPgo=")}}.mdl-progress:not(.mdl-progress__indeterminate)>.auxbar{background-image:-webkit-linear-gradient(left,rgba(255,255,255,.9),rgba(255,255,255,.9)),-webkit-linear-gradient(left,rgb(96,125,139),rgb(96,125,139));background-image:linear-gradient(to right,rgba(255,255,255,.9),rgba(255,255,255,.9)),linear-gradient(to right,rgb(96,125,139),rgb(96,125,139))}.mdl-progress.mdl-progress__indeterminate>.bar1{-webkit-animation-name:indeterminate1;animation-name:indeterminate1}.mdl-progress.mdl-progress__indeterminate>.bar1,.mdl-progress.mdl-progress__indeterminate>.bar3{background-color:rgb(96,125,139);-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function:linear}.mdl-progress.mdl-progress__indeterminate>.bar3{background-image:none;-webkit-animation-name:indeterminate2;animation-name:indeterminate2}@-webkit-keyframes indeterminate1{0%{left:0%;width:0%}50%{left:25%;width:75%}75%{left:100%;width:0%}}@keyframes indeterminate1{0%{left:0%;width:0%}50%{left:25%;width:75%}75%{left:100%;width:0%}}@-webkit-keyframes indeterminate2{0%,50%{left:0%;width:0%}75%{left:0%;width:25%}100%{left:100%;width:0%}}@keyframes indeterminate2{0%,50%{left:0%;width:0%}75%{left:0%;width:25%}100%{left:100%;width:0%}}.mdl-navigation{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;box-sizing:border-box}.mdl-navigation__link{color:#424242;text-decoration:none;font-weight:500;font-size:13px;margin:0}.mdl-layout{width:100%;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;overflow-y:auto;overflow-x:hidden;position:relative;-webkit-overflow-scrolling:touch}.mdl-layout.is-small-screen .mdl-layout--large-screen-only{display:none}.mdl-layout:not(.is-small-screen) .mdl-layout--small-screen-only{display:none}.mdl-layout__container{position:absolute;width:100%;height:100%}.mdl-layout-title{display:block;position:relative;font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:20px;line-height:1;letter-spacing:.02em;font-weight:400;box-sizing:border-box}.mdl-layout-spacer{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.mdl-layout__drawer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;width:240px;height:100%;max-height:100%;position:absolute;top:0;left:0;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);box-sizing:border-box;border-right:1px solid #e0e0e0;background:#fafafa;-webkit-transform:translateX(-250px);-ms-transform:translateX(-250px);transform:translateX(-250px);-webkit-transform-style:preserve-3d;transform-style:preserve-3d;will-change:transform;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:-webkit-transform;transition-property:transform;color:#424242;overflow:visible;overflow-y:auto;z-index:5}.mdl-layout__drawer.is-visible{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.mdl-layout__drawer>*{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.mdl-layout__drawer>.mdl-layout-title{line-height:64px;padding-left:40px}@media screen and (max-width:1024px){.mdl-layout__drawer>.mdl-layout-title{line-height:56px;padding-left:16px}}.mdl-layout__drawer .mdl-navigation{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;padding-top:16px}.mdl-layout__drawer .mdl-navigation .mdl-navigation__link{display:block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;padding:16px 40px;margin:0;color:#757575}@media screen and (max-width:1024px){.mdl-layout__drawer .mdl-navigation .mdl-navigation__link{padding:16px}}.mdl-layout__drawer .mdl-navigation .mdl-navigation__link:hover{background-color:#e0e0e0}.mdl-layout__drawer .mdl-navigation .mdl-navigation__link--current{background-color:#000;color:rgb(96,125,139)}@media screen and (min-width:1025px){.mdl-layout--fixed-drawer>.mdl-layout__drawer{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.mdl-layout__drawer-button{display:block;position:absolute;height:48px;width:48px;border:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;overflow:hidden;text-align:center;cursor:pointer;font-size:26px;line-height:50px;font-family:Helvetica,Arial,sans-serif;margin:10px 12px;top:0;left:0;color:rgb(255,255,255);z-index:4}.mdl-layout__header .mdl-layout__drawer-button{position:absolute;color:rgb(255,255,255);background-color:inherit}@media screen and (max-width:1024px){.mdl-layout__header .mdl-layout__drawer-button{margin:4px}}@media screen and (max-width:1024px){.mdl-layout__drawer-button{margin:4px;color:rgba(0,0,0,.5)}}@media screen and (min-width:1025px){.mdl-layout--fixed-drawer>.mdl-layout__drawer-button{display:none}}.mdl-layout__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;box-sizing:border-box;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100%;margin:0;padding:0;border:none;min-height:64px;max-height:1000px;z-index:3;background-color:rgb(96,125,139);color:rgb(255,255,255);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:max-height,box-shadow;transition-property:max-height,box-shadow}@media screen and (max-width:1024px){.mdl-layout__header{min-height:56px}}.mdl-layout--fixed-drawer:not(.is-small-screen)>.mdl-layout__header{margin-left:240px;width:calc(100% - 240px)}.mdl-layout__header>.mdl-layout-icon{position:absolute;left:40px;top:16px;height:32px;width:32px;overflow:hidden;z-index:3;display:block}@media screen and (max-width:1024px){.mdl-layout__header>.mdl-layout-icon{left:16px;top:12px}}.mdl-layout.has-drawer .mdl-layout__header>.mdl-layout-icon{display:none}.mdl-layout__header.is-compact{max-height:64px}@media screen and (max-width:1024px){.mdl-layout__header.is-compact{max-height:56px}}.mdl-layout__header.is-compact.has-tabs{height:112px}@media screen and (max-width:1024px){.mdl-layout__header.is-compact.has-tabs{min-height:104px}}@media screen and (max-width:1024px){.mdl-layout__header{display:none}.mdl-layout--fixed-header>.mdl-layout__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}}.mdl-layout__header--transparent.mdl-layout__header--transparent{background-color:transparent;box-shadow:none}.mdl-layout__header--seamed,.mdl-layout__header--scroll{box-shadow:none}.mdl-layout__header--waterfall{box-shadow:none;overflow:hidden}.mdl-layout__header--waterfall.is-casting-shadow{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-layout__header-row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;box-sizing:border-box;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:64px;margin:0;padding:0 40px 0 80px}@media screen and (max-width:1024px){.mdl-layout__header-row{height:56px;padding:0 16px 0 72px}}.mdl-layout__header-row>*{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.mdl-layout__header--scroll .mdl-layout__header-row{width:100%}.mdl-layout__header-row .mdl-navigation{margin:0;padding:0;height:64px;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}@media screen and (max-width:1024px){.mdl-layout__header-row .mdl-navigation{height:56px}}.mdl-layout__header-row .mdl-navigation__link{display:block;color:rgb(255,255,255);line-height:64px;padding:0 24px}@media screen and (max-width:1024px){.mdl-layout__header-row .mdl-navigation__link{line-height:56px;padding:0 16px}}.mdl-layout__obfuscator{background-color:transparent;position:absolute;top:0;left:0;height:100%;width:100%;z-index:4;visibility:hidden;-webkit-transition-property:background-color;transition-property:background-color;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-layout__drawer.is-visible~.mdl-layout__obfuscator{background-color:rgba(0,0,0,.5);visibility:visible}.mdl-layout__content{-ms-flex:0 1 auto;display:inline-block;overflow-y:auto;overflow-x:hidden;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;z-index:1;-webkit-overflow-scrolling:touch}.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:240px}.mdl-layout__container.has-scrolling-header .mdl-layout__content{overflow:visible}@media screen and (max-width:1024px){.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:0}.mdl-layout__container.has-scrolling-header .mdl-layout__content{overflow-y:auto;overflow-x:hidden}}.mdl-layout__tab-bar{height:96px;margin:0;width:calc(100% - 112px);padding:0 0 0 56px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;background-color:rgb(96,125,139);overflow-y:hidden;overflow-x:scroll}.mdl-layout__tab-bar::-webkit-scrollbar{display:none}@media screen and (max-width:1024px){.mdl-layout__tab-bar{width:calc(100% - 60px);padding:0 0 0 60px}}.mdl-layout--fixed-tabs .mdl-layout__tab-bar{padding:0;overflow:hidden;width:100%}.mdl-layout__tab-bar-container{position:relative;height:48px;width:100%;border:none;margin:0;z-index:2;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;overflow:hidden}.mdl-layout__container>.mdl-layout__tab-bar-container{position:absolute;top:0;left:0}.mdl-layout__tab-bar-button{display:inline-block;position:absolute;top:0;height:48px;width:56px;z-index:4;text-align:center;background-color:rgb(96,125,139);color:transparent;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media screen and (max-width:1024px){.mdl-layout__tab-bar-button{display:none;width:60px}}.mdl-layout--fixed-tabs .mdl-layout__tab-bar-button{display:none}.mdl-layout__tab-bar-button .material-icons{line-height:48px}.mdl-layout__tab-bar-button.is-active{color:rgb(255,255,255)}.mdl-layout__tab-bar-left-button{left:0}.mdl-layout__tab-bar-right-button{right:0}.mdl-layout__tab{margin:0;border:none;padding:0 24px;float:left;position:relative;display:block;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;text-decoration:none;height:48px;line-height:48px;text-align:center;font-weight:500;font-size:14px;text-transform:uppercase;color:rgba(255,255,255,.6);overflow:hidden}@media screen and (max-width:1024px){.mdl-layout__tab{padding:0 12px}}.mdl-layout--fixed-tabs .mdl-layout__tab{float:none;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0}.mdl-layout.is-upgraded .mdl-layout__tab.is-active{color:rgb(255,255,255)}.mdl-layout.is-upgraded .mdl-layout__tab.is-active::after{height:2px;width:100%;display:block;content:" ";bottom:0;left:0;position:absolute;background:rgb(83,109,254);-webkit-animation:border-expand .2s cubic-bezier(.4,0,.4,1).01s alternate forwards;animation:border-expand .2s cubic-bezier(.4,0,.4,1).01s alternate forwards;-webkit-transition:all 1s cubic-bezier(.4,0,1,1);transition:all 1s cubic-bezier(.4,0,1,1)}.mdl-layout__tab .mdl-layout__tab-ripple-container{display:block;position:absolute;height:100%;width:100%;left:0;top:0;z-index:1;overflow:hidden}.mdl-layout__tab .mdl-layout__tab-ripple-container .mdl-ripple{background-color:rgb(255,255,255)}.mdl-layout__tab-panel{display:block}.mdl-layout.is-upgraded .mdl-layout__tab-panel{display:none}.mdl-layout.is-upgraded .mdl-layout__tab-panel.is-active{display:block}.mdl-radio{position:relative;font-size:16px;line-height:24px;display:inline-block;box-sizing:border-box;margin:0;padding-left:0}.mdl-radio.is-upgraded{padding-left:24px}.mdl-radio__button{line-height:24px}.mdl-radio.is-upgraded .mdl-radio__button{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-radio__outer-circle{position:absolute;top:2px;left:0;display:inline-block;box-sizing:border-box;width:16px;height:16px;margin:0;cursor:pointer;border:2px solid rgba(0,0,0,.54);border-radius:50%;z-index:2}.mdl-radio.is-checked .mdl-radio__outer-circle{border:2px solid rgb(96,125,139)}.mdl-radio.is-disabled .mdl-radio__outer-circle{border:2px solid rgba(0,0,0,.26);cursor:auto}.mdl-radio__inner-circle{position:absolute;z-index:1;margin:0;top:6px;left:4px;box-sizing:border-box;width:8px;height:8px;cursor:pointer;-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:-webkit-transform;transition-property:transform;-webkit-transform:scale3d(0,0,0);transform:scale3d(0,0,0);border-radius:50%;background:rgb(96,125,139)}.mdl-radio.is-checked .mdl-radio__inner-circle{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}.mdl-radio.is-disabled .mdl-radio__inner-circle{background:rgba(0,0,0,.26);cursor:auto}.mdl-radio.is-focused .mdl-radio__inner-circle{box-shadow:0 0 0 10px rgba(0,0,0,.1)}.mdl-radio__label{cursor:pointer}.mdl-radio.is-disabled .mdl-radio__label{color:rgba(0,0,0,.26);cursor:auto}.mdl-radio__ripple-container{position:absolute;z-index:2;top:-9px;left:-13px;box-sizing:border-box;width:42px;height:42px;border-radius:50%;cursor:pointer;overflow:hidden;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-radio__ripple-container .mdl-ripple{background:rgb(96,125,139)}.mdl-radio.is-disabled .mdl-radio__ripple-container{cursor:auto}.mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple{background:0 0}_:-ms-input-placeholder,:root .mdl-slider.mdl-slider.is-upgraded{-ms-appearance:none;height:32px;margin:0}.mdl-slider{width:calc(100% - 40px);margin:0 20px}.mdl-slider.is-upgraded{-webkit-appearance:none;-moz-appearance:none;appearance:none;height:2px;background:0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:0;padding:0;color:rgb(96,125,139);-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;z-index:1}.mdl-slider.is-upgraded::-moz-focus-outer{border:0}.mdl-slider.is-upgraded::-ms-tooltip{display:none}.mdl-slider.is-upgraded::-webkit-slider-runnable-track{background:0 0}.mdl-slider.is-upgraded::-moz-range-track{background:0 0;border:none}.mdl-slider.is-upgraded::-ms-track{background:0 0;color:transparent;height:2px;width:100%;border:none}.mdl-slider.is-upgraded::-ms-fill-lower{padding:0;background:linear-gradient(to right,transparent,transparent 16px,rgb(96,125,139)16px,rgb(96,125,139)0)}.mdl-slider.is-upgraded::-ms-fill-upper{padding:0;background:linear-gradient(to left,transparent,transparent 16px,rgba(0,0,0,.26)16px,rgba(0,0,0,.26)0)}.mdl-slider.is-upgraded::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;box-sizing:border-box;border-radius:50%;background:rgb(96,125,139);border:none;-webkit-transition:-webkit-transform .18s cubic-bezier(.4,0,.2,1),border .18s cubic-bezier(.4,0,.2,1),box-shadow .18s cubic-bezier(.4,0,.2,1),background .28s cubic-bezier(.4,0,.2,1);transition:transform .18s cubic-bezier(.4,0,.2,1),border .18s cubic-bezier(.4,0,.2,1),box-shadow .18s cubic-bezier(.4,0,.2,1),background .28s cubic-bezier(.4,0,.2,1)}.mdl-slider.is-upgraded::-moz-range-thumb{-moz-appearance:none;width:12px;height:12px;box-sizing:border-box;border-radius:50%;background-image:none;background:rgb(96,125,139);border:none}.mdl-slider.is-upgraded:focus:not(:active)::-webkit-slider-thumb{box-shadow:0 0 0 10px rgba(96,125,139,.26)}.mdl-slider.is-upgraded:focus:not(:active)::-moz-range-thumb{box-shadow:0 0 0 10px rgba(96,125,139,.26)}.mdl-slider.is-upgraded:active::-webkit-slider-thumb{background-image:none;background:rgb(96,125,139);-webkit-transform:scale(1.5);transform:scale(1.5)}.mdl-slider.is-upgraded:active::-moz-range-thumb{background-image:none;background:rgb(96,125,139);transform:scale(1.5)}.mdl-slider.is-upgraded::-ms-thumb{width:32px;height:32px;border:none;border-radius:50%;background:rgb(96,125,139);-ms-transform:scale(.375);transform:scale(.375);transition:transform .18s cubic-bezier(.4,0,.2,1),background .28s cubic-bezier(.4,0,.2,1)}.mdl-slider.is-upgraded:focus:not(:active)::-ms-thumb{background:radial-gradient(circle closest-side,rgb(96,125,139)0%,rgb(96,125,139)37.5%,rgba(96,125,139,.26)37.5%,rgba(96,125,139,.26)100%);-ms-transform:scale(1);transform:scale(1)}.mdl-slider.is-upgraded:active::-ms-thumb{background:rgb(96,125,139);-ms-transform:scale(.5625);transform:scale(.5625)}.mdl-slider.is-upgraded.is-lowest-value::-webkit-slider-thumb{border:2px solid rgba(0,0,0,.26);background:0 0}.mdl-slider.is-upgraded.is-lowest-value::-moz-range-thumb{border:2px solid rgba(0,0,0,.26);background:0 0}.mdl-slider.is-upgraded.is-lowest-value~.mdl-slider__background-flex>.mdl-slider__background-upper{left:6px}.mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-webkit-slider-thumb{box-shadow:0 0 0 10px rgba(0,0,0,.12);background:rgba(0,0,0,.12)}.mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-moz-range-thumb{box-shadow:0 0 0 10px rgba(0,0,0,.12);background:rgba(0,0,0,.12)}.mdl-slider.is-upgraded.is-lowest-value:active::-webkit-slider-thumb{border:1.6px solid rgba(0,0,0,.26);-webkit-transform:scale(1.5);transform:scale(1.5)}.mdl-slider.is-upgraded.is-lowest-value:active~.mdl-slider__background-flex>.mdl-slider__background-upper{left:9px}.mdl-slider.is-upgraded.is-lowest-value:active::-moz-range-thumb{border:1.5px solid rgba(0,0,0,.26);transform:scale(1.5)}.mdl-slider.is-upgraded.is-lowest-value::-ms-thumb{background:radial-gradient(circle closest-side,transparent 0%,transparent 66.67%,rgba(0,0,0,.26)66.67%,rgba(0,0,0,.26)100%)}.mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-ms-thumb{background:radial-gradient(circle closest-side,rgba(0,0,0,.12)0%,rgba(0,0,0,.12)25%,rgba(0,0,0,.26)25%,rgba(0,0,0,.26)37.5%,rgba(0,0,0,.12)37.5%,rgba(0,0,0,.12)100%);-ms-transform:scale(1);transform:scale(1)}.mdl-slider.is-upgraded.is-lowest-value:active::-ms-thumb{-ms-transform:scale(.5625);transform:scale(.5625);background:radial-gradient(circle closest-side,transparent 0%,transparent 77.78%,rgba(0,0,0,.26)77.78%,rgba(0,0,0,.26)100%)}.mdl-slider.is-upgraded.is-lowest-value::-ms-fill-lower{background:0 0}.mdl-slider.is-upgraded.is-lowest-value::-ms-fill-upper{margin-left:6px}.mdl-slider.is-upgraded.is-lowest-value:active::-ms-fill-upper{margin-left:9px}.mdl-slider.is-upgraded:disabled:focus::-webkit-slider-thumb,.mdl-slider.is-upgraded:disabled:active::-webkit-slider-thumb,.mdl-slider.is-upgraded:disabled::-webkit-slider-thumb{-webkit-transform:scale(.667);transform:scale(.667);background:rgba(0,0,0,.26)}.mdl-slider.is-upgraded:disabled:focus::-moz-range-thumb,.mdl-slider.is-upgraded:disabled:active::-moz-range-thumb,.mdl-slider.is-upgraded:disabled::-moz-range-thumb{transform:scale(.667);background:rgba(0,0,0,.26)}.mdl-slider.is-upgraded:disabled~.mdl-slider__background-flex>.mdl-slider__background-lower{background-color:rgba(0,0,0,.26);left:-6px}.mdl-slider.is-upgraded:disabled~.mdl-slider__background-flex>.mdl-slider__background-upper{left:6px}.mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-webkit-slider-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-webkit-slider-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled::-webkit-slider-thumb{border:3px solid rgba(0,0,0,.26);background:0 0;-webkit-transform:scale(.667);transform:scale(.667)}.mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-moz-range-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-moz-range-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled::-moz-range-thumb{border:3px solid rgba(0,0,0,.26);background:0 0;transform:scale(.667)}.mdl-slider.is-upgraded.is-lowest-value:disabled:active~.mdl-slider__background-flex>.mdl-slider__background-upper{left:6px}.mdl-slider.is-upgraded:disabled:focus::-ms-thumb,.mdl-slider.is-upgraded:disabled:active::-ms-thumb,.mdl-slider.is-upgraded:disabled::-ms-thumb{-ms-transform:scale(.25);transform:scale(.25);background:rgba(0,0,0,.26)}.mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-ms-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled::-ms-thumb{-ms-transform:scale(.25);transform:scale(.25);background:radial-gradient(circle closest-side,transparent 0%,transparent 50%,rgba(0,0,0,.26)50%,rgba(0,0,0,.26)100%)}.mdl-slider.is-upgraded:disabled::-ms-fill-lower{margin-right:6px;background:linear-gradient(to right,transparent,transparent 25px,rgba(0,0,0,.26)25px,rgba(0,0,0,.26)0)}.mdl-slider.is-upgraded:disabled::-ms-fill-upper{margin-left:6px}.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-fill-upper{margin-left:6px}.mdl-slider__ie-container{height:18px;overflow:visible;border:none;margin:none;padding:none}.mdl-slider__container{height:18px;position:relative;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.mdl-slider__container,.mdl-slider__background-flex{background:0 0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.mdl-slider__background-flex{position:absolute;height:2px;width:calc(100% - 52px);top:50%;left:0;margin:0 26px;overflow:hidden;border:0;padding:0;-webkit-transform:translate(0,-1px);-ms-transform:translate(0,-1px);transform:translate(0,-1px)}.mdl-slider__background-lower{background:rgb(96,125,139)}.mdl-slider__background-lower,.mdl-slider__background-upper{-webkit-box-flex:0;-webkit-flex:0;-ms-flex:0;flex:0;position:relative;border:0;padding:0}.mdl-slider__background-upper{background:rgba(0,0,0,.26);-webkit-transition:left .18s cubic-bezier(.4,0,.2,1);transition:left .18s cubic-bezier(.4,0,.2,1)}.mdl-spinner{display:inline-block;position:relative;width:28px;height:28px}.mdl-spinner:not(.is-upgraded).is-active:after{content:"Loading..."}.mdl-spinner.is-upgraded.is-active{-webkit-animation:mdl-spinner__container-rotate 1568.23529412ms linear infinite;animation:mdl-spinner__container-rotate 1568.23529412ms linear infinite}@-webkit-keyframes mdl-spinner__container-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes mdl-spinner__container-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.mdl-spinner__layer{position:absolute;width:100%;height:100%;opacity:0}.mdl-spinner__layer-1{border-color:#42a5f5}.mdl-spinner--single-color .mdl-spinner__layer-1{border-color:rgb(96,125,139)}.mdl-spinner.is-active .mdl-spinner__layer-1{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-1-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-1-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both}.mdl-spinner__layer-2{border-color:#f44336}.mdl-spinner--single-color .mdl-spinner__layer-2{border-color:rgb(96,125,139)}.mdl-spinner.is-active .mdl-spinner__layer-2{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-2-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-2-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both}.mdl-spinner__layer-3{border-color:#fdd835}.mdl-spinner--single-color .mdl-spinner__layer-3{border-color:rgb(96,125,139)}.mdl-spinner.is-active .mdl-spinner__layer-3{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-3-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-3-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both}.mdl-spinner__layer-4{border-color:#4caf50}.mdl-spinner--single-color .mdl-spinner__layer-4{border-color:rgb(96,125,139)}.mdl-spinner.is-active .mdl-spinner__layer-4{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-4-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-4-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both}@-webkit-keyframes mdl-spinner__fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg);transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg);transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg);transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg);transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg);transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg);transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg);transform:rotate(1080deg)}}@keyframes mdl-spinner__fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg);transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg);transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg);transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg);transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg);transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg);transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg);transform:rotate(1080deg)}}@-webkit-keyframes mdl-spinner__layer-1-fade-in-out{from,25%{opacity:.99}26%,89%{opacity:0}90%,100%{opacity:.99}}@keyframes mdl-spinner__layer-1-fade-in-out{from,25%{opacity:.99}26%,89%{opacity:0}90%,100%{opacity:.99}}@-webkit-keyframes mdl-spinner__layer-2-fade-in-out{from,15%{opacity:0}25%,50%{opacity:.99}51%{opacity:0}}@keyframes mdl-spinner__layer-2-fade-in-out{from,15%{opacity:0}25%,50%{opacity:.99}51%{opacity:0}}@-webkit-keyframes mdl-spinner__layer-3-fade-in-out{from,40%{opacity:0}50%,75%{opacity:.99}76%{opacity:0}}@keyframes mdl-spinner__layer-3-fade-in-out{from,40%{opacity:0}50%,75%{opacity:.99}76%{opacity:0}}@-webkit-keyframes mdl-spinner__layer-4-fade-in-out{from,65%{opacity:0}75%,90%{opacity:.99}100%{opacity:0}}@keyframes mdl-spinner__layer-4-fade-in-out{from,65%{opacity:0}75%,90%{opacity:.99}100%{opacity:0}}.mdl-spinner__gap-patch{position:absolute;box-sizing:border-box;top:0;left:45%;width:10%;height:100%;overflow:hidden;border-color:inherit}.mdl-spinner__gap-patch .mdl-spinner__circle{width:1000%;left:-450%}.mdl-spinner__circle-clipper{display:inline-block;position:relative;width:50%;height:100%;overflow:hidden;border-color:inherit}.mdl-spinner__circle-clipper .mdl-spinner__circle{width:200%}.mdl-spinner__circle{box-sizing:border-box;height:100%;border-width:3px;border-style:solid;border-color:inherit;border-bottom-color:transparent!important;border-radius:50%;-webkit-animation:none;animation:none;position:absolute;top:0;right:0;bottom:0;left:0}.mdl-spinner__left .mdl-spinner__circle{border-right-color:transparent!important;-webkit-transform:rotate(129deg);-ms-transform:rotate(129deg);transform:rotate(129deg)}.mdl-spinner.is-active .mdl-spinner__left .mdl-spinner__circle{-webkit-animation:mdl-spinner__left-spin 1333ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__left-spin 1333ms cubic-bezier(.4,0,.2,1)infinite both}.mdl-spinner__right .mdl-spinner__circle{left:-100%;border-left-color:transparent!important;-webkit-transform:rotate(-129deg);-ms-transform:rotate(-129deg);transform:rotate(-129deg)}.mdl-spinner.is-active .mdl-spinner__right .mdl-spinner__circle{-webkit-animation:mdl-spinner__right-spin 1333ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__right-spin 1333ms cubic-bezier(.4,0,.2,1)infinite both}@-webkit-keyframes mdl-spinner__left-spin{from{-webkit-transform:rotate(130deg);transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg);transform:rotate(130deg)}}@keyframes mdl-spinner__left-spin{from{-webkit-transform:rotate(130deg);transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg);transform:rotate(130deg)}}@-webkit-keyframes mdl-spinner__right-spin{from{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}}@keyframes mdl-spinner__right-spin{from{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}}.mdl-switch{position:relative;z-index:1;vertical-align:middle;display:inline-block;box-sizing:border-box;width:100%;height:24px;margin:0;padding:0;overflow:visible;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mdl-switch.is-upgraded{padding-left:28px}.mdl-switch__input{line-height:24px}.mdl-switch.is-upgraded .mdl-switch__input{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-switch__track{background:rgba(0,0,0,.26);position:absolute;left:0;top:5px;height:14px;width:36px;border-radius:14px;cursor:pointer}.mdl-switch.is-checked .mdl-switch__track{background:rgba(96,125,139,.5)}.mdl-switch.is-disabled .mdl-switch__track{background:rgba(0,0,0,.12);cursor:auto}.mdl-switch__thumb{background:#fafafa;position:absolute;left:0;top:2px;height:20px;width:20px;border-radius:50%;cursor:pointer;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:left;transition-property:left}.mdl-switch.is-checked .mdl-switch__thumb{background:rgb(96,125,139);left:16px;box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12)}.mdl-switch.is-disabled .mdl-switch__thumb{background:#bdbdbd;cursor:auto}.mdl-switch__focus-helper{position:absolute;top:50%;left:50%;-webkit-transform:translate(-4px,-4px);-ms-transform:translate(-4px,-4px);transform:translate(-4px,-4px);display:inline-block;box-sizing:border-box;width:8px;height:8px;border-radius:50%;background-color:transparent}.mdl-switch.is-focused .mdl-switch__focus-helper{box-shadow:0 0 0 20px rgba(0,0,0,.1);background-color:rgba(0,0,0,.1)}.mdl-switch.is-focused.is-checked .mdl-switch__focus-helper{box-shadow:0 0 0 20px rgba(96,125,139,.26);background-color:rgba(96,125,139,.26)}.mdl-switch__label{position:relative;cursor:pointer;font-size:16px;line-height:24px;margin:0;left:24px}.mdl-switch.is-disabled .mdl-switch__label{color:#bdbdbd;cursor:auto}.mdl-switch__ripple-container{position:absolute;z-index:2;top:-12px;left:-14px;box-sizing:border-box;width:48px;height:48px;border-radius:50%;cursor:pointer;overflow:hidden;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000);-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-timing-function:step-end;transition-timing-function:step-end;-webkit-transition-property:left;transition-property:left}.mdl-switch__ripple-container .mdl-ripple{background:rgb(96,125,139)}.mdl-switch.is-disabled .mdl-switch__ripple-container{cursor:auto}.mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple{background:0 0}.mdl-switch.is-checked .mdl-switch__ripple-container{cursor:auto;left:2px}.mdl-tabs{display:block;width:100%}.mdl-tabs__tab-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;height:48px;padding:0;margin:0;border-bottom:1px solid #e0e0e0}.mdl-tabs__tab{margin:0;border:none;padding:0 24px;float:left;position:relative;display:block;color:red;text-decoration:none;height:48px;line-height:48px;text-align:center;font-weight:500;font-size:14px;text-transform:uppercase;color:rgba(0,0,0,.54);overflow:hidden}.mdl-tabs.is-upgraded .mdl-tabs__tab.is-active{color:rgba(0,0,0,.87)}.mdl-tabs.is-upgraded .mdl-tabs__tab.is-active:after{height:2px;width:100%;display:block;content:" ";bottom:0;left:0;position:absolute;background:rgb(96,125,139);-webkit-animation:border-expand .2s cubic-bezier(.4,0,.4,1).01s alternate forwards;animation:border-expand .2s cubic-bezier(.4,0,.4,1).01s alternate forwards;-webkit-transition:all 1s cubic-bezier(.4,0,1,1);transition:all 1s cubic-bezier(.4,0,1,1)}.mdl-tabs__tab .mdl-tabs__ripple-container{display:block;position:absolute;height:100%;width:100%;left:0;top:0;z-index:1;overflow:hidden}.mdl-tabs__tab .mdl-tabs__ripple-container .mdl-ripple{background:rgb(96,125,139)}.mdl-tabs__panel{display:block}.mdl-tabs.is-upgraded .mdl-tabs__panel{display:none}.mdl-tabs.is-upgraded .mdl-tabs__panel.is-active{display:block}@-webkit-keyframes border-expand{0%{opacity:0;width:0}100%{opacity:1;width:100%}}@keyframes border-expand{0%{opacity:0;width:0}100%{opacity:1;width:100%}}.mdl-textfield{position:relative;font-size:16px;display:inline-block;box-sizing:border-box;width:300px;max-width:100%;margin:0;padding:20px 0}.mdl-textfield .mdl-button{position:absolute;bottom:20px}.mdl-textfield--align-right{text-align:right}.mdl-textfield--full-width{width:100%}.mdl-textfield--expandable{min-width:32px;width:auto;min-height:32px}.mdl-textfield__input{border:none;border-bottom:1px solid rgba(0,0,0,.12);display:inline-block;font-size:16px;margin:0;padding:4px 0;width:100%;background:16px;text-align:left;color:inherit}.mdl-textfield.is-focused .mdl-textfield__input{outline:none}.mdl-textfield.is-invalid .mdl-textfield__input{border-color:#de3226;box-shadow:none}.mdl-textfield.is-disabled .mdl-textfield__input{background-color:transparent;border-bottom:1px dotted rgba(0,0,0,.12)}.mdl-textfield__label{bottom:0;color:rgba(0,0,0,.26);font-size:16px;left:0;right:0;pointer-events:none;position:absolute;top:24px;width:100%;overflow:hidden;white-space:nowrap;text-align:left}.mdl-textfield.is-dirty .mdl-textfield__label{visibility:hidden}.mdl-textfield--floating-label .mdl-textfield__label{-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-textfield--floating-label.is-focused .mdl-textfield__label,.mdl-textfield--floating-label.is-dirty .mdl-textfield__label{color:rgb(96,125,139);font-size:12px;top:4px;visibility:visible}.mdl-textfield--floating-label.is-focused .mdl-textfield__expandable-holder .mdl-textfield__label,.mdl-textfield--floating-label.is-dirty .mdl-textfield__expandable-holder .mdl-textfield__label{top:-16px}.mdl-textfield--floating-label.is-invalid .mdl-textfield__label{color:#de3226;font-size:12px}.mdl-textfield__label:after{background-color:rgb(96,125,139);bottom:20px;content:'';height:2px;left:45%;position:absolute;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);visibility:hidden;width:10px}.mdl-textfield.is-focused .mdl-textfield__label:after{left:0;visibility:visible;width:100%}.mdl-textfield.is-invalid .mdl-textfield__label:after{background-color:#de3226}.mdl-textfield__error{color:#de3226;position:absolute;font-size:12px;margin-top:3px;visibility:hidden}.mdl-textfield.is-invalid .mdl-textfield__error{visibility:visible}.mdl-textfield__expandable-holder{display:inline-block;position:relative;margin-left:32px;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);display:inline-block;max-width:.1px}.mdl-textfield.is-focused .mdl-textfield__expandable-holder,.mdl-textfield.is-dirty .mdl-textfield__expandable-holder{max-width:600px}.mdl-textfield__expandable-holder .mdl-textfield__label:after{bottom:0}.mdl-tooltip{-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:top center;-ms-transform-origin:top center;transform-origin:top center;will-change:transform;z-index:999;background:rgba(97,97,97,.9);border-radius:2px;color:#fff;display:inline-block;font-size:10px;font-weight:500;line-height:14px;max-width:170px;position:fixed;top:-500px;left:-500px;padding:8px;text-align:center}.mdl-tooltip.is-active{-webkit-animation:pulse 200ms cubic-bezier(0,0,.2,1)forwards;animation:pulse 200ms cubic-bezier(0,0,.2,1)forwards}.mdl-tooltip--large{line-height:14px;font-size:14px;padding:16px}@-webkit-keyframes pulse{0%{-webkit-transform:scale(0);transform:scale(0);opacity:0}50%{-webkit-transform:scale(.99);transform:scale(.99)}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1;visibility:visible}}@keyframes pulse{0%{-webkit-transform:scale(0);transform:scale(0);opacity:0}50%{-webkit-transform:scale(.99);transform:scale(.99)}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1;visibility:visible}}.mdl-shadow--2dp{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-shadow--3dp{box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12)}.mdl-shadow--4dp{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2)}.mdl-shadow--6dp{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.2)}.mdl-shadow--8dp{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.2)}.mdl-shadow--16dp{box-shadow:0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.2)}.mdl-grid{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;margin:0 auto;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.mdl-grid.mdl-grid--no-spacing{padding:0}.mdl-cell{box-sizing:border-box}.mdl-cell--top{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start}.mdl-cell--middle{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.mdl-cell--bottom{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end}.mdl-cell--stretch{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch}.mdl-grid.mdl-grid--no-spacing>.mdl-cell{margin:0}@media (max-width:479px){.mdl-grid{padding:8px}.mdl-cell{margin:8px;width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell{width:100%}.mdl-cell--hide-phone{display:none!important}.mdl-cell--1-col{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col{width:25%}.mdl-cell--1-col-phone.mdl-cell--1-col-phone{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col-phone.mdl-cell--1-col-phone{width:25%}.mdl-cell--2-col{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col{width:50%}.mdl-cell--2-col-phone.mdl-cell--2-col-phone{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col-phone.mdl-cell--2-col-phone{width:50%}.mdl-cell--3-col{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col{width:75%}.mdl-cell--3-col-phone.mdl-cell--3-col-phone{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col-phone.mdl-cell--3-col-phone{width:75%}.mdl-cell--4-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col{width:100%}.mdl-cell--4-col-phone.mdl-cell--4-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col-phone.mdl-cell--4-col-phone{width:100%}.mdl-cell--5-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col{width:100%}.mdl-cell--5-col-phone.mdl-cell--5-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col-phone.mdl-cell--5-col-phone{width:100%}.mdl-cell--6-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col{width:100%}.mdl-cell--6-col-phone.mdl-cell--6-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col-phone.mdl-cell--6-col-phone{width:100%}.mdl-cell--7-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col{width:100%}.mdl-cell--7-col-phone.mdl-cell--7-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col-phone.mdl-cell--7-col-phone{width:100%}.mdl-cell--8-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col{width:100%}.mdl-cell--8-col-phone.mdl-cell--8-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col-phone.mdl-cell--8-col-phone{width:100%}.mdl-cell--9-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col{width:100%}.mdl-cell--9-col-phone.mdl-cell--9-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col-phone.mdl-cell--9-col-phone{width:100%}.mdl-cell--10-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col{width:100%}.mdl-cell--10-col-phone.mdl-cell--10-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col-phone.mdl-cell--10-col-phone{width:100%}.mdl-cell--11-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col{width:100%}.mdl-cell--11-col-phone.mdl-cell--11-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col-phone.mdl-cell--11-col-phone{width:100%}.mdl-cell--12-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col{width:100%}.mdl-cell--12-col-phone.mdl-cell--12-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col-phone.mdl-cell--12-col-phone{width:100%}}@media (min-width:480px) and (max-width:839px){.mdl-grid{padding:8px}.mdl-cell{margin:8px;width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell{width:50%}.mdl-cell--hide-tablet{display:none!important}.mdl-cell--1-col{width:calc(12.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col{width:12.5%}.mdl-cell--1-col-tablet.mdl-cell--1-col-tablet{width:calc(12.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col-tablet.mdl-cell--1-col-tablet{width:12.5%}.mdl-cell--2-col{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col{width:25%}.mdl-cell--2-col-tablet.mdl-cell--2-col-tablet{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col-tablet.mdl-cell--2-col-tablet{width:25%}.mdl-cell--3-col{width:calc(37.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col{width:37.5%}.mdl-cell--3-col-tablet.mdl-cell--3-col-tablet{width:calc(37.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col-tablet.mdl-cell--3-col-tablet{width:37.5%}.mdl-cell--4-col{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col{width:50%}.mdl-cell--4-col-tablet.mdl-cell--4-col-tablet{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col-tablet.mdl-cell--4-col-tablet{width:50%}.mdl-cell--5-col{width:calc(62.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col{width:62.5%}.mdl-cell--5-col-tablet.mdl-cell--5-col-tablet{width:calc(62.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col-tablet.mdl-cell--5-col-tablet{width:62.5%}.mdl-cell--6-col{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col{width:75%}.mdl-cell--6-col-tablet.mdl-cell--6-col-tablet{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col-tablet.mdl-cell--6-col-tablet{width:75%}.mdl-cell--7-col{width:calc(87.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col{width:87.5%}.mdl-cell--7-col-tablet.mdl-cell--7-col-tablet{width:calc(87.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col-tablet.mdl-cell--7-col-tablet{width:87.5%}.mdl-cell--8-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col{width:100%}.mdl-cell--8-col-tablet.mdl-cell--8-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col-tablet.mdl-cell--8-col-tablet{width:100%}.mdl-cell--9-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col{width:100%}.mdl-cell--9-col-tablet.mdl-cell--9-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col-tablet.mdl-cell--9-col-tablet{width:100%}.mdl-cell--10-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col{width:100%}.mdl-cell--10-col-tablet.mdl-cell--10-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col-tablet.mdl-cell--10-col-tablet{width:100%}.mdl-cell--11-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col{width:100%}.mdl-cell--11-col-tablet.mdl-cell--11-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col-tablet.mdl-cell--11-col-tablet{width:100%}.mdl-cell--12-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col{width:100%}.mdl-cell--12-col-tablet.mdl-cell--12-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col-tablet.mdl-cell--12-col-tablet{width:100%}}@media (min-width:840px){.mdl-grid{padding:8px}.mdl-cell{margin:8px;width:calc(33.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell{width:33.3333333333%}.mdl-cell--hide-desktop{display:none!important}.mdl-cell--1-col{width:calc(8.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col{width:8.3333333333%}.mdl-cell--1-col-desktop.mdl-cell--1-col-desktop{width:calc(8.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col-desktop.mdl-cell--1-col-desktop{width:8.3333333333%}.mdl-cell--2-col{width:calc(16.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col{width:16.6666666667%}.mdl-cell--2-col-desktop.mdl-cell--2-col-desktop{width:calc(16.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col-desktop.mdl-cell--2-col-desktop{width:16.6666666667%}.mdl-cell--3-col{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col{width:25%}.mdl-cell--3-col-desktop.mdl-cell--3-col-desktop{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col-desktop.mdl-cell--3-col-desktop{width:25%}.mdl-cell--4-col{width:calc(33.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col{width:33.3333333333%}.mdl-cell--4-col-desktop.mdl-cell--4-col-desktop{width:calc(33.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col-desktop.mdl-cell--4-col-desktop{width:33.3333333333%}.mdl-cell--5-col{width:calc(41.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col{width:41.6666666667%}.mdl-cell--5-col-desktop.mdl-cell--5-col-desktop{width:calc(41.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col-desktop.mdl-cell--5-col-desktop{width:41.6666666667%}.mdl-cell--6-col{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col{width:50%}.mdl-cell--6-col-desktop.mdl-cell--6-col-desktop{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col-desktop.mdl-cell--6-col-desktop{width:50%}.mdl-cell--7-col{width:calc(58.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col{width:58.3333333333%}.mdl-cell--7-col-desktop.mdl-cell--7-col-desktop{width:calc(58.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col-desktop.mdl-cell--7-col-desktop{width:58.3333333333%}.mdl-cell--8-col{width:calc(66.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col{width:66.6666666667%}.mdl-cell--8-col-desktop.mdl-cell--8-col-desktop{width:calc(66.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col-desktop.mdl-cell--8-col-desktop{width:66.6666666667%}.mdl-cell--9-col{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col{width:75%}.mdl-cell--9-col-desktop.mdl-cell--9-col-desktop{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col-desktop.mdl-cell--9-col-desktop{width:75%}.mdl-cell--10-col{width:calc(83.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col{width:83.3333333333%}.mdl-cell--10-col-desktop.mdl-cell--10-col-desktop{width:calc(83.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col-desktop.mdl-cell--10-col-desktop{width:83.3333333333%}.mdl-cell--11-col{width:calc(91.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col{width:91.6666666667%}.mdl-cell--11-col-desktop.mdl-cell--11-col-desktop{width:calc(91.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col-desktop.mdl-cell--11-col-desktop{width:91.6666666667%}.mdl-cell--12-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col{width:100%}.mdl-cell--12-col-desktop.mdl-cell--12-col-desktop{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col-desktop.mdl-cell--12-col-desktop{width:100%}}body{margin:0}.styleguide-demo h1{margin:48px 24px 0}.styleguide-demo h1:after{content:'';display:block;width:100%;border-bottom:1px solid rgba(0,0,0,.5);margin-top:24px}.styleguide-demo{opacity:0;-webkit-transition:opacity .6s ease;transition:opacity .6s ease}.styleguide-masthead{height:256px;background:#212121;padding:115px 16px 0}.styleguide-container{position:relative;max-width:960px;width:100%}.styleguide-title{color:#fff;bottom:auto;position:relative;font-size:56px;font-weight:300;line-height:1;letter-spacing:-.02em}.styleguide-title:after{border-bottom:0}.styleguide-title span{font-weight:300}.mdl-styleguide .mdl-layout__drawer .mdl-navigation__link{padding:10px 24px}.demosLoaded .styleguide-demo{opacity:1}iframe{display:block;width:100%;border:none}iframe.heightSet{overflow:hidden}.demo-wrapper{margin:24px}.demo-wrapper iframe{border:1px solid rgba(0,0,0,.5)} \ No newline at end of file diff --git a/inc/themes/material-blue/css/styles.css b/inc/themes/material-blue/css/styles.css index 6b3b4296..2d74ea0c 100644 --- a/inc/themes/material-blue/css/styles.css +++ b/inc/themes/material-blue/css/styles.css @@ -157,12 +157,12 @@ i{cursor: pointer;} a, a:visited { text-decoration: none; - color: rgba(68, 138, 255, 1); + color: rgba(83, 109, 254, 1); } a:hover, a:active, a:focus { text-decoration: none; - color: rgba(68, 138, 255, .6); + color: rgba(83, 109, 254, .6); cursor: pointer; } @@ -191,7 +191,7 @@ a:hover, a:active, a:focus { #container { margin: auto; - width: 80%; + width: 100%; } #container.main { @@ -200,7 +200,8 @@ a:hover, a:active, a:focus { width: 100%; height: auto; min-height: 650px; - background: url("../inc/themes/material-blue/imgs/logo_full.png") no-repeat left top transparent; + background: url("../inc/themes/material-blue/imgs/logo_full.svg") no-repeat left top transparent; + background-size: auto 200px; } #container.error, #container.install, #container.passreset { @@ -258,7 +259,7 @@ a:hover, a:active, a:focus { #container #content { width: 95%; min-height: 500px; - margin: 10em auto 5em auto; + margin: 14em auto 5em auto; } #content td.descField, #fancyContainer td.descField { @@ -275,8 +276,16 @@ a:hover, a:active, a:focus { width: 100%; } +#content #searchbox { + position: relative; + left: 10%; + width: 90%; + height: 5em; + padding: 5px; + padding-left: 15px; +} + #content #tblTools { - width: 100%; height: 5em; padding: 5px; padding-left: 15px; @@ -352,13 +361,13 @@ a:hover, a:active, a:focus { #content #title.titleRed, #content #title.titleNormal { - background-color: #448AFF; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #66a1ff), color-stop(90%, #448AFF)); - background-image: -webkit-linear-gradient(#66a1ff 20%, #448AFF 90%); - background-image: -moz-linear-gradient(#66a1ff 20%, #448AFF 90%); - background-image: -o-linear-gradient(#66a1ff 20%, #448AFF 90%); - background-image: linear-gradient(#66a1ff 20%, #448AFF 90%); - background: #448aff url("../inc/themes/material-blue/css/images/ui-bg_highlight-hard_75_448AFF_1x100.png") repeat-x scroll 50% 50% + background-color: #536dfe; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #536dfe), color-stop(90%, #536dfe)); + background-image: -webkit-linear-gradient(#536dfe 20%, #536dfe 90%); + background-image: -moz-linear-gradient(#536dfe 20%, #536dfe 90%); + background-image: -o-linear-gradient(#536dfe 20%, #536dfe 90%); + background-image: linear-gradient(#536dfe 20%, #536dfe 90%); + background: #536dfe url("../inc/themes/material-blue/css/images/ui-bg_highlight-hard_100_536DFE_1x100.png") repeat-x scroll 50% 50%; } #content .data { @@ -471,6 +480,12 @@ a:hover, a:active, a:focus { background: url("../imgs/clock.png") no-repeat 98% 5% #f9f9f9; } +#content #tabs .ui-tabs-nav{ + position:relative; + left: 12em; + width: 90%; +} + #content #tabs fieldset { border: 1px solid #c9c9c9; } @@ -771,13 +786,15 @@ a:hover, a:active, a:focus { } #content #tblTools #toolsLeft { + display: inline-block; text-align: left; - width: 80%; + width: 90%; } #content #tblTools #toolsRight { + display: inline-block; text-align: right; - width: 5%; + width: 8%; } #content #tblTools #toolsRight input { @@ -1226,18 +1243,18 @@ footer img { } .header-blue { - background: #448aff url("../inc/themes/material-blue/css/images/ui-bg_highlight-hard_75_448AFF_1x100.png") repeat-x scroll 50% 50% + background: #536dfe url("../inc/themes/material-blue/css/images/ui-bg_highlight-hard_100_536DFE_1x100.png") repeat-x scroll 50% 50%; } .header-grey { - background-color: #448AFF; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #66a1ff), color-stop(90%, #448AFF)); - background-image: -webkit-linear-gradient(#66a1ff 20%, #448AFF 90%); - background-image: -moz-linear-gradient(#66a1ff 20%, #448AFF 90%); - background-image: -o-linear-gradient(#66a1ff 20%, #448AFF 90%); - background-image: linear-gradient(#66a1ff 20%, #448AFF 90%); + background-color: #536dfe; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #536dfe), color-stop(90%, #536dfe)); + background-image: -webkit-linear-gradient(#536dfe 20%, #536dfe 90%); + background-image: -moz-linear-gradient(#536dfe 20%, #536dfe 90%); + background-image: -o-linear-gradient(#536dfe 20%, #536dfe 90%); + background-image: linear-gradient(#536dfe 20%, #536dfe 90%); color: #fff; - background: #448aff url("../inc/themes/material-blue/css/images/ui-bg_highlight-hard_75_448AFF_1x100.png") repeat-x scroll 50% 50% + background: #536dfe url("../inc/themes/material-blue/css/images/ui-bg_highlight-hard_100_536DFE_1x100.png") repeat-x scroll 50% 50%; height: 30px; text-align: center; } @@ -1435,7 +1452,8 @@ footer img { min-height: 150px; margin: 75px auto; padding: 2em; - background-color: #fff; + background: url("../inc/themes/material-blue/imgs/logo_full.svg") no-repeat left top #fff; + background-size: 300px auto; } #boxLogin .error { @@ -1448,22 +1466,12 @@ footer img { margin-right: auto; } -#boxLogin #boxLogo { - display: inline-block; - width: 150px; - text-align: left; - padding: 2em auto; -} - -#boxLogin #boxLogo #imgLogo { - width: 100px; - height: 100px; - vertical-align: middle; -} - #boxLogin #boxData { + position: relative; + top: 4em; + left: 10em; display: inline-block; - width: 200px; + width: 250px; height: 100%; min-height: 100px; text-align: left; @@ -1473,6 +1481,8 @@ footer img { } #boxLogin #boxButton { + position: relative; + left: 10em; width: 130px; display: inline-block; text-align: right; @@ -1552,6 +1562,10 @@ fieldset.warning a { -moz-box-shadow: 0px 8px 6px -6px #a9a9a9; } +#actions #logo img { + width: 300px; +} + #actions #logo #pageDesc { position: relative; top: 30px; diff --git a/inc/themes/material-blue/editpass.inc b/inc/themes/material-blue/editpass.inc index c1022b94..b52c9086 100644 --- a/inc/themes/material-blue/editpass.inc +++ b/inc/themes/material-blue/editpass.inc @@ -26,21 +26,19 @@
    - - +
    - remove_red_eye - settings
    - - +
    -
    - remove_red_eye - settings
    -
    - remove_red_eye - settings -
    -
    - remove_red_eye
    -
    - remove_red_eye
    - - - - -
    + - -
    - + +
    + +
    + + + \ No newline at end of file diff --git a/web/MainC.class.php b/web/MainC.class.php index 91295a4f..9e32cbc1 100644 --- a/web/MainC.class.php +++ b/web/MainC.class.php @@ -59,7 +59,7 @@ class MainC extends Controller implements ActionsInterface $this->view->assign('startTime', microtime()); $this->view->assign('page', $page); $this->view->assign('loggedIn', \SP\Init::isLoggedIn()); - $this->view->assign('logoMedium', Init::$WEBURI . '/imgs/logo.svg'); + $this->view->assign('logoNoText', Init::$WEBURI . '/imgs/logo.svg'); $this->view->assign('logo', Init::$WEBURI . '/imgs/logo_full.svg'); $this->getHeader(); From 7811e0ed15a819eb30b10d80a1c5148655c50f6c Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Mon, 27 Jul 2015 03:18:17 +0200 Subject: [PATCH 46/84] * [ADD] Per user Two factor authentication (needs DB upgrade). * [ADD] Copy username to clipboard on password view. --- ajax/ajax_2fa.php | 59 +++++ ajax/ajax_doLogin.php | 29 ++- ajax/ajax_getContent.php | 8 + ajax/ajax_userPrefsSave.php | 76 ++++++ ajax/ajax_viewpass.php | 2 +- imgs/logo.svg | 292 ++++++++++++++++++---- imgs/logo_full.svg | 151 ++++++------ inc/ActionsInterface.class.php | 2 + inc/Auth2FA.class.php | 139 +++++++++++ inc/Base.php | 2 +- inc/Controller.class.php | 4 +- inc/Email.class.php | 4 +- inc/Init.class.php | 18 +- inc/Session.class.php | 20 ++ inc/Upgrade.class.php | 1 + inc/UserPreferences.class.php | 129 ++++++++++ inc/Users.class.php | 21 ++ inc/Util.class.php | 2 +- inc/dbstructure.sql | 1 + inc/ext/Base2n.class.php | 302 +++++++++++++++++++++++ inc/ext/Google2FA.class.php | 181 ++++++++++++++ inc/themes/material-blue/2fa.inc | 40 +++ inc/themes/material-blue/css/styles.css | 20 +- inc/themes/material-blue/footer.inc | 2 + inc/themes/material-blue/js-common.inc | 87 ++++--- inc/themes/material-blue/js/functions.js | 102 +++++--- inc/themes/material-blue/search.inc | 33 +-- inc/themes/material-blue/security.inc | 74 ++++++ js/js.php | 2 +- res/test_2fa.php | 215 ++++++++++++++++ web/ConfigC.class.php | 2 - web/MainC.class.php | 21 ++ web/UsersMgmtC.class.php | 2 + web/UsersPrefsC.class.php | 99 ++++++++ 34 files changed, 1888 insertions(+), 254 deletions(-) create mode 100644 ajax/ajax_2fa.php create mode 100644 ajax/ajax_userPrefsSave.php create mode 100644 inc/Auth2FA.class.php create mode 100644 inc/UserPreferences.class.php create mode 100644 inc/ext/Base2n.class.php create mode 100644 inc/ext/Google2FA.class.php create mode 100644 inc/themes/material-blue/2fa.inc create mode 100644 inc/themes/material-blue/security.inc create mode 100644 res/test_2fa.php create mode 100644 web/UsersPrefsC.class.php diff --git a/ajax/ajax_2fa.php b/ajax/ajax_2fa.php new file mode 100644 index 00000000..aad64ad8 --- /dev/null +++ b/ajax/ajax_2fa.php @@ -0,0 +1,59 @@ +. + * + */ + +define('APP_ROOT', '..'); + +require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; + +SP\Request::checkReferer('POST'); + +$sk = SP\Request::analyze('sk', false); + +if (!$sk || !SP\Common::checkSessionKey($sk)) { + SP\Common::printJSON(_('CONSULTA INVÁLIDA')); +} + +$userId = SP\Request::analyze('itemId', 0); +$pin = SP\Request::analyze('security_pin', 0); + +$twoFa = new \SP\Auth\Auth2FA($userId, $userLogin); + +if($userId && $pin && $twoFa->verifyKey($pin)){ + \SP\Session::set2FApassed(true); + + // Comprobar si existen parámetros adicionales en URL via GET + foreach ($_POST as $param => $value) { + if (preg_match('/g_.*/', $param)) { + $params[] = substr($param, 2) . '=' . $value; + } + } + + $urlParams = isset($params) ? '?' . implode('&', $params) : ''; + + SP\Common::printJSON(_('Código correcto'), 0, 'redirect(\'index.php\')'); +} else { + \SP\Session::set2FApassed(false); + SP\Common::printJSON(_('Código incorrecto')); +} \ No newline at end of file diff --git a/ajax/ajax_doLogin.php b/ajax/ajax_doLogin.php index 7896aa1f..e5acd7ab 100644 --- a/ajax/ajax_doLogin.php +++ b/ajax/ajax_doLogin.php @@ -158,15 +158,28 @@ if ($objUser->getUserMPass()) { $log->addDescription(_('Perfil') . ": " . SP\Profile::getProfileNameById($objUser->userProfileId)); $log->addDescription(_('Grupo') . ": " . SP\Groups::getGroupNameById($objUser->userGroupId)); $log->writeLog(); +} else { + SP\Common::printJSON(_('Error interno')); +} - // Comprobar si existen parámetros adicionales en URL via GET - foreach ($_POST as $param => $value) { - if (preg_match('/g_.*/', $param)) { - $params[] = substr($param, 2) . '=' . $value; - } +$userPrefs = new \SP\UserPreferences(); +$prefs = $userPrefs->getPreferences($objUser->userId); + +if ($prefs->isUse2Fa()){ + SP\Session::set2FApassed(false); + $url = SP\Init::$WEBURI . '/index.php?a=2fa&i=' . $objUser->userId . '&t=' . time() . '&f=1'; + SP\Common::printJSON($url, 0); +} else { + SP\Session::set2FApassed(true); +} + +// Comprobar si existen parámetros adicionales en URL via POST para pasarlos por GET +foreach ($_POST as $param => $value) { + if (preg_match('/g_.*/', $param)) { + $params[] = substr($param, 2) . '=' . $value; } +} - $urlParams = isset($params) ? '?' . implode('&', $params) : ''; +$urlParams = isset($params) ? '?' . implode('&', $params) : ''; - SP\Common::printJSON('index.php' . $urlParams, 0); -} \ No newline at end of file +SP\Common::printJSON('index.php' . $urlParams, 0); \ No newline at end of file diff --git a/ajax/ajax_getContent.php b/ajax/ajax_getContent.php index 741adcba..8694050b 100644 --- a/ajax/ajax_getContent.php +++ b/ajax/ajax_getContent.php @@ -151,6 +151,14 @@ switch ($actionId) { $controller = new SP\Controller\EventlogC($tpl); $controller->getEventlog(); break; + case \SP\Controller\ActionsInterface::ACTION_USR_PREFERENCES: + $tpl->addTemplate('tabs-start'); + + $controller = new \SP\Controller\UsersPrefsC($tpl); + $controller->getSecurityTab(); + + $tpl->addTemplate('tabs-end'); + break; } // Se comprueba si se debe de mostrar la vista de depuración diff --git a/ajax/ajax_userPrefsSave.php b/ajax/ajax_userPrefsSave.php new file mode 100644 index 00000000..c26bcf11 --- /dev/null +++ b/ajax/ajax_userPrefsSave.php @@ -0,0 +1,76 @@ +. + * + */ + +use SP\Request; + +define('APP_ROOT', '..'); + +require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; + +Request::checkReferer('POST'); + +if (!SP\Init::isLoggedIn()) { + SP\Common::printJSON(_('La sesión no se ha iniciado o ha caducado'), 10); +} + +$sk = SP\Request::analyze('sk', false); + +if (!$sk || !SP\Common::checkSessionKey($sk)) { + SP\Common::printJSON(_('CONSULTA INVÁLIDA')); +} + +// Variables POST del formulario +$actionId = SP\Request::analyze('actionId', 0); +$itemId = SP\Request::analyze('itemId', 0); +$onCloseAction = SP\Request::analyze('onCloseAction'); +$activeTab = SP\Request::analyze('activeTab', 0); + +// Acción al cerrar la vista +$doActionOnClose = "doAction('$onCloseAction','',$activeTab);"; + +if($actionId === SP\Controller\ActionsInterface::ACTION_USR_PREFERENCES_SECURITY){ + // Variables POST del formulario + $twoFaEnabled = SP\Request::analyze('security_2faenabled', 0, false, 1); + $pin = SP\Request::analyze('security_pin', 0); + + $userLogin = \SP\Users::getUserLoginById($itemId); + $twoFa = new \SP\Auth\Auth2FA($itemId, $userLogin); + + if(!$twoFa->verifyKey($pin)){ + SP\Common::printJSON(_('Código incorrecto')); + } + + $preferences = new \SP\UserPreferences(); + $preferences->setId($itemId); + $preferences->setUse2Fa(\SP\Util::boolval($twoFaEnabled)); + + if(!$preferences->updatePreferences()){ + SP\Common::printJSON(_('Error al actualizar preferencias')); + } + + SP\Common::printJSON(_('Preferencias actualizadas'), 0); +} else { + SP\Common::printJSON(_('Acción Inválida')); +} \ No newline at end of file diff --git a/ajax/ajax_viewpass.php b/ajax/ajax_viewpass.php index 6a1db036..8ca9ba44 100644 --- a/ajax/ajax_viewpass.php +++ b/ajax/ajax_viewpass.php @@ -75,7 +75,7 @@ if (!$isHistory) { $data = array( 'title' => _('Clave de Cuenta'), -// 'acclogin' => _('Usuario') . ': ' . $accountData->login, + 'acclogin' => $accountData->login, 'accpass' => trim($accountClearPass) ); diff --git a/imgs/logo.svg b/imgs/logo.svg index 8e476dc2..d06679d1 100644 --- a/imgs/logo.svg +++ b/imgs/logo.svg @@ -10,11 +10,11 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="500" - height="360" + width="357.60001" + height="395.32526" id="svg2985" version="1.1" - inkscape:version="0.91 r13725" + inkscape:version="0.48.5 r10040" sodipodi:docname="logo.svg"> @@ -245,6 +245,188 @@ result="composite2" id="feComposite4495-1" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + transform="translate(-161.897,-50.603316)"> - - - - - - + + + + + + + + + + style="opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#cccccc;stroke-width:1.01193643;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;filter:url(#filter3878-0)" /> + transform="translate(-161.897,-50.603316)" /> diff --git a/imgs/logo_full.svg b/imgs/logo_full.svg index 60505771..dadca2db 100644 --- a/imgs/logo_full.svg +++ b/imgs/logo_full.svg @@ -14,7 +14,7 @@ height="325" id="svg2985" version="1.1" - inkscape:version="0.91 r13725" + inkscape:version="0.48.5 r10040" sodipodi:docname="logo_full.svg"> @@ -86,7 +86,7 @@ result="result10" in="result11" flood-opacity="0.75" - flood-color="rgb(83,109,254)" + flood-color="rgb(63,81,181)" id="feFlood3886" /> + + + + + + + + - - - - - - - - - - + #sysPass - #sysPass + Systems Password Manager + x="436.92841" + style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.85;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans" + xml:space="preserve">Systems Password Manager + diff --git a/inc/ActionsInterface.class.php b/inc/ActionsInterface.class.php index 7b725ac9..0eea693e 100644 --- a/inc/ActionsInterface.class.php +++ b/inc/ActionsInterface.class.php @@ -71,6 +71,8 @@ interface ActionsInterface { const ACTION_USR_PROFILES_NEW = 731; const ACTION_USR_PROFILES_EDIT = 732; const ACTION_USR_PROFILES_DELETE = 733; + const ACTION_USR_PREFERENCES = 740; + const ACTION_USR_PREFERENCES_SECURITY = 741; const ACTION_CFG = 80; const ACTION_CFG_GENERAL = 81; const ACTION_CFG_ENCRYPTION = 82; diff --git a/inc/Auth2FA.class.php b/inc/Auth2FA.class.php new file mode 100644 index 00000000..e68f823d --- /dev/null +++ b/inc/Auth2FA.class.php @@ -0,0 +1,139 @@ +. + * + */ + +namespace SP\Auth; + +defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); + +/** + * Class Auth2FA + * + * @package SP\Auth + */ +class Auth2FA +{ + /** + * @var int + */ + private $_timestamp = 0; + /** + * @var string + */ + private $_initializationKey = ''; + /** + * @var string + */ + private $_totp = ''; + /** + * @var int + */ + private $_userId = 0; + /** + * @var string + */ + private $_userLogin = ''; + + public function __construct($userId, $userLogin = null) + { + $this->_userId = $userId; + $this->_userLogin = $userLogin; + $this->_initializationKey = $this->genUserInitializationKey(); + } + + /** + * @param int $userId + */ + public function setUserId($userId) + { + $this->_userId = $userId; + } + + /** + * @param string $userLogin + */ + public function setUserLogin($userLogin) + { + $this->_userLogin = $userLogin; + } + + /** + * Verificar el código de 2FA + * + * @param $key + * @return bool + */ + public function verifyKey($key) + { + return Google2FA::verify_key($this->_initializationKey, $key); + } + + public function getUserQRUrl(){ + $qrUrl = 'https://www.google.com/chart?chs=150x150&chld=M|0&cht=qr&chl='; + $qrUrl .= urlencode('otpauth://totp/sysPass:syspass/' . $this->_userLogin . '?secret=' . $this->_initializationKey . '&issuer=sysPass'); + + return $qrUrl; + } + + public function getUserQRCode() + { + $ch = curl_init($this->getUserQRUrl()); + + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_HEADER, 0); + curl_setopt($ch, CURLOPT_USERAGENT, "sysPass 2FA"); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); + curl_setopt($ch, CURLOPT_TIMEOUT, 60); + + $data = curl_exec($ch); + curl_close($ch); + + if ($data === false) { + return false; + } + + return base64_encode($data); + } + + public function checkUserToken($userToken) + { + $timeStamp = Google2FA::get_timestamp(); + $secretkey = Google2FA::base32_decode($this->_initializationKey); + $totp = Google2FA::oath_totp($secretkey, $timeStamp); + + error_log($totp . '/' . $userToken); + + return ($totp == $userToken); + } + + private function genUserInitializationKey() + { + $userIV = \SP\Users::getUserIVById($this->_userId); + $base32 = new \Base2n(5, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567', false, true, true); + $key = substr($base32->encode($userIV), 0, 16); + + return $key; + } + +} \ No newline at end of file diff --git a/inc/Base.php b/inc/Base.php index e1af564b..12e8a782 100644 --- a/inc/Base.php +++ b/inc/Base.php @@ -26,7 +26,7 @@ define('MODEL_PATH', __DIR__); define('CONTROLLER_PATH', __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'web'); define('VIEW_PATH', __DIR__ . DIRECTORY_SEPARATOR . 'themes'); -define('EXTENSIONS_DIR', __DIR__ . DIRECTORY_SEPARATOR . 'ext'); +define('EXTENSIONS_PATH', __DIR__ . DIRECTORY_SEPARATOR . 'ext'); define('DEBUG', false); require_once MODEL_PATH . DIRECTORY_SEPARATOR . 'Init.class.php'; diff --git a/inc/Controller.class.php b/inc/Controller.class.php index c054f8f2..6b18f269 100644 --- a/inc/Controller.class.php +++ b/inc/Controller.class.php @@ -25,6 +25,8 @@ namespace SP\Controller; +use SP\SPException; + defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); /** @@ -171,7 +173,7 @@ abstract class Controller $this->view->append('errors', array( - 'type' => 'critical', + 'type' => SPException::SP_WARNING, 'description' => $errorsTypes[$type]['txt'], 'hint' => $errorsTypes[$type]['hint']) ); diff --git a/inc/Email.class.php b/inc/Email.class.php index 2fe38dc0..1850a334 100644 --- a/inc/Email.class.php +++ b/inc/Email.class.php @@ -123,8 +123,8 @@ class Email $mailTo = $mailFrom; } - require_once EXTENSIONS_DIR . '/phpmailer/class.phpmailer.php'; - require_once EXTENSIONS_DIR . '/phpmailer/class.smtp.php'; + require_once EXTENSIONS_PATH . '/phpmailer/class.phpmailer.php'; + require_once EXTENSIONS_PATH . '/phpmailer/class.smtp.php'; $mail = new \PHPMailer(); diff --git a/inc/Init.class.php b/inc/Init.class.php index 03422e61..b73f6500 100644 --- a/inc/Init.class.php +++ b/inc/Init.class.php @@ -63,18 +63,22 @@ class Init * @var bool True if sysPass has been updated. Only for notices. */ public static $UPDATED = false; + /** * @var string */ public static $THEMEURI = ''; + /** * @var string */ public static $THEMEPATH = ''; + /** * @var string */ public static $THEME = ''; + /** * @var string */ @@ -241,7 +245,7 @@ class Init */ public static function setIncludes() { - set_include_path(MODEL_PATH . PATH_SEPARATOR . CONTROLLER_PATH . PATH_SEPARATOR . get_include_path()); + set_include_path(MODEL_PATH . PATH_SEPARATOR . CONTROLLER_PATH . PATH_SEPARATOR . EXTENSIONS_PATH . PATH_SEPARATOR . get_include_path()); } /** @@ -340,8 +344,8 @@ class Init self::$WEBROOT = '/' . self::$WEBROOT; } - self::$WEBURI = (isset($_SERVER['HTTPS'])) ? 'https://' : 'http://'; - self::$WEBURI .= $_SERVER['HTTP_HOST'] . self::$WEBROOT; + $protocol = (isset($_SERVER['HTTPS'])) ? 'https://' : 'http://'; + self::$WEBURI .= $protocol . $_SERVER['HTTP_HOST'] . self::$WEBROOT; } /** @@ -657,6 +661,10 @@ class Init $controller->getPassReset(); $controller->view(); break; + case '2fa': + $controller->get2FA(); + $controller->view(); + break; default: return false; } @@ -671,7 +679,9 @@ class Init */ public static function isLoggedIn() { - if (Session::getUserLogin(false)) { + if (Session::getUserLogin(false) + && Session::get2FApassed() + ) { // TODO: refrescar variables de sesión. return true; } diff --git a/inc/Session.class.php b/inc/Session.class.php index 8634f970..c9904ea8 100644 --- a/inc/Session.class.php +++ b/inc/Session.class.php @@ -528,4 +528,24 @@ class Session { $_SESSION['theme'] = $theme; } + + /** + * Devuelve si el usuario ha pasado la autentificación en 2 pasos + * + * @return bool + */ + public static function get2FApassed() + { + return $_SESSION['2fapass']; + } + + /** + * Establece esi el usuario ha pasado la autentificación en 2 pasos + * + * @param $passed bool + */ + public static function set2FApassed($passed) + { + $_SESSION['2fapass'] = $passed; + } } \ No newline at end of file diff --git a/inc/Upgrade.class.php b/inc/Upgrade.class.php index 2b34b18d..2e698577 100644 --- a/inc/Upgrade.class.php +++ b/inc/Upgrade.class.php @@ -109,6 +109,7 @@ class Upgrade $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;'; break; default : $log->addDescription(_('No es necesario actualizar la Base de Datos.')); diff --git a/inc/UserPreferences.class.php b/inc/UserPreferences.class.php new file mode 100644 index 00000000..7696acfc --- /dev/null +++ b/inc/UserPreferences.class.php @@ -0,0 +1,129 @@ +. + * + */ + +namespace SP; + +/** + * Class UsersPreferences para la gestion de las preferencias de usuarios + * + * @package SP + */ +class UserPreferences +{ + /** + * @var int + */ + private $_id = 0; + + /** + * Usar autentificación en 2 pasos + * + * @var bool + */ + private $_use2Fa = false; + + /** + * @return int + */ + public function getId() + { + return $this->_id; + } + + /** + * @param int $id + */ + public function setId($id) + { + $this->_id = $id; + } + + /** + * @return boolean + */ + public function isUse2Fa() + { + return $this->_use2Fa; + } + + /** + * @param boolean $use2Fa + */ + public function setUse2Fa($use2Fa) + { + $this->_use2Fa = $use2Fa; + } + + /** + * Obtener las preferencas de un usuario + * + * @param $id int El id del usuario + * @return bool|UserPreferences + * @throws SPException + */ + public static function getPreferences($id) + { + $query = 'SELECT user_preferences FROM usrData WHERE user_id = :id LIMIT 1'; + + $data['id'] = $id; + + $queryRes = DB::getResults($query, __FUNCTION__, $data); + + if ($queryRes === false) { + throw new SPException(SPException::SP_WARNING, _('Datos de preferencias incorrectos')); + } + + $preferences = unserialize($queryRes->user_preferences); + + if (!$preferences instanceof UserPreferences) { + return new UserPreferences(); + } + + return $preferences; + } + + /** + * Modificar las preferencias de un usuario + * + * @return bool + */ + public function updatePreferences() + { + $query = 'UPDATE usrData SET ' + . 'user_preferences = :preferences ' + . 'WHERE user_id = :id LIMIT 1'; + + $data['id'] = $this->getId(); + $data['preferences'] = serialize($this); + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { + return false; + } + + return true; + } + + +} \ No newline at end of file diff --git a/inc/Users.class.php b/inc/Users.class.php index 157397c6..62b2f11c 100644 --- a/inc/Users.class.php +++ b/inc/Users.class.php @@ -1116,4 +1116,25 @@ class Users return DB::getQuery($query, __FUNCTION__, $data); } + + /** + * Obtener el IV del usuario a partir del Id. + * + * @param int $id El id del usuario + * @return string El hash + */ + public static function getUserIVById($id) + { + $query = 'SELECT user_mIV FROM usrData WHERE user_id = :id LIMIT 1'; + + $data['id'] = $id; + + $queryRes = DB::getResults($query, __FUNCTION__, $data); + + if ($queryRes === false) { + return false; + } + + return $queryRes->user_mIV; + } } \ No newline at end of file diff --git a/inc/Util.class.php b/inc/Util.class.php index c497280d..1283b1a7 100644 --- a/inc/Util.class.php +++ b/inc/Util.class.php @@ -522,7 +522,7 @@ class Util if ($type == 'js') { echo self::jsCompress(file_get_contents($filePath)); } elseif ($type == 'css') { - require_once EXTENSIONS_DIR . DIRECTORY_SEPARATOR . 'cssmin' . DIRECTORY_SEPARATOR . 'class.cssmin.php'; + require_once EXTENSIONS_PATH . DIRECTORY_SEPARATOR . 'cssmin' . DIRECTORY_SEPARATOR . 'class.cssmin.php'; echo CssMin::minify(file_get_contents($filePath)); } } else { diff --git a/inc/dbstructure.sql b/inc/dbstructure.sql index 94ccb59c..8c9c5ae6 100644 --- a/inc/dbstructure.sql +++ b/inc/dbstructure.sql @@ -225,6 +225,7 @@ CREATE TABLE `usrData` ( `user_hashSalt` varbinary(40) NOT NULL, `user_isMigrate` bit(1) DEFAULT b'0', `user_isChangePass` bit(1) DEFAULT b'0', + `user_preferences` BLOB DEFAULT NULL, PRIMARY KEY (`user_id`), UNIQUE KEY `IDX_login` (`user_login`), KEY `IDX_pass` (`user_pass`) diff --git a/inc/ext/Base2n.class.php b/inc/ext/Base2n.class.php new file mode 100644 index 00000000..938d4c7f --- /dev/null +++ b/inc/ext/Base2n.class.php @@ -0,0 +1,302 @@ += ($radix <<= 1) && $bitsPerCharacter < 8) { + $bitsPerCharacter++; + } + + $radix >>= 1; + throw new \InvalidArgumentException( + '$bitsPerCharacter can not be more than ' . $bitsPerCharacter + . ' given $chars length of ' . $charLength + . ' (max radix ' . $radix . ')'); + + } elseif ($bitsPerCharacter > 8) { + // $bitsPerCharacter must not be greater than 8 + throw new \InvalidArgumentException('$bitsPerCharacter can not be greater than 8'); + + } else { + $radix = 1 << $bitsPerCharacter; + } + + $this->_chars = $chars; + $this->_bitsPerCharacter = $bitsPerCharacter; + $this->_radix = $radix; + $this->_rightPadFinalBits = $rightPadFinalBits; + $this->_padFinalGroup = $padFinalGroup; + $this->_padCharacter = $padCharacter[0]; + $this->_caseSensitive = $caseSensitive; + } + + /** + * Encode a string + * + * @param string $rawString Binary data to encode + * @return string + */ + public function encode($rawString) + { + // Unpack string into an array of bytes + $bytes = unpack('C*', $rawString); + $byteCount = count($bytes); + + $encodedString = ''; + $byte = array_shift($bytes); + $bitsRead = 0; + $oldBits = 0; + + $chars = $this->_chars; + $bitsPerCharacter = $this->_bitsPerCharacter; + $rightPadFinalBits = $this->_rightPadFinalBits; + $padFinalGroup = $this->_padFinalGroup; + $padCharacter = $this->_padCharacter; + + $charsPerByte = 8 / $bitsPerCharacter; + $encodedLength = $byteCount * $charsPerByte; + + // Generate encoded output; each loop produces one encoded character + for ($c = 0; $c < $encodedLength; $c++) { + + // Get the bits needed for this encoded character + if ($bitsRead + $bitsPerCharacter > 8) { + // Not enough bits remain in this byte for the current character + // Save the remaining bits before getting the next byte + $oldBitCount = 8 - $bitsRead; + $oldBits = $byte ^ ($byte >> $oldBitCount << $oldBitCount); + $newBitCount = $bitsPerCharacter - $oldBitCount; + + if (!$bytes) { + // Last bits; match final character and exit loop + if ($rightPadFinalBits) $oldBits <<= $newBitCount; + $encodedString .= $chars[$oldBits]; + + if ($padFinalGroup) { + // Array of the lowest common multiples of $bitsPerCharacter and 8, divided by 8 + $lcmMap = array(1 => 1, 2 => 1, 3 => 3, 4 => 1, 5 => 5, 6 => 3, 7 => 7, 8 => 1); + $bytesPerGroup = $lcmMap[$bitsPerCharacter]; + $pads = $bytesPerGroup * $charsPerByte - ceil((strlen($rawString) % $bytesPerGroup) * $charsPerByte); + $encodedString .= str_repeat($padCharacter, $pads); + } + + break; + } + + // Get next byte + $byte = array_shift($bytes); + $bitsRead = 0; + + } else { + $oldBitCount = 0; + $newBitCount = $bitsPerCharacter; + } + + // Read only the needed bits from this byte + $bits = $byte >> 8 - ($bitsRead + ($newBitCount)); + $bits ^= $bits >> $newBitCount << $newBitCount; + $bitsRead += $newBitCount; + + if ($oldBitCount) { + // Bits come from seperate bytes, add $oldBits to $bits + $bits = ($oldBits << $newBitCount) | $bits; + } + + $encodedString .= $chars[$bits]; + } + + return $encodedString; + } + + /** + * Decode a string + * + * @param string $encodedString Data to decode + * @param boolean $strict Returns NULL if $encodedString contains an undecodable character + * @return string + */ + public function decode($encodedString, $strict = FALSE) + { + if (!$encodedString || !is_string($encodedString)) { + // Empty string, nothing to decode + return ''; + } + + $chars = $this->_chars; + $bitsPerCharacter = $this->_bitsPerCharacter; + $radix = $this->_radix; + $rightPadFinalBits = $this->_rightPadFinalBits; + $padFinalGroup = $this->_padFinalGroup; + $padCharacter = $this->_padCharacter; + $caseSensitive = $this->_caseSensitive; + + // Get index of encoded characters + if ($this->_charmap) { + $charmap = $this->_charmap; + + } else { + $charmap = array(); + + for ($i = 0; $i < $radix; $i++) { + $charmap[$chars[$i]] = $i; + } + + $this->_charmap = $charmap; + } + + // The last encoded character is $encodedString[$lastNotatedIndex] + $lastNotatedIndex = strlen($encodedString) - 1; + + // Remove trailing padding characters + if ($padFinalGroup) { + while ($encodedString[$lastNotatedIndex] === $padCharacter) { + $encodedString = substr($encodedString, 0, $lastNotatedIndex); + $lastNotatedIndex--; + } + } + + $rawString = ''; + $byte = 0; + $bitsWritten = 0; + + // Convert each encoded character to a series of unencoded bits + for ($c = 0; $c <= $lastNotatedIndex; $c++) { + + if (!$caseSensitive && !isset($charmap[$encodedString[$c]])) { + // Encoded character was not found; try other case + if (isset($charmap[$cUpper = strtoupper($encodedString[$c])])) { + $charmap[$encodedString[$c]] = $charmap[$cUpper]; + + } elseif (isset($charmap[$cLower = strtolower($encodedString[$c])])) { + $charmap[$encodedString[$c]] = $charmap[$cLower]; + } + } + + if (isset($charmap[$encodedString[$c]])) { + $bitsNeeded = 8 - $bitsWritten; + $unusedBitCount = $bitsPerCharacter - $bitsNeeded; + + // Get the new bits ready + if ($bitsNeeded > $bitsPerCharacter) { + // New bits aren't enough to complete a byte; shift them left into position + $newBits = $charmap[$encodedString[$c]] << $bitsNeeded - $bitsPerCharacter; + $bitsWritten += $bitsPerCharacter; + + } elseif ($c !== $lastNotatedIndex || $rightPadFinalBits) { + // Zero or more too many bits to complete a byte; shift right + $newBits = $charmap[$encodedString[$c]] >> $unusedBitCount; + $bitsWritten = 8; //$bitsWritten += $bitsNeeded; + + } else { + // Final bits don't need to be shifted + $newBits = $charmap[$encodedString[$c]]; + $bitsWritten = 8; + } + + $byte |= $newBits; + + if ($bitsWritten === 8 || $c === $lastNotatedIndex) { + // Byte is ready to be written + $rawString .= pack('C', $byte); + + if ($c !== $lastNotatedIndex) { + // Start the next byte + $bitsWritten = $unusedBitCount; + $byte = ($charmap[$encodedString[$c]] ^ ($newBits << $unusedBitCount)) << 8 - $bitsWritten; + } + } + + } elseif ($strict) { + // Unable to decode character; abort + return NULL; + } + } + + return $rawString; + } +} \ No newline at end of file diff --git a/inc/ext/Google2FA.class.php b/inc/ext/Google2FA.class.php new file mode 100644 index 00000000..dedf2e92 --- /dev/null +++ b/inc/ext/Google2FA.class.php @@ -0,0 +1,181 @@ +. + * + * PHP Google two-factor authentication module. + * + * See http://www.idontplaydarts.com/2011/07/google-totp-two-factor-authentication-for-php/ + * for more details + * + * @author Phil + **/ + +namespace SP\Auth; + +/** + * Class Google2FA + * + * @package SP\Auth + */ +class Google2FA +{ + /** + * Interval between key regeneration + */ + const keyRegeneration = 30; + /** + * Length of the Token generated + */ + const otpLength = 6; + + /** + * Lookup needed for Base32 encoding + * + * @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 + ); + + /** + * Generates a 16 digit secret key in base32 format + * @return string + **/ + public static function generate_secret_key($length = 16) { + $b32 = "234567QWERTYUIOPASDFGHJKLZXCVBNM"; + $s = ""; + + for ($i = 0; $i < $length; $i++) + $s .= $b32[rand(0,31)]; + + return $s; + } + + /** + * Returns the current Unix Timestamp devided by the keyRegeneration + * period. + * @return integer + **/ + 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) { + + $b32 = strtoupper($b32); + + if (!preg_match('/^[ABCDEFGHIJKLMNOPQRSTUVWXYZ234567]+$/', $b32, $match)) + throw new \Exception('Invalid characters in the base32 string.'); + + $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 + + if ($j >= 8) { + $j = $j - 8; + $binary .= chr(($n & (0xFF << $j)) >> $j); + } + } + + return $binary; + } + + /** + * Takes the secret key and the timestamp and returns the one time + * password. + * + * @param string $key - Secret key in binary form. + * @param int $counter - Timestamp as returned by get_timestamp. + * @return string + * @throws \Exception + */ + public static function oath_totp($key, $counter) + { + 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); + + 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 + **/ + public static function oath_truncate($hash) + { + $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); + } +} \ No newline at end of file diff --git a/inc/themes/material-blue/2fa.inc b/inc/themes/material-blue/2fa.inc new file mode 100644 index 00000000..18cd96fc --- /dev/null +++ b/inc/themes/material-blue/2fa.inc @@ -0,0 +1,40 @@ +
    + + + +
    +
    + +
    + + +
    +
    + + + + + +
    + +
    + +
    +
    +
    + + \ No newline at end of file diff --git a/inc/themes/material-blue/css/styles.css b/inc/themes/material-blue/css/styles.css index abaee07f..ad9e4267 100644 --- a/inc/themes/material-blue/css/styles.css +++ b/inc/themes/material-blue/css/styles.css @@ -253,7 +253,7 @@ a:hover, a:active, a:focus { position: absolute; top: .5em; left: 1em; - width: 75px; + width: 50px; } /*#container #actionsBar #actionsBar-icons{*/ @@ -1033,12 +1033,13 @@ a:hover, a:active, a:focus { width: 80%; font-size: 18px; color: white; - background-color: #448AFF; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #66a1ff), color-stop(90%, #448AFF)); - background-image: -webkit-linear-gradient(#66a1ff 20%, #448AFF 90%); - background-image: -moz-linear-gradient(#66a1ff 20%, #448AFF 90%); - background-image: -o-linear-gradient(#66a1ff 20%, #448AFF 90%); - background-image: linear-gradient(#66a1ff 20%, #448AFF 90%); + background-color: #536dfe; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #536dfe), color-stop(90%, #536dfe)); + background-image: -webkit-linear-gradient(#536dfe 20%, #536dfe 90%); + background-image: -moz-linear-gradient(#536dfe 20%, #536dfe 90%); + background-image: -o-linear-gradient(#536dfe 20%, #536dfe 90%); + background-image: linear-gradient(#536dfe 20%, #536dfe 90%); + background: #536dfe url("../inc/themes/material-blue/css/images/ui-bg_highlight-hard_100_536DFE_1x100.png") repeat-x scroll 50% 50%; margin: 0 0 20px 0; padding: .5em 0; line-height: 1em; @@ -1461,9 +1462,10 @@ footer img { width: 500px; min-height: 150px; margin: 75px auto; - padding: 2em; - background: url("../imgs/logo_full.svg") no-repeat left top #fff; + padding: 3em; + background: url("../imgs/logo_full.svg") no-repeat #fff; background-size: 300px auto; + background-position: .5em .5em; } #boxLogin .error { diff --git a/inc/themes/material-blue/footer.inc b/inc/themes/material-blue/footer.inc index 4603419b..81a9356f 100644 --- a/inc/themes/material-blue/footer.inc +++ b/inc/themes/material-blue/footer.inc @@ -8,6 +8,8 @@ data-itemid="" Onclick="usrUpdPass(this,, '')">security + account_circle diff --git a/inc/themes/material-blue/js-common.inc b/inc/themes/material-blue/js-common.inc index 431212e6..4c311ea5 100644 --- a/inc/themes/material-blue/js-common.inc +++ b/inc/themes/material-blue/js-common.inc @@ -17,15 +17,15 @@ no_results_text: "" }); - $( ".download" ).button({ - icons: { primary: " ui-icon-arrowthickstop-1-s"} + $(".download").button({ + icons: {primary: " ui-icon-arrowthickstop-1-s"} }); - $(".help-box").dialog({autoOpen: false, title: '', width: screen.width / 2.5 }); + $(".help-box").dialog({autoOpen: false, title: '', width: screen.width / 2.5}); // Crear los iconos de acciones sobre claves - $('.passwordfield__input').each(function(){ - var thisParent = $(this).parent(); + $('.passwordfield__input').each(function () { + var thisParent = $(this).parent(); var targetId = $(this).attr('id'); thisParent @@ -33,14 +33,14 @@ .after('settings') .after('remove_red_eye'); - $(this).on('keyup', function(){ + $(this).on('keyup', function () { checkPassLevel($(this).val(), targetId); }); }); // Crear los iconos de acciones sobre claves (sólo mostrar clave) - $('.passwordfield__input-show').each(function(){ - var thisParent = $(this).parent(); + $('.passwordfield__input-show').each(function () { + var thisParent = $(this).parent(); var targetId = $(this).attr('id'); thisParent @@ -48,7 +48,7 @@ }); // Crear evento para generar clave aleatoria - $('.passGen').each(function(){ + $('.passGen').each(function () { $(this).on('click', function () { var targetId = $(this).data('targetid'); password(11, true, true, targetId); @@ -62,51 +62,50 @@ }); // Crear evento para mostrar clave generada/introducida - $('.showpass').each(function(){ + $('.showpass').each(function () { $(this).on('mouseover', function () { var targetId = $(this).data('targetid'); $(this).attr('title', $('#' + targetId).val()); }); }); - // Stick the #nav to the top of the window - var nav = $('#actionsBar'); - var logo = $('#actionsBar #actionsBar-logo img'); - var isFixed = false; - var navCssProps = { - position: 'fixed', - top: 0, - left: nav.offset().left, - width: nav.width(), - padding: "1em 0", - backgroundColor: 'rgba(255, 255, 255, .75)', - borderBottom: '1px solid #ccc' - } - - $(window).scroll(function() { - var scrollTop = $(this).scrollTop(); - var shouldBeFixed = scrollTop > nav.height(); - if (shouldBeFixed && !isFixed) { - nav.css(navCssProps); - logo.show().css({ opacity: 0.75 }); - isFixed = true; + $(document).ready(function () { + // Stick the #nav to the top of the window + var nav = $('#actionsBar'); + var logo = $('#actionsBar #actionsBar-logo img'); + var isFixed = false; + var navCssProps = { + position: 'fixed', + top: 0, + left: nav.offset().left, + width: nav.width(), + padding: "1em 0", + backgroundColor: 'rgba(255, 255, 255, .75)', + borderBottom: '1px solid #ccc' } - else if (!shouldBeFixed && isFixed) - { - nav.css({ - backgroundColor: 'transparent', - border: '0' - }); - logo.hide(); - isFixed = false; - } - }); - $(document).ready(function(){ + $(window).scroll(function () { + var scrollTop = $(this).scrollTop(); + var shouldBeFixed = scrollTop > nav.height(); + if (shouldBeFixed && !isFixed) { + nav.css(navCssProps); + logo.show().css({opacity: 0.75}); + isFixed = true; + } + else if (!shouldBeFixed && isFixed) { + nav.css({ + backgroundColor: 'transparent', + border: '0' + }); + logo.hide(); + isFixed = false; + } + }); + // Detectar si al cargar la barra de iconos no está en la posición 0 - if(nav.offset().top > 0){ + if (nav.offset().top > 0) { nav.css(navCssProps); - logo.show().css({ opacity: 0.75 }); + logo.show().css({opacity: 0.75}); isFixed = true; } }); diff --git a/inc/themes/material-blue/js/functions.js b/inc/themes/material-blue/js/functions.js index 41fd1185..3292dcc1 100644 --- a/inc/themes/material-blue/js/functions.js +++ b/inc/themes/material-blue/js/functions.js @@ -327,13 +327,17 @@ function viewPass(id, full, history) { if (json.status === 0) { content = '

    ' + json.accpass + '

    ' + - '
    ' + - '
    ' + - '' + - '
    '; + '
    ' + + '
    ' + + '' + + '' + + '
    '; } else { content = '' + json.description + ''; @@ -353,27 +357,40 @@ function viewPass(id, full, history) { $(this).dialog('option', 'position', 'center'); // Carga de objeto flash para copiar al portapapeles - var client = new ZeroClipboard($("#dialog-clip-pass-button-" + id), {swfPath: "js/ZeroClipboard.swf"}); + var clientPass = new ZeroClipboard($("#dialog-clip-pass-button-" + id), {swfPath: APP_ROOT + "/js/ZeroClipboard.swf"}); + var clientUser = new ZeroClipboard($("#dialog-clip-user-button-" + id), {swfPath: APP_ROOT + "/js/ZeroClipboard.swf"}); - client.on('ready', function (e) { + clientPass.on('ready', function (e) { $("#dialog-clip-pass-button-" + id).attr("data-clip", 1); - - client.on('copy', function (e) { - e.clipboardData.setData('text/plain', json.accpass); + clientPass.on('copy', function (e) { + //e.clipboardData.setData('text/plain', json.accpass); + clientPass.setText(json.accpass); }); - client.on('aftercopy', function (e) { + clientPass.on('aftercopy', function (e) { $('.dialog-pass-text').addClass('dialog-clip-pass-copy round'); }); }); - client.on('error', function (e) { + + clientPass.on('error', function (e) { ZeroClipboard.destroy(); }); - // Timeout del mensaje + clientUser.on('ready', function (e) { + clientUser.on('copy', function (e) { + clientUser.setText(json.acclogin); + }); + }); + + + // Cerrar Dialog a los 30s var $this = $(this); - timeout = setTimeout(function () { - $this.dialog('close'); - }, 30000); + + $(this).parent().on('mouseleave', function(){ + clearTimeout(timeout); + timeout = setTimeout(function () { + $this.dialog('close'); + }, 30000); + }); }, // Forzar la eliminación del objeto para que ZeroClipboard siga funcionando al abrirlo de nuevo close: function () { @@ -471,6 +488,10 @@ function checkLogout() { } } +function redirect(url) { + location.href = url; +} + // Función para añadir/editar una cuenta function saveAccount(frm) { "use strict"; @@ -722,10 +743,19 @@ function importFile(sk) { sk: sk, action: 'import', isAjax: 1, - importPwd: function() { return $('input[name="importPwd"]').val(); }, - defUser: function() { return $('#import_defaultuser').chosen().val(); }, - defGroup: function() { return $('#import_defaultgroup').chosen().val(); }, - csvDelimiter: function() { return $('input[name="csvDelimiter"]').val();; } + importPwd: function () { + return $('input[name="importPwd"]').val(); + }, + defUser: function () { + return $('#import_defaultuser').chosen().val(); + }, + defGroup: function () { + return $('#import_defaultgroup').chosen().val(); + }, + csvDelimiter: function () { + return $('input[name="csvDelimiter"]').val(); + ; + } }, uploadFinished: function (i, file, json) { $.fancybox.hideLoading(); @@ -1149,19 +1179,19 @@ function resMsg(type, txt, url, action) { return alertify.error(txt); } -/* $.fancybox(html, { - afterLoad: function () { - $('.fancybox-skin,.fancybox-outer,.fancybox-inner').css({ - 'border-radius': '25px', - '-moz-border-radius': '25px', - '-webkit-border-radius': '25px' - }); - }, afterClose: function () { - if (typeof action !== "undefined") { - eval(action); - } - } - });*/ + /* $.fancybox(html, { + afterLoad: function () { + $('.fancybox-skin,.fancybox-outer,.fancybox-inner').css({ + 'border-radius': '25px', + '-moz-border-radius': '25px', + '-webkit-border-radius': '25px' + }); + }, afterClose: function () { + if (typeof action !== "undefined") { + eval(action); + } + } + });*/ } // Función para comprobar la conexión con LDAP @@ -1209,4 +1239,4 @@ function getBrowser() { } return browser; -} +} \ No newline at end of file diff --git a/inc/themes/material-blue/search.inc b/inc/themes/material-blue/search.inc index b00c96d1..c64c99d5 100644 --- a/inc/themes/material-blue/search.inc +++ b/inc/themes/material-blue/search.inc @@ -184,25 +184,28 @@ \ No newline at end of file diff --git a/js/js.php b/js/js.php index 8176ff69..9933daaa 100644 --- a/js/js.php +++ b/js/js.php @@ -69,7 +69,7 @@ $arrJsLang = array( ); //$js = "// i18n language array from PHP. Detected language: " . SP_Init::$LANG . "\n"; -echo "var APP_ROOT = '" . SP\Init::$WEBROOT . "';\n"; +echo "var APP_ROOT = '" . SP\Init::$WEBURI . "';\n"; echo "var LANG = ['" . implode("','", SP\Util::arrayJSEscape($arrJsLang)) . "'];\n"; if (file_exists($themeJsPath)){ diff --git a/res/test_2fa.php b/res/test_2fa.php new file mode 100644 index 00000000..c563a532 --- /dev/null +++ b/res/test_2fa.php @@ -0,0 +1,215 @@ +. + * + * PHP Google two-factor authentication module. + * + * See http://www.idontplaydarts.com/2011/07/google-totp-two-factor-authentication-for-php/ + * for more details + * + * @author Phil + **/ +class Google2FA +{ + /** + * Interval between key regeneration + */ + const keyRegeneration = 30; + /** + * Length of the Token generated + */ + const otpLength = 6; + + /** + * Lookup needed for Base32 encoding + * + * @var array + */ + private static $lut = array( + "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 + * + * @return string + **/ + public static function generate_secret_key($length = 16) + { + $b32 = "234567QWERTYUIOPASDFGHJKLZXCVBNM"; + $s = ""; + + for ($i = 0; $i < $length; $i++) + $s .= $b32[rand(0, 31)]; + + return $s; + } + + /** + * Returns the current Unix Timestamp devided by the keyRegeneration + * period. + * + * @return integer + **/ + 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) + { + + $b32 = strtoupper($b32); + + if (!preg_match('/^[ABCDEFGHIJKLMNOPQRSTUVWXYZ234567]+$/', $b32, $match)) + throw new Exception('Invalid characters in the base32 string.'); + + $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 + + if ($j >= 8) { + $j = $j - 8; + $binary .= chr(($n & (0xFF << $j)) >> $j); + } + } + + return $binary; + } + + /** + * Takes the secret key and the timestamp and returns the one time + * password. + * + * @param string $key - Secret key in binary form. + * @param int $counter - Timestamp as returned by get_timestamp. + * @return string + * @throws \Exception + */ + public static function oath_hotp($key, $counter) + { + 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); + + 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_hotp($binarySeed, $ts) == $key) + return true; + + return false; + + } + + /** + * Extracts the OTP from the SHA1 hash. + * + * @param string $hash + * @return int + **/ + public static function oath_truncate($hash) + { + $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); + } +} + +$InitalizationKey = "PEHMPSDNLXIOG65U"; // Set the inital key + +$TimeStamp = Google2FA::get_timestamp(); +$secretkey = Google2FA::base32_decode($InitalizationKey); // Decode it into binary +$otp = Google2FA::oath_hotp($secretkey, $TimeStamp); // Get current token + +echo("Init key: $InitalizationKey\n"); +echo("Timestamp: $TimeStamp\n"); +echo("One time password: $otp\n"); + +// Use this to verify a key as it allows for some time drift. + +$result = Google2FA::verify_key($InitalizationKey, "123456"); + +$githubUrl = 'https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=' . 'otpauth://totp/sysPass:prueba@syspass.org?secret=' . $InitalizationKey; +$ch = curl_init($githubUrl); + +curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); +curl_setopt($ch, CURLOPT_HEADER, 0); +curl_setopt($ch, CURLOPT_USERAGENT, "sysPass App Updater"); +curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); +curl_setopt($ch, CURLOPT_TIMEOUT, 60); + +$data = curl_exec($ch); + +if ($data === false) { + return false; +} + +curl_close($ch); + +var_dump($result); + +printf('QR Code', base64_encode($data)); diff --git a/web/ConfigC.class.php b/web/ConfigC.class.php index 38c09eb0..de2269b9 100644 --- a/web/ConfigC.class.php +++ b/web/ConfigC.class.php @@ -25,8 +25,6 @@ namespace SP\Controller; -use SP\XmlExport; - defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); /** diff --git a/web/MainC.class.php b/web/MainC.class.php index 9e32cbc1..9b568c89 100644 --- a/web/MainC.class.php +++ b/web/MainC.class.php @@ -310,4 +310,25 @@ class MainC extends Controller implements ActionsInterface $this->view->assign('time', Request::analyze('t')); $this->view->assign('upgrade', $this->view->action === 'upgrade'); } + + /** + * Obtener los datos para el interface de autentificación en 2 pasos + */ + public function get2FA() + { + if (Request::analyze('f', 0) === 1) { + $this->view->addTemplate('2fa'); + + $this->view->assign('action', Request::analyze('a')); + $this->view->assign('userId', Request::analyze('i')); + $this->view->assign('time', Request::analyze('t')); + } else { + $this->view->assign('showLogo', true); + + $this->showError(self::ERR_UNAVAILABLE, false); + } + + $this->view->addTemplate('footer'); + + } } \ No newline at end of file diff --git a/web/UsersMgmtC.class.php b/web/UsersMgmtC.class.php index d6f4401b..64c0de60 100644 --- a/web/UsersMgmtC.class.php +++ b/web/UsersMgmtC.class.php @@ -349,6 +349,8 @@ class UsersMgmtC extends Controller implements ActionsInterface $this->view->addTemplate('userspass'); $this->view->assign('actionId', self::ACTION_USR_USERS_EDITPASS); + + // Obtener de nuevo el token de seguridad por si se habñia regenerado antes $this->view->assign('sk', \SP\Common::getSessionKey()); } } \ No newline at end of file diff --git a/web/UsersPrefsC.class.php b/web/UsersPrefsC.class.php new file mode 100644 index 00000000..d662bf74 --- /dev/null +++ b/web/UsersPrefsC.class.php @@ -0,0 +1,99 @@ +. + * + */ + +namespace SP\Controller; + +use SP\Auth\Auth2FA; +use SP\Session; +use SP\UserPreferences; + +defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); + +/** + * Class PreferencesC encargada de mostrar las preferencias de los usuarios + * + * @package SP\Controller + */ +class UsersPrefsC extends Controller implements ActionsInterface +{ + private $_tabIndex = 0; + + /** + * Constructor + * + * @param $template \SP\Template con instancia de plantilla + */ + public function __construct(\SP\Template $template = null) + { + parent::__construct($template); + + $this->view->assign('tabs', array()); + $this->view->assign('sk', \SP\Common::getSessionKey(true)); + } + + /** + * Obtener la pestaña de seguridad + */ + public function getSecurityTab() + { + $this->setAction(self::ACTION_USR_PREFERENCES_SECURITY); + +// if (!$this->checkAccess()) { +// $this->showError(self::ERR_PAGE_NO_PERMISSION); +// return; +// } + + $this->view->addTemplate('security'); + + $userId = Session::getUserId(); + + $userPrefs = UserPreferences::getPreferences($userId); + + $twoFa = new Auth2FA($userId, Session::getUserLogin()); + + $this->view->assign('userId', $userId); + + if (!$userPrefs->isUse2Fa()) { + $this->view->assign('qrCode', $twoFa->getUserQRCode()); + } + + $this->view->assign('chk2FAEnabled', $userPrefs->isUse2Fa()); + + $this->view->append('tabs', array('title' => _('Seguridad'))); + $this->view->assign('tabIndex', $this->getTabIndex(), 'security'); + } + + /** + * Obtener el índice actual de las pestañas + * + * @return int + */ + private function getTabIndex(){ + $index = $this->_tabIndex; + $this->_tabIndex++; + + return $index; + } +} \ No newline at end of file From fb20a6fb23407619df9755e2dace605ca30499b6 Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Mon, 27 Jul 2015 14:26:53 +0200 Subject: [PATCH 47/84] * [MOD] Minor tweaks --- imgs/logo_full.svg | 198 ++++++++++++++++++++++---- inc/UserPreferences.class.php | 77 +++++----- inc/themes/material-blue/security.inc | 18 ++- 3 files changed, 221 insertions(+), 72 deletions(-) diff --git a/imgs/logo_full.svg b/imgs/logo_full.svg index dadca2db..4aa1f518 100644 --- a/imgs/logo_full.svg +++ b/imgs/logo_full.svg @@ -14,7 +14,7 @@ height="325" id="svg2985" version="1.1" - inkscape:version="0.48.5 r10040" + inkscape:version="0.91 r13725" sodipodi:docname="logo_full.svg"> @@ -156,15 +156,15 @@ inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="1.4142136" - inkscape:cx="241.02043" + inkscape:cx="306.34952" inkscape:cy="222.65414" inkscape:current-layer="g3864" inkscape:document-units="px" showgrid="false" - inkscape:window-width="1440" - inkscape:window-height="852" - inkscape:window-x="0" - inkscape:window-y="25" + inkscape:window-width="1618" + inkscape:window-height="1028" + inkscape:window-x="54" + inkscape:window-y="-8" inkscape:window-maximized="1" showguides="false" inkscape:guide-bbox="true" @@ -277,34 +277,176 @@ + inkscape:label="Texto Trayecto" + transform="translate(-2.5164841,-106.54713)" + style="display:inline"> - #sysPass + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inc/UserPreferences.class.php b/inc/UserPreferences.class.php index 7696acfc..618a8528 100644 --- a/inc/UserPreferences.class.php +++ b/inc/UserPreferences.class.php @@ -45,19 +45,32 @@ class UserPreferences private $_use2Fa = false; /** - * @return int + * Obtener las preferencas de un usuario + * + * @param $id int El id del usuario + * @return bool|UserPreferences + * @throws SPException */ - public function getId() + public static function getPreferences($id) { - return $this->_id; - } + $query = 'SELECT user_preferences FROM usrData WHERE user_id = :id LIMIT 1'; - /** - * @param int $id - */ - public function setId($id) - { - $this->_id = $id; + $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; } /** @@ -76,34 +89,6 @@ class UserPreferences $this->_use2Fa = $use2Fa; } - /** - * Obtener las preferencas de un usuario - * - * @param $id int El id del usuario - * @return bool|UserPreferences - * @throws SPException - */ - public static function getPreferences($id) - { - $query = 'SELECT user_preferences FROM usrData WHERE user_id = :id LIMIT 1'; - - $data['id'] = $id; - - $queryRes = DB::getResults($query, __FUNCTION__, $data); - - if ($queryRes === false) { - throw new SPException(SPException::SP_WARNING, _('Datos de preferencias incorrectos')); - } - - $preferences = unserialize($queryRes->user_preferences); - - if (!$preferences instanceof UserPreferences) { - return new UserPreferences(); - } - - return $preferences; - } - /** * Modificar las preferencias de un usuario * @@ -125,5 +110,21 @@ class UserPreferences return true; } + /** + * @return int + */ + public function getId() + { + return $this->_id; + } + + /** + * @param int $id + */ + public function setId($id) + { + $this->_id = $id; + } + } \ No newline at end of file diff --git a/inc/themes/material-blue/security.inc b/inc/themes/material-blue/security.inc index 9c30165d..af46d5b6 100644 --- a/inc/themes/material-blue/security.inc +++ b/inc/themes/material-blue/security.inc @@ -10,7 +10,7 @@ - +
    help_outline

    @@ -28,19 +28,24 @@ name="security_2faenabled" /> - +

    QR Code - +



    +
    +
    + +
    warning
    + @@ -54,15 +59,16 @@
    -
    '; } diff --git a/inc/ActionsInterface.class.php b/inc/ActionsInterface.class.php index 0eea693e..0ba9fe38 100644 --- a/inc/ActionsInterface.class.php +++ b/inc/ActionsInterface.class.php @@ -80,5 +80,8 @@ interface ActionsInterface { const ACTION_CFG_BACKUP = 84; const ACTION_CFG_IMPORT = 85; const ACTION_CFG_EXPORT = 86; + const ACTION_CFG_WIKI = 87; + const ACTION_CFG_LDAP = 88; + const ACTION_CFG_MAIL = 89; const ACTION_EVL = 90; } \ No newline at end of file diff --git a/inc/Controller.class.php b/inc/Controller.class.php index 6b18f269..557af5b2 100644 --- a/inc/Controller.class.php +++ b/inc/Controller.class.php @@ -134,11 +134,18 @@ abstract class Controller /** * Comprobar si está permitido el acceso al módulo/página. * + * @param null $action La acción a comprobar * @return bool */ - protected function checkAccess() + protected function checkAccess($action = null) { - if (!\SP\Acl::checkUserAccess($this->_action)) { + $checkAction = $this->_action; + + if (!is_null($action)){ + $checkAction = $action; + } + + if (!\SP\Acl::checkUserAccess($checkAction)) { // $this->showError(self::ERR_PAGE_NO_PERMISSION); return false; } diff --git a/inc/Util.class.php b/inc/Util.class.php index 1283b1a7..b4537b03 100644 --- a/inc/Util.class.php +++ b/inc/Util.class.php @@ -215,9 +215,22 @@ class Util return false; } - $githubUrl = 'https://api.github.com/repos/nuxsmin/sysPass/releases'; + $githubUrl = 'https://api.github.com/repos/nuxsmin/sysPass/releases/latest'; $ch = curl_init($githubUrl); + 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 Updater"); @@ -244,11 +257,11 @@ class Util // $updateInfo[0]->published_at // $updateInfo[0]->html_url - $version = $updateInfo[0]->tag_name; - $url = $updateInfo[0]->html_url; - $title = $updateInfo[0]->name; - $description = $updateInfo[0]->body; - $date = $updateInfo[0]->published_at; + $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); diff --git a/inc/themes/material-blue/backup.inc b/inc/themes/material-blue/backup.inc index b93d6038..835fe497 100644 --- a/inc/themes/material-blue/backup.inc +++ b/inc/themes/material-blue/backup.inc @@ -34,7 +34,7 @@ -
    + @@ -64,7 +64,7 @@ - + ",t.document[0]).appendTo(n)):"tr"===s?t._createTrPlaceholder(t.currentItem,n):"img"===s&&n.attr("src",t.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(e,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10)))}}),t.placeholder=e(s.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),s.placeholder.update(t,t.placeholder)},_createTrPlaceholder:function(t,i){var s=this;t.children().each(function(){e("",s.document[0]).attr("colspan",e(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(t){var i,s,n,a,o,r,h,l,u,d,c=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!e.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(c&&e.contains(this.containers[i].element[0],c.element[0]))continue;c=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",t,this._uiHash(this)),this.containers[i].containerCache.over=0);if(c)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,a=null,u=c.floating||this._isFloating(this.currentItem),o=u?"left":"top",r=u?"width":"height",d=u?"clientX":"clientY",s=this.items.length-1;s>=0;s--)e.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[o],l=!1,t[d]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(t[d]-h)&&(n=Math.abs(t[d]-h),a=this.items[s],this.direction=l?"up":"down"));if(!a&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;a?this._rearrange(t,a,null,!0):this._rearrange(t,null,this.containers[p].element,!0),this._trigger("change",t,this._uiHash()),this.containers[p]._trigger("change",t,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||e("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.currentItem.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===n.containment?this.document.width():this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(t=e(n.containment)[0],i=e(n.containment).offset(),s="hidden"!==e(t).css("overflow"),this.containment=[i.left+(parseInt(e(t).css("borderLeftWidth"),10)||0)+(parseInt(e(t).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(e(t).css("borderTopWidth"),10)||0)+(parseInt(e(t).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(e(t).css("borderLeftWidth"),10)||0)-(parseInt(e(t).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(e(t).css("borderTopWidth"),10)||0)-(parseInt(e(t).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(t){var i,s,n=this.options,a=t.pageX,o=t.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.leftthis.containment[2]&&(a=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(e,t,i,s){i?i[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(e,t){function i(e,t,i){return function(s){i._trigger(e,s,t._uiHash(t))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!t&&n.push(function(e){this._trigger("receive",e,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||t||n.push(function(e){this._trigger("update",e,this._uiHash())}),this!==this.currentContainer&&(t||(n.push(function(e){this._trigger("remove",e,this._uiHash())}),n.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)t||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,t||this._trigger("beforeStop",e,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!t){for(s=0;n.length>s;s++)n[s].call(this,e);this._trigger("stop",e,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){e.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(t){var i=t||this;return{helper:i.helper,placeholder:i.placeholder||e([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:t?t.element:null}}}),e.widget("ui.accordion",{version:"1.11.4",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=e(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),t.collapsible||t.active!==!1&&null!=t.active||(t.active=0),this._processPanels(),0>t.active&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e("").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").removeUniqueId(),this._destroyIcons(),e=this.headers.next().removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").css("display","").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&e.css("height","")},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):("event"===e&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),"collapsible"!==e||t||this.options.active!==!1||this._activate(0),"icons"===e&&(this._destroyIcons(),t&&this._createIcons()),"disabled"===e&&(this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!t)),void 0)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var i=e.ui.keyCode,s=this.headers.length,n=this.headers.index(t.target),a=!1;switch(t.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(t);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(e(t.target).attr("tabIndex",-1),e(a).attr("tabIndex",0),a.focus(),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels(),t.active===!1&&t.collapsible===!0||!this.headers.length?(t.active=!1,this.active=e()):t.active===!1?this._activate(0):this.active.length&&!e.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=e()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var e=this.headers,t=this.panels;this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-state-default ui-corner-all"),this.panels=this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide(),t&&(this._off(e.not(this.headers)),this._off(t.not(this.panels))) +},_refresh:function(){var t,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(){var t=e(this),i=t.uniqueId().attr("id"),s=t.next(),n=s.uniqueId().attr("id");t.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(t=n.height(),this.element.siblings(":visible").each(function(){var i=e(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(t-=i.outerHeight(!0))}),this.headers.each(function(){t-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,t-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===s&&(t=0,this.headers.next().each(function(){t=Math.max(t,e(this).css("height","").height())}).height(t))},_activate:function(t){var i=this._findActive(t)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):e()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?e():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?e():n,newPanel:r};t.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",t,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?e():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(t){var i=t.newPanel,s=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,t):(s.hide(),i.show(),this._toggleComplete(t)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(e(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(e,t,i){var s,n,a,o=this,r=0,h=e.css("box-sizing"),l=e.length&&(!t.length||e.index()",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},items:"> *",menus:"ul",position:{my:"left-1 top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item":function(e){e.preventDefault()},"click .ui-menu-item":function(t){var i=e(t.target);!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&e(this.document[0].activeElement).closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){if(!this.previousFilter){var i=e(t.currentTarget);i.siblings(".ui-state-active").removeClass("ui-state-active"),this.focus(t,i)}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(e,t){var i=this.active||this.element.find(this.options.items).eq(0);t||this.focus(e,i)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){this._closeOnDocumentClick(e)&&this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-menu-icons ui-front").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").removeUniqueId().removeClass("ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var t=e(this);t.data("ui-menu-submenu-carat")&&t.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(t){var i,s,n,a,o=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move("first","first",t);break;case e.ui.keyCode.END:this._move("last","last",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:o=!1,s=this.previousFilter||"",n=String.fromCharCode(t.keyCode),a=!1,clearTimeout(this.filterTimer),n===s?a=!0:n=s+n,i=this._filterMenuItems(n),i=a&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(t.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(t,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}o&&t.preventDefault()},_activate:function(e){this.active.is(".ui-state-disabled")||(this.active.is("[aria-haspopup='true']")?this.expand(e):this.select(e))},refresh:function(){var t,i,s=this,n=this.options.icons.submenu,a=this.element.find(this.options.menus);this.element.toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length),a.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-front").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=e(this),i=t.parent(),s=e("").addClass("ui-menu-icon ui-icon "+n).data("ui-menu-submenu-carat",!0);i.attr("aria-haspopup","true").prepend(s),t.attr("aria-labelledby",i.attr("id"))}),t=a.add(this.element),i=t.find(this.options.items),i.not(".ui-menu-item").each(function(){var t=e(this);s._isDivider(t)&&t.addClass("ui-widget-content ui-menu-divider")}),i.not(".ui-menu-item, .ui-menu-divider").addClass("ui-menu-item").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(e,t){"icons"===e&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(t.submenu),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},focus:function(e,t){var i,s;this.blur(e,e&&"focus"===e.type),this._scrollIntoView(t),this.active=t.first(),s=this.active.addClass("ui-state-focus").removeClass("ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").addClass("ui-state-active"),e&&"keydown"===e.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=t.children(".ui-menu"),i.length&&e&&/^mouse/.test(e.type)&&this._startOpening(i),this.activeMenu=t.parent(),this._trigger("focus",e,{item:t})},_scrollIntoView:function(t){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(e.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(e.css(this.activeMenu[0],"paddingTop"))||0,n=t.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=t.outerHeight(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(e,t){t||clearTimeout(this.timer),this.active&&(this.active.removeClass("ui-state-focus"),this.active=null,this._trigger("blur",e,{item:this.active}))},_startOpening:function(e){clearTimeout(this.timer),"true"===e.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(e)},this.delay))},_open:function(t){var i=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(t,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:e(t&&t.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(t),this.activeMenu=s},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find(".ui-state-active").not(".ui-state-focus").removeClass("ui-state-active")},_closeOnDocumentClick:function(t){return!e(t.target).closest(".ui-menu").length},_isDivider:function(e){return!/[^\-\u2014\u2013\s]/.test(e.text())},collapse:function(e){var t=this.active&&this.active.parent().closest(".ui-menu-item",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move("next","first",e)},previous:function(e){this._move("prev","last",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(e,t,i){var s;this.active&&(s="first"===e||"last"===e?this.active["first"===e?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[e+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[t]()),this.focus(i,s)},nextPage:function(t){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=e(this),0>i.offset().top-s-n}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(t),void 0)},previousPage:function(t){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=e(this),i.offset().top-s+n>0}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items).first())),void 0):(this.next(t),void 0)},_hasScroll:function(){return this.element.outerHeight()",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var t,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return t=!0,s=!0,i=!0,void 0;t=!1,s=!1,i=!1;var a=e.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:t=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:t=!0,this._move("nextPage",n);break;case a.UP:t=!0,this._keyEvent("previous",n);break;case a.DOWN:t=!0,this._keyEvent("next",n);break;case a.ENTER:this.menu.active&&(t=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(t)return t=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=e.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(e){return s?(s=!1,e.preventDefault(),void 0):(this._searchTimeout(e),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(e),this._change(e),void 0)}}),this._initSource(),this.menu=e("
      ").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];e(t.target).closest(".ui-menu-item").length||this._delay(function(){var t=this;this.document.one("mousedown",function(s){s.target===t.element[0]||s.target===i||e.contains(i,s.target)||t.close()})})},menufocus:function(t,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){e(t.target).trigger(t.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:n})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&e.trim(s).length&&(this.liveRegion.children().hide(),e("
      ").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,t){var i=t.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",e,{item:i})&&this._value(i.value),this.term=this._value(),this.close(e),this.selectedItem=i}}),this.liveRegion=e("",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(e,t){this._super(e,t),"source"===e&&this._initSource(),"appendTo"===e&&this.menu.element.appendTo(this._appendTo()),"disabled"===e&&t&&this.xhr&&this.xhr.abort()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_initSource:function(){var t,i,s=this;e.isArray(this.options.source)?(t=this.options.source,this.source=function(i,s){s(e.ui.autocomplete.filter(t,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(t,n){s.xhr&&s.xhr.abort(),s.xhr=e.ajax({url:i,data:t,dataType:"json",success:function(e){n(e)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(e){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),i=this.menu.element.is(":visible"),s=e.altKey||e.ctrlKey||e.metaKey||e.shiftKey;(!t||t&&!i&&!s)&&(this.selectedItem=null,this.search(null,e))},this.options.delay)},search:function(e,t){return e=null!=e?e:this._value(),this.term=this._value(),e.length").text(i.label).appendTo(t)},_move:function(e,t){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(e)||this.menu.isLastItem()&&/^next/.test(e)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[e](t),void 0):(this.search(null,t),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(e,t){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(e,t),t.preventDefault())}}),e.extend(e.ui.autocomplete,{escapeRegex:function(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,i){var s=RegExp(e.ui.autocomplete.escapeRegex(i),"i");return e.grep(t,function(e){return s.test(e.label||e.value||e)})}}),e.widget("ui.autocomplete",e.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(e){return e+(e>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.children().hide(),e("
      ").text(i).appendTo(this.liveRegion))}}),e.ui.autocomplete;var c,p="ui-button ui-widget ui-state-default ui-corner-all",f="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",m=function(){var t=e(this);setTimeout(function(){t.find(":ui-button").button("refresh")},1)},g=function(t){var i=t.name,s=t.form,n=e([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?e(s).find("[name='"+i+"'][type=radio]"):e("[name='"+i+"'][type=radio]",t.ownerDocument).filter(function(){return!this.form})),n};e.widget("ui.button",{version:"1.11.4",defaultElement:"").addClass(this._triggerClass).html(a?e("").attr({src:a,alt:n,title:n}):n)),t[r?"before":"after"](i.trigger),i.trigger.click(function(){return e.datepicker._datepickerShowing&&e.datepicker._lastInput===t[0]?e.datepicker._hideDatepicker():e.datepicker._datepickerShowing&&e.datepicker._lastInput!==t[0]?(e.datepicker._hideDatepicker(),e.datepicker._showDatepicker(t[0])):e.datepicker._showDatepicker(t[0]),!1}))},_autoSize:function(e){if(this._get(e,"autoSize")&&!e.inline){var t,i,s,n,a=new Date(2009,11,20),o=this._get(e,"dateFormat");o.match(/[DM]/)&&(t=function(e){for(i=0,s=0,n=0;e.length>n;n++)e[n].length>i&&(i=e[n].length,s=n);return s},a.setMonth(t(this._get(e,o.match(/MM/)?"monthNames":"monthNamesShort"))),a.setDate(t(this._get(e,o.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())),e.input.attr("size",this._formatDate(e,a).length)}},_inlineDatepicker:function(t,i){var s=e(t);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),e.data(t,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(t),i.dpDiv.css("display","block"))},_dialogDatepicker:function(t,i,s,n,a){var o,h,l,u,d,c=this._dialogInst;return c||(this.uuid+=1,o="dp"+this.uuid,this._dialogInput=e(""),this._dialogInput.keydown(this._doKeyDown),e("body").append(this._dialogInput),c=this._dialogInst=this._newInst(this._dialogInput,!1),c.settings={},e.data(this._dialogInput[0],"datepicker",c)),r(c.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(c,i):i,this._dialogInput.val(i),this._pos=a?a.length?a:[a.pageX,a.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+u,l/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),c.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),e.blockUI&&e.blockUI(this.dpDiv),e.data(this._dialogInput[0],"datepicker",c),this +},_destroyDatepicker:function(t){var i,s=e(t),n=e.data(t,"datepicker");s.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),e.removeData(t,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty(),v===n&&(v=null))},_enableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!1,a.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}))},_disableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!0,a.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}),this._disabledInputs[this._disabledInputs.length]=t)},_isDisabledDatepicker:function(e){if(!e)return!1;for(var t=0;this._disabledInputs.length>t;t++)if(this._disabledInputs[t]===e)return!0;return!1},_getInst:function(t){try{return e.data(t,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(t,i,s){var n,a,o,h,l=this._getInst(t);return 2===arguments.length&&"string"==typeof i?"defaults"===i?e.extend({},e.datepicker._defaults):l?"all"===i?e.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),a=this._getDateDatepicker(t,!0),o=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),r(l.settings,n),null!==o&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,o)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(t):this._enableDatepicker(t)),this._attachments(e(t),l),this._autoSize(l),this._setDate(l,a),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(e,t,i){this._optionDatepicker(e,t,i)},_refreshDatepicker:function(e){var t=this._getInst(e);t&&this._updateDatepicker(t)},_setDateDatepicker:function(e,t){var i=this._getInst(e);i&&(this._setDate(i,t),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(e,t){var i=this._getInst(e);return i&&!i.inline&&this._setDateFromField(i,t),i?this._getDate(i):null},_doKeyDown:function(t){var i,s,n,a=e.datepicker._getInst(t.target),o=!0,r=a.dpDiv.is(".ui-datepicker-rtl");if(a._keyEvent=!0,e.datepicker._datepickerShowing)switch(t.keyCode){case 9:e.datepicker._hideDatepicker(),o=!1;break;case 13:return n=e("td."+e.datepicker._dayOverClass+":not(."+e.datepicker._currentClass+")",a.dpDiv),n[0]&&e.datepicker._selectDay(t.target,a.selectedMonth,a.selectedYear,n[0]),i=e.datepicker._get(a,"onSelect"),i?(s=e.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):e.datepicker._hideDatepicker(),!1;case 27:e.datepicker._hideDatepicker();break;case 33:e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 34:e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 35:(t.ctrlKey||t.metaKey)&&e.datepicker._clearDate(t.target),o=t.ctrlKey||t.metaKey;break;case 36:(t.ctrlKey||t.metaKey)&&e.datepicker._gotoToday(t.target),o=t.ctrlKey||t.metaKey;break;case 37:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?1:-1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 38:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,-7,"D"),o=t.ctrlKey||t.metaKey;break;case 39:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?-1:1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 40:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,7,"D"),o=t.ctrlKey||t.metaKey;break;default:o=!1}else 36===t.keyCode&&t.ctrlKey?e.datepicker._showDatepicker(this):o=!1;o&&(t.preventDefault(),t.stopPropagation())},_doKeyPress:function(t){var i,s,n=e.datepicker._getInst(t.target);return e.datepicker._get(n,"constrainInput")?(i=e.datepicker._possibleChars(e.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),t.ctrlKey||t.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(t){var i,s=e.datepicker._getInst(t.target);if(s.input.val()!==s.lastVal)try{i=e.datepicker.parseDate(e.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,e.datepicker._getFormatConfig(s)),i&&(e.datepicker._setDateFromField(s),e.datepicker._updateAlternate(s),e.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(t){if(t=t.target||t,"input"!==t.nodeName.toLowerCase()&&(t=e("input",t.parentNode)[0]),!e.datepicker._isDisabledDatepicker(t)&&e.datepicker._lastInput!==t){var i,n,a,o,h,l,u;i=e.datepicker._getInst(t),e.datepicker._curInst&&e.datepicker._curInst!==i&&(e.datepicker._curInst.dpDiv.stop(!0,!0),i&&e.datepicker._datepickerShowing&&e.datepicker._hideDatepicker(e.datepicker._curInst.input[0])),n=e.datepicker._get(i,"beforeShow"),a=n?n.apply(t,[t,i]):{},a!==!1&&(r(i.settings,a),i.lastVal=null,e.datepicker._lastInput=t,e.datepicker._setDateFromField(i),e.datepicker._inDialog&&(t.value=""),e.datepicker._pos||(e.datepicker._pos=e.datepicker._findPos(t),e.datepicker._pos[1]+=t.offsetHeight),o=!1,e(t).parents().each(function(){return o|="fixed"===e(this).css("position"),!o}),h={left:e.datepicker._pos[0],top:e.datepicker._pos[1]},e.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),e.datepicker._updateDatepicker(i),h=e.datepicker._checkOffset(i,h,o),i.dpDiv.css({position:e.datepicker._inDialog&&e.blockUI?"static":o?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),i.inline||(l=e.datepicker._get(i,"showAnim"),u=e.datepicker._get(i,"duration"),i.dpDiv.css("z-index",s(e(t))+1),e.datepicker._datepickerShowing=!0,e.effects&&e.effects.effect[l]?i.dpDiv.show(l,e.datepicker._get(i,"showOptions"),u):i.dpDiv[l||"show"](l?u:null),e.datepicker._shouldFocusInput(i)&&i.input.focus(),e.datepicker._curInst=i))}},_updateDatepicker:function(t){this.maxRows=4,v=t,t.dpDiv.empty().append(this._generateHTML(t)),this._attachHandlers(t);var i,s=this._getNumberOfMonths(t),n=s[1],a=17,r=t.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),t.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&t.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),t.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),t.dpDiv[(this._get(t,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),t===e.datepicker._curInst&&e.datepicker._datepickerShowing&&e.datepicker._shouldFocusInput(t)&&t.input.focus(),t.yearshtml&&(i=t.yearshtml,setTimeout(function(){i===t.yearshtml&&t.yearshtml&&t.dpDiv.find("select.ui-datepicker-year:first").replaceWith(t.yearshtml),i=t.yearshtml=null},0))},_shouldFocusInput:function(e){return e.input&&e.input.is(":visible")&&!e.input.is(":disabled")&&!e.input.is(":focus")},_checkOffset:function(t,i,s){var n=t.dpDiv.outerWidth(),a=t.dpDiv.outerHeight(),o=t.input?t.input.outerWidth():0,r=t.input?t.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:e(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:e(document).scrollTop());return i.left-=this._get(t,"isRTL")?n-o:0,i.left-=s&&i.left===t.input.offset().left?e(document).scrollLeft():0,i.top-=s&&i.top===t.input.offset().top+r?e(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+r):0),i},_findPos:function(t){for(var i,s=this._getInst(t),n=this._get(s,"isRTL");t&&("hidden"===t.type||1!==t.nodeType||e.expr.filters.hidden(t));)t=t[n?"previousSibling":"nextSibling"];return i=e(t).offset(),[i.left,i.top]},_hideDatepicker:function(t){var i,s,n,a,o=this._curInst;!o||t&&o!==e.data(t,"datepicker")||this._datepickerShowing&&(i=this._get(o,"showAnim"),s=this._get(o,"duration"),n=function(){e.datepicker._tidyDialog(o)},e.effects&&(e.effects.effect[i]||e.effects[i])?o.dpDiv.hide(i,e.datepicker._get(o,"showOptions"),s,n):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,"onClose"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),e.blockUI&&(e.unblockUI(),e("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(e){e.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(t){if(e.datepicker._curInst){var i=e(t.target),s=e.datepicker._getInst(i[0]);(i[0].id!==e.datepicker._mainDivId&&0===i.parents("#"+e.datepicker._mainDivId).length&&!i.hasClass(e.datepicker.markerClassName)&&!i.closest("."+e.datepicker._triggerClass).length&&e.datepicker._datepickerShowing&&(!e.datepicker._inDialog||!e.blockUI)||i.hasClass(e.datepicker.markerClassName)&&e.datepicker._curInst!==s)&&e.datepicker._hideDatepicker()}},_adjustDate:function(t,i,s){var n=e(t),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+("M"===s?this._get(a,"showCurrentAtPos"):0),s),this._updateDatepicker(a))},_gotoToday:function(t){var i,s=e(t),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(t,i,s){var n=e(t),a=this._getInst(n[0]);a["selected"+("M"===s?"Month":"Year")]=a["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(t,i,s,n){var a,o=e(t);e(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0])||(a=this._getInst(o[0]),a.selectedDay=a.currentDay=e("a",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(t,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(t){var i=e(t);this._selectDate(i,"")},_selectDate:function(t,i){var s,n=e(t),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,"onSelect"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(t){var i,s,n,a=this._get(t,"altField");a&&(i=this._get(t,"altFormat")||this._get(t,"dateFormat"),s=this._getDate(t),n=this.formatDate(i,s,this._getFormatConfig(t)),e(a).each(function(){e(this).val(n)}))},noWeekends:function(e){var t=e.getDay();return[t>0&&6>t,""]},iso8601Week:function(e){var t,i=new Date(e.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),t=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((t-i)/864e5)/7)+1},parseDate:function(t,i,s){if(null==t||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,a,o,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),d=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,c=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,m=-1,g=-1,v=-1,y=-1,b=!1,_=function(e){var i=t.length>n+1&&t.charAt(n+1)===e;return i&&n++,i},x=function(e){var t=_(e),s="@"===e?14:"!"===e?20:"y"===e&&t?4:"o"===e?3:2,n="y"===e?s:1,a=RegExp("^\\d{"+n+","+s+"}"),o=i.substring(h).match(a);if(!o)throw"Missing number at position "+h;return h+=o[0].length,parseInt(o[0],10)},w=function(t,s,n){var a=-1,o=e.map(_(t)?n:s,function(e,t){return[[t,e]]}).sort(function(e,t){return-(e[1].length-t[1].length)});if(e.each(o,function(e,t){var s=t[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(a=t[0],h+=s.length,!1):void 0}),-1!==a)return a+1;throw"Unknown name at position "+h},k=function(){if(i.charAt(h)!==t.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;t.length>n;n++)if(b)"'"!==t.charAt(n)||_("'")?k():b=!1;else switch(t.charAt(n)){case"d":v=x("d");break;case"D":w("D",d,c);break;case"o":y=x("o");break;case"m":g=x("m");break;case"M":g=w("M",p,f);break;case"y":m=x("y");break;case"@":r=new Date(x("@")),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"!":r=new Date((x("!")-this._ticksTo1970)/1e4),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"'":_("'")?k():b=!0;break;default:k()}if(i.length>h&&(o=i.substr(h),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===m?m=(new Date).getFullYear():100>m&&(m+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=m?0:-100)),y>-1)for(g=1,v=y;;){if(a=this._getDaysInMonth(m,g-1),a>=v)break;g++,v-=a}if(r=this._daylightSavingAdjust(new Date(m,g-1,v)),r.getFullYear()!==m||r.getMonth()+1!==g||r.getDate()!==v)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(e,t,i){if(!t)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,o=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(t){var i=e.length>s+1&&e.charAt(s+1)===t;return i&&s++,i},l=function(e,t,i){var s=""+t;if(h(e))for(;i>s.length;)s="0"+s;return s},u=function(e,t,i,s){return h(e)?s[t]:i[t]},d="",c=!1;if(t)for(s=0;e.length>s;s++)if(c)"'"!==e.charAt(s)||h("'")?d+=e.charAt(s):c=!1;else switch(e.charAt(s)){case"d":d+=l("d",t.getDate(),2);break;case"D":d+=u("D",t.getDay(),n,a);break;case"o":d+=l("o",Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()-new Date(t.getFullYear(),0,0).getTime())/864e5),3);break;case"m":d+=l("m",t.getMonth()+1,2);break;case"M":d+=u("M",t.getMonth(),o,r);break;case"y":d+=h("y")?t.getFullYear():(10>t.getYear()%100?"0":"")+t.getYear()%100;break;case"@":d+=t.getTime();break;case"!":d+=1e4*t.getTime()+this._ticksTo1970;break;case"'":h("'")?d+="'":c=!0;break;default:d+=e.charAt(s)}return d},_possibleChars:function(e){var t,i="",s=!1,n=function(i){var s=e.length>t+1&&e.charAt(t+1)===i;return s&&t++,s};for(t=0;e.length>t;t++)if(s)"'"!==e.charAt(t)||n("'")?i+=e.charAt(t):s=!1;else switch(e.charAt(t)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=e.charAt(t)}return i},_get:function(e,t){return void 0!==e.settings[t]?e.settings[t]:this._defaults[t]},_setDateFromField:function(e,t){if(e.input.val()!==e.lastVal){var i=this._get(e,"dateFormat"),s=e.lastVal=e.input?e.input.val():null,n=this._getDefaultDate(e),a=n,o=this._getFormatConfig(e);try{a=this.parseDate(i,s,o)||n}catch(r){s=t?"":s}e.selectedDay=a.getDate(),e.drawMonth=e.selectedMonth=a.getMonth(),e.drawYear=e.selectedYear=a.getFullYear(),e.currentDay=s?a.getDate():0,e.currentMonth=s?a.getMonth():0,e.currentYear=s?a.getFullYear():0,this._adjustInstDate(e)}},_getDefaultDate:function(e){return this._restrictMinMax(e,this._determineDate(e,this._get(e,"defaultDate"),new Date))},_determineDate:function(t,i,s){var n=function(e){var t=new Date;return t.setDate(t.getDate()+e),t},a=function(i){try{return e.datepicker.parseDate(e.datepicker._get(t,"dateFormat"),i,e.datepicker._getFormatConfig(t))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?e.datepicker._getDate(t):null)||new Date,a=n.getFullYear(),o=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":o+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o));break;case"y":case"Y":a+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o))}l=h.exec(i)}return new Date(a,o,r)},o=null==i||""===i?s:"string"==typeof i?a(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return o=o&&"Invalid Date"==""+o?s:o,o&&(o.setHours(0),o.setMinutes(0),o.setSeconds(0),o.setMilliseconds(0)),this._daylightSavingAdjust(o)},_daylightSavingAdjust:function(e){return e?(e.setHours(e.getHours()>12?e.getHours()+2:0),e):null},_setDate:function(e,t,i){var s=!t,n=e.selectedMonth,a=e.selectedYear,o=this._restrictMinMax(e,this._determineDate(e,t,new Date));e.selectedDay=e.currentDay=o.getDate(),e.drawMonth=e.selectedMonth=e.currentMonth=o.getMonth(),e.drawYear=e.selectedYear=e.currentYear=o.getFullYear(),n===e.selectedMonth&&a===e.selectedYear||i||this._notifyChange(e),this._adjustInstDate(e),e.input&&e.input.val(s?"":this._formatDate(e))},_getDate:function(e){var t=!e.currentYear||e.input&&""===e.input.val()?null:this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return t},_attachHandlers:function(t){var i=this._get(t,"stepMonths"),s="#"+t.id.replace(/\\\\/g,"\\");t.dpDiv.find("[data-handler]").map(function(){var t={prev:function(){e.datepicker._adjustDate(s,-i,"M")},next:function(){e.datepicker._adjustDate(s,+i,"M")},hide:function(){e.datepicker._hideDatepicker()},today:function(){e.datepicker._gotoToday(s)},selectDay:function(){return e.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return e.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return e.datepicker._selectMonthYear(s,this,"Y"),!1}};e(this).bind(this.getAttribute("data-event"),t[this.getAttribute("data-handler")])})},_generateHTML:function(e){var t,i,s,n,a,o,r,h,l,u,d,c,p,f,m,g,v,y,b,_,x,w,k,T,D,S,M,C,N,A,P,I,H,z,F,E,O,j,W,L=new Date,R=this._daylightSavingAdjust(new Date(L.getFullYear(),L.getMonth(),L.getDate())),Y=this._get(e,"isRTL"),B=this._get(e,"showButtonPanel"),J=this._get(e,"hideIfNoPrevNext"),q=this._get(e,"navigationAsDateFormat"),K=this._getNumberOfMonths(e),V=this._get(e,"showCurrentAtPos"),U=this._get(e,"stepMonths"),Q=1!==K[0]||1!==K[1],G=this._daylightSavingAdjust(e.currentDay?new Date(e.currentYear,e.currentMonth,e.currentDay):new Date(9999,9,9)),X=this._getMinMaxDate(e,"min"),$=this._getMinMaxDate(e,"max"),Z=e.drawMonth-V,et=e.drawYear;if(0>Z&&(Z+=12,et--),$)for(t=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-K[0]*K[1]+1,$.getDate())),t=X&&X>t?X:t;this._daylightSavingAdjust(new Date(et,Z,1))>t;)Z--,0>Z&&(Z=11,et--);for(e.drawMonth=Z,e.drawYear=et,i=this._get(e,"prevText"),i=q?this.formatDate(i,this._daylightSavingAdjust(new Date(et,Z-U,1)),this._getFormatConfig(e)):i,s=this._canAdjustMonth(e,-1,et,Z)?""+i+"":J?"":""+i+"",n=this._get(e,"nextText"),n=q?this.formatDate(n,this._daylightSavingAdjust(new Date(et,Z+U,1)),this._getFormatConfig(e)):n,a=this._canAdjustMonth(e,1,et,Z)?""+n+"":J?"":""+n+"",o=this._get(e,"currentText"),r=this._get(e,"gotoCurrent")&&e.currentDay?G:R,o=q?this.formatDate(o,r,this._getFormatConfig(e)):o,h=e.inline?"":"",l=B?"
      "+(Y?h:"")+(this._isInRange(e,r)?"":"")+(Y?"":h)+"
      ":"",u=parseInt(this._get(e,"firstDay"),10),u=isNaN(u)?0:u,d=this._get(e,"showWeek"),c=this._get(e,"dayNames"),p=this._get(e,"dayNamesMin"),f=this._get(e,"monthNames"),m=this._get(e,"monthNamesShort"),g=this._get(e,"beforeShowDay"),v=this._get(e,"showOtherMonths"),y=this._get(e,"selectOtherMonths"),b=this._getDefaultDate(e),_="",w=0;K[0]>w;w++){for(k="",this.maxRows=4,T=0;K[1]>T;T++){if(D=this._daylightSavingAdjust(new Date(et,Z,e.selectedDay)),S=" ui-corner-all",M="",Q){if(M+="
      "}for(M+="
      "+(/all|left/.test(S)&&0===w?Y?a:s:"")+(/all|right/.test(S)&&0===w?Y?s:a:"")+this._generateMonthYearHeader(e,Z,et,X,$,w>0||T>0,f,m)+"
    diff --git a/inc/themes/material-blue/config.inc b/inc/themes/material-blue/config.inc index b9412927..2337a414 100644 --- a/inc/themes/material-blue/config.inc +++ b/inc/themes/material-blue/config.inc @@ -4,10 +4,9 @@ - + - +
    @@ -116,6 +115,13 @@
    + +
    + +
    + + - - - - + + + + +
    @@ -135,25 +141,6 @@
    - -
    help_outline
    -
    -

    - -

    -
    -
    - -
    @@ -173,6 +160,52 @@
    + +
    help_outline
    +
    +

    + +

    +
    +
    +
    + required/> + +
    +
    + +
    + +
    + + + + + + - - - -
    + +
    help_outline
    +
    +

    + +

    +
    +
    + +
    @@ -216,399 +249,26 @@ pattern="[0-9]{1,5}" class="mdl-textfield__input fg-blue100" maxlength="5" value="" /> - -
    - -
    help_outline
    -
    -

    - -

    -
    -
    -
    - required/> - + for="files_allowed_size">
    -
    - +
    - +
    - - - - - - - - - - - - - -
    - -
    help_outline
    -
    -

    - -

    -
    +
    - -
    - -
    help_outline
    -
    -

    - -

    - -

    - -

    - -

    - -

    - -

    - https://wiki.example.org/search.php?phrase= -

    -
    -
    -
    - - -
    -
    - -
    help_outline
    -
    -

    - -

    - -

    - -

    - -

    - -

    - -

    - https://wiki.example.org/show.php?name= -

    -
    -
    -
    - - -
    -
    - -
    help_outline
    -
    -

    - -

    - -

    - -

    -
    -
    - -
    - - - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    help_outline
    -
    -

    - -

    - -

    - -

    -
    -
    - -
    - -
    help_outline
    -
    -

    - -

    - -

    - -

    - -
      -
    • ldap.example.org
    • -
    • ldap://ldap.example.org
    • -
    • ldaps://ldap.example.org
    • -
    -
    -
    -
    - /> - -
    -
    - -
    help_outline
    -
    -

    - -

    - -

    - -

    - -
      -
    • cn=syspass,ou=Users,dc=syspass,o=org
    • -
    • syspass
    • -
    -
    -
    -
    - /> - -
    -
    - -
    help_outline
    -
    -

    - -

    -
    -
    -
    - /> - -
    -
    - -
    help_outline
    -
    -

    - -

    - -

    - -

    - -
      -
    • cn=Users,dc=example,dc=org
    • -
    • ou=AdminUsers,dc=example,o=org
    • -
    -
    -
    -
    - /> - -
    -
    - -
    help_outline
    -
    -

    - -

    - -

    - -

    - -

    - -

    - -
      -
    • cn=GRP_SPUSERS,cn=Users,dc=example,dc=org
    • -
    • GRP_SPUSERS
    • -
    -
    -
    -
    - /> - -
    -
    - -
    help_outline
    -
    -

    - -

    -
    -
    - -
    - -
    help_outline
    -
    -

    - -

    -
    -
    - -
    - -
    help_outline
    -
    -

    - -

    -
    -
    - -
    - - - -
    - -
    - - -
    - -
    - - - - - @@ -619,9 +279,11 @@ @@ -631,34 +293,25 @@ - - - - @@ -668,74 +321,32 @@ - - - - - - - - - - - -
    - - -
    - /> - + +
    - /> - + +
    - - - -
    - /> - + +
    - /> - -
    -
    - - - -
    - - -
    - /> + + for="proxy_pass">
    - -
    help_outline
    -
    -

    - -

    -
    -
    - -
    + - + - +
    - @@ -768,33 +379,5 @@ } } }); - $('#wikifilter').tagsInput({ - 'width': '350px', - 'height': '50px', - 'defaultText': '', - 'defaultRemoveText': '', - 'removeWithBackspace': false, - onAddTag: function () { - // Fix scrolling to bottom - var $tagsbox = $(this).next(); - $tagsbox.animate({scrollTop: $tagsbox.height()}); - - if (!$tagsbox.find('div').hasClass('icon')) { - $tagsbox.find('div:last').prev().append('
    warning
    '); - } - }, - onRemoveTag: function () { - var $tagsbox = $(this).next(); - - if (!$tagsbox.find('div').hasClass('icon')) { - $tagsbox.find('div:last').prev().append('
    warning
    '); - } - }, - onChange: function () { - var $tagsbox = $(this).next(); - var last_width = $tagsbox.find("span:last").width() + 10; - $tagsbox.find(".tag:last").css('width', last_width); - } - }); }) \ No newline at end of file diff --git a/inc/themes/material-blue/css/styles.css b/inc/themes/material-blue/css/styles.css index ad9e4267..beff1ba9 100644 --- a/inc/themes/material-blue/css/styles.css +++ b/inc/themes/material-blue/css/styles.css @@ -115,7 +115,9 @@ img.inputImgMini { vertical-align: middle; } -i{cursor: pointer;} +i { + cursor: pointer; +} .altTable { border: 0px; @@ -257,12 +259,12 @@ a:hover, a:active, a:focus { } /*#container #actionsBar #actionsBar-icons{*/ - /*margin: 0 auto;*/ - /*width: 30%;*/ - /*background-color: rgba(83, 109, 254, .1);*/ - /*box-shadow: 0px 0px 5px rgb(83, 109, 254);*/ - /*border-radius: 5px;*/ - /*padding: 1em;*/ +/*margin: 0 auto;*/ +/*width: 30%;*/ +/*background-color: rgba(83, 109, 254, .1);*/ +/*box-shadow: 0px 0px 5px rgb(83, 109, 254);*/ +/*border-radius: 5px;*/ +/*padding: 1em;*/ /*}*/ #container #content { @@ -364,12 +366,11 @@ a:hover, a:active, a:focus { letter-spacing: 0.3em; text-align: center; } + #content #title.titleBlue, #content #title.titleGreen, #content #title.titleOrange, -#content #title.titleRed, -#content #title.titleNormal -{ +#content #title.titleRed { background-color: #536dfe; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #536dfe), color-stop(90%, #536dfe)); background-image: -webkit-linear-gradient(#536dfe 20%, #536dfe 90%); @@ -379,6 +380,12 @@ a:hover, a:active, a:focus { background: #536dfe url("../inc/themes/material-blue/css/images/ui-bg_highlight-hard_100_536DFE_1x100.png") repeat-x scroll 50% 50%; } +#content #title.titleNormal { + background-color: rgb(96, 125, 139); + color: #fff; + font-weight: bold; +} + #content .data { width: 80%; padding: 10px; @@ -387,7 +394,7 @@ a:hover, a:active, a:focus { background-color: #f9f9f9; } -#content .data #history-icon{ +#content .data #history-icon { position: relative; top: 5em; right: 2em; @@ -489,8 +496,8 @@ a:hover, a:active, a:focus { background: url("../imgs/clock.png") no-repeat 98% 5% #f9f9f9; } -#content #tabs .ui-tabs-nav{ - position:relative; +#content #tabs .ui-tabs-nav { + position: relative; left: 12em; width: 90%; } @@ -919,7 +926,9 @@ a:hover, a:active, a:focus { font-size: 14px; } -#fancyView ul {list-style: none;} +#fancyView ul { + list-style: none; +} #fancyView.msgError { margin: 5px; @@ -1108,7 +1117,6 @@ footer { position: fixed; bottom: 0; z-index: 100; - float: left; width: 100%; height: 1.5em; margin: 0 auto; @@ -1123,29 +1131,26 @@ footer { footer #project { float: right; - width: 40%; text-align: right; - padding-right: 20px; + padding-right: 1em; } footer #updates { - float: left; - width: 15%; - text-align: left; + display: inline-block; padding-left: 20px; + cursor: pointer; } footer #status { - float: left; - width: 10%; - text-align: left; + float: right; + text-align: right; color: #b94a48; padding: 0 1em; } footer #session { float: left; - width: 15%; + width: 50em; text-align: left; padding: .2em 1em; color: #999; @@ -1445,17 +1450,47 @@ footer img { font-weight: bold; } -.dialog-pass-text{padding: .5em; border: transparent 1px solid; text-align: center; min-width: 200px; } -.dialog-buttons{text-align: center; padding: .5em; border-top: 1px solid #c9c9c9; line-height: 2.5em;} +.dialog-pass-text { + padding: .5em; + border: transparent 1px solid; + text-align: center; + min-width: 200px; +} + +.dialog-buttons { + text-align: center; + padding: .5em; + border-top: 1px solid #c9c9c9; + line-height: 2.5em; +} + .dialog-clip-pass-copy { background-color: #ecfde4;; color: green; border: #dbfdcb 1px solid; } -.help-box{background-color: #fff !important; color: rgb(96, 125, 139);} -.help-box>*{font-weight: bold;} -.help-text{text-align: justify; line-height: 1.5em; margin-top: 1em;} +.help-box { + background-color: #fff !important; + color: rgb(96, 125, 139); +} + +.help-box > * { + font-weight: bold; +} + +.help-text { + text-align: justify; + line-height: 1.5em; + margin-top: 1em; +} + +.tooltip{ + max-width: 300px; + background-color: #777; + color: #fff; + z-index: 101; +} /*Login Page*/ #boxLogin { diff --git a/inc/themes/material-blue/encryption.inc b/inc/themes/material-blue/encryption.inc index 31c9048b..3903c030 100644 --- a/inc/themes/material-blue/encryption.inc +++ b/inc/themes/material-blue/encryption.inc @@ -8,7 +8,7 @@ echo $encryption_tabIndex; ?>">
    -
    + 0): ?> @@ -124,7 +124,7 @@ echo $encryption_tabIndex; ?>"> - +
    + + + + + +
    diff --git a/inc/themes/material-blue/footer.inc b/inc/themes/material-blue/footer.inc index 81a9356f..15335041 100644 --- a/inc/themes/material-blue/footer.inc +++ b/inc/themes/material-blue/footer.inc @@ -13,16 +13,17 @@ - -
    -
    + title="">  ::  cygnux.org + title="">cygnux.org
    +
    + +
    +
    diff --git a/inc/themes/material-blue/import.inc b/inc/themes/material-blue/import.inc index c7905726..69dd0816 100644 --- a/inc/themes/material-blue/import.inc +++ b/inc/themes/material-blue/import.inc @@ -121,7 +121,7 @@ echo $import_tabIndex; ?>"> - + @@ -207,42 +202,8 @@ \ No newline at end of file diff --git a/js/js.php b/js/js.php index 1635a32c..7c37cde5 100644 --- a/js/js.php +++ b/js/js.php @@ -27,6 +27,8 @@ define('APP_ROOT', '..'); require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; +require_once 'strings.js.php'; + $themeJsPath = VIEW_PATH . DIRECTORY_SEPARATOR . \SP\Init::$THEME . DIRECTORY_SEPARATOR . 'js' . DIRECTORY_SEPARATOR . 'js.php'; $jsFilesBase = array( @@ -45,33 +47,12 @@ $jsFilesBase = array( array('href' => 'js/zxcvbn-async.js', 'min' => true) ); -$arrJsLang = array( - _('Error en la consulta'), - _('Ha ocurrido un error'), - _('Sesión finalizada'), - _('Borrar la cuenta?'), - _('Borrar el usuario?'), - _('Guarde la configuración para que sea efectiva'), - _('Clave Generada'), - _('Nivel alto'), - _('Nivel medio'), - _('Nivel bajo'), - _('Nivel muy alto'), - _('Utilizar al menos 8 caracteres'), - _('Borrar elemento?'), - _('Página no encontrada'), - _('Archivo no soportado para visualizar'), - _('Eliminar archivo?'), - _('Su navegador no soporta subir archivos con HTML5'), - _('Demasiados archivos'), - sprintf(_('No es posible guardar el archivo.%sTamaño máximo:'), '
    '), - _('Extensión no permitida'), - _('Vaciar el registro de eventos?') -); +?> -//$js = "// i18n language array from PHP. Detected language: " . SP_Init::$LANG . "\n"; -echo "var APP_ROOT = '" . SP\Init::$WEBURI . "';\n"; -echo "var LANG = ['" . implode("','", SP\Util::arrayJSEscape($arrJsLang)) . "'];\n"; +var APP_ROOT = ''; +var LANG = ['']; + +. + * + */ + +$stringsJsLang = array( + 0 => _('Error en la consulta'), + 1 => _('Ha ocurrido un error'), + 2 => _('Sesión finalizada'), + 3 => _('Borrar la cuenta?'), + 4 => _('Borrar el usuario?'), + 5 => _('Guarde la configuración para que sea efectiva'), + 6 => _('Clave Generada'), + 7 => _('Nivel alto'), + 8 => _('Nivel medio'), + 9 => _('Nivel bajo'), + 10 => _('Nivel muy alto'), + 11 => _('Utilizar al menos 8 caracteres'), + 12 => _('Borrar elemento?'), + 13 => _('Página no encontrada'), + 14 => _('Archivo no soportado para visualizar'), + 15 => _('Eliminar archivo?'), + 16 => _('Su navegador no soporta subir archivos con HTML5'), + 17 => _('Demasiados archivos'), + 18 => sprintf(_('No es posible guardar el archivo.%sTamaño máximo:'), '
    '), + 19 => _('Extensión no permitida'), + 20 => _('Vaciar el registro de eventos?'), + 21 => _('Seleccionar Grupo'), + 22 => _('Seleccionar Usuario'), + 23 => _('Seleccionar Perfil'), + 24 => _('Seleccionar Cliente'), + 25 => _('Seleccionar Categoría'), + 26 => _('Sin resultados'), + 27 => _('Opciones de clave'), + 28 => _('Generar clave aleatoria'), + 29 => _('Complejidad'), + 30 => _('Reset'), + 31 => _('Nivel de fortaleza de la clave'), + 32 => _('Mostrar Clave') +); + + + diff --git a/web/MainC.class.php b/web/MainC.class.php index 4d0cf2e8..0b0f2286 100644 --- a/web/MainC.class.php +++ b/web/MainC.class.php @@ -60,6 +60,7 @@ class MainC extends Controller implements ActionsInterface $this->view->assign('startTime', microtime()); $this->view->assign('page', $page); $this->view->assign('loggedIn', \SP\Init::isLoggedIn()); + $this->view->assign('logoIcon', Init::$WEBURI . '/imgs/logo.png'); $this->view->assign('logoNoText', Init::$WEBURI . '/imgs/logo.svg'); $this->view->assign('logo', Init::$WEBURI . '/imgs/logo_full.svg'); From ebae60bc3f9b30e778d2165851adad96224cb123 Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Mon, 3 Aug 2015 01:46:30 +0200 Subject: [PATCH 56/84] * [ADD] Closes #120. Added the ability to assign one user to multiple groups * [MOD] User's classes are now better handled by splitting them by behaviour * [MOD] UI tweaks for classic theme and integration of new features --- ajax/ajax_appMgmtSave.php | 52 +- ajax/ajax_configSave.php | 4 +- ajax/ajax_doLogin.php | 109 +- ajax/ajax_getContent.php | 12 +- ajax/ajax_passReset.php | 13 +- ajax/ajax_sendRequest.php | 6 +- ajax/ajax_userPrefsSave.php | 3 +- ajax/ajax_viewpass.php | 3 +- .../css => css}/MaterialIcons-Regular.eot | Bin .../css => css}/MaterialIcons-Regular.ttf | Bin .../css => css}/MaterialIcons-Regular.woff | Bin .../css => css}/MaterialIcons-Regular.woff2 | Bin .../css/chosen.css => css/chosen-custom.css | 0 css/chosen.css | 450 ----- css/chosen.min.css | 3 + css/css.php | 4 +- css/fonts.css | 13 +- css/material-icons.css | 36 + imgs/preferences.png | Bin 0 -> 1808 bytes inc/Account.class.php | 148 +- inc/AccountBase.class.php | 2 +- inc/AccountSearch.class.php | 18 +- inc/Acl.class.php | 13 +- inc/Auth.class.php | 14 +- inc/Auth2FA.class.php | 4 +- inc/Common.class.php | 46 - inc/DB.class.php | 20 +- inc/Groups.class.php | 156 +- inc/Installer.class.php | 60 +- inc/Upgrade.class.php | 3 +- inc/User.class.php | 128 ++ inc/UserBase.class.php | 596 +++++++ inc/UserLdap.class.php | 149 ++ inc/UserPreferences.class.php | 2 + inc/{Users.class.php => UserUtil.class.php} | 1445 ++++++----------- inc/dbstructure.sql | 15 + inc/themes/classic/2fa.inc | 39 + inc/themes/classic/account.inc | 146 +- inc/themes/classic/backup.inc | 64 +- inc/themes/classic/categories.inc | 9 +- inc/themes/classic/config.inc | 404 +---- inc/themes/classic/css/styles.css | 111 +- inc/themes/classic/customers.inc | 9 +- inc/themes/classic/editpass.inc | 26 +- inc/themes/classic/encryption.inc | 76 +- inc/themes/classic/eventlog.inc | 10 +- inc/themes/classic/footer.inc | 15 +- inc/themes/classic/groups.inc | 31 +- inc/themes/classic/header.inc | 2 +- inc/themes/classic/import.inc | 84 +- inc/themes/classic/install.inc | 11 +- inc/themes/classic/js-common.inc | 60 +- inc/themes/classic/js/functions.js | 484 ++++-- inc/themes/classic/ldap.inc | 233 +++ inc/themes/classic/mail.inc | 111 ++ inc/themes/classic/mgmttabs.inc | 14 +- inc/themes/classic/passreset.inc | 7 +- inc/themes/classic/profiles.inc | 11 +- inc/themes/classic/request.inc | 18 +- inc/themes/classic/searchbox.inc | 57 +- inc/themes/classic/security.inc | 74 + inc/themes/classic/sessionbar.inc | 14 +- inc/themes/classic/update.inc | 12 + inc/themes/classic/users.inc | 76 +- inc/themes/classic/userspass.inc | 59 +- inc/themes/classic/wiki.inc | 147 ++ inc/themes/material-blue/css/css.php | 2 - inc/themes/material-blue/css/fonts.css | 11 - .../material-blue/css/material-custom.css | 40 +- inc/themes/material-blue/css/styles.css | 1 + inc/themes/material-blue/footer.inc | 10 +- inc/themes/material-blue/groups.inc | 22 +- inc/themes/material-blue/js/functions.js | 85 +- inc/themes/material-blue/searchbox.inc | 84 +- inc/themes/material-blue/sessionbar.inc | 4 +- js/jquery-ui.min.js | 16 +- {imgs => res}/register.eot | Bin {imgs => res}/register.otf | Bin {imgs => res}/register.ttf | Bin {imgs => res}/register.woff | Bin {imgs => res}/register.woff2 | Bin web/AccountC.class.php | 7 +- web/MainC.class.php | 12 +- web/SearchC.class.php | 4 +- web/UsersMgmtC.class.php | 45 +- 85 files changed, 3518 insertions(+), 2766 deletions(-) rename {inc/themes/material-blue/css => css}/MaterialIcons-Regular.eot (100%) rename {inc/themes/material-blue/css => css}/MaterialIcons-Regular.ttf (100%) rename {inc/themes/material-blue/css => css}/MaterialIcons-Regular.woff (100%) rename {inc/themes/material-blue/css => css}/MaterialIcons-Regular.woff2 (100%) rename inc/themes/material-blue/css/chosen.css => css/chosen-custom.css (100%) delete mode 100644 css/chosen.css create mode 100644 css/chosen.min.css create mode 100644 css/material-icons.css create mode 100644 imgs/preferences.png create mode 100644 inc/User.class.php create mode 100644 inc/UserBase.class.php create mode 100644 inc/UserLdap.class.php rename inc/{Users.class.php => UserUtil.class.php} (55%) create mode 100644 inc/themes/classic/2fa.inc create mode 100644 inc/themes/classic/ldap.inc create mode 100644 inc/themes/classic/mail.inc create mode 100644 inc/themes/classic/security.inc create mode 100644 inc/themes/classic/update.inc create mode 100644 inc/themes/classic/wiki.inc delete mode 100644 inc/themes/material-blue/css/fonts.css rename {imgs => res}/register.eot (100%) rename {imgs => res}/register.otf (100%) rename {imgs => res}/register.ttf (100%) rename {imgs => res}/register.woff (100%) rename {imgs => res}/register.woff2 (100%) diff --git a/ajax/ajax_appMgmtSave.php b/ajax/ajax_appMgmtSave.php index a86fb2c0..ffa57a93 100644 --- a/ajax/ajax_appMgmtSave.php +++ b/ajax/ajax_appMgmtSave.php @@ -25,6 +25,7 @@ use SP\Email; use SP\Request; +use SP\UserUtil; define('APP_ROOT', '..'); @@ -52,14 +53,14 @@ $activeTab = SP\Request::analyze('activeTab', 0); // Acción al cerrar la vista $doActionOnClose = "doAction('$onCloseAction','',$activeTab);"; -$userLogin = SP\Users::getUserLoginById($itemId); +$userLogin = UserUtil::getUserLoginById($itemId); if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_NEW || $actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_EDIT || $actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_EDITPASS || $actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_DELETE ) { - $user = new SP\Users; + $User = new SP\User(); // Variables POST del formulario $isLdap = SP\Request::analyze('isLdap', 0); @@ -70,7 +71,7 @@ if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_NEW $userEmail = SP\Request::analyze('email'); $userNotes = SP\Request::analyze('notes'); $userPass = SP\Request::analyze('pass', '', false, false, false); - $userPassV = SP\Request::analyze('passv', '', false, false, false); + $userPassV = SP\Request::analyze('passR', '', false, false, false); $userIsAdminApp = SP\Request::analyze('adminapp', 0, false, 1); $userIsAdminAcc = SP\Request::analyze('adminacc', 0, false, 1); $userIsDisabled = SP\Request::analyze('disabled', 0, false, 1); @@ -100,20 +101,20 @@ if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_NEW SP\Common::printJSON(_('Es necesario un email'), 2); } - $user->userId = $itemId; - $user->userName = $userName; - $user->userLogin = $userLogin; - $user->userEmail = $userEmail; - $user->userNotes = $userNotes; - $user->userGroupId = $userGroup; - $user->userProfileId = $userProfile; - $user->userIsAdminApp = $userIsAdminApp; - $user->userIsAdminAcc = $userIsAdminAcc; - $user->userIsDisabled = $userIsDisabled; - $user->userChangePass = $userIsChangePass; - $user->userPass = $userPass; + $User->setUserId($itemId); + $User->setUserName($userName); + $User->setUserLogin($userLogin); + $User->setUserEmail($userEmail); + $User->setUserNotes($userNotes); + $User->setUserGroupId($userGroup); + $User->setUserProfileId($userProfile); + $User->setUserIsAdminApp($userIsAdminApp); + $User->setUserIsAdminAcc($userIsAdminAcc); + $User->setUserIsDisabled($userIsDisabled); + $User->setUserChangePass($userIsChangePass); + $User->setUserPass($userPass); - switch ($user->checkUserExist()) { + switch ($User->checkUserExist()) { case 1: SP\Common::printJSON(_('Login de usuario duplicado'), 2); break; @@ -131,13 +132,13 @@ if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_NEW SP\Common::printJSON(_('Las claves no coinciden'), 2); } - if ($user->addUser()) { + if ($User->addUser()) { SP\Common::printJSON(_('Usuario creado'), 0, $doActionOnClose); } SP\Common::printJSON(_('Error al crear el usuario')); } elseif ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_EDIT) { - if ($user->updateUser()) { + if ($User->updateUser()) { SP\Common::printJSON(_('Usuario actualizado'), 0, $doActionOnClose); } @@ -156,10 +157,10 @@ if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_NEW SP\Common::printJSON(_('Las claves no coinciden'), 2); } - $user->userId = $itemId; - $user->userPass = $userPass; + $User->setUserId($itemId); + $User->setUserPass($userPass); - if ($user->updateUserPass()) { + if ($User->updateUserPass()) { SP\Common::printJSON(_('Clave actualizada'), 0); } @@ -170,13 +171,13 @@ if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_NEW SP\Common::printJSON(_('Ey, esto es una DEMO!!')); } - $user->userId = $itemId; + $User->setUserId($itemId); if ($itemId == SP\Session::getUserId()) { SP\Common::printJSON(_('No es posible eliminar, usuario en uso')); } - if ($user->deleteUser()) { + if ($User->deleteUser()) { SP\Common::printJSON(_('Usuario eliminado'), 0, $doActionOnClose); } @@ -191,6 +192,7 @@ if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_NEW // Variables POST del formulario $frmGrpName = SP\Request::analyze('name'); $frmGrpDesc = SP\Request::analyze('description'); + $frmGrpUsers = SP\Request::analyze('users'); if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_GROUPS_NEW || $actionId === \SP\Controller\ActionsInterface::ACTION_USR_GROUPS_EDIT @@ -208,13 +210,13 @@ if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_NEW } if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_GROUPS_NEW) { - if (SP\Groups::addGroup()) { + if (SP\Groups::addGroup($frmGrpUsers)) { SP\Common::printJSON(_('Grupo creado'), 0, $doActionOnClose); } else { SP\Common::printJSON(_('Error al crear el grupo')); } } else if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_GROUPS_EDIT) { - if (SP\Groups::updateGroup()) { + if (SP\Groups::updateGroup($frmGrpUsers)) { SP\Common::printJSON(_('Grupo actualizado'), 0, $doActionOnClose); } diff --git a/ajax/ajax_configSave.php b/ajax/ajax_configSave.php index 61c15c1b..f853a6a2 100644 --- a/ajax/ajax_configSave.php +++ b/ajax/ajax_configSave.php @@ -23,6 +23,8 @@ * */ +use SP\UserUtil; + define('APP_ROOT', '..'); require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; @@ -225,7 +227,7 @@ if ($actionId === SP\Controller\ActionsInterface::ACTION_CFG_GENERAL $confirmPassChange = SP\Request::analyze('confirmPassChange', 0, false, 1); $noAccountPassChange = SP\Request::analyze('chkNoAccountChange', 0, false, 1); - if (!SP\Users::checkUserUpdateMPass()) { + if (!UserUtil::checkUserUpdateMPass()) { SP\Common::printJSON(_('Clave maestra actualizada') . ';;' . _('Reinicie la sesión para cambiarla')); } elseif ($newMasterPass == '' && $currentMasterPass == '') { SP\Common::printJSON(_('Clave maestra no indicada')); diff --git a/ajax/ajax_doLogin.php b/ajax/ajax_doLogin.php index e5acd7ab..bd712056 100644 --- a/ajax/ajax_doLogin.php +++ b/ajax/ajax_doLogin.php @@ -24,6 +24,8 @@ */ use SP\Request; +use SP\UserLdap; +use SP\UserUtil; define('APP_ROOT', '..'); @@ -43,87 +45,94 @@ if (!$userLogin || !$userPass) { SP\Common::printJSON(_('Usuario/Clave no introducidos')); } -$resLdap = SP\Auth::authUserLDAP($userLogin, $userPass); +$User = new SP\User(); +$User->setUserLogin($userLogin); +$User->setUserPass($userPass); -$objUser = new SP\Users; -$objUser->userLogin = $userLogin; -$objUser->userPass = $userPass; -$objUser->userName = SP\Auth::$userName; -$objUser->userEmail = SP\Auth::$userEmail; +if ($resLdap = SP\Auth::authUserLDAP($userLogin, $userPass)) { + $User->setUserName(SP\Auth::$userName); + $User->setUserEmail(SP\Auth::$userEmail); +} -$log = new \SP\Log(_('Inicio sesión (LDAP)')); +$Log = new \SP\Log(_('Inicio sesión')); // Autentificamos por LDAP if ($resLdap === true) { + $Log->addDescription('(LDAP)'); + // Verificamos si el usuario existe en la BBDD - if (!$objUser->checkLDAPUserInDB()) { + if (!UserLdap::checkLDAPUserInDB($userLogin)) { // Creamos el usuario de LDAP en MySQL - if (!$objUser->newUserLDAP()) { - $log->addDescription(_('Error al guardar los datos de LDAP')); - $log->writeLog(); + if (!\SP\UserLdap::newUserLDAP($User)) { + $Log->addDescription(_('Error al guardar los datos de LDAP')); + $Log->writeLog(); SP\Common::printJSON(_('Error interno')); } } else { // Actualizamos la clave del usuario en MySQL - if (!$objUser->updateLDAPUserInDB()) { - $log->addDescription(_('Error al actualizar la clave del usuario en la BBDD')); - $log->writeLog(); + if (!UserLdap::updateLDAPUserInDB($User)) { + $Log->addDescription(_('Error al actualizar la clave del usuario en la BBDD')); + $Log->writeLog(); SP\Common::printJSON(_('Error interno')); } } } else if ($resLdap == 49) { - $log->addDescription(_('Login incorrecto')); - $log->addDescription(_('Usuario') . ": " . $userLogin); - $log->writeLog(); + $Log->addDescription('(LDAP)'); + $Log->addDescription(_('Login incorrecto')); + $Log->addDescription(_('Usuario') . ": " . $userLogin); + $Log->writeLog(); SP\Common::printJSON(_('Usuario/Clave incorrectos')); } else if ($resLdap === 701) { - $log->addDescription(_('Cuenta expirada')); - $log->addDescription(_('Usuario') . ": " . $userLogin); - $log->writeLog(); + $Log->addDescription('(LDAP)'); + $Log->addDescription(_('Cuenta expirada')); + $Log->addDescription(_('Usuario') . ": " . $userLogin); + $Log->writeLog(); SP\Common::printJSON(_('Cuenta expirada')); } else if ($resLdap === 702) { - $log->addDescription(_('El usuario no tiene grupos asociados')); - $log->addDescription(_('Usuario') . ": " . $userLogin); - $log->writeLog(); + $Log->addDescription('(LDAP)'); + $Log->addDescription(_('El usuario no tiene grupos asociados')); + $Log->addDescription(_('Usuario') . ": " . $userLogin); + $Log->writeLog(); SP\Common::printJSON(_('Usuario/Clave incorrectos')); } else { // Autentificamos por MySQL (ha fallado LDAP) - $log->setAction(_('Inicio sesión (MySQL)')); + $Log->resetDescription(); + $Log->addDescription('(MySQL)'); // Autentificamos con la BBDD if (!SP\Auth::authUserMySQL($userLogin, $userPass)) { - $log->addDescription(_('Login incorrecto')); - $log->addDescription(_('Usuario') . ": " . $userLogin); - $log->writeLog(); + $Log->addDescription(_('Login incorrecto')); + $Log->addDescription(_('Usuario') . ": " . $userLogin); + $Log->writeLog(); SP\Common::printJSON(_('Usuario/Clave incorrectos')); } } // Comprobar si el usuario está deshabilitado -if (SP\Users::checkUserIsDisabled($userLogin)) { - $log->addDescription(_('Usuario deshabilitado')); - $log->addDescription(_('Usuario') . ": " . $userLogin); - $log->writeLog(); +if (UserUtil::checkUserIsDisabled($userLogin)) { + $Log->addDescription(_('Usuario deshabilitado')); + $Log->addDescription(_('Usuario') . ": " . $userLogin); + $Log->writeLog(); SP\Common::printJSON(_('Usuario deshabilitado')); } // Obtenemos los datos del usuario -if (!$objUser->getUserInfo()) { - $log->addDescription(_('Error al obtener los datos del usuario de la BBDD')); - $log->writeLog(); +if (!$User->getUserInfo()) { + $Log->addDescription(_('Error al obtener los datos del usuario de la BBDD')); + $Log->writeLog(); SP\Common::printJSON(_('Error interno')); } // Comprobamos que la clave maestra del usuario es correcta y está actualizada -if (!$masterPass && (!$objUser->checkUserMPass() - || !SP\Users::checkUserUpdateMPass($userLogin)) +if (!$masterPass + && (!UserUtil::checkUserMPass($User) || !UserUtil::checkUserUpdateMPass($userLogin)) ) { SP\Common::printJSON(_('La clave maestra no ha sido guardada o es incorrecta'), 3); } elseif ($masterPass) { @@ -131,43 +140,43 @@ if (!$masterPass && (!$objUser->checkUserMPass() $masterPass = SP\Config::getTempMasterPass($masterPass); } - if (!$objUser->updateUserMPass($masterPass)) { - $log->addDescription(_('Clave maestra incorrecta')); - $log->writeLog(); + if (!$User->updateUserMPass($masterPass)) { + $Log->addDescription(_('Clave maestra incorrecta')); + $Log->writeLog(); SP\Common::printJSON(_('Clave maestra incorrecta'), 4); } } // Comprobar si se ha forzado un cambio de clave -if ($objUser->userChangePass) { +if ($User->isUserChangePass()) { $hash = SP\Util::generate_random_bytes(); - if (SP\Users::addPassRecover($userLogin, $hash)) { + if (UserUtil::addPassRecover($userLogin, $hash)) { $url = SP\Init::$WEBURI . '/index.php?a=passreset&h=' . $hash . '&t=' . time() . '&f=1'; SP\Common::printJSON($url, 0); } } // Obtenemos la clave maestra del usuario -if ($objUser->getUserMPass()) { +if ($User->getUserMPass()) { // Establecemos las variables de sesión - $objUser->setUserSession(); + UserUtil::setUserSession($User); - $log->addDescription(_('Usuario') . ": " . $userLogin); - $log->addDescription(_('Perfil') . ": " . SP\Profile::getProfileNameById($objUser->userProfileId)); - $log->addDescription(_('Grupo') . ": " . SP\Groups::getGroupNameById($objUser->userGroupId)); - $log->writeLog(); + $Log->addDescription(_('Usuario') . ": " . $userLogin); + $Log->addDescription(_('Perfil') . ": " . SP\Profile::getProfileNameById($User->getUserProfileId())); + $Log->addDescription(_('Grupo') . ": " . SP\Groups::getGroupNameById($User->getUserGroupId())); + $Log->writeLog(); } else { SP\Common::printJSON(_('Error interno')); } $userPrefs = new \SP\UserPreferences(); -$prefs = $userPrefs->getPreferences($objUser->userId); +$prefs = $userPrefs->getPreferences($User->getUserId()); -if ($prefs->isUse2Fa()){ +if ($prefs->isUse2Fa()) { SP\Session::set2FApassed(false); - $url = SP\Init::$WEBURI . '/index.php?a=2fa&i=' . $objUser->userId . '&t=' . time() . '&f=1'; + $url = SP\Init::$WEBURI . '/index.php?a=2fa&i=' . $User->getUserId() . '&t=' . time() . '&f=1'; SP\Common::printJSON($url, 0); } else { SP\Session::set2FApassed(true); diff --git a/ajax/ajax_getContent.php b/ajax/ajax_getContent.php index aa5a2da8..d8ed8252 100644 --- a/ajax/ajax_getContent.php +++ b/ajax/ajax_getContent.php @@ -43,7 +43,7 @@ if (!SP\Request::analyze('actionId', 0, true)) { $actionId = SP\Request::analyze('actionId'); $itemId = SP\Request::analyze('itemId', 0); -$lastAction = filter_var(SP\Request::analyze('lastAction', \SP\Controller\ActionsInterface::ACTION_ACC_SEARCH, false, false, false), FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH); +$lastAction = SP\Request::analyze('lastAction', \SP\Controller\ActionsInterface::ACTION_ACC_SEARCH); $tpl = new SP\Template(); $tpl->assign('actionId', $actionId); @@ -172,15 +172,5 @@ if (\SP\Session::getUserIsAdminApp() && SP\Config::getValue('debug')) { $controller->getDebug(); } -// Se comprueba si hay actualizaciones. -// Es necesario que se haga al final de obtener el contenido ya que la -// consulta ajax detiene al resto si se ejecuta antes -if (!SP\Session::getUpdated() - && \SP\Session::getUserIsAdminApp() - && SP\Config::getValue('checkupdates') === true -) { - echo ''; -} - $tpl->addTemplate('js-common'); $controller->view(); diff --git a/ajax/ajax_passReset.php b/ajax/ajax_passReset.php index b0565037..29b32bd0 100644 --- a/ajax/ajax_passReset.php +++ b/ajax/ajax_passReset.php @@ -23,6 +23,8 @@ * */ +use SP\UserUtil; + define('APP_ROOT', '..'); require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; @@ -63,16 +65,11 @@ if ($userLogin && $userEmail) { } if ($userPass && $userPassV && $userPass === $userPassV) { - $userId = SP\Users::checkHashPassRecover($hash); + $userId = UserUtil::checkHashPassRecover($hash); if ($userId) { - $user = new SP\Users(); - - $user->userId = $userId; - $user->userPass = $userPass; - - if ($user->updateUserPass() && SP\Users::updateHashPassRecover($hash)) { - \SP\Log::writeNewLogAndEmail(_('Modificar Clave Usuario'), SP\Html::strongText(_('Login') . ': ') . $user->getUserLoginById($userId)); + if (UserUtil::updateUserPass($userId, $userPass) && UserUtil::updateHashPassRecover($hash)) { + \SP\Log::writeNewLogAndEmail(_('Modificar Clave Usuario'), SP\Html::strongText(_('Login') . ': ') . UserUtil::getUserLoginById($userId)); SP\Common::printJSON(_('Clave actualizada'), 0, 'goLogin();'); } diff --git a/ajax/ajax_sendRequest.php b/ajax/ajax_sendRequest.php index a02a65f2..2618a32b 100644 --- a/ajax/ajax_sendRequest.php +++ b/ajax/ajax_sendRequest.php @@ -23,6 +23,8 @@ * */ +use SP\UserUtil; + define('APP_ROOT', '..'); require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; @@ -49,8 +51,8 @@ if (!$frmDescription) { $accountRequestData = SP\Account::getAccountRequestData($frmAccountId); $recipients = array( - SP\Users::getUserEmail($accountRequestData->account_userId), - SP\Users::getUserEmail($accountRequestData->account_userEditId) + UserUtil::getUserEmail($accountRequestData->account_userId), + UserUtil::getUserEmail($accountRequestData->account_userEditId) ); $requestUsername = SP\Session::getUserName(); diff --git a/ajax/ajax_userPrefsSave.php b/ajax/ajax_userPrefsSave.php index c26bcf11..963931ad 100644 --- a/ajax/ajax_userPrefsSave.php +++ b/ajax/ajax_userPrefsSave.php @@ -24,6 +24,7 @@ */ use SP\Request; +use SP\UserUtil; define('APP_ROOT', '..'); @@ -55,7 +56,7 @@ if($actionId === SP\Controller\ActionsInterface::ACTION_USR_PREFERENCES_SECURITY $twoFaEnabled = SP\Request::analyze('security_2faenabled', 0, false, 1); $pin = SP\Request::analyze('security_pin', 0); - $userLogin = \SP\Users::getUserLoginById($itemId); + $userLogin = UserUtil::getUserLoginById($itemId); $twoFa = new \SP\Auth\Auth2FA($itemId, $userLogin); if(!$twoFa->verifyKey($pin)){ diff --git a/ajax/ajax_viewpass.php b/ajax/ajax_viewpass.php index 8ca9ba44..19a8cb24 100644 --- a/ajax/ajax_viewpass.php +++ b/ajax/ajax_viewpass.php @@ -24,6 +24,7 @@ */ use SP\Request; +use SP\UserUtil; define('APP_ROOT', '..'); @@ -55,7 +56,7 @@ if ($isHistory && !$account->checkAccountMPass()) { if (!SP\Acl::checkAccountAccess(SP\Acl::ACTION_ACC_VIEW_PASS, $account->getAccountDataForACL()) || !SP\Acl::checkUserAccess(SP\Acl::ACTION_ACC_VIEW_PASS)) { SP\Common::printJSON(_('No tiene permisos para acceder a esta cuenta')); -} elseif (!SP\Users::checkUserUpdateMPass()) { +} elseif (!UserUtil::checkUserUpdateMPass()) { SP\Common::printJSON(_('Clave maestra actualizada') . '
    ' . _('Reinicie la sesión para cambiarla')); } diff --git a/inc/themes/material-blue/css/MaterialIcons-Regular.eot b/css/MaterialIcons-Regular.eot similarity index 100% rename from inc/themes/material-blue/css/MaterialIcons-Regular.eot rename to css/MaterialIcons-Regular.eot diff --git a/inc/themes/material-blue/css/MaterialIcons-Regular.ttf b/css/MaterialIcons-Regular.ttf similarity index 100% rename from inc/themes/material-blue/css/MaterialIcons-Regular.ttf rename to css/MaterialIcons-Regular.ttf diff --git a/inc/themes/material-blue/css/MaterialIcons-Regular.woff b/css/MaterialIcons-Regular.woff similarity index 100% rename from inc/themes/material-blue/css/MaterialIcons-Regular.woff rename to css/MaterialIcons-Regular.woff diff --git a/inc/themes/material-blue/css/MaterialIcons-Regular.woff2 b/css/MaterialIcons-Regular.woff2 similarity index 100% rename from inc/themes/material-blue/css/MaterialIcons-Regular.woff2 rename to css/MaterialIcons-Regular.woff2 diff --git a/inc/themes/material-blue/css/chosen.css b/css/chosen-custom.css similarity index 100% rename from inc/themes/material-blue/css/chosen.css rename to css/chosen-custom.css diff --git a/css/chosen.css b/css/chosen.css deleted file mode 100644 index e7ea0922..00000000 --- a/css/chosen.css +++ /dev/null @@ -1,450 +0,0 @@ -/*! -Chosen, a Select Box Enhancer for jQuery and Prototype -by Patrick Filler for Harvest, http://getharvest.com - -Version 1.4.2 -Full source at https://github.com/harvesthq/chosen -Copyright (c) 2011-2015 Harvest http://getharvest.com - -MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md -This file is generated by `grunt build`, do not edit it by hand. -*/ - -/* @group Base */ -.chosen-container { - position: relative; - display: inline-block; - vertical-align: middle; - font-size: 13px; - zoom: 1; - *display: inline; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; -} -.chosen-container * { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.chosen-container .chosen-drop { - position: absolute; - top: 100%; - left: -9999px; - z-index: 1010; - width: 100%; - border: 1px solid #aaa; - border-top: 0; - background: #fff; - box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15); -} -.chosen-container.chosen-with-drop .chosen-drop { - left: 0; -} -.chosen-container a { - cursor: pointer; -} -.chosen-container .search-choice .group-name, .chosen-container .chosen-single .group-name { - margin-right: 4px; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - font-weight: normal; - color: #999999; -} -.chosen-container .search-choice .group-name:after, .chosen-container .chosen-single .group-name:after { - content: ":"; - padding-left: 2px; - vertical-align: top; -} - -/* @end */ -/* @group Single Chosen */ -.chosen-container-single .chosen-single { - position: relative; - display: block; - overflow: hidden; - padding: 0 0 0 8px; - height: 25px; - border: 1px solid #aaa; - border-radius: 5px; - background-color: #fff; - background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #ffffff), color-stop(50%, #f6f6f6), color-stop(52%, #eeeeee), color-stop(100%, #f4f4f4)); - background: -webkit-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); - background: -moz-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); - background: -o-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); - background: linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); - background-clip: padding-box; - box-shadow: 0 0 3px white inset, 0 1px 1px rgba(0, 0, 0, 0.1); - color: #444; - text-decoration: none; - white-space: nowrap; - line-height: 24px; -} -.chosen-container-single .chosen-default { - color: #999; -} -.chosen-container-single .chosen-single span { - display: block; - overflow: hidden; - margin-right: 26px; - text-overflow: ellipsis; - white-space: nowrap; -} -.chosen-container-single .chosen-single-with-deselect span { - margin-right: 38px; -} -.chosen-container-single .chosen-single abbr { - position: absolute; - top: 6px; - right: 26px; - display: block; - width: 12px; - height: 12px; - background: url('chosen-sprite.png') -42px 1px no-repeat; - font-size: 1px; -} -.chosen-container-single .chosen-single abbr:hover { - background-position: -42px -10px; -} -.chosen-container-single.chosen-disabled .chosen-single abbr:hover { - background-position: -42px -10px; -} -.chosen-container-single .chosen-single div { - position: absolute; - top: 0; - right: 0; - display: block; - width: 18px; - height: 100%; -} -.chosen-container-single .chosen-single div b { - display: block; - width: 100%; - height: 100%; - background: url('chosen-sprite.png') no-repeat 0px 2px; -} -.chosen-container-single .chosen-search { - position: relative; - z-index: 1010; - margin: 0; - padding: 3px 4px; - white-space: nowrap; -} -.chosen-container-single .chosen-search input[type="text"] { - margin: 1px 0; - padding: 4px 20px 4px 5px; - width: 100%; - height: auto; - outline: 0; - border: 1px solid #aaa; - background: white url('chosen-sprite.png') no-repeat 100% -20px; - background: url('chosen-sprite.png') no-repeat 100% -20px; - font-size: 1em; - font-family: sans-serif; - line-height: normal; - border-radius: 0; -} -.chosen-container-single .chosen-drop { - margin-top: -1px; - border-radius: 0 0 4px 4px; - background-clip: padding-box; -} -.chosen-container-single.chosen-container-single-nosearch .chosen-search { - position: absolute; - left: -9999px; -} - -/* @end */ -/* @group Results */ -.chosen-container .chosen-results { - color: #444; - position: relative; - overflow-x: hidden; - overflow-y: auto; - margin: 0 4px 4px 0; - padding: 0 0 0 4px; - max-height: 240px; - -webkit-overflow-scrolling: touch; -} -.chosen-container .chosen-results li { - display: none; - margin: 0; - padding: 5px 6px; - list-style: none; - line-height: 15px; - word-wrap: break-word; - -webkit-touch-callout: none; -} -.chosen-container .chosen-results li.active-result { - display: list-item; - cursor: pointer; -} -.chosen-container .chosen-results li.disabled-result { - display: list-item; - color: #ccc; - cursor: default; -} -.chosen-container .chosen-results li.highlighted { - background-color: #3875d7; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); - background-image: -webkit-linear-gradient(#3875d7 20%, #2a62bc 90%); - background-image: -moz-linear-gradient(#3875d7 20%, #2a62bc 90%); - background-image: -o-linear-gradient(#3875d7 20%, #2a62bc 90%); - background-image: linear-gradient(#3875d7 20%, #2a62bc 90%); - color: #fff; -} -.chosen-container .chosen-results li.no-results { - color: #777; - display: list-item; - background: #f4f4f4; -} -.chosen-container .chosen-results li.group-result { - display: list-item; - font-weight: bold; - cursor: default; -} -.chosen-container .chosen-results li.group-option { - padding-left: 15px; -} -.chosen-container .chosen-results li em { - font-style: normal; - text-decoration: underline; -} - -/* @end */ -/* @group Multi Chosen */ -.chosen-container-multi .chosen-choices { - position: relative; - overflow: hidden; - margin: 0; - padding: 0 5px; - width: 100%; - height: auto !important; - height: 1%; - border: 1px solid #aaa; - background-color: #fff; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff)); - background-image: -webkit-linear-gradient(#eeeeee 1%, #ffffff 15%); - background-image: -moz-linear-gradient(#eeeeee 1%, #ffffff 15%); - background-image: -o-linear-gradient(#eeeeee 1%, #ffffff 15%); - background-image: linear-gradient(#eeeeee 1%, #ffffff 15%); - cursor: text; -} -.chosen-container-multi .chosen-choices li { - float: left; - list-style: none; -} -.chosen-container-multi .chosen-choices li.search-field { - margin: 0; - padding: 0; - white-space: nowrap; -} -.chosen-container-multi .chosen-choices li.search-field input[type="text"] { - margin: 1px 0; - padding: 0; - height: 25px; - outline: 0; - border: 0 !important; - background: transparent !important; - box-shadow: none; - color: #999; - font-size: 100%; - font-family: sans-serif; - line-height: normal; - border-radius: 0; -} -.chosen-container-multi .chosen-choices li.search-choice { - position: relative; - margin: 3px 5px 3px 0; - padding: 3px 20px 3px 5px; - border: 1px solid #aaa; - max-width: 100%; - border-radius: 3px; - background-color: #eeeeee; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee)); - background-image: -webkit-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); - background-image: -moz-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); - background-image: -o-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); - background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); - background-size: 100% 19px; - background-repeat: repeat-x; - background-clip: padding-box; - box-shadow: 0 0 2px white inset, 0 1px 0 rgba(0, 0, 0, 0.05); - color: #333; - line-height: 13px; - cursor: default; -} -.chosen-container-multi .chosen-choices li.search-choice span { - word-wrap: break-word; -} -.chosen-container-multi .chosen-choices li.search-choice .search-choice-close { - position: absolute; - top: 4px; - right: 3px; - display: block; - width: 12px; - height: 12px; - background: url('chosen-sprite.png') -42px 1px no-repeat; - font-size: 1px; -} -.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover { - background-position: -42px -10px; -} -.chosen-container-multi .chosen-choices li.search-choice-disabled { - padding-right: 5px; - border: 1px solid #ccc; - background-color: #e4e4e4; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee)); - background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); - background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); - background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); - background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); - color: #666; -} -.chosen-container-multi .chosen-choices li.search-choice-focus { - background: #d4d4d4; -} -.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close { - background-position: -42px -10px; -} -.chosen-container-multi .chosen-results { - margin: 0; - padding: 0; -} -.chosen-container-multi .chosen-drop .result-selected { - display: list-item; - color: #ccc; - cursor: default; -} - -/* @end */ -/* @group Active */ -.chosen-container-active .chosen-single { - border: 1px solid #5897fb; - box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); -} -.chosen-container-active.chosen-with-drop .chosen-single { - border: 1px solid #aaa; - -moz-border-radius-bottomright: 0; - border-bottom-right-radius: 0; - -moz-border-radius-bottomleft: 0; - border-bottom-left-radius: 0; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #eeeeee), color-stop(80%, #ffffff)); - background-image: -webkit-linear-gradient(#eeeeee 20%, #ffffff 80%); - background-image: -moz-linear-gradient(#eeeeee 20%, #ffffff 80%); - background-image: -o-linear-gradient(#eeeeee 20%, #ffffff 80%); - background-image: linear-gradient(#eeeeee 20%, #ffffff 80%); - box-shadow: 0 1px 0 #fff inset; -} -.chosen-container-active.chosen-with-drop .chosen-single div { - border-left: none; - background: transparent; -} -.chosen-container-active.chosen-with-drop .chosen-single div b { - background-position: -18px 2px; -} -.chosen-container-active .chosen-choices { - border: 1px solid #5897fb; - box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); -} -.chosen-container-active .chosen-choices li.search-field input[type="text"] { - color: #222 !important; -} - -/* @end */ -/* @group Disabled Support */ -.chosen-disabled { - opacity: 0.5 !important; - cursor: default; -} -.chosen-disabled .chosen-single { - cursor: default; -} -.chosen-disabled .chosen-choices .search-choice .search-choice-close { - cursor: default; -} - -/* @end */ -/* @group Right to Left */ -.chosen-rtl { - text-align: right; -} -.chosen-rtl .chosen-single { - overflow: visible; - padding: 0 8px 0 0; -} -.chosen-rtl .chosen-single span { - margin-right: 0; - margin-left: 26px; - direction: rtl; -} -.chosen-rtl .chosen-single-with-deselect span { - margin-left: 38px; -} -.chosen-rtl .chosen-single div { - right: auto; - left: 3px; -} -.chosen-rtl .chosen-single abbr { - right: auto; - left: 26px; -} -.chosen-rtl .chosen-choices li { - float: right; -} -.chosen-rtl .chosen-choices li.search-field input[type="text"] { - direction: rtl; -} -.chosen-rtl .chosen-choices li.search-choice { - margin: 3px 5px 3px 0; - padding: 3px 5px 3px 19px; -} -.chosen-rtl .chosen-choices li.search-choice .search-choice-close { - right: auto; - left: 4px; -} -.chosen-rtl.chosen-container-single-nosearch .chosen-search, -.chosen-rtl .chosen-drop { - left: 9999px; -} -.chosen-rtl.chosen-container-single .chosen-results { - margin: 0 0 4px 4px; - padding: 0 4px 0 0; -} -.chosen-rtl .chosen-results li.group-option { - padding-right: 15px; - padding-left: 0; -} -.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div { - border-right: none; -} -.chosen-rtl .chosen-search input[type="text"] { - padding: 4px 5px 4px 20px; - background: white url('chosen-sprite.png') no-repeat -30px -20px; - background: url('chosen-sprite.png') no-repeat -30px -20px; - direction: rtl; -} -.chosen-rtl.chosen-container-single .chosen-single div b { - background-position: 6px 2px; -} -.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b { - background-position: -12px 2px; -} - -/* @end */ -/* @group Retina compatibility */ -@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 144dpi), only screen and (min-resolution: 1.5dppx) { - .chosen-rtl .chosen-search input[type="text"], - .chosen-container-single .chosen-single abbr, - .chosen-container-single .chosen-single div b, - .chosen-container-single .chosen-search input[type="text"], - .chosen-container-multi .chosen-choices .search-choice .search-choice-close, - .chosen-container .chosen-results-scroll-down span, - .chosen-container .chosen-results-scroll-up span { - background-image: url('chosen-sprite@2x.png') !important; - background-size: 52px 37px !important; - background-repeat: no-repeat !important; - } -} -/* @end */ diff --git a/css/chosen.min.css b/css/chosen.min.css new file mode 100644 index 00000000..5ca6159c --- /dev/null +++ b/css/chosen.min.css @@ -0,0 +1,3 @@ +/* Chosen v1.4.2 | (c) 2011-2015 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */ + +.chosen-container{position:relative;display:inline-block;vertical-align:middle;font-size:13px;zoom:1;*display:inline;-webkit-user-select:none;-moz-user-select:none;user-select:none}.chosen-container *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.chosen-container .chosen-drop{position:absolute;top:100%;left:-9999px;z-index:1010;width:100%;border:1px solid #aaa;border-top:0;background:#fff;box-shadow:0 4px 5px rgba(0,0,0,.15)}.chosen-container.chosen-with-drop .chosen-drop{left:0}.chosen-container a{cursor:pointer}.chosen-container .search-choice .group-name,.chosen-container .chosen-single .group-name{margin-right:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:400;color:#999}.chosen-container .search-choice .group-name:after,.chosen-container .chosen-single .group-name:after{content:":";padding-left:2px;vertical-align:top}.chosen-container-single .chosen-single{position:relative;display:block;overflow:hidden;padding:0 0 0 8px;height:25px;border:1px solid #aaa;border-radius:5px;background-color:#fff;background:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#fff),color-stop(50%,#f6f6f6),color-stop(52%,#eee),color-stop(100%,#f4f4f4));background:-webkit-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:-moz-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:-o-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background-clip:padding-box;box-shadow:0 0 3px #fff inset,0 1px 1px rgba(0,0,0,.1);color:#444;text-decoration:none;white-space:nowrap;line-height:24px}.chosen-container-single .chosen-default{color:#999}.chosen-container-single .chosen-single span{display:block;overflow:hidden;margin-right:26px;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:6px;right:26px;display:block;width:12px;height:12px;background:url(chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-single .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single.chosen-disabled .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;width:18px;height:100%}.chosen-container-single .chosen-single div b{display:block;width:100%;height:100%;background:url(chosen-sprite.png) no-repeat 0 2px}.chosen-container-single .chosen-search{position:relative;z-index:1010;margin:0;padding:3px 4px;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{margin:1px 0;padding:4px 20px 4px 5px;width:100%;height:auto;outline:0;border:1px solid #aaa;background:#fff url(chosen-sprite.png) no-repeat 100% -20px;background:url(chosen-sprite.png) no-repeat 100% -20px;font-size:1em;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-single .chosen-drop{margin-top:-1px;border-radius:0 0 4px 4px;background-clip:padding-box}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;left:-9999px}.chosen-container .chosen-results{color:#444;position:relative;overflow-x:hidden;overflow-y:auto;margin:0 4px 4px 0;padding:0 0 0 4px;max-height:240px;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;margin:0;padding:5px 6px;list-style:none;line-height:15px;word-wrap:break-word;-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{background-color:#3875d7;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#3875d7),color-stop(90%,#2a62bc));background-image:-webkit-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:-moz-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:-o-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:linear-gradient(#3875d7 20%,#2a62bc 90%);color:#fff}.chosen-container .chosen-results li.no-results{color:#777;display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;overflow:hidden;margin:0;padding:0 5px;width:100%;height:auto!important;height:1%;border:1px solid #aaa;background-color:#fff;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(1%,#eee),color-stop(15%,#fff));background-image:-webkit-linear-gradient(#eee 1%,#fff 15%);background-image:-moz-linear-gradient(#eee 1%,#fff 15%);background-image:-o-linear-gradient(#eee 1%,#fff 15%);background-image:linear-gradient(#eee 1%,#fff 15%);cursor:text}.chosen-container-multi .chosen-choices li{float:left;list-style:none}.chosen-container-multi .chosen-choices li.search-field{margin:0;padding:0;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{margin:1px 0;padding:0;height:25px;outline:0;border:0!important;background:transparent!important;box-shadow:none;color:#999;font-size:100%;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-multi .chosen-choices li.search-choice{position:relative;margin:3px 5px 3px 0;padding:3px 20px 3px 5px;border:1px solid #aaa;max-width:100%;border-radius:3px;background-color:#eee;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-o-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-size:100% 19px;background-repeat:repeat-x;background-clip:padding-box;box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);color:#333;line-height:13px;cursor:default}.chosen-container-multi .chosen-choices li.search-choice span{word-wrap:break-word}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:4px;right:3px;display:block;width:12px;height:12px;background:url(chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{background-position:-42px -10px}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;border:1px solid #ccc;background-color:#e4e4e4;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-o-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);color:#666}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{margin:0;padding:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #aaa;-moz-border-radius-bottomright:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#eee),color-stop(80%,#fff));background-image:-webkit-linear-gradient(#eee 20%,#fff 80%);background-image:-moz-linear-gradient(#eee 20%,#fff 80%);background-image:-o-linear-gradient(#eee 20%,#fff 80%);background-image:linear-gradient(#eee 20%,#fff 80%);box-shadow:0 1px 0 #fff inset}.chosen-container-active.chosen-with-drop .chosen-single div{border-left:0;background:transparent}.chosen-container-active.chosen-with-drop .chosen-single div b{background-position:-18px 2px}.chosen-container-active .chosen-choices{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#222!important}.chosen-disabled{opacity:.5!important;cursor:default}.chosen-disabled .chosen-single{cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close{cursor:default}.chosen-rtl{text-align:right}.chosen-rtl .chosen-single{overflow:visible;padding:0 8px 0 0}.chosen-rtl .chosen-single span{margin-right:0;margin-left:26px;direction:rtl}.chosen-rtl .chosen-single-with-deselect span{margin-left:38px}.chosen-rtl .chosen-single div{right:auto;left:3px}.chosen-rtl .chosen-single abbr{right:auto;left:26px}.chosen-rtl .chosen-choices li{float:right}.chosen-rtl .chosen-choices li.search-field input[type=text]{direction:rtl}.chosen-rtl .chosen-choices li.search-choice{margin:3px 5px 3px 0;padding:3px 5px 3px 19px}.chosen-rtl .chosen-choices li.search-choice .search-choice-close{right:auto;left:4px}.chosen-rtl.chosen-container-single-nosearch .chosen-search,.chosen-rtl .chosen-drop{left:9999px}.chosen-rtl.chosen-container-single .chosen-results{margin:0 0 4px 4px;padding:0 4px 0 0}.chosen-rtl .chosen-results li.group-option{padding-right:15px;padding-left:0}.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div{border-right:0}.chosen-rtl .chosen-search input[type=text]{padding:4px 5px 4px 20px;background:#fff url(chosen-sprite.png) no-repeat -30px -20px;background:url(chosen-sprite.png) no-repeat -30px -20px;direction:rtl}.chosen-rtl.chosen-container-single .chosen-single div b{background-position:6px 2px}.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b{background-position:-12px 2px}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:144dpi),only screen and (min-resolution:1.5dppx){.chosen-rtl .chosen-search input[type=text],.chosen-container-single .chosen-single abbr,.chosen-container-single .chosen-single div b,.chosen-container-single .chosen-search input[type=text],.chosen-container-multi .chosen-choices .search-choice .search-choice-close,.chosen-container .chosen-results-scroll-down span,.chosen-container .chosen-results-scroll-up span{background-image:url(chosen-sprite@2x.png)!important;background-size:52px 37px!important;background-repeat:no-repeat!important}} \ No newline at end of file diff --git a/css/css.php b/css/css.php index 998dae0f..4c3919c9 100644 --- a/css/css.php +++ b/css/css.php @@ -35,12 +35,14 @@ $cssFilesBase = array( array('href' => 'css/jquery-ui.structure.min.css', 'min' => false), array('href' => 'css/jquery.powertip.css', 'min' => true), array('href' => 'css/jquery.powertip-yellow.min.css', 'min' => true), - array('href' => 'css/chosen.css', 'min' => true), + array('href' => 'css/chosen.min.css', 'min' => true), + array('href' => 'css/chosen-custom.css', 'min' => true), array('href' => 'css/alertify.core.css', 'min' => true), array('href' => 'css/alertify.default.css', 'min' => true), array('href' => 'css/jquery.tagsinput.css', 'min' => true), array('href' => 'css/jquery.fancybox.css', 'min' => true), array('href' => 'css/fonts.css', 'min' => true), + array('href' => 'css/material-icons.css', 'min' => true), ); if (file_exists($themeCssPath)){ diff --git a/css/fonts.css b/css/fonts.css index 379bb287..e6e15126 100644 --- a/css/fonts.css +++ b/css/fonts.css @@ -1,10 +1,11 @@ @font-face { - font-family: 'Register'; + font-family: 'Material Icons'; font-style: normal; font-weight: 400; - src: url("../imgs/register.eot"); /* For IE6-8 */ - src: local('Register'), - local('Register'), - url("../imgs/register.woff2") format('woff2'), - url("../imgs/register.ttf") format('truetype'); + src: url("MaterialIcons-Regular.eot"); /* For IE6-8 */ + src: local('Material Icons'), + local('MaterialIcons-Regular'), + url("MaterialIcons-Regular.woff2") format('woff2'), + url("MaterialIcons-Regular.woff") format('woff'), + url("MaterialIcons-Regular.ttf") format('truetype'); } \ No newline at end of file diff --git a/css/material-icons.css b/css/material-icons.css new file mode 100644 index 00000000..96d822f2 --- /dev/null +++ b/css/material-icons.css @@ -0,0 +1,36 @@ +.material-icons { + font-family: 'Material Icons'; + font-weight: normal; + font-style: normal; + font-size: 24px; /* Preferred icon size */ + display: inline-block; + width: 1em; + height: 1em; + line-height: 1; + text-transform: none; + letter-spacing: normal; + word-wrap: normal; + + /* Support for all WebKit browsers. */ + -webkit-font-smoothing: antialiased; + /* Support for Safari and Chrome. */ + text-rendering: optimizeLegibility; + + /* Support for Firefox. */ + -moz-osx-font-smoothing: grayscale; + + /* Support for IE. */ + font-feature-settings: 'liga'; +} + +.material-icons.md-18 { font-size: 18px; } +.material-icons.md-24 { font-size: 24px; } +.material-icons.md-36 { font-size: 36px; } +.material-icons.md-48 { font-size: 48px; } +.material-icons.md-60 { font-size: 60px; } + +.material-icons.md-dark { color: rgba(0, 0, 0, 0.54); } +.material-icons.md-dark.md-inactive { color: rgba(0, 0, 0, 0.26); } + +.material-icons.md-light { color: rgba(255, 255, 255, 1); } +.material-icons.md-light.md-inactive { color: rgba(255, 255, 255, 0.3); } \ No newline at end of file diff --git a/imgs/preferences.png b/imgs/preferences.png new file mode 100644 index 0000000000000000000000000000000000000000..0c7d119a63134e5ef8672f5a845b1d84f4cdacb5 GIT binary patch literal 1808 zcmV+r2k-caP)P&uwOUa&{FNkrtP_ zKl-j-ecCxc-e=Ct`DXBcrEQON-L!Sh@~yvm^xoHY{N$lMzkh1&`aRp$Pr`p8GN$0~ zcSV(yzwtcp&Pb$=BpXslBfj3>!GBn#B0?zz;d{iXSikt~ zrq#PvZhE0Ot^mRpD;d}DozD3vd%y=De27#1XHZ|ZU?$371aK-904nX+_U!<6jO!9O zt~+DyoEy;GoWs=}9aypQUaVMkKW<;zg>Nrg5!B_Fee+yMDIlbnG44x1DUCJMCqbA7 zLK#2^(wPhh;{XVx?;w+F!qll#aP(+CG424G#%;qe0Kx)O5Rec8goXfw1f~=dTPEW4 zslM?Ac>kp*ZnbT%kwKy=RVxaR5+Hz5)v;tEis`MBzBR4@ob!Ax8;>X`K*=yn1r?!1 z;M%y9pg~QG#H~xEo;w~w? z1Jtt6QVdUT$0X&^zPa3ELJt*aM}0ty~MzDMGnLNY8=_EI+ed zfT$DzrJnttwPFQ4EnLTzjs@YAAp?ugY!}1ua;flPcGmY^AOBWdQ*O@czGHuQdRGdn z3sOKa4iEw*1bo-Qq2s6b;tItvMh&`pUXGNIHY3%Bgz6{wk5hw)r<#u83PmwSO`6g+ zP~aKlKM7|1@uxV{a~21B2Edce$Tc;OV3ekHZX#`qH^*jlJ<)#6-A~@ow&cgtoA1~d z&)v3>Troh*Ok`Wz+R>11LfMumdlcEGDabYEP#24vsHuI)V-3x@?D}ucpL3{l>7rwc zmo0kl&aTDz1-H&Sn46HOTfJaq>)3@Z?2K$xxV*U#Q~)r^ieqVpb|KBgPd@t!j` zQA+RQj4jnQ5+@f<;B@yPoIBGW24^PZ&^T=-V$CyPd&0VV%PZ%3WBWu`RQJbY3!Ctb znJw7;UJriy#y~ixF@m$*A06yF(KFxQ_p_l(0RDdPgvmI)FJkDc4TE>+8iztvhR$J^ zF2E`dgAj^nGK0EUEEw0YZP&Ya@o)uNBwFi|3VR;D7LBO{y8F+g>$wA;Z(ItAgYWEn zTzKw=ivZsI^U)<{Jo0=x6;H?N3~d3kY$sFaHU8`iIav>_bWw_6=179u2uhE|W4@b%Ru=8;?a$ELEUu z8ZIw_j>%d4>90YLQ0W>#6muI(fL*}J3k0w9n}GDg^*4sQ^AS{5+xxbZ_|S0WAQT%9PsG=oT)cfI z0+31=ZjR)SXN}T#PrUl%z(t+#=iBzA3CL{Ith+gzGOx|1&8e}dk%$VJMoO7fO2wssE+8}jih=o*!6lRyA=L<@WDtxDXv!(X y^z!79ihcEn<;A7MS*37z*mC=Rx#0nUQTiu-S1&heRiJqQ0000getAccountId(), false)) { - $log->addDescription(_('Error al actualizar el historial')); - $log->writeLog(); + $Log->addDescription(_('Error al actualizar el historial')); + $Log->writeLog(); return false; } - $log->setAction(_('Actualizar Cuenta')); + $Log->setAction(_('Actualizar Cuenta')); if (!Groups::updateGroupsForAccount($this->getAccountId(), $this->getAccountUserGroupsId())) { - $log->addDescription(_('Error al actualizar los grupos secundarios')); - $log->writeLog(); - $log->resetDescription(); + $Log->addDescription(_('Error al actualizar los grupos secundarios')); + $Log->writeLog(); + $Log->resetDescription(); } - if (!Users::updateUsersForAccount($this->getAccountId(), $this->getAccountUsersId())) { - $log->addDescription(_('Error al actualizar los usuarios de la cuenta')); - $log->writeLog(); - $log->resetDescription(); + if (!UserUtil::updateUsersForAccount($this->getAccountId(), $this->getAccountUsersId())) { + $Log->addDescription(_('Error al actualizar los usuarios de la cuenta')); + $Log->writeLog(); + $Log->resetDescription(); } $query = 'UPDATE accounts SET ' @@ -159,11 +159,11 @@ class Account extends AccountBase implements AccountInterface $accountInfo = array('customer_name'); $this->getAccountInfoById($accountInfo); - $log->addDescription(Html::strongText(_('Cliente') . ': ') . $this->_cacheParams['customer_name']); - $log->addDescription(Html::strongText(_('Cuenta') . ': ') . $this->getAccountName() . " (" . $this->getAccountId() . ")"); - $log->writeLog(); + $Log->addDescription(Html::strongText(_('Cliente') . ': ') . $this->_cacheParams['customer_name']); + $Log->addDescription(Html::strongText(_('Cuenta') . ': ') . $this->getAccountName() . " (" . $this->getAccountId() . ")"); + $Log->writeLog(); - Email::sendEmail($log); + Email::sendEmail($Log); return true; } @@ -176,12 +176,12 @@ class Account extends AccountBase implements AccountInterface */ public function restoreFromHistory($id) { - $log = new Log(__FUNCTION__); + $Log = new Log(__FUNCTION__); // Guardamos una copia de la cuenta en el histórico if (!AccountHistory::addHistory($this->getAccountId(), false)) { - $log->addDescription(_('Error al actualizar el historial')); - $log->writeLog(); + $Log->addDescription(_('Error al actualizar el historial')); + $Log->writeLog(); return false; } @@ -212,12 +212,12 @@ class Account extends AccountBase implements AccountInterface $accountInfo = array('customer_name', 'account_name'); $this->getAccountInfoById($accountInfo); - $log->setAction(_('Restaurar Cuenta')); - $log->addDescription(Html::strongText(_('Cliente') . ': ') . $this->_cacheParams['customer_name']); - $log->addDescription(Html::strongText(_('Cuenta') . ': ') . $this->_cacheParams['account_name'] . " (" . $this->getAccountId() . ")"); + $Log->setAction(_('Restaurar Cuenta')); + $Log->addDescription(Html::strongText(_('Cliente') . ': ') . $this->_cacheParams['customer_name']); + $Log->addDescription(Html::strongText(_('Cuenta') . ': ') . $this->_cacheParams['account_name'] . " (" . $this->getAccountId() . ")"); - $log->writeLog(); - Email::sendEmail($log); + $Log->writeLog(); + Email::sendEmail($Log); return true; } @@ -374,33 +374,33 @@ class Account extends AccountBase implements AccountInterface $this->setAccountId(DB::$lastId); - $log = new Log(__FUNCTION__); + $Log = new Log(__FUNCTION__); if (is_array($this->getAccountUserGroupsId())) { if (!Groups::addGroupsForAccount($this->getAccountId(), $this->getAccountUserGroupsId())) { - $log->addDescription(_('Error al actualizar los grupos secundarios')); - $log->writeLog(); - $log->resetDescription(); + $Log->addDescription(_('Error al actualizar los grupos secundarios')); + $Log->writeLog(); + $Log->resetDescription(); } } if (is_array($this->getAccountUsersId())) { - if (!Users::addUsersForAccount($this->getAccountId(), $this->getAccountUsersId())) { - $log->addDescription(_('Error al actualizar los usuarios de la cuenta')); - $log->writeLog(); - $log->resetDescription(); + if (!UserUtil::addUsersForAccount($this->getAccountId(), $this->getAccountUsersId())) { + $Log->addDescription(_('Error al actualizar los usuarios de la cuenta')); + $Log->writeLog(); + $Log->resetDescription(); } } $accountInfo = array('customer_name'); $this->getAccountInfoById($accountInfo); - $log->setAction(_('Nueva Cuenta')); - $log->addDescription(Html::strongText(_('Cliente') . ': ') . $this->_cacheParams['customer_name']); - $log->addDescription(Html::strongText(_('Cuenta') . ': ') . $this->getAccountName() . " (" . $this->getAccountId() . ")"); - $log->writeLog(); + $Log->setAction(_('Nueva Cuenta')); + $Log->addDescription(Html::strongText(_('Cliente') . ': ') . $this->_cacheParams['customer_name']); + $Log->addDescription(Html::strongText(_('Cuenta') . ': ') . $this->getAccountName() . " (" . $this->getAccountId() . ")"); + $Log->writeLog(); - Email::sendEmail($log); + Email::sendEmail($Log); return true; } @@ -418,9 +418,9 @@ class Account extends AccountBase implements AccountInterface $accountInfo = array('account_name,customer_name'); $this->getAccountInfoById($accountInfo); - $log = new Log(_('Eliminar Cuenta')); - $log->addDescription(Html::strongText(_('Cliente') . ': ') . $this->_cacheParams['customer_name']); - $log->addDescription(Html::strongText(_('Cuenta') . ': ') . $this->_cacheParams['account_name'] . " (" . $this->getAccountId() . ")"); + $Log = new Log(_('Eliminar Cuenta')); + $Log->addDescription(Html::strongText(_('Cliente') . ': ') . $this->_cacheParams['customer_name']); + $Log->addDescription(Html::strongText(_('Cuenta') . ': ') . $this->_cacheParams['account_name'] . " (" . $this->getAccountId() . ")"); $query = 'DELETE FROM accounts WHERE account_id = :id LIMIT 1'; @@ -431,20 +431,20 @@ class Account extends AccountBase implements AccountInterface } if (!Groups::deleteGroupsForAccount($this->getAccountId())) { - $log->addDescription(_('Error al eliminar grupos asociados a la cuenta')); + $Log->addDescription(_('Error al eliminar grupos asociados a la cuenta')); } - if (!Users::deleteUsersForAccount($this->getAccountId())) { - $log->addDescription(_('Error al eliminar usuarios asociados a la cuenta')); + if (!UserUtil::deleteUsersForAccount($this->getAccountId())) { + $Log->addDescription(_('Error al eliminar usuarios asociados a la cuenta')); } if (!Files::deleteAccountFiles($this->getAccountId())) { - $log->addDescription(_('Error al eliminar archivos asociados a la cuenta')); + $Log->addDescription(_('Error al eliminar archivos asociados a la cuenta')); } - $log->writeLog(); + $Log->writeLog(); - Email::sendEmail($log); + Email::sendEmail($Log); return true; } @@ -492,22 +492,22 @@ class Account extends AccountBase implements AccountInterface $demoEnabled = Util::demoIsEnabled(); $errorCount = 0; - $log = new Log(_('Actualizar Clave Maestra')); - $log->addDescription(_('Inicio')); - $log->writeLog(); - $log->resetDescription(); + $Log = new Log(_('Actualizar Clave Maestra')); + $Log->addDescription(_('Inicio')); + $Log->writeLog(); + $Log->resetDescription(); if (!Crypt::checkCryptModule()) { - $log->addDescription(_('Error en el módulo de encriptación')); - $log->writeLog(); + $Log->addDescription(_('Error en el módulo de encriptación')); + $Log->writeLog(); return false; } $accountsPass = $this->getAccountsPassData(); if (!$accountsPass) { - $log->addDescription(_('Error al obtener las claves de las cuentas')); - $log->writeLog(); + $Log->addDescription(_('Error al obtener las claves de las cuentas')); + $Log->writeLog(); return false; } @@ -522,12 +522,12 @@ class Account extends AccountBase implements AccountInterface } if (strlen($account->account_pass) === 0){ - $log->addDescription(_('Clave de cuenta vacía') . ' (' . $account->account_id . ') ' . $account->account_name); + $Log->addDescription(_('Clave de cuenta vacía') . ' (' . $account->account_id . ') ' . $account->account_name); continue; } if (strlen($account->account_IV) < 32) { - $log->addDescription(_('IV de encriptación incorrecto') . ' (' . $account->account_id . ') ' . $account->account_name); + $Log->addDescription(_('IV de encriptación incorrecto') . ' (' . $account->account_id . ') ' . $account->account_name); } $decryptedPass = Crypt::getDecrypt($account->account_pass, $currentMasterPass, $account->account_IV); @@ -536,13 +536,13 @@ class Account extends AccountBase implements AccountInterface if ($this->getAccountPass() === false) { $errorCount++; - $log->addDescription(_('No es posible desencriptar la clave de la cuenta') . ' (' . $account->account_id . ') ' . $account->account_name); + $Log->addDescription(_('No es posible desencriptar la clave de la cuenta') . ' (' . $account->account_id . ') ' . $account->account_name); continue; } if (!$this->updateAccountPass(true)) { $errorCount++; - $log->addDescription(_('Fallo al actualizar la clave de la cuenta') . ' (' . $this->getAccountId() . ') ' . $account->acchistory_name); + $Log->addDescription(_('Fallo al actualizar la clave de la cuenta') . ' (' . $this->getAccountId() . ') ' . $account->acchistory_name); continue; } @@ -550,21 +550,21 @@ class Account extends AccountBase implements AccountInterface } // Vaciar el array de mensajes de log - if (count($log->getDescription()) > 0) { - $log->writeLog(); - $log->resetDescription(); + if (count($Log->getDescription()) > 0) { + $Log->writeLog(); + $Log->resetDescription(); } if ($accountsOk) { - $log->addDescription(_('Cuentas actualizadas') . ': ' . implode(',', $accountsOk)); - $log->writeLog(); - $log->resetDescription(); + $Log->addDescription(_('Cuentas actualizadas') . ': ' . implode(',', $accountsOk)); + $Log->writeLog(); + $Log->resetDescription(); } - $log->addDescription(_('Fin')); - $log->writeLog(); + $Log->addDescription(_('Fin')); + $Log->writeLog(); - Email::sendEmail($log); + Email::sendEmail($Log); return true; } @@ -625,14 +625,14 @@ class Account extends AccountBase implements AccountInterface */ public function updateAccountPass($isMassive = false, $isRestore = false) { - $log = new Log(__FUNCTION__); + $Log = new Log(__FUNCTION__); // No actualizar el histórico si es por cambio de clave maestra o restauración if (!$isMassive && !$isRestore) { // Guardamos una copia de la cuenta en el histórico if (!AccountHistory::addHistory($this->getAccountId(), false)) { - $log->addDescription(_('Error al actualizar el historial')); - $log->writeLog(); + $Log->addDescription(_('Error al actualizar el historial')); + $Log->writeLog(); return false; } } @@ -660,12 +660,12 @@ class Account extends AccountBase implements AccountInterface $accountInfo = array('customer_name', 'account_name'); $this->getAccountInfoById($accountInfo); - $log->setAction(_('Modificar Clave')); - $log->addDescription(Html::strongText(_('Cliente') . ': ') . $this->_cacheParams['customer_name']); - $log->addDescription(Html::strongText(_('Cuenta') . ': ') . $this->_cacheParams['account_name'] . " (" . $this->getAccountId() . ")"); - $log->writeLog(); + $Log->setAction(_('Modificar Clave')); + $Log->addDescription(Html::strongText(_('Cliente') . ': ') . $this->_cacheParams['customer_name']); + $Log->addDescription(Html::strongText(_('Cuenta') . ': ') . $this->_cacheParams['account_name'] . " (" . $this->getAccountId() . ")"); + $Log->writeLog(); - Email::sendEmail($log); + Email::sendEmail($Log); } return true; diff --git a/inc/AccountBase.class.php b/inc/AccountBase.class.php index 85963b53..9aec3adf 100644 --- a/inc/AccountBase.class.php +++ b/inc/AccountBase.class.php @@ -301,7 +301,7 @@ abstract class AccountBase if (!isset($cacheUsers[$accId]) || time() > $cacheUsers['expires'] ) { - $cacheUsers[$accId] = Users::getUsersForAccount($accId); + $cacheUsers[$accId] = UserUtil::getUsersForAccount($accId); $cacheUsers['expires'] = time() + self::CACHE_EXPIRE_TIME; } diff --git a/inc/AccountSearch.class.php b/inc/AccountSearch.class.php index c1144763..301dd6b2 100644 --- a/inc/AccountSearch.class.php +++ b/inc/AccountSearch.class.php @@ -304,18 +304,26 @@ class AccountSearch } if (!$isAdmin && !$this->getGlobalSearch()) { - $arrFilterUser[] = 'account_userGroupId = :userGroupId'; + $subQueryGroupsA = '(SELECT user_groupId FROM usrData WHERE user_id = :userIduA UNION ALL SELECT usertogroup_groupId FROM usrToGroups WHERE usertogroup_userId = :userIdgA)'; + $subQueryGroupsB = '(SELECT user_groupId FROM usrData WHERE user_id = :userIduB UNION ALL SELECT usertogroup_groupId FROM usrToGroups WHERE usertogroup_userId = :userIdgB)'; + + $arrFilterUser[] = 'account_userGroupId IN ' . $subQueryGroupsA; + $arrFilterUser[] = 'accgroup_groupId IN ' . $subQueryGroupsB; $arrFilterUser[] = 'account_userId = :userId'; - $arrFilterUser[] = 'accgroup_groupId = :accgroup_groupId'; $arrFilterUser[] = 'accuser_userId = :accuser_userId'; // Usuario/Grupo principal de la cuenta $data['userId'] = Session::getUserId(); $data['accuser_userId'] = Session::getUserId(); + $data['userIduA'] = Session::getUserId(); + $data['userIduB'] = Session::getUserId(); + $data['userIdgA'] = Session::getUserId(); + $data['userIdgB'] = Session::getUserId(); + // Usuario/Grupo secundario de la cuenta - $data['userGroupId'] = Session::getUserGroupId(); - $data['accgroup_groupId'] = Session::getUserGroupId(); +// $data['userGroupId'] = Session::getUserGroupId(); +// $data['accgroup_groupId'] = Session::getUserGroupId(); $arrQueryWhere[] = '(' . implode(' OR ', $arrFilterUser) . ')'; } @@ -338,6 +346,8 @@ class AccountSearch $query = $querySelect . ' ' . $queryOrder . ' ' . $queryLimit; } +// print_r($query); + // Obtener el número total de cuentas visibles por el usuario DB::setFullRowCount(); diff --git a/inc/Acl.class.php b/inc/Acl.class.php index ffc79614..9a09eb92 100644 --- a/inc/Acl.class.php +++ b/inc/Acl.class.php @@ -165,18 +165,27 @@ class Acl implements Controller\ActionsInterface $userId = Session::getUserId(); $userIsAdminApp = Session::getUserIsAdminApp(); $userIsAdminAcc = Session::getUserIsAdminAcc(); + $userToGroups = false; + + foreach($accountData['groups_id'] as $groupId){ + $users = Groups::getUsersForGroup($groupId); + + if ($userGroupId === $groupId || in_array($userId, $users)){ + $userToGroups = true; + } + } $okView = ($userId == $accountData['user_id'] || $userGroupId == $accountData['group_id'] || in_array($userId, $accountData['users_id']) - || in_array($userGroupId, $accountData['groups_id']) + || $userToGroups || $userIsAdminApp || $userIsAdminAcc); $okEdit = ($userId == $accountData['user_id'] || $userGroupId == $accountData['group_id'] || (in_array($userId, $accountData['users_id']) && $accountData['otheruser_edit']) - || (in_array($userGroupId, $accountData['groups_id']) && $accountData['othergroup_edit']) + || (userToGroups && $accountData['othergroup_edit']) || $userIsAdminApp || $userIsAdminAcc); diff --git a/inc/Auth.class.php b/inc/Auth.class.php index 3d7cfa8c..1f0291dd 100644 --- a/inc/Auth.class.php +++ b/inc/Auth.class.php @@ -148,8 +148,8 @@ class Auth */ public static function authUserMySQL($userLogin, $userPass) { - if (Users::checkUserIsMigrate($userLogin)) { - if (!Users::migrateUser($userLogin, $userPass)) { + if (UserUtil::checkUserIsMigrate($userLogin)) { + if (!UserUtil::migrateUser($userLogin, $userPass)) { return false; } } @@ -175,10 +175,10 @@ class Auth */ public static function mailPassRecover($login, $email) { - if (Users::checkUserMail($login, $email) - && !Users::checkUserIsDisabled($login) - && !Users::checkUserIsLDAP($login) - && !Users::checkPassRecoverLimit($login) + if (UserUtil::checkUserMail($login, $email) + && !UserUtil::checkUserIsDisabled($login) + && !UserLdap::checkUserIsLDAP($login) + && !UserUtil::checkPassRecoverLimit($login) ) { $hash = Util::generate_random_bytes(); @@ -192,7 +192,7 @@ class Auth $log->addDescription(''); $log->addDescription(_('Si no ha solicitado esta acción, ignore este mensaje.')); - return (Email::sendEmail($log, $email, false) && Users::addPassRecover($login, $hash)); + return (Email::sendEmail($log, $email, false) && UserUtil::addPassRecover($login, $hash)); } else { return false; } diff --git a/inc/Auth2FA.class.php b/inc/Auth2FA.class.php index e68f823d..cee8524f 100644 --- a/inc/Auth2FA.class.php +++ b/inc/Auth2FA.class.php @@ -25,6 +25,8 @@ namespace SP\Auth; +use SP\UserUtil; + defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); /** @@ -129,7 +131,7 @@ class Auth2FA private function genUserInitializationKey() { - $userIV = \SP\Users::getUserIVById($this->_userId); + $userIV = UserUtil::getUserIVById($this->_userId); $base32 = new \Base2n(5, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567', false, true, true); $key = substr($base32->encode($userIV), 0, 16); diff --git a/inc/Common.class.php b/inc/Common.class.php index 96147170..e63f1db5 100644 --- a/inc/Common.class.php +++ b/inc/Common.class.php @@ -96,52 +96,6 @@ class Common exit(json_encode($json)); } - /** - * Devuelve un icono de ayuda con el mensaje. - * - * @param int $type tipo de mensaje - * @param int $id id del mensaje - * @return string Con la etiqueta html del icono de ayuda - */ - public static function printHelpButton($type, $id) - { - $msgHelp[0] = _('Indicar el usuario de conexión a la base de datos de phpPMS'); - $msgHelp[1] = _('Indicar el nombre de la base de datos de phpPMS'); - $msgHelp[2] = _('Indicar el servidor de la base de datos de phpPMS'); - $msgHelp[3] = _('Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles de la cuenta'); - $msgHelp[4] = _('Número de resultados por página a mostrar, al realizar una búsqueda'); - $msgHelp[5] = _('Habilita la subida/descarga de archivos para las cuentas'); - $msgHelp[6] = _('Establece el tamaño máximo para subir archivos') . "

    " . _('El máximo absuluto es de 16MB'); - $msgHelp[7] = _('Habilita la opción de añadir un enlace a Wiki externa para los resultados de la búsqueda'); - $msgHelp[8] = _('URL que utiliza la wiki para realizar una búsqueda de una página en esta') . "

    " . _('Como parámetro se utiliza el nombre del cliente') . "

    " . _('Ejemplo') . ":

    https://wiki.cygnux.org/search.php?phrase="; - $msgHelp[9] = _('URL que utiliza la wiki para acceder a los detalles de una página de ésta') . "

    " . _('El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda de la Wiki') . "

    " . _('Ejemplo') . ":

    https://wiki.cygnux.org/show.php?name="; - $msgHelp[10] = _('Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki') . "

    " . _('Ejemplos') . ": serv- | srv- | vm-"; - $msgHelp[11] = _('Habilita de autentificación mediante servidor LDAP') . "

    " . _('Este método utilizará MySQL en caso de fallo'); - $msgHelp[12] = _('Usuario para conectar con el servicio de LDAP') . "

    " . _('Ejemplo') . ":

    cn=syspass,ou=Users,dc=cygnux,o=org"; - $msgHelp[13] = _('Base en la que realizar la búsqueda de usuarios de LDAP') . "

    " . _('Ejemplo') . ":

    dc=cygnux,o=org"; - $msgHelp[14] = _('Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso') . "

    " . _('Ejemplo') . ":

    cn=GRP_SPUSERS,ou=USERS | GRP_SPUSERS"; - $msgHelp[15] = _('Nombre o dirección IP del servidor de LDAP'); - $msgHelp[16] = _('Establece una nueva clave maestra sin re-encriptar las cuentas'); - $msgHelp[17] = _('Clave del usuario de conexión a LDAP'); - $msgHelp[18] = _('En este modo no se puede acceder a la aplicación. Para deshabilitarlo es necesario modificar el archivo de configuración'); - $msgHelp[19] = _('Muestra información relativa a la configuración de la aplicación y rendimiento'); - $msgHelp[20] = _('Guarda las acciones realizadas en la aplicación'); - $msgHelp[21] = _('Comprobar actualizaciones de la aplicación (sólo para los usuarios administradores)'); - $msgHelp[22] = _('Extensiones de máximo 4 caracteres.') . "

    " . _('Escribir extensión y pulsar intro para añadir.'); - $msgHelp[23] = _('Importar desde KeePass o KeePassX. El nombre del cliente será igual a KeePass o KeePassX') . "

    " . _('Importar desde un archivo CSV con el formato') . ":

    " . _('nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas') . "

    " . _('Si el cliente o la categoría no están creados, se crean automáticamente.'); - $msgHelp[24] = _('Permite que las cuentas sin acceso sean visibles sólo para las búsquedas.'); - $msgHelp[25] = _('Muestra los resultados de búsqueda de cuentas en formato tarjeta.'); - $msgHelp[26] = _('Habilita el modo de conexión con LDAP de Active Directory.'); - $msgHelp[27] = _('Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP.'); - $msgHelp[28] = _('Define el perfil de usuario por defecto para los nuevos usuarios de LDAP.'); - $msgHelp[29] = _('Define el usuario por defecto para las cuentas importadas.'); - $msgHelp[30] = _('Define el grupo por defecto para las cuentas importadas.'); - - if (array_key_exists($id, $msgHelp)) { - return ''; - } - } - /** * Devuelve un hash para verificación de formularios. * Esta función genera un hash que permite verificar la autenticidad de un formulario diff --git a/inc/DB.class.php b/inc/DB.class.php index ae854839..59cb393c 100644 --- a/inc/DB.class.php +++ b/inc/DB.class.php @@ -183,6 +183,7 @@ class DB $db->_querySource = $querySource; $db->_stData = $data; $doQuery = $db->doQuery($query, $querySource, self::$_returnRawData); + self::$lastNumRows = (self::$_fullRowCount === false) ? $db->_numRows : $db->getFullRowCount($query); } catch (SPException $e) { self::logDBException($query, $e->getMessage(), $e->getCode(), $querySource); return false; @@ -192,8 +193,6 @@ class DB return $doQuery; } - DB::$lastNumRows = (self::$_fullRowCount === false) ? $db->_numRows : $db->getFullRowCount($query); - if ($db->_numRows == 0) { self::resetVars(); return false; @@ -259,7 +258,7 @@ class DB * * @param &$query string La consulta a realizar * @param $isCount bool Indica si es una consulta de contador de registros - * @return bool + * @return bool|\PDOStatement * @throws SPException */ private function prepareQueryData(&$query, $isCount = false) @@ -325,9 +324,10 @@ class DB */ private static function logDBException($query, $errorMsg, $errorCode, $querySource) { - $message['action'] = $querySource; - $message['text'][] = $errorMsg . '(' . $errorCode . ')'; - $message['text'][] = "SQL: " . self::escape($query); + $Log = new Log($querySource); + $Log->addDescription($errorMsg . '(' . $errorCode . ')'); + $Log->addDescription("SQL: " . self::escape($query)); + $Log->writeLog(); error_log($query); error_log($errorMsg); @@ -366,10 +366,12 @@ class DB $num = 0; $patterns = array( '/(LIMIT|ORDER BY|GROUP BY).*/i', - '/SELECT DISTINCT\s([\w_]+),.* FROM/i', - '/SELECT [\w_]+,.* FROM/i' + '/SELECT DISTINCT\s([\w_]+),.* FROM/iU', + '/SELECT [\w_]+,.* FROM/iU', ); - $replace = array('', 'SELECT COUNT(DISTINCT \1) FROM', 'SELECT COUNT(*) FROM'); + $replace = array('', 'SELECT COUNT(DISTINCT \1) FROM', 'SELECT COUNT(*) FROM', ''); + + preg_match('/SELECT DISTINCT\s([\w_]*),.*\sFROM\s([\w_]*)\s(LEFT|RIGHT|WHERE).*/iU', $query, $match); $query = preg_replace($patterns, $replace, $query); diff --git a/inc/Groups.class.php b/inc/Groups.class.php index 101a4ee2..b368672a 100644 --- a/inc/Groups.class.php +++ b/inc/Groups.class.php @@ -133,9 +133,10 @@ class Groups /** * Añadir un nuevo grupo. * + * @param $users array Los usuario del grupo * @return bool */ - public static function addGroup() + public static function addGroup($users) { $query = 'INSERT INTO usrGroups SET usergroup_name = :name, usergroup_description = :description'; @@ -148,17 +149,92 @@ class Groups self::$queryLastId = DB::$lastId; - Log::writeNewLogAndEmail(_('Nuevo Grupo'), Html::strongText(_('Grupo') . ': ') . self::$groupName); + $Log = new Log(_('Nuevo Grupo')); + + if (!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; } /** - * Modificar un grupo. + * 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 updateGroup() + 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); @@ -174,7 +250,16 @@ class Groups self::$queryLastId = DB::$lastId; - Log::writeNewLogAndEmail(_('Modificar Grupo'), Html::strongText(_('Grupo') . ': ') . $groupName . ' > ' . self::$groupName); + $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; } @@ -200,6 +285,47 @@ class Groups return $queryRes->usergroup_name; } + /** + * 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. * @@ -219,7 +345,16 @@ class Groups self::$queryLastId = DB::$lastId; - Log::writeNewLogAndEmail(_('Eliminar Grupo'), Html::strongText(_('Grupo') . ': ') . $groupName); + $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; } @@ -243,9 +378,11 @@ class Groups */ private static function getGroupInUsers() { - $query = 'SELECT user_groupId FROM usrData WHERE user_groupId = :id'; + $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['id'] = self::$groupId; + $data['idu'] = self::$groupId; + $data['idg'] = self::$groupId; DB::getQuery($query, __FUNCTION__, $data); @@ -415,10 +552,9 @@ class Groups } foreach ($queryRes as $group) { - $groups[] = $group->accgroup_groupId; + $groups[] = (int)$group->accgroup_groupId; } return $groups; } - } diff --git a/inc/Installer.class.php b/inc/Installer.class.php index ec18d193..2fb7185b 100644 --- a/inc/Installer.class.php +++ b/inc/Installer.class.php @@ -434,32 +434,32 @@ class Installer , _('Informe al desarrollador')); } - $user = new Users; + $User = new User(); // Establecer el id de grupo del usuario al recién creado - $user->userGroupId = Groups::$queryLastId; + $User->userGroupId = Groups::$queryLastId; - $profile = new Profile(); + $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); + $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()) { + if (!$Profile->profileAdd()) { self::rollback(); throw new SPException(SPException::SP_CRITICAL @@ -468,15 +468,15 @@ class Installer } // Datos del usuario - $user->userLogin = self::$_username; - $user->userPass = self::$_password; - $user->userName = 'Admin'; - $user->userProfileId = $profile->getId(); - $user->userIsAdminApp = 1; - $user->userIsAdminAcc = 0; - $user->userIsDisabled = 0; + $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()) { + if (!$User->addUser()) { self::rollback(); throw new SPException(SPException::SP_CRITICAL @@ -489,7 +489,7 @@ class Installer Config::setArrConfigValue('lastupdatempass', time()); Config::writeConfigDb(true); - if (!$user->updateUserMPass(self::$_masterPassword, false)) { + if (!UserUtil::updateUserMPass($User->getUserId(), $User->getUserPass(), self::$_masterPassword)) { self::rollback(); throw new SPException(SPException::SP_CRITICAL diff --git a/inc/Upgrade.class.php b/inc/Upgrade.class.php index 2e698577..9349ac9f 100644 --- a/inc/Upgrade.class.php +++ b/inc/Upgrade.class.php @@ -110,6 +110,7 @@ class Upgrade $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(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_accountId` (`usertogroup_userId`) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;'; break; default : $log->addDescription(_('No es necesario actualizar la Base de Datos.')); @@ -220,7 +221,7 @@ class Upgrade private static function auxUpgrades($version){ switch ($version){ case 12001: - return Profile::migrateProfiles(); + return (Profile::migrateProfiles() && UserUtil::migrateUsersGroup()); break; default: break; diff --git a/inc/User.class.php b/inc/User.class.php new file mode 100644 index 00000000..f906d646 --- /dev/null +++ b/inc/User.class.php @@ -0,0 +1,128 @@ +. + * + */ + +namespace SP; + +defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); + +/** + * Class User + * + * @package SP + */ +class User extends UserBase +{ + /** + * Actualizar la clave maestra del usuario en la BBDD. + * + * @param string $masterPwd con la clave maestra + * @return bool + */ + public function updateUserMPass($masterPwd) + { + $configMPass = Config::getConfigDbValue('masterPwd'); + + if (!$configMPass) { + return false; + } + + if (Crypt::checkHashPass($masterPwd, $configMPass)) { + $strUserMPwd = Crypt::mkCustomMPassEncrypt(self::getCypherPass($this->_userPass), $masterPwd); + + if (!$strUserMPwd) { + return false; + } + } else { + return false; + } + + $query = 'UPDATE usrData SET ' + . 'user_mPass = :mPass,' + . 'user_mIV = :mIV,' + . 'user_lastUpdateMPass = UNIX_TIMESTAMP() ' + . 'WHERE user_id = :id LIMIT 1'; + + $data['mPass'] = $strUserMPwd[0]; + $data['mIV'] = $strUserMPwd[1]; + $data['id'] = $this->_userId; + + return DB::getQuery($query, __FUNCTION__, $data); + } + + /** + * Obtener una clave de cifrado basada en la clave del usuario y un salt. + * + * @return string con la clave de cifrado + */ + private function getCypherPass() + { + $configSalt = Config::getConfigDbValue('passwordsalt'); + $cypherPass = substr(sha1($configSalt . $this->_userPass), 0, 32); + + return $cypherPass; + } + + /** + * Desencriptar la clave maestra del usuario para la sesión. + * + * @param bool $showPass opcional, para devolver la clave desencriptada + * @return false|string Devuelve bool se hay error o string si se devuelve la clave + */ + public function getUserMPass($showPass = false) + { + $query = 'SELECT user_mPass, user_mIV FROM usrData WHERE user_id = :id LIMIT 1'; + + $data['id'] = $this->_userId; + + $queryRes = DB::getResults($query, __FUNCTION__, $data); + + if ($queryRes === false) { + return false; + } + + if ($queryRes->user_mPass && $queryRes->user_mIV) { + $clearMasterPass = Crypt::getDecrypt($queryRes->user_mPass, $this->getCypherPass(), $queryRes->user_mIV); + + if (!$clearMasterPass) { + return false; + } + + if ($showPass == true) { + return $clearMasterPass; + } else { + $mPassPwd = Util::generate_random_bytes(32); + Session::setMPassPwd($mPassPwd); + + $sessionMasterPass = Crypt::mkCustomMPassEncrypt($mPassPwd, $clearMasterPass); + + Session::setMPass($sessionMasterPass[0]); + Session::setMPassIV($sessionMasterPass[1]); + return true; + } + } + + return false; + } +} \ No newline at end of file diff --git a/inc/UserBase.class.php b/inc/UserBase.class.php new file mode 100644 index 00000000..f00d34f7 --- /dev/null +++ b/inc/UserBase.class.php @@ -0,0 +1,596 @@ +. + * + */ + +namespace SP; + +/** + * Class UserBase + * + * @package SP + */ +abstract class UserBase +{ + /** + * @var int + */ + var $queryLastId = 0; + /** + * @var int + */ + protected $_userId = 0; + /** + * @var string + */ + protected $_userName = ''; + /** + * @var int + */ + protected $_userGroupId = 0; + /** + * @var string + */ + protected $_userGroupName = ''; + /** + * @var string + */ + protected $_userLogin = ''; + /** + * @var string + */ + protected $_userPass = ''; + /** + * @var string + */ + protected $_userEmail = ''; + /** + * @var string + */ + protected $_userNotes = ''; + /** + * @var int + */ + protected $_userProfileId = 0; + /** + * @var bool + */ + protected $_userIsAdminApp = false; + /** + * @var bool + */ + protected $_userIsAdminAcc = false; + /** + * @var bool + */ + protected $_userIsDisabled = false; + /** + * @var bool + */ + protected $_userIsLdap = false; + /** + * @var bool + */ + protected $_userChangePass = false; + + /** + * @return int + */ + public function getUserId() + { + return $this->_userId; + } + + /** + * @param int $_userId + */ + public function setUserId($_userId) + { + $this->_userId = $_userId; + } + + /** + * @return string + */ + public function getUserName() + { + return $this->_userName; + } + + /** + * @param string $_userName + */ + public function setUserName($_userName) + { + $this->_userName = $_userName; + } + + /** + * @return int + */ + public function getUserGroupId() + { + return $this->_userGroupId; + } + + /** + * @param int $_userGroupId + */ + public function setUserGroupId($_userGroupId) + { + $this->_userGroupId = $_userGroupId; + } + + /** + * @return string + */ + public function getUserGroupName() + { + return $this->_userGroupName; + } + + /** + * @param string $_userGroupName + */ + public function setUserGroupName($_userGroupName) + { + $this->_userGroupName = $_userGroupName; + } + + /** + * @return string + */ + public function getUserLogin() + { + return $this->_userLogin; + } + + /** + * @param string $_userLogin + */ + public function setUserLogin($_userLogin) + { + $this->_userLogin = $_userLogin; + } + + /** + * @return string + */ + public function getUserPass() + { + return $this->_userPass; + } + + /** + * @param string $_userPass + */ + public function setUserPass($_userPass) + { + $this->_userPass = $_userPass; + } + + /** + * @return string + */ + public function getUserEmail() + { + return $this->_userEmail; + } + + /** + * @param string $_userEmail + */ + public function setUserEmail($_userEmail) + { + $this->_userEmail = $_userEmail; + } + + /** + * @return string + */ + public function getUserNotes() + { + return $this->_userNotes; + } + + /** + * @param string $_userNotes + */ + public function setUserNotes($_userNotes) + { + $this->_userNotes = $_userNotes; + } + + /** + * @return int + */ + public function getUserProfileId() + { + return $this->_userProfileId; + } + + /** + * @param int $_userProfileId + */ + public function setUserProfileId($_userProfileId) + { + $this->_userProfileId = $_userProfileId; + } + + /** + * @return boolean + */ + public function isUserIsAdminApp() + { + return $this->_userIsAdminApp; + } + + /** + * @param boolean $_userIsAdminApp + */ + public function setUserIsAdminApp($_userIsAdminApp) + { + $this->_userIsAdminApp = $_userIsAdminApp; + } + + /** + * @return boolean + */ + public function isUserIsAdminAcc() + { + return $this->_userIsAdminAcc; + } + + /** + * @param boolean $_userIsAdminAcc + */ + public function setUserIsAdminAcc($_userIsAdminAcc) + { + $this->_userIsAdminAcc = $_userIsAdminAcc; + } + + /** + * @return boolean + */ + public function isUserIsDisabled() + { + return $this->_userIsDisabled; + } + + /** + * @param boolean $_userIsDisabled + */ + public function setUserIsDisabled($_userIsDisabled) + { + $this->_userIsDisabled = $_userIsDisabled; + } + + /** + * @return boolean + */ + public function isUserIsLdap() + { + return $this->_userIsLdap; + } + + /** + * @param boolean $_userIsLdap + */ + public function setUserIsLdap($_userIsLdap) + { + $this->_userIsLdap = $_userIsLdap; + } + + /** + * @return boolean + */ + public function isUserChangePass() + { + return $this->_userChangePass; + } + + /** + * @param boolean $_userChangePass + */ + public function setUserChangePass($_userChangePass) + { + $this->_userChangePass = $_userChangePass; + } + + /** + * @return int + */ + public function getQueryLastId() + { + return $this->queryLastId; + } + + /** + * @param int $queryLastId + */ + public function setQueryLastId($queryLastId) + { + $this->queryLastId = $queryLastId; + } + + /** + * Crear un usuario. + * + * @return bool + */ + public function addUser() + { + $passdata = UserUtil::makeUserPass($this->_userPass); + + $query = 'INSERT INTO usrData SET ' + . 'user_name = :name,' + . 'user_login = :login,' + . 'user_email = :email,' + . 'user_notes = :notes,' + . 'user_groupId = :groupId,' + . 'user_profileId = :profileId,' + . 'user_mPass = \'\',' + . 'user_mIV = \'\',' + . 'user_isAdminApp = :isAdminApp,' + . 'user_isAdminAcc = :isAdminAcc,' + . 'user_isDisabled = :isDisabled,' + . 'user_isChangePass = :isChangePass,' + . 'user_pass = :pass,' + . 'user_hashSalt = :salt,' + . 'user_isLdap = 0'; + + $data['name'] = $this->_userName; + $data['login'] = $this->_userLogin; + $data['email'] = $this->_userEmail; + $data['notes'] = $this->_userNotes; + $data['groupId'] = $this->_userGroupId; + $data['profileId'] = $this->_userProfileId; + $data['isAdminApp'] = $this->_userIsAdminApp; + $data['isAdminAcc'] = $this->_userIsAdminAcc; + $data['isDisabled'] = $this->_userIsDisabled; + $data['isChangePass'] = $this->_userChangePass; + $data['pass'] = $passdata['pass']; + $data['salt'] = $passdata['salt']; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { + return false; + } + + $this->_userId = DB::getLastId(); + + $Log = new Log(_('Nuevo Usuario')); + $Log->addDescription(sprintf('%s : %s (%s)', Html::strongText(_('Usuario')), $this->_userName, $this->_userLogin)); + + if ($this->_userChangePass) { + if (!Auth::mailPassRecover(DB::escape($this->_userLogin), DB::escape($this->_userEmail))) { + $Log->addDescription(Html::strongText(_('No se pudo realizar la petición de cambio de clave.'))); + } + } + + $Log->writeLog(); + + Email::sendEmail($Log); + + return true; + } + + /** + * Obtener los datos de un usuario desde la BBDD. + * Esta función obtiene los datos de un usuario y los guarda en las variables de la clase. + * + * @return bool + */ + public function getUserInfo() + { + $query = 'SELECT user_id,' + . 'user_name,' + . 'user_groupId,' + . 'user_login,' + . 'user_email,' + . 'user_notes,' + . 'user_count,' + . 'user_profileId,' + . 'usergroup_name,' + . 'BIN(user_isAdminApp) AS user_isAdminApp,' + . 'BIN(user_isAdminAcc) AS user_isAdminAcc,' + . 'BIN(user_isLdap) AS user_isLdap,' + . 'BIN(user_isDisabled) AS user_isDisabled,' + . 'BIN(user_isChangePass) AS user_isChangePass ' + . 'FROM usrData ' + . 'LEFT JOIN usrGroups ON user_groupId = usergroup_id ' + . 'LEFT JOIN usrProfiles ON user_profileId = userprofile_id ' + . 'WHERE user_login = :login LIMIT 1'; + + $data['login'] = $this->_userLogin; + + $queryRes = DB::getResults($query, __FUNCTION__, $data); + + if ($queryRes === false) { + return false; + } + + $this->_userId = intval($queryRes->user_id); + $this->_userName = $queryRes->user_name; + $this->_userGroupId = intval($queryRes->user_groupId); + $this->_userGroupName = $queryRes->usergroup_name; + $this->_userEmail = $queryRes->user_email; + $this->_userProfileId = intval($queryRes->user_profileId); + $this->_userIsAdminApp = intval($queryRes->user_isAdminApp); + $this->_userIsAdminAcc = intval($queryRes->user_isAdminAcc); + $this->_userIsLdap = intval($queryRes->user_isLdap); + $this->_userChangePass = intval($queryRes->user_isChangePass); + + return true; + } + + /** + * Comprobar si un usuario/email existen en la BBDD. + * + * @return false|int Devuelve bool si error y int si existe el usuario/email + */ + public function checkUserExist() + { + $userLogin = strtoupper($this->_userLogin); + $userEmail = strtoupper($this->_userEmail); + + $query = 'SELECT user_login, user_email ' + . 'FROM usrData ' + . 'WHERE (UPPER(user_login) = :login ' + . 'OR UPPER(user_email) = :email) ' + . 'AND user_id != :id'; + + $data['login'] = $userLogin; + $data['email'] = $userEmail; + $data['id'] = $this->_userId; + + DB::setReturnArray(); + + $queryRes = DB::getResults($query, __FUNCTION__, $data); + + if ($queryRes === false) { + return false; + } + + foreach ($queryRes as $userData) { + $resULogin = strtoupper($userData->user_login); + $resUEmail = strtoupper($userData->user_email); + + if ($resULogin == $userLogin) { + return UserUtil::USER_LOGIN_EXIST; + } elseif ($resUEmail == $userEmail) { + return UserUtil::USER_MAIL_EXIST; + } + } + } + + /** + * Modificar un usuario. + * + * @return bool + */ + public function updateUser() + { + $query = 'UPDATE usrData SET ' + . 'user_name = :name,' + . 'user_login = :login,' + . 'user_email = :email,' + . 'user_notes = :notes,' + . 'user_groupId = :groupId,' + . 'user_profileId = :profileId,' + . 'user_isAdminApp = :isAdminApp,' + . 'user_isAdminAcc = :isAdminAcc,' + . 'user_isDisabled = :isDisabled,' + . 'user_isChangePass = :isChangePass,' + . 'user_lastUpdate = NOW() ' + . 'WHERE user_id = :id LIMIT 1'; + + $data['name'] = $this->_userName; + $data['login'] = $this->_userLogin; + $data['email'] = $this->_userEmail; + $data['notes'] = $this->_userNotes; + $data['groupId'] = $this->_userGroupId; + $data['profileId'] = $this->_userProfileId; + $data['isAdminApp'] = $this->_userIsAdminApp; + $data['isAdminAcc'] = $this->_userIsAdminAcc; + $data['isDisabled'] = $this->_userIsDisabled; + $data['isChangePass'] = $this->_userChangePass; + $data['id'] = $this->_userId; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { + return false; + } + + $this->queryLastId = DB::$lastId; + + $Log = new Log(_('Modificar Usuario')); + $Log->addDescription(sprintf('%s : %s (%s)', Html::strongText(_('Usuario')), $this->_userName, $this->_userLogin)); + + if ($this->_userChangePass) { + if (!Auth::mailPassRecover(DB::escape($this->_userLogin), DB::escape($this->_userEmail))) { + $Log->addDescription(Html::strongText(_('No se pudo realizar la petición de cambio de clave.'))); + } + } + + $Log->writeLog(); + + Email::sendEmail($Log); + + return true; + } + + /** + * Modificar la clave de un usuario. + * + * @return bool + */ + public function updateUserPass() + { + $passdata = UserUtil::makeUserPass($this->_userPass); + $userLogin = UserUtil::getUserLoginById($this->_userId); + + $query = 'UPDATE usrData SET ' + . 'user_pass = :pass,' + . 'user_hashSalt = :salt,' + . 'user_isChangePass = 0,' + . 'user_lastUpdate = NOW() ' + . 'WHERE user_id = :id LIMIT 1'; + + $data['pass'] = $passdata['pass']; + $data['salt'] = $passdata['salt']; + $data['id'] = $this->_userId; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { + return false; + } + + $this->queryLastId = DB::$lastId; + + Log::writeNewLogAndEmail(_('Modificar Clave Usuario'), sprintf('%s : %s', Html::strongText(_('Login')), $userLogin)); + + return true; + } + + /** + * Eliminar un usuario. + * + * @return bool + */ + public function deleteUser() + { + $userLogin = UserUtil::getUserLoginById($this->_userId); + + $query = 'DELETE FROM usrData WHERE user_id = :id LIMIT 1'; + + $data['id'] = $this->_userId; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { + return false; + } + + $this->queryLastId = DB::$lastId; + + Log::writeNewLogAndEmail(_('Eliminar Usuario'), sprintf('%s : %s', Html::strongText(_('Login')), $userLogin)); + + return true; + } +} \ No newline at end of file diff --git a/inc/UserLdap.class.php b/inc/UserLdap.class.php new file mode 100644 index 00000000..2ba56288 --- /dev/null +++ b/inc/UserLdap.class.php @@ -0,0 +1,149 @@ +. + * + */ + +namespace SP; + +defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); + +/** + * Class UserLdap + * + * @package SP + */ +class UserLdap +{ + /** + * Crear un nuevo usuario en la BBDD con los datos de LDAP. + * Esta función crea los usuarios de LDAP en la BBDD para almacenar infomación del mismo + * y utilizarlo en caso de fallo de LDAP + * + * @param User $User + * @return bool + */ + public static function newUserLDAP(User $User) + { + $passdata = UserUtil::makeUserPass($User->getUserPass()); + $groupId = Config::getValue('ldap_defaultgroup', 0); + $profileId = Config::getValue('ldap_defaultprofile', 0); + + $query = 'INSERT INTO usrData SET ' + . 'user_name = :name,' + . 'user_groupId = :groupId,' + . 'user_login = :login,' + . 'user_pass = :pass,' + . 'user_hashSalt = :hashSalt,' + . 'user_email = :email,' + . 'user_notes = :notes,' + . 'user_profileId = :profileId,' + . 'user_isLdap = 1,' + . 'user_isDisabled = :isDisabled'; + + $data['name'] = $User->getUserName(); + $data['login'] = $User->getUserLogin(); + $data['pass'] = $passdata['pass']; + $data['hashSalt'] = $passdata['hash']; + $data['email'] = $User->getUserEmail(); + $data['notes'] = 'LDAP'; + $data['groupId'] = $groupId; + $data['profileId'] = $profileId; + $data['isDisabled'] = ($groupId && $profileId); + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { + return false; + } + + if (!$groupId || !$profileId) { + $Log = new Log(_('Activación Cuenta')); + $Log->addDescription(_('Su cuenta está pendiente de activación.')); + $Log->addDescription(_('En breve recibirá un email de confirmación.')); + $Log->writeLog(); + + Email::sendEmail($Log, $User->getUserEmail(), false); + } + + Log::writeNewLogAndEmail(_('Nuevo usuario de LDAP'), sprintf("%s (%s)", $User->getUserName(), $User->getUserLogin())); + + return true; + } + + /** + * Actualiza los datos de los usuarios de LDAP en la BBDD. + * + * @return bool + */ + public static function updateLDAPUserInDB(User $User) + { + $passdata = UserUtil::makeUserPass($User->getUserPass()); + + $query = 'UPDATE usrData SET ' + . 'user_pass = :pass,' + . 'user_hashSalt = :hashSalt,' + . 'user_name = :name,' + . 'user_email = :email,' + . 'user_lastUpdate = NOW(),' + . 'user_isLdap = 1 ' + . 'WHERE user_id = :id LIMIT 1'; + + $data['pass'] = $passdata['pass']; + $data['hashSalt'] = $passdata['salt']; + $data['name'] = $User->getUserName(); + $data['email'] = $User->getUserEmail(); + $data['id'] = UserUtil::getUserIdByLogin($User->getUserLogin()); + + return DB::getQuery($query, __FUNCTION__, $data); + } + + /** + * Comprobar si un usuario autentifica mediante LDAP + * . + * + * @param string $userLogin con el login del usuario + * @return bool + */ + public static function checkUserIsLDAP($userLogin) + { + $query = 'SELECT BIN(user_isLdap) AS user_isLdap FROM usrData WHERE user_login = :login LIMIT 1'; + + $data['login'] = $userLogin; + + $queryRes = DB::getResults($query, __FUNCTION__, $data); + + return ($queryRes !== false && intval($queryRes->user_isLdap) === 1); + } + + /** + * Comprobar si los datos del usuario de LDAP están en la BBDD. + * + * @return bool + */ + public static function checkLDAPUserInDB($userId) + { + $query = 'SELECT user_login FROM usrData WHERE user_login = :login LIMIT 1'; + + $data['login'] = $userId; + + return (DB::getQuery($query, __FUNCTION__, $data) === true && DB::$lastNumRows === 1); + } +} \ No newline at end of file diff --git a/inc/UserPreferences.class.php b/inc/UserPreferences.class.php index 618a8528..03591913 100644 --- a/inc/UserPreferences.class.php +++ b/inc/UserPreferences.class.php @@ -25,6 +25,8 @@ namespace SP; +defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); + /** * Class UsersPreferences para la gestion de las preferencias de usuarios * diff --git a/inc/Users.class.php b/inc/UserUtil.class.php similarity index 55% rename from inc/Users.class.php rename to inc/UserUtil.class.php index 62b2f11c..4d70022b 100644 --- a/inc/Users.class.php +++ b/inc/UserUtil.class.php @@ -1,5 +1,4 @@ user_isMigrate == 1); + } + + /** + * Actualizar la clave de un usuario desde phpPMS. + * + * @param string $userLogin con el login del usuario + * @param string $userPass con la clave del usuario + * @return bool + * + * Esta función actualiza la clave de un usuario que ha sido migrado desde phpPMS + */ + public static function migrateUser($userLogin, $userPass) + { + $passdata = UserUtil::makeUserPass($userPass); + + $query = 'UPDATE usrData SET ' + . 'user_pass = :pass,' + . 'user_hashSalt = :salt,' + . 'user_lastUpdate = NOW(),' + . 'user_isMigrate = 0 ' + . 'WHERE user_login = :login ' + . 'AND user_isMigrate = 1 ' + . 'AND (user_pass = SHA1(CONCAT(user_hashSalt,:passOld)) ' + . 'OR user_pass = MD5(:passOldMd5)) LIMIT 1'; + + $data['pass'] = $passdata['pass']; + $data['salt'] = $passdata['salt']; + $data['login'] = $userLogin; + $data['passOld'] = $userPass; + $data['passOldMd5'] = $userPass; + + if (DB::getQuery($query, __FUNCTION__, $data) === false) { + return false; + } + + $log = new Log(__FUNCTION__); + $log->addDescription(_('Usuario actualizado')); + $log->addDescription('Login: ' . $userLogin); + $log->writeLog(); + + Email::sendEmail($log); + + return true; + } + + /** + * Crear la clave de un usuario. + * + * @param string $userPass con la clave del usuario + * @return array con la clave y salt del usuario + */ + public static function makeUserPass($userPass) + { + $salt = Crypt::makeHashSalt(); + $userPass = sha1($salt . $userPass); + + return array('salt' => $salt, 'pass' => $userPass); + } + + /** + * Comprobar si el usuario tiene actualizada la clave maestra actual. + * + * @param string $login opcional con el login del usuario + * @return bool + */ + public static function checkUserUpdateMPass($login = null) + { + $userId = (!is_null($login)) ? self::getUserIdByLogin($login) : Session::getUserId(); + + if ($userId === 0) { + return false; + } + + $configMPassTime = Config::getConfigDbValue('lastupdatempass'); + + if ($configMPassTime === false) { + return false; + } + + $query = 'SELECT user_lastUpdateMPass FROM usrData WHERE user_id = :id LIMIT 1'; + + $data['id'] = $userId; + + $queryRes = DB::getResults($query, __FUNCTION__, $data); + + return ($queryRes !== false && $queryRes->user_lastUpdateMPass > $configMPassTime); + + } + + /** + * Obtener el Id de usuario a partir del login. + * + * @param string $login con el login del usuario + * @return false|int con el Id del usuario + */ + public static function getUserIdByLogin($login) + { + $query = 'SELECT user_id FROM usrData WHERE user_login = :login LIMIT 1'; + + $data = array('login' => $login); + + $queryRes = DB::getResults($query, __FUNCTION__, $data); + + if ($queryRes === false) { + return false; + } + + return (int)$queryRes->user_id; + } + + /** + * Actualizar la asociación de grupos con cuentas. + * + * @param int $accountId con el Id de la cuenta + * @param array $usersId con los usuarios de la cuenta + * @return bool + */ + public static function updateUsersForAccount($accountId, $usersId) + { + if (self::deleteUsersForAccount($accountId, $usersId)) { + return self::addUsersForAccount($accountId, $usersId); + } + + return false; + } + + /** + * Eliminar la asociación de grupos con cuentas. + * + * @param int $accountId con el Id de la cuenta + * @param array $usersId opcional con los grupos de la cuenta + * @return bool + */ + public static function deleteUsersForAccount($accountId, $usersId = null) + { + $queryExcluded = ''; + + // Excluimos los usuarios actuales + if (is_array($usersId)) { + array_map('intval', $usersId); + $queryExcluded = 'AND accuser_userId NOT IN (' . implode(',', $usersId) . ')'; + } + + $query = 'DELETE FROM accUsers WHERE accuser_accountId = :id ' . $queryExcluded; + + $data['id'] = $accountId; + + return DB::getQuery($query, __FUNCTION__, $data); + } + + /** + * Crear asociación de grupos con cuentas. + * + * @param int $accountId con el Id de la cuenta + * @param array $usersId con los grupos de la cuenta + * @return bool + */ + public static function addUsersForAccount($accountId, $usersId) + { + if (!is_array($usersId)) { + return true; + } + + $values = ''; + + // Obtenemos los grupos actuales + $usersExcluded = self::getUsersForAccount($accountId); + + foreach ($usersId as $userId) { + // Excluimos los usuarios actuales + if (isset($usersExcluded) && is_array($usersExcluded) && in_array($userId, $usersExcluded)) { + continue; + } + + $values[] = '(' . (int)$accountId . ',' . (int)$userId . ')'; + } + + if (!is_array($values)) { + return true; + } + + $query = 'INSERT INTO accUsers (accuser_accountId, accuser_userId) VALUES ' . implode(',', $values); + + return DB::getQuery($query, __FUNCTION__); + } + + /** + * Obtiene el listado de usuarios de una cuenta. + * + * @param int $accountId con el id de la cuenta + * @return array con los id de usuarios de la cuenta + */ + public static function getUsersForAccount($accountId) + { + $query = 'SELECT accuser_userId FROM accUsers WHERE accuser_accountId = :id'; + + $data['id'] = $accountId; + + DB::setReturnArray(); + + $queryRes = DB::getResults($query, __FUNCTION__, $data); + + if ($queryRes === false) { + return array(); + } + + foreach ($queryRes as $user) { + $users[] = (int)$user->accuser_userId; + } + + return $users; + } + + /** + * Comprobar si un usuario está deshabilitado. + * + * @param string $userLogin con el login del usuario + * @return bool + */ + public static function checkUserIsDisabled($userLogin) + { + $query = 'SELECT BIN(user_isDisabled) AS user_isDisabled FROM usrData WHERE user_login = :login LIMIT 1'; + + $data['login'] = $userLogin; + + $queryRes = DB::getResults($query, __FUNCTION__, $data); + + return ($queryRes !== false && intval($queryRes->user_isDisabled) === 1); + } + + /** + * Comprobar el hash de recuperación de clave. + * + * @param string $hash con el hash de recuperación + * @return int con el Id del usuario + */ + public static function checkHashPassRecover($hash) + { + $query = 'SELECT userpassr_userId FROM usrPassRecover ' + . 'WHERE userpassr_hash = :hash ' + . 'AND userpassr_used = 0 ' + . 'AND userpassr_date >= :date ' + . 'ORDER BY userpassr_date DESC LIMIT 1'; + + $data['hash'] = $hash; + $data['date'] = time() - self::MAX_PASS_RECOVER_TIME; + + $queryRes = DB::getResults($query, __FUNCTION__, $data); + + if ($queryRes === false) { + return false; + } + + return $queryRes->userpassr_userId; + } + + /** + * Marcar como usado el hash de recuperación de clave. + * + * @param string $hash con el hash de recuperación + * @return bool + */ + public static function updateHashPassRecover($hash) + { + $query = 'UPDATE usrPassRecover SET userpassr_used = 1 WHERE userpassr_hash = :hash'; + + $data['hash'] = $hash; + + return DB::getQuery($query, __FUNCTION__, $data); + } + + /** + * Comprobar el límite de recuperaciones de clave. + * + * @param string $login con el login del usuario + * @return bool + */ + public static function checkPassRecoverLimit($login) + { + $query = 'SELECT userpassr_userId ' . + 'FROM usrPassRecover ' . + 'WHERE userpassr_userId = :id ' . + 'AND userpassr_used = 0 ' . + 'AND userpassr_date >= :date'; + + $data['login'] = self::getUserIdByLogin($login); + $data['date'] = time() - self::MAX_PASS_RECOVER_TIME; + + $db = new DB(); + $db->setParamData($data); + + return (DB::getQuery($query, __FUNCTION__, $data) === false || DB::$lastNumRows >= self::MAX_PASS_RECOVER_LIMIT); + } + + /** + * Obtiene el listado con el nombre de los usuarios de una cuenta. + * + * @param int $accountId con el id de la cuenta + * @return false|array con los nombres de los usuarios ordenados + */ + public static function getUsersNameForAccount($accountId) + { + $query = 'SELECT user_id,' + . 'user_login ' + . 'FROM accUsers ' + . 'JOIN usrData ON user_Id = accuser_userId ' + . 'WHERE accuser_accountId = :id'; + + $data['id'] = $accountId; + + DB::setReturnArray(); + + $queryRes = DB::getResults($query, __FUNCTION__, $data); + + if ($queryRes === false) { + return false; + } + + foreach ($queryRes as $users) { + $usersName[$users->user_id] = $users->user_login; + } + + asort($usersName, SORT_STRING); + + return $usersName; + } + + /** + * Comprobar si un usuario y email existen. + * + * @param string $login con el login del usuario + * @param string $email con el email del usuario + * @return bool + */ + public static function checkUserMail($login, $email) + { + $query = 'SELECT user_id FROM usrData WHERE user_login = :login AND user_email = :email LIMIT 1'; + + $data['login'] = $login; + $data['email'] = $email; + + return (DB::getQuery($query, __FUNCTION__, $data) === true && DB::$lastNumRows === 1); + } + + /** + * Obtener el email de un usuario. + * + * @param int $userId con el Id del usuario + * @return string con el email del usuario + */ + public static function getUserEmail($userId) + { + $query = 'SELECT user_email FROM usrData WHERE user_id = :id AND user_email IS NOT NULL LIMIT 1'; + + $data['id'] = $userId; + + $queryRes = DB::getResults($query, __FUNCTION__, $data); + + if ($queryRes === false) { + return false; + } + + return $queryRes->user_email; + } + + /** + * Insertar un registro de recuperación de clave. + * + * @param string $login con el login del usuario + * @param string $hash con el hash para el cambio + * @return bool + */ + public static function addPassRecover($login, $hash) + { + $query = 'INSERT INTO usrPassRecover SET ' + . 'userpassr_userId = :userId,' + . 'userpassr_hash = :hash,' + . 'userpassr_date = UNIX_TIMESTAMP(),' + . 'userpassr_used = 0'; + + $data['userId'] = self::getUserIdByLogin($login); + $data['hash'] = $hash; + + return DB::getQuery($query, __FUNCTION__, $data); + } + + /** + * Obtener el IV del usuario a partir del Id. + * + * @param int $id El id del usuario + * @return string El hash + */ + public static function getUserIVById($id) + { + $query = 'SELECT user_mIV FROM usrData WHERE user_id = :id LIMIT 1'; + + $data['id'] = $id; + + $queryRes = DB::getResults($query, __FUNCTION__, $data); + + if ($queryRes === false) { + return false; + } + + return $queryRes->user_mIV; + } + + /** + * Establece las variables de sesión del usuario. + * + * @param User $User + * @throws SPException + */ + public static function setUserSession(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())); + + self::setUserLastLogin($User->getUserId()); + } + + /** + * Actualiza el último inicio de sesión del usuario en la BBDD. + * + * @param $userId int El id del usuario + * @return bool + */ + private static function setUserLastLogin($userId) + { + $query = 'UPDATE usrData SET user_lastLogin = NOW(),user_count = user_count + 1 WHERE user_id = :id LIMIT 1'; + + $data['id'] = $userId; + + return DB::getQuery($query, __FUNCTION__, $data); + } + + /** + * Comprueba la clave maestra del usuario. + * + * @param User $User + * @return bool + */ + public static function checkUserMPass(User $User) + { + $userMPass = $User->getUserMPass(true); + + if ($userMPass === false) { + return false; + } + + $configMPass = Config::getConfigDbValue('masterPwd'); + + if ($configMPass === false) { + return false; + } + + // Comprobamos el hash de la clave del usuario con la guardada + return Crypt::checkHashPass($userMPass, $configMPass); + } /** * Obtener los datos de un usuario. @@ -175,704 +648,17 @@ class Users return DB::getResults($query, __FUNCTION__, $data); } - /** - * Comprobar si un usuario está migrado desde phpPMS. - * - * @param string $userLogin con el login del usuario - * @return bool - */ - public static function checkUserIsMigrate($userLogin) - { - $query = 'SELECT BIN(user_isMigrate) AS user_isMigrate FROM usrData WHERE user_login = :login LIMIT 1'; - - $data['login'] = $userLogin; - - $queryRes = DB::getResults($query, __FUNCTION__, $data); - - return ($queryRes !== false && $queryRes->user_isMigrate == 1); - } - - /** - * Actualizar la clave de un usuario desde phpPMS. - * - * @param string $userLogin con el login del usuario - * @param string $userPass con la clave del usuario - * @return bool - * - * Esta función actualiza la clave de un usuario que ha sido migrado desde phpPMS - */ - public static function migrateUser($userLogin, $userPass) - { - $passdata = Users::makeUserPass($userPass); - - $query = 'UPDATE usrData SET ' - . 'user_pass = :pass,' - . 'user_hashSalt = :salt,' - . 'user_lastUpdate = NOW(),' - . 'user_isMigrate = 0 ' - . 'WHERE user_login = :login ' - . 'AND user_isMigrate = 1 ' - . 'AND (user_pass = SHA1(CONCAT(user_hashSalt,:passOld)) ' - . 'OR user_pass = MD5(:passOldMd5)) LIMIT 1'; - - $data['pass'] = $passdata['pass']; - $data['salt'] = $passdata['salt']; - $data['login'] = $userLogin; - $data['passOld'] = $userPass; - $data['passOldMd5'] = $userPass; - - if (DB::getQuery($query, __FUNCTION__, $data) === false) { - return false; - } - - $log = new Log(__FUNCTION__); - $log->addDescription(_('Usuario actualizado')); - $log->addDescription('Login: ' . $userLogin); - $log->writeLog(); - - Email::sendEmail($log); - - return true; - } - - /** - * Crear la clave de un usuario. - * - * @param string $userPass con la clave del usuario - * @return array con la clave y salt del usuario - */ - private static function makeUserPass($userPass) - { - $salt = Crypt::makeHashSalt(); - $userPass = sha1($salt . $userPass); - - return array('salt' => $salt, 'pass' => $userPass); - } - - /** - * Comprobar si el usuario tiene actualizada la clave maestra actual. - * - * @param string $login opcional con el login del usuario - * @return bool - */ - public static function checkUserUpdateMPass($login = null) - { - $userId = (!is_null($login)) ? self::getUserIdByLogin($login) : Session::getUserId(); - - if ($userId === 0){ - return false; - } - - $configMPassTime = Config::getConfigDbValue('lastupdatempass'); - - if ($configMPassTime === false) { - return false; - } - - $query = 'SELECT user_lastUpdateMPass FROM usrData WHERE user_id = :id LIMIT 1'; - - $data['id'] = $userId; - - $queryRes = DB::getResults($query, __FUNCTION__, $data); - - return ($queryRes !== false && $queryRes->user_lastUpdateMPass > $configMPassTime); - - } - - /** - * 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; - } - - /** - * 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; - } - - /** - * 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[] = $user->accuser_userId; - } - - return $users; - } - - /** - * 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); - -// $userId = self::getUserIdByLogin($login); -// return ($userId && self::getUserEmail($userId) == $email); - } - - /** - * Obtener el email de un usuario. - * - * @param int $userId con el Id del usuario - * @return string con el email del usuario - */ - public static function getUserEmail($userId) - { - $query = 'SELECT user_email FROM usrData WHERE user_id = :id AND user_email IS NOT NULL LIMIT 1'; - - $data['id'] = $userId; - - $queryRes = DB::getResults($query, __FUNCTION__, $data); - - if ($queryRes === false) { - return false; - } - - return $queryRes->user_email; - } - - /** - * Insertar un registro de recuperación de clave. - * - * @param string $login con el login del usuario - * @param string $hash con el hash para el cambio - * @return bool - */ - public static function addPassRecover($login, $hash) - { - $query = 'INSERT INTO usrPassRecover SET ' - . 'userpassr_userId = :userId,' - . 'userpassr_hash = :hash,' - . 'userpassr_date = UNIX_TIMESTAMP(),' - . 'userpassr_used = 0'; - - $data['userId'] = self::getUserIdByLogin($login); - $data['hash'] = $hash; - - return DB::getQuery($query, __FUNCTION__, $data); - } - - /** - * 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); - - return ($queryRes !== false && intval($queryRes->user_isDisabled) === 1); - } - - /** - * 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 el hash de recuperación de clave. - * - * @param string $hash con el hash de recuperación - * @return int con el Id del usuario - */ - public static function checkHashPassRecover($hash) - { - $query = 'SELECT userpassr_userId FROM usrPassRecover ' - . 'WHERE userpassr_hash = :hash ' - . 'AND userpassr_used = 0 ' - . 'AND userpassr_date >= :date ' - . 'ORDER BY userpassr_date DESC LIMIT 1'; - - $data['hash'] = $hash; - $data['date'] = time() - self::MAX_PASS_RECOVER_TIME; - - $queryRes = DB::getResults($query, __FUNCTION__, $data); - - if ($queryRes === false) { - return false; - } - - return $queryRes->userpassr_userId; - } - - /** - * Marcar como usado el hash de recuperación de clave. - * - * @param string $hash con el hash de recuperación - * @return bool - */ - public static function updateHashPassRecover($hash) - { - $query = 'UPDATE usrPassRecover SET userpassr_used = 1 WHERE userpassr_hash = :hash'; - - $data['hash'] = $hash; - - return DB::getQuery($query, __FUNCTION__, $data); - } - - /** - * Comprobar el límite de recuperaciones de clave. - * - * @param string $login con el login del usuario - * @return bool - */ - public static function checkPassRecoverLimit($login) - { - $query = 'SELECT userpassr_userId ' . - 'FROM usrPassRecover ' . - 'WHERE userpassr_userId = :id ' . - 'AND userpassr_used = 0 ' . - 'AND userpassr_date >= :date'; - - $data['login'] = self::getUserIdByLogin($login); - $data['date'] = time() - self::MAX_PASS_RECOVER_TIME; - - $db = new DB(); - $db->setParamData($data); - - return (DB::getQuery($query, __FUNCTION__, $data) === false || DB::$lastNumRows >= self::MAX_PASS_RECOVER_LIMIT); - //return ($db->getFullRowCount($query) >= self::MAX_PASS_RECOVER_LIMIT); - } - - /** - * 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 Users::USER_LOGIN_EXIST; - } elseif ($resUEmail == $userEmail) { - return Users::USER_MAIL_EXIST; - } - } - } - - /** - * Comprobar si los datos del usuario de LDAP están en la BBDD. - * - * @return bool - */ - public function checkLDAPUserInDB() - { - $query = 'SELECT user_login FROM usrData WHERE user_login = :login LIMIT 1'; - - $data['login'] = $this->userLogin; - - return (DB::getQuery($query, __FUNCTION__, $data) === true && DB::$lastNumRows === 1); -// return ($queryRes === true && $db->getFullRowCount($query) === 1); - } - - /** - * 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 - * - * @return bool - */ - public function newUserLDAP() - { - $passdata = Users::makeUserPass($this->userPass); - - $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 = 0'; - - $data['name'] = $this->userName; - $data['login'] = $this->userLogin; - $data['pass'] = $passdata['pass']; - $data['hashSalt'] = $passdata['hash']; - $data['email'] = $this->userEmail; - $data['notes'] = 'LDAP'; - $data['groupId'] = Config::getValue('ldap_defaultgroup', 0); - $data['profileId'] = Config::getValue('ldap_defaultprofile', 0); - - if (DB::getQuery($query, __FUNCTION__, $data) === false) { - return false; - } - - $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, $this->userEmail, false); - - return true; - } - - /** - * Crear un usuario. - * - * @return bool - */ - public function addUser() - { - $passdata = Users::makeUserPass($this->userPass); - - $query = 'INSERT INTO usrData SET ' - . 'user_name = :name,' - . 'user_login = :login,' - . 'user_email = :email,' - . 'user_notes = :notes,' - . 'user_groupId = :groupId,' - . 'user_profileId = :profileId,' - . 'user_mPass = \'\',' - . 'user_mIV = \'\',' - . 'user_isAdminApp = :isAdminApp,' - . 'user_isAdminAcc = :isAdminAcc,' - . 'user_isDisabled = :isDisabled,' - . 'user_isChangePass = :isChangePass,' - . 'user_pass = :pass,' - . 'user_hashSalt = :salt,' - . 'user_isLdap = 0'; - - $data['name'] = $this->userName; - $data['login'] = $this->userLogin; - $data['email'] = $this->userEmail; - $data['notes'] = $this->userNotes; - $data['groupId'] = $this->userGroupId; - $data['profileId'] = $this->userProfileId; - $data['isAdminApp'] = $this->userIsAdminApp; - $data['isAdminAcc'] = $this->userIsAdminAcc; - $data['isDisabled'] = $this->userIsDisabled; - $data['isChangePass'] = $this->userChangePass; - $data['pass'] = $passdata['pass']; - $data['salt'] = $passdata['salt']; - - if (DB::getQuery($query, __FUNCTION__, $data) === false) { - return false; - } - - $this->userId = DB::getLastId(); - - $log = new Log(_('Nuevo Usuario')); - $log->addDescription(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 un usuario. - * - * @return bool - */ - public function updateUser() - { - $query = 'UPDATE usrData SET ' - . 'user_name = :name,' - . 'user_login = :login,' - . 'user_email = :email,' - . 'user_notes = :notes,' - . 'user_groupId = :groupId,' - . 'user_profileId = :profileId,' - . 'user_isAdminApp = :isAdminApp,' - . 'user_isAdminAcc = :isAdminAcc,' - . 'user_isDisabled = :isDisabled,' - . 'user_isChangePass = :isChangePass,' - . 'user_lastUpdate = NOW() ' - . 'WHERE user_id = :id LIMIT 1'; - - $data['name'] = $this->userName; - $data['login'] = $this->userLogin; - $data['email'] = $this->userEmail; - $data['notes'] = $this->userNotes; - $data['groupId'] = $this->userGroupId; - $data['profileId'] = $this->userProfileId; - $data['isAdminApp'] = $this->userIsAdminApp; - $data['isAdminAcc'] = $this->userIsAdminAcc; - $data['isDisabled'] = $this->userIsDisabled; - $data['isChangePass'] = $this->userChangePass; - $data['id'] = $this->userId; - - if (DB::getQuery($query, __FUNCTION__, $data) === false) { - return false; - } - - $this->queryLastId = DB::$lastId; - - $log = new Log(_('Modificar Usuario')); - $log->addDescription(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. * + * @param $userId + * @param $userPass * @return bool */ - public function updateUserPass() + public static function updateUserPass($userId, $userPass) { - $passdata = Users::makeUserPass($this->userPass); - $userLogin = $this->getUserLoginById($this->userId); + $passdata = UserUtil::makeUserPass($userPass); + $userLogin = UserUtil::getUserLoginById($userId); $query = 'UPDATE usrData SET ' . 'user_pass = :pass,' @@ -883,15 +669,15 @@ class Users $data['pass'] = $passdata['pass']; $data['salt'] = $passdata['salt']; - $data['id'] = $this->userId; + $data['id'] = $userId; if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } - $this->queryLastId = DB::$lastId; + self::$queryLastId = DB::$lastId; - Log::writeNewLogAndEmail(_('Modificar Clave Usuario'), Html::strongText(_('Login') . ': ') . $userLogin); + Log::writeNewLogAndEmail(_('Modificar Clave Usuario'), sprintf('%s : %s', Html::strongText(_('Login')), $userLogin)); return true; } @@ -918,223 +704,24 @@ class Users } /** - * Eliminar un usuario. - * - * @return bool + * Migrar el grupo de los usuarios a la nueva tabla */ - public function deleteUser() + public static function migrateUsersGroup() { - $userLogin = $this->getUserLoginById($this->userId); + $query = 'SELECT user_id, user_groupId FROM usrData'; - $query = 'DELETE FROM usrData WHERE user_id = :id LIMIT 1'; + $queryRes = DB::getResults($query, __FUNCTION__, $data); - $data['id'] = $this->userId; - - if (DB::getQuery($query, __FUNCTION__, $data) === false) { + if ($queryRes === false) { return false; } - $this->queryLastId = DB::$lastId; - - Log::writeNewLogAndEmail(_('Eliminar Usuario'), Html::strongText(_('Login') . ': ') . $userLogin); + 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; } - - /** - * Actualiza los datos de los usuarios de LDAP en la BBDD. - * - * @return bool - */ - public function updateLDAPUserInDB() - { - $passdata = Users::makeUserPass($this->userPass); - - $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'] = $this->userName; - $data['email'] = $this->userEmail; - $data['id'] = $this->getUserIdByLogin($this->userLogin); - - return DB::getQuery($query, __FUNCTION__, $data); - } - - /** - * Establece las variables de sesión del usuario. - */ - public function setUserSession() - { - Session::setUserLogin($this->userLogin); - Session::setUserProfileId($this->userProfileId); - Session::setUserName($this->userName); - Session::setUserGroupId($this->userGroupId); - Session::setUserGroupName($this->userGroupName); - Session::setUserId($this->userId); - Session::setUserEMail($this->userEmail); - Session::setUserIsAdminApp($this->userIsAdminApp); - Session::setUserIsAdminAcc($this->userIsAdminAcc); - Session::setUserIsLdap($this->userIsLdap); - Session::setUserProfile(Profile::getProfile($this->userProfileId)); - - $this->setUserLastLogin(); - } - - /** - * Actualiza el último inicio de sesión del usuario en la BBDD. - * - * @return bool - */ - private function setUserLastLogin() - { - $query = 'UPDATE usrData SET user_lastLogin = NOW(),user_count = user_count + 1 WHERE user_id = :id LIMIT 1'; - - $data['id'] = $this->userId; - - return DB::getQuery($query, __FUNCTION__, $data); - } - - /** - * Comprueba la clave maestra del usuario. - * - * @return bool - */ - public function checkUserMPass() - { - $userMPass = $this->getUserMPass(true); - - if ($userMPass === false) { - return false; - } - - $configMPass = Config::getConfigDbValue('masterPwd'); - - if ($configMPass === false) { - return false; - } - - // Comprobamos el hash de la clave del usuario con la guardada - return Crypt::checkHashPass($userMPass, $configMPass); - } - - /** - * 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, $this->getCypherPass(), $queryRes->user_mIV); - - if (!$clearMasterPass) { - return false; - } - - if ($showPass == true) { - return $clearMasterPass; - } else { - $mPassPwd = Util::generate_random_bytes(32); - Session::setMPassPwd($mPassPwd); - - $sessionMasterPass = Crypt::mkCustomMPassEncrypt($mPassPwd, $clearMasterPass); - - Session::setMPass($sessionMasterPass[0]); - Session::setMPassIV($sessionMasterPass[1]); - return true; - } - } - - return false; - } - - /** - * Obtener una clave de cifrado basada en la clave del usuario y un salt. - * - * @return string con la clave de cifrado - */ - private function getCypherPass() - { - $configSalt = Config::getConfigDbValue('passwordsalt'); - $cypherPass = substr(sha1($configSalt . $this->userPass), 0, 32); - - return $cypherPass; - } - - /** - * Actualizar la clave maestra del usuario en la BBDD. - * - * @param string $masterPwd con la clave maestra - * @return bool - */ - public function updateUserMPass($masterPwd) - { - $configMPass = Config::getConfigDbValue('masterPwd'); - - if (!$configMPass) { - return false; - } - - if (Crypt::checkHashPass($masterPwd, $configMPass)) { - $strUserMPwd = Crypt::mkCustomMPassEncrypt($this->getCypherPass(), $masterPwd); - - if (!$strUserMPwd) { - return false; - } - } else { - return false; - } - - $query = 'UPDATE usrData SET ' - . 'user_mPass = :mPass,' - . 'user_mIV = :mIV,' - . 'user_lastUpdateMPass = UNIX_TIMESTAMP() ' - . 'WHERE user_id = :id LIMIT 1'; - - $data['mPass'] = $strUserMPwd[0]; - $data['mIV'] = $strUserMPwd[1]; - $data['id'] = $this->userId; - - return DB::getQuery($query, __FUNCTION__, $data); - } - - /** - * Obtener 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/dbstructure.sql b/inc/dbstructure.sql index 8c9c5ae6..05c42b49 100644 --- a/inc/dbstructure.sql +++ b/inc/dbstructure.sql @@ -278,6 +278,21 @@ CREATE TABLE `usrProfiles` ( `userProfile_profile` BLOB NOT NULL, PRIMARY KEY (`userprofile_id`) ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; + +-- +-- Table structure for table `usrToGroups` +-- + +DROP TABLE IF EXISTS `usrToGroups`; + +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_accountId` (`usertogroup_userId`) +) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; + /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; diff --git a/inc/themes/classic/2fa.inc b/inc/themes/classic/2fa.inc new file mode 100644 index 00000000..5458232c --- /dev/null +++ b/inc/themes/classic/2fa.inc @@ -0,0 +1,39 @@ +
    + + + + +
    + +
    + + +
    +
    + + + + + +
    + + +
    + +
    +
    + + \ No newline at end of file diff --git a/inc/themes/classic/account.inc b/inc/themes/classic/account.inc index b3b45d6c..b77f1dde 100644 --- a/inc/themes/classic/account.inc +++ b/inc/themes/classic/account.inc @@ -1,6 +1,6 @@
    -
    +
    @@ -222,19 +222,11 @@ echo $import_tabIndex; ?>"> \ No newline at end of file diff --git a/inc/themes/material-blue/js-common.inc b/inc/themes/material-blue/js-common.inc index 4c311ea5..62f08c56 100644 --- a/inc/themes/material-blue/js-common.inc +++ b/inc/themes/material-blue/js-common.inc @@ -1,20 +1,32 @@ \ No newline at end of file diff --git a/web/ConfigC.class.php b/web/ConfigC.class.php index de2269b9..c230c57f 100644 --- a/web/ConfigC.class.php +++ b/web/ConfigC.class.php @@ -47,6 +47,8 @@ class ConfigC extends Controller implements ActionsInterface $this->view->assign('tabs', array()); $this->view->assign('sk', \SP\Common::getSessionKey(true)); + $this->view->assign('isDemoMode', \SP\Util::demoIsEnabled()); + $this->view->assign('isDisabled', (\SP\Util::demoIsEnabled()) ? 'DISABLED' : ''); } /** @@ -54,7 +56,7 @@ class ConfigC extends Controller implements ActionsInterface * * @return bool */ - public function getConfigTab() + public function getGeneralTab() { $this->setAction(self::ACTION_CFG_GENERAL); @@ -85,51 +87,35 @@ class ConfigC extends Controller implements ActionsInterface 'Magyar' => 'hu_HU', 'Français' => 'fr_FR') ); + $this->view->assign('currentLang', \SP\Config::getValue('sitelang')); $this->view->assign('themesAvailable', $themesAvailable); $this->view->assign('currentTheme', \SP\Config::getValue('sitetheme')); - $this->view->assign('isDemoMode', \SP\Util::demoIsEnabled()); - $this->view->assign('isDisabled', (\SP\Util::demoIsEnabled()) ? 'DISABLED' : ''); $this->view->assign('chkLog', (\SP\Config::getValue('log_enabled')) ? 'checked="checked"' : ''); $this->view->assign('chkDebug', (\SP\Config::getValue('debug')) ? 'checked="checked"' : ''); $this->view->assign('chkMaintenance', (\SP\Config::getValue('maintenance')) ? 'checked="checked"' : ''); $this->view->assign('chkUpdates', (\SP\Config::getValue('checkupdates')) ? 'checked="checked"' : ''); - $this->view->assign('chkGlobalSearch', (\SP\Config::getValue('globalsearch')) ? 'checked="checked"' : ''); - $this->view->assign('chkAccountLink', (\SP\Config::getValue('account_link')) ? 'checked="checked"' : ''); - $this->view->assign('chkFiles', (\SP\Config::getValue('files_enabled')) ? 'checked="checked"' : ''); - $this->view->assign('chkWiki', (\SP\Config::getValue('wiki_enabled')) ? 'checked="checked"' : ''); - $this->view->assign('chkLdap', (\SP\Config::getValue('ldap_enabled')) ? 'checked="checked"' : ''); - $this->view->assign('chkLdapADS', (\SP\Config::getValue('ldap_ads')) ? 'checked="checked"' : ''); - $this->view->assign('chkMail', (\SP\Config::getValue('mail_enabled')) ? 'checked="checked"' : ''); - $this->view->assign('chkMailRequests', (\SP\Config::getValue('mail_requestsenabled')) ? 'checked="checked"' : ''); - $this->view->assign('chkMailAuth', (\SP\Config::getValue('mail_authenabled')) ? 'checked="checked"' : ''); - $this->view->assign('chkResultsAsCards', (\SP\Config::getValue('resultsascards')) ? 'checked="checked"' : ''); + $this->view->assign('sessionTimeout', \SP\Config::getValue('session_timeout')); + // Files + $this->view->assign('chkFiles', (\SP\Config::getValue('files_enabled')) ? 'checked="checked"' : ''); $this->view->assign('filesAllowedExts', \SP\Config::getValue('files_allowed_exts')); $this->view->assign('filesAllowedSize', \SP\Config::getValue('files_allowed_size')); - $this->view->assign('groups', \SP\DB::getValuesForSelect('usrGroups', 'usergroup_id', 'usergroup_name')); - $this->view->assign('profiles', \SP\DB::getValuesForSelect('usrProfiles', 'userprofile_id', 'userprofile_name')); - $this->view->assign('ldapDefaultGroup', \SP\Config::getValue('ldap_defaultgroup')); - $this->view->assign('ldapDefaultProfile', \SP\Config::getValue('ldap_defaultprofile')); - $this->view->assign('currentLang', \SP\Config::getValue('sitelang')); - $this->view->assign('sessionTimeout', \SP\Config::getValue('session_timeout')); + + // Accounts + $this->view->assign('chkGlobalSearch', (\SP\Config::getValue('globalsearch')) ? 'checked="checked"' : ''); + $this->view->assign('chkResultsAsCards', (\SP\Config::getValue('resultsascards')) ? 'checked="checked"' : ''); + $this->view->assign('chkAccountLink', (\SP\Config::getValue('account_link')) ? 'checked="checked"' : ''); $this->view->assign('accountCount', \SP\Config::getValue('account_count')); - $this->view->assign('wikiSearchUrl', \SP\Config::getValue('wiki_searchurl')); - $this->view->assign('wikiPageUrl', \SP\Config::getValue('wiki_pageurl')); - $this->view->assign('wikiFilter', \SP\Config::getValue('wiki_filter')); - $this->view->assign('ldapIsAvailable', \SP\Util::ldapIsAvailable()); - $this->view->assign('ldapServer', \SP\Config::getValue('ldap_server')); - $this->view->assign('ldapBindUser', \SP\Config::getValue('ldap_binduser')); - $this->view->assign('ldapBindPass', \SP\Config::getValue('ldap_bindpass')); - $this->view->assign('ldapBase', \SP\Config::getValue('ldap_base')); - $this->view->assign('ldapGroup', \SP\Config::getValue('ldap_group')); - $this->view->assign('mailServer', \SP\Config::getValue('mail_server','localhost')); - $this->view->assign('mailPort', \SP\Config::getValue('mail_port',25)); - $this->view->assign('mailUser', \SP\Config::getValue('mail_user')); - $this->view->assign('mailPass', \SP\Config::getValue('mail_pass')); - $this->view->assign('currentMailSecurity', \SP\Config::getValue('mail_security')); - $this->view->assign('mailFrom', \SP\Config::getValue('mail_from')); - $this->view->assign('mailSecurity', array('SSL', 'TLS')); - $this->view->append('tabs', array('title' => _('Configuración'))); + + // Proxy + $this->view->assign('chkProxy', (\SP\Config::getValue('proxy_enabled')) ? 'checked="checked"' : ''); + $this->view->assign('proxyServer', \SP\Config::getValue('proxy_server')); + $this->view->assign('proxyPort', \SP\Config::getValue('proxy_port')); + $this->view->assign('proxyUser', \SP\Config::getValue('proxy_user')); + $this->view->assign('proxyPass', \SP\Config::getValue('proxy_pass')); + + $this->view->assign('actionId', $this->getAction(), 'config'); + $this->view->append('tabs', array('title' => _('General'))); $this->view->assign('tabIndex', $this->getTabIndex(), 'config'); } @@ -151,6 +137,7 @@ class ConfigC extends Controller implements ActionsInterface $this->view->assign('lastUpdateMPass', \SP\Config::getConfigDbValue("lastupdatempass")); $this->view->assign('tempMasterPassTime', \SP\Config::getConfigDbValue("tempmaster_passtime")); $this->view->assign('tempMasterMaxTime', \SP\Config::getConfigDbValue("tempmaster_maxtime")); + $this->view->append('tabs', array('title' => _('Encriptación'))); $this->view->assign('tabIndex', $this->getTabIndex(), 'encryption'); } @@ -212,10 +199,11 @@ class ConfigC extends Controller implements ActionsInterface $this->view->addTemplate('import'); - $this->view->append('tabs', array('title' => _('Importar Cuentas'))); - $this->view->assign('tabIndex', $this->getTabIndex(), 'import'); $this->view->assign('groups', \SP\DB::getValuesForSelect('usrGroups', 'usergroup_id', 'usergroup_name')); $this->view->assign('users', \SP\DB::getValuesForSelect('usrData', 'user_id', 'user_name')); + + $this->view->append('tabs', array('title' => _('Importar Cuentas'))); + $this->view->assign('tabIndex', $this->getTabIndex(), 'import'); } /** @@ -233,10 +221,97 @@ class ConfigC extends Controller implements ActionsInterface $this->view->addTemplate('info'); $this->view->assign('dbInfo', \SP\DB::getDBinfo()); + $this->view->append('tabs', array('title' => _('Información'))); $this->view->assign('tabIndex', $this->getTabIndex(), 'info'); } + /** + * Obtener la pestaña de Wiki + * @return bool + */ + public function getWikiTab() + { + $this->setAction(self::ACTION_CFG_WIKI); + + if (!$this->checkAccess(self::ACTION_CFG_GENERAL)) { + return; + } + + $this->view->addTemplate('wiki'); + + $this->view->assign('chkWiki', (\SP\Config::getValue('wiki_enabled')) ? 'checked="checked"' : ''); + $this->view->assign('wikiSearchUrl', \SP\Config::getValue('wiki_searchurl')); + $this->view->assign('wikiPageUrl', \SP\Config::getValue('wiki_pageurl')); + $this->view->assign('wikiFilter', \SP\Config::getValue('wiki_filter')); + + $this->view->assign('actionId', $this->getAction(), 'wiki'); + $this->view->append('tabs', array('title' => _('Wiki'))); + $this->view->assign('tabIndex', $this->getTabIndex(), 'wiki'); + } + + /** + * Obtener la pestaña de LDAP + * @return bool + */ + public function getLdapTab() + { + $this->setAction(self::ACTION_CFG_LDAP); + + if (!$this->checkAccess(self::ACTION_CFG_GENERAL)) { + return; + } + + $this->view->addTemplate('ldap'); + + $this->view->assign('chkLdap', (\SP\Config::getValue('ldap_enabled')) ? 'checked="checked"' : ''); + $this->view->assign('chkLdapADS', (\SP\Config::getValue('ldap_ads')) ? 'checked="checked"' : ''); + $this->view->assign('ldapIsAvailable', \SP\Util::ldapIsAvailable()); + $this->view->assign('ldapServer', \SP\Config::getValue('ldap_server')); + $this->view->assign('ldapBindUser', \SP\Config::getValue('ldap_binduser')); + $this->view->assign('ldapBindPass', \SP\Config::getValue('ldap_bindpass')); + $this->view->assign('ldapBase', \SP\Config::getValue('ldap_base')); + $this->view->assign('ldapGroup', \SP\Config::getValue('ldap_group')); + $this->view->assign('groups', \SP\DB::getValuesForSelect('usrGroups', 'usergroup_id', 'usergroup_name')); + $this->view->assign('profiles', \SP\DB::getValuesForSelect('usrProfiles', 'userprofile_id', 'userprofile_name')); + $this->view->assign('ldapDefaultGroup', \SP\Config::getValue('ldap_defaultgroup')); + $this->view->assign('ldapDefaultProfile', \SP\Config::getValue('ldap_defaultprofile')); + + $this->view->assign('actionId', $this->getAction(), 'ldap'); + $this->view->append('tabs', array('title' => _('LDAP'))); + $this->view->assign('tabIndex', $this->getTabIndex(), 'ldap'); + } + + /** + * Obtener la pestaña de Correo + * @return bool + */ + public function getMailTab() + { + $this->setAction(self::ACTION_CFG_MAIL); + + if (!$this->checkAccess(self::ACTION_CFG_GENERAL)) { + return; + } + + $this->view->addTemplate('mail'); + + $this->view->assign('chkMail', (\SP\Config::getValue('mail_enabled')) ? 'checked="checked"' : ''); + $this->view->assign('chkMailRequests', (\SP\Config::getValue('mail_requestsenabled')) ? 'checked="checked"' : ''); + $this->view->assign('chkMailAuth', (\SP\Config::getValue('mail_authenabled')) ? 'checked="checked"' : ''); + $this->view->assign('mailServer', \SP\Config::getValue('mail_server','localhost')); + $this->view->assign('mailPort', \SP\Config::getValue('mail_port',25)); + $this->view->assign('mailUser', \SP\Config::getValue('mail_user')); + $this->view->assign('mailPass', \SP\Config::getValue('mail_pass')); + $this->view->assign('currentMailSecurity', \SP\Config::getValue('mail_security')); + $this->view->assign('mailFrom', \SP\Config::getValue('mail_from')); + $this->view->assign('mailSecurity', array('SSL', 'TLS')); + + $this->view->assign('actionId', $this->getAction(), 'mail'); + $this->view->append('tabs', array('title' => _('Correo'))); + $this->view->assign('tabIndex', $this->getTabIndex(), 'mail'); + } + /** * Obtener el índice actual de las pestañas * diff --git a/web/MainC.class.php b/web/MainC.class.php index 9b568c89..4d0cf2e8 100644 --- a/web/MainC.class.php +++ b/web/MainC.class.php @@ -46,24 +46,26 @@ class MainC extends Controller implements ActionsInterface * @param $template \SP\Template con instancia de plantilla * @param null $page nombre de página para la clase del body */ - public function __construct(\SP\Template $template = null, $page = null) + public function __construct(\SP\Template $template = null, $page = null, $initialize = true) { parent::__construct($template); - $this->view->addTemplate('header'); - $this->view->addTemplate('body'); + if ($initialize) { + $this->view->addTemplate('header'); + $this->view->addTemplate('body'); - $this->view->assign('sk', \SP\Common::getSessionKey(true)); - $this->view->assign('appInfo', Util::getAppInfo()); - $this->view->assign('appVersion', Util::getVersionString()); - $this->view->assign('startTime', microtime()); - $this->view->assign('page', $page); - $this->view->assign('loggedIn', \SP\Init::isLoggedIn()); - $this->view->assign('logoNoText', Init::$WEBURI . '/imgs/logo.svg'); - $this->view->assign('logo', Init::$WEBURI . '/imgs/logo_full.svg'); + $this->view->assign('sk', \SP\Common::getSessionKey(true)); + $this->view->assign('appInfo', Util::getAppInfo()); + $this->view->assign('appVersion', Util::getVersionString()); + $this->view->assign('startTime', microtime()); + $this->view->assign('page', $page); + $this->view->assign('loggedIn', \SP\Init::isLoggedIn()); + $this->view->assign('logoNoText', Init::$WEBURI . '/imgs/logo.svg'); + $this->view->assign('logo', Init::$WEBURI . '/imgs/logo_full.svg'); - $this->getHeader(); - $this->setHeaders(); + $this->getHeader(); + $this->setHeaders(); + } } /** @@ -331,4 +333,35 @@ class MainC extends Controller implements ActionsInterface $this->view->addTemplate('footer'); } + + /** + * Obtener los datos para el interface de comprobación de actualizaciones + */ + public function getCheckUpdates() + { + // Comprobar una vez por sesión + if (!\SP\Session::getUpdated()) { + $updates = \SP\Util::checkUpdates(); + \SP\Session::setUpdated(true); + } + + // Forzar la escritura de la sesión + session_write_close(); + + $this->view->addTemplate('update'); + + 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', _('Descargar nueva versión') . ' - ' . $version . '

    ' . $description); + } else { + $this->view->assign('hasUpdates', false); + $this->view->assign('status', $updates); + } + + } } \ No newline at end of file From 1663c790f77421e3ab6977239a47527ebed3295d Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Wed, 29 Jul 2015 12:45:23 +0200 Subject: [PATCH 51/84] Fix line separators --- inc/themes/material-blue/css/styles.css | 6 +++- inc/themes/material-blue/js/functions.js | 22 ++++---------- inc/themes/material-blue/search.inc | 37 ++++++++++++++++++------ 3 files changed, 38 insertions(+), 27 deletions(-) diff --git a/inc/themes/material-blue/css/styles.css b/inc/themes/material-blue/css/styles.css index beff1ba9..2813b0e5 100644 --- a/inc/themes/material-blue/css/styles.css +++ b/inc/themes/material-blue/css/styles.css @@ -1485,13 +1485,17 @@ footer img { margin-top: 1em; } -.tooltip{ +.tooltip { max-width: 300px; background-color: #777; color: #fff; z-index: 101; } +.cursor-pointer { + cursor: pointer; +} + /*Login Page*/ #boxLogin { width: 500px; diff --git a/inc/themes/material-blue/js/functions.js b/inc/themes/material-blue/js/functions.js index 79716631..311bd094 100644 --- a/inc/themes/material-blue/js/functions.js +++ b/inc/themes/material-blue/js/functions.js @@ -205,26 +205,13 @@ function accSearch(continous, event) { } // Función para la búsqueda de cuentas mediante ordenación -function searchSort(skey, start, nav) { +function searchSort(skey, start, dir) { "use strict"; if (typeof(skey) === "undefined" || typeof(start) === "undefined") return false; - if (order.key > 0 && order.key != skey) { - order.key = skey; - order.dir = 0; - } else if (nav != 1) { - order.key = skey; - - if (order.dir === 1) { - order.dir = 0; - } else { - order.dir = 1; - } - } - - $('#frmSearch').find('input[name="skey"]').val(order.key); - $('#frmSearch').find('input[name="sorder"]').val(order.dir); + $('#frmSearch').find('input[name="skey"]').val(skey); + $('#frmSearch').find('input[name="sorder"]').val(dir); $('#frmSearch').find('input[name="start"]').val(start); doSearch(); @@ -251,8 +238,9 @@ function doSearch() { $('#resBuscar').html(resMsg("nofancyerror")); }, complete: function () { - scrollUp(); $.fancybox.hideLoading(); + scrollUp(); + setContentSize(); } }); } diff --git a/inc/themes/material-blue/search.inc b/inc/themes/material-blue/search.inc index c64c99d5..06ccfaf0 100644 --- a/inc/themes/material-blue/search.inc +++ b/inc/themes/material-blue/search.inc @@ -1,16 +1,18 @@
    - +
      -
    • - +
    • + + + + +
      arrow_drop_down
      +
      arrow_drop_up
    @@ -92,7 +94,8 @@ - library_books + library_books @@ -184,7 +187,7 @@
    \ No newline at end of file From 85f956d5d55e049ee62f949fd741e42ddfffce33 Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Thu, 30 Jul 2015 11:25:13 +0200 Subject: [PATCH 52/84] * [MOD] Minor UI tweaks --- imgs/logo.png | Bin 10202 -> 10402 bytes imgs/logo.svg | 18 ++++---- inc/themes/material-blue/account.inc | 16 ++----- inc/themes/material-blue/css/chosen.css | 16 +++---- inc/themes/material-blue/css/styles.css | 53 +++++++++++++++++------- inc/themes/material-blue/js-common.inc | 50 ++++++++++++---------- inc/themes/material-blue/mgmttabs.inc | 3 +- 7 files changed, 87 insertions(+), 69 deletions(-) diff --git a/imgs/logo.png b/imgs/logo.png index 0b51a31d591e43fac17e8321d3320c60c08fe0a9..532352863d53675e71b779236072f03c65b719c9 100644 GIT binary patch literal 10402 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 @@ -435,16 +435,16 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="1" - inkscape:cx="24.119479" - inkscape:cy="161.20187" + inkscape:zoom="0.82910156" + inkscape:cx="-98.934263" + inkscape:cy="125.4469" inkscape:current-layer="layer2" inkscape:document-units="px" showgrid="false" - inkscape:window-width="1440" - inkscape:window-height="852" - inkscape:window-x="0" - inkscape:window-y="25" + inkscape:window-width="1618" + inkscape:window-height="1028" + inkscape:window-x="54" + inkscape:window-y="-8" inkscape:window-maximized="1" showguides="true" inkscape:guide-bbox="true" @@ -497,7 +497,7 @@ y="396.5" /> +
    @@ -29,7 +29,7 @@
    - $name): ?> - $name): ?>
    - required> $name): ?> - required> $name): ?>
    -
    -
    - remove_red_eye - settings - -
    @@ -23,7 +23,7 @@ @@ -335,95 +329,81 @@
    -
      - -
    • - -
    • - -
    • - -
    • - + + + - -
    • - -
    • - + + + - -
    • - -
    • -
    • - -
    • - + + - -
    • - -
    • - + + - -
    • - -
    • - + + + - -
    • - -
    • - -
    • - -
    • - + + + + + - -
    • - -
    • - -
    + + + + + + + + +
    - - \ No newline at end of file + + + \ No newline at end of file diff --git a/inc/themes/classic/groups.inc b/inc/themes/classic/groups.inc index c9a92faa..22fb128a 100644 --- a/inc/themes/classic/groups.inc +++ b/inc/themes/classic/groups.inc @@ -1,7 +1,7 @@

    - +
    - $name): ?> - $name): ?> - - <?php echo _('Mostrar Clave'); ?> -
    - - +
    @@ -19,6 +19,21 @@ value=""/> + + + + + +
    + +
    @@ -31,9 +46,13 @@
    -
      -
    • -
    +
    - \ No newline at end of file + + \ No newline at end of file diff --git a/inc/themes/classic/header.inc b/inc/themes/classic/header.inc index 21d0b062..55eebebb 100644 --- a/inc/themes/classic/header.inc +++ b/inc/themes/classic/header.inc @@ -3,7 +3,7 @@ <?php echo $appInfo['appname'],' :: ',$appInfo['appdesc']; ?> - + diff --git a/inc/themes/classic/import.inc b/inc/themes/classic/import.inc index 69711c36..6ac438cc 100644 --- a/inc/themes/classic/import.inc +++ b/inc/themes/classic/import.inc @@ -7,12 +7,17 @@ echo $import_tabIndex; ?>"> -
    + + + + + + + + +
    - + + @@ -23,15 +28,18 @@ echo $import_tabIndex; ?>"> - - <?php echo _('Mostrar Clave'); ?> +
    - + + @@ -40,7 +48,12 @@ echo $import_tabIndex; ?>">
    - + + @@ -67,25 +80,26 @@ echo $import_tabIndex; ?>">
    -
      -
    • - -
    • -
    +
    - @@ -148,28 +165,27 @@ echo $import_tabIndex; ?>">
    - + +
    - + + - - <?php echo _('Mostrar Clave'); ?> +
    +
    -
      -
    • - + +
      +

      -
      -

      +

      -

      +

      -

      +

      -

      +

      -

      +

      -

      - -

      -
      -
    • -
    +

    +
    diff --git a/inc/themes/classic/install.inc b/inc/themes/classic/install.inc index 13f08324..f3785670 100644 --- a/inc/themes/classic/install.inc +++ b/inc/themes/classic/install.inc @@ -34,14 +34,11 @@

    - <?php echo _('Mostrar Clave'); ?> -

    @@ -49,14 +46,11 @@

    - <?php echo _('Mostrar Clave'); ?> -

    @@ -75,6 +69,7 @@

    $(function () { - $(".sel-chosen-ns").chosen({disable_search: true}); - $(".sel-chosen-usergroup").chosen({ - placeholder_text_single: "", - disable_search_threshold: 10, - no_results_text: "" - }); - $(".sel-chosen-user").chosen({ - placeholder_text_single: "", - disable_search_threshold: 10, - no_results_text: "" - }); - $(".sel-chosen-profile").chosen({ - placeholder_text_single: "", - disable_search_threshold: 10, - no_results_text: "" + chosenDetect(); + + passwordDetect(); + + $('.download').button({ + icons: {primary: " ui-icon-arrowthickstop-1-s"} }); - $(".showpass").each(function (index, input) { - // Cross-browser compatibility - $(this).on("mouseover", function () { - $(this).data('powertip', function(){ - return $(this).prev().val() - }); - }); - }); - - $( ".download" ).button({ - icons: { primary: " ui-icon-arrowthickstop-1-s"} - }); - - $( ".checkbox" ).button({ - icons: { primary: "ui-icon-transferthick-e-w"} - }); - - $('.checkbox').button().click( + $('.checkbox').button({ + icons: {primary: "ui-icon-transferthick-e-w"} + }).click( function () { -// var curValue = $(this).button('option', 'label'); -// -// if(curValue != ''){ -// curValue += ' '; -// } - - if ($(this).attr('checked') == undefined) { - $(this).button('option', 'label', ''); - } else { + if ($(this).prop('checked') == true) { $(this).button('option', 'label', ''); + } else { + $(this).button('option', 'label', ''); } } ); - $(".help-box").dialog({autoOpen: false, title: '', width: screen.width / 2.5 }); - - $('#passGen').click(function () { - password(11, true, true); - }); + $(".help-box").dialog({autoOpen: false, title: '', width: screen.width / 2.5}); }); diff --git a/inc/themes/classic/js/functions.js b/inc/themes/classic/js/functions.js index f4dbd1ba..5351cca9 100644 --- a/inc/themes/classic/js/functions.js +++ b/inc/themes/classic/js/functions.js @@ -11,26 +11,14 @@ var windowAdjustSize = 350; // Variable para almacena la llamada a setTimeout() var timeout; -var strPassword; +var passLength; var minPasswordLength = 8; -var baseScore = 0, score = 0; -var num = {}; -num.Excess = 0; -num.Upper = 0; -num.Numbers = 0; -num.Symbols = 0; - -var bonus = {}; -bonus.Excess = 3; -bonus.Upper = 4; -bonus.Numbers = 5; -bonus.Symbols = 5; -bonus.Combo = 0; -bonus.FlatLower = 0; -bonus.FlatNumber = 0; - -var powertipOptions = {placement: 'ne', smartPlacement: 'true', fadeOutTime: 500}; +var complexity = {}; +complexity.numbers = true; +complexity.symbols = true; +complexity.uppercase = true; +complexity.numlength = 10; jQuery.extend(jQuery.fancybox.defaults, { type: 'ajax', @@ -49,17 +37,43 @@ jQuery.extend(jQuery.fancybox.defaults, { $(document).ready(function () { "use strict"; - $("[title]").powerTip(powertipOptions); - $('input, textarea').placeholder(); + $('input[type="text"], select, textarea').placeholder().mouseenter(function () {$(this).focus();}); + setContentSize(); setWindowAdjustSize(); + + // Activar tooltips + activeTooltip(); + }).ajaxComplete(function () { "use strict"; - $("[title]").powerTip(powertipOptions); - $('input, textarea').placeholder(); + $('input[type="text"], select, textarea').placeholder().mouseenter(function () {$(this).focus();}); + + // Activar tooltips + activeTooltip(); }); + +function activeTooltip(){ + "use strict"; + + // Activar tooltips + $('.active-tooltip').tooltip({ + content: function () { + return $(this).attr('title'); + }, + tooltipClass: "tooltip" + }); + + $('.help-tooltip').tooltip({ + content: function(){ + return $(this).next('div').html(); + }, + tooltipClass: "tooltip" + }); +} + //$(function() { // "use strict"; // @@ -157,18 +171,6 @@ function clearSearch(clearStart) { order.dir = 0; } -// Funcion para crear un desplegable con opciones -function mkChosen(options) { - "use strict"; - - $('#' + options.id).chosen({ - allow_single_deselect: true, - placeholder_text_single: options.placeholder, - disable_search_threshold: 10, - no_results_text: options.noresults - }); -} - // Función para la búsqueda de cuentas mediante filtros function accSearch(continous, event) { "use strict"; @@ -322,13 +324,13 @@ function viewPass(id, full, history) { if (json.status === 0) { content = '

    ' + json.accpass + '

    ' + - '
    ' + - '
    ' + - '' + - '
    '; + '
    ' + + '
    ' + + '' + + '
    '; } else { content = '' + json.description + ''; @@ -542,41 +544,26 @@ function sendRequest() { } // Función para guardar la configuración -function configMgmt(action) { +function configMgmt(action, obj) { "use strict"; - var frm, url; + var url; switch (action) { - case "saveconfig": - frm = 'frmConfig'; + case "config": url = '/ajax/ajax_configSave.php'; break; - case "savempwd": - frm = 'frmCrypt'; - url = '/ajax/ajax_configSave.php'; - break; - case "gentmpass": - frm = 'frmTempMasterPass'; - url = '/ajax/ajax_configSave.php'; - break; - case "backup": - frm = 'frmBackup'; - url = '/ajax/ajax_backup.php'; - break; case "export": - frm = 'frmExport'; url = '/ajax/ajax_backup.php'; break; - case "migrate": - frm = 'frmMigrate'; + case "import": url = '/ajax/ajax_migrate.php'; break; default: return; } - var data = $('#' + frm).serialize(); + var data = $(obj).serialize(); sendAjax(data, url); } @@ -729,10 +716,19 @@ function importFile(sk) { sk: sk, action: 'import', isAjax: 1, - importPwd: function() { return $('input[name="importPwd"]').val(); }, - defUser: function() { return $('#import_defaultuser').chosen().val(); }, - defGroup: function() { return $('#import_defaultgroup').chosen().val(); }, - csvDelimiter: function() { return $('input[name="csvDelimiter"]').val();; } + importPwd: function () { + return $('input[name="importPwd"]').val(); + }, + defUser: function () { + return $('#import_defaultuser').chosen().val(); + }, + defGroup: function () { + return $('#import_defaultgroup').chosen().val(); + }, + csvDelimiter: function () { + return $('input[name="csvDelimiter"]').val(); + ; + } }, uploadFinished: function (i, file, json) { $.fancybox.hideLoading(); @@ -967,20 +963,16 @@ function getTime() { // Función para generar claves aleatorias. // By Uzbekjon from http://jquery-howto.blogspot.com.es -function password(length, special, fancy, dstId) { +function password(length, special, fancy, targetId) { "use strict"; var iteration = 0; var genPassword = ''; var randomNumber; - if (typeof special === 'undefined') { - special = false; - } - - while (iteration < length) { + while (iteration < complexity.numlength) { randomNumber = (Math.floor((Math.random() * 100)) % 94) + 33; - if (!special) { + if (!complexity.symbols) { if ((randomNumber >= 33) && (randomNumber <= 47)) { continue; } @@ -994,6 +986,15 @@ function password(length, special, fancy, dstId) { continue; } } + + if (!complexity.numbers && randomNumber >= 48 && randomNumber <= 57) { + continue; + } + + if (!complexity.uppercase && randomNumber >= 65 && randomNumber <= 90) { + continue; + } + iteration++; genPassword += String.fromCharCode(randomNumber); } @@ -1005,119 +1006,55 @@ function password(length, special, fancy, dstId) { alertify.alert('

    ' + LANG[6] + '

    ' + genPassword + '

    '); } - if (dstId) { - checkPassLevel(genPassword); - $('#' + dstId + ' input:password').val(genPassword); - $('#' + dstId + ' #passLevel').show(500); + var level = zxcvbn(genPassword); + passLength = genPassword.length; + + if (targetId) { + outputResult(level.score, targetId); + + $('#' + targetId).val(genPassword); + $('#' + targetId + 'R').val(genPassword); } else { - checkPassLevel(genPassword); + outputResult(level.score, targetId); + $('input:password, input.password').val(genPassword); $('#passLevel').show(500); } - //return password; } // Funciones para analizar al fortaleza de una clave // From http://net.tutsplus.com/tutorials/javascript-ajax/build-a-simple-password-strength-checker/ -function checkPassLevel(password, dstId) { +function checkPassLevel(password, dst) { "use strict"; - strPassword = password; + var level = zxcvbn(password); - num.Excess = 0; - num.Upper = 0; - num.Numbers = 0; - num.Symbols = 0; - bonus.Combo = 0; - bonus.FlatLower = 0; - bonus.FlatNumber = 0; - baseScore = 0; - score = 0; - - if (password.length >= minPasswordLength) { - baseScore = 50; - analyzeString(); - calcComplexity(); - } else { - baseScore = 0; - } - - if (dstId) { - outputResult(dstId); - } else { - outputResult(dstId); - } + outputResult(level.score, dst); } -function analyzeString() { +function outputResult(level, dstId) { "use strict"; - var chars = strPassword.split(''); - - for (var i = 0; i < strPassword.length; i++) { - if (chars[i].match(/[A-Z]/g)) { - num.Upper++; - } - if (chars[i].match(/[0-9]/g)) { - num.Numbers++; - } - if (chars[i].match(/(.*[!,@,#,$,%,&,*,?,%,_])/)) { - num.Symbols++; - } - } - - num.Excess = strPassword.length - minPasswordLength; - - if (num.Upper && num.Numbers && num.Symbols) { - bonus.Combo = 25; - } - - else if ((num.Upper && num.Numbers) || (num.Upper && num.Symbols) || (num.Numbers && num.Symbols)) { - bonus.Combo = 15; - } - - if (strPassword.match(/^[\sa-z]+$/)) { - bonus.FlatLower = -15; - } - - if (strPassword.match(/^[\s0-9]+$/)) { - bonus.FlatNumber = -35; - } -} - -function calcComplexity() { - "use strict"; - - score = baseScore + (num.Excess * bonus.Excess) + (num.Upper * bonus.Upper) + (num.Numbers * bonus.Numbers) + (num.Symbols * bonus.Symbols) + bonus.Combo + bonus.FlatLower + bonus.FlatNumber; -} - -function outputResult(dstId) { - "use strict"; - - var complexity, selector = '.passLevel'; - - if (dstId) { - selector = '#' + dstId + ' .passLevel'; - } + var complexity, selector = '.passLevel-' + dstId; complexity = $(selector); complexity.removeClass("weak good strong strongest"); - if (strPassword.length === 0) { + if (passLength === 0) { complexity.attr('title', '').empty(); - } else if (strPassword.length < minPasswordLength) { + } else if (passLength < minPasswordLength) { complexity.attr('title', LANG[11]).addClass("weak"); - } else if (score < 50) { + } else if (level === 0) { complexity.attr('title', LANG[9]).addClass("weak"); - } else if (score >= 50 && score < 75) { + } else if (level === 1 || level === 2) { complexity.attr('title', LANG[8]).addClass("good"); - } else if (score >= 75 && score < 100) { + } else if (level === 3) { complexity.attr('title', LANG[7]).addClass("strong"); - } else if (score >= 100) { + } else if (level === 4) { complexity.attr('title', LANG[10]).addClass("strongest"); } - $('.passLevel').powerTip(powertipOptions); + //$('.passLevel').powerTip(powertipOptions); } // Función para mostrar mensaje con alertify @@ -1207,6 +1144,71 @@ function goLogin() { }, 2000); } +// Diálogo de configuración de complejidad de clave +function complexityDialog(targetId) { + $('
    ').dialog({ + modal: true, + title: 'Opciones de Complejidad', + width: '400px', + open: function () { + var thisDialog = $(this); + + var content = + '
    ' + + '' + + '' + + '' + + '' + + '' + + '' + + '
    ' + + '
    ' + + '' + + '' + + '
    ' + + '
    ' + + '' + + '
    '; + + thisDialog.html(content); + + // Recentrar después de insertar el contenido + thisDialog.dialog('option', 'position', 'center'); + + // Actualizar componentes de MDL + thisDialog.ready(function () { + $('#checkbox-numbers').prop('checked', complexity.numbers); + $('#checkbox-uppercase').prop('checked', complexity.uppercase); + $('#checkbox-symbols').prop('checked', complexity.symbols); + $('#passlength').val(complexity.numlength); + + $(".dialog-btns-complexity").buttonset({ + icons: {primary: "ui-icon-transferthick-e-w"} + }); + + $(".inputNumber").spinner(); + + $(".btnDialogOk") + .button() + .click(function () { + complexity.numbers = $(' #checkbox-numbers').is(':checked'); + complexity.uppercase = $('#checkbox-uppercase').is(':checked'); + complexity.symbols = $('#checkbox-symbols').is(':checked'); + complexity.numlength = parseInt($('#passlength').val()); + + console.log(thisDialog); + thisDialog.dialog('close'); + } + ); + }); + }, + // Forzar la eliminación del objeto para que ZeroClipboard siga funcionando al abrirlo de nuevo + close: function () { + $(this).dialog("destroy"); + } + }); +} + // Función para obtener el navegador usado function getBrowser() { "use strict"; @@ -1220,4 +1222,170 @@ function getBrowser() { } return browser; +} + +// Detectar los campos select y añadir funciones +function chosenDetect() { + "use strict"; + + var selectWidth = "210px"; + var searchTreshold = 10; + + $(".sel-chosen-usergroup").chosen({ + placeholder_text_single: LANG[21], + disable_search_threshold: searchTreshold, + no_results_text: LANG[26], + width: selectWidth + }); + + $(".sel-chosen-user").chosen({ + placeholder_text_single: LANG[22], + disable_search_threshold: searchTreshold, + no_results_text: LANG[26], + width: selectWidth + }); + + $(".sel-chosen-profile").chosen({ + placeholder_text_single: LANG[23], + disable_search_threshold: searchTreshold, + no_results_text: LANG[26], + width: selectWidth + }); + + $(".sel-chosen-customer").each(function(){ + var deselect = $(this).hasClass('sel-chosen-deselect'); + + $(this).chosen({ + allow_single_deselect: deselect, + placeholder_text_single: LANG[24], + disable_search_threshold: searchTreshold, + no_results_text: LANG[26], + width: selectWidth + }); + }); + + $(".sel-chosen-category").each(function(){ + var deselect = $(this).hasClass('sel-chosen-deselect'); + + $(this).chosen({ + allow_single_deselect: deselect, + placeholder_text_single: LANG[25], + disable_search_threshold: searchTreshold, + no_results_text: LANG[26], + width: selectWidth + }); + }); + + $(".sel-chosen-ns").chosen({disable_search: true, width: selectWidth}); +} + +// Detectar los campos de clave y añadir funciones +function passwordDetect() { + "use strict"; + + // Crear los iconos de acciones sobre claves + $('.passwordfield__input').each(function () { + var thisInput = $(this); + var targetId = $(this).attr('id'); + + if ( thisInput.next().hasClass('password-actions') ){ + return; + } + + console.log(targetId); + + var btnMenu = '
    '; + btnMenu += '
    '; + btnMenu += '
      '; + btnMenu += '
    • ' + LANG[28] + '
    • '; + btnMenu += '
    • ' + LANG[29] + '
    • '; + btnMenu += '
    • ' + LANG[30] + '
    • '; + btnMenu += '
    '; + + thisInput.after('
    '); + + thisInput.next('.password-actions') + .prepend(btnMenu) + .prepend('') + .prepend(''); + + $(".quickGenPass") + .button({ + text: false, + icons: { + primary: "ui-icon-gear" + } + }) + .click(function () { + password(11, true, true, targetId); + }) + .next() + .button({ + text: false, + icons: { + primary: "ui-icon-key" + } + }) + .click(function () { + var menu = $(this).parent().next().show().position({ + my: "left top", + at: "left bottom", + of: this + }); + $(document).one("click", function () { + menu.hide(); + }); + return false; + }) + .parent() + .buttonset() + .next() + .hide() + .menu(); + + + $(this).on('keyup', function () { + checkPassLevel($(this).val(), targetId); + }); + }); + + // Crear los iconos de acciones sobre claves (sólo mostrar clave) + $('.passwordfield__input-show').each(function () { + var thisParent = $(this); + var targetId = $(this).attr('id'); + + thisParent + .after(''); + }); + + // Crear evento para generar clave aleatoria + $('.passGen').each(function () { + $(this).on('click', function () { + var targetId = $(this).data('targetid'); + password(11, true, true, targetId); + }); + }); + + $('.passComplexity').each(function () { + $(this).on('click', function () { + complexityDialog(); + }); + }); + + // Crear evento para mostrar clave generada/introducida + $('.showpass').each(function () { + $(this).on('mouseover', function () { + var targetId = $(this).data('targetid'); + $(this).attr('title', $('#' + targetId).val()); + }); + }); + + // Reset de los campos de clave + $('.reset').each(function () { + $(this).on('click', function () { + var targetId = $(this).data('targetid'); + $('#' + targetId).val(''); + $('#' + targetId + 'R').val(''); + }); + }); } \ No newline at end of file diff --git a/inc/themes/classic/ldap.inc b/inc/themes/classic/ldap.inc new file mode 100644 index 00000000..eb81c23d --- /dev/null +++ b/inc/themes/classic/ldap.inc @@ -0,0 +1,233 @@ + +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + /> +
    + + + + + /> +
    + + + + + /> +
    + + + + /> +
    + + + + + /> +
    + + + + + /> +
    + + + + + +
    + + + + + +
    + + + + + + /> +
    + + + +
    + +
    + + + + + + + + + + + +
    + +
    +
    \ No newline at end of file diff --git a/inc/themes/classic/mail.inc b/inc/themes/classic/mail.inc new file mode 100644 index 00000000..a96c528c --- /dev/null +++ b/inc/themes/classic/mail.inc @@ -0,0 +1,111 @@ + +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + /> +
    + + + +
    + + + +
    + + + + /> +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + + /> +
    + + + + + + + + + + +
    + +
    + +
    +
    \ No newline at end of file diff --git a/inc/themes/classic/mgmttabs.inc b/inc/themes/classic/mgmttabs.inc index e307c46d..c30ef5ff 100644 --- a/inc/themes/classic/mgmttabs.inc +++ b/inc/themes/classic/mgmttabs.inc @@ -1,14 +1,12 @@ $tab): ?>
    -
      -
    • - -
    • -
    +
    diff --git a/inc/themes/classic/passreset.inc b/inc/themes/classic/passreset.inc index 4d1939ba..3c7872cb 100644 --- a/inc/themes/classic/passreset.inc +++ b/inc/themes/classic/passreset.inc @@ -25,18 +25,15 @@

    -

    - -

    diff --git a/inc/themes/classic/profiles.inc b/inc/themes/classic/profiles.inc index ba9954be..821fd6a6 100644 --- a/inc/themes/classic/profiles.inc +++ b/inc/themes/classic/profiles.inc @@ -1,7 +1,7 @@

    -
    + @@ -151,12 +151,9 @@
    -
      -
    • - -
    • -
    +
    \ No newline at end of file diff --git a/inc/themes/classic/request.inc b/inc/themes/classic/request.inc index 778fd541..9912605f 100644 --- a/inc/themes/classic/request.inc +++ b/inc/themes/classic/request.inc @@ -1,6 +1,6 @@
    - +
    @@ -30,12 +30,12 @@
    -
      -
    • - -
    • -
    • - -
    • -
    + + +
    \ No newline at end of file diff --git a/inc/themes/classic/searchbox.inc b/inc/themes/classic/searchbox.inc index b96502ff..77ca0e98 100644 --- a/inc/themes/classic/searchbox.inc +++ b/inc/themes/classic/searchbox.inc @@ -14,13 +14,13 @@ - $name): ?> - $name): ?> @@ -34,31 +34,42 @@
    account_name; ?>
    \ No newline at end of file diff --git a/inc/themes/classic/security.inc b/inc/themes/classic/security.inc new file mode 100644 index 00000000..a129a486 --- /dev/null +++ b/inc/themes/classic/security.inc @@ -0,0 +1,74 @@ + +
    +
    + +
    + +
    + + + + + + + +
    + + + + + + /> + + +

    + QR Code + +

    + +

    + + + +

    + <?php echo _('Atención'); ?> + +
    + + + + + + + +
    +
    + +
    +
    + \ No newline at end of file diff --git a/inc/themes/classic/sessionbar.inc b/inc/themes/classic/sessionbar.inc index 68a8b536..27a60aa2 100644 --- a/inc/themes/classic/sessionbar.inc +++ b/inc/themes/classic/sessionbar.inc @@ -1,12 +1,16 @@
    + + + +
    + + +
    + + + +
    -
      -
    • - <?php echo _('Guardar'); ?> -
    • -
    +
    \ No newline at end of file diff --git a/inc/themes/classic/wiki.inc b/inc/themes/classic/wiki.inc new file mode 100644 index 00000000..275b0858 --- /dev/null +++ b/inc/themes/classic/wiki.inc @@ -0,0 +1,147 @@ + +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + + + /> +
    + + + + + +
    + + + + + +
    + + + + + +
    + + + + + + + + + +
    + +
    + +
    +
    + + \ No newline at end of file diff --git a/inc/themes/material-blue/css/css.php b/inc/themes/material-blue/css/css.php index 00657b8a..e52c73ba 100644 --- a/inc/themes/material-blue/css/css.php +++ b/inc/themes/material-blue/css/css.php @@ -26,12 +26,10 @@ $cssFilesTheme = array( // array('href' => 'https://fonts.googleapis.com/icon?family=Material+Icons', 'min' => false), array('href' => 'https://fonts.googleapis.com/css?family=Roboto:300,400,500,700', 'min' => false), - array('href' => \SP\Init::$THEMEPATH . '/css/fonts.css', 'min' => true), array('href' => \SP\Init::$THEMEPATH . '/css/material.min.css', 'min' => false), array('href' => \SP\Init::$THEMEPATH . '/css/material-custom.css', 'min' => true), array('href' => \SP\Init::$THEMEPATH . '/css/jquery-ui.theme.css', 'min' => true), array('href' => \SP\Init::$THEMEPATH . '/css/styles.css', 'min' => true), array('href' => \SP\Init::$THEMEPATH . '/css/search-grid.css', 'min' => true), - array('href' => \SP\Init::$THEMEPATH . '/css/chosen.css', 'min' => true), array('href' => \SP\Init::$THEMEPATH . '/css/alertify.custom.css', 'min' => true) ); \ No newline at end of file diff --git a/inc/themes/material-blue/css/fonts.css b/inc/themes/material-blue/css/fonts.css deleted file mode 100644 index 5fb6ff10..00000000 --- a/inc/themes/material-blue/css/fonts.css +++ /dev/null @@ -1,11 +0,0 @@ -@font-face { - font-family: 'Material Icons'; - font-style: normal; - font-weight: 400; - src: url("../inc/themes/material-blue/css/MaterialIcons-Regular.eot"); /* For IE6-8 */ - src: local('Material Icons'), - local('MaterialIcons-Regular'), - url("../inc/themes/material-blue/css/MaterialIcons-Regular.woff2") format('woff2'), - url("../inc/themes/material-blue/css/MaterialIcons-Regular.woff") format('woff'), - url("../inc/themes/material-blue/css/MaterialIcons-Regular.ttf") format('truetype'); -} \ No newline at end of file diff --git a/inc/themes/material-blue/css/material-custom.css b/inc/themes/material-blue/css/material-custom.css index 18028d51..5997db10 100644 --- a/inc/themes/material-blue/css/material-custom.css +++ b/inc/themes/material-blue/css/material-custom.css @@ -1,40 +1,3 @@ -.material-icons { - font-family: 'Material Icons'; - font-weight: normal; - font-style: normal; - font-size: 24px; /* Preferred icon size */ - display: inline-block; - width: 1em; - height: 1em; - line-height: 1; - text-transform: none; - letter-spacing: normal; - word-wrap: normal; - - /* Support for all WebKit browsers. */ - -webkit-font-smoothing: antialiased; - /* Support for Safari and Chrome. */ - text-rendering: optimizeLegibility; - - /* Support for Firefox. */ - -moz-osx-font-smoothing: grayscale; - - /* Support for IE. */ - font-feature-settings: 'liga'; -} - -.material-icons.md-18 { font-size: 18px; } -.material-icons.md-24 { font-size: 24px; } -.material-icons.md-36 { font-size: 36px; } -.material-icons.md-48 { font-size: 48px; } -.material-icons.md-60 { font-size: 60px; } - -.material-icons.md-dark { color: rgba(0, 0, 0, 0.54); } -.material-icons.md-dark.md-inactive { color: rgba(0, 0, 0, 0.26); } - -.material-icons.md-light { color: rgba(255, 255, 255, 1); } -.material-icons.md-light.md-inactive { color: rgba(255, 255, 255, 0.3); } - .mdl-button {margin: 0 .3em;} .fg-blue20 {color: rgba(83, 109, 254, .2)} @@ -85,5 +48,6 @@ .mdl-button--fab.mdl-button--colored.bg-green80 {background-color: rgba(0, 150, 136, .8)} .mdl-button--fab.mdl-button--colored.bg-green100 {background-color: rgb(0, 150, 136)} - .mdl-tooltip{text-align: justify; max-width: 400px;} + +.mdl-switch--inline {display: inline; margin: 0 1em;} diff --git a/inc/themes/material-blue/css/styles.css b/inc/themes/material-blue/css/styles.css index 4cef0915..366c7c00 100644 --- a/inc/themes/material-blue/css/styles.css +++ b/inc/themes/material-blue/css/styles.css @@ -1468,6 +1468,7 @@ footer img { } .tooltip { + width: 300px; max-width: 300px; background-color: #777; color: #fff; diff --git a/inc/themes/material-blue/footer.inc b/inc/themes/material-blue/footer.inc index 15335041..dfe0ed90 100644 --- a/inc/themes/material-blue/footer.inc +++ b/inc/themes/material-blue/footer.inc @@ -10,14 +10,16 @@ account_circle - +
    - + + +  ::  - cygnux.org
    diff --git a/inc/themes/material-blue/groups.inc b/inc/themes/material-blue/groups.inc index 267d279c..e702c96a 100644 --- a/inc/themes/material-blue/groups.inc +++ b/inc/themes/material-blue/groups.inc @@ -27,6 +27,21 @@
    + +
    @@ -44,4 +59,9 @@ save - \ No newline at end of file + + \ No newline at end of file diff --git a/inc/themes/material-blue/js/functions.js b/inc/themes/material-blue/js/functions.js index c355efbe..2fdb134d 100644 --- a/inc/themes/material-blue/js/functions.js +++ b/inc/themes/material-blue/js/functions.js @@ -13,22 +13,6 @@ var timeout; var passLength; var minPasswordLength = 8; -var baseScore = 0, score = 0; - -var num = {}; -num.Excess = 0; -num.Upper = 0; -num.Numbers = 0; -num.Symbols = 0; - -var bonus = {}; -bonus.Excess = 3; -bonus.Upper = 4; -bonus.Numbers = 5; -bonus.Symbols = 5; -bonus.Combo = 0; -bonus.FlatLower = 0; -bonus.FlatNumber = 0; var complexity = {}; complexity.numbers = true; @@ -58,17 +42,24 @@ jQuery.extend(jQuery.fancybox.defaults, { $(document).ready(function () { "use strict"; - //$("[title]").powerTip(powertipOptions); setContentSize(); setWindowAdjustSize(); + + // Activar tooltips + activeTooltip(); }).ajaxComplete(function () { "use strict"; - //$("[title]").powerTip(powertipOptions); - // Actualizar componentes de MDL cargados con AJAX componentHandler.upgradeDom(); + // Activar tooltips + activeTooltip(); +}); + +function activeTooltip(){ + "use strict"; + // Activar tooltips $('.active-tooltip').tooltip({ content: function () { @@ -76,8 +67,7 @@ $(document).ready(function () { }, tooltipClass: "tooltip" }); -}); - +} //$(function() { // "use strict"; // @@ -1044,7 +1034,6 @@ function password(length, special, fancy, targetId) { $('input:password, input.password').val(genPassword); $('#passLevel').show(500); } - } // Funciones para analizar al fortaleza de una clave @@ -1184,13 +1173,17 @@ function getBrowser() { return browser; } -// Dialógo de configuración de complejidad de clave -function complexityDialog(targetId) { +// Diálogo de configuración de complejidad de clave +function complexityDialog() { + "use strict"; + $('
    ').dialog({ modal: true, title: 'Opciones de Complejidad', width: '400px', open: function () { + var thisDialog = $(this); + var content = '
     
    "+"",C=d?"":"",x=0;7>x;x++)N=(x+u)%7,C+="";for(M+=C+"",A=this._getDaysInMonth(et,Z),et===e.selectedYear&&Z===e.selectedMonth&&(e.selectedDay=Math.min(e.selectedDay,A)),P=(this._getFirstDayOfMonth(et,Z)-u+7)%7,I=Math.ceil((P+A)/7),H=Q?this.maxRows>I?this.maxRows:I:I,this.maxRows=H,z=this._daylightSavingAdjust(new Date(et,Z,1-P)),F=0;H>F;F++){for(M+="",E=d?"":"",x=0;7>x;x++)O=g?g.apply(e.input?e.input[0]:null,[z]):[!0,""],j=z.getMonth()!==Z,W=j&&!y||!O[0]||X&&X>z||$&&z>$,E+="",z.setDate(z.getDate()+1),z=this._daylightSavingAdjust(z);M+=E+""}Z++,Z>11&&(Z=0,et++),M+="
    "+this._get(e,"weekHeader")+"=5?" class='ui-datepicker-week-end'":"")+">"+""+p[N]+"
    "+this._get(e,"calculateWeek")(z)+""+(j&&!v?" ":W?""+z.getDate()+"":""+z.getDate()+"")+"
    "+(Q?""+(K[0]>0&&T===K[1]-1?"
    ":""):""),k+=M}_+=k}return _+=l,e._keyEvent=!1,_},_generateMonthYearHeader:function(e,t,i,s,n,a,o,r){var h,l,u,d,c,p,f,m,g=this._get(e,"changeMonth"),v=this._get(e,"changeYear"),y=this._get(e,"showMonthAfterYear"),b="
    ",_="";if(a||!g)_+=""+o[t]+"";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,_+=""}if(y||(b+=_+(!a&&g&&v?"":" ")),!e.yearshtml)if(e.yearshtml="",a||!v)b+=""+i+"";else{for(d=this._get(e,"yearRange").split(":"),c=(new Date).getFullYear(),p=function(e){var t=e.match(/c[+\-].*/)?i+parseInt(e.substring(1),10):e.match(/[+\-].*/)?c+parseInt(e,10):parseInt(e,10);return isNaN(t)?c:t},f=p(d[0]),m=Math.max(f,p(d[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,e.yearshtml+="",b+=e.yearshtml,e.yearshtml=null}return b+=this._get(e,"yearSuffix"),y&&(b+=(!a&&g&&v?"":" ")+_),b+="
    "},_adjustInstDate:function(e,t,i){var s=e.drawYear+("Y"===i?t:0),n=e.drawMonth+("M"===i?t:0),a=Math.min(e.selectedDay,this._getDaysInMonth(s,n))+("D"===i?t:0),o=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(s,n,a)));e.selectedDay=o.getDate(),e.drawMonth=e.selectedMonth=o.getMonth(),e.drawYear=e.selectedYear=o.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(e)},_restrictMinMax:function(e,t){var i=this._getMinMaxDate(e,"min"),s=this._getMinMaxDate(e,"max"),n=i&&i>t?i:t;return s&&n>s?s:n},_notifyChange:function(e){var t=this._get(e,"onChangeMonthYear");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,"numberOfMonths");return null==t?[1,1]:"number"==typeof t?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+"Date"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return new Date(e,t,1).getDay()},_canAdjustMonth:function(e,t,i,s){var n=this._getNumberOfMonths(e),a=this._daylightSavingAdjust(new Date(i,s+(0>t?t:n[0]*n[1]),1));return 0>t&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(e,a)},_isInRange:function(e,t){var i,s,n=this._getMinMaxDate(e,"min"),a=this._getMinMaxDate(e,"max"),o=null,r=null,h=this._get(e,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),o=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(o+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||t.getTime()>=n.getTime())&&(!a||t.getTime()<=a.getTime())&&(!o||t.getFullYear()>=o)&&(!r||r>=t.getFullYear())},_getFormatConfig:function(e){var t=this._get(e,"shortYearCutoff");return t="string"!=typeof t?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,"dayNamesShort"),dayNames:this._get(e,"dayNames"),monthNamesShort:this._get(e,"monthNamesShort"),monthNames:this._get(e,"monthNames")}},_formatDate:function(e,t,i,s){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var n=t?"object"==typeof t?t:this._daylightSavingAdjust(new Date(s,i,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,"dateFormat"),n,this._getFormatConfig(e))}}),e.fn.datepicker=function(t){if(!this.length)return this;e.datepicker.initialized||(e(document).mousedown(e.datepicker._checkExternalClick),e.datepicker.initialized=!0),0===e("#"+e.datepicker._mainDivId).length&&e("body").append(e.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof t||"isDisabled"!==t&&"getDate"!==t&&"widget"!==t?"option"===t&&2===arguments.length&&"string"==typeof arguments[1]?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof t?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this].concat(i)):e.datepicker._attachDatepicker(this,t)}):e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i))},e.datepicker=new n,e.datepicker.initialized=!1,e.datepicker.uuid=(new Date).getTime(),e.datepicker.version="1.11.4",e.datepicker,e.widget("ui.dialog",{version:"1.11.4",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"Close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var i=e(this).css(t).offset().top;0>i&&e(this).css("top",t.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&e.fn.draggable&&this._makeDraggable(),this.options.resizable&&e.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var t=this.options.appendTo;return t&&(t.jquery||t.nodeType)?e(t):this.document.find(t||"body").eq(0)},_destroy:function(){var e,t=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),e=t.parent.children().eq(t.index),e.length&&e[0]!==this.element[0]?e.before(this.element):t.parent.append(this.element)},widget:function(){return this.uiDialog},disable:e.noop,enable:e.noop,close:function(t){var i,s=this;if(this._isOpen&&this._trigger("beforeClose",t)!==!1){if(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),!this.opener.filter(":focusable").focus().length)try{i=this.document[0].activeElement,i&&"body"!==i.nodeName.toLowerCase()&&e(i).blur()}catch(n){}this._hide(this.uiDialog,this.options.hide,function(){s._trigger("close",t)})}},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+e(this).css("z-index")}).get(),a=Math.max.apply(null,n);return a>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",a+1),s=!0),s&&!i&&this._trigger("focus",t),s},open:function(){var t=this; +return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=e(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var e=this._focusedElement;e||(e=this.element.find("[autofocus]")),e.length||(e=this.element.find(":tabbable")),e.length||(e=this.uiDialogButtonPane.find(":tabbable")),e.length||(e=this.uiDialogTitlebarClose.filter(":tabbable")),e.length||(e=this.uiDialog),e.eq(0).focus()},_keepFocus:function(t){function i(){var t=this.document[0].activeElement,i=this.uiDialog[0]===t||e.contains(this.uiDialog[0],t);i||this._focusTabbable()}t.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=e("
    ").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===e.ui.keyCode.ESCAPE)return t.preventDefault(),this.close(t),void 0;if(t.keyCode===e.ui.keyCode.TAB&&!t.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");t.target!==n[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==s[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){n.focus()}),t.preventDefault()):(this._delay(function(){s.focus()}),t.preventDefault())}},mousedown:function(e){this._moveToTop(e)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=e("
    ").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(t){e(t.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=e("").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(e){e.preventDefault(),this.close(e)}}),t=e("").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(t),this.uiDialog.attr({"aria-labelledby":t.attr("id")})},_title:function(e){this.options.title||e.html(" "),e.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=e("
    ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=e("
    ").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var t=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),e.isEmptyObject(i)||e.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),void 0):(e.each(i,function(i,s){var n,a;s=e.isFunction(s)?{click:s,text:i}:s,s=e.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(t.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,e("",s).button(a).appendTo(t.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function t(e){return{position:e.position,offset:e.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){e(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,t(n))},drag:function(e,s){i._trigger("drag",e,t(s))},stop:function(n,a){var o=a.offset.left-i.document.scrollLeft(),r=a.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(o>=0?"+":"")+o+" "+"top"+(r>=0?"+":"")+r,of:i.window},e(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,t(a))}})},_makeResizable:function(){function t(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){e(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,t(n))},resize:function(e,s){i._trigger("resize",e,t(s))},stop:function(n,a){var o=i.uiDialog.offset(),r=o.left-i.document.scrollLeft(),h=o.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},e(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,t(a))}}).css("position",a)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._makeFocusTarget(),this._focusedElement=e(t.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var t=this._trackingInstances(),i=e.inArray(this,t);-1!==i&&t.splice(i,1)},_trackingInstances:function(){var e=this.document.data("ui-dialog-instances");return e||(e=[],this.document.data("ui-dialog-instances",e)),e},_minHeight:function(){var e=this.options;return"auto"===e.height?e.minHeight:Math.min(e.minHeight,e.height)},_position:function(){var e=this.uiDialog.is(":visible");e||this.uiDialog.show(),this.uiDialog.position(this.options.position),e||this.uiDialog.hide()},_setOptions:function(t){var i=this,s=!1,n={};e.each(t,function(e,t){i._setOption(e,t),e in i.sizeRelatedOptions&&(s=!0),e in i.resizableRelatedOptions&&(n[e]=t)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,t){var i,s,n=this.uiDialog;"dialogClass"===e&&n.removeClass(this.options.dialogClass).addClass(t),"disabled"!==e&&(this._super(e,t),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:""+t}),"draggable"===e&&(i=n.is(":data(ui-draggable)"),i&&!t&&n.draggable("destroy"),!i&&t&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(s=n.is(":data(ui-resizable)"),s&&!t&&n.resizable("destroy"),s&&"string"==typeof t&&n.resizable("option","handles",t),s||t===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var e,t,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),e=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),t=Math.max(0,s.minHeight-e),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-e):"none","auto"===s.height?this.element.css({minHeight:t,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-e)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var t=e(this);return e("
    ").css({position:"absolute",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return e(t.target).closest(".ui-dialog").length?!0:!!e(t.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var t=!0;this._delay(function(){t=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(e){t||this._allowInteraction(e)||(e.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=e("
    ").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var e=this.document.data("ui-dialog-overlays")-1;e?this.document.data("ui-dialog-overlays",e):this.document.unbind("focusin").removeData("ui-dialog-overlays"),this.overlay.remove(),this.overlay=null}}}),e.widget("ui.progressbar",{version:"1.11.4",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=e("
    ").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(e){return void 0===e?this.options.value:(this.options.value=this._constrainedValue(e),this._refreshValue(),void 0)},_constrainedValue:function(e){return void 0===e&&(e=this.options.value),this.indeterminate=e===!1,"number"!=typeof e&&(e=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,e))},_setOptions:function(e){var t=e.value;delete e.value,this._super(e),this.options.value=this._constrainedValue(t),this._refreshValue()},_setOption:function(e,t){"max"===e&&(t=Math.max(this.min,t)),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).toggleClass("ui-corner-right",t===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=e("
    ").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger("change")),t===this.options.max&&this._trigger("complete")}}),e.widget("ui.selectmenu",{version:"1.11.4",defaultElement:"",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var t={},i=this.element;return e.each(["min","max","step"],function(e,s){var n=i.attr(s);void 0!==n&&n.length&&(t[s]=n)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",e),void 0)},mousewheel:function(e,t){if(t){if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()}},"mousedown .ui-spinner-button":function(t){function i(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(t)!==!1&&this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){return e(t.currentTarget).hasClass("ui-state-active")?this._start(t)===!1?!1:(this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var e=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=e.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*e.height())&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable() +},_keydown:function(t){var i=this.options,s=e.ui.keyCode;switch(t.keyCode){case s.UP:return this._repeat(null,1,t),!0;case s.DOWN:return this._repeat(null,-1,t),!0;case s.PAGE_UP:return this._repeat(null,i.page,t),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,t),!0}return!1},_uiSpinnerHtml:function(){return""},_buttonHtml:function(){return""+""+""+""+""},_start:function(e){return this.spinning||this._trigger("start",e)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(e,t,i){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,i)},e),this._spin(t*this.options.step,i)},_spin:function(e,t){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+e*this._increment(this.counter)),this.spinning&&this._trigger("spin",t,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(t){var i=this.options.incremental;return i?e.isFunction(i)?i(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=""+e,i=t.indexOf(".");return-1===i?0:t.length-i-1},_adjustValue:function(e){var t,i,s=this.options;return t=null!==s.min?s.min:0,i=e-t,i=Math.round(i/s.step)*s.step,e=t+i,e=parseFloat(e.toFixed(this._precision())),null!==s.max&&e>s.max?s.max:null!==s.min&&s.min>e?s.min:e},_stop:function(e){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",e))},_setOption:function(e,t){if("culture"===e||"numberFormat"===e){var i=this._parse(this.element.val());return this.options[e]=t,this.element.val(this._format(i)),void 0}("max"===e||"min"===e||"step"===e)&&"string"==typeof t&&(t=this._parse(t)),"icons"===e&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(t.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(t.down)),this._super(e,t),"disabled"===e&&(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable"))},_setOptions:h(function(e){this._super(e)}),_parse:function(e){return"string"==typeof e&&""!==e&&(e=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(e,10,this.options.culture):+e),""===e||isNaN(e)?null:e},_format:function(e){return""===e?"":window.Globalize&&this.options.numberFormat?Globalize.format(e,this.options.numberFormat,this.options.culture):e},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var e=this.value();return null===e?!1:e===this._adjustValue(e)},_value:function(e,t){var i;""!==e&&(i=this._parse(e),null!==i&&(t||(i=this._adjustValue(i)),e=this._format(i))),this.element.val(e),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:h(function(e){this._stepUp(e)}),_stepUp:function(e){this._start()&&(this._spin((e||1)*this.options.step),this._stop())},stepDown:h(function(e){this._stepDown(e)}),_stepDown:function(e){this._start()&&(this._spin((e||1)*-this.options.step),this._stop())},pageUp:h(function(e){this._stepUp((e||1)*this.options.page)}),pageDown:h(function(e){this._stepDown((e||1)*this.options.page)}),value:function(e){return arguments.length?(h(this._value).call(this,e),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),e.widget("ui.tabs",{version:"1.11.4",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var e=/#.*$/;return function(t){var i,s;t=t.cloneNode(!1),i=t.href.replace(e,""),s=location.href.replace(e,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return t.hash.length>1&&i===s}}(),_create:function(){var t=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible),this._processTabs(),i.active=this._initialActive(),e.isArray(i.disabled)&&(i.disabled=e.unique(i.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return t.tabs.index(e)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):e(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var t=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===t&&(s&&this.tabs.each(function(i,n){return e(n).attr("aria-controls")===s?(t=i,!1):void 0}),null===t&&(t=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===t||-1===t)&&(t=this.tabs.length?0:!1)),t!==!1&&(t=this.tabs.index(this.tabs.eq(t)),-1===t&&(t=i?!1:0)),!i&&t===!1&&this.anchors.length&&(t=0),t},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var i=e(this.document[0].activeElement).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:s++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:n=!1,s--;break;case e.ui.keyCode.END:s=this.anchors.length-1;break;case e.ui.keyCode.HOME:s=0;break;case e.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case e.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}t.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),t.ctrlKey||t.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){return t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,i){function s(){return t>n&&(t=0),0>t&&(t=n),t}for(var n=this.tabs.length-1;-1!==e.inArray(s(),this.options.disabled);)t=i?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):"disabled"===e?(this._setupDisabled(t),void 0):(this._super(e,t),"collapsible"===e&&(this.element.toggleClass("ui-tabs-collapsible",t),t||this.options.active!==!1||this._activate(0)),"event"===e&&this._setupEvents(t),"heightStyle"===e&&this._setupHeightStyle(t),void 0)},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,i=this.tablist.children(":has(a[href])");t.disabled=e.map(i.filter(".ui-state-disabled"),function(e){return i.index(e)}),this._processTabs(),t.active!==!1&&this.anchors.length?this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=e()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist").delegate("> li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(i,s){var n,a,o,r=e(s).uniqueId().attr("id"),h=e(s).closest("li"),l=h.attr("aria-controls");t._isLocal(s)?(n=s.hash,o=n.substring(1),a=t.element.find(t._sanitizeSelector(n))):(o=h.attr("aria-controls")||e({}).uniqueId()[0].id,n="#"+o,a=t.element.find(n),a.length||(a=t._createPanel(o),a.insertAfter(t.panels[i-1]||t.tablist)),a.attr("aria-live","polite")),a.length&&(t.panels=t.panels.add(a)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":o,"aria-labelledby":r}),a.attr("aria-labelledby",r)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("
    ").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var i,s=0;i=this.tabs[s];s++)t===!0||-1!==e.inArray(s,t)?e(i).addClass("ui-state-disabled").attr("aria-disabled","true"):e(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var i={};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(e){e.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,s=this.element.parent();"fill"===t?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=e(this),s=t.css("position");"absolute"!==s&&"fixed"!==s&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.panels.each(function(){i=Math.max(i,e(this).height("").height())}).height(i))},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?e():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):e(),u={oldTab:s,oldPanel:l,newTab:r?e():a,newPanel:h};t.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",t,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?e():a,this.xhr&&this.xhr.abort(),l.length||h.length||e.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),t),this._toggle(t,u))},_toggle:function(t,i){function s(){a.running=!1,a._trigger("activate",t,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(t){var i,s=this._findActive(t);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tablist.unbind(this.eventNamespace),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),i=t.data("ui-tabs-aria-controls");i?t.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(t){var i=this.options.disabled;i!==!1&&(void 0===t?i=!1:(t=this._getIndex(t),i=e.isArray(i)?e.map(i,function(e){return e!==t?e:null}):e.map(this.tabs,function(e,i){return i!==t?i:null})),this._setupDisabled(i))},disable:function(t){var i=this.options.disabled;if(i!==!0){if(void 0===t)i=!0;else{if(t=this._getIndex(t),-1!==e.inArray(t,i))return;i=e.isArray(i)?e.merge([t],i).sort():[t]}this._setupDisabled(i)}},load:function(t,i){t=this._getIndex(t);var s=this,n=this.tabs.eq(t),a=n.find(".ui-tabs-anchor"),o=this._getPanelForTab(n),r={tab:n,panel:o},h=function(e,t){"abort"===t&&s.panels.stop(!1,!0),n.removeClass("ui-tabs-loading"),o.removeAttr("aria-busy"),e===s.xhr&&delete s.xhr};this._isLocal(a[0])||(this.xhr=e.ajax(this._ajaxSettings(a,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(n.addClass("ui-tabs-loading"),o.attr("aria-busy","true"),this.xhr.done(function(e,t,n){setTimeout(function(){o.html(e),s._trigger("load",i,r),h(n,t)},1)}).fail(function(e,t){setTimeout(function(){h(e,t)},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr("href"),beforeSend:function(t,a){return n._trigger("beforeLoad",i,e.extend({jqXHR:t,ajaxSettings:a},s))}}},_getPanelForTab:function(t){var i=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),e.widget("ui.tooltip",{version:"1.11.4",options:{content:function(){var t=e(this).attr("title")||"";return e("").text(t).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_addDescribedBy:function(t,i){var s=(t.attr("aria-describedby")||"").split(/\s+/);s.push(i),t.data("ui-tooltip-id",i).attr("aria-describedby",e.trim(s.join(" ")))},_removeDescribedBy:function(t){var i=t.data("ui-tooltip-id"),s=(t.attr("aria-describedby")||"").split(/\s+/),n=e.inArray(i,s);-1!==n&&s.splice(n,1),t.removeData("ui-tooltip-id"),s=e.trim(s.join(" ")),s?t.attr("aria-describedby",s):t.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable(),this.liveRegion=e("
    ").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body)},_setOption:function(t,i){var s=this;return"disabled"===t?(this[i?"_disable":"_enable"](),this.options[t]=i,void 0):(this._super(t,i),"content"===t&&e.each(this.tooltips,function(e,t){s._updateContent(t.element)}),void 0)},_disable:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur");n.target=n.currentTarget=s.element[0],t.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.is("[title]")&&t.data("ui-tooltip-title",t.attr("title")).removeAttr("title")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))})},open:function(t){var i=this,s=e(t?t.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),t&&"mouseover"===t.type&&s.parents().each(function(){var t,s=e(this);s.data("ui-tooltip-open")&&(t=e.Event("blur"),t.target=t.currentTarget=this,i.close(t,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(t,s),this._updateContent(s,t))},_updateContent:function(e,t){var i,s=this.options.content,n=this,a=t?t.type:null;return"string"==typeof s?this._open(t,e,s):(i=s.call(e[0],function(i){n._delay(function(){e.data("ui-tooltip-open")&&(t&&(t.type=a),this._open(t,e,i))})}),i&&this._open(t,e,i),void 0)},_open:function(t,i,s){function n(e){l.of=e,o.is(":hidden")||o.position(l)}var a,o,r,h,l=e.extend({},this.options.position);if(s){if(a=this._find(i))return a.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(t&&"mouseover"===t.type?i.attr("title",""):i.removeAttr("title")),a=this._tooltip(i),o=a.tooltip,this._addDescribedBy(i,o.attr("id")),o.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),s.clone?(h=s.clone(),h.removeAttr("id").find("[id]").removeAttr("id")):h=s,e("
    ").html(h).appendTo(this.liveRegion),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:n}),n(t)):o.position(e.extend({of:i},this.options.position)),o.hide(),this._show(o,this.options.show),this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){o.is(":visible")&&(n(l.of),clearInterval(r))},e.fx.interval)),this._trigger("open",t,{tooltip:o})}},_registerCloseHandlers:function(t,i){var s={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var s=e.Event(t);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),t&&"mouseover"!==t.type||(s.mouseleave="close"),t&&"focusin"!==t.type||(s.focusout="close"),this._on(!0,i,s)},close:function(t){var i,s=this,n=e(t?t.currentTarget:this.element),a=this._find(n);return a?(i=a.tooltip,a.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),a.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(e(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),t&&"mouseleave"===t.type&&e.each(this.parents,function(t,i){e(i.element).attr("title",i.title),delete s.parents[t]}),a.closing=!0,this._trigger("close",t,{tooltip:i}),a.hiding||(a.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(t){var i=e("
    ").attr("role","tooltip").addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||"")),s=i.uniqueId().attr("id");return e("
    ").addClass("ui-tooltip-content").appendTo(i),i.appendTo(this.document[0].body),this.tooltips[s]={element:t,tooltip:i}},_find:function(e){var t=e.data("ui-tooltip-id");return t?this.tooltips[t]:null},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr("id")]},_destroy:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur"),a=s.element;n.target=n.currentTarget=a[0],t.close(n,!0),e("#"+i).remove(),a.data("ui-tooltip-title")&&(a.attr("title")||a.attr("title",a.data("ui-tooltip-title")),a.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}});var y="ui-effects-",b=e;e.effects={effect:{}},function(e,t){function i(e,t,i){var s=d[t.type]||{};return null==e?i||!t.def?null:t.def:(e=s.floor?~~e:parseFloat(e),isNaN(e)?t.def:s.mod?(e+s.mod)%s.mod:0>e?0:e>s.max?s.max:e)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(e,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[u[l].cache]=o[u[l].cache],n=s._rgba=o._rgba,!1):t}),n.length?("0,0,0,0"===n.join()&&e.extend(n,a.transparent),s):a[i]}function n(e,t,i){return i=(i+1)%1,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+6*(t-e)*(2/3-i):e}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[e[1],e[2],e[3],e[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[2.55*e[1],2.55*e[2],2.55*e[3],e[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(e){return[e[1],e[2]/100,e[3]/100,e[4]]}}],l=e.Color=function(t,i,s,n){return new e.Color.fn.parse(t,i,s,n)},u={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},d={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},c=l.support={},p=e("

    ")[0],f=e.each;p.style.cssText="background-color:rgba(1,1,1,.5)",c.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(u,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),l.fn=e.extend(l.prototype,{parse:function(n,o,r,h){if(n===t)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=e(n).css(o),o=t);var d=this,c=e.type(n),p=this._rgba=[];return o!==t&&(n=[n,o,r,h],c="array"),"string"===c?this.parse(s(n)||a._default):"array"===c?(f(u.rgba.props,function(e,t){p[t.idx]=i(n[t.idx],t)}),this):"object"===c?(n instanceof l?f(u,function(e,t){n[t.cache]&&(d[t.cache]=n[t.cache].slice())}):f(u,function(t,s){var a=s.cache;f(s.props,function(e,t){if(!d[a]&&s.to){if("alpha"===e||null==n[e])return;d[a]=s.to(d._rgba)}d[a][t.idx]=i(n[e],t,!0)}),d[a]&&0>e.inArray(null,d[a].slice(0,3))&&(d[a][3]=1,s.from&&(d._rgba=s.from(d[a])))}),this):t},is:function(e){var i=l(e),s=!0,n=this;return f(u,function(e,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(e,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:t})),s}),s},_space:function(){var e=[],t=this;return f(u,function(i,s){t[s.cache]&&e.push(i)}),e.pop()},transition:function(e,t){var s=l(e),n=s._space(),a=u[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(e,n){var a=n.idx,o=r[a],l=s[a],u=d[n.type]||{};null!==l&&(null===o?h[a]=l:(u.mod&&(l-o>u.mod/2?o+=u.mod:o-l>u.mod/2&&(o-=u.mod)),h[a]=i((l-o)*t+o,n)))}),this[n](h)},blend:function(t){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(t)._rgba;return l(e.map(i,function(e,t){return(1-s)*n[t]+s*e}))},toRgbaString:function(){var t="rgba(",i=e.map(this._rgba,function(e,t){return null==e?t>2?1:0:e});return 1===i[3]&&(i.pop(),t="rgb("),t+i.join()+")"},toHslaString:function(){var t="hsla(",i=e.map(this.hsla(),function(e,t){return null==e&&(e=t>2?1:0),t&&3>t&&(e=Math.round(100*e)+"%"),e});return 1===i[3]&&(i.pop(),t="hsl("),t+i.join()+")"},toHexString:function(t){var i=this._rgba.slice(),s=i.pop();return t&&i.push(~~(255*s)),"#"+e.map(i,function(e){return e=(e||0).toString(16),1===e.length?"0"+e:e}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,u.hsla.to=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t,i,s=e[0]/255,n=e[1]/255,a=e[2]/255,o=e[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,u=r+h,d=.5*u;return t=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=d?l/u:l/(2-u),[Math.round(t)%360,i,d,null==o?1:o]},u.hsla.from=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t=e[0]/360,i=e[1],s=e[2],a=e[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,t+1/3)),Math.round(255*n(r,o,t)),Math.round(255*n(r,o,t-1/3)),a]},f(u,function(s,n){var a=n.props,o=n.cache,h=n.to,u=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===t)return this[o].slice();var n,r=e.type(s),d="array"===r||"object"===r?s:arguments,c=this[o].slice();return f(a,function(e,t){var s=d["object"===r?e:t.idx];null==s&&(s=c[t.idx]),c[t.idx]=i(s,t)}),u?(n=l(u(c)),n[o]=c,n):l(c)},f(a,function(t,i){l.fn[t]||(l.fn[t]=function(n){var a,o=e.type(n),h="alpha"===t?this._hsla?"hsla":"rgba":s,l=this[h](),u=l[i.idx];return"undefined"===o?u:("function"===o&&(n=n.call(this,u),o=e.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=u+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(t){var i=t.split(" ");f(i,function(t,i){e.cssHooks[i]={set:function(t,n){var a,o,r="";if("transparent"!==n&&("string"!==e.type(n)||(a=s(n)))){if(n=l(a||n),!c.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?t.parentNode:t;(""===r||"transparent"===r)&&o&&o.style;)try{r=e.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{t.style[i]=n}catch(h){}}},e.fx.step[i]=function(t){t.colorInit||(t.start=l(t.elem,i),t.end=l(t.end),t.colorInit=!0),e.cssHooks[i].set(t.elem,t.start.transition(t.end,t.pos))}})},l.hook(o),e.cssHooks.borderColor={expand:function(e){var t={};return f(["Top","Right","Bottom","Left"],function(i,s){t["border"+s+"Color"]=e}),t}},a=e.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(b),function(){function t(t){var i,s,n=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[e.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function i(t,i){var s,a,o={};for(s in i)a=i[s],t[s]!==a&&(n[s]||(e.fx.step[s]||!isNaN(parseFloat(a)))&&(o[s]=a));return o}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,i){e.fx.step[i]=function(e){("none"!==e.end&&!e.setAttr||1===e.pos&&!e.setAttr)&&(b.style(e.elem,i,e.end),e.setAttr=!0)}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e.effects.animateClass=function(n,a,o,r){var h=e.speed(a,o,r);return this.queue(function(){var a,o=e(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var i=e(this);return{el:i,start:t(this)}}),a=function(){e.each(s,function(e,t){n[t]&&o[t+"Class"](n[t])})},a(),l=l.map(function(){return this.end=t(this.el[0]),this.diff=i(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var t=this,i=e.Deferred(),s=e.extend({},h,{queue:!1,complete:function(){i.resolve(t)}});return this.el.animate(this.diff,s),i.promise()}),e.when.apply(e,l.get()).done(function(){a(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,"")})}),h.complete.call(o[0])})})},e.fn.extend({addClass:function(t){return function(i,s,n,a){return s?e.effects.animateClass.call(this,{add:i},s,n,a):t.apply(this,arguments)}}(e.fn.addClass),removeClass:function(t){return function(i,s,n,a){return arguments.length>1?e.effects.animateClass.call(this,{remove:i},s,n,a):t.apply(this,arguments)}}(e.fn.removeClass),toggleClass:function(t){return function(i,s,n,a,o){return"boolean"==typeof s||void 0===s?n?e.effects.animateClass.call(this,s?{add:i}:{remove:i},n,a,o):t.apply(this,arguments):e.effects.animateClass.call(this,{toggle:i},s,n,a)}}(e.fn.toggleClass),switchClass:function(t,i,s,n,a){return e.effects.animateClass.call(this,{add:i,remove:t},s,n,a)}})}(),function(){function t(t,i,s,n){return e.isPlainObject(t)&&(i=t,t=t.effect),t={effect:t},null==i&&(i={}),e.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||e.fx.speeds[i])&&(n=s,s=i,i={}),e.isFunction(s)&&(n=s,s=null),i&&e.extend(t,i),s=s||i.duration,t.duration=e.fx.off?0:"number"==typeof s?s:s in e.fx.speeds?e.fx.speeds[s]:e.fx.speeds._default,t.complete=n||i.complete,t}function i(t){return!t||"number"==typeof t||e.fx.speeds[t]?!0:"string"!=typeof t||e.effects.effect[t]?e.isFunction(t)?!0:"object"!=typeof t||t.effect?!1:!0:!0}e.extend(e.effects,{version:"1.11.4",save:function(e,t){for(var i=0;t.length>i;i++)null!==t[i]&&e.data(y+t[i],e[0].style[t[i]])},restore:function(e,t){var i,s;for(s=0;t.length>s;s++)null!==t[s]&&(i=e.data(y+t[s]),void 0===i&&(i=""),e.css(t[s],i))},setMode:function(e,t){return"toggle"===t&&(t=e.is(":hidden")?"show":"hide"),t},getBaseline:function(e,t){var i,s;switch(e[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=e[0]/t.height}switch(e[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=e[1]/t.width}return{x:s,y:i}},createWrapper:function(t){if(t.parent().is(".ui-effects-wrapper"))return t.parent();var i={width:t.outerWidth(!0),height:t.outerHeight(!0),"float":t.css("float")},s=e("

    ").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:t.width(),height:t.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return t.wrap(s),(t[0]===a||e.contains(t[0],a))&&e(a).focus(),s=t.parent(),"static"===t.css("position")?(s.css({position:"relative"}),t.css({position:"relative"})):(e.extend(i,{position:t.css("position"),zIndex:t.css("z-index")}),e.each(["top","left","bottom","right"],function(e,s){i[s]=t.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),t.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),t.css(n),s.css(i).show()},removeWrapper:function(t){var i=document.activeElement; +return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===i||e.contains(t[0],i))&&e(i).focus()),t},setTransition:function(t,i,s,n){return n=n||{},e.each(i,function(e,i){var a=t.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),e.fn.extend({effect:function(){function i(t){function i(){e.isFunction(a)&&a.call(n[0]),e.isFunction(t)&&t()}var n=e(this),a=s.complete,r=s.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),i()):o.call(n[0],s,i)}var s=t.apply(this,arguments),n=s.mode,a=s.queue,o=e.effects.effect[s.effect];return e.fx.off||!o?n?this[n](s.duration,s.complete):this.each(function(){s.complete&&s.complete.call(this)}):a===!1?this.each(i):this.queue(a||"fx",i)},show:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="show",this.effect.call(this,n)}}(e.fn.show),hide:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(e.fn.hide),toggle:function(e){return function(s){if(i(s)||"boolean"==typeof s)return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(e.fn.toggle),cssUnit:function(t){var i=this.css(t),s=[];return e.each(["em","px","%","pt"],function(e,t){i.indexOf(t)>0&&(s=[parseFloat(i),t])}),s}})}(),function(){var t={};e.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,i){t[i]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)},Elastic:function(e){return 0===e||1===e?e:-Math.pow(2,8*(e-1))*Math.sin((80*(e-1)-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){for(var t,i=4;((t=Math.pow(2,--i))-1)/11>e;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*t-2)/22-e,2)}}),e.each(t,function(t,i){e.easing["easeIn"+t]=i,e.easing["easeOut"+t]=function(e){return 1-i(1-e)},e.easing["easeInOut"+t]=function(e){return.5>e?i(2*e)/2:1-i(-2*e+2)/2}})}(),e.effects,e.effects.effect.blind=function(t,i){var s,n,a,o=e(this),r=/up|down|vertical/,h=/up|left|vertical|horizontal/,l=["position","top","bottom","left","right","height","width"],u=e.effects.setMode(o,t.mode||"hide"),d=t.direction||"up",c=r.test(d),p=c?"height":"width",f=c?"top":"left",m=h.test(d),g={},v="show"===u;o.parent().is(".ui-effects-wrapper")?e.effects.save(o.parent(),l):e.effects.save(o,l),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n=s[p](),a=parseFloat(s.css(f))||0,g[p]=v?n:0,m||(o.css(c?"bottom":"right",0).css(c?"top":"left","auto").css({position:"absolute"}),g[f]=v?a:n+a),v&&(s.css(p,0),m||s.css(f,a+n)),s.animate(g,{duration:t.duration,easing:t.easing,queue:!1,complete:function(){"hide"===u&&o.hide(),e.effects.restore(o,l),e.effects.removeWrapper(o),i()}})},e.effects.effect.bounce=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"effect"),l="hide"===h,u="show"===h,d=t.direction||"up",c=t.distance,p=t.times||5,f=2*p+(u||l?1:0),m=t.duration/f,g=t.easing,v="up"===d||"down"===d?"top":"left",y="up"===d||"left"===d,b=o.queue(),_=b.length;for((u||l)&&r.push("opacity"),e.effects.save(o,r),o.show(),e.effects.createWrapper(o),c||(c=o["top"===v?"outerHeight":"outerWidth"]()/3),u&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,y?2*-c:2*c).animate(a,m,g)),l&&(c/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g).animate(a,m,g),c=l?2*c:c/2;l&&(n={opacity:0},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}),_>1&&b.splice.apply(b,[1,0].concat(b.splice(_,f+1))),o.dequeue()},e.effects.effect.clip=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"hide"),l="show"===h,u=t.direction||"vertical",d="vertical"===u,c=d?"height":"width",p=d?"top":"left",f={};e.effects.save(o,r),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[c](),l&&(n.css(c,0),n.css(p,a/2)),f[c]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){l||o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}})},e.effects.effect.drop=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","opacity","height","width"],o=e.effects.setMode(n,t.mode||"hide"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h?"pos":"neg",d={opacity:r?1:0};e.effects.save(n,a),n.show(),e.effects.createWrapper(n),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===u?-s:s),d[l]=(r?"pos"===u?"+=":"-=":"pos"===u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.explode=function(t,i){function s(){b.push(this),b.length===d*c&&n()}function n(){p.css({visibility:"visible"}),e(b).remove(),m||p.hide(),i()}var a,o,r,h,l,u,d=t.pieces?Math.round(Math.sqrt(t.pieces)):3,c=d,p=e(this),f=e.effects.setMode(p,t.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/c),y=Math.ceil(p.outerHeight()/d),b=[];for(a=0;d>a;a++)for(h=g.top+a*y,u=a-(d-1)/2,o=0;c>o;o++)r=g.left+o*v,l=o-(c-1)/2,p.clone().appendTo("body").wrap("
    ").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*y}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:y,left:r+(m?l*v:0),top:h+(m?u*y:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:u*y),opacity:m?1:0},t.duration||500,t.easing,s)},e.effects.effect.fade=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:t.duration,easing:t.easing,complete:i})},e.effects.effect.fold=function(t,i){var s,n,a=e(this),o=["position","top","bottom","left","right","height","width"],r=e.effects.setMode(a,t.mode||"hide"),h="show"===r,l="hide"===r,u=t.size||15,d=/([0-9]+)%/.exec(u),c=!!t.horizFirst,p=h!==c,f=p?["width","height"]:["height","width"],m=t.duration/2,g={},v={};e.effects.save(a,o),a.show(),s=e.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],d&&(u=parseInt(d[1],10)/100*n[l?0:1]),h&&s.css(c?{height:0,width:u}:{height:u,width:0}),g[f[0]]=h?n[0]:u,v[f[1]]=h?n[1]:0,s.animate(g,m,t.easing).animate(v,m,t.easing,function(){l&&a.hide(),e.effects.restore(a,o),e.effects.removeWrapper(a),i()})},e.effects.effect.highlight=function(t,i){var s=e(this),n=["backgroundImage","backgroundColor","opacity"],a=e.effects.setMode(s,t.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),e.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(o,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===a&&s.hide(),e.effects.restore(s,n),i()}})},e.effects.effect.size=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],u=["fontSize"],d=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],c=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=e.effects.setMode(o,t.mode||"effect"),f=t.restore||"effect"!==p,m=t.scale||"both",g=t.origin||["middle","center"],v=o.css("position"),y=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===t.mode&&"show"===p?(o.from=t.to||b,o.to=t.from||s):(o.from=t.from||("show"===p?b:s),o.to=t.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(y=y.concat(d),o.from=e.effects.setTransition(o,d,a.from.y,o.from),o.to=e.effects.setTransition(o,d,a.to.y,o.to)),a.from.x!==a.to.x&&(y=y.concat(c),o.from=e.effects.setTransition(o,c,a.from.x,o.from),o.to=e.effects.setTransition(o,c,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(y=y.concat(u).concat(l),o.from=e.effects.setTransition(o,u,a.from.y,o.from),o.to=e.effects.setTransition(o,u,a.to.y,o.to)),e.effects.save(o,y),o.show(),e.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=e.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(d=d.concat(["marginTop","marginBottom"]).concat(u),c=c.concat(["marginLeft","marginRight"]),l=r.concat(d).concat(c),o.find("*[width]").each(function(){var i=e(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};f&&e.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=e.effects.setTransition(i,d,a.from.y,i.from),i.to=e.effects.setTransition(i,d,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=e.effects.setTransition(i,c,a.from.x,i.from),i.to=e.effects.setTransition(i,c,a.to.x,i.to)),i.css(i.from),i.animate(i.to,t.duration,t.easing,function(){f&&e.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),e.effects.restore(o,y),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):e.each(["top","left"],function(e,t){o.css(t,function(t,i){var s=parseInt(i,10),n=e?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),e.effects.removeWrapper(o),i()}})},e.effects.effect.scale=function(t,i){var s=e(this),n=e.extend(!0,{},t),a=e.effects.setMode(s,t.mode||"effect"),o=parseInt(t.percent,10)||(0===parseInt(t.percent,10)?0:"hide"===a?0:100),r=t.direction||"both",h=t.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},u={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=t.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*u.y,width:l.width*u.x,outerHeight:l.outerHeight*u.y,outerWidth:l.outerWidth*u.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},e.effects.effect.puff=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"hide"),a="hide"===n,o=parseInt(t.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};e.extend(t,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(t)},e.effects.effect.pulsate=function(t,i){var s,n=e(this),a=e.effects.setMode(n,t.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(t.times||5)+(h?1:0),u=t.duration/l,d=0,c=n.queue(),p=c.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),d=1),s=1;l>s;s++)n.animate({opacity:d},u,t.easing),d=1-d;n.animate({opacity:d},u,t.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&c.splice.apply(c,[1,0].concat(c.splice(p,l+1))),n.dequeue()},e.effects.effect.shake=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","height","width"],o=e.effects.setMode(n,t.mode||"effect"),r=t.direction||"left",h=t.distance||20,l=t.times||3,u=2*l+1,d=Math.round(t.duration/u),c="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),y=v.length;for(e.effects.save(n,a),n.show(),e.effects.createWrapper(n),f[c]=(p?"-=":"+=")+h,m[c]=(p?"+=":"-=")+2*h,g[c]=(p?"-=":"+=")+2*h,n.animate(f,d,t.easing),s=1;l>s;s++)n.animate(m,d,t.easing).animate(g,d,t.easing);n.animate(m,d,t.easing).animate(f,d/2,t.easing).queue(function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}),y>1&&v.splice.apply(v,[1,0].concat(v.splice(y,u+1))),n.dequeue()},e.effects.effect.slide=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","width","height"],o=e.effects.setMode(n,t.mode||"show"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h,d={};e.effects.save(n,a),n.show(),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0),e.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,u?isNaN(s)?"-"+s:-s:s),d[l]=(r?u?"+=":"-=":u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.transfer=function(t,i){var s=e(this),n=e(t.to),a="fixed"===n.css("position"),o=e("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),u={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},d=s.offset(),c=e("
    ").appendTo(document.body).addClass(t.className).css({top:d.top-r,left:d.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(u,t.duration,t.easing,function(){c.remove(),i()})}}); \ No newline at end of file diff --git a/imgs/register.eot b/res/register.eot similarity index 100% rename from imgs/register.eot rename to res/register.eot diff --git a/imgs/register.otf b/res/register.otf similarity index 100% rename from imgs/register.otf rename to res/register.otf diff --git a/imgs/register.ttf b/res/register.ttf similarity index 100% rename from imgs/register.ttf rename to res/register.ttf diff --git a/imgs/register.woff b/res/register.woff similarity index 100% rename from imgs/register.woff rename to res/register.woff diff --git a/imgs/register.woff2 b/res/register.woff2 similarity index 100% rename from imgs/register.woff2 rename to res/register.woff2 diff --git a/web/AccountC.class.php b/web/AccountC.class.php index 19a423d6..6c80653e 100644 --- a/web/AccountC.class.php +++ b/web/AccountC.class.php @@ -33,6 +33,7 @@ use SP\Groups; use SP\Session; use SP\SPException; use SP\Users; +use SP\UserUtil; defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); @@ -164,7 +165,7 @@ class AccountC extends Controller implements ActionsInterface if (!Acl::checkUserAccess($this->getAction())) { $this->showError(self::ERR_PAGE_NO_PERMISSION); return false; - } elseif (!Users::checkUserUpdateMPass()) { + } elseif (!UserUtil::checkUserUpdateMPass()) { $this->showError(self::ERR_UPDATE_MPASS); return false; } elseif ($this->_id > 0 && !Acl::checkAccountAccess($this->_action, $this->_account->getAccountDataForACL())) { @@ -184,7 +185,7 @@ class AccountC extends Controller implements ActionsInterface // $this->view->assign('accountParentId', $this->getAccount()->getAccountParentId()); $this->view->assign('accountIsHistory', $this->getAccount()->getAccountIsHistory()); $this->view->assign('accountOtherUsers', $this->getAccount()->getAccountUsersId()); - $this->view->assign('accountOtherUsersName', \SP\Users::getUsersNameForAccount($this->getId())); + $this->view->assign('accountOtherUsersName', UserUtil::getUsersNameForAccount($this->getId())); $this->view->assign('accountOtherGroups', $this->getAccount()->getAccountUserGroupsId()); $this->view->assign('accountOtherGroupsName', \SP\Groups::getGroupsNameForAccount($this->getId())); $this->view->assign('changesHash', $this->getAccount()->calcChangesHash()); @@ -296,7 +297,7 @@ class AccountC extends Controller implements ActionsInterface */ private function setAccountDetails() { - $this->_account->setAccountUsersId(Users::getUsersForAccount($this->getId())); + $this->_account->setAccountUsersId(UserUtil::getUsersForAccount($this->getId())); $this->_account->setAccountUserGroupsId(Groups::getGroupsForAccount($this->getId())); } diff --git a/web/MainC.class.php b/web/MainC.class.php index 0b0f2286..d1219e5e 100644 --- a/web/MainC.class.php +++ b/web/MainC.class.php @@ -99,7 +99,9 @@ class MainC extends Controller implements ActionsInterface */ public function getMain() { - $this->view->assign('onLoad', 'doAction(' . self::ACTION_ACC_SEARCH . ')'); + $onLoad = array('doAction(' . self::ACTION_ACC_SEARCH . ')', 'checkUpds()'); + + $this->view->assign('onLoad', implode(';', $onLoad)); $this->getSessionBar(); $this->getMenu(); @@ -341,13 +343,13 @@ class MainC extends Controller implements ActionsInterface public function getCheckUpdates() { // Comprobar una vez por sesión - if (!\SP\Session::getUpdated()) { +// if (!\SP\Session::getUpdated()) { $updates = \SP\Util::checkUpdates(); - \SP\Session::setUpdated(true); - } +// \SP\Session::setUpdated(true); +// } // Forzar la escritura de la sesión - session_write_close(); +// session_write_close(); $this->view->addTemplate('update'); diff --git a/web/SearchC.class.php b/web/SearchC.class.php index a5d5c038..c68d9aa6 100644 --- a/web/SearchC.class.php +++ b/web/SearchC.class.php @@ -25,6 +25,8 @@ namespace SP\Controller; +use SP\UserUtil; + defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); /** @@ -208,7 +210,7 @@ class SearchC extends Controller implements ActionsInterface // Obtenemos datos si el usuario tiene acceso a los datos de la cuenta if ($show) { $secondaryGroups = \SP\Groups::getGroupsNameForAccount($account->account_id); - $secondaryUsers = \SP\Users::getUsersNameForAccount($account->account_id); + $secondaryUsers = UserUtil::getUsersNameForAccount($account->account_id); $secondaryAccesses = '(G) ' . $account->usergroup_name . '*
    '; diff --git a/web/UsersMgmtC.class.php b/web/UsersMgmtC.class.php index 64c0de60..f726f636 100644 --- a/web/UsersMgmtC.class.php +++ b/web/UsersMgmtC.class.php @@ -25,7 +25,14 @@ namespace SP\Controller; +use SP\Common; +use SP\DB; +use SP\Groups; use SP\Profile; +use SP\Session; +use SP\Template; +use SP\UserUtil; +use SP\Util; defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); @@ -44,14 +51,14 @@ class UsersMgmtC extends Controller implements ActionsInterface /** * Constructor * - * @param $template \SP\Template con instancia de plantilla + * @param $template Template con instancia de plantilla */ - public function __construct(\SP\Template $template = null) + public function __construct(Template $template = null) { parent::__construct($template); - $this->view->assign('isDemo', \SP\Util::demoIsEnabled()); - $this->view->assign('sk', \SP\Common::getSessionKey()); + $this->view->assign('isDemo', Util::demoIsEnabled()); + $this->view->assign('sk', Common::getSessionKey()); } /** @@ -61,7 +68,7 @@ class UsersMgmtC extends Controller implements ActionsInterface { $this->setAction(self::ACTION_USR_USERS); - $this->view->assign('sk', \SP\Common::getSessionKey(true)); + $this->view->assign('sk', Common::getSessionKey(true)); if (!$this->checkAccess()) { return; @@ -148,7 +155,7 @@ class UsersMgmtC extends Controller implements ActionsInterface $this->view->append( 'tabs', array( 'title' => _('Gestión de Usuarios'), - 'query' => \SP\Users::getUsers(), + 'query' => UserUtil::getUsers(), 'props' => $arrUsersTableProp, 'time' => round(microtime() - $this->view->queryTimeStart, 5)) ); @@ -162,7 +169,7 @@ class UsersMgmtC extends Controller implements ActionsInterface { $this->setAction(self::ACTION_USR_GROUPS); - $this->view->assign('sk', \SP\Common::getSessionKey(true)); + $this->view->assign('sk', Common::getSessionKey(true)); if (!$this->checkAccess()) { return; @@ -207,7 +214,7 @@ class UsersMgmtC extends Controller implements ActionsInterface $this->view->append( 'tabs', array( 'title' => _('Gestión de Grupos'), - 'query' => \SP\Groups::getGroups(), + 'query' => Groups::getGroups(), 'props' => $arrGroupsTableProp, 'time' => round(microtime() - $this->view->queryTimeStart, 5)) ); @@ -220,7 +227,7 @@ class UsersMgmtC extends Controller implements ActionsInterface { $this->setAction(self::ACTION_USR_PROFILES); - $this->view->assign('sk', \SP\Common::getSessionKey(true)); + $this->view->assign('sk', Common::getSessionKey(true)); if (!$this->checkAccess()) { return; @@ -272,7 +279,7 @@ class UsersMgmtC extends Controller implements ActionsInterface $this->view->append( 'tabs', array( 'title' => _('Gestión de Perfiles'), - 'query' => \SP\Profile::getProfiles(), + 'query' => Profile::getProfiles(), 'props' => $arrProfilesTableProp, 'time' => round(microtime() - $this->view->queryTimeStart, 5) ) @@ -301,9 +308,9 @@ class UsersMgmtC extends Controller implements ActionsInterface $this->view->addTemplate('users'); $this->view->assign('isDisabled', ($this->view->isDemo || $this->view->actionId === self::ACTION_USR_USERS_VIEW) ? 'disabled' : ''); - $this->view->assign('user', \SP\Users::getUserData($this->view->itemId)); - $this->view->assign('groups', \SP\DB::getValuesForSelect('usrGroups', 'usergroup_id', 'usergroup_name')); - $this->view->assign('profiles', \SP\DB::getValuesForSelect('usrProfiles', 'userprofile_id', 'userprofile_name')); + $this->view->assign('user', UserUtil::getUserData($this->view->itemId)); + $this->view->assign('groups', DB::getValuesForSelect('usrGroups', 'usergroup_id', 'usergroup_name')); + $this->view->assign('profiles', DB::getValuesForSelect('usrProfiles', 'userprofile_id', 'userprofile_name')); $this->view->assign('ro', ($this->view->user['checks']['user_isLdap']) ? 'READONLY' : ''); } @@ -314,7 +321,9 @@ class UsersMgmtC extends Controller implements ActionsInterface { $this->view->addTemplate('groups'); - $this->view->assign('group', \SP\Groups::getGroupData($this->view->itemId)); + $this->view->assign('group', Groups::getGroupData($this->view->itemId)); + $this->view->assign('users', \SP\DB::getValuesForSelect('usrData', 'user_id', 'user_name')); + $this->view->assign('groupUsers', \SP\Groups::getUsersForGroup($this->view->itemId)); } /** @@ -324,13 +333,13 @@ class UsersMgmtC extends Controller implements ActionsInterface { $this->view->addTemplate('profiles'); - $profile = ($this->view->itemId) ? \SP\Profile::getProfile($this->view->itemId) : new Profile(); + $profile = ($this->view->itemId) ? Profile::getProfile($this->view->itemId) : new Profile(); $this->view->assign('profile', $profile); $this->view->assign('isDisabled', ($this->view->actionId === self::ACTION_USR_PROFILES_VIEW) ? 'disabled' : ''); if ( $this->view->isView === true ) { - $this->view->assign('usedBy', \SP\Profile::getProfileInUsersName($this->view->itemId)); + $this->view->assign('usedBy', Profile::getProfileInUsersName($this->view->itemId)); } } @@ -342,7 +351,7 @@ class UsersMgmtC extends Controller implements ActionsInterface $this->setAction(self::ACTION_USR_USERS_EDITPASS); // Comprobar si el usuario a modificar es distinto al de la sesión - if ($this->view->userId != \SP\Session::getUserId() && !$this->checkAccess()) { + if ($this->view->userId != Session::getUserId() && !$this->checkAccess()) { return; } @@ -351,6 +360,6 @@ class UsersMgmtC extends Controller implements ActionsInterface $this->view->assign('actionId', self::ACTION_USR_USERS_EDITPASS); // Obtener de nuevo el token de seguridad por si se habñia regenerado antes - $this->view->assign('sk', \SP\Common::getSessionKey()); + $this->view->assign('sk', Common::getSessionKey()); } } \ No newline at end of file From 4d0ea598ba044470984064549b2f7b715f75f048 Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Mon, 3 Aug 2015 03:23:23 +0200 Subject: [PATCH 57/84] * [ADD] Closes #91. New feature that allows to generate an image for the account password . Thanks to @TitovLab --- ajax/ajax_configSave.php | 2 + ajax/ajax_viewpass.php | 5 +- imgs/NotoSansUI-Regular.ttf | Bin 0 -> 306804 bytes inc/ImageUtil.class.php | 77 +++++++++++++++++++++ inc/Util.class.php | 10 +++ inc/themes/classic/account.inc | 2 + inc/themes/classic/config.inc | 19 ++++++ inc/themes/classic/js/functions.js | 82 +++++++++++++++-------- inc/themes/classic/search.inc | 2 + inc/themes/material-blue/account.inc | 2 + inc/themes/material-blue/config.inc | 22 ++++++ inc/themes/material-blue/js/functions.js | 45 +++++++------ inc/themes/material-blue/search.inc | 2 + js/strings.js.php | 8 ++- web/ConfigC.class.php | 1 + 15 files changed, 229 insertions(+), 50 deletions(-) create mode 100644 imgs/NotoSansUI-Regular.ttf create mode 100644 inc/ImageUtil.class.php diff --git a/ajax/ajax_configSave.php b/ajax/ajax_configSave.php index f853a6a2..09ec77b6 100644 --- a/ajax/ajax_configSave.php +++ b/ajax/ajax_configSave.php @@ -79,11 +79,13 @@ if ($actionId === SP\Controller\ActionsInterface::ACTION_CFG_GENERAL // Accounts $globalSearchEnabled = SP\Request::analyze('globalsearch', false, false, true); + $accountPassToImageEnabled = SP\Request::analyze('account_passtoimage', false, false, true); $accountLinkEnabled = SP\Request::analyze('account_link', false, false, true); $accountCount = SP\Request::analyze('account_count', 10); $resultsAsCardsEnabled = SP\Request::analyze('resultsascards', false, false, true); SP\Config::setValue('globalsearch', $globalSearchEnabled); + SP\Config::setValue('account_passtoimage', $accountPassToImageEnabled); SP\Config::setValue('account_link', $accountLinkEnabled); SP\Config::setValue('account_count', $accountCount); SP\Config::setValue('resultsascards', $resultsAsCardsEnabled); diff --git a/ajax/ajax_viewpass.php b/ajax/ajax_viewpass.php index 19a8cb24..435d1f0f 100644 --- a/ajax/ajax_viewpass.php +++ b/ajax/ajax_viewpass.php @@ -74,10 +74,13 @@ if (!$isHistory) { //$accountPass = htmlspecialchars(trim($accountClearPass)); +$useImage = intval(\SP\Util::accountPassToImageIsEnabled()); + $data = array( 'title' => _('Clave de Cuenta'), 'acclogin' => $accountData->login, - 'accpass' => trim($accountClearPass) + 'accpass' => (!$useImage) ? trim($accountClearPass) : \SP\ImageUtil::convertText($accountClearPass), + 'useimage' => $useImage ); SP\Common::printJSON($data, 0); \ No newline at end of file diff --git a/imgs/NotoSansUI-Regular.ttf b/imgs/NotoSansUI-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7270978639b40854e8db6519fd7553d62a5bdcb3 GIT binary patch literal 306804 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

    yoZOWYRke`E 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μsbx;>LP-3+~;QaOE#Deta4 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 z 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. + * + */ + +namespace SP; + +defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); + +/** + * Class ImageUtil para la manipulación de imágenes + * + * @package SP + */ +class ImageUtil +{ + /** + * Convertir un texto a imagen + * + * @param $text string El texto a convertir + * @return bool|string + */ + public static function convertText($text) + { + if(!function_exists('imagepng')){ + return false; + } + + $im = imagecreatetruecolor(strlen($text) * 20, 30); + + // Colores de la imagen + $bgColor = imagecolorallocate($im, 255, 255, 255); +// $shadowColor = imagecolorallocate($im, 128, 128, 128); + $fgColor = imagecolorallocate($im, 128, 128, 128); + + imagefilledrectangle($im, 0, 0, strlen($text) * 20, 29, $bgColor); + + // Ruta de la fuente + $font = Init::$SERVERROOT . '/imgs/NotoSansUI-Regular.ttf'; + + // Sombra +// imagettftext($im, 14, 0, 13, 23, $shadowColor, $font, $text); + + // Crear el texto + imagettftext($im, 12, 0, 10, 20, $fgColor, $font, $text); + + // Guardar la imagen + ob_start(); + imagepng($im); + $image = ob_get_contents(); + ob_end_clean(); + + imagedestroy($im); + + return base64_encode($image); + } +} \ No newline at end of file diff --git a/inc/Util.class.php b/inc/Util.class.php index b4537b03..5e22eae2 100644 --- a/inc/Util.class.php +++ b/inc/Util.class.php @@ -444,6 +444,16 @@ class Util 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)); + } + /** * Establecer variable de sesión para recargar la aplicación. */ diff --git a/inc/themes/classic/account.inc b/inc/themes/classic/account.inc index b77f1dde..e3c8fdd9 100644 --- a/inc/themes/classic/account.inc +++ b/inc/themes/classic/account.inc @@ -348,11 +348,13 @@ save + + diff --git a/inc/themes/classic/config.inc b/inc/themes/classic/config.inc index e7404a1b..8e4dcc1a 100644 --- a/inc/themes/classic/config.inc +++ b/inc/themes/classic/config.inc @@ -222,6 +222,25 @@ class="checkbox" /> + + + + +

    + + + + /> + + diff --git a/inc/themes/classic/js/functions.js b/inc/themes/classic/js/functions.js index 5351cca9..5962d766 100644 --- a/inc/themes/classic/js/functions.js +++ b/inc/themes/classic/js/functions.js @@ -37,7 +37,9 @@ jQuery.extend(jQuery.fancybox.defaults, { $(document).ready(function () { "use strict"; - $('input[type="text"], select, textarea').placeholder().mouseenter(function () {$(this).focus();}); + $('input[type="text"], select, textarea').placeholder().mouseenter(function () { + $(this).focus(); + }); setContentSize(); setWindowAdjustSize(); @@ -48,14 +50,16 @@ $(document).ready(function () { }).ajaxComplete(function () { "use strict"; - $('input[type="text"], select, textarea').placeholder().mouseenter(function () {$(this).focus();}); + $('input[type="text"], select, textarea').placeholder().mouseenter(function () { + $(this).focus(); + }); // Activar tooltips activeTooltip(); }); -function activeTooltip(){ +function activeTooltip() { "use strict"; // Activar tooltips @@ -67,7 +71,7 @@ function activeTooltip(){ }); $('.help-tooltip').tooltip({ - content: function(){ + content: function () { return $(this).next('div').html(); }, tooltipClass: "tooltip" @@ -321,16 +325,28 @@ function viewPass(id, full, history) { width: 'auto', open: function () { var content; + var pass = ''; + var clipboardUserButton = + ''; + var clipboardPassButton = + ''; + var useImage = json.useimage; if (json.status === 0) { - content = '

    ' + json.accpass + '

    ' + - '
    ' + - '
    ' + - '' + - '
    '; + if (useImage === 0) { + pass = '

    ' + json.accpass + '

    '; + } else { + pass = ''; + clipboardPassButton = ''; + } + + content = pass + '
    ' + '
    ' + clipboardUserButton + clipboardPassButton + '
    '; } else { content = '' + json.description + ''; @@ -350,26 +366,34 @@ function viewPass(id, full, history) { $(this).dialog('option', 'position', 'center'); // Carga de objeto flash para copiar al portapapeles - var client = new ZeroClipboard($("#dialog-clip-pass-button-" + id), {swfPath: "js/ZeroClipboard.swf"}); + var clientPass = new ZeroClipboard($("#dialog-clip-pass-button-" + id), {swfPath: APP_ROOT + "/js/ZeroClipboard.swf"}); + var clientUser = new ZeroClipboard($("#dialog-clip-user-button-" + id), {swfPath: APP_ROOT + "/js/ZeroClipboard.swf"}); - client.on('ready', function (e) { + clientPass.on('ready', function (e) { $("#dialog-clip-pass-button-" + id).attr("data-clip", 1); - - client.on('copy', function (e) { - e.clipboardData.setData('text/plain', json.accpass); + clientPass.on('copy', function (e) { + //e.clipboardData.setData('text/plain', json.accpass); + clientPass.setText(json.accpass); }); - client.on('aftercopy', function (e) { + clientPass.on('aftercopy', function (e) { $('.dialog-pass-text').addClass('dialog-clip-pass-copy round'); }); }); - client.on('error', function (e) { + + clientPass.on('error', function (e) { ZeroClipboard.destroy(); }); + clientUser.on('ready', function (e) { + clientUser.on('copy', function (e) { + clientUser.setText(json.acclogin); + }); + }); + // Timeout del mensaje - var $this = $(this); + var thisDialog = $(this); timeout = setTimeout(function () { - $this.dialog('close'); + thisDialog.dialog('close'); }, 30000); }, // Forzar la eliminación del objeto para que ZeroClipboard siga funcionando al abrirlo de nuevo @@ -1149,21 +1173,21 @@ function complexityDialog(targetId) { $('
    ').dialog({ modal: true, title: 'Opciones de Complejidad', - width: '400px', + width: '450px', open: function () { var thisDialog = $(this); var content = '
    ' + - '' + + '' + '' + - '' + + '' + '' + - '' + + '' + '' + '
    ' + '
    ' + - '' + + '' + '' + '
    ' + '
    ' + @@ -1252,7 +1276,7 @@ function chosenDetect() { width: selectWidth }); - $(".sel-chosen-customer").each(function(){ + $(".sel-chosen-customer").each(function () { var deselect = $(this).hasClass('sel-chosen-deselect'); $(this).chosen({ @@ -1264,7 +1288,7 @@ function chosenDetect() { }); }); - $(".sel-chosen-category").each(function(){ + $(".sel-chosen-category").each(function () { var deselect = $(this).hasClass('sel-chosen-deselect'); $(this).chosen({ @@ -1288,7 +1312,7 @@ function passwordDetect() { var thisInput = $(this); var targetId = $(this).attr('id'); - if ( thisInput.next().hasClass('password-actions') ){ + if (thisInput.next().hasClass('password-actions')) { return; } diff --git a/inc/themes/classic/search.inc b/inc/themes/classic/search.inc index 91af9760..7adfdd18 100644 --- a/inc/themes/classic/search.inc +++ b/inc/themes/classic/search.inc @@ -101,9 +101,11 @@ + + diff --git a/inc/themes/material-blue/account.inc b/inc/themes/material-blue/account.inc index 24c9e4d4..30544e23 100644 --- a/inc/themes/material-blue/account.inc +++ b/inc/themes/material-blue/account.inc @@ -370,10 +370,12 @@ + + diff --git a/inc/themes/material-blue/config.inc b/inc/themes/material-blue/config.inc index 2337a414..d00e6eee 100644 --- a/inc/themes/material-blue/config.inc +++ b/inc/themes/material-blue/config.inc @@ -180,6 +180,28 @@
    + + + +
    help_outline
    +
    +

    + +

    +

    + +

    +
    + + + + +
    diff --git a/inc/themes/material-blue/js/functions.js b/inc/themes/material-blue/js/functions.js index 2fdb134d..6b2095fe 100644 --- a/inc/themes/material-blue/js/functions.js +++ b/inc/themes/material-blue/js/functions.js @@ -316,20 +316,28 @@ function viewPass(id, full, history) { width: 'auto', open: function () { var content; + var pass = ''; + var clipboardUserButton = + ''; + var clipboardPassButton = + ''; + var useImage = json.useimage; if (json.status === 0) { - content = '

    ' + json.accpass + '

    ' + - '
    ' + - '
    ' + - '' + - '' + - '
    '; + if (useImage === 0) { + pass = '

    ' + json.accpass + '

    '; + } else { + pass = ''; + clipboardPassButton = ''; + } + + content = pass + '
    ' + '
    ' + clipboardUserButton + clipboardPassButton + '
    '; } else { content = '' + json.description + ''; @@ -373,14 +381,13 @@ function viewPass(id, full, history) { }); }); - // Cerrar Dialog a los 30s - var $this = $(this); + var thisDialog = $(this); $(this).parent().on('mouseleave', function () { clearTimeout(timeout); timeout = setTimeout(function () { - $this.dialog('close'); + thisDialog.dialog('close'); }, 30000); }); }, @@ -1187,19 +1194,19 @@ function complexityDialog() { var content = '' + '' + '' + '
    ' + '' + - '' + + '' + '
    ' + ''; diff --git a/inc/themes/material-blue/search.inc b/inc/themes/material-blue/search.inc index 06ccfaf0..93aac020 100644 --- a/inc/themes/material-blue/search.inc +++ b/inc/themes/material-blue/search.inc @@ -112,10 +112,12 @@ lock_open + content_paste + diff --git a/js/strings.js.php b/js/strings.js.php index 0283f0b3..14ff3d5c 100644 --- a/js/strings.js.php +++ b/js/strings.js.php @@ -56,7 +56,13 @@ $stringsJsLang = array( 29 => _('Complejidad'), 30 => _('Reset'), 31 => _('Nivel de fortaleza de la clave'), - 32 => _('Mostrar Clave') + 32 => _('Mostrar Clave'), + 33 => _('Copiar Usuario'), + 34 => _('Copiar Clave'), + 35 => _('Incluir Números'), + 36 => _('Incluir Mayúsculas'), + 37 => _('Incluir Símbolos'), + 38 => _('Longitud'), ); diff --git a/web/ConfigC.class.php b/web/ConfigC.class.php index c230c57f..703a796d 100644 --- a/web/ConfigC.class.php +++ b/web/ConfigC.class.php @@ -104,6 +104,7 @@ class ConfigC extends Controller implements ActionsInterface // Accounts $this->view->assign('chkGlobalSearch', (\SP\Config::getValue('globalsearch')) ? 'checked="checked"' : ''); $this->view->assign('chkResultsAsCards', (\SP\Config::getValue('resultsascards')) ? 'checked="checked"' : ''); + $this->view->assign('chkAccountPassToImage', (\SP\Config::getValue('account_passtoimage')) ? 'checked="checked"' : ''); $this->view->assign('chkAccountLink', (\SP\Config::getValue('account_link')) ? 'checked="checked"' : ''); $this->view->assign('accountCount', \SP\Config::getValue('account_count')); From 569c0956920b57b5dcd7e458c94fe22a5eb73f53 Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Mon, 3 Aug 2015 03:30:24 +0200 Subject: [PATCH 58/84] * [ADD] Closes #99. New feature that allows to generate an image for the account password . Thanks to @TitovLab * [MOD] Modified small logo --- imgs/logo.png | Bin 10402 -> 5698 bytes web/EventlogC.class.php | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/imgs/logo.png b/imgs/logo.png index 532352863d53675e71b779236072f03c65b719c9..cdeba1fa4ffab6be0035c42968d79750c028cd6b 100644 GIT binary patch literal 5698 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'eventlog'); $this->view->assign('rowClass', 'row_even'); - $this->view->assign('isDemoMode', \SP\Util::demoIsEnabled()); + $this->view->assign('isDemoMode', \SP\Util::demoIsEnabled() || !\SP\Session::getUserIsAdminApp()); // FIXME $this->view->assign('limitStart', (isset($this->view->limitStart)) ? (int)$this->view->limitStart : 0); $this->view->assign('events', \SP\Log::getEvents($this->view->limitStart)); $this->view->assign('totalRows', \SP\Log::$numRows); From 1372100bf70a15604c799f89500efd4e03080f61 Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Mon, 3 Aug 2015 04:15:13 +0200 Subject: [PATCH 59/84] * [ADD] Closes #70. New feature that allows to query the accounts where only specific users and/or groups have access (parameters :user and :group at query string...needs context help). Thanks to @Chefkeks --- inc/AccountSearch.class.php | 64 ++++++++++++++++++++++++++++++++----- inc/Groups.class.php | 21 ++++++++++++ 2 files changed, 77 insertions(+), 8 deletions(-) diff --git a/inc/AccountSearch.class.php b/inc/AccountSearch.class.php index 301dd6b2..c485d078 100644 --- a/inc/AccountSearch.class.php +++ b/inc/AccountSearch.class.php @@ -272,15 +272,31 @@ class AccountSearch . 'LEFT JOIN accGroups ON accgroup_accountId = account_id'; if ($this->getTxtSearch()) { - $arrFilterCommon[] = 'account_name LIKE :name'; - $arrFilterCommon[] = 'account_login LIKE :login'; - $arrFilterCommon[] = 'account_url LIKE :url'; - $arrFilterCommon[] = 'account_notes LIKE :notes'; + // Analizar la cadena de búsqueda por etiquetas especiales + $stringFilters = $this->analyzeQueryString(); - $data['name'] = '%' . $this->getTxtSearch() . '%'; - $data['login'] = '%' . $this->getTxtSearch() . '%'; - $data['url'] = '%' . $this->getTxtSearch() . '%'; - $data['notes'] = '%' . $this->getTxtSearch() . '%'; + if($stringFilters !== false){ + $i = 0; + + foreach($stringFilters as $column => $value){ + $parameter = $column . $i; + + $arrFilterCommon[] = $column . ' = :' . $parameter; + $data[$parameter] = $value; + $i++; + } + } else { + + $arrFilterCommon[] = 'account_name LIKE :name'; + $arrFilterCommon[] = 'account_login LIKE :login'; + $arrFilterCommon[] = 'account_url LIKE :url'; + $arrFilterCommon[] = 'account_notes LIKE :notes'; + + $data['name'] = '%' . $this->getTxtSearch() . '%'; + $data['login'] = '%' . $this->getTxtSearch() . '%'; + $data['url'] = '%' . $this->getTxtSearch() . '%'; + $data['notes'] = '%' . $this->getTxtSearch() . '%'; + } } if ($this->getCategoryId() !== 0) { @@ -405,4 +421,36 @@ class AccountSearch return $queryRes->numacc; } + + /** + * Analizar la cadena de consulta por eqituetas especiales y devolver un array + * con las columnas y los valores a buscar. + * + * @return array|bool + */ + private function analyzeQueryString() + { + preg_match('/:(user|group)\s(.*)/i', $this->_txtSearch, $filters); + + if(count($filters) === 1){ + return false; + } + + switch ($filters[1]){ + case 'user': + return array( + 'account_userId' => UserUtil::getUserIdByLogin(Html::sanitize($filters[2])), + 'accuser_userId' => UserUtil::getUserIdByLogin(Html::sanitize($filters[2])) + ); + break; + case 'group': + return array( + 'account_userGroupId' => Groups::getGroupIdByName(Html::sanitize($filters[2])), + 'accgroup_groupId' => Groups::getGroupIdByName(Html::sanitize($filters[2])) + ); + break; + default: + return false; + } + } } \ No newline at end of file diff --git a/inc/Groups.class.php b/inc/Groups.class.php index b368672a..4b68f054 100644 --- a/inc/Groups.class.php +++ b/inc/Groups.class.php @@ -285,6 +285,27 @@ class Groups 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. * From a285abb67bd7371007b848edeb5fbcc3667414ff Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Mon, 3 Aug 2015 04:23:16 +0200 Subject: [PATCH 60/84] * [ADD] Closes #70. New feature that allows to query the accounts where only specific users and/or groups have access (parameters :user and :group at query string...needs context help). Thanks to @Chefkeks --- inc/themes/classic/searchbox.inc | 10 ++++++++++ inc/themes/material-blue/searchbox.inc | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/inc/themes/classic/searchbox.inc b/inc/themes/classic/searchbox.inc index 77ca0e98..2293887c 100644 --- a/inc/themes/classic/searchbox.inc +++ b/inc/themes/classic/searchbox.inc @@ -4,6 +4,16 @@ + + /> diff --git a/inc/themes/material-blue/searchbox.inc b/inc/themes/material-blue/searchbox.inc index 31886005..09796892 100644 --- a/inc/themes/material-blue/searchbox.inc +++ b/inc/themes/material-blue/searchbox.inc @@ -9,6 +9,16 @@ name="search" value=""/>
    + +
    +

    + +

    +
      +
    • :user [login] >
    • +
    • :group [group_name] >
    • +
    +
    aquí para acceder" -msgstr "Click here to sign in" +#: ../../../../js/strings.js.php:54 +msgid "Opciones de clave" +msgstr "Password options" -#: ../../../../inc/tpl/install.php:46 -msgid "Instalación " -msgstr "Installation" +#: ../../../../js/strings.js.php:55 +msgid "Generar clave aleatoria" +msgstr "Generate random password" -#: ../../../../inc/tpl/install.php:57 +#: ../../../../js/strings.js.php:56 +msgid "Complejidad" +msgstr "Complexity" + +#: ../../../../js/strings.js.php:57 +msgid "Reset" +msgstr "Restablecer" + +#: ../../../../js/strings.js.php:58 +#: ../../../../inc/themes/classic/editpass.inc:34 +msgid "Nivel de fortaleza de la clave" +msgstr "Password strength level" + +#: ../../../../js/strings.js.php:59 +#: ../../../../inc/themes/classic/install.inc:75 +#: ../../../../inc/themes/classic/install.inc:76 +#: ../../../../inc/themes/material-blue/install.inc:92 +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" + +#: ../../../../web/AccountC.class.php:258 +#: ../../../../inc/themes/classic/search.inc:123 +#: ../../../../inc/themes/material-blue/search.inc:136 +msgid "Copiar Cuenta" +msgstr "Copy Account" + +#: ../../../../web/AccountC.class.php:322 +msgid "Editar Cuenta" +msgstr "Edit Account" + +#: ../../../../web/AccountC.class.php:379 +#: ../../../../web/AccountC.class.php:410 +#: ../../../../inc/themes/classic/search.inc:38 +#: ../../../../inc/themes/classic/search.inc:97 +#: ../../../../inc/themes/material-blue/search.inc:41 +#: ../../../../inc/themes/material-blue/search.inc:108 +msgid "Detalles de Cuenta" +msgstr "Account Details" + +#: ../../../../web/AccountC.class.php:467 +#: ../../../../inc/themes/classic/account.inc:361 +#: ../../../../inc/themes/material-blue/account.inc:382 +msgid "Modificar Clave de Cuenta" +msgstr "Edit Account Password" + +#: ../../../../web/AccountsMgmtC.class.php:71 +#: ../../../../web/AccountsMgmtC.class.php:130 +#: ../../../../web/SearchC.class.php:277 +#: ../../../../web/UsersMgmtC.class.php:81 +#: ../../../../web/UsersMgmtC.class.php:181 +#: ../../../../web/UsersMgmtC.class.php:239 +#: ../../../../inc/themes/classic/account.inc:11 +#: ../../../../inc/themes/classic/categories.inc:8 +#: ../../../../inc/themes/classic/customers.inc:8 +#: ../../../../inc/themes/classic/editpass.inc:8 +#: ../../../../inc/themes/classic/groups.inc:8 +#: ../../../../inc/themes/classic/profiles.inc:8 +#: ../../../../inc/themes/classic/request.inc:6 +#: ../../../../inc/themes/classic/search.inc:36 +#: ../../../../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/editpass.inc:9 +#: ../../../../inc/themes/material-blue/groups.inc:8 +#: ../../../../inc/themes/material-blue/profiles.inc:8 +#: ../../../../inc/themes/material-blue/request.inc:6 +#: ../../../../inc/themes/material-blue/search.inc:39 +#: ../../../../inc/themes/material-blue/users.inc:8 +msgid "Nombre" +msgstr "Name" + +#: ../../../../web/AccountsMgmtC.class.php:107 +msgid "Gestión de Categorías" +msgstr "Categories Management" + +#: ../../../../web/AccountsMgmtC.class.php:164 +msgid "Gestión de Clientes" +msgstr "Customers Management" + +#: ../../../../web/ConfigC.class.php:142 +#: ../../../../inc/themes/classic/profiles.inc:65 +#: ../../../../inc/themes/material-blue/profiles.inc:77 +msgid "Encriptación" +msgstr "Encryption" + +#: ../../../../web/ConfigC.class.php:175 +msgid "Último backup" +msgstr "Last backup" + +#: ../../../../web/ConfigC.class.php:175 +msgid "No se encontraron backups" +msgstr "There are no backups available" + +#: ../../../../web/ConfigC.class.php:182 +msgid "Última exportación" +msgstr "Last export" + +#: ../../../../web/ConfigC.class.php:182 +msgid "No se encontró archivo de exportación" +msgstr "No export file found" + +#: ../../../../web/ConfigC.class.php:184 +#: ../../../../inc/themes/classic/backup.inc:4 +#: ../../../../inc/themes/material-blue/backup.inc:4 +msgid "Copia de Seguridad" +msgstr "Backup" + +#: ../../../../web/ConfigC.class.php:226 +msgid "Información" +msgstr "Information" + +#: ../../../../web/EventlogC.class.php:91 +msgid "Registro de eventos vaciado" +msgstr "Event log cleared" + +#: ../../../../web/EventlogC.class.php:93 +msgid "Error al vaciar el registro de eventos" +msgstr "Error on clearing event log" + +#: ../../../../web/MainC.class.php:119 ../../../../web/UsersMgmtC.class.php:94 +msgid "Admin Aplicación" +msgstr "Application Admin" + +#: ../../../../web/MainC.class.php:137 +msgid "Buscar" +msgstr "Search" + +#: ../../../../web/MainC.class.php:149 ../../../../web/UsersMgmtC.class.php:157 +msgid "Gestión de Usuarios" +msgstr "Users Management" + +#: ../../../../web/MainC.class.php:155 +msgid "Gestión de Clientes y Categorías" +msgstr "Customer and Categories management" + +#: ../../../../web/MainC.class.php:167 +#: ../../../../inc/themes/classic/eventlog.inc:4 +#: ../../../../inc/themes/material-blue/eventlog.inc:3 +msgid "Registro de Eventos" +msgstr "Event Log" + +#: ../../../../web/MainC.class.php:187 +msgid "Nuevo interface de búsqueda con estilo de lista o tipo tarjeta" +msgstr "New search interface with list or card like styles" + +#: ../../../../web/MainC.class.php:188 +msgid "Selección de grupos y usuarios de acceso a cuentas" +msgstr "Users and groups selection for account access" + +#: ../../../../web/MainC.class.php:189 +msgid "Drag&Drop para subida de archivos" +msgstr "Drag&Drop for files uploading" + +#: ../../../../web/MainC.class.php:190 +msgid "Copiar clave al portapapeles" +msgstr "Copy password to clipboard" + +#: ../../../../web/MainC.class.php:191 +msgid "Historial de cuentas y restauración" +msgstr "Accounts history and restore points" + +#: ../../../../web/MainC.class.php:192 +msgid "Nueva gestión de categorías y clientes" +msgstr "New categories and customers management" + +#: ../../../../web/MainC.class.php:193 +msgid "Función de olvido de claves para usuarios" +msgstr "Reset password function for users" + +#: ../../../../web/MainC.class.php:194 +msgid "Integración con Active Directory y LDAP mejorada" +msgstr "Improved Active Directory and LDAP integration" + +#: ../../../../web/MainC.class.php:195 +msgid "Autentificación para notificaciones por correo" +msgstr "Email notifications with authentication" + +#: ../../../../web/MainC.class.php:196 +msgid "Búsqueda global de cuentas para usuarios sin permisos" +msgstr "Global account searching for unprivileged users" + +#: ../../../../web/MainC.class.php:197 +msgid "Solicitudes de modificación de cuentas para usuarios sin permisos" +msgstr "Requests for account modification for unprivileged users" + +#: ../../../../web/MainC.class.php:198 +msgid "Importación de cuentas desde KeePass, KeePassX y CSV" +msgstr "Accounts import from KeePass, KeePassX and CSV" + +#: ../../../../web/MainC.class.php:199 +msgid "Función de copiar cuentas" +msgstr "Clone account function" + +#: ../../../../web/MainC.class.php:200 +msgid "Optimización del código y mayor rapidez de carga" +msgstr "Code optimization and faster loading" + +#: ../../../../web/MainC.class.php:201 +msgid "Mejoras de seguridad en XSS e inyección SQL" +msgstr "Improved security to prevent XSS and SQL injection" + +#: ../../../../web/MainC.class.php:232 msgid "La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)" msgstr "This PHP version is vulnerable to NULL Byte attack CVE-2006-7243)" -#: ../../../../inc/tpl/install.php:58 +#: ../../../../web/MainC.class.php:233 msgid "Actualice la versión de PHP para usar sysPass de forma segura" msgstr "Please update PHP version to run sysPass in a secure way" -#: ../../../../inc/tpl/install.php:62 +#: ../../../../web/MainC.class.php:240 msgid "No se encuentra el generador de números aleatorios." msgstr "Cannot find random number generator." -#: ../../../../inc/tpl/install.php:63 +#: ../../../../web/MainC.class.php:241 msgid "" "Sin esta función un atacante puede utilizar su cuenta al resetear la clave" msgstr "" "Without this function, an attacker could take your account on password reset." -#: ../../../../inc/tpl/install.php:85 -msgid "Crear cuenta de admin de sysPass" -msgstr "Create sysPass admin account" - -#: ../../../../inc/tpl/install.php:88 -msgid "Login del usuario administrador de sysPass" -msgstr "sysPass administrator's login" - -#: ../../../../inc/tpl/install.php:96 ../../../../inc/tpl/install.php:97 -#: ../../../../inc/tpl/install.php:111 ../../../../inc/tpl/install.php:112 -#: ../../../../inc/tpl/install.php:137 ../../../../inc/tpl/install.php:138 -msgid "Mostrar Clave" -msgstr "Show Password" - -#: ../../../../inc/tpl/install.php:124 -msgid "Configurar BBDD" -msgstr "DB Configuration" - -#: ../../../../inc/tpl/install.php:130 -msgid "Login de usuario con permisos de administrador de MySQL" -msgstr "User login with with database administrative rights" - -#: ../../../../inc/tpl/install.php:146 -msgid "Nombre de la base de datos para sysPass" -msgstr "sysPass database name" - -#: ../../../../inc/tpl/install.php:155 -msgid "Nombre del servidor de la base de datos de sysPass" -msgstr "sysPass database server name" - -#: ../../../../inc/tpl/install.php:165 -msgid "No crea ni verifica los permisos del usuario sobre la BBDD" -msgstr "It does not create or verify the user's permissions on the DB" - -#: ../../../../inc/tpl/install.php:167 ../../../../inc/tpl/install.php:185 -#: ../../../../inc/tpl/install.php:187 -msgid "Modo Hosting" -msgstr "Hosting Mode" - -#: ../../../../inc/tpl/install.php:174 -msgid "Instalar" -msgstr "Install" - -#: ../../../../inc/tpl/editpass.php:35 ../../../../inc/tpl/accounts.php:543 -msgid "Modificar Clave de Cuenta" -msgstr "Edit Account Password" - -#: ../../../../inc/tpl/editpass.php:60 ../../../../inc/tpl/accounts.php:254 -msgid "La clave generada se mostrará aquí" -msgstr "The generated password will be shown here" - -#: ../../../../inc/tpl/accounts.php:63 -msgid "Editar Cuenta" -msgstr "Edit Account" - -#: ../../../../inc/tpl/accounts.php:177 -msgid "Nombre de cuenta" -msgstr "Account name" - -#: ../../../../inc/tpl/accounts.php:196 -msgid "Buscar en desplegable o introducir" -msgstr "Search down or enter" - -#: ../../../../inc/tpl/accounts.php:222 -msgid "URL o IP de acceso" -msgstr "Access URL or IP" - -#: ../../../../inc/tpl/accounts.php:238 -msgid "Usuario de acceso" -msgstr "Access user" - -#: ../../../../inc/tpl/accounts.php:271 -msgid "Notas sobre la cuenta" -msgstr "Notes about the account" - -#: ../../../../inc/tpl/accounts.php:277 -msgid "Permisos" -msgstr "Permissions" - -#: ../../../../inc/tpl/accounts.php:304 ../../../../inc/tpl/accounts.php:335 -msgid "Hablitar edición" -msgstr "Enable Edit" - -#: ../../../../inc/tpl/accounts.php:371 -msgid "Soltar archivos aquí (max. 5) o click para seleccionar" -msgstr "Drop files here (max. 5) or click to select" - -#: ../../../../inc/tpl/accounts.php:371 ../../../../inc/tpl/config.php:193 -msgid "Tamaño máximo de archivo" -msgstr "Maximum file size" - -#: ../../../../inc/tpl/accounts.php:383 -msgid "Historial" -msgstr "History" - -#: ../../../../inc/tpl/accounts.php:398 -msgid "Seleccionar fecha" -msgstr "Select date" - -#: ../../../../inc/tpl/accounts.php:405 ../../../../inc/tpl/users.php:183 -msgid "Última Modificación" -msgstr "Last Modification" - -#: ../../../../inc/tpl/accounts.php:407 -msgid "por" -msgstr "by" - -#: ../../../../inc/tpl/accounts.php:417 -msgid "Visitas" -msgstr "Visits" - -#: ../../../../inc/tpl/accounts.php:421 -msgid "Fecha Alta" -msgstr "Date Added" - -#: ../../../../inc/tpl/accounts.php:425 -msgid "Creador" -msgstr "Creator" - -#: ../../../../inc/tpl/accounts.php:429 -msgid "Grupo Principal" -msgstr "Main Group" - -#: ../../../../inc/tpl/accounts.php:434 -msgid "Usuarios Secundarios" -msgstr "Secondary Users" - -#: ../../../../inc/tpl/accounts.php:455 -msgid "Grupos Secundarios" -msgstr "Secondary Groups" - -#: ../../../../inc/tpl/accounts.php:477 -msgid "Fecha Edición" -msgstr "Date Modified" - -#: ../../../../inc/tpl/accounts.php:481 -msgid "Editor" -msgstr "Editor" - -#: ../../../../inc/tpl/accounts.php:503 -msgid "Ver Actual" -msgstr "View Current" - -#: ../../../../inc/tpl/accounts.php:515 -msgid "Restaurar cuenta desde este punto" -msgstr "Restore account from this point" - -#: ../../../../inc/tpl/accounts.php:582 -msgid "Seleccionar grupos secundarios" -msgstr "Select secondary groups" - -#: ../../../../inc/tpl/accounts.php:585 -msgid "Seleccionar usuarios" -msgstr "Select users" - -#: ../../../../inc/tpl/categories.php:41 -msgid "Nombre de la categoría" -msgstr "Category name" - -#: ../../../../inc/tpl/categories.php:47 -msgid "Descripción de la categoría" -msgstr "Category description" - -#: ../../../../inc/tpl/config.php:84 -msgid "Sitio" -msgstr "Site" - -#: ../../../../inc/tpl/config.php:92 -msgid "Idioma" -msgstr "Language" - -#: ../../../../inc/tpl/config.php:106 -msgid "Timeout de sesión (s)" -msgstr "Session timeout (s)" - -#: ../../../../inc/tpl/config.php:114 -msgid "Habilitar log de eventos" -msgstr "Enable event log" - -#: ../../../../inc/tpl/config.php:124 -msgid "Habilitar depuración" -msgstr "Enable debug" - -#: ../../../../inc/tpl/config.php:134 -msgid "Modo mantenimiento" -msgstr "Maintenance mode" - -#: ../../../../inc/tpl/config.php:144 -msgid "Comprobar actualizaciones" -msgstr "Check for updates" - -#: ../../../../inc/tpl/config.php:154 -msgid "Nombre de cuenta como enlace" -msgstr "Account name as link" - -#: ../../../../inc/tpl/config.php:164 -msgid "Gestión de archivos" -msgstr "Files management" - -#: ../../../../inc/tpl/config.php:174 -msgid "Búsquedas globales" -msgstr "Global searches" - -#: ../../../../inc/tpl/config.php:184 -msgid "Extensiones de archivos permitidas" -msgstr "Allowed file extensions" - -#: ../../../../inc/tpl/config.php:202 -msgid "Resultados por página" -msgstr "Results per page" - -#: ../../../../inc/tpl/config.php:218 -msgid "Resultados en Tarjetas" -msgstr "Results like Cards" - -#: ../../../../inc/tpl/config.php:230 -msgid "Wiki" -msgstr "Wiki" - -#: ../../../../inc/tpl/config.php:236 -msgid "Habilitar enlaces Wiki" -msgstr "Enable Wiki links" - -#: ../../../../inc/tpl/config.php:246 -msgid "URL de búsqueda Wiki" -msgstr "Wiki search URL" - -#: ../../../../inc/tpl/config.php:255 -msgid "URL de página en Wiki" -msgstr "Wiki page URL" - -#: ../../../../inc/tpl/config.php:264 -msgid "Prefijo para nombre de cuenta" -msgstr "Account name preffix" - -#: ../../../../inc/tpl/config.php:276 -msgid "LDAP" -msgstr "LDAP" - -#: ../../../../inc/tpl/config.php:283 -msgid "Habilitar LDAP" -msgstr "Enable LDAP" - -#: ../../../../inc/tpl/config.php:293 ../../../../inc/tpl/config.php:398 -msgid "Servidor" -msgstr "Server" - -#: ../../../../inc/tpl/config.php:302 -msgid "Usuario de conexión" -msgstr "Bind User" - -#: ../../../../inc/tpl/config.php:311 -msgid "Clave de conexión" -msgstr "Bind Password" - -#: ../../../../inc/tpl/config.php:320 -msgid "Base de búsqueda" -msgstr "Search base" - -#: ../../../../inc/tpl/config.php:338 -msgid "Grupo por Defecto" -msgstr "Default Group" - -#: ../../../../inc/tpl/config.php:347 -msgid "Perfil por Defecto" -msgstr "Default Profile" - -#: ../../../../inc/tpl/config.php:356 -msgid "Active Directory" -msgstr "Active Directory" - -#: ../../../../inc/tpl/config.php:366 -msgid "Comprobar" -msgstr "Check" - -#: ../../../../inc/tpl/config.php:369 -msgid "Comprobar conexión con LDAP" -msgstr "Check LDAP connection" - -#: ../../../../inc/tpl/config.php:383 -msgid "Correo" -msgstr "Mail" - -#: ../../../../inc/tpl/config.php:389 -msgid "Habilitar notificaciones de correo" -msgstr "Enable email notifications" - -#: ../../../../inc/tpl/config.php:406 -msgid "Puerto" -msgstr "Port" - -#: ../../../../inc/tpl/config.php:414 -msgid "Habilitar Autentificación" -msgstr "Enable Authentication" - -#: ../../../../inc/tpl/config.php:439 +#: ../../../../web/MainC.class.php:260 +msgid "Instalación finalizada" +msgstr "Installation finished" + +#: ../../../../web/MainC.class.php:261 +msgid "Pulse aquí para acceder" +msgstr "Click here to sign in" + +#: ../../../../web/MainC.class.php:363 +msgid "Descargar nueva versión" +msgstr "Download new version" + +#: ../../../../web/SearchC.class.php:270 +msgid "Ordenar por Cliente" +msgstr "Sort by Customer" + +#: ../../../../web/SearchC.class.php:276 +msgid "Ordenar por Nombre" +msgstr "Sort by Name" + +#: ../../../../web/SearchC.class.php:282 +msgid "Ordenar por Categoría" +msgstr "Sort by Category" + +#: ../../../../web/SearchC.class.php:288 +msgid "Ordenar por Usuario" +msgstr "Sort by Username" + +#: ../../../../web/SearchC.class.php:294 +msgid "Ordenar por URL / IP" +msgstr "Sort by URL / IP" + +#: ../../../../web/SearchC.class.php:295 +#: ../../../../inc/themes/classic/account.inc:58 +#: ../../../../inc/themes/classic/editpass.inc:16 +#: ../../../../inc/themes/classic/request.inc:13 +#: ../../../../inc/themes/classic/search.inc:59 +#: ../../../../inc/themes/material-blue/account.inc:66 +#: ../../../../inc/themes/material-blue/editpass.inc:17 +#: ../../../../inc/themes/material-blue/request.inc:15 +#: ../../../../inc/themes/material-blue/search.inc:62 +msgid "URL / IP" +msgstr "URL / IP" + +#: ../../../../web/UsersMgmtC.class.php:85 +msgid "Propiedades" +msgstr "Properties" + +#: ../../../../web/UsersMgmtC.class.php:98 +msgid "Admin Cuentas" +msgstr "Account Admin" + +#: ../../../../web/UsersMgmtC.class.php:102 +#: ../../../../inc/themes/classic/users.inc:28 +#: ../../../../inc/themes/material-blue/users.inc:34 +msgid "Usuario de LDAP" +msgstr "LDAP User" + +#: ../../../../web/UsersMgmtC.class.php:106 +#: ../../../../inc/themes/classic/users.inc:113 +#: ../../../../inc/themes/material-blue/users.inc:145 +#: ../../../../inc/themes/material-blue/users.inc:148 +msgid "Deshabilitado" +msgstr "Disabled" + +#: ../../../../web/UsersMgmtC.class.php:123 +msgid "Ver Detalles de Usuario" +msgstr "View User Details" + +#: ../../../../web/UsersMgmtC.class.php:137 +msgid "Cambiar Clave de Usuario" +msgstr "Change User's Password" + +#: ../../../../web/UsersMgmtC.class.php:216 +msgid "Gestión de Grupos" +msgstr "Groups Management" + +#: ../../../../web/UsersMgmtC.class.php:254 +msgid "Ver Detalles de Perfil" +msgstr "View Profile Details" + +#: ../../../../web/UsersMgmtC.class.php:281 +msgid "Gestión de Perfiles" +msgstr "Profiles Management" + +#: ../../../../web/UsersPrefsC.class.php:84 +#: ../../../../inc/themes/classic/mail.inc:63 +#: ../../../../inc/themes/material-blue/mail.inc:86 msgid "Seguridad" msgstr "Security" -#: ../../../../inc/tpl/config.php:445 -msgid "Deshabilitada" -msgstr "Disabled" +#: ../../../../inc/themes/classic/2fa.inc:9 +#: ../../../../inc/themes/material-blue/2fa.inc:9 +#: ../../../../inc/themes/material-blue/security.inc:13 +msgid "Autentificación en 2 pasos" +msgstr "Two factor authentication" -#: ../../../../inc/tpl/config.php:456 -msgid "Dirección de correo de envío" -msgstr "Recipient email address" +#: ../../../../inc/themes/classic/2fa.inc:14 +#: ../../../../inc/themes/material-blue/2fa.inc:14 +msgid "Introducir código" +msgstr "Enter code" -#: ../../../../inc/tpl/config.php:464 -msgid "Habilitar peticiones por correo" -msgstr "Enable requests by email" +#: ../../../../inc/themes/classic/2fa.inc:26 +msgid "Verificar" +msgstr "Verify" -#: ../../../../inc/tpl/config.php:507 +#: ../../../../inc/themes/classic/account.inc:14 +#: ../../../../inc/themes/material-blue/account.inc:21 +msgid "Nombre de cuenta" +msgstr "Account name" + +#: ../../../../inc/themes/classic/account.inc:35 +msgid "Buscar en desplegable o introducir" +msgstr "Search down or enter" + +#: ../../../../inc/themes/classic/account.inc:61 +#: ../../../../inc/themes/material-blue/account.inc:72 +msgid "URL o IP de acceso" +msgstr "Access URL or IP" + +#: ../../../../inc/themes/classic/account.inc:73 +#: ../../../../inc/themes/material-blue/account.inc:86 +msgid "Usuario de acceso" +msgstr "Access user" + +#: ../../../../inc/themes/classic/account.inc:90 +#: ../../../../inc/themes/classic/editpass.inc:32 +#: ../../../../inc/themes/classic/users.inc:83 +#: ../../../../inc/themes/classic/userspass.inc:19 +#: ../../../../inc/themes/classic/userspass.inc:21 +#: ../../../../inc/themes/material-blue/account.inc:105 +#: ../../../../inc/themes/material-blue/editpass.inc:36 +#: ../../../../inc/themes/material-blue/install.inc:64 +#: ../../../../inc/themes/material-blue/users.inc:99 +#: ../../../../inc/themes/material-blue/users.inc:105 +#: ../../../../inc/themes/material-blue/userspass.inc:19 +#: ../../../../inc/themes/material-blue/userspass.inc:25 +msgid "Clave (repetir)" +msgstr "Password (repeat)" + +#: ../../../../inc/themes/classic/account.inc:97 +#: ../../../../inc/themes/classic/search.inc:75 +#: ../../../../inc/themes/classic/users.inc:91 +#: ../../../../inc/themes/material-blue/account.inc:116 +#: ../../../../inc/themes/material-blue/search.inc:82 +#: ../../../../inc/themes/material-blue/users.inc:112 +msgid "Notas" +msgstr "Notes" + +#: ../../../../inc/themes/classic/account.inc:99 +#: ../../../../inc/themes/material-blue/account.inc:121 +#: ../../../../inc/themes/material-blue/users.inc:119 +msgid "Notas sobre la cuenta" +msgstr "Notes about the account" + +#: ../../../../inc/themes/classic/account.inc:105 +#: ../../../../inc/themes/material-blue/account.inc:130 +#: ../../../../inc/themes/material-blue/search.inc:75 +msgid "Permisos" +msgstr "Permissions" + +#: ../../../../inc/themes/classic/account.inc:132 +#: ../../../../inc/themes/classic/account.inc:163 +#: ../../../../inc/themes/material-blue/account.inc:157 +#: ../../../../inc/themes/material-blue/account.inc:191 +msgid "Hablitar edición" +msgstr "Enable Edit" + +#: ../../../../inc/themes/classic/account.inc:133 +#: ../../../../inc/themes/classic/account.inc:164 +#: ../../../../inc/themes/classic/account.inc:416 +#: ../../../../inc/themes/classic/install.inc:101 +#: ../../../../inc/themes/classic/js-common.inc:16 +msgid "SI" +msgstr "YES" + +#: ../../../../inc/themes/classic/account.inc:133 +#: ../../../../inc/themes/classic/account.inc:164 +#: ../../../../inc/themes/classic/account.inc:414 +#: ../../../../inc/themes/classic/encryption.inc:61 +#: ../../../../inc/themes/classic/encryption.inc:80 +#: ../../../../inc/themes/classic/import.inc:70 +#: ../../../../inc/themes/classic/install.inc:101 +#: ../../../../inc/themes/classic/js-common.inc:18 +msgid "NO" +msgstr "NO" + +#: ../../../../inc/themes/classic/account.inc:140 +#: ../../../../inc/themes/classic/profiles.inc:85 +#: ../../../../inc/themes/material-blue/account.inc:168 +#: ../../../../inc/themes/material-blue/profiles.inc:104 +msgid "Grupos" +msgstr "Groups" + +#: ../../../../inc/themes/classic/account.inc:188 +#: ../../../../inc/themes/classic/profiles.inc:50 +#: ../../../../inc/themes/material-blue/account.inc:219 +#: ../../../../inc/themes/material-blue/config.inc:208 +#: ../../../../inc/themes/material-blue/profiles.inc:60 +msgid "Archivos" +msgstr "Files" + +#: ../../../../inc/themes/classic/account.inc:201 +#: ../../../../inc/themes/material-blue/account.inc:232 +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:177 +#: ../../../../inc/themes/material-blue/account.inc:232 +#: ../../../../inc/themes/material-blue/config.inc:256 +msgid "Tamaño máximo de archivo" +msgstr "Maximum file size" + +#: ../../../../inc/themes/classic/account.inc:213 +#: ../../../../inc/themes/material-blue/account.inc:244 +msgid "Historial" +msgstr "History" + +#: ../../../../inc/themes/classic/account.inc:232 +#: ../../../../inc/themes/material-blue/account.inc:263 +msgid "Seleccionar fecha" +msgstr "Select date" + +#: ../../../../inc/themes/classic/account.inc:241 +#: ../../../../inc/themes/classic/users.inc:135 +#: ../../../../inc/themes/material-blue/account.inc:272 +#: ../../../../inc/themes/material-blue/users.inc:171 +msgid "Última Modificación" +msgstr "Last Modification" + +#: ../../../../inc/themes/classic/account.inc:243 +#: ../../../../inc/themes/material-blue/account.inc:274 +msgid "por" +msgstr "by" + +#: ../../../../inc/themes/classic/account.inc:253 +#: ../../../../inc/themes/material-blue/account.inc:284 +msgid "Visitas" +msgstr "Visits" + +#: ../../../../inc/themes/classic/account.inc:257 +#: ../../../../inc/themes/material-blue/account.inc:288 +msgid "Fecha Alta" +msgstr "Date Added" + +#: ../../../../inc/themes/classic/account.inc:261 +#: ../../../../inc/themes/material-blue/account.inc:292 +msgid "Creador" +msgstr "Creator" + +#: ../../../../inc/themes/classic/account.inc:265 +#: ../../../../inc/themes/material-blue/account.inc:296 +msgid "Grupo Principal" +msgstr "Main Group" + +#: ../../../../inc/themes/classic/account.inc:270 +#: ../../../../inc/themes/material-blue/account.inc:301 +msgid "Usuarios Secundarios" +msgstr "Secondary Users" + +#: ../../../../inc/themes/classic/account.inc:289 +#: ../../../../inc/themes/material-blue/account.inc:320 +msgid "Grupos Secundarios" +msgstr "Secondary Groups" + +#: ../../../../inc/themes/classic/account.inc:309 +#: ../../../../inc/themes/material-blue/account.inc:340 +msgid "Fecha Edición" +msgstr "Date Modified" + +#: ../../../../inc/themes/classic/account.inc:313 +#: ../../../../inc/themes/material-blue/account.inc:344 +msgid "Editor" +msgstr "Editor" + +#: ../../../../inc/themes/classic/account.inc:340 +#: ../../../../inc/themes/material-blue/account.inc:408 +msgid "Restaurar cuenta desde este punto" +msgstr "Restore account from this point" + +#: ../../../../inc/themes/classic/account.inc:352 +#: ../../../../inc/themes/classic/account.inc:435 +#: ../../../../inc/themes/classic/search.inc:105 +#: ../../../../inc/themes/classic/search.inc:184 +#: ../../../../inc/themes/material-blue/account.inc:374 +#: ../../../../inc/themes/material-blue/account.inc:445 +#: ../../../../inc/themes/material-blue/search.inc:118 +#: ../../../../inc/themes/material-blue/search.inc:197 +msgid "Copiar Clave en Portapapeles" +msgstr "Copy Password to Clipboard" + +#: ../../../../inc/themes/classic/account.inc:368 +#: ../../../../inc/themes/material-blue/account.inc:388 +msgid "Ver Actual" +msgstr "View Current" + +#: ../../../../inc/themes/classic/account.inc:373 +#: ../../../../inc/themes/classic/editpass.inc:46 +#: ../../../../inc/themes/classic/passreset.inc:46 +#: ../../../../inc/themes/material-blue/passreset.inc:43 +msgid "Volver" +msgstr "Back" + +#: ../../../../inc/themes/classic/account.inc:380 +#: ../../../../inc/themes/classic/search.inc:117 +#: ../../../../inc/themes/material-blue/account.inc:398 +#: ../../../../inc/themes/material-blue/search.inc:130 +msgid "Modificar Cuenta" +msgstr "Edit Account" + +#: ../../../../inc/themes/classic/account.inc:385 +#: ../../../../inc/themes/classic/search.inc:138 +#: ../../../../inc/themes/material-blue/account.inc:402 +#: ../../../../inc/themes/material-blue/search.inc:150 +msgid "Solicitar Modificación" +msgstr "Request Modification" + +#: ../../../../inc/themes/classic/account.inc:392 +#: ../../../../inc/themes/classic/categories.inc:34 +#: ../../../../inc/themes/classic/config.inc:259 +#: ../../../../inc/themes/classic/customers.inc:34 +#: ../../../../inc/themes/classic/editpass.inc:51 +#: ../../../../inc/themes/classic/encryption.inc:102 +#: ../../../../inc/themes/classic/groups.inc:49 +#: ../../../../inc/themes/classic/ldap.inc:229 +#: ../../../../inc/themes/classic/mail.inc:107 +#: ../../../../inc/themes/classic/profiles.inc:154 +#: ../../../../inc/themes/classic/security.inc:58 +#: ../../../../inc/themes/classic/users.inc:160 +#: ../../../../inc/themes/classic/userspass.inc:35 +#: ../../../../inc/themes/classic/wiki.inc:110 +#: ../../../../inc/themes/material-blue/account.inc:414 +#: ../../../../inc/themes/material-blue/categories.inc:43 +#: ../../../../inc/themes/material-blue/config.inc:372 +#: ../../../../inc/themes/material-blue/customers.inc:43 +#: ../../../../inc/themes/material-blue/editpass.inc:60 +#: ../../../../inc/themes/material-blue/groups.inc:58 +#: ../../../../inc/themes/material-blue/ldap.inc:257 +#: ../../../../inc/themes/material-blue/mail.inc:145 +#: ../../../../inc/themes/material-blue/profiles.inc:167 +#: ../../../../inc/themes/material-blue/security.inc:64 +#: ../../../../inc/themes/material-blue/users.inc:197 +#: ../../../../inc/themes/material-blue/userspass.inc:40 +#: ../../../../inc/themes/material-blue/wiki.inc:124 +msgid "Guardar" +msgstr "Save" + +#: ../../../../inc/themes/classic/account.inc:402 +#: ../../../../inc/themes/material-blue/account.inc:424 +msgid "Seleccionar grupos secundarios" +msgstr "Select secondary groups" + +#: ../../../../inc/themes/classic/account.inc:406 +#: ../../../../inc/themes/material-blue/account.inc:427 +msgid "Seleccionar usuarios" +msgstr "Select users" + +#: ../../../../inc/themes/classic/account.inc:439 +#: ../../../../inc/themes/classic/search.inc:188 +#: ../../../../inc/themes/material-blue/account.inc:449 +#: ../../../../inc/themes/material-blue/search.inc:201 +msgid "Clave Copiada al Portapapeles" +msgstr "Password Copied to Clipboard" + +#: ../../../../inc/themes/classic/backup.inc:10 +#: ../../../../inc/themes/classic/backup.inc:67 +#: ../../../../inc/themes/material-blue/backup.inc:10 +#: ../../../../inc/themes/material-blue/backup.inc:71 +msgid "Resultado" +msgstr "Result" + +#: ../../../../inc/themes/classic/backup.inc:18 +#: ../../../../inc/themes/classic/backup.inc:75 +#: ../../../../inc/themes/material-blue/backup.inc:18 +#: ../../../../inc/themes/material-blue/backup.inc:79 +msgid "Descargar Actual" +msgstr "Download Current" + +#: ../../../../inc/themes/classic/backup.inc:31 +#: ../../../../inc/themes/material-blue/backup.inc:31 +msgid "No hay backups para descargar" +msgstr "There are no backups for download" + +#: ../../../../inc/themes/classic/backup.inc:45 +#: ../../../../inc/themes/classic/backup.inc:49 +#: ../../../../inc/themes/classic/backup.inc:113 +#: ../../../../inc/themes/classic/backup.inc:117 +#: ../../../../inc/themes/classic/encryption.inc:93 +#: ../../../../inc/themes/classic/encryption.inc:97 +#: ../../../../inc/themes/classic/encryption.inc:152 +#: ../../../../inc/themes/classic/encryption.inc:156 +#: ../../../../inc/themes/classic/import.inc:15 +#: ../../../../inc/themes/classic/import.inc:37 +#: ../../../../inc/themes/classic/import.inc:51 +#: ../../../../inc/themes/classic/import.inc:97 +#: ../../../../inc/themes/classic/import.inc:118 +#: ../../../../inc/themes/classic/import.inc:170 +#: ../../../../inc/themes/classic/import.inc:174 +#: ../../../../inc/themes/classic/js-common.inc:23 +#: ../../../../inc/themes/classic/ldap.inc:13 +#: ../../../../inc/themes/classic/ldap.inc:33 +#: ../../../../inc/themes/classic/ldap.inc:58 +#: ../../../../inc/themes/classic/ldap.inc:82 +#: ../../../../inc/themes/classic/ldap.inc:93 +#: ../../../../inc/themes/classic/ldap.inc:117 +#: ../../../../inc/themes/classic/ldap.inc:145 +#: ../../../../inc/themes/classic/ldap.inc:166 +#: ../../../../inc/themes/classic/ldap.inc:187 +#: ../../../../inc/themes/classic/wiki.inc:12 +#: ../../../../inc/themes/classic/wiki.inc:28 +#: ../../../../inc/themes/classic/wiki.inc:55 +#: ../../../../inc/themes/classic/wiki.inc:82 +#: ../../../../inc/themes/material-blue/backup.inc:47 +#: ../../../../inc/themes/material-blue/backup.inc:51 +#: ../../../../inc/themes/material-blue/backup.inc:129 +#: ../../../../inc/themes/material-blue/backup.inc:133 +#: ../../../../inc/themes/material-blue/encryption.inc:107 +#: ../../../../inc/themes/material-blue/encryption.inc:111 +#: ../../../../inc/themes/material-blue/encryption.inc:171 +#: ../../../../inc/themes/material-blue/encryption.inc:175 +#: ../../../../inc/themes/material-blue/import.inc:99 +#: ../../../../inc/themes/material-blue/import.inc:103 +#: ../../../../inc/themes/material-blue/js-common.inc:11 +msgid "Ayuda" +msgstr "Help" + +#: ../../../../inc/themes/classic/backup.inc:50 +#: ../../../../inc/themes/material-blue/backup.inc:52 +msgid "" +"La copia de seguridad permite guardar y descargar tanto la base de datos de " +"sysPass como los archivos de la aplicación y su configuración." +msgstr "" +"The backup allows to save and download either sysPass database or " +"application files and its configuracion." + +#: ../../../../inc/themes/classic/backup.inc:52 +#: ../../../../inc/themes/material-blue/backup.inc:54 +msgid "" +"Con este método es posible guardar todos los datos de sysPass en otro lugar " +"o utilizarlos para hacer la aplicación portable." +msgstr "" +"With this method it's possible to save all sysPass data in another place or " +"use it to make a portable application." + +#: ../../../../inc/themes/classic/backup.inc:60 +#: ../../../../inc/themes/classic/backup.inc:126 +#: ../../../../inc/themes/material-blue/backup.inc:64 +msgid "Exportar Cuentas" +msgstr "Export Accounts" + +#: ../../../../inc/themes/classic/backup.inc:84 +#: ../../../../inc/themes/material-blue/backup.inc:88 +msgid "No hay archivos XML para descargar" +msgstr "There is no files for download" + +#: ../../../../inc/themes/classic/backup.inc:90 +#: ../../../../inc/themes/material-blue/backup.inc:94 +#: ../../../../inc/themes/material-blue/backup.inc:101 +msgid "Clave de Exportación" +msgstr "Export Password" + +#: ../../../../inc/themes/classic/backup.inc:98 +#: ../../../../inc/themes/material-blue/backup.inc:107 +#: ../../../../inc/themes/material-blue/backup.inc:114 +msgid "Clave de Exportación (repetir)" +msgstr "Export Password (repeat)" + +#: ../../../../inc/themes/classic/backup.inc:118 +#: ../../../../inc/themes/material-blue/backup.inc:134 +msgid "" +"La exportación de cuentas permite guardar las cuentas y sus datos en formato " +"XML para posteriormente poder ser importados en otras instancias de sysPass." +msgstr "" +"The accounts export allows to save the accounts and their data in XML format " +"to be imported in another sysPass intances." + +#: ../../../../inc/themes/classic/backup.inc:120 +#: ../../../../inc/themes/material-blue/backup.inc:136 +msgid "Los elementos exportados son cuentas, clientes y categorías." +msgstr "The exported items are accounts, customers and categories." + +#: ../../../../inc/themes/classic/backup.inc:122 +#: ../../../../inc/themes/material-blue/backup.inc:138 +msgid "" +"Las claves de las cuentas son exportadas de forma encriptada para mayor " +"seguridad." +msgstr "" +"The accounts passwords are exported in an excrypted way for better security." + +#: ../../../../inc/themes/classic/backup.inc:124 +#: ../../../../inc/themes/material-blue/backup.inc:140 +msgid "" +"Es posible establecer una clave de exportación para guardar todos los datos " +"encriptados en el archivo XML." +msgstr "" +"It's possible to set an export password to save whole data encrypted in the " +"XML file." + +#: ../../../../inc/themes/classic/body.inc:4 +#: ../../../../inc/themes/material-blue/body.inc:4 +msgid "Javascript es necesario para el correcto funcionamiento" +msgstr "Javascript is needed in order to run correctly" + +#: ../../../../inc/themes/classic/categories.inc:10 +#: ../../../../inc/themes/material-blue/categories.inc:14 +msgid "Nombre de la categoría" +msgstr "Category name" + +#: ../../../../inc/themes/classic/categories.inc:18 +#: ../../../../inc/themes/material-blue/categories.inc:26 +msgid "Descripción de la categoría" +msgstr "Category description" + +#: ../../../../inc/themes/classic/config.inc:4 +#: ../../../../inc/themes/material-blue/config.inc:4 +msgid "Sitio" +msgstr "Site" + +#: ../../../../inc/themes/classic/config.inc:10 +#: ../../../../inc/themes/material-blue/config.inc:11 +msgid "Idioma" +msgstr "Language" + +#: ../../../../inc/themes/classic/config.inc:21 +#: ../../../../inc/themes/material-blue/config.inc:22 +msgid "Tema Visual" +msgstr "Visual Theme" + +#: ../../../../inc/themes/classic/config.inc:33 +#: ../../../../inc/themes/material-blue/config.inc:34 +#: ../../../../inc/themes/material-blue/config.inc:42 +msgid "Timeout de sesión (s)" +msgstr "Session timeout (s)" + +#: ../../../../inc/themes/classic/config.inc:42 +#: ../../../../inc/themes/material-blue/config.inc:48 +msgid "Habilitar log de eventos" +msgstr "Enable event log" + +#: ../../../../inc/themes/classic/config.inc:46 +#: ../../../../inc/themes/material-blue/config.inc:52 +msgid "Guarda las acciones realizadas en la aplicación." +msgstr "Saves the actions done by the application." + +#: ../../../../inc/themes/classic/config.inc:58 +#: ../../../../inc/themes/material-blue/config.inc:66 +msgid "Habilitar depuración" +msgstr "Enable debug" + +#: ../../../../inc/themes/classic/config.inc:62 +#: ../../../../inc/themes/material-blue/config.inc:70 +msgid "" +"Muestra información relativa a la configuración de la aplicación y " +"rendimiento." +msgstr "" +"Shows some information about application configuration and performance." + +#: ../../../../inc/themes/classic/config.inc:74 +#: ../../../../inc/themes/material-blue/config.inc:84 +msgid "Modo mantenimiento" +msgstr "Maintenance mode" + +#: ../../../../inc/themes/classic/config.inc:78 +#: ../../../../inc/themes/material-blue/config.inc:88 +msgid "" +"En este modo no se puede acceder a la aplicación. Para deshabilitarlo es " +"necesario modificar el archivo de configuración." +msgstr "" +"In this mode nobody can login to the application. To disable it, you need to " +"modify the configuration file." + +#: ../../../../inc/themes/classic/config.inc:90 +#: ../../../../inc/themes/material-blue/config.inc:102 +msgid "Comprobar actualizaciones" +msgstr "Check for updates" + +#: ../../../../inc/themes/classic/config.inc:94 +#: ../../../../inc/themes/material-blue/config.inc:106 +msgid "" +"Comprobar actualizaciones de la aplicación (sólo para los usuarios " +"administradores)." +msgstr "Check for application updates (only for administrators)." + +#: ../../../../inc/themes/classic/config.inc:106 +#: ../../../../inc/themes/material-blue/config.inc:127 +msgid "Nombre de cuenta como enlace" +msgstr "Account name as link" + +#: ../../../../inc/themes/classic/config.inc:110 +#: ../../../../inc/themes/material-blue/config.inc:131 +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:122 +#: ../../../../inc/themes/material-blue/config.inc:214 +msgid "Gestión de archivos" +msgstr "Files management" + +#: ../../../../inc/themes/classic/config.inc:126 +#: ../../../../inc/themes/material-blue/config.inc:218 +msgid "Habilita la subida/descarga de archivos para las cuentas." +msgstr "Enables the uploads/downloads of account files." + +#: ../../../../inc/themes/classic/config.inc:138 +#: ../../../../inc/themes/material-blue/config.inc:146 +msgid "Búsquedas globales" +msgstr "Global searches" + +#: ../../../../inc/themes/classic/config.inc:142 +#: ../../../../inc/themes/material-blue/config.inc:150 +msgid "" +"Permite que todos los usuarios puedan realizar búsquedas en todas las " +"cuentas, pero no pueden ver el contenido de las que no tienen permisos." +msgstr "" +"Allows to the users to do searches that includes all account, even if they " +"don't have permissions, but they can't view the accounts details." + +#: ../../../../inc/themes/classic/config.inc:154 +#: ../../../../inc/themes/material-blue/config.inc:233 +msgid "Extensiones de archivos permitidas" +msgstr "Allowed file extensions" + +#: ../../../../inc/themes/classic/config.inc:158 +#: ../../../../inc/themes/material-blue/config.inc:237 +msgid "Extensiones permitidas para la subida de archivos." +msgstr "Allowed file extensions for file uploading." + +#: ../../../../inc/themes/classic/config.inc:162 +#: ../../../../inc/themes/material-blue/config.inc:241 +msgid "Se permite un máximo de 4 caracteres." +msgstr "Max 4 characters allowed." + +#: ../../../../inc/themes/classic/config.inc:166 +#: ../../../../inc/themes/material-blue/config.inc:245 +msgid "" +"Escribir extensión y pulsar intro para añadir. Es necesario guardar la " +"configuración." +msgstr "" +"Write the extension and press enter to add. You need to save the " +"configuration." + +#: ../../../../inc/themes/classic/config.inc:181 +#: ../../../../inc/themes/material-blue/config.inc:260 +msgid "Establece el tamaño máximo para subir archivos." +msgstr "Set the maximum file size for uploading." + +#: ../../../../inc/themes/classic/config.inc:185 +#: ../../../../inc/themes/material-blue/config.inc:264 +msgid "El máximo absuluto es de 16MB." +msgstr "The absolute maximum is 16MB." + +#: ../../../../inc/themes/classic/config.inc:196 +#: ../../../../inc/themes/material-blue/config.inc:165 +msgid "Resultados por página" +msgstr "Results per page" + +#: ../../../../inc/themes/classic/config.inc:200 +#: ../../../../inc/themes/material-blue/config.inc:169 +msgid "Número de resultados por página a mostrar, al realizar una búsqueda." +msgstr "Number of results per page to show when doing searches." + +#: ../../../../inc/themes/classic/config.inc:211 +msgid "Resultados en Tarjetas" +msgstr "Results like Cards" + +#: ../../../../inc/themes/classic/config.inc:215 +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:227 +#: ../../../../inc/themes/material-blue/config.inc:185 +msgid "Imagen para mostrar clave" +msgstr "Image to show password" + +#: ../../../../inc/themes/classic/config.inc:231 +#: ../../../../inc/themes/material-blue/config.inc:189 +msgid "Generar una imagen con el texto de la clave de la cuenta." +msgstr "Generate an image with a text of the account password." + +#: ../../../../inc/themes/classic/config.inc:234 +#: ../../../../inc/themes/material-blue/config.inc:192 +msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad." +msgstr "" +"Useful for environments where copy password to clipboard is a security risk." + +#: ../../../../inc/themes/classic/config.inc:269 +#: ../../../../inc/themes/material-blue/config.inc:382 msgid "Añadir extensión" msgstr "Add extension" -#: ../../../../inc/tpl/config.php:508 +#: ../../../../inc/themes/classic/config.inc:270 +#: ../../../../inc/themes/material-blue/config.inc:383 msgid "Eliminar extensión" msgstr "Delete extension" -#: ../../../../inc/tpl/config.php:536 -msgid "Añadir filtro" -msgstr "Add filter" +#: ../../../../inc/themes/classic/customers.inc:10 +#: ../../../../inc/themes/material-blue/customers.inc:14 +msgid "Nombre del cliente" +msgstr "Customer name" -#: ../../../../inc/tpl/config.php:537 -msgid "Eliminar filtro" -msgstr "Delete filter" +#: ../../../../inc/themes/classic/customers.inc:18 +#: ../../../../inc/themes/material-blue/customers.inc:26 +msgid "Descripción del cliente" +msgstr "Customer description" -#: ../../../../inc/tpl/config.php:565 ../../../../inc/tpl/users.php:223 -msgid "Seleccionar Grupo" -msgstr "Select Group" +#: ../../../../inc/themes/classic/encryption.inc:8 +#: ../../../../inc/themes/classic/install.inc:46 +#: ../../../../inc/themes/classic/install.inc:50 +#: ../../../../inc/themes/classic/install.inc:51 +#: ../../../../inc/themes/classic/login.inc:15 +#: ../../../../inc/themes/classic/login.inc:27 +#: ../../../../inc/themes/material-blue/encryption.inc:8 +#: ../../../../inc/themes/material-blue/install.inc:49 +#: ../../../../inc/themes/material-blue/install.inc:56 +#: ../../../../inc/themes/material-blue/login.inc:25 +#: ../../../../inc/themes/material-blue/login.inc:47 +msgid "Clave Maestra" +msgstr "Master Password" -#: ../../../../inc/tpl/config.php:570 ../../../../inc/tpl/users.php:218 -msgid "Seleccionar Perfil" -msgstr "Select Profile" +#: ../../../../inc/themes/classic/encryption.inc:16 +#: ../../../../inc/themes/classic/encryption.inc:116 +#: ../../../../inc/themes/material-blue/encryption.inc:16 +#: ../../../../inc/themes/material-blue/encryption.inc:131 +msgid "Último cambio" +msgstr "Last Change" -#: ../../../../inc/tpl/users.php:71 -msgid "Nombre de usuario completo" -msgstr "Full username" +#: ../../../../inc/themes/classic/encryption.inc:25 +#: ../../../../inc/themes/material-blue/encryption.inc:25 +#: ../../../../inc/themes/material-blue/encryption.inc:31 +msgid "Clave Maestra actual" +msgstr "Current Master Password" -#: ../../../../inc/tpl/users.php:85 -msgid "Login de inicio de sesión" -msgstr "Session login" +#: ../../../../inc/themes/classic/encryption.inc:34 +#: ../../../../inc/themes/material-blue/encryption.inc:37 +#: ../../../../inc/themes/material-blue/encryption.inc:43 +msgid "Nueva Clave Maestra" +msgstr "New Master Password" -#: ../../../../inc/tpl/users.php:117 -msgid "Dirección de correo" -msgstr "Email address" +#: ../../../../inc/themes/classic/encryption.inc:43 +#: ../../../../inc/themes/material-blue/encryption.inc:49 +#: ../../../../inc/themes/material-blue/encryption.inc:55 +msgid "Nueva Clave Maestra (repetir)" +msgstr "New Master Password (repeat)" -#: ../../../../inc/tpl/users.php:154 -msgid "Opciones" -msgstr "Options" +#: ../../../../inc/themes/classic/encryption.inc:51 +#: ../../../../inc/themes/material-blue/encryption.inc:61 +msgid "No modificar cuentas" +msgstr "Do not modify accounts" -#: ../../../../inc/tpl/users.php:158 -msgid "Administrador de la aplicación" -msgstr "Application administrator" +#: ../../../../inc/themes/classic/encryption.inc:56 +#: ../../../../inc/themes/material-blue/encryption.inc:66 +msgid "Establece una nueva clave maestra sin re-encriptar las cuentas" +msgstr "Sets a new master password without re-encrypting the accounts." -#: ../../../../inc/tpl/users.php:158 -msgid "Admin. Aplicación" -msgstr "Application Admin" +#: ../../../../inc/themes/classic/encryption.inc:67 +#: ../../../../inc/themes/material-blue/encryption.inc:79 +msgid "Confirmar cambio" +msgstr "Confirm Change" -#: ../../../../inc/tpl/users.php:160 -msgid "Administrador de cuentas" -msgstr "Accounts administrator" +#: ../../../../inc/themes/classic/encryption.inc:70 +#: ../../../../inc/themes/classic/encryption.inc:73 +#: ../../../../inc/themes/classic/encryption.inc:76 +#: ../../../../inc/themes/classic/import.inc:67 +#: ../../../../inc/themes/classic/security.inc:43 +msgid "Atención" +msgstr "Warning" -#: ../../../../inc/tpl/users.php:160 -msgid "Admin. Cuentas" -msgstr "Accounts Admin" +#: ../../../../inc/themes/classic/encryption.inc:71 +#: ../../../../inc/themes/material-blue/encryption.inc:83 +msgid "Guarde la nueva clave en un lugar seguro." +msgstr "You should save the new password on a secure place" -#: ../../../../inc/tpl/users.php:166 -msgid "Forzar cambio de clave" -msgstr "Force password change" +#: ../../../../inc/themes/classic/encryption.inc:74 +#: ../../../../inc/themes/material-blue/encryption.inc:86 +msgid "Se volverán a encriptar las claves de todas las cuentas." +msgstr "All accounts passwords will be encrypted again." -#: ../../../../inc/tpl/users.php:173 -msgid "Entradas" -msgstr "Entries" +#: ../../../../inc/themes/classic/encryption.inc:77 +#: ../../../../inc/themes/material-blue/encryption.inc:89 +msgid "Los usuarios deberán de introducir la nueva clave maestra." +msgstr "Users will need to enter the new master key." -#: ../../../../inc/tpl/users.php:178 -msgid "Último Acceso" -msgstr "Last Access" +#: ../../../../inc/themes/classic/encryption.inc:98 +#: ../../../../inc/themes/material-blue/encryption.inc:112 +msgid "" +"La clave maestra es utilizada para encriptar las claves de las cuentas de " +"sysPass para mantenerlas seguras." +msgstr "" +"The master password is used to encryt sysPass accounts passwords and keep " +"them safe." -#: ../../../../inc/tpl/users.php:188 -msgid "Fecha Clave Maestra" -msgstr "Master Password Date" +#: ../../../../inc/themes/classic/encryption.inc:100 +#: ../../../../inc/themes/material-blue/encryption.inc:114 +msgid "" +"Es recomendable cambiarla cada cierto tiempo y utilizar una clave compleja " +"que incluya números, letras y símbolos." +msgstr "" +"It's advisable to change it from time to time and use a complex password " +"that includes numbers, letters and symbols." -#: ../../../../inc/tpl/upgrade.php:42 -msgid "Actualización de BBDD" -msgstr "DB Update" +#: ../../../../inc/themes/classic/encryption.inc:108 +#: ../../../../inc/themes/material-blue/encryption.inc:124 +msgid "Clave Temporal" +msgstr "Temporary Password" -#: ../../../../inc/tpl/upgrade.php:44 -msgid "Introducir Código de Seguridad" -msgstr "Enter Security Code" +#: ../../../../inc/themes/classic/encryption.inc:119 +#: ../../../../inc/themes/classic/encryption.inc:130 +#: ../../../../inc/themes/material-blue/encryption.inc:134 +#: ../../../../inc/themes/material-blue/encryption.inc:145 +msgid "No generada" +msgstr "Not generated" -#: ../../../../inc/tpl/upgrade.php:45 -msgid "Código de Seguridad" -msgstr "Security Code" +#: ../../../../inc/themes/classic/encryption.inc:124 +#: ../../../../inc/themes/material-blue/encryption.inc:139 +msgid "Válido hasta" +msgstr "Valid until" -#: ../../../../inc/tpl/upgrade.php:55 -msgid "Iniciar Actualización" -msgstr "Start Update" +#: ../../../../inc/themes/classic/encryption.inc:136 +#: ../../../../inc/themes/material-blue/encryption.inc:151 +#: ../../../../inc/themes/material-blue/encryption.inc:157 +msgid "Validez (s)" +msgstr "Life (s)" -#: ../../../../inc/tpl/eventlog.php:56 +#: ../../../../inc/themes/classic/encryption.inc:139 +msgid "Validez" +msgstr "Life" + +#: ../../../../inc/themes/classic/encryption.inc:157 +#: ../../../../inc/themes/material-blue/encryption.inc:176 +msgid "" +"La clave temporal es utilizada como clave maestra para los usuarios que " +"necesitan introducirla al iniciar la sesión, así no es necesario facilitar " +"la clave maestra original." +msgstr "" +"The temporary password is used as a master password for the users that need " +"to enter when login, so there is no need to tell the real master password." + +#: ../../../../inc/themes/classic/encryption.inc:159 +#: ../../../../inc/themes/material-blue/encryption.inc:180 +msgid "Generar" +msgstr "Generate" + +#: ../../../../inc/themes/classic/eventlog.inc:8 +#: ../../../../inc/themes/classic/search.inc:5 +#: ../../../../inc/themes/material-blue/eventlog.inc:7 +#: ../../../../inc/themes/material-blue/search.inc:3 +msgid "No se encontraron registros" +msgstr "No records found" + +#: ../../../../inc/themes/classic/eventlog.inc:19 +#: ../../../../inc/themes/material-blue/eventlog.inc:18 msgid "Fecha / Hora" msgstr "Date / Time" -#: ../../../../inc/tpl/eventlog.php:59 +#: ../../../../inc/themes/classic/eventlog.inc:22 +#: ../../../../inc/themes/material-blue/eventlog.inc:21 msgid "Evento" msgstr "Event" -#: ../../../../inc/tpl/eventlog.php:65 +#: ../../../../inc/themes/classic/eventlog.inc:28 +#: ../../../../inc/themes/material-blue/eventlog.inc:27 msgid "IP" msgstr "IP" + +#: ../../../../inc/themes/classic/eventlog.inc:86 +#: ../../../../inc/themes/classic/search.inc:161 +#: ../../../../inc/themes/material-blue/eventlog.inc:85 +#: ../../../../inc/themes/material-blue/search.inc:173 +msgid "Primera página" +msgstr "First page" + +#: ../../../../inc/themes/classic/eventlog.inc:88 +#: ../../../../inc/themes/classic/search.inc:163 +#: ../../../../inc/themes/material-blue/eventlog.inc:87 +#: ../../../../inc/themes/material-blue/search.inc:175 +msgid "Página anterior" +msgstr "Previous page" + +#: ../../../../inc/themes/classic/eventlog.inc:93 +#: ../../../../inc/themes/classic/search.inc:168 +#: ../../../../inc/themes/material-blue/eventlog.inc:92 +#: ../../../../inc/themes/material-blue/search.inc:180 +msgid "Página siguiente" +msgstr "Next page" + +#: ../../../../inc/themes/classic/eventlog.inc:95 +#: ../../../../inc/themes/classic/search.inc:170 +#: ../../../../inc/themes/material-blue/eventlog.inc:94 +#: ../../../../inc/themes/material-blue/search.inc:182 +msgid "Última página" +msgstr "Last page" + +#: ../../../../inc/themes/classic/files.inc:17 +#: ../../../../inc/themes/material-blue/files.inc:17 +msgid "Ver Archivo" +msgstr "View File" + +#: ../../../../inc/themes/classic/footer.inc:7 +#: ../../../../inc/themes/material-blue/footer.inc:18 +msgid "Ayuda :: FAQ :: Changelog" +msgstr "Help :: FAQ :: Changelog" + +#: ../../../../inc/themes/classic/footer.inc:10 +#: ../../../../inc/themes/material-blue/footer.inc:23 +msgid "Un proyecto de cygnux.org" +msgstr "A cygnux.org project" + +#: ../../../../inc/themes/classic/groups.inc:10 +#: ../../../../inc/themes/material-blue/groups.inc:14 +msgid "Nombre del grupo" +msgstr "Group name" + +#: ../../../../inc/themes/classic/groups.inc:18 +#: ../../../../inc/themes/material-blue/groups.inc:26 +msgid "Descripción del grupo" +msgstr "Group description" + +#: ../../../../inc/themes/classic/import.inc:7 +#: ../../../../inc/themes/material-blue/import.inc:121 +msgid "Importar phpPMS" +msgstr "phpPMS Import" + +#: ../../../../inc/themes/classic/import.inc:14 +#: ../../../../inc/themes/classic/install.inc:63 +#: ../../../../inc/themes/classic/install.inc:64 +#: ../../../../inc/themes/material-blue/import.inc:128 +#: ../../../../inc/themes/material-blue/import.inc:140 +msgid "Usuario BBDD" +msgstr "DB Username" + +#: ../../../../inc/themes/classic/import.inc:18 +#: ../../../../inc/themes/material-blue/import.inc:132 +msgid "Indicar el usuario de conexión a la base de datos de phpPMS." +msgstr "Provide the phpPMS database connection user." + +#: ../../../../inc/themes/classic/import.inc:28 +#: ../../../../inc/themes/classic/install.inc:71 +#: ../../../../inc/themes/classic/install.inc:73 +#: ../../../../inc/themes/material-blue/import.inc:146 +#: ../../../../inc/themes/material-blue/import.inc:152 +msgid "Clave BBDD" +msgstr "DB Password" + +#: ../../../../inc/themes/classic/import.inc:36 +#: ../../../../inc/themes/classic/install.inc:80 +#: ../../../../inc/themes/classic/install.inc:81 +#: ../../../../inc/themes/material-blue/import.inc:158 +#: ../../../../inc/themes/material-blue/import.inc:170 +msgid "Nombre BBDD" +msgstr "DB Name" + +#: ../../../../inc/themes/classic/import.inc:40 +#: ../../../../inc/themes/material-blue/import.inc:162 +msgid "Indicar el nombre de la base de datos de phpPMS." +msgstr "Provide the phpPMS database name." + +#: ../../../../inc/themes/classic/import.inc:50 +#: ../../../../inc/themes/classic/install.inc:89 +#: ../../../../inc/themes/classic/install.inc:90 +#: ../../../../inc/themes/material-blue/import.inc:176 +#: ../../../../inc/themes/material-blue/import.inc:188 +msgid "Servidor BBDD" +msgstr "DB Server" + +#: ../../../../inc/themes/classic/import.inc:54 +#: ../../../../inc/themes/material-blue/import.inc:180 +msgid "Indicar el servidor de la base de datos de phpPMS." +msgstr "Provide the phpPMS database server." + +#: ../../../../inc/themes/classic/import.inc:64 +#: ../../../../inc/themes/material-blue/import.inc:194 +msgid "Confirmar" +msgstr "Confirm" + +#: ../../../../inc/themes/classic/import.inc:68 +#: ../../../../inc/themes/material-blue/import.inc:198 +msgid "Los datos actuales serán borrados (excepto el usuario actual)" +msgstr "Current data will be removed (except current user)" + +#: ../../../../inc/themes/classic/import.inc:83 +msgid "Iniciar" +msgstr "Start" + +#: ../../../../inc/themes/classic/import.inc:89 +#: ../../../../inc/themes/material-blue/import.inc:7 +msgid "Importar CSV/XML" +msgstr "CSV/XML Import" + +#: ../../../../inc/themes/classic/import.inc:96 +#: ../../../../inc/themes/material-blue/import.inc:14 +msgid "Usuario por Defecto" +msgstr "Default User" + +#: ../../../../inc/themes/classic/import.inc:100 +#: ../../../../inc/themes/material-blue/import.inc:18 +msgid "Define el usuario por defecto para las cuentas importadas." +msgstr "Defines the default user for the accounts imported." + +#: ../../../../inc/themes/classic/import.inc:117 +#: ../../../../inc/themes/classic/ldap.inc:144 +#: ../../../../inc/themes/material-blue/import.inc:36 +#: ../../../../inc/themes/material-blue/ldap.inc:170 +msgid "Grupo por Defecto" +msgstr "Default Group" + +#: ../../../../inc/themes/classic/import.inc:121 +#: ../../../../inc/themes/material-blue/import.inc:40 +msgid "Define el grupo por defecto para las cuentas importadas." +msgstr "Defines the default group for the accounts imported." + +#: ../../../../inc/themes/classic/import.inc:138 +#: ../../../../inc/themes/material-blue/import.inc:58 +#: ../../../../inc/themes/material-blue/import.inc:64 +msgid "Clave de Importación" +msgstr "Import Password" + +#: ../../../../inc/themes/classic/import.inc:146 +#: ../../../../inc/themes/material-blue/import.inc:70 +#: ../../../../inc/themes/material-blue/import.inc:76 +msgid "Delimitador CSV" +msgstr "CVS delimiter" + +#: ../../../../inc/themes/classic/import.inc:162 +#: ../../../../inc/themes/material-blue/import.inc:90 +msgid "Soltar archivo aquí o click para seleccionar" +msgstr "Drop files here or click to select" + +#: ../../../../inc/themes/classic/import.inc:175 +msgid "" +"Permite realizar la importación de Cuentas, Categorías y Clientes desde " +"arhcivos XML y CSV." +msgstr "" +"Allows to make the Accounts, Categories and Customers import from XML or CSV " +"files." + +#: ../../../../inc/themes/classic/import.inc:177 +#: ../../../../inc/themes/material-blue/import.inc:106 +msgid "" +"Los formatos de archivos XML soportados son: sysPass, KeePass y KeePassX" +msgstr "The supported XML file formats are: sysPass, KeePass and KeePassX" + +#: ../../../../inc/themes/classic/import.inc:179 +#: ../../../../inc/themes/material-blue/import.inc:108 +msgid "" +"Arrastar el archivo a importar a la zona indicada o hacer click sobre la " +"flecha." +msgstr "Drag&Drop the file to the import zone or click over the arrow." + +#: ../../../../inc/themes/classic/import.inc:181 +#: ../../../../inc/themes/material-blue/import.inc:110 +msgid "" +"Para archivos de KeePass o KeePassX, el nombre del cliente será igual a " +"KeePass o KeePassX y la categoría igual al nombre de los grupos." +msgstr "" +"For KeePass or KeePassX files, the customer name will be KeePass or KeePassX " +"and the category name like groups names." + +#: ../../../../inc/themes/classic/import.inc:183 +#: ../../../../inc/themes/material-blue/import.inc:112 +msgid "La importación de archivos CSV se realiza con el siguiente formato:" +msgstr "The CSV file import is done with the following format:" + +#: ../../../../inc/themes/classic/import.inc:185 +#: ../../../../inc/themes/material-blue/import.inc:114 +msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas" +msgstr "account_name;customer;category;url;user;password;notes" + +#: ../../../../inc/themes/classic/import.inc:187 +#: ../../../../inc/themes/material-blue/import.inc:116 +msgid "" +"En todos los casos, si el cliente o la categoría no están creados, se crean " +"automáticamente." +msgstr "" +"In all cases, if the customer o category aren't created, they are " +"automatically created." + +#: ../../../../inc/themes/classic/info.inc:4 +#: ../../../../inc/themes/material-blue/info.inc:4 +msgid "Información de la Aplicación" +msgstr "Application Information" + +#: ../../../../inc/themes/classic/info.inc:10 +#: ../../../../inc/themes/material-blue/info.inc:10 +msgid "Versión sysPass" +msgstr "sysPass version" + +#: ../../../../inc/themes/classic/info.inc:18 +#: ../../../../inc/themes/material-blue/info.inc:18 +msgid "Base de Datos" +msgstr "Database" + +#: ../../../../inc/themes/classic/info.inc:29 +#: ../../../../inc/themes/material-blue/info.inc:29 +msgid "PHP" +msgstr "PHP" + +#: ../../../../inc/themes/classic/info.inc:34 +#: ../../../../inc/themes/material-blue/info.inc:34 +msgid "Extensiones" +msgstr "Extensions" + +#: ../../../../inc/themes/classic/info.inc:41 +#: ../../../../inc/themes/material-blue/info.inc:41 +msgid "Memoria Usada" +msgstr "Used Memory" + +#: ../../../../inc/themes/classic/info.inc:49 +#: ../../../../inc/themes/classic/ldap.inc:32 +#: ../../../../inc/themes/classic/mail.inc:21 +#: ../../../../inc/themes/material-blue/config.inc:300 +#: ../../../../inc/themes/material-blue/info.inc:49 +#: ../../../../inc/themes/material-blue/ldap.inc:35 +#: ../../../../inc/themes/material-blue/ldap.inc:58 +#: ../../../../inc/themes/material-blue/ldap.inc:86 +#: ../../../../inc/themes/material-blue/mail.inc:24 +#: ../../../../inc/themes/material-blue/mail.inc:30 +msgid "Servidor" +msgstr "Server" + +#: ../../../../inc/themes/classic/install.inc:4 +#: ../../../../inc/themes/material-blue/install.inc:4 +msgid "Instalación " +msgstr "Installation" + +#: ../../../../inc/themes/classic/install.inc:25 +#: ../../../../inc/themes/material-blue/install.inc:25 +msgid "Crear cuenta de admin de sysPass" +msgstr "Create sysPass admin account" + +#: ../../../../inc/themes/classic/install.inc:32 +#: ../../../../inc/themes/material-blue/install.inc:36 +msgid "Login del usuario administrador de sysPass" +msgstr "sysPass administrator's login" + +#: ../../../../inc/themes/classic/install.inc:58 +#: ../../../../inc/themes/material-blue/install.inc:69 +msgid "Configurar BBDD" +msgstr "DB Configuration" + +#: ../../../../inc/themes/classic/install.inc:67 +msgid "Login de usuario con permisos de administrador de MySQL" +msgstr "User login with with database administrative rights" + +#: ../../../../inc/themes/classic/install.inc:85 +#: ../../../../inc/themes/material-blue/install.inc:103 +msgid "Nombre de la base de datos para sysPass" +msgstr "sysPass database name" + +#: ../../../../inc/themes/classic/install.inc:93 +msgid "Nombre del servidor de la base de datos de sysPass" +msgstr "sysPass database server name" + +#: ../../../../inc/themes/classic/install.inc:99 +#: ../../../../inc/themes/material-blue/install.inc:121 +msgid "Modo Hosting" +msgstr "Hosting Mode" + +#: ../../../../inc/themes/classic/install.inc:106 +#: ../../../../inc/themes/material-blue/install.inc:128 +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:110 +#: ../../../../inc/themes/material-blue/install.inc:135 +#: ../../../../inc/themes/material-blue/install.inc:136 +msgid "Instalar" +msgstr "Install" + +#: ../../../../inc/themes/classic/ldap.inc:12 +#: ../../../../inc/themes/material-blue/ldap.inc:12 +msgid "Habilitar LDAP" +msgstr "Enable LDAP" + +#: ../../../../inc/themes/classic/ldap.inc:16 +#: ../../../../inc/themes/material-blue/ldap.inc:16 +msgid "Habilita de autentificación mediante servidor LDAP." +msgstr "Enables the authentication aganist an LDAP server." + +#: ../../../../inc/themes/classic/ldap.inc:20 +#: ../../../../inc/themes/material-blue/ldap.inc:20 +msgid "Este método utilizará MySQL en caso de fallo." +msgstr "This method will use MySQL as fallback." + +#: ../../../../inc/themes/classic/ldap.inc:36 +#: ../../../../inc/themes/material-blue/ldap.inc:39 +msgid "Nombre o dirección IP del servidor de LDAP." +msgstr "Hostname or IP address of LDAP server." + +#: ../../../../inc/themes/classic/ldap.inc:40 +#: ../../../../inc/themes/classic/ldap.inc:65 +#: ../../../../inc/themes/classic/ldap.inc:100 +#: ../../../../inc/themes/classic/ldap.inc:128 +#: ../../../../inc/themes/classic/wiki.inc:89 +#: ../../../../inc/themes/material-blue/ldap.inc:43 +#: ../../../../inc/themes/material-blue/ldap.inc:72 +#: ../../../../inc/themes/material-blue/ldap.inc:119 +#: ../../../../inc/themes/material-blue/ldap.inc:151 +#: ../../../../inc/themes/material-blue/wiki.inc:101 +msgid "Ejemplos:" +msgstr "Examples:" + +#: ../../../../inc/themes/classic/ldap.inc:57 +#: ../../../../inc/themes/material-blue/ldap.inc:64 +msgid "Usuario de conexión" +msgstr "Bind User" + +#: ../../../../inc/themes/classic/ldap.inc:61 +#: ../../../../inc/themes/material-blue/ldap.inc:68 +msgid "Usuario para conectar con el servicio de LDAP." +msgstr "User to connect to the LDAP service." + +#: ../../../../inc/themes/classic/ldap.inc:81 +#: ../../../../inc/themes/material-blue/ldap.inc:92 +msgid "Clave de conexión" +msgstr "Bind Password" + +#: ../../../../inc/themes/classic/ldap.inc:92 +#: ../../../../inc/themes/material-blue/ldap.inc:111 +#: ../../../../inc/themes/material-blue/ldap.inc:133 +msgid "Base de búsqueda" +msgstr "Search base" + +#: ../../../../inc/themes/classic/ldap.inc:96 +#: ../../../../inc/themes/material-blue/ldap.inc:115 +msgid "Base en la que realizar la búsqueda de usuarios de LDAP." +msgstr "LDAP base to do the LDAP users searches." + +#: ../../../../inc/themes/classic/ldap.inc:120 +#: ../../../../inc/themes/material-blue/ldap.inc:143 +msgid "" +"Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso." +msgstr "LDAP group that the user must belong to allow it to login." + +#: ../../../../inc/themes/classic/ldap.inc:124 +#: ../../../../inc/themes/material-blue/ldap.inc:147 +msgid "Este grupo debe de estar ubicado en la base de búsquedas de LDAP." +msgstr "This group needs to be placed in the LDAP search base." + +#: ../../../../inc/themes/classic/ldap.inc:148 +#: ../../../../inc/themes/material-blue/ldap.inc:174 +msgid "" +"Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP." +msgstr "Define the default users group for new LDAP users" + +#: ../../../../inc/themes/classic/ldap.inc:165 +#: ../../../../inc/themes/material-blue/ldap.inc:190 +msgid "Perfil por Defecto" +msgstr "Default Profile" + +#: ../../../../inc/themes/classic/ldap.inc:169 +#: ../../../../inc/themes/material-blue/ldap.inc:194 +msgid "" +"Define el perfil de usuarios por defecto para los nuevos usuarios de LDAP." +msgstr "Defines the default profile for the newly created LDAP users." + +#: ../../../../inc/themes/classic/ldap.inc:186 +#: ../../../../inc/themes/material-blue/ldap.inc:210 +msgid "Active Directory" +msgstr "Active Directory" + +#: ../../../../inc/themes/classic/ldap.inc:190 +#: ../../../../inc/themes/material-blue/ldap.inc:214 +msgid "Habilita el modo de conexión con LDAP de Active Directory." +msgstr "Enables Active Directory LDAP connection mode." + +#: ../../../../inc/themes/classic/ldap.inc:202 +#: ../../../../inc/themes/material-blue/ldap.inc:228 +msgid "Comprobar" +msgstr "Check" + +#: ../../../../inc/themes/classic/ldap.inc:206 +#: ../../../../inc/themes/material-blue/ldap.inc:232 +msgid "Comprobar conexión con LDAP" +msgstr "Check LDAP connection" + +#: ../../../../inc/themes/classic/login.inc:46 +#: ../../../../inc/themes/material-blue/login.inc:70 +msgid "¿Olvidó su clave?" +msgstr "Lost your password?" + +#: ../../../../inc/themes/classic/login.inc:59 +#: ../../../../inc/themes/material-blue/login.inc:83 +msgid "Aplicación actualizada correctamente" +msgstr "Application successfully updated" + +#: ../../../../inc/themes/classic/login.inc:64 +#: ../../../../inc/themes/classic/login.inc:65 +#: ../../../../inc/themes/material-blue/login.inc:88 +#: ../../../../inc/themes/material-blue/login.inc:89 +#: ../../../../inc/themes/material-blue/login.inc:91 +msgid "Nuevas Características" +msgstr "New Features" + +#: ../../../../inc/themes/classic/mail.inc:11 +#: ../../../../inc/themes/material-blue/mail.inc:11 +msgid "Habilitar notificaciones de correo" +msgstr "Enable email notifications" + +#: ../../../../inc/themes/classic/mail.inc:29 +#: ../../../../inc/themes/material-blue/config.inc:314 +#: ../../../../inc/themes/material-blue/mail.inc:36 +#: ../../../../inc/themes/material-blue/mail.inc:43 +msgid "Puerto" +msgstr "Port" + +#: ../../../../inc/themes/classic/mail.inc:37 +#: ../../../../inc/themes/material-blue/mail.inc:49 +msgid "Habilitar Autentificación" +msgstr "Enable Authentication" + +#: ../../../../inc/themes/classic/mail.inc:68 +#: ../../../../inc/themes/material-blue/mail.inc:91 +msgid "Deshabilitada" +msgstr "Disabled" + +#: ../../../../inc/themes/classic/mail.inc:77 +#: ../../../../inc/themes/material-blue/mail.inc:100 +#: ../../../../inc/themes/material-blue/mail.inc:107 +msgid "Dirección de correo de envío" +msgstr "Recipient email address" + +#: ../../../../inc/themes/classic/mail.inc:85 +#: ../../../../inc/themes/material-blue/mail.inc:113 +msgid "Habilitar peticiones por correo" +msgstr "Enable requests by email" + +#: ../../../../inc/themes/classic/mgmttabs.inc:66 +#: ../../../../inc/themes/classic/search.inc:112 +#: ../../../../inc/themes/material-blue/search.inc:125 +msgid "Más Acciones" +msgstr "More Actions" + +#: ../../../../inc/themes/classic/passreset.inc:13 +#: ../../../../inc/themes/material-blue/passreset.inc:10 +msgid "Solicitud de Cambio de Clave" +msgstr "Request Password Change" + +#: ../../../../inc/themes/classic/passreset.inc:16 +msgid "Login del Usuario" +msgstr "User login" + +#: ../../../../inc/themes/classic/passreset.inc:21 +#: ../../../../inc/themes/material-blue/passreset.inc:24 +msgid "Email del Usuario" +msgstr "User's Email" + +#: ../../../../inc/themes/classic/passreset.inc:22 +#: ../../../../inc/themes/classic/users.inc:61 +#: ../../../../inc/themes/material-blue/users.inc:69 +msgid "Email" +msgstr "Email" + +#: ../../../../inc/themes/classic/passreset.inc:27 +msgid "Nueva Clave" +msgstr "New Password" + +#: ../../../../inc/themes/classic/passreset.inc:34 +msgid "Nueva Clave (Verificar)" +msgstr "New Password (Verify)" + +#: ../../../../inc/themes/classic/passreset.inc:35 +msgid "Clave (Verificar)" +msgstr "Password (Verify)" + +#: ../../../../inc/themes/classic/passreset.inc:46 +#: ../../../../inc/themes/material-blue/passreset.inc:42 +msgid "Volver a iniciar sesión" +msgstr "Go back to login" + +#: ../../../../inc/themes/classic/passreset.inc:48 +#: ../../../../inc/themes/material-blue/2fa.inc:27 +#: ../../../../inc/themes/material-blue/passreset.inc:48 +#: ../../../../inc/themes/material-blue/passreset.inc:49 +msgid "Solicitar" +msgstr "Request" + +#: ../../../../inc/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:53 +#: ../../../../inc/themes/material-blue/passreset.inc:54 +msgid "Cambiar" +msgstr "Change" + +#: ../../../../inc/themes/classic/passreset.inc:52 +msgid "Cambiar Clave" +msgstr "Change password" + +#: ../../../../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:28 +#: ../../../../inc/themes/material-blue/profiles.inc:40 +msgid "Ver Historial" +msgstr "View 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 +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:77 +#: ../../../../inc/themes/material-blue/profiles.inc:93 +msgid "Gestión" +msgstr "Management" + +#: ../../../../inc/themes/classic/profiles.inc:81 +#: ../../../../inc/themes/material-blue/profiles.inc:99 +msgid "Gestión de usuarios" +msgstr "Users management" + +#: ../../../../inc/themes/classic/profiles.inc:85 +#: ../../../../inc/themes/material-blue/profiles.inc:104 +msgid "Gestión de grupos" +msgstr "Groups management" + +#: ../../../../inc/themes/classic/profiles.inc:90 +#: ../../../../inc/themes/material-blue/profiles.inc:109 +msgid "Gestión de perfiles" +msgstr "Profiles management" + +#: ../../../../inc/themes/classic/profiles.inc:90 +#: ../../../../inc/themes/material-blue/profiles.inc:109 +msgid "Perfiles" +msgstr "Profiles" + +#: ../../../../inc/themes/classic/profiles.inc:94 +#: ../../../../inc/themes/material-blue/profiles.inc:114 +msgid "Gestión de categorías" +msgstr "Categories management" + +#: ../../../../inc/themes/classic/profiles.inc:94 +#: ../../../../inc/themes/material-blue/profiles.inc:114 +msgid "Categorías" +msgstr "Categories" + +#: ../../../../inc/themes/classic/profiles.inc:99 +#: ../../../../inc/themes/material-blue/profiles.inc:119 +msgid "Gestión de clientes" +msgstr "Customers management" + +#: ../../../../inc/themes/classic/profiles.inc:99 +#: ../../../../inc/themes/material-blue/profiles.inc:119 +msgid "Clientes" +msgstr "Customers" + +#: ../../../../inc/themes/classic/profiles.inc:106 +#: ../../../../inc/themes/material-blue/profiles.inc:125 +msgid "Otros" +msgstr "Others" + +#: ../../../../inc/themes/classic/profiles.inc:110 +#: ../../../../inc/themes/material-blue/profiles.inc:131 +msgid "Ver log de eventos" +msgstr "View event log" + +#: ../../../../inc/themes/classic/profiles.inc:110 +#: ../../../../inc/themes/material-blue/profiles.inc:131 +msgid "Log de Eventos" +msgstr "Event Log" + +#: ../../../../inc/themes/classic/profiles.inc:118 +#: ../../../../inc/themes/material-blue/profiles.inc:138 +msgid "Usado por" +msgstr "Used by" + +#: ../../../../inc/themes/classic/profiles.inc:125 +#: ../../../../inc/themes/material-blue/profiles.inc:145 +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:392 +#: ../../../../inc/themes/material-blue/editpass.inc:55 +#: ../../../../inc/themes/material-blue/request.inc:42 +msgid "Atrás" +msgstr "Back" + +#: ../../../../inc/themes/classic/request.inc:38 +#: ../../../../inc/themes/material-blue/request.inc:48 +msgid "Enviar" +msgstr "Send" + +#: ../../../../inc/themes/classic/search.inc:26 +#: ../../../../inc/themes/material-blue/search.inc:29 +msgid "Buscar en Wiki" +msgstr "Search in Wiki" + +#: ../../../../inc/themes/classic/search.inc:62 +#: ../../../../inc/themes/material-blue/search.inc:65 +msgid "Abrir enlace a" +msgstr "Open link to" + +#: ../../../../inc/themes/classic/search.inc:80 +#: ../../../../inc/themes/material-blue/search.inc:89 +msgid "Archivos adjuntos" +msgstr "Attachments" + +#: ../../../../inc/themes/classic/search.inc:87 +#: ../../../../inc/themes/material-blue/search.inc:98 +msgid "Enlace a Wiki" +msgstr "Link to Wiki" + +#: ../../../../inc/themes/classic/search.inc:151 +#: ../../../../inc/themes/material-blue/search.inc:163 +msgid "Filtro ON" +msgstr "Filter ON" + +#: ../../../../inc/themes/classic/search.inc:155 +#: ../../../../inc/themes/material-blue/search.inc:167 +msgid "Global ON" +msgstr "Global ON" + +#: ../../../../inc/themes/classic/searchbox.inc:5 +#: ../../../../inc/themes/material-blue/searchbox.inc:5 +msgid "Limpiar" +msgstr "Clear" + +#: ../../../../inc/themes/classic/searchbox.inc:6 +#: ../../../../inc/themes/material-blue/searchbox.inc:10 +msgid "Texto a buscar" +msgstr "Text to search" + +#: ../../../../inc/themes/classic/searchbox.inc:10 +#: ../../../../inc/themes/material-blue/searchbox.inc:15 +msgid "Parámetros especiales:" +msgstr "Special parameters" + +#: ../../../../inc/themes/classic/searchbox.inc:13 +#: ../../../../inc/themes/material-blue/searchbox.inc:18 +msgid "Buscar cuentas a las que 'login' tenga acceso" +msgstr "Search accounts for which 'login' has access rights" + +#: ../../../../inc/themes/classic/searchbox.inc:14 +#: ../../../../inc/themes/material-blue/searchbox.inc:19 +msgid "Buscar cuentas a las que 'group_name' tenga acceso" +msgstr "Search accounts for which 'group_name' has access rights" + +#: ../../../../inc/themes/classic/searchbox.inc:18 +#: ../../../../inc/themes/material-blue/searchbox.inc:24 +#: ../../../../inc/themes/material-blue/searchbox.inc:27 +msgid "Búsqueda global" +msgstr "Global search" + +#: ../../../../inc/themes/classic/searchbox.inc:41 +#: ../../../../inc/themes/material-blue/searchbox.inc:53 +msgid "CPP" +msgstr "APP" + +#: ../../../../inc/themes/classic/searchbox.inc:41 +#: ../../../../inc/themes/material-blue/searchbox.inc:53 +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: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 "" +"Enables two factor authentication that requires 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:21 +msgid "" +"Escanee el código QR proporcionado y a continuación introduzca la clave de 6 " +"dígitos." +msgstr "Scan the provided QR code and then enter the 6 digits code." + +#: ../../../../inc/themes/classic/security.inc:34 +#: ../../../../inc/themes/material-blue/security.inc:35 +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:43 +msgid "Código" +msgstr "Code" + +#: ../../../../inc/themes/classic/security.inc:44 +#: ../../../../inc/themes/material-blue/security.inc:48 +msgid "" +"Una vez activada, sólo es posible acceder si se dispone del dispositivo " +"generador de códigos asociado." +msgstr "" +"Once enabled, you can only access if you have the device that generates the " +"code." + +#: ../../../../inc/themes/classic/sessionbar.inc:6 +#: ../../../../inc/themes/material-blue/footer.inc:7 +msgid "Cambiar clave de usuario" +msgstr "Change user password" + +#: ../../../../inc/themes/classic/sessionbar.inc:9 +msgid "Preferencias" +msgstr "Preferences" + +#: ../../../../inc/themes/classic/sessionbar.inc:15 +#: ../../../../inc/themes/material-blue/footer.inc:5 +msgid "Salir" +msgstr "Sign out" + +#: ../../../../inc/themes/classic/update.inc:8 +#: ../../../../inc/themes/material-blue/update.inc:8 +msgid "Actualizado" +msgstr "Updated" + +#: ../../../../inc/themes/classic/update.inc:10 +#: ../../../../inc/themes/material-blue/update.inc:10 +msgid "Error al comprobar actualizaciones" +msgstr "Error while checking for updates" + +#: ../../../../inc/themes/classic/upgrade.inc:8 +#: ../../../../inc/themes/material-blue/upgrade.inc:8 +msgid "Actualización de BBDD" +msgstr "DB Update" + +#: ../../../../inc/themes/classic/upgrade.inc:10 +msgid "Introducir Código de Seguridad" +msgstr "Enter Security Code" + +#: ../../../../inc/themes/classic/upgrade.inc:11 +#: ../../../../inc/themes/material-blue/upgrade.inc:14 +msgid "Código de Seguridad" +msgstr "Security Code" + +#: ../../../../inc/themes/classic/upgrade.inc:21 +#: ../../../../inc/themes/material-blue/upgrade.inc:26 +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:76 +msgid "Dirección de correo" +msgstr "Email address" + +#: ../../../../inc/themes/classic/users.inc:98 +#: ../../../../inc/themes/material-blue/users.inc:128 +msgid "Opciones" +msgstr "Options" + +#: ../../../../inc/themes/classic/users.inc:103 +#: ../../../../inc/themes/material-blue/users.inc:132 +msgid "Administrador de la aplicación" +msgstr "Application administrator" + +#: ../../../../inc/themes/classic/users.inc:103 +#: ../../../../inc/themes/material-blue/users.inc:135 +msgid "Admin. Aplicación" +msgstr "Application Admin" + +#: ../../../../inc/themes/classic/users.inc:107 +#: ../../../../inc/themes/material-blue/users.inc:138 +msgid "Administrador de cuentas" +msgstr "Accounts administrator" + +#: ../../../../inc/themes/classic/users.inc:107 +#: ../../../../inc/themes/material-blue/users.inc:141 +msgid "Admin. Cuentas" +msgstr "Accounts Admin" + +#: ../../../../inc/themes/classic/users.inc:117 +#: ../../../../inc/themes/material-blue/users.inc:151 +msgid "Forzar cambio de clave" +msgstr "Force password change" + +#: ../../../../inc/themes/classic/users.inc:125 +#: ../../../../inc/themes/material-blue/users.inc:161 +msgid "Entradas" +msgstr "Entries" + +#: ../../../../inc/themes/classic/users.inc:130 +#: ../../../../inc/themes/material-blue/users.inc:166 +msgid "Último Acceso" +msgstr "Last Access" + +#: ../../../../inc/themes/classic/users.inc:140 +#: ../../../../inc/themes/material-blue/users.inc:176 +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 preffix" + +#: ../../../../inc/themes/classic/wiki.inc:85 +#: ../../../../inc/themes/material-blue/wiki.inc:97 +msgid "" +"Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki." +msgstr "Preffix to determine which accounts have a link to the Wiki." + +#: ../../../../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:42 +msgid "Seleccionar o escribir para crear uno nuevo" +msgstr "Select or write to create a new one" + +#: ../../../../inc/themes/material-blue/account.inc:110 +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:118 +#: ../../../../inc/themes/material-blue/import.inc:217 +msgid "Realizar" +msgstr "Perform" + +#: ../../../../inc/themes/material-blue/config.inc:179 +msgid "Número de resultados por página" +msgstr "Results per page" + +#: ../../../../inc/themes/material-blue/config.inc:274 +msgid "Tamaño máximo de archivo en bytes" +msgstr "Maximum file size in bytes" + +#: ../../../../inc/themes/material-blue/config.inc:281 +msgid "Proxy" +msgstr "Proxy" + +#: ../../../../inc/themes/material-blue/config.inc:287 +msgid "Usar Proxy" +msgstr "Use Proxy" + +#: ../../../../inc/themes/material-blue/config.inc:308 +msgid "Servidor proxy" +msgstr "Proxy server" + +#: ../../../../inc/themes/material-blue/config.inc:322 +msgid "Puerto del servidor proxy" +msgstr "Proxy server port" + +#: ../../../../inc/themes/material-blue/config.inc:336 +msgid "Usuario del servidor proxy" +msgstr "Proxy server user" + +#: ../../../../inc/themes/material-blue/config.inc:350 +msgid "Clave del servidor proxy" +msgstr "Proxy server password" + +#: ../../../../inc/themes/material-blue/footer.inc:11 +msgid "Preferencias de usuario" +msgstr "User preferences" + +#: ../../../../inc/themes/material-blue/import.inc:104 +msgid "" +"Permite realizar la importación de Cuentas, Categorías y Clientes desde " +"archivos XML y CSV." +msgstr "" +"Allows to do the Accounts, Categories and Customers import form XML and CSV " +"files." + +#: ../../../../inc/themes/material-blue/install.inc:31 +msgid "Usuario administrador de sysPass" +msgstr "sysPass admin user" + +#: ../../../../inc/themes/material-blue/install.inc:78 +msgid "Usuario acceso BBDD" +msgstr "DB access user" + +#: ../../../../inc/themes/material-blue/install.inc:83 +msgid "Usuario con permisos de administrador de MySQL" +msgstr "An user with MySQL admin rights" + +#: ../../../../inc/themes/material-blue/install.inc:90 +msgid "Clave acceso BBDD" +msgstr "DB access password" + +#: ../../../../inc/themes/material-blue/install.inc:98 +msgid "Nombre BBDD para sysPass" +msgstr "sysPass database name" + +#: ../../../../inc/themes/material-blue/install.inc:110 +msgid "Servidor BBDD para sysPass" +msgstr "sysPass database server" + +#: ../../../../inc/themes/material-blue/install.inc:115 +msgid "Nombre del servidor para instalar la base de datos de sysPass" +msgstr "Server name to install the sysPass database" + +#: ../../../../inc/themes/material-blue/ldap.inc:96 +msgid "Clave del usuario de conexión a LDAP." +msgstr "LDAP connection user password" + +#: ../../../../inc/themes/material-blue/mail.inc:118 +msgid "" +"Habilita que los usuarios puedan solicitar modificaciones o acceso a las " +"cuentas sin permisos." +msgstr "" +"Allows that users can request for modifications or access to accounts in " +"which they havenn't rights." + +#: ../../../../inc/themes/material-blue/profiles.inc:25 +msgid "Crear nueva cuenta" +msgstr "Create a new account" + +#: ../../../../inc/themes/material-blue/profiles.inc:25 +msgid "Crear" +msgstr "Create" + +#: ../../../../inc/themes/material-blue/profiles.inc:55 +msgid "Eliminar cuenta" +msgstr "Delete account" + +#: ../../../../inc/themes/material-blue/profiles.inc:55 +msgid "Eliminar" +msgstr "Delete" + +#: ../../../../inc/themes/material-blue/profiles.inc:60 +msgid "Var archivos de cuenta" +msgstr "View account files" + +#: ../../../../inc/themes/material-blue/profiles.inc:77 +msgid "Opciones de encriptación" +msgstr "Encryption options" + +#: ../../../../inc/themes/material-blue/profiles.inc:82 +msgid "Realizar copia de seguridad y exportar" +msgstr "Make a backup and export" + +#: ../../../../inc/themes/material-blue/profiles.inc:87 +msgid "Realizar importación de cuentas" +msgstr "Make accounts import" + +#: ../../../../inc/themes/material-blue/profiles.inc:87 +msgid "Importar" +msgstr "Import" + +#: ../../../../inc/themes/material-blue/security.inc:4 +msgid "Autentificación" +msgstr "Authentication" + +#: ../../../../inc/themes/material-blue/security.inc:29 +msgid "Activar" +msgstr "Activate" diff --git a/inc/themes/material-blue/js/functions.js b/inc/themes/material-blue/js/functions.js index 6b2095fe..836b4db2 100644 --- a/inc/themes/material-blue/js/functions.js +++ b/inc/themes/material-blue/js/functions.js @@ -1307,6 +1307,11 @@ function passwordDetect() { $('.passwordfield__input').each(function () { var thisParent = $(this).parent(); var targetId = $(this).attr('id'); + + if (thisParent.next().hasClass('password-actions')) { + return; + } + var btnMenu = ''; btnMenu += '
      '; diff --git a/inc/themes/material-blue/security.inc b/inc/themes/material-blue/security.inc index af46d5b6..8dbd56ec 100644 --- a/inc/themes/material-blue/security.inc +++ b/inc/themes/material-blue/security.inc @@ -1,7 +1,7 @@
      - +
      @@ -10,7 +10,7 @@ - +
      help_outline

      From bda63b41848e93c68879d880726fcb360a551326 Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Mon, 3 Aug 2015 23:29:35 +0200 Subject: [PATCH 62/84] * [MOD] Reload page whe theme applied * [FIX] Upgrade table issue --- inc/Session.class.php | 6 +++--- inc/Upgrade.class.php | 2 +- inc/Util.class.php | 2 +- inc/dbstructure.sql | 2 +- inc/themes/classic/users.inc | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/inc/Session.class.php b/inc/Session.class.php index c9904ea8..afa0834a 100644 --- a/inc/Session.class.php +++ b/inc/Session.class.php @@ -332,11 +332,11 @@ class Session /** * Devuelve si es necesario recargar la aplicación * - * @return bool|null + * @return bool */ public static function getReload() { - return (isset($_SESSION["reload"])) ? $_SESSION["reload"] : null; + return (isset($_SESSION["reload"])) ? $_SESSION["reload"] : false; } /** @@ -344,7 +344,7 @@ class Session * * @param bool $bool */ - public static function setReload($bool = false) + public static function setReload($bool) { $_SESSION["reload"] = $bool; } diff --git a/inc/Upgrade.class.php b/inc/Upgrade.class.php index 9349ac9f..eac4e67a 100644 --- a/inc/Upgrade.class.php +++ b/inc/Upgrade.class.php @@ -110,7 +110,7 @@ class Upgrade $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(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_accountId` (`usertogroup_userId`) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;'; + $queries[] = '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`)) DEFAULT CHARACTER SET = utf8 COLLATE = utf8_general_ci;'; break; default : $log->addDescription(_('No es necesario actualizar la Base de Datos.')); diff --git a/inc/Util.class.php b/inc/Util.class.php index 5e22eae2..892cd554 100644 --- a/inc/Util.class.php +++ b/inc/Util.class.php @@ -470,7 +470,7 @@ class Util public static function checkReload() { if (Session::getReload() === true) { - Session::setReload(); + Session::setReload(false); exit(""); } } diff --git a/inc/dbstructure.sql b/inc/dbstructure.sql index 05c42b49..c347acb2 100644 --- a/inc/dbstructure.sql +++ b/inc/dbstructure.sql @@ -290,7 +290,7 @@ CREATE TABLE `usrToGroups` ( `usertogroup_userId` int(10) unsigned NOT NULL, `usertogroup_groupId` int(10) unsigned NOT NULL, PRIMARY KEY (`usertogroup_id`), - KEY `IDX_accountId` (`usertogroup_userId`) + KEY `IDX_usertogroup_userId` (`usertogroup_userId`) ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; diff --git a/inc/themes/classic/users.inc b/inc/themes/classic/users.inc index 63245ce6..3720d220 100644 --- a/inc/themes/classic/users.inc +++ b/inc/themes/classic/users.inc @@ -70,7 +70,7 @@ - + From 6865664f35f421dedd061e4ebb683c2c0d3f568f Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Tue, 4 Aug 2015 00:04:52 +0200 Subject: [PATCH 63/84] * [ADD] Closes #81. Accounts main group can be changed by admins. Thanks to @cfinch --- ajax/ajax_accountSave.php | 8 ++++++-- inc/Account.class.php | 2 ++ inc/themes/material-blue/account.inc | 15 +++++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/ajax/ajax_accountSave.php b/ajax/ajax_accountSave.php index 010737f2..fa5fb461 100644 --- a/ajax/ajax_accountSave.php +++ b/ajax/ajax_accountSave.php @@ -58,11 +58,11 @@ $accountNotes = SP\Request::analyze('notes'); $accountUrl = SP\Request::analyze('url'); $accountGroupEditEnabled = SP\Request::analyze('geditenabled', 0, false, 1); $accountUserEditEnabled = SP\Request::analyze('ueditenabled', 0, false, 1); +$accountMainGroupId = SP\Request::analyze('mainGroupId', SP\Session::getUserGroupId()); $accountChangesHash = SP\Request::analyze('hash'); // Datos del Usuario $currentUserId = SP\Session::getUserId(); -$currentGroupId = SP\Session::getUserGroupId(); if ($actionId === \SP\Controller\ActionsInterface::ACTION_ACC_NEW) { // Comprobaciones para nueva cuenta @@ -148,7 +148,7 @@ switch ($actionId) { $account->setAccountIV($accounEncPassIV); $account->setAccountNotes($accountNotes); $account->setAccountUserId($currentUserId); - $account->setAccountUserGroupId($currentGroupId); + $account->setAccountUserGroupId($accountMainGroupId); $account->setAccountUsersId($accountOtherUsers); $account->setAccountUserGroupsId($accountOtherGroups); $account->setAccountOtherUserEdit($accountUserEditEnabled); @@ -187,6 +187,10 @@ switch ($actionId) { $account->setAccountOtherUserEdit($accountUserEditEnabled); $account->setAccountOtherGroupEdit($accountGroupEditEnabled); + // Cambiar el grupo principal si el usuario es Admin + if (SP\Session::getUserIsAdminApp() || SP\Session::getUserIsAdminAcc()) { + $account->setAccountUserGroupId($accountMainGroupId); + } // Comprobar si han habido cambios if ($accountChangesHash == $account->calcChangesHash()) { diff --git a/inc/Account.class.php b/inc/Account.class.php index 4f96fdd6..83fe1a87 100644 --- a/inc/Account.class.php +++ b/inc/Account.class.php @@ -136,6 +136,7 @@ class Account extends AccountBase implements AccountInterface . 'account_url = :accountUrl,' . 'account_notes = :accountNotes,' . 'account_userEditId = :accountUserEditId,' + . 'account_userGroupId = :accountUserGroupId,' . 'account_dateEdit = NOW(),' . 'account_otherUserEdit = :accountOtherUserEdit,' . 'account_otherGroupEdit = :accountOtherGroupEdit ' @@ -148,6 +149,7 @@ class Account extends AccountBase implements AccountInterface $data['accountUrl'] = $this->getAccountUrl(); $data['accountNotes'] = $this->getAccountNotes(); $data['accountUserEditId'] = $this->getAccountUserEditId(); + $data['accountUserGroupId'] = ($this->getAccountUserGroupId()) ? $this->getAccountUserGroupId() : 'account_userGroupId'; $data['accountOtherUserEdit'] = intval($this->getAccountOtherUserEdit()); $data['accountOtherGroupEdit'] = intval($this->getAccountOtherGroupEdit()); $data['accountId'] = $this->getAccountId(); diff --git a/inc/themes/material-blue/account.inc b/inc/themes/material-blue/account.inc index 30544e23..c525b308 100644 --- a/inc/themes/material-blue/account.inc +++ b/inc/themes/material-blue/account.inc @@ -199,6 +199,21 @@

      + + + + + + + + + From b2941a82aba9662b65e6d88f3020805a5238a66b Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Tue, 4 Aug 2015 14:17:39 +0200 Subject: [PATCH 64/84] * [MOD] Mini logo updated * [FIX] Fixed login on Microsoft Edge --- imgs/logo.png | Bin 5698 -> 18195 bytes imgs/logo.svg | 64 +++++++++++++++++++---- inc/themes/material-blue/js/functions.js | 8 +-- inc/themes/material-blue/login.inc | 20 +++---- 4 files changed, 69 insertions(+), 23 deletions(-) diff --git a/imgs/logo.png b/imgs/logo.png index cdeba1fa4ffab6be0035c42968d79750c028cd6b..c99c15442197a70ef22ccac4482e8122068c616a 100644 GIT binary patch literal 18195 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 UFAm*AVYUcN)O$Q zbV!%L%e|lPd)C@#uk(C3pLYD#^Hx_|g@llf5C8xYHC4p3yNtez7%1M|9h~V#b(bLS za5a7C-3frcjJkUhxTqSt-^s`S3DElAKXZ2?t%ve+4?UEvhqtAh4dCtVEokrT;BIZ{ zVk3xhdzHE;O9uc{&1wimeV?@5ul9~+6P{hS>+{tEolB3ix#LapI?6cqy%=U(S1Q!r z!JM!`s#rGMx-4bncjL4G)i7%AkD0KThxS9??B7ek$T^_kv>HH$27*i8@e5uN3TM{)Nzu&!Tc;(z=uxj*MUc$@CO7wFAu`viW*wyX_< zH*kPA-0p)sq~8K{X$SzR&4w0KndwW8iZZ~G8 zTnagy15_y7kjL!SF^GU13<>)IFwA*A*;6RJA;=-R_>D>@gG@jGcf!0Vzehj#CjxMV zg??I}pzcl3d+u2l~=3$ET8SE{V}}TWl7#m3wCs6tKo)qVV+A#~uqRq-VrTSHkRAW8C|N z5P*X%3LhNN$)2V98_m*qvAkK_d~^7~T!|aZoCS5ZU**OCgoC}G<-$~A-*lddufal< z+PJ_`@9Tg}2qgssE9$c<6?Z{fvcVorF#abA{9Ny>R}TLJDaG4DLbL8d$mdPGHg~r0 zDp=MM{e=#(a3Y#8JMM|s;IEaogjY>o_p)}!V{pHDK*$00lW5X#Nn%nw3ZMRXEYtYv zl}UZJUnf3Usb^I@kTiYyE-;>^KFrvXzM~1&9+Z-Y{PlLI`hFIMZHmwL0rrpM7P7_A za^J`NwG}GZIeG8$=7iX_Gza(ZZ=Cu|`NJ>7x{q!hRh$uhe`=PA{B zpdkM9q6PcxrWY zdLe5hzPJd9TAelr44s$k(V=VM!&JV4XO@3?*!NOP?zShuxoy3Wk=u9$`d+@aRk^uEhV2*C@5fa3_c7FX6#=6a+&O=-fo&8k z^?nPo!LC)-^&e$SfQ*2(gE#zPGH@-#TFzdpK(${^$>@uY z{Ly(^@OeJPg45Qo8PzUAixLH==>0zGR`LP*HnN+u^yU{uqZSO)3qNCsb6%q66E`cg z>$I~qKn14PhKet~7ro-N_#EnJx{{cqH$BdiAhLlWB06qdFHX+zE7ZaHsp?zp&Vl46 zw&~ye$;mYwR`Dg)2{&L>>5Ng>Lt8~UIm+d-vLnJRBIerPucCCQ!jPuSM*dY)B4;<2 zlYmE+Fq9JVwD@L%N#j-sm$oiDk&`Dw6k+*0$@;s!(``Bv#>{f%laU6|Q&Yke{c%*l z#(Y@yCt87QYq^$RZ=06#hR${xOr(wsmFFuJiev8ms0fkQFsXVHDfl)j$*M6A3Wh7(G4)#qpS65@r2&Yw4{Lrns;|xsd%CAq!2~L(j ztcS&iVn`l56UiuV-=zuW42ADoZG7Z6{T?uIzbzt>foF1>=*M~>8|@}%I~F}B`S|1Z zZ|CJ$%9cizNPm*AY&Mf{wNJ%^er|RwoPO@PC5{4x`>2s~5;`_)4%)_HG*z?%3sdhK z@SWaiFpqU3QR3R(SXzqR`L&}8+F6jq(nE&k{~~M5Jg*LuHo9qt%Q$Ht$H$%6-QHt` zp46a!mvNq~5>F*px94oy;V30OlahKA2W8<6^p&B?xp@Fz+=}LNH&)7ajL}qL_vI33 z#^ZtJWrq&fDL)yIG1DQqdrFQ{#(`f*AFo&ez{&F@nA9se|zVU?NU?s0109OBn7(0 zlm1p4hCl-zS}npHuVV+(NhN!{m8H6?RyKYkl$9Ux*}|e+zzD?LEOks12P>?v*wC*<;ofliW^jX29suUF^;|<2x!u%FTHs3=yS+oBuczjrHgm#8b!RHkVUno!8xA=gwVCp zD#*HL1c_EJNAT=T0;i3LbS=*1-Sc-2KW)AimRxt-H2MX5LjWWEwgev^6=(e()OAAj z;8lSlhPuQil1Qdf9aPw&&NIpo@odV#nSw$=Tq|lQK22O4=>{H?9#SdAFmRT!~?>7t}f=z`~MLu z=FXhIlhcsSNlst2fB&umP&qWtec`?+Qt_U@9(dC=UH4m`9zy2q*ipFgV7?Jm%`z6h zvLXZe))KH^&vnX=!W;LSUIsnKZRaIpSK5qCV;WPV#M6^21QRCza%hB_@S{ssMfu1f zv3)ktsz=xLUmTz4@cro)UNC8FI_OiHe@MTOtrK->e zNF+NMqFl=J2aM;+^$r57; ztBtD1CFaY}P-n5xAU;Vg9Tbi=0Njb>bKePy@mQoh)=Xf@do&ST-$A6$tWS8}1kc}D zxiq6?S9*9@d)`Mj^YsCBpjobkx~xb8YpBa zVZ>U^&=FiC_J<|)QGD-)YK{j@9hwYM%9u3w9N+c{nJ~W&Ji)SUW4K}j3FbBetMbH^ zaXzcM*Gv4sm#wuxiy>g)%`;vz%*dpP5c!XH;{5#Q!kQsp+o;6^qN~5qra;0ovGnKB z>itUgLn;y@LGJBr=xujFO{K6bBAQ6_!wwS81y5wn-XYiw4z-)!<@7Fn)^?H4#xU3x zf@J@ly>q#4(BOJNsEO>_i&xCvoiQCdxhxF3^|$oZ={6B)$$IND=Ksybo)$@=`_6I$ zoRn|rHNVXS0w7uxSTSSL%dLzeEKqK8wr}fdM*3qwyY-;8^dG7z5ciC6vi$gJ)~aS} zdv=+Psm=kMTk4x^mXG^$*u;HYo@i_S9`>XJkaCt)L^(b}=e>f_>^yocjt?jEKz8~4 zMBym{gGVrgaQ{Yq4MhFdNfMV^UsBKKlrN^2jUn3?TKl51zNOJ_(k+vDF=nUZt**1c z`a)6b3FW<=eppmVhf*l)k#gffr2_PX7+~lM*}q}|%MRAt2M+e-jlKRG7;JC-#?~q< z(Z(uU;X|)zZ;|ie;W5d2%<;OV=}?5HeZjlrATuz~;9K!!D&!7ndDK~DTj81Cv1j)`I^dF1jr{CyqW9SWoI>CT%L^j&KFRX`oJ_Zu$Z zqXrYEC$}k-lX4=I7kg+ z2(+oRn2_)3XTk_uWOBZzlT_OQ1899-+`*$o-}t1t2r_V_C2V4XbTrYb;c!h_Kh18U z@dfY7C82A!0L6#d#^5;vRnnb)meldT36kocg`8wlyTzbaXW6CR{4rh)yE9R-WH9#3 z5l@n_*PcieOE}tTCSJXH{VF~tShPnRzi1sb$wtHToMuPzpf%svEWPRE`dL+rHR&l^ z>d^M)dvk#CNCNAcMiN6BUT$A7#w$B$dL|2C#R;}0QrwfWlqMw7TZKip7gs+N6*~j~ zdHPh^O;YcVP(~64e=0*`{{myLsT9c&&g*z%_i@5`g#o_9_R=y_88!wG4H-T$BdKL19Zry zRO31Rr%CIE4EQQ|T`60Tl%_T3f``pwe-*6G|ZbKxACPE3>>#o*dxZ6?9K#<&KL$}|4t1l z(QZta{qFL5jy;(ySI{OcY54uoKE(z30D-ooiF@|V1XJ|5p8Vpfsd*HI)ntZ^xw_^{ zm2Z_F_@&0b>Bv>wsCA$>_-OXgt8A_2;~T&A;Z_Mw?l$;TDbniQ7Z}mkCdM#^1p;Wk z3ENU#0$i>L#~u#EbHAZ-avsy=Nu*rfz8H8y&r)94DnXH7KI%)BzLZF0GEcv0-rI7d2RikdX7oh00m z5KBcUc(2GCR3-4#gn03aFsLQ&;})lf?`m2Ry#^;|09E0_X@q|-JPFV=w=xL}oQmJ_P7 zGlZRNfEJiXBh&1Z1wsZP9*K+7um-msJyie1D)`V*M%2q;XY#-R z1PC{cbkZl-^!4-kypR%k(&M6OvBIb(;|+G;jCrA8P<-^sN~#E6y9_QY3DyZHU$dqF z$X#4ebR!dHeFGDKuH4@hmpDjC;1fLezyW4apr9H}c_>ZN7Uor`_P&v;_|Ou36OHxQYjHh3qE zsbnB0U1v1?A{285oP5;bn2d3CNW_G$UGJp75 z(mu8fSB7elcl*s(8bX}%z%2-PJa%kwzV6wqV6l%Wh}`mU)+0W=C@TDQS5L}r9vB9< zW{p{NSon9dJu>kx=Et!IkDl_vRdR9gnI~%uI=plDxl&OF7>bipLWniUQ6E^pS*GV& z*C0O)-xgV;mOB6Ez941H`~6{flRj?6V;AQ@Dp)(B9loLdI_WlH;(bT+ZBKBcSsKAV zZVK6I8ASL`(U99e!8fNG3ciic6I1@Y0Yi^4V`r!~9{?P00p$i!(4kR*>pv0}Zua$( z6;6*2{F!}StUNMxk`+r%&X%0;c*M=Vx`wTr%ldC>1YeU;UOky1x{(6~*zGkMyCliy)PQ=P*+h2)U{%wdOlDVS;Y{{uUD1{or7i(#yt# zgyc4o`=eVn!_}99?0mCQ;ti|>_fq|mhDng|ahh;FMCgotK<2Je>lQ5lRwFO5U>i4> z`@6KqrW?}{I-Oc!sOS9}@{7fa4HRd=*4=x}Icm6qQyNX+C~GIh$WMs~G>R{o$-Gv3 z%||J}dPwJ6O4FoR_%mF9D1`3Tryj-cY5kIUf5odMZ*hzk8=I@sDx#*;@L%{xP{Bkp zt@+5Oc|SHv+=s2e`Bn8YFMp>ah`)9b&OnDL4JVx&i~;dNDbj(x)f_zV^7N zZ;gfBXO&+0eHqP>QS_t>WmGMFX8Z95KxnrpS8inIf*u>|k*+533lZrsdXi}b#3`I^ z1+OiZQyGreS0LuQ)=r5AvUWdD7=IE`7mWj*w|o;d4>&;#E|!ui0lMwz0{^((Ij?>F zBwRAOjQ^T%6fNIyT2vsUFnR%Fbp+VbAPcAD;a>2XMewcMJ|`>Qmrr*_Unv}_p}=R5 z_C@*xQ!aFULJNokOs!`++eH`(WgterHxlZ>VjasUFQ2HkPfJ~A%Q{8#m`Szd@ZYqR zuiI9u16R?wMw5|(gvTum0s + sodipodi:docname="logo.svg" + inkscape:export-filename="C:\Users\rdominguez\Documents\IMGS\logo.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + + + + + + + + + fit-margin-bottom="0" + borderlayer="true" /> @@ -461,10 +503,14 @@ image/svg+xml - + + -
      - + +
      - -
      -
      - -
      + +
      +
      + +
      + From 733ba8ea3a2fe2044f88dd7bc8d1b6eacaa25e60 Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Wed, 5 Aug 2015 02:14:25 +0200 Subject: [PATCH 65/84] * [ADD] Closes #91. Added image thumbnail when images are uploaded. Thumbnail is shown in files list if available. * [MOD] UI Tweaks * [MOD] Updated MDL version. --- inc/Files.class.php | 18 +++++--- inc/ImageUtil.class.php | 44 ++++++++++++++++++- inc/Upgrade.class.php | 4 +- inc/themes/classic/css/styles.css | 22 +++++++--- inc/themes/classic/files.inc | 38 +++++++++------- inc/themes/material-blue/account.inc | 14 +++--- inc/themes/material-blue/css/material.min.css | 4 +- inc/themes/material-blue/css/styles.css | 25 ++++++++--- inc/themes/material-blue/files.inc | 36 ++++++++------- inc/themes/material-blue/js/material.min.js | 9 ++-- 10 files changed, 144 insertions(+), 70 deletions(-) diff --git a/inc/Files.class.php b/inc/Files.class.php index f4bec936..14706e79 100644 --- a/inc/Files.class.php +++ b/inc/Files.class.php @@ -48,7 +48,8 @@ class Files . "accfile_type = :type," . "accfile_size = :size," . "accfile_content = :blobcontent," - . "accfile_extension = :extension"; + . "accfile_extension = :extension," + . "accfile_thumb = :thumbnail"; $data['accountId'] = $accountId; $data['name'] = $fileData['name']; @@ -56,6 +57,7 @@ class Files $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')); @@ -152,7 +154,8 @@ class Files { $query = "SELECT accfile_id," . "accfile_name," - . "accfile_size " + . "accfile_size, " + . "accfile_thumb " . "FROM accFiles " . "WHERE accfile_accountId = :id"; @@ -167,13 +170,14 @@ class Files } $files = array(); - $fileNum = 0; foreach ($queryRes as $file) { - $files[$fileNum]['id'] = $file->accfile_id; - $files[$fileNum]['name'] = $file->accfile_name; - $files[$fileNum]['size'] = round($file->accfile_size / 1000, 2); - $fileNum++; + $files[] = array( + 'id' => $file->accfile_id, + 'name' => $file->accfile_name, + 'size' => round($file->accfile_size / 1000, 2), + 'thumb' => $file->accfile_thumb + ); } return $files; diff --git a/inc/ImageUtil.class.php b/inc/ImageUtil.class.php index f9d28a5a..555498cc 100644 --- a/inc/ImageUtil.class.php +++ b/inc/ImageUtil.class.php @@ -64,7 +64,7 @@ class ImageUtil // Crear el texto imagettftext($im, 12, 0, 10, 20, $fgColor, $font, $text); - // Guardar la imagen + // Devolver la imagen ob_start(); imagepng($im); $image = ob_get_contents(); @@ -74,4 +74,46 @@ class ImageUtil return base64_encode($image); } + + /** + * Crear miniatura de una imagen + * + * @param $image string La imagen a redimensionar + * @return bool|string + */ + public static function createThumbnail(&$image) + { + if(!function_exists('imagepng') + || !function_exists('imagecreatefromjpeg') + || !function_exists('imagecreatefrompng') + ){ + return false; + } + + $im = imagecreatefromstring($image); + + $width = imagesx($im); + $height = imagesy($im); + + // Calcular el tamaño de la miniatura + $new_width = 48; + $new_height = floor( $height * ( $new_width / $width ) ); + + // Crear nueva imagen + $imTmp = imagecreatetruecolor($new_width, $new_height ); + + // Redimensionar la imagen + imagecopyresized( $imTmp, $im, 0, 0, 0, 0, $new_width, $new_height, $width, $height ); + + // Devolver la imagen + ob_start(); + imagepng($imTmp); + $thumbnail = ob_get_contents(); + ob_end_clean(); + + imagedestroy($imTmp); + imagedestroy($im); + + return base64_encode($thumbnail); + } } \ No newline at end of file diff --git a/inc/Upgrade.class.php b/inc/Upgrade.class.php index eac4e67a..48336d90 100644 --- a/inc/Upgrade.class.php +++ b/inc/Upgrade.class.php @@ -110,7 +110,9 @@ class Upgrade $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(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`)) DEFAULT CHARACTER SET = utf8 COLLATE = utf8_general_ci;'; + $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)'; + $queries[] = 'CREATE INDEX IDX_accountId ON usrToGroups (usertogroup_userId)'; + $queries[] = 'ALTER TABLE `accFiles` ADD `accFile_thumb` BLOB NULL;'; break; default : $log->addDescription(_('No es necesario actualizar la Base de Datos.')); diff --git a/inc/themes/classic/css/styles.css b/inc/themes/classic/css/styles.css index d182968c..8d05a5c5 100644 --- a/inc/themes/classic/css/styles.css +++ b/inc/themes/classic/css/styles.css @@ -476,7 +476,7 @@ a:focus { #content .data #files-wrap { max-height: 100px; - width: 400px; + width: 95%; overflow-y: auto; border: 1px solid #DFDFDF; padding: 0.5em; @@ -500,11 +500,21 @@ a:focus { color: #000; } -#content .data #files-list li img { - float: right; - position: relative; - top: -5px; - vertical-align: middle; +#content .data #files-list li div { + display: inline-block; +} + +#content .data #files-list li div.files-item-info { + width: 55%; +} + +#content .data #files-list li div.files-item-info img{ + margin: 0 .5em; +} + +#content .data #files-list li div.files-item-actions { + width: 40%; + text-align: right; } #content .data #dropzone { diff --git a/inc/themes/classic/files.inc b/inc/themes/classic/files.inc index c0c9da0a..8dc6fea8 100644 --- a/inc/themes/classic/files.inc +++ b/inc/themes/classic/files.inc @@ -1,22 +1,28 @@
        - +
      • - - ( KB) - - Delete - - download - View +
        + ( KB) + + thumbnail + +
        +
        + + Delete + + download + View +
      diff --git a/inc/themes/material-blue/account.inc b/inc/themes/material-blue/account.inc index c525b308..3cf3f329 100644 --- a/inc/themes/material-blue/account.inc +++ b/inc/themes/material-blue/account.inc @@ -154,11 +154,9 @@ ?>

      - - @@ -188,11 +186,9 @@ ?>

      - - @@ -243,9 +239,9 @@
      - upload + data-files-ext="" + title="
      ' . _('Tamaño máximo de archivo') . ' ' . $maxFileSize . ' MB'; ?>"> + cloud_upload
      diff --git a/inc/themes/material-blue/css/material.min.css b/inc/themes/material-blue/css/material.min.css index 772c3bbd..6537c616 100644 --- a/inc/themes/material-blue/css/material.min.css +++ b/inc/themes/material-blue/css/material.min.css @@ -1,8 +1,8 @@ /** * material-design-lite - Material Design Components in CSS, JS and HTML - * @version v1.0.1 + * @version v1.0.2 * @license Apache-2.0 * @copyright 2015 Google, Inc. * @link https://github.com/google/material-design-lite */ -@charset "UTF-8";html{color:rgba(0,0,0,.87)}::-moz-selection{background:#b3d4fc;text-shadow:none}::selection{background:#b3d4fc;text-shadow:none}hr{display:block;height:1px;border:0;border-top:1px solid #ccc;margin:1em 0;padding:0}audio,canvas,img,svg,video{vertical-align:middle}fieldset{border:0;margin:0;padding:0}textarea{resize:vertical}.browsehappy{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}@media print{*,*:before,*:after{background:transparent!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href)")"}abbr[title]:after{content:" (" attr(title)")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}a,.mdl-accordion,.mdl-button,.mdl-card,.mdl-checkbox,.mdl-dropdown-menu,.mdl-icon-toggle,.mdl-item,.mdl-radio,.mdl-slider,.mdl-switch,.mdl-tabs__tab{-webkit-tap-highlight-color:transparent;-webkit-tap-highlight-color:rgba(255,255,255,0)}html{width:100%;height:100%;-ms-touch-action:manipulation;touch-action:manipulation}body{width:100%;min-height:100%}main{display:block}*[hidden]{display:none!important}html,body{font-family:"Helvetica","Arial",sans-serif;font-size:14px;font-weight:400;line-height:20px}h1,h2,h3,h4,h5,h6,p{padding:0}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;line-height:1.35;letter-spacing:-.02em;opacity:.54;font-size:.6em}h1{font-size:56px;line-height:1.35;letter-spacing:-.02em;margin:24px 0}h1,h2{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400}h2{font-size:45px;line-height:48px}h2,h3{margin:24px 0}h3{font-size:34px;line-height:40px}h3,h4{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400}h4{font-size:24px;line-height:32px;-moz-osx-font-smoothing:grayscale;margin:24px 0 16px}h5{font-size:20px;font-weight:500;line-height:1;letter-spacing:.02em}h5,h6{font-family:"Roboto","Helvetica","Arial",sans-serif;margin:24px 0 16px}h6{font-size:16px;letter-spacing:.04em}h6,p{font-weight:400;line-height:24px}p{font-size:14px;letter-spacing:0;margin:0 0 16px}a{color:rgb(83,109,254);font-weight:500}blockquote{font-family:"Roboto","Helvetica","Arial",sans-serif;position:relative;font-size:24px;font-weight:300;font-style:italic;line-height:1.35;letter-spacing:.08em}blockquote:before{position:absolute;left:-.5em;content:'“'}blockquote:after{content:'”';margin-left:-.05em}mark{background-color:#f4ff81}dt{font-weight:700}address{font-size:12px;line-height:1;font-style:normal}address,ul,ol{font-weight:400;letter-spacing:0}ul,ol{font-size:14px;line-height:24px}.mdl-typography--display-4,.mdl-typography--display-4-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:112px;font-weight:300;line-height:1;letter-spacing:-.04em}.mdl-typography--display-4-color-contrast{opacity:.54}.mdl-typography--display-3,.mdl-typography--display-3-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:56px;font-weight:400;line-height:1.35;letter-spacing:-.02em}.mdl-typography--display-3-color-contrast{opacity:.54}.mdl-typography--display-2,.mdl-typography--display-2-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:45px;font-weight:400;line-height:48px}.mdl-typography--display-2-color-contrast{opacity:.54}.mdl-typography--display-1,.mdl-typography--display-1-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:34px;font-weight:400;line-height:40px}.mdl-typography--display-1-color-contrast{opacity:.54}.mdl-typography--headline,.mdl-typography--headline-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:24px;font-weight:400;line-height:32px;-moz-osx-font-smoothing:grayscale}.mdl-typography--headline-color-contrast{opacity:.87}.mdl-typography--title,.mdl-typography--title-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:20px;font-weight:500;line-height:1;letter-spacing:.02em}.mdl-typography--title-color-contrast{opacity:.87}.mdl-typography--subhead,.mdl-typography--subhead-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:16px;font-weight:400;line-height:24px;letter-spacing:.04em}.mdl-typography--subhead-color-contrast{opacity:.87}.mdl-typography--body-2,.mdl-typography--body-2-color-contrast{font-size:14px;font-weight:700;line-height:24px;letter-spacing:0}.mdl-typography--body-2-color-contrast{opacity:.87}.mdl-typography--body-1,.mdl-typography--body-1-color-contrast{font-size:14px;font-weight:400;line-height:24px;letter-spacing:0}.mdl-typography--body-1-color-contrast{opacity:.87}.mdl-typography--body-2-force-preferred-font,.mdl-typography--body-2-force-preferred-font-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:14px;font-weight:500;line-height:24px;letter-spacing:0}.mdl-typography--body-2-force-preferred-font-color-contrast{opacity:.87}.mdl-typography--body-1-force-preferred-font,.mdl-typography--body-1-force-preferred-font-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:14px;font-weight:400;line-height:24px;letter-spacing:0}.mdl-typography--body-1-force-preferred-font-color-contrast{opacity:.87}.mdl-typography--caption,.mdl-typography--caption-force-preferred-font{font-size:12px;font-weight:400;line-height:1;letter-spacing:0}.mdl-typography--caption-force-preferred-font{font-family:"Roboto","Helvetica","Arial",sans-serif}.mdl-typography--caption-color-contrast,.mdl-typography--caption-force-preferred-font-color-contrast{font-size:12px;font-weight:400;line-height:1;letter-spacing:0;opacity:.54}.mdl-typography--caption-force-preferred-font-color-contrast,.mdl-typography--menu{font-family:"Roboto","Helvetica","Arial",sans-serif}.mdl-typography--menu{font-size:14px;font-weight:500;line-height:1;letter-spacing:0}.mdl-typography--menu-color-contrast{opacity:.87}.mdl-typography--menu-color-contrast,.mdl-typography--button,.mdl-typography--button-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:14px;font-weight:500;line-height:1;letter-spacing:0}.mdl-typography--button,.mdl-typography--button-color-contrast{text-transform:uppercase}.mdl-typography--button-color-contrast{opacity:.87}.mdl-typography--text-left{text-align:left}.mdl-typography--text-right{text-align:right}.mdl-typography--text-center{text-align:center}.mdl-typography--text-justify{text-align:justify}.mdl-typography--text-nowrap{white-space:nowrap}.mdl-typography--text-lowercase{text-transform:lowercase}.mdl-typography--text-uppercase{text-transform:uppercase}.mdl-typography--text-capitalize{text-transform:capitalize}.mdl-typography--font-thin{font-weight:200!important}.mdl-typography--font-light{font-weight:300!important}.mdl-typography--font-regular{font-weight:400!important}.mdl-typography--font-medium{font-weight:500!important}.mdl-typography--font-bold{font-weight:700!important}.mdl-typography--font-black{font-weight:900!important}.mdl-color-text--red{color:#f44336 !important}.mdl-color--red{background-color:#f44336 !important}.mdl-color-text--red-50{color:#ffebee !important}.mdl-color--red-50{background-color:#ffebee !important}.mdl-color-text--red-100{color:#ffcdd2 !important}.mdl-color--red-100{background-color:#ffcdd2 !important}.mdl-color-text--red-200{color:#ef9a9a !important}.mdl-color--red-200{background-color:#ef9a9a !important}.mdl-color-text--red-300{color:#e57373 !important}.mdl-color--red-300{background-color:#e57373 !important}.mdl-color-text--red-400{color:#ef5350 !important}.mdl-color--red-400{background-color:#ef5350 !important}.mdl-color-text--red-500{color:#f44336 !important}.mdl-color--red-500{background-color:#f44336 !important}.mdl-color-text--red-600{color:#e53935 !important}.mdl-color--red-600{background-color:#e53935 !important}.mdl-color-text--red-700{color:#d32f2f !important}.mdl-color--red-700{background-color:#d32f2f !important}.mdl-color-text--red-800{color:#c62828 !important}.mdl-color--red-800{background-color:#c62828 !important}.mdl-color-text--red-900{color:#b71c1c !important}.mdl-color--red-900{background-color:#b71c1c !important}.mdl-color-text--red-A100{color:#ff8a80 !important}.mdl-color--red-A100{background-color:#ff8a80 !important}.mdl-color-text--red-A200{color:#ff5252 !important}.mdl-color--red-A200{background-color:#ff5252 !important}.mdl-color-text--red-A400{color:#ff1744 !important}.mdl-color--red-A400{background-color:#ff1744 !important}.mdl-color-text--red-A700{color:#d50000 !important}.mdl-color--red-A700{background-color:#d50000 !important}.mdl-color-text--pink{color:#e91e63 !important}.mdl-color--pink{background-color:#e91e63 !important}.mdl-color-text--pink-50{color:#fce4ec !important}.mdl-color--pink-50{background-color:#fce4ec !important}.mdl-color-text--pink-100{color:#f8bbd0 !important}.mdl-color--pink-100{background-color:#f8bbd0 !important}.mdl-color-text--pink-200{color:#f48fb1 !important}.mdl-color--pink-200{background-color:#f48fb1 !important}.mdl-color-text--pink-300{color:#f06292 !important}.mdl-color--pink-300{background-color:#f06292 !important}.mdl-color-text--pink-400{color:#ec407a !important}.mdl-color--pink-400{background-color:#ec407a !important}.mdl-color-text--pink-500{color:#e91e63 !important}.mdl-color--pink-500{background-color:#e91e63 !important}.mdl-color-text--pink-600{color:#d81b60 !important}.mdl-color--pink-600{background-color:#d81b60 !important}.mdl-color-text--pink-700{color:#c2185b !important}.mdl-color--pink-700{background-color:#c2185b !important}.mdl-color-text--pink-800{color:#ad1457 !important}.mdl-color--pink-800{background-color:#ad1457 !important}.mdl-color-text--pink-900{color:#880e4f !important}.mdl-color--pink-900{background-color:#880e4f !important}.mdl-color-text--pink-A100{color:#ff80ab !important}.mdl-color--pink-A100{background-color:#ff80ab !important}.mdl-color-text--pink-A200{color:#ff4081 !important}.mdl-color--pink-A200{background-color:#ff4081 !important}.mdl-color-text--pink-A400{color:#f50057 !important}.mdl-color--pink-A400{background-color:#f50057 !important}.mdl-color-text--pink-A700{color:#c51162 !important}.mdl-color--pink-A700{background-color:#c51162 !important}.mdl-color-text--purple{color:#9c27b0 !important}.mdl-color--purple{background-color:#9c27b0 !important}.mdl-color-text--purple-50{color:#f3e5f5 !important}.mdl-color--purple-50{background-color:#f3e5f5 !important}.mdl-color-text--purple-100{color:#e1bee7 !important}.mdl-color--purple-100{background-color:#e1bee7 !important}.mdl-color-text--purple-200{color:#ce93d8 !important}.mdl-color--purple-200{background-color:#ce93d8 !important}.mdl-color-text--purple-300{color:#ba68c8 !important}.mdl-color--purple-300{background-color:#ba68c8 !important}.mdl-color-text--purple-400{color:#ab47bc !important}.mdl-color--purple-400{background-color:#ab47bc !important}.mdl-color-text--purple-500{color:#9c27b0 !important}.mdl-color--purple-500{background-color:#9c27b0 !important}.mdl-color-text--purple-600{color:#8e24aa !important}.mdl-color--purple-600{background-color:#8e24aa !important}.mdl-color-text--purple-700{color:#7b1fa2 !important}.mdl-color--purple-700{background-color:#7b1fa2 !important}.mdl-color-text--purple-800{color:#6a1b9a !important}.mdl-color--purple-800{background-color:#6a1b9a !important}.mdl-color-text--purple-900{color:#4a148c !important}.mdl-color--purple-900{background-color:#4a148c !important}.mdl-color-text--purple-A100{color:#ea80fc !important}.mdl-color--purple-A100{background-color:#ea80fc !important}.mdl-color-text--purple-A200{color:#e040fb !important}.mdl-color--purple-A200{background-color:#e040fb !important}.mdl-color-text--purple-A400{color:#d500f9 !important}.mdl-color--purple-A400{background-color:#d500f9 !important}.mdl-color-text--purple-A700{color:#a0f !important}.mdl-color--purple-A700{background-color:#a0f !important}.mdl-color-text--deep-purple{color:#673ab7 !important}.mdl-color--deep-purple{background-color:#673ab7 !important}.mdl-color-text--deep-purple-50{color:#ede7f6 !important}.mdl-color--deep-purple-50{background-color:#ede7f6 !important}.mdl-color-text--deep-purple-100{color:#d1c4e9 !important}.mdl-color--deep-purple-100{background-color:#d1c4e9 !important}.mdl-color-text--deep-purple-200{color:#b39ddb !important}.mdl-color--deep-purple-200{background-color:#b39ddb !important}.mdl-color-text--deep-purple-300{color:#9575cd !important}.mdl-color--deep-purple-300{background-color:#9575cd !important}.mdl-color-text--deep-purple-400{color:#7e57c2 !important}.mdl-color--deep-purple-400{background-color:#7e57c2 !important}.mdl-color-text--deep-purple-500{color:#673ab7 !important}.mdl-color--deep-purple-500{background-color:#673ab7 !important}.mdl-color-text--deep-purple-600{color:#5e35b1 !important}.mdl-color--deep-purple-600{background-color:#5e35b1 !important}.mdl-color-text--deep-purple-700{color:#512da8 !important}.mdl-color--deep-purple-700{background-color:#512da8 !important}.mdl-color-text--deep-purple-800{color:#4527a0 !important}.mdl-color--deep-purple-800{background-color:#4527a0 !important}.mdl-color-text--deep-purple-900{color:#311b92 !important}.mdl-color--deep-purple-900{background-color:#311b92 !important}.mdl-color-text--deep-purple-A100{color:#b388ff !important}.mdl-color--deep-purple-A100{background-color:#b388ff !important}.mdl-color-text--deep-purple-A200{color:#7c4dff !important}.mdl-color--deep-purple-A200{background-color:#7c4dff !important}.mdl-color-text--deep-purple-A400{color:#651fff !important}.mdl-color--deep-purple-A400{background-color:#651fff !important}.mdl-color-text--deep-purple-A700{color:#6200ea !important}.mdl-color--deep-purple-A700{background-color:#6200ea !important}.mdl-color-text--indigo{color:#3f51b5 !important}.mdl-color--indigo{background-color:#3f51b5 !important}.mdl-color-text--indigo-50{color:#e8eaf6 !important}.mdl-color--indigo-50{background-color:#e8eaf6 !important}.mdl-color-text--indigo-100{color:#c5cae9 !important}.mdl-color--indigo-100{background-color:#c5cae9 !important}.mdl-color-text--indigo-200{color:#9fa8da !important}.mdl-color--indigo-200{background-color:#9fa8da !important}.mdl-color-text--indigo-300{color:#7986cb !important}.mdl-color--indigo-300{background-color:#7986cb !important}.mdl-color-text--indigo-400{color:#5c6bc0 !important}.mdl-color--indigo-400{background-color:#5c6bc0 !important}.mdl-color-text--indigo-500{color:#3f51b5 !important}.mdl-color--indigo-500{background-color:#3f51b5 !important}.mdl-color-text--indigo-600{color:#3949ab !important}.mdl-color--indigo-600{background-color:#3949ab !important}.mdl-color-text--indigo-700{color:#303f9f !important}.mdl-color--indigo-700{background-color:#303f9f !important}.mdl-color-text--indigo-800{color:#283593 !important}.mdl-color--indigo-800{background-color:#283593 !important}.mdl-color-text--indigo-900{color:#1a237e !important}.mdl-color--indigo-900{background-color:#1a237e !important}.mdl-color-text--indigo-A100{color:#8c9eff !important}.mdl-color--indigo-A100{background-color:#8c9eff !important}.mdl-color-text--indigo-A200{color:#536dfe !important}.mdl-color--indigo-A200{background-color:#536dfe !important}.mdl-color-text--indigo-A400{color:#3d5afe !important}.mdl-color--indigo-A400{background-color:#3d5afe !important}.mdl-color-text--indigo-A700{color:#304ffe !important}.mdl-color--indigo-A700{background-color:#304ffe !important}.mdl-color-text--blue{color:#2196f3 !important}.mdl-color--blue{background-color:#2196f3 !important}.mdl-color-text--blue-50{color:#e3f2fd !important}.mdl-color--blue-50{background-color:#e3f2fd !important}.mdl-color-text--blue-100{color:#bbdefb !important}.mdl-color--blue-100{background-color:#bbdefb !important}.mdl-color-text--blue-200{color:#90caf9 !important}.mdl-color--blue-200{background-color:#90caf9 !important}.mdl-color-text--blue-300{color:#64b5f6 !important}.mdl-color--blue-300{background-color:#64b5f6 !important}.mdl-color-text--blue-400{color:#42a5f5 !important}.mdl-color--blue-400{background-color:#42a5f5 !important}.mdl-color-text--blue-500{color:#2196f3 !important}.mdl-color--blue-500{background-color:#2196f3 !important}.mdl-color-text--blue-600{color:#1e88e5 !important}.mdl-color--blue-600{background-color:#1e88e5 !important}.mdl-color-text--blue-700{color:#1976d2 !important}.mdl-color--blue-700{background-color:#1976d2 !important}.mdl-color-text--blue-800{color:#1565c0 !important}.mdl-color--blue-800{background-color:#1565c0 !important}.mdl-color-text--blue-900{color:#0d47a1 !important}.mdl-color--blue-900{background-color:#0d47a1 !important}.mdl-color-text--blue-A100{color:#82b1ff !important}.mdl-color--blue-A100{background-color:#82b1ff !important}.mdl-color-text--blue-A200{color:#448aff !important}.mdl-color--blue-A200{background-color:#448aff !important}.mdl-color-text--blue-A400{color:#2979ff !important}.mdl-color--blue-A400{background-color:#2979ff !important}.mdl-color-text--blue-A700{color:#2962ff !important}.mdl-color--blue-A700{background-color:#2962ff !important}.mdl-color-text--light-blue{color:#03a9f4 !important}.mdl-color--light-blue{background-color:#03a9f4 !important}.mdl-color-text--light-blue-50{color:#e1f5fe !important}.mdl-color--light-blue-50{background-color:#e1f5fe !important}.mdl-color-text--light-blue-100{color:#b3e5fc !important}.mdl-color--light-blue-100{background-color:#b3e5fc !important}.mdl-color-text--light-blue-200{color:#81d4fa !important}.mdl-color--light-blue-200{background-color:#81d4fa !important}.mdl-color-text--light-blue-300{color:#4fc3f7 !important}.mdl-color--light-blue-300{background-color:#4fc3f7 !important}.mdl-color-text--light-blue-400{color:#29b6f6 !important}.mdl-color--light-blue-400{background-color:#29b6f6 !important}.mdl-color-text--light-blue-500{color:#03a9f4 !important}.mdl-color--light-blue-500{background-color:#03a9f4 !important}.mdl-color-text--light-blue-600{color:#039be5 !important}.mdl-color--light-blue-600{background-color:#039be5 !important}.mdl-color-text--light-blue-700{color:#0288d1 !important}.mdl-color--light-blue-700{background-color:#0288d1 !important}.mdl-color-text--light-blue-800{color:#0277bd !important}.mdl-color--light-blue-800{background-color:#0277bd !important}.mdl-color-text--light-blue-900{color:#01579b !important}.mdl-color--light-blue-900{background-color:#01579b !important}.mdl-color-text--light-blue-A100{color:#80d8ff !important}.mdl-color--light-blue-A100{background-color:#80d8ff !important}.mdl-color-text--light-blue-A200{color:#40c4ff !important}.mdl-color--light-blue-A200{background-color:#40c4ff !important}.mdl-color-text--light-blue-A400{color:#00b0ff !important}.mdl-color--light-blue-A400{background-color:#00b0ff !important}.mdl-color-text--light-blue-A700{color:#0091ea !important}.mdl-color--light-blue-A700{background-color:#0091ea !important}.mdl-color-text--cyan{color:#00bcd4 !important}.mdl-color--cyan{background-color:#00bcd4 !important}.mdl-color-text--cyan-50{color:#e0f7fa !important}.mdl-color--cyan-50{background-color:#e0f7fa !important}.mdl-color-text--cyan-100{color:#b2ebf2 !important}.mdl-color--cyan-100{background-color:#b2ebf2 !important}.mdl-color-text--cyan-200{color:#80deea !important}.mdl-color--cyan-200{background-color:#80deea !important}.mdl-color-text--cyan-300{color:#4dd0e1 !important}.mdl-color--cyan-300{background-color:#4dd0e1 !important}.mdl-color-text--cyan-400{color:#26c6da !important}.mdl-color--cyan-400{background-color:#26c6da !important}.mdl-color-text--cyan-500{color:#00bcd4 !important}.mdl-color--cyan-500{background-color:#00bcd4 !important}.mdl-color-text--cyan-600{color:#00acc1 !important}.mdl-color--cyan-600{background-color:#00acc1 !important}.mdl-color-text--cyan-700{color:#0097a7 !important}.mdl-color--cyan-700{background-color:#0097a7 !important}.mdl-color-text--cyan-800{color:#00838f !important}.mdl-color--cyan-800{background-color:#00838f !important}.mdl-color-text--cyan-900{color:#006064 !important}.mdl-color--cyan-900{background-color:#006064 !important}.mdl-color-text--cyan-A100{color:#84ffff !important}.mdl-color--cyan-A100{background-color:#84ffff !important}.mdl-color-text--cyan-A200{color:#18ffff !important}.mdl-color--cyan-A200{background-color:#18ffff !important}.mdl-color-text--cyan-A400{color:#00e5ff !important}.mdl-color--cyan-A400{background-color:#00e5ff !important}.mdl-color-text--cyan-A700{color:#00b8d4 !important}.mdl-color--cyan-A700{background-color:#00b8d4 !important}.mdl-color-text--teal{color:#009688 !important}.mdl-color--teal{background-color:#009688 !important}.mdl-color-text--teal-50{color:#e0f2f1 !important}.mdl-color--teal-50{background-color:#e0f2f1 !important}.mdl-color-text--teal-100{color:#b2dfdb !important}.mdl-color--teal-100{background-color:#b2dfdb !important}.mdl-color-text--teal-200{color:#80cbc4 !important}.mdl-color--teal-200{background-color:#80cbc4 !important}.mdl-color-text--teal-300{color:#4db6ac !important}.mdl-color--teal-300{background-color:#4db6ac !important}.mdl-color-text--teal-400{color:#26a69a !important}.mdl-color--teal-400{background-color:#26a69a !important}.mdl-color-text--teal-500{color:#009688 !important}.mdl-color--teal-500{background-color:#009688 !important}.mdl-color-text--teal-600{color:#00897b !important}.mdl-color--teal-600{background-color:#00897b !important}.mdl-color-text--teal-700{color:#00796b !important}.mdl-color--teal-700{background-color:#00796b !important}.mdl-color-text--teal-800{color:#00695c !important}.mdl-color--teal-800{background-color:#00695c !important}.mdl-color-text--teal-900{color:#004d40 !important}.mdl-color--teal-900{background-color:#004d40 !important}.mdl-color-text--teal-A100{color:#a7ffeb !important}.mdl-color--teal-A100{background-color:#a7ffeb !important}.mdl-color-text--teal-A200{color:#64ffda !important}.mdl-color--teal-A200{background-color:#64ffda !important}.mdl-color-text--teal-A400{color:#1de9b6 !important}.mdl-color--teal-A400{background-color:#1de9b6 !important}.mdl-color-text--teal-A700{color:#00bfa5 !important}.mdl-color--teal-A700{background-color:#00bfa5 !important}.mdl-color-text--green{color:#4caf50 !important}.mdl-color--green{background-color:#4caf50 !important}.mdl-color-text--green-50{color:#e8f5e9 !important}.mdl-color--green-50{background-color:#e8f5e9 !important}.mdl-color-text--green-100{color:#c8e6c9 !important}.mdl-color--green-100{background-color:#c8e6c9 !important}.mdl-color-text--green-200{color:#a5d6a7 !important}.mdl-color--green-200{background-color:#a5d6a7 !important}.mdl-color-text--green-300{color:#81c784 !important}.mdl-color--green-300{background-color:#81c784 !important}.mdl-color-text--green-400{color:#66bb6a !important}.mdl-color--green-400{background-color:#66bb6a !important}.mdl-color-text--green-500{color:#4caf50 !important}.mdl-color--green-500{background-color:#4caf50 !important}.mdl-color-text--green-600{color:#43a047 !important}.mdl-color--green-600{background-color:#43a047 !important}.mdl-color-text--green-700{color:#388e3c !important}.mdl-color--green-700{background-color:#388e3c !important}.mdl-color-text--green-800{color:#2e7d32 !important}.mdl-color--green-800{background-color:#2e7d32 !important}.mdl-color-text--green-900{color:#1b5e20 !important}.mdl-color--green-900{background-color:#1b5e20 !important}.mdl-color-text--green-A100{color:#b9f6ca !important}.mdl-color--green-A100{background-color:#b9f6ca !important}.mdl-color-text--green-A200{color:#69f0ae !important}.mdl-color--green-A200{background-color:#69f0ae !important}.mdl-color-text--green-A400{color:#00e676 !important}.mdl-color--green-A400{background-color:#00e676 !important}.mdl-color-text--green-A700{color:#00c853 !important}.mdl-color--green-A700{background-color:#00c853 !important}.mdl-color-text--light-green{color:#8bc34a !important}.mdl-color--light-green{background-color:#8bc34a !important}.mdl-color-text--light-green-50{color:#f1f8e9 !important}.mdl-color--light-green-50{background-color:#f1f8e9 !important}.mdl-color-text--light-green-100{color:#dcedc8 !important}.mdl-color--light-green-100{background-color:#dcedc8 !important}.mdl-color-text--light-green-200{color:#c5e1a5 !important}.mdl-color--light-green-200{background-color:#c5e1a5 !important}.mdl-color-text--light-green-300{color:#aed581 !important}.mdl-color--light-green-300{background-color:#aed581 !important}.mdl-color-text--light-green-400{color:#9ccc65 !important}.mdl-color--light-green-400{background-color:#9ccc65 !important}.mdl-color-text--light-green-500{color:#8bc34a !important}.mdl-color--light-green-500{background-color:#8bc34a !important}.mdl-color-text--light-green-600{color:#7cb342 !important}.mdl-color--light-green-600{background-color:#7cb342 !important}.mdl-color-text--light-green-700{color:#689f38 !important}.mdl-color--light-green-700{background-color:#689f38 !important}.mdl-color-text--light-green-800{color:#558b2f !important}.mdl-color--light-green-800{background-color:#558b2f !important}.mdl-color-text--light-green-900{color:#33691e !important}.mdl-color--light-green-900{background-color:#33691e !important}.mdl-color-text--light-green-A100{color:#ccff90 !important}.mdl-color--light-green-A100{background-color:#ccff90 !important}.mdl-color-text--light-green-A200{color:#b2ff59 !important}.mdl-color--light-green-A200{background-color:#b2ff59 !important}.mdl-color-text--light-green-A400{color:#76ff03 !important}.mdl-color--light-green-A400{background-color:#76ff03 !important}.mdl-color-text--light-green-A700{color:#64dd17 !important}.mdl-color--light-green-A700{background-color:#64dd17 !important}.mdl-color-text--lime{color:#cddc39 !important}.mdl-color--lime{background-color:#cddc39 !important}.mdl-color-text--lime-50{color:#f9fbe7 !important}.mdl-color--lime-50{background-color:#f9fbe7 !important}.mdl-color-text--lime-100{color:#f0f4c3 !important}.mdl-color--lime-100{background-color:#f0f4c3 !important}.mdl-color-text--lime-200{color:#e6ee9c !important}.mdl-color--lime-200{background-color:#e6ee9c !important}.mdl-color-text--lime-300{color:#dce775 !important}.mdl-color--lime-300{background-color:#dce775 !important}.mdl-color-text--lime-400{color:#d4e157 !important}.mdl-color--lime-400{background-color:#d4e157 !important}.mdl-color-text--lime-500{color:#cddc39 !important}.mdl-color--lime-500{background-color:#cddc39 !important}.mdl-color-text--lime-600{color:#c0ca33 !important}.mdl-color--lime-600{background-color:#c0ca33 !important}.mdl-color-text--lime-700{color:#afb42b !important}.mdl-color--lime-700{background-color:#afb42b !important}.mdl-color-text--lime-800{color:#9e9d24 !important}.mdl-color--lime-800{background-color:#9e9d24 !important}.mdl-color-text--lime-900{color:#827717 !important}.mdl-color--lime-900{background-color:#827717 !important}.mdl-color-text--lime-A100{color:#f4ff81 !important}.mdl-color--lime-A100{background-color:#f4ff81 !important}.mdl-color-text--lime-A200{color:#eeff41 !important}.mdl-color--lime-A200{background-color:#eeff41 !important}.mdl-color-text--lime-A400{color:#c6ff00 !important}.mdl-color--lime-A400{background-color:#c6ff00 !important}.mdl-color-text--lime-A700{color:#aeea00 !important}.mdl-color--lime-A700{background-color:#aeea00 !important}.mdl-color-text--yellow{color:#ffeb3b !important}.mdl-color--yellow{background-color:#ffeb3b !important}.mdl-color-text--yellow-50{color:#fffde7 !important}.mdl-color--yellow-50{background-color:#fffde7 !important}.mdl-color-text--yellow-100{color:#fff9c4 !important}.mdl-color--yellow-100{background-color:#fff9c4 !important}.mdl-color-text--yellow-200{color:#fff59d !important}.mdl-color--yellow-200{background-color:#fff59d !important}.mdl-color-text--yellow-300{color:#fff176 !important}.mdl-color--yellow-300{background-color:#fff176 !important}.mdl-color-text--yellow-400{color:#ffee58 !important}.mdl-color--yellow-400{background-color:#ffee58 !important}.mdl-color-text--yellow-500{color:#ffeb3b !important}.mdl-color--yellow-500{background-color:#ffeb3b !important}.mdl-color-text--yellow-600{color:#fdd835 !important}.mdl-color--yellow-600{background-color:#fdd835 !important}.mdl-color-text--yellow-700{color:#fbc02d !important}.mdl-color--yellow-700{background-color:#fbc02d !important}.mdl-color-text--yellow-800{color:#f9a825 !important}.mdl-color--yellow-800{background-color:#f9a825 !important}.mdl-color-text--yellow-900{color:#f57f17 !important}.mdl-color--yellow-900{background-color:#f57f17 !important}.mdl-color-text--yellow-A100{color:#ffff8d !important}.mdl-color--yellow-A100{background-color:#ffff8d !important}.mdl-color-text--yellow-A200{color:#ff0 !important}.mdl-color--yellow-A200{background-color:#ff0 !important}.mdl-color-text--yellow-A400{color:#ffea00 !important}.mdl-color--yellow-A400{background-color:#ffea00 !important}.mdl-color-text--yellow-A700{color:#ffd600 !important}.mdl-color--yellow-A700{background-color:#ffd600 !important}.mdl-color-text--amber{color:#ffc107 !important}.mdl-color--amber{background-color:#ffc107 !important}.mdl-color-text--amber-50{color:#fff8e1 !important}.mdl-color--amber-50{background-color:#fff8e1 !important}.mdl-color-text--amber-100{color:#ffecb3 !important}.mdl-color--amber-100{background-color:#ffecb3 !important}.mdl-color-text--amber-200{color:#ffe082 !important}.mdl-color--amber-200{background-color:#ffe082 !important}.mdl-color-text--amber-300{color:#ffd54f !important}.mdl-color--amber-300{background-color:#ffd54f !important}.mdl-color-text--amber-400{color:#ffca28 !important}.mdl-color--amber-400{background-color:#ffca28 !important}.mdl-color-text--amber-500{color:#ffc107 !important}.mdl-color--amber-500{background-color:#ffc107 !important}.mdl-color-text--amber-600{color:#ffb300 !important}.mdl-color--amber-600{background-color:#ffb300 !important}.mdl-color-text--amber-700{color:#ffa000 !important}.mdl-color--amber-700{background-color:#ffa000 !important}.mdl-color-text--amber-800{color:#ff8f00 !important}.mdl-color--amber-800{background-color:#ff8f00 !important}.mdl-color-text--amber-900{color:#ff6f00 !important}.mdl-color--amber-900{background-color:#ff6f00 !important}.mdl-color-text--amber-A100{color:#ffe57f !important}.mdl-color--amber-A100{background-color:#ffe57f !important}.mdl-color-text--amber-A200{color:#ffd740 !important}.mdl-color--amber-A200{background-color:#ffd740 !important}.mdl-color-text--amber-A400{color:#ffc400 !important}.mdl-color--amber-A400{background-color:#ffc400 !important}.mdl-color-text--amber-A700{color:#ffab00 !important}.mdl-color--amber-A700{background-color:#ffab00 !important}.mdl-color-text--orange{color:#ff9800 !important}.mdl-color--orange{background-color:#ff9800 !important}.mdl-color-text--orange-50{color:#fff3e0 !important}.mdl-color--orange-50{background-color:#fff3e0 !important}.mdl-color-text--orange-100{color:#ffe0b2 !important}.mdl-color--orange-100{background-color:#ffe0b2 !important}.mdl-color-text--orange-200{color:#ffcc80 !important}.mdl-color--orange-200{background-color:#ffcc80 !important}.mdl-color-text--orange-300{color:#ffb74d !important}.mdl-color--orange-300{background-color:#ffb74d !important}.mdl-color-text--orange-400{color:#ffa726 !important}.mdl-color--orange-400{background-color:#ffa726 !important}.mdl-color-text--orange-500{color:#ff9800 !important}.mdl-color--orange-500{background-color:#ff9800 !important}.mdl-color-text--orange-600{color:#fb8c00 !important}.mdl-color--orange-600{background-color:#fb8c00 !important}.mdl-color-text--orange-700{color:#f57c00 !important}.mdl-color--orange-700{background-color:#f57c00 !important}.mdl-color-text--orange-800{color:#ef6c00 !important}.mdl-color--orange-800{background-color:#ef6c00 !important}.mdl-color-text--orange-900{color:#e65100 !important}.mdl-color--orange-900{background-color:#e65100 !important}.mdl-color-text--orange-A100{color:#ffd180 !important}.mdl-color--orange-A100{background-color:#ffd180 !important}.mdl-color-text--orange-A200{color:#ffab40 !important}.mdl-color--orange-A200{background-color:#ffab40 !important}.mdl-color-text--orange-A400{color:#ff9100 !important}.mdl-color--orange-A400{background-color:#ff9100 !important}.mdl-color-text--orange-A700{color:#ff6d00 !important}.mdl-color--orange-A700{background-color:#ff6d00 !important}.mdl-color-text--deep-orange{color:#ff5722 !important}.mdl-color--deep-orange{background-color:#ff5722 !important}.mdl-color-text--deep-orange-50{color:#fbe9e7 !important}.mdl-color--deep-orange-50{background-color:#fbe9e7 !important}.mdl-color-text--deep-orange-100{color:#ffccbc !important}.mdl-color--deep-orange-100{background-color:#ffccbc !important}.mdl-color-text--deep-orange-200{color:#ffab91 !important}.mdl-color--deep-orange-200{background-color:#ffab91 !important}.mdl-color-text--deep-orange-300{color:#ff8a65 !important}.mdl-color--deep-orange-300{background-color:#ff8a65 !important}.mdl-color-text--deep-orange-400{color:#ff7043 !important}.mdl-color--deep-orange-400{background-color:#ff7043 !important}.mdl-color-text--deep-orange-500{color:#ff5722 !important}.mdl-color--deep-orange-500{background-color:#ff5722 !important}.mdl-color-text--deep-orange-600{color:#f4511e !important}.mdl-color--deep-orange-600{background-color:#f4511e !important}.mdl-color-text--deep-orange-700{color:#e64a19 !important}.mdl-color--deep-orange-700{background-color:#e64a19 !important}.mdl-color-text--deep-orange-800{color:#d84315 !important}.mdl-color--deep-orange-800{background-color:#d84315 !important}.mdl-color-text--deep-orange-900{color:#bf360c !important}.mdl-color--deep-orange-900{background-color:#bf360c !important}.mdl-color-text--deep-orange-A100{color:#ff9e80 !important}.mdl-color--deep-orange-A100{background-color:#ff9e80 !important}.mdl-color-text--deep-orange-A200{color:#ff6e40 !important}.mdl-color--deep-orange-A200{background-color:#ff6e40 !important}.mdl-color-text--deep-orange-A400{color:#ff3d00 !important}.mdl-color--deep-orange-A400{background-color:#ff3d00 !important}.mdl-color-text--deep-orange-A700{color:#dd2c00 !important}.mdl-color--deep-orange-A700{background-color:#dd2c00 !important}.mdl-color-text--brown{color:#795548 !important}.mdl-color--brown{background-color:#795548 !important}.mdl-color-text--brown-50{color:#efebe9 !important}.mdl-color--brown-50{background-color:#efebe9 !important}.mdl-color-text--brown-100{color:#d7ccc8 !important}.mdl-color--brown-100{background-color:#d7ccc8 !important}.mdl-color-text--brown-200{color:#bcaaa4 !important}.mdl-color--brown-200{background-color:#bcaaa4 !important}.mdl-color-text--brown-300{color:#a1887f !important}.mdl-color--brown-300{background-color:#a1887f !important}.mdl-color-text--brown-400{color:#8d6e63 !important}.mdl-color--brown-400{background-color:#8d6e63 !important}.mdl-color-text--brown-500{color:#795548 !important}.mdl-color--brown-500{background-color:#795548 !important}.mdl-color-text--brown-600{color:#6d4c41 !important}.mdl-color--brown-600{background-color:#6d4c41 !important}.mdl-color-text--brown-700{color:#5d4037 !important}.mdl-color--brown-700{background-color:#5d4037 !important}.mdl-color-text--brown-800{color:#4e342e !important}.mdl-color--brown-800{background-color:#4e342e !important}.mdl-color-text--brown-900{color:#3e2723 !important}.mdl-color--brown-900{background-color:#3e2723 !important}.mdl-color-text--grey{color:#9e9e9e !important}.mdl-color--grey{background-color:#9e9e9e !important}.mdl-color-text--grey-50{color:#fafafa !important}.mdl-color--grey-50{background-color:#fafafa !important}.mdl-color-text--grey-100{color:#f5f5f5 !important}.mdl-color--grey-100{background-color:#f5f5f5 !important}.mdl-color-text--grey-200{color:#eee !important}.mdl-color--grey-200{background-color:#eee !important}.mdl-color-text--grey-300{color:#e0e0e0 !important}.mdl-color--grey-300{background-color:#e0e0e0 !important}.mdl-color-text--grey-400{color:#bdbdbd !important}.mdl-color--grey-400{background-color:#bdbdbd !important}.mdl-color-text--grey-500{color:#9e9e9e !important}.mdl-color--grey-500{background-color:#9e9e9e !important}.mdl-color-text--grey-600{color:#757575 !important}.mdl-color--grey-600{background-color:#757575 !important}.mdl-color-text--grey-700{color:#616161 !important}.mdl-color--grey-700{background-color:#616161 !important}.mdl-color-text--grey-800{color:#424242 !important}.mdl-color--grey-800{background-color:#424242 !important}.mdl-color-text--grey-900{color:#212121 !important}.mdl-color--grey-900{background-color:#212121 !important}.mdl-color-text--blue-grey{color:#607d8b !important}.mdl-color--blue-grey{background-color:#607d8b !important}.mdl-color-text--blue-grey-50{color:#eceff1 !important}.mdl-color--blue-grey-50{background-color:#eceff1 !important}.mdl-color-text--blue-grey-100{color:#cfd8dc !important}.mdl-color--blue-grey-100{background-color:#cfd8dc !important}.mdl-color-text--blue-grey-200{color:#b0bec5 !important}.mdl-color--blue-grey-200{background-color:#b0bec5 !important}.mdl-color-text--blue-grey-300{color:#90a4ae !important}.mdl-color--blue-grey-300{background-color:#90a4ae !important}.mdl-color-text--blue-grey-400{color:#78909c !important}.mdl-color--blue-grey-400{background-color:#78909c !important}.mdl-color-text--blue-grey-500{color:#607d8b !important}.mdl-color--blue-grey-500{background-color:#607d8b !important}.mdl-color-text--blue-grey-600{color:#546e7a !important}.mdl-color--blue-grey-600{background-color:#546e7a !important}.mdl-color-text--blue-grey-700{color:#455a64 !important}.mdl-color--blue-grey-700{background-color:#455a64 !important}.mdl-color-text--blue-grey-800{color:#37474f !important}.mdl-color--blue-grey-800{background-color:#37474f !important}.mdl-color-text--blue-grey-900{color:#263238 !important}.mdl-color--blue-grey-900{background-color:#263238 !important}.mdl-color--black{background-color:#000 !important}.mdl-color-text--black{color:#000 !important}.mdl-color--white{background-color:#fff !important}.mdl-color-text--white{color:#fff !important}.mdl-color--primary{background-color:rgb(96,125,139)!important}.mdl-color--primary-contrast{background-color:rgb(255,255,255)!important}.mdl-color--primary-dark{background-color:rgb(69,90,100)!important}.mdl-color--accent{background-color:rgb(83,109,254)!important}.mdl-color--accent-contrast{background-color:rgb(255,255,255)!important}.mdl-color-text--primary{color:rgb(96,125,139)!important}.mdl-color-text--primary-contrast{color:rgb(255,255,255)!important}.mdl-color-text--primary-dark{color:rgb(69,90,100)!important}.mdl-color-text--accent{color:rgb(83,109,254)!important}.mdl-color-text--accent-contrast{color:rgb(255,255,255)!important}.mdl-ripple{background:#000;border-radius:50%;height:50px;left:0;opacity:0;pointer-events:none;position:absolute;top:0;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:50px;overflow:hidden}.mdl-ripple.is-animating{-webkit-transition:-webkit-transform .3s cubic-bezier(0,0,.2,1),width .3s cubic-bezier(0,0,.2,1),height .3s cubic-bezier(0,0,.2,1),opacity .6s cubic-bezier(0,0,.2,1);transition:transform .3s cubic-bezier(0,0,.2,1),width .3s cubic-bezier(0,0,.2,1),height .3s cubic-bezier(0,0,.2,1),opacity .6s cubic-bezier(0,0,.2,1)}.mdl-ripple.is-visible{opacity:.3}.mdl-animation--default,.mdl-animation--fast-out-slow-in{-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-animation--linear-out-slow-in{-webkit-transition-timing-function:cubic-bezier(0,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1)}.mdl-animation--fast-out-linear-in{-webkit-transition-timing-function:cubic-bezier(.4,0,1,1);transition-timing-function:cubic-bezier(.4,0,1,1)}.mdl-badge{position:relative;white-space:nowrap;margin-right:24px}.mdl-badge:not([data-badge]){margin-right:auto}.mdl-badge[data-badge]:after{content:attr(data-badge);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;position:absolute;top:-11px;right:-24px;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:600;font-size:12px;width:22px;height:22px;border-radius:50%;background:rgb(83,109,254);color:#fff}.mdl-button .mdl-badge[data-badge]:after{top:-10px;right:-5px}.mdl-badge.mdl-badge--no-background[data-badge]:after{color:rgb(83,109,254);background:rgba(255,255,255,.2);box-shadow:0 0 1px gray}.mdl-button{background:0 0;border:none;border-radius:2px;color:#000;display:block;position:relative;height:36px;min-width:64px;padding:0 8px;display:inline-block;font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:14px;font-weight:500;text-transform:uppercase;letter-spacing:0;overflow:hidden;will-change:box-shadow,transform;-webkit-transition:box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);transition:box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);outline:none;cursor:pointer;text-decoration:none;text-align:center;line-height:36px;vertical-align:middle}.mdl-button::-moz-focus-inner{border:0}.mdl-button:hover{background-color:rgba(158,158,158,.2)}.mdl-button:focus:not(:active){background-color:rgba(0,0,0,.12)}.mdl-button:active{background-color:rgba(158,158,158,.4)}.mdl-button.mdl-button--colored{color:rgb(96,125,139)}.mdl-button.mdl-button--colored:focus:not(:active){background-color:rgba(0,0,0,.12)}input.mdl-button[type="submit"]{-webkit-appearance:none}.mdl-button--raised{background:rgba(158,158,158,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-button--raised:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:rgba(158,158,158,.4)}.mdl-button--raised:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:rgba(158,158,158,.4)}.mdl-button--raised.mdl-button--colored{background:rgb(96,125,139);color:rgb(255,255,255)}.mdl-button--raised.mdl-button--colored:hover{background-color:rgb(96,125,139)}.mdl-button--raised.mdl-button--colored:active{background-color:rgb(96,125,139)}.mdl-button--raised.mdl-button--colored:focus:not(:active){background-color:rgb(96,125,139)}.mdl-button--raised.mdl-button--colored .mdl-ripple{background:rgb(255,255,255)}.mdl-button--fab{border-radius:50%;font-size:24px;height:56px;margin:auto;min-width:56px;width:56px;padding:0;overflow:hidden;background:rgba(158,158,158,.2);box-shadow:0 1px 1.5px 0 rgba(0,0,0,.12),0 1px 1px 0 rgba(0,0,0,.24);position:relative;line-height:normal}.mdl-button--fab .material-icons{position:absolute;top:50%;left:50%;-webkit-transform:translate(-12px,-12px);-ms-transform:translate(-12px,-12px);transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--fab.mdl-button--mini-fab{height:40px;min-width:40px;width:40px}.mdl-button--fab .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button--fab:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:rgba(158,158,158,.4)}.mdl-button--fab:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:rgba(158,158,158,.4)}.mdl-button--fab.mdl-button--colored{background:rgb(83,109,254);color:rgb(255,255,255)}.mdl-button--fab.mdl-button--colored:hover{background-color:rgb(83,109,254)}.mdl-button--fab.mdl-button--colored:focus:not(:active){background-color:rgb(83,109,254)}.mdl-button--fab.mdl-button--colored:active{background-color:rgb(83,109,254)}.mdl-button--fab.mdl-button--colored .mdl-ripple{background:rgb(255,255,255)}.mdl-button--icon{border-radius:50%;font-size:24px;height:32px;margin-left:0;margin-right:0;min-width:32px;width:32px;padding:0;overflow:hidden;color:inherit;line-height:normal}.mdl-button--icon .material-icons{position:absolute;top:50%;left:50%;-webkit-transform:translate(-12px,-12px);-ms-transform:translate(-12px,-12px);transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--icon.mdl-button--mini-icon{height:24px;min-width:24px;width:24px}.mdl-button--icon.mdl-button--mini-icon .material-icons{top:0;left:0}.mdl-button--icon .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button__ripple-container{display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:0;overflow:hidden}.mdl-button[disabled] .mdl-button__ripple-container .mdl-ripple{background-color:transparent}.mdl-button--primary.mdl-button--primary{color:rgb(96,125,139)}.mdl-button--primary.mdl-button--primary .mdl-ripple{background:rgb(255,255,255)}.mdl-button--primary.mdl-button--primary.mdl-button--raised,.mdl-button--primary.mdl-button--primary.mdl-button--fab{color:rgb(255,255,255);background-color:rgb(96,125,139)}.mdl-button--accent.mdl-button--accent{color:rgb(83,109,254)}.mdl-button--accent.mdl-button--accent .mdl-ripple{background:rgb(255,255,255)}.mdl-button--accent.mdl-button--accent.mdl-button--raised,.mdl-button--accent.mdl-button--accent.mdl-button--fab{color:rgb(255,255,255);background-color:rgb(83,109,254)}.mdl-button[disabled][disabled]{color:rgba(0,0,0,.26);cursor:auto;background-color:transparent}.mdl-button--fab[disabled][disabled],.mdl-button--raised[disabled][disabled],.mdl-button--colored[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-card{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;font-size:16px;font-weight:400;min-height:200px;overflow:hidden;width:330px;z-index:1;position:relative;background:#fff;border-radius:2px;box-sizing:border-box}.mdl-card__media{background-color:rgb(83,109,254);background-repeat:repeat;background-position:50% 50%;background-size:cover;background-origin:padding-box;background-attachment:scroll;box-sizing:border-box}.mdl-card__title{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;color:#000;display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:stretch;-webkit-justify-content:stretch;-ms-flex-pack:stretch;justify-content:stretch;line-height:normal;padding:16px;-webkit-perspective-origin:165px 56px;perspective-origin:165px 56px;-webkit-transform-origin:165px 56px;-ms-transform-origin:165px 56px;transform-origin:165px 56px;box-sizing:border-box}.mdl-card__title.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__title-text{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end;color:inherit;display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;font-size:24px;font-weight:300;line-height:normal;overflow:hidden;-webkit-transform-origin:149px 48px;-ms-transform-origin:149px 48px;transform-origin:149px 48px;margin:0}.mdl-card__subtitle-text{font-size:14px;color:grey;margin:0}.mdl-card__supporting-text{color:rgba(0,0,0,.54);font-size:13px;line-height:18px;overflow:hidden;padding:16px;width:90%}.mdl-card__actions{font-size:16px;line-height:normal;width:100%;background-color:transparent;padding:8px;box-sizing:border-box}.mdl-card__actions.mdl-card--border{border-top:1px solid rgba(0,0,0,.1)}.mdl-card--expand{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.mdl-card__menu{position:absolute;right:16px;top:16px}.mdl-checkbox{position:relative;z-index:1;vertical-align:middle;display:inline-block;box-sizing:border-box;width:100%;height:24px;margin:0;padding:0}.mdl-checkbox.is-upgraded{padding-left:24px}.mdl-checkbox__input{line-height:24px}.mdl-checkbox.is-upgraded .mdl-checkbox__input{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-checkbox__box-outline{position:absolute;top:3px;left:0;display:inline-block;box-sizing:border-box;width:16px;height:16px;margin:0;cursor:pointer;overflow:hidden;border:2px solid rgba(0,0,0,.54);border-radius:2px;z-index:2}.mdl-checkbox.is-checked .mdl-checkbox__box-outline{border:2px solid rgb(96,125,139)}.mdl-checkbox.is-disabled .mdl-checkbox__box-outline{border:2px solid rgba(0,0,0,.26);cursor:auto}.mdl-checkbox__focus-helper{position:absolute;top:3px;left:0;display:inline-block;box-sizing:border-box;width:16px;height:16px;border-radius:50%;background-color:transparent}.mdl-checkbox.is-focused .mdl-checkbox__focus-helper{box-shadow:0 0 0 8px rgba(0,0,0,.1);background-color:rgba(0,0,0,.1)}.mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper{box-shadow:0 0 0 8px rgba(96,125,139,.26);background-color:rgba(96,125,139,.26)}.mdl-checkbox__tick-outline{position:absolute;top:0;left:0;height:100%;width:100%;-webkit-mask:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8ZGVmcz4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gMCwwIDAsMSAxLDEgMSwwIDAsMCB6IE0gMC44NTM0Mzc1LDAuMTY3MTg3NSAwLjk1OTY4NzUsMC4yNzMxMjUgMC40MjkzNzUsMC44MDM0Mzc1IDAuMzIzMTI1LDAuOTA5Njg3NSAwLjIxNzE4NzUsMC44MDM0Mzc1IDAuMDQwMzEyNSwwLjYyNjg3NSAwLjE0NjU2MjUsMC41MjA2MjUgMC4zMjMxMjUsMC42OTc1IDAuODUzNDM3NSwwLjE2NzE4NzUgeiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8bWFzayBpZD0ibWFzayIgbWFza1VuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgbWFza0NvbnRlbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giPgogICAgICA8cGF0aAogICAgICAgICBkPSJNIDAsMCAwLDEgMSwxIDEsMCAwLDAgeiBNIDAuODUzNDM3NSwwLjE2NzE4NzUgMC45NTk2ODc1LDAuMjczMTI1IDAuNDI5Mzc1LDAuODAzNDM3NSAwLjMyMzEyNSwwLjkwOTY4NzUgMC4yMTcxODc1LDAuODAzNDM3NSAwLjA0MDMxMjUsMC42MjY4NzUgMC4xNDY1NjI1LDAuNTIwNjI1IDAuMzIzMTI1LDAuNjk3NSAwLjg1MzQzNzUsMC4xNjcxODc1IHoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+CiAgICA8L21hc2s+CiAgPC9kZWZzPgogIDxyZWN0CiAgICAgd2lkdGg9IjEiCiAgICAgaGVpZ2h0PSIxIgogICAgIHg9IjAiCiAgICAgeT0iMCIKICAgICBjbGlwLXBhdGg9InVybCgjY2xpcCkiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KPC9zdmc+Cg==");mask:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8ZGVmcz4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gMCwwIDAsMSAxLDEgMSwwIDAsMCB6IE0gMC44NTM0Mzc1LDAuMTY3MTg3NSAwLjk1OTY4NzUsMC4yNzMxMjUgMC40MjkzNzUsMC44MDM0Mzc1IDAuMzIzMTI1LDAuOTA5Njg3NSAwLjIxNzE4NzUsMC44MDM0Mzc1IDAuMDQwMzEyNSwwLjYyNjg3NSAwLjE0NjU2MjUsMC41MjA2MjUgMC4zMjMxMjUsMC42OTc1IDAuODUzNDM3NSwwLjE2NzE4NzUgeiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8bWFzayBpZD0ibWFzayIgbWFza1VuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgbWFza0NvbnRlbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giPgogICAgICA8cGF0aAogICAgICAgICBkPSJNIDAsMCAwLDEgMSwxIDEsMCAwLDAgeiBNIDAuODUzNDM3NSwwLjE2NzE4NzUgMC45NTk2ODc1LDAuMjczMTI1IDAuNDI5Mzc1LDAuODAzNDM3NSAwLjMyMzEyNSwwLjkwOTY4NzUgMC4yMTcxODc1LDAuODAzNDM3NSAwLjA0MDMxMjUsMC42MjY4NzUgMC4xNDY1NjI1LDAuNTIwNjI1IDAuMzIzMTI1LDAuNjk3NSAwLjg1MzQzNzUsMC4xNjcxODc1IHoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+CiAgICA8L21hc2s+CiAgPC9kZWZzPgogIDxyZWN0CiAgICAgd2lkdGg9IjEiCiAgICAgaGVpZ2h0PSIxIgogICAgIHg9IjAiCiAgICAgeT0iMCIKICAgICBjbGlwLXBhdGg9InVybCgjY2xpcCkiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KPC9zdmc+Cg==");background:0 0;-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:background;transition-property:background}.mdl-checkbox.is-checked .mdl-checkbox__tick-outline{background:rgb(96,125,139)url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K")}.mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline{background:rgba(0,0,0,.26)url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K")}.mdl-checkbox__label{position:relative;cursor:pointer;font-size:16px;line-height:24px;margin:0}.mdl-checkbox.is-disabled .mdl-checkbox__label{color:rgba(0,0,0,.26);cursor:auto}.mdl-checkbox__ripple-container{position:absolute;z-index:2;top:-6px;left:-10px;box-sizing:border-box;width:36px;height:36px;border-radius:50%;cursor:pointer;overflow:hidden;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-checkbox__ripple-container .mdl-ripple{background:rgb(96,125,139)}.mdl-checkbox.is-disabled .mdl-checkbox__ripple-container{cursor:auto}.mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple{background:0 0}.mdl-data-table{position:relative;border:1px solid rgba(0,0,0,.12);border-collapse:collapse;white-space:nowrap;font-size:13px;background-color:#fff}.mdl-data-table thead{padding-bottom:3px}.mdl-data-table thead .mdl-data-table__select{margin-top:0}.mdl-data-table tbody tr{position:relative;height:48px;-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:background-color;transition-property:background-color}.mdl-data-table tbody tr.is-selected{background-color:#e0e0e0}.mdl-data-table tbody tr:hover{background-color:#eee}.mdl-data-table td{text-align:right}.mdl-data-table th{padding:0 18px 0 18px;text-align:right}.mdl-data-table td:first-of-type,.mdl-data-table th:first-of-type{padding-left:24px}.mdl-data-table td:last-of-type,.mdl-data-table th:last-of-type{padding-right:24px}.mdl-data-table td{position:relative;vertical-align:top;height:48px;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);padding:12px 18px 0;box-sizing:border-box}.mdl-data-table td .mdl-data-table__select{vertical-align:top;position:absolute;left:24px}.mdl-data-table th{position:relative;vertical-align:bottom;text-overflow:ellipsis;font-weight:700;line-height:24px;letter-spacing:0;height:48px;font-size:12px;color:rgba(0,0,0,.54);padding-bottom:8px;box-sizing:border-box}.mdl-data-table th .mdl-data-table__select{position:relative}.mdl-data-table__select{width:16px}.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric{text-align:left}.mdl-mega-footer{padding:16px 40px;color:#9e9e9e;background-color:#424242}.mdl-mega-footer--top-section:after,.mdl-mega-footer--middle-section:after,.mdl-mega-footer--bottom-section:after,.mdl-mega-footer__top-section:after,.mdl-mega-footer__middle-section:after,.mdl-mega-footer__bottom-section:after{content:'';display:block;clear:both}.mdl-mega-footer--left-section,.mdl-mega-footer__left-section,.mdl-mega-footer--right-section,.mdl-mega-footer__right-section{margin-bottom:16px}.mdl-mega-footer--right-section a,.mdl-mega-footer__right-section a{display:block;margin-bottom:16px;color:inherit;text-decoration:none}@media screen and (min-width:760px){.mdl-mega-footer--left-section,.mdl-mega-footer__left-section{float:left}.mdl-mega-footer--right-section,.mdl-mega-footer__right-section{float:right}.mdl-mega-footer--right-section a,.mdl-mega-footer__right-section a{display:inline-block;margin-left:16px;line-height:36px;vertical-align:middle}}.mdl-mega-footer--social-btn,.mdl-mega-footer__social-btn{width:36px;height:36px;padding:0;margin:0;background-color:#9e9e9e;border:none}.mdl-mega-footer--drop-down-section,.mdl-mega-footer__drop-down-section{display:block;position:relative}@media screen and (min-width:760px){.mdl-mega-footer--drop-down-section,.mdl-mega-footer__drop-down-section{width:33%}.mdl-mega-footer--drop-down-section:nth-child(1),.mdl-mega-footer--drop-down-section:nth-child(2),.mdl-mega-footer__drop-down-section:nth-child(1),.mdl-mega-footer__drop-down-section:nth-child(2){float:left}.mdl-mega-footer--drop-down-section:nth-child(3),.mdl-mega-footer__drop-down-section:nth-child(3){float:right}.mdl-mega-footer--drop-down-section:nth-child(3):after,.mdl-mega-footer__drop-down-section:nth-child(3):after{clear:right}.mdl-mega-footer--drop-down-section:nth-child(4),.mdl-mega-footer__drop-down-section:nth-child(4){clear:right;float:right}.mdl-mega-footer--middle-section:after,.mdl-mega-footer__middle-section:after{content:'';display:block;clear:both}.mdl-mega-footer--bottom-section,.mdl-mega-footer__bottom-section{padding-top:0}}@media screen and (min-width:1024px){.mdl-mega-footer--drop-down-section,.mdl-mega-footer--drop-down-section:nth-child(3),.mdl-mega-footer--drop-down-section:nth-child(4),.mdl-mega-footer__drop-down-section,.mdl-mega-footer__drop-down-section:nth-child(3),.mdl-mega-footer__drop-down-section:nth-child(4){width:24%;float:left}}.mdl-mega-footer--heading-checkbox,.mdl-mega-footer__heading-checkbox{position:absolute;width:100%;height:55.8px;padding:32px;margin:-16px 0 0;cursor:pointer;z-index:1;opacity:0}.mdl-mega-footer--heading-checkbox~.mdl-mega-footer--heading:after,.mdl-mega-footer--heading-checkbox~.mdl-mega-footer__heading:after,.mdl-mega-footer__heading-checkbox~.mdl-mega-footer--heading:after,.mdl-mega-footer__heading-checkbox~.mdl-mega-footer__heading:after{font-family:'Material Icons';content:'\E5CE'}.mdl-mega-footer--heading-checkbox:checked~ul,.mdl-mega-footer__heading-checkbox:checked~ul{display:none}.mdl-mega-footer--heading-checkbox:checked~.mdl-mega-footer--heading:after,.mdl-mega-footer--heading-checkbox:checked~.mdl-mega-footer__heading:after,.mdl-mega-footer__heading-checkbox:checked~.mdl-mega-footer--heading:after,.mdl-mega-footer__heading-checkbox:checked~.mdl-mega-footer__heading:after{font-family:'Material Icons';content:'\E5CF'}.mdl-mega-footer--heading,.mdl-mega-footer__heading{position:relative;width:100%;padding-right:39.8px;margin-bottom:16px;box-sizing:border-box;font-size:14px;line-height:23.8px;font-weight:500;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;color:#e0e0e0}.mdl-mega-footer--heading:after,.mdl-mega-footer__heading:after{content:'';position:absolute;top:0;right:0;display:block;width:23.8px;height:23.8px;background-size:cover}.mdl-mega-footer--link-list,.mdl-mega-footer__link-list{list-style:none;padding:0;margin:0 0 32px}.mdl-mega-footer--link-list:after,.mdl-mega-footer__link-list:after{clear:both;display:block;content:''}.mdl-mega-footer--link-list li,.mdl-mega-footer__link-list li{font-size:14px;font-weight:400;letter-spacing:0;line-height:20px}.mdl-mega-footer--link-list a,.mdl-mega-footer__link-list a{color:inherit;text-decoration:none;white-space:nowrap}@media screen and (min-width:760px){.mdl-mega-footer--heading-checkbox,.mdl-mega-footer__heading-checkbox{display:none}.mdl-mega-footer--heading-checkbox~.mdl-mega-footer--heading:after,.mdl-mega-footer--heading-checkbox~.mdl-mega-footer__heading:after,.mdl-mega-footer__heading-checkbox~.mdl-mega-footer--heading:after,.mdl-mega-footer__heading-checkbox~.mdl-mega-footer__heading:after{background-image:none}.mdl-mega-footer--heading-checkbox:checked~ul,.mdl-mega-footer__heading-checkbox:checked~ul{display:block}.mdl-mega-footer--heading-checkbox:checked~.mdl-mega-footer--heading:after,.mdl-mega-footer--heading-checkbox:checked~.mdl-mega-footer__heading:after,.mdl-mega-footer__heading-checkbox:checked~.mdl-mega-footer--heading:after,.mdl-mega-footer__heading-checkbox:checked~.mdl-mega-footer__heading:after{content:''}}.mdl-mega-footer--bottom-section,.mdl-mega-footer__bottom-section{padding-top:16px;margin-bottom:16px}.mdl-logo{margin-bottom:16px;color:#fff}.mdl-mega-footer--bottom-section .mdl-mega-footer--link-list li,.mdl-mega-footer__bottom-section .mdl-mega-footer__link-list li{float:left;margin-bottom:0;margin-right:16px}@media screen and (min-width:760px){.mdl-logo{float:left;margin-bottom:0;margin-right:16px}}.mdl-mini-footer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:32px 16px;color:#9e9e9e;background-color:#424242}.mdl-mini-footer:after{content:'';display:block}.mdl-mini-footer .mdl-logo{line-height:36px}.mdl-mini-footer--link-list,.mdl-mini-footer__link-list{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;list-style:none;margin:0;padding:0}.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li{margin-bottom:0;margin-right:16px}@media screen and (min-width:760px){.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li{line-height:36px}}.mdl-mini-footer--link-list a,.mdl-mini-footer__link-list a{color:inherit;text-decoration:none;white-space:nowrap}.mdl-mini-footer--left-section,.mdl-mini-footer__left-section{display:inline-block;-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.mdl-mini-footer--right-section,.mdl-mini-footer__right-section{display:inline-block;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.mdl-mini-footer--social-btn,.mdl-mini-footer__social-btn{width:36px;height:36px;padding:0;margin:0;background-color:#9e9e9e;border:none}.mdl-icon-toggle{position:relative;z-index:1;vertical-align:middle;display:inline-block;height:32px;margin:0;padding:0}.mdl-icon-toggle__input{line-height:32px}.mdl-icon-toggle.is-upgraded .mdl-icon-toggle__input{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-icon-toggle__label{display:inline-block;position:relative;cursor:pointer;height:32px;width:32px;min-width:32px;color:#616161;border-radius:50%;padding:0;margin-left:0;margin-right:0;text-align:center;background-color:transparent;will-change:background-color;-webkit-transition:background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);transition:background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1)}.mdl-icon-toggle__label.material-icons{line-height:32px;font-size:24px}.mdl-icon-toggle.is-checked .mdl-icon-toggle__label{color:rgb(96,125,139)}.mdl-icon-toggle.is-disabled .mdl-icon-toggle__label{color:rgba(0,0,0,.26);cursor:auto;-webkit-transition:none;transition:none}.mdl-icon-toggle.is-focused .mdl-icon-toggle__label{background-color:rgba(0,0,0,.12)}.mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label{background-color:rgba(96,125,139,.26)}.mdl-icon-toggle__ripple-container{position:absolute;z-index:2;top:-2px;left:-2px;box-sizing:border-box;width:36px;height:36px;border-radius:50%;cursor:pointer;overflow:hidden;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-icon-toggle__ripple-container .mdl-ripple{background:#616161}.mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container{cursor:auto}.mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple{background:0 0}.mdl-menu__container{display:block;margin:0;padding:0;border:none;position:absolute;overflow:visible;height:0;width:0;z-index:-1}.mdl-menu__container.is-visible{z-index:999}.mdl-menu__outline{display:block;background:#fff;margin:0;padding:0;border:none;border-radius:2px;position:absolute;top:0;left:0;overflow:hidden;opacity:0;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);will-change:transform;-webkit-transition:-webkit-transform .3s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1);transition:transform .3s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1);z-index:-1}.mdl-menu__container.is-visible .mdl-menu__outline{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);z-index:999}.mdl-menu__outline.mdl-menu--bottom-right{-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.mdl-menu__outline.mdl-menu--top-left{-webkit-transform-origin:0 100%;-ms-transform-origin:0 100%;transform-origin:0 100%}.mdl-menu__outline.mdl-menu--top-right{-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.mdl-menu{position:absolute;list-style:none;top:0;left:0;height:auto;width:auto;min-width:124px;padding:8px 0;margin:0;opacity:0;clip:rect(0 0 0 0);z-index:-1}.mdl-menu__container.is-visible .mdl-menu{opacity:1;z-index:999}.mdl-menu.is-animating{-webkit-transition:opacity .2s cubic-bezier(.4,0,.2,1),clip .3s cubic-bezier(.4,0,.2,1);transition:opacity .2s cubic-bezier(.4,0,.2,1),clip .3s cubic-bezier(.4,0,.2,1)}.mdl-menu.mdl-menu--bottom-right{left:auto;right:0}.mdl-menu.mdl-menu--top-left{top:auto;bottom:0}.mdl-menu.mdl-menu--top-right{top:auto;left:auto;bottom:0;right:0}.mdl-menu.mdl-menu--unaligned{top:auto;left:auto}.mdl-menu__item{display:block;border:none;color:rgba(0,0,0,.87);background-color:transparent;text-align:left;margin:0;padding:0 16px;outline-color:#bdbdbd;position:relative;overflow:hidden;font-size:14px;font-weight:400;letter-spacing:0;text-decoration:none;cursor:pointer;height:48px;line-height:48px;white-space:nowrap;opacity:0;-webkit-transition:opacity .2s cubic-bezier(.4,0,.2,1);transition:opacity .2s cubic-bezier(.4,0,.2,1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mdl-menu__container.is-visible .mdl-menu__item{opacity:1}.mdl-menu__item::-moz-focus-inner{border:0}.mdl-menu__item[disabled]{color:#bdbdbd;background-color:transparent;cursor:auto}.mdl-menu__item[disabled]:hover{background-color:transparent}.mdl-menu__item[disabled]:focus{background-color:transparent}.mdl-menu__item[disabled] .mdl-ripple{background:0 0}.mdl-menu__item:hover{background-color:#eee}.mdl-menu__item:focus{outline:none;background-color:#eee}.mdl-menu__item:active{background-color:#e0e0e0}.mdl-menu__item--ripple-container{display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:0;overflow:hidden}.mdl-progress{display:block;position:relative;height:4px;width:500px}.mdl-progress>.bar{display:block;position:absolute;top:0;bottom:0;width:0%;-webkit-transition:width .2s cubic-bezier(.4,0,.2,1);transition:width .2s cubic-bezier(.4,0,.2,1)}.mdl-progress>.progressbar{background-color:rgb(96,125,139);z-index:1;left:0}.mdl-progress>.bufferbar{background-image:-webkit-linear-gradient(left,rgba(255,255,255,.7),rgba(255,255,255,.7)),-webkit-linear-gradient(left,rgb(96,125,139),rgb(96,125,139));background-image:linear-gradient(to right,rgba(255,255,255,.7),rgba(255,255,255,.7)),linear-gradient(to right,rgb(96,125,139),rgb(96,125,139));z-index:0;left:0}.mdl-progress>.auxbar{right:0}@supports (-webkit-appearance:none){.mdl-progress:not(.mdl-progress__indeterminate):not(.mdl-progress__indeterminate)>.auxbar{background-image:-webkit-linear-gradient(left,rgba(255,255,255,.7),rgba(255,255,255,.7)),-webkit-linear-gradient(left,rgb(96,125,139),rgb(96,125,139));background-image:linear-gradient(to right,rgba(255,255,255,.7),rgba(255,255,255,.7)),linear-gradient(to right,rgb(96,125,139),rgb(96,125,139));-webkit-mask:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjQiIHZpZXdQb3J0PSIwIDAgMTIgNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxlbGxpcHNlIGN4PSIyIiBjeT0iMiIgcng9IjIiIHJ5PSIyIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImN4IiBmcm9tPSIyIiB0bz0iLTEwIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogIDwvZWxsaXBzZT4KICA8ZWxsaXBzZSBjeD0iMTQiIGN5PSIyIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJsb2FkZXIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iY3giIGZyb209IjE0IiB0bz0iMiIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICA8L2VsbGlwc2U+Cjwvc3ZnPgo=");mask:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjQiIHZpZXdQb3J0PSIwIDAgMTIgNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxlbGxpcHNlIGN4PSIyIiBjeT0iMiIgcng9IjIiIHJ5PSIyIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImN4IiBmcm9tPSIyIiB0bz0iLTEwIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogIDwvZWxsaXBzZT4KICA8ZWxsaXBzZSBjeD0iMTQiIGN5PSIyIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJsb2FkZXIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iY3giIGZyb209IjE0IiB0bz0iMiIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICA8L2VsbGlwc2U+Cjwvc3ZnPgo=")}}.mdl-progress:not(.mdl-progress__indeterminate)>.auxbar{background-image:-webkit-linear-gradient(left,rgba(255,255,255,.9),rgba(255,255,255,.9)),-webkit-linear-gradient(left,rgb(96,125,139),rgb(96,125,139));background-image:linear-gradient(to right,rgba(255,255,255,.9),rgba(255,255,255,.9)),linear-gradient(to right,rgb(96,125,139),rgb(96,125,139))}.mdl-progress.mdl-progress__indeterminate>.bar1{-webkit-animation-name:indeterminate1;animation-name:indeterminate1}.mdl-progress.mdl-progress__indeterminate>.bar1,.mdl-progress.mdl-progress__indeterminate>.bar3{background-color:rgb(96,125,139);-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function:linear}.mdl-progress.mdl-progress__indeterminate>.bar3{background-image:none;-webkit-animation-name:indeterminate2;animation-name:indeterminate2}@-webkit-keyframes indeterminate1{0%{left:0%;width:0%}50%{left:25%;width:75%}75%{left:100%;width:0%}}@keyframes indeterminate1{0%{left:0%;width:0%}50%{left:25%;width:75%}75%{left:100%;width:0%}}@-webkit-keyframes indeterminate2{0%,50%{left:0%;width:0%}75%{left:0%;width:25%}100%{left:100%;width:0%}}@keyframes indeterminate2{0%,50%{left:0%;width:0%}75%{left:0%;width:25%}100%{left:100%;width:0%}}.mdl-navigation{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;box-sizing:border-box}.mdl-navigation__link{color:#424242;text-decoration:none;font-weight:500;font-size:13px;margin:0}.mdl-layout{width:100%;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;overflow-y:auto;overflow-x:hidden;position:relative;-webkit-overflow-scrolling:touch}.mdl-layout.is-small-screen .mdl-layout--large-screen-only{display:none}.mdl-layout:not(.is-small-screen) .mdl-layout--small-screen-only{display:none}.mdl-layout__container{position:absolute;width:100%;height:100%}.mdl-layout-title{display:block;position:relative;font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:20px;line-height:1;letter-spacing:.02em;font-weight:400;box-sizing:border-box}.mdl-layout-spacer{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.mdl-layout__drawer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;width:240px;height:100%;max-height:100%;position:absolute;top:0;left:0;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);box-sizing:border-box;border-right:1px solid #e0e0e0;background:#fafafa;-webkit-transform:translateX(-250px);-ms-transform:translateX(-250px);transform:translateX(-250px);-webkit-transform-style:preserve-3d;transform-style:preserve-3d;will-change:transform;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:-webkit-transform;transition-property:transform;color:#424242;overflow:visible;overflow-y:auto;z-index:5}.mdl-layout__drawer.is-visible{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.mdl-layout__drawer>*{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.mdl-layout__drawer>.mdl-layout-title{line-height:64px;padding-left:40px}@media screen and (max-width:1024px){.mdl-layout__drawer>.mdl-layout-title{line-height:56px;padding-left:16px}}.mdl-layout__drawer .mdl-navigation{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;padding-top:16px}.mdl-layout__drawer .mdl-navigation .mdl-navigation__link{display:block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;padding:16px 40px;margin:0;color:#757575}@media screen and (max-width:1024px){.mdl-layout__drawer .mdl-navigation .mdl-navigation__link{padding:16px}}.mdl-layout__drawer .mdl-navigation .mdl-navigation__link:hover{background-color:#e0e0e0}.mdl-layout__drawer .mdl-navigation .mdl-navigation__link--current{background-color:#000;color:rgb(96,125,139)}@media screen and (min-width:1025px){.mdl-layout--fixed-drawer>.mdl-layout__drawer{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.mdl-layout__drawer-button{display:block;position:absolute;height:48px;width:48px;border:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;overflow:hidden;text-align:center;cursor:pointer;font-size:26px;line-height:50px;font-family:Helvetica,Arial,sans-serif;margin:10px 12px;top:0;left:0;color:rgb(255,255,255);z-index:4}.mdl-layout__header .mdl-layout__drawer-button{position:absolute;color:rgb(255,255,255);background-color:inherit}@media screen and (max-width:1024px){.mdl-layout__header .mdl-layout__drawer-button{margin:4px}}@media screen and (max-width:1024px){.mdl-layout__drawer-button{margin:4px;color:rgba(0,0,0,.5)}}@media screen and (min-width:1025px){.mdl-layout--fixed-drawer>.mdl-layout__drawer-button{display:none}}.mdl-layout__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;box-sizing:border-box;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100%;margin:0;padding:0;border:none;min-height:64px;max-height:1000px;z-index:3;background-color:rgb(96,125,139);color:rgb(255,255,255);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:max-height,box-shadow;transition-property:max-height,box-shadow}@media screen and (max-width:1024px){.mdl-layout__header{min-height:56px}}.mdl-layout--fixed-drawer:not(.is-small-screen)>.mdl-layout__header{margin-left:240px;width:calc(100% - 240px)}.mdl-layout__header>.mdl-layout-icon{position:absolute;left:40px;top:16px;height:32px;width:32px;overflow:hidden;z-index:3;display:block}@media screen and (max-width:1024px){.mdl-layout__header>.mdl-layout-icon{left:16px;top:12px}}.mdl-layout.has-drawer .mdl-layout__header>.mdl-layout-icon{display:none}.mdl-layout__header.is-compact{max-height:64px}@media screen and (max-width:1024px){.mdl-layout__header.is-compact{max-height:56px}}.mdl-layout__header.is-compact.has-tabs{height:112px}@media screen and (max-width:1024px){.mdl-layout__header.is-compact.has-tabs{min-height:104px}}@media screen and (max-width:1024px){.mdl-layout__header{display:none}.mdl-layout--fixed-header>.mdl-layout__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}}.mdl-layout__header--transparent.mdl-layout__header--transparent{background-color:transparent;box-shadow:none}.mdl-layout__header--seamed,.mdl-layout__header--scroll{box-shadow:none}.mdl-layout__header--waterfall{box-shadow:none;overflow:hidden}.mdl-layout__header--waterfall.is-casting-shadow{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-layout__header-row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;box-sizing:border-box;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:64px;margin:0;padding:0 40px 0 80px}@media screen and (max-width:1024px){.mdl-layout__header-row{height:56px;padding:0 16px 0 72px}}.mdl-layout__header-row>*{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.mdl-layout__header--scroll .mdl-layout__header-row{width:100%}.mdl-layout__header-row .mdl-navigation{margin:0;padding:0;height:64px;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}@media screen and (max-width:1024px){.mdl-layout__header-row .mdl-navigation{height:56px}}.mdl-layout__header-row .mdl-navigation__link{display:block;color:rgb(255,255,255);line-height:64px;padding:0 24px}@media screen and (max-width:1024px){.mdl-layout__header-row .mdl-navigation__link{line-height:56px;padding:0 16px}}.mdl-layout__obfuscator{background-color:transparent;position:absolute;top:0;left:0;height:100%;width:100%;z-index:4;visibility:hidden;-webkit-transition-property:background-color;transition-property:background-color;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-layout__drawer.is-visible~.mdl-layout__obfuscator{background-color:rgba(0,0,0,.5);visibility:visible}.mdl-layout__content{-ms-flex:0 1 auto;display:inline-block;overflow-y:auto;overflow-x:hidden;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;z-index:1;-webkit-overflow-scrolling:touch}.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:240px}.mdl-layout__container.has-scrolling-header .mdl-layout__content{overflow:visible}@media screen and (max-width:1024px){.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:0}.mdl-layout__container.has-scrolling-header .mdl-layout__content{overflow-y:auto;overflow-x:hidden}}.mdl-layout__tab-bar{height:96px;margin:0;width:calc(100% - 112px);padding:0 0 0 56px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;background-color:rgb(96,125,139);overflow-y:hidden;overflow-x:scroll}.mdl-layout__tab-bar::-webkit-scrollbar{display:none}@media screen and (max-width:1024px){.mdl-layout__tab-bar{width:calc(100% - 60px);padding:0 0 0 60px}}.mdl-layout--fixed-tabs .mdl-layout__tab-bar{padding:0;overflow:hidden;width:100%}.mdl-layout__tab-bar-container{position:relative;height:48px;width:100%;border:none;margin:0;z-index:2;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;overflow:hidden}.mdl-layout__container>.mdl-layout__tab-bar-container{position:absolute;top:0;left:0}.mdl-layout__tab-bar-button{display:inline-block;position:absolute;top:0;height:48px;width:56px;z-index:4;text-align:center;background-color:rgb(96,125,139);color:transparent;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media screen and (max-width:1024px){.mdl-layout__tab-bar-button{display:none;width:60px}}.mdl-layout--fixed-tabs .mdl-layout__tab-bar-button{display:none}.mdl-layout__tab-bar-button .material-icons{line-height:48px}.mdl-layout__tab-bar-button.is-active{color:rgb(255,255,255)}.mdl-layout__tab-bar-left-button{left:0}.mdl-layout__tab-bar-right-button{right:0}.mdl-layout__tab{margin:0;border:none;padding:0 24px;float:left;position:relative;display:block;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;text-decoration:none;height:48px;line-height:48px;text-align:center;font-weight:500;font-size:14px;text-transform:uppercase;color:rgba(255,255,255,.6);overflow:hidden}@media screen and (max-width:1024px){.mdl-layout__tab{padding:0 12px}}.mdl-layout--fixed-tabs .mdl-layout__tab{float:none;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0}.mdl-layout.is-upgraded .mdl-layout__tab.is-active{color:rgb(255,255,255)}.mdl-layout.is-upgraded .mdl-layout__tab.is-active::after{height:2px;width:100%;display:block;content:" ";bottom:0;left:0;position:absolute;background:rgb(83,109,254);-webkit-animation:border-expand .2s cubic-bezier(.4,0,.4,1).01s alternate forwards;animation:border-expand .2s cubic-bezier(.4,0,.4,1).01s alternate forwards;-webkit-transition:all 1s cubic-bezier(.4,0,1,1);transition:all 1s cubic-bezier(.4,0,1,1)}.mdl-layout__tab .mdl-layout__tab-ripple-container{display:block;position:absolute;height:100%;width:100%;left:0;top:0;z-index:1;overflow:hidden}.mdl-layout__tab .mdl-layout__tab-ripple-container .mdl-ripple{background-color:rgb(255,255,255)}.mdl-layout__tab-panel{display:block}.mdl-layout.is-upgraded .mdl-layout__tab-panel{display:none}.mdl-layout.is-upgraded .mdl-layout__tab-panel.is-active{display:block}.mdl-radio{position:relative;font-size:16px;line-height:24px;display:inline-block;box-sizing:border-box;margin:0;padding-left:0}.mdl-radio.is-upgraded{padding-left:24px}.mdl-radio__button{line-height:24px}.mdl-radio.is-upgraded .mdl-radio__button{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-radio__outer-circle{position:absolute;top:2px;left:0;display:inline-block;box-sizing:border-box;width:16px;height:16px;margin:0;cursor:pointer;border:2px solid rgba(0,0,0,.54);border-radius:50%;z-index:2}.mdl-radio.is-checked .mdl-radio__outer-circle{border:2px solid rgb(96,125,139)}.mdl-radio.is-disabled .mdl-radio__outer-circle{border:2px solid rgba(0,0,0,.26);cursor:auto}.mdl-radio__inner-circle{position:absolute;z-index:1;margin:0;top:6px;left:4px;box-sizing:border-box;width:8px;height:8px;cursor:pointer;-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:-webkit-transform;transition-property:transform;-webkit-transform:scale3d(0,0,0);transform:scale3d(0,0,0);border-radius:50%;background:rgb(96,125,139)}.mdl-radio.is-checked .mdl-radio__inner-circle{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}.mdl-radio.is-disabled .mdl-radio__inner-circle{background:rgba(0,0,0,.26);cursor:auto}.mdl-radio.is-focused .mdl-radio__inner-circle{box-shadow:0 0 0 10px rgba(0,0,0,.1)}.mdl-radio__label{cursor:pointer}.mdl-radio.is-disabled .mdl-radio__label{color:rgba(0,0,0,.26);cursor:auto}.mdl-radio__ripple-container{position:absolute;z-index:2;top:-9px;left:-13px;box-sizing:border-box;width:42px;height:42px;border-radius:50%;cursor:pointer;overflow:hidden;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-radio__ripple-container .mdl-ripple{background:rgb(96,125,139)}.mdl-radio.is-disabled .mdl-radio__ripple-container{cursor:auto}.mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple{background:0 0}_:-ms-input-placeholder,:root .mdl-slider.mdl-slider.is-upgraded{-ms-appearance:none;height:32px;margin:0}.mdl-slider{width:calc(100% - 40px);margin:0 20px}.mdl-slider.is-upgraded{-webkit-appearance:none;-moz-appearance:none;appearance:none;height:2px;background:0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:0;padding:0;color:rgb(96,125,139);-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;z-index:1}.mdl-slider.is-upgraded::-moz-focus-outer{border:0}.mdl-slider.is-upgraded::-ms-tooltip{display:none}.mdl-slider.is-upgraded::-webkit-slider-runnable-track{background:0 0}.mdl-slider.is-upgraded::-moz-range-track{background:0 0;border:none}.mdl-slider.is-upgraded::-ms-track{background:0 0;color:transparent;height:2px;width:100%;border:none}.mdl-slider.is-upgraded::-ms-fill-lower{padding:0;background:linear-gradient(to right,transparent,transparent 16px,rgb(96,125,139)16px,rgb(96,125,139)0)}.mdl-slider.is-upgraded::-ms-fill-upper{padding:0;background:linear-gradient(to left,transparent,transparent 16px,rgba(0,0,0,.26)16px,rgba(0,0,0,.26)0)}.mdl-slider.is-upgraded::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;box-sizing:border-box;border-radius:50%;background:rgb(96,125,139);border:none;-webkit-transition:-webkit-transform .18s cubic-bezier(.4,0,.2,1),border .18s cubic-bezier(.4,0,.2,1),box-shadow .18s cubic-bezier(.4,0,.2,1),background .28s cubic-bezier(.4,0,.2,1);transition:transform .18s cubic-bezier(.4,0,.2,1),border .18s cubic-bezier(.4,0,.2,1),box-shadow .18s cubic-bezier(.4,0,.2,1),background .28s cubic-bezier(.4,0,.2,1)}.mdl-slider.is-upgraded::-moz-range-thumb{-moz-appearance:none;width:12px;height:12px;box-sizing:border-box;border-radius:50%;background-image:none;background:rgb(96,125,139);border:none}.mdl-slider.is-upgraded:focus:not(:active)::-webkit-slider-thumb{box-shadow:0 0 0 10px rgba(96,125,139,.26)}.mdl-slider.is-upgraded:focus:not(:active)::-moz-range-thumb{box-shadow:0 0 0 10px rgba(96,125,139,.26)}.mdl-slider.is-upgraded:active::-webkit-slider-thumb{background-image:none;background:rgb(96,125,139);-webkit-transform:scale(1.5);transform:scale(1.5)}.mdl-slider.is-upgraded:active::-moz-range-thumb{background-image:none;background:rgb(96,125,139);transform:scale(1.5)}.mdl-slider.is-upgraded::-ms-thumb{width:32px;height:32px;border:none;border-radius:50%;background:rgb(96,125,139);-ms-transform:scale(.375);transform:scale(.375);transition:transform .18s cubic-bezier(.4,0,.2,1),background .28s cubic-bezier(.4,0,.2,1)}.mdl-slider.is-upgraded:focus:not(:active)::-ms-thumb{background:radial-gradient(circle closest-side,rgb(96,125,139)0%,rgb(96,125,139)37.5%,rgba(96,125,139,.26)37.5%,rgba(96,125,139,.26)100%);-ms-transform:scale(1);transform:scale(1)}.mdl-slider.is-upgraded:active::-ms-thumb{background:rgb(96,125,139);-ms-transform:scale(.5625);transform:scale(.5625)}.mdl-slider.is-upgraded.is-lowest-value::-webkit-slider-thumb{border:2px solid rgba(0,0,0,.26);background:0 0}.mdl-slider.is-upgraded.is-lowest-value::-moz-range-thumb{border:2px solid rgba(0,0,0,.26);background:0 0}.mdl-slider.is-upgraded.is-lowest-value~.mdl-slider__background-flex>.mdl-slider__background-upper{left:6px}.mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-webkit-slider-thumb{box-shadow:0 0 0 10px rgba(0,0,0,.12);background:rgba(0,0,0,.12)}.mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-moz-range-thumb{box-shadow:0 0 0 10px rgba(0,0,0,.12);background:rgba(0,0,0,.12)}.mdl-slider.is-upgraded.is-lowest-value:active::-webkit-slider-thumb{border:1.6px solid rgba(0,0,0,.26);-webkit-transform:scale(1.5);transform:scale(1.5)}.mdl-slider.is-upgraded.is-lowest-value:active~.mdl-slider__background-flex>.mdl-slider__background-upper{left:9px}.mdl-slider.is-upgraded.is-lowest-value:active::-moz-range-thumb{border:1.5px solid rgba(0,0,0,.26);transform:scale(1.5)}.mdl-slider.is-upgraded.is-lowest-value::-ms-thumb{background:radial-gradient(circle closest-side,transparent 0%,transparent 66.67%,rgba(0,0,0,.26)66.67%,rgba(0,0,0,.26)100%)}.mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-ms-thumb{background:radial-gradient(circle closest-side,rgba(0,0,0,.12)0%,rgba(0,0,0,.12)25%,rgba(0,0,0,.26)25%,rgba(0,0,0,.26)37.5%,rgba(0,0,0,.12)37.5%,rgba(0,0,0,.12)100%);-ms-transform:scale(1);transform:scale(1)}.mdl-slider.is-upgraded.is-lowest-value:active::-ms-thumb{-ms-transform:scale(.5625);transform:scale(.5625);background:radial-gradient(circle closest-side,transparent 0%,transparent 77.78%,rgba(0,0,0,.26)77.78%,rgba(0,0,0,.26)100%)}.mdl-slider.is-upgraded.is-lowest-value::-ms-fill-lower{background:0 0}.mdl-slider.is-upgraded.is-lowest-value::-ms-fill-upper{margin-left:6px}.mdl-slider.is-upgraded.is-lowest-value:active::-ms-fill-upper{margin-left:9px}.mdl-slider.is-upgraded:disabled:focus::-webkit-slider-thumb,.mdl-slider.is-upgraded:disabled:active::-webkit-slider-thumb,.mdl-slider.is-upgraded:disabled::-webkit-slider-thumb{-webkit-transform:scale(.667);transform:scale(.667);background:rgba(0,0,0,.26)}.mdl-slider.is-upgraded:disabled:focus::-moz-range-thumb,.mdl-slider.is-upgraded:disabled:active::-moz-range-thumb,.mdl-slider.is-upgraded:disabled::-moz-range-thumb{transform:scale(.667);background:rgba(0,0,0,.26)}.mdl-slider.is-upgraded:disabled~.mdl-slider__background-flex>.mdl-slider__background-lower{background-color:rgba(0,0,0,.26);left:-6px}.mdl-slider.is-upgraded:disabled~.mdl-slider__background-flex>.mdl-slider__background-upper{left:6px}.mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-webkit-slider-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-webkit-slider-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled::-webkit-slider-thumb{border:3px solid rgba(0,0,0,.26);background:0 0;-webkit-transform:scale(.667);transform:scale(.667)}.mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-moz-range-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-moz-range-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled::-moz-range-thumb{border:3px solid rgba(0,0,0,.26);background:0 0;transform:scale(.667)}.mdl-slider.is-upgraded.is-lowest-value:disabled:active~.mdl-slider__background-flex>.mdl-slider__background-upper{left:6px}.mdl-slider.is-upgraded:disabled:focus::-ms-thumb,.mdl-slider.is-upgraded:disabled:active::-ms-thumb,.mdl-slider.is-upgraded:disabled::-ms-thumb{-ms-transform:scale(.25);transform:scale(.25);background:rgba(0,0,0,.26)}.mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-ms-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled::-ms-thumb{-ms-transform:scale(.25);transform:scale(.25);background:radial-gradient(circle closest-side,transparent 0%,transparent 50%,rgba(0,0,0,.26)50%,rgba(0,0,0,.26)100%)}.mdl-slider.is-upgraded:disabled::-ms-fill-lower{margin-right:6px;background:linear-gradient(to right,transparent,transparent 25px,rgba(0,0,0,.26)25px,rgba(0,0,0,.26)0)}.mdl-slider.is-upgraded:disabled::-ms-fill-upper{margin-left:6px}.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-fill-upper{margin-left:6px}.mdl-slider__ie-container{height:18px;overflow:visible;border:none;margin:none;padding:none}.mdl-slider__container{height:18px;position:relative;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.mdl-slider__container,.mdl-slider__background-flex{background:0 0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.mdl-slider__background-flex{position:absolute;height:2px;width:calc(100% - 52px);top:50%;left:0;margin:0 26px;overflow:hidden;border:0;padding:0;-webkit-transform:translate(0,-1px);-ms-transform:translate(0,-1px);transform:translate(0,-1px)}.mdl-slider__background-lower{background:rgb(96,125,139)}.mdl-slider__background-lower,.mdl-slider__background-upper{-webkit-box-flex:0;-webkit-flex:0;-ms-flex:0;flex:0;position:relative;border:0;padding:0}.mdl-slider__background-upper{background:rgba(0,0,0,.26);-webkit-transition:left .18s cubic-bezier(.4,0,.2,1);transition:left .18s cubic-bezier(.4,0,.2,1)}.mdl-spinner{display:inline-block;position:relative;width:28px;height:28px}.mdl-spinner:not(.is-upgraded).is-active:after{content:"Loading..."}.mdl-spinner.is-upgraded.is-active{-webkit-animation:mdl-spinner__container-rotate 1568.23529412ms linear infinite;animation:mdl-spinner__container-rotate 1568.23529412ms linear infinite}@-webkit-keyframes mdl-spinner__container-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes mdl-spinner__container-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.mdl-spinner__layer{position:absolute;width:100%;height:100%;opacity:0}.mdl-spinner__layer-1{border-color:#42a5f5}.mdl-spinner--single-color .mdl-spinner__layer-1{border-color:rgb(96,125,139)}.mdl-spinner.is-active .mdl-spinner__layer-1{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-1-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-1-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both}.mdl-spinner__layer-2{border-color:#f44336}.mdl-spinner--single-color .mdl-spinner__layer-2{border-color:rgb(96,125,139)}.mdl-spinner.is-active .mdl-spinner__layer-2{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-2-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-2-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both}.mdl-spinner__layer-3{border-color:#fdd835}.mdl-spinner--single-color .mdl-spinner__layer-3{border-color:rgb(96,125,139)}.mdl-spinner.is-active .mdl-spinner__layer-3{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-3-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-3-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both}.mdl-spinner__layer-4{border-color:#4caf50}.mdl-spinner--single-color .mdl-spinner__layer-4{border-color:rgb(96,125,139)}.mdl-spinner.is-active .mdl-spinner__layer-4{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-4-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-4-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both}@-webkit-keyframes mdl-spinner__fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg);transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg);transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg);transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg);transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg);transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg);transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg);transform:rotate(1080deg)}}@keyframes mdl-spinner__fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg);transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg);transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg);transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg);transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg);transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg);transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg);transform:rotate(1080deg)}}@-webkit-keyframes mdl-spinner__layer-1-fade-in-out{from,25%{opacity:.99}26%,89%{opacity:0}90%,100%{opacity:.99}}@keyframes mdl-spinner__layer-1-fade-in-out{from,25%{opacity:.99}26%,89%{opacity:0}90%,100%{opacity:.99}}@-webkit-keyframes mdl-spinner__layer-2-fade-in-out{from,15%{opacity:0}25%,50%{opacity:.99}51%{opacity:0}}@keyframes mdl-spinner__layer-2-fade-in-out{from,15%{opacity:0}25%,50%{opacity:.99}51%{opacity:0}}@-webkit-keyframes mdl-spinner__layer-3-fade-in-out{from,40%{opacity:0}50%,75%{opacity:.99}76%{opacity:0}}@keyframes mdl-spinner__layer-3-fade-in-out{from,40%{opacity:0}50%,75%{opacity:.99}76%{opacity:0}}@-webkit-keyframes mdl-spinner__layer-4-fade-in-out{from,65%{opacity:0}75%,90%{opacity:.99}100%{opacity:0}}@keyframes mdl-spinner__layer-4-fade-in-out{from,65%{opacity:0}75%,90%{opacity:.99}100%{opacity:0}}.mdl-spinner__gap-patch{position:absolute;box-sizing:border-box;top:0;left:45%;width:10%;height:100%;overflow:hidden;border-color:inherit}.mdl-spinner__gap-patch .mdl-spinner__circle{width:1000%;left:-450%}.mdl-spinner__circle-clipper{display:inline-block;position:relative;width:50%;height:100%;overflow:hidden;border-color:inherit}.mdl-spinner__circle-clipper .mdl-spinner__circle{width:200%}.mdl-spinner__circle{box-sizing:border-box;height:100%;border-width:3px;border-style:solid;border-color:inherit;border-bottom-color:transparent!important;border-radius:50%;-webkit-animation:none;animation:none;position:absolute;top:0;right:0;bottom:0;left:0}.mdl-spinner__left .mdl-spinner__circle{border-right-color:transparent!important;-webkit-transform:rotate(129deg);-ms-transform:rotate(129deg);transform:rotate(129deg)}.mdl-spinner.is-active .mdl-spinner__left .mdl-spinner__circle{-webkit-animation:mdl-spinner__left-spin 1333ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__left-spin 1333ms cubic-bezier(.4,0,.2,1)infinite both}.mdl-spinner__right .mdl-spinner__circle{left:-100%;border-left-color:transparent!important;-webkit-transform:rotate(-129deg);-ms-transform:rotate(-129deg);transform:rotate(-129deg)}.mdl-spinner.is-active .mdl-spinner__right .mdl-spinner__circle{-webkit-animation:mdl-spinner__right-spin 1333ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__right-spin 1333ms cubic-bezier(.4,0,.2,1)infinite both}@-webkit-keyframes mdl-spinner__left-spin{from{-webkit-transform:rotate(130deg);transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg);transform:rotate(130deg)}}@keyframes mdl-spinner__left-spin{from{-webkit-transform:rotate(130deg);transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg);transform:rotate(130deg)}}@-webkit-keyframes mdl-spinner__right-spin{from{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}}@keyframes mdl-spinner__right-spin{from{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}}.mdl-switch{position:relative;z-index:1;vertical-align:middle;display:inline-block;box-sizing:border-box;width:100%;height:24px;margin:0;padding:0;overflow:visible;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mdl-switch.is-upgraded{padding-left:28px}.mdl-switch__input{line-height:24px}.mdl-switch.is-upgraded .mdl-switch__input{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-switch__track{background:rgba(0,0,0,.26);position:absolute;left:0;top:5px;height:14px;width:36px;border-radius:14px;cursor:pointer}.mdl-switch.is-checked .mdl-switch__track{background:rgba(96,125,139,.5)}.mdl-switch.is-disabled .mdl-switch__track{background:rgba(0,0,0,.12);cursor:auto}.mdl-switch__thumb{background:#fafafa;position:absolute;left:0;top:2px;height:20px;width:20px;border-radius:50%;cursor:pointer;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:left;transition-property:left}.mdl-switch.is-checked .mdl-switch__thumb{background:rgb(96,125,139);left:16px;box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12)}.mdl-switch.is-disabled .mdl-switch__thumb{background:#bdbdbd;cursor:auto}.mdl-switch__focus-helper{position:absolute;top:50%;left:50%;-webkit-transform:translate(-4px,-4px);-ms-transform:translate(-4px,-4px);transform:translate(-4px,-4px);display:inline-block;box-sizing:border-box;width:8px;height:8px;border-radius:50%;background-color:transparent}.mdl-switch.is-focused .mdl-switch__focus-helper{box-shadow:0 0 0 20px rgba(0,0,0,.1);background-color:rgba(0,0,0,.1)}.mdl-switch.is-focused.is-checked .mdl-switch__focus-helper{box-shadow:0 0 0 20px rgba(96,125,139,.26);background-color:rgba(96,125,139,.26)}.mdl-switch__label{position:relative;cursor:pointer;font-size:16px;line-height:24px;margin:0;left:24px}.mdl-switch.is-disabled .mdl-switch__label{color:#bdbdbd;cursor:auto}.mdl-switch__ripple-container{position:absolute;z-index:2;top:-12px;left:-14px;box-sizing:border-box;width:48px;height:48px;border-radius:50%;cursor:pointer;overflow:hidden;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000);-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-timing-function:step-end;transition-timing-function:step-end;-webkit-transition-property:left;transition-property:left}.mdl-switch__ripple-container .mdl-ripple{background:rgb(96,125,139)}.mdl-switch.is-disabled .mdl-switch__ripple-container{cursor:auto}.mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple{background:0 0}.mdl-switch.is-checked .mdl-switch__ripple-container{cursor:auto;left:2px}.mdl-tabs{display:block;width:100%}.mdl-tabs__tab-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;height:48px;padding:0;margin:0;border-bottom:1px solid #e0e0e0}.mdl-tabs__tab{margin:0;border:none;padding:0 24px;float:left;position:relative;display:block;color:red;text-decoration:none;height:48px;line-height:48px;text-align:center;font-weight:500;font-size:14px;text-transform:uppercase;color:rgba(0,0,0,.54);overflow:hidden}.mdl-tabs.is-upgraded .mdl-tabs__tab.is-active{color:rgba(0,0,0,.87)}.mdl-tabs.is-upgraded .mdl-tabs__tab.is-active:after{height:2px;width:100%;display:block;content:" ";bottom:0;left:0;position:absolute;background:rgb(96,125,139);-webkit-animation:border-expand .2s cubic-bezier(.4,0,.4,1).01s alternate forwards;animation:border-expand .2s cubic-bezier(.4,0,.4,1).01s alternate forwards;-webkit-transition:all 1s cubic-bezier(.4,0,1,1);transition:all 1s cubic-bezier(.4,0,1,1)}.mdl-tabs__tab .mdl-tabs__ripple-container{display:block;position:absolute;height:100%;width:100%;left:0;top:0;z-index:1;overflow:hidden}.mdl-tabs__tab .mdl-tabs__ripple-container .mdl-ripple{background:rgb(96,125,139)}.mdl-tabs__panel{display:block}.mdl-tabs.is-upgraded .mdl-tabs__panel{display:none}.mdl-tabs.is-upgraded .mdl-tabs__panel.is-active{display:block}@-webkit-keyframes border-expand{0%{opacity:0;width:0}100%{opacity:1;width:100%}}@keyframes border-expand{0%{opacity:0;width:0}100%{opacity:1;width:100%}}.mdl-textfield{position:relative;font-size:16px;display:inline-block;box-sizing:border-box;width:300px;max-width:100%;margin:0;padding:20px 0}.mdl-textfield .mdl-button{position:absolute;bottom:20px}.mdl-textfield--align-right{text-align:right}.mdl-textfield--full-width{width:100%}.mdl-textfield--expandable{min-width:32px;width:auto;min-height:32px}.mdl-textfield__input{border:none;border-bottom:1px solid rgba(0,0,0,.12);display:inline-block;font-size:16px;margin:0;padding:4px 0;width:100%;background:16px;text-align:left;color:inherit}.mdl-textfield.is-focused .mdl-textfield__input{outline:none}.mdl-textfield.is-invalid .mdl-textfield__input{border-color:#de3226;box-shadow:none}.mdl-textfield.is-disabled .mdl-textfield__input{background-color:transparent;border-bottom:1px dotted rgba(0,0,0,.12)}.mdl-textfield__label{bottom:0;color:rgba(0,0,0,.26);font-size:16px;left:0;right:0;pointer-events:none;position:absolute;top:24px;width:100%;overflow:hidden;white-space:nowrap;text-align:left}.mdl-textfield.is-dirty .mdl-textfield__label{visibility:hidden}.mdl-textfield--floating-label .mdl-textfield__label{-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-textfield--floating-label.is-focused .mdl-textfield__label,.mdl-textfield--floating-label.is-dirty .mdl-textfield__label{color:rgb(96,125,139);font-size:12px;top:4px;visibility:visible}.mdl-textfield--floating-label.is-focused .mdl-textfield__expandable-holder .mdl-textfield__label,.mdl-textfield--floating-label.is-dirty .mdl-textfield__expandable-holder .mdl-textfield__label{top:-16px}.mdl-textfield--floating-label.is-invalid .mdl-textfield__label{color:#de3226;font-size:12px}.mdl-textfield__label:after{background-color:rgb(96,125,139);bottom:20px;content:'';height:2px;left:45%;position:absolute;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);visibility:hidden;width:10px}.mdl-textfield.is-focused .mdl-textfield__label:after{left:0;visibility:visible;width:100%}.mdl-textfield.is-invalid .mdl-textfield__label:after{background-color:#de3226}.mdl-textfield__error{color:#de3226;position:absolute;font-size:12px;margin-top:3px;visibility:hidden}.mdl-textfield.is-invalid .mdl-textfield__error{visibility:visible}.mdl-textfield__expandable-holder{display:inline-block;position:relative;margin-left:32px;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);display:inline-block;max-width:.1px}.mdl-textfield.is-focused .mdl-textfield__expandable-holder,.mdl-textfield.is-dirty .mdl-textfield__expandable-holder{max-width:600px}.mdl-textfield__expandable-holder .mdl-textfield__label:after{bottom:0}.mdl-tooltip{-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:top center;-ms-transform-origin:top center;transform-origin:top center;will-change:transform;z-index:999;background:rgba(97,97,97,.9);border-radius:2px;color:#fff;display:inline-block;font-size:10px;font-weight:500;line-height:14px;max-width:170px;position:fixed;top:-500px;left:-500px;padding:8px;text-align:center}.mdl-tooltip.is-active{-webkit-animation:pulse 200ms cubic-bezier(0,0,.2,1)forwards;animation:pulse 200ms cubic-bezier(0,0,.2,1)forwards}.mdl-tooltip--large{line-height:14px;font-size:14px;padding:16px}@-webkit-keyframes pulse{0%{-webkit-transform:scale(0);transform:scale(0);opacity:0}50%{-webkit-transform:scale(.99);transform:scale(.99)}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1;visibility:visible}}@keyframes pulse{0%{-webkit-transform:scale(0);transform:scale(0);opacity:0}50%{-webkit-transform:scale(.99);transform:scale(.99)}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1;visibility:visible}}.mdl-shadow--2dp{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-shadow--3dp{box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12)}.mdl-shadow--4dp{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2)}.mdl-shadow--6dp{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.2)}.mdl-shadow--8dp{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.2)}.mdl-shadow--16dp{box-shadow:0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.2)}.mdl-grid{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;margin:0 auto;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.mdl-grid.mdl-grid--no-spacing{padding:0}.mdl-cell{box-sizing:border-box}.mdl-cell--top{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start}.mdl-cell--middle{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.mdl-cell--bottom{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end}.mdl-cell--stretch{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch}.mdl-grid.mdl-grid--no-spacing>.mdl-cell{margin:0}@media (max-width:479px){.mdl-grid{padding:8px}.mdl-cell{margin:8px;width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell{width:100%}.mdl-cell--hide-phone{display:none!important}.mdl-cell--1-col{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col{width:25%}.mdl-cell--1-col-phone.mdl-cell--1-col-phone{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col-phone.mdl-cell--1-col-phone{width:25%}.mdl-cell--2-col{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col{width:50%}.mdl-cell--2-col-phone.mdl-cell--2-col-phone{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col-phone.mdl-cell--2-col-phone{width:50%}.mdl-cell--3-col{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col{width:75%}.mdl-cell--3-col-phone.mdl-cell--3-col-phone{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col-phone.mdl-cell--3-col-phone{width:75%}.mdl-cell--4-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col{width:100%}.mdl-cell--4-col-phone.mdl-cell--4-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col-phone.mdl-cell--4-col-phone{width:100%}.mdl-cell--5-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col{width:100%}.mdl-cell--5-col-phone.mdl-cell--5-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col-phone.mdl-cell--5-col-phone{width:100%}.mdl-cell--6-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col{width:100%}.mdl-cell--6-col-phone.mdl-cell--6-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col-phone.mdl-cell--6-col-phone{width:100%}.mdl-cell--7-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col{width:100%}.mdl-cell--7-col-phone.mdl-cell--7-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col-phone.mdl-cell--7-col-phone{width:100%}.mdl-cell--8-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col{width:100%}.mdl-cell--8-col-phone.mdl-cell--8-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col-phone.mdl-cell--8-col-phone{width:100%}.mdl-cell--9-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col{width:100%}.mdl-cell--9-col-phone.mdl-cell--9-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col-phone.mdl-cell--9-col-phone{width:100%}.mdl-cell--10-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col{width:100%}.mdl-cell--10-col-phone.mdl-cell--10-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col-phone.mdl-cell--10-col-phone{width:100%}.mdl-cell--11-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col{width:100%}.mdl-cell--11-col-phone.mdl-cell--11-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col-phone.mdl-cell--11-col-phone{width:100%}.mdl-cell--12-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col{width:100%}.mdl-cell--12-col-phone.mdl-cell--12-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col-phone.mdl-cell--12-col-phone{width:100%}}@media (min-width:480px) and (max-width:839px){.mdl-grid{padding:8px}.mdl-cell{margin:8px;width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell{width:50%}.mdl-cell--hide-tablet{display:none!important}.mdl-cell--1-col{width:calc(12.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col{width:12.5%}.mdl-cell--1-col-tablet.mdl-cell--1-col-tablet{width:calc(12.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col-tablet.mdl-cell--1-col-tablet{width:12.5%}.mdl-cell--2-col{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col{width:25%}.mdl-cell--2-col-tablet.mdl-cell--2-col-tablet{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col-tablet.mdl-cell--2-col-tablet{width:25%}.mdl-cell--3-col{width:calc(37.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col{width:37.5%}.mdl-cell--3-col-tablet.mdl-cell--3-col-tablet{width:calc(37.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col-tablet.mdl-cell--3-col-tablet{width:37.5%}.mdl-cell--4-col{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col{width:50%}.mdl-cell--4-col-tablet.mdl-cell--4-col-tablet{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col-tablet.mdl-cell--4-col-tablet{width:50%}.mdl-cell--5-col{width:calc(62.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col{width:62.5%}.mdl-cell--5-col-tablet.mdl-cell--5-col-tablet{width:calc(62.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col-tablet.mdl-cell--5-col-tablet{width:62.5%}.mdl-cell--6-col{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col{width:75%}.mdl-cell--6-col-tablet.mdl-cell--6-col-tablet{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col-tablet.mdl-cell--6-col-tablet{width:75%}.mdl-cell--7-col{width:calc(87.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col{width:87.5%}.mdl-cell--7-col-tablet.mdl-cell--7-col-tablet{width:calc(87.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col-tablet.mdl-cell--7-col-tablet{width:87.5%}.mdl-cell--8-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col{width:100%}.mdl-cell--8-col-tablet.mdl-cell--8-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col-tablet.mdl-cell--8-col-tablet{width:100%}.mdl-cell--9-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col{width:100%}.mdl-cell--9-col-tablet.mdl-cell--9-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col-tablet.mdl-cell--9-col-tablet{width:100%}.mdl-cell--10-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col{width:100%}.mdl-cell--10-col-tablet.mdl-cell--10-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col-tablet.mdl-cell--10-col-tablet{width:100%}.mdl-cell--11-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col{width:100%}.mdl-cell--11-col-tablet.mdl-cell--11-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col-tablet.mdl-cell--11-col-tablet{width:100%}.mdl-cell--12-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col{width:100%}.mdl-cell--12-col-tablet.mdl-cell--12-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col-tablet.mdl-cell--12-col-tablet{width:100%}}@media (min-width:840px){.mdl-grid{padding:8px}.mdl-cell{margin:8px;width:calc(33.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell{width:33.3333333333%}.mdl-cell--hide-desktop{display:none!important}.mdl-cell--1-col{width:calc(8.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col{width:8.3333333333%}.mdl-cell--1-col-desktop.mdl-cell--1-col-desktop{width:calc(8.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col-desktop.mdl-cell--1-col-desktop{width:8.3333333333%}.mdl-cell--2-col{width:calc(16.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col{width:16.6666666667%}.mdl-cell--2-col-desktop.mdl-cell--2-col-desktop{width:calc(16.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col-desktop.mdl-cell--2-col-desktop{width:16.6666666667%}.mdl-cell--3-col{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col{width:25%}.mdl-cell--3-col-desktop.mdl-cell--3-col-desktop{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col-desktop.mdl-cell--3-col-desktop{width:25%}.mdl-cell--4-col{width:calc(33.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col{width:33.3333333333%}.mdl-cell--4-col-desktop.mdl-cell--4-col-desktop{width:calc(33.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col-desktop.mdl-cell--4-col-desktop{width:33.3333333333%}.mdl-cell--5-col{width:calc(41.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col{width:41.6666666667%}.mdl-cell--5-col-desktop.mdl-cell--5-col-desktop{width:calc(41.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col-desktop.mdl-cell--5-col-desktop{width:41.6666666667%}.mdl-cell--6-col{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col{width:50%}.mdl-cell--6-col-desktop.mdl-cell--6-col-desktop{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col-desktop.mdl-cell--6-col-desktop{width:50%}.mdl-cell--7-col{width:calc(58.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col{width:58.3333333333%}.mdl-cell--7-col-desktop.mdl-cell--7-col-desktop{width:calc(58.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col-desktop.mdl-cell--7-col-desktop{width:58.3333333333%}.mdl-cell--8-col{width:calc(66.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col{width:66.6666666667%}.mdl-cell--8-col-desktop.mdl-cell--8-col-desktop{width:calc(66.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col-desktop.mdl-cell--8-col-desktop{width:66.6666666667%}.mdl-cell--9-col{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col{width:75%}.mdl-cell--9-col-desktop.mdl-cell--9-col-desktop{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col-desktop.mdl-cell--9-col-desktop{width:75%}.mdl-cell--10-col{width:calc(83.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col{width:83.3333333333%}.mdl-cell--10-col-desktop.mdl-cell--10-col-desktop{width:calc(83.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col-desktop.mdl-cell--10-col-desktop{width:83.3333333333%}.mdl-cell--11-col{width:calc(91.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col{width:91.6666666667%}.mdl-cell--11-col-desktop.mdl-cell--11-col-desktop{width:calc(91.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col-desktop.mdl-cell--11-col-desktop{width:91.6666666667%}.mdl-cell--12-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col{width:100%}.mdl-cell--12-col-desktop.mdl-cell--12-col-desktop{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col-desktop.mdl-cell--12-col-desktop{width:100%}}body{margin:0}.styleguide-demo h1{margin:48px 24px 0}.styleguide-demo h1:after{content:'';display:block;width:100%;border-bottom:1px solid rgba(0,0,0,.5);margin-top:24px}.styleguide-demo{opacity:0;-webkit-transition:opacity .6s ease;transition:opacity .6s ease}.styleguide-masthead{height:256px;background:#212121;padding:115px 16px 0}.styleguide-container{position:relative;max-width:960px;width:100%}.styleguide-title{color:#fff;bottom:auto;position:relative;font-size:56px;font-weight:300;line-height:1;letter-spacing:-.02em}.styleguide-title:after{border-bottom:0}.styleguide-title span{font-weight:300}.mdl-styleguide .mdl-layout__drawer .mdl-navigation__link{padding:10px 24px}.demosLoaded .styleguide-demo{opacity:1}iframe{display:block;width:100%;border:none}iframe.heightSet{overflow:hidden}.demo-wrapper{margin:24px}.demo-wrapper iframe{border:1px solid rgba(0,0,0,.5)} \ No newline at end of file +@charset "UTF-8";html{color:rgba(0,0,0,.87)}::-moz-selection{background:#b3d4fc;text-shadow:none}::selection{background:#b3d4fc;text-shadow:none}hr{display:block;height:1px;border:0;border-top:1px solid #ccc;margin:1em 0;padding:0}audio,canvas,img,svg,video{vertical-align:middle}fieldset{border:0;margin:0;padding:0}textarea{resize:vertical}.browsehappy{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}@media print{*,*:before,*:after{background:transparent!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href)")"}abbr[title]:after{content:" (" attr(title)")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}a,.mdl-accordion,.mdl-button,.mdl-card,.mdl-checkbox,.mdl-dropdown-menu,.mdl-icon-toggle,.mdl-item,.mdl-radio,.mdl-slider,.mdl-switch,.mdl-tabs__tab{-webkit-tap-highlight-color:transparent;-webkit-tap-highlight-color:rgba(255,255,255,0)}html{width:100%;height:100%;-ms-touch-action:manipulation;touch-action:manipulation}body{width:100%;min-height:100%}main{display:block}*[hidden]{display:none!important}html,body{font-family:"Helvetica","Arial",sans-serif;font-size:14px;font-weight:400;line-height:20px}h1,h2,h3,h4,h5,h6,p{padding:0}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;line-height:1.35;letter-spacing:-.02em;opacity:.54;font-size:.6em}h1{font-size:56px;line-height:1.35;letter-spacing:-.02em;margin:24px 0}h1,h2{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400}h2{font-size:45px;line-height:48px}h2,h3{margin:24px 0}h3{font-size:34px;line-height:40px}h3,h4{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400}h4{font-size:24px;line-height:32px;-moz-osx-font-smoothing:grayscale;margin:24px 0 16px}h5{font-size:20px;font-weight:500;line-height:1;letter-spacing:.02em}h5,h6{font-family:"Roboto","Helvetica","Arial",sans-serif;margin:24px 0 16px}h6{font-size:16px;letter-spacing:.04em}h6,p{font-weight:400;line-height:24px}p{font-size:14px;letter-spacing:0;margin:0 0 16px}a{color:rgb(83,109,254);font-weight:500}blockquote{font-family:"Roboto","Helvetica","Arial",sans-serif;position:relative;font-size:24px;font-weight:300;font-style:italic;line-height:1.35;letter-spacing:.08em}blockquote:before{position:absolute;left:-.5em;content:'“'}blockquote:after{content:'”';margin-left:-.05em}mark{background-color:#f4ff81}dt{font-weight:700}address{font-size:12px;line-height:1;font-style:normal}address,ul,ol{font-weight:400;letter-spacing:0}ul,ol{font-size:14px;line-height:24px}.mdl-typography--display-4,.mdl-typography--display-4-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:112px;font-weight:300;line-height:1;letter-spacing:-.04em}.mdl-typography--display-4-color-contrast{opacity:.54}.mdl-typography--display-3,.mdl-typography--display-3-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:56px;font-weight:400;line-height:1.35;letter-spacing:-.02em}.mdl-typography--display-3-color-contrast{opacity:.54}.mdl-typography--display-2,.mdl-typography--display-2-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:45px;font-weight:400;line-height:48px}.mdl-typography--display-2-color-contrast{opacity:.54}.mdl-typography--display-1,.mdl-typography--display-1-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:34px;font-weight:400;line-height:40px}.mdl-typography--display-1-color-contrast{opacity:.54}.mdl-typography--headline,.mdl-typography--headline-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:24px;font-weight:400;line-height:32px;-moz-osx-font-smoothing:grayscale}.mdl-typography--headline-color-contrast{opacity:.87}.mdl-typography--title,.mdl-typography--title-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:20px;font-weight:500;line-height:1;letter-spacing:.02em}.mdl-typography--title-color-contrast{opacity:.87}.mdl-typography--subhead,.mdl-typography--subhead-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:16px;font-weight:400;line-height:24px;letter-spacing:.04em}.mdl-typography--subhead-color-contrast{opacity:.87}.mdl-typography--body-2,.mdl-typography--body-2-color-contrast{font-size:14px;font-weight:700;line-height:24px;letter-spacing:0}.mdl-typography--body-2-color-contrast{opacity:.87}.mdl-typography--body-1,.mdl-typography--body-1-color-contrast{font-size:14px;font-weight:400;line-height:24px;letter-spacing:0}.mdl-typography--body-1-color-contrast{opacity:.87}.mdl-typography--body-2-force-preferred-font,.mdl-typography--body-2-force-preferred-font-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:14px;font-weight:500;line-height:24px;letter-spacing:0}.mdl-typography--body-2-force-preferred-font-color-contrast{opacity:.87}.mdl-typography--body-1-force-preferred-font,.mdl-typography--body-1-force-preferred-font-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:14px;font-weight:400;line-height:24px;letter-spacing:0}.mdl-typography--body-1-force-preferred-font-color-contrast{opacity:.87}.mdl-typography--caption,.mdl-typography--caption-force-preferred-font{font-size:12px;font-weight:400;line-height:1;letter-spacing:0}.mdl-typography--caption-force-preferred-font{font-family:"Roboto","Helvetica","Arial",sans-serif}.mdl-typography--caption-color-contrast,.mdl-typography--caption-force-preferred-font-color-contrast{font-size:12px;font-weight:400;line-height:1;letter-spacing:0;opacity:.54}.mdl-typography--caption-force-preferred-font-color-contrast,.mdl-typography--menu{font-family:"Roboto","Helvetica","Arial",sans-serif}.mdl-typography--menu{font-size:14px;font-weight:500;line-height:1;letter-spacing:0}.mdl-typography--menu-color-contrast{opacity:.87}.mdl-typography--menu-color-contrast,.mdl-typography--button,.mdl-typography--button-color-contrast{font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:14px;font-weight:500;line-height:1;letter-spacing:0}.mdl-typography--button,.mdl-typography--button-color-contrast{text-transform:uppercase}.mdl-typography--button-color-contrast{opacity:.87}.mdl-typography--text-left{text-align:left}.mdl-typography--text-right{text-align:right}.mdl-typography--text-center{text-align:center}.mdl-typography--text-justify{text-align:justify}.mdl-typography--text-nowrap{white-space:nowrap}.mdl-typography--text-lowercase{text-transform:lowercase}.mdl-typography--text-uppercase{text-transform:uppercase}.mdl-typography--text-capitalize{text-transform:capitalize}.mdl-typography--font-thin{font-weight:200!important}.mdl-typography--font-light{font-weight:300!important}.mdl-typography--font-regular{font-weight:400!important}.mdl-typography--font-medium{font-weight:500!important}.mdl-typography--font-bold{font-weight:700!important}.mdl-typography--font-black{font-weight:900!important}.mdl-color-text--red{color:#f44336 !important}.mdl-color--red{background-color:#f44336 !important}.mdl-color-text--red-50{color:#ffebee !important}.mdl-color--red-50{background-color:#ffebee !important}.mdl-color-text--red-100{color:#ffcdd2 !important}.mdl-color--red-100{background-color:#ffcdd2 !important}.mdl-color-text--red-200{color:#ef9a9a !important}.mdl-color--red-200{background-color:#ef9a9a !important}.mdl-color-text--red-300{color:#e57373 !important}.mdl-color--red-300{background-color:#e57373 !important}.mdl-color-text--red-400{color:#ef5350 !important}.mdl-color--red-400{background-color:#ef5350 !important}.mdl-color-text--red-500{color:#f44336 !important}.mdl-color--red-500{background-color:#f44336 !important}.mdl-color-text--red-600{color:#e53935 !important}.mdl-color--red-600{background-color:#e53935 !important}.mdl-color-text--red-700{color:#d32f2f !important}.mdl-color--red-700{background-color:#d32f2f !important}.mdl-color-text--red-800{color:#c62828 !important}.mdl-color--red-800{background-color:#c62828 !important}.mdl-color-text--red-900{color:#b71c1c !important}.mdl-color--red-900{background-color:#b71c1c !important}.mdl-color-text--red-A100{color:#ff8a80 !important}.mdl-color--red-A100{background-color:#ff8a80 !important}.mdl-color-text--red-A200{color:#ff5252 !important}.mdl-color--red-A200{background-color:#ff5252 !important}.mdl-color-text--red-A400{color:#ff1744 !important}.mdl-color--red-A400{background-color:#ff1744 !important}.mdl-color-text--red-A700{color:#d50000 !important}.mdl-color--red-A700{background-color:#d50000 !important}.mdl-color-text--pink{color:#e91e63 !important}.mdl-color--pink{background-color:#e91e63 !important}.mdl-color-text--pink-50{color:#fce4ec !important}.mdl-color--pink-50{background-color:#fce4ec !important}.mdl-color-text--pink-100{color:#f8bbd0 !important}.mdl-color--pink-100{background-color:#f8bbd0 !important}.mdl-color-text--pink-200{color:#f48fb1 !important}.mdl-color--pink-200{background-color:#f48fb1 !important}.mdl-color-text--pink-300{color:#f06292 !important}.mdl-color--pink-300{background-color:#f06292 !important}.mdl-color-text--pink-400{color:#ec407a !important}.mdl-color--pink-400{background-color:#ec407a !important}.mdl-color-text--pink-500{color:#e91e63 !important}.mdl-color--pink-500{background-color:#e91e63 !important}.mdl-color-text--pink-600{color:#d81b60 !important}.mdl-color--pink-600{background-color:#d81b60 !important}.mdl-color-text--pink-700{color:#c2185b !important}.mdl-color--pink-700{background-color:#c2185b !important}.mdl-color-text--pink-800{color:#ad1457 !important}.mdl-color--pink-800{background-color:#ad1457 !important}.mdl-color-text--pink-900{color:#880e4f !important}.mdl-color--pink-900{background-color:#880e4f !important}.mdl-color-text--pink-A100{color:#ff80ab !important}.mdl-color--pink-A100{background-color:#ff80ab !important}.mdl-color-text--pink-A200{color:#ff4081 !important}.mdl-color--pink-A200{background-color:#ff4081 !important}.mdl-color-text--pink-A400{color:#f50057 !important}.mdl-color--pink-A400{background-color:#f50057 !important}.mdl-color-text--pink-A700{color:#c51162 !important}.mdl-color--pink-A700{background-color:#c51162 !important}.mdl-color-text--purple{color:#9c27b0 !important}.mdl-color--purple{background-color:#9c27b0 !important}.mdl-color-text--purple-50{color:#f3e5f5 !important}.mdl-color--purple-50{background-color:#f3e5f5 !important}.mdl-color-text--purple-100{color:#e1bee7 !important}.mdl-color--purple-100{background-color:#e1bee7 !important}.mdl-color-text--purple-200{color:#ce93d8 !important}.mdl-color--purple-200{background-color:#ce93d8 !important}.mdl-color-text--purple-300{color:#ba68c8 !important}.mdl-color--purple-300{background-color:#ba68c8 !important}.mdl-color-text--purple-400{color:#ab47bc !important}.mdl-color--purple-400{background-color:#ab47bc !important}.mdl-color-text--purple-500{color:#9c27b0 !important}.mdl-color--purple-500{background-color:#9c27b0 !important}.mdl-color-text--purple-600{color:#8e24aa !important}.mdl-color--purple-600{background-color:#8e24aa !important}.mdl-color-text--purple-700{color:#7b1fa2 !important}.mdl-color--purple-700{background-color:#7b1fa2 !important}.mdl-color-text--purple-800{color:#6a1b9a !important}.mdl-color--purple-800{background-color:#6a1b9a !important}.mdl-color-text--purple-900{color:#4a148c !important}.mdl-color--purple-900{background-color:#4a148c !important}.mdl-color-text--purple-A100{color:#ea80fc !important}.mdl-color--purple-A100{background-color:#ea80fc !important}.mdl-color-text--purple-A200{color:#e040fb !important}.mdl-color--purple-A200{background-color:#e040fb !important}.mdl-color-text--purple-A400{color:#d500f9 !important}.mdl-color--purple-A400{background-color:#d500f9 !important}.mdl-color-text--purple-A700{color:#a0f !important}.mdl-color--purple-A700{background-color:#a0f !important}.mdl-color-text--deep-purple{color:#673ab7 !important}.mdl-color--deep-purple{background-color:#673ab7 !important}.mdl-color-text--deep-purple-50{color:#ede7f6 !important}.mdl-color--deep-purple-50{background-color:#ede7f6 !important}.mdl-color-text--deep-purple-100{color:#d1c4e9 !important}.mdl-color--deep-purple-100{background-color:#d1c4e9 !important}.mdl-color-text--deep-purple-200{color:#b39ddb !important}.mdl-color--deep-purple-200{background-color:#b39ddb !important}.mdl-color-text--deep-purple-300{color:#9575cd !important}.mdl-color--deep-purple-300{background-color:#9575cd !important}.mdl-color-text--deep-purple-400{color:#7e57c2 !important}.mdl-color--deep-purple-400{background-color:#7e57c2 !important}.mdl-color-text--deep-purple-500{color:#673ab7 !important}.mdl-color--deep-purple-500{background-color:#673ab7 !important}.mdl-color-text--deep-purple-600{color:#5e35b1 !important}.mdl-color--deep-purple-600{background-color:#5e35b1 !important}.mdl-color-text--deep-purple-700{color:#512da8 !important}.mdl-color--deep-purple-700{background-color:#512da8 !important}.mdl-color-text--deep-purple-800{color:#4527a0 !important}.mdl-color--deep-purple-800{background-color:#4527a0 !important}.mdl-color-text--deep-purple-900{color:#311b92 !important}.mdl-color--deep-purple-900{background-color:#311b92 !important}.mdl-color-text--deep-purple-A100{color:#b388ff !important}.mdl-color--deep-purple-A100{background-color:#b388ff !important}.mdl-color-text--deep-purple-A200{color:#7c4dff !important}.mdl-color--deep-purple-A200{background-color:#7c4dff !important}.mdl-color-text--deep-purple-A400{color:#651fff !important}.mdl-color--deep-purple-A400{background-color:#651fff !important}.mdl-color-text--deep-purple-A700{color:#6200ea !important}.mdl-color--deep-purple-A700{background-color:#6200ea !important}.mdl-color-text--indigo{color:#3f51b5 !important}.mdl-color--indigo{background-color:#3f51b5 !important}.mdl-color-text--indigo-50{color:#e8eaf6 !important}.mdl-color--indigo-50{background-color:#e8eaf6 !important}.mdl-color-text--indigo-100{color:#c5cae9 !important}.mdl-color--indigo-100{background-color:#c5cae9 !important}.mdl-color-text--indigo-200{color:#9fa8da !important}.mdl-color--indigo-200{background-color:#9fa8da !important}.mdl-color-text--indigo-300{color:#7986cb !important}.mdl-color--indigo-300{background-color:#7986cb !important}.mdl-color-text--indigo-400{color:#5c6bc0 !important}.mdl-color--indigo-400{background-color:#5c6bc0 !important}.mdl-color-text--indigo-500{color:#3f51b5 !important}.mdl-color--indigo-500{background-color:#3f51b5 !important}.mdl-color-text--indigo-600{color:#3949ab !important}.mdl-color--indigo-600{background-color:#3949ab !important}.mdl-color-text--indigo-700{color:#303f9f !important}.mdl-color--indigo-700{background-color:#303f9f !important}.mdl-color-text--indigo-800{color:#283593 !important}.mdl-color--indigo-800{background-color:#283593 !important}.mdl-color-text--indigo-900{color:#1a237e !important}.mdl-color--indigo-900{background-color:#1a237e !important}.mdl-color-text--indigo-A100{color:#8c9eff !important}.mdl-color--indigo-A100{background-color:#8c9eff !important}.mdl-color-text--indigo-A200{color:#536dfe !important}.mdl-color--indigo-A200{background-color:#536dfe !important}.mdl-color-text--indigo-A400{color:#3d5afe !important}.mdl-color--indigo-A400{background-color:#3d5afe !important}.mdl-color-text--indigo-A700{color:#304ffe !important}.mdl-color--indigo-A700{background-color:#304ffe !important}.mdl-color-text--blue{color:#2196f3 !important}.mdl-color--blue{background-color:#2196f3 !important}.mdl-color-text--blue-50{color:#e3f2fd !important}.mdl-color--blue-50{background-color:#e3f2fd !important}.mdl-color-text--blue-100{color:#bbdefb !important}.mdl-color--blue-100{background-color:#bbdefb !important}.mdl-color-text--blue-200{color:#90caf9 !important}.mdl-color--blue-200{background-color:#90caf9 !important}.mdl-color-text--blue-300{color:#64b5f6 !important}.mdl-color--blue-300{background-color:#64b5f6 !important}.mdl-color-text--blue-400{color:#42a5f5 !important}.mdl-color--blue-400{background-color:#42a5f5 !important}.mdl-color-text--blue-500{color:#2196f3 !important}.mdl-color--blue-500{background-color:#2196f3 !important}.mdl-color-text--blue-600{color:#1e88e5 !important}.mdl-color--blue-600{background-color:#1e88e5 !important}.mdl-color-text--blue-700{color:#1976d2 !important}.mdl-color--blue-700{background-color:#1976d2 !important}.mdl-color-text--blue-800{color:#1565c0 !important}.mdl-color--blue-800{background-color:#1565c0 !important}.mdl-color-text--blue-900{color:#0d47a1 !important}.mdl-color--blue-900{background-color:#0d47a1 !important}.mdl-color-text--blue-A100{color:#82b1ff !important}.mdl-color--blue-A100{background-color:#82b1ff !important}.mdl-color-text--blue-A200{color:#448aff !important}.mdl-color--blue-A200{background-color:#448aff !important}.mdl-color-text--blue-A400{color:#2979ff !important}.mdl-color--blue-A400{background-color:#2979ff !important}.mdl-color-text--blue-A700{color:#2962ff !important}.mdl-color--blue-A700{background-color:#2962ff !important}.mdl-color-text--light-blue{color:#03a9f4 !important}.mdl-color--light-blue{background-color:#03a9f4 !important}.mdl-color-text--light-blue-50{color:#e1f5fe !important}.mdl-color--light-blue-50{background-color:#e1f5fe !important}.mdl-color-text--light-blue-100{color:#b3e5fc !important}.mdl-color--light-blue-100{background-color:#b3e5fc !important}.mdl-color-text--light-blue-200{color:#81d4fa !important}.mdl-color--light-blue-200{background-color:#81d4fa !important}.mdl-color-text--light-blue-300{color:#4fc3f7 !important}.mdl-color--light-blue-300{background-color:#4fc3f7 !important}.mdl-color-text--light-blue-400{color:#29b6f6 !important}.mdl-color--light-blue-400{background-color:#29b6f6 !important}.mdl-color-text--light-blue-500{color:#03a9f4 !important}.mdl-color--light-blue-500{background-color:#03a9f4 !important}.mdl-color-text--light-blue-600{color:#039be5 !important}.mdl-color--light-blue-600{background-color:#039be5 !important}.mdl-color-text--light-blue-700{color:#0288d1 !important}.mdl-color--light-blue-700{background-color:#0288d1 !important}.mdl-color-text--light-blue-800{color:#0277bd !important}.mdl-color--light-blue-800{background-color:#0277bd !important}.mdl-color-text--light-blue-900{color:#01579b !important}.mdl-color--light-blue-900{background-color:#01579b !important}.mdl-color-text--light-blue-A100{color:#80d8ff !important}.mdl-color--light-blue-A100{background-color:#80d8ff !important}.mdl-color-text--light-blue-A200{color:#40c4ff !important}.mdl-color--light-blue-A200{background-color:#40c4ff !important}.mdl-color-text--light-blue-A400{color:#00b0ff !important}.mdl-color--light-blue-A400{background-color:#00b0ff !important}.mdl-color-text--light-blue-A700{color:#0091ea !important}.mdl-color--light-blue-A700{background-color:#0091ea !important}.mdl-color-text--cyan{color:#00bcd4 !important}.mdl-color--cyan{background-color:#00bcd4 !important}.mdl-color-text--cyan-50{color:#e0f7fa !important}.mdl-color--cyan-50{background-color:#e0f7fa !important}.mdl-color-text--cyan-100{color:#b2ebf2 !important}.mdl-color--cyan-100{background-color:#b2ebf2 !important}.mdl-color-text--cyan-200{color:#80deea !important}.mdl-color--cyan-200{background-color:#80deea !important}.mdl-color-text--cyan-300{color:#4dd0e1 !important}.mdl-color--cyan-300{background-color:#4dd0e1 !important}.mdl-color-text--cyan-400{color:#26c6da !important}.mdl-color--cyan-400{background-color:#26c6da !important}.mdl-color-text--cyan-500{color:#00bcd4 !important}.mdl-color--cyan-500{background-color:#00bcd4 !important}.mdl-color-text--cyan-600{color:#00acc1 !important}.mdl-color--cyan-600{background-color:#00acc1 !important}.mdl-color-text--cyan-700{color:#0097a7 !important}.mdl-color--cyan-700{background-color:#0097a7 !important}.mdl-color-text--cyan-800{color:#00838f !important}.mdl-color--cyan-800{background-color:#00838f !important}.mdl-color-text--cyan-900{color:#006064 !important}.mdl-color--cyan-900{background-color:#006064 !important}.mdl-color-text--cyan-A100{color:#84ffff !important}.mdl-color--cyan-A100{background-color:#84ffff !important}.mdl-color-text--cyan-A200{color:#18ffff !important}.mdl-color--cyan-A200{background-color:#18ffff !important}.mdl-color-text--cyan-A400{color:#00e5ff !important}.mdl-color--cyan-A400{background-color:#00e5ff !important}.mdl-color-text--cyan-A700{color:#00b8d4 !important}.mdl-color--cyan-A700{background-color:#00b8d4 !important}.mdl-color-text--teal{color:#009688 !important}.mdl-color--teal{background-color:#009688 !important}.mdl-color-text--teal-50{color:#e0f2f1 !important}.mdl-color--teal-50{background-color:#e0f2f1 !important}.mdl-color-text--teal-100{color:#b2dfdb !important}.mdl-color--teal-100{background-color:#b2dfdb !important}.mdl-color-text--teal-200{color:#80cbc4 !important}.mdl-color--teal-200{background-color:#80cbc4 !important}.mdl-color-text--teal-300{color:#4db6ac !important}.mdl-color--teal-300{background-color:#4db6ac !important}.mdl-color-text--teal-400{color:#26a69a !important}.mdl-color--teal-400{background-color:#26a69a !important}.mdl-color-text--teal-500{color:#009688 !important}.mdl-color--teal-500{background-color:#009688 !important}.mdl-color-text--teal-600{color:#00897b !important}.mdl-color--teal-600{background-color:#00897b !important}.mdl-color-text--teal-700{color:#00796b !important}.mdl-color--teal-700{background-color:#00796b !important}.mdl-color-text--teal-800{color:#00695c !important}.mdl-color--teal-800{background-color:#00695c !important}.mdl-color-text--teal-900{color:#004d40 !important}.mdl-color--teal-900{background-color:#004d40 !important}.mdl-color-text--teal-A100{color:#a7ffeb !important}.mdl-color--teal-A100{background-color:#a7ffeb !important}.mdl-color-text--teal-A200{color:#64ffda !important}.mdl-color--teal-A200{background-color:#64ffda !important}.mdl-color-text--teal-A400{color:#1de9b6 !important}.mdl-color--teal-A400{background-color:#1de9b6 !important}.mdl-color-text--teal-A700{color:#00bfa5 !important}.mdl-color--teal-A700{background-color:#00bfa5 !important}.mdl-color-text--green{color:#4caf50 !important}.mdl-color--green{background-color:#4caf50 !important}.mdl-color-text--green-50{color:#e8f5e9 !important}.mdl-color--green-50{background-color:#e8f5e9 !important}.mdl-color-text--green-100{color:#c8e6c9 !important}.mdl-color--green-100{background-color:#c8e6c9 !important}.mdl-color-text--green-200{color:#a5d6a7 !important}.mdl-color--green-200{background-color:#a5d6a7 !important}.mdl-color-text--green-300{color:#81c784 !important}.mdl-color--green-300{background-color:#81c784 !important}.mdl-color-text--green-400{color:#66bb6a !important}.mdl-color--green-400{background-color:#66bb6a !important}.mdl-color-text--green-500{color:#4caf50 !important}.mdl-color--green-500{background-color:#4caf50 !important}.mdl-color-text--green-600{color:#43a047 !important}.mdl-color--green-600{background-color:#43a047 !important}.mdl-color-text--green-700{color:#388e3c !important}.mdl-color--green-700{background-color:#388e3c !important}.mdl-color-text--green-800{color:#2e7d32 !important}.mdl-color--green-800{background-color:#2e7d32 !important}.mdl-color-text--green-900{color:#1b5e20 !important}.mdl-color--green-900{background-color:#1b5e20 !important}.mdl-color-text--green-A100{color:#b9f6ca !important}.mdl-color--green-A100{background-color:#b9f6ca !important}.mdl-color-text--green-A200{color:#69f0ae !important}.mdl-color--green-A200{background-color:#69f0ae !important}.mdl-color-text--green-A400{color:#00e676 !important}.mdl-color--green-A400{background-color:#00e676 !important}.mdl-color-text--green-A700{color:#00c853 !important}.mdl-color--green-A700{background-color:#00c853 !important}.mdl-color-text--light-green{color:#8bc34a !important}.mdl-color--light-green{background-color:#8bc34a !important}.mdl-color-text--light-green-50{color:#f1f8e9 !important}.mdl-color--light-green-50{background-color:#f1f8e9 !important}.mdl-color-text--light-green-100{color:#dcedc8 !important}.mdl-color--light-green-100{background-color:#dcedc8 !important}.mdl-color-text--light-green-200{color:#c5e1a5 !important}.mdl-color--light-green-200{background-color:#c5e1a5 !important}.mdl-color-text--light-green-300{color:#aed581 !important}.mdl-color--light-green-300{background-color:#aed581 !important}.mdl-color-text--light-green-400{color:#9ccc65 !important}.mdl-color--light-green-400{background-color:#9ccc65 !important}.mdl-color-text--light-green-500{color:#8bc34a !important}.mdl-color--light-green-500{background-color:#8bc34a !important}.mdl-color-text--light-green-600{color:#7cb342 !important}.mdl-color--light-green-600{background-color:#7cb342 !important}.mdl-color-text--light-green-700{color:#689f38 !important}.mdl-color--light-green-700{background-color:#689f38 !important}.mdl-color-text--light-green-800{color:#558b2f !important}.mdl-color--light-green-800{background-color:#558b2f !important}.mdl-color-text--light-green-900{color:#33691e !important}.mdl-color--light-green-900{background-color:#33691e !important}.mdl-color-text--light-green-A100{color:#ccff90 !important}.mdl-color--light-green-A100{background-color:#ccff90 !important}.mdl-color-text--light-green-A200{color:#b2ff59 !important}.mdl-color--light-green-A200{background-color:#b2ff59 !important}.mdl-color-text--light-green-A400{color:#76ff03 !important}.mdl-color--light-green-A400{background-color:#76ff03 !important}.mdl-color-text--light-green-A700{color:#64dd17 !important}.mdl-color--light-green-A700{background-color:#64dd17 !important}.mdl-color-text--lime{color:#cddc39 !important}.mdl-color--lime{background-color:#cddc39 !important}.mdl-color-text--lime-50{color:#f9fbe7 !important}.mdl-color--lime-50{background-color:#f9fbe7 !important}.mdl-color-text--lime-100{color:#f0f4c3 !important}.mdl-color--lime-100{background-color:#f0f4c3 !important}.mdl-color-text--lime-200{color:#e6ee9c !important}.mdl-color--lime-200{background-color:#e6ee9c !important}.mdl-color-text--lime-300{color:#dce775 !important}.mdl-color--lime-300{background-color:#dce775 !important}.mdl-color-text--lime-400{color:#d4e157 !important}.mdl-color--lime-400{background-color:#d4e157 !important}.mdl-color-text--lime-500{color:#cddc39 !important}.mdl-color--lime-500{background-color:#cddc39 !important}.mdl-color-text--lime-600{color:#c0ca33 !important}.mdl-color--lime-600{background-color:#c0ca33 !important}.mdl-color-text--lime-700{color:#afb42b !important}.mdl-color--lime-700{background-color:#afb42b !important}.mdl-color-text--lime-800{color:#9e9d24 !important}.mdl-color--lime-800{background-color:#9e9d24 !important}.mdl-color-text--lime-900{color:#827717 !important}.mdl-color--lime-900{background-color:#827717 !important}.mdl-color-text--lime-A100{color:#f4ff81 !important}.mdl-color--lime-A100{background-color:#f4ff81 !important}.mdl-color-text--lime-A200{color:#eeff41 !important}.mdl-color--lime-A200{background-color:#eeff41 !important}.mdl-color-text--lime-A400{color:#c6ff00 !important}.mdl-color--lime-A400{background-color:#c6ff00 !important}.mdl-color-text--lime-A700{color:#aeea00 !important}.mdl-color--lime-A700{background-color:#aeea00 !important}.mdl-color-text--yellow{color:#ffeb3b !important}.mdl-color--yellow{background-color:#ffeb3b !important}.mdl-color-text--yellow-50{color:#fffde7 !important}.mdl-color--yellow-50{background-color:#fffde7 !important}.mdl-color-text--yellow-100{color:#fff9c4 !important}.mdl-color--yellow-100{background-color:#fff9c4 !important}.mdl-color-text--yellow-200{color:#fff59d !important}.mdl-color--yellow-200{background-color:#fff59d !important}.mdl-color-text--yellow-300{color:#fff176 !important}.mdl-color--yellow-300{background-color:#fff176 !important}.mdl-color-text--yellow-400{color:#ffee58 !important}.mdl-color--yellow-400{background-color:#ffee58 !important}.mdl-color-text--yellow-500{color:#ffeb3b !important}.mdl-color--yellow-500{background-color:#ffeb3b !important}.mdl-color-text--yellow-600{color:#fdd835 !important}.mdl-color--yellow-600{background-color:#fdd835 !important}.mdl-color-text--yellow-700{color:#fbc02d !important}.mdl-color--yellow-700{background-color:#fbc02d !important}.mdl-color-text--yellow-800{color:#f9a825 !important}.mdl-color--yellow-800{background-color:#f9a825 !important}.mdl-color-text--yellow-900{color:#f57f17 !important}.mdl-color--yellow-900{background-color:#f57f17 !important}.mdl-color-text--yellow-A100{color:#ffff8d !important}.mdl-color--yellow-A100{background-color:#ffff8d !important}.mdl-color-text--yellow-A200{color:#ff0 !important}.mdl-color--yellow-A200{background-color:#ff0 !important}.mdl-color-text--yellow-A400{color:#ffea00 !important}.mdl-color--yellow-A400{background-color:#ffea00 !important}.mdl-color-text--yellow-A700{color:#ffd600 !important}.mdl-color--yellow-A700{background-color:#ffd600 !important}.mdl-color-text--amber{color:#ffc107 !important}.mdl-color--amber{background-color:#ffc107 !important}.mdl-color-text--amber-50{color:#fff8e1 !important}.mdl-color--amber-50{background-color:#fff8e1 !important}.mdl-color-text--amber-100{color:#ffecb3 !important}.mdl-color--amber-100{background-color:#ffecb3 !important}.mdl-color-text--amber-200{color:#ffe082 !important}.mdl-color--amber-200{background-color:#ffe082 !important}.mdl-color-text--amber-300{color:#ffd54f !important}.mdl-color--amber-300{background-color:#ffd54f !important}.mdl-color-text--amber-400{color:#ffca28 !important}.mdl-color--amber-400{background-color:#ffca28 !important}.mdl-color-text--amber-500{color:#ffc107 !important}.mdl-color--amber-500{background-color:#ffc107 !important}.mdl-color-text--amber-600{color:#ffb300 !important}.mdl-color--amber-600{background-color:#ffb300 !important}.mdl-color-text--amber-700{color:#ffa000 !important}.mdl-color--amber-700{background-color:#ffa000 !important}.mdl-color-text--amber-800{color:#ff8f00 !important}.mdl-color--amber-800{background-color:#ff8f00 !important}.mdl-color-text--amber-900{color:#ff6f00 !important}.mdl-color--amber-900{background-color:#ff6f00 !important}.mdl-color-text--amber-A100{color:#ffe57f !important}.mdl-color--amber-A100{background-color:#ffe57f !important}.mdl-color-text--amber-A200{color:#ffd740 !important}.mdl-color--amber-A200{background-color:#ffd740 !important}.mdl-color-text--amber-A400{color:#ffc400 !important}.mdl-color--amber-A400{background-color:#ffc400 !important}.mdl-color-text--amber-A700{color:#ffab00 !important}.mdl-color--amber-A700{background-color:#ffab00 !important}.mdl-color-text--orange{color:#ff9800 !important}.mdl-color--orange{background-color:#ff9800 !important}.mdl-color-text--orange-50{color:#fff3e0 !important}.mdl-color--orange-50{background-color:#fff3e0 !important}.mdl-color-text--orange-100{color:#ffe0b2 !important}.mdl-color--orange-100{background-color:#ffe0b2 !important}.mdl-color-text--orange-200{color:#ffcc80 !important}.mdl-color--orange-200{background-color:#ffcc80 !important}.mdl-color-text--orange-300{color:#ffb74d !important}.mdl-color--orange-300{background-color:#ffb74d !important}.mdl-color-text--orange-400{color:#ffa726 !important}.mdl-color--orange-400{background-color:#ffa726 !important}.mdl-color-text--orange-500{color:#ff9800 !important}.mdl-color--orange-500{background-color:#ff9800 !important}.mdl-color-text--orange-600{color:#fb8c00 !important}.mdl-color--orange-600{background-color:#fb8c00 !important}.mdl-color-text--orange-700{color:#f57c00 !important}.mdl-color--orange-700{background-color:#f57c00 !important}.mdl-color-text--orange-800{color:#ef6c00 !important}.mdl-color--orange-800{background-color:#ef6c00 !important}.mdl-color-text--orange-900{color:#e65100 !important}.mdl-color--orange-900{background-color:#e65100 !important}.mdl-color-text--orange-A100{color:#ffd180 !important}.mdl-color--orange-A100{background-color:#ffd180 !important}.mdl-color-text--orange-A200{color:#ffab40 !important}.mdl-color--orange-A200{background-color:#ffab40 !important}.mdl-color-text--orange-A400{color:#ff9100 !important}.mdl-color--orange-A400{background-color:#ff9100 !important}.mdl-color-text--orange-A700{color:#ff6d00 !important}.mdl-color--orange-A700{background-color:#ff6d00 !important}.mdl-color-text--deep-orange{color:#ff5722 !important}.mdl-color--deep-orange{background-color:#ff5722 !important}.mdl-color-text--deep-orange-50{color:#fbe9e7 !important}.mdl-color--deep-orange-50{background-color:#fbe9e7 !important}.mdl-color-text--deep-orange-100{color:#ffccbc !important}.mdl-color--deep-orange-100{background-color:#ffccbc !important}.mdl-color-text--deep-orange-200{color:#ffab91 !important}.mdl-color--deep-orange-200{background-color:#ffab91 !important}.mdl-color-text--deep-orange-300{color:#ff8a65 !important}.mdl-color--deep-orange-300{background-color:#ff8a65 !important}.mdl-color-text--deep-orange-400{color:#ff7043 !important}.mdl-color--deep-orange-400{background-color:#ff7043 !important}.mdl-color-text--deep-orange-500{color:#ff5722 !important}.mdl-color--deep-orange-500{background-color:#ff5722 !important}.mdl-color-text--deep-orange-600{color:#f4511e !important}.mdl-color--deep-orange-600{background-color:#f4511e !important}.mdl-color-text--deep-orange-700{color:#e64a19 !important}.mdl-color--deep-orange-700{background-color:#e64a19 !important}.mdl-color-text--deep-orange-800{color:#d84315 !important}.mdl-color--deep-orange-800{background-color:#d84315 !important}.mdl-color-text--deep-orange-900{color:#bf360c !important}.mdl-color--deep-orange-900{background-color:#bf360c !important}.mdl-color-text--deep-orange-A100{color:#ff9e80 !important}.mdl-color--deep-orange-A100{background-color:#ff9e80 !important}.mdl-color-text--deep-orange-A200{color:#ff6e40 !important}.mdl-color--deep-orange-A200{background-color:#ff6e40 !important}.mdl-color-text--deep-orange-A400{color:#ff3d00 !important}.mdl-color--deep-orange-A400{background-color:#ff3d00 !important}.mdl-color-text--deep-orange-A700{color:#dd2c00 !important}.mdl-color--deep-orange-A700{background-color:#dd2c00 !important}.mdl-color-text--brown{color:#795548 !important}.mdl-color--brown{background-color:#795548 !important}.mdl-color-text--brown-50{color:#efebe9 !important}.mdl-color--brown-50{background-color:#efebe9 !important}.mdl-color-text--brown-100{color:#d7ccc8 !important}.mdl-color--brown-100{background-color:#d7ccc8 !important}.mdl-color-text--brown-200{color:#bcaaa4 !important}.mdl-color--brown-200{background-color:#bcaaa4 !important}.mdl-color-text--brown-300{color:#a1887f !important}.mdl-color--brown-300{background-color:#a1887f !important}.mdl-color-text--brown-400{color:#8d6e63 !important}.mdl-color--brown-400{background-color:#8d6e63 !important}.mdl-color-text--brown-500{color:#795548 !important}.mdl-color--brown-500{background-color:#795548 !important}.mdl-color-text--brown-600{color:#6d4c41 !important}.mdl-color--brown-600{background-color:#6d4c41 !important}.mdl-color-text--brown-700{color:#5d4037 !important}.mdl-color--brown-700{background-color:#5d4037 !important}.mdl-color-text--brown-800{color:#4e342e !important}.mdl-color--brown-800{background-color:#4e342e !important}.mdl-color-text--brown-900{color:#3e2723 !important}.mdl-color--brown-900{background-color:#3e2723 !important}.mdl-color-text--grey{color:#9e9e9e !important}.mdl-color--grey{background-color:#9e9e9e !important}.mdl-color-text--grey-50{color:#fafafa !important}.mdl-color--grey-50{background-color:#fafafa !important}.mdl-color-text--grey-100{color:#f5f5f5 !important}.mdl-color--grey-100{background-color:#f5f5f5 !important}.mdl-color-text--grey-200{color:#eee !important}.mdl-color--grey-200{background-color:#eee !important}.mdl-color-text--grey-300{color:#e0e0e0 !important}.mdl-color--grey-300{background-color:#e0e0e0 !important}.mdl-color-text--grey-400{color:#bdbdbd !important}.mdl-color--grey-400{background-color:#bdbdbd !important}.mdl-color-text--grey-500{color:#9e9e9e !important}.mdl-color--grey-500{background-color:#9e9e9e !important}.mdl-color-text--grey-600{color:#757575 !important}.mdl-color--grey-600{background-color:#757575 !important}.mdl-color-text--grey-700{color:#616161 !important}.mdl-color--grey-700{background-color:#616161 !important}.mdl-color-text--grey-800{color:#424242 !important}.mdl-color--grey-800{background-color:#424242 !important}.mdl-color-text--grey-900{color:#212121 !important}.mdl-color--grey-900{background-color:#212121 !important}.mdl-color-text--blue-grey{color:#607d8b !important}.mdl-color--blue-grey{background-color:#607d8b !important}.mdl-color-text--blue-grey-50{color:#eceff1 !important}.mdl-color--blue-grey-50{background-color:#eceff1 !important}.mdl-color-text--blue-grey-100{color:#cfd8dc !important}.mdl-color--blue-grey-100{background-color:#cfd8dc !important}.mdl-color-text--blue-grey-200{color:#b0bec5 !important}.mdl-color--blue-grey-200{background-color:#b0bec5 !important}.mdl-color-text--blue-grey-300{color:#90a4ae !important}.mdl-color--blue-grey-300{background-color:#90a4ae !important}.mdl-color-text--blue-grey-400{color:#78909c !important}.mdl-color--blue-grey-400{background-color:#78909c !important}.mdl-color-text--blue-grey-500{color:#607d8b !important}.mdl-color--blue-grey-500{background-color:#607d8b !important}.mdl-color-text--blue-grey-600{color:#546e7a !important}.mdl-color--blue-grey-600{background-color:#546e7a !important}.mdl-color-text--blue-grey-700{color:#455a64 !important}.mdl-color--blue-grey-700{background-color:#455a64 !important}.mdl-color-text--blue-grey-800{color:#37474f !important}.mdl-color--blue-grey-800{background-color:#37474f !important}.mdl-color-text--blue-grey-900{color:#263238 !important}.mdl-color--blue-grey-900{background-color:#263238 !important}.mdl-color--black{background-color:#000 !important}.mdl-color-text--black{color:#000 !important}.mdl-color--white{background-color:#fff !important}.mdl-color-text--white{color:#fff !important}.mdl-color--primary{background-color:rgb(96,125,139)!important}.mdl-color--primary-contrast{background-color:rgb(255,255,255)!important}.mdl-color--primary-dark{background-color:rgb(69,90,100)!important}.mdl-color--accent{background-color:rgb(83,109,254)!important}.mdl-color--accent-contrast{background-color:rgb(255,255,255)!important}.mdl-color-text--primary{color:rgb(96,125,139)!important}.mdl-color-text--primary-contrast{color:rgb(255,255,255)!important}.mdl-color-text--primary-dark{color:rgb(69,90,100)!important}.mdl-color-text--accent{color:rgb(83,109,254)!important}.mdl-color-text--accent-contrast{color:rgb(255,255,255)!important}.mdl-ripple{background:#000;border-radius:50%;height:50px;left:0;opacity:0;pointer-events:none;position:absolute;top:0;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:50px;overflow:hidden}.mdl-ripple.is-animating{-webkit-transition:-webkit-transform .3s cubic-bezier(0,0,.2,1),width .3s cubic-bezier(0,0,.2,1),height .3s cubic-bezier(0,0,.2,1),opacity .6s cubic-bezier(0,0,.2,1);transition:transform .3s cubic-bezier(0,0,.2,1),width .3s cubic-bezier(0,0,.2,1),height .3s cubic-bezier(0,0,.2,1),opacity .6s cubic-bezier(0,0,.2,1)}.mdl-ripple.is-visible{opacity:.3}.mdl-animation--default,.mdl-animation--fast-out-slow-in{-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-animation--linear-out-slow-in{-webkit-transition-timing-function:cubic-bezier(0,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1)}.mdl-animation--fast-out-linear-in{-webkit-transition-timing-function:cubic-bezier(.4,0,1,1);transition-timing-function:cubic-bezier(.4,0,1,1)}.mdl-badge{position:relative;white-space:nowrap;margin-right:24px}.mdl-badge:not([data-badge]){margin-right:auto}.mdl-badge[data-badge]:after{content:attr(data-badge);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;position:absolute;top:-11px;right:-24px;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:600;font-size:12px;width:22px;height:22px;border-radius:50%;background:rgb(83,109,254);color:#fff}.mdl-button .mdl-badge[data-badge]:after{top:-10px;right:-5px}.mdl-badge.mdl-badge--no-background[data-badge]:after{color:rgb(83,109,254);background:rgba(255,255,255,.2);box-shadow:0 0 1px gray}.mdl-button{background:0 0;border:none;border-radius:2px;color:#000;display:block;position:relative;height:36px;min-width:64px;padding:0 8px;display:inline-block;font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:14px;font-weight:500;text-transform:uppercase;letter-spacing:0;overflow:hidden;will-change:box-shadow,transform;-webkit-transition:box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);transition:box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);outline:none;cursor:pointer;text-decoration:none;text-align:center;line-height:36px;vertical-align:middle}.mdl-button::-moz-focus-inner{border:0}.mdl-button:hover{background-color:rgba(158,158,158,.2)}.mdl-button:focus:not(:active){background-color:rgba(0,0,0,.12)}.mdl-button:active{background-color:rgba(158,158,158,.4)}.mdl-button.mdl-button--colored{color:rgb(96,125,139)}.mdl-button.mdl-button--colored:focus:not(:active){background-color:rgba(0,0,0,.12)}input.mdl-button[type="submit"]{-webkit-appearance:none}.mdl-button--raised{background:rgba(158,158,158,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-button--raised:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:rgba(158,158,158,.4)}.mdl-button--raised:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:rgba(158,158,158,.4)}.mdl-button--raised.mdl-button--colored{background:rgb(96,125,139);color:rgb(255,255,255)}.mdl-button--raised.mdl-button--colored:hover{background-color:rgb(96,125,139)}.mdl-button--raised.mdl-button--colored:active{background-color:rgb(96,125,139)}.mdl-button--raised.mdl-button--colored:focus:not(:active){background-color:rgb(96,125,139)}.mdl-button--raised.mdl-button--colored .mdl-ripple{background:rgb(255,255,255)}.mdl-button--fab{border-radius:50%;font-size:24px;height:56px;margin:auto;min-width:56px;width:56px;padding:0;overflow:hidden;background:rgba(158,158,158,.2);box-shadow:0 1px 1.5px 0 rgba(0,0,0,.12),0 1px 1px 0 rgba(0,0,0,.24);position:relative;line-height:normal}.mdl-button--fab .material-icons{position:absolute;top:50%;left:50%;-webkit-transform:translate(-12px,-12px);-ms-transform:translate(-12px,-12px);transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--fab.mdl-button--mini-fab{height:40px;min-width:40px;width:40px}.mdl-button--fab .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button--fab:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:rgba(158,158,158,.4)}.mdl-button--fab:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:rgba(158,158,158,.4)}.mdl-button--fab.mdl-button--colored{background:rgb(83,109,254);color:rgb(255,255,255)}.mdl-button--fab.mdl-button--colored:hover{background-color:rgb(83,109,254)}.mdl-button--fab.mdl-button--colored:focus:not(:active){background-color:rgb(83,109,254)}.mdl-button--fab.mdl-button--colored:active{background-color:rgb(83,109,254)}.mdl-button--fab.mdl-button--colored .mdl-ripple{background:rgb(255,255,255)}.mdl-button--icon{border-radius:50%;font-size:24px;height:32px;margin-left:0;margin-right:0;min-width:32px;width:32px;padding:0;overflow:hidden;color:inherit;line-height:normal}.mdl-button--icon .material-icons{position:absolute;top:50%;left:50%;-webkit-transform:translate(-12px,-12px);-ms-transform:translate(-12px,-12px);transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--icon.mdl-button--mini-icon{height:24px;min-width:24px;width:24px}.mdl-button--icon.mdl-button--mini-icon .material-icons{top:0;left:0}.mdl-button--icon .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button__ripple-container{display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:0;overflow:hidden}.mdl-button[disabled] .mdl-button__ripple-container .mdl-ripple{background-color:transparent}.mdl-button--primary.mdl-button--primary{color:rgb(96,125,139)}.mdl-button--primary.mdl-button--primary .mdl-ripple{background:rgb(255,255,255)}.mdl-button--primary.mdl-button--primary.mdl-button--raised,.mdl-button--primary.mdl-button--primary.mdl-button--fab{color:rgb(255,255,255);background-color:rgb(96,125,139)}.mdl-button--accent.mdl-button--accent{color:rgb(83,109,254)}.mdl-button--accent.mdl-button--accent .mdl-ripple{background:rgb(255,255,255)}.mdl-button--accent.mdl-button--accent.mdl-button--raised,.mdl-button--accent.mdl-button--accent.mdl-button--fab{color:rgb(255,255,255);background-color:rgb(83,109,254)}.mdl-button[disabled][disabled]{color:rgba(0,0,0,.26);cursor:auto;background-color:transparent}.mdl-button--fab[disabled][disabled],.mdl-button--raised[disabled][disabled],.mdl-button--colored[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-card{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;font-size:16px;font-weight:400;min-height:200px;overflow:hidden;width:330px;z-index:1;position:relative;background:#fff;border-radius:2px;box-sizing:border-box}.mdl-card__media{background-color:rgb(83,109,254);background-repeat:repeat;background-position:50% 50%;background-size:cover;background-origin:padding-box;background-attachment:scroll;box-sizing:border-box}.mdl-card__title{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;color:#000;display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:stretch;-webkit-justify-content:stretch;-ms-flex-pack:stretch;justify-content:stretch;line-height:normal;padding:16px;-webkit-perspective-origin:165px 56px;perspective-origin:165px 56px;-webkit-transform-origin:165px 56px;-ms-transform-origin:165px 56px;transform-origin:165px 56px;box-sizing:border-box}.mdl-card__title.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__title-text{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end;color:inherit;display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;font-size:24px;font-weight:300;line-height:normal;overflow:hidden;-webkit-transform-origin:149px 48px;-ms-transform-origin:149px 48px;transform-origin:149px 48px;margin:0}.mdl-card__subtitle-text{font-size:14px;color:grey;margin:0}.mdl-card__supporting-text{color:rgba(0,0,0,.54);font-size:13px;line-height:18px;overflow:hidden;padding:16px;width:90%}.mdl-card__actions{font-size:16px;line-height:normal;width:100%;background-color:transparent;padding:8px;box-sizing:border-box}.mdl-card__actions.mdl-card--border{border-top:1px solid rgba(0,0,0,.1)}.mdl-card--expand{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.mdl-card__menu{position:absolute;right:16px;top:16px}.mdl-checkbox{position:relative;z-index:1;vertical-align:middle;display:inline-block;box-sizing:border-box;width:100%;height:24px;margin:0;padding:0}.mdl-checkbox.is-upgraded{padding-left:24px}.mdl-checkbox__input{line-height:24px}.mdl-checkbox.is-upgraded .mdl-checkbox__input{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-checkbox__box-outline{position:absolute;top:3px;left:0;display:inline-block;box-sizing:border-box;width:16px;height:16px;margin:0;cursor:pointer;overflow:hidden;border:2px solid rgba(0,0,0,.54);border-radius:2px;z-index:2}.mdl-checkbox.is-checked .mdl-checkbox__box-outline{border:2px solid rgb(96,125,139)}.mdl-checkbox.is-disabled .mdl-checkbox__box-outline{border:2px solid rgba(0,0,0,.26);cursor:auto}.mdl-checkbox__focus-helper{position:absolute;top:3px;left:0;display:inline-block;box-sizing:border-box;width:16px;height:16px;border-radius:50%;background-color:transparent}.mdl-checkbox.is-focused .mdl-checkbox__focus-helper{box-shadow:0 0 0 8px rgba(0,0,0,.1);background-color:rgba(0,0,0,.1)}.mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper{box-shadow:0 0 0 8px rgba(96,125,139,.26);background-color:rgba(96,125,139,.26)}.mdl-checkbox__tick-outline{position:absolute;top:0;left:0;height:100%;width:100%;-webkit-mask:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8ZGVmcz4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gMCwwIDAsMSAxLDEgMSwwIDAsMCB6IE0gMC44NTM0Mzc1LDAuMTY3MTg3NSAwLjk1OTY4NzUsMC4yNzMxMjUgMC40MjkzNzUsMC44MDM0Mzc1IDAuMzIzMTI1LDAuOTA5Njg3NSAwLjIxNzE4NzUsMC44MDM0Mzc1IDAuMDQwMzEyNSwwLjYyNjg3NSAwLjE0NjU2MjUsMC41MjA2MjUgMC4zMjMxMjUsMC42OTc1IDAuODUzNDM3NSwwLjE2NzE4NzUgeiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8bWFzayBpZD0ibWFzayIgbWFza1VuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgbWFza0NvbnRlbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giPgogICAgICA8cGF0aAogICAgICAgICBkPSJNIDAsMCAwLDEgMSwxIDEsMCAwLDAgeiBNIDAuODUzNDM3NSwwLjE2NzE4NzUgMC45NTk2ODc1LDAuMjczMTI1IDAuNDI5Mzc1LDAuODAzNDM3NSAwLjMyMzEyNSwwLjkwOTY4NzUgMC4yMTcxODc1LDAuODAzNDM3NSAwLjA0MDMxMjUsMC42MjY4NzUgMC4xNDY1NjI1LDAuNTIwNjI1IDAuMzIzMTI1LDAuNjk3NSAwLjg1MzQzNzUsMC4xNjcxODc1IHoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+CiAgICA8L21hc2s+CiAgPC9kZWZzPgogIDxyZWN0CiAgICAgd2lkdGg9IjEiCiAgICAgaGVpZ2h0PSIxIgogICAgIHg9IjAiCiAgICAgeT0iMCIKICAgICBjbGlwLXBhdGg9InVybCgjY2xpcCkiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KPC9zdmc+Cg==");mask:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8ZGVmcz4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gMCwwIDAsMSAxLDEgMSwwIDAsMCB6IE0gMC44NTM0Mzc1LDAuMTY3MTg3NSAwLjk1OTY4NzUsMC4yNzMxMjUgMC40MjkzNzUsMC44MDM0Mzc1IDAuMzIzMTI1LDAuOTA5Njg3NSAwLjIxNzE4NzUsMC44MDM0Mzc1IDAuMDQwMzEyNSwwLjYyNjg3NSAwLjE0NjU2MjUsMC41MjA2MjUgMC4zMjMxMjUsMC42OTc1IDAuODUzNDM3NSwwLjE2NzE4NzUgeiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8bWFzayBpZD0ibWFzayIgbWFza1VuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgbWFza0NvbnRlbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giPgogICAgICA8cGF0aAogICAgICAgICBkPSJNIDAsMCAwLDEgMSwxIDEsMCAwLDAgeiBNIDAuODUzNDM3NSwwLjE2NzE4NzUgMC45NTk2ODc1LDAuMjczMTI1IDAuNDI5Mzc1LDAuODAzNDM3NSAwLjMyMzEyNSwwLjkwOTY4NzUgMC4yMTcxODc1LDAuODAzNDM3NSAwLjA0MDMxMjUsMC42MjY4NzUgMC4xNDY1NjI1LDAuNTIwNjI1IDAuMzIzMTI1LDAuNjk3NSAwLjg1MzQzNzUsMC4xNjcxODc1IHoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+CiAgICA8L21hc2s+CiAgPC9kZWZzPgogIDxyZWN0CiAgICAgd2lkdGg9IjEiCiAgICAgaGVpZ2h0PSIxIgogICAgIHg9IjAiCiAgICAgeT0iMCIKICAgICBjbGlwLXBhdGg9InVybCgjY2xpcCkiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KPC9zdmc+Cg==");background:0 0;-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:background;transition-property:background}.mdl-checkbox.is-checked .mdl-checkbox__tick-outline{background:rgb(96,125,139)url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K")}.mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline{background:rgba(0,0,0,.26)url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K")}.mdl-checkbox__label{position:relative;cursor:pointer;font-size:16px;line-height:24px;margin:0}.mdl-checkbox.is-disabled .mdl-checkbox__label{color:rgba(0,0,0,.26);cursor:auto}.mdl-checkbox__ripple-container{position:absolute;z-index:2;top:-6px;left:-10px;box-sizing:border-box;width:36px;height:36px;border-radius:50%;cursor:pointer;overflow:hidden;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-checkbox__ripple-container .mdl-ripple{background:rgb(96,125,139)}.mdl-checkbox.is-disabled .mdl-checkbox__ripple-container{cursor:auto}.mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple{background:0 0}.mdl-data-table{position:relative;border:1px solid rgba(0,0,0,.12);border-collapse:collapse;white-space:nowrap;font-size:13px;background-color:#fff}.mdl-data-table thead{padding-bottom:3px}.mdl-data-table thead .mdl-data-table__select{margin-top:0}.mdl-data-table tbody tr{position:relative;height:48px;-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:background-color;transition-property:background-color}.mdl-data-table tbody tr.is-selected{background-color:#e0e0e0}.mdl-data-table tbody tr:hover{background-color:#eee}.mdl-data-table td{text-align:right}.mdl-data-table th{padding:0 18px 0 18px;text-align:right}.mdl-data-table td:first-of-type,.mdl-data-table th:first-of-type{padding-left:24px}.mdl-data-table td:last-of-type,.mdl-data-table th:last-of-type{padding-right:24px}.mdl-data-table td{position:relative;vertical-align:top;height:48px;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);padding:12px 18px 0;box-sizing:border-box}.mdl-data-table td .mdl-data-table__select{vertical-align:top;position:absolute;left:24px}.mdl-data-table th{position:relative;vertical-align:bottom;text-overflow:ellipsis;font-weight:700;line-height:24px;letter-spacing:0;height:48px;font-size:12px;color:rgba(0,0,0,.54);padding-bottom:8px;box-sizing:border-box}.mdl-data-table th .mdl-data-table__select{position:relative}.mdl-data-table__select{width:16px}.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric{text-align:left}.mdl-mega-footer{padding:16px 40px;color:#9e9e9e;background-color:#424242}.mdl-mega-footer--top-section:after,.mdl-mega-footer--middle-section:after,.mdl-mega-footer--bottom-section:after,.mdl-mega-footer__top-section:after,.mdl-mega-footer__middle-section:after,.mdl-mega-footer__bottom-section:after{content:'';display:block;clear:both}.mdl-mega-footer--left-section,.mdl-mega-footer__left-section,.mdl-mega-footer--right-section,.mdl-mega-footer__right-section{margin-bottom:16px}.mdl-mega-footer--right-section a,.mdl-mega-footer__right-section a{display:block;margin-bottom:16px;color:inherit;text-decoration:none}@media screen and (min-width:760px){.mdl-mega-footer--left-section,.mdl-mega-footer__left-section{float:left}.mdl-mega-footer--right-section,.mdl-mega-footer__right-section{float:right}.mdl-mega-footer--right-section a,.mdl-mega-footer__right-section a{display:inline-block;margin-left:16px;line-height:36px;vertical-align:middle}}.mdl-mega-footer--social-btn,.mdl-mega-footer__social-btn{width:36px;height:36px;padding:0;margin:0;background-color:#9e9e9e;border:none}.mdl-mega-footer--drop-down-section,.mdl-mega-footer__drop-down-section{display:block;position:relative}@media screen and (min-width:760px){.mdl-mega-footer--drop-down-section,.mdl-mega-footer__drop-down-section{width:33%}.mdl-mega-footer--drop-down-section:nth-child(1),.mdl-mega-footer--drop-down-section:nth-child(2),.mdl-mega-footer__drop-down-section:nth-child(1),.mdl-mega-footer__drop-down-section:nth-child(2){float:left}.mdl-mega-footer--drop-down-section:nth-child(3),.mdl-mega-footer__drop-down-section:nth-child(3){float:right}.mdl-mega-footer--drop-down-section:nth-child(3):after,.mdl-mega-footer__drop-down-section:nth-child(3):after{clear:right}.mdl-mega-footer--drop-down-section:nth-child(4),.mdl-mega-footer__drop-down-section:nth-child(4){clear:right;float:right}.mdl-mega-footer--middle-section:after,.mdl-mega-footer__middle-section:after{content:'';display:block;clear:both}.mdl-mega-footer--bottom-section,.mdl-mega-footer__bottom-section{padding-top:0}}@media screen and (min-width:1024px){.mdl-mega-footer--drop-down-section,.mdl-mega-footer--drop-down-section:nth-child(3),.mdl-mega-footer--drop-down-section:nth-child(4),.mdl-mega-footer__drop-down-section,.mdl-mega-footer__drop-down-section:nth-child(3),.mdl-mega-footer__drop-down-section:nth-child(4){width:24%;float:left}}.mdl-mega-footer--heading-checkbox,.mdl-mega-footer__heading-checkbox{position:absolute;width:100%;height:55.8px;padding:32px;margin:-16px 0 0;cursor:pointer;z-index:1;opacity:0}.mdl-mega-footer--heading-checkbox~.mdl-mega-footer--heading:after,.mdl-mega-footer--heading-checkbox~.mdl-mega-footer__heading:after,.mdl-mega-footer__heading-checkbox~.mdl-mega-footer--heading:after,.mdl-mega-footer__heading-checkbox~.mdl-mega-footer__heading:after{font-family:'Material Icons';content:'\E5CE'}.mdl-mega-footer--heading-checkbox:checked~ul,.mdl-mega-footer__heading-checkbox:checked~ul{display:none}.mdl-mega-footer--heading-checkbox:checked~.mdl-mega-footer--heading:after,.mdl-mega-footer--heading-checkbox:checked~.mdl-mega-footer__heading:after,.mdl-mega-footer__heading-checkbox:checked~.mdl-mega-footer--heading:after,.mdl-mega-footer__heading-checkbox:checked~.mdl-mega-footer__heading:after{font-family:'Material Icons';content:'\E5CF'}.mdl-mega-footer--heading,.mdl-mega-footer__heading{position:relative;width:100%;padding-right:39.8px;margin-bottom:16px;box-sizing:border-box;font-size:14px;line-height:23.8px;font-weight:500;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;color:#e0e0e0}.mdl-mega-footer--heading:after,.mdl-mega-footer__heading:after{content:'';position:absolute;top:0;right:0;display:block;width:23.8px;height:23.8px;background-size:cover}.mdl-mega-footer--link-list,.mdl-mega-footer__link-list{list-style:none;padding:0;margin:0 0 32px}.mdl-mega-footer--link-list:after,.mdl-mega-footer__link-list:after{clear:both;display:block;content:''}.mdl-mega-footer--link-list li,.mdl-mega-footer__link-list li{font-size:14px;font-weight:400;letter-spacing:0;line-height:20px}.mdl-mega-footer--link-list a,.mdl-mega-footer__link-list a{color:inherit;text-decoration:none;white-space:nowrap}@media screen and (min-width:760px){.mdl-mega-footer--heading-checkbox,.mdl-mega-footer__heading-checkbox{display:none}.mdl-mega-footer--heading-checkbox~.mdl-mega-footer--heading:after,.mdl-mega-footer--heading-checkbox~.mdl-mega-footer__heading:after,.mdl-mega-footer__heading-checkbox~.mdl-mega-footer--heading:after,.mdl-mega-footer__heading-checkbox~.mdl-mega-footer__heading:after{background-image:none}.mdl-mega-footer--heading-checkbox:checked~ul,.mdl-mega-footer__heading-checkbox:checked~ul{display:block}.mdl-mega-footer--heading-checkbox:checked~.mdl-mega-footer--heading:after,.mdl-mega-footer--heading-checkbox:checked~.mdl-mega-footer__heading:after,.mdl-mega-footer__heading-checkbox:checked~.mdl-mega-footer--heading:after,.mdl-mega-footer__heading-checkbox:checked~.mdl-mega-footer__heading:after{content:''}}.mdl-mega-footer--bottom-section,.mdl-mega-footer__bottom-section{padding-top:16px;margin-bottom:16px}.mdl-logo{margin-bottom:16px;color:#fff}.mdl-mega-footer--bottom-section .mdl-mega-footer--link-list li,.mdl-mega-footer__bottom-section .mdl-mega-footer__link-list li{float:left;margin-bottom:0;margin-right:16px}@media screen and (min-width:760px){.mdl-logo{float:left;margin-bottom:0;margin-right:16px}}.mdl-mini-footer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:32px 16px;color:#9e9e9e;background-color:#424242}.mdl-mini-footer:after{content:'';display:block}.mdl-mini-footer .mdl-logo{line-height:36px}.mdl-mini-footer--link-list,.mdl-mini-footer__link-list{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;list-style:none;margin:0;padding:0}.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li{margin-bottom:0;margin-right:16px}@media screen and (min-width:760px){.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li{line-height:36px}}.mdl-mini-footer--link-list a,.mdl-mini-footer__link-list a{color:inherit;text-decoration:none;white-space:nowrap}.mdl-mini-footer--left-section,.mdl-mini-footer__left-section{display:inline-block;-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.mdl-mini-footer--right-section,.mdl-mini-footer__right-section{display:inline-block;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.mdl-mini-footer--social-btn,.mdl-mini-footer__social-btn{width:36px;height:36px;padding:0;margin:0;background-color:#9e9e9e;border:none}.mdl-icon-toggle{position:relative;z-index:1;vertical-align:middle;display:inline-block;height:32px;margin:0;padding:0}.mdl-icon-toggle__input{line-height:32px}.mdl-icon-toggle.is-upgraded .mdl-icon-toggle__input{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-icon-toggle__label{display:inline-block;position:relative;cursor:pointer;height:32px;width:32px;min-width:32px;color:#616161;border-radius:50%;padding:0;margin-left:0;margin-right:0;text-align:center;background-color:transparent;will-change:background-color;-webkit-transition:background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);transition:background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1)}.mdl-icon-toggle__label.material-icons{line-height:32px;font-size:24px}.mdl-icon-toggle.is-checked .mdl-icon-toggle__label{color:rgb(96,125,139)}.mdl-icon-toggle.is-disabled .mdl-icon-toggle__label{color:rgba(0,0,0,.26);cursor:auto;-webkit-transition:none;transition:none}.mdl-icon-toggle.is-focused .mdl-icon-toggle__label{background-color:rgba(0,0,0,.12)}.mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label{background-color:rgba(96,125,139,.26)}.mdl-icon-toggle__ripple-container{position:absolute;z-index:2;top:-2px;left:-2px;box-sizing:border-box;width:36px;height:36px;border-radius:50%;cursor:pointer;overflow:hidden;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-icon-toggle__ripple-container .mdl-ripple{background:#616161}.mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container{cursor:auto}.mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple{background:0 0}.mdl-menu__container{display:block;margin:0;padding:0;border:none;position:absolute;overflow:visible;height:0;width:0;z-index:-1}.mdl-menu__container.is-visible{z-index:999}.mdl-menu__outline{display:block;background:#fff;margin:0;padding:0;border:none;border-radius:2px;position:absolute;top:0;left:0;overflow:hidden;opacity:0;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);will-change:transform;-webkit-transition:-webkit-transform .3s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1);transition:transform .3s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1);z-index:-1}.mdl-menu__container.is-visible .mdl-menu__outline{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);z-index:999}.mdl-menu__outline.mdl-menu--bottom-right{-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.mdl-menu__outline.mdl-menu--top-left{-webkit-transform-origin:0 100%;-ms-transform-origin:0 100%;transform-origin:0 100%}.mdl-menu__outline.mdl-menu--top-right{-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.mdl-menu{position:absolute;list-style:none;top:0;left:0;height:auto;width:auto;min-width:124px;padding:8px 0;margin:0;opacity:0;clip:rect(0 0 0 0);z-index:-1}.mdl-menu__container.is-visible .mdl-menu{opacity:1;z-index:999}.mdl-menu.is-animating{-webkit-transition:opacity .2s cubic-bezier(.4,0,.2,1),clip .3s cubic-bezier(.4,0,.2,1);transition:opacity .2s cubic-bezier(.4,0,.2,1),clip .3s cubic-bezier(.4,0,.2,1)}.mdl-menu.mdl-menu--bottom-right{left:auto;right:0}.mdl-menu.mdl-menu--top-left{top:auto;bottom:0}.mdl-menu.mdl-menu--top-right{top:auto;left:auto;bottom:0;right:0}.mdl-menu.mdl-menu--unaligned{top:auto;left:auto}.mdl-menu__item{display:block;border:none;color:rgba(0,0,0,.87);background-color:transparent;text-align:left;margin:0;padding:0 16px;outline-color:#bdbdbd;position:relative;overflow:hidden;font-size:14px;font-weight:400;letter-spacing:0;text-decoration:none;cursor:pointer;height:48px;line-height:48px;white-space:nowrap;opacity:0;-webkit-transition:opacity .2s cubic-bezier(.4,0,.2,1);transition:opacity .2s cubic-bezier(.4,0,.2,1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mdl-menu__container.is-visible .mdl-menu__item{opacity:1}.mdl-menu__item::-moz-focus-inner{border:0}.mdl-menu__item[disabled]{color:#bdbdbd;background-color:transparent;cursor:auto}.mdl-menu__item[disabled]:hover{background-color:transparent}.mdl-menu__item[disabled]:focus{background-color:transparent}.mdl-menu__item[disabled] .mdl-ripple{background:0 0}.mdl-menu__item:hover{background-color:#eee}.mdl-menu__item:focus{outline:none;background-color:#eee}.mdl-menu__item:active{background-color:#e0e0e0}.mdl-menu__item--ripple-container{display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:0;overflow:hidden}.mdl-progress{display:block;position:relative;height:4px;width:500px}.mdl-progress>.bar{display:block;position:absolute;top:0;bottom:0;width:0%;-webkit-transition:width .2s cubic-bezier(.4,0,.2,1);transition:width .2s cubic-bezier(.4,0,.2,1)}.mdl-progress>.progressbar{background-color:rgb(96,125,139);z-index:1;left:0}.mdl-progress>.bufferbar{background-image:-webkit-linear-gradient(left,rgba(255,255,255,.7),rgba(255,255,255,.7)),-webkit-linear-gradient(left,rgb(96,125,139),rgb(96,125,139));background-image:linear-gradient(to right,rgba(255,255,255,.7),rgba(255,255,255,.7)),linear-gradient(to right,rgb(96,125,139),rgb(96,125,139));z-index:0;left:0}.mdl-progress>.auxbar{right:0}@supports (-webkit-appearance:none){.mdl-progress:not(.mdl-progress__indeterminate):not(.mdl-progress__indeterminate)>.auxbar{background-image:-webkit-linear-gradient(left,rgba(255,255,255,.7),rgba(255,255,255,.7)),-webkit-linear-gradient(left,rgb(96,125,139),rgb(96,125,139));background-image:linear-gradient(to right,rgba(255,255,255,.7),rgba(255,255,255,.7)),linear-gradient(to right,rgb(96,125,139),rgb(96,125,139));-webkit-mask:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjQiIHZpZXdQb3J0PSIwIDAgMTIgNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxlbGxpcHNlIGN4PSIyIiBjeT0iMiIgcng9IjIiIHJ5PSIyIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImN4IiBmcm9tPSIyIiB0bz0iLTEwIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogIDwvZWxsaXBzZT4KICA8ZWxsaXBzZSBjeD0iMTQiIGN5PSIyIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJsb2FkZXIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iY3giIGZyb209IjE0IiB0bz0iMiIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICA8L2VsbGlwc2U+Cjwvc3ZnPgo=");mask:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjQiIHZpZXdQb3J0PSIwIDAgMTIgNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxlbGxpcHNlIGN4PSIyIiBjeT0iMiIgcng9IjIiIHJ5PSIyIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImN4IiBmcm9tPSIyIiB0bz0iLTEwIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogIDwvZWxsaXBzZT4KICA8ZWxsaXBzZSBjeD0iMTQiIGN5PSIyIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJsb2FkZXIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iY3giIGZyb209IjE0IiB0bz0iMiIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICA8L2VsbGlwc2U+Cjwvc3ZnPgo=")}}.mdl-progress:not(.mdl-progress__indeterminate)>.auxbar{background-image:-webkit-linear-gradient(left,rgba(255,255,255,.9),rgba(255,255,255,.9)),-webkit-linear-gradient(left,rgb(96,125,139),rgb(96,125,139));background-image:linear-gradient(to right,rgba(255,255,255,.9),rgba(255,255,255,.9)),linear-gradient(to right,rgb(96,125,139),rgb(96,125,139))}.mdl-progress.mdl-progress__indeterminate>.bar1{-webkit-animation-name:indeterminate1;animation-name:indeterminate1}.mdl-progress.mdl-progress__indeterminate>.bar1,.mdl-progress.mdl-progress__indeterminate>.bar3{background-color:rgb(96,125,139);-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function:linear}.mdl-progress.mdl-progress__indeterminate>.bar3{background-image:none;-webkit-animation-name:indeterminate2;animation-name:indeterminate2}@-webkit-keyframes indeterminate1{0%{left:0%;width:0%}50%{left:25%;width:75%}75%{left:100%;width:0%}}@keyframes indeterminate1{0%{left:0%;width:0%}50%{left:25%;width:75%}75%{left:100%;width:0%}}@-webkit-keyframes indeterminate2{0%,50%{left:0%;width:0%}75%{left:0%;width:25%}100%{left:100%;width:0%}}@keyframes indeterminate2{0%,50%{left:0%;width:0%}75%{left:0%;width:25%}100%{left:100%;width:0%}}.mdl-navigation{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;box-sizing:border-box}.mdl-navigation__link{color:#424242;text-decoration:none;font-weight:500;font-size:13px;margin:0}.mdl-layout{width:100%;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;overflow-y:auto;overflow-x:hidden;position:relative;-webkit-overflow-scrolling:touch}.mdl-layout.is-small-screen .mdl-layout--large-screen-only{display:none}.mdl-layout:not(.is-small-screen) .mdl-layout--small-screen-only{display:none}.mdl-layout__container{position:absolute;width:100%;height:100%}.mdl-layout-title{display:block;position:relative;font-family:"Roboto","Helvetica","Arial",sans-serif;font-size:20px;line-height:1;letter-spacing:.02em;font-weight:400;box-sizing:border-box}.mdl-layout-spacer{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.mdl-layout__drawer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;width:240px;height:100%;max-height:100%;position:absolute;top:0;left:0;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);box-sizing:border-box;border-right:1px solid #e0e0e0;background:#fafafa;-webkit-transform:translateX(-250px);-ms-transform:translateX(-250px);transform:translateX(-250px);-webkit-transform-style:preserve-3d;transform-style:preserve-3d;will-change:transform;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:-webkit-transform;transition-property:transform;color:#424242;overflow:visible;overflow-y:auto;z-index:5}.mdl-layout__drawer.is-visible{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.mdl-layout__drawer>*{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.mdl-layout__drawer>.mdl-layout-title{line-height:64px;padding-left:40px}@media screen and (max-width:1024px){.mdl-layout__drawer>.mdl-layout-title{line-height:56px;padding-left:16px}}.mdl-layout__drawer .mdl-navigation{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;padding-top:16px}.mdl-layout__drawer .mdl-navigation .mdl-navigation__link{display:block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;padding:16px 40px;margin:0;color:#757575}@media screen and (max-width:1024px){.mdl-layout__drawer .mdl-navigation .mdl-navigation__link{padding:16px}}.mdl-layout__drawer .mdl-navigation .mdl-navigation__link:hover{background-color:#e0e0e0}.mdl-layout__drawer .mdl-navigation .mdl-navigation__link--current{background-color:#000;color:rgb(96,125,139)}@media screen and (min-width:1025px){.mdl-layout--fixed-drawer>.mdl-layout__drawer{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.mdl-layout__drawer-button{display:block;position:absolute;height:48px;width:48px;border:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;overflow:hidden;text-align:center;cursor:pointer;font-size:26px;line-height:50px;font-family:Helvetica,Arial,sans-serif;margin:10px 12px;top:0;left:0;color:rgb(255,255,255);z-index:4}.mdl-layout__header .mdl-layout__drawer-button{position:absolute;color:rgb(255,255,255);background-color:inherit}@media screen and (max-width:1024px){.mdl-layout__header .mdl-layout__drawer-button{margin:4px}}@media screen and (max-width:1024px){.mdl-layout__drawer-button{margin:4px;color:rgba(0,0,0,.5)}}@media screen and (min-width:1025px){.mdl-layout--fixed-drawer>.mdl-layout__drawer-button{display:none}}.mdl-layout__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;box-sizing:border-box;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100%;margin:0;padding:0;border:none;min-height:64px;max-height:1000px;z-index:3;background-color:rgb(96,125,139);color:rgb(255,255,255);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:max-height,box-shadow;transition-property:max-height,box-shadow}@media screen and (max-width:1024px){.mdl-layout__header{min-height:56px}}.mdl-layout--fixed-drawer:not(.is-small-screen)>.mdl-layout__header{margin-left:240px;width:calc(100% - 240px)}.mdl-layout--fixed-drawer>.mdl-layout__header .mdl-layout__header-row{padding-left:40px}.mdl-layout__header>.mdl-layout-icon{position:absolute;left:40px;top:16px;height:32px;width:32px;overflow:hidden;z-index:3;display:block}@media screen and (max-width:1024px){.mdl-layout__header>.mdl-layout-icon{left:16px;top:12px}}.mdl-layout.has-drawer .mdl-layout__header>.mdl-layout-icon{display:none}.mdl-layout__header.is-compact{max-height:64px}@media screen and (max-width:1024px){.mdl-layout__header.is-compact{max-height:56px}}.mdl-layout__header.is-compact.has-tabs{height:112px}@media screen and (max-width:1024px){.mdl-layout__header.is-compact.has-tabs{min-height:104px}}@media screen and (max-width:1024px){.mdl-layout__header{display:none}.mdl-layout--fixed-header>.mdl-layout__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}}.mdl-layout__header--transparent.mdl-layout__header--transparent{background-color:transparent;box-shadow:none}.mdl-layout__header--seamed,.mdl-layout__header--scroll{box-shadow:none}.mdl-layout__header--waterfall{box-shadow:none;overflow:hidden}.mdl-layout__header--waterfall.is-casting-shadow{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-layout__header-row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;box-sizing:border-box;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:64px;margin:0;padding:0 40px 0 80px}@media screen and (max-width:1024px){.mdl-layout__header-row{height:56px;padding:0 16px 0 72px}}.mdl-layout__header-row>*{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.mdl-layout__header--scroll .mdl-layout__header-row{width:100%}.mdl-layout__header-row .mdl-navigation{margin:0;padding:0;height:64px;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}@media screen and (max-width:1024px){.mdl-layout__header-row .mdl-navigation{height:56px}}.mdl-layout__header-row .mdl-navigation__link{display:block;color:rgb(255,255,255);line-height:64px;padding:0 24px}@media screen and (max-width:1024px){.mdl-layout__header-row .mdl-navigation__link{line-height:56px;padding:0 16px}}.mdl-layout__obfuscator{background-color:transparent;position:absolute;top:0;left:0;height:100%;width:100%;z-index:4;visibility:hidden;-webkit-transition-property:background-color;transition-property:background-color;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-layout__drawer.is-visible~.mdl-layout__obfuscator{background-color:rgba(0,0,0,.5);visibility:visible}.mdl-layout__content{-ms-flex:0 1 auto;display:inline-block;overflow-y:auto;overflow-x:hidden;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;z-index:1;-webkit-overflow-scrolling:touch}.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:240px}.mdl-layout__container.has-scrolling-header .mdl-layout__content{overflow:visible}@media screen and (max-width:1024px){.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:0}.mdl-layout__container.has-scrolling-header .mdl-layout__content{overflow-y:auto;overflow-x:hidden}}.mdl-layout__tab-bar{height:96px;margin:0;width:calc(100% - 112px);padding:0 0 0 56px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;background-color:rgb(96,125,139);overflow-y:hidden;overflow-x:scroll}.mdl-layout__tab-bar::-webkit-scrollbar{display:none}@media screen and (max-width:1024px){.mdl-layout__tab-bar{width:calc(100% - 60px);padding:0 0 0 60px}}.mdl-layout--fixed-tabs .mdl-layout__tab-bar{padding:0;overflow:hidden;width:100%}.mdl-layout__tab-bar-container{position:relative;height:48px;width:100%;border:none;margin:0;z-index:2;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;overflow:hidden}.mdl-layout__container>.mdl-layout__tab-bar-container{position:absolute;top:0;left:0}.mdl-layout__tab-bar-button{display:inline-block;position:absolute;top:0;height:48px;width:56px;z-index:4;text-align:center;background-color:rgb(96,125,139);color:transparent;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media screen and (max-width:1024px){.mdl-layout__tab-bar-button{display:none;width:60px}}.mdl-layout--fixed-tabs .mdl-layout__tab-bar-button{display:none}.mdl-layout__tab-bar-button .material-icons{line-height:48px}.mdl-layout__tab-bar-button.is-active{color:rgb(255,255,255)}.mdl-layout__tab-bar-left-button{left:0}.mdl-layout__tab-bar-right-button{right:0}.mdl-layout__tab{margin:0;border:none;padding:0 24px;float:left;position:relative;display:block;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;text-decoration:none;height:48px;line-height:48px;text-align:center;font-weight:500;font-size:14px;text-transform:uppercase;color:rgba(255,255,255,.6);overflow:hidden}@media screen and (max-width:1024px){.mdl-layout__tab{padding:0 12px}}.mdl-layout--fixed-tabs .mdl-layout__tab{float:none;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0}.mdl-layout.is-upgraded .mdl-layout__tab.is-active{color:rgb(255,255,255)}.mdl-layout.is-upgraded .mdl-layout__tab.is-active::after{height:2px;width:100%;display:block;content:" ";bottom:0;left:0;position:absolute;background:rgb(83,109,254);-webkit-animation:border-expand .2s cubic-bezier(.4,0,.4,1).01s alternate forwards;animation:border-expand .2s cubic-bezier(.4,0,.4,1).01s alternate forwards;-webkit-transition:all 1s cubic-bezier(.4,0,1,1);transition:all 1s cubic-bezier(.4,0,1,1)}.mdl-layout__tab .mdl-layout__tab-ripple-container{display:block;position:absolute;height:100%;width:100%;left:0;top:0;z-index:1;overflow:hidden}.mdl-layout__tab .mdl-layout__tab-ripple-container .mdl-ripple{background-color:rgb(255,255,255)}.mdl-layout__tab-panel{display:block}.mdl-layout.is-upgraded .mdl-layout__tab-panel{display:none}.mdl-layout.is-upgraded .mdl-layout__tab-panel.is-active{display:block}.mdl-radio{position:relative;font-size:16px;line-height:24px;display:inline-block;box-sizing:border-box;margin:0;padding-left:0}.mdl-radio.is-upgraded{padding-left:24px}.mdl-radio__button{line-height:24px}.mdl-radio.is-upgraded .mdl-radio__button{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-radio__outer-circle{position:absolute;top:2px;left:0;display:inline-block;box-sizing:border-box;width:16px;height:16px;margin:0;cursor:pointer;border:2px solid rgba(0,0,0,.54);border-radius:50%;z-index:2}.mdl-radio.is-checked .mdl-radio__outer-circle{border:2px solid rgb(96,125,139)}.mdl-radio.is-disabled .mdl-radio__outer-circle{border:2px solid rgba(0,0,0,.26);cursor:auto}.mdl-radio__inner-circle{position:absolute;z-index:1;margin:0;top:6px;left:4px;box-sizing:border-box;width:8px;height:8px;cursor:pointer;-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:-webkit-transform;transition-property:transform;-webkit-transform:scale3d(0,0,0);transform:scale3d(0,0,0);border-radius:50%;background:rgb(96,125,139)}.mdl-radio.is-checked .mdl-radio__inner-circle{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}.mdl-radio.is-disabled .mdl-radio__inner-circle{background:rgba(0,0,0,.26);cursor:auto}.mdl-radio.is-focused .mdl-radio__inner-circle{box-shadow:0 0 0 10px rgba(0,0,0,.1)}.mdl-radio__label{cursor:pointer}.mdl-radio.is-disabled .mdl-radio__label{color:rgba(0,0,0,.26);cursor:auto}.mdl-radio__ripple-container{position:absolute;z-index:2;top:-9px;left:-13px;box-sizing:border-box;width:42px;height:42px;border-radius:50%;cursor:pointer;overflow:hidden;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-radio__ripple-container .mdl-ripple{background:rgb(96,125,139)}.mdl-radio.is-disabled .mdl-radio__ripple-container{cursor:auto}.mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple{background:0 0}_:-ms-input-placeholder,:root .mdl-slider.mdl-slider.is-upgraded{-ms-appearance:none;height:32px;margin:0}.mdl-slider{width:calc(100% - 40px);margin:0 20px}.mdl-slider.is-upgraded{-webkit-appearance:none;-moz-appearance:none;appearance:none;height:2px;background:0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:0;padding:0;color:rgb(96,125,139);-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;z-index:1}.mdl-slider.is-upgraded::-moz-focus-outer{border:0}.mdl-slider.is-upgraded::-ms-tooltip{display:none}.mdl-slider.is-upgraded::-webkit-slider-runnable-track{background:0 0}.mdl-slider.is-upgraded::-moz-range-track{background:0 0;border:none}.mdl-slider.is-upgraded::-ms-track{background:0 0;color:transparent;height:2px;width:100%;border:none}.mdl-slider.is-upgraded::-ms-fill-lower{padding:0;background:linear-gradient(to right,transparent,transparent 16px,rgb(96,125,139)16px,rgb(96,125,139)0)}.mdl-slider.is-upgraded::-ms-fill-upper{padding:0;background:linear-gradient(to left,transparent,transparent 16px,rgba(0,0,0,.26)16px,rgba(0,0,0,.26)0)}.mdl-slider.is-upgraded::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;box-sizing:border-box;border-radius:50%;background:rgb(96,125,139);border:none;-webkit-transition:-webkit-transform .18s cubic-bezier(.4,0,.2,1),border .18s cubic-bezier(.4,0,.2,1),box-shadow .18s cubic-bezier(.4,0,.2,1),background .28s cubic-bezier(.4,0,.2,1);transition:transform .18s cubic-bezier(.4,0,.2,1),border .18s cubic-bezier(.4,0,.2,1),box-shadow .18s cubic-bezier(.4,0,.2,1),background .28s cubic-bezier(.4,0,.2,1)}.mdl-slider.is-upgraded::-moz-range-thumb{-moz-appearance:none;width:12px;height:12px;box-sizing:border-box;border-radius:50%;background-image:none;background:rgb(96,125,139);border:none}.mdl-slider.is-upgraded:focus:not(:active)::-webkit-slider-thumb{box-shadow:0 0 0 10px rgba(96,125,139,.26)}.mdl-slider.is-upgraded:focus:not(:active)::-moz-range-thumb{box-shadow:0 0 0 10px rgba(96,125,139,.26)}.mdl-slider.is-upgraded:active::-webkit-slider-thumb{background-image:none;background:rgb(96,125,139);-webkit-transform:scale(1.5);transform:scale(1.5)}.mdl-slider.is-upgraded:active::-moz-range-thumb{background-image:none;background:rgb(96,125,139);transform:scale(1.5)}.mdl-slider.is-upgraded::-ms-thumb{width:32px;height:32px;border:none;border-radius:50%;background:rgb(96,125,139);-ms-transform:scale(.375);transform:scale(.375);transition:transform .18s cubic-bezier(.4,0,.2,1),background .28s cubic-bezier(.4,0,.2,1)}.mdl-slider.is-upgraded:focus:not(:active)::-ms-thumb{background:radial-gradient(circle closest-side,rgb(96,125,139)0%,rgb(96,125,139)37.5%,rgba(96,125,139,.26)37.5%,rgba(96,125,139,.26)100%);-ms-transform:scale(1);transform:scale(1)}.mdl-slider.is-upgraded:active::-ms-thumb{background:rgb(96,125,139);-ms-transform:scale(.5625);transform:scale(.5625)}.mdl-slider.is-upgraded.is-lowest-value::-webkit-slider-thumb{border:2px solid rgba(0,0,0,.26);background:0 0}.mdl-slider.is-upgraded.is-lowest-value::-moz-range-thumb{border:2px solid rgba(0,0,0,.26);background:0 0}.mdl-slider.is-upgraded.is-lowest-value~.mdl-slider__background-flex>.mdl-slider__background-upper{left:6px}.mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-webkit-slider-thumb{box-shadow:0 0 0 10px rgba(0,0,0,.12);background:rgba(0,0,0,.12)}.mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-moz-range-thumb{box-shadow:0 0 0 10px rgba(0,0,0,.12);background:rgba(0,0,0,.12)}.mdl-slider.is-upgraded.is-lowest-value:active::-webkit-slider-thumb{border:1.6px solid rgba(0,0,0,.26);-webkit-transform:scale(1.5);transform:scale(1.5)}.mdl-slider.is-upgraded.is-lowest-value:active~.mdl-slider__background-flex>.mdl-slider__background-upper{left:9px}.mdl-slider.is-upgraded.is-lowest-value:active::-moz-range-thumb{border:1.5px solid rgba(0,0,0,.26);transform:scale(1.5)}.mdl-slider.is-upgraded.is-lowest-value::-ms-thumb{background:radial-gradient(circle closest-side,transparent 0%,transparent 66.67%,rgba(0,0,0,.26)66.67%,rgba(0,0,0,.26)100%)}.mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-ms-thumb{background:radial-gradient(circle closest-side,rgba(0,0,0,.12)0%,rgba(0,0,0,.12)25%,rgba(0,0,0,.26)25%,rgba(0,0,0,.26)37.5%,rgba(0,0,0,.12)37.5%,rgba(0,0,0,.12)100%);-ms-transform:scale(1);transform:scale(1)}.mdl-slider.is-upgraded.is-lowest-value:active::-ms-thumb{-ms-transform:scale(.5625);transform:scale(.5625);background:radial-gradient(circle closest-side,transparent 0%,transparent 77.78%,rgba(0,0,0,.26)77.78%,rgba(0,0,0,.26)100%)}.mdl-slider.is-upgraded.is-lowest-value::-ms-fill-lower{background:0 0}.mdl-slider.is-upgraded.is-lowest-value::-ms-fill-upper{margin-left:6px}.mdl-slider.is-upgraded.is-lowest-value:active::-ms-fill-upper{margin-left:9px}.mdl-slider.is-upgraded:disabled:focus::-webkit-slider-thumb,.mdl-slider.is-upgraded:disabled:active::-webkit-slider-thumb,.mdl-slider.is-upgraded:disabled::-webkit-slider-thumb{-webkit-transform:scale(.667);transform:scale(.667);background:rgba(0,0,0,.26)}.mdl-slider.is-upgraded:disabled:focus::-moz-range-thumb,.mdl-slider.is-upgraded:disabled:active::-moz-range-thumb,.mdl-slider.is-upgraded:disabled::-moz-range-thumb{transform:scale(.667);background:rgba(0,0,0,.26)}.mdl-slider.is-upgraded:disabled~.mdl-slider__background-flex>.mdl-slider__background-lower{background-color:rgba(0,0,0,.26);left:-6px}.mdl-slider.is-upgraded:disabled~.mdl-slider__background-flex>.mdl-slider__background-upper{left:6px}.mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-webkit-slider-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-webkit-slider-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled::-webkit-slider-thumb{border:3px solid rgba(0,0,0,.26);background:0 0;-webkit-transform:scale(.667);transform:scale(.667)}.mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-moz-range-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-moz-range-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled::-moz-range-thumb{border:3px solid rgba(0,0,0,.26);background:0 0;transform:scale(.667)}.mdl-slider.is-upgraded.is-lowest-value:disabled:active~.mdl-slider__background-flex>.mdl-slider__background-upper{left:6px}.mdl-slider.is-upgraded:disabled:focus::-ms-thumb,.mdl-slider.is-upgraded:disabled:active::-ms-thumb,.mdl-slider.is-upgraded:disabled::-ms-thumb{-ms-transform:scale(.25);transform:scale(.25);background:rgba(0,0,0,.26)}.mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-ms-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled::-ms-thumb{-ms-transform:scale(.25);transform:scale(.25);background:radial-gradient(circle closest-side,transparent 0%,transparent 50%,rgba(0,0,0,.26)50%,rgba(0,0,0,.26)100%)}.mdl-slider.is-upgraded:disabled::-ms-fill-lower{margin-right:6px;background:linear-gradient(to right,transparent,transparent 25px,rgba(0,0,0,.26)25px,rgba(0,0,0,.26)0)}.mdl-slider.is-upgraded:disabled::-ms-fill-upper{margin-left:6px}.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-fill-upper{margin-left:6px}.mdl-slider__ie-container{height:18px;overflow:visible;border:none;margin:none;padding:none}.mdl-slider__container{height:18px;position:relative;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.mdl-slider__container,.mdl-slider__background-flex{background:0 0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.mdl-slider__background-flex{position:absolute;height:2px;width:calc(100% - 52px);top:50%;left:0;margin:0 26px;overflow:hidden;border:0;padding:0;-webkit-transform:translate(0,-1px);-ms-transform:translate(0,-1px);transform:translate(0,-1px)}.mdl-slider__background-lower{background:rgb(96,125,139)}.mdl-slider__background-lower,.mdl-slider__background-upper{-webkit-box-flex:0;-webkit-flex:0;-ms-flex:0;flex:0;position:relative;border:0;padding:0}.mdl-slider__background-upper{background:rgba(0,0,0,.26);-webkit-transition:left .18s cubic-bezier(.4,0,.2,1);transition:left .18s cubic-bezier(.4,0,.2,1)}.mdl-spinner{display:inline-block;position:relative;width:28px;height:28px}.mdl-spinner:not(.is-upgraded).is-active:after{content:"Loading..."}.mdl-spinner.is-upgraded.is-active{-webkit-animation:mdl-spinner__container-rotate 1568.23529412ms linear infinite;animation:mdl-spinner__container-rotate 1568.23529412ms linear infinite}@-webkit-keyframes mdl-spinner__container-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes mdl-spinner__container-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.mdl-spinner__layer{position:absolute;width:100%;height:100%;opacity:0}.mdl-spinner__layer-1{border-color:#42a5f5}.mdl-spinner--single-color .mdl-spinner__layer-1{border-color:rgb(96,125,139)}.mdl-spinner.is-active .mdl-spinner__layer-1{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-1-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-1-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both}.mdl-spinner__layer-2{border-color:#f44336}.mdl-spinner--single-color .mdl-spinner__layer-2{border-color:rgb(96,125,139)}.mdl-spinner.is-active .mdl-spinner__layer-2{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-2-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-2-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both}.mdl-spinner__layer-3{border-color:#fdd835}.mdl-spinner--single-color .mdl-spinner__layer-3{border-color:rgb(96,125,139)}.mdl-spinner.is-active .mdl-spinner__layer-3{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-3-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-3-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both}.mdl-spinner__layer-4{border-color:#4caf50}.mdl-spinner--single-color .mdl-spinner__layer-4{border-color:rgb(96,125,139)}.mdl-spinner.is-active .mdl-spinner__layer-4{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-4-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1)infinite both,mdl-spinner__layer-4-fade-in-out 5332ms cubic-bezier(.4,0,.2,1)infinite both}@-webkit-keyframes mdl-spinner__fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg);transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg);transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg);transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg);transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg);transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg);transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg);transform:rotate(1080deg)}}@keyframes mdl-spinner__fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg);transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg);transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg);transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg);transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg);transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg);transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg);transform:rotate(1080deg)}}@-webkit-keyframes mdl-spinner__layer-1-fade-in-out{from,25%{opacity:.99}26%,89%{opacity:0}90%,100%{opacity:.99}}@keyframes mdl-spinner__layer-1-fade-in-out{from,25%{opacity:.99}26%,89%{opacity:0}90%,100%{opacity:.99}}@-webkit-keyframes mdl-spinner__layer-2-fade-in-out{from,15%{opacity:0}25%,50%{opacity:.99}51%{opacity:0}}@keyframes mdl-spinner__layer-2-fade-in-out{from,15%{opacity:0}25%,50%{opacity:.99}51%{opacity:0}}@-webkit-keyframes mdl-spinner__layer-3-fade-in-out{from,40%{opacity:0}50%,75%{opacity:.99}76%{opacity:0}}@keyframes mdl-spinner__layer-3-fade-in-out{from,40%{opacity:0}50%,75%{opacity:.99}76%{opacity:0}}@-webkit-keyframes mdl-spinner__layer-4-fade-in-out{from,65%{opacity:0}75%,90%{opacity:.99}100%{opacity:0}}@keyframes mdl-spinner__layer-4-fade-in-out{from,65%{opacity:0}75%,90%{opacity:.99}100%{opacity:0}}.mdl-spinner__gap-patch{position:absolute;box-sizing:border-box;top:0;left:45%;width:10%;height:100%;overflow:hidden;border-color:inherit}.mdl-spinner__gap-patch .mdl-spinner__circle{width:1000%;left:-450%}.mdl-spinner__circle-clipper{display:inline-block;position:relative;width:50%;height:100%;overflow:hidden;border-color:inherit}.mdl-spinner__circle-clipper .mdl-spinner__circle{width:200%}.mdl-spinner__circle{box-sizing:border-box;height:100%;border-width:3px;border-style:solid;border-color:inherit;border-bottom-color:transparent!important;border-radius:50%;-webkit-animation:none;animation:none;position:absolute;top:0;right:0;bottom:0;left:0}.mdl-spinner__left .mdl-spinner__circle{border-right-color:transparent!important;-webkit-transform:rotate(129deg);-ms-transform:rotate(129deg);transform:rotate(129deg)}.mdl-spinner.is-active .mdl-spinner__left .mdl-spinner__circle{-webkit-animation:mdl-spinner__left-spin 1333ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__left-spin 1333ms cubic-bezier(.4,0,.2,1)infinite both}.mdl-spinner__right .mdl-spinner__circle{left:-100%;border-left-color:transparent!important;-webkit-transform:rotate(-129deg);-ms-transform:rotate(-129deg);transform:rotate(-129deg)}.mdl-spinner.is-active .mdl-spinner__right .mdl-spinner__circle{-webkit-animation:mdl-spinner__right-spin 1333ms cubic-bezier(.4,0,.2,1)infinite both;animation:mdl-spinner__right-spin 1333ms cubic-bezier(.4,0,.2,1)infinite both}@-webkit-keyframes mdl-spinner__left-spin{from{-webkit-transform:rotate(130deg);transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg);transform:rotate(130deg)}}@keyframes mdl-spinner__left-spin{from{-webkit-transform:rotate(130deg);transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg);transform:rotate(130deg)}}@-webkit-keyframes mdl-spinner__right-spin{from{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}}@keyframes mdl-spinner__right-spin{from{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}}.mdl-switch{position:relative;z-index:1;vertical-align:middle;display:inline-block;box-sizing:border-box;width:100%;height:24px;margin:0;padding:0;overflow:visible;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mdl-switch.is-upgraded{padding-left:28px}.mdl-switch__input{line-height:24px}.mdl-switch.is-upgraded .mdl-switch__input{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-switch__track{background:rgba(0,0,0,.26);position:absolute;left:0;top:5px;height:14px;width:36px;border-radius:14px;cursor:pointer}.mdl-switch.is-checked .mdl-switch__track{background:rgba(96,125,139,.5)}.mdl-switch.is-disabled .mdl-switch__track{background:rgba(0,0,0,.12);cursor:auto}.mdl-switch__thumb{background:#fafafa;position:absolute;left:0;top:2px;height:20px;width:20px;border-radius:50%;cursor:pointer;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:left;transition-property:left}.mdl-switch.is-checked .mdl-switch__thumb{background:rgb(96,125,139);left:16px;box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12)}.mdl-switch.is-disabled .mdl-switch__thumb{background:#bdbdbd;cursor:auto}.mdl-switch__focus-helper{position:absolute;top:50%;left:50%;-webkit-transform:translate(-4px,-4px);-ms-transform:translate(-4px,-4px);transform:translate(-4px,-4px);display:inline-block;box-sizing:border-box;width:8px;height:8px;border-radius:50%;background-color:transparent}.mdl-switch.is-focused .mdl-switch__focus-helper{box-shadow:0 0 0 20px rgba(0,0,0,.1);background-color:rgba(0,0,0,.1)}.mdl-switch.is-focused.is-checked .mdl-switch__focus-helper{box-shadow:0 0 0 20px rgba(96,125,139,.26);background-color:rgba(96,125,139,.26)}.mdl-switch__label{position:relative;cursor:pointer;font-size:16px;line-height:24px;margin:0;left:24px}.mdl-switch.is-disabled .mdl-switch__label{color:#bdbdbd;cursor:auto}.mdl-switch__ripple-container{position:absolute;z-index:2;top:-12px;left:-14px;box-sizing:border-box;width:48px;height:48px;border-radius:50%;cursor:pointer;overflow:hidden;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000);-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-timing-function:step-end;transition-timing-function:step-end;-webkit-transition-property:left;transition-property:left}.mdl-switch__ripple-container .mdl-ripple{background:rgb(96,125,139)}.mdl-switch.is-disabled .mdl-switch__ripple-container{cursor:auto}.mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple{background:0 0}.mdl-switch.is-checked .mdl-switch__ripple-container{cursor:auto;left:2px}.mdl-tabs{display:block;width:100%}.mdl-tabs__tab-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;height:48px;padding:0;margin:0;border-bottom:1px solid #e0e0e0}.mdl-tabs__tab{margin:0;border:none;padding:0 24px;float:left;position:relative;display:block;color:red;text-decoration:none;height:48px;line-height:48px;text-align:center;font-weight:500;font-size:14px;text-transform:uppercase;color:rgba(0,0,0,.54);overflow:hidden}.mdl-tabs.is-upgraded .mdl-tabs__tab.is-active{color:rgba(0,0,0,.87)}.mdl-tabs.is-upgraded .mdl-tabs__tab.is-active:after{height:2px;width:100%;display:block;content:" ";bottom:0;left:0;position:absolute;background:rgb(96,125,139);-webkit-animation:border-expand .2s cubic-bezier(.4,0,.4,1).01s alternate forwards;animation:border-expand .2s cubic-bezier(.4,0,.4,1).01s alternate forwards;-webkit-transition:all 1s cubic-bezier(.4,0,1,1);transition:all 1s cubic-bezier(.4,0,1,1)}.mdl-tabs__tab .mdl-tabs__ripple-container{display:block;position:absolute;height:100%;width:100%;left:0;top:0;z-index:1;overflow:hidden}.mdl-tabs__tab .mdl-tabs__ripple-container .mdl-ripple{background:rgb(96,125,139)}.mdl-tabs__panel{display:block}.mdl-tabs.is-upgraded .mdl-tabs__panel{display:none}.mdl-tabs.is-upgraded .mdl-tabs__panel.is-active{display:block}@-webkit-keyframes border-expand{0%{opacity:0;width:0}100%{opacity:1;width:100%}}@keyframes border-expand{0%{opacity:0;width:0}100%{opacity:1;width:100%}}.mdl-textfield{position:relative;font-size:16px;display:inline-block;box-sizing:border-box;width:300px;max-width:100%;margin:0;padding:20px 0}.mdl-textfield .mdl-button{position:absolute;bottom:20px}.mdl-textfield--align-right{text-align:right}.mdl-textfield--full-width{width:100%}.mdl-textfield--expandable{min-width:32px;width:auto;min-height:32px}.mdl-textfield__input{border:none;border-bottom:1px solid rgba(0,0,0,.12);display:inline-block;font-size:16px;margin:0;padding:4px 0;width:100%;background:16px;text-align:left;color:inherit}.mdl-textfield.is-focused .mdl-textfield__input{outline:none}.mdl-textfield.is-invalid .mdl-textfield__input{border-color:#de3226;box-shadow:none}.mdl-textfield.is-disabled .mdl-textfield__input{background-color:transparent;border-bottom:1px dotted rgba(0,0,0,.12)}.mdl-textfield__label{bottom:0;color:rgba(0,0,0,.26);font-size:16px;left:0;right:0;pointer-events:none;position:absolute;top:24px;width:100%;overflow:hidden;white-space:nowrap;text-align:left}.mdl-textfield.is-dirty .mdl-textfield__label{visibility:hidden}.mdl-textfield--floating-label .mdl-textfield__label{-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-textfield--floating-label.is-focused .mdl-textfield__label,.mdl-textfield--floating-label.is-dirty .mdl-textfield__label{color:rgb(96,125,139);font-size:12px;top:4px;visibility:visible}.mdl-textfield--floating-label.is-focused .mdl-textfield__expandable-holder .mdl-textfield__label,.mdl-textfield--floating-label.is-dirty .mdl-textfield__expandable-holder .mdl-textfield__label{top:-16px}.mdl-textfield--floating-label.is-invalid .mdl-textfield__label{color:#de3226;font-size:12px}.mdl-textfield__label:after{background-color:rgb(96,125,139);bottom:20px;content:'';height:2px;left:45%;position:absolute;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);visibility:hidden;width:10px}.mdl-textfield.is-focused .mdl-textfield__label:after{left:0;visibility:visible;width:100%}.mdl-textfield.is-invalid .mdl-textfield__label:after{background-color:#de3226}.mdl-textfield__error{color:#de3226;position:absolute;font-size:12px;margin-top:3px;visibility:hidden}.mdl-textfield.is-invalid .mdl-textfield__error{visibility:visible}.mdl-textfield__expandable-holder{display:inline-block;position:relative;margin-left:32px;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);display:inline-block;max-width:.1px}.mdl-textfield.is-focused .mdl-textfield__expandable-holder,.mdl-textfield.is-dirty .mdl-textfield__expandable-holder{max-width:600px}.mdl-textfield__expandable-holder .mdl-textfield__label:after{bottom:0}.mdl-tooltip{-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:top center;-ms-transform-origin:top center;transform-origin:top center;will-change:transform;z-index:999;background:rgba(97,97,97,.9);border-radius:2px;color:#fff;display:inline-block;font-size:10px;font-weight:500;line-height:14px;max-width:170px;position:fixed;top:-500px;left:-500px;padding:8px;text-align:center}.mdl-tooltip.is-active{-webkit-animation:pulse 200ms cubic-bezier(0,0,.2,1)forwards;animation:pulse 200ms cubic-bezier(0,0,.2,1)forwards}.mdl-tooltip--large{line-height:14px;font-size:14px;padding:16px}@-webkit-keyframes pulse{0%{-webkit-transform:scale(0);transform:scale(0);opacity:0}50%{-webkit-transform:scale(.99);transform:scale(.99)}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1;visibility:visible}}@keyframes pulse{0%{-webkit-transform:scale(0);transform:scale(0);opacity:0}50%{-webkit-transform:scale(.99);transform:scale(.99)}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1;visibility:visible}}.mdl-shadow--2dp{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-shadow--3dp{box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12)}.mdl-shadow--4dp{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2)}.mdl-shadow--6dp{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.2)}.mdl-shadow--8dp{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.2)}.mdl-shadow--16dp{box-shadow:0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.2)}.mdl-grid{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;margin:0 auto;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.mdl-grid.mdl-grid--no-spacing{padding:0}.mdl-cell{box-sizing:border-box}.mdl-cell--top{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start}.mdl-cell--middle{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.mdl-cell--bottom{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end}.mdl-cell--stretch{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch}.mdl-grid.mdl-grid--no-spacing>.mdl-cell{margin:0}@media (max-width:479px){.mdl-grid{padding:8px}.mdl-cell{margin:8px;width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell{width:100%}.mdl-cell--hide-phone{display:none!important}.mdl-cell--1-col{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col{width:25%}.mdl-cell--1-col-phone.mdl-cell--1-col-phone{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col-phone.mdl-cell--1-col-phone{width:25%}.mdl-cell--2-col{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col{width:50%}.mdl-cell--2-col-phone.mdl-cell--2-col-phone{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col-phone.mdl-cell--2-col-phone{width:50%}.mdl-cell--3-col{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col{width:75%}.mdl-cell--3-col-phone.mdl-cell--3-col-phone{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col-phone.mdl-cell--3-col-phone{width:75%}.mdl-cell--4-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col{width:100%}.mdl-cell--4-col-phone.mdl-cell--4-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col-phone.mdl-cell--4-col-phone{width:100%}.mdl-cell--5-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col{width:100%}.mdl-cell--5-col-phone.mdl-cell--5-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col-phone.mdl-cell--5-col-phone{width:100%}.mdl-cell--6-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col{width:100%}.mdl-cell--6-col-phone.mdl-cell--6-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col-phone.mdl-cell--6-col-phone{width:100%}.mdl-cell--7-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col{width:100%}.mdl-cell--7-col-phone.mdl-cell--7-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col-phone.mdl-cell--7-col-phone{width:100%}.mdl-cell--8-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col{width:100%}.mdl-cell--8-col-phone.mdl-cell--8-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col-phone.mdl-cell--8-col-phone{width:100%}.mdl-cell--9-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col{width:100%}.mdl-cell--9-col-phone.mdl-cell--9-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col-phone.mdl-cell--9-col-phone{width:100%}.mdl-cell--10-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col{width:100%}.mdl-cell--10-col-phone.mdl-cell--10-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col-phone.mdl-cell--10-col-phone{width:100%}.mdl-cell--11-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col{width:100%}.mdl-cell--11-col-phone.mdl-cell--11-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col-phone.mdl-cell--11-col-phone{width:100%}.mdl-cell--12-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col{width:100%}.mdl-cell--12-col-phone.mdl-cell--12-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col-phone.mdl-cell--12-col-phone{width:100%}}@media (min-width:480px) and (max-width:839px){.mdl-grid{padding:8px}.mdl-cell{margin:8px;width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell{width:50%}.mdl-cell--hide-tablet{display:none!important}.mdl-cell--1-col{width:calc(12.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col{width:12.5%}.mdl-cell--1-col-tablet.mdl-cell--1-col-tablet{width:calc(12.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col-tablet.mdl-cell--1-col-tablet{width:12.5%}.mdl-cell--2-col{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col{width:25%}.mdl-cell--2-col-tablet.mdl-cell--2-col-tablet{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col-tablet.mdl-cell--2-col-tablet{width:25%}.mdl-cell--3-col{width:calc(37.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col{width:37.5%}.mdl-cell--3-col-tablet.mdl-cell--3-col-tablet{width:calc(37.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col-tablet.mdl-cell--3-col-tablet{width:37.5%}.mdl-cell--4-col{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col{width:50%}.mdl-cell--4-col-tablet.mdl-cell--4-col-tablet{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col-tablet.mdl-cell--4-col-tablet{width:50%}.mdl-cell--5-col{width:calc(62.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col{width:62.5%}.mdl-cell--5-col-tablet.mdl-cell--5-col-tablet{width:calc(62.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col-tablet.mdl-cell--5-col-tablet{width:62.5%}.mdl-cell--6-col{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col{width:75%}.mdl-cell--6-col-tablet.mdl-cell--6-col-tablet{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col-tablet.mdl-cell--6-col-tablet{width:75%}.mdl-cell--7-col{width:calc(87.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col{width:87.5%}.mdl-cell--7-col-tablet.mdl-cell--7-col-tablet{width:calc(87.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col-tablet.mdl-cell--7-col-tablet{width:87.5%}.mdl-cell--8-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col{width:100%}.mdl-cell--8-col-tablet.mdl-cell--8-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col-tablet.mdl-cell--8-col-tablet{width:100%}.mdl-cell--9-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col{width:100%}.mdl-cell--9-col-tablet.mdl-cell--9-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col-tablet.mdl-cell--9-col-tablet{width:100%}.mdl-cell--10-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col{width:100%}.mdl-cell--10-col-tablet.mdl-cell--10-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col-tablet.mdl-cell--10-col-tablet{width:100%}.mdl-cell--11-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col{width:100%}.mdl-cell--11-col-tablet.mdl-cell--11-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col-tablet.mdl-cell--11-col-tablet{width:100%}.mdl-cell--12-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col{width:100%}.mdl-cell--12-col-tablet.mdl-cell--12-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col-tablet.mdl-cell--12-col-tablet{width:100%}}@media (min-width:840px){.mdl-grid{padding:8px}.mdl-cell{margin:8px;width:calc(33.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell{width:33.3333333333%}.mdl-cell--hide-desktop{display:none!important}.mdl-cell--1-col{width:calc(8.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col{width:8.3333333333%}.mdl-cell--1-col-desktop.mdl-cell--1-col-desktop{width:calc(8.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col-desktop.mdl-cell--1-col-desktop{width:8.3333333333%}.mdl-cell--2-col{width:calc(16.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col{width:16.6666666667%}.mdl-cell--2-col-desktop.mdl-cell--2-col-desktop{width:calc(16.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col-desktop.mdl-cell--2-col-desktop{width:16.6666666667%}.mdl-cell--3-col{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col{width:25%}.mdl-cell--3-col-desktop.mdl-cell--3-col-desktop{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col-desktop.mdl-cell--3-col-desktop{width:25%}.mdl-cell--4-col{width:calc(33.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col{width:33.3333333333%}.mdl-cell--4-col-desktop.mdl-cell--4-col-desktop{width:calc(33.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col-desktop.mdl-cell--4-col-desktop{width:33.3333333333%}.mdl-cell--5-col{width:calc(41.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col{width:41.6666666667%}.mdl-cell--5-col-desktop.mdl-cell--5-col-desktop{width:calc(41.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col-desktop.mdl-cell--5-col-desktop{width:41.6666666667%}.mdl-cell--6-col{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col{width:50%}.mdl-cell--6-col-desktop.mdl-cell--6-col-desktop{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col-desktop.mdl-cell--6-col-desktop{width:50%}.mdl-cell--7-col{width:calc(58.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col{width:58.3333333333%}.mdl-cell--7-col-desktop.mdl-cell--7-col-desktop{width:calc(58.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col-desktop.mdl-cell--7-col-desktop{width:58.3333333333%}.mdl-cell--8-col{width:calc(66.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col{width:66.6666666667%}.mdl-cell--8-col-desktop.mdl-cell--8-col-desktop{width:calc(66.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col-desktop.mdl-cell--8-col-desktop{width:66.6666666667%}.mdl-cell--9-col{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col{width:75%}.mdl-cell--9-col-desktop.mdl-cell--9-col-desktop{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col-desktop.mdl-cell--9-col-desktop{width:75%}.mdl-cell--10-col{width:calc(83.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col{width:83.3333333333%}.mdl-cell--10-col-desktop.mdl-cell--10-col-desktop{width:calc(83.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col-desktop.mdl-cell--10-col-desktop{width:83.3333333333%}.mdl-cell--11-col{width:calc(91.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col{width:91.6666666667%}.mdl-cell--11-col-desktop.mdl-cell--11-col-desktop{width:calc(91.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col-desktop.mdl-cell--11-col-desktop{width:91.6666666667%}.mdl-cell--12-col{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col{width:100%}.mdl-cell--12-col-desktop.mdl-cell--12-col-desktop{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col-desktop.mdl-cell--12-col-desktop{width:100%}}body{margin:0}.styleguide-demo h1{margin:48px 24px 0}.styleguide-demo h1:after{content:'';display:block;width:100%;border-bottom:1px solid rgba(0,0,0,.5);margin-top:24px}.styleguide-demo{opacity:0;-webkit-transition:opacity .6s ease;transition:opacity .6s ease}.styleguide-masthead{height:256px;background:#212121;padding:115px 16px 0}.styleguide-container{position:relative;max-width:960px;width:100%}.styleguide-title{color:#fff;bottom:auto;position:relative;font-size:56px;font-weight:300;line-height:1;letter-spacing:-.02em}.styleguide-title:after{border-bottom:0}.styleguide-title span{font-weight:300}.mdl-styleguide .mdl-layout__drawer .mdl-navigation__link{padding:10px 24px}.demosLoaded .styleguide-demo{opacity:1}iframe{display:block;width:100%;border:none}iframe.heightSet{overflow:hidden}.demo-wrapper{margin:24px}.demo-wrapper iframe{border:1px solid rgba(0,0,0,.5)} \ No newline at end of file diff --git a/inc/themes/material-blue/css/styles.css b/inc/themes/material-blue/css/styles.css index 366c7c00..c53ab294 100644 --- a/inc/themes/material-blue/css/styles.css +++ b/inc/themes/material-blue/css/styles.css @@ -418,10 +418,11 @@ a:hover, a:active, a:focus { #content .data #files-wrap { max-height: 100px; - width: 400px; + width: 95%; overflow-y: auto; border: 1px solid #DFDFDF; padding: 0.5em; + margin: 1em 0; } #content .data #files-list { @@ -432,7 +433,7 @@ a:hover, a:active, a:focus { #content .data #files-list li { background: #f2f2f2; - padding: 1em; + padding: .5em; font-size: 1em; margin-bottom: 5px; } @@ -442,11 +443,21 @@ a:hover, a:active, a:focus { color: #000; } -#content .data #files-list li img { - float: right; - position: relative; - top: -5px; - vertical-align: middle; +#content .data #files-list li div { + display: inline-block; +} + +#content .data #files-list li div.files-item-info { + width: 55%; +} + +#content .data #files-list li div.files-item-info img{ + margin: 0 .5em; +} + +#content .data #files-list li div.files-item-actions { + width: 40%; + text-align: right; } #content .data #dropzone { diff --git a/inc/themes/material-blue/files.inc b/inc/themes/material-blue/files.inc index c0c9da0a..ada156e1 100644 --- a/inc/themes/material-blue/files.inc +++ b/inc/themes/material-blue/files.inc @@ -1,22 +1,26 @@
        - +
      • - - ( KB) - - Delete - - download - View +
        + ( KB) + + thumbnail + +
        +
        + + delete + + file_download + visibility +
      diff --git a/inc/themes/material-blue/js/material.min.js b/inc/themes/material-blue/js/material.min.js index 92f72a77..db4eb7e2 100644 --- a/inc/themes/material-blue/js/material.min.js +++ b/inc/themes/material-blue/js/material.min.js @@ -1,11 +1,10 @@ /** * material-design-lite - Material Design Components in CSS, JS and HTML - * @version v1.0.0 - * @license Apache-2 + * @version v1.0.2 + * @license Apache-2.0 * @copyright 2015 Google, Inc. * @link https://github.com/google/material-design-lite */ -function MaterialButton(e){"use strict";this.element_=e,this.init()}function MaterialCheckbox(e){"use strict";this.element_=e,this.init()}function MaterialIconToggle(e){"use strict";this.element_=e,this.init()}function MaterialMenu(e){"use strict";this.element_=e,this.init()}function MaterialProgress(e){"use strict";this.element_=e,this.init()}function MaterialRadio(e){"use strict";this.element_=e,this.init()}function MaterialSlider(e){"use strict";this.element_=e,this.isIE_=window.navigator.msPointerEnabled,this.init()}function MaterialSpinner(e){"use strict";this.element_=e,this.init()}function MaterialSwitch(e){"use strict";this.element_=e,this.init()}function MaterialTabs(e){"use strict";this.element_=e,this.init()}function MaterialTab(e,t){"use strict";if(e){if(t.element_.classList.contains(t.CssClasses_.MDL_JS_RIPPLE_EFFECT)){var s=document.createElement("span");s.classList.add(t.CssClasses_.MDL_RIPPLE_CONTAINER),s.classList.add(t.CssClasses_.MDL_JS_RIPPLE_EFFECT);var i=document.createElement("span");i.classList.add(t.CssClasses_.MDL_RIPPLE),s.appendChild(i),e.appendChild(s)}e.addEventListener("click",function(s){s.preventDefault();var i=e.href.split("#")[1],n=t.element_.querySelector("#"+i);t.resetTabState_(),t.resetPanelState_(),e.classList.add(t.CssClasses_.ACTIVE_CLASS),n.classList.add(t.CssClasses_.ACTIVE_CLASS)})}}function MaterialTextfield(e){"use strict";this.element_=e,this.maxRows=this.Constant_.NO_MAX_ROWS,this.init()}function MaterialTooltip(e){"use strict";this.element_=e,this.init()}function MaterialLayout(e){"use strict";this.element_=e,this.init()}function MaterialLayoutTab(e,t,s,i){"use strict";if(e){if(i.tabBar_.classList.contains(i.CssClasses_.JS_RIPPLE_EFFECT)){var n=document.createElement("span");n.classList.add(i.CssClasses_.RIPPLE_CONTAINER),n.classList.add(i.CssClasses_.JS_RIPPLE_EFFECT);var a=document.createElement("span");a.classList.add(i.CssClasses_.RIPPLE),n.appendChild(a),e.appendChild(n)}e.addEventListener("click",function(n){n.preventDefault();var a=e.href.split("#")[1],l=i.content_.querySelector("#"+a);i.resetTabState_(t),i.resetPanelState_(s),e.classList.add(i.CssClasses_.IS_ACTIVE),l.classList.add(i.CssClasses_.IS_ACTIVE)})}}function MaterialDataTable(e){"use strict";this.element_=e,this.init()}function MaterialRipple(e){"use strict";this.element_=e,this.init()}var componentHandler=function(){"use strict";function e(e,t){for(var s=0;s<_.length;s++)if(_[s].className===e)return void 0!==t&&(_[s]=t),_[s];return!1}function t(i,n){if(void 0===i&&void 0===n)for(var a=0;a<_.length;a++)t(_[a].className,_[a].cssClass);else{if(void 0===n){var l=e(i);l&&(n=l.cssClass)}for(var r=document.querySelectorAll("."+n),o=0;o0&&this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)&&(e.keyCode===this.Keycodes_.UP_ARROW?(e.preventDefault(),t[t.length-1].focus()):e.keyCode===this.Keycodes_.DOWN_ARROW&&(e.preventDefault(),t[0].focus()))}},MaterialMenu.prototype.handleItemKeyboardEvent_=function(e){"use strict";if(this.element_&&this.container_){var t=this.element_.querySelectorAll("."+this.CssClasses_.ITEM+":not([disabled])");if(t&&t.length>0&&this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)){var s=Array.prototype.slice.call(t).indexOf(e.target);if(e.keyCode===this.Keycodes_.UP_ARROW)e.preventDefault(),s>0?t[s-1].focus():t[t.length-1].focus();else if(e.keyCode===this.Keycodes_.DOWN_ARROW)e.preventDefault(),t.length>s+1?t[s+1].focus():t[0].focus();else if(e.keyCode===this.Keycodes_.SPACE||e.keyCode===this.Keycodes_.ENTER){e.preventDefault();var i=new MouseEvent("mousedown");e.target.dispatchEvent(i),i=new MouseEvent("mouseup"),e.target.dispatchEvent(i),e.target.click()}else e.keyCode===this.Keycodes_.ESCAPE&&(e.preventDefault(),this.hide())}}},MaterialMenu.prototype.handleItemClick_=function(e){"use strict";null!==e.target.getAttribute("disabled")?e.stopPropagation():(this.closing_=!0,window.setTimeout(function(e){this.hide(),this.closing_=!1}.bind(this),this.Constant_.CLOSE_TIMEOUT))},MaterialMenu.prototype.applyClip_=function(e,t){"use strict";this.element_.style.clip=this.element_.classList.contains(this.CssClasses_.UNALIGNED)?null:this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)?"rect(0 "+t+"px 0 "+t+"px)":this.element_.classList.contains(this.CssClasses_.TOP_LEFT)?"rect("+e+"px 0 "+e+"px 0)":this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)?"rect("+e+"px "+t+"px "+e+"px "+t+"px)":null},MaterialMenu.prototype.addAnimationEndListener_=function(){"use strict";var e=function(){this.element_.classList.remove(this.CssClasses_.IS_ANIMATING)}.bind(this);this.element_.addEventListener("transitionend",e),this.element_.addEventListener("webkitTransitionEnd",e)},MaterialMenu.prototype.show=function(e){"use strict";if(this.element_&&this.container_&&this.outline_){var t=this.element_.getBoundingClientRect().height,s=this.element_.getBoundingClientRect().width;this.container_.style.width=s+"px",this.container_.style.height=t+"px",this.outline_.style.width=s+"px",this.outline_.style.height=t+"px";for(var i=this.Constant_.TRANSITION_DURATION_SECONDS*this.Constant_.TRANSITION_DURATION_FRACTION,n=this.element_.querySelectorAll("."+this.CssClasses_.ITEM),a=0;a=this.maxRows&&e.preventDefault()},MaterialTextfield.prototype.onFocus_=function(e){"use strict";this.element_.classList.add(this.CssClasses_.IS_FOCUSED)},MaterialTextfield.prototype.onBlur_=function(e){"use strict";this.element_.classList.remove(this.CssClasses_.IS_FOCUSED)},MaterialTextfield.prototype.updateClasses_=function(){"use strict";this.input_.disabled?this.element_.classList.add(this.CssClasses_.IS_DISABLED):this.element_.classList.remove(this.CssClasses_.IS_DISABLED),this.input_.validity.valid?this.element_.classList.remove(this.CssClasses_.IS_INVALID):this.element_.classList.add(this.CssClasses_.IS_INVALID),this.input_.value&&this.input_.value.length>0?this.element_.classList.add(this.CssClasses_.IS_DIRTY):this.element_.classList.remove(this.CssClasses_.IS_DIRTY)},MaterialTextfield.prototype.disable=function(){"use strict";this.input_.disabled=!0,this.updateClasses_()},MaterialTextfield.prototype.enable=function(){"use strict";this.input_.disabled=!1,this.updateClasses_()},MaterialTextfield.prototype.change=function(e){"use strict";e&&(this.input_.value=e),this.updateClasses_()},MaterialTextfield.prototype.init=function(){"use strict";this.element_&&(this.label_=this.element_.querySelector("."+this.CssClasses_.LABEL),this.input_=this.element_.querySelector("."+this.CssClasses_.INPUT),this.input_&&(this.input_.hasAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE)&&(this.maxRows=parseInt(this.input_.getAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE),10),isNaN(this.maxRows)&&(this.maxRows=this.Constant_.NO_MAX_ROWS)),this.boundUpdateClassesHandler=this.updateClasses_.bind(this),this.boundFocusHandler=this.onFocus_.bind(this),this.boundBlurHandler=this.onBlur_.bind(this),this.input_.addEventListener("input",this.boundUpdateClassesHandler),this.input_.addEventListener("focus",this.boundFocusHandler),this.input_.addEventListener("blur",this.boundBlurHandler),this.maxRows!==this.Constant_.NO_MAX_ROWS&&(this.boundKeyDownHandler=this.onKeyDown_.bind(this),this.input_.addEventListener("keydown",this.boundKeyDownHandler)),this.updateClasses_(),this.element_.classList.add(this.CssClasses_.IS_UPGRADED)))},MaterialTextfield.prototype.mdlDowngrade_=function(){"use strict";this.input_.removeEventListener("input",this.boundUpdateClassesHandler),this.input_.removeEventListener("focus",this.boundFocusHandler),this.input_.removeEventListener("blur",this.boundBlurHandler),this.boundKeyDownHandler&&this.input_.removeEventListener("keydown",this.boundKeyDownHandler)},componentHandler.register({constructor:MaterialTextfield,classAsString:"MaterialTextfield",cssClass:"mdl-js-textfield"}),MaterialTooltip.prototype.Constant_={},MaterialTooltip.prototype.CssClasses_={IS_ACTIVE:"is-active"},MaterialTooltip.prototype.handleMouseEnter_=function(e){"use strict";e.stopPropagation();var t=e.target.getBoundingClientRect();this.element_.style.left=t.left+t.width/2+"px",this.element_.style.marginLeft=-1*(this.element_.offsetWidth/2)+"px",this.element_.style.top=t.top+t.height+10+"px",this.element_.classList.add(this.CssClasses_.IS_ACTIVE)},MaterialTooltip.prototype.handleMouseLeave_=function(e){"use strict";e.stopPropagation(),this.element_.classList.remove(this.CssClasses_.IS_ACTIVE)},MaterialTooltip.prototype.init=function(){"use strict";if(this.element_){var e=this.element_.getAttribute("for");e&&(this.forElement_=document.getElementById(e)),this.forElement_&&(this.boundMouseEnterHandler=this.handleMouseEnter_.bind(this),this.boundMouseLeaveHandler=this.handleMouseLeave_.bind(this),this.forElement_.addEventListener("mouseenter",this.boundMouseEnterHandler,!1),this.forElement_.addEventListener("click",this.boundMouseEnterHandler,!1),this.forElement_.addEventListener("mouseleave",this.boundMouseLeaveHandler))}},MaterialTooltip.prototype.mdlDowngrade_=function(){"use strict";this.forElement_&&(this.forElement_.removeEventListener("mouseenter",this.boundMouseEnterHandler,!1),this.forElement_.removeEventListener("click",this.boundMouseEnterHandler,!1),this.forElement_.removeEventListener("mouseleave",this.boundMouseLeaveHandler))},componentHandler.register({constructor:MaterialTooltip,classAsString:"MaterialTooltip",cssClass:"mdl-tooltip"}),MaterialLayout.prototype.Constant_={MAX_WIDTH:"(max-width: 850px)",TAB_SCROLL_PIXELS:100,MENU_ICON:"menu",CHEVRON_LEFT:"chevron_left",CHEVRON_RIGHT:"chevron_right"},MaterialLayout.prototype.Mode_={STANDARD:0,SEAMED:1,WATERFALL:2,SCROLL:3},MaterialLayout.prototype.CssClasses_={CONTAINER:"mdl-layout__container",HEADER:"mdl-layout__header",DRAWER:"mdl-layout__drawer",CONTENT:"mdl-layout__content",DRAWER_BTN:"mdl-layout__drawer-button",ICON:"material-icons",JS_RIPPLE_EFFECT:"mdl-js-ripple-effect",RIPPLE_CONTAINER:"mdl-layout__tab-ripple-container",RIPPLE:"mdl-ripple",RIPPLE_IGNORE_EVENTS:"mdl-js-ripple-effect--ignore-events",HEADER_SEAMED:"mdl-layout__header--seamed",HEADER_WATERFALL:"mdl-layout__header--waterfall",HEADER_SCROLL:"mdl-layout__header--scroll",FIXED_HEADER:"mdl-layout--fixed-header",OBFUSCATOR:"mdl-layout__obfuscator",TAB_BAR:"mdl-layout__tab-bar",TAB_CONTAINER:"mdl-layout__tab-bar-container",TAB:"mdl-layout__tab",TAB_BAR_BUTTON:"mdl-layout__tab-bar-button",TAB_BAR_LEFT_BUTTON:"mdl-layout__tab-bar-left-button",TAB_BAR_RIGHT_BUTTON:"mdl-layout__tab-bar-right-button",PANEL:"mdl-layout__tab-panel",HAS_DRAWER:"has-drawer",HAS_TABS:"has-tabs",HAS_SCROLLING_HEADER:"has-scrolling-header",CASTING_SHADOW:"is-casting-shadow",IS_COMPACT:"is-compact",IS_SMALL_SCREEN:"is-small-screen",IS_DRAWER_OPEN:"is-visible",IS_ACTIVE:"is-active",IS_UPGRADED:"is-upgraded",IS_ANIMATING:"is-animating"},MaterialLayout.prototype.contentScrollHandler_=function(){"use strict";this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)||(this.content_.scrollTop>0&&!this.header_.classList.contains(this.CssClasses_.IS_COMPACT)?(this.header_.classList.add(this.CssClasses_.CASTING_SHADOW),this.header_.classList.add(this.CssClasses_.IS_COMPACT),this.header_.classList.add(this.CssClasses_.IS_ANIMATING)):this.content_.scrollTop<=0&&this.header_.classList.contains(this.CssClasses_.IS_COMPACT)&&(this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW),this.header_.classList.remove(this.CssClasses_.IS_COMPACT),this.header_.classList.add(this.CssClasses_.IS_ANIMATING)))},MaterialLayout.prototype.screenSizeHandler_=function(){"use strict";this.screenSizeMediaQuery_.matches?this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN):(this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN),this.drawer_&&this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN))},MaterialLayout.prototype.drawerToggleHandler_=function(){"use strict";this.drawer_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN)},MaterialLayout.prototype.headerTransitionEndHandler=function(){"use strict";this.header_.classList.remove(this.CssClasses_.IS_ANIMATING)},MaterialLayout.prototype.headerClickHandler=function(){"use strict";this.header_.classList.contains(this.CssClasses_.IS_COMPACT)&&(this.header_.classList.remove(this.CssClasses_.IS_COMPACT),this.header_.classList.add(this.CssClasses_.IS_ANIMATING))},MaterialLayout.prototype.resetTabState_=function(e){"use strict";for(var t=0;t0?_.classList.add(this.CssClasses_.IS_ACTIVE):_.classList.remove(this.CssClasses_.IS_ACTIVE),this.tabBar_.scrollLeft0)return;this.setFrameCount(1);var i,n,a=e.currentTarget.getBoundingClientRect();if(0===e.clientX&&0===e.clientY)i=Math.round(a.width/2),n=Math.round(a.height/2);else{var l=e.clientX?e.clientX:e.touches[0].clientX,r=e.clientY?e.clientY:e.touches[0].clientY;i=Math.round(l-a.left),n=Math.round(r-a.top)}this.setRippleXY(i,n),this.setRippleStyles(!0),window.requestAnimationFrame(this.animFrameHandler.bind(this))}},MaterialRipple.prototype.upHandler_=function(e){"use strict";e&&2!==e.detail&&this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE)},MaterialRipple.prototype.init=function(){"use strict";if(this.element_){var e=this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS)||(this.rippleElement_=this.element_.querySelector("."+this.CssClasses_.RIPPLE),this.frameCount_=0,this.rippleSize_=0,this.x_=0,this.y_=0,this.ignoringMouseDown_=!1,this.boundDownHandler=this.downHandler_.bind(this),this.element_.addEventListener("mousedown",this.boundDownHandler),this.element_.addEventListener("touchstart",this.boundDownHandler),this.boundUpHandler=this.upHandler_.bind(this),this.element_.addEventListener("mouseup",this.boundUpHandler),this.element_.addEventListener("mouseleave",this.boundUpHandler),this.element_.addEventListener("touchend",this.boundUpHandler),this.element_.addEventListener("blur",this.boundUpHandler),this.getFrameCount=function(){return this.frameCount_},this.setFrameCount=function(e){this.frameCount_=e},this.getRippleElement=function(){return this.rippleElement_},this.setRippleXY=function(e,t){this.x_=e,this.y_=t},this.setRippleStyles=function(t){if(null!==this.rippleElement_){var s,i,n,a="translate("+this.x_+"px, "+this.y_+"px)";t?(i=this.Constant_.INITIAL_SCALE,n=this.Constant_.INITIAL_SIZE):(i=this.Constant_.FINAL_SCALE,n=this.rippleSize_+"px",e&&(a="translate("+this.boundWidth/2+"px, "+this.boundHeight/2+"px)")),s="translate(-50%, -50%) "+a+i,this.rippleElement_.style.webkitTransform=s,this.rippleElement_.style.msTransform=s,this.rippleElement_.style.transform=s,t?this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING):this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING)}},this.animFrameHandler=function(){this.frameCount_-->0?window.requestAnimationFrame(this.animFrameHandler.bind(this)):this.setRippleStyles(!1)})}},MaterialRipple.prototype.mdlDowngrade_=function(){"use strict";this.element_.removeEventListener("mousedown",this.boundDownHandler),this.element_.removeEventListener("touchstart",this.boundDownHandler),this.element_.removeEventListener("mouseup",this.boundUpHandler),this.element_.removeEventListener("mouseleave",this.boundUpHandler),this.element_.removeEventListener("touchend",this.boundUpHandler),this.element_.removeEventListener("blur",this.boundUpHandler)},componentHandler.register({constructor:MaterialRipple,classAsString:"MaterialRipple",cssClass:"mdl-js-ripple-effect",widget:!1}); +function MaterialButton(e){"use strict";this.element_=e,this.init()}function MaterialCheckbox(e){"use strict";this.element_=e,this.init()}function MaterialIconToggle(e){"use strict";this.element_=e,this.init()}function MaterialMenu(e){"use strict";this.element_=e,this.init()}function MaterialProgress(e){"use strict";this.element_=e,this.init()}function MaterialRadio(e){"use strict";this.element_=e,this.init()}function MaterialSlider(e){"use strict";this.element_=e,this.isIE_=window.navigator.msPointerEnabled,this.init()}function MaterialSpinner(e){"use strict";this.element_=e,this.init()}function MaterialSwitch(e){"use strict";this.element_=e,this.init()}function MaterialTabs(e){"use strict";this.element_=e,this.init()}function MaterialTab(e,t){"use strict";if(e){if(t.element_.classList.contains(t.CssClasses_.MDL_JS_RIPPLE_EFFECT)){var s=document.createElement("span");s.classList.add(t.CssClasses_.MDL_RIPPLE_CONTAINER),s.classList.add(t.CssClasses_.MDL_JS_RIPPLE_EFFECT);var i=document.createElement("span");i.classList.add(t.CssClasses_.MDL_RIPPLE),s.appendChild(i),e.appendChild(s)}e.addEventListener("click",function(s){s.preventDefault();var i=e.href.split("#")[1],n=t.element_.querySelector("#"+i);t.resetTabState_(),t.resetPanelState_(),e.classList.add(t.CssClasses_.ACTIVE_CLASS),n.classList.add(t.CssClasses_.ACTIVE_CLASS)})}}function MaterialTextfield(e){"use strict";this.element_=e,this.maxRows=this.Constant_.NO_MAX_ROWS,this.init()}function MaterialTooltip(e){"use strict";this.element_=e,this.init()}function MaterialLayout(e){"use strict";this.element_=e,this.init()}function MaterialLayoutTab(e,t,s,i){"use strict";if(e){if(i.tabBar_.classList.contains(i.CssClasses_.JS_RIPPLE_EFFECT)){var n=document.createElement("span");n.classList.add(i.CssClasses_.RIPPLE_CONTAINER),n.classList.add(i.CssClasses_.JS_RIPPLE_EFFECT);var a=document.createElement("span");a.classList.add(i.CssClasses_.RIPPLE),n.appendChild(a),e.appendChild(n)}e.addEventListener("click",function(n){n.preventDefault();var a=e.href.split("#")[1],l=i.content_.querySelector("#"+a);i.resetTabState_(t),i.resetPanelState_(s),e.classList.add(i.CssClasses_.IS_ACTIVE),l.classList.add(i.CssClasses_.IS_ACTIVE)})}}function MaterialDataTable(e){"use strict";this.element_=e,this.init()}function MaterialRipple(e){"use strict";this.element_=e,this.init()}var componentHandler=function(){"use strict";function e(e,t){for(var s=0;sd;d++){if(o=l[d],!o)throw new Error("Unable to find a registered component for the given class.");a.push(o.className),i.setAttribute("data-upgraded",a.join(","));var h=new o.classConstructor(i);h[C]=o,u.push(h);for(var p=0,E=o.callbacks.length;E>p;p++)o.callbacks[p](i);o.widget&&(i[o.className]=h);var m=document.createEvent("Events");m.initEvent("mdl-componentupgraded",!0,!0),i.dispatchEvent(m)}}function a(e){Array.isArray(e)||(e="function"==typeof e.item?Array.prototype.slice.call(e):[e]);for(var t,s=0,i=e.length;i>s;s++)t=e[s],t instanceof HTMLElement&&(t.children.length>0&&a(t.children),n(t))}function l(t){var s={classConstructor:t.constructor,className:t.classAsString,cssClass:t.cssClass,widget:void 0===t.widget?!0:t.widget,callbacks:[]};if(c.forEach(function(e){if(e.cssClass===s.cssClass)throw new Error("The provided cssClass has already been registered.");if(e.className===s.className)throw new Error("The provided className has already been registered")}),t.constructor.prototype.hasOwnProperty(C))throw new Error("MDL component classes must not have "+C+" defined as a property.");var i=e(t.classAsString,s);i||c.push(s)}function r(t,s){var i=e(t);i&&i.callbacks.push(s)}function o(){for(var e=0;e0&&this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)&&(e.keyCode===this.Keycodes_.UP_ARROW?(e.preventDefault(),t[t.length-1].focus()):e.keyCode===this.Keycodes_.DOWN_ARROW&&(e.preventDefault(),t[0].focus()))}},MaterialMenu.prototype.handleItemKeyboardEvent_=function(e){"use strict";if(this.element_&&this.container_){var t=this.element_.querySelectorAll("."+this.CssClasses_.ITEM+":not([disabled])");if(t&&t.length>0&&this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)){var s=Array.prototype.slice.call(t).indexOf(e.target);if(e.keyCode===this.Keycodes_.UP_ARROW)e.preventDefault(),s>0?t[s-1].focus():t[t.length-1].focus();else if(e.keyCode===this.Keycodes_.DOWN_ARROW)e.preventDefault(),t.length>s+1?t[s+1].focus():t[0].focus();else if(e.keyCode===this.Keycodes_.SPACE||e.keyCode===this.Keycodes_.ENTER){e.preventDefault();var i=new MouseEvent("mousedown");e.target.dispatchEvent(i),i=new MouseEvent("mouseup"),e.target.dispatchEvent(i),e.target.click()}else e.keyCode===this.Keycodes_.ESCAPE&&(e.preventDefault(),this.hide())}}},MaterialMenu.prototype.handleItemClick_=function(e){"use strict";null!==e.target.getAttribute("disabled")?e.stopPropagation():(this.closing_=!0,window.setTimeout(function(e){this.hide(),this.closing_=!1}.bind(this),this.Constant_.CLOSE_TIMEOUT))},MaterialMenu.prototype.applyClip_=function(e,t){"use strict";this.element_.style.clip=this.element_.classList.contains(this.CssClasses_.UNALIGNED)?null:this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)?"rect(0 "+t+"px 0 "+t+"px)":this.element_.classList.contains(this.CssClasses_.TOP_LEFT)?"rect("+e+"px 0 "+e+"px 0)":this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)?"rect("+e+"px "+t+"px "+e+"px "+t+"px)":null},MaterialMenu.prototype.addAnimationEndListener_=function(){"use strict";var e=function(){this.element_.removeEventListener("transitionend",e),this.element_.removeEventListener("webkitTransitionEnd",e),this.element_.classList.remove(this.CssClasses_.IS_ANIMATING)}.bind(this);this.element_.addEventListener("transitionend",e),this.element_.addEventListener("webkitTransitionEnd",e)},MaterialMenu.prototype.show=function(e){"use strict";if(this.element_&&this.container_&&this.outline_){var t=this.element_.getBoundingClientRect().height,s=this.element_.getBoundingClientRect().width;this.container_.style.width=s+"px",this.container_.style.height=t+"px",this.outline_.style.width=s+"px",this.outline_.style.height=t+"px";for(var i=this.Constant_.TRANSITION_DURATION_SECONDS*this.Constant_.TRANSITION_DURATION_FRACTION,n=this.element_.querySelectorAll("."+this.CssClasses_.ITEM),a=0;a=this.maxRows&&e.preventDefault()},MaterialTextfield.prototype.onFocus_=function(e){"use strict";this.element_.classList.add(this.CssClasses_.IS_FOCUSED)},MaterialTextfield.prototype.onBlur_=function(e){"use strict";this.element_.classList.remove(this.CssClasses_.IS_FOCUSED)},MaterialTextfield.prototype.updateClasses_=function(){"use strict";this.checkDisabled(),this.checkValidity(),this.checkDirty()},MaterialTextfield.prototype.checkDisabled=function(){"use strict";this.input_.disabled?this.element_.classList.add(this.CssClasses_.IS_DISABLED):this.element_.classList.remove(this.CssClasses_.IS_DISABLED)},MaterialTextfield.prototype.checkValidity=function(){"use strict";this.input_.validity.valid?this.element_.classList.remove(this.CssClasses_.IS_INVALID):this.element_.classList.add(this.CssClasses_.IS_INVALID)},MaterialTextfield.prototype.checkDirty=function(){"use strict";this.input_.value&&this.input_.value.length>0?this.element_.classList.add(this.CssClasses_.IS_DIRTY):this.element_.classList.remove(this.CssClasses_.IS_DIRTY)},MaterialTextfield.prototype.disable=function(){"use strict";this.input_.disabled=!0,this.updateClasses_()},MaterialTextfield.prototype.enable=function(){"use strict";this.input_.disabled=!1,this.updateClasses_()},MaterialTextfield.prototype.change=function(e){"use strict";e&&(this.input_.value=e),this.updateClasses_()},MaterialTextfield.prototype.init=function(){"use strict";this.element_&&(this.label_=this.element_.querySelector("."+this.CssClasses_.LABEL),this.input_=this.element_.querySelector("."+this.CssClasses_.INPUT),this.input_&&(this.input_.hasAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE)&&(this.maxRows=parseInt(this.input_.getAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE),10),isNaN(this.maxRows)&&(this.maxRows=this.Constant_.NO_MAX_ROWS)),this.boundUpdateClassesHandler=this.updateClasses_.bind(this),this.boundFocusHandler=this.onFocus_.bind(this),this.boundBlurHandler=this.onBlur_.bind(this),this.input_.addEventListener("input",this.boundUpdateClassesHandler),this.input_.addEventListener("focus",this.boundFocusHandler),this.input_.addEventListener("blur",this.boundBlurHandler),this.maxRows!==this.Constant_.NO_MAX_ROWS&&(this.boundKeyDownHandler=this.onKeyDown_.bind(this),this.input_.addEventListener("keydown",this.boundKeyDownHandler)),this.updateClasses_(),this.element_.classList.add(this.CssClasses_.IS_UPGRADED)))},MaterialTextfield.prototype.mdlDowngrade_=function(){"use strict";this.input_.removeEventListener("input",this.boundUpdateClassesHandler),this.input_.removeEventListener("focus",this.boundFocusHandler),this.input_.removeEventListener("blur",this.boundBlurHandler),this.boundKeyDownHandler&&this.input_.removeEventListener("keydown",this.boundKeyDownHandler)},componentHandler.register({constructor:MaterialTextfield,classAsString:"MaterialTextfield",cssClass:"mdl-js-textfield",widget:!0}),MaterialTooltip.prototype.Constant_={},MaterialTooltip.prototype.CssClasses_={IS_ACTIVE:"is-active"},MaterialTooltip.prototype.handleMouseEnter_=function(e){"use strict";e.stopPropagation();var t=e.target.getBoundingClientRect(),s=t.left+t.width/2,i=-1*(this.element_.offsetWidth/2);0>s+i?(this.element_.style.left=0,this.element_.style.marginLeft=0):(this.element_.style.left=s+"px",this.element_.style.marginLeft=i+"px"),this.element_.style.top=t.top+t.height+10+"px",this.element_.classList.add(this.CssClasses_.IS_ACTIVE),window.addEventListener("scroll",this.boundMouseLeaveHandler,!1),window.addEventListener("touchmove",this.boundMouseLeaveHandler,!1)},MaterialTooltip.prototype.handleMouseLeave_=function(e){"use strict";e.stopPropagation(),this.element_.classList.remove(this.CssClasses_.IS_ACTIVE),window.removeEventListener("scroll",this.boundMouseLeaveHandler),window.removeEventListener("touchmove",this.boundMouseLeaveHandler,!1)},MaterialTooltip.prototype.init=function(){"use strict";if(this.element_){var e=this.element_.getAttribute("for");e&&(this.forElement_=document.getElementById(e)),this.forElement_&&(this.forElement_.getAttribute("tabindex")||this.forElement_.setAttribute("tabindex","0"),this.boundMouseEnterHandler=this.handleMouseEnter_.bind(this),this.boundMouseLeaveHandler=this.handleMouseLeave_.bind(this),this.forElement_.addEventListener("mouseenter",this.boundMouseEnterHandler,!1),this.forElement_.addEventListener("click",this.boundMouseEnterHandler,!1),this.forElement_.addEventListener("blur",this.boundMouseLeaveHandler),this.forElement_.addEventListener("touchstart",this.boundMouseEnterHandler,!1),this.forElement_.addEventListener("mouseleave",this.boundMouseLeaveHandler))}},MaterialTooltip.prototype.mdlDowngrade_=function(){"use strict";this.forElement_&&(this.forElement_.removeEventListener("mouseenter",this.boundMouseEnterHandler,!1),this.forElement_.removeEventListener("click",this.boundMouseEnterHandler,!1),this.forElement_.removeEventListener("touchstart",this.boundMouseEnterHandler,!1),this.forElement_.removeEventListener("mouseleave",this.boundMouseLeaveHandler))},componentHandler.register({constructor:MaterialTooltip,classAsString:"MaterialTooltip",cssClass:"mdl-tooltip"}),MaterialLayout.prototype.Constant_={MAX_WIDTH:"(max-width: 1024px)",TAB_SCROLL_PIXELS:100,MENU_ICON:"menu",CHEVRON_LEFT:"chevron_left",CHEVRON_RIGHT:"chevron_right"},MaterialLayout.prototype.Mode_={STANDARD:0,SEAMED:1,WATERFALL:2,SCROLL:3},MaterialLayout.prototype.CssClasses_={CONTAINER:"mdl-layout__container",HEADER:"mdl-layout__header",DRAWER:"mdl-layout__drawer",CONTENT:"mdl-layout__content",DRAWER_BTN:"mdl-layout__drawer-button",ICON:"material-icons",JS_RIPPLE_EFFECT:"mdl-js-ripple-effect",RIPPLE_CONTAINER:"mdl-layout__tab-ripple-container",RIPPLE:"mdl-ripple",RIPPLE_IGNORE_EVENTS:"mdl-js-ripple-effect--ignore-events",HEADER_SEAMED:"mdl-layout__header--seamed",HEADER_WATERFALL:"mdl-layout__header--waterfall",HEADER_SCROLL:"mdl-layout__header--scroll",FIXED_HEADER:"mdl-layout--fixed-header",OBFUSCATOR:"mdl-layout__obfuscator",TAB_BAR:"mdl-layout__tab-bar",TAB_CONTAINER:"mdl-layout__tab-bar-container",TAB:"mdl-layout__tab",TAB_BAR_BUTTON:"mdl-layout__tab-bar-button",TAB_BAR_LEFT_BUTTON:"mdl-layout__tab-bar-left-button",TAB_BAR_RIGHT_BUTTON:"mdl-layout__tab-bar-right-button",PANEL:"mdl-layout__tab-panel",HAS_DRAWER:"has-drawer",HAS_TABS:"has-tabs",HAS_SCROLLING_HEADER:"has-scrolling-header",CASTING_SHADOW:"is-casting-shadow",IS_COMPACT:"is-compact",IS_SMALL_SCREEN:"is-small-screen",IS_DRAWER_OPEN:"is-visible",IS_ACTIVE:"is-active",IS_UPGRADED:"is-upgraded",IS_ANIMATING:"is-animating",ON_LARGE_SCREEN:"mdl-layout--large-screen-only",ON_SMALL_SCREEN:"mdl-layout--small-screen-only"},MaterialLayout.prototype.contentScrollHandler_=function(){"use strict";this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)||(this.content_.scrollTop>0&&!this.header_.classList.contains(this.CssClasses_.IS_COMPACT)?(this.header_.classList.add(this.CssClasses_.CASTING_SHADOW),this.header_.classList.add(this.CssClasses_.IS_COMPACT),this.header_.classList.add(this.CssClasses_.IS_ANIMATING)):this.content_.scrollTop<=0&&this.header_.classList.contains(this.CssClasses_.IS_COMPACT)&&(this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW),this.header_.classList.remove(this.CssClasses_.IS_COMPACT),this.header_.classList.add(this.CssClasses_.IS_ANIMATING)))},MaterialLayout.prototype.screenSizeHandler_=function(){"use strict";this.screenSizeMediaQuery_.matches?this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN):(this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN),this.drawer_&&this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN))},MaterialLayout.prototype.drawerToggleHandler_=function(){"use strict";this.drawer_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN)},MaterialLayout.prototype.headerTransitionEndHandler=function(){"use strict";this.header_.classList.remove(this.CssClasses_.IS_ANIMATING)},MaterialLayout.prototype.headerClickHandler=function(){"use strict";this.header_.classList.contains(this.CssClasses_.IS_COMPACT)&&(this.header_.classList.remove(this.CssClasses_.IS_COMPACT),this.header_.classList.add(this.CssClasses_.IS_ANIMATING))},MaterialLayout.prototype.resetTabState_=function(e){"use strict";for(var t=0;t0?d.classList.add(this.CssClasses_.IS_ACTIVE):d.classList.remove(this.CssClasses_.IS_ACTIVE),this.tabBar_.scrollLeft0)return;this.setFrameCount(1);var i,n,a=e.currentTarget.getBoundingClientRect();if(0===e.clientX&&0===e.clientY)i=Math.round(a.width/2),n=Math.round(a.height/2);else{var l=e.clientX?e.clientX:e.touches[0].clientX,r=e.clientY?e.clientY:e.touches[0].clientY;i=Math.round(l-a.left),n=Math.round(r-a.top)}this.setRippleXY(i,n),this.setRippleStyles(!0),window.requestAnimationFrame(this.animFrameHandler.bind(this))}},MaterialRipple.prototype.upHandler_=function(e){"use strict";e&&2!==e.detail&&this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE)},MaterialRipple.prototype.init=function(){"use strict";if(this.element_){var e=this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS)||(this.rippleElement_=this.element_.querySelector("."+this.CssClasses_.RIPPLE),this.frameCount_=0,this.rippleSize_=0,this.x_=0,this.y_=0,this.ignoringMouseDown_=!1,this.boundDownHandler=this.downHandler_.bind(this),this.element_.addEventListener("mousedown",this.boundDownHandler),this.element_.addEventListener("touchstart",this.boundDownHandler),this.boundUpHandler=this.upHandler_.bind(this),this.element_.addEventListener("mouseup",this.boundUpHandler),this.element_.addEventListener("mouseleave",this.boundUpHandler),this.element_.addEventListener("touchend",this.boundUpHandler),this.element_.addEventListener("blur",this.boundUpHandler),this.getFrameCount=function(){return this.frameCount_},this.setFrameCount=function(e){this.frameCount_=e},this.getRippleElement=function(){return this.rippleElement_},this.setRippleXY=function(e,t){this.x_=e,this.y_=t},this.setRippleStyles=function(t){if(null!==this.rippleElement_){var s,i,n,a="translate("+this.x_+"px, "+this.y_+"px)";t?(i=this.Constant_.INITIAL_SCALE,n=this.Constant_.INITIAL_SIZE):(i=this.Constant_.FINAL_SCALE,n=this.rippleSize_+"px",e&&(a="translate("+this.boundWidth/2+"px, "+this.boundHeight/2+"px)")),s="translate(-50%, -50%) "+a+i,this.rippleElement_.style.webkitTransform=s,this.rippleElement_.style.msTransform=s,this.rippleElement_.style.transform=s,t?this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING):this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING)}},this.animFrameHandler=function(){this.frameCount_-->0?window.requestAnimationFrame(this.animFrameHandler.bind(this)):this.setRippleStyles(!1)})}},MaterialRipple.prototype.mdlDowngrade_=function(){"use strict";this.element_.removeEventListener("mousedown",this.boundDownHandler),this.element_.removeEventListener("touchstart",this.boundDownHandler),this.element_.removeEventListener("mouseup",this.boundUpHandler),this.element_.removeEventListener("mouseleave",this.boundUpHandler),this.element_.removeEventListener("touchend",this.boundUpHandler),this.element_.removeEventListener("blur",this.boundUpHandler)},componentHandler.register({constructor:MaterialRipple,classAsString:"MaterialRipple",cssClass:"mdl-js-ripple-effect",widget:!1}); //# sourceMappingURL=material.min.js.map \ No newline at end of file From 43faa5f7275ae0d21abbc060c5d50350c539ee13 Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Wed, 5 Aug 2015 14:06:33 +0200 Subject: [PATCH 66/84] * [ADD] New search by file name * [MOD] Updated info page --- inc/AccountSearch.class.php | 75 ++++++++++++++++++++----------- inc/DBConnectionFactory.class.php | 7 ++- inc/themes/classic/info.inc | 29 +++++------- inc/themes/material-blue/info.inc | 29 +++++------- web/ConfigC.class.php | 1 + web/SearchC.class.php | 2 +- 6 files changed, 79 insertions(+), 64 deletions(-) diff --git a/inc/AccountSearch.class.php b/inc/AccountSearch.class.php index c485d078..9c07c283 100644 --- a/inc/AccountSearch.class.php +++ b/inc/AccountSearch.class.php @@ -250,27 +250,6 @@ class AccountSearch break; } - $querySelect = 'SELECT DISTINCT ' - . 'account_id,' - . 'account_customerId,' - . 'category_name,' - . 'account_name,' - . 'account_login,' - . 'account_url,' - . 'account_notes,' - . 'account_userId,' - . 'account_userGroupId,' - . 'BIN(account_otherUserEdit) AS account_otherUserEdit,' - . 'BIN(account_otherGroupEdit) AS account_otherGroupEdit,' - . 'usergroup_name,' - . 'customer_name ' - . 'FROM accounts ' - . 'LEFT JOIN categories ON account_categoryId = category_id ' - . 'LEFT JOIN usrGroups ug ON account_userGroupId = usergroup_id ' - . 'LEFT JOIN customers ON customer_id = account_customerId ' - . 'LEFT JOIN accUsers ON accuser_accountId = account_id ' - . 'LEFT JOIN accGroups ON accgroup_accountId = account_id'; - if ($this->getTxtSearch()) { // Analizar la cadena de búsqueda por etiquetas especiales $stringFilters = $this->analyzeQueryString(); @@ -279,9 +258,15 @@ class AccountSearch $i = 0; foreach($stringFilters as $column => $value){ - $parameter = $column . $i; + $parameter = 'P_' . $column . $i; + $rel = '='; - $arrFilterCommon[] = $column . ' = :' . $parameter; + if (preg_match('/name/i', $column)){ + $rel = 'LIKE'; + $value = '%' . $value . '%'; + } + + $arrFilterCommon[] = $column . ' ' . $rel . ' :' . $parameter; $data[$parameter] = $value; $i++; } @@ -355,14 +340,45 @@ class AccountSearch } if (count($arrQueryWhere) === 1) { - $query = $querySelect . ' WHERE ' . implode($arrQueryWhere) . ' ' . $queryOrder . ' ' . $queryLimit; + $queryWhere = ' WHERE ' . implode($arrQueryWhere) . ' '; +// $query = $querySelect . ' WHERE ' . implode($arrQueryWhere) . ' ' . $queryOrder . ' ' . $queryLimit; } elseif (count($arrQueryWhere) > 1) { - $query = $querySelect . ' WHERE ' . implode(' AND ', $arrQueryWhere) . ' ' . $queryOrder . ' ' . $queryLimit; + $queryWhere = ' WHERE ' . implode(' AND ', $arrQueryWhere . ' '); +// $queryWhere = ' WHERE ' . implode(' AND ', $arrQueryWhere) . ' ' . $queryOrder . ' ' . $queryLimit; } else { - $query = $querySelect . ' ' . $queryOrder . ' ' . $queryLimit; + $queryWhere = ''; +// $query = $querySelect . ' ' . $queryOrder . ' ' . $queryLimit; } + $query = 'SELECT DISTINCT ' + . 'account_id,' + . 'account_customerId,' + . 'category_name,' + . 'account_name,' + . 'account_login,' + . 'account_url,' + . 'account_notes,' + . 'account_userId,' + . 'account_userGroupId,' + . 'BIN(account_otherUserEdit) AS account_otherUserEdit,' + . 'BIN(account_otherGroupEdit) AS account_otherGroupEdit,' + . 'usergroup_name,' + . 'customer_name,' + . 'count(accfile_id) as num_files ' + . 'FROM accounts ' + . 'LEFT JOIN accFiles ON account_id = accfile_accountId ' + . 'LEFT JOIN categories ON account_categoryId = category_id ' + . 'LEFT JOIN usrGroups ug ON account_userGroupId = usergroup_id ' + . 'LEFT JOIN customers ON customer_id = account_customerId ' + . 'LEFT JOIN accUsers ON accuser_accountId = account_id ' + . 'LEFT JOIN accGroups ON accgroup_accountId = account_id ' + . $queryWhere + . 'GROUP BY account_id ' + . $queryOrder . ' ' + . $queryLimit . ' '; + // print_r($query); + error_log($query); // Obtener el número total de cuentas visibles por el usuario DB::setFullRowCount(); @@ -430,7 +446,7 @@ class AccountSearch */ private function analyzeQueryString() { - preg_match('/:(user|group)\s(.*)/i', $this->_txtSearch, $filters); + preg_match('/:(user|group|file)\s(.*)/i', $this->_txtSearch, $filters); if(count($filters) === 1){ return false; @@ -449,6 +465,11 @@ class AccountSearch 'accgroup_groupId' => Groups::getGroupIdByName(Html::sanitize($filters[2])) ); break; + case 'file': + return array( + 'accfile_name' => Html::sanitize($filters[2]) + ); + break; default: return false; } diff --git a/inc/DBConnectionFactory.class.php b/inc/DBConnectionFactory.class.php index cdf4e2b2..265a848f 100644 --- a/inc/DBConnectionFactory.class.php +++ b/inc/DBConnectionFactory.class.php @@ -25,6 +25,8 @@ namespace SP; +use \PDO; + defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); /** @@ -91,7 +93,7 @@ class DBConnectionFactory try { $dsn = 'mysql:host=' . $dbhost . ';port=' . $dbport . ';dbname=' . $dbname . ';charset=utf8'; // $this->db = new PDO($dsn, $dbuser, $dbpass, array(PDO::ATTR_PERSISTENT => true)); - $this->_db = new \PDO($dsn, $dbuser, $dbpass); + $this->_db = new PDO($dsn, $dbuser, $dbpass); } catch (\Exception $e) { if ($isInstalled) { if ($e->getCode() === 1049) { @@ -105,7 +107,8 @@ class DBConnectionFactory } } - $this->_db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); + $this->_db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); + $this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); return $this->_db; } diff --git a/inc/themes/classic/info.inc b/inc/themes/classic/info.inc index cb310163..af4109a7 100644 --- a/inc/themes/classic/info.inc +++ b/inc/themes/classic/info.inc @@ -10,7 +10,7 @@ - + @@ -19,9 +19,10 @@ $infoval): ?> - -

      + +
      + @@ -29,19 +30,13 @@ - -

      - -
        - -
      • - -
      -

      - -

      - -

      + +
      + +
      + +
      + @@ -49,7 +44,7 @@ - + diff --git a/inc/themes/material-blue/info.inc b/inc/themes/material-blue/info.inc index cb310163..af4109a7 100644 --- a/inc/themes/material-blue/info.inc +++ b/inc/themes/material-blue/info.inc @@ -10,7 +10,7 @@ - + @@ -19,9 +19,10 @@ $infoval): ?> - -

      + +
      + @@ -29,19 +30,13 @@ - -

      - -
        - -
      • - -
      -

      - -

      - -

      + +
      + +
      + +
      + @@ -49,7 +44,7 @@ - + diff --git a/web/ConfigC.class.php b/web/ConfigC.class.php index 703a796d..411cfacd 100644 --- a/web/ConfigC.class.php +++ b/web/ConfigC.class.php @@ -222,6 +222,7 @@ class ConfigC extends Controller implements ActionsInterface $this->view->addTemplate('info'); $this->view->assign('dbInfo', \SP\DB::getDBinfo()); + $this->view->assign('dbName', \SP\Config::getValue('dbname') . '@' . \SP\Config::getValue('dbhost')); $this->view->append('tabs', array('title' => _('Información'))); $this->view->assign('tabIndex', $this->getTabIndex(), 'info'); diff --git a/web/SearchC.class.php b/web/SearchC.class.php index c68d9aa6..eab89b90 100644 --- a/web/SearchC.class.php +++ b/web/SearchC.class.php @@ -248,7 +248,7 @@ class SearchC extends Controller implements ActionsInterface 'url_islink' => (preg_match("#^https?://.*#i", $account->account_url)) ? true : false, 'notes' => $accountNotes, 'accesses' => (isset($secondaryAccesses)) ? $secondaryAccesses : '', - 'numFiles' => (\SP\Util::fileIsEnabled()) ? \SP\Files::countFiles($account->account_id) : 0, + 'numFiles' => (\SP\Util::fileIsEnabled()) ? $account->num_files : 0, 'show' => $show, 'showView' => $accView, 'showViewPass' => $accViewPass, From 41835698c8203cdc8f07fbaf8c6b7e58666cc9d1 Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Thu, 6 Aug 2015 00:31:43 +0200 Subject: [PATCH 67/84] * [FIX] Fixed installer issue. * [FIX] Fixed mail form issue. * [MOD] Installer UI Tweaks. --- inc/AccountSearch.class.php | 2 +- inc/Installer.class.php | 2 +- inc/Util.class.php | 2 +- inc/dbstructure.sql | 1 + inc/themes/material-blue/css/styles.css | 25 +++++++++++++++---------- inc/themes/material-blue/install.inc | 5 ++--- inc/themes/material-blue/mail.inc | 2 +- 7 files changed, 22 insertions(+), 17 deletions(-) diff --git a/inc/AccountSearch.class.php b/inc/AccountSearch.class.php index 9c07c283..49b1bd55 100644 --- a/inc/AccountSearch.class.php +++ b/inc/AccountSearch.class.php @@ -378,7 +378,7 @@ class AccountSearch . $queryLimit . ' '; // print_r($query); - error_log($query); +// error_log($query); // Obtener el número total de cuentas visibles por el usuario DB::setFullRowCount(); diff --git a/inc/Installer.class.php b/inc/Installer.class.php index 2fb7185b..d0d04126 100644 --- a/inc/Installer.class.php +++ b/inc/Installer.class.php @@ -489,7 +489,7 @@ class Installer Config::setArrConfigValue('lastupdatempass', time()); Config::writeConfigDb(true); - if (!UserUtil::updateUserMPass($User->getUserId(), $User->getUserPass(), self::$_masterPassword)) { + if (!$User->updateUserMPass(self::$_masterPassword)) { self::rollback(); throw new SPException(SPException::SP_CRITICAL diff --git a/inc/Util.class.php b/inc/Util.class.php index 892cd554..32295a66 100644 --- a/inc/Util.class.php +++ b/inc/Util.class.php @@ -669,7 +669,7 @@ class Util { $appinfo = array( 'appname' => 'sysPass', - 'appdesc' => 'Sysadmin Password Manager', + 'appdesc' => 'Systems Password Manager', 'appwebsite' => 'http://www.syspass.org', 'appblog' => 'http://www.cygnux.org', 'appdoc' => 'http://wiki.syspass.org', diff --git a/inc/dbstructure.sql b/inc/dbstructure.sql index c347acb2..abde2be6 100644 --- a/inc/dbstructure.sql +++ b/inc/dbstructure.sql @@ -24,6 +24,7 @@ CREATE TABLE `accFiles` ( `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=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; diff --git a/inc/themes/material-blue/css/styles.css b/inc/themes/material-blue/css/styles.css index c53ab294..cf1ef54a 100644 --- a/inc/themes/material-blue/css/styles.css +++ b/inc/themes/material-blue/css/styles.css @@ -1611,9 +1611,9 @@ fieldset.warning a { text-align: center; color: #a9a9a9; letter-spacing: 3px; - box-shadow: 0px 8px 6px -6px #a9a9a9; - -webkit-box-shadow: 0px 8px 6px -6px #a9a9a9; - -moz-box-shadow: 0px 8px 6px -6px #a9a9a9; + box-shadow: 0px 8px 6px -6px rgba(83, 109, 254, .3); + -webkit-box-shadow: 0px 8px 6px -6px rgba(83, 109, 254, .3); + -moz-box-shadow: 0px 8px 6px -6px rgba(83, 109, 254, .3); } #actions #logo img { @@ -1624,7 +1624,7 @@ fieldset.warning a { position: relative; top: 30px; left: -100px; - text-shadow: 3px 3px #fff; + color: rgb(96, 125, 139); } #actions ul.errors { @@ -1670,7 +1670,7 @@ fieldset.warning a { } #actions form { - width: 400px; + width: 450px; margin: 0 auto; text-align: left; } @@ -1678,13 +1678,18 @@ fieldset.warning a { #actions form fieldset legend { width: 100%; margin-top: 1em; - font-weight: bold; - color: rgb(96, 125, 139); - text-shadow: 0 1px 0 white; + /*color: rgb(96, 125, 139);*/ + color: #fff; + /*text-shadow: 0 1px 0 white;*/ font-size: 14px; - text-align: left; - border-bottom: 2px solid rgb(96, 125, 139); + font-weight: bold; + text-align: center; + /*border-bottom: 2px solid rgb(96, 125, 139);*/ + background-color: rgb(96, 125, 139); margin-bottom: 1em; + border-radius: 5px; + letter-spacing: .2em; + padding: .2em 0; } #actions div.buttons { diff --git a/inc/themes/material-blue/install.inc b/inc/themes/material-blue/install.inc index 155c04ed..4b1d3fa2 100644 --- a/inc/themes/material-blue/install.inc +++ b/inc/themes/material-blue/install.inc @@ -1,7 +1,7 @@
      0): ?> @@ -89,7 +89,6 @@
      - remove_red_eye
      - +
      +
      + \ No newline at end of file diff --git a/inc/themes/material-blue/users.inc b/inc/themes/material-blue/users.inc index 0af0a222..7fe9390b 100644 --- a/inc/themes/material-blue/users.inc +++ b/inc/themes/material-blue/users.inc @@ -42,7 +42,8 @@ - required> $name): ?> $name): ?>
      @@ -99,6 +103,16 @@ title=""> isMgmCustomers()) ? 'CHECKED' : ''; ?> /> + + isMgmCustomFields()) ? 'CHECKED' : ''; ?> /> +
      + + isMgmApiTokens()) ? 'CHECKED' : ''; ?> /> +
      diff --git a/inc/themes/classic/users.inc b/inc/themes/classic/users.inc index aa956a08..cfd30b13 100644 --- a/inc/themes/classic/users.inc +++ b/inc/themes/classic/users.inc @@ -120,6 +120,35 @@
      + + + + + + text; ?> + help): ?> + + + + + + + required) ? 'required' : ''; ?>> + + value; ?> + + + + + + diff --git a/inc/themes/material-blue/account.inc b/inc/themes/material-blue/account.inc index 3cf3f329..fbe7c5f9 100644 --- a/inc/themes/material-blue/account.inc +++ b/inc/themes/material-blue/account.inc @@ -278,7 +278,7 @@ - +user_editName): ?> user_editName): ?> @@ -286,8 +286,45 @@ + + + + + + + + + +
      + text; ?> + help): ?> +
      help_outline
      +
      +

      help; ?>

      +
      + +
      + +
      + required) ? 'required' : ''; ?>> + +
      + + type === \SP\CustomFields::TYPE_PASSWORD && !$showViewPass):?> + **** + + value; ?> + + +
      + + @@ -382,9 +419,8 @@ lock_open - diff --git a/inc/themes/material-blue/categories.inc b/inc/themes/material-blue/categories.inc index 940203b1..00b2ab39 100644 --- a/inc/themes/material-blue/categories.inc +++ b/inc/themes/material-blue/categories.inc @@ -27,6 +27,35 @@ + + + + + + + +
      + text; ?> + help): ?> +
      help_outline
      +
      +

      help; ?>

      +
      + +
      + +
      + required) ? 'required' : ''; ?>> + +
      + + value; ?> + +
      diff --git a/inc/themes/material-blue/customers.inc b/inc/themes/material-blue/customers.inc index fe297876..0ea1bab8 100644 --- a/inc/themes/material-blue/customers.inc +++ b/inc/themes/material-blue/customers.inc @@ -27,6 +27,36 @@
      + + + + + + text; ?> + help): ?> +
      help_outline
      +
      +

      help; ?>

      +
      + + + + +
      + required) ? 'required' : ''; ?>> + +
      + + value; ?> + + + + + diff --git a/inc/themes/material-blue/customfields.inc b/inc/themes/material-blue/customfields.inc new file mode 100644 index 00000000..072309a8 --- /dev/null +++ b/inc/themes/material-blue/customfields.inc @@ -0,0 +1,83 @@ +
      +

      + +
      + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + +
      +
      + +
      + +
      +
      + + +
      +
      + +
      + + + + + + + +
      +
      +
      + +
      +
      + \ No newline at end of file diff --git a/inc/themes/material-blue/groups.inc b/inc/themes/material-blue/groups.inc index e702c96a..c78809a9 100644 --- a/inc/themes/material-blue/groups.inc +++ b/inc/themes/material-blue/groups.inc @@ -42,6 +42,36 @@ + + + + + text; ?> + help): ?> +
      help_outline
      +
      +

      help; ?>

      +
      + + + + +
      + required) ? 'required' : ''; ?>> + +
      + + value; ?> + + + + + + diff --git a/inc/themes/material-blue/js/functions.js b/inc/themes/material-blue/js/functions.js index 1d80af68..8b37a487 100644 --- a/inc/themes/material-blue/js/functions.js +++ b/inc/themes/material-blue/js/functions.js @@ -23,11 +23,11 @@ complexity.numlength = 10; jQuery.extend(jQuery.fancybox.defaults, { type: 'ajax', - autoWidth: 'true', - autoHeight: 'true', - autoResize: 'true', - autoCenter: 'true', - fitToView: 'true', + autoWidth: true, + autoHeight: true, + autoResize: true, + autoCenter: true, + fitToView: false, minHeight: 50, padding: 0, helpers: {overlay: {css: {'background': 'rgba(0, 0, 0, 0.1)'}}}, @@ -57,7 +57,7 @@ $(document).ready(function () { activeTooltip(); }); -function activeTooltip(){ +function activeTooltip() { "use strict"; // Activar tooltips @@ -1216,7 +1216,6 @@ function complexityDialog() { thisDialog.dialog('option', 'position', 'center'); - // Actualizar componentes de MDL thisDialog.ready(function () { $('#checkbox-numbers').prop('checked', complexity.numbers); @@ -1272,7 +1271,7 @@ function chosenDetect() { width: selectWidth }); - $(".sel-chosen-customer").each(function(){ + $(".sel-chosen-customer").each(function () { var deselect = $(this).hasClass('sel-chosen-deselect'); $(this).chosen({ @@ -1284,7 +1283,7 @@ function chosenDetect() { }); }); - $(".sel-chosen-category").each(function(){ + $(".sel-chosen-category").each(function () { var deselect = $(this).hasClass('sel-chosen-deselect'); $(this).chosen({ @@ -1296,7 +1295,7 @@ function chosenDetect() { }); }); - $(".sel-chosen-action").each(function(){ + $(".sel-chosen-action").each(function () { var deselect = $(this).hasClass('sel-chosen-deselect'); $(this).chosen({ @@ -1394,7 +1393,7 @@ function passwordDetect() { * * @param container El contenedor donde buscar */ -function checkboxDetect(container){ +function checkboxDetect(container) { "use strict"; $(container).find('.checkbox').button({ diff --git a/inc/themes/material-blue/profiles.inc b/inc/themes/material-blue/profiles.inc index 000e8aad..19313934 100644 --- a/inc/themes/material-blue/profiles.inc +++ b/inc/themes/material-blue/profiles.inc @@ -118,6 +118,16 @@ name="profile_customers" isMgmCustomers()) ? 'CHECKED' : ''; ?> /> + +
    diff --git a/inc/themes/material-blue/users.inc b/inc/themes/material-blue/users.inc index 7fe9390b..760cfc64 100644 --- a/inc/themes/material-blue/users.inc +++ b/inc/themes/material-blue/users.inc @@ -118,7 +118,7 @@
    + maxlength="1000">
    @@ -162,6 +162,37 @@ + + + + + + text; ?> + help): ?> +
    help_outline
    +
    +

    help; ?>

    +
    + + + + +
    + required) ? 'required' : ''; ?>> + +
    + + value; ?> + + + + + + diff --git a/web/AccountC.class.php b/web/AccountC.class.php index 6c80653e..222b0943 100644 --- a/web/AccountC.class.php +++ b/web/AccountC.class.php @@ -29,10 +29,10 @@ use SP\Account; use SP\AccountHistory; use SP\Acl; use SP\Common; +use SP\CustomFields; use SP\Groups; use SP\Session; use SP\SPException; -use SP\Users; use SP\UserUtil; defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); @@ -203,6 +203,7 @@ class AccountC extends Controller implements ActionsInterface $this->view->assign('customers', \SP\DB::getValuesForSelect('customers', 'customer_id', 'customer_name')); $this->view->assign('otherUsers', \SP\DB::getValuesForSelect('usrData', 'user_id', 'user_name')); $this->view->assign('otherGroups', \SP\DB::getValuesForSelect('usrGroups', 'usergroup_id', 'usergroup_name')); + $this->getCustomFieldsForItem(); } /** @@ -481,4 +482,17 @@ class AccountC extends Controller implements ActionsInterface $this->view->addTemplate('request'); } + + /** + * Obtener la lista de campos personalizados y sus valores + */ + private function getCustomFieldsForItem() + { + // Se comprueba que hayan campos con valores para la cuenta actual + if($this->isGotData() && CustomFields::checkCustomFieldExists(ActionsInterface::ACTION_ACC_NEW, $this->_id)){ + $this->view->assign('customFields', CustomFields::getCustomFieldsData(ActionsInterface::ACTION_ACC_NEW, $this->_id)); + } else { + $this->view->assign('customFields', CustomFields::getCustomFieldsForModule(ActionsInterface::ACTION_ACC_NEW)); + } + } } \ No newline at end of file diff --git a/web/AccountsMgmtC.class.php b/web/AccountsMgmtC.class.php index d3c343ce..aacfcac7 100644 --- a/web/AccountsMgmtC.class.php +++ b/web/AccountsMgmtC.class.php @@ -26,6 +26,8 @@ namespace SP\Controller; use SP\ApiTokens; +use SP\CustomFieldDef; +use SP\CustomFields; defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); @@ -40,6 +42,10 @@ class AccountsMgmtC extends Controller implements ActionsInterface * Máximo numero de acciones antes de agrupar */ const MAX_NUM_ACTIONS = 3; + /** + * @var int + */ + private $_module = 0; /** * Constructor @@ -189,9 +195,11 @@ class AccountsMgmtC extends Controller implements ActionsInterface */ public function getCustomer() { + $this->_module = self::ACTION_MGM_CUSTOMERS; $this->view->addTemplate('customers'); $this->view->assign('customer', \SP\Customer::getCustomerData($this->view->itemId)); + $this->getCustomFieldsForItem(); } /** @@ -199,9 +207,24 @@ class AccountsMgmtC extends Controller implements ActionsInterface */ public function getCategory() { + $this->_module = self::ACTION_MGM_CATEGORIES; $this->view->addTemplate('categories'); $this->view->assign('category', \SP\Category::getCategoryData($this->view->itemId)); + $this->getCustomFieldsForItem(); + } + + /** + * Obtener la lista de campos personalizados y sus valores + */ + private function getCustomFieldsForItem() + { + // Se comprueba que hayan campos con valores para el elemento actual + if (!$this->view->isView && CustomFields::checkCustomFieldExists($this->_module, $this->view->itemId)) { + $this->view->assign('customFields', CustomFields::getCustomFieldsData($this->_module, $this->view->itemId)); + } else { + $this->view->assign('customFields', CustomFields::getCustomFieldsForModule($this->_module)); + } } /** @@ -223,4 +246,78 @@ class AccountsMgmtC extends Controller implements ActionsInterface $this->view->assign('sk', \SP\Common::getSessionKey()); } + + /** + * Obtener los datos para la pestaña de campos personalizados + */ + public function getCustomFields() + { + $this->setAction(self::ACTION_MGM_CUSTOMFIELDS); + + if (!$this->checkAccess()) { + return; + } + + $this->view->assign('sk', \SP\Common::getSessionKey(true)); + + $tableProp = array( + 'tblId' => 'tblCustomFields', + 'header' => '', + 'tblHeaders' => array(_('Módulo'), _('Nombre'), _('Tipo')), + 'tblRowSrc' => array('module', 'name', 'typeName'), + 'tblRowSrcId' => 'id', + 'onCloseAction' => self::ACTION_MGM, + 'actions' => array( + 'new' => array( + 'id' => self::ACTION_MGM_CUSTOMFIELDS_NEW, + 'title' => _('Nuevo Campo'), + 'onclick' => 'appMgmtData(this,' . self::ACTION_MGM_CUSTOMFIELDS_NEW . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/new.png', + 'skip' => true + ), + 'edit' => array( + 'id' => self::ACTION_MGM_CUSTOMFIELDS_EDIT, + 'title' => _('Editar Campo'), + 'onclick' => 'appMgmtData(this,' . self::ACTION_MGM_CUSTOMFIELDS_EDIT . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/edit.png', + 'icon' => 'mode_edit' + ), + 'del' => array( + 'id' => self::ACTION_MGM_CUSTOMFIELDS_DELETE, + 'title' => _('Eliminar Campo'), + 'onclick' => 'appMgmtDelete(this,' . self::ACTION_MGM_CUSTOMFIELDS_DELETE . ',\'' . $this->view->sk . '\')', + 'img' => 'imgs/delete.png', + 'icon' => 'delete', + 'isdelete' => true + ) + ) + ); + + $tableProp['cellWidth'] = floor(65 / count($tableProp['tblHeaders'])); + + $this->view->append( + 'tabs', array( + 'title' => _('Campos Personalizados'), + 'query' => \SP\CustomFieldDef::getCustomFields(), + 'props' => $tableProp, + 'time' => round(microtime() - $this->view->queryTimeStart, 5)) + ); + } + + /** + * Obtener los datos para la ficha de campo personalizado + */ + public function getCustomField() + { + $this->view->addTemplate('customfields'); + + $customField = \SP\CustomFieldDef::getCustomFields($this->view->itemId, true); + $field = unserialize($customField->customfielddef_field); + + $this->view->assign('gotData', ($customField && $field instanceof CustomFieldDef)); + $this->view->assign('customField', $customField); + $this->view->assign('field', $field); + $this->view->assign('types', \SP\CustomFieldDef::getFieldsTypes()); + $this->view->assign('modules', \SP\CustomFieldDef::getFieldsModules()); + } } diff --git a/web/UsersMgmtC.class.php b/web/UsersMgmtC.class.php index 12da7878..6e4019dc 100644 --- a/web/UsersMgmtC.class.php +++ b/web/UsersMgmtC.class.php @@ -26,6 +26,7 @@ namespace SP\Controller; use SP\Common; +use SP\CustomFields; use SP\DB; use SP\Groups; use SP\Log; @@ -48,6 +49,10 @@ class UsersMgmtC extends Controller implements ActionsInterface * Máximo numero de acciones antes de agrupar */ const MAX_NUM_ACTIONS = 3; + /** + * @var int + */ + private $_module = 0; /** * Constructor @@ -306,6 +311,7 @@ class UsersMgmtC extends Controller implements ActionsInterface */ public function getUser() { + $this->_module = self::ACTION_USR_USERS; $this->view->addTemplate('users'); $this->view->assign('isDisabled', ($this->view->isDemo || $this->view->actionId === self::ACTION_USR_USERS_VIEW) ? 'disabled' : ''); @@ -313,6 +319,8 @@ class UsersMgmtC extends Controller implements ActionsInterface $this->view->assign('groups', DB::getValuesForSelect('usrGroups', 'usergroup_id', 'usergroup_name')); $this->view->assign('profiles', DB::getValuesForSelect('usrProfiles', 'userprofile_id', 'userprofile_name')); $this->view->assign('ro', ($this->view->user['checks']['user_isLdap']) ? 'READONLY' : ''); + + $this->getCustomFieldsForItem(); } /** @@ -320,11 +328,14 @@ class UsersMgmtC extends Controller implements ActionsInterface */ public function getGroup() { + $this->_module = self::ACTION_USR_GROUPS; $this->view->addTemplate('groups'); $this->view->assign('group', Groups::getGroupData($this->view->itemId)); $this->view->assign('users', \SP\DB::getValuesForSelect('usrData', 'user_id', 'user_name')); $this->view->assign('groupUsers', \SP\Groups::getUsersForGroup($this->view->itemId)); + + $this->getCustomFieldsForItem(); } /** @@ -339,7 +350,7 @@ class UsersMgmtC extends Controller implements ActionsInterface $this->view->assign('profile', $profile); $this->view->assign('isDisabled', ($this->view->actionId === self::ACTION_USR_PROFILES_VIEW) ? 'disabled' : ''); - if ( $this->view->isView === true ) { + if ($this->view->isView === true) { $this->view->assign('usedBy', Profile::getProfileInUsersName($this->view->itemId)); } } @@ -440,9 +451,22 @@ class UsersMgmtC extends Controller implements ActionsInterface $this->view->assign('actions', \SP\ApiTokens::getTokenActions()); $this->view->assign('token', $token); - if (isset($this->view->isView)){ + if (isset($this->view->isView)) { $msg = sprintf('%s ;;Usuario: %s', _('Token de autorización visualizado'), $token->user_login); Log::writeNewLogAndEmail(_('Autorizaciones'), $msg); } } + + /** + * Obtener la lista de campos personalizados y sus valores + */ + private function getCustomFieldsForItem() + { + // Se comprueba que hayan campos con valores para el elemento actual + if (!$this->view->isView && CustomFields::checkCustomFieldExists($this->_module, $this->view->itemId)) { + $this->view->assign('customFields', CustomFields::getCustomFieldsData($this->_module, $this->view->itemId)); + } else { + $this->view->assign('customFields', CustomFields::getCustomFieldsForModule($this->_module)); + } + } } \ No newline at end of file From b2a0ffdb6249275c9aacc233991bf9b2eee95e36 Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Mon, 17 Aug 2015 19:45:33 +0200 Subject: [PATCH 77/84] * [ADD] New custom fields feature. * [MOD] Minor UI tweaks * [MOD] Updated English translation * [FIX] Minor bugfixes --- inc/Acl.class.php | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/inc/Acl.class.php b/inc/Acl.class.php index c044894b..80739722 100644 --- a/inc/Acl.class.php +++ b/inc/Acl.class.php @@ -82,11 +82,13 @@ class Acl implements Controller\ActionsInterface case self::ACTION_CFG_GENERAL: return ($curUserIsAdminApp || $curUserProfile->isConfigGeneral()); case self::ACTION_CFG_IMPORT: - return ($curUserIsAdminApp || $curUserProfile->isConfigBackup()); + return ($curUserIsAdminApp || $curUserProfile->isConfigImport()); case self::ACTION_MGM_CATEGORIES: return ($curUserIsAdminApp || $curUserProfile->isMgmCategories()); case self::ACTION_MGM_CUSTOMERS: return ($curUserIsAdminApp || $curUserProfile->isMgmCustomers()); + case self::ACTION_MGM_CUSTOMFIELDS: + return ($curUserIsAdminApp || $curUserProfile->isMgmCustomFields()); case self::ACTION_CFG_ENCRYPTION: return ($curUserIsAdminApp || $curUserProfile->isConfigEncryption()); case self::ACTION_CFG_BACKUP: @@ -101,6 +103,8 @@ class Acl implements Controller\ActionsInterface return ($curUserIsAdminApp || $curUserProfile->isMgmGroups()); case self::ACTION_USR_PROFILES: return ($curUserIsAdminApp || $curUserProfile->isMgmProfiles()); + case self::ACTION_MGM_APITOKENS: + return ($curUserIsAdminApp || $curUserProfile->isMgmApiTokens()); case self::ACTION_EVL: return ($curUserIsAdminApp || $curUserProfile->isEvl()); } @@ -133,6 +137,8 @@ class Acl implements Controller\ActionsInterface self::ACTION_MGM => array('mgm', _('Gestión Aplicación')), self::ACTION_MGM_CATEGORIES => array('mgm_categories', _('Gestión Categorías')), self::ACTION_MGM_CUSTOMERS => array('mgm_customers', _('Gestión Clientes')), + self::ACTION_MGM_CUSTOMFIELDS => array('mgm_customfields', _('Gestión Campos Personalizados')), + self::ACTION_MGM_APITOKENS => array('mgm_apitokens', _('Gestión Autorizaciones API')), self::ACTION_USR => array('usr', _('Gestión Usuarios')), self::ACTION_USR_USERS => array('usr_users', _('Gestión Usuarios')), self::ACTION_USR_GROUPS => array('usr_groups', _('Gestión Grupos')), @@ -190,25 +196,20 @@ class Acl implements Controller\ActionsInterface $okEdit = ($userId == $accountData['user_id'] || $userGroupId == $accountData['group_id'] || (in_array($userId, $accountData['users_id']) && $accountData['otheruser_edit']) - || (userToGroups && $accountData['othergroup_edit']) + || ($userToGroups && $accountData['othergroup_edit']) || $userIsAdminApp || $userIsAdminAcc); switch ($module) { case self::ACTION_ACC_VIEW: - return $okView; case self::ACTION_ACC_VIEW_PASS: - return $okView; case self::ACTION_ACC_VIEW_HISTORY: - return $okView; - case self::ACTION_ACC_EDIT: - return $okEdit; - case self::ACTION_ACC_DELETE: - return $okEdit; - case self::ACTION_ACC_EDIT_PASS: - return $okEdit; case self::ACTION_ACC_COPY: return $okView; + case self::ACTION_ACC_EDIT: + case self::ACTION_ACC_DELETE: + case self::ACTION_ACC_EDIT_PASS: + return $okEdit; } return false; From a154e8622e743b71c34979b5b5e6d9c26c8cd6bc Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Mon, 17 Aug 2015 20:12:19 +0200 Subject: [PATCH 78/84] * [FIX] Minor bugfixes --- ajax/ajax_appMgmtSave.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/ajax/ajax_appMgmtSave.php b/ajax/ajax_appMgmtSave.php index ced56577..134635e8 100644 --- a/ajax/ajax_appMgmtSave.php +++ b/ajax/ajax_appMgmtSave.php @@ -81,15 +81,15 @@ if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_NEW if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_NEW || $actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_EDIT ) { - if (empty($User->getUserName()) && !$isLdap) { + if (!$User->getUserName() && !$isLdap) { SP\Common::printJSON(_('Es necesario un nombre de usuario'), 2); - } elseif (empty($User->getUserLogin()) && !$isLdap) { + } elseif (!$User->getUserLogin() && !$isLdap) { SP\Common::printJSON(_('Es necesario un login'), 2); } elseif (!$User->getUserProfileId()) { SP\Common::printJSON(_('Es necesario un perfil'), 2); } elseif (!$User->getUserGroupId()) { SP\Common::printJSON(_('Es necesario un grupo'), 2); - } elseif (empty($User->getUserEmail()) && !$isLdap) { + } elseif (!$User->getUserEmail() && !$isLdap) { SP\Common::printJSON(_('Es necesario un email'), 2); } @@ -103,7 +103,7 @@ if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_NEW } if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_NEW) { - if (empty($User->getUserPass()) && empty($userPassR)) { + if (!$User->getUserPass() && !$userPassR) { SP\Common::printJSON(_('La clave no puede estar en blanco'), 2); } elseif ($User->getUserPass() != $userPassR) { SP\Common::printJSON(_('Las claves no coinciden'), 2); @@ -138,7 +138,7 @@ if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_NEW } elseif ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_EDITPASS) { if (SP\Util::demoIsEnabled() && UserUtil::getUserLoginById($itemId) == 'demo') { SP\Common::printJSON(_('Ey, esto es una DEMO!!')); - } elseif (empty($User->getUserPass()) || empty($userPassR)) { + } elseif (!$User->getUserPass() || !$userPassR) { SP\Common::printJSON(_('La clave no puede estar en blanco'), 2); } elseif ($User->getUserPass() != $userPassR) { SP\Common::printJSON(_('Las claves no coinciden'), 2); @@ -175,7 +175,7 @@ if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_NEW if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_GROUPS_NEW || $actionId === \SP\Controller\ActionsInterface::ACTION_USR_GROUPS_EDIT ) { - if (empty($frmGrpName)) { + if (!$frmGrpName) { SP\Common::printJSON(_('Es necesario un nombre de grupo'), 2); } @@ -274,7 +274,7 @@ if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_NEW if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_PROFILES_NEW || $actionId === \SP\Controller\ActionsInterface::ACTION_USR_PROFILES_EDIT ) { - if (empty($Profile->getName())) { + if (!$Profile->getName()) { SP\Common::printJSON(_('Es necesario un nombre de perfil'), 2); } elseif (SP\Profile::checkProfileExist($Profile->getId(), $Profile->getName())) { SP\Common::printJSON(_('Nombre de perfil duplicado'), 2); @@ -320,7 +320,7 @@ if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_NEW if ($actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CUSTOMERS_NEW || $actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CUSTOMERS_EDIT ) { - if (empty($frmCustomerName)) { + if (!$frmCustomerName) { SP\Common::printJSON(_('Es necesario un nombre de cliente'), 2); } @@ -379,7 +379,7 @@ if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_NEW if ($actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CATEGORIES_NEW || $actionId === \SP\Controller\ActionsInterface::ACTION_MGM_CATEGORIES_EDIT ) { - if (empty($frmCategoryName)) { + if (!$frmCategoryName) { SP\Common::printJSON(_('Es necesario un nombre de categoría'), 2); } From a02d2813e1dc31978426de4b87adf414fefc1b9e Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Wed, 2 Sep 2015 14:33:13 +0200 Subject: [PATCH 79/84] * [FIX] Main group not set when creating/modifying account --- ajax/ajax_accountSave.php | 10 +++++++--- inc/Upgrade.class.php | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/ajax/ajax_accountSave.php b/ajax/ajax_accountSave.php index 7be15391..e72104a0 100644 --- a/ajax/ajax_accountSave.php +++ b/ajax/ajax_accountSave.php @@ -58,13 +58,17 @@ $accountNotes = SP\Request::analyze('notes'); $accountUrl = SP\Request::analyze('url'); $accountGroupEditEnabled = SP\Request::analyze('geditenabled', 0, false, 1); $accountUserEditEnabled = SP\Request::analyze('ueditenabled', 0, false, 1); -$accountMainGroupId = SP\Request::analyze('mainGroupId', SP\Session::getUserGroupId()); +$accountMainGroupId = SP\Request::analyze('mainGroupId', 0); $accountChangesHash = SP\Request::analyze('hash'); $customFields = SP\Request::analyze('customfield'); // Datos del Usuario $currentUserId = SP\Session::getUserId(); +if ($accountMainGroupId === 0) { + $accountMainGroupId = SP\Session::getUserGroupId(); +} + if ($actionId === \SP\Controller\ActionsInterface::ACTION_ACC_NEW) { // Comprobaciones para nueva cuenta if (!$accountName) { @@ -114,9 +118,9 @@ if ($actionId == \SP\Controller\ActionsInterface::ACTION_ACC_NEW || $actionId === \SP\Controller\ActionsInterface::ACTION_ACC_EDIT_PASS ) { // Encriptar clave de cuenta - try{ + try { $accountEncPass = SP\Crypt::encryptData($accountPassword); - } catch (\SP\SPException $e){ + } catch (\SP\SPException $e) { SP\Common::printJSON($e->getMessage()); } } diff --git a/inc/Upgrade.class.php b/inc/Upgrade.class.php index dd8edaa9..00cf6a04 100644 --- a/inc/Upgrade.class.php +++ b/inc/Upgrade.class.php @@ -113,7 +113,7 @@ class Upgrade $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 `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; From d9e28a0e025e0cc868916b0f0b29f3312a0828a6 Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Thu, 17 Sep 2015 12:51:18 +0200 Subject: [PATCH 80/84] * [MOD] Generate unique hash for export/backup files. Thanks to Daniele * [MOD] Updated MDL version * [MOD] Minor UI tweaks --- ajax/ajax_appMgmtSave.php | 2 + ajax/ajax_files.php | 2 +- ajax/ajax_userPrefsSave.php | 4 + inc/Backup.class.php | 9 +- inc/Files.class.php | 6 +- inc/Installer.class.php | 79 +- inc/ProfileBase.class.php | 6 +- inc/XmlExport.class.php | 6 +- inc/locales/de_DE/LC_MESSAGES/messages.mo | Bin 53324 -> 47472 bytes inc/locales/de_DE/LC_MESSAGES/messages.po | 8115 +++++++++------- inc/locales/en_US/LC_MESSAGES/messages.mo | Bin 68979 -> 68636 bytes inc/locales/en_US/LC_MESSAGES/messages.po | 690 +- inc/locales/fr_FR/LC_MESSAGES/messages.mo | Bin 55993 -> 49717 bytes inc/locales/fr_FR/LC_MESSAGES/messages.po | 8162 ++++++++++------- inc/locales/hu_HU/LC_MESSAGES/messages.mo | Bin 50241 -> 45024 bytes inc/locales/hu_HU/LC_MESSAGES/messages.po | 7874 ++++++++++------ inc/locales/it_IT/LC_MESSAGES/messages.mo | Bin 0 -> 533 bytes inc/locales/it_IT/LC_MESSAGES/messages.po | 4622 ++++++++++ inc/locales/ru_RU/LC_MESSAGES/messages.mo | Bin 0 -> 60443 bytes inc/locales/ru_RU/LC_MESSAGES/messages.po | 4841 ++++++++++ inc/themes/classic/footer.inc | 5 +- inc/themes/classic/info.inc | 8 +- inc/themes/classic/login.inc | 2 +- inc/themes/material-blue/account.inc | 4 +- inc/themes/material-blue/body.inc | 3 + inc/themes/material-blue/categories.inc | 2 +- inc/themes/material-blue/css/styles.css | 51 +- inc/themes/material-blue/editpass.inc | 2 +- inc/themes/material-blue/eventlog.inc | 2 +- inc/themes/material-blue/files.inc | 2 +- inc/themes/material-blue/footer.inc | 1 + inc/themes/material-blue/info.inc | 8 +- inc/themes/material-blue/js/functions.js | 89 +- inc/themes/material-blue/js/material.min.js | 7 +- .../material-blue/js/material.min.js.map | 2 +- inc/themes/material-blue/login.inc | 2 +- inc/themes/material-blue/users.inc | 4 +- web/ConfigC.class.php | 36 +- web/MainC.class.php | 29 +- 39 files changed, 24792 insertions(+), 9885 deletions(-) create mode 100644 inc/locales/it_IT/LC_MESSAGES/messages.mo create mode 100644 inc/locales/it_IT/LC_MESSAGES/messages.po create mode 100644 inc/locales/ru_RU/LC_MESSAGES/messages.mo create mode 100644 inc/locales/ru_RU/LC_MESSAGES/messages.po diff --git a/ajax/ajax_appMgmtSave.php b/ajax/ajax_appMgmtSave.php index 134635e8..60e9b823 100644 --- a/ajax/ajax_appMgmtSave.php +++ b/ajax/ajax_appMgmtSave.php @@ -91,6 +91,8 @@ if ($actionId === \SP\Controller\ActionsInterface::ACTION_USR_USERS_NEW SP\Common::printJSON(_('Es necesario un grupo'), 2); } elseif (!$User->getUserEmail() && !$isLdap) { SP\Common::printJSON(_('Es necesario un email'), 2); + } elseif (SP\Util::demoIsEnabled() && !\SP\Session::getUserIsAdminApp() && $User->getUserLogin() == 'demo') { + SP\Common::printJSON(_('Ey, esto es una DEMO!!')); } switch ($User->checkUserExist()) { diff --git a/ajax/ajax_files.php b/ajax/ajax_files.php index f1d2d7ae..a470128a 100644 --- a/ajax/ajax_files.php +++ b/ajax/ajax_files.php @@ -186,7 +186,7 @@ if ($action == 'download' || $action == 'view') { } elseif (strtoupper($fileExt) == "TXT") { $log->writeLog(); - exit('
    ' . $fileData . '
    '); + exit('
    ' . htmlentities($fileData) . '
    '); } else { exit(); } diff --git a/ajax/ajax_userPrefsSave.php b/ajax/ajax_userPrefsSave.php index 963931ad..7099a541 100644 --- a/ajax/ajax_userPrefsSave.php +++ b/ajax/ajax_userPrefsSave.php @@ -52,6 +52,10 @@ $activeTab = SP\Request::analyze('activeTab', 0); $doActionOnClose = "doAction('$onCloseAction','',$activeTab);"; if($actionId === SP\Controller\ActionsInterface::ACTION_USR_PREFERENCES_SECURITY){ + if (SP\Util::demoIsEnabled() && \SP\Session::getUserLogin() == 'demo') { + SP\Common::printJSON(_('Ey, esto es una DEMO!!')); + } + // Variables POST del formulario $twoFaEnabled = SP\Request::analyze('security_2faenabled', 0, false, 1); $pin = SP\Request::analyze('security_pin', 0); diff --git a/inc/Backup.class.php b/inc/Backup.class.php index 82022353..38e6e99a 100644 --- a/inc/Backup.class.php +++ b/inc/Backup.class.php @@ -41,9 +41,14 @@ class Backup { $siteName = Util::getAppInfo('appname'); $backupDir = Init::$SERVERROOT; + + // Generar hash unico para evitar descargas no permitidas + $backupUniqueHash = uniqid(); + Config::setValue('backup_hash', $backupUniqueHash); + $backupDstDir = $backupDir . DIRECTORY_SEPARATOR . 'backup'; - $bakFileApp = $backupDstDir . DIRECTORY_SEPARATOR . $siteName . '.tar'; - $bakFileDB = $backupDstDir . DIRECTORY_SEPARATOR . $siteName . '_db.sql'; + $bakFileApp = $backupDstDir . DIRECTORY_SEPARATOR . $siteName . '-' . $backupUniqueHash . '.tar'; + $bakFileDB = $backupDstDir . DIRECTORY_SEPARATOR . $siteName . '_db-' . $backupUniqueHash . '.sql'; try { self::checkBackupDir($backupDstDir); diff --git a/inc/Files.class.php b/inc/Files.class.php index 14706e79..11299c8b 100644 --- a/inc/Files.class.php +++ b/inc/Files.class.php @@ -155,7 +155,8 @@ class Files $query = "SELECT accfile_id," . "accfile_name," . "accfile_size, " - . "accfile_thumb " + . "accfile_thumb, " + . "accfile_type " . "FROM accFiles " . "WHERE accfile_accountId = :id"; @@ -176,7 +177,8 @@ class Files 'id' => $file->accfile_id, 'name' => $file->accfile_name, 'size' => round($file->accfile_size / 1000, 2), - 'thumb' => $file->accfile_thumb + 'thumb' => $file->accfile_thumb, + 'type' => $file->accfile_type ); } diff --git a/inc/Installer.class.php b/inc/Installer.class.php index 2ff7feff..9cbbb845 100644 --- a/inc/Installer.class.php +++ b/inc/Installer.class.php @@ -72,22 +72,6 @@ class Installer */ private static $_isHostingMode; - /** - * @param string $dbuser - */ - public static function setDbuser($dbuser) - { - self::$_dbuser = $dbuser; - } - - /** - * @param string $dbpass - */ - public static function setDbpass($dbpass) - { - self::$_dbpass = $dbpass; - } - /** * @param string $dbname */ @@ -96,14 +80,6 @@ class Installer self::$_dbname = $dbname; } - /** - * @param string $dbhost - */ - public static function setDbhost($dbhost) - { - self::$_dbhost = $dbhost; - } - /** * @param string $username */ @@ -230,6 +206,14 @@ class Installer 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 @@ -261,37 +245,52 @@ class Installer */ private static function setupMySQLDatabase() { - // Comprobar si el usuario sumistrado existe - $query = "SELECT COUNT(*) " - . "FROM mysql.user " - . "WHERE user='" . self::$_username . "' AND host='" . self::$_dbhost . "'"; // Si no es modo hosting se crea un hash para la clave y un usuario con prefijo "sp_" para la DB - if (!self::$_isHostingMode){ + if (!self::$_isHostingMode) { self::setDbpass(md5(time() . self::$_password)); self::setDbuser(substr('sp_' . self::$_username, 0, 16)); - } - // Si no existe el usuario, se intenta crear - if (intval(self::$_dbc->query($query)->fetchColumn()) === 0) { - // Se comprueba si el nuevo usuario es distinto del creado en otra instalación - if (self::$_dbuser != Config::getValue('dbuser')) { - self::createDBUser(); + // Comprobar si el usuario sumistrado existe + $query = "SELECT COUNT(*) FROM mysql.user WHERE user='" . self::$_username . "' AND host='" . self::$_dbhost . "'"; + + // Si no existe el usuario, se intenta crear + if (intval(self::$_dbc->query($query)->fetchColumn()) === 0) { + // Se comprueba si el nuevo usuario es distinto del creado en otra instalación + if (self::$_dbuser != Config::getValue('dbuser')) { + self::createDBUser(); + } } - - // Guardar el nuevo usuario/clave de conexión a la BD - Config::setValue('dbuser', self::$_dbuser); - Config::setValue('dbpass', self::$_dbpass); } + // 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){ + } catch (SPException $e) { throw $e; } } + /** + * @param string $dbpass + */ + public static function setDbpass($dbpass) + { + self::$_dbpass = $dbpass; + } + + /** + * @param string $dbuser + */ + public static function setDbuser($dbuser) + { + self::$_dbuser = $dbuser; + } + /** * Crear el usuario para conectar con la base de datos. * Esta función crea el usuario para conectar con la base de datos. diff --git a/inc/ProfileBase.class.php b/inc/ProfileBase.class.php index 8dc9d94b..3ef6c002 100644 --- a/inc/ProfileBase.class.php +++ b/inc/ProfileBase.class.php @@ -174,7 +174,11 @@ abstract class ProfileBase */ public static function getProfiles() { - $query = 'SELECT userprofile_id, userprofile_name FROM usrProfiles ORDER BY userprofile_name'; + 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(); diff --git a/inc/XmlExport.class.php b/inc/XmlExport.class.php index 600cbe5e..f279fa94 100644 --- a/inc/XmlExport.class.php +++ b/inc/XmlExport.class.php @@ -426,6 +426,10 @@ class XmlExport */ public static function getExportFile() { - return Init::$SERVERROOT . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR . Util::getAppInfo('appname') . '.xml'; + // Generar hash unico para evitar descargas no permitidas + $exportUniqueHash = uniqid(); + Config::setValue('export_hash', $exportUniqueHash); + + return Init::$SERVERROOT . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR . Util::getAppInfo('appname') . '-' . $exportUniqueHash . '.xml'; } } \ No newline at end of file diff --git a/inc/locales/de_DE/LC_MESSAGES/messages.mo b/inc/locales/de_DE/LC_MESSAGES/messages.mo index 7086122e192e7ad48cf87542f5653483761137b4..d48ef111b86f63c81ac661705d99443e8b96c11f 100644 GIT binary patch delta 14282 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 delta 19639 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 i*AsJ{ksv\n" +"POT-Creation-Date: 2015-09-05 16:15+0100\n" +"PO-Revision-Date: 2015-09-05 16:15+0100\n" +"Last-Translator: nuxsmin \n" "Language-Team: \n" "Language: de_DE\n" "MIME-Version: 1.0\n" @@ -19,157 +19,389 @@ msgstr "" "X-Poedit-KeywordsList: _;gettext;gettext_noop\n" "X-Poedit-Basepath: .\n" "X-Poedit-SourceCharset: UTF-8\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.6.10\n" "X-Poedit-SearchPath-0: ../../../..\n" -# Session not started or timeout -#: ../../../../ajax/ajax_appMgmtSave.php:34 -#: ../../../../ajax/ajax_accountSave.php:33 ../../../../ajax/ajax_import.php:1 -#: ../../../../ajax/ajax_configSave.php:33 ../../../../ajax/ajax_backup.php:32 -#: ../../../../ajax/ajax_migrate.php:1 -#: ../../../../ajax/ajax_sendRequest.php:32 -#: ../../../../ajax/ajax_checkLdap.php:32 -msgid "La sesión no se ha iniciado o ha caducado" -msgstr "Sitzung konnte nicht gestartet werden oder ist abgelaufen" - # INVALID QUERY -#: ../../../../ajax/ajax_appMgmtSave.php:40 -#: ../../../../ajax/ajax_accountSave.php:39 ../../../../ajax/ajax_import.php:1 -#: ../../../../ajax/ajax_configSave.php:39 ../../../../ajax/ajax_backup.php:38 -#: ../../../../ajax/ajax_passReset.php:34 ../../../../ajax/ajax_files.php:40 -#: ../../../../ajax/ajax_migrate.php:1 ../../../../ajax/ajax_search.php:38 -#: ../../../../ajax/ajax_sendRequest.php:38 -#: ../../../../ajax/ajax_checkLdap.php:38 -#: ../../../../ajax/ajax_getFiles.php:43 +#: ../../../../ajax/ajax_2fa.php:35 ../../../../ajax/ajax_accountSave.php:41 +#: ../../../../ajax/ajax_appMgmtSave.php:42 +#: ../../../../ajax/ajax_backup.php:39 ../../../../ajax/ajax_checkLdap.php:41 +#: ../../../../ajax/ajax_configSave.php:41 ../../../../ajax/ajax_files.php:41 +#: ../../../../ajax/ajax_getFiles.php:46 ../../../../ajax/ajax_import.php:49 +#: ../../../../ajax/ajax_migrate.php:45 ../../../../ajax/ajax_passReset.php:37 +#: ../../../../ajax/ajax_search.php:41 +#: ../../../../ajax/ajax_sendRequest.php:41 +#: ../../../../ajax/ajax_userPrefsSave.php:42 msgid "CONSULTA INVÁLIDA" msgstr "Ungültige Anfrage" -# Username required -#: ../../../../ajax/ajax_appMgmtSave.php:76 -msgid "Es necesario un nombre de usuario" +# Incorrect login +#: ../../../../ajax/ajax_2fa.php:55 +#, fuzzy +msgid "Código correcto" +msgstr "Fehlerhafte Anmeldung" + +# Incorrect login +#: ../../../../ajax/ajax_2fa.php:58 ../../../../ajax/ajax_userPrefsSave.php:67 +#, fuzzy +msgid "Código incorrecto" +msgstr "Fehlerhafte Anmeldung" + +# Session not started or timeout +#: ../../../../ajax/ajax_accountSave.php:35 +#: ../../../../ajax/ajax_appMgmtSave.php:36 +#: ../../../../ajax/ajax_backup.php:33 ../../../../ajax/ajax_checkLdap.php:35 +#: ../../../../ajax/ajax_configSave.php:35 ../../../../ajax/ajax_import.php:35 +#: ../../../../ajax/ajax_migrate.php:35 +#: ../../../../ajax/ajax_sendRequest.php:35 +#: ../../../../ajax/ajax_userPrefsSave.php:36 +#: ../../../../ajax/ajax_viewpass.php:36 +msgid "La sesión no se ha iniciado o ha caducado" +msgstr "Sitzung konnte nicht gestartet werden oder ist abgelaufen" + +# Account name needed +#: ../../../../ajax/ajax_accountSave.php:75 +#: ../../../../ajax/ajax_accountSave.php:92 +msgid "Es necesario un nombre de cuenta" +msgstr "Kontoname ist notwendig" + +# Customer name needed +#: ../../../../ajax/ajax_accountSave.php:77 +#: ../../../../ajax/ajax_accountSave.php:90 +#: ../../../../ajax/ajax_appMgmtSave.php:326 +msgid "Es necesario un nombre de cliente" +msgstr "Kunde ist notwendig" + +# Username needed +#: ../../../../ajax/ajax_accountSave.php:79 +#: ../../../../ajax/ajax_accountSave.php:94 +msgid "Es necesario un usuario" msgstr "Benutzername ist notwendig" -# Login required -#: ../../../../ajax/ajax_appMgmtSave.php:80 -msgid "Es necesario un login" -msgstr "Login ist notwendig" - -# Profile required -#: ../../../../ajax/ajax_appMgmtSave.php:84 -msgid "Es necesario un perfil" -msgstr "Profil ist notwendig" - -# Group required -#: ../../../../ajax/ajax_appMgmtSave.php:88 -msgid "Es necesario un grupo" -msgstr "Gruppe ist notwendig" - -# Email required -#: ../../../../ajax/ajax_appMgmtSave.php:92 -msgid "Es necesario un email" -msgstr "E-Mail ist notwendig" - -# Duplicated user login -#: ../../../../ajax/ajax_appMgmtSave.php:110 -msgid "Login de usuario duplicado" -msgstr "Dupbliziertes Benutzer-Anmeldung " - -# Duplicated user email -#: ../../../../ajax/ajax_appMgmtSave.php:113 -msgid "Email de usuario duplicado" -msgstr "Bereits verwendete Benutzer-E-Mail" - -# Password cannot be blank -#: ../../../../ajax/ajax_appMgmtSave.php:119 -#: ../../../../ajax/ajax_appMgmtSave.php:145 -#: ../../../../ajax/ajax_accountSave.php:105 -msgid "La clave no puede estar en blanco" -msgstr "Passwort darf nicht leer sein" +# Password needed +#: ../../../../ajax/ajax_accountSave.php:81 +msgid "Es necesario una clave" +msgstr "Passwort ist notwendig" # Passwords mismatch -#: ../../../../ajax/ajax_appMgmtSave.php:123 -#: ../../../../ajax/ajax_appMgmtSave.php:149 #: ../../../../ajax/ajax_accountSave.php:83 -#: ../../../../ajax/ajax_accountSave.php:109 +#: ../../../../ajax/ajax_accountSave.php:107 +#: ../../../../ajax/ajax_appMgmtSave.php:111 +#: ../../../../ajax/ajax_appMgmtSave.php:146 +#: ../../../../ajax/ajax_backup.php:62 msgid "Las claves no coinciden" msgstr "Passwörter stimmen nicht" -# User added -#: ../../../../ajax/ajax_appMgmtSave.php:127 -msgid "Usuario creado" -msgstr "Benutzer hinzugefügt" +# Category name needed +#: ../../../../ajax/ajax_accountSave.php:85 +#: ../../../../ajax/ajax_accountSave.php:96 +#, fuzzy +msgid "Es necesario una categoría" +msgstr "Passwort ist notwendig" -# Error on creating user -#: ../../../../ajax/ajax_appMgmtSave.php:130 -msgid "Error al crear el usuario" -msgstr "Fehler beim Anlegen des Benutzers" +# Invalid Id +#: ../../../../ajax/ajax_accountSave.php:100 +#: ../../../../ajax/ajax_accountSave.php:111 +msgid "Id inválido" +msgstr "Ungültige ID" -# User updated -#: ../../../../ajax/ajax_appMgmtSave.php:133 -#: ../../../../inc/users.class.php:224 -msgid "Usuario actualizado" -msgstr "Benutzer aktualisiert" +# Password cannot be blank +#: ../../../../ajax/ajax_accountSave.php:105 +#: ../../../../ajax/ajax_appMgmtSave.php:109 +#: ../../../../ajax/ajax_appMgmtSave.php:144 +msgid "La clave no puede estar en blanco" +msgstr "Passwort darf nicht leer sein" -# Error on user update -#: ../../../../ajax/ajax_appMgmtSave.php:136 -msgid "Error al actualizar el usuario" -msgstr "Fehler beim Ändern des Benutzers" +# Invalid Action +#: ../../../../ajax/ajax_accountSave.php:114 +#: ../../../../ajax/ajax_accountSave.php:258 +#: ../../../../ajax/ajax_appMgmtSave.php:532 +#: ../../../../ajax/ajax_configSave.php:290 +#: ../../../../ajax/ajax_userPrefsSave.php:80 ../../../../api.php:53 +msgid "Acción Inválida" +msgstr "Ungültige Aktion" -# Ey, this is a DEMO!! -#: ../../../../ajax/ajax_appMgmtSave.php:141 -#: ../../../../ajax/ajax_appMgmtSave.php:163 -#: ../../../../ajax/ajax_import.php:1 ../../../../ajax/ajax_configSave.php:214 -#: ../../../../ajax/ajax_migrate.php:1 -msgid "Ey, esto es una DEMO!!" -msgstr "Hey, dies ist eine DEMO!!" +# Account added +#: ../../../../ajax/ajax_accountSave.php:168 +msgid "Cuenta creada" +msgstr "Konto hinzugefügt" + +# Error on account creation +#: ../../../../ajax/ajax_accountSave.php:171 +msgid "Error al crear la cuenta" +msgstr "Fehler beim Anlegen des Kontos" + +# No changes +#: ../../../../ajax/ajax_accountSave.php:206 +msgid "Sin cambios" +msgstr "Keine Änderungen" + +# Account updated +#: ../../../../ajax/ajax_accountSave.php:218 +msgid "Cuenta actualizada" +msgstr "Konto aktualisiert" + +# Error on updating account +#: ../../../../ajax/ajax_accountSave.php:221 +msgid "Error al modificar la cuenta" +msgstr "Fehler beim Änderns des Kontos" + +# Account deleted +#: ../../../../ajax/ajax_accountSave.php:228 +msgid "Cuenta eliminada" +msgstr "Konto gelöscht" + +# Error on account deletion +#: ../../../../ajax/ajax_accountSave.php:231 +msgid "Error al eliminar la cuenta" +msgstr "Fehler beim Löschen eines Kontos" # Password updated -#: ../../../../ajax/ajax_appMgmtSave.php:156 -#: ../../../../ajax/ajax_accountSave.php:237 -#: ../../../../ajax/ajax_passReset.php:79 +#: ../../../../ajax/ajax_accountSave.php:241 +#: ../../../../ajax/ajax_appMgmtSave.php:150 +#: ../../../../ajax/ajax_passReset.php:74 msgid "Clave actualizada" msgstr "Passwort aktualisiert" # Error on updating password -#: ../../../../ajax/ajax_appMgmtSave.php:159 -#: ../../../../ajax/ajax_passReset.php:83 +#: ../../../../ajax/ajax_accountSave.php:244 +msgid "Error al actualizar la clave" +msgstr "Fehler beim Ändern des Passworts" + +# Account restored +#: ../../../../ajax/ajax_accountSave.php:251 +msgid "Cuenta restaurada" +msgstr "Konto wiederhergestellt" + +# Error on restoring account +#: ../../../../ajax/ajax_accountSave.php:254 +msgid "Error al restaurar cuenta" +msgstr "Fehler bei der Wiederherstellung der Rechnung" + +# User +#: ../../../../ajax/ajax_appMgmtData.php:54 +#, fuzzy +msgid "Ver Usuario" +msgstr "Benutzerdetails anzeigen" + +# Edit User +#: ../../../../ajax/ajax_appMgmtData.php:61 +#: ../../../../web/UsersMgmtC.class.php:136 +msgid "Editar Usuario" +msgstr "Benutzer ändern" + +# New User +#: ../../../../ajax/ajax_appMgmtData.php:67 +#: ../../../../inc/UserBase.class.php:381 +#: ../../../../web/UsersMgmtC.class.php:121 +msgid "Nuevo Usuario" +msgstr "Neuer Benutzer" + +# Group +#: ../../../../ajax/ajax_appMgmtData.php:73 +#, fuzzy +msgid "Ver Grupo" +msgstr "Ansehen" + +# Edit Group +#: ../../../../ajax/ajax_appMgmtData.php:80 +#: ../../../../web/UsersMgmtC.class.php:202 +msgid "Editar Grupo" +msgstr "Gruppe ändern" + +# New Group +#: ../../../../ajax/ajax_appMgmtData.php:86 +#: ../../../../inc/Groups.class.php:152 ../../../../inc/Groups.class.php:253 +#: ../../../../web/UsersMgmtC.class.php:194 +msgid "Nuevo Grupo" +msgstr "Neue Gruppe" + +# Profile +#: ../../../../ajax/ajax_appMgmtData.php:92 +#, fuzzy +msgid "Ver Perfil" +msgstr "Ansehen" + +# Edit Profile +#: ../../../../ajax/ajax_appMgmtData.php:99 +#: ../../../../web/UsersMgmtC.class.php:267 +msgid "Editar Perfil" +msgstr "Profil ändern" + +# New Profile +#: ../../../../ajax/ajax_appMgmtData.php:105 +#: ../../../../inc/ProfileBase.class.php:512 +#: ../../../../web/UsersMgmtC.class.php:252 +msgid "Nuevo Perfil" +msgstr "Neues Profil" + +# Customer +#: ../../../../ajax/ajax_appMgmtData.php:111 +#, fuzzy +msgid "Ver Cliente" +msgstr "Ansehen" + +# Edit Customer +#: ../../../../ajax/ajax_appMgmtData.php:118 +#: ../../../../web/AccountsMgmtC.class.php:152 +msgid "Editar Cliente" +msgstr "Kunde ändern" + +# New Customer +#: ../../../../ajax/ajax_appMgmtData.php:124 +#: ../../../../inc/Customer.class.php:65 +#: ../../../../web/AccountsMgmtC.class.php:145 +msgid "Nuevo Cliente" +msgstr "Neuer Kunde" + +# Category +#: ../../../../ajax/ajax_appMgmtData.php:130 +#, fuzzy +msgid "Ver Categoría" +msgstr "Ansehen" + +# Edit Category +#: ../../../../ajax/ajax_appMgmtData.php:137 +#: ../../../../web/AccountsMgmtC.class.php:94 +msgid "Editar Categoría" +msgstr "Kategorie ändern" + +# New Category +#: ../../../../ajax/ajax_appMgmtData.php:143 +#: ../../../../inc/Category.class.php:83 +#: ../../../../web/AccountsMgmtC.class.php:86 +msgid "Nueva Categoría" +msgstr "Neue Kategorie" + +# Update +#: ../../../../ajax/ajax_appMgmtData.php:149 +#, fuzzy +msgid "Ver Autorización" +msgstr "Ansehen" + +# Update +#: ../../../../ajax/ajax_appMgmtData.php:156 +#: ../../../../inc/ApiTokens.class.php:189 +#: ../../../../web/UsersMgmtC.class.php:399 +#, fuzzy +msgid "Nueva Autorización" +msgstr "Neue Kategorie" + +# Start Update +#: ../../../../ajax/ajax_appMgmtData.php:162 +#: ../../../../web/UsersMgmtC.class.php:414 +#, fuzzy +msgid "Editar Autorización" +msgstr "Ändern" + +# New Group +#: ../../../../ajax/ajax_appMgmtData.php:168 +#: ../../../../web/AccountsMgmtC.class.php:273 +#, fuzzy +msgid "Nuevo Campo" +msgstr "Neuer Benutzer" + +# Edit Password +#: ../../../../ajax/ajax_appMgmtData.php:174 +#: ../../../../web/AccountsMgmtC.class.php:280 +#, fuzzy +msgid "Editar Campo" +msgstr "Ändern" + +# Username required +#: ../../../../ajax/ajax_appMgmtSave.php:85 +msgid "Es necesario un nombre de usuario" +msgstr "Benutzername ist notwendig" + +# Login required +#: ../../../../ajax/ajax_appMgmtSave.php:87 +msgid "Es necesario un login" +msgstr "Login ist notwendig" + +# Profile required +#: ../../../../ajax/ajax_appMgmtSave.php:89 +msgid "Es necesario un perfil" +msgstr "Profil ist notwendig" + +# Group required +#: ../../../../ajax/ajax_appMgmtSave.php:91 +msgid "Es necesario un grupo" +msgstr "Gruppe ist notwendig" + +# Email required +#: ../../../../ajax/ajax_appMgmtSave.php:93 +msgid "Es necesario un email" +msgstr "E-Mail ist notwendig" + +# Ey, this is a DEMO!! +#: ../../../../ajax/ajax_appMgmtSave.php:95 +#: ../../../../ajax/ajax_appMgmtSave.php:142 +#: ../../../../ajax/ajax_appMgmtSave.php:157 +#: ../../../../ajax/ajax_configSave.php:265 +#: ../../../../ajax/ajax_import.php:39 ../../../../ajax/ajax_migrate.php:39 +#: ../../../../ajax/ajax_userPrefsSave.php:56 +msgid "Ey, esto es una DEMO!!" +msgstr "Hey, dies ist eine DEMO!!" + +# Duplicated user login +#: ../../../../ajax/ajax_appMgmtSave.php:100 +msgid "Login de usuario duplicado" +msgstr "Dupbliziertes Benutzer-Anmeldung " + +# Duplicated user email +#: ../../../../ajax/ajax_appMgmtSave.php:103 +msgid "Email de usuario duplicado" +msgstr "Bereits verwendete Benutzer-E-Mail" + +# User added +#: ../../../../ajax/ajax_appMgmtSave.php:122 +msgid "Usuario creado" +msgstr "Benutzer hinzugefügt" + +# Error on creating user +#: ../../../../ajax/ajax_appMgmtSave.php:125 +msgid "Error al crear el usuario" +msgstr "Fehler beim Anlegen des Benutzers" + +# User updated +#: ../../../../ajax/ajax_appMgmtSave.php:135 +#: ../../../../inc/UserUtil.class.php:103 +msgid "Usuario actualizado" +msgstr "Benutzer aktualisiert" + +# Error on user update +#: ../../../../ajax/ajax_appMgmtSave.php:138 +msgid "Error al actualizar el usuario" +msgstr "Fehler beim Ändern des Benutzers" + +# Error on updating password +#: ../../../../ajax/ajax_appMgmtSave.php:153 +#: ../../../../ajax/ajax_passReset.php:78 msgid "Error al modificar la clave" msgstr "Fehler beim Ändern des Passworts" # Unable to delete, user in use -#: ../../../../ajax/ajax_appMgmtSave.php:169 +#: ../../../../ajax/ajax_appMgmtSave.php:159 msgid "No es posible eliminar, usuario en uso" msgstr "Benutzer kann nicht gelöscht werden, wird noch benutzt" # User deleted -#: ../../../../ajax/ajax_appMgmtSave.php:173 +#: ../../../../ajax/ajax_appMgmtSave.php:163 msgid "Usuario eliminado" msgstr "Benutzer gelöscht" # Error on user deletion -#: ../../../../ajax/ajax_appMgmtSave.php:176 +#: ../../../../ajax/ajax_appMgmtSave.php:166 msgid "Error al eliminar el usuario" msgstr "Fehler beim Löschen eines Benutzers" -# Invalid Action -#: ../../../../ajax/ajax_appMgmtSave.php:179 -#: ../../../../ajax/ajax_appMgmtSave.php:240 -#: ../../../../ajax/ajax_appMgmtSave.php:318 -#: ../../../../ajax/ajax_appMgmtSave.php:369 -#: ../../../../ajax/ajax_appMgmtSave.php:418 -#: ../../../../ajax/ajax_accountSave.php:116 -#: ../../../../ajax/ajax_accountSave.php:268 -#: ../../../../ajax/ajax_configSave.php:229 -msgid "Acción Inválida" -msgstr "Ungültige Aktion" - # Group name required -#: ../../../../ajax/ajax_appMgmtSave.php:188 +#: ../../../../ajax/ajax_appMgmtSave.php:181 msgid "Es necesario un nombre de grupo" msgstr "Gruppename ist notwendig" # Duplicated group name -#: ../../../../ajax/ajax_appMgmtSave.php:196 +#: ../../../../ajax/ajax_appMgmtSave.php:189 msgid "Nombre de grupo duplicado" msgstr "Duplizierter Gruppenname" @@ -184,3665 +416,5268 @@ msgid "Error al crear el grupo" msgstr "Fehler beim Anlegen des Kunden" # Group updated -#: ../../../../ajax/ajax_appMgmtSave.php:207 +#: ../../../../ajax/ajax_appMgmtSave.php:214 msgid "Grupo actualizado" msgstr "Gruppe aktualisiert" # Error on updating group -#: ../../../../ajax/ajax_appMgmtSave.php:210 +#: ../../../../ajax/ajax_appMgmtSave.php:217 msgid "Error al actualizar el grupo" msgstr "Fehler beim Ändern der Gruppe" # Users -#: ../../../../ajax/ajax_appMgmtSave.php:221 -#: ../../../../ajax/ajax_appMgmtSave.php:298 -#: ../../../../inc/tpl/profiles.php:88 ../../../../inc/tpl/accounts.php:281 +#: ../../../../ajax/ajax_appMgmtSave.php:226 +#: ../../../../ajax/ajax_appMgmtSave.php:303 +#: ../../../../inc/CustomFieldsBase.class.php:83 +#: ../../../../inc/themes/classic/account.inc:109 +#: ../../../../inc/themes/classic/groups.inc:24 +#: ../../../../inc/themes/classic/profiles.inc:85 +#: ../../../../inc/themes/material-blue/account.inc:134 +#: ../../../../inc/themes/material-blue/groups.inc:32 +#: ../../../../inc/themes/material-blue/profiles.inc:99 msgid "Usuarios" msgstr "Benutzer" # Accounts -#: ../../../../ajax/ajax_appMgmtSave.php:225 -#: ../../../../ajax/ajax_appMgmtSave.php:356 -#: ../../../../inc/category.class.php:265 ../../../../inc/tpl/profiles.php:45 +#: ../../../../ajax/ajax_appMgmtSave.php:230 +#: ../../../../inc/Category.class.php:266 +#: ../../../../inc/CustomFieldsBase.class.php:80 +#: ../../../../inc/Customer.class.php:150 +#: ../../../../inc/themes/classic/profiles.inc:15 +#: ../../../../inc/themes/material-blue/config.inc:139 +#: ../../../../inc/themes/material-blue/profiles.inc:19 msgid "Cuentas" msgstr "Konten" # Unable to delete -#: ../../../../ajax/ajax_appMgmtSave.php:228 -#: ../../../../ajax/ajax_appMgmtSave.php:300 -#: ../../../../ajax/ajax_appMgmtSave.php:358 -#: ../../../../ajax/ajax_appMgmtSave.php:407 +#: ../../../../ajax/ajax_appMgmtSave.php:233 +#: ../../../../ajax/ajax_appMgmtSave.php:305 +#: ../../../../inc/Category.class.php:119 +#: ../../../../inc/Customer.class.php:150 msgid "No es posible eliminar" msgstr "Kann nicht gelöscht werden" # Group in use by: -#: ../../../../ajax/ajax_appMgmtSave.php:228 +#: ../../../../ajax/ajax_appMgmtSave.php:233 msgid "Grupo en uso por:" msgstr "Gruppe in Benutzung durch:" # Group deleted -#: ../../../../ajax/ajax_appMgmtSave.php:233 +#: ../../../../ajax/ajax_appMgmtSave.php:238 msgid "Grupo eliminado" msgstr "Gruppe gelöscht" # Error on group deletion -#: ../../../../ajax/ajax_appMgmtSave.php:236 +#: ../../../../ajax/ajax_appMgmtSave.php:241 msgid "Error al eliminar el grupo" msgstr "Fehler beim Löschen einer Gruppe" # Profile name needed -#: ../../../../ajax/ajax_appMgmtSave.php:270 +#: ../../../../ajax/ajax_appMgmtSave.php:280 msgid "Es necesario un nombre de perfil" msgstr "Profil ist notwendig" # Duplicated profile name -#: ../../../../ajax/ajax_appMgmtSave.php:276 +#: ../../../../ajax/ajax_appMgmtSave.php:282 msgid "Nombre de perfil duplicado" msgstr "Duplizierter Profilname" # Profile added -#: ../../../../ajax/ajax_appMgmtSave.php:281 +#: ../../../../ajax/ajax_appMgmtSave.php:287 msgid "Perfil creado" msgstr "Profil hinzugefügt" # Error on creating profile -#: ../../../../ajax/ajax_appMgmtSave.php:284 +#: ../../../../ajax/ajax_appMgmtSave.php:290 msgid "Error al crear el perfil" msgstr "Fehler beim Anlegen des Profils" # Profile updated -#: ../../../../ajax/ajax_appMgmtSave.php:287 +#: ../../../../ajax/ajax_appMgmtSave.php:293 msgid "Perfil actualizado" msgstr "Profil aktualisiert" # Error on updating profile -#: ../../../../ajax/ajax_appMgmtSave.php:290 +#: ../../../../ajax/ajax_appMgmtSave.php:296 msgid "Error al actualizar el perfil" msgstr "Fehler beim Ändern des Profils" # Profiles in use by: -#: ../../../../ajax/ajax_appMgmtSave.php:300 +#: ../../../../ajax/ajax_appMgmtSave.php:305 msgid "Perfil en uso por:" msgstr "Profil wird benutzt durch: " -# Delete Profile -#: ../../../../ajax/ajax_appMgmtSave.php:305 -#: ../../../../ajax/ajax_getContent.php:201 -msgid "Eliminar Perfil" -msgstr "Profil löschen" - -# Profile -#: ../../../../ajax/ajax_appMgmtSave.php:306 -#: ../../../../ajax/ajax_getContent.php:114 -#: ../../../../ajax/ajax_doLogin.php:153 -#: ../../../../inc/profiles.class.php:203 -#: ../../../../inc/profiles.class.php:254 ../../../../inc/tpl/users.php:98 -msgid "Perfil" -msgstr "Profil" - # Profile deleted -#: ../../../../ajax/ajax_appMgmtSave.php:311 +#: ../../../../ajax/ajax_appMgmtSave.php:308 msgid "Perfil eliminado" msgstr "Profil gelöscht" # Error on profile deletion -#: ../../../../ajax/ajax_appMgmtSave.php:314 +#: ../../../../ajax/ajax_appMgmtSave.php:311 msgid "Error al eliminar el perfil" msgstr "Fehler beim Löschen eines Profils" -# Customer name needed -#: ../../../../ajax/ajax_appMgmtSave.php:327 -#: ../../../../ajax/ajax_accountSave.php:71 -#: ../../../../ajax/ajax_accountSave.php:88 -msgid "Es necesario un nombre de cliente" -msgstr "Kunde ist notwendig" - -# Duplicated customer name -#: ../../../../ajax/ajax_appMgmtSave.php:334 -msgid "Nombre de cliente duplicado" -msgstr "Duplizierter Kundenname" - # Customer added -#: ../../../../ajax/ajax_appMgmtSave.php:339 +#: ../../../../ajax/ajax_appMgmtSave.php:346 msgid "Cliente creado" msgstr "Kunde hinzugefügt" -# Error on creating customer -#: ../../../../ajax/ajax_appMgmtSave.php:341 -#: ../../../../ajax/ajax_accountSave.php:152 -#: ../../../../ajax/ajax_accountSave.php:201 -msgid "Error al crear el cliente" -msgstr "Fehler beim Anlegen des Kunden" - # Customer updated -#: ../../../../ajax/ajax_appMgmtSave.php:345 +#: ../../../../ajax/ajax_appMgmtSave.php:361 msgid "Cliente actualizado" msgstr "Kunde aktualisiert" -# Error on updating customer -#: ../../../../ajax/ajax_appMgmtSave.php:348 -msgid "Error al actualizar el cliente" -msgstr "Fehler beim Ändern des Kunden" - -# Customer in use by: -#: ../../../../ajax/ajax_appMgmtSave.php:358 -msgid "Cliente en uso por:" -msgstr "Kunde wird verwendet von:" - # Customer deleted -#: ../../../../ajax/ajax_appMgmtSave.php:362 +#: ../../../../ajax/ajax_appMgmtSave.php:371 msgid "Cliente eliminado" msgstr "Kunde gelöscht" -# Error on customer deletion -#: ../../../../ajax/ajax_appMgmtSave.php:365 -msgid "Error al eliminar el cliente" -msgstr "Fehler beim Löschen eines Kunden" - # Category name needed -#: ../../../../ajax/ajax_appMgmtSave.php:378 +#: ../../../../ajax/ajax_appMgmtSave.php:385 msgid "Es necesario un nombre de categoría" msgstr "Kategoriename ist notwendig" -# Category name duplicated -#: ../../../../ajax/ajax_appMgmtSave.php:385 -msgid "Nombre de categoría duplicado" -msgstr "Kategoriename dupliziert" - # Category added -#: ../../../../ajax/ajax_appMgmtSave.php:390 +#: ../../../../ajax/ajax_appMgmtSave.php:405 msgid "Categoría creada" msgstr "Kategorie hinzugefügt" -# Error on creating category -#: ../../../../ajax/ajax_appMgmtSave.php:392 -msgid "Error al crear la categoría" -msgstr "Fehler beim Anlegen der Kategorie" - # Category updated -#: ../../../../ajax/ajax_appMgmtSave.php:396 +#: ../../../../ajax/ajax_appMgmtSave.php:420 msgid "Categoría actualizada" msgstr "Kategorie aktualisiert" -# Error on updating category -#: ../../../../ajax/ajax_appMgmtSave.php:399 -msgid "Error al actualizar la categoría" -msgstr "Fehler beim Ändern der Kategorie" - -# Category in use by: -#: ../../../../ajax/ajax_appMgmtSave.php:407 -msgid "Categoría en uso por:" -msgstr "Kategorie wird verwendet von:" - # Category deleted -#: ../../../../ajax/ajax_appMgmtSave.php:411 +#: ../../../../ajax/ajax_appMgmtSave.php:431 msgid "Categoría eliminada" msgstr "Kategorie gelöscht" -# Error on category deletion -#: ../../../../ajax/ajax_appMgmtSave.php:414 -msgid "Error al eliminar la categoría" -msgstr "Fehler beim Löschen einer Kategorie" +# User/Pass not entered +#: ../../../../ajax/ajax_appMgmtSave.php:447 +#, fuzzy +msgid "Usuario o acción no indicado" +msgstr "Keine Benutzername/Passwort eingegeben" -# Edit User -#: ../../../../ajax/ajax_appMgmtData.php:46 -#: ../../../../ajax/ajax_getContent.php:137 -msgid "Editar Usuario" -msgstr "Benutzer ändern" - -# New User -#: ../../../../ajax/ajax_appMgmtData.php:51 -#: ../../../../ajax/ajax_getContent.php:135 -#: ../../../../inc/users.class.php:787 -msgid "Nuevo Usuario" -msgstr "Neuer Benutzer" - -# Edit Group -#: ../../../../ajax/ajax_appMgmtData.php:56 -#: ../../../../ajax/ajax_getContent.php:168 -msgid "Editar Grupo" -msgstr "Gruppe ändern" - -# New Group -#: ../../../../ajax/ajax_appMgmtData.php:61 -#: ../../../../ajax/ajax_getContent.php:167 -#: ../../../../inc/groups.class.php:150 -msgid "Nuevo Grupo" -msgstr "Neue Gruppe" - -# Edit Profile -#: ../../../../ajax/ajax_appMgmtData.php:66 -#: ../../../../ajax/ajax_getContent.php:200 -msgid "Editar Perfil" -msgstr "Profil ändern" - -# New Profile -#: ../../../../ajax/ajax_appMgmtData.php:71 -#: ../../../../ajax/ajax_getContent.php:199 -#: ../../../../inc/profiles.class.php:202 -msgid "Nuevo Perfil" -msgstr "Neues Profil" - -# Edit Customer -#: ../../../../ajax/ajax_appMgmtData.php:76 -#: ../../../../ajax/ajax_getContent.php:285 -msgid "Editar Cliente" -msgstr "Kunde ändern" - -# New Customer -#: ../../../../ajax/ajax_appMgmtData.php:81 -#: ../../../../ajax/ajax_getContent.php:284 -#: ../../../../inc/customer.class.php:56 -msgid "Nuevo Cliente" -msgstr "Neuer Kunde" - -# Edit Category -#: ../../../../ajax/ajax_appMgmtData.php:86 -#: ../../../../ajax/ajax_getContent.php:253 -msgid "Editar Categoría" -msgstr "Kategorie ändern" - -# New Category -#: ../../../../ajax/ajax_appMgmtData.php:91 -#: ../../../../ajax/ajax_getContent.php:252 -#: ../../../../inc/category.class.php:77 -msgid "Nueva Categoría" -msgstr "Neue Kategorie" - -# Download new version -#: ../../../../ajax/ajax_checkUpds.php:41 -msgid "Descargar nueva versión" -msgstr "Neu Version herunterladen" - -# Updated -#: ../../../../ajax/ajax_checkUpds.php:44 -msgid "Actualizado" -msgstr "Aktualisiert" - -# Account name needed -#: ../../../../ajax/ajax_accountSave.php:67 -#: ../../../../ajax/ajax_accountSave.php:92 -msgid "Es necesario un nombre de cuenta" -msgstr "Kontoname ist notwendig" - -# Username needed -#: ../../../../ajax/ajax_accountSave.php:75 -#: ../../../../ajax/ajax_accountSave.php:96 -msgid "Es necesario un usuario" -msgstr "Benutzername ist notwendig" - -# Password needed -#: ../../../../ajax/ajax_accountSave.php:79 -msgid "Es necesario una clave" -msgstr "Passwort ist notwendig" - -# Invalid Id -#: ../../../../ajax/ajax_accountSave.php:100 -#: ../../../../ajax/ajax_accountSave.php:113 -msgid "Id inválido" -msgstr "Ungültige ID" - -# Crypto module can't be loaded -#: ../../../../ajax/ajax_accountSave.php:124 -#: ../../../../inc/import.class.php:237 -msgid "No se puede usar el módulo de encriptación" -msgstr "Kryptographie-Modul konnte nicht geladen werden" - -# Error on creating encryption data -#: ../../../../ajax/ajax_accountSave.php:133 -#: ../../../../inc/import.class.php:244 -msgid "Error al generar datos cifrados" -msgstr "Fehler beim Erzeugen der verschlüsselten Daten" - -# Duplicated customer -#: ../../../../ajax/ajax_accountSave.php:148 -#: ../../../../ajax/ajax_accountSave.php:197 -msgid "Cliente duplicado" -msgstr "Doppelter Kunde" - -# Account added -#: ../../../../ajax/ajax_accountSave.php:176 -msgid "Cuenta creada" +# Account Activation +#: ../../../../ajax/ajax_appMgmtSave.php:457 +#, fuzzy +msgid "Autorización creada" msgstr "Konto hinzugefügt" -# Error on account creation -#: ../../../../ajax/ajax_accountSave.php:178 -msgid "Error al crear la cuenta" -msgstr "Fehler beim Anlegen des Kontos" - -# No changes -#: ../../../../ajax/ajax_accountSave.php:211 -msgid "Sin cambios" -msgstr "Keine Änderungen" - -# Account updated -#: ../../../../ajax/ajax_accountSave.php:216 -#: ../../../../inc/account.class.php:364 -msgid "Cuenta actualizada" +# Configuration updated +#: ../../../../ajax/ajax_appMgmtSave.php:465 +#, fuzzy +msgid "Autorización actualizada" msgstr "Konto aktualisiert" -# Error on updating account -#: ../../../../ajax/ajax_accountSave.php:218 -msgid "Error al modificar la cuenta" -msgstr "Fehler beim Änderns des Kontos" - # Account deleted -#: ../../../../ajax/ajax_accountSave.php:225 -msgid "Cuenta eliminada" +#: ../../../../ajax/ajax_appMgmtSave.php:475 +#, fuzzy +msgid "Autorización eliminada" msgstr "Konto gelöscht" -# Error on account deletion -#: ../../../../ajax/ajax_accountSave.php:227 -msgid "Error al eliminar la cuenta" -msgstr "Fehler beim Löschen eines Kontos" +# Duplicated group name +#: ../../../../ajax/ajax_appMgmtSave.php:492 +#, fuzzy +msgid "Nombre del campo no indicado" +msgstr "Kundenname" -# Error on updating password -#: ../../../../ajax/ajax_accountSave.php:239 -msgid "Error al actualizar la clave" -msgstr "Fehler beim Ändern des Passworts" +# File type not allowed +#: ../../../../ajax/ajax_appMgmtSave.php:494 +#, fuzzy +msgid "Tipo del campo no indicado" +msgstr "Dateityp nicht erlaubt" -# Account restored -#: ../../../../ajax/ajax_accountSave.php:262 -msgid "Cuenta restaurada" -msgstr "Konto wiederhergestellt" +#: ../../../../ajax/ajax_appMgmtSave.php:496 +msgid "Módulo del campo no indicado" +msgstr "" -# Error on restoring account -#: ../../../../ajax/ajax_accountSave.php:265 -msgid "Error al restaurar cuenta" -msgstr "Fehler bei der Wiederherstellung der Rechnung" +# Group added +#: ../../../../ajax/ajax_appMgmtSave.php:510 +#, fuzzy +msgid "Campo creado" +msgstr "Benutzer hinzugefügt" -# Event log cleared -#: ../../../../ajax/ajax_eventlog.php:43 -msgid "Registro de eventos vaciado" -msgstr "Protokol gelöscht" +# Group updated +#: ../../../../ajax/ajax_appMgmtSave.php:519 +#, fuzzy +msgid "Campo actualizado" +msgstr "Aktualisiert" -# Error on clearing event log -#: ../../../../ajax/ajax_eventlog.php:45 -msgid "Error al vaciar el registro de eventos" -msgstr "Fehler beim Löschen des Protokols" +# Group deleted +#: ../../../../ajax/ajax_appMgmtSave.php:529 +#, fuzzy +msgid "Campo eliminado" +msgstr "Benutzer gelöscht" -# Missing Wiki parameters -#: ../../../../ajax/ajax_configSave.php:96 -msgid "Faltan parámetros de Wiki" -msgstr "Fehlender Wiki-Parameter" - -# Missing LDAP parameters -#: ../../../../ajax/ajax_configSave.php:107 -msgid "Faltan parámetros de LDAP" -msgstr "Fehlender LDAP-Parameter" - -# Missing Mail parameters -#: ../../../../ajax/ajax_configSave.php:123 -msgid "Faltan parámetros de Correo" -msgstr "Fehlender Mail-Parameter" - -# Maximum file upload size in 16MB -#: ../../../../ajax/ajax_configSave.php:144 -msgid "El tamaño máximo de archivo es de 16MB" -msgstr "Maximale Dateigröße beim Upload ist 16MB" - -# Edit Configuration -#: ../../../../ajax/ajax_configSave.php:161 -msgid "Modificar Configuración" -msgstr "Konfiguration ändern" - -# Configuration updated -#: ../../../../ajax/ajax_configSave.php:169 -msgid "Configuración actualizada" -msgstr "Konfiguration aktualisiert" - -# Master Password updated -#: ../../../../ajax/ajax_configSave.php:178 -#: ../../../../ajax/ajax_configSave.php:224 -#: ../../../../ajax/ajax_viewpass.php:68 ../../../../ajax/ajax_viewpass.php:70 -#: ../../../../inc/html.class.php:419 -msgid "Clave maestra actualizada" -msgstr "Master-Passwort aktualisiert" - -# Restart session to update -#: ../../../../ajax/ajax_configSave.php:178 -#: ../../../../ajax/ajax_viewpass.php:68 ../../../../ajax/ajax_viewpass.php:70 -#: ../../../../inc/html.class.php:419 -msgid "Reinicie la sesión para cambiarla" -msgstr "Neue Sitzung beginnen" - -# Master Password needed -#: ../../../../ajax/ajax_configSave.php:182 -msgid "Clave maestra no indicada" -msgstr "Master-Passwort notwendig" - -# Password update must be confirmed -#: ../../../../ajax/ajax_configSave.php:186 -msgid "Se ha de confirmar el cambio de clave" -msgstr "Passwort muss bestätigt werden" - -# Password are the same -#: ../../../../ajax/ajax_configSave.php:190 -msgid "Las claves son idénticas" -msgstr "Passwörter sind identisch" - -# Master passwords mismatch -#: ../../../../ajax/ajax_configSave.php:194 -msgid "Las claves maestras no coinciden" -msgstr "Master-Passwort stimmt nicht" - -# Current master password mismatch -#: ../../../../ajax/ajax_configSave.php:198 -msgid "La clave maestra actual no coincide" -msgstr "Aktuelles Master-Passwort stimmt nicht" - -# Error on updating accounts' passwords -#: ../../../../ajax/ajax_configSave.php:207 -msgid "Errores al actualizar las claves de las cuentas" -msgstr "Fehler beim Ändern der Passwörter eines Kontos" - -# Update Master Password -#: ../../../../ajax/ajax_configSave.php:221 -#: ../../../../inc/account.class.php:736 -msgid "Actualizar Clave Maestra" -msgstr "Master-Passwort ändern" - -# Error on saving master password's hash -#: ../../../../ajax/ajax_configSave.php:227 -msgid "Error al guardar el hash de la clave maestra" -msgstr "Fehler beim Speichern des Hash für das Master-Passwort" - -# Incorrect parameters -#: ../../../../ajax/ajax_getContent.php:42 -msgid "Parámetros incorrectos" -msgstr "Fehlerhafter Parameter" - -# Users Management -#: ../../../../ajax/ajax_getContent.php:100 ../../../../inc/tpl/main.php:54 -msgid "Gestión de Usuarios" -msgstr "Benutzerverwaltung" - -# Groups Management -#: ../../../../ajax/ajax_getContent.php:101 -msgid "Gestión de Grupos" -msgstr "Gruppenverwaltung" - -# Profiles Management -#: ../../../../ajax/ajax_getContent.php:102 -msgid "Gestión de Perfiles" -msgstr "Profilverwaltung" - -# Name -#: ../../../../ajax/ajax_getContent.php:112 -#: ../../../../ajax/ajax_getContent.php:158 -#: ../../../../ajax/ajax_getContent.php:190 -#: ../../../../ajax/ajax_getContent.php:243 -#: ../../../../ajax/ajax_getContent.php:275 -#: ../../../../ajax/ajax_search.php:125 ../../../../ajax/ajax_search.php:236 -#: ../../../../inc/tpl/request.php:38 ../../../../inc/tpl/groups.php:39 -#: ../../../../inc/tpl/customers.php:39 ../../../../inc/tpl/profiles.php:39 -#: ../../../../inc/tpl/editpass.php:40 ../../../../inc/tpl/accounts.php:172 -#: ../../../../inc/tpl/categories.php:39 ../../../../inc/tpl/users.php:66 -msgid "Nombre" -msgstr "Name" - -# Login -#: ../../../../ajax/ajax_getContent.php:113 -#: ../../../../ajax/ajax_passReset.php:74 ../../../../inc/users.class.php:866 -#: ../../../../inc/users.class.php:892 ../../../../inc/tpl/users.php:81 -msgid "Login" -msgstr "Anmeldung" - -# Group -#: ../../../../ajax/ajax_getContent.php:115 -#: ../../../../ajax/ajax_doLogin.php:154 ../../../../inc/groups.class.php:151 -#: ../../../../inc/groups.class.php:179 ../../../../inc/groups.class.php:205 -#: ../../../../inc/tpl/config.php:329 ../../../../inc/tpl/users.php:105 -msgid "Grupo" -msgstr "Gruppe" - -# Properties -#: ../../../../ajax/ajax_getContent.php:116 -msgid "Propiedades" -msgstr "Eigenschaften" - -# Application Admin -#: ../../../../ajax/ajax_getContent.php:122 ../../../../inc/tpl/main.php:30 -msgid "Admin Aplicación" -msgstr "Anwendungs-Administrator" - -# Account Admin -#: ../../../../ajax/ajax_getContent.php:123 -msgid "Admin Cuentas" -msgstr "Konto-Administrator" - -# LDAP User -#: ../../../../ajax/ajax_getContent.php:124 ../../../../inc/tpl/users.php:87 -msgid "Usuario de LDAP" -msgstr "LDAP-Benutzer" - -# Disabled -#: ../../../../ajax/ajax_getContent.php:125 ../../../../inc/tpl/users.php:164 -msgid "Deshabilitado" -msgstr "inaktiv" - -# View User Details -#: ../../../../ajax/ajax_getContent.php:136 -msgid "Ver Detalles de Usuario" -msgstr "Benutzerdetails anzeigen" - -# Delete User -#: ../../../../ajax/ajax_getContent.php:138 -#: ../../../../inc/users.class.php:891 -msgid "Eliminar Usuario" -msgstr "Benutzer löschen" - -# Change user password -#: ../../../../ajax/ajax_getContent.php:139 -msgid "Cambiar Clave de Usuario" -msgstr "Benutzerpasswort Ändern" - -# Description -#: ../../../../ajax/ajax_getContent.php:158 -#: ../../../../ajax/ajax_getContent.php:243 -#: ../../../../ajax/ajax_getContent.php:275 -#: ../../../../ajax/ajax_sendRequest.php:62 ../../../../inc/tpl/groups.php:46 -#: ../../../../inc/tpl/customers.php:46 ../../../../inc/tpl/categories.php:46 -#: ../../../../inc/tpl/eventlog.php:68 -msgid "Descripción" -msgstr "Beschreibung" - -# Delete Group -#: ../../../../ajax/ajax_getContent.php:169 -#: ../../../../inc/groups.class.php:204 -msgid "Eliminar Grupo" -msgstr "Gruppe löschen" - -# Categories management -#: ../../../../ajax/ajax_getContent.php:233 -msgid "Gestión de Categorías" -msgstr "Kategorienverwaltung" - -# Customers Management -#: ../../../../ajax/ajax_getContent.php:234 -msgid "Gestión de Clientes" -msgstr "Kundenverwaltung" - -# Delete Category -#: ../../../../ajax/ajax_getContent.php:254 -#: ../../../../inc/category.class.php:131 -msgid "Eliminar Categoría" -msgstr "Kategorie löschen" - -# Delete Customer -#: ../../../../ajax/ajax_getContent.php:286 -#: ../../../../inc/customer.class.php:127 -msgid "Eliminar Cliente" -msgstr "Kunde löschen" - -# Configuration -#: ../../../../ajax/ajax_getContent.php:319 -#: ../../../../inc/config.class.php:124 ../../../../inc/config.class.php:150 -#: ../../../../inc/tpl/main.php:56 ../../../../inc/tpl/profiles.php:71 -msgid "Configuración" -msgstr "Konfiguration" - -# Master Password -#: ../../../../ajax/ajax_getContent.php:320 ../../../../inc/tpl/login.php:40 -#: ../../../../inc/tpl/login.php:48 ../../../../inc/tpl/profiles.php:76 -#: ../../../../inc/tpl/install.php:109 ../../../../inc/tpl/install.php:114 -#: ../../../../inc/tpl/install.php:115 -msgid "Clave Maestra" -msgstr "Master-Passwort" - -# Backup -#: ../../../../ajax/ajax_getContent.php:321 -msgid "Copia de Seguridad" -msgstr "Sicherung" - -# Import accounts from external sources -#: ../../../../ajax/ajax_getContent.php:322 -msgid "Importar cuentas desde fuentes externas" -msgstr "Importiere Konto aus externer Quelle" - -# Import Accounts -#: ../../../../ajax/ajax_getContent.php:322 -#: ../../../../inc/migrate.class.php:394 ../../../../inc/import.class.php:80 -#: ../../../../inc/import.class.php:160 -msgid "Importar Cuentas" -msgstr "Importiere Konten" +# Make Backup +#: ../../../../ajax/ajax_backup.php:52 ../../../../ajax/ajax_backup.php:57 +#: ../../../../inc/themes/classic/backup.inc:54 +msgid "Realizar Backup" +msgstr "Backup erstellen" # Error while doing backup -#: ../../../../ajax/ajax_backup.php:49 +#: ../../../../ajax/ajax_backup.php:52 ../../../../ajax/ajax_backup.php:54 msgid "Error al realizar el backup" msgstr "Fehler beim Ausführen des Backups" # Please, check the event log for more details -#: ../../../../ajax/ajax_backup.php:49 ../../../../ajax/ajax_checkLdap.php:54 -#: ../../../../inc/migrate.class.php:115 ../../../../inc/import.class.php:89 +#: ../../../../ajax/ajax_backup.php:54 ../../../../ajax/ajax_backup.php:68 +#: ../../../../ajax/ajax_checkLdap.php:57 ../../../../inc/Import.class.php:128 +#: ../../../../inc/Migrate.class.php:93 msgid "Revise el registro de eventos para más detalles" msgstr "Bitte schauen Sie in das Protokol für weitere Details" -# Make Backup -#: ../../../../ajax/ajax_backup.php:52 ../../../../inc/tpl/backup.php:82 -msgid "Realizar Backup" -msgstr "Backup erstellen" - # Application and database backup successfully done -#: ../../../../ajax/ajax_backup.php:53 +#: ../../../../ajax/ajax_backup.php:57 msgid "Copia de la aplicación y base de datos realizada correctamente" msgstr "Sicherung der Applikation und der Datenbank erfolgreich durchgeführt" # Backup process finished -#: ../../../../ajax/ajax_backup.php:58 +#: ../../../../ajax/ajax_backup.php:59 msgid "Proceso de backup finalizado" msgstr "Backup beendet" -# Password Recovery -#: ../../../../ajax/ajax_passReset.php:44 -msgid "Recuperación de Clave" -msgstr "Wiederherstellung des Passworts" - -# Requested for -#: ../../../../ajax/ajax_passReset.php:48 -#: ../../../../ajax/ajax_passReset.php:55 -msgid "Solicitado para" -msgstr "Anfrage für" - -# Request sent -#: ../../../../ajax/ajax_passReset.php:52 -#: ../../../../ajax/ajax_sendRequest.php:71 -msgid "Solicitud enviada" -msgstr "Anfrage verschickt." - -# You will receive an email to complete the request in short. -#: ../../../../ajax/ajax_passReset.php:52 -msgid "En breve recibirá un correo para completar la solicitud." -msgstr "Sie bekommen in Kürze eine E-Mail, um die Anfrage zu beenden" - -# The request can't be done. Please contact with the administrator -#: ../../../../ajax/ajax_passReset.php:59 -msgid "No se ha podido realizar la solicitud. Consulte con el administrador." -msgstr "" -"Anfrage konnte nicht ausgeführt werden. Bitte Administrator benachrichtigen." - -# Edit User Password -#: ../../../../ajax/ajax_passReset.php:73 ../../../../inc/users.class.php:865 -msgid "Modificar Clave Usuario" -msgstr "Benutzer-Passwort ändern" - -# The password is incorrect or not the same -#: ../../../../ajax/ajax_passReset.php:85 -msgid "La clave es incorrecta o no coincide" -msgstr "Das Passwort is falsch oder nicht gleich" - -# Files management disabled -#: ../../../../ajax/ajax_files.php:44 ../../../../ajax/ajax_getFiles.php:36 -msgid "Gestión de archivos deshabilitada" -msgstr "Dateiverwaltung gesperrt" - -# There are no allowed extensions -#: ../../../../ajax/ajax_files.php:63 -msgid "No hay extensiones permitidas" -msgstr "Es gibt keine erlaubten Dateiendungen" - -# File type not allowed -#: ../../../../ajax/ajax_files.php:71 ../../../../inc/import.class.php:111 -msgid "Tipo de archivo no soportado" -msgstr "Dateityp nicht erlaubt" - -# Invalid file -#: ../../../../ajax/ajax_files.php:74 -msgid "Archivo inválido" -msgstr "Ungültige Datei" - -# Internal error while reading file -#: ../../../../ajax/ajax_files.php:87 ../../../../ajax/ajax_files.php:99 -#: ../../../../ajax/ajax_files.php:103 ../../../../inc/import.class.php:122 -#: ../../../../inc/import.class.php:130 -msgid "Error interno al leer el archivo" -msgstr "Interner Fehler beim Lesen der Datei" - -# File is bigger than -#: ../../../../ajax/ajax_files.php:91 -msgid "El archivo es mayor de " -msgstr "Datei ist größer als" - -# Upload File -#: ../../../../ajax/ajax_files.php:98 ../../../../inc/files.class.php:51 -msgid "Subir Archivo" -msgstr "Datei hochladen" - -# File saved -#: ../../../../ajax/ajax_files.php:107 -msgid "Archivo guardado" -msgstr "Datei gespeichert" - -# Error on file save -#: ../../../../ajax/ajax_files.php:109 -msgid "No se pudo guardar el archivo" -msgstr "Fehler beim Speichern der Datei" - -# Invalid file ID -#: ../../../../ajax/ajax_files.php:116 ../../../../ajax/ajax_files.php:174 -msgid "No es un ID de archivo válido" -msgstr "Ungültige Datei-ID" - -# File doesn't exist -#: ../../../../ajax/ajax_files.php:124 ../../../../inc/files.class.php:140 -msgid "El archivo no existe" -msgstr "Datei existiert nicht" - -# Download File -#: ../../../../ajax/ajax_files.php:133 ../../../../ajax/ajax_getFiles.php:67 -msgid "Descargar Archivo" -msgstr "Datei herunterladen" - -# ID -#: ../../../../ajax/ajax_files.php:134 ../../../../ajax/ajax_viewpass.php:82 -#: ../../../../inc/files.class.php:107 ../../../../inc/tpl/eventlog.php:53 -msgid "ID" -msgstr "ID" - -# File -#: ../../../../ajax/ajax_files.php:135 ../../../../inc/files.class.php:53 -#: ../../../../inc/files.class.php:108 ../../../../inc/tpl/migrate.php:110 -msgid "Archivo" -msgstr "Datei" - -# Type -#: ../../../../ajax/ajax_files.php:136 ../../../../inc/files.class.php:54 -#: ../../../../inc/files.class.php:109 -msgid "Tipo" -msgstr "Typ" - -# Size -#: ../../../../ajax/ajax_files.php:137 ../../../../inc/files.class.php:55 -#: ../../../../inc/files.class.php:110 -msgid "Tamaño" -msgstr "Größe" - -# File deleted -#: ../../../../ajax/ajax_files.php:178 -msgid "Archivo eliminado" -msgstr "Datei gelöscht" - -# Error on file deletion -#: ../../../../ajax/ajax_files.php:180 -msgid "Error al eliminar el archivo" -msgstr "Fehler beim Löschen einer Datei" - -# Confirm account import -#: ../../../../ajax/ajax_migrate.php:1 -msgid "Confirmar la importación de cuentas" -msgstr "Import der Konten bestätigen" - -# Connection username needed -#: ../../../../ajax/ajax_migrate.php:1 -msgid "Es necesario un usuario de conexión" -msgstr "Benutzername der Verbindung ist notwendig" - -# Connection password needed -#: ../../../../ajax/ajax_migrate.php:1 -msgid "Es necesaria una clave de conexión" -msgstr "Verbindungs-Passwort wird benötigt" - -# Database name needed -#: ../../../../ajax/ajax_migrate.php:1 -msgid "Es necesario el nombre de la BBDD" -msgstr "Datenbank ist notwendig" - -# Host name needed -#: ../../../../ajax/ajax_migrate.php:1 -msgid "Es necesario un nombre de host" -msgstr "Hostname ist notwendig" - -# You don't have permission to access to this account -#: ../../../../ajax/ajax_viewpass.php:52 ../../../../ajax/ajax_viewpass.php:58 -#: ../../../../inc/html.class.php:417 -msgid "No tiene permisos para acceder a esta cuenta" -msgstr "Sie haben keine Erlaubnis auf dieses Konto zuzugreifen" - -# Master password mismatch -#: ../../../../ajax/ajax_viewpass.php:61 -msgid "La clave maestra no coincide" -msgstr "Master-Passwort stimmt nicht" - -# View password -#: ../../../../ajax/ajax_viewpass.php:81 ../../../../ajax/ajax_search.php:291 -#: ../../../../inc/tpl/profiles.php:50 ../../../../inc/tpl/accounts.php:522 -msgid "Ver Clave" -msgstr "Passwort anzeigen" - -# Account -#: ../../../../ajax/ajax_viewpass.php:83 -#: ../../../../ajax/ajax_sendRequest.php:60 ../../../../inc/files.class.php:52 -#: ../../../../inc/account.class.php:366 ../../../../inc/account.class.php:574 -#: ../../../../inc/account.class.php:596 ../../../../inc/account.class.php:867 -msgid "Cuenta" -msgstr "Konto" - -# User -#: ../../../../ajax/ajax_viewpass.php:95 ../../../../ajax/ajax_search.php:131 -#: ../../../../ajax/ajax_search.php:248 ../../../../ajax/ajax_doLogin.php:77 -#: ../../../../ajax/ajax_doLogin.php:84 ../../../../ajax/ajax_doLogin.php:91 -#: ../../../../ajax/ajax_doLogin.php:101 ../../../../ajax/ajax_doLogin.php:111 -#: ../../../../ajax/ajax_doLogin.php:152 ../../../../res/test.php:64 -#: ../../../../inc/init.php:546 ../../../../inc/users.class.php:788 -#: ../../../../inc/users.class.php:829 ../../../../inc/tpl/passreset.php:51 -#: ../../../../inc/tpl/request.php:49 ../../../../inc/tpl/login.php:35 -#: ../../../../inc/tpl/login.php:44 ../../../../inc/tpl/install.php:89 -#: ../../../../inc/tpl/install.php:90 ../../../../inc/tpl/editpass.php:53 -#: ../../../../inc/tpl/accounts.php:233 ../../../../inc/tpl/config.php:423 -#: ../../../../inc/tpl/eventlog.php:62 -msgid "Usuario" -msgstr "Benutzer" - -# Password -#: ../../../../ajax/ajax_viewpass.php:99 ../../../../ajax/ajax_usrpass.php:53 -#: ../../../../ajax/ajax_usrpass.php:56 ../../../../inc/tpl/passreset.php:62 -#: ../../../../inc/tpl/login.php:37 ../../../../inc/tpl/login.php:45 -#: ../../../../inc/tpl/install.php:99 ../../../../inc/tpl/install.php:100 -#: ../../../../inc/tpl/editpass.php:57 ../../../../inc/tpl/accounts.php:250 -#: ../../../../inc/tpl/config.php:431 ../../../../inc/tpl/users.php:129 -msgid "Clave" -msgstr "Passwort" - -# No records found -#: ../../../../ajax/ajax_search.php:108 ../../../../inc/tpl/eventlog.php:42 -msgid "No se encontraron registros" -msgstr "Keine Datensätze gefunden" - -# Sort by Customer -#: ../../../../ajax/ajax_search.php:122 -msgid "Ordenar por Cliente" -msgstr "Nach Kunde sortieren" - -# Customer -#: ../../../../ajax/ajax_search.php:122 ../../../../ajax/ajax_search.php:231 -#: ../../../../ajax/ajax_sendRequest.php:61 -#: ../../../../inc/account.class.php:365 ../../../../inc/account.class.php:573 -#: ../../../../inc/account.class.php:595 ../../../../inc/account.class.php:866 -#: ../../../../inc/customer.class.php:57 -#: ../../../../inc/customer.class.php:103 -#: ../../../../inc/customer.class.php:128 ../../../../inc/tpl/request.php:41 -#: ../../../../inc/tpl/editpass.php:44 ../../../../inc/tpl/accounts.php:188 -msgid "Cliente" -msgstr "Kunde" - -# Sort by Name -#: ../../../../ajax/ajax_search.php:125 -msgid "Ordenar por Nombre" -msgstr "Nach Name sortieren" - -# Sort by Category -#: ../../../../ajax/ajax_search.php:128 -msgid "Ordenar por Categoría" -msgstr "Nach Kategorie sortieren" - -# Category -#: ../../../../ajax/ajax_search.php:128 ../../../../ajax/ajax_search.php:241 -#: ../../../../inc/category.class.php:78 -#: ../../../../inc/category.class.php:132 -#: ../../../../inc/category.class.php:178 ../../../../inc/tpl/accounts.php:205 -msgid "Categoría" -msgstr "Kategorie" - -# Sort by Username -#: ../../../../ajax/ajax_search.php:131 -msgid "Ordenar por Usuario" -msgstr "Nach Benutzername sortieren" - -# Sort by URL / IP -#: ../../../../ajax/ajax_search.php:134 -msgid "Ordenar por URL / IP" -msgstr "Nach URL/IP sortieren" - -# URL / IP -#: ../../../../ajax/ajax_search.php:134 ../../../../ajax/ajax_search.php:253 -#: ../../../../inc/tpl/request.php:45 ../../../../inc/tpl/editpass.php:48 -#: ../../../../inc/tpl/accounts.php:217 -msgid "URL / IP" -msgstr "URL/IP" - -# Search in Wiki -#: ../../../../ajax/ajax_search.php:173 -msgid "Buscar en Wiki" -msgstr "Im Wiki suchen" - -# Account Details -#: ../../../../ajax/ajax_search.php:181 ../../../../ajax/ajax_search.php:287 -#: ../../../../inc/tpl/accounts.php:80 ../../../../inc/tpl/accounts.php:91 -msgid "Detalles de Cuenta" -msgstr "Kontodetails" - -# Open link to -#: ../../../../ajax/ajax_search.php:199 ../../../../ajax/ajax_search.php:201 -msgid "Abrir enlace a" -msgstr "Öffne Verweis nach" - -# Notes -#: ../../../../ajax/ajax_search.php:260 ../../../../inc/tpl/accounts.php:269 -#: ../../../../inc/tpl/users.php:147 -msgid "Notas" -msgstr "Bemerkungen" - -# Attachments -#: ../../../../ajax/ajax_search.php:264 -msgid "Archivos adjuntos" -msgstr "Anhänge" - -# Link to Wiki -#: ../../../../ajax/ajax_search.php:275 -msgid "Enlace a Wiki" -msgstr "Verweis zum Wiki" - -# Copy Password to Clipboard -#: ../../../../ajax/ajax_search.php:292 ../../../../ajax/ajax_search.php:344 -#: ../../../../inc/tpl/accounts.php:527 ../../../../inc/tpl/accounts.php:616 -msgid "Copiar Clave en Portapapeles" -msgstr "Passwort in die Zwischenablage kopieren" - -# More Actions -#: ../../../../ajax/ajax_search.php:296 ../../../../inc/html.class.php:536 -msgid "Más Acciones" -msgstr "Weitere Aktionen" - -# Edit Account -#: ../../../../ajax/ajax_search.php:300 ../../../../inc/tpl/accounts.php:550 -msgid "Modificar Cuenta" -msgstr "Konto ändern" - -# Copy Account -#: ../../../../ajax/ajax_search.php:304 ../../../../inc/tpl/accounts.php:53 -msgid "Copiar Cuenta" -msgstr "Konto kopieren" - -# Delete Account -#: ../../../../ajax/ajax_search.php:308 ../../../../inc/account.class.php:594 -#: ../../../../inc/tpl/accounts.php:73 ../../../../inc/tpl/accounts.php:562 -msgid "Eliminar Cuenta" -msgstr "Konto löschen" - -# Request Modification -#: ../../../../ajax/ajax_search.php:315 ../../../../inc/tpl/accounts.php:555 -msgid "Solicitar Modificación" -msgstr "Änderung initiiert" - -# Password Copied to Clipboard -#: ../../../../ajax/ajax_search.php:348 ../../../../inc/tpl/accounts.php:620 -msgid "Clave Copiada al Portapapeles" -msgstr "Passwort in die Zwischenablage kopiert" - -# Description is needed -#: ../../../../ajax/ajax_sendRequest.php:45 -msgid "Es necesaria una descripción" -msgstr "Beschreibung ist notwendig" - -# Request for Account Modification -#: ../../../../ajax/ajax_sendRequest.php:58 -msgid "Solicitud de Modificación de Cuenta" -msgstr "Kontoänderung initiiert" - -# Requester -#: ../../../../ajax/ajax_sendRequest.php:59 -msgid "Solicitante" -msgstr "Anfrager" - -# Error on sending request -#: ../../../../ajax/ajax_sendRequest.php:74 -msgid "Error al enviar la solicitud" -msgstr "Fehler beim Senden der Anfrage" - -# You don't have permission to do this operation -#: ../../../../ajax/ajax_usrpass.php:41 -msgid "No tiene permisos para realizar esta operación" -msgstr "Sie haben keine Erlaubnis für diese Aktion" - -# Password Change -#: ../../../../ajax/ajax_usrpass.php:48 ../../../../inc/auth.class.php:185 -#: ../../../../inc/tpl/users.php:166 -msgid "Cambio de Clave" -msgstr "Passwortänderung" - -# Generate random password -#: ../../../../ajax/ajax_usrpass.php:57 ../../../../inc/tpl/editpass.php:63 -#: ../../../../inc/tpl/accounts.php:257 ../../../../inc/tpl/users.php:133 -msgid "Generar clave aleatoria" -msgstr "Zufälliges Passwort erzeugen" - -# Password (repeat) -#: ../../../../ajax/ajax_usrpass.php:62 ../../../../ajax/ajax_usrpass.php:64 -#: ../../../../inc/tpl/editpass.php:68 ../../../../inc/tpl/accounts.php:261 -#: ../../../../inc/tpl/users.php:138 -msgid "Clave (repetir)" -msgstr "Passwort (Wiederholung)" - -# Password strength level -#: ../../../../ajax/ajax_usrpass.php:65 ../../../../inc/tpl/passreset.php:65 -#: ../../../../inc/tpl/passreset.php:73 ../../../../inc/tpl/masterpass.php:63 -#: ../../../../inc/tpl/install.php:104 ../../../../inc/tpl/install.php:119 -#: ../../../../inc/tpl/editpass.php:70 ../../../../inc/tpl/accounts.php:264 -#: ../../../../inc/tpl/users.php:141 -msgid "Nivel de fortaleza de la clave" -msgstr "Passwortstärke" - -# Save -#: ../../../../ajax/ajax_usrpass.php:81 ../../../../inc/tpl/masterpass.php:113 -#: ../../../../inc/tpl/groups.php:64 ../../../../inc/tpl/customers.php:64 -#: ../../../../inc/tpl/profiles.php:134 ../../../../inc/tpl/editpass.php:88 -#: ../../../../inc/tpl/accounts.php:536 ../../../../inc/tpl/categories.php:64 -#: ../../../../inc/tpl/config.php:488 ../../../../inc/tpl/users.php:210 -msgid "Guardar" -msgstr "Speichern" +# Enable debug +#: ../../../../ajax/ajax_backup.php:66 ../../../../ajax/ajax_backup.php:71 +#, fuzzy +msgid "Realizar Exportación" +msgstr "Backup erstellen" + +# Error on creating accounts files +#: ../../../../ajax/ajax_backup.php:66 +#, fuzzy +msgid "Error al realizar la exportación de cuentas" +msgstr "Fehler beim Anlegen der Kontodateien" + +# Error while doing backup +#: ../../../../ajax/ajax_backup.php:68 +#, fuzzy +msgid "Error al realizar la exportación" +msgstr "Fehler beim Ausführen des Backups" + +# Application successfully updated +#: ../../../../ajax/ajax_backup.php:71 +#, fuzzy +msgid "Exportación de cuentas realizada correctamente" +msgstr "Configuration Aktualisierung erfolgreich durchgeführt." + +# Backup process finished +#: ../../../../ajax/ajax_backup.php:73 +#, fuzzy +msgid "Proceso de exportación finalizado" +msgstr "Backup beendet" # LDAP parameters are not set -#: ../../../../ajax/ajax_checkLdap.php:48 ../../../../inc/ldap.class.php:239 +#: ../../../../ajax/ajax_checkLdap.php:51 ../../../../inc/Ldap.class.php:248 msgid "Los parámetros de LDAP no están configurados" msgstr "LDAP-Parameter sind nicht gesetzt" # LDAP connection error -#: ../../../../ajax/ajax_checkLdap.php:54 +#: ../../../../ajax/ajax_checkLdap.php:57 msgid "Error de conexión a LDAP" msgstr "LDAP Verbindungsfehler" # LDAP connection OK -#: ../../../../ajax/ajax_checkLdap.php:56 +#: ../../../../ajax/ajax_checkLdap.php:59 msgid "Conexión a LDAP correcta" msgstr "LDAP-Verbindung ist OK" # Objects found -#: ../../../../ajax/ajax_checkLdap.php:56 +#: ../../../../ajax/ajax_checkLdap.php:59 msgid "Objetos encontrados" msgstr "Objekte gefunden" -# Delete File -#: ../../../../ajax/ajax_getFiles.php:63 ../../../../inc/files.class.php:106 -msgid "Eliminar Archivo" -msgstr "Datei löschen" +# Edit Configuration +#: ../../../../ajax/ajax_configSave.php:55 +msgid "Modificar Configuración" +msgstr "Konfiguration ändern" -# View file -#: ../../../../ajax/ajax_getFiles.php:70 -msgid "Ver Archivo" -msgstr "Datei ansehen" +# Maximum file upload size in 16MB +#: ../../../../ajax/ajax_configSave.php:60 +#, fuzzy +msgid "El tamaño máximo por archivo es de 16MB" +msgstr "Maximale Dateigröße beim Upload ist 16MB" + +# Missing Mail parameters +#: ../../../../ajax/ajax_configSave.php:114 +#, fuzzy +msgid "Faltan parámetros de Proxy" +msgstr "Fehlender Wiki-Parameter" + +# General +#: ../../../../ajax/ajax_configSave.php:125 +#: ../../../../web/ConfigC.class.php:122 +#: ../../../../inc/themes/classic/profiles.inc:61 +#: ../../../../inc/themes/material-blue/profiles.inc:72 +msgid "General" +msgstr "Allgemein" + +# Missing Wiki parameters +#: ../../../../ajax/ajax_configSave.php:137 +msgid "Faltan parámetros de Wiki" +msgstr "Fehlender Wiki-Parameter" + +# Wiki +#: ../../../../ajax/ajax_configSave.php:147 +#: ../../../../web/ConfigC.class.php:254 +#: ../../../../inc/themes/classic/wiki.inc:4 +#: ../../../../inc/themes/material-blue/wiki.inc:4 +msgid "Wiki" +msgstr "Wiki" + +# Missing LDAP parameters +#: ../../../../ajax/ajax_configSave.php:164 +msgid "Faltan parámetros de LDAP" +msgstr "Fehlender LDAP-Parameter" + +# LDAP +#: ../../../../ajax/ajax_configSave.php:179 +#: ../../../../web/ConfigC.class.php:286 +#: ../../../../inc/themes/classic/ldap.inc:4 +#: ../../../../inc/themes/material-blue/ldap.inc:4 +msgid "LDAP" +msgstr "LDAP" + +# Missing Mail parameters +#: ../../../../ajax/ajax_configSave.php:196 +msgid "Faltan parámetros de Correo" +msgstr "Fehlender Mail-Parameter" + +# Mail +#: ../../../../ajax/ajax_configSave.php:216 +#: ../../../../web/ConfigC.class.php:316 +#: ../../../../inc/themes/classic/mail.inc:4 +#: ../../../../inc/themes/material-blue/mail.inc:4 +msgid "Correo" +msgstr "E-Mail" + +# Configuration updated +#: ../../../../ajax/ajax_configSave.php:226 +msgid "Configuración actualizada" +msgstr "Konfiguration aktualisiert" + +# Master Password updated +#: ../../../../ajax/ajax_configSave.php:235 +#: ../../../../ajax/ajax_configSave.php:275 +#: ../../../../ajax/ajax_viewpass.php:60 +#: ../../../../inc/Controller.class.php:169 +msgid "Clave maestra actualizada" +msgstr "Master-Passwort aktualisiert" + +# Restart session to update +#: ../../../../ajax/ajax_configSave.php:235 +#: ../../../../ajax/ajax_viewpass.php:60 +#: ../../../../inc/Controller.class.php:169 +msgid "Reinicie la sesión para cambiarla" +msgstr "Neue Sitzung beginnen" + +# Master Password needed +#: ../../../../ajax/ajax_configSave.php:237 +msgid "Clave maestra no indicada" +msgstr "Master-Passwort notwendig" + +# Password update must be confirmed +#: ../../../../ajax/ajax_configSave.php:239 +msgid "Se ha de confirmar el cambio de clave" +msgstr "Passwort muss bestätigt werden" + +# Password are the same +#: ../../../../ajax/ajax_configSave.php:241 +msgid "Las claves son idénticas" +msgstr "Passwörter sind identisch" + +# Master passwords mismatch +#: ../../../../ajax/ajax_configSave.php:243 +msgid "Las claves maestras no coinciden" +msgstr "Master-Passwort stimmt nicht" + +# Current master password mismatch +#: ../../../../ajax/ajax_configSave.php:245 +msgid "La clave maestra actual no coincide" +msgstr "Aktuelles Master-Passwort stimmt nicht" + +# Error on updating accounts' passwords +#: ../../../../ajax/ajax_configSave.php:254 +msgid "Errores al actualizar las claves de las cuentas" +msgstr "Fehler beim Ändern der Passwörter eines Kontos" + +# Error on updating accounts' passwords +#: ../../../../ajax/ajax_configSave.php:260 +#, fuzzy +msgid "Errores al actualizar las claves de las cuentas del histórico" +msgstr "Fehler beim Ändern der Passwörter eines Kontos" + +# Update Master Password +#: ../../../../ajax/ajax_configSave.php:273 +#: ../../../../inc/Account.class.php:497 +msgid "Actualizar Clave Maestra" +msgstr "Master-Passwort ändern" + +# Error on saving master password's hash +#: ../../../../ajax/ajax_configSave.php:277 +msgid "Error al guardar el hash de la clave maestra" +msgstr "Fehler beim Speichern des Hash für das Master-Passwort" + +# Generate random password +#: ../../../../ajax/ajax_configSave.php:285 +#, fuzzy +msgid "Generar Clave Temporal" +msgstr "Zufälliges Passwort erzeugen" + +# Password +#: ../../../../ajax/ajax_configSave.php:285 +#: ../../../../inc/themes/classic/account.inc:83 +#: ../../../../inc/themes/classic/editpass.inc:25 +#: ../../../../inc/themes/classic/install.inc:38 +#: ../../../../inc/themes/classic/install.inc:39 +#: ../../../../inc/themes/classic/login.inc:10 +#: ../../../../inc/themes/classic/login.inc:22 +#: ../../../../inc/themes/classic/mail.inc:55 +#: ../../../../inc/themes/classic/passreset.inc:29 +#: ../../../../inc/themes/classic/users.inc:75 +#: ../../../../inc/themes/classic/userspass.inc:8 +#: ../../../../inc/themes/classic/userspass.inc:11 +#: ../../../../inc/themes/material-blue/account.inc:95 +#: ../../../../inc/themes/material-blue/account.inc:100 +#: ../../../../inc/themes/material-blue/config.inc:360 +#: ../../../../inc/themes/material-blue/editpass.inc:26 +#: ../../../../inc/themes/material-blue/editpass.inc:31 +#: ../../../../inc/themes/material-blue/editpass.inc:41 +#: ../../../../inc/themes/material-blue/install.inc:44 +#: ../../../../inc/themes/material-blue/ldap.inc:105 +#: ../../../../inc/themes/material-blue/login.inc:16 +#: ../../../../inc/themes/material-blue/login.inc:38 +#: ../../../../inc/themes/material-blue/mail.inc:73 +#: ../../../../inc/themes/material-blue/mail.inc:80 +#: ../../../../inc/themes/material-blue/passreset.inc:31 +#: ../../../../inc/themes/material-blue/users.inc:89 +#: ../../../../inc/themes/material-blue/users.inc:96 +#: ../../../../inc/themes/material-blue/userspass.inc:8 +#: ../../../../inc/themes/material-blue/userspass.inc:13 +msgid "Clave" +msgstr "Passwort" + +# Generated Password +#: ../../../../ajax/ajax_configSave.php:287 +#, fuzzy +msgid "Clave Temporal Generada" +msgstr "Generiertes Passwort" # User/Pass not entered -#: ../../../../ajax/ajax_doLogin.php:41 +#: ../../../../ajax/ajax_doLogin.php:45 msgid "Usuario/Clave no introducidos" msgstr "Keine Benutzername/Passwort eingegeben" # Session start (LDAP) -#: ../../../../ajax/ajax_doLogin.php:54 ../../../../ajax/ajax_doLogin.php:75 -#: ../../../../ajax/ajax_doLogin.php:82 ../../../../ajax/ajax_doLogin.php:89 -msgid "Inicio sesión (LDAP)" +#: ../../../../ajax/ajax_doLogin.php:57 +#, fuzzy +msgid "Inicio sesión" msgstr "Sitzungsbeginn (LDAP)" +# Server +#: ../../../../ajax/ajax_doLogin.php:62 +#, fuzzy +msgid "Servidor Login" +msgstr "Anmeldung" + # Error on saving LDAP user data -#: ../../../../ajax/ajax_doLogin.php:60 +#: ../../../../ajax/ajax_doLogin.php:68 msgid "Error al guardar los datos de LDAP" msgstr "Fehler beim Speichern der LDAP-Benutzerdaten" # Internal error -#: ../../../../ajax/ajax_doLogin.php:63 ../../../../ajax/ajax_doLogin.php:71 -#: ../../../../ajax/ajax_doLogin.php:122 ../../../../inc/import.class.php:237 -#: ../../../../inc/import.class.php:244 ../../../../inc/import.class.php:262 +#: ../../../../ajax/ajax_doLogin.php:71 ../../../../ajax/ajax_doLogin.php:79 +#: ../../../../ajax/ajax_doLogin.php:131 ../../../../ajax/ajax_doLogin.php:172 +#: ../../../../inc/ApiTokens.class.php:140 +#: ../../../../inc/ApiTokens.class.php:186 +#: ../../../../inc/ApiTokens.class.php:217 +#: ../../../../inc/ApiTokens.class.php:243 +#: ../../../../inc/ApiTokens.class.php:262 +#: ../../../../inc/ApiTokens.class.php:304 +#: ../../../../inc/ApiTokens.class.php:328 ../../../../inc/Crypt.class.php:235 +#: ../../../../inc/Crypt.class.php:246 +#: ../../../../inc/XmlImportBase.class.php:74 msgid "Error interno" msgstr "Interner Fehler" # Error on updating user password in BD -#: ../../../../ajax/ajax_doLogin.php:68 +#: ../../../../ajax/ajax_doLogin.php:76 msgid "Error al actualizar la clave del usuario en la BBDD" msgstr "Fehler beim Ändern des Benutzer-Passworts in der BD" # Incorrect login -#: ../../../../ajax/ajax_doLogin.php:76 ../../../../ajax/ajax_doLogin.php:100 +#: ../../../../ajax/ajax_doLogin.php:84 ../../../../ajax/ajax_doLogin.php:109 msgid "Login incorrecto" msgstr "Fehlerhafte Anmeldung" +# User +#: ../../../../ajax/ajax_doLogin.php:85 ../../../../ajax/ajax_doLogin.php:92 +#: ../../../../ajax/ajax_doLogin.php:99 ../../../../ajax/ajax_doLogin.php:110 +#: ../../../../ajax/ajax_doLogin.php:120 ../../../../ajax/ajax_doLogin.php:167 +#: ../../../../inc/ApiTokens.class.php:190 +#: ../../../../inc/ApiTokens.class.php:308 ../../../../inc/Auth.class.php:112 +#: ../../../../inc/Init.class.php:516 ../../../../inc/UserBase.class.php:382 +#: ../../../../inc/UserBase.class.php:526 ../../../../res/test.php:64 +#: ../../../../web/SearchC.class.php:289 +#: ../../../../web/UsersMgmtC.class.php:392 +#: ../../../../inc/themes/classic/account.inc:70 +#: ../../../../inc/themes/classic/editpass.inc:21 +#: ../../../../inc/themes/classic/eventlog.inc:25 +#: ../../../../inc/themes/classic/info.inc:39 +#: ../../../../inc/themes/classic/install.inc:27 +#: ../../../../inc/themes/classic/install.inc:28 +#: ../../../../inc/themes/classic/login.inc:7 +#: ../../../../inc/themes/classic/login.inc:20 +#: ../../../../inc/themes/classic/mail.inc:47 +#: ../../../../inc/themes/classic/passreset.inc:17 +#: ../../../../inc/themes/classic/request.inc:17 +#: ../../../../inc/themes/classic/search.inc:52 +#: ../../../../inc/themes/classic/tokens.inc:8 +#: ../../../../inc/themes/material-blue/account.inc:80 +#: ../../../../inc/themes/material-blue/config.inc:346 +#: ../../../../inc/themes/material-blue/editpass.inc:22 +#: ../../../../inc/themes/material-blue/eventlog.inc:24 +#: ../../../../inc/themes/material-blue/info.inc:39 +#: ../../../../inc/themes/material-blue/login.inc:10 +#: ../../../../inc/themes/material-blue/login.inc:32 +#: ../../../../inc/themes/material-blue/mail.inc:61 +#: ../../../../inc/themes/material-blue/mail.inc:67 +#: ../../../../inc/themes/material-blue/passreset.inc:17 +#: ../../../../inc/themes/material-blue/request.inc:20 +#: ../../../../inc/themes/material-blue/search.inc:55 +#: ../../../../inc/themes/material-blue/tokens.inc:8 +msgid "Usuario" +msgstr "Benutzer" + # Wrong user/pass -#: ../../../../ajax/ajax_doLogin.php:80 ../../../../ajax/ajax_doLogin.php:94 -#: ../../../../ajax/ajax_doLogin.php:104 +#: ../../../../ajax/ajax_doLogin.php:88 ../../../../ajax/ajax_doLogin.php:102 +#: ../../../../ajax/ajax_doLogin.php:113 msgid "Usuario/Clave incorrectos" msgstr "Falscher/s Benutzername/Passwort" # Account expired -#: ../../../../ajax/ajax_doLogin.php:83 ../../../../ajax/ajax_doLogin.php:87 +#: ../../../../ajax/ajax_doLogin.php:91 ../../../../ajax/ajax_doLogin.php:95 msgid "Cuenta expirada" msgstr "Konto abgelaufen" # The user have no associated groups -#: ../../../../ajax/ajax_doLogin.php:90 +#: ../../../../ajax/ajax_doLogin.php:98 msgid "El usuario no tiene grupos asociados" msgstr "Der Benutzer hat keine zugewiesene Gruppe" -# Session start (MySQL) -#: ../../../../ajax/ajax_doLogin.php:96 -msgid "Inicio sesión (MySQL)" -msgstr "Sitzungsbeginn (MySQL)" - # User disabled -#: ../../../../ajax/ajax_doLogin.php:110 ../../../../ajax/ajax_doLogin.php:114 +#: ../../../../ajax/ajax_doLogin.php:119 ../../../../ajax/ajax_doLogin.php:123 msgid "Usuario deshabilitado" msgstr "Benutzer gespert" # Error on retrieving user data from DB -#: ../../../../ajax/ajax_doLogin.php:119 +#: ../../../../ajax/ajax_doLogin.php:128 msgid "Error al obtener los datos del usuario de la BBDD" msgstr "Fehler beim Laden der Benutzerdaten aus der Datenbank" # The master password not saved or is incorrect -#: ../../../../ajax/ajax_doLogin.php:127 +#: ../../../../ajax/ajax_doLogin.php:138 msgid "La clave maestra no ha sido guardada o es incorrecta" msgstr "Master-Passwort ist nicht sicher oder stimmt nicht" # Invalid Master Password -#: ../../../../ajax/ajax_doLogin.php:130 ../../../../ajax/ajax_doLogin.php:133 +#: ../../../../ajax/ajax_doLogin.php:145 ../../../../ajax/ajax_doLogin.php:148 msgid "Clave maestra incorrecta" msgstr "Ungültiges Master-Passwort" -# Query error -#: ../../../../js/js.php:45 -msgid "Error en la consulta" -msgstr "Abfrage-Fehler" +# Profile +#: ../../../../ajax/ajax_doLogin.php:168 +#: ../../../../inc/ProfileBase.class.php:512 +#: ../../../../inc/ProfileBase.class.php:550 +#: ../../../../inc/ProfileBase.class.php:593 +#: ../../../../web/UsersMgmtC.class.php:89 +#: ../../../../inc/themes/classic/users.inc:37 +#: ../../../../inc/themes/material-blue/users.inc:43 +msgid "Perfil" +msgstr "Profil" -# An error has occured -#: ../../../../js/js.php:46 -msgid "Ha ocurrido un error" -msgstr "Ein Fehler ist aufgetreten" +# Group +#: ../../../../ajax/ajax_doLogin.php:169 ../../../../inc/Groups.class.php:158 +#: ../../../../inc/Groups.class.php:259 ../../../../inc/Groups.class.php:375 +#: ../../../../web/UsersMgmtC.class.php:90 +#: ../../../../inc/themes/classic/ldap.inc:116 +#: ../../../../inc/themes/classic/users.inc:49 +#: ../../../../inc/themes/material-blue/ldap.inc:139 +#: ../../../../inc/themes/material-blue/ldap.inc:164 +#: ../../../../inc/themes/material-blue/users.inc:57 +msgid "Grupo" +msgstr "Gruppe" -# Session finished -#: ../../../../js/js.php:47 ../../../../inc/tpl/login.php:71 -msgid "Sesión finalizada" -msgstr "Sitzung beendet" +# Files management disabled +#: ../../../../ajax/ajax_files.php:45 ../../../../ajax/ajax_getFiles.php:39 +msgid "Gestión de archivos deshabilitada" +msgstr "Dateiverwaltung gesperrt" -# Delete account? -#: ../../../../js/js.php:48 -msgid "Borrar la cuenta?" -msgstr "Account löschen?" +# Upload File +#: ../../../../ajax/ajax_files.php:59 ../../../../inc/Files.class.php:63 +msgid "Subir Archivo" +msgstr "Datei hochladen" -# Delete user? -#: ../../../../js/js.php:49 -msgid "Borrar el usuario?" -msgstr "Benutzer löschen?" +# There are no allowed extensions +#: ../../../../ajax/ajax_files.php:68 +msgid "No hay extensiones permitidas" +msgstr "Es gibt keine erlaubten Dateiendungen" -# Please save the configuration in order to take effect -#: ../../../../js/js.php:50 -msgid "Guarde la configuración para que sea efectiva" -msgstr "Bitte speichern Sie die Konfiguration, um wirksam" +# File type not allowed +#: ../../../../ajax/ajax_files.php:79 ../../../../inc/FileImport.class.php:115 +msgid "Tipo de archivo no soportado" +msgstr "Dateityp nicht erlaubt" -# Generated Password -#: ../../../../js/js.php:51 -msgid "Clave Generada" -msgstr "Generiertes Passwort" +# Invalid file +#: ../../../../ajax/ajax_files.php:85 +msgid "Archivo inválido" +msgstr "Ungültige Datei" -# High level -#: ../../../../js/js.php:52 -msgid "Nivel alto" -msgstr "Hohe" +# Internal error while reading file +#: ../../../../ajax/ajax_files.php:101 ../../../../ajax/ajax_files.php:118 +#: ../../../../inc/FileImport.class.php:131 +#: ../../../../inc/FileImport.class.php:149 +#: ../../../../inc/FileImport.class.php:167 +msgid "Error interno al leer el archivo" +msgstr "Interner Fehler beim Lesen der Datei" -# Average level -#: ../../../../js/js.php:53 -msgid "Nivel medio" -msgstr "Mittelstufe" +# File is bigger than +#: ../../../../ajax/ajax_files.php:108 +msgid "El archivo es mayor de " +msgstr "Datei ist größer als" -# Low level -#: ../../../../js/js.php:54 -msgid "Nivel bajo" -msgstr "Low-Pegel" +# File saved +#: ../../../../ajax/ajax_files.php:125 +msgid "Archivo guardado" +msgstr "Datei gespeichert" -# Very high level -#: ../../../../js/js.php:55 -msgid "Nivel muy alto" -msgstr "Sehr hohes Niveau" +# Error on file save +#: ../../../../ajax/ajax_files.php:130 +msgid "No se pudo guardar el archivo" +msgstr "Fehler beim Speichern der Datei" -# You should use at least 8 characters -#: ../../../../js/js.php:56 -msgid "Utilizar al menos 8 caracteres" -msgstr "Verwenden Sie mindestens 8 Zeichen" +# Invalid file ID +#: ../../../../ajax/ajax_files.php:140 ../../../../ajax/ajax_files.php:199 +msgid "No es un ID de archivo válido" +msgstr "Ungültige Datei-ID" -# Delete item? -#: ../../../../js/js.php:57 -msgid "Borrar elemento?" -msgstr "Artikel löschen?" +# File doesn't exist +#: ../../../../ajax/ajax_files.php:148 +msgid "El archivo no existe" +msgstr "Datei existiert nicht" -# Page not found -#: ../../../../js/js.php:58 -msgid "Página no encontrada" -msgstr "Seite nicht gefunden" +# Download File +#: ../../../../ajax/ajax_files.php:157 +#: ../../../../inc/themes/classic/files.inc:19 +#: ../../../../inc/themes/material-blue/files.inc:19 +msgid "Descargar Archivo" +msgstr "Datei herunterladen" -# File not supported for preview -#: ../../../../js/js.php:59 -msgid "Archivo no soportado para visualizar" -msgstr "Die Datei, nicht unterstützt" +# ID +#: ../../../../ajax/ajax_files.php:158 ../../../../ajax/ajax_viewpass.php:69 +#: ../../../../inc/Files.class.php:112 +#: ../../../../inc/themes/classic/eventlog.inc:16 +#: ../../../../inc/themes/material-blue/eventlog.inc:15 +msgid "ID" +msgstr "ID" -# Delete file? -#: ../../../../js/js.php:60 -msgid "Eliminar archivo?" -msgstr "Datei löschen?" +# File +#: ../../../../ajax/ajax_files.php:159 ../../../../inc/Files.class.php:65 +#: ../../../../inc/Files.class.php:113 +#: ../../../../inc/themes/classic/import.inc:155 +#: ../../../../inc/themes/material-blue/import.inc:83 +msgid "Archivo" +msgstr "Datei" -# Your browser does not support HTML 5 file uploads -#: ../../../../js/js.php:61 -msgid "Su navegador no soporta subir archivos con HTML5" -msgstr "Ihr Browser unterstützt keine Hochladen von Dateien in HTML5" +# Type +#: ../../../../ajax/ajax_files.php:160 ../../../../inc/Files.class.php:66 +#: ../../../../inc/Files.class.php:114 +#: ../../../../web/AccountsMgmtC.class.php:266 +#: ../../../../inc/themes/classic/customfields.inc:16 +#: ../../../../inc/themes/material-blue/customfields.inc:19 +msgid "Tipo" +msgstr "Typ" -# Too many files -#: ../../../../js/js.php:62 -msgid "Demasiados archivos" -msgstr "Zu viele Dateien" +# Size +#: ../../../../ajax/ajax_files.php:161 ../../../../inc/Files.class.php:67 +#: ../../../../inc/Files.class.php:115 +msgid "Tamaño" +msgstr "Größe" -# Unable to save file.
    Max file size: -#: ../../../../js/js.php:63 -msgid "No es posible guardar el archivo.
    Tamaño máximo:" -msgstr "Datei konnte nicht gespeichert
    Max. Dateigröße.:" +# File deleted +#: ../../../../ajax/ajax_files.php:203 +msgid "Archivo eliminado" +msgstr "Datei gelöscht" -# Extension not allowed -#: ../../../../js/js.php:64 -msgid "Extensión no permitida" -msgstr "Erweiterung nicht erlaubt" +# Error on file deletion +#: ../../../../ajax/ajax_files.php:208 +msgid "Error al eliminar el archivo" +msgstr "Fehler beim Löschen einer Datei" -# Clear event log? -#: ../../../../js/js.php:65 -msgid "Vaciar el registro de eventos?" -msgstr "Klar Ereignisprotokoll?" +# Incorrect parameters +#: ../../../../ajax/ajax_getContent.php:41 +#: ../../../../inc/ApiRequest.class.php:55 +#: ../../../../inc/CustomFieldDef.class.php:38 +#: ../../../../inc/CustomFields.class.php:48 +msgid "Parámetros incorrectos" +msgstr "Fehlerhafter Parameter" + +# Confirm account import +#: ../../../../ajax/ajax_migrate.php:55 +msgid "Confirmar la importación de cuentas" +msgstr "Import der Konten bestätigen" + +# Connection username needed +#: ../../../../ajax/ajax_migrate.php:57 +msgid "Es necesario un usuario de conexión" +msgstr "Benutzername der Verbindung ist notwendig" + +# Connection password needed +#: ../../../../ajax/ajax_migrate.php:59 +msgid "Es necesaria una clave de conexión" +msgstr "Verbindungs-Passwort wird benötigt" + +# Database name needed +#: ../../../../ajax/ajax_migrate.php:61 +msgid "Es necesario el nombre de la BBDD" +msgstr "Datenbank ist notwendig" + +# Host name needed +#: ../../../../ajax/ajax_migrate.php:63 +msgid "Es necesario un nombre de host" +msgstr "Hostname ist notwendig" + +# Password Recovery +#: ../../../../ajax/ajax_passReset.php:47 +#: ../../../../ajax/ajax_passReset.php:50 +msgid "Recuperación de Clave" +msgstr "Wiederherstellung des Passworts" + +# Requested for +#: ../../../../ajax/ajax_passReset.php:53 +#: ../../../../ajax/ajax_passReset.php:58 +msgid "Solicitado para" +msgstr "Anfrage für" + +# Request sent +#: ../../../../ajax/ajax_passReset.php:55 +#: ../../../../ajax/ajax_sendRequest.php:75 +msgid "Solicitud enviada" +msgstr "Anfrage verschickt." + +# You will receive an email to complete the request in short. +#: ../../../../ajax/ajax_passReset.php:55 +msgid "En breve recibirá un correo para completar la solicitud." +msgstr "Sie bekommen in Kürze eine E-Mail, um die Anfrage zu beenden" + +# The request can't be done. Please contact with the administrator +#: ../../../../ajax/ajax_passReset.php:60 +msgid "No se ha podido realizar la solicitud. Consulte con el administrador." +msgstr "Anfrage konnte nicht ausgeführt werden. Bitte Administrator benachrichtigen." + +# Edit User Password +#: ../../../../ajax/ajax_passReset.php:72 +#: ../../../../inc/UserBase.class.php:568 +#: ../../../../inc/UserUtil.class.php:686 +msgid "Modificar Clave Usuario" +msgstr "Benutzer-Passwort ändern" + +# Login +#: ../../../../ajax/ajax_passReset.php:72 +#: ../../../../inc/UserBase.class.php:568 +#: ../../../../inc/UserBase.class.php:592 +#: ../../../../inc/UserUtil.class.php:686 +#: ../../../../web/UsersMgmtC.class.php:88 +#: ../../../../inc/themes/classic/users.inc:21 +#: ../../../../inc/themes/material-blue/users.inc:24 +msgid "Login" +msgstr "Anmeldung" + +# The password is incorrect or not the same +#: ../../../../ajax/ajax_passReset.php:80 +msgid "La clave es incorrecta o no coincide" +msgstr "Das Passwort is falsch oder nicht gleich" + +# Description is needed +#: ../../../../ajax/ajax_sendRequest.php:48 +msgid "Es necesaria una descripción" +msgstr "Beschreibung ist notwendig" + +# Request for Account Modification +#: ../../../../ajax/ajax_sendRequest.php:61 +msgid "Solicitud de Modificación de Cuenta" +msgstr "Kontoänderung initiiert" + +# Requester +#: ../../../../ajax/ajax_sendRequest.php:62 +msgid "Solicitante" +msgstr "Anfrager" + +# Account +#: ../../../../ajax/ajax_sendRequest.php:63 +#: ../../../../ajax/ajax_viewpass.php:70 ../../../../inc/Account.class.php:165 +#: ../../../../inc/Account.class.php:219 ../../../../inc/Account.class.php:402 +#: ../../../../inc/Account.class.php:425 ../../../../inc/Account.class.php:667 +#: ../../../../inc/Files.class.php:64 +msgid "Cuenta" +msgstr "Konto" + +# Customer +#: ../../../../ajax/ajax_sendRequest.php:64 +#: ../../../../inc/Account.class.php:164 ../../../../inc/Account.class.php:218 +#: ../../../../inc/Account.class.php:401 ../../../../inc/Account.class.php:424 +#: ../../../../inc/Account.class.php:666 ../../../../inc/Customer.class.php:65 +#: ../../../../inc/Customer.class.php:115 +#: ../../../../inc/Customer.class.php:163 +#: ../../../../web/SearchC.class.php:271 +#: ../../../../inc/themes/classic/account.inc:23 +#: ../../../../inc/themes/classic/editpass.inc:12 +#: ../../../../inc/themes/classic/request.inc:9 +#: ../../../../inc/themes/classic/search.inc:21 +#: ../../../../inc/themes/material-blue/account.inc:29 +#: ../../../../inc/themes/material-blue/editpass.inc:13 +#: ../../../../inc/themes/material-blue/request.inc:10 +#: ../../../../inc/themes/material-blue/search.inc:24 +msgid "Cliente" +msgstr "Kunde" + +# Description +#: ../../../../ajax/ajax_sendRequest.php:65 +#: ../../../../web/AccountsMgmtC.class.php:79 +#: ../../../../web/AccountsMgmtC.class.php:138 +#: ../../../../web/UsersMgmtC.class.php:187 +#: ../../../../inc/themes/classic/categories.inc:16 +#: ../../../../inc/themes/classic/customers.inc:16 +#: ../../../../inc/themes/classic/eventlog.inc:31 +#: ../../../../inc/themes/classic/groups.inc:16 +#: ../../../../inc/themes/material-blue/categories.inc:20 +#: ../../../../inc/themes/material-blue/customers.inc:20 +#: ../../../../inc/themes/material-blue/eventlog.inc:30 +#: ../../../../inc/themes/material-blue/groups.inc:20 +msgid "Descripción" +msgstr "Beschreibung" + +# Error on sending request +#: ../../../../ajax/ajax_sendRequest.php:78 +msgid "Error al enviar la solicitud" +msgstr "Fehler beim Senden der Anfrage" + +# Error on updating profile +#: ../../../../ajax/ajax_userPrefsSave.php:75 +#, fuzzy +msgid "Error al actualizar preferencias" +msgstr "Fehler beim Ändern des Benutzers" + +# Accounts updated: +#: ../../../../ajax/ajax_userPrefsSave.php:78 +#, fuzzy +msgid "Preferencias actualizadas" +msgstr "Konten aktualisiert" + +# Master password mismatch +#: ../../../../ajax/ajax_viewpass.php:54 +msgid "La clave maestra no coincide" +msgstr "Master-Passwort stimmt nicht" + +# You don't have permission to access to this account +#: ../../../../ajax/ajax_viewpass.php:58 +#: ../../../../inc/Controller.class.php:166 +msgid "No tiene permisos para acceder a esta cuenta" +msgstr "Sie haben keine Erlaubnis auf dieses Konto zuzugreifen" + +# View password +#: ../../../../ajax/ajax_viewpass.php:68 ../../../../inc/Acl.class.php:133 +#: ../../../../inc/themes/classic/account.inc:379 +#: ../../../../inc/themes/classic/profiles.inc:23 +#: ../../../../inc/themes/classic/search.inc:102 +#: ../../../../inc/themes/material-blue/account.inc:418 +#: ../../../../inc/themes/material-blue/profiles.inc:35 +#: ../../../../inc/themes/material-blue/search.inc:113 +msgid "Ver Clave" +msgstr "Passwort anzeigen" + +# View account password +#: ../../../../ajax/ajax_viewpass.php:79 +#, fuzzy +msgid "Clave de Cuenta" +msgstr "Konto-Passwort ändern" + +# Parameter +#: ../../../../api.php:56 +#, fuzzy +msgid "Ayuda Parámetros" +msgstr "Hilfe :: FAQ :: Changelog" # Unable to access to this file directly -#: ../../../../inc/groups.class.php:27 ../../../../inc/util.class.php:26 -#: ../../../../inc/util.class.php:288 ../../../../inc/db.class.php:27 -#: ../../../../inc/html.class.php:27 ../../../../inc/files.class.php:27 -#: ../../../../inc/backup.class.php:26 ../../../../inc/ldap.class.php:27 -#: ../../../../inc/config.class.php:26 ../../../../inc/profiles.class.php:27 -#: ../../../../inc/common.class.php:26 ../../../../inc/account.class.php:26 -#: ../../../../inc/init.php:26 ../../../../inc/acl.class.php:27 -#: ../../../../inc/upgrade.class.php:27 ../../../../inc/migrate.class.php:26 -#: ../../../../inc/keepassimport.class.php:27 -#: ../../../../inc/installer.class.php:27 -#: ../../../../inc/keepassximport.class.php:27 -#: ../../../../inc/users.class.php:27 ../../../../inc/log.class.php:26 -#: ../../../../inc/crypt.class.php:26 ../../../../inc/customer.class.php:27 -#: ../../../../inc/category.class.php:27 ../../../../inc/import.class.php:27 -#: ../../../../inc/auth.class.php:27 ../../../../inc/tpl/request.php:25 -#: ../../../../inc/tpl/backup.php:26 ../../../../inc/tpl/masterpass.php:26 -#: ../../../../inc/tpl/groups.php:26 ../../../../inc/tpl/migrate.php:26 -#: ../../../../inc/tpl/login.php:26 ../../../../inc/tpl/customers.php:26 -#: ../../../../inc/tpl/main.php:26 ../../../../inc/tpl/profiles.php:26 -#: ../../../../inc/tpl/search.php:26 ../../../../inc/tpl/editpass.php:25 -#: ../../../../inc/tpl/accounts.php:26 ../../../../inc/tpl/categories.php:26 -#: ../../../../inc/tpl/config.php:26 ../../../../inc/tpl/users.php:26 -#: ../../../../inc/tpl/eventlog.php:26 +#: ../../../../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:30 ../../../../inc/Backup.class.php:28 +#: ../../../../inc/Category.class.php:29 ../../../../inc/Common.class.php:28 +#: ../../../../inc/Config.class.php:28 ../../../../inc/Controller.class.php:31 +#: ../../../../inc/Crypt.class.php:28 ../../../../inc/CsvImport.class.php:28 +#: ../../../../inc/CsvImportBase.class.php:28 +#: ../../../../inc/Customer.class.php:29 ../../../../inc/DB.class.php:28 +#: ../../../../inc/DBConnectionFactory.class.php:30 +#: ../../../../inc/FileImport.class.php:28 ../../../../inc/Files.class.php:29 +#: ../../../../inc/Groups.class.php:29 ../../../../inc/Html.class.php:28 +#: ../../../../inc/ImageUtil.class.php:28 ../../../../inc/Import.class.php:29 +#: ../../../../inc/ImportBase.class.php:28 ../../../../inc/Init.class.php:30 +#: ../../../../inc/Installer.class.php:29 +#: ../../../../inc/KeepassImport.class.php:28 +#: ../../../../inc/KeepassXImport.class.php:28 +#: ../../../../inc/Ldap.class.php:29 ../../../../inc/LdapADS.class.php:28 +#: ../../../../inc/Log.class.php:28 ../../../../inc/Migrate.class.php:28 +#: ../../../../inc/Profile.class.php:29 +#: ../../../../inc/ProfileBase.class.php:28 +#: ../../../../inc/Request.class.php:111 ../../../../inc/Session.class.php:28 +#: ../../../../inc/SyspassImport.class.php:28 +#: ../../../../inc/Upgrade.class.php:29 ../../../../inc/User.class.php:28 +#: ../../../../inc/UserLdap.class.php:28 +#: ../../../../inc/UserPreferences.class.php:28 +#: ../../../../inc/UserUtil.class.php:28 ../../../../inc/Util.class.php:30 +#: ../../../../inc/XmlImport.class.php:28 +#: ../../../../inc/XmlImportBase.class.php:28 +#: ../../../../web/AccountC.class.php:38 +#: ../../../../web/AccountsMgmtC.class.php:32 +#: ../../../../web/ConfigC.class.php:30 ../../../../web/EventlogC.class.php:28 +#: ../../../../web/SearchC.class.php:30 +#: ../../../../web/UsersMgmtC.class.php:39 +#: ../../../../web/UsersPrefsC.class.php:32 msgid "No es posible acceder directamente a este archivo" msgstr "Auf diese Datei darf nicht direkt zugegriffen werden" -# Edit Group -#: ../../../../inc/groups.class.php:178 -msgid "Modificar Grupo" -msgstr "Gruppe ändern" - -# Required PHP version >= 5.1 -#: ../../../../inc/util.class.php:115 -msgid "Versión de PHP requerida >= 5.1" -msgstr "Erforderliche PHP-Version >= 5.1" - -# Please update PHP version to run sysPass in a secure way -#: ../../../../inc/util.class.php:116 -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." - -# Module unavilable -#: ../../../../inc/util.class.php:136 ../../../../inc/tpl/config.php:375 -msgid "Módulo no disponible" -msgstr "Modul verfügbar" - -# Without this module the application couldn't run correctly -#: ../../../../inc/util.class.php:137 -msgid "Sin este módulo la aplicación puede no funcionar correctamente." -msgstr "Ohne dieses Modul wird die Anwendung nicht korrekt funktionieren." - -# Unable to connect to DB -#: ../../../../inc/db.class.php:93 ../../../../inc/db.class.php:107 -#: ../../../../inc/db.class.php:114 -msgid "No es posible conectar con la BD" -msgstr "Verbindung zum Datenbank-Server kann nicht hergestellt werden" - -# Please, check connection parameters -#: ../../../../inc/db.class.php:93 -msgid "Compruebe los datos de conexión" -msgstr "Bitte überprüfen Sie Ihre Verbindungseinstellungen" - -# Javascript is needed in order to run correctly -#: ../../../../inc/html.class.php:204 -msgid "Javascript es necesario para el correcto funcionamiento" -msgstr "Javascript muss eingeschaltet sein." - -# Help :: FAQ :: Changelog -#: ../../../../inc/html.class.php:229 -msgid "Ayuda :: FAQ :: Changelog" -msgstr "Hilfe :: FAQ :: Changelog" - -# A cygnux.org project -#: ../../../../inc/html.class.php:231 -msgid "Un proyecto de cygnux.org" -msgstr "Ein cygnux.org Projekt" - -# Filter ON -#: ../../../../inc/html.class.php:273 -msgid "Filtro ON" -msgstr "Filter Eingeschaltet" - -# Global ON -#: ../../../../inc/html.class.php:275 -msgid "Global ON" -msgstr "Global eingeschaltet" - -# First page -#: ../../../../inc/html.class.php:280 ../../../../inc/html.class.php:313 -msgid "Primera página" -msgstr "Erste Seite" - -# Previous page -#: ../../../../inc/html.class.php:281 ../../../../inc/html.class.php:314 -msgid "Página anterior" -msgstr "Vorherige Seite" - -# Next page -#: ../../../../inc/html.class.php:288 ../../../../inc/html.class.php:321 -msgid "Página siguiente" -msgstr "Nächste Seite" - -# Last page -#: ../../../../inc/html.class.php:289 ../../../../inc/html.class.php:322 -msgid "Última página" -msgstr "Letzte Seite" - -# Option unavilable -#: ../../../../inc/html.class.php:416 -msgid "Opción no disponible" -msgstr "Option nicht verfügbar" - -# Please, contact to administrator -#: ../../../../inc/html.class.php:416 ../../../../inc/html.class.php:417 -#: ../../../../inc/html.class.php:418 ../../../../inc/init.php:484 -msgid "Consulte con el administrador" -msgstr "Bitte kontaktieren Sie den Administrator" - -# You don't have permission to access to this page -#: ../../../../inc/html.class.php:418 -msgid "No tiene permisos para acceder a esta página" -msgstr "Sie haben keine Erlaubnis auf diese Seite zuzugreifen" - -# This operation is only available on Linux environments -#: ../../../../inc/backup.class.php:155 -msgid "Esta operación sólo es posible en entornos Linux" -msgstr "Diese Funktion is nur in einer Linux-Umgebung verfügbar" - -# Error while doing backup in compatibility mode -#: ../../../../inc/backup.class.php:159 -msgid "Error al realizar backup en modo compatibilidad" -msgstr "Fehler während der Durchführung der Sicherung im Kompatibilitätsmodus" - -# Check backup directory permissions -#: ../../../../inc/backup.class.php:217 -msgid "Compruebe los permisos del directorio de backups" -msgstr "Bitte überprüfen Sie die Zugriffsrechte des Backup₋Verzeichnisses" - -# Unable to connect to LDAP server -#: ../../../../inc/ldap.class.php:97 ../../../../inc/ldap.class.php:102 -msgid "No es posible conectar con el servidor de LDAP" -msgstr "Verbindung zum LDAP-Server kann nicht hergestellt werden" - -# Connection error (BIND) -#: ../../../../inc/ldap.class.php:126 ../../../../inc/ldap.class.php:132 -msgid "Error al conectar (BIND)" -msgstr "LDAP-Verbindungsfehler (BIND)" - -# Error on searching objects in base DN -#: ../../../../inc/ldap.class.php:154 ../../../../inc/ldap.class.php:160 -msgid "Error al buscar objetos en DN base" -msgstr "Fehler beim Suchen nach Objekten in der Base-DN" - -# Error on searching group RDN -#: ../../../../inc/ldap.class.php:187 ../../../../inc/ldap.class.php:193 -#: ../../../../inc/ldap.class.php:200 ../../../../inc/ldap.class.php:205 -#: ../../../../inc/ldap.class.php:215 ../../../../inc/ldap.class.php:220 -msgid "Error al buscar RDN de grupo" -msgstr "Fehler beim Suchen nach Gruppen RDN" - -# Group RDN found -#: ../../../../inc/ldap.class.php:208 -msgid "RDN de grupo encontrado" -msgstr "Gruppen-RDN gefunden" - -# Error on searching user DN -#: ../../../../inc/ldap.class.php:270 ../../../../inc/ldap.class.php:276 -#: ../../../../inc/ldap.class.php:291 ../../../../inc/ldap.class.php:296 -msgid "Error al buscar el DN del usuario" -msgstr "Fehler beim Suchen nach Benutzer DN" - -# Error on searching user on LDAP -#: ../../../../inc/ldap.class.php:283 ../../../../inc/ldap.class.php:288 -msgid "Error al localizar el usuario en LDAP" -msgstr "Fehler beim Suchen des Benutzers in LDAP" - -# Error on searching users group -#: ../../../../inc/ldap.class.php:369 ../../../../inc/ldap.class.php:375 -msgid "Error al buscar el grupo de usuarios" -msgstr "Fehler beim Suchen nach Benutzergruppe" - -# No group found with that name -#: ../../../../inc/ldap.class.php:379 ../../../../inc/ldap.class.php:385 -msgid "No se encontró el grupo con ese nombre" -msgstr "Keine Gruppe mit dem Namen gefunden" - -# Update Configuration -#: ../../../../inc/config.class.php:125 ../../../../inc/config.class.php:151 -msgid "Modificar configuración" -msgstr "Konfiguration ändern" - -# Parameter -#: ../../../../inc/config.class.php:152 -msgid "Parámetro" -msgstr "Parameter" - -# Value -#: ../../../../inc/config.class.php:153 -msgid "Valor" -msgstr "Wert" - -# Unable to write on configuration file -#: ../../../../inc/config.class.php:312 -msgid "No es posible escribir el archivo de configuración" -msgstr "Konfigurationsdatei kann nicht geschrieben werden" - -# Please, check 'config' directory permissions -#: ../../../../inc/config.class.php:313 -msgid "Compruebe los permisos del directorio \"config\"" -msgstr "Bitte überprüfen Sie Zugriffsrechte auf das Verzeichnis \"config\"" - -# Edit Profile -#: ../../../../inc/profiles.class.php:253 -msgid "Modificar Perfil" -msgstr "Profil ändern" - -# N/A -#: ../../../../inc/common.class.php:60 ../../../../inc/users.class.php:107 -msgid "N/D" -msgstr "N/A" - -# Action -#: ../../../../inc/common.class.php:61 -msgid "Acción" -msgstr "Aktion" - -# Performed by -#: ../../../../inc/common.class.php:62 -msgid "Realizado por" -msgstr "Ausgeführt durch" - -# Email sent -#: ../../../../inc/common.class.php:80 -msgid "Correo enviado" -msgstr "E-Mail gesendet" - -# Error on sending email -#: ../../../../inc/common.class.php:82 -msgid "Error al enviar correo" -msgstr "Fehler beim Sender der Mail" - -# Recipient -#: ../../../../inc/common.class.php:87 -msgid "Destinatario" -msgstr "Empfänger" - -# CC -#: ../../../../inc/common.class.php:88 -msgid "CC" -msgstr "CC" - -# Send Email -#: ../../../../inc/common.class.php:90 -msgid "Enviar Email" -msgstr "E-Mail senden" - -# Warning -#: ../../../../inc/common.class.php:144 -msgid "Aviso" -msgstr "Warnung" - -# Enter phpPMS database connection user -#: ../../../../inc/common.class.php:205 -msgid "Indicar el usuario de conexión a la base de datos de phpPMS" -msgstr "Bentuzername der phpPMS-Datenbank eingeben" - -# Enter phpPMS database name -#: ../../../../inc/common.class.php:206 -msgid "Indicar el nombre de la base de datos de phpPMS" -msgstr "Name der phpPMS-Datenbank eingeben" - -# Enter phpPMS database server name -#: ../../../../inc/common.class.php:207 -msgid "Indicar el servidor de la base de datos de phpPMS" -msgstr "Server der phpPMS-Datenbank eingeben" - -# Enables account name as a link to account details in search page. -#: ../../../../inc/common.class.php:208 -msgid "" -"Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles " -"de la cuenta" -msgstr "Verwende Kontoname als Link zu den Kontodetails im Suchergebnis" - -# Number of results that are shown per page when searching -#: ../../../../inc/common.class.php:209 -msgid "Número de resultados por página a mostrar, al realizar una búsqueda" -msgstr "Anzahl der Treffer pro Seite im Suchergebnis" - -# Enables upload/download accounts files. -#: ../../../../inc/common.class.php:210 -msgid "Habilita la subida/descarga de archivos para las cuentas" -msgstr "Erlaube Upload/Download von Kontodateien" - -# Sets up the max upload file size. -#: ../../../../inc/common.class.php:211 -msgid "Establece el tamaño máximo para subir archivos" -msgstr "Setzt die maximale Größe beim Hochladen von Dateien" - -# The absolute maximum is 16MB. -#: ../../../../inc/common.class.php:211 -msgid "El máximo absuluto es de 16MB" -msgstr "Die maximale Größe ist 16MB." - -# Enables the option to add an external Wiki link for accounts search results. -#: ../../../../inc/common.class.php:212 -msgid "" -"Habilita la opción de añadir un enlace a Wiki externa para los resultados de " -"la búsqueda" -msgstr "" -"Erlaube das Hinzufügen eines externen Wiki-Links für Konten im Suchergebnis" - -# URL that wiki uses to do a page search on it. -#: ../../../../inc/common.class.php:213 -msgid "" -"URL que utiliza la wiki para realizar una búsqueda de una página en esta" -msgstr "URL zum Suchen im Wiki" - -# It uses customer name as parameter. -#: ../../../../inc/common.class.php:213 -msgid "Como parámetro se utiliza el nombre del cliente" -msgstr "Benutzt den Kundennamen als Parameter" - -# Example -#: ../../../../inc/common.class.php:213 ../../../../inc/common.class.php:214 -#: ../../../../inc/common.class.php:217 ../../../../inc/common.class.php:218 -#: ../../../../inc/common.class.php:219 -msgid "Ejemplo" -msgstr "Beispiel" - -# URL that wiki uses to access to page details on it. -#: ../../../../inc/common.class.php:214 -msgid "" -"URL que utiliza la wiki para acceder a los detalles de una página de ésta" -msgstr "URL mit Details im Wiki" - -# The account name is used as wiki search variable parameter. -#: ../../../../inc/common.class.php:214 -msgid "" -"El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda " -"de la Wiki" -msgstr "Der Kontoname wird als Parameter in der Wiki-Suche verwendet" - -# Preffix to select what accounts have a wiki page link. -#: ../../../../inc/common.class.php:215 -msgid "" -"Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki" -msgstr "Präfix um Konten mit Wiki-Link zu selektieren." - -# Examples -#: ../../../../inc/common.class.php:215 -msgid "Ejemplos" -msgstr "Beispiele" - -# Enables LDAP authentication -#: ../../../../inc/common.class.php:216 -msgid "Habilita de autentificación mediante servidor LDAP" -msgstr "LDAP-Authentifizierung einschalten" - -# This method will switch to MySQL on failure -#: ../../../../inc/common.class.php:216 -msgid "Este método utilizará MySQL en caso de fallo" -msgstr "Diese Methode wechselt im Fehlerfall zu MySQL" - -# User to connect LDAP server -#: ../../../../inc/common.class.php:217 -msgid "Usuario para conectar con el servicio de LDAP" -msgstr "Benutzer für Verbindung zum LDAP-Server" - -# LDAP base to do users searches. -#: ../../../../inc/common.class.php:218 -msgid "Base en la que realizar la búsqueda de usuarios de LDAP" -msgstr "LDAP Base bei der Benutzersuche" - -# LDAP group that users belong to for access permission -#: ../../../../inc/common.class.php:219 -msgid "" -"Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso" -msgstr "LDAP-Gruppe zu der der Benutzer gehört für Zugriffsrechte verwenden." - -# LDAP server hostname or IP address -#: ../../../../inc/common.class.php:220 -msgid "Nombre o dirección IP del servidor de LDAP" -msgstr "Hostname oder IP des LDAP-Servers" - -# Sets a new master password without re-encrypt the accounts. -#: ../../../../inc/common.class.php:221 -msgid "Establece una nueva clave maestra sin re-encriptar las cuentas" -msgstr "Setze Master-Passwort ohne die Konten neu zu verschlüsseln" - -# LDAP bind user password -#: ../../../../inc/common.class.php:222 -msgid "Clave del usuario de conexión a LDAP" -msgstr "LDAP Benutzerpasswort" - -# In this mode you cannot login to application. To disable it, you need to modify configuration file. -#: ../../../../inc/common.class.php:223 -msgid "" -"En este modo no se puede acceder a la aplicación. Para deshabilitarlo es " -"necesario modificar el archivo de configuración" -msgstr "" -"In diesem Modus können Sie sich nicht anmelden. Um dies zu ändern, müssen " -"Sie die Konfigurationsdatei anpassen." - -# Shows some information about application and performance. -#: ../../../../inc/common.class.php:224 -msgid "" -"Muestra información relativa a la configuración de la aplicación y " -"rendimiento" -msgstr "Zeige Informationen über die Anwendung" - -# It saves the actions done by the application. -#: ../../../../inc/common.class.php:225 -msgid "Guarda las acciones realizadas en la aplicación" -msgstr "Sichert die Aktionen der Anwendung" - -# Check for application updates (only for administrators). -#: ../../../../inc/common.class.php:226 -msgid "" -"Comprobar actualizaciones de la aplicación (sólo para los usuarios " -"administradores)" -msgstr "Nach Anwendungs-Updates schauen (nur Adminstratoren)." - -# Extensions max length is 4 characters. -#: ../../../../inc/common.class.php:227 -msgid "Extensiones de máximo 4 caracteres." -msgstr "Länge der Endung ist maximal 4 Zeichen." - -# Write extension and press enter to add. -#: ../../../../inc/common.class.php:227 -msgid "Escribir extensión y pulsar intro para añadir." -msgstr "Tragen Sie die Endung ein und drücken Sie Enter zum Hinzufügen" - -# Import from KeePass or KeePassX. The customer name will be KeePass or KeePassX. -#: ../../../../inc/common.class.php:228 -msgid "" -"Importar desde KeePass o KeePassX. El nombre del cliente será igual a " -"KeePass o KeePassX" -msgstr "" -"Import von KeePass oder KeePassX. Der Kundenname wird KeePass oder KeePassX " -"sein." - -# Import form a CSV file with the format -#: ../../../../inc/common.class.php:228 -msgid "Importar desde un archivo CSV con el formato" -msgstr "Importiere CSV-Datei mit vorgegebenen Format" - -# account_name;customer;category;url;user;password;notes -#: ../../../../inc/common.class.php:228 -msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas" -msgstr "konto_name;kunde;kategorie;url;benutzer;passwort;bemerkungen" - -# If the customer or category are not created, they will be automatically created. -#: ../../../../inc/common.class.php:228 -msgid "" -"Si el cliente o la categoría no están creados, se crean automáticamente." -msgstr "" -"Wenn der Kunde oder die Kategorie nicht erzeugt wurden, werde sie nun " -"automatisch erzeugt." - -# Allows to show the non-permission accounts only for searches. -#: ../../../../inc/common.class.php:229 -msgid "" -"Permite que las cuentas sin acceso sean visibles sólo para las búsquedas." -msgstr "Erlaubt es Konten ohne Berechtigungen die globale Suche zu verwenden." - -# Enables to show account's search results like a card format. -#: ../../../../inc/common.class.php:230 -msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta." -msgstr "Zeigt die Ergebnisse einer Konten-Suche im Visitenkarten-Format an." - -# Enables Active Directory LDAP connection mode. -#: ../../../../inc/common.class.php:231 -msgid "Habilita el modo de conexión con LDAP de Active Directory." -msgstr "Aktiviert den Active Directory LDAP Verbindungsmodus." - -# Define the default users group for new LDAP users -#: ../../../../inc/common.class.php:232 -msgid "" -"Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP." -msgstr "Legen Sie die Standard-Gruppe für neue LDAP-Benutzer fest" - -# Define the default users profile for new LDAP users -#: ../../../../inc/common.class.php:233 -msgid "" -"Define el perfil de usuario por defecto para los nuevos usuarios de LDAP." -msgstr "Legen Sie das Standard-Profile für neue LDAP-Benutzer fest" - # Error on updating history -#: ../../../../inc/account.class.php:320 ../../../../inc/account.class.php:842 +#: ../../../../inc/Account.class.php:112 ../../../../inc/Account.class.php:185 +#: ../../../../inc/Account.class.php:636 msgid "Error al actualizar el historial" msgstr "Fehler beim Ändern der Historie" # Update Account -#: ../../../../inc/account.class.php:326 +#: ../../../../inc/Account.class.php:117 msgid "Actualizar Cuenta" msgstr "Konto ändern" # Error on updating secondary groups -#: ../../../../inc/account.class.php:329 ../../../../inc/account.class.php:555 +#: ../../../../inc/Account.class.php:120 ../../../../inc/Account.class.php:383 msgid "Error al actualizar los grupos secundarios" msgstr "Fehler beim Ändern der Gruppe" # Error on updating account's users -#: ../../../../inc/account.class.php:335 ../../../../inc/account.class.php:563 +#: ../../../../inc/Account.class.php:126 ../../../../inc/Account.class.php:391 msgid "Error al actualizar los usuarios de la cuenta" msgstr "Fehler beim Ändern der Benutzer eines Kontos" # Restore Account -#: ../../../../inc/account.class.php:340 +#: ../../../../inc/Account.class.php:217 msgid "Restaurar Cuenta" msgstr "Wiederherstellen Konto" +# Error on retrieving accounts' passwords +#: ../../../../inc/Account.class.php:326 +#: ../../../../inc/AccountHistory.class.php:343 +#: ../../../../inc/AccountHistory.class.php:505 +#, fuzzy +msgid "No se pudieron obtener los datos de la cuenta" +msgstr "Fehler beim Laden der Konto-Passwörter" + # New Account -#: ../../../../inc/account.class.php:572 ../../../../inc/tpl/main.php:53 -#: ../../../../inc/tpl/accounts.php:47 +#: ../../../../inc/Account.class.php:400 ../../../../inc/Acl.class.php:129 +#: ../../../../web/AccountC.class.php:147 ../../../../web/MainC.class.php:155 msgid "Nueva Cuenta" msgstr "Neues Konto" # ERROR: Operation failed -#: ../../../../inc/account.class.php:589 +#: ../../../../inc/Account.class.php:418 msgid "ERROR: Error en la operación." msgstr "Fehler: Operation fehlgeschlagen" +# Delete Account +#: ../../../../inc/Account.class.php:423 ../../../../inc/Acl.class.php:134 +#: ../../../../web/AccountC.class.php:352 +#: ../../../../inc/themes/classic/account.inc:366 +#: ../../../../inc/themes/classic/search.inc:129 +#: ../../../../inc/themes/material-blue/account.inc:412 +#: ../../../../inc/themes/material-blue/search.inc:142 +msgid "Eliminar Cuenta" +msgstr "Konto löschen" + # Error on deleting account's groups -#: ../../../../inc/account.class.php:606 +#: ../../../../inc/Account.class.php:436 msgid "Error al eliminar grupos asociados a la cuenta" msgstr "Fehler beim Löschen der Guppen eines Kontos" # Error on deleting account's users -#: ../../../../inc/account.class.php:610 +#: ../../../../inc/Account.class.php:440 msgid "Error al eliminar usuarios asociados a la cuenta" msgstr "Fehler beim Löschen der Benutzer eines Kontos" # Error on deleting account's files -#: ../../../../inc/account.class.php:614 +#: ../../../../inc/Account.class.php:444 msgid "Error al eliminar archivos asociados a la cuenta" msgstr "Fehler beim Löschen der Dateien eines Kontos" # Start -#: ../../../../inc/account.class.php:737 ../../../../inc/account.class.php:890 +#: ../../../../inc/Account.class.php:498 +#: ../../../../inc/AccountHistory.class.php:124 +#: ../../../../inc/XmlImport.class.php:62 msgid "Inicio" msgstr "Start" # Error on encryption module -#: ../../../../inc/account.class.php:747 ../../../../inc/account.class.php:900 +#: ../../../../inc/Account.class.php:503 +#: ../../../../inc/AccountHistory.class.php:130 msgid "Error en el módulo de encriptación" msgstr "Fehler im Verschlüsselungsmodul" # Error on retrieving accounts' passwords -#: ../../../../inc/account.class.php:755 ../../../../inc/account.class.php:908 +#: ../../../../inc/Account.class.php:511 +#: ../../../../inc/AccountHistory.class.php:138 msgid "Error al obtener las claves de las cuentas" msgstr "Fehler beim Laden der Konto-Passwörter" +# View account password +#: ../../../../inc/Account.class.php:527 +#: ../../../../inc/AccountHistory.class.php:160 +#, fuzzy +msgid "Clave de cuenta vacía" +msgstr "Konto-Passwort ändern" + +#: ../../../../inc/Account.class.php:532 +#: ../../../../inc/AccountHistory.class.php:165 +#, fuzzy +msgid "IV de encriptación incorrecto" +msgstr "Die Anzahl der Felder ist falsch" + +# All accounts passwords will be encrypted again. +#: ../../../../inc/Account.class.php:541 +#: ../../../../inc/AccountHistory.class.php:174 +#, fuzzy +msgid "No es posible desencriptar la clave de la cuenta" +msgstr "Alle Passwörter der Konten werden neu verschlüsselt." + # Error on updating account's password -#: ../../../../inc/account.class.php:781 +#: ../../../../inc/Account.class.php:547 msgid "Fallo al actualizar la clave de la cuenta" msgstr "Fehler beim Ändern des Passworts eines Kontos " # Accounts updated: -#: ../../../../inc/account.class.php:793 -msgid "Cuentas actualizadas:" +#: ../../../../inc/Account.class.php:561 +#, fuzzy +msgid "Cuentas actualizadas" msgstr "Konten aktualisiert" # End -#: ../../../../inc/account.class.php:798 ../../../../inc/account.class.php:956 +#: ../../../../inc/Account.class.php:566 +#: ../../../../inc/AccountHistory.class.php:199 msgid "Fin" msgstr "Ende" # Update Password -#: ../../../../inc/account.class.php:865 +#: ../../../../inc/Account.class.php:665 msgid "Modificar Clave" msgstr "Passwort ändern" +# Error on retrieving accounts' passwords +#: ../../../../inc/Account.class.php:700 +#, fuzzy +msgid "No se pudieron obtener los datos de las cuentas" +msgstr "Fehler beim Laden der Konto-Passwörter" + # Update Master Password (H) -#: ../../../../inc/account.class.php:889 +#: ../../../../inc/AccountHistory.class.php:123 msgid "Actualizar Clave Maestra (H)" msgstr "Master-Passwort (H) ändern" # Record's Master password mismatch -#: ../../../../inc/account.class.php:922 +#: ../../../../inc/AccountHistory.class.php:155 msgid "La clave maestra del registro no coincide" msgstr "Master-Passwort stimmt nicht" # Error on updating history's master password -#: ../../../../inc/account.class.php:938 +#: ../../../../inc/AccountHistory.class.php:180 msgid "Fallo al actualizar la clave del histórico" msgstr "Fehler beim Ändern des Master-Passworts" # Records updated -#: ../../../../inc/account.class.php:951 -msgid "Registros actualizados:" +#: ../../../../inc/AccountHistory.class.php:194 +#, fuzzy +msgid "Registros actualizados" msgstr "Datensätze aktualisiert" -# Error on checking database -#: ../../../../inc/init.php:127 -msgid "Error en la verificación de la base de datos" -msgstr "Fehler beim der Datenbanküberprüfung" - -# \"/config\" directory doesn't exist. -#: ../../../../inc/init.php:316 -msgid "El directorio \"/config\" no existe" -msgstr "\"/config\" Verzeichnis existiert nicht." - -# Unable to write into \"/config\" directory -#: ../../../../inc/init.php:321 -msgid "No es posible escribir en el directorio \"config\"" -msgstr "In das Verzeichnis \"/config\" kann nicht geschrieben werden" - -# \"/config\" directory permissions are incorrect -#: ../../../../inc/init.php:329 -msgid "Los permisos del directorio \"/config\" son incorrectos" -msgstr "\"/config\"-Verzeichnis hat falsche Zugriffsrechte" - -# Current: -#: ../../../../inc/init.php:329 -msgid "Actual:" -msgstr "Aktuell:" - -# Needed: 750 -#: ../../../../inc/init.php:329 -msgid "Necesario: 750" -msgstr "Erforderlich: 750" - -# Application in maintenance -#: ../../../../inc/init.php:395 -msgid "Aplicación en mantenimiento" -msgstr "Anwendung im Wartungsmodus" - -# It will be running in short -#: ../../../../inc/init.php:395 -msgid "En breve estará operativa" -msgstr "Es wird in Kürze gestartet" - -# The application needs to be updated -#: ../../../../inc/init.php:426 -msgid "La aplicación necesita actualizarse" -msgstr "Die Anwendung muss aktualisiert werden" - -# If you are an administrator, click on the link: -#: ../../../../inc/init.php:426 -msgid "Si es un administrador pulse en el enlace:" -msgstr "Wenn Sie ein Administrator sind, klicken Sie auf diesen Link:" - -# Update -#: ../../../../inc/init.php:426 ../../../../inc/tpl/upgrade.php:54 -msgid "Actualizar" -msgstr "Aktualisierung" - -# Update -#: ../../../../inc/init.php:455 -msgid "Actualización" -msgstr "Aktualisierung" - -# Version updating done. -#: ../../../../inc/init.php:456 -msgid "Actualización de versión realizada." -msgstr "Version aktualisiert" - -# Version -#: ../../../../inc/init.php:457 -msgid "Versión" -msgstr "Version" - -# Session -#: ../../../../inc/init.php:478 -msgid "Sesion" -msgstr "Sitzung" - -# Session cannot be initialized. -#: ../../../../inc/init.php:478 ../../../../inc/init.php:483 -msgid "La sesión no puede ser inicializada" -msgstr "Sitzung konnte nicht initialisiert werden" - -# Logout session -#: ../../../../inc/init.php:545 -msgid "Finalizar sesión" -msgstr "Aus Sitzung ausloggen" - -# Inactive time -#: ../../../../inc/init.php:547 -msgid "Tiempo inactivo" -msgstr "Zeit ohne Aktivität" - -# Total time -#: ../../../../inc/init.php:548 -msgid "Tiempo total" -msgstr "Gesamtzeit" - # Access denied to -#: ../../../../inc/acl.class.php:104 +#: ../../../../inc/Acl.class.php:112 msgid "Denegado acceso a" msgstr "Zugriff verweigert auf" -# Error on updating database -#: ../../../../inc/upgrade.class.php:48 -msgid "Error al aplicar la actualización de la Base de Datos" -msgstr "Fehler beim Ändern der Datenbank" +# New Account +#: ../../../../inc/Acl.class.php:126 +#, fuzzy +msgid "Buscar Cuentas" +msgstr "Suchen" -# Please, check the event log for more details -#: ../../../../inc/upgrade.class.php:49 -msgid "Compruebe el registro de eventos para más detalles" -msgstr "Bitte schauen Sie in das Protokol für weitere Details" +# Account +#: ../../../../inc/Acl.class.php:127 +#, fuzzy +msgid "Ver Cuenta" +msgstr "Kontodetails anzeigen" -# Login -#: ../../../../inc/upgrade.class.php:49 ../../../../inc/tpl/login.php:51 -msgid "Acceder" -msgstr "Anmeldung" +# Copy Account +#: ../../../../inc/Acl.class.php:128 ../../../../web/AccountC.class.php:259 +#: ../../../../inc/themes/classic/search.inc:123 +#: ../../../../inc/themes/material-blue/search.inc:136 +msgid "Copiar Cuenta" +msgstr "Konto kopieren" -# Update DB -#: ../../../../inc/upgrade.class.php:64 -msgid "Actualizar BBDD" -msgstr "DB aktualisieren" +# Edit Account +#: ../../../../inc/Acl.class.php:130 ../../../../web/AccountC.class.php:323 +msgid "Editar Cuenta" +msgstr "Konto ändern" -# Database update not needed. -#: ../../../../inc/upgrade.class.php:91 -msgid "No es necesario actualizar la Base de Datos." -msgstr "Keine Datenbankaktualisierung notwendig" +# Edit account password +#: ../../../../inc/Acl.class.php:131 +#, fuzzy +msgid "Editar Clave de Cuenta" +msgstr "Passwort des Kontos ändern" -# Error on updating database. -#: ../../../../inc/upgrade.class.php:97 -msgid "Error al aplicar la actualización de la Base de Datos." -msgstr "Fehler beim Ändern der Datenbank" +# View History +#: ../../../../inc/Acl.class.php:132 +#: ../../../../inc/themes/classic/profiles.inc:28 +#: ../../../../inc/themes/material-blue/profiles.inc:40 +msgid "Ver Historial" +msgstr "Protokol ansehen" -# Database updating was done successfully. -#: ../../../../inc/upgrade.class.php:104 -msgid "Actualización de la Base de Datos realizada correctamente." -msgstr "Aktualisierung der Datenbank war erfolgreich." +# Files +#: ../../../../inc/Acl.class.php:135 +#: ../../../../inc/themes/classic/account.inc:188 +#: ../../../../inc/themes/classic/profiles.inc:50 +#: ../../../../inc/themes/material-blue/account.inc:230 +#: ../../../../inc/themes/material-blue/config.inc:226 +#: ../../../../inc/themes/material-blue/profiles.inc:60 +msgid "Archivos" +msgstr "Dateien" -# Update Configuration -#: ../../../../inc/upgrade.class.php:174 -msgid "Actualizar Configuración" -msgstr "Konfiguration aktualisieren" +# Request +#: ../../../../inc/Acl.class.php:136 +#, fuzzy +msgid "Peticiones" +msgstr "Erlaube Anfragen per E-Mail" -# Configuration updating successfully done. -#: ../../../../inc/upgrade.class.php:175 -msgid "Actualización de la Configuración realizada correctamente." -msgstr "Configuration Aktualisierung erfolgreich durchgeführt." +# Application Admin +#: ../../../../inc/Acl.class.php:137 +#, fuzzy +msgid "Gestión Aplicación" +msgstr "Verwaltung" -# Missing parameters -#: ../../../../inc/migrate.class.php:85 -msgid "Faltan parámetros" -msgstr "Fehlender Parameter" +# Categories management +#: ../../../../inc/Acl.class.php:138 +#, fuzzy +msgid "Gestión Categorías" +msgstr "Kategorienverwaltung" -# Import finished -#: ../../../../inc/migrate.class.php:114 ../../../../inc/import.class.php:88 -msgid "Importación finalizada" -msgstr "Import beendet" +# Customers Management +#: ../../../../inc/Acl.class.php:139 +#, fuzzy +msgid "Gestión Clientes" +msgstr "Kundenverwaltung" -# Wrong MySQL user/pass -#: ../../../../inc/migrate.class.php:138 -#: ../../../../inc/installer.class.php:202 -msgid "El usuario/clave de MySQL no es correcto" -msgstr "Falsche MySQL Zugangsdaten" +# Files management disabled +#: ../../../../inc/Acl.class.php:140 +#, fuzzy +msgid "Gestión Campos Personalizados" +msgstr "Verwaltung" -# Please, check database connection user -#: ../../../../inc/migrate.class.php:139 -#: ../../../../inc/installer.class.php:203 -msgid "Verifique el usuario de conexión con la Base de Datos" -msgstr "Bitte überprüfen Sie den Datenbankbenutzer" +#: ../../../../inc/Acl.class.php:141 +#, fuzzy +msgid "Gestión Autorizaciones API" +msgstr "Verwaltung" -# Incompatible version -#: ../../../../inc/migrate.class.php:183 -msgid "La versión no es compatible" -msgstr "Inkompatible Version" +# Users Management +#: ../../../../inc/Acl.class.php:142 ../../../../inc/Acl.class.php:143 +#, fuzzy +msgid "Gestión Usuarios" +msgstr "Benutzerverwaltung" -# Please, update to last version of phpPMS -#: ../../../../inc/migrate.class.php:184 -msgid "Actualice a la última versión de phpPMS" -msgstr "Bitte aktualisieren Sie auf die letzte Version von phpPMS." +# Groups Management +#: ../../../../inc/Acl.class.php:144 +#, fuzzy +msgid "Gestión Grupos" +msgstr "Gruppenverwaltung" -# Error on retrieving configuration -#: ../../../../inc/migrate.class.php:202 -msgid "Error al obtener la configuración" -msgstr "Fehler beim Laden der Konfiguration" +# Profiles Management +#: ../../../../inc/Acl.class.php:145 +#, fuzzy +msgid "Gestión Perfiles" +msgstr "Profilverwaltung" -# Error on cleaning table -#: ../../../../inc/migrate.class.php:252 ../../../../inc/migrate.class.php:266 -msgid "Error al vaciar tabla" -msgstr "Fehler beim Leeren der Tabelle" +# Configuration +#: ../../../../inc/Acl.class.php:146 ../../../../inc/Config.class.php:118 +#: ../../../../inc/Config.class.php:400 ../../../../web/MainC.class.php:173 +#: ../../../../inc/themes/classic/profiles.inc:57 +#: ../../../../inc/themes/material-blue/profiles.inc:66 +msgid "Configuración" +msgstr "Konfiguration" -# Current user is not application administrator -#: ../../../../inc/migrate.class.php:271 -msgid "Usuario actual no es administrador de la aplicación" -msgstr "Angemeldeter Benutzer ist nicht Administrator" +# General configuration +#: ../../../../inc/Acl.class.php:147 +#, fuzzy +msgid "Configuración General" +msgstr "Allgemeine Konfiguration" -# Unable to create customer -#: ../../../../inc/migrate.class.php:317 -msgid "No es posible crear el cliente" -msgstr "Kunde kann nicht angelegt werden" +# Description +#: ../../../../inc/Acl.class.php:148 ../../../../web/ConfigC.class.php:145 +#: ../../../../inc/themes/classic/profiles.inc:65 +#: ../../../../inc/themes/material-blue/profiles.inc:77 +#, fuzzy +msgid "Encriptación" +msgstr "Kryptographie-Modul konnte nicht geladen werden" -# Please, contact to developer -#: ../../../../inc/migrate.class.php:318 -msgid "Contacte con el desarrollador" -msgstr "Bitte kontaktieren Sie den Entwickler" +# Backup +#: ../../../../inc/Acl.class.php:149 ../../../../web/ConfigC.class.php:187 +#: ../../../../inc/themes/classic/backup.inc:4 +#: ../../../../inc/themes/material-blue/backup.inc:4 +msgid "Copia de Seguridad" +msgstr "Sicherung" -# Import Customers -#: ../../../../inc/migrate.class.php:322 -msgid "Importar Clientes" -msgstr "Importiere Kunden" +#: ../../../../inc/Acl.class.php:150 +msgid "Exportar" +msgstr "" -# Records -#: ../../../../inc/migrate.class.php:324 ../../../../inc/migrate.class.php:396 -#: ../../../../inc/migrate.class.php:483 ../../../../inc/migrate.class.php:555 -#: ../../../../inc/migrate.class.php:645 ../../../../inc/migrate.class.php:706 -#: ../../../../inc/migrate.class.php:780 ../../../../inc/migrate.class.php:857 -#: ../../../../inc/migrate.class.php:926 -msgid "Registros" -msgstr "Datensätze" +# phpPMS Import +#: ../../../../inc/Acl.class.php:151 +#: ../../../../inc/themes/classic/profiles.inc:74 +#: ../../../../inc/themes/material-blue/profiles.inc:87 +#, fuzzy +msgid "Importar" +msgstr "Importiere Konten" -# Error on retrieving customer -#: ../../../../inc/migrate.class.php:343 -msgid "Error al obtener los clientes" -msgstr "Fehler beim Laden des Kunden" +# Extension not allowed +#: ../../../../inc/Api.class.php:65 ../../../../inc/Api.class.php:88 +#: ../../../../inc/Api.class.php:126 +#, fuzzy +msgid "Acceso no permitido" +msgstr "Zugriff verweigert auf" -# Error on retrieving accounts -#: ../../../../inc/migrate.class.php:381 -msgid "Error al obtener cuentas" -msgstr "Fehler beim Laden des Kontos" +# Request Modification +#: ../../../../inc/Api.class.php:166 +#, fuzzy +msgid "Error de codificación" +msgstr "LDAP Verbindungsfehler" -# Customer not found -#: ../../../../inc/migrate.class.php:421 -msgid "Cliente no encontrado" -msgstr "Kunde nicht gefunden" +#: ../../../../inc/ApiRequest.class.php:102 +#, fuzzy +msgid "Token de autorización" +msgstr "Kontoänderung initiiert" -# Error on importing account -#: ../../../../inc/migrate.class.php:447 -msgid "Error al migrar cuenta" -msgstr "Fehler beim Importieren des Kontos" +# Invalid Action +#: ../../../../inc/ApiRequest.class.php:103 +#, fuzzy +msgid "Acción a realizar" +msgstr "Aktion" -# Error on retrieving accounts groups -#: ../../../../inc/migrate.class.php:468 -msgid "Error al obtener los grupos de cuentas" -msgstr "Fehler beim Laden der Gruppen eines Kontos" +# LDAP bind user password +#: ../../../../inc/ApiRequest.class.php:104 +#, fuzzy +msgid "Clave de usuario (opcional)" +msgstr "Benutzerpasswort Ändern" -# Import Accounts Groups -#: ../../../../inc/migrate.class.php:481 -msgid "Importar Grupos de Cuentas" -msgstr "Importiere Kontogruppen" +# Text to search +#: ../../../../inc/ApiRequest.class.php:105 +#, fuzzy +msgid "Cadena a buscar" +msgstr "Suchen" -# Error on accounts groups creation -#: ../../../../inc/migrate.class.php:503 -msgid "Error al crear grupos de cuentas" -msgstr "Fehler beim Anlegen der Gruppen eines Kontos" +# Number of results that are shown per page when searching +#: ../../../../inc/ApiRequest.class.php:106 +#, fuzzy +msgid "Numero de cuentas a mostar en la búsqueda" +msgstr "Anzahl der Treffer pro Seite im Suchergebnis" -# Error on retrieving accounts history -#: ../../../../inc/migrate.class.php:540 -msgid "Error al obtener el historico de cuentas" -msgstr "Fehler beim Laden der Konto-Historie" - -# Import Accounts History -#: ../../../../inc/migrate.class.php:553 -msgid "Importar Histórico de Cuentas" -msgstr "Importiere Konten-Historie" - -# Error on creating accounts history -#: ../../../../inc/migrate.class.php:605 -msgid "Error al crear historico de cuentas" -msgstr "Fehler beim Anlegen der Konto-Historie" - -# Error on retrieving accounts files -#: ../../../../inc/migrate.class.php:630 -msgid "Error al obtener los archivos de cuentas" -msgstr "Fehler beim Laden der Konto-Dateien" - -# Import Accounts Files -#: ../../../../inc/migrate.class.php:643 -msgid "Importar Archivos de Cuentas" -msgstr "Importiere Konto-Dateien" - -# Error on creating accounts files -#: ../../../../inc/migrate.class.php:670 -msgid "Error al crear archivos de cuentas" -msgstr "Fehler beim Anlegen der Kontodateien" - -# Error on retrieving accounts categories -#: ../../../../inc/migrate.class.php:691 -msgid "Error al obtener las categorías de cuentas" -msgstr "Fehler beim Holen der Konto-Kategorien" - -# Import Accounts Categories -#: ../../../../inc/migrate.class.php:704 -msgid "Importar Categorías de Cuentas" -msgstr "Importiere Kontokategorien" - -# Error on retrieving accounts categories -#: ../../../../inc/migrate.class.php:727 -msgid "Error al crear categorías de cuentas" -msgstr "Fehler beim Holen der Konto-Kategorien" - -# Error on retrieving users -#: ../../../../inc/migrate.class.php:765 -msgid "Error al obtener los usuarios" -msgstr "Fehler beim Laden der Benutzer" - -# Import Users -#: ../../../../inc/migrate.class.php:778 -msgid "Importar Usuarios" -msgstr "Importiere Benutzer" - -# Error on creating users -#: ../../../../inc/migrate.class.php:820 -msgid "Error al crear usuarios" -msgstr "Fehler beim Anlegen der Benutzer" - -# Error on retrieving users groups -#: ../../../../inc/migrate.class.php:842 -msgid "Error al obtener los grupos de usuarios" -msgstr "Fehler beim Laden der Gruppen eines Benutzers" - -# Import Users Groups -#: ../../../../inc/migrate.class.php:855 -msgid "Importar Grupos de Usuarios" -msgstr "Importiere Benutzergruppen" - -# Error on adding users groups -#: ../../../../inc/migrate.class.php:879 -msgid "Error al crear los grupos de usuarios" -msgstr "Fehler beim Hinzufügen Gruppen eines Benutzers" - -# Import Configuration -#: ../../../../inc/migrate.class.php:924 -msgid "Importar Configuración" -msgstr "Importiere Konfiguration" - -# Enter admin username -#: ../../../../inc/installer.class.php:89 -msgid "Indicar nombre de usuario admin" -msgstr "Benutzername des Administrators eingeben" - -# Admin user to login to application -#: ../../../../inc/installer.class.php:90 -msgid "Usuario admin para acceso a la aplicación" -msgstr "Administrator der Anwendung" - -# Enter admin password -#: ../../../../inc/installer.class.php:95 -msgid "Indicar la clave de admin" -msgstr "Administrator-Passwort eingeben" - -# Application administrator's password -#: ../../../../inc/installer.class.php:96 -msgid "Clave del usuario admin de la aplicación" -msgstr "Administrationspasswort der Anwendung" - -# Enter master password -#: ../../../../inc/installer.class.php:102 -msgid "Indicar la clave maestra" -msgstr "Master-Passwort eingeben" - -# Master password to encrypt the passwords -#: ../../../../inc/installer.class.php:103 -msgid "Clave maestra para encriptar las claves" -msgstr "Master-Passwords zum Verschlüsseln der Passwörter" - -# Master password too short -#: ../../../../inc/installer.class.php:108 -msgid "Clave maestra muy corta" -msgstr "Master-Passwort zu kurz" - -# Master password length need to be at least 11 characters -#: ../../../../inc/installer.class.php:109 -msgid "La longitud de la clave maestra ha de ser mayor de 11 caracteres" -msgstr "Master-Password muss mindestens 11 Zeichen lang sein" - -# Enter database user -#: ../../../../inc/installer.class.php:115 -msgid "Indicar el usuario de la BBDD" -msgstr "Datenbankbenutzer eingeben" - -# An user with database administrative rights -#: ../../../../inc/installer.class.php:116 -msgid "Usuario con permisos de administrador de la Base de Datos" -msgstr "Ein Benutzer mit administrativen Rechten in der Datenbank" - -# Enter database password -#: ../../../../inc/installer.class.php:121 -msgid "Indicar la clave de la BBDD" -msgstr "Datenbankpasswort eingeben" - -# Database administartor's password -#: ../../../../inc/installer.class.php:122 -msgid "Clave del usuario administrador de la Base de Datos" -msgstr "Administrationspasswort der Datenbank" - -# Enter database name -#: ../../../../inc/installer.class.php:127 -msgid "Indicar el nombre de la BBDD" -msgstr "Datenbankname eingeben" - -# Application database name. eg. syspass -#: ../../../../inc/installer.class.php:128 -msgid "Nombre para la BBDD de la aplicación pej. syspass" -msgstr "Datenbankname der Anwendung, z.B. syspass" - -# Database name can't contains \".\" -#: ../../../../inc/installer.class.php:133 -msgid "El nombre de la BBDD no puede contener \".\"" -msgstr "Name der Datenbank darf keine \".\" enthalten" - -# Please, remove dots on database name -#: ../../../../inc/installer.class.php:134 -msgid "Elimine los puntos del nombre de la Base de Datos" -msgstr "Bitte entfernen Sie den Punkt aus dem Datenbanknamen" - -# Enter database server -#: ../../../../inc/installer.class.php:140 -msgid "Indicar el servidor de la BBDD" -msgstr "Datenbank-Server eingeben" - -# Server where the database will be installed -#: ../../../../inc/installer.class.php:141 -msgid "Servidor donde se instalará la Base de Datos" -msgstr "Server auf dem die Datenbank installiert wird" +#: ../../../../inc/ApiRequest.class.php:107 +msgid "Item a devolver" +msgstr "" # Database already exist -#: ../../../../inc/installer.class.php:248 -msgid "La BBDD ya existe" +#: ../../../../inc/ApiTokens.class.php:221 +#, fuzzy +msgid "La autorización ya existe" msgstr "Datenbank existiert bereits" -# Enter a new database or delete the existing one -#: ../../../../inc/installer.class.php:249 -msgid "Indique una nueva Base de Datos o elimine la existente" -msgstr "Neuen Datenbanknamen eingeben oder bestehende Datenbank löschen" +# Update Configuration +#: ../../../../inc/ApiTokens.class.php:307 +#, fuzzy +msgid "Actualizar Autorización" +msgstr "Aktualisierung" -# MySQL user already exist -#: ../../../../inc/installer.class.php:274 -msgid "El usuario de MySQL ya existe" -msgstr "MySQL Benutzer wird schon benutzt" +# Delete File +#: ../../../../inc/ApiTokens.class.php:331 +#: ../../../../web/UsersMgmtC.class.php:421 +#, fuzzy +msgid "Eliminar Autorización" +msgstr "Profil löschen" -# Enter a new username or delete the existing one -#: ../../../../inc/installer.class.php:275 -msgid "Indique un nuevo usuario o elimine el existente" -msgstr "Neuen Benutzernamen eingeben oder bestehenden Benutzer löschen" +# The user have no associated groups +#: ../../../../inc/Auth.class.php:111 +#, fuzzy +msgid "Usuario no pertenece al grupo" +msgstr "Der Benutzer hat keine zugewiesene Gruppe" -# Error on DB creation -#: ../../../../inc/installer.class.php:294 -#: ../../../../inc/installer.class.php:370 -msgid "Error al crear la BBDD" -msgstr "Fehler beim Anlegen der Datenbank" - -# Please, check database user permissions -#: ../../../../inc/installer.class.php:295 -#: ../../../../inc/installer.class.php:306 -msgid "Verifique los permisos del usuario de la Base de Datos" -msgstr "Bitte überprüfen Sie die Datenbank-Zugriffsberechtigungen" - -# Error on setting database permissions -#: ../../../../inc/installer.class.php:305 -msgid "Error al establecer permisos de la BBDD" -msgstr "Fehler beim Setzen der Datenbank-Berechtigungen" - -# Database structure file doesn't exist -#: ../../../../inc/installer.class.php:348 -msgid "El archivo de estructura de la BBDD no existe" -msgstr "Datei mit Datenbank-Schema existiert nicht" - -# Unable to create application database. Please, download it again. -#: ../../../../inc/installer.class.php:349 -msgid "No es posible crear la BBDD de la aplicación. Descárguela de nuevo." -msgstr "" -"Anwendungsdatenbank kann nicht angelegt werden. Bitte erneut herunterladen" - -# Error on selecting database. -#: ../../../../inc/installer.class.php:355 -msgid "Error al seleccionar la BBDD" -msgstr "Fehler beim Auswählen der Datenbank" - -# Unable to use the database to create the structure. Check permissions and it doesn't exist. -#: ../../../../inc/installer.class.php:356 -msgid "" -"No es posible usar la Base de Datos para crear la estructura. Compruebe los " -"permisos y que no exista." -msgstr "Datenbank kann nicht gefunden werden. Überprüfen Sie die Berechtigung." - -# Error on creating database structure. -#: ../../../../inc/installer.class.php:371 -msgid "Error al crear la estructura de la Base de Datos." -msgstr "Fehler beim Anlegen der Datenbankstruktur" - -# Error on creating \"admin\" group -#: ../../../../inc/installer.class.php:397 -msgid "Error al crear el grupo \"admin\"" -msgstr "Fehler beim Anlegen der \"admin\" Gruppe" - -# Warn to developer -#: ../../../../inc/installer.class.php:398 -#: ../../../../inc/installer.class.php:430 -#: ../../../../inc/installer.class.php:448 -#: ../../../../inc/installer.class.php:463 -msgid "Informe al desarrollador" -msgstr "Warnung an Entwickler" - -# Error on creating \"admin\" profile -#: ../../../../inc/installer.class.php:429 -msgid "Error al crear el perfil \"admin\"" -msgstr "Fehler beim Anlegen des \"admin\" Profils" - -# Error on creating \"admin\" user -#: ../../../../inc/installer.class.php:447 -msgid "Error al crear el usuario \"admin\"" -msgstr "Fehler beim Anlegen des \"admin\" Benutzers" - -# Error on updating master password for user \"admin\" -#: ../../../../inc/installer.class.php:462 -msgid "Error al actualizar la clave maestra del usuario \"admin\"" -msgstr "Fehler beim Ändern des Master-Passworts des Benutzers \"admin\"" - -# Account Activation -#: ../../../../inc/users.class.php:746 -msgid "Activación Cuenta" -msgstr "Kontoaktivierung" - -# Your account activation is pending. -#: ../../../../inc/users.class.php:747 -msgid "Su cuenta está pendiente de activación." -msgstr "Ihre Kontoaktivierung ist anhängig" - -# You will receive a confirmation email in short. -#: ../../../../inc/users.class.php:748 -msgid "En breve recibirá un email de confirmación." -msgstr "Sie bekommen in Kürze eine Bestätigungs-Mail" - -# Could not perform the password change request. -#: ../../../../inc/users.class.php:792 ../../../../inc/users.class.php:833 -msgid "No se pudo realizar la petición de cambio de clave." -msgstr "Die Passwortänderung Anfrage konnte nicht ausgeführt werden." - -# Edit User -#: ../../../../inc/users.class.php:828 -msgid "Modificar Usuario" -msgstr "Benutzer ändern" - -# Clear Events -#: ../../../../inc/log.class.php:80 -msgid "Vaciar Eventos" -msgstr "Protokol löschen" - -# Clear event log -#: ../../../../inc/log.class.php:81 ../../../../inc/tpl/eventlog.php:129 -msgid "Vaciar registro de eventos" -msgstr "Protokol löschen" - -# Update Customer -#: ../../../../inc/customer.class.php:102 -msgid "Actualizar Cliente" -msgstr "Kunde ändern" - -# Category Edit -#: ../../../../inc/category.class.php:177 -msgid "Modificar Categoría" -msgstr "Kategorie ändern" - -# File successfully uploaded -#: ../../../../inc/import.class.php:103 -msgid "Archivo no subido correctamente" -msgstr "Datei erfolgreich hochgeladen" - -# Please, check the web server's user permissions -#: ../../../../inc/import.class.php:103 -msgid "Verifique los permisos del usuario del servidor web" -msgstr "Bitte überprüfen Sie die Zugriffsberechtigungen des Web-Servers" - -# Please, check file extension -#: ../../../../inc/import.class.php:111 -msgid "Compruebe la extensión del archivo" -msgstr "Bitte überprüfen Sie die Dateiendung" - -# Please, check PHP configuration for upload files -#: ../../../../inc/import.class.php:122 -msgid "Compruebe la configuración de PHP para subir archivos" -msgstr "Bitte überprüfen Sie die PHP-Konfiguration zum Hochladen von Dateien" - -# Please, check temporary directory permissions -#: ../../../../inc/import.class.php:130 -msgid "Compruebe los permisos del directorio temporal" -msgstr "Bitte überprüfen Sie die Zugriffsrechte des temporären Verzeichnisses" - -# Mime type not supported -#: ../../../../inc/import.class.php:139 -msgid "Tipo mime no soportado" -msgstr "Mimetype wird nicht unterstützt" - -# Please, check the file format -#: ../../../../inc/import.class.php:139 -msgid "Compruebe el formato del archivo" -msgstr "Bitte überprüfen Sie das Format der Datei" - -# The number of fields is incorrect -#: ../../../../inc/import.class.php:156 -msgid "El número de campos es incorrecto" -msgstr "Die Anzahl der Felder ist falsch" - -# Please, check the CSV file format -#: ../../../../inc/import.class.php:156 -msgid "Compruebe el formato del archivo CSV" -msgstr "Bitte überprüfen Sie das Format der CSV-Datei" - -# Error on importing account -#: ../../../../inc/import.class.php:161 -msgid "Error importando cuenta" -msgstr "Fehler beim Importieren des Kontos" - -# Unable to process XML file -#: ../../../../inc/import.class.php:262 -msgid "No es posible procesar el archivo XML" -msgstr "XML-Datei kann nicht verarbeitet werden" - -# XML file not supported -#: ../../../../inc/import.class.php:289 -msgid "Archivo XML no soportado" -msgstr "XML-Datei wird nicht unterstützt" - -# Unable to detect the application the data was exported from -#: ../../../../inc/import.class.php:289 -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" +# Password Change +#: ../../../../inc/Auth.class.php:191 +#: ../../../../inc/themes/classic/users.inc:117 +#: ../../../../inc/themes/classic/userspass.inc:2 +#: ../../../../inc/themes/material-blue/users.inc:161 +#: ../../../../inc/themes/material-blue/userspass.inc:2 +msgid "Cambio de Clave" +msgstr "Passwortänderung" # A request for changing your user password has been done. -#: ../../../../inc/auth.class.php:186 +#: ../../../../inc/Auth.class.php:193 msgid "Se ha solicitado el cambio de su clave de usuario." msgstr "Ein Anfrage zum Ändern ihres Benutzerpassworts wurde begonnen." # In order to complete the process, please go to this URL: -#: ../../../../inc/auth.class.php:188 +#: ../../../../inc/Auth.class.php:195 msgid "Para completar el proceso es necesario que acceda a la siguiente URL:" msgstr "Zum Abschluss dieses Vorgangs, gehen Sie bitte zu der URL: " # If you have not requested this action, please dismiss this message. -#: ../../../../inc/auth.class.php:192 +#: ../../../../inc/Auth.class.php:199 msgid "Si no ha solicitado esta acción, ignore este mensaje." +msgstr "Wenn Sie diese Aktion nicht ausgelöst haben, dann ignorieren Sie bitte diese Meldung" + +# This operation is only available on Linux environments +#: ../../../../inc/Backup.class.php:161 +msgid "Esta operación sólo es posible en entornos Linux" +msgstr "Diese Funktion is nur in einer Linux-Umgebung verfügbar" + +# Error while doing backup in compatibility mode +#: ../../../../inc/Backup.class.php:163 +msgid "Error al realizar backup en modo compatibilidad" +msgstr "Fehler während der Durchführung der Sicherung im Kompatibilitätsmodus" + +# Unable to create backup directory +#: ../../../../inc/Backup.class.php:217 +msgid "No es posible crear el directorio de backups" +msgstr "Verzeichnis für Backups kann nicht angelegt werden" + +# Check backup directory permissions +#: ../../../../inc/Backup.class.php:222 +msgid "Compruebe los permisos del directorio de backups" +msgstr "Bitte überprüfen Sie die Zugriffsrechte des Backup₋Verzeichnisses" + +# Category name duplicated +#: ../../../../inc/Category.class.php:69 +#: ../../../../inc/Category.class.php:165 +msgid "Nombre de categoría duplicado" +msgstr "Kategoriename dupliziert" + +# Error on creating category +#: ../../../../inc/Category.class.php:78 +msgid "Error al crear la categoría" +msgstr "Fehler beim Anlegen der Kategorie" + +# Category +#: ../../../../inc/Category.class.php:83 +#: ../../../../inc/Category.class.php:132 +#: ../../../../inc/Category.class.php:182 +#: ../../../../web/SearchC.class.php:283 +#: ../../../../inc/themes/classic/account.inc:42 +#: ../../../../inc/themes/classic/search.inc:46 +#: ../../../../inc/themes/material-blue/account.inc:50 +#: ../../../../inc/themes/material-blue/search.inc:49 +msgid "Categoría" +msgstr "Kategorie" + +# Category in use by: +#: ../../../../inc/Category.class.php:119 +msgid "Categoría en uso por:" +msgstr "Kategorie wird verwendet von:" + +# Error on category deletion +#: ../../../../inc/Category.class.php:129 +msgid "Error al eliminar la categoría" +msgstr "Fehler beim Löschen einer Kategorie" + +# Delete Category +#: ../../../../inc/Category.class.php:132 +#: ../../../../web/AccountsMgmtC.class.php:101 +msgid "Eliminar Categoría" +msgstr "Kategorie löschen" + +# Error on updating category +#: ../../../../inc/Category.class.php:179 +msgid "Error al actualizar la categoría" +msgstr "Fehler beim Ändern der Kategorie" + +# Category Edit +#: ../../../../inc/Category.class.php:182 +msgid "Modificar Categoría" +msgstr "Kategorie ändern" + +# Update Configuration +#: ../../../../inc/Config.class.php:118 ../../../../inc/Config.class.php:401 +msgid "Modificar configuración" +msgstr "Konfiguration ändern" + +# Unable to write on configuration file +#: ../../../../inc/Config.class.php:276 +msgid "No es posible escribir el archivo de configuración" +msgstr "Konfigurationsdatei kann nicht geschrieben werden" + +# Please, check 'config' directory permissions +#: ../../../../inc/Config.class.php:276 +msgid "Compruebe los permisos del directorio \"config\"" +msgstr "Bitte überprüfen Sie Zugriffsrechte auf das Verzeichnis \"config\"" + +# Parameter +#: ../../../../inc/Config.class.php:402 +msgid "Parámetro" +msgstr "Parameter" + +# Value +#: ../../../../inc/Config.class.php:403 +msgid "Valor" +msgstr "Wert" + +# Option unavilable +#: ../../../../inc/Controller.class.php:165 +msgid "Opción no disponible" +msgstr "Option nicht verfügbar" + +# 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:289 +msgid "Consulte con el administrador" +msgstr "Bitte kontaktieren Sie den Administrator" + +# You don't have permission to access to this page +#: ../../../../inc/Controller.class.php:167 +msgid "No tiene permisos para acceder a esta página" +msgstr "Sie haben keine Erlaubnis auf diese Seite zuzugreifen" + +# You don't have permission to do this operation +#: ../../../../inc/Controller.class.php:168 +msgid "No tiene permisos para realizar esta operación" +msgstr "Sie haben keine Erlaubnis für diese Aktion" + +# Crypto module can't be loaded +#: ../../../../inc/Crypt.class.php:236 +msgid "No se puede usar el módulo de encriptación" +msgstr "Kryptographie-Modul konnte nicht geladen werden" + +# Error on creating encryption data +#: ../../../../inc/Crypt.class.php:247 +msgid "Error al generar datos cifrados" +msgstr "Fehler beim Erzeugen der verschlüsselten Daten" + +# The number of fields is incorrect +#: ../../../../inc/CsvImportBase.class.php:109 +#, fuzzy, php-format +msgid "El número de campos es incorrecto (%d)" +msgstr "Die Anzahl der Felder ist falsch" + +# 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 "Bitte überprüfen Sie das Format der CSV-Datei" + +# Import Accounts +#: ../../../../inc/CsvImportBase.class.php:140 +#: ../../../../inc/CsvImportBase.class.php:145 +#: ../../../../inc/Import.class.php:118 ../../../../inc/Import.class.php:124 +#: ../../../../inc/Migrate.class.php:349 +#: ../../../../inc/XmlImport.class.php:62 +#: ../../../../inc/XmlImport.class.php:63 +#: ../../../../web/ConfigC.class.php:209 +msgid "Importar Cuentas" +msgstr "Importiere Konten" + +# Error on importing account +#: ../../../../inc/CsvImportBase.class.php:141 +msgid "Error importando cuenta" +msgstr "Fehler beim Importieren des Kontos" + +# Error on importing account +#: ../../../../inc/CsvImportBase.class.php:142 +#, fuzzy, php-format +msgid "Error procesando línea %s" +msgstr "Fehler beim Importieren des Kontos" + +# Account expired +#: ../../../../inc/CsvImportBase.class.php:145 +#, fuzzy, php-format +msgid "Cuenta importada: %s" +msgstr "Ablauf der Sitzung (s)" + +# Categories +#: ../../../../inc/CustomFieldsBase.class.php:81 +#: ../../../../inc/themes/classic/profiles.inc:98 +#: ../../../../inc/themes/material-blue/profiles.inc:114 +msgid "Categorías" +msgstr "Kategorien" + +# Customers +#: ../../../../inc/CustomFieldsBase.class.php:82 +#: ../../../../inc/themes/classic/profiles.inc:103 +#: ../../../../inc/themes/material-blue/profiles.inc:119 +msgid "Clientes" +msgstr "Kunden" + +# Groups +#: ../../../../inc/CustomFieldsBase.class.php:84 +#: ../../../../inc/themes/classic/account.inc:140 +#: ../../../../inc/themes/classic/profiles.inc:89 +#: ../../../../inc/themes/material-blue/account.inc:166 +#: ../../../../inc/themes/material-blue/profiles.inc:104 +msgid "Grupos" +msgstr "Gruppen" + +# Duplicated customer +#: ../../../../inc/Customer.class.php:50 ../../../../inc/Customer.class.php:95 +msgid "Cliente duplicado" +msgstr "Doppelter Kunde" + +# Error on creating customer +#: ../../../../inc/Customer.class.php:60 +msgid "Error al crear el cliente" +msgstr "Fehler beim Anlegen des Kunden" + +# Error on updating customer +#: ../../../../inc/Customer.class.php:112 +msgid "Error al actualizar el cliente" +msgstr "Fehler beim Ändern des Kunden" + +# Update Customer +#: ../../../../inc/Customer.class.php:115 +msgid "Actualizar Cliente" +msgstr "Kunde ändern" + +# Customer in use by: +#: ../../../../inc/Customer.class.php:150 +msgid "Cliente en uso por:" +msgstr "Kunde wird verwendet von:" + +# Error on customer deletion +#: ../../../../inc/Customer.class.php:160 +msgid "Error al eliminar el cliente" +msgstr "Fehler beim Löschen eines Kunden" + +# Delete Customer +#: ../../../../inc/Customer.class.php:163 +#: ../../../../web/AccountsMgmtC.class.php:159 +msgid "Eliminar Cliente" +msgstr "Kunde löschen" + +# Unable to connect to DB +#: ../../../../inc/DBConnectionFactory.class.php:87 +#: ../../../../inc/DBConnectionFactory.class.php:89 +#: ../../../../inc/DBConnectionFactory.class.php:103 +#: ../../../../inc/Installer.class.php:235 +#: ../../../../inc/Migrate.class.php:115 +msgid "No es posible conectar con la BD" +msgstr "Verbindung zum Datenbank-Server kann nicht hergestellt werden" + +# Please, check connection parameters +#: ../../../../inc/DBConnectionFactory.class.php:87 +#: ../../../../inc/DBConnectionFactory.class.php:89 +#: ../../../../inc/Installer.class.php:236 +#: ../../../../inc/Migrate.class.php:116 +msgid "Compruebe los datos de conexión" +msgstr "Bitte überprüfen Sie Ihre Verbindungseinstellungen" + +# N/A +#: ../../../../inc/Email.class.php:59 ../../../../inc/UserUtil.class.php:589 +msgid "N/D" +msgstr "N/A" + +# Action +#: ../../../../inc/Email.class.php:60 ../../../../web/UsersMgmtC.class.php:392 +#: ../../../../inc/themes/classic/tokens.inc:20 +#: ../../../../inc/themes/material-blue/tokens.inc:20 +msgid "Acción" +msgstr "Aktion" + +# Performed by +#: ../../../../inc/Email.class.php:61 +msgid "Realizado por" +msgstr "Ausgeführt durch" + +# Send Email +#: ../../../../inc/Email.class.php:77 +msgid "Enviar Email" +msgstr "E-Mail senden" + +# Email sent +#: ../../../../inc/Email.class.php:81 +msgid "Correo enviado" +msgstr "E-Mail gesendet" + +# Error on sending email +#: ../../../../inc/Email.class.php:83 +msgid "Error al enviar correo" +msgstr "Fehler beim Sender der Mail" + +# Recipient +#: ../../../../inc/Email.class.php:87 +msgid "Destinatario" +msgstr "Empfänger" + +# CC +#: ../../../../inc/Email.class.php:90 +msgid "CC" +msgstr "CC" + +# Warning +#: ../../../../inc/Email.class.php:146 +msgid "Aviso" +msgstr "Warnung" + +# File successfully uploaded +#: ../../../../inc/FileImport.class.php:105 +msgid "Archivo no subido correctamente" +msgstr "Datei erfolgreich hochgeladen" + +# Please, check the web server's user permissions +#: ../../../../inc/FileImport.class.php:105 +msgid "Verifique los permisos del usuario del servidor web" +msgstr "Bitte überprüfen Sie die Zugriffsberechtigungen des Web-Servers" + +# Please, check file extension +#: ../../../../inc/FileImport.class.php:116 +msgid "Compruebe la extensión del archivo" +msgstr "Bitte überprüfen Sie die Dateiendung" + +# Please, check PHP configuration for upload files +#: ../../../../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" + +# Please, check temporary directory permissions +#: ../../../../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" + +# Delete File +#: ../../../../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" + +# Error on updating account's users +#: ../../../../inc/Groups.class.php:155 +#, fuzzy +msgid "Error al añadir los usuarios del grupo" +msgstr "Fehler beim Ändern der Benutzer eines Kontos" + +# Error on updating account's users +#: ../../../../inc/Groups.class.php:256 +#, fuzzy +msgid "Error al actualizar los usuarios del grupo" +msgstr "Fehler beim Ändern der Benutzer eines Kontos" + +# Delete Group +#: ../../../../inc/Groups.class.php:369 +#: ../../../../web/UsersMgmtC.class.php:209 +msgid "Eliminar Grupo" +msgstr "Gruppe löschen" + +# Error on user deletion +#: ../../../../inc/Groups.class.php:372 +#, fuzzy +msgid "Error al eliminar los usuarios del grupo" +msgstr "Fehler beim Löschen eines Benutzers" + +# Mime type not supported +#: ../../../../inc/Import.class.php:109 +msgid "Tipo mime no soportado" +msgstr "Mimetype wird nicht unterstützt" + +# Please, check the file format +#: ../../../../inc/Import.class.php:110 +msgid "Compruebe el formato del archivo" +msgstr "Bitte überprüfen Sie das Format der Datei" + +# Import finished +#: ../../../../inc/Import.class.php:124 ../../../../inc/Import.class.php:127 +#: ../../../../inc/Migrate.class.php:92 +msgid "Importación finalizada" +msgstr "Import beendet" + +# Error on checking database +#: ../../../../inc/Init.class.php:196 +msgid "Error en la verificación de la base de datos" +msgstr "Fehler beim der Datenbanküberprüfung" + +# Session +#: ../../../../inc/Init.class.php:285 +msgid "Sesion" +msgstr "Sitzung" + +# Session cannot be initialized. +#: ../../../../inc/Init.class.php:285 ../../../../inc/Init.class.php:289 +msgid "La sesión no puede ser inicializada" +msgstr "Sitzung konnte nicht initialisiert werden" + +# \"/config\" directory doesn't exist. +#: ../../../../inc/Init.class.php:416 +msgid "El directorio \"/config\" no existe" +msgstr "\"/config\" Verzeichnis existiert nicht." + +# Unable to write into \"/config\" directory +#: ../../../../inc/Init.class.php:421 +msgid "No es posible escribir en el directorio \"config\"" +msgstr "In das Verzeichnis \"/config\" kann nicht geschrieben werden" + +# \"/config\" directory permissions are incorrect +#: ../../../../inc/Init.class.php:429 +msgid "Los permisos del directorio \"/config\" son incorrectos" +msgstr "\"/config\"-Verzeichnis hat falsche Zugriffsrechte" + +# Current: +#: ../../../../inc/Init.class.php:429 +msgid "Actual:" +msgstr "Aktuell:" + +# Needed: 750 +#: ../../../../inc/Init.class.php:429 +msgid "Necesario: 750" +msgstr "Erforderlich: 750" + +# Application in maintenance +#: ../../../../inc/Init.class.php:478 +msgid "Aplicación en mantenimiento" +msgstr "Anwendung im Wartungsmodus" + +# It will be running in short +#: ../../../../inc/Init.class.php:478 +msgid "En breve estará operativa" +msgstr "Es wird in Kürze gestartet" + +# Logout session +#: ../../../../inc/Init.class.php:515 +msgid "Finalizar sesión" +msgstr "Aus Sitzung ausloggen" + +# Inactive time +#: ../../../../inc/Init.class.php:517 +msgid "Tiempo inactivo" +msgstr "Zeit ohne Aktivität" + +# Total time +#: ../../../../inc/Init.class.php:518 +msgid "Tiempo total" +msgstr "Gesamtzeit" + +# The application needs to be updated +#: ../../../../inc/Init.class.php:557 +msgid "La aplicación necesita actualizarse" +msgstr "Die Anwendung muss aktualisiert werden" + +# If you are an administrator, click on the link: +#: ../../../../inc/Init.class.php:557 +#, fuzzy, php-format +msgid "Si es un administrador pulse en el enlace: %s" +msgstr "Wenn Sie ein Administrator sind, klicken Sie auf diesen Link:" + +# Update +#: ../../../../inc/Init.class.php:557 +#: ../../../../inc/themes/classic/upgrade.inc:20 +#: ../../../../inc/themes/material-blue/upgrade.inc:25 +msgid "Actualizar" +msgstr "Aktualisierung" + +# Update +#: ../../../../inc/Init.class.php:588 +msgid "Actualización" +msgstr "Aktualisierung" + +# Version updating done. +#: ../../../../inc/Init.class.php:589 +msgid "Actualización de versión realizada." +msgstr "Version aktualisiert" + +# Version +#: ../../../../inc/Init.class.php:590 +#: ../../../../inc/themes/classic/info.inc:33 +#: ../../../../inc/themes/material-blue/info.inc:33 +msgid "Versión" +msgstr "Version" + +# Enter admin username +#: ../../../../inc/Installer.class.php:127 +msgid "Indicar nombre de usuario admin" +msgstr "Benutzername des Administrators eingeben" + +# Admin user to login to application +#: ../../../../inc/Installer.class.php:128 +msgid "Usuario admin para acceso a la aplicación" +msgstr "Administrator der Anwendung" + +# Enter admin password +#: ../../../../inc/Installer.class.php:132 +msgid "Indicar la clave de admin" +msgstr "Administrator-Passwort eingeben" + +# Application administrator's password +#: ../../../../inc/Installer.class.php:133 +msgid "Clave del usuario admin de la aplicación" +msgstr "Administrationspasswort der Anwendung" + +# Enter master password +#: ../../../../inc/Installer.class.php:137 +msgid "Indicar la clave maestra" +msgstr "Master-Passwort eingeben" + +# Master password to encrypt the passwords +#: ../../../../inc/Installer.class.php:138 +msgid "Clave maestra para encriptar las claves" +msgstr "Master-Passwords zum Verschlüsseln der Passwörter" + +# Master password too short +#: ../../../../inc/Installer.class.php:142 +msgid "Clave maestra muy corta" +msgstr "Master-Passwort zu kurz" + +# Master password length need to be at least 11 characters +#: ../../../../inc/Installer.class.php:143 +msgid "La longitud de la clave maestra ha de ser mayor de 11 caracteres" +msgstr "Master-Password muss mindestens 11 Zeichen lang sein" + +# Enter database user +#: ../../../../inc/Installer.class.php:147 +msgid "Indicar el usuario de la BBDD" +msgstr "Datenbankbenutzer eingeben" + +# An user with database administrative rights +#: ../../../../inc/Installer.class.php:148 +msgid "Usuario con permisos de administrador de la Base de Datos" +msgstr "Ein Benutzer mit administrativen Rechten in der Datenbank" + +# Enter database password +#: ../../../../inc/Installer.class.php:152 +msgid "Indicar la clave de la BBDD" +msgstr "Datenbankpasswort eingeben" + +# Database administartor's password +#: ../../../../inc/Installer.class.php:153 +msgid "Clave del usuario administrador de la Base de Datos" +msgstr "Administrationspasswort der Datenbank" + +# Enter database name +#: ../../../../inc/Installer.class.php:157 +msgid "Indicar el nombre de la BBDD" +msgstr "Datenbankname eingeben" + +# Application database name. eg. syspass +#: ../../../../inc/Installer.class.php:158 +msgid "Nombre para la BBDD de la aplicación pej. syspass" +msgstr "Datenbankname der Anwendung, z.B. syspass" + +# Database name can't contains \".\" +#: ../../../../inc/Installer.class.php:162 +msgid "El nombre de la BBDD no puede contener \".\"" +msgstr "Name der Datenbank darf keine \".\" enthalten" + +# Please, remove dots on database name +#: ../../../../inc/Installer.class.php:163 +msgid "Elimine los puntos del nombre de la Base de Datos" +msgstr "Bitte entfernen Sie den Punkt aus dem Datenbanknamen" + +# Enter database server +#: ../../../../inc/Installer.class.php:167 +msgid "Indicar el servidor de la BBDD" +msgstr "Datenbank-Server eingeben" + +# Server where the database will be installed +#: ../../../../inc/Installer.class.php:168 +msgid "Servidor donde se instalará la Base de Datos" +msgstr "Server auf dem die Datenbank installiert wird" + +# MySQL user already exist +#: ../../../../inc/Installer.class.php:313 +msgid "El usuario de MySQL ya existe" +msgstr "MySQL Benutzer wird schon benutzt" + +# Enter a new username or delete the existing one +#: ../../../../inc/Installer.class.php:314 +msgid "Indique un nuevo usuario o elimine el existente" +msgstr "Neuen Benutzernamen eingeben oder bestehenden Benutzer löschen" + +# Database already exist +#: ../../../../inc/Installer.class.php:327 +msgid "La BBDD ya existe" +msgstr "Datenbank existiert bereits" + +# Enter a new database or delete the existing one +#: ../../../../inc/Installer.class.php:328 +msgid "Indique una nueva Base de Datos o elimine la existente" +msgstr "Neuen Datenbanknamen eingeben oder bestehende Datenbank löschen" + +# Error on DB creation +#: ../../../../inc/Installer.class.php:337 +#: ../../../../inc/Installer.class.php:408 +msgid "Error al crear la BBDD" +msgstr "Fehler beim Anlegen der Datenbank" + +# Please, check database user permissions +#: ../../../../inc/Installer.class.php:338 +#: ../../../../inc/Installer.class.php:349 +msgid "Verifique los permisos del usuario de la Base de Datos" +msgstr "Bitte überprüfen Sie die Datenbank-Zugriffsberechtigungen" + +# Error on setting database permissions +#: ../../../../inc/Installer.class.php:348 +msgid "Error al establecer permisos de la BBDD" +msgstr "Fehler beim Setzen der Datenbank-Berechtigungen" + +# Database structure file doesn't exist +#: ../../../../inc/Installer.class.php:381 +msgid "El archivo de estructura de la BBDD no existe" +msgstr "Datei mit Datenbank-Schema existiert nicht" + +# Unable to create application database. Please, download it again. +#: ../../../../inc/Installer.class.php:382 +msgid "No es posible crear la BBDD de la aplicación. Descárguela de nuevo." +msgstr "Anwendungsdatenbank kann nicht angelegt werden. Bitte erneut herunterladen" + +# Error on selecting database. +#: ../../../../inc/Installer.class.php:390 +msgid "Error al seleccionar la BBDD" +msgstr "Fehler beim Auswählen der Datenbank" + +# Unable to use the database to create the structure. Check permissions and it doesn't exist. +#: ../../../../inc/Installer.class.php:391 +msgid "No es posible usar la Base de Datos para crear la estructura. Compruebe los permisos y que no exista." +msgstr "Datenbank kann nicht gefunden werden. Überprüfen Sie die Berechtigung." + +# Error on creating database structure. +#: ../../../../inc/Installer.class.php:409 +msgid "Error al crear la estructura de la Base de Datos." +msgstr "Fehler beim Anlegen der Datenbankstruktur" + +# Error on creating \"admin\" group +#: ../../../../inc/Installer.class.php:432 +msgid "Error al crear el grupo \"admin\"" +msgstr "Fehler beim Anlegen der \"admin\" Gruppe" + +# Warn to developer +#: ../../../../inc/Installer.class.php:433 +#: ../../../../inc/Installer.class.php:466 +#: ../../../../inc/Installer.class.php:483 +#: ../../../../inc/Installer.class.php:496 +msgid "Informe al desarrollador" +msgstr "Warnung an Entwickler" + +# Error on creating \"admin\" profile +#: ../../../../inc/Installer.class.php:465 +msgid "Error al crear el perfil \"admin\"" +msgstr "Fehler beim Anlegen des \"admin\" Profils" + +# Error on creating \"admin\" user +#: ../../../../inc/Installer.class.php:482 +msgid "Error al crear el usuario \"admin\"" +msgstr "Fehler beim Anlegen des \"admin\" Benutzers" + +# Error on updating master password for user \"admin\" +#: ../../../../inc/Installer.class.php:495 +msgid "Error al actualizar la clave maestra del usuario \"admin\"" +msgstr "Fehler beim Ändern des Master-Passworts des Benutzers \"admin\"" + +# Unable to connect to LDAP server +#: ../../../../inc/Ldap.class.php:110 ../../../../inc/Ldap.class.php:114 +msgid "No es posible conectar con el servidor de LDAP" +msgstr "Verbindung zum LDAP-Server kann nicht hergestellt werden" + +# Connection error (BIND) +#: ../../../../inc/Ldap.class.php:139 ../../../../inc/Ldap.class.php:144 +msgid "Error al conectar (BIND)" +msgstr "LDAP-Verbindungsfehler (BIND)" + +# Error on searching objects in base DN +#: ../../../../inc/Ldap.class.php:167 ../../../../inc/Ldap.class.php:172 +msgid "Error al buscar objetos en DN base" +msgstr "Fehler beim Suchen nach Objekten in der Base-DN" + +# Error on searching group RDN +#: ../../../../inc/Ldap.class.php:200 ../../../../inc/Ldap.class.php:205 +#: ../../../../inc/Ldap.class.php:212 ../../../../inc/Ldap.class.php:216 +#: ../../../../inc/Ldap.class.php:225 ../../../../inc/Ldap.class.php:229 +msgid "Error al buscar RDN de grupo" +msgstr "Fehler beim Suchen nach Gruppen RDN" + +# Error on searching user DN +#: ../../../../inc/Ldap.class.php:278 ../../../../inc/Ldap.class.php:283 +#: ../../../../inc/Ldap.class.php:297 ../../../../inc/Ldap.class.php:301 +msgid "Error al buscar el DN del usuario" +msgstr "Fehler beim Suchen nach Benutzer DN" + +# Error on searching user on LDAP +#: ../../../../inc/Ldap.class.php:290 ../../../../inc/Ldap.class.php:294 +msgid "Error al localizar el usuario en LDAP" +msgstr "Fehler beim Suchen des Benutzers in LDAP" + +# Error on searching users group +#: ../../../../inc/Ldap.class.php:375 ../../../../inc/Ldap.class.php:380 +#: ../../../../inc/LdapADS.class.php:99 ../../../../inc/LdapADS.class.php:104 +msgid "Error al buscar el grupo de usuarios" +msgstr "Fehler beim Suchen nach Benutzergruppe" + +# User deleted +#: ../../../../inc/Ldap.class.php:387 +#, fuzzy +msgid "Usuario verificado en grupo" +msgstr "Gruppe in Benutzung durch:" + +# No group found with that name +#: ../../../../inc/LdapADS.class.php:108 ../../../../inc/LdapADS.class.php:113 +msgid "No se encontró el grupo con ese nombre" +msgstr "Keine Gruppe mit dem Namen gefunden" + +# Clear Events +#: ../../../../inc/Log.class.php:88 +msgid "Vaciar Eventos" +msgstr "Protokol löschen" + +# Clear event log +#: ../../../../inc/Log.class.php:88 +#: ../../../../inc/themes/classic/eventlog.inc:100 +#: ../../../../inc/themes/material-blue/eventlog.inc:100 +msgid "Vaciar registro de eventos" +msgstr "Protokol löschen" + +# Missing parameters +#: ../../../../inc/Migrate.class.php:52 +msgid "Faltan parámetros" +msgstr "Fehlender Parameter" + +# Incompatible version +#: ../../../../inc/Migrate.class.php:149 +msgid "La versión no es compatible" +msgstr "Inkompatible Version" + +# Please, update to last version of phpPMS +#: ../../../../inc/Migrate.class.php:150 +msgid "Actualice a la última versión de phpPMS" +msgstr "Bitte aktualisieren Sie auf die letzte Version von phpPMS." + +# Error on retrieving configuration +#: ../../../../inc/Migrate.class.php:168 +msgid "Error al obtener la configuración" +msgstr "Fehler beim Laden der Konfiguration" + +# Error on cleaning table +#: ../../../../inc/Migrate.class.php:211 ../../../../inc/Migrate.class.php:224 +msgid "Error al vaciar tabla" +msgstr "Fehler beim Leeren der Tabelle" + +# Current user is not application administrator +#: ../../../../inc/Migrate.class.php:229 +msgid "Usuario actual no es administrador de la aplicación" +msgstr "Angemeldeter Benutzer ist nicht Administrator" + +# Unable to create customer +#: ../../../../inc/Migrate.class.php:274 +msgid "No es posible crear el cliente" +msgstr "Kunde kann nicht angelegt werden" + +# Please, contact to developer +#: ../../../../inc/Migrate.class.php:275 +msgid "Contacte con el desarrollador" +msgstr "Bitte kontaktieren Sie den Entwickler" + +# Import Customers +#: ../../../../inc/Migrate.class.php:279 +msgid "Importar Clientes" +msgstr "Importiere Kunden" + +# Records +#: ../../../../inc/Migrate.class.php:281 ../../../../inc/Migrate.class.php:351 +#: ../../../../inc/Migrate.class.php:452 ../../../../inc/Migrate.class.php:525 +#: ../../../../inc/Migrate.class.php:633 ../../../../inc/Migrate.class.php:698 +#: ../../../../inc/Migrate.class.php:772 ../../../../inc/Migrate.class.php:862 +#: ../../../../inc/Migrate.class.php:933 +msgid "Registros" +msgstr "Datensätze" + +# Error on retrieving customer +#: ../../../../inc/Migrate.class.php:303 +msgid "Error al obtener los clientes" +msgstr "Fehler beim Laden des Kunden" + +# Error on retrieving accounts +#: ../../../../inc/Migrate.class.php:345 +msgid "Error al obtener cuentas" +msgstr "Fehler beim Laden des Kontos" + +# Customer not found +#: ../../../../inc/Migrate.class.php:374 +msgid "Cliente no encontrado" +msgstr "Kunde nicht gefunden" + +# Error on importing account +#: ../../../../inc/Migrate.class.php:417 +msgid "Error al migrar cuenta" +msgstr "Fehler beim Importieren des Kontos" + +# Error on retrieving accounts groups +#: ../../../../inc/Migrate.class.php:446 +msgid "Error al obtener los grupos de cuentas" +msgstr "Fehler beim Laden der Gruppen eines Kontos" + +# Import Accounts Groups +#: ../../../../inc/Migrate.class.php:450 +msgid "Importar Grupos de Cuentas" +msgstr "Importiere Kontogruppen" + +# Error on accounts groups creation +#: ../../../../inc/Migrate.class.php:472 +msgid "Error al crear grupos de cuentas" +msgstr "Fehler beim Anlegen der Gruppen eines Kontos" + +# Error on retrieving accounts history +#: ../../../../inc/Migrate.class.php:519 +msgid "Error al obtener el historico de cuentas" +msgstr "Fehler beim Laden der Konto-Historie" + +# Import Accounts History +#: ../../../../inc/Migrate.class.php:523 +msgid "Importar Histórico de Cuentas" +msgstr "Importiere Konten-Historie" + +# Error on creating accounts history +#: ../../../../inc/Migrate.class.php:592 +msgid "Error al crear historico de cuentas" +msgstr "Fehler beim Anlegen der Konto-Historie" + +# Error on retrieving accounts files +#: ../../../../inc/Migrate.class.php:627 +msgid "Error al obtener los archivos de cuentas" +msgstr "Fehler beim Laden der Konto-Dateien" + +# Import Accounts Files +#: ../../../../inc/Migrate.class.php:631 +msgid "Importar Archivos de Cuentas" +msgstr "Importiere Konto-Dateien" + +# Error on creating accounts files +#: ../../../../inc/Migrate.class.php:663 +msgid "Error al crear archivos de cuentas" +msgstr "Fehler beim Anlegen der Kontodateien" + +# Error on retrieving accounts categories +#: ../../../../inc/Migrate.class.php:692 +msgid "Error al obtener las categorías de cuentas" +msgstr "Fehler beim Holen der Konto-Kategorien" + +# Import Accounts Categories +#: ../../../../inc/Migrate.class.php:696 +msgid "Importar Categorías de Cuentas" +msgstr "Importiere Kontokategorien" + +# Error on retrieving accounts categories +#: ../../../../inc/Migrate.class.php:718 +msgid "Error al crear categorías de cuentas" +msgstr "Fehler beim Holen der Konto-Kategorien" + +# Error on retrieving users +#: ../../../../inc/Migrate.class.php:766 +msgid "Error al obtener los usuarios" +msgstr "Fehler beim Laden der Benutzer" + +# Import Users +#: ../../../../inc/Migrate.class.php:770 +msgid "Importar Usuarios" +msgstr "Importiere Benutzer" + +# Error on creating users +#: ../../../../inc/Migrate.class.php:827 +msgid "Error al crear usuarios" +msgstr "Fehler beim Anlegen der Benutzer" + +# Error on retrieving users groups +#: ../../../../inc/Migrate.class.php:856 +msgid "Error al obtener los grupos de usuarios" +msgstr "Fehler beim Laden der Gruppen eines Benutzers" + +# Import Users Groups +#: ../../../../inc/Migrate.class.php:860 +msgid "Importar Grupos de Usuarios" +msgstr "Importiere Benutzergruppen" + +# Error on adding users groups +#: ../../../../inc/Migrate.class.php:886 +msgid "Error al crear los grupos de usuarios" +msgstr "Fehler beim Hinzufügen Gruppen eines Benutzers" + +# Import Configuration +#: ../../../../inc/Migrate.class.php:931 +msgid "Importar Configuración" +msgstr "Importiere Konfiguration" + +# Edit Profile +#: ../../../../inc/Profile.class.php:69 ../../../../inc/Profile.class.php:123 +#: ../../../../inc/Profile.class.php:128 +#, fuzzy +msgid "Migrar Perfiles" +msgstr "Profile" + +# Error on retrieving accounts +#: ../../../../inc/Profile.class.php:69 +#, fuzzy +msgid "Error al obtener perfiles" +msgstr "Fehler beim Laden des Kontos" + +# Application successfully updated +#: ../../../../inc/Profile.class.php:126 +#, fuzzy +msgid "Operación realizada correctamente" +msgstr "Anwendung erfolgreich aktualisiert" + +# You don't have permission to do this operation +#: ../../../../inc/Profile.class.php:128 +#, fuzzy +msgid "Fallo al realizar la operación" +msgstr "Fehler beim Ändern des Master-Passworts" + +# Incorrect parameters +#: ../../../../inc/ProfileBase.class.php:164 +#, fuzzy +msgid "Datos de perfil incorrectos" +msgstr "Duplizierter Profilname" + +# Delete Profile +#: ../../../../inc/ProfileBase.class.php:550 +#: ../../../../web/UsersMgmtC.class.php:274 +msgid "Eliminar Perfil" +msgstr "Profil löschen" + +# Edit Profile +#: ../../../../inc/ProfileBase.class.php:593 +msgid "Modificar Perfil" +msgstr "Profil ändern" + +# 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 "Ungültige ID" + +#: ../../../../inc/SyspassImport.class.php:111 +#, fuzzy +msgid "No hay categorías para importar" +msgstr "Importiere Kontokategorien" + +# There're no backups for download +#: ../../../../inc/SyspassImport.class.php:136 +#, fuzzy +msgid "No hay clientes para importar" +msgstr "Importiere Kunden" + +# There're no backups for download +#: ../../../../inc/SyspassImport.class.php:161 +#, fuzzy +msgid "No hay cuentas para importar" +msgstr "Es existieren keine Backups zum Herunterladen" + +# Error on updating database +#: ../../../../inc/Upgrade.class.php:51 +msgid "Error al aplicar la actualización de la Base de Datos" +msgstr "Fehler beim Ändern der Datenbank" + +# Please, check the event log for more details +#: ../../../../inc/Upgrade.class.php: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" + +# Login +#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58 +#: ../../../../inc/themes/classic/login.inc:32 +#: ../../../../inc/themes/material-blue/2fa.inc:26 +#: ../../../../inc/themes/material-blue/login.inc:60 +msgid "Acceder" +msgstr "Anmeldung" + +# Error on updating database +#: ../../../../inc/Upgrade.class.php:57 +#, fuzzy +msgid "Error al aplicar la actualización auxiliar" +msgstr "Fehler beim Ändern der Datenbank" + +# Update DB +#: ../../../../inc/Upgrade.class.php:74 +msgid "Actualizar BBDD" +msgstr "DB aktualisieren" + +# Database update not needed. +#: ../../../../inc/Upgrade.class.php:121 +msgid "No es necesario actualizar la Base de Datos." +msgstr "Keine Datenbankaktualisierung notwendig" + +# Error on updating database. +#: ../../../../inc/Upgrade.class.php:129 +msgid "Error al aplicar la actualización de la Base de Datos." +msgstr "Fehler beim Ändern der Datenbank" + +# Database updating was done successfully. +#: ../../../../inc/Upgrade.class.php:138 +msgid "Actualización de la Base de Datos realizada correctamente." +msgstr "Aktualisierung der Datenbank war erfolgreich." + +# Update Configuration +#: ../../../../inc/Upgrade.class.php:215 +msgid "Actualizar Configuración" +msgstr "Konfiguration aktualisieren" + +# Configuration updating successfully done. +#: ../../../../inc/Upgrade.class.php:215 +msgid "Actualización de la Configuración realizada correctamente." +msgstr "Configuration Aktualisierung erfolgreich durchgeführt." + +# Could not perform the password change request. +#: ../../../../inc/UserBase.class.php:386 +#: ../../../../inc/UserBase.class.php:530 +msgid "No se pudo realizar la petición de cambio de clave." +msgstr "Die Passwortänderung Anfrage konnte nicht ausgeführt werden." + +# Edit User +#: ../../../../inc/UserBase.class.php:525 +msgid "Modificar Usuario" +msgstr "Benutzer ändern" + +# Delete User +#: ../../../../inc/UserBase.class.php:592 +#: ../../../../web/UsersMgmtC.class.php:150 +msgid "Eliminar Usuario" +msgstr "Benutzer löschen" + +# Account Activation +#: ../../../../inc/UserLdap.class.php:78 +msgid "Activación Cuenta" +msgstr "Kontoaktivierung" + +# Your account activation is pending. +#: ../../../../inc/UserLdap.class.php:79 +msgid "Su cuenta está pendiente de activación." +msgstr "Ihre Kontoaktivierung ist anhängig" + +# You will receive a confirmation email in short. +#: ../../../../inc/UserLdap.class.php:80 +msgid "En breve recibirá un email de confirmación." +msgstr "Sie bekommen in Kürze eine Bestätigungs-Mail" + +# LDAP User +#: ../../../../inc/UserLdap.class.php:86 +#, fuzzy +msgid "Nuevo usuario de LDAP" +msgstr "LDAP-Benutzer" + +# Edit Group +#: ../../../../inc/UserUtil.class.php:727 +#, fuzzy +msgid "Migrar Grupos" +msgstr "Gruppen" + +# Error on adding users groups +#: ../../../../inc/UserUtil.class.php:727 +#, fuzzy +msgid "Error al migrar grupo del usuario" +msgstr "Fehler beim Suchen nach Benutzer DN" + +# Required PHP version >= 5.1 +#: ../../../../inc/Util.class.php:122 +#, fuzzy +msgid "Versión de PHP requerida >= " +msgstr "Erforderliche PHP-Version >= 5.1" + +# Please update PHP version to run sysPass in a secure way +#: ../../../../inc/Util.class.php:123 +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." + +# Module unavilable +#: ../../../../inc/Util.class.php:159 +#: ../../../../inc/themes/classic/ldap.inc:212 +#: ../../../../inc/themes/material-blue/ldap.inc:238 +msgid "Módulo no disponible" +msgstr "Modul verfügbar" + +# Without this module the application couldn't run correctly +#: ../../../../inc/Util.class.php:160 +msgid "Sin este módulo la aplicación puede no funcionar correctamente." +msgstr "Ohne dieses Modul wird die Anwendung nicht korrekt funktionieren." + +# CSV Import +#: ../../../../inc/XmlExport.class.php:104 +#, fuzzy +msgid "Importar XML" +msgstr "CSV/XML Import" + +# Error on creating user +#: ../../../../inc/XmlExport.class.php:389 +#, fuzzy +msgid "Error al crear el archivo XML" +msgstr "Fehler beim Anlegen des Kunden" + +#: ../../../../inc/XmlImport.class.php:63 +msgid "Formato detectado" msgstr "" -"Wenn Sie diese Aktion nicht ausgelöst haben, dann ignorieren Sie bitte diese " -"Meldung" -# Request Password Change -#: ../../../../inc/tpl/passreset.php:47 -msgid "Solicitud de Cambio de Clave" -msgstr "Passwortänderung initiiert." +# Unable to process XML file +#: ../../../../inc/XmlImportBase.class.php:75 +msgid "No es posible procesar el archivo XML" +msgstr "XML-Datei kann nicht verarbeitet werden" -# User login -#: ../../../../inc/tpl/passreset.php:50 -msgid "Login del Usuario" -msgstr "Benutzer-Anmeldung" +# XML file not supported +#: ../../../../inc/XmlImportBase.class.php:103 +msgid "Archivo XML no soportado" +msgstr "XML-Datei wird nicht unterstützt" -# User Email -#: ../../../../inc/tpl/passreset.php:55 -msgid "Email del Usuario" -msgstr "Benutzer-E-Mail" +# Unable to detect the application the data was exported from +#: ../../../../inc/XmlImportBase.class.php:104 +msgid "No es posible detectar la aplicación que exportó los datos" +msgstr "Die Anwendung von der die Daten exportiert wurden, kann nicht festgestellt werden" -# Email -#: ../../../../inc/tpl/passreset.php:56 ../../../../inc/tpl/users.php:112 -msgid "Email" -msgstr "E-Mail" +# Query error +#: ../../../../js/strings.js.php:27 +msgid "Error en la consulta" +msgstr "Abfrage-Fehler" -# New Password -#: ../../../../inc/tpl/passreset.php:61 -msgid "Nueva Clave" -msgstr "Neues Passwort" +# An error has occured +#: ../../../../js/strings.js.php:28 +msgid "Ha ocurrido un error" +msgstr "Ein Fehler ist aufgetreten" -# New Password (Verify) -#: ../../../../inc/tpl/passreset.php:69 -msgid "Nueva Clave (Verificar)" -msgstr "Neues Passwort (Wіederholung)" +# Session finished +#: ../../../../js/strings.js.php:29 +#: ../../../../inc/themes/classic/login.inc:52 +#: ../../../../inc/themes/material-blue/login.inc:75 +msgid "Sesión finalizada" +msgstr "Sitzung beendet" -# Password (Verify) -#: ../../../../inc/tpl/passreset.php:70 -msgid "Clave (Verificar)" -msgstr "Passwort (Wiederholung)" +# Delete account? +#: ../../../../js/strings.js.php:30 +msgid "Borrar la cuenta?" +msgstr "Account löschen?" -# Back -#: ../../../../inc/tpl/passreset.php:83 -msgid "Volver" -msgstr "Zurück" +# Delete user? +#: ../../../../js/strings.js.php:31 +msgid "Borrar el usuario?" +msgstr "Benutzer löschen?" -# Go back to login -#: ../../../../inc/tpl/passreset.php:83 -msgid "Volver a iniciar sesión" -msgstr "Zurück zur Anmeldung" +# Please save the configuration in order to take effect +#: ../../../../js/strings.js.php:32 +msgid "Guarde la configuración para que sea efectiva" +msgstr "Bitte speichern Sie die Konfiguration, um wirksam" -# Request -#: ../../../../inc/tpl/passreset.php:85 -msgid "Solicitar" -msgstr "Anfrage" +# Generated Password +#: ../../../../js/strings.js.php:33 +msgid "Clave Generada" +msgstr "Generiertes Passwort" -# Request password change -#: ../../../../inc/tpl/passreset.php:86 -msgid "Solicitar cambio de clave" -msgstr "Starte Passwortänderung" +# High level +#: ../../../../js/strings.js.php:34 +msgid "Nivel alto" +msgstr "Hohe" -# Change -#: ../../../../inc/tpl/passreset.php:88 -msgid "Cambiar" -msgstr "Ändern" +# Average level +#: ../../../../js/strings.js.php:35 +msgid "Nivel medio" +msgstr "Mittelstufe" + +# Low level +#: ../../../../js/strings.js.php:36 +msgid "Nivel bajo" +msgstr "Low-Pegel" + +# Very high level +#: ../../../../js/strings.js.php:37 +msgid "Nivel muy alto" +msgstr "Sehr hohes Niveau" + +# You should use at least 8 characters +#: ../../../../js/strings.js.php:38 +msgid "Utilizar al menos 8 caracteres" +msgstr "Verwenden Sie mindestens 8 Zeichen" + +# Delete item? +#: ../../../../js/strings.js.php:39 +msgid "Borrar elemento?" +msgstr "Artikel löschen?" + +# Page not found +#: ../../../../js/strings.js.php:40 +msgid "Página no encontrada" +msgstr "Seite nicht gefunden" + +# File not supported for preview +#: ../../../../js/strings.js.php:41 +msgid "Archivo no soportado para visualizar" +msgstr "Die Datei, nicht unterstützt" + +# Delete file? +#: ../../../../js/strings.js.php:42 +msgid "Eliminar archivo?" +msgstr "Datei löschen?" + +# Your browser does not support HTML 5 file uploads +#: ../../../../js/strings.js.php:43 +msgid "Su navegador no soporta subir archivos con HTML5" +msgstr "Ihr Browser unterstützt keine Hochladen von Dateien in HTML5" + +# Too many files +#: ../../../../js/strings.js.php:44 +msgid "Demasiados archivos" +msgstr "Zu viele Dateien" + +# Unable to save file.
    Max file size: +#: ../../../../js/strings.js.php:45 +#, fuzzy, php-format +msgid "No es posible guardar el archivo.%sTamaño máximo:" +msgstr "Datei konnte nicht gespeichert
    Max. Dateigröße.:" + +# Extension not allowed +#: ../../../../js/strings.js.php:46 +msgid "Extensión no permitida" +msgstr "Erweiterung nicht erlaubt" + +# Clear event log? +#: ../../../../js/strings.js.php:47 +msgid "Vaciar el registro de eventos?" +msgstr "Klar Ereignisprotokoll?" + +# Select Group +#: ../../../../js/strings.js.php:48 +msgid "Seleccionar Grupo" +msgstr "Gruppe auswählen" + +# Select users +#: ../../../../js/strings.js.php:49 +#, fuzzy +msgid "Seleccionar Usuario" +msgstr "Datum auswählen" + +# Select Profile +#: ../../../../js/strings.js.php:50 +msgid "Seleccionar Perfil" +msgstr "Profil auswählen" + +# Select Customer +#: ../../../../js/strings.js.php:51 +msgid "Seleccionar Cliente" +msgstr "Kunde auswählen" + +# Select category +#: ../../../../js/strings.js.php:52 +msgid "Seleccionar Categoría" +msgstr "Kategorie auswählen" + +# No results +#: ../../../../js/strings.js.php:53 +msgid "Sin resultados" +msgstr "Kein Ergebnis" + +# Options +#: ../../../../js/strings.js.php:54 +#, fuzzy +msgid "Opciones de clave" +msgstr "Optionen" + +# Generate random password +#: ../../../../js/strings.js.php:55 +msgid "Generar clave aleatoria" +msgstr "Zufälliges Passwort erzeugen" + +#: ../../../../js/strings.js.php:56 +msgid "Complejidad" +msgstr "" + +#: ../../../../js/strings.js.php:57 +msgid "Reset" +msgstr "" + +# Password strength level +#: ../../../../js/strings.js.php:58 +#: ../../../../inc/themes/classic/editpass.inc:34 +msgid "Nivel de fortaleza de la clave" +msgstr "Passwortstärke" + +# Show Password +#: ../../../../js/strings.js.php:59 +msgid "Mostrar Clave" +msgstr "Passwort anzeigen" + +# Edit User +#: ../../../../js/strings.js.php:60 +#, fuzzy +msgid "Copiar Usuario" +msgstr "Konto kopieren" # Change password -#: ../../../../inc/tpl/passreset.php:89 -msgid "Cambiar Clave" -msgstr "Passwort ändern" +#: ../../../../js/strings.js.php:61 +#, fuzzy +msgid "Copiar Clave" +msgstr "Passwort in die Zwischenablage kopieren" -# Request Account Modification -#: ../../../../inc/tpl/request.php:33 -msgid "Solicitar Modificación de Cuenta" -msgstr "Kontoänderung initiiert" +#: ../../../../js/strings.js.php:62 +msgid "Incluir Números" +msgstr "" -# Request -#: ../../../../inc/tpl/request.php:54 -msgid "Petición" -msgstr "Anfrage" +#: ../../../../js/strings.js.php:63 +msgid "Incluir Mayúsculas" +msgstr "" -# Request description -#: ../../../../inc/tpl/request.php:56 -msgid "Descripción de la petición" -msgstr "Beschreibung der Anfrage" +#: ../../../../js/strings.js.php:64 +msgid "Incluir Símbolos" +msgstr "" -# Back -#: ../../../../inc/tpl/request.php:68 ../../../../inc/tpl/editpass.php:84 -#: ../../../../inc/tpl/accounts.php:508 -msgid "Atrás" -msgstr "Zurück" +#: ../../../../js/strings.js.php:65 +#, fuzzy +msgid "Longitud" +msgstr "Master-Password muss mindestens 11 Zeichen lang sein" -# Send -#: ../../../../inc/tpl/request.php:71 -msgid "Enviar" -msgstr "Senden" +# Select Customer +#: ../../../../js/strings.js.php:66 +#, fuzzy +msgid "Seleccionar Acción" +msgstr "Aktion" + +# YES +#: ../../../../js/strings.js.php:67 +#: ../../../../inc/themes/classic/account.inc:133 +#: ../../../../inc/themes/classic/account.inc:164 +#: ../../../../inc/themes/classic/account.inc:449 +#: ../../../../inc/themes/classic/install.inc:99 +msgid "SI" +msgstr "Ja" + +# NO +#: ../../../../js/strings.js.php:68 +#: ../../../../inc/themes/classic/account.inc:133 +#: ../../../../inc/themes/classic/account.inc:164 +#: ../../../../inc/themes/classic/account.inc:447 +#: ../../../../inc/themes/classic/encryption.inc:61 +#: ../../../../inc/themes/classic/encryption.inc:80 +#: ../../../../inc/themes/classic/import.inc:70 +#: ../../../../inc/themes/classic/install.inc:99 +#: ../../../../inc/themes/classic/tokens.inc:36 +msgid "NO" +msgstr "Nein" + +# Account Details +#: ../../../../web/AccountC.class.php:380 +#: ../../../../web/AccountC.class.php:411 +#: ../../../../inc/themes/classic/search.inc:38 +#: ../../../../inc/themes/classic/search.inc:97 +#: ../../../../inc/themes/material-blue/search.inc:41 +#: ../../../../inc/themes/material-blue/search.inc:108 +msgid "Detalles de Cuenta" +msgstr "Kontodetails" + +# Edit Account Password +#: ../../../../web/AccountC.class.php:468 +#: ../../../../inc/themes/classic/account.inc:394 +#: ../../../../inc/themes/material-blue/account.inc:429 +msgid "Modificar Clave de Cuenta" +msgstr "Konto-Passwort ändern" + +# Name +#: ../../../../web/AccountsMgmtC.class.php:79 +#: ../../../../web/AccountsMgmtC.class.php:138 +#: ../../../../web/AccountsMgmtC.class.php:266 +#: ../../../../web/SearchC.class.php:277 +#: ../../../../web/UsersMgmtC.class.php:87 +#: ../../../../web/UsersMgmtC.class.php:187 +#: ../../../../web/UsersMgmtC.class.php:245 +#: ../../../../inc/themes/classic/account.inc:11 +#: ../../../../inc/themes/classic/categories.inc:8 +#: ../../../../inc/themes/classic/customers.inc:8 +#: ../../../../inc/themes/classic/customfields.inc:9 +#: ../../../../inc/themes/classic/editpass.inc:8 +#: ../../../../inc/themes/classic/groups.inc:8 +#: ../../../../inc/themes/classic/info.inc:25 +#: ../../../../inc/themes/classic/profiles.inc:8 +#: ../../../../inc/themes/classic/request.inc:6 +#: ../../../../inc/themes/classic/search.inc:36 +#: ../../../../inc/themes/classic/users.inc:8 +#: ../../../../inc/themes/material-blue/account.inc:15 +#: ../../../../inc/themes/material-blue/categories.inc:8 +#: ../../../../inc/themes/material-blue/customers.inc:8 +#: ../../../../inc/themes/material-blue/customfields.inc:8 +#: ../../../../inc/themes/material-blue/editpass.inc:9 +#: ../../../../inc/themes/material-blue/groups.inc:8 +#: ../../../../inc/themes/material-blue/info.inc:25 +#: ../../../../inc/themes/material-blue/profiles.inc:8 +#: ../../../../inc/themes/material-blue/request.inc:6 +#: ../../../../inc/themes/material-blue/search.inc:39 +#: ../../../../inc/themes/material-blue/users.inc:8 +msgid "Nombre" +msgstr "Name" + +# Categories management +#: ../../../../web/AccountsMgmtC.class.php:115 +msgid "Gestión de Categorías" +msgstr "Kategorienverwaltung" + +# Customers Management +#: ../../../../web/AccountsMgmtC.class.php:172 +msgid "Gestión de Clientes" +msgstr "Kundenverwaltung" + +#: ../../../../web/AccountsMgmtC.class.php:266 +#: ../../../../inc/themes/classic/customfields.inc:27 +#: ../../../../inc/themes/material-blue/customfields.inc:30 +#, fuzzy +msgid "Módulo" +msgstr "Modul verfügbar" + +# Delete Group +#: ../../../../web/AccountsMgmtC.class.php:287 +#, fuzzy +msgid "Eliminar Campo" +msgstr "Profil löschen" + +#: ../../../../web/AccountsMgmtC.class.php:300 +#: ../../../../inc/themes/classic/profiles.inc:107 +#: ../../../../inc/themes/material-blue/profiles.inc:124 +msgid "Campos Personalizados" +msgstr "" # Last backup -#: ../../../../inc/tpl/backup.php:42 +#: ../../../../web/ConfigC.class.php:178 msgid "Último backup" msgstr "Letztes Backup" # There're no backups available -#: ../../../../inc/tpl/backup.php:42 +#: ../../../../web/ConfigC.class.php:178 msgid "No se encontraron backups" msgstr "Es existieren keine Backups" -# Result -#: ../../../../inc/tpl/backup.php:48 -msgid "Resultado" -msgstr "Ergebnis" - -# Download Current -#: ../../../../inc/tpl/backup.php:56 -msgid "Descargar Actual" -msgstr "Herunterladen" - -# There're no backups for download -#: ../../../../inc/tpl/backup.php:64 -msgid "No hay backups para descargar" -msgstr "Es existieren keine Backups zum Herunterladen" - -# Last Change -#: ../../../../inc/tpl/masterpass.php:42 -msgid "Último cambio" -msgstr "Letzte Änderung" - -# Current Master Password -#: ../../../../inc/tpl/masterpass.php:51 -msgid "Clave Maestra actual" -msgstr "Aktuelles Master-Passwort" - -# New Master Password -#: ../../../../inc/tpl/masterpass.php:59 -msgid "Nueva Clave Maestra" -msgstr "Neues Master-Passwort" - -# New Master Password (repeat) -#: ../../../../inc/tpl/masterpass.php:68 -msgid "Nueva Clave Maestra (repetir)" -msgstr "Neues Master-Passwort (Wiederholung)" - -# Don't modify accounts -#: ../../../../inc/tpl/masterpass.php:76 -msgid "No modificar cuentas" -msgstr "Konten nicht verändern" - -# NO -#: ../../../../inc/tpl/masterpass.php:80 ../../../../inc/tpl/masterpass.php:99 -#: ../../../../inc/tpl/masterpass.php:125 ../../../../inc/tpl/migrate.php:81 -#: ../../../../inc/tpl/migrate.php:130 ../../../../inc/tpl/accounts.php:305 -#: ../../../../inc/tpl/accounts.php:336 ../../../../inc/tpl/accounts.php:593 -msgid "NO" -msgstr "Nein" - -# Confirm Change -#: ../../../../inc/tpl/masterpass.php:86 -msgid "Confirmar cambio" -msgstr "Änderung bestätigen" - -# Warning -#: ../../../../inc/tpl/masterpass.php:89 ../../../../inc/tpl/masterpass.php:92 -#: ../../../../inc/tpl/masterpass.php:95 ../../../../inc/tpl/migrate.php:78 -msgid "Atención" -msgstr "Warnung" - -# You should save the new password on a secure place -#: ../../../../inc/tpl/masterpass.php:90 -msgid "Guarde la nueva clave en un lugar seguro." -msgstr "Sie sollten das neue Passwort an einem sicheren Ort aufbewahren" - -# All accounts passwords will be encrypted again. -#: ../../../../inc/tpl/masterpass.php:93 -msgid "Se volverán a encriptar las claves de todas las cuentas." -msgstr "Alle Passwörter der Konten werden neu verschlüsselt." - -# All users must re-enter the new master password. -#: ../../../../inc/tpl/masterpass.php:96 -msgid "Los usuarios deberán de introducir la nueva clave maestra." -msgstr "All Benutzer müssen das neue Master-Passwort eingeben." - -# YES -#: ../../../../inc/tpl/masterpass.php:127 ../../../../inc/tpl/migrate.php:132 -#: ../../../../inc/tpl/accounts.php:305 ../../../../inc/tpl/accounts.php:336 -#: ../../../../inc/tpl/accounts.php:595 -msgid "SI" -msgstr "Ja" - -# Group name -#: ../../../../inc/tpl/groups.php:41 -msgid "Nombre del grupo" -msgstr "Gruppenname" - -# Group description -#: ../../../../inc/tpl/groups.php:47 -msgid "Descripción del grupo" -msgstr "Beschreibung der Gruppe" - -# phpPMS Import -#: ../../../../inc/tpl/migrate.php:33 -msgid "Importar phpPMS" -msgstr "phpPMS Import" - -# DB Username -#: ../../../../inc/tpl/migrate.php:40 ../../../../inc/tpl/install.php:131 -#: ../../../../inc/tpl/install.php:132 -msgid "Usuario BBDD" -msgstr "Datenbankbenutzer" - -# DB Password -#: ../../../../inc/tpl/migrate.php:49 ../../../../inc/tpl/install.php:139 -#: ../../../../inc/tpl/install.php:140 -msgid "Clave BBDD" -msgstr "Datenbank-Passwort" - -# DB Name -#: ../../../../inc/tpl/migrate.php:57 ../../../../inc/tpl/install.php:147 -#: ../../../../inc/tpl/install.php:148 -msgid "Nombre BBDD" -msgstr "Datenbankname" - -# DB Server -#: ../../../../inc/tpl/migrate.php:66 ../../../../inc/tpl/install.php:156 -#: ../../../../inc/tpl/install.php:157 -msgid "Servidor BBDD" -msgstr "Datenbank-Server" - -# Confirm -#: ../../../../inc/tpl/migrate.php:75 -msgid "Confirmar" -msgstr "Bestätigen" - -# Current data will be removed (except current user) -#: ../../../../inc/tpl/migrate.php:79 -msgid "Los datos actuales serán borrados (excepto el usuario actual)" -msgstr "Daten werden gelöscht (mit Ausnahme des aktuellen Benutzers)" - -# Start -#: ../../../../inc/tpl/migrate.php:97 -msgid "Iniciar" -msgstr "Start" - -# CSV Import -#: ../../../../inc/tpl/migrate.php:103 -msgid "Importar CSV/XML" -msgstr "CSV/XML Import" - -# Drop files here or click to select -#: ../../../../inc/tpl/migrate.php:117 -msgid "Soltar archivo aquí o click para seleccionar" -msgstr "Dateien hier fallen lassen oder zum selektieren anklicken" - -# Lost your password? -#: ../../../../inc/tpl/login.php:65 -msgid "¿Olvidó su clave?" -msgstr "Passwort vergessen?" - -# Application successfully updated -#: ../../../../inc/tpl/login.php:78 -msgid "Aplicación actualizada correctamente" -msgstr "Anwendung erfolgreich aktualisiert" - -# New search interface with list or card like styles -#: ../../../../inc/tpl/login.php:84 +# Last Modification +#: ../../../../web/ConfigC.class.php:185 #, fuzzy -msgid "Nuevo interface de búsqueda con estilo de lista o tipo tarjeta" -msgstr "New search interface with list or card like styles" +msgid "Última exportación" +msgstr "Letzte Seite" -# Users and groups selection for account access -#: ../../../../inc/tpl/login.php:85 +# Unable to write on configuration file +#: ../../../../web/ConfigC.class.php:185 #, fuzzy -msgid "Selección de grupos y usuarios de acceso a cuentas" -msgstr "Users and groups selection for account access" +msgid "No se encontró archivo de exportación" +msgstr "Konfigurationsdatei kann nicht geschrieben werden" -# Drag&Drop for files uploading -#: ../../../../inc/tpl/login.php:86 +# Configuration +#: ../../../../web/ConfigC.class.php:230 #, fuzzy -msgid "Drag&Drop para subida de archivos" -msgstr "Drag&Drop for files uploading" +msgid "Información" +msgstr "Zeige Informationen über die Anwendung" -# Copy Password to Clipboard -#: ../../../../inc/tpl/login.php:87 -#, fuzzy -msgid "Copiar clave al portapapeles" -msgstr "Copy password to clipboard" +# Event log cleared +#: ../../../../web/EventlogC.class.php:91 +msgid "Registro de eventos vaciado" +msgstr "Protokol gelöscht" -# Accounts history and restore points -#: ../../../../inc/tpl/login.php:88 -#, fuzzy -msgid "Historial de cuentas y restauración" -msgstr "Accounts history and restore points" +# Error on clearing event log +#: ../../../../web/EventlogC.class.php:93 +msgid "Error al vaciar el registro de eventos" +msgstr "Fehler beim Löschen des Protokols" -# New categories and customers management -#: ../../../../inc/tpl/login.php:89 -#, fuzzy -msgid "Nueva gestión de categorías y clientes" -msgstr "New categories and customers management" +# Application Admin +#: ../../../../web/MainC.class.php:131 +#: ../../../../web/UsersMgmtC.class.php:100 +msgid "Admin Aplicación" +msgstr "Anwendungs-Administrator" -# Reset password function for users -#: ../../../../inc/tpl/login.php:90 -#, fuzzy -msgid "Función de olvido de claves para usuarios" -msgstr "Reset password function for users" +# Search +#: ../../../../web/MainC.class.php:149 +msgid "Buscar" +msgstr "Suchen" -# Improved Active Directory and LDAP integration -#: ../../../../inc/tpl/login.php:91 -#, fuzzy -msgid "Integración con Active Directory y LDAP mejorada" -msgstr "Improved Active Directory and LDAP integration" +# Users Management +#: ../../../../web/MainC.class.php:161 +#: ../../../../web/UsersMgmtC.class.php:163 +msgid "Gestión de Usuarios" +msgstr "Benutzerverwaltung" -# Email notifications with authentication -#: ../../../../inc/tpl/login.php:92 -#, fuzzy -msgid "Autentificación para notificaciones por correo" -msgstr "Email notifications with authentication" +# Customer and Categories management +#: ../../../../web/MainC.class.php:167 +msgid "Gestión de Clientes y Categorías" +msgstr "Kunden- und Kategorienverwaltung" -# Global account searching for unprivileged users -#: ../../../../inc/tpl/login.php:93 -#, fuzzy -msgid "Búsqueda global de cuentas para usuarios sin permisos" -msgstr "Global account searching for unprivileged users" +# Event Log +#: ../../../../web/MainC.class.php:179 +#: ../../../../inc/themes/classic/eventlog.inc:4 +#: ../../../../inc/themes/material-blue/eventlog.inc:3 +msgid "Registro de Eventos" +msgstr "Protokol" -# Request for Account Modification -#: ../../../../inc/tpl/login.php:94 +#: ../../../../web/MainC.class.php:199 +msgid "Nuevo estilo visual basado en Material Design Lite by Google" +msgstr "" + +#: ../../../../web/MainC.class.php:200 #, fuzzy -msgid "Solicitudes de modificación de cuentas para usuarios sin permisos" -msgstr "Requests for account modification for unprivileged users" +msgid "Usuarios en múltiples grupos" +msgstr "Importiere Benutzergruppen" + +# Customers Management +#: ../../../../web/MainC.class.php:201 +#, fuzzy +msgid "Previsualización de imágenes" +msgstr "Kontoänderung initiiert" + +#: ../../../../web/MainC.class.php:202 +msgid "Mostrar claves como imágenes" +msgstr "" + +#: ../../../../web/MainC.class.php:203 +msgid "Campos personalizados" +msgstr "" + +# Query error +#: ../../../../web/MainC.class.php:204 +#, fuzzy +msgid "API de consultas" +msgstr "Kontoänderung initiiert" + +# Enable Authentication +#: ../../../../web/MainC.class.php:205 +#: ../../../../inc/themes/classic/2fa.inc:9 +#: ../../../../inc/themes/material-blue/2fa.inc:9 +#: ../../../../inc/themes/material-blue/security.inc:13 +#, fuzzy +msgid "Autentificación en 2 pasos" +msgstr "aktivieren Sie Authentifizierung" + +#: ../../../../web/MainC.class.php:206 +#, fuzzy +msgid "Complejidad de generador de claves" +msgstr "Zufallszahlengenerator konnte nicht gefunden werden" + +#: ../../../../web/MainC.class.php:207 +msgid "Consultas especiales" +msgstr "" + +#: ../../../../web/MainC.class.php:208 +#, fuzzy +msgid "Exportación a XML" +msgstr "XML-Datei wird nicht unterstützt" + +# Master password too short +#: ../../../../web/MainC.class.php:209 +#, fuzzy +msgid "Clave maestra temporal" +msgstr "Master-Passwort" # Accounts import from KeePass, KeePassX and CSV -#: ../../../../inc/tpl/login.php:95 +#: ../../../../web/MainC.class.php:210 #, fuzzy -msgid "Importación de cuentas desde KeePass, KeePassX y CSV" +msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV" msgstr "Accounts import from KeePass, KeePassX and CSV" -# Clone account function -#: ../../../../inc/tpl/login.php:96 -#, fuzzy -msgid "Función de copiar cuentas" -msgstr "Clone account function" - # Code optimization and faster loading -#: ../../../../inc/tpl/login.php:97 +#: ../../../../web/MainC.class.php:211 #, fuzzy msgid "Optimización del código y mayor rapidez de carga" msgstr "Code optimization and faster loading" # Improved security to prevent XSS and SQL injection -#: ../../../../inc/tpl/login.php:98 +#: ../../../../web/MainC.class.php:212 #, fuzzy msgid "Mejoras de seguridad en XSS e inyección SQL" msgstr "Improved security to prevent XSS and SQL injection" -# New Features -#: ../../../../inc/tpl/login.php:101 ../../../../inc/tpl/login.php:102 -#, fuzzy -msgid "Nuevas Características" -msgstr "New Features" - -# Customer name -#: ../../../../inc/tpl/customers.php:41 -msgid "Nombre del cliente" -msgstr "Kundenname" - -# Customer description -#: ../../../../inc/tpl/customers.php:47 -msgid "Descripción del cliente" -msgstr "Beschreibung des Kunden" - -# Change user password -#: ../../../../inc/tpl/main.php:37 -msgid "Cambiar clave de usuario" -msgstr "Benutzerpasswort ändern" - -# Logout -#: ../../../../inc/tpl/main.php:44 -msgid "Salir" -msgstr "Abmelden" - -# Search -#: ../../../../inc/tpl/main.php:52 -msgid "Buscar" -msgstr "Suchen" - -# Customer and Categories management -#: ../../../../inc/tpl/main.php:55 -msgid "Gestión de Clientes y Categorías" -msgstr "Kunden- und Kategorienverwaltung" - -# Event Log -#: ../../../../inc/tpl/main.php:57 ../../../../inc/tpl/eventlog.php:37 -msgid "Registro de Eventos" -msgstr "Protokol" - -# Profile name -#: ../../../../inc/tpl/profiles.php:41 -msgid "Nombre del perfil" -msgstr "Profilname" - -# View account details -#: ../../../../inc/tpl/profiles.php:48 -msgid "Ver detalles de cuenta" -msgstr "Kontodetails anzeigen" - -# View -#: ../../../../inc/tpl/profiles.php:48 -msgid "Ver" -msgstr "Ansehen" - -# View account password -#: ../../../../inc/tpl/profiles.php:50 -msgid "Ver clave de cuenta" -msgstr "Passwort anzeigen" - -# View account history -#: ../../../../inc/tpl/profiles.php:53 -msgid "Ver historial de cuenta" -msgstr "Konto-Historie anzeigen" - -# View History -#: ../../../../inc/tpl/profiles.php:53 -msgid "Ver Historial" -msgstr "Protokol ansehen" - -# Edit account -#: ../../../../inc/tpl/profiles.php:55 -msgid "Editar cuenta" -msgstr "Konto ändern" - -# Edit -#: ../../../../inc/tpl/profiles.php:55 -msgid "Editar" -msgstr "Ändern" - -# Edit account password -#: ../../../../inc/tpl/profiles.php:58 -msgid "Editar clave de cuenta" -msgstr "Passwort des Kontos ändern" - -# Edit Password -#: ../../../../inc/tpl/profiles.php:58 -msgid "Editar Clave" -msgstr "Passwort ändern" - -# Add new account -#: ../../../../inc/tpl/profiles.php:60 -msgid "Añadir nueva cuenta" -msgstr "Konto hinzufügen" - -# Add -#: ../../../../inc/tpl/profiles.php:60 -msgid "Añadir" -msgstr "Hinzufügen" - -# Delete account -#: ../../../../inc/tpl/profiles.php:63 -msgid "Borrar cuenta" -msgstr "Konto löschen" - -# Delete -#: ../../../../inc/tpl/profiles.php:63 -msgid "Borrar" -msgstr "Löschen" - -# View account files -#: ../../../../inc/tpl/profiles.php:65 -msgid "Ver archivos de cuenta" -msgstr "Dateien des Kontos anzeigen" - -# Files -#: ../../../../inc/tpl/profiles.php:65 ../../../../inc/tpl/accounts.php:358 -msgid "Archivos" -msgstr "Dateien" - -# General configuration -#: ../../../../inc/tpl/profiles.php:74 -msgid "Configuración general" -msgstr "Allgemeine Konfiguration" - -# General -#: ../../../../inc/tpl/profiles.php:74 -msgid "General" -msgstr "Allgemein" - -# Change master password -#: ../../../../inc/tpl/profiles.php:76 -msgid "Cambiar clave maestra" -msgstr "Master-Passwort ändern" - -# Make backup -#: ../../../../inc/tpl/profiles.php:79 -msgid "Realizar copia de seguridad" -msgstr "Backup erstellen" - -# Backup -#: ../../../../inc/tpl/profiles.php:79 -msgid "Backup" -msgstr "Sicherung" - -# Management -#: ../../../../inc/tpl/profiles.php:85 -msgid "Gestión" -msgstr "Verwaltung" - -# Users management -#: ../../../../inc/tpl/profiles.php:88 -msgid "Gestión de usuarios" -msgstr "Benutzerverwaltung" - -# Groups management -#: ../../../../inc/tpl/profiles.php:90 -msgid "Gestión de grupos" -msgstr "Gruppenverwaltung" - -# Groups -#: ../../../../inc/tpl/profiles.php:90 ../../../../inc/tpl/accounts.php:312 -msgid "Grupos" -msgstr "Gruppen" - -# Profiles management -#: ../../../../inc/tpl/profiles.php:93 -msgid "Gestión de perfiles" -msgstr "Profilverwaltung" - -# Profiles -#: ../../../../inc/tpl/profiles.php:93 -msgid "Perfiles" -msgstr "Profile" - -# Categories management -#: ../../../../inc/tpl/profiles.php:95 -msgid "Gestión de categorías" -msgstr "Kategorienverwaltung" - -# Categories -#: ../../../../inc/tpl/profiles.php:95 -msgid "Categorías" -msgstr "Kategorien" - -# Customers Management -#: ../../../../inc/tpl/profiles.php:98 -msgid "Gestión de clientes" -msgstr "Kundenverwaltung" - -# Customers -#: ../../../../inc/tpl/profiles.php:98 -msgid "Clientes" -msgstr "Kunden" - -# Others -#: ../../../../inc/tpl/profiles.php:104 -msgid "Otros" -msgstr "Andere" - -# View event log -#: ../../../../inc/tpl/profiles.php:107 -msgid "Ver log de eventos" -msgstr "Protokol anzeigen" - -# Event Log -#: ../../../../inc/tpl/profiles.php:107 -msgid "Log de Eventos" -msgstr "Protokol" - -# Clear -#: ../../../../inc/tpl/search.php:59 -msgid "Limpiar" -msgstr "Löschen" - -# Text to search -#: ../../../../inc/tpl/search.php:60 -msgid "Texto a buscar" -msgstr "Suchbegriff" - -# Global search -#: ../../../../inc/tpl/search.php:63 -msgid "Búsqueda global" -msgstr "Globale Suche" - -# Accounts Per Page -#: ../../../../inc/tpl/search.php:77 -msgid "CPP" -msgstr "KPS" - -# Accounts per page -#: ../../../../inc/tpl/search.php:77 -msgid "Cuentas por página" -msgstr "Konten pro Seite" - -# Select Customer -#: ../../../../inc/tpl/search.php:84 ../../../../inc/tpl/accounts.php:572 -msgid "Seleccionar Cliente" -msgstr "Kunde auswählen" - -# No results -#: ../../../../inc/tpl/search.php:84 ../../../../inc/tpl/search.php:85 -#: ../../../../inc/tpl/accounts.php:574 ../../../../inc/tpl/accounts.php:579 -#: ../../../../inc/tpl/config.php:567 ../../../../inc/tpl/config.php:572 -#: ../../../../inc/tpl/users.php:220 ../../../../inc/tpl/users.php:225 -msgid "Sin resultados" -msgstr "Kein Ergebnis" - -# Select category -#: ../../../../inc/tpl/search.php:85 ../../../../inc/tpl/accounts.php:577 -msgid "Seleccionar Categoría" -msgstr "Kategorie auswählen" - -# Installation finished -#: ../../../../inc/tpl/install.php:35 -msgid "Instalación finalizada" -msgstr "Installation beendet" - -# Click here to access -#: ../../../../inc/tpl/install.php:36 -msgid "Pulse aquí para acceder" -msgstr "" -"Klicken Sie hier für den Zugriff" - -# Installation -#: ../../../../inc/tpl/install.php:46 -msgid "Instalación " -msgstr "Installation" - # This PHP version is vulnerable to NULL Byte attack CVE-2006-7243) -#: ../../../../inc/tpl/install.php:57 +#: ../../../../web/MainC.class.php:254 msgid "La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)" msgstr "Die PHP-Version is verwundbar für 'NULL Byte attack (CVE-2006-7243)'" # Please update PHP version to run sysPass in a secure way -#: ../../../../inc/tpl/install.php:58 +#: ../../../../web/MainC.class.php:255 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." +msgstr "Bitte aktualisieren Sie ihre PHP Installation, um sysPass sicher betreiben zu können." # Cannot find random number generator. -#: ../../../../inc/tpl/install.php:62 +#: ../../../../web/MainC.class.php:262 msgid "No se encuentra el generador de números aleatorios." msgstr "Zufallszahlengenerator konnte nicht gefunden werden" # Without this function, an attacker could take your account on password reset. -#: ../../../../inc/tpl/install.php:63 -msgid "" -"Sin esta función un atacante puede utilizar su cuenta al resetear la clave" +#: ../../../../web/MainC.class.php:263 +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." + +# Installation finished +#: ../../../../web/MainC.class.php:282 +msgid "Instalación finalizada" +msgstr "Installation beendet" + +# Click here to access +#: ../../../../web/MainC.class.php:283 +msgid "Pulse aquí para acceder" +msgstr "Klicken Sie hier für den Zugriff" + +# Download new version +#: ../../../../web/MainC.class.php:378 +msgid "Descargar nueva versión" +msgstr "Neu Version herunterladen" + +# Sort by Customer +#: ../../../../web/SearchC.class.php:270 +msgid "Ordenar por Cliente" +msgstr "Nach Kunde sortieren" + +# Sort by Name +#: ../../../../web/SearchC.class.php:276 +msgid "Ordenar por Nombre" +msgstr "Nach Name sortieren" + +# Sort by Category +#: ../../../../web/SearchC.class.php:282 +msgid "Ordenar por Categoría" +msgstr "Nach Kategorie sortieren" + +# Sort by Username +#: ../../../../web/SearchC.class.php:288 +msgid "Ordenar por Usuario" +msgstr "Nach Benutzername sortieren" + +# Sort by URL / IP +#: ../../../../web/SearchC.class.php:294 +msgid "Ordenar por URL / IP" +msgstr "Nach URL/IP sortieren" + +# URL / IP +#: ../../../../web/SearchC.class.php:295 +#: ../../../../inc/themes/classic/account.inc:58 +#: ../../../../inc/themes/classic/editpass.inc:16 +#: ../../../../inc/themes/classic/request.inc:13 +#: ../../../../inc/themes/classic/search.inc:59 +#: ../../../../inc/themes/material-blue/account.inc:66 +#: ../../../../inc/themes/material-blue/editpass.inc:17 +#: ../../../../inc/themes/material-blue/request.inc:15 +#: ../../../../inc/themes/material-blue/search.inc:62 +msgid "URL / IP" +msgstr "URL/IP" + +# Properties +#: ../../../../web/UsersMgmtC.class.php:91 +msgid "Propiedades" +msgstr "Eigenschaften" + +# Account Admin +#: ../../../../web/UsersMgmtC.class.php:104 +msgid "Admin Cuentas" +msgstr "Konto-Administrator" + +# LDAP User +#: ../../../../web/UsersMgmtC.class.php:108 +#: ../../../../inc/themes/classic/users.inc:28 +#: ../../../../inc/themes/material-blue/users.inc:34 +msgid "Usuario de LDAP" +msgstr "LDAP-Benutzer" + +# Disabled +#: ../../../../web/UsersMgmtC.class.php:112 +#: ../../../../inc/themes/classic/users.inc:113 +#: ../../../../inc/themes/material-blue/users.inc:151 +#: ../../../../inc/themes/material-blue/users.inc:154 +msgid "Deshabilitado" +msgstr "inaktiv" + +# View User Details +#: ../../../../web/UsersMgmtC.class.php:129 +msgid "Ver Detalles de Usuario" +msgstr "Benutzerdetails anzeigen" + +# Change user password +#: ../../../../web/UsersMgmtC.class.php:143 +msgid "Cambiar Clave de Usuario" +msgstr "Benutzerpasswort Ändern" + +# Groups Management +#: ../../../../web/UsersMgmtC.class.php:222 +msgid "Gestión de Grupos" +msgstr "Gruppenverwaltung" + +# View User Details +#: ../../../../web/UsersMgmtC.class.php:260 +#, fuzzy +msgid "Ver Detalles de Perfil" +msgstr "Benutzerdetails anzeigen" + +# Profiles Management +#: ../../../../web/UsersMgmtC.class.php:287 +msgid "Gestión de Perfiles" +msgstr "Profilverwaltung" + +#: ../../../../web/UsersMgmtC.class.php:407 +#, fuzzy +msgid "Ver token de Autorización" +msgstr "Benutzerdetails anzeigen" + +# Users Management +#: ../../../../web/UsersMgmtC.class.php:434 +#, fuzzy +msgid "Gestión de Autorizaciones API" +msgstr "Dateiverwaltung gesperrt" + +# Configuration updated +#: ../../../../web/UsersMgmtC.class.php:455 +#, fuzzy +msgid "Token de autorización visualizado" +msgstr "Konfiguration aktualisiert" + +#: ../../../../web/UsersMgmtC.class.php:456 +msgid "Autorizaciones" msgstr "" -"Ohne diese Funktion könnte an Angreifer Ihren Zugang oder Ihr Passwort " -"zurücksetzen." -# Create admin account -#: ../../../../inc/tpl/install.php:85 -msgid "Crear cuenta de admin de sysPass" -msgstr "Administrator-Konto anlegen" +# Security +#: ../../../../web/UsersPrefsC.class.php:84 +#: ../../../../inc/themes/classic/mail.inc:63 +#: ../../../../inc/themes/material-blue/mail.inc:86 +msgid "Seguridad" +msgstr "Sicherheit" -# sysPass administrator's login -#: ../../../../inc/tpl/install.php:88 -msgid "Login del usuario administrador de sysPass" -msgstr "sysPass Administrator Anmeldung" +# Enter Security Code +#: ../../../../inc/themes/classic/2fa.inc:14 +#: ../../../../inc/themes/material-blue/2fa.inc:14 +#, fuzzy +msgid "Introducir código" +msgstr "Sicherheitscode eingeben" -# Show Password -#: ../../../../inc/tpl/install.php:96 ../../../../inc/tpl/install.php:97 -#: ../../../../inc/tpl/install.php:111 ../../../../inc/tpl/install.php:112 -#: ../../../../inc/tpl/install.php:137 ../../../../inc/tpl/install.php:138 -msgid "Mostrar Clave" -msgstr "Passwort anzeigen" - -# DB Configuration -#: ../../../../inc/tpl/install.php:124 -msgid "Configurar BBDD" -msgstr "Datenbank-Konfiguration" - -# User login with with database administrative rights -#: ../../../../inc/tpl/install.php:130 -msgid "Login de usuario con permisos de administrador de MySQL" -msgstr "Benutzer-Anmeldung mit administrativen Datenbank-Rechten" - -# sysPass database name -#: ../../../../inc/tpl/install.php:146 -msgid "Nombre de la base de datos para sysPass" -msgstr "Name der sysPass-Datenbank" - -# sysPass database server name -#: ../../../../inc/tpl/install.php:155 -msgid "Nombre del servidor de la base de datos de sysPass" -msgstr "Server der sysPass-Datenbank eingeben" - -# It does not create or verify the user's permissions on the DB -#: ../../../../inc/tpl/install.php:165 -msgid "No crea ni verifica los permisos del usuario sobre la BBDD" -msgstr "Zugangsberechtigungen zur DB werden weder angelegt nocht überprüft" - -# Hosting Mode -#: ../../../../inc/tpl/install.php:167 ../../../../inc/tpl/install.php:185 -#: ../../../../inc/tpl/install.php:187 -msgid "Modo Hosting" -msgstr "Hosting-Modus" - -# Install -#: ../../../../inc/tpl/install.php:174 -msgid "Instalar" -msgstr "Installieren" - -# Edit Account Password -#: ../../../../inc/tpl/editpass.php:35 ../../../../inc/tpl/accounts.php:543 -msgid "Modificar Clave de Cuenta" -msgstr "Konto-Passwort ändern" - -# The generated password will be shown here -#: ../../../../inc/tpl/editpass.php:60 ../../../../inc/tpl/accounts.php:254 -msgid "La clave generada se mostrará aquí" -msgstr "Das erzeugte Passwort wird hier gezeigt" - -# Edit Account -#: ../../../../inc/tpl/accounts.php:63 -msgid "Editar Cuenta" -msgstr "Konto ändern" +# Password (Verify) +#: ../../../../inc/themes/classic/2fa.inc:26 +#, fuzzy +msgid "Verificar" +msgstr "Passwort (Wiederholung)" # Account name -#: ../../../../inc/tpl/accounts.php:177 +#: ../../../../inc/themes/classic/account.inc:14 +#: ../../../../inc/themes/material-blue/account.inc:21 msgid "Nombre de cuenta" msgstr "Kontoname" # Search down or enter -#: ../../../../inc/tpl/accounts.php:196 +#: ../../../../inc/themes/classic/account.inc:35 msgid "Buscar en desplegable o introducir" msgstr "Weitersuchen" # Access URL or IP -#: ../../../../inc/tpl/accounts.php:222 +#: ../../../../inc/themes/classic/account.inc:61 +#: ../../../../inc/themes/material-blue/account.inc:72 msgid "URL o IP de acceso" msgstr "Auf URL/IP zugreifen" # Access user -#: ../../../../inc/tpl/accounts.php:238 +#: ../../../../inc/themes/classic/account.inc:73 +#: ../../../../inc/themes/material-blue/account.inc:86 msgid "Usuario de acceso" msgstr "Benutzer für Zugriff" +# Password (repeat) +#: ../../../../inc/themes/classic/account.inc:90 +#: ../../../../inc/themes/classic/editpass.inc:32 +#: ../../../../inc/themes/classic/users.inc:83 +#: ../../../../inc/themes/classic/userspass.inc:19 +#: ../../../../inc/themes/classic/userspass.inc:21 +#: ../../../../inc/themes/material-blue/account.inc:105 +#: ../../../../inc/themes/material-blue/editpass.inc:36 +#: ../../../../inc/themes/material-blue/install.inc:64 +#: ../../../../inc/themes/material-blue/users.inc:102 +#: ../../../../inc/themes/material-blue/users.inc:109 +#: ../../../../inc/themes/material-blue/userspass.inc:19 +#: ../../../../inc/themes/material-blue/userspass.inc:25 +msgid "Clave (repetir)" +msgstr "Passwort (Wiederholung)" + +# Notes +#: ../../../../inc/themes/classic/account.inc:97 +#: ../../../../inc/themes/classic/search.inc:75 +#: ../../../../inc/themes/classic/users.inc:91 +#: ../../../../inc/themes/material-blue/account.inc:116 +#: ../../../../inc/themes/material-blue/search.inc:82 +#: ../../../../inc/themes/material-blue/users.inc:116 +msgid "Notas" +msgstr "Bemerkungen" + # Notes about the account -#: ../../../../inc/tpl/accounts.php:271 +#: ../../../../inc/themes/classic/account.inc:99 +#: ../../../../inc/themes/material-blue/account.inc:121 +#: ../../../../inc/themes/material-blue/users.inc:123 msgid "Notas sobre la cuenta" msgstr "Bemerkungen zum Konto" # Permissions -#: ../../../../inc/tpl/accounts.php:277 +#: ../../../../inc/themes/classic/account.inc:105 +#: ../../../../inc/themes/material-blue/account.inc:130 +#: ../../../../inc/themes/material-blue/search.inc:75 msgid "Permisos" msgstr "Berechtigungen" # Enable Edit -#: ../../../../inc/tpl/accounts.php:304 ../../../../inc/tpl/accounts.php:335 +#: ../../../../inc/themes/classic/account.inc:132 +#: ../../../../inc/themes/classic/account.inc:163 +#: ../../../../inc/themes/material-blue/account.inc:159 +#: ../../../../inc/themes/material-blue/account.inc:191 msgid "Hablitar edición" msgstr "Erlaube Änderungen" # Drop files here (max. 5) or click to select -#: ../../../../inc/tpl/accounts.php:371 +#: ../../../../inc/themes/classic/account.inc:201 +#: ../../../../inc/themes/material-blue/account.inc:243 msgid "Soltar archivos aquí (max. 5) o click para seleccionar" msgstr "Dateien hier fallen lassen (max. 5) oder zum selektieren anklicken" # Maximum file size -#: ../../../../inc/tpl/accounts.php:371 ../../../../inc/tpl/config.php:193 +#: ../../../../inc/themes/classic/account.inc:201 +#: ../../../../inc/themes/classic/config.inc:193 +#: ../../../../inc/themes/material-blue/account.inc:243 +#: ../../../../inc/themes/material-blue/config.inc:274 msgid "Tamaño máximo de archivo" msgstr "Maximale Dateigröße" # History -#: ../../../../inc/tpl/accounts.php:383 +#: ../../../../inc/themes/classic/account.inc:213 +#: ../../../../inc/themes/material-blue/account.inc:255 msgid "Historial" msgstr "Protokol" # Select date -#: ../../../../inc/tpl/accounts.php:398 +#: ../../../../inc/themes/classic/account.inc:232 +#: ../../../../inc/themes/material-blue/account.inc:274 msgid "Seleccionar fecha" msgstr "Datum auswählen" # Last Modification -#: ../../../../inc/tpl/accounts.php:405 ../../../../inc/tpl/users.php:183 +#: ../../../../inc/themes/classic/account.inc:241 +#: ../../../../inc/themes/classic/users.inc:164 +#: ../../../../inc/themes/material-blue/account.inc:283 +#: ../../../../inc/themes/material-blue/users.inc:208 msgid "Última Modificación" msgstr "Letzte Änderung" # by -#: ../../../../inc/tpl/accounts.php:407 +#: ../../../../inc/themes/classic/account.inc:243 +#: ../../../../inc/themes/material-blue/account.inc:285 msgid "por" msgstr "durch" # Visits -#: ../../../../inc/tpl/accounts.php:417 +#: ../../../../inc/themes/classic/account.inc:286 +#: ../../../../inc/themes/material-blue/account.inc:332 msgid "Visitas" msgstr "Besuche" # Date Added -#: ../../../../inc/tpl/accounts.php:421 +#: ../../../../inc/themes/classic/account.inc:290 +#: ../../../../inc/themes/material-blue/account.inc:336 msgid "Fecha Alta" msgstr "Datum hinzugefügt" # Creator -#: ../../../../inc/tpl/accounts.php:425 +#: ../../../../inc/themes/classic/account.inc:294 +#: ../../../../inc/themes/material-blue/account.inc:340 msgid "Creador" msgstr "Erzeuger" # Main Group -#: ../../../../inc/tpl/accounts.php:429 +#: ../../../../inc/themes/classic/account.inc:298 +#: ../../../../inc/themes/material-blue/account.inc:200 +#: ../../../../inc/themes/material-blue/account.inc:344 msgid "Grupo Principal" msgstr "Hauptgruppe" # Secondary Users -#: ../../../../inc/tpl/accounts.php:434 +#: ../../../../inc/themes/classic/account.inc:303 +#: ../../../../inc/themes/material-blue/account.inc:349 msgid "Usuarios Secundarios" msgstr "Unter-Benutzer" # Secondary Groups -#: ../../../../inc/tpl/accounts.php:455 +#: ../../../../inc/themes/classic/account.inc:322 +#: ../../../../inc/themes/material-blue/account.inc:368 msgid "Grupos Secundarios" msgstr "Untergruppe" # Date Modified -#: ../../../../inc/tpl/accounts.php:477 +#: ../../../../inc/themes/classic/account.inc:342 +#: ../../../../inc/themes/material-blue/account.inc:388 msgid "Fecha Edición" msgstr "Änderungsdatum" # Editor -#: ../../../../inc/tpl/accounts.php:481 +#: ../../../../inc/themes/classic/account.inc:346 +#: ../../../../inc/themes/material-blue/account.inc:392 msgid "Editor" msgstr "Editor" -# View Current -#: ../../../../inc/tpl/accounts.php:503 -msgid "Ver Actual" -msgstr "Ansehen" - # Restore account from this point -#: ../../../../inc/tpl/accounts.php:515 +#: ../../../../inc/themes/classic/account.inc:373 +#: ../../../../inc/themes/material-blue/account.inc:455 msgid "Restaurar cuenta desde este punto" msgstr "Wiederherstellen Konto von diesem Punkt" +# Copy Password to Clipboard +#: ../../../../inc/themes/classic/account.inc:385 +#: ../../../../inc/themes/classic/account.inc:468 +#: ../../../../inc/themes/classic/search.inc:105 +#: ../../../../inc/themes/classic/search.inc:184 +#: ../../../../inc/themes/material-blue/account.inc:422 +#: ../../../../inc/themes/material-blue/account.inc:492 +#: ../../../../inc/themes/material-blue/search.inc:118 +#: ../../../../inc/themes/material-blue/search.inc:197 +msgid "Copiar Clave en Portapapeles" +msgstr "Passwort in die Zwischenablage kopieren" + +# View Current +#: ../../../../inc/themes/classic/account.inc:401 +#: ../../../../inc/themes/material-blue/account.inc:435 +msgid "Ver Actual" +msgstr "Ansehen" + +# Back +#: ../../../../inc/themes/classic/account.inc:406 +#: ../../../../inc/themes/classic/editpass.inc:46 +#: ../../../../inc/themes/classic/passreset.inc:46 +#: ../../../../inc/themes/material-blue/passreset.inc:43 +msgid "Volver" +msgstr "Zurück" + +# Edit Account +#: ../../../../inc/themes/classic/account.inc:413 +#: ../../../../inc/themes/classic/search.inc:117 +#: ../../../../inc/themes/material-blue/account.inc:445 +#: ../../../../inc/themes/material-blue/search.inc:130 +msgid "Modificar Cuenta" +msgstr "Konto ändern" + +# Request Modification +#: ../../../../inc/themes/classic/account.inc:418 +#: ../../../../inc/themes/classic/search.inc:138 +#: ../../../../inc/themes/material-blue/account.inc:449 +#: ../../../../inc/themes/material-blue/search.inc:150 +msgid "Solicitar Modificación" +msgstr "Änderung initiiert" + +# Save +#: ../../../../inc/themes/classic/account.inc:425 +#: ../../../../inc/themes/classic/categories.inc:62 +#: ../../../../inc/themes/classic/config.inc:275 +#: ../../../../inc/themes/classic/customers.inc:62 +#: ../../../../inc/themes/classic/customfields.inc:63 +#: ../../../../inc/themes/classic/editpass.inc:51 +#: ../../../../inc/themes/classic/encryption.inc:102 +#: ../../../../inc/themes/classic/groups.inc:77 +#: ../../../../inc/themes/classic/ldap.inc:229 +#: ../../../../inc/themes/classic/mail.inc:107 +#: ../../../../inc/themes/classic/profiles.inc:168 +#: ../../../../inc/themes/classic/security.inc:58 +#: ../../../../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:461 +#: ../../../../inc/themes/material-blue/categories.inc:72 +#: ../../../../inc/themes/material-blue/config.inc:390 +#: ../../../../inc/themes/material-blue/customers.inc:73 +#: ../../../../inc/themes/material-blue/customfields.inc:74 +#: ../../../../inc/themes/material-blue/editpass.inc:60 +#: ../../../../inc/themes/material-blue/groups.inc:88 +#: ../../../../inc/themes/material-blue/ldap.inc:257 +#: ../../../../inc/themes/material-blue/mail.inc:145 +#: ../../../../inc/themes/material-blue/profiles.inc:177 +#: ../../../../inc/themes/material-blue/security.inc:64 +#: ../../../../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" + # Select secondary groups -#: ../../../../inc/tpl/accounts.php:582 +#: ../../../../inc/themes/classic/account.inc:435 +#: ../../../../inc/themes/material-blue/account.inc:471 msgid "Seleccionar grupos secundarios" msgstr "Untergruppe auswählen" # Select users -#: ../../../../inc/tpl/accounts.php:585 +#: ../../../../inc/themes/classic/account.inc:439 +#: ../../../../inc/themes/material-blue/account.inc:474 msgid "Seleccionar usuarios" msgstr "Benutzer auswählen" +# Password Copied to Clipboard +#: ../../../../inc/themes/classic/account.inc:472 +#: ../../../../inc/themes/classic/search.inc:188 +#: ../../../../inc/themes/material-blue/account.inc:496 +#: ../../../../inc/themes/material-blue/search.inc:201 +msgid "Clave Copiada al Portapapeles" +msgstr "Passwort in die Zwischenablage kopiert" + +# Result +#: ../../../../inc/themes/classic/backup.inc:10 +#: ../../../../inc/themes/classic/backup.inc:67 +#: ../../../../inc/themes/material-blue/backup.inc:10 +#: ../../../../inc/themes/material-blue/backup.inc:71 +msgid "Resultado" +msgstr "Ergebnis" + +# Download Current +#: ../../../../inc/themes/classic/backup.inc:18 +#: ../../../../inc/themes/classic/backup.inc:75 +#: ../../../../inc/themes/material-blue/backup.inc:18 +#: ../../../../inc/themes/material-blue/backup.inc:79 +msgid "Descargar Actual" +msgstr "Herunterladen" + +# There're no backups for download +#: ../../../../inc/themes/classic/backup.inc:31 +#: ../../../../inc/themes/material-blue/backup.inc:31 +msgid "No hay backups para descargar" +msgstr "Es existieren keine Backups zum Herunterladen" + +#: ../../../../inc/themes/classic/backup.inc:45 +#: ../../../../inc/themes/classic/backup.inc:49 +#: ../../../../inc/themes/classic/backup.inc:113 +#: ../../../../inc/themes/classic/backup.inc:117 +#: ../../../../inc/themes/classic/encryption.inc:93 +#: ../../../../inc/themes/classic/encryption.inc:97 +#: ../../../../inc/themes/classic/encryption.inc:152 +#: ../../../../inc/themes/classic/encryption.inc:156 +#: ../../../../inc/themes/classic/import.inc:15 +#: ../../../../inc/themes/classic/import.inc:37 +#: ../../../../inc/themes/classic/import.inc:51 +#: ../../../../inc/themes/classic/import.inc:97 +#: ../../../../inc/themes/classic/import.inc:118 +#: ../../../../inc/themes/classic/import.inc:170 +#: ../../../../inc/themes/classic/import.inc:174 +#: ../../../../inc/themes/classic/js-common.inc:13 +#: ../../../../inc/themes/classic/ldap.inc:13 +#: ../../../../inc/themes/classic/ldap.inc:33 +#: ../../../../inc/themes/classic/ldap.inc:58 +#: ../../../../inc/themes/classic/ldap.inc:82 +#: ../../../../inc/themes/classic/ldap.inc:93 +#: ../../../../inc/themes/classic/ldap.inc:117 +#: ../../../../inc/themes/classic/ldap.inc:145 +#: ../../../../inc/themes/classic/ldap.inc:166 +#: ../../../../inc/themes/classic/ldap.inc:187 +#: ../../../../inc/themes/classic/wiki.inc:12 +#: ../../../../inc/themes/classic/wiki.inc:28 +#: ../../../../inc/themes/classic/wiki.inc:55 +#: ../../../../inc/themes/classic/wiki.inc:82 +#: ../../../../inc/themes/material-blue/backup.inc:47 +#: ../../../../inc/themes/material-blue/backup.inc:51 +#: ../../../../inc/themes/material-blue/backup.inc:129 +#: ../../../../inc/themes/material-blue/backup.inc:133 +#: ../../../../inc/themes/material-blue/encryption.inc:107 +#: ../../../../inc/themes/material-blue/encryption.inc:111 +#: ../../../../inc/themes/material-blue/encryption.inc:171 +#: ../../../../inc/themes/material-blue/encryption.inc:175 +#: ../../../../inc/themes/material-blue/import.inc:99 +#: ../../../../inc/themes/material-blue/import.inc:103 +#: ../../../../inc/themes/material-blue/js-common.inc:11 +#, fuzzy +msgid "Ayuda" +msgstr "Hilfe :: FAQ :: Changelog" + +#: ../../../../inc/themes/classic/backup.inc:50 +#: ../../../../inc/themes/material-blue/backup.inc:52 +msgid "La copia de seguridad permite guardar y descargar tanto la base de datos de sysPass como los archivos de la aplicación y su configuración." +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:52 +#: ../../../../inc/themes/material-blue/backup.inc:54 +msgid "Con este método es posible guardar todos los datos de sysPass en otro lugar o utilizarlos para hacer la aplicación portable." +msgstr "" + +# Import Accounts +#: ../../../../inc/themes/classic/backup.inc:60 +#: ../../../../inc/themes/classic/backup.inc:126 +#: ../../../../inc/themes/material-blue/backup.inc:64 +#, fuzzy +msgid "Exportar Cuentas" +msgstr "Konten" + +# There're no backups for download +#: ../../../../inc/themes/classic/backup.inc:84 +#: ../../../../inc/themes/material-blue/backup.inc:88 +#, fuzzy +msgid "No hay archivos XML para descargar" +msgstr "Es existieren keine Backups zum Herunterladen" + +# Bind Password +#: ../../../../inc/themes/classic/backup.inc:90 +#: ../../../../inc/themes/material-blue/backup.inc:94 +#: ../../../../inc/themes/material-blue/backup.inc:101 +#, fuzzy +msgid "Clave de Exportación" +msgstr "Benutzerpasswort Ändern" + +# Password (repeat) +#: ../../../../inc/themes/classic/backup.inc:98 +#: ../../../../inc/themes/material-blue/backup.inc:107 +#: ../../../../inc/themes/material-blue/backup.inc:114 +#, fuzzy +msgid "Clave de Exportación (repetir)" +msgstr "Passwort (Wiederholung)" + +#: ../../../../inc/themes/classic/backup.inc:118 +#: ../../../../inc/themes/material-blue/backup.inc:134 +msgid "La exportación de cuentas permite guardar las cuentas y sus datos en formato XML para posteriormente poder ser importados en otras instancias de sysPass." +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:120 +#: ../../../../inc/themes/material-blue/backup.inc:136 +msgid "Los elementos exportados son cuentas, clientes y categorías." +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:122 +#: ../../../../inc/themes/material-blue/backup.inc:138 +msgid "Las claves de las cuentas son exportadas de forma encriptada para mayor seguridad." +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:124 +#: ../../../../inc/themes/material-blue/backup.inc:140 +msgid "Es posible establecer una clave de exportación para guardar todos los datos encriptados en el archivo XML." +msgstr "" + +# Javascript is needed in order to run correctly +#: ../../../../inc/themes/classic/body.inc:4 +#: ../../../../inc/themes/material-blue/body.inc:4 +msgid "Javascript es necesario para el correcto funcionamiento" +msgstr "Javascript muss eingeschaltet sein." + # Category name -#: ../../../../inc/tpl/categories.php:41 +#: ../../../../inc/themes/classic/categories.inc:10 +#: ../../../../inc/themes/material-blue/categories.inc:14 msgid "Nombre de la categoría" msgstr "Kategoriename" # Category description -#: ../../../../inc/tpl/categories.php:47 +#: ../../../../inc/themes/classic/categories.inc:18 +#: ../../../../inc/themes/material-blue/categories.inc:26 msgid "Descripción de la categoría" msgstr "Beschreibung der Kategorie" # Site -#: ../../../../inc/tpl/config.php:84 +#: ../../../../inc/themes/classic/config.inc:4 +#: ../../../../inc/themes/material-blue/config.inc:4 msgid "Sitio" msgstr "Site" # Language -#: ../../../../inc/tpl/config.php:92 +#: ../../../../inc/themes/classic/config.inc:10 +#: ../../../../inc/themes/material-blue/config.inc:11 msgid "Idioma" msgstr "Sprache" +#: ../../../../inc/themes/classic/config.inc:21 +#: ../../../../inc/themes/material-blue/config.inc:22 +msgid "Tema Visual" +msgstr "" + # Session timeout (s) -#: ../../../../inc/tpl/config.php:106 +#: ../../../../inc/themes/classic/config.inc:33 +#: ../../../../inc/themes/material-blue/config.inc:34 +#: ../../../../inc/themes/material-blue/config.inc:42 msgid "Timeout de sesión (s)" msgstr "Ablauf der Sitzung (s)" # Enable event log -#: ../../../../inc/tpl/config.php:114 +#: ../../../../inc/themes/classic/config.inc:42 +#: ../../../../inc/themes/material-blue/config.inc:48 msgid "Habilitar log de eventos" msgstr "Protokol einschalten" +# It saves the actions done by the application. +#: ../../../../inc/themes/classic/config.inc:46 +#: ../../../../inc/themes/material-blue/config.inc:52 +#, fuzzy +msgid "Guarda las acciones realizadas en la aplicación." +msgstr "Sichert die Aktionen der Anwendung" + # Enable debug -#: ../../../../inc/tpl/config.php:124 +#: ../../../../inc/themes/classic/config.inc:58 +#: ../../../../inc/themes/material-blue/config.inc:66 msgid "Habilitar depuración" msgstr "Debugging einschalten" +# Shows some information about application and performance. +#: ../../../../inc/themes/classic/config.inc:62 +#: ../../../../inc/themes/material-blue/config.inc:70 +#, fuzzy +msgid "Muestra información relativa a la configuración de la aplicación y rendimiento." +msgstr "Zeige Informationen über die Anwendung" + # Maintenance mode. -#: ../../../../inc/tpl/config.php:134 +#: ../../../../inc/themes/classic/config.inc:74 +#: ../../../../inc/themes/material-blue/config.inc:84 msgid "Modo mantenimiento" msgstr "Wartungsmodus" +# In this mode you cannot login to application. To disable it, you need to modify configuration file. +#: ../../../../inc/themes/classic/config.inc:78 +#: ../../../../inc/themes/material-blue/config.inc:88 +#, fuzzy +msgid "En este modo no se puede acceder a la aplicación. Para deshabilitarlo es necesario modificar el archivo de configuración." +msgstr "In diesem Modus können Sie sich nicht anmelden. Um dies zu ändern, müssen Sie die Konfigurationsdatei anpassen." + # Check for updates -#: ../../../../inc/tpl/config.php:144 +#: ../../../../inc/themes/classic/config.inc:90 +#: ../../../../inc/themes/material-blue/config.inc:102 msgid "Comprobar actualizaciones" msgstr "Nach Updates schauen" +# Check for application updates (only for administrators). +#: ../../../../inc/themes/classic/config.inc:94 +#: ../../../../inc/themes/material-blue/config.inc:106 +#, fuzzy +msgid "Comprobar actualizaciones de la aplicación (sólo para los usuarios administradores)." +msgstr "Nach Anwendungs-Updates schauen (nur Adminstratoren)." + +# Check for updates +#: ../../../../inc/themes/classic/config.inc:106 +#: ../../../../inc/themes/material-blue/config.inc:120 +#, fuzzy +msgid "Comprobar notificaciones" +msgstr "Überprüfung" + +# Check for application updates (only for administrators). +#: ../../../../inc/themes/classic/config.inc:110 +#: ../../../../inc/themes/material-blue/config.inc:124 +#, fuzzy +msgid "Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo para los usuarios administradores)." +msgstr "Nach Anwendungs-Updates schauen (nur Adminstratoren)." + # Account name as link -#: ../../../../inc/tpl/config.php:154 +#: ../../../../inc/themes/classic/config.inc:122 +#: ../../../../inc/themes/material-blue/config.inc:145 msgid "Nombre de cuenta como enlace" msgstr "Kontoname als Link" +# Enables account name as a link to account details in search page. +#: ../../../../inc/themes/classic/config.inc:126 +#: ../../../../inc/themes/material-blue/config.inc:149 +#, fuzzy +msgid "Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles de la cuenta." +msgstr "Verwende Kontoname als Link zu den Kontodetails im Suchergebnis" + # Files management -#: ../../../../inc/tpl/config.php:164 +#: ../../../../inc/themes/classic/config.inc:138 +#: ../../../../inc/themes/material-blue/config.inc:232 msgid "Gestión de archivos" msgstr "Dateiverwaltung" +# Enables upload/download accounts files. +#: ../../../../inc/themes/classic/config.inc:142 +#: ../../../../inc/themes/material-blue/config.inc:236 +#, fuzzy +msgid "Habilita la subida/descarga de archivos para las cuentas." +msgstr "Erlaube Upload/Download von Kontodateien" + # Global searches -#: ../../../../inc/tpl/config.php:174 +#: ../../../../inc/themes/classic/config.inc:154 +#: ../../../../inc/themes/material-blue/config.inc:164 msgid "Búsquedas globales" msgstr "Globale Suchen" +#: ../../../../inc/themes/classic/config.inc:158 +#: ../../../../inc/themes/material-blue/config.inc:168 +msgid "Permite que todos los usuarios puedan realizar búsquedas en todas las cuentas, pero no pueden ver el contenido de las que no tienen permisos." +msgstr "" + # Allowed file extensions -#: ../../../../inc/tpl/config.php:184 +#: ../../../../inc/themes/classic/config.inc:170 +#: ../../../../inc/themes/material-blue/config.inc:251 msgid "Extensiones de archivos permitidas" msgstr "Erlaubte Dateiendungen" +# Drag&Drop for files uploading +#: ../../../../inc/themes/classic/config.inc:174 +#: ../../../../inc/themes/material-blue/config.inc:255 +#, fuzzy +msgid "Extensiones permitidas para la subida de archivos." +msgstr "Erlaube Upload/Download von Kontodateien" + +# Extensions max length is 4 characters. +#: ../../../../inc/themes/classic/config.inc:178 +#: ../../../../inc/themes/material-blue/config.inc:259 +#, fuzzy +msgid "Se permite un máximo de 4 caracteres." +msgstr "Länge der Endung ist maximal 4 Zeichen." + +# Write extension and press enter to add. +#: ../../../../inc/themes/classic/config.inc:182 +#: ../../../../inc/themes/material-blue/config.inc:263 +#, fuzzy +msgid "Escribir extensión y pulsar intro para añadir. Es necesario guardar la configuración." +msgstr "Tragen Sie die Endung ein und drücken Sie Enter zum Hinzufügen" + +# Sets up the max upload file size. +#: ../../../../inc/themes/classic/config.inc:197 +#: ../../../../inc/themes/material-blue/config.inc:278 +#, fuzzy +msgid "Establece el tamaño máximo para subir archivos." +msgstr "Setzt die maximale Größe beim Hochladen von Dateien" + +# The absolute maximum is 16MB. +#: ../../../../inc/themes/classic/config.inc:201 +#: ../../../../inc/themes/material-blue/config.inc:282 +#, fuzzy +msgid "El máximo absuluto es de 16MB." +msgstr "Die maximale Größe ist 16MB." + # Results per page -#: ../../../../inc/tpl/config.php:202 +#: ../../../../inc/themes/classic/config.inc:212 +#: ../../../../inc/themes/material-blue/config.inc:183 msgid "Resultados por página" msgstr "Treffer pro Seite" +# Number of results that are shown per page when searching +#: ../../../../inc/themes/classic/config.inc:216 +#: ../../../../inc/themes/material-blue/config.inc:187 +#, fuzzy +msgid "Número de resultados por página a mostrar, al realizar una búsqueda." +msgstr "Anzahl der Treffer pro Seite im Suchergebnis" + # Results as Cards -#: ../../../../inc/tpl/config.php:218 +#: ../../../../inc/themes/classic/config.inc:227 msgid "Resultados en Tarjetas" msgstr "Results as Cards" -# Wiki -#: ../../../../inc/tpl/config.php:230 -msgid "Wiki" -msgstr "Wiki" +# Enables to show account's search results like a card format. +#: ../../../../inc/themes/classic/config.inc:231 +msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta." +msgstr "Zeigt die Ergebnisse einer Konten-Suche im Visitenkarten-Format an." -# Enable Wiki links -#: ../../../../inc/tpl/config.php:236 -msgid "Habilitar enlaces Wiki" -msgstr "Wike-Links einschalten" +#: ../../../../inc/themes/classic/config.inc:243 +#: ../../../../inc/themes/material-blue/config.inc:203 +#, fuzzy +msgid "Imagen para mostrar clave" +msgstr "Passwort anzeigen" -# Wiki search URL -#: ../../../../inc/tpl/config.php:246 -msgid "URL de búsqueda Wiki" -msgstr "Wiki Such-URL" +# Error on retrieving accounts' passwords +#: ../../../../inc/themes/classic/config.inc:247 +#: ../../../../inc/themes/material-blue/config.inc:207 +#, fuzzy +msgid "Generar una imagen con el texto de la clave de la cuenta." +msgstr "Fehler beim Laden der Konto-Passwörter" -# Wiki page URL -#: ../../../../inc/tpl/config.php:255 -msgid "URL de página en Wiki" -msgstr "Wike URL" - -# Account name preffix -#: ../../../../inc/tpl/config.php:264 -msgid "Prefijo para nombre de cuenta" -msgstr "Präfix eines Kontonamens" - -# LDAP -#: ../../../../inc/tpl/config.php:276 -msgid "LDAP" -msgstr "LDAP" - -# Enable LDAP -#: ../../../../inc/tpl/config.php:283 -msgid "Habilitar LDAP" -msgstr "LDAP verwenden" - -# Server -#: ../../../../inc/tpl/config.php:293 ../../../../inc/tpl/config.php:398 -msgid "Servidor" -msgstr "Server" - -# Bind User -#: ../../../../inc/tpl/config.php:302 -msgid "Usuario de conexión" -msgstr "Benutzer für Bind" - -# Bind Password -#: ../../../../inc/tpl/config.php:311 -msgid "Clave de conexión" -msgstr "LDAP-Passwort" - -# Search base -#: ../../../../inc/tpl/config.php:320 -msgid "Base de búsqueda" -msgstr "Suchpräfix" - -# Default Group -#: ../../../../inc/tpl/config.php:338 -msgid "Grupo por Defecto" -msgstr "Standard-Gruppe" - -# Default Profile -#: ../../../../inc/tpl/config.php:347 -msgid "Perfil por Defecto" -msgstr "Standard-Profil" - -# Active Directory -#: ../../../../inc/tpl/config.php:356 -msgid "Active Directory" -msgstr "Active Directory" - -# Check -#: ../../../../inc/tpl/config.php:366 -msgid "Comprobar" -msgstr "Überprüfung" - -# Check LDAP connection -#: ../../../../inc/tpl/config.php:369 -msgid "Comprobar conexión con LDAP" -msgstr "LDAP-Verbindung prüfen" - -# Mail -#: ../../../../inc/tpl/config.php:383 -msgid "Correo" -msgstr "E-Mail" - -# Enable email notifications -#: ../../../../inc/tpl/config.php:389 -msgid "Habilitar notificaciones de correo" -msgstr "E-Mail-Benachrichtigung einschalten" - -# Port -#: ../../../../inc/tpl/config.php:406 -msgid "Puerto" -msgstr "Port" - -# Enable Authentication -#: ../../../../inc/tpl/config.php:414 -msgid "Habilitar Autentificación" -msgstr "aktivieren Sie Authentifizierung" - -# Security -#: ../../../../inc/tpl/config.php:439 -msgid "Seguridad" -msgstr "Sicherheit" - -# Disabled -#: ../../../../inc/tpl/config.php:445 -msgid "Deshabilitada" -msgstr "Inaktiv" - -# Recipient email address -#: ../../../../inc/tpl/config.php:456 -msgid "Dirección de correo de envío" -msgstr "E-Mail-Adresse des Empfängers" - -# Enable requests by email -#: ../../../../inc/tpl/config.php:464 -msgid "Habilitar peticiones por correo" -msgstr "Erlaube Anfragen per E-Mail" +#: ../../../../inc/themes/classic/config.inc:250 +#: ../../../../inc/themes/material-blue/config.inc:210 +msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad." +msgstr "" # Add extension -#: ../../../../inc/tpl/config.php:507 +#: ../../../../inc/themes/classic/config.inc:285 +#: ../../../../inc/themes/material-blue/config.inc:400 msgid "Añadir extensión" msgstr "Endung hinzufügen" # Delete extension -#: ../../../../inc/tpl/config.php:508 +#: ../../../../inc/themes/classic/config.inc:286 +#: ../../../../inc/themes/material-blue/config.inc:401 msgid "Eliminar extensión" msgstr "Endung löschen" -# Add filter -#: ../../../../inc/tpl/config.php:536 -msgid "Añadir filtro" -msgstr "Filter hinzufügen" +# Customer name +#: ../../../../inc/themes/classic/customers.inc:10 +#: ../../../../inc/themes/material-blue/customers.inc:14 +msgid "Nombre del cliente" +msgstr "Kundenname" -# Delete filter -#: ../../../../inc/tpl/config.php:537 -msgid "Eliminar filtro" -msgstr "Filter löschen" +# Customer description +#: ../../../../inc/themes/classic/customers.inc:18 +#: ../../../../inc/themes/material-blue/customers.inc:26 +msgid "Descripción del cliente" +msgstr "Beschreibung des Kunden" -# Select Group -#: ../../../../inc/tpl/config.php:565 ../../../../inc/tpl/users.php:223 -msgid "Seleccionar Grupo" -msgstr "Gruppe auswählen" +# Text to search +#: ../../../../inc/themes/classic/customfields.inc:38 +#: ../../../../inc/themes/material-blue/customfields.inc:41 +#, fuzzy +msgid "Texto Ayuda" +msgstr "Suchbegriff" -# Select Profile -#: ../../../../inc/tpl/config.php:570 ../../../../inc/tpl/users.php:218 -msgid "Seleccionar Perfil" -msgstr "Profil auswählen" +#: ../../../../inc/themes/classic/customfields.inc:44 +#: ../../../../inc/themes/material-blue/customfields.inc:52 +msgid "Obligatorio" +msgstr "" -# Full username -#: ../../../../inc/tpl/users.php:71 -msgid "Nombre de usuario completo" -msgstr "Volständiger Benutzername" +# Master Password +#: ../../../../inc/themes/classic/encryption.inc:8 +#: ../../../../inc/themes/classic/install.inc:46 +#: ../../../../inc/themes/classic/install.inc:50 +#: ../../../../inc/themes/classic/install.inc:51 +#: ../../../../inc/themes/classic/login.inc:15 +#: ../../../../inc/themes/classic/login.inc:27 +#: ../../../../inc/themes/material-blue/encryption.inc:8 +#: ../../../../inc/themes/material-blue/install.inc:49 +#: ../../../../inc/themes/material-blue/install.inc:56 +#: ../../../../inc/themes/material-blue/login.inc:24 +#: ../../../../inc/themes/material-blue/login.inc:46 +msgid "Clave Maestra" +msgstr "Master-Passwort" -# Session login -#: ../../../../inc/tpl/users.php:85 -msgid "Login de inicio de sesión" -msgstr "Sitzungs-Anmeldung" +# Last Change +#: ../../../../inc/themes/classic/encryption.inc:16 +#: ../../../../inc/themes/classic/encryption.inc:116 +#: ../../../../inc/themes/material-blue/encryption.inc:16 +#: ../../../../inc/themes/material-blue/encryption.inc:131 +msgid "Último cambio" +msgstr "Letzte Änderung" -# Email address -#: ../../../../inc/tpl/users.php:117 -msgid "Dirección de correo" -msgstr "E-Mail-Adresse" +# Current Master Password +#: ../../../../inc/themes/classic/encryption.inc:25 +#: ../../../../inc/themes/material-blue/encryption.inc:25 +#: ../../../../inc/themes/material-blue/encryption.inc:31 +msgid "Clave Maestra actual" +msgstr "Aktuelles Master-Passwort" -# Options -#: ../../../../inc/tpl/users.php:154 -msgid "Opciones" -msgstr "Optionen" +# New Master Password +#: ../../../../inc/themes/classic/encryption.inc:34 +#: ../../../../inc/themes/material-blue/encryption.inc:37 +#: ../../../../inc/themes/material-blue/encryption.inc:43 +msgid "Nueva Clave Maestra" +msgstr "Neues Master-Passwort" -# Application administrator -#: ../../../../inc/tpl/users.php:158 -msgid "Administrador de la aplicación" -msgstr "Anwendungs-Administrator" +# New Master Password (repeat) +#: ../../../../inc/themes/classic/encryption.inc:43 +#: ../../../../inc/themes/material-blue/encryption.inc:49 +#: ../../../../inc/themes/material-blue/encryption.inc:55 +msgid "Nueva Clave Maestra (repetir)" +msgstr "Neues Master-Passwort (Wiederholung)" -# Application Admin -#: ../../../../inc/tpl/users.php:158 -msgid "Admin. Aplicación" -msgstr "Anwendungs-Administrator" +# Don't modify accounts +#: ../../../../inc/themes/classic/encryption.inc:51 +#: ../../../../inc/themes/material-blue/encryption.inc:61 +msgid "No modificar cuentas" +msgstr "Konten nicht verändern" -# Accounts administrator -#: ../../../../inc/tpl/users.php:160 -msgid "Administrador de cuentas" -msgstr "Anwendungs-Administrator" +# Sets a new master password without re-encrypt the accounts. +#: ../../../../inc/themes/classic/encryption.inc:56 +#: ../../../../inc/themes/material-blue/encryption.inc:66 +msgid "Establece una nueva clave maestra sin re-encriptar las cuentas" +msgstr "Setze Master-Passwort ohne die Konten neu zu verschlüsseln" -# Accounts Admin -#: ../../../../inc/tpl/users.php:160 -msgid "Admin. Cuentas" -msgstr "Konto-Administrator" +# Confirm Change +#: ../../../../inc/themes/classic/encryption.inc:67 +#: ../../../../inc/themes/material-blue/encryption.inc:79 +msgid "Confirmar cambio" +msgstr "Änderung bestätigen" -# Force password change -#: ../../../../inc/tpl/users.php:166 -msgid "Forzar cambio de clave" -msgstr "Erzwinge Passwortänderung" +# Warning +#: ../../../../inc/themes/classic/encryption.inc:70 +#: ../../../../inc/themes/classic/encryption.inc:73 +#: ../../../../inc/themes/classic/encryption.inc:76 +#: ../../../../inc/themes/classic/import.inc:67 +#: ../../../../inc/themes/classic/security.inc:43 +msgid "Atención" +msgstr "Warnung" -# Entries -#: ../../../../inc/tpl/users.php:173 -msgid "Entradas" -msgstr "Einträge" +# You should save the new password on a secure place +#: ../../../../inc/themes/classic/encryption.inc:71 +#: ../../../../inc/themes/material-blue/encryption.inc:83 +msgid "Guarde la nueva clave en un lugar seguro." +msgstr "Sie sollten das neue Passwort an einem sicheren Ort aufbewahren" -# Last Access -#: ../../../../inc/tpl/users.php:178 -msgid "Último Acceso" -msgstr "Letzter Zugriff" +# All accounts passwords will be encrypted again. +#: ../../../../inc/themes/classic/encryption.inc:74 +#: ../../../../inc/themes/material-blue/encryption.inc:86 +msgid "Se volverán a encriptar las claves de todas las cuentas." +msgstr "Alle Passwörter der Konten werden neu verschlüsselt." -# Master Password Date -#: ../../../../inc/tpl/users.php:188 -msgid "Fecha Clave Maestra" -msgstr "Datum des Master-Passworts" +# All users must re-enter the new master password. +#: ../../../../inc/themes/classic/encryption.inc:77 +#: ../../../../inc/themes/material-blue/encryption.inc:89 +msgid "Los usuarios deberán de introducir la nueva clave maestra." +msgstr "All Benutzer müssen das neue Master-Passwort eingeben." -# DB Update -#: ../../../../inc/tpl/upgrade.php:42 -msgid "Actualización de BBDD" -msgstr "Datenbank-Update" +#: ../../../../inc/themes/classic/encryption.inc:98 +#: ../../../../inc/themes/material-blue/encryption.inc:112 +msgid "La clave maestra es utilizada para encriptar las claves de las cuentas de sysPass para mantenerlas seguras." +msgstr "" -# Enter Security Code -#: ../../../../inc/tpl/upgrade.php:44 -msgid "Introducir Código de Seguridad" -msgstr "Sicherheitscode eingeben" +#: ../../../../inc/themes/classic/encryption.inc:100 +#: ../../../../inc/themes/material-blue/encryption.inc:114 +msgid "Es recomendable cambiarla cada cierto tiempo y utilizar una clave compleja que incluya números, letras y símbolos." +msgstr "" -# Security Code -#: ../../../../inc/tpl/upgrade.php:45 -msgid "Código de Seguridad" -msgstr "Sicherheitscode" +# Master Password +#: ../../../../inc/themes/classic/encryption.inc:108 +#: ../../../../inc/themes/material-blue/encryption.inc:124 +#, fuzzy +msgid "Clave Temporal" +msgstr "Master-Passwort" -# Start Update -#: ../../../../inc/tpl/upgrade.php:55 -msgid "Iniciar Actualización" -msgstr "Aktualisierung starten" +# Generated Password +#: ../../../../inc/themes/classic/encryption.inc:119 +#: ../../../../inc/themes/classic/encryption.inc:130 +#: ../../../../inc/themes/material-blue/encryption.inc:134 +#: ../../../../inc/themes/material-blue/encryption.inc:145 +#, fuzzy +msgid "No generada" +msgstr "Generiertes Passwort" + +#: ../../../../inc/themes/classic/encryption.inc:124 +#: ../../../../inc/themes/material-blue/encryption.inc:139 +msgid "Válido hasta" +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:136 +#: ../../../../inc/themes/material-blue/encryption.inc:151 +#: ../../../../inc/themes/material-blue/encryption.inc:157 +#, fuzzy +msgid "Validez (s)" +msgstr "Ablauf der Sitzung (s)" + +#: ../../../../inc/themes/classic/encryption.inc:139 +msgid "Validez" +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:157 +#: ../../../../inc/themes/material-blue/encryption.inc:176 +msgid "La clave temporal es utilizada como clave maestra para los usuarios que necesitan introducirla al iniciar la sesión, así no es necesario facilitar la clave maestra original." +msgstr "" + +# General +#: ../../../../inc/themes/classic/encryption.inc:159 +#: ../../../../inc/themes/material-blue/encryption.inc:180 +#, fuzzy +msgid "Generar" +msgstr "Zufälliges Passwort erzeugen" + +# No records found +#: ../../../../inc/themes/classic/eventlog.inc:8 +#: ../../../../inc/themes/classic/search.inc:5 +#: ../../../../inc/themes/material-blue/eventlog.inc:7 +#: ../../../../inc/themes/material-blue/search.inc:3 +msgid "No se encontraron registros" +msgstr "Keine Datensätze gefunden" # Date / Time -#: ../../../../inc/tpl/eventlog.php:56 +#: ../../../../inc/themes/classic/eventlog.inc:19 +#: ../../../../inc/themes/material-blue/eventlog.inc:18 msgid "Fecha / Hora" msgstr "Datum/Zeit" # Event -#: ../../../../inc/tpl/eventlog.php:59 +#: ../../../../inc/themes/classic/eventlog.inc:22 +#: ../../../../inc/themes/material-blue/eventlog.inc:21 msgid "Evento" msgstr "Ereignis" # IP -#: ../../../../inc/tpl/eventlog.php:65 +#: ../../../../inc/themes/classic/eventlog.inc:28 +#: ../../../../inc/themes/material-blue/eventlog.inc:27 msgid "IP" msgstr "IP" -# Unable to create backup directory -#~ msgid "No es posible crear el directorio de backups" -#~ msgstr "Verzeichnis für Backups kann nicht angelegt werden" +# First page +#: ../../../../inc/themes/classic/eventlog.inc:86 +#: ../../../../inc/themes/classic/search.inc:161 +#: ../../../../inc/themes/material-blue/eventlog.inc:85 +#: ../../../../inc/themes/material-blue/search.inc:173 +msgid "Primera página" +msgstr "Erste Seite" -# Database Backup -#~ msgid "Copia BBDD" -#~ msgstr "Datenbank-Backup" +# Previous page +#: ../../../../inc/themes/classic/eventlog.inc:88 +#: ../../../../inc/themes/classic/search.inc:163 +#: ../../../../inc/themes/material-blue/eventlog.inc:87 +#: ../../../../inc/themes/material-blue/search.inc:175 +msgid "Página anterior" +msgstr "Vorherige Seite" -# sysPass administrator's password +# Next page +#: ../../../../inc/themes/classic/eventlog.inc:93 +#: ../../../../inc/themes/classic/search.inc:168 +#: ../../../../inc/themes/material-blue/eventlog.inc:92 +#: ../../../../inc/themes/material-blue/search.inc:180 +msgid "Página siguiente" +msgstr "Nächste Seite" + +# Last page +#: ../../../../inc/themes/classic/eventlog.inc:95 +#: ../../../../inc/themes/classic/search.inc:170 +#: ../../../../inc/themes/material-blue/eventlog.inc:94 +#: ../../../../inc/themes/material-blue/search.inc:182 +msgid "Última página" +msgstr "Letzte Seite" + +# View file +#: ../../../../inc/themes/classic/files.inc:22 +#: ../../../../inc/themes/material-blue/files.inc:21 +msgid "Ver Archivo" +msgstr "Datei ansehen" + +# Help :: FAQ :: Changelog +#: ../../../../inc/themes/classic/footer.inc:10 +#: ../../../../inc/themes/material-blue/footer.inc:18 +msgid "Ayuda :: FAQ :: Changelog" +msgstr "Hilfe :: FAQ :: Changelog" + +# A cygnux.org project +#: ../../../../inc/themes/classic/footer.inc:13 +#: ../../../../inc/themes/material-blue/footer.inc:23 +msgid "Un proyecto de cygnux.org" +msgstr "Ein cygnux.org Projekt" + +# Group name +#: ../../../../inc/themes/classic/groups.inc:10 +#: ../../../../inc/themes/material-blue/groups.inc:14 +msgid "Nombre del grupo" +msgstr "Gruppenname" + +# Group description +#: ../../../../inc/themes/classic/groups.inc:18 +#: ../../../../inc/themes/material-blue/groups.inc:26 +msgid "Descripción del grupo" +msgstr "Beschreibung der Gruppe" + +# phpPMS Import +#: ../../../../inc/themes/classic/import.inc:7 +#: ../../../../inc/themes/material-blue/import.inc:121 +msgid "Importar phpPMS" +msgstr "phpPMS Import" + +# DB Username +#: ../../../../inc/themes/classic/import.inc:14 +#: ../../../../inc/themes/classic/install.inc:63 +#: ../../../../inc/themes/classic/install.inc:64 +#: ../../../../inc/themes/material-blue/import.inc:128 +#: ../../../../inc/themes/material-blue/import.inc:140 +msgid "Usuario BBDD" +msgstr "Datenbankbenutzer" + +# Enter phpPMS database connection user +#: ../../../../inc/themes/classic/import.inc:18 +#: ../../../../inc/themes/material-blue/import.inc:132 #, fuzzy -#~ msgid "Clave de administrador de sysPass" -#~ msgstr "sysPass administrator's password" +msgid "Indicar el usuario de conexión a la base de datos de phpPMS." +msgstr "Bentuzername der phpPMS-Datenbank eingeben" + +# DB Password +#: ../../../../inc/themes/classic/import.inc:28 +#: ../../../../inc/themes/classic/install.inc:71 +#: ../../../../inc/themes/classic/install.inc:73 +#: ../../../../inc/themes/material-blue/import.inc:146 +#: ../../../../inc/themes/material-blue/import.inc:152 +msgid "Clave BBDD" +msgstr "Datenbank-Passwort" + +# DB Name +#: ../../../../inc/themes/classic/import.inc:36 +#: ../../../../inc/themes/classic/install.inc:78 +#: ../../../../inc/themes/classic/install.inc:79 +#: ../../../../inc/themes/material-blue/import.inc:158 +#: ../../../../inc/themes/material-blue/import.inc:170 +msgid "Nombre BBDD" +msgstr "Datenbankname" + +# Enter phpPMS database name +#: ../../../../inc/themes/classic/import.inc:40 +#: ../../../../inc/themes/material-blue/import.inc:162 +#, fuzzy +msgid "Indicar el nombre de la base de datos de phpPMS." +msgstr "Name der phpPMS-Datenbank eingeben" + +# DB Server +#: ../../../../inc/themes/classic/import.inc:50 +#: ../../../../inc/themes/classic/install.inc:87 +#: ../../../../inc/themes/classic/install.inc:88 +#: ../../../../inc/themes/material-blue/import.inc:176 +#: ../../../../inc/themes/material-blue/import.inc:188 +msgid "Servidor BBDD" +msgstr "Datenbank-Server" + +# Enter phpPMS database server name +#: ../../../../inc/themes/classic/import.inc:54 +#: ../../../../inc/themes/material-blue/import.inc:180 +#, fuzzy +msgid "Indicar el servidor de la base de datos de phpPMS." +msgstr "Server der phpPMS-Datenbank eingeben" + +# Confirm +#: ../../../../inc/themes/classic/import.inc:64 +#: ../../../../inc/themes/material-blue/import.inc:194 +msgid "Confirmar" +msgstr "Bestätigen" + +# Current data will be removed (except current user) +#: ../../../../inc/themes/classic/import.inc:68 +#: ../../../../inc/themes/material-blue/import.inc:198 +msgid "Los datos actuales serán borrados (excepto el usuario actual)" +msgstr "Daten werden gelöscht (mit Ausnahme des aktuellen Benutzers)" + +# Start +#: ../../../../inc/themes/classic/import.inc:83 +msgid "Iniciar" +msgstr "Start" + +# CSV Import +#: ../../../../inc/themes/classic/import.inc:89 +#: ../../../../inc/themes/material-blue/import.inc:7 +msgid "Importar CSV/XML" +msgstr "CSV/XML Import" + +# Default Group +#: ../../../../inc/themes/classic/import.inc:96 +#: ../../../../inc/themes/material-blue/import.inc:14 +#, fuzzy +msgid "Usuario por Defecto" +msgstr "Legen Sie das Standard-Profile für neue LDAP-Benutzer fest" + +# Define the default users profile for new LDAP users +#: ../../../../inc/themes/classic/import.inc:100 +#: ../../../../inc/themes/material-blue/import.inc:18 +#, fuzzy +msgid "Define el usuario por defecto para las cuentas importadas." +msgstr "Legen Sie das Standard-Profile für neue LDAP-Benutzer fest" + +# Default Group +#: ../../../../inc/themes/classic/import.inc:117 +#: ../../../../inc/themes/classic/ldap.inc:144 +#: ../../../../inc/themes/material-blue/import.inc:36 +#: ../../../../inc/themes/material-blue/ldap.inc:170 +msgid "Grupo por Defecto" +msgstr "Standard-Gruppe" + +# Define the default users group for new LDAP users +#: ../../../../inc/themes/classic/import.inc:121 +#: ../../../../inc/themes/material-blue/import.inc:40 +#, fuzzy +msgid "Define el grupo por defecto para las cuentas importadas." +msgstr "Legen Sie die Standard-Gruppe für neue LDAP-Benutzer fest" + +# Bind Password +#: ../../../../inc/themes/classic/import.inc:138 +#: ../../../../inc/themes/material-blue/import.inc:58 +#: ../../../../inc/themes/material-blue/import.inc:64 +#, fuzzy +msgid "Clave de Importación" +msgstr "Import der Konten bestätigen" + +#: ../../../../inc/themes/classic/import.inc:146 +#: ../../../../inc/themes/material-blue/import.inc:70 +#: ../../../../inc/themes/material-blue/import.inc:76 +#, fuzzy +msgid "Delimitador CSV" +msgstr "CSV/XML Import" + +# Drop files here or click to select +#: ../../../../inc/themes/classic/import.inc:162 +#: ../../../../inc/themes/material-blue/import.inc:90 +msgid "Soltar archivo aquí o click para seleccionar" +msgstr "Dateien hier fallen lassen oder zum selektieren anklicken" + +#: ../../../../inc/themes/classic/import.inc:175 +msgid "Permite realizar la importación de Cuentas, Categorías y Clientes desde arhcivos XML y CSV." +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:177 +#: ../../../../inc/themes/material-blue/import.inc:106 +msgid "Los formatos de archivos XML soportados son: sysPass, KeePass y KeePassX" +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:179 +#: ../../../../inc/themes/material-blue/import.inc:108 +msgid "Arrastar el archivo a importar a la zona indicada o hacer click sobre la flecha." +msgstr "" + +# Import from KeePass or KeePassX. The customer name will be KeePass or KeePassX. +#: ../../../../inc/themes/classic/import.inc:181 +#: ../../../../inc/themes/material-blue/import.inc:110 +#, fuzzy +msgid "Para archivos de KeePass o KeePassX, el nombre del cliente será igual a KeePass o KeePassX y la categoría igual al nombre de los grupos." +msgstr "Import von KeePass oder KeePassX. Der Kundenname wird KeePass oder KeePassX sein." + +# Import form a CSV file with the format +#: ../../../../inc/themes/classic/import.inc:183 +#: ../../../../inc/themes/material-blue/import.inc:112 +#, fuzzy +msgid "La importación de archivos CSV se realiza con el siguiente formato:" +msgstr "Importiere CSV-Datei mit vorgegebenen Format" + +# account_name;customer;category;url;user;password;notes +#: ../../../../inc/themes/classic/import.inc:185 +#: ../../../../inc/themes/material-blue/import.inc:114 +msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas" +msgstr "konto_name;kunde;kategorie;url;benutzer;passwort;bemerkungen" + +# If the customer or category are not created, they will be automatically created. +#: ../../../../inc/themes/classic/import.inc:187 +#: ../../../../inc/themes/material-blue/import.inc:116 +#, fuzzy +msgid "En todos los casos, si el cliente o la categoría no están creados, se crean automáticamente." +msgstr "Wenn der Kunde oder die Kategorie nicht erzeugt wurden, werde sie nun automatisch erzeugt." + +# Request description +#: ../../../../inc/themes/classic/info.inc:4 +#: ../../../../inc/themes/material-blue/info.inc:4 +#, fuzzy +msgid "Información de la Aplicación" +msgstr "Beschreibung der Anfrage" + +# Version +#: ../../../../inc/themes/classic/info.inc:10 +#: ../../../../inc/themes/material-blue/info.inc:10 +#, fuzzy +msgid "Versión sysPass" +msgstr "Version" + +# Search base +#: ../../../../inc/themes/classic/info.inc:18 +#: ../../../../inc/themes/material-blue/info.inc:18 +#, fuzzy +msgid "Base de Datos" +msgstr "Keine Datenbankaktualisierung notwendig" + +# Accounts Per Page +#: ../../../../inc/themes/classic/info.inc:30 +#: ../../../../inc/themes/material-blue/info.inc:30 +#, fuzzy +msgid "PHP" +msgstr "Erforderliche PHP-Version >= 5.1" + +#: ../../../../inc/themes/classic/info.inc:35 +#: ../../../../inc/themes/material-blue/info.inc:35 +#, fuzzy +msgid "Extensiones" +msgstr "Es gibt keine erlaubten Dateiendungen" + +#: ../../../../inc/themes/classic/info.inc:37 +#: ../../../../inc/themes/material-blue/info.inc:37 +msgid "Memoria Usada" +msgstr "" + +# Server +#: ../../../../inc/themes/classic/info.inc:44 +#: ../../../../inc/themes/classic/ldap.inc:32 +#: ../../../../inc/themes/classic/mail.inc:21 +#: ../../../../inc/themes/material-blue/config.inc:318 +#: ../../../../inc/themes/material-blue/info.inc:44 +#: ../../../../inc/themes/material-blue/ldap.inc:35 +#: ../../../../inc/themes/material-blue/ldap.inc:58 +#: ../../../../inc/themes/material-blue/ldap.inc:86 +#: ../../../../inc/themes/material-blue/mail.inc:24 +#: ../../../../inc/themes/material-blue/mail.inc:30 +msgid "Servidor" +msgstr "Server" + +# Installation +#: ../../../../inc/themes/classic/install.inc:4 +#: ../../../../inc/themes/material-blue/install.inc:4 +msgid "Instalación " +msgstr "Installation" + +# Create admin account +#: ../../../../inc/themes/classic/install.inc:25 +#: ../../../../inc/themes/material-blue/install.inc:25 +msgid "Crear cuenta de admin de sysPass" +msgstr "Administrator-Konto anlegen" + +# sysPass administrator's login +#: ../../../../inc/themes/classic/install.inc:32 +#: ../../../../inc/themes/material-blue/install.inc:36 +msgid "Login del usuario administrador de sysPass" +msgstr "sysPass Administrator Anmeldung" + +# DB Configuration +#: ../../../../inc/themes/classic/install.inc:58 +#: ../../../../inc/themes/material-blue/install.inc:69 +msgid "Configurar BBDD" +msgstr "Datenbank-Konfiguration" + +# User login with with database administrative rights +#: ../../../../inc/themes/classic/install.inc:67 +msgid "Login de usuario con permisos de administrador de MySQL" +msgstr "Benutzer-Anmeldung mit administrativen Datenbank-Rechten" + +# sysPass database name +#: ../../../../inc/themes/classic/install.inc:83 +#: ../../../../inc/themes/material-blue/install.inc:102 +msgid "Nombre de la base de datos para sysPass" +msgstr "Name der sysPass-Datenbank" + +# sysPass database server name +#: ../../../../inc/themes/classic/install.inc:91 +msgid "Nombre del servidor de la base de datos de sysPass" +msgstr "Server der sysPass-Datenbank eingeben" + +# Hosting Mode +#: ../../../../inc/themes/classic/install.inc:97 +#: ../../../../inc/themes/material-blue/install.inc:120 +msgid "Modo Hosting" +msgstr "Hosting-Modus" + +# It does not create or verify the user's permissions on the DB +#: ../../../../inc/themes/classic/install.inc:104 +#: ../../../../inc/themes/material-blue/install.inc:127 +msgid "No crea ni verifica los permisos del usuario sobre la BBDD" +msgstr "Zugangsberechtigungen zur DB werden weder angelegt nocht überprüft" + +# Install +#: ../../../../inc/themes/classic/install.inc:108 +#: ../../../../inc/themes/material-blue/install.inc:134 +#: ../../../../inc/themes/material-blue/install.inc:135 +msgid "Instalar" +msgstr "Installieren" + +# Enable LDAP +#: ../../../../inc/themes/classic/ldap.inc:12 +#: ../../../../inc/themes/material-blue/ldap.inc:12 +msgid "Habilitar LDAP" +msgstr "LDAP verwenden" + +# Enables LDAP authentication +#: ../../../../inc/themes/classic/ldap.inc:16 +#: ../../../../inc/themes/material-blue/ldap.inc:16 +#, fuzzy +msgid "Habilita de autentificación mediante servidor LDAP." +msgstr "LDAP-Authentifizierung einschalten" + +# This method will switch to MySQL on failure +#: ../../../../inc/themes/classic/ldap.inc:20 +#: ../../../../inc/themes/material-blue/ldap.inc:20 +#, fuzzy +msgid "Este método utilizará MySQL en caso de fallo." +msgstr "Diese Methode wechselt im Fehlerfall zu MySQL" + +# LDAP server hostname or IP address +#: ../../../../inc/themes/classic/ldap.inc:36 +#: ../../../../inc/themes/material-blue/ldap.inc:39 +#, fuzzy +msgid "Nombre o dirección IP del servidor de LDAP." +msgstr "Hostname oder IP des LDAP-Servers" + +# Examples +#: ../../../../inc/themes/classic/ldap.inc:40 +#: ../../../../inc/themes/classic/ldap.inc:65 +#: ../../../../inc/themes/classic/ldap.inc:100 +#: ../../../../inc/themes/classic/ldap.inc:128 +#: ../../../../inc/themes/classic/wiki.inc:89 +#: ../../../../inc/themes/material-blue/ldap.inc:43 +#: ../../../../inc/themes/material-blue/ldap.inc:72 +#: ../../../../inc/themes/material-blue/ldap.inc:119 +#: ../../../../inc/themes/material-blue/ldap.inc:151 +#: ../../../../inc/themes/material-blue/wiki.inc:101 +#, fuzzy +msgid "Ejemplos:" +msgstr "Beispiele" + +# Bind User +#: ../../../../inc/themes/classic/ldap.inc:57 +#: ../../../../inc/themes/material-blue/ldap.inc:64 +msgid "Usuario de conexión" +msgstr "Benutzer für Bind" + +# User to connect LDAP server +#: ../../../../inc/themes/classic/ldap.inc:61 +#: ../../../../inc/themes/material-blue/ldap.inc:68 +#, fuzzy +msgid "Usuario para conectar con el servicio de LDAP." +msgstr "Benutzer für Verbindung zum LDAP-Server" + +# Bind Password +#: ../../../../inc/themes/classic/ldap.inc:81 +#: ../../../../inc/themes/material-blue/ldap.inc:92 +msgid "Clave de conexión" +msgstr "LDAP-Passwort" + +# Search base +#: ../../../../inc/themes/classic/ldap.inc:92 +#: ../../../../inc/themes/material-blue/ldap.inc:111 +#: ../../../../inc/themes/material-blue/ldap.inc:133 +msgid "Base de búsqueda" +msgstr "Suchpräfix" + +# LDAP base to do users searches. +#: ../../../../inc/themes/classic/ldap.inc:96 +#: ../../../../inc/themes/material-blue/ldap.inc:115 +#, fuzzy +msgid "Base en la que realizar la búsqueda de usuarios de LDAP." +msgstr "LDAP Base bei der Benutzersuche" + +# LDAP group that users belong to for access permission +#: ../../../../inc/themes/classic/ldap.inc:120 +#: ../../../../inc/themes/material-blue/ldap.inc:143 +#, fuzzy +msgid "Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso." +msgstr "LDAP-Gruppe zu der der Benutzer gehört für Zugriffsrechte verwenden." + +#: ../../../../inc/themes/classic/ldap.inc:124 +#: ../../../../inc/themes/material-blue/ldap.inc:147 +msgid "Este grupo debe de estar ubicado en la base de búsquedas de LDAP." +msgstr "" + +# Define the default users group for new LDAP users +#: ../../../../inc/themes/classic/ldap.inc:148 +#: ../../../../inc/themes/material-blue/ldap.inc:174 +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" + +# Default Profile +#: ../../../../inc/themes/classic/ldap.inc:165 +#: ../../../../inc/themes/material-blue/ldap.inc:190 +msgid "Perfil por Defecto" +msgstr "Standard-Profil" + +# Define the default users profile for new LDAP users +#: ../../../../inc/themes/classic/ldap.inc:169 +#: ../../../../inc/themes/material-blue/ldap.inc:194 +#, fuzzy +msgid "Define el perfil de usuarios por defecto para los nuevos usuarios de LDAP." +msgstr "Legen Sie das Standard-Profile für neue LDAP-Benutzer fest" + +# Active Directory +#: ../../../../inc/themes/classic/ldap.inc:186 +#: ../../../../inc/themes/material-blue/ldap.inc:210 +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 +msgid "Habilita el modo de conexión con LDAP de Active Directory." +msgstr "Aktiviert den Active Directory LDAP Verbindungsmodus." + +# Check +#: ../../../../inc/themes/classic/ldap.inc:202 +#: ../../../../inc/themes/material-blue/ldap.inc:228 +msgid "Comprobar" +msgstr "Überprüfung" + +# Check LDAP connection +#: ../../../../inc/themes/classic/ldap.inc:206 +#: ../../../../inc/themes/material-blue/ldap.inc:232 +msgid "Comprobar conexión con LDAP" +msgstr "LDAP-Verbindung prüfen" + +# Lost your password? +#: ../../../../inc/themes/classic/login.inc:46 +#: ../../../../inc/themes/material-blue/login.inc:69 +msgid "¿Olvidó su clave?" +msgstr "Passwort vergessen?" + +# Application successfully updated +#: ../../../../inc/themes/classic/login.inc:59 +#: ../../../../inc/themes/material-blue/login.inc:82 +msgid "Aplicación actualizada correctamente" +msgstr "Anwendung erfolgreich aktualisiert" + +# New Features +#: ../../../../inc/themes/classic/login.inc:64 +#: ../../../../inc/themes/classic/login.inc:65 +#: ../../../../inc/themes/material-blue/login.inc:87 +#: ../../../../inc/themes/material-blue/login.inc:88 +#: ../../../../inc/themes/material-blue/login.inc:90 +#, fuzzy +msgid "Nuevas Características" +msgstr "New Features" + +# Enable email notifications +#: ../../../../inc/themes/classic/mail.inc:11 +#: ../../../../inc/themes/material-blue/mail.inc:11 +msgid "Habilitar notificaciones de correo" +msgstr "E-Mail-Benachrichtigung einschalten" + +# Port +#: ../../../../inc/themes/classic/mail.inc:29 +#: ../../../../inc/themes/material-blue/config.inc:332 +#: ../../../../inc/themes/material-blue/mail.inc:36 +#: ../../../../inc/themes/material-blue/mail.inc:43 +msgid "Puerto" +msgstr "Port" + +# Enable Authentication +#: ../../../../inc/themes/classic/mail.inc:37 +#: ../../../../inc/themes/material-blue/mail.inc:49 +msgid "Habilitar Autentificación" +msgstr "aktivieren Sie Authentifizierung" + +# Disabled +#: ../../../../inc/themes/classic/mail.inc:68 +#: ../../../../inc/themes/material-blue/mail.inc:91 +msgid "Deshabilitada" +msgstr "Inaktiv" + +# Recipient email address +#: ../../../../inc/themes/classic/mail.inc:77 +#: ../../../../inc/themes/material-blue/mail.inc:100 +#: ../../../../inc/themes/material-blue/mail.inc:107 +msgid "Dirección de correo de envío" +msgstr "E-Mail-Adresse des Empfängers" + +# Enable requests by email +#: ../../../../inc/themes/classic/mail.inc:85 +#: ../../../../inc/themes/material-blue/mail.inc:113 +msgid "Habilitar peticiones por correo" +msgstr "Erlaube Anfragen per E-Mail" + +# More Actions +#: ../../../../inc/themes/classic/mgmttabs.inc:66 +#: ../../../../inc/themes/classic/search.inc:112 +#: ../../../../inc/themes/material-blue/search.inc:125 +msgid "Más Acciones" +msgstr "Weitere Aktionen" + +# Request Password Change +#: ../../../../inc/themes/classic/passreset.inc:13 +#: ../../../../inc/themes/material-blue/passreset.inc:10 +msgid "Solicitud de Cambio de Clave" +msgstr "Passwortänderung initiiert." + +# User login +#: ../../../../inc/themes/classic/passreset.inc:16 +msgid "Login del Usuario" +msgstr "Benutzer-Anmeldung" + +# User Email +#: ../../../../inc/themes/classic/passreset.inc:21 +#: ../../../../inc/themes/material-blue/passreset.inc:24 +msgid "Email del Usuario" +msgstr "Benutzer-E-Mail" + +# Email +#: ../../../../inc/themes/classic/passreset.inc:22 +#: ../../../../inc/themes/classic/users.inc:61 +#: ../../../../inc/themes/material-blue/users.inc:71 +msgid "Email" +msgstr "E-Mail" + +# New Password +#: ../../../../inc/themes/classic/passreset.inc:27 +msgid "Nueva Clave" +msgstr "Neues Passwort" + +# New Password (Verify) +#: ../../../../inc/themes/classic/passreset.inc:34 +msgid "Nueva Clave (Verificar)" +msgstr "Neues Passwort (Wіederholung)" + +# Password (Verify) +#: ../../../../inc/themes/classic/passreset.inc:35 +msgid "Clave (Verificar)" +msgstr "Passwort (Wiederholung)" + +# Go back to login +#: ../../../../inc/themes/classic/passreset.inc:46 +#: ../../../../inc/themes/material-blue/passreset.inc:42 +msgid "Volver a iniciar sesión" +msgstr "Zurück zur Anmeldung" + +# Request +#: ../../../../inc/themes/classic/passreset.inc:48 +#: ../../../../inc/themes/material-blue/2fa.inc:27 +#: ../../../../inc/themes/material-blue/passreset.inc:48 +#: ../../../../inc/themes/material-blue/passreset.inc:49 +msgid "Solicitar" +msgstr "Anfrage" + +# Request password change +#: ../../../../inc/themes/classic/passreset.inc:49 +msgid "Solicitar cambio de clave" +msgstr "Starte Passwortänderung" + +# Change +#: ../../../../inc/themes/classic/passreset.inc:51 +#: ../../../../inc/themes/material-blue/passreset.inc:53 +#: ../../../../inc/themes/material-blue/passreset.inc:54 +msgid "Cambiar" +msgstr "Ändern" + +# Change password +#: ../../../../inc/themes/classic/passreset.inc:52 +msgid "Cambiar Clave" +msgstr "Passwort ändern" + +# Profile name +#: ../../../../inc/themes/classic/profiles.inc:11 +#: ../../../../inc/themes/material-blue/profiles.inc:14 +msgid "Nombre del perfil" +msgstr "Profilname" + +# View account details +#: ../../../../inc/themes/classic/profiles.inc:19 +#: ../../../../inc/themes/material-blue/profiles.inc:30 +msgid "Ver detalles de cuenta" +msgstr "Kontodetails anzeigen" + +# View +#: ../../../../inc/themes/classic/profiles.inc:19 +#: ../../../../inc/themes/material-blue/profiles.inc:30 +msgid "Ver" +msgstr "Ansehen" + +# View account password +#: ../../../../inc/themes/classic/profiles.inc:23 +#: ../../../../inc/themes/material-blue/profiles.inc:35 +msgid "Ver clave de cuenta" +msgstr "Passwort anzeigen" + +# View account history +#: ../../../../inc/themes/classic/profiles.inc:28 +#: ../../../../inc/themes/material-blue/profiles.inc:40 +msgid "Ver historial de cuenta" +msgstr "Konto-Historie anzeigen" + +# Edit account +#: ../../../../inc/themes/classic/profiles.inc:32 +#: ../../../../inc/themes/material-blue/profiles.inc:45 +msgid "Editar cuenta" +msgstr "Konto ändern" + +# Edit +#: ../../../../inc/themes/classic/profiles.inc:32 +#: ../../../../inc/themes/material-blue/profiles.inc:45 +msgid "Editar" +msgstr "Ändern" + +# Edit account password +#: ../../../../inc/themes/classic/profiles.inc:37 +#: ../../../../inc/themes/material-blue/profiles.inc:50 +msgid "Editar clave de cuenta" +msgstr "Passwort des Kontos ändern" + +# Edit Password +#: ../../../../inc/themes/classic/profiles.inc:37 +#: ../../../../inc/themes/material-blue/profiles.inc:50 +msgid "Editar Clave" +msgstr "Passwort ändern" + +# Add new account +#: ../../../../inc/themes/classic/profiles.inc:41 +msgid "Añadir nueva cuenta" +msgstr "Konto hinzufügen" + +# Add +#: ../../../../inc/themes/classic/profiles.inc:41 +msgid "Añadir" +msgstr "Hinzufügen" + +# Delete account +#: ../../../../inc/themes/classic/profiles.inc:46 +msgid "Borrar cuenta" +msgstr "Konto löschen" + +# Delete +#: ../../../../inc/themes/classic/profiles.inc:46 +msgid "Borrar" +msgstr "Löschen" + +# View account files +#: ../../../../inc/themes/classic/profiles.inc:50 +msgid "Ver archivos de cuenta" +msgstr "Dateien des Kontos anzeigen" + +# General configuration +#: ../../../../inc/themes/classic/profiles.inc:61 +#: ../../../../inc/themes/material-blue/profiles.inc:72 +msgid "Configuración general" +msgstr "Allgemeine Konfiguration" + +# Change master password +#: ../../../../inc/themes/classic/profiles.inc:65 +msgid "Cambiar clave maestra" +msgstr "Master-Passwort ändern" + +# Make backup +#: ../../../../inc/themes/classic/profiles.inc:70 +msgid "Realizar copia de seguridad" +msgstr "Backup erstellen" + +# Backup +#: ../../../../inc/themes/classic/profiles.inc:70 +#: ../../../../inc/themes/material-blue/profiles.inc:82 +msgid "Backup" +msgstr "Sicherung" + +# Confirm account import +#: ../../../../inc/themes/classic/profiles.inc:74 +#: ../../../../inc/themes/material-blue/profiles.inc:87 +#, fuzzy +msgid "Realizar importación de cuentas" +msgstr "Import der Konten bestätigen" + +# Management +#: ../../../../inc/themes/classic/profiles.inc:81 +#: ../../../../inc/themes/material-blue/profiles.inc:93 +msgid "Gestión" +msgstr "Verwaltung" + +# Users management +#: ../../../../inc/themes/classic/profiles.inc:85 +#: ../../../../inc/themes/material-blue/profiles.inc:99 +msgid "Gestión de usuarios" +msgstr "Benutzerverwaltung" + +# Groups management +#: ../../../../inc/themes/classic/profiles.inc:89 +#: ../../../../inc/themes/material-blue/profiles.inc:104 +msgid "Gestión de grupos" +msgstr "Gruppenverwaltung" + +# Profiles management +#: ../../../../inc/themes/classic/profiles.inc:94 +#: ../../../../inc/themes/material-blue/profiles.inc:109 +msgid "Gestión de perfiles" +msgstr "Profilverwaltung" + +# Profiles +#: ../../../../inc/themes/classic/profiles.inc:94 +#: ../../../../inc/themes/material-blue/profiles.inc:109 +msgid "Perfiles" +msgstr "Profile" + +# Categories management +#: ../../../../inc/themes/classic/profiles.inc:98 +#: ../../../../inc/themes/material-blue/profiles.inc:114 +msgid "Gestión de categorías" +msgstr "Kategorienverwaltung" + +# Customers Management +#: ../../../../inc/themes/classic/profiles.inc:103 +#: ../../../../inc/themes/material-blue/profiles.inc:119 +msgid "Gestión de clientes" +msgstr "Kundenverwaltung" + +# Files management disabled +#: ../../../../inc/themes/classic/profiles.inc:107 +#: ../../../../inc/themes/material-blue/profiles.inc:124 +#, fuzzy +msgid "Gestión de campos personalizados" +msgstr "Die Anzahl der Felder ist falsch" + +# Files management +#: ../../../../inc/themes/classic/profiles.inc:112 +#: ../../../../inc/themes/material-blue/profiles.inc:129 +#, fuzzy +msgid "Gestión de autorizaciones API" +msgstr "Dateiverwaltung gesperrt" + +#: ../../../../inc/themes/classic/profiles.inc:112 +#: ../../../../inc/themes/material-blue/profiles.inc:129 +msgid "Autorizaciones API" +msgstr "" + +# Others +#: ../../../../inc/themes/classic/profiles.inc:120 +#: ../../../../inc/themes/material-blue/profiles.inc:135 +msgid "Otros" +msgstr "Andere" + +# View event log +#: ../../../../inc/themes/classic/profiles.inc:124 +#: ../../../../inc/themes/material-blue/profiles.inc:141 +msgid "Ver log de eventos" +msgstr "Protokol anzeigen" + +# Event Log +#: ../../../../inc/themes/classic/profiles.inc:124 +#: ../../../../inc/themes/material-blue/profiles.inc:141 +msgid "Log de Eventos" +msgstr "Protokol" + +# Performed by +#: ../../../../inc/themes/classic/profiles.inc:132 +#: ../../../../inc/themes/material-blue/profiles.inc:148 +#, fuzzy +msgid "Usado por" +msgstr "durch" + +#: ../../../../inc/themes/classic/profiles.inc:139 +#: ../../../../inc/themes/material-blue/profiles.inc:155 +msgid "No usado" +msgstr "" + +# Request Account Modification +#: ../../../../inc/themes/classic/request.inc:1 +#: ../../../../inc/themes/material-blue/request.inc:1 +msgid "Solicitar Modificación de Cuenta" +msgstr "Kontoänderung initiiert" + +# Request +#: ../../../../inc/themes/classic/request.inc:22 +#: ../../../../inc/themes/material-blue/request.inc:25 +msgid "Petición" +msgstr "Anfrage" + +# Request description +#: ../../../../inc/themes/classic/request.inc:24 +#: ../../../../inc/themes/material-blue/request.inc:29 +msgid "Descripción de la petición" +msgstr "Beschreibung der Anfrage" + +# Back +#: ../../../../inc/themes/classic/request.inc:33 +#: ../../../../inc/themes/material-blue/account.inc:439 +#: ../../../../inc/themes/material-blue/editpass.inc:55 +#: ../../../../inc/themes/material-blue/request.inc:42 +msgid "Atrás" +msgstr "Zurück" + +# Send +#: ../../../../inc/themes/classic/request.inc:38 +#: ../../../../inc/themes/material-blue/request.inc:48 +msgid "Enviar" +msgstr "Senden" + +# Search in Wiki +#: ../../../../inc/themes/classic/search.inc:26 +#: ../../../../inc/themes/material-blue/search.inc:29 +msgid "Buscar en Wiki" +msgstr "Im Wiki suchen" + +# Open link to +#: ../../../../inc/themes/classic/search.inc:62 +#: ../../../../inc/themes/material-blue/search.inc:65 +msgid "Abrir enlace a" +msgstr "Öffne Verweis nach" + +# Attachments +#: ../../../../inc/themes/classic/search.inc:80 +#: ../../../../inc/themes/material-blue/search.inc:89 +msgid "Archivos adjuntos" +msgstr "Anhänge" + +# Link to Wiki +#: ../../../../inc/themes/classic/search.inc:87 +#: ../../../../inc/themes/material-blue/search.inc:98 +msgid "Enlace a Wiki" +msgstr "Verweis zum Wiki" + +# Filter ON +#: ../../../../inc/themes/classic/search.inc:151 +#: ../../../../inc/themes/material-blue/search.inc:163 +msgid "Filtro ON" +msgstr "Filter Eingeschaltet" + +# Global ON +#: ../../../../inc/themes/classic/search.inc:155 +#: ../../../../inc/themes/material-blue/search.inc:167 +msgid "Global ON" +msgstr "Global eingeschaltet" + +# Clear +#: ../../../../inc/themes/classic/searchbox.inc:5 +#: ../../../../inc/themes/material-blue/searchbox.inc:5 +msgid "Limpiar" +msgstr "Löschen" + +# Text to search +#: ../../../../inc/themes/classic/searchbox.inc:6 +#: ../../../../inc/themes/material-blue/searchbox.inc:10 +msgid "Texto a buscar" +msgstr "Suchbegriff" + +# Incorrect parameters +#: ../../../../inc/themes/classic/searchbox.inc:10 +#: ../../../../inc/themes/material-blue/searchbox.inc:15 +#, fuzzy +msgid "Parámetros especiales:" +msgstr "Fehlerhafter Parameter" + +#: ../../../../inc/themes/classic/searchbox.inc:13 +#: ../../../../inc/themes/material-blue/searchbox.inc:18 +msgid "Buscar cuentas a las que 'login' tenga acceso" +msgstr "" + +#: ../../../../inc/themes/classic/searchbox.inc:14 +#: ../../../../inc/themes/material-blue/searchbox.inc:19 +msgid "Buscar cuentas a las que 'group_name' tenga acceso" +msgstr "" + +# Global search +#: ../../../../inc/themes/classic/searchbox.inc:18 +#: ../../../../inc/themes/material-blue/searchbox.inc:25 +#: ../../../../inc/themes/material-blue/searchbox.inc:28 +msgid "Búsqueda global" +msgstr "Globale Suche" + +# Accounts Per Page +#: ../../../../inc/themes/classic/searchbox.inc:41 +#: ../../../../inc/themes/material-blue/searchbox.inc:54 +msgid "CPP" +msgstr "KPS" + +# Accounts per page +#: ../../../../inc/themes/classic/searchbox.inc:41 +#: ../../../../inc/themes/material-blue/searchbox.inc:54 +msgid "Cuentas por página" +msgstr "Konten pro Seite" + +# Warning +#: ../../../../inc/themes/classic/security.inc:4 +#, fuzzy +msgid "Autenticación" +msgstr "Warnung" + +# Account Activation +#: ../../../../inc/themes/classic/security.inc:13 +#, fuzzy +msgid "Autenticación en 2 pasos" +msgstr "Kontoaktivierung" + +#: ../../../../inc/themes/classic/security.inc:17 +#: ../../../../inc/themes/material-blue/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/security.inc:21 +#: ../../../../inc/themes/material-blue/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/security.inc:29 +#: ../../../../inc/themes/material-blue/security.inc:29 +msgid "Activar" +msgstr "" + +# Error on retrieving accounts history +#: ../../../../inc/themes/classic/security.inc:34 +#: ../../../../inc/themes/material-blue/security.inc:35 +#, fuzzy +msgid "Error al obtener el código QR. Inténtelo de nuevo" +msgstr "Fehler beim Laden der Konto-Historie" + +#: ../../../../inc/themes/classic/security.inc:39 +#: ../../../../inc/themes/material-blue/security.inc:43 +#, fuzzy +msgid "Código" +msgstr "Sicherheitscode eingeben" + +#: ../../../../inc/themes/classic/security.inc:44 +#: ../../../../inc/themes/material-blue/security.inc:48 +msgid "Una vez activada, sólo es posible acceder si se dispone del dispositivo generador de códigos asociado." +msgstr "" + +# Change user password +#: ../../../../inc/themes/classic/sessionbar.inc:6 +#: ../../../../inc/themes/material-blue/footer.inc:7 +msgid "Cambiar clave de usuario" +msgstr "Benutzerpasswort ändern" + +#: ../../../../inc/themes/classic/sessionbar.inc:9 +msgid "Preferencias" +msgstr "" + +# Logout +#: ../../../../inc/themes/classic/sessionbar.inc:15 +#: ../../../../inc/themes/material-blue/footer.inc:5 +msgid "Salir" +msgstr "Abmelden" + +# Options +#: ../../../../inc/themes/classic/tokens.inc:34 +#: ../../../../inc/themes/classic/users.inc:98 +#: ../../../../inc/themes/material-blue/tokens.inc:34 +#: ../../../../inc/themes/material-blue/users.inc:132 +msgid "Opciones" +msgstr "Optionen" + +# Start Update +#: ../../../../inc/themes/classic/tokens.inc:38 +#: ../../../../inc/themes/material-blue/tokens.inc:37 +#: ../../../../inc/themes/material-blue/tokens.inc:40 +#, fuzzy +msgid "Regenerar Autorización" +msgstr "Aktualisierung starten" + +#: ../../../../inc/themes/classic/tokens.inc:43 +#: ../../../../inc/themes/material-blue/tokens.inc:46 +msgid "Token" +msgstr "" + +# Updated +#: ../../../../inc/themes/classic/update.inc:18 +#: ../../../../inc/themes/material-blue/update.inc:20 +msgid "Actualizado" +msgstr "Aktualisiert" + +# Check for updates +#: ../../../../inc/themes/classic/update.inc:23 +#: ../../../../inc/themes/material-blue/update.inc:22 +#, fuzzy +msgid "Error al comprobar actualizaciones" +msgstr "Nach Updates schauen" + +# DB Update +#: ../../../../inc/themes/classic/upgrade.inc:8 +#: ../../../../inc/themes/material-blue/upgrade.inc:8 +msgid "Actualización de BBDD" +msgstr "Datenbank-Update" + +# Enter Security Code +#: ../../../../inc/themes/classic/upgrade.inc:10 +msgid "Introducir Código de Seguridad" +msgstr "Sicherheitscode eingeben" + +# Security Code +#: ../../../../inc/themes/classic/upgrade.inc:11 +#: ../../../../inc/themes/material-blue/upgrade.inc:14 +msgid "Código de Seguridad" +msgstr "Sicherheitscode" + +# Start Update +#: ../../../../inc/themes/classic/upgrade.inc:21 +#: ../../../../inc/themes/material-blue/upgrade.inc:26 +msgid "Iniciar Actualización" +msgstr "Aktualisierung starten" + +# Full username +#: ../../../../inc/themes/classic/users.inc:12 +#: ../../../../inc/themes/material-blue/users.inc:15 +msgid "Nombre de usuario completo" +msgstr "Volständiger Benutzername" + +# Session login +#: ../../../../inc/themes/classic/users.inc:25 +#: ../../../../inc/themes/material-blue/users.inc:31 +msgid "Login de inicio de sesión" +msgstr "Sitzungs-Anmeldung" + +# Email address +#: ../../../../inc/themes/classic/users.inc:64 +#: ../../../../inc/themes/material-blue/users.inc:78 +msgid "Dirección de correo" +msgstr "E-Mail-Adresse" + +# Application administrator +#: ../../../../inc/themes/classic/users.inc:103 +#: ../../../../inc/themes/material-blue/users.inc:136 +msgid "Administrador de la aplicación" +msgstr "Anwendungs-Administrator" + +# Application Admin +#: ../../../../inc/themes/classic/users.inc:103 +#: ../../../../inc/themes/material-blue/users.inc:139 +msgid "Admin. Aplicación" +msgstr "Anwendungs-Administrator" + +# Accounts administrator +#: ../../../../inc/themes/classic/users.inc:107 +#: ../../../../inc/themes/material-blue/users.inc:143 +msgid "Administrador de cuentas" +msgstr "Anwendungs-Administrator" + +# Accounts Admin +#: ../../../../inc/themes/classic/users.inc:107 +#: ../../../../inc/themes/material-blue/users.inc:146 +msgid "Admin. Cuentas" +msgstr "Konto-Administrator" + +# Force password change +#: ../../../../inc/themes/classic/users.inc:117 +#: ../../../../inc/themes/material-blue/users.inc:158 +msgid "Forzar cambio de clave" +msgstr "Erzwinge Passwortänderung" + +# Entries +#: ../../../../inc/themes/classic/users.inc:154 +#: ../../../../inc/themes/material-blue/users.inc:198 +msgid "Entradas" +msgstr "Einträge" + +# Last Access +#: ../../../../inc/themes/classic/users.inc:159 +#: ../../../../inc/themes/material-blue/users.inc:203 +msgid "Último Acceso" +msgstr "Letzter Zugriff" + +# Master Password Date +#: ../../../../inc/themes/classic/users.inc:169 +#: ../../../../inc/themes/material-blue/users.inc:213 +msgid "Fecha Clave Maestra" +msgstr "Datum des Master-Passworts" + +# Enable Wiki links +#: ../../../../inc/themes/classic/wiki.inc:11 +#: ../../../../inc/themes/material-blue/wiki.inc:11 +msgid "Habilitar enlaces Wiki" +msgstr "Wike-Links einschalten" + +# Enables the option to add an external Wiki link for accounts search results. +#: ../../../../inc/themes/classic/wiki.inc:15 +#: ../../../../inc/themes/material-blue/wiki.inc:15 +#, fuzzy +msgid "Habilita la opción de añadir un enlace a Wiki externa para los resultados de la búsqueda." +msgstr "Erlaube das Hinzufügen eines externen Wiki-Links für Konten im Suchergebnis" + +# Wiki search URL +#: ../../../../inc/themes/classic/wiki.inc:27 +#: ../../../../inc/themes/material-blue/wiki.inc:30 +#: ../../../../inc/themes/material-blue/wiki.inc:56 +msgid "URL de búsqueda Wiki" +msgstr "Wiki Such-URL" + +# URL that wiki uses to do a page search on it. +#: ../../../../inc/themes/classic/wiki.inc:31 +#: ../../../../inc/themes/material-blue/wiki.inc:34 +#, fuzzy +msgid "URL que utiliza la wiki para realizar una búsqueda de una página." +msgstr "URL zum Suchen im Wiki" + +# It uses customer name as parameter. +#: ../../../../inc/themes/classic/wiki.inc:35 +#: ../../../../inc/themes/material-blue/wiki.inc:38 +#, fuzzy +msgid "Como parámetro se utiliza el nombre del cliente." +msgstr "Benutzt den Kundennamen als Parameter" + +# Example +#: ../../../../inc/themes/classic/wiki.inc:39 +#: ../../../../inc/themes/classic/wiki.inc:66 +#: ../../../../inc/themes/material-blue/wiki.inc:42 +#: ../../../../inc/themes/material-blue/wiki.inc:74 +#, fuzzy +msgid "Ejemplo:" +msgstr "Beispiel" + +# Wiki page URL +#: ../../../../inc/themes/classic/wiki.inc:54 +#: ../../../../inc/themes/material-blue/wiki.inc:62 +#: ../../../../inc/themes/material-blue/wiki.inc:87 +msgid "URL de página en Wiki" +msgstr "Wike URL" + +# URL that wiki uses to access to page details on it. +#: ../../../../inc/themes/classic/wiki.inc:58 +#: ../../../../inc/themes/material-blue/wiki.inc:66 +#, fuzzy +msgid "URL que utiliza la wiki para acceder a los detalles de una página." +msgstr "URL mit Details im Wiki" + +# The account name is used as wiki search variable parameter. +#: ../../../../inc/themes/classic/wiki.inc:62 +#: ../../../../inc/themes/material-blue/wiki.inc:70 +#, fuzzy +msgid "El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda de la Wiki." +msgstr "Der Kontoname wird als Parameter in der Wiki-Suche verwendet" + +# Account name preffix +#: ../../../../inc/themes/classic/wiki.inc:81 +#: ../../../../inc/themes/material-blue/wiki.inc:93 +msgid "Prefijo para nombre de cuenta" +msgstr "Präfix eines Kontonamens" + +# Preffix to select what accounts have a wiki page link. +#: ../../../../inc/themes/classic/wiki.inc:85 +#: ../../../../inc/themes/material-blue/wiki.inc:97 +#, fuzzy +msgid "Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki." +msgstr "Präfix um Konten mit Wiki-Link zu selektieren." + +# Add filter +#: ../../../../inc/themes/classic/wiki.inc:121 +#: ../../../../inc/themes/material-blue/wiki.inc:135 +msgid "Añadir filtro" +msgstr "Filter hinzufügen" + +# Delete filter +#: ../../../../inc/themes/classic/wiki.inc:122 +#: ../../../../inc/themes/material-blue/wiki.inc:136 +msgid "Eliminar filtro" +msgstr "Filter löschen" + +# History +#: ../../../../inc/themes/material-blue/account.inc:4 +#, fuzzy +msgid "Histórico" +msgstr "Importiere Konten-Historie" + +#: ../../../../inc/themes/material-blue/account.inc:42 +msgid "Seleccionar o escribir para crear uno nuevo" +msgstr "" + +# Password (repeat) +#: ../../../../inc/themes/material-blue/account.inc:110 +#, fuzzy +msgid "Clave (Repetir)" +msgstr "Passwort (Wiederholung)" + +# Performed by +#: ../../../../inc/themes/material-blue/backup.inc:58 +#: ../../../../inc/themes/material-blue/backup.inc:144 +#: ../../../../inc/themes/material-blue/encryption.inc:118 +#: ../../../../inc/themes/material-blue/import.inc:217 +#, fuzzy +msgid "Realizar" +msgstr "Backup erstellen" + +# Results per page +#: ../../../../inc/themes/material-blue/config.inc:197 +#, fuzzy +msgid "Número de resultados por página" +msgstr "Anzahl der Treffer pro Seite im Suchergebnis" + +# Maximum file size +#: ../../../../inc/themes/material-blue/config.inc:292 +#, fuzzy +msgid "Tamaño máximo de archivo en bytes" +msgstr "Maximale Dateigröße" + +#: ../../../../inc/themes/material-blue/config.inc:299 +msgid "Proxy" +msgstr "" + +#: ../../../../inc/themes/material-blue/config.inc:305 +msgid "Usar Proxy" +msgstr "" + +# Server +#: ../../../../inc/themes/material-blue/config.inc:326 +#, fuzzy +msgid "Servidor proxy" +msgstr "Server" + +#: ../../../../inc/themes/material-blue/config.inc:340 +msgid "Puerto del servidor proxy" +msgstr "" + +# Access user +#: ../../../../inc/themes/material-blue/config.inc:354 +#, fuzzy +msgid "Usuario del servidor proxy" +msgstr "Benutzer für Zugriff" + +#: ../../../../inc/themes/material-blue/config.inc:368 +msgid "Clave del servidor proxy" +msgstr "" + +# Group name +#: ../../../../inc/themes/material-blue/customfields.inc:14 +#, fuzzy +msgid "Nombre del campo" +msgstr "Kundenname" + +#: ../../../../inc/themes/material-blue/customfields.inc:47 +#, fuzzy +msgid "Ayuda del campo" +msgstr "Hilfe :: FAQ :: Changelog" + +# View User Details +#: ../../../../inc/themes/material-blue/footer.inc:11 +#, fuzzy +msgid "Preferencias de usuario" +msgstr "Dupbliziertes Benutzer-Anmeldung " + +#: ../../../../inc/themes/material-blue/import.inc:104 +msgid "Permite realizar la importación de Cuentas, Categorías y Clientes desde archivos XML y CSV." +msgstr "" + +# sysPass administrator's login +#: ../../../../inc/themes/material-blue/install.inc:31 +#, fuzzy +msgid "Usuario administrador de sysPass" +msgstr "sysPass Administrator Anmeldung" + +# Access user +#: ../../../../inc/themes/material-blue/install.inc:78 +#, fuzzy +msgid "Usuario acceso BBDD" +msgstr "Benutzer für Zugriff" + +# User login with with database administrative rights +#: ../../../../inc/themes/material-blue/install.inc:83 +#, fuzzy +msgid "Usuario con permisos de administrador de MySQL" +msgstr "Benutzer-Anmeldung mit administrativen Datenbank-Rechten" + +# DB Password +#: ../../../../inc/themes/material-blue/install.inc:90 +#, fuzzy +msgid "Clave acceso BBDD" +msgstr "Datenbank-Passwort" + +# sysPass database name +#: ../../../../inc/themes/material-blue/install.inc:97 +#, fuzzy +msgid "Nombre BBDD para sysPass" +msgstr "Name der sysPass-Datenbank" + +# DB Server +#: ../../../../inc/themes/material-blue/install.inc:109 +#, fuzzy +msgid "Servidor BBDD para sysPass" +msgstr "Datenbank-Server" + +# sysPass database server name +#: ../../../../inc/themes/material-blue/install.inc:114 +#, fuzzy +msgid "Nombre del servidor para instalar la base de datos de sysPass" +msgstr "Server der sysPass-Datenbank eingeben" + +# LDAP bind user password +#: ../../../../inc/themes/material-blue/ldap.inc:96 +#, fuzzy +msgid "Clave del usuario de conexión a LDAP." +msgstr "LDAP Benutzerpasswort" + +#: ../../../../inc/themes/material-blue/mail.inc:118 +msgid "Habilita que los usuarios puedan solicitar modificaciones o acceso a las cuentas sin permisos." +msgstr "" + +# Add new account +#: ../../../../inc/themes/material-blue/profiles.inc:25 +#, fuzzy +msgid "Crear nueva cuenta" +msgstr "Neues Konto" + +# Creator +#: ../../../../inc/themes/material-blue/profiles.inc:25 +#, fuzzy +msgid "Crear" +msgstr "Fehler beim Anlegen der Benutzer" + +# Delete Account +#: ../../../../inc/themes/material-blue/profiles.inc:55 +#, fuzzy +msgid "Eliminar cuenta" +msgstr "Konto löschen" + +# Delete Group +#: ../../../../inc/themes/material-blue/profiles.inc:55 +#, fuzzy +msgid "Eliminar" +msgstr "Profil löschen" + +# View account files +#: ../../../../inc/themes/material-blue/profiles.inc:60 +#, fuzzy +msgid "Var archivos de cuenta" +msgstr "Dateien des Kontos anzeigen" + +# Error on encryption module +#: ../../../../inc/themes/material-blue/profiles.inc:77 +#, fuzzy +msgid "Opciones de encriptación" +msgstr "Optionen" + +# Make backup +#: ../../../../inc/themes/material-blue/profiles.inc:82 +#, fuzzy +msgid "Realizar copia de seguridad y exportar" +msgstr "Backup erstellen" + +#: ../../../../inc/themes/material-blue/searchbox.inc:20 +msgid "Buscar cuentas con archivos con el nombre 'file_name'" +msgstr "" + +# Enable Authentication +#: ../../../../inc/themes/material-blue/security.inc:4 +#, fuzzy +msgid "Autentificación" +msgstr "aktivieren Sie Authentifizierung" diff --git a/inc/locales/en_US/LC_MESSAGES/messages.mo b/inc/locales/en_US/LC_MESSAGES/messages.mo index e6c0ae0e4f84bfb10904a11b9fa148f15abd70f4..d98a192e6603b0a5108cc6cb675f48a9d761fe9a 100644 GIT binary patch delta 20229 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 delta 20641 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 diff --git a/inc/locales/en_US/LC_MESSAGES/messages.po b/inc/locales/en_US/LC_MESSAGES/messages.po index 548bd801..ce15624e 100644 --- a/inc/locales/en_US/LC_MESSAGES/messages.po +++ b/inc/locales/en_US/LC_MESSAGES/messages.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: sysPass\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-08-17 19:34+0100\n" -"PO-Revision-Date: 2015-08-17 19:35+0100\n" +"POT-Creation-Date: 2015-09-04 21:27+0100\n" +"PO-Revision-Date: 2015-09-04 21:27+0100\n" "Last-Translator: nuxsmin \n" "Language-Team: nuxsmin@syspass.org\n" "Language: en_US\n" @@ -38,7 +38,7 @@ msgstr "INVALID QUERY" msgid "Código correcto" msgstr "Verified code" -#: ../../../../ajax/ajax_2fa.php:58 ../../../../ajax/ajax_userPrefsSave.php:63 +#: ../../../../ajax/ajax_2fa.php:58 ../../../../ajax/ajax_userPrefsSave.php:67 msgid "Código incorrecto" msgstr "Wrong code" @@ -53,101 +53,101 @@ msgstr "Wrong code" msgid "La sesión no se ha iniciado o ha caducado" msgstr "Session not started or timed out" -#: ../../../../ajax/ajax_accountSave.php:71 -#: ../../../../ajax/ajax_accountSave.php:88 +#: ../../../../ajax/ajax_accountSave.php:75 +#: ../../../../ajax/ajax_accountSave.php:92 msgid "Es necesario un nombre de cuenta" msgstr "An account name needed" -#: ../../../../ajax/ajax_accountSave.php:73 -#: ../../../../ajax/ajax_accountSave.php:86 -#: ../../../../ajax/ajax_appMgmtSave.php:324 +#: ../../../../ajax/ajax_accountSave.php:77 +#: ../../../../ajax/ajax_accountSave.php:90 +#: ../../../../ajax/ajax_appMgmtSave.php:326 msgid "Es necesario un nombre de cliente" msgstr "A customer name needed" -#: ../../../../ajax/ajax_accountSave.php:75 -#: ../../../../ajax/ajax_accountSave.php:90 +#: ../../../../ajax/ajax_accountSave.php:79 +#: ../../../../ajax/ajax_accountSave.php:94 msgid "Es necesario un usuario" msgstr "An username is needed" -#: ../../../../ajax/ajax_accountSave.php:77 +#: ../../../../ajax/ajax_accountSave.php:81 msgid "Es necesario una clave" msgstr "A password is needed" -#: ../../../../ajax/ajax_accountSave.php:79 -#: ../../../../ajax/ajax_accountSave.php:103 -#: ../../../../ajax/ajax_appMgmtSave.php:109 -#: ../../../../ajax/ajax_appMgmtSave.php:144 +#: ../../../../ajax/ajax_accountSave.php:83 +#: ../../../../ajax/ajax_accountSave.php:107 +#: ../../../../ajax/ajax_appMgmtSave.php:111 +#: ../../../../ajax/ajax_appMgmtSave.php:146 #: ../../../../ajax/ajax_backup.php:62 msgid "Las claves no coinciden" msgstr "The passwords do not match" -#: ../../../../ajax/ajax_accountSave.php:81 -#: ../../../../ajax/ajax_accountSave.php:92 +#: ../../../../ajax/ajax_accountSave.php:85 +#: ../../../../ajax/ajax_accountSave.php:96 msgid "Es necesario una categoría" msgstr "A category is needed" -#: ../../../../ajax/ajax_accountSave.php:96 -#: ../../../../ajax/ajax_accountSave.php:107 +#: ../../../../ajax/ajax_accountSave.php:100 +#: ../../../../ajax/ajax_accountSave.php:111 msgid "Id inválido" msgstr "Invalid Id" -#: ../../../../ajax/ajax_accountSave.php:101 -#: ../../../../ajax/ajax_appMgmtSave.php:107 -#: ../../../../ajax/ajax_appMgmtSave.php:142 +#: ../../../../ajax/ajax_accountSave.php:105 +#: ../../../../ajax/ajax_appMgmtSave.php:109 +#: ../../../../ajax/ajax_appMgmtSave.php:144 msgid "La clave no puede estar en blanco" msgstr "Password cannot be blank" -#: ../../../../ajax/ajax_accountSave.php:110 -#: ../../../../ajax/ajax_accountSave.php:254 -#: ../../../../ajax/ajax_appMgmtSave.php:530 +#: ../../../../ajax/ajax_accountSave.php:114 +#: ../../../../ajax/ajax_accountSave.php:258 +#: ../../../../ajax/ajax_appMgmtSave.php:532 #: ../../../../ajax/ajax_configSave.php:290 -#: ../../../../ajax/ajax_userPrefsSave.php:76 ../../../../api.php:53 +#: ../../../../ajax/ajax_userPrefsSave.php:80 ../../../../api.php:53 msgid "Acción Inválida" msgstr "Invalid Action" -#: ../../../../ajax/ajax_accountSave.php:164 +#: ../../../../ajax/ajax_accountSave.php:168 msgid "Cuenta creada" msgstr "Account added" -#: ../../../../ajax/ajax_accountSave.php:167 +#: ../../../../ajax/ajax_accountSave.php:171 msgid "Error al crear la cuenta" msgstr "Error on account creation" -#: ../../../../ajax/ajax_accountSave.php:202 +#: ../../../../ajax/ajax_accountSave.php:206 msgid "Sin cambios" msgstr "No changes" -#: ../../../../ajax/ajax_accountSave.php:214 +#: ../../../../ajax/ajax_accountSave.php:218 msgid "Cuenta actualizada" msgstr "Account updated" -#: ../../../../ajax/ajax_accountSave.php:217 +#: ../../../../ajax/ajax_accountSave.php:221 msgid "Error al modificar la cuenta" msgstr "Error on updating account" -#: ../../../../ajax/ajax_accountSave.php:224 +#: ../../../../ajax/ajax_accountSave.php:228 msgid "Cuenta eliminada" msgstr "Account deleted" -#: ../../../../ajax/ajax_accountSave.php:227 +#: ../../../../ajax/ajax_accountSave.php:231 msgid "Error al eliminar la cuenta" msgstr "Error on account deletion" -#: ../../../../ajax/ajax_accountSave.php:237 -#: ../../../../ajax/ajax_appMgmtSave.php:148 +#: ../../../../ajax/ajax_accountSave.php:241 +#: ../../../../ajax/ajax_appMgmtSave.php:150 #: ../../../../ajax/ajax_passReset.php:74 msgid "Clave actualizada" msgstr "Password updated" -#: ../../../../ajax/ajax_accountSave.php:240 +#: ../../../../ajax/ajax_accountSave.php:244 msgid "Error al actualizar la clave" msgstr "Error on updating password" -#: ../../../../ajax/ajax_accountSave.php:247 +#: ../../../../ajax/ajax_accountSave.php:251 msgid "Cuenta restaurada" msgstr "Account restored" -#: ../../../../ajax/ajax_accountSave.php:250 +#: ../../../../ajax/ajax_accountSave.php:254 msgid "Error al restaurar cuenta" msgstr "Error on restoring account" @@ -191,7 +191,7 @@ msgid "Editar Perfil" msgstr "Edit Profile" #: ../../../../ajax/ajax_appMgmtData.php:105 -#: ../../../../inc/ProfileBase.class.php:508 +#: ../../../../inc/ProfileBase.class.php:512 #: ../../../../web/UsersMgmtC.class.php:252 msgid "Nuevo Perfil" msgstr "New Profile" @@ -271,81 +271,83 @@ msgstr "A group is needed" msgid "Es necesario un email" msgstr "An email is needed" -#: ../../../../ajax/ajax_appMgmtSave.php:98 +#: ../../../../ajax/ajax_appMgmtSave.php:95 +#: ../../../../ajax/ajax_appMgmtSave.php:142 +#: ../../../../ajax/ajax_appMgmtSave.php:157 +#: ../../../../ajax/ajax_configSave.php:265 +#: ../../../../ajax/ajax_import.php:39 ../../../../ajax/ajax_migrate.php:39 +#: ../../../../ajax/ajax_userPrefsSave.php:56 +msgid "Ey, esto es una DEMO!!" +msgstr "Ey, this is a DEMO!!" + +#: ../../../../ajax/ajax_appMgmtSave.php:100 msgid "Login de usuario duplicado" msgstr "Duplicated user login " -#: ../../../../ajax/ajax_appMgmtSave.php:101 +#: ../../../../ajax/ajax_appMgmtSave.php:103 msgid "Email de usuario duplicado" msgstr "Duplicated user email" -#: ../../../../ajax/ajax_appMgmtSave.php:120 +#: ../../../../ajax/ajax_appMgmtSave.php:122 msgid "Usuario creado" msgstr "User added" -#: ../../../../ajax/ajax_appMgmtSave.php:123 +#: ../../../../ajax/ajax_appMgmtSave.php:125 msgid "Error al crear el usuario" msgstr "Error on creating user" -#: ../../../../ajax/ajax_appMgmtSave.php:133 +#: ../../../../ajax/ajax_appMgmtSave.php:135 #: ../../../../inc/UserUtil.class.php:103 msgid "Usuario actualizado" msgstr "User updated" -#: ../../../../ajax/ajax_appMgmtSave.php:136 +#: ../../../../ajax/ajax_appMgmtSave.php:138 msgid "Error al actualizar el usuario" msgstr "Error on user update" -#: ../../../../ajax/ajax_appMgmtSave.php:140 -#: ../../../../ajax/ajax_appMgmtSave.php:155 -#: ../../../../ajax/ajax_configSave.php:265 -#: ../../../../ajax/ajax_import.php:39 ../../../../ajax/ajax_migrate.php:39 -msgid "Ey, esto es una DEMO!!" -msgstr "Ey, this is a DEMO!!" - -#: ../../../../ajax/ajax_appMgmtSave.php:151 +#: ../../../../ajax/ajax_appMgmtSave.php:153 #: ../../../../ajax/ajax_passReset.php:78 msgid "Error al modificar la clave" msgstr "Error on updating password" -#: ../../../../ajax/ajax_appMgmtSave.php:157 +#: ../../../../ajax/ajax_appMgmtSave.php:159 msgid "No es posible eliminar, usuario en uso" msgstr "Unable to delete, user in use" -#: ../../../../ajax/ajax_appMgmtSave.php:161 +#: ../../../../ajax/ajax_appMgmtSave.php:163 msgid "Usuario eliminado" msgstr "User deleted" -#: ../../../../ajax/ajax_appMgmtSave.php:164 +#: ../../../../ajax/ajax_appMgmtSave.php:166 msgid "Error al eliminar el usuario" msgstr "Error on user deletion" -#: ../../../../ajax/ajax_appMgmtSave.php:179 +#: ../../../../ajax/ajax_appMgmtSave.php:181 msgid "Es necesario un nombre de grupo" msgstr "A group name is needed" -#: ../../../../ajax/ajax_appMgmtSave.php:187 +#: ../../../../ajax/ajax_appMgmtSave.php:189 msgid "Nombre de grupo duplicado" msgstr "Duplicated group name" -#: ../../../../ajax/ajax_appMgmtSave.php:199 +#: ../../../../ajax/ajax_appMgmtSave.php:201 msgid "Grupo creado" msgstr "Group added" -#: ../../../../ajax/ajax_appMgmtSave.php:201 +#: ../../../../ajax/ajax_appMgmtSave.php:203 msgid "Error al crear el grupo" msgstr "Error on group creation" -#: ../../../../ajax/ajax_appMgmtSave.php:212 +#: ../../../../ajax/ajax_appMgmtSave.php:214 msgid "Grupo actualizado" msgstr "Group updated" -#: ../../../../ajax/ajax_appMgmtSave.php:215 +#: ../../../../ajax/ajax_appMgmtSave.php:217 msgid "Error al actualizar el grupo" msgstr "Error on updating group" -#: ../../../../ajax/ajax_appMgmtSave.php:224 -#: ../../../../ajax/ajax_appMgmtSave.php:301 +#: ../../../../ajax/ajax_appMgmtSave.php:226 +#: ../../../../ajax/ajax_appMgmtSave.php:303 #: ../../../../inc/CustomFieldsBase.class.php:83 #: ../../../../inc/themes/classic/account.inc:109 #: ../../../../inc/themes/classic/groups.inc:24 @@ -356,7 +358,7 @@ msgstr "Error on updating group" msgid "Usuarios" msgstr "Users" -#: ../../../../ajax/ajax_appMgmtSave.php:228 +#: ../../../../ajax/ajax_appMgmtSave.php:230 #: ../../../../inc/Category.class.php:266 #: ../../../../inc/CustomFieldsBase.class.php:80 #: ../../../../inc/Customer.class.php:150 @@ -366,126 +368,126 @@ msgstr "Users" msgid "Cuentas" msgstr "Accounts" -#: ../../../../ajax/ajax_appMgmtSave.php:231 -#: ../../../../ajax/ajax_appMgmtSave.php:303 +#: ../../../../ajax/ajax_appMgmtSave.php:233 +#: ../../../../ajax/ajax_appMgmtSave.php:305 #: ../../../../inc/Category.class.php:119 #: ../../../../inc/Customer.class.php:150 msgid "No es posible eliminar" msgstr "Unable to delete" -#: ../../../../ajax/ajax_appMgmtSave.php:231 +#: ../../../../ajax/ajax_appMgmtSave.php:233 msgid "Grupo en uso por:" msgstr "Group in use by:" -#: ../../../../ajax/ajax_appMgmtSave.php:236 +#: ../../../../ajax/ajax_appMgmtSave.php:238 msgid "Grupo eliminado" msgstr "Group deleted" -#: ../../../../ajax/ajax_appMgmtSave.php:239 +#: ../../../../ajax/ajax_appMgmtSave.php:241 msgid "Error al eliminar el grupo" msgstr "Error on group deletion" -#: ../../../../ajax/ajax_appMgmtSave.php:278 +#: ../../../../ajax/ajax_appMgmtSave.php:280 msgid "Es necesario un nombre de perfil" msgstr "A profile name is needed" -#: ../../../../ajax/ajax_appMgmtSave.php:280 +#: ../../../../ajax/ajax_appMgmtSave.php:282 msgid "Nombre de perfil duplicado" msgstr "Duplicated profile name" -#: ../../../../ajax/ajax_appMgmtSave.php:285 +#: ../../../../ajax/ajax_appMgmtSave.php:287 msgid "Perfil creado" msgstr "Profile added" -#: ../../../../ajax/ajax_appMgmtSave.php:288 +#: ../../../../ajax/ajax_appMgmtSave.php:290 msgid "Error al crear el perfil" msgstr "Error on creating profile" -#: ../../../../ajax/ajax_appMgmtSave.php:291 +#: ../../../../ajax/ajax_appMgmtSave.php:293 msgid "Perfil actualizado" msgstr "Profile updated" -#: ../../../../ajax/ajax_appMgmtSave.php:294 +#: ../../../../ajax/ajax_appMgmtSave.php:296 msgid "Error al actualizar el perfil" msgstr "Error on updating profile" -#: ../../../../ajax/ajax_appMgmtSave.php:303 +#: ../../../../ajax/ajax_appMgmtSave.php:305 msgid "Perfil en uso por:" msgstr "Profiles in use by:" -#: ../../../../ajax/ajax_appMgmtSave.php:306 +#: ../../../../ajax/ajax_appMgmtSave.php:308 msgid "Perfil eliminado" msgstr "Profile deleted" -#: ../../../../ajax/ajax_appMgmtSave.php:309 +#: ../../../../ajax/ajax_appMgmtSave.php:311 msgid "Error al eliminar el perfil" msgstr "Error on profile deletion" -#: ../../../../ajax/ajax_appMgmtSave.php:344 +#: ../../../../ajax/ajax_appMgmtSave.php:346 msgid "Cliente creado" msgstr "Customer added" -#: ../../../../ajax/ajax_appMgmtSave.php:359 +#: ../../../../ajax/ajax_appMgmtSave.php:361 msgid "Cliente actualizado" msgstr "Customer updated" -#: ../../../../ajax/ajax_appMgmtSave.php:369 +#: ../../../../ajax/ajax_appMgmtSave.php:371 msgid "Cliente eliminado" msgstr "Customer deleted" -#: ../../../../ajax/ajax_appMgmtSave.php:383 +#: ../../../../ajax/ajax_appMgmtSave.php:385 msgid "Es necesario un nombre de categoría" msgstr "A category name needed" -#: ../../../../ajax/ajax_appMgmtSave.php:403 +#: ../../../../ajax/ajax_appMgmtSave.php:405 msgid "Categoría creada" msgstr "Category added" -#: ../../../../ajax/ajax_appMgmtSave.php:418 +#: ../../../../ajax/ajax_appMgmtSave.php:420 msgid "Categoría actualizada" msgstr "Category updated" -#: ../../../../ajax/ajax_appMgmtSave.php:429 +#: ../../../../ajax/ajax_appMgmtSave.php:431 msgid "Categoría eliminada" msgstr "Category deleted" -#: ../../../../ajax/ajax_appMgmtSave.php:445 +#: ../../../../ajax/ajax_appMgmtSave.php:447 msgid "Usuario o acción no indicado" msgstr "User or action not set" -#: ../../../../ajax/ajax_appMgmtSave.php:455 +#: ../../../../ajax/ajax_appMgmtSave.php:457 msgid "Autorización creada" msgstr "Authorization added" -#: ../../../../ajax/ajax_appMgmtSave.php:463 +#: ../../../../ajax/ajax_appMgmtSave.php:465 msgid "Autorización actualizada" msgstr "Authorization Updated" -#: ../../../../ajax/ajax_appMgmtSave.php:473 +#: ../../../../ajax/ajax_appMgmtSave.php:475 msgid "Autorización eliminada" msgstr "Authorization deleted" -#: ../../../../ajax/ajax_appMgmtSave.php:490 +#: ../../../../ajax/ajax_appMgmtSave.php:492 msgid "Nombre del campo no indicado" msgstr "Field name not set" -#: ../../../../ajax/ajax_appMgmtSave.php:492 +#: ../../../../ajax/ajax_appMgmtSave.php:494 msgid "Tipo del campo no indicado" msgstr "Field type not set" -#: ../../../../ajax/ajax_appMgmtSave.php:494 +#: ../../../../ajax/ajax_appMgmtSave.php:496 msgid "Módulo del campo no indicado" msgstr "Field module not set" -#: ../../../../ajax/ajax_appMgmtSave.php:508 +#: ../../../../ajax/ajax_appMgmtSave.php:510 msgid "Campo creado" msgstr "Field added" -#: ../../../../ajax/ajax_appMgmtSave.php:517 +#: ../../../../ajax/ajax_appMgmtSave.php:519 msgid "Campo actualizado" msgstr "Field updated" -#: ../../../../ajax/ajax_appMgmtSave.php:527 +#: ../../../../ajax/ajax_appMgmtSave.php:529 msgid "Campo eliminado" msgstr "Field deleted" @@ -561,7 +563,7 @@ msgid "Faltan parámetros de Proxy" msgstr "Missing proxy parameters " #: ../../../../ajax/ajax_configSave.php:125 -#: ../../../../web/ConfigC.class.php:120 +#: ../../../../web/ConfigC.class.php:122 #: ../../../../inc/themes/classic/profiles.inc:61 #: ../../../../inc/themes/material-blue/profiles.inc:72 msgid "General" @@ -572,7 +574,7 @@ msgid "Faltan parámetros de Wiki" msgstr "Missing Wiki parameters" #: ../../../../ajax/ajax_configSave.php:147 -#: ../../../../web/ConfigC.class.php:252 +#: ../../../../web/ConfigC.class.php:254 #: ../../../../inc/themes/classic/wiki.inc:4 #: ../../../../inc/themes/material-blue/wiki.inc:4 msgid "Wiki" @@ -583,7 +585,7 @@ msgid "Faltan parámetros de LDAP" msgstr "Missing LDAP parameters" #: ../../../../ajax/ajax_configSave.php:179 -#: ../../../../web/ConfigC.class.php:284 +#: ../../../../web/ConfigC.class.php:286 #: ../../../../inc/themes/classic/ldap.inc:4 #: ../../../../inc/themes/material-blue/ldap.inc:4 msgid "LDAP" @@ -594,7 +596,7 @@ msgid "Faltan parámetros de Correo" msgstr "Missing Mail parameters" #: ../../../../ajax/ajax_configSave.php:216 -#: ../../../../web/ConfigC.class.php:314 +#: ../../../../web/ConfigC.class.php:316 #: ../../../../inc/themes/classic/mail.inc:4 #: ../../../../inc/themes/material-blue/mail.inc:4 msgid "Correo" @@ -800,9 +802,9 @@ msgid "Clave maestra incorrecta" msgstr "Invalid Master Password" #: ../../../../ajax/ajax_doLogin.php:168 -#: ../../../../inc/ProfileBase.class.php:508 -#: ../../../../inc/ProfileBase.class.php:546 -#: ../../../../inc/ProfileBase.class.php:589 +#: ../../../../inc/ProfileBase.class.php:512 +#: ../../../../inc/ProfileBase.class.php:550 +#: ../../../../inc/ProfileBase.class.php:593 #: ../../../../web/UsersMgmtC.class.php:89 #: ../../../../inc/themes/classic/users.inc:37 #: ../../../../inc/themes/material-blue/users.inc:43 @@ -1035,11 +1037,11 @@ msgstr "Description" msgid "Error al enviar la solicitud" msgstr "Error on sending request" -#: ../../../../ajax/ajax_userPrefsSave.php:71 +#: ../../../../ajax/ajax_userPrefsSave.php:75 msgid "Error al actualizar preferencias" msgstr "Error while updating preferences" -#: ../../../../ajax/ajax_userPrefsSave.php:74 +#: ../../../../ajax/ajax_userPrefsSave.php:78 msgid "Preferencias actualizadas" msgstr "Preferences updated" @@ -1052,7 +1054,7 @@ msgstr "The master password does not match" msgid "No tiene permisos para acceder a esta cuenta" msgstr "You don't have permission to access to this account" -#: ../../../../ajax/ajax_viewpass.php:68 ../../../../inc/Acl.class.php:129 +#: ../../../../ajax/ajax_viewpass.php:68 ../../../../inc/Acl.class.php:133 #: ../../../../inc/themes/classic/account.inc:379 #: ../../../../inc/themes/classic/profiles.inc:23 #: ../../../../inc/themes/classic/search.inc:102 @@ -1105,7 +1107,7 @@ msgstr "Parameters help" #: ../../../../inc/XmlImportBase.class.php:28 #: ../../../../web/AccountC.class.php:38 #: ../../../../web/AccountsMgmtC.class.php:32 -#: ../../../../web/ConfigC.class.php:28 ../../../../web/EventlogC.class.php:28 +#: ../../../../web/ConfigC.class.php:30 ../../../../web/EventlogC.class.php:28 #: ../../../../web/SearchC.class.php:30 #: ../../../../web/UsersMgmtC.class.php:39 #: ../../../../web/UsersPrefsC.class.php:32 @@ -1139,8 +1141,8 @@ msgstr "Account Restore" msgid "No se pudieron obtener los datos de la cuenta" msgstr "Error while retrieving account data" -#: ../../../../inc/Account.class.php:400 ../../../../inc/Acl.class.php:125 -#: ../../../../web/AccountC.class.php:147 ../../../../web/MainC.class.php:153 +#: ../../../../inc/Account.class.php:400 ../../../../inc/Acl.class.php:129 +#: ../../../../web/AccountC.class.php:147 ../../../../web/MainC.class.php:155 msgid "Nueva Cuenta" msgstr "New Account" @@ -1148,7 +1150,7 @@ msgstr "New Account" msgid "ERROR: Error en la operación." msgstr "ERROR: Operation failed" -#: ../../../../inc/Account.class.php:423 ../../../../inc/Acl.class.php:130 +#: ../../../../inc/Account.class.php:423 ../../../../inc/Acl.class.php:134 #: ../../../../web/AccountC.class.php:352 #: ../../../../inc/themes/classic/account.inc:366 #: ../../../../inc/themes/classic/search.inc:129 @@ -1237,39 +1239,39 @@ msgstr "Error on updating history's master password" msgid "Registros actualizados" msgstr "Records updated" -#: ../../../../inc/Acl.class.php:108 +#: ../../../../inc/Acl.class.php:112 msgid "Denegado acceso a" msgstr "Access denied to" -#: ../../../../inc/Acl.class.php:122 +#: ../../../../inc/Acl.class.php:126 msgid "Buscar Cuentas" msgstr "Search Accounts" -#: ../../../../inc/Acl.class.php:123 +#: ../../../../inc/Acl.class.php:127 msgid "Ver Cuenta" msgstr "View Account" -#: ../../../../inc/Acl.class.php:124 ../../../../web/AccountC.class.php:259 +#: ../../../../inc/Acl.class.php:128 ../../../../web/AccountC.class.php:259 #: ../../../../inc/themes/classic/search.inc:123 #: ../../../../inc/themes/material-blue/search.inc:136 msgid "Copiar Cuenta" msgstr "Copy Account" -#: ../../../../inc/Acl.class.php:126 ../../../../web/AccountC.class.php:323 +#: ../../../../inc/Acl.class.php:130 ../../../../web/AccountC.class.php:323 msgid "Editar Cuenta" msgstr "Edit Account" -#: ../../../../inc/Acl.class.php:127 +#: ../../../../inc/Acl.class.php:131 msgid "Editar Clave de Cuenta" msgstr "Edit Account Password" -#: ../../../../inc/Acl.class.php:128 +#: ../../../../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:131 +#: ../../../../inc/Acl.class.php:135 #: ../../../../inc/themes/classic/account.inc:188 #: ../../../../inc/themes/classic/profiles.inc:50 #: ../../../../inc/themes/material-blue/account.inc:230 @@ -1278,62 +1280,70 @@ msgstr "View History" msgid "Archivos" msgstr "Files" -#: ../../../../inc/Acl.class.php:132 +#: ../../../../inc/Acl.class.php:136 msgid "Peticiones" msgstr "Requests" -#: ../../../../inc/Acl.class.php:133 +#: ../../../../inc/Acl.class.php:137 msgid "Gestión Aplicación" msgstr "Application Management" -#: ../../../../inc/Acl.class.php:134 +#: ../../../../inc/Acl.class.php:138 msgid "Gestión Categorías" msgstr "Categories Management" -#: ../../../../inc/Acl.class.php:135 +#: ../../../../inc/Acl.class.php:139 msgid "Gestión Clientes" msgstr "Customers Management" -#: ../../../../inc/Acl.class.php:136 ../../../../inc/Acl.class.php:137 +#: ../../../../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:138 +#: ../../../../inc/Acl.class.php:144 msgid "Gestión Grupos" msgstr "Groups Management" -#: ../../../../inc/Acl.class.php:139 +#: ../../../../inc/Acl.class.php:145 msgid "Gestión Perfiles" msgstr "Profiles Management" -#: ../../../../inc/Acl.class.php:140 ../../../../inc/Config.class.php:118 -#: ../../../../inc/Config.class.php:400 ../../../../web/MainC.class.php:171 +#: ../../../../inc/Acl.class.php:146 ../../../../inc/Config.class.php:118 +#: ../../../../inc/Config.class.php:400 ../../../../web/MainC.class.php:173 #: ../../../../inc/themes/classic/profiles.inc:57 #: ../../../../inc/themes/material-blue/profiles.inc:66 msgid "Configuración" msgstr "Configuration" -#: ../../../../inc/Acl.class.php:141 +#: ../../../../inc/Acl.class.php:147 msgid "Configuración General" msgstr "General configuration" -#: ../../../../inc/Acl.class.php:142 ../../../../web/ConfigC.class.php:143 +#: ../../../../inc/Acl.class.php:148 ../../../../web/ConfigC.class.php:145 #: ../../../../inc/themes/classic/profiles.inc:65 #: ../../../../inc/themes/material-blue/profiles.inc:77 msgid "Encriptación" msgstr "Encryption" -#: ../../../../inc/Acl.class.php:143 ../../../../web/ConfigC.class.php:185 +#: ../../../../inc/Acl.class.php:149 ../../../../web/ConfigC.class.php:187 #: ../../../../inc/themes/classic/backup.inc:4 #: ../../../../inc/themes/material-blue/backup.inc:4 msgid "Copia de Seguridad" msgstr "Backup" -#: ../../../../inc/Acl.class.php:144 +#: ../../../../inc/Acl.class.php:150 msgid "Exportar" msgstr "Export" -#: ../../../../inc/Acl.class.php:145 +#: ../../../../inc/Acl.class.php:151 #: ../../../../inc/themes/classic/profiles.inc:74 #: ../../../../inc/themes/material-blue/profiles.inc:87 msgid "Importar" @@ -1529,7 +1539,7 @@ msgstr "Please, check CSV format in line %s" #: ../../../../inc/Migrate.class.php:349 #: ../../../../inc/XmlImport.class.php:62 #: ../../../../inc/XmlImport.class.php:63 -#: ../../../../web/ConfigC.class.php:207 +#: ../../../../web/ConfigC.class.php:209 msgid "Importar Cuentas" msgstr "Import Accounts" @@ -1599,14 +1609,14 @@ msgstr "Delete Customer" #: ../../../../inc/DBConnectionFactory.class.php:87 #: ../../../../inc/DBConnectionFactory.class.php:89 #: ../../../../inc/DBConnectionFactory.class.php:103 -#: ../../../../inc/Installer.class.php:251 +#: ../../../../inc/Installer.class.php:235 #: ../../../../inc/Migrate.class.php:115 msgid "No es posible conectar con la BD" msgstr "Unable to connect to the DB" #: ../../../../inc/DBConnectionFactory.class.php:87 #: ../../../../inc/DBConnectionFactory.class.php:89 -#: ../../../../inc/Installer.class.php:252 +#: ../../../../inc/Installer.class.php:236 #: ../../../../inc/Migrate.class.php:116 msgid "Compruebe los datos de conexión" msgstr "Please, check connection parameters" @@ -1787,152 +1797,148 @@ msgstr "Version updating done." msgid "Versión" msgstr "Version" -#: ../../../../inc/Installer.class.php:151 +#: ../../../../inc/Installer.class.php:127 msgid "Indicar nombre de usuario admin" msgstr "Enter the admin username" -#: ../../../../inc/Installer.class.php:152 +#: ../../../../inc/Installer.class.php:128 msgid "Usuario admin para acceso a la aplicación" msgstr "Admin user to login to the application" -#: ../../../../inc/Installer.class.php:156 +#: ../../../../inc/Installer.class.php:132 msgid "Indicar la clave de admin" msgstr "Enter the admin's password" -#: ../../../../inc/Installer.class.php:157 +#: ../../../../inc/Installer.class.php:133 msgid "Clave del usuario admin de la aplicación" msgstr "Application administrator's password" -#: ../../../../inc/Installer.class.php:161 +#: ../../../../inc/Installer.class.php:137 msgid "Indicar la clave maestra" msgstr "Enter the master password" -#: ../../../../inc/Installer.class.php:162 +#: ../../../../inc/Installer.class.php:138 msgid "Clave maestra para encriptar las claves" msgstr "Master password to encrypt the passwords" -#: ../../../../inc/Installer.class.php:166 +#: ../../../../inc/Installer.class.php:142 msgid "Clave maestra muy corta" msgstr "Master password too short" -#: ../../../../inc/Installer.class.php:167 +#: ../../../../inc/Installer.class.php:143 msgid "La longitud de la clave maestra ha de ser mayor de 11 caracteres" msgstr "The master password length need to be at least 11 characters" -#: ../../../../inc/Installer.class.php:171 +#: ../../../../inc/Installer.class.php:147 msgid "Indicar el usuario de la BBDD" msgstr "Enter the database user" -#: ../../../../inc/Installer.class.php:172 +#: ../../../../inc/Installer.class.php:148 msgid "Usuario con permisos de administrador de la Base de Datos" msgstr "An user with database administrative rights" -#: ../../../../inc/Installer.class.php:176 +#: ../../../../inc/Installer.class.php:152 msgid "Indicar la clave de la BBDD" msgstr "Enter the database password" -#: ../../../../inc/Installer.class.php:177 +#: ../../../../inc/Installer.class.php:153 msgid "Clave del usuario administrador de la Base de Datos" msgstr "Database administartor's password" -#: ../../../../inc/Installer.class.php:181 +#: ../../../../inc/Installer.class.php:157 msgid "Indicar el nombre de la BBDD" msgstr "Enter the database name" -#: ../../../../inc/Installer.class.php:182 +#: ../../../../inc/Installer.class.php:158 msgid "Nombre para la BBDD de la aplicación pej. syspass" msgstr "Application database name. eg. syspass" -#: ../../../../inc/Installer.class.php:186 +#: ../../../../inc/Installer.class.php:162 msgid "El nombre de la BBDD no puede contener \".\"" msgstr "Database name cannot contain \".\"" -#: ../../../../inc/Installer.class.php:187 +#: ../../../../inc/Installer.class.php:163 msgid "Elimine los puntos del nombre de la Base de Datos" msgstr "Please, remove dots in database name" -#: ../../../../inc/Installer.class.php:191 +#: ../../../../inc/Installer.class.php:167 msgid "Indicar el servidor de la BBDD" msgstr "Enter the database server" -#: ../../../../inc/Installer.class.php:192 +#: ../../../../inc/Installer.class.php:168 msgid "Servidor donde se instalará la Base de Datos" msgstr "Server where the database will be installed" -#: ../../../../inc/Installer.class.php:314 +#: ../../../../inc/Installer.class.php:313 msgid "El usuario de MySQL ya existe" msgstr "The MySQL user already exist" -#: ../../../../inc/Installer.class.php:315 +#: ../../../../inc/Installer.class.php:314 msgid "Indique un nuevo usuario o elimine el existente" msgstr "Enter a new username or delete the existing one" -#: ../../../../inc/Installer.class.php:328 +#: ../../../../inc/Installer.class.php:327 msgid "La BBDD ya existe" msgstr "The database already exist" -#: ../../../../inc/Installer.class.php:329 +#: ../../../../inc/Installer.class.php:328 msgid "Indique una nueva Base de Datos o elimine la existente" msgstr "Enter a new database or delete the existing one" -#: ../../../../inc/Installer.class.php:338 -#: ../../../../inc/Installer.class.php:409 +#: ../../../../inc/Installer.class.php:337 +#: ../../../../inc/Installer.class.php:408 msgid "Error al crear la BBDD" msgstr "Error on DB creation" -#: ../../../../inc/Installer.class.php:339 -#: ../../../../inc/Installer.class.php:350 +#: ../../../../inc/Installer.class.php:338 +#: ../../../../inc/Installer.class.php:349 msgid "Verifique los permisos del usuario de la Base de Datos" msgstr "Please, check database user permissions" -#: ../../../../inc/Installer.class.php:349 +#: ../../../../inc/Installer.class.php:348 msgid "Error al establecer permisos de la BBDD" msgstr "Error on setting database permissions" -#: ../../../../inc/Installer.class.php:382 +#: ../../../../inc/Installer.class.php:381 msgid "El archivo de estructura de la BBDD no existe" msgstr "The database structure file does not exist" -#: ../../../../inc/Installer.class.php:383 +#: ../../../../inc/Installer.class.php:382 msgid "No es posible crear la BBDD de la aplicación. Descárguela de nuevo." msgstr "Unable to create the application database. Please, download it again." -#: ../../../../inc/Installer.class.php:391 +#: ../../../../inc/Installer.class.php:390 msgid "Error al seleccionar la BBDD" msgstr "Error on selecting database." -#: ../../../../inc/Installer.class.php:392 -msgid "" -"No es posible usar la Base de Datos para crear la estructura. Compruebe los " -"permisos y que no exista." -msgstr "" -"Unable to use the database to create the structure. Check permissions and it " -"does not exist." +#: ../../../../inc/Installer.class.php:391 +msgid "No es posible usar la Base de Datos para crear la estructura. Compruebe los permisos y que no exista." +msgstr "Unable to use the database to create the structure. Check permissions and it does not exist." -#: ../../../../inc/Installer.class.php:410 +#: ../../../../inc/Installer.class.php:409 msgid "Error al crear la estructura de la Base de Datos." msgstr "Error on creating database structure." -#: ../../../../inc/Installer.class.php:433 +#: ../../../../inc/Installer.class.php:432 msgid "Error al crear el grupo \"admin\"" msgstr "Error on creating \"admin\" group" -#: ../../../../inc/Installer.class.php:434 -#: ../../../../inc/Installer.class.php:467 -#: ../../../../inc/Installer.class.php:484 -#: ../../../../inc/Installer.class.php:497 +#: ../../../../inc/Installer.class.php:433 +#: ../../../../inc/Installer.class.php:466 +#: ../../../../inc/Installer.class.php:483 +#: ../../../../inc/Installer.class.php:496 msgid "Informe al desarrollador" msgstr "Warn to developer" -#: ../../../../inc/Installer.class.php:466 +#: ../../../../inc/Installer.class.php:465 msgid "Error al crear el perfil \"admin\"" msgstr "Error on creating \"admin\" profile" -#: ../../../../inc/Installer.class.php:483 +#: ../../../../inc/Installer.class.php:482 msgid "Error al crear el usuario \"admin\"" msgstr "Error on creating \"admin\" user" -#: ../../../../inc/Installer.class.php:496 +#: ../../../../inc/Installer.class.php:495 msgid "Error al actualizar la clave maestra del usuario \"admin\"" msgstr "Error on updating master password for user \"admin\"" @@ -2143,12 +2149,12 @@ msgstr "Error while doing operation" msgid "Datos de perfil incorrectos" msgstr "Wrong profile data" -#: ../../../../inc/ProfileBase.class.php:546 +#: ../../../../inc/ProfileBase.class.php:550 #: ../../../../web/UsersMgmtC.class.php:274 msgid "Eliminar Perfil" msgstr "Delete Profile" -#: ../../../../inc/ProfileBase.class.php:589 +#: ../../../../inc/ProfileBase.class.php:593 msgid "Modificar Perfil" msgstr "Edit Profile" @@ -2256,8 +2262,7 @@ msgid "Versión de PHP requerida >= " msgstr "Required PHP version >=" #: ../../../../inc/Util.class.php:123 -msgid "" -"Actualice la versión de PHP para que la aplicación funcione correctamente" +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:159 @@ -2549,23 +2554,23 @@ msgstr "Delete Field" msgid "Campos Personalizados" msgstr "Custom Fields" -#: ../../../../web/ConfigC.class.php:176 +#: ../../../../web/ConfigC.class.php:178 msgid "Último backup" msgstr "Last backup" -#: ../../../../web/ConfigC.class.php:176 +#: ../../../../web/ConfigC.class.php:178 msgid "No se encontraron backups" msgstr "There are no backups available" -#: ../../../../web/ConfigC.class.php:183 +#: ../../../../web/ConfigC.class.php:185 msgid "Última exportación" msgstr "Last export" -#: ../../../../web/ConfigC.class.php:183 +#: ../../../../web/ConfigC.class.php:185 msgid "No se encontró archivo de exportación" msgstr "No export file found" -#: ../../../../web/ConfigC.class.php:228 +#: ../../../../web/ConfigC.class.php:230 msgid "Información" msgstr "Information" @@ -2577,117 +2582,114 @@ msgstr "Event log cleared" msgid "Error al vaciar el registro de eventos" msgstr "Error on clearing event log" -#: ../../../../web/MainC.class.php:129 +#: ../../../../web/MainC.class.php:131 #: ../../../../web/UsersMgmtC.class.php:100 msgid "Admin Aplicación" msgstr "Application Admin" -#: ../../../../web/MainC.class.php:147 +#: ../../../../web/MainC.class.php:149 msgid "Buscar" msgstr "Search" -#: ../../../../web/MainC.class.php:159 +#: ../../../../web/MainC.class.php:161 #: ../../../../web/UsersMgmtC.class.php:163 msgid "Gestión de Usuarios" msgstr "Users Management" -#: ../../../../web/MainC.class.php:165 +#: ../../../../web/MainC.class.php:167 msgid "Gestión de Clientes y Categorías" msgstr "Customer and Categories management" -#: ../../../../web/MainC.class.php:177 +#: ../../../../web/MainC.class.php:179 #: ../../../../inc/themes/classic/eventlog.inc:4 #: ../../../../inc/themes/material-blue/eventlog.inc:3 msgid "Registro de Eventos" msgstr "Event Log" -#: ../../../../web/MainC.class.php:197 -msgid "Nuevo interface de búsqueda con estilo de lista o tipo tarjeta" -msgstr "New search interface with list or card like styles" - -#: ../../../../web/MainC.class.php:198 -msgid "Selección de grupos y usuarios de acceso a cuentas" -msgstr "Users and groups selection for account access" - #: ../../../../web/MainC.class.php:199 -msgid "Drag&Drop para subida de archivos" -msgstr "Drag&Drop for files uploading" +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:200 -msgid "Copiar clave al portapapeles" -msgstr "Copy password to clipboard" +msgid "Usuarios en múltiples grupos" +msgstr "Users can belong to multiple groups" #: ../../../../web/MainC.class.php:201 -msgid "Historial de cuentas y restauración" -msgstr "Accounts history and restore points" +msgid "Previsualización de imágenes" +msgstr "Images previsualization" #: ../../../../web/MainC.class.php:202 -msgid "Nueva gestión de categorías y clientes" -msgstr "New categories and customers management" +msgid "Mostrar claves como imágenes" +msgstr "Show passwords as images" #: ../../../../web/MainC.class.php:203 -msgid "Función de olvido de claves para usuarios" -msgstr "Reset password function for users" +msgid "Campos personalizados" +msgstr "Custom Fields" #: ../../../../web/MainC.class.php:204 -msgid "Integración con Active Directory y LDAP mejorada" -msgstr "Improved Active Directory and LDAP integration" +msgid "API de consultas" +msgstr "API queries" #: ../../../../web/MainC.class.php:205 -msgid "Autentificación para notificaciones por correo" -msgstr "Email notifications with authentication" +#: ../../../../inc/themes/classic/2fa.inc:9 +#: ../../../../inc/themes/material-blue/2fa.inc:9 +#: ../../../../inc/themes/material-blue/security.inc:13 +msgid "Autentificación en 2 pasos" +msgstr "Two factor authentication" #: ../../../../web/MainC.class.php:206 -msgid "Búsqueda global de cuentas para usuarios sin permisos" -msgstr "Global account searching for unprivileged users" +msgid "Complejidad de generador de claves" +msgstr "Random number generator with complexity configuration" #: ../../../../web/MainC.class.php:207 -msgid "Solicitudes de modificación de cuentas para usuarios sin permisos" -msgstr "Requests for account modification for unprivileged users" +msgid "Consultas especiales" +msgstr "Special queries" #: ../../../../web/MainC.class.php:208 -msgid "Importación de cuentas desde KeePass, KeePassX y CSV" -msgstr "Accounts import from KeePass, KeePassX and CSV" +msgid "Exportación a XML" +msgstr "XML Export" #: ../../../../web/MainC.class.php:209 -msgid "Función de copiar cuentas" -msgstr "Clone account function" +msgid "Clave maestra temporal" +msgstr "Temporary master password" #: ../../../../web/MainC.class.php:210 +msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV" +msgstr "Accounts import from KeePass, KeePassX and CSV" + +#: ../../../../web/MainC.class.php:211 msgid "Optimización del código y mayor rapidez de carga" msgstr "Code optimization and faster loading" -#: ../../../../web/MainC.class.php:211 +#: ../../../../web/MainC.class.php:212 msgid "Mejoras de seguridad en XSS e inyección SQL" msgstr "Improved security to prevent XSS and SQL injection" -#: ../../../../web/MainC.class.php:253 +#: ../../../../web/MainC.class.php:254 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:254 +#: ../../../../web/MainC.class.php:255 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:261 +#: ../../../../web/MainC.class.php:262 msgid "No se encuentra el generador de números aleatorios." msgstr "Cannot find random number generator." -#: ../../../../web/MainC.class.php:262 -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:263 +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:281 +#: ../../../../web/MainC.class.php:282 msgid "Instalación finalizada" msgstr "Installation finished" -#: ../../../../web/MainC.class.php:282 +#: ../../../../web/MainC.class.php:283 msgid "Pulse aquí para acceder" msgstr "Click here to sign in" -#: ../../../../web/MainC.class.php:377 +#: ../../../../web/MainC.class.php:378 msgid "Descargar nueva versión" msgstr "Download new version" @@ -2786,12 +2788,6 @@ msgstr "Authorizations" msgid "Seguridad" msgstr "Security" -#: ../../../../inc/themes/classic/2fa.inc:9 -#: ../../../../inc/themes/material-blue/2fa.inc:9 -#: ../../../../inc/themes/material-blue/security.inc:13 -msgid "Autentificación en 2 pasos" -msgstr "Two factor authentication" - #: ../../../../inc/themes/classic/2fa.inc:14 #: ../../../../inc/themes/material-blue/2fa.inc:14 msgid "Introducir código" @@ -3095,21 +3091,13 @@ msgstr "Help" #: ../../../../inc/themes/classic/backup.inc:50 #: ../../../../inc/themes/material-blue/backup.inc:52 -msgid "" -"La copia de seguridad permite guardar y descargar tanto la base de datos de " -"sysPass como los archivos de la aplicación y su configuración." -msgstr "" -"The backup allows to save and download either sysPass database or " -"application files and its configuracion." +msgid "La copia de seguridad permite guardar y descargar tanto la base de datos de sysPass como los archivos de la aplicación y su configuración." +msgstr "The backup allows to save and download either sysPass database or application files and its configuracion." #: ../../../../inc/themes/classic/backup.inc:52 #: ../../../../inc/themes/material-blue/backup.inc:54 -msgid "" -"Con este método es posible guardar todos los datos de sysPass en otro lugar " -"o utilizarlos para hacer la aplicación portable." -msgstr "" -"With this method it's possible to save all sysPass data in another place or " -"use it to make a portable application." +msgid "Con este método es posible guardar todos los datos de sysPass en otro lugar o utilizarlos para hacer la aplicación portable." +msgstr "With this method it's possible to save all sysPass data in another place or use it to make a portable application." #: ../../../../inc/themes/classic/backup.inc:60 #: ../../../../inc/themes/classic/backup.inc:126 @@ -3136,12 +3124,8 @@ msgstr "Export Password (repeat)" #: ../../../../inc/themes/classic/backup.inc:118 #: ../../../../inc/themes/material-blue/backup.inc:134 -msgid "" -"La exportación de cuentas permite guardar las cuentas y sus datos en formato " -"XML para posteriormente poder ser importados en otras instancias de sysPass." -msgstr "" -"The accounts export allows to save the accounts and their data in XML format " -"to be imported in another sysPass intances." +msgid "La exportación de cuentas permite guardar las cuentas y sus datos en formato XML para posteriormente poder ser importados en otras instancias de sysPass." +msgstr "The accounts export allows to save the accounts and their data in XML format to be imported in another sysPass intances." #: ../../../../inc/themes/classic/backup.inc:120 #: ../../../../inc/themes/material-blue/backup.inc:136 @@ -3150,20 +3134,13 @@ msgstr "The exported items are accounts, customers and categories." #: ../../../../inc/themes/classic/backup.inc:122 #: ../../../../inc/themes/material-blue/backup.inc:138 -msgid "" -"Las claves de las cuentas son exportadas de forma encriptada para mayor " -"seguridad." -msgstr "" -"The accounts passwords are exported in an excrypted way for better security." +msgid "Las claves de las cuentas son exportadas de forma encriptada para mayor seguridad." +msgstr "The accounts passwords are exported in an excrypted way for better security." #: ../../../../inc/themes/classic/backup.inc:124 #: ../../../../inc/themes/material-blue/backup.inc:140 -msgid "" -"Es posible establecer una clave de exportación para guardar todos los datos " -"encriptados en el archivo XML." -msgstr "" -"It's possible to set an export password to save whole data encrypted in the " -"XML file." +msgid "Es posible establecer una clave de exportación para guardar todos los datos encriptados en el archivo XML." +msgstr "It's possible to set an export password to save whole data encrypted in the XML file." #: ../../../../inc/themes/classic/body.inc:4 #: ../../../../inc/themes/material-blue/body.inc:4 @@ -3218,11 +3195,8 @@ msgstr "Enable debug" #: ../../../../inc/themes/classic/config.inc:62 #: ../../../../inc/themes/material-blue/config.inc:70 -msgid "" -"Muestra información relativa a la configuración de la aplicación y " -"rendimiento." -msgstr "" -"Shows some information about application configuration and performance." +msgid "Muestra información relativa a la configuración de la aplicación y rendimiento." +msgstr "Shows some information about application configuration and performance." #: ../../../../inc/themes/classic/config.inc:74 #: ../../../../inc/themes/material-blue/config.inc:84 @@ -3231,12 +3205,8 @@ msgstr "Maintenance mode" #: ../../../../inc/themes/classic/config.inc:78 #: ../../../../inc/themes/material-blue/config.inc:88 -msgid "" -"En este modo no se puede acceder a la aplicación. Para deshabilitarlo es " -"necesario modificar el archivo de configuración." -msgstr "" -"In this mode nobody can login to the application. To disable it, you need to " -"modify the configuration file." +msgid "En este modo no se puede acceder a la aplicación. Para deshabilitarlo es necesario modificar el archivo de configuración." +msgstr "In this mode nobody can login to the application. To disable it, you need to modify the configuration file." #: ../../../../inc/themes/classic/config.inc:90 #: ../../../../inc/themes/material-blue/config.inc:102 @@ -3245,9 +3215,7 @@ msgstr "Check for updates" #: ../../../../inc/themes/classic/config.inc:94 #: ../../../../inc/themes/material-blue/config.inc:106 -msgid "" -"Comprobar actualizaciones de la aplicación (sólo para los usuarios " -"administradores)." +msgid "Comprobar actualizaciones de la aplicación (sólo para los usuarios administradores)." msgstr "Check for application updates (only for administrators)." #: ../../../../inc/themes/classic/config.inc:106 @@ -3257,12 +3225,8 @@ msgstr "Check for notices" #: ../../../../inc/themes/classic/config.inc:110 #: ../../../../inc/themes/material-blue/config.inc:124 -msgid "" -"Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo " -"para los usuarios administradores)." -msgstr "" -"Check if there are sysPass security or warning notices (only for " -"administrators)." +msgid "Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo para los usuarios administradores)." +msgstr "Check if there are sysPass security or warning notices (only for administrators)." #: ../../../../inc/themes/classic/config.inc:122 #: ../../../../inc/themes/material-blue/config.inc:145 @@ -3271,9 +3235,7 @@ msgstr "Account name as link" #: ../../../../inc/themes/classic/config.inc:126 #: ../../../../inc/themes/material-blue/config.inc:149 -msgid "" -"Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles " -"de la cuenta." +msgid "Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles de la cuenta." msgstr "Enables the account name as a link to account details." #: ../../../../inc/themes/classic/config.inc:138 @@ -3293,12 +3255,8 @@ msgstr "Global searches" #: ../../../../inc/themes/classic/config.inc:158 #: ../../../../inc/themes/material-blue/config.inc:168 -msgid "" -"Permite que todos los usuarios puedan realizar búsquedas en todas las " -"cuentas, pero no pueden ver el contenido de las que no tienen permisos." -msgstr "" -"Allows to the users to do searches that includes all account, even if they " -"don't have permissions, but they can't view the accounts details." +msgid "Permite que todos los usuarios puedan realizar búsquedas en todas las cuentas, pero no pueden ver el contenido de las que no tienen permisos." +msgstr "Allows to the users to do searches that includes all account, even if they don't have permissions, but they can't view the accounts details." #: ../../../../inc/themes/classic/config.inc:170 #: ../../../../inc/themes/material-blue/config.inc:251 @@ -3317,12 +3275,8 @@ msgstr "Max 4 characters allowed." #: ../../../../inc/themes/classic/config.inc:182 #: ../../../../inc/themes/material-blue/config.inc:263 -msgid "" -"Escribir extensión y pulsar intro para añadir. Es necesario guardar la " -"configuración." -msgstr "" -"Write the extension and press enter to add. You need to save the " -"configuration." +msgid "Escribir extensión y pulsar intro para añadir. Es necesario guardar la configuración." +msgstr "Write the extension and press enter to add. You need to save the configuration." #: ../../../../inc/themes/classic/config.inc:197 #: ../../../../inc/themes/material-blue/config.inc:278 @@ -3365,8 +3319,7 @@ msgstr "Generate an image with a text of the account password." #: ../../../../inc/themes/classic/config.inc:250 #: ../../../../inc/themes/material-blue/config.inc:210 msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad." -msgstr "" -"Useful for environments where copy password to clipboard is a security risk." +msgstr "Useful for environments where copy password to clipboard is a security risk." #: ../../../../inc/themes/classic/config.inc:285 #: ../../../../inc/themes/material-blue/config.inc:400 @@ -3477,21 +3430,13 @@ msgstr "Users will need to enter the new master key." #: ../../../../inc/themes/classic/encryption.inc:98 #: ../../../../inc/themes/material-blue/encryption.inc:112 -msgid "" -"La clave maestra es utilizada para encriptar las claves de las cuentas de " -"sysPass para mantenerlas seguras." -msgstr "" -"The master password is used to encryt sysPass accounts passwords and keep " -"them safe." +msgid "La clave maestra es utilizada para encriptar las claves de las cuentas de sysPass para mantenerlas seguras." +msgstr "The master password is used to encryt sysPass accounts passwords and keep them safe." #: ../../../../inc/themes/classic/encryption.inc:100 #: ../../../../inc/themes/material-blue/encryption.inc:114 -msgid "" -"Es recomendable cambiarla cada cierto tiempo y utilizar una clave compleja " -"que incluya números, letras y símbolos." -msgstr "" -"It's advisable to change it from time to time and use a complex password " -"that includes numbers, letters and symbols." +msgid "Es recomendable cambiarla cada cierto tiempo y utilizar una clave compleja que incluya números, letras y símbolos." +msgstr "It's advisable to change it from time to time and use a complex password that includes numbers, letters and symbols." #: ../../../../inc/themes/classic/encryption.inc:108 #: ../../../../inc/themes/material-blue/encryption.inc:124 @@ -3522,13 +3467,8 @@ msgstr "Life" #: ../../../../inc/themes/classic/encryption.inc:157 #: ../../../../inc/themes/material-blue/encryption.inc:176 -msgid "" -"La clave temporal es utilizada como clave maestra para los usuarios que " -"necesitan introducirla al iniciar la sesión, así no es necesario facilitar " -"la clave maestra original." -msgstr "" -"The temporary password is used as a master password for the users that need " -"to enter when login, so there is no need to tell the real master password." +msgid "La clave temporal es utilizada como clave maestra para los usuarios que necesitan introducirla al iniciar la sesión, así no es necesario facilitar la clave maestra original." +msgstr "The temporary password is used as a master password for the users that need to enter when login, so there is no need to tell the real master password." #: ../../../../inc/themes/classic/encryption.inc:159 #: ../../../../inc/themes/material-blue/encryption.inc:180 @@ -3590,12 +3530,12 @@ msgstr "Last page" msgid "Ver Archivo" msgstr "View File" -#: ../../../../inc/themes/classic/footer.inc:7 +#: ../../../../inc/themes/classic/footer.inc:10 #: ../../../../inc/themes/material-blue/footer.inc:18 msgid "Ayuda :: FAQ :: Changelog" msgstr "Help :: FAQ :: Changelog" -#: ../../../../inc/themes/classic/footer.inc:10 +#: ../../../../inc/themes/classic/footer.inc:13 #: ../../../../inc/themes/material-blue/footer.inc:23 msgid "Un proyecto de cygnux.org" msgstr "A cygnux.org project" @@ -3721,34 +3661,23 @@ msgid "Soltar archivo aquí o click para seleccionar" msgstr "Drop files here or click to select" #: ../../../../inc/themes/classic/import.inc:175 -msgid "" -"Permite realizar la importación de Cuentas, Categorías y Clientes desde " -"arhcivos XML y CSV." -msgstr "" -"Allows to make the Accounts, Categories and Customers import from XML or CSV " -"files." +msgid "Permite realizar la importación de Cuentas, Categorías y Clientes desde arhcivos XML y CSV." +msgstr "Allows to make the Accounts, Categories and Customers import from XML or CSV files." #: ../../../../inc/themes/classic/import.inc:177 #: ../../../../inc/themes/material-blue/import.inc:106 -msgid "" -"Los formatos de archivos XML soportados son: sysPass, KeePass y KeePassX" +msgid "Los formatos de archivos XML soportados son: sysPass, KeePass y KeePassX" msgstr "The supported XML file formats are: sysPass, KeePass and KeePassX" #: ../../../../inc/themes/classic/import.inc:179 #: ../../../../inc/themes/material-blue/import.inc:108 -msgid "" -"Arrastar el archivo a importar a la zona indicada o hacer click sobre la " -"flecha." +msgid "Arrastar el archivo a importar a la zona indicada o hacer click sobre la flecha." msgstr "Drag&Drop the file to the import zone or click over the arrow." #: ../../../../inc/themes/classic/import.inc:181 #: ../../../../inc/themes/material-blue/import.inc:110 -msgid "" -"Para archivos de KeePass o KeePassX, el nombre del cliente será igual a " -"KeePass o KeePassX y la categoría igual al nombre de los grupos." -msgstr "" -"For KeePass or KeePassX files, the customer name will be KeePass or KeePassX " -"and the category name like groups names." +msgid "Para archivos de KeePass o KeePassX, el nombre del cliente será igual a KeePass o KeePassX y la categoría igual al nombre de los grupos." +msgstr "For KeePass or KeePassX files, the customer name will be KeePass or KeePassX and the category name like groups names." #: ../../../../inc/themes/classic/import.inc:183 #: ../../../../inc/themes/material-blue/import.inc:112 @@ -3762,12 +3691,8 @@ msgstr "account_name;customer;category;url;user;password;notes" #: ../../../../inc/themes/classic/import.inc:187 #: ../../../../inc/themes/material-blue/import.inc:116 -msgid "" -"En todos los casos, si el cliente o la categoría no están creados, se crean " -"automáticamente." -msgstr "" -"In all cases, if the customer o category aren't created, they are " -"automatically created." +msgid "En todos los casos, si el cliente o la categoría no están creados, se crean automáticamente." +msgstr "In all cases, if the customer o category aren't created, they are automatically created." #: ../../../../inc/themes/classic/info.inc:4 #: ../../../../inc/themes/material-blue/info.inc:4 @@ -3922,8 +3847,7 @@ msgstr "LDAP base to do the LDAP users searches." #: ../../../../inc/themes/classic/ldap.inc:120 #: ../../../../inc/themes/material-blue/ldap.inc:143 -msgid "" -"Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso." +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 @@ -3933,8 +3857,7 @@ msgstr "This group needs to be placed in the LDAP search base." #: ../../../../inc/themes/classic/ldap.inc:148 #: ../../../../inc/themes/material-blue/ldap.inc:174 -msgid "" -"Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP." +msgid "Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP." msgstr "Define the default users group for new LDAP users" #: ../../../../inc/themes/classic/ldap.inc:165 @@ -3944,8 +3867,7 @@ msgstr "Default Profile" #: ../../../../inc/themes/classic/ldap.inc:169 #: ../../../../inc/themes/material-blue/ldap.inc:194 -msgid "" -"Define el perfil de usuarios por defecto para los nuevos usuarios de LDAP." +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 @@ -4354,18 +4276,12 @@ msgstr "Two factor authentication" #: ../../../../inc/themes/classic/security.inc:17 #: ../../../../inc/themes/material-blue/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 "" -"Enables two factor authentication that requires to enter a token that is " -"generated by an application like Google Authenticator." +msgid "Habilita la autentificación en 2 pasos que requiere de la introducción de un token generado por una aplicación como Google Authenticator." +msgstr "Enables two factor authentication that requires to enter a token that is generated by an application like Google Authenticator." #: ../../../../inc/themes/classic/security.inc:21 #: ../../../../inc/themes/material-blue/security.inc:21 -msgid "" -"Escanee el código QR proporcionado y a continuación introduzca la clave de 6 " -"dígitos." +msgid "Escanee el código QR proporcionado y a continuación introduzca la clave de 6 dígitos." msgstr "Scan the provided QR code and then enter the 6 digits code." #: ../../../../inc/themes/classic/security.inc:29 @@ -4385,12 +4301,8 @@ msgstr "Code" #: ../../../../inc/themes/classic/security.inc:44 #: ../../../../inc/themes/material-blue/security.inc:48 -msgid "" -"Una vez activada, sólo es posible acceder si se dispone del dispositivo " -"generador de códigos asociado." -msgstr "" -"Once enabled, you can only access if you have the device that generates the " -"code." +msgid "Una vez activada, sólo es posible acceder si se dispone del dispositivo generador de códigos asociado." +msgstr "Once enabled, you can only access if you have the device that generates the code." #: ../../../../inc/themes/classic/sessionbar.inc:6 #: ../../../../inc/themes/material-blue/footer.inc:7 @@ -4515,11 +4427,8 @@ 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." +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 @@ -4557,9 +4466,7 @@ 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." +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 @@ -4569,8 +4476,7 @@ msgstr "Account name preffix" #: ../../../../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." +msgid "Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki." msgstr "Preffix to determine which accounts have a link to the Wiki." #: ../../../../inc/themes/classic/wiki.inc:121 @@ -4647,12 +4553,8 @@ msgid "Preferencias de usuario" msgstr "User preferences" #: ../../../../inc/themes/material-blue/import.inc:104 -msgid "" -"Permite realizar la importación de Cuentas, Categorías y Clientes desde " -"archivos XML y CSV." -msgstr "" -"Allows to do the Accounts, Categories and Customers import form XML and CSV " -"files." +msgid "Permite realizar la importación de Cuentas, Categorías y Clientes desde archivos XML y CSV." +msgstr "Allows to do the Accounts, Categories and Customers import form XML and CSV files." #: ../../../../inc/themes/material-blue/install.inc:31 msgid "Usuario administrador de sysPass" @@ -4687,12 +4589,8 @@ msgid "Clave del usuario de conexión a LDAP." msgstr "LDAP connection user password" #: ../../../../inc/themes/material-blue/mail.inc:118 -msgid "" -"Habilita que los usuarios puedan solicitar modificaciones o acceso a las " -"cuentas sin permisos." -msgstr "" -"Allows that users can request for modifications or access to accounts in " -"which they havenn't rights." +msgid "Habilita que los usuarios puedan solicitar modificaciones o acceso a las cuentas sin permisos." +msgstr "Allows that users can request for modifications or access to accounts in which they havenn't rights." #: ../../../../inc/themes/material-blue/profiles.inc:25 msgid "Crear nueva cuenta" diff --git a/inc/locales/fr_FR/LC_MESSAGES/messages.mo b/inc/locales/fr_FR/LC_MESSAGES/messages.mo index 4f53d16231f8eaaf9b8f07e4e26aba3e77b3bc18..92a5d0ee69c9d378387169493a58f04e80ac3ed3 100644 GIT binary patch delta 14342 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 delta 19881 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 R{=(zkXFl&DH=X$8{{Sxk0RI30 diff --git a/inc/locales/fr_FR/LC_MESSAGES/messages.po b/inc/locales/fr_FR/LC_MESSAGES/messages.po index 5ae5d1cc..2a5393e2 100644 --- a/inc/locales/fr_FR/LC_MESSAGES/messages.po +++ b/inc/locales/fr_FR/LC_MESSAGES/messages.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: sysPass\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-01-25 15:53+0100\n" -"PO-Revision-Date: 2015-01-25 16:03+0100\n" +"POT-Creation-Date: 2015-09-04 21:27+0100\n" +"PO-Revision-Date: 2015-09-04 21:27+0100\n" "Last-Translator: nuxsmin \n" "Language-Team: \n" "Language: fr_FR\n" @@ -13,157 +13,389 @@ msgstr "" "X-Poedit-KeywordsList: _;gettext;gettext_noop\n" "X-Poedit-Basepath: .\n" "X-Poedit-SourceCharset: UTF-8\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.6.10\n" "X-Poedit-SearchPath-0: ../../../..\n" -# "Session not started or timed out" -#: ../../../../ajax/ajax_appMgmtSave.php:34 -#: ../../../../ajax/ajax_accountSave.php:33 ../../../../ajax/ajax_import.php:1 -#: ../../../../ajax/ajax_configSave.php:33 ../../../../ajax/ajax_backup.php:32 -#: ../../../../ajax/ajax_migrate.php:1 -#: ../../../../ajax/ajax_sendRequest.php:32 -#: ../../../../ajax/ajax_checkLdap.php:32 -msgid "La sesión no se ha iniciado o ha caducado" -msgstr "Session non démarrée ou expirée" - # "INVALID QUERY" -#: ../../../../ajax/ajax_appMgmtSave.php:40 -#: ../../../../ajax/ajax_accountSave.php:39 ../../../../ajax/ajax_import.php:1 -#: ../../../../ajax/ajax_configSave.php:39 ../../../../ajax/ajax_backup.php:38 -#: ../../../../ajax/ajax_passReset.php:34 ../../../../ajax/ajax_files.php:40 -#: ../../../../ajax/ajax_migrate.php:1 ../../../../ajax/ajax_search.php:38 -#: ../../../../ajax/ajax_sendRequest.php:38 -#: ../../../../ajax/ajax_checkLdap.php:38 -#: ../../../../ajax/ajax_getFiles.php:43 +#: ../../../../ajax/ajax_2fa.php:35 ../../../../ajax/ajax_accountSave.php:41 +#: ../../../../ajax/ajax_appMgmtSave.php:42 +#: ../../../../ajax/ajax_backup.php:39 ../../../../ajax/ajax_checkLdap.php:41 +#: ../../../../ajax/ajax_configSave.php:41 ../../../../ajax/ajax_files.php:41 +#: ../../../../ajax/ajax_getFiles.php:46 ../../../../ajax/ajax_import.php:49 +#: ../../../../ajax/ajax_migrate.php:45 ../../../../ajax/ajax_passReset.php:37 +#: ../../../../ajax/ajax_search.php:41 +#: ../../../../ajax/ajax_sendRequest.php:41 +#: ../../../../ajax/ajax_userPrefsSave.php:42 msgid "CONSULTA INVÁLIDA" msgstr "REQUETE INVALIDE" +# "Incorrect login" +#: ../../../../ajax/ajax_2fa.php:55 +#, fuzzy +msgid "Código correcto" +msgstr "Login incorrecte" + +# "Incorrect login" +#: ../../../../ajax/ajax_2fa.php:58 ../../../../ajax/ajax_userPrefsSave.php:67 +#, fuzzy +msgid "Código incorrecto" +msgstr "Login incorrecte" + +# "Session not started or timed out" +#: ../../../../ajax/ajax_accountSave.php:35 +#: ../../../../ajax/ajax_appMgmtSave.php:36 +#: ../../../../ajax/ajax_backup.php:33 ../../../../ajax/ajax_checkLdap.php:35 +#: ../../../../ajax/ajax_configSave.php:35 ../../../../ajax/ajax_import.php:35 +#: ../../../../ajax/ajax_migrate.php:35 +#: ../../../../ajax/ajax_sendRequest.php:35 +#: ../../../../ajax/ajax_userPrefsSave.php:36 +#: ../../../../ajax/ajax_viewpass.php:36 +msgid "La sesión no se ha iniciado o ha caducado" +msgstr "Session non démarrée ou expirée" + +# "An account name needed" +#: ../../../../ajax/ajax_accountSave.php:75 +#: ../../../../ajax/ajax_accountSave.php:92 +msgid "Es necesario un nombre de cuenta" +msgstr "Nom de compte requis" + +# "A customer name needed" +#: ../../../../ajax/ajax_accountSave.php:77 +#: ../../../../ajax/ajax_accountSave.php:90 +#: ../../../../ajax/ajax_appMgmtSave.php:326 +msgid "Es necesario un nombre de cliente" +msgstr "Nom de client requis" + # "An username is needed" -#: ../../../../ajax/ajax_appMgmtSave.php:76 -msgid "Es necesario un nombre de usuario" +#: ../../../../ajax/ajax_accountSave.php:79 +#: ../../../../ajax/ajax_accountSave.php:94 +msgid "Es necesario un usuario" msgstr "Nom d'utilisateur requis" -# "A login is needed" -#: ../../../../ajax/ajax_appMgmtSave.php:80 -msgid "Es necesario un login" -msgstr "Login requis" - -# "A profile is needed" -#: ../../../../ajax/ajax_appMgmtSave.php:84 -msgid "Es necesario un perfil" -msgstr "Profil requis" - -# "A group is needed" -#: ../../../../ajax/ajax_appMgmtSave.php:88 -msgid "Es necesario un grupo" -msgstr "Groupe requis" - -# "An email is needed" -#: ../../../../ajax/ajax_appMgmtSave.php:92 -msgid "Es necesario un email" -msgstr "Courriel requis" - -# "Duplicated user login " -#: ../../../../ajax/ajax_appMgmtSave.php:110 -msgid "Login de usuario duplicado" -msgstr "Login utilisateur dupliqué" - -# "Duplicated user email" -#: ../../../../ajax/ajax_appMgmtSave.php:113 -msgid "Email de usuario duplicado" -msgstr "Courriel de l'utilisateur dupliqué" - -# "Password cannot be blank" -#: ../../../../ajax/ajax_appMgmtSave.php:119 -#: ../../../../ajax/ajax_appMgmtSave.php:145 -#: ../../../../ajax/ajax_accountSave.php:105 -msgid "La clave no puede estar en blanco" -msgstr "Le mot de passe ne peut pas être blanc" +# "A password is needed" +#: ../../../../ajax/ajax_accountSave.php:81 +msgid "Es necesario una clave" +msgstr "Mot de passe requis" # "The passwords do not match" -#: ../../../../ajax/ajax_appMgmtSave.php:123 -#: ../../../../ajax/ajax_appMgmtSave.php:149 #: ../../../../ajax/ajax_accountSave.php:83 -#: ../../../../ajax/ajax_accountSave.php:109 +#: ../../../../ajax/ajax_accountSave.php:107 +#: ../../../../ajax/ajax_appMgmtSave.php:111 +#: ../../../../ajax/ajax_appMgmtSave.php:146 +#: ../../../../ajax/ajax_backup.php:62 msgid "Las claves no coinciden" msgstr "Les mots de passe ne correspondent pas" -# "User added" -#: ../../../../ajax/ajax_appMgmtSave.php:127 -msgid "Usuario creado" -msgstr "Utilisateur ajouté" +# "A category name needed" +#: ../../../../ajax/ajax_accountSave.php:85 +#: ../../../../ajax/ajax_accountSave.php:96 +#, fuzzy +msgid "Es necesario una categoría" +msgstr "Mot de passe requis" -# "Error on creating user" -#: ../../../../ajax/ajax_appMgmtSave.php:130 -msgid "Error al crear el usuario" -msgstr "Erreur pendant la création d'utilisateur" +# "Invalid Id" +#: ../../../../ajax/ajax_accountSave.php:100 +#: ../../../../ajax/ajax_accountSave.php:111 +msgid "Id inválido" +msgstr "Id Invalide" -# "User updated" -#: ../../../../ajax/ajax_appMgmtSave.php:133 -#: ../../../../inc/users.class.php:224 -msgid "Usuario actualizado" -msgstr "Utilisateur actualisé" +# "Password cannot be blank" +#: ../../../../ajax/ajax_accountSave.php:105 +#: ../../../../ajax/ajax_appMgmtSave.php:109 +#: ../../../../ajax/ajax_appMgmtSave.php:144 +msgid "La clave no puede estar en blanco" +msgstr "Le mot de passe ne peut pas être blanc" -# "Error on user update" -#: ../../../../ajax/ajax_appMgmtSave.php:136 -msgid "Error al actualizar el usuario" -msgstr "Erreur pendant l'actualisation de l'utilisateur" +# "Invalid Action" +#: ../../../../ajax/ajax_accountSave.php:114 +#: ../../../../ajax/ajax_accountSave.php:258 +#: ../../../../ajax/ajax_appMgmtSave.php:532 +#: ../../../../ajax/ajax_configSave.php:290 +#: ../../../../ajax/ajax_userPrefsSave.php:80 ../../../../api.php:53 +msgid "Acción Inválida" +msgstr "Action Invalide" -# "Ey, this is a DEMO!!" -#: ../../../../ajax/ajax_appMgmtSave.php:141 -#: ../../../../ajax/ajax_appMgmtSave.php:163 -#: ../../../../ajax/ajax_import.php:1 ../../../../ajax/ajax_configSave.php:214 -#: ../../../../ajax/ajax_migrate.php:1 -msgid "Ey, esto es una DEMO!!" -msgstr "Hey, ceci est une DEMO" +# "Account added" +#: ../../../../ajax/ajax_accountSave.php:168 +msgid "Cuenta creada" +msgstr "Compte ajouté" + +# "Error on account creation" +#: ../../../../ajax/ajax_accountSave.php:171 +msgid "Error al crear la cuenta" +msgstr "Erreur pendant la création de compte" + +# "No changes" +#: ../../../../ajax/ajax_accountSave.php:206 +msgid "Sin cambios" +msgstr "Aucun changement" + +# "Account updated" +#: ../../../../ajax/ajax_accountSave.php:218 +msgid "Cuenta actualizada" +msgstr "Compte actualisé" + +# "Error on updating account" +#: ../../../../ajax/ajax_accountSave.php:221 +msgid "Error al modificar la cuenta" +msgstr "Erreur pendant la modification du compte" + +# "Account deleted" +#: ../../../../ajax/ajax_accountSave.php:228 +msgid "Cuenta eliminada" +msgstr "Compte supprimé" + +# "Error on account deletion" +#: ../../../../ajax/ajax_accountSave.php:231 +msgid "Error al eliminar la cuenta" +msgstr "Erreur pendant la suppression du compte" # "Password updated" -#: ../../../../ajax/ajax_appMgmtSave.php:156 -#: ../../../../ajax/ajax_accountSave.php:237 -#: ../../../../ajax/ajax_passReset.php:79 +#: ../../../../ajax/ajax_accountSave.php:241 +#: ../../../../ajax/ajax_appMgmtSave.php:150 +#: ../../../../ajax/ajax_passReset.php:74 msgid "Clave actualizada" msgstr "Mot de passe actualisé" # "Error on updating password" -#: ../../../../ajax/ajax_appMgmtSave.php:159 -#: ../../../../ajax/ajax_passReset.php:83 +#: ../../../../ajax/ajax_accountSave.php:244 +msgid "Error al actualizar la clave" +msgstr "Erreur pendant l'actualisation du mot de passe" + +# "Account restored" +#: ../../../../ajax/ajax_accountSave.php:251 +msgid "Cuenta restaurada" +msgstr "Compte restauré" + +# "Error on restoring account" +#: ../../../../ajax/ajax_accountSave.php:254 +msgid "Error al restaurar cuenta" +msgstr "Erreur pendant la restauration du compte" + +# "User" +#: ../../../../ajax/ajax_appMgmtData.php:54 +#, fuzzy +msgid "Ver Usuario" +msgstr "Voir détails du compte" + +# "Edit User" +#: ../../../../ajax/ajax_appMgmtData.php:61 +#: ../../../../web/UsersMgmtC.class.php:136 +msgid "Editar Usuario" +msgstr "Editer Utilisateur" + +# "New User" +#: ../../../../ajax/ajax_appMgmtData.php:67 +#: ../../../../inc/UserBase.class.php:381 +#: ../../../../web/UsersMgmtC.class.php:121 +msgid "Nuevo Usuario" +msgstr "Nouvel Utilisateur" + +# "Group" +#: ../../../../ajax/ajax_appMgmtData.php:73 +#, fuzzy +msgid "Ver Grupo" +msgstr "Voir" + +# "Edit Group" +#: ../../../../ajax/ajax_appMgmtData.php:80 +#: ../../../../web/UsersMgmtC.class.php:202 +msgid "Editar Grupo" +msgstr "Editer Groupe" + +# "New Group" +#: ../../../../ajax/ajax_appMgmtData.php:86 +#: ../../../../inc/Groups.class.php:152 ../../../../inc/Groups.class.php:253 +#: ../../../../web/UsersMgmtC.class.php:194 +msgid "Nuevo Grupo" +msgstr "Nouveau Groupe" + +# "Profile" +#: ../../../../ajax/ajax_appMgmtData.php:92 +#, fuzzy +msgid "Ver Perfil" +msgstr "Voir" + +# "Edit Profile" +#: ../../../../ajax/ajax_appMgmtData.php:99 +#: ../../../../web/UsersMgmtC.class.php:267 +msgid "Editar Perfil" +msgstr "Editer Profil" + +# "New Profile" +#: ../../../../ajax/ajax_appMgmtData.php:105 +#: ../../../../inc/ProfileBase.class.php:512 +#: ../../../../web/UsersMgmtC.class.php:252 +msgid "Nuevo Perfil" +msgstr "Nouveau Profil" + +# "Customer" +#: ../../../../ajax/ajax_appMgmtData.php:111 +#, fuzzy +msgid "Ver Cliente" +msgstr "Voir" + +# "Edit Customer" +#: ../../../../ajax/ajax_appMgmtData.php:118 +#: ../../../../web/AccountsMgmtC.class.php:152 +msgid "Editar Cliente" +msgstr "Editer Client" + +# "New Customer" +#: ../../../../ajax/ajax_appMgmtData.php:124 +#: ../../../../inc/Customer.class.php:65 +#: ../../../../web/AccountsMgmtC.class.php:145 +msgid "Nuevo Cliente" +msgstr "Nouveau Client" + +# "Category" +#: ../../../../ajax/ajax_appMgmtData.php:130 +#, fuzzy +msgid "Ver Categoría" +msgstr "Voir" + +# "Edit Category" +#: ../../../../ajax/ajax_appMgmtData.php:137 +#: ../../../../web/AccountsMgmtC.class.php:94 +msgid "Editar Categoría" +msgstr "Editer Catégorie" + +# "New Category" +#: ../../../../ajax/ajax_appMgmtData.php:143 +#: ../../../../inc/Category.class.php:83 +#: ../../../../web/AccountsMgmtC.class.php:86 +msgid "Nueva Categoría" +msgstr "Nouvelle Catégorie" + +# "Update" +#: ../../../../ajax/ajax_appMgmtData.php:149 +#, fuzzy +msgid "Ver Autorización" +msgstr "Voir" + +# "Update" +#: ../../../../ajax/ajax_appMgmtData.php:156 +#: ../../../../inc/ApiTokens.class.php:189 +#: ../../../../web/UsersMgmtC.class.php:399 +#, fuzzy +msgid "Nueva Autorización" +msgstr "Nouvelle Catégorie" + +# "Start Update" +#: ../../../../ajax/ajax_appMgmtData.php:162 +#: ../../../../web/UsersMgmtC.class.php:414 +#, fuzzy +msgid "Editar Autorización" +msgstr "Editer" + +# "New Group" +#: ../../../../ajax/ajax_appMgmtData.php:168 +#: ../../../../web/AccountsMgmtC.class.php:273 +#, fuzzy +msgid "Nuevo Campo" +msgstr "Nouvel Utilisateur" + +# "Edit Password" +#: ../../../../ajax/ajax_appMgmtData.php:174 +#: ../../../../web/AccountsMgmtC.class.php:280 +#, fuzzy +msgid "Editar Campo" +msgstr "Editer" + +# "An username is needed" +#: ../../../../ajax/ajax_appMgmtSave.php:85 +msgid "Es necesario un nombre de usuario" +msgstr "Nom d'utilisateur requis" + +# "A login is needed" +#: ../../../../ajax/ajax_appMgmtSave.php:87 +msgid "Es necesario un login" +msgstr "Login requis" + +# "A profile is needed" +#: ../../../../ajax/ajax_appMgmtSave.php:89 +msgid "Es necesario un perfil" +msgstr "Profil requis" + +# "A group is needed" +#: ../../../../ajax/ajax_appMgmtSave.php:91 +msgid "Es necesario un grupo" +msgstr "Groupe requis" + +# "An email is needed" +#: ../../../../ajax/ajax_appMgmtSave.php:93 +msgid "Es necesario un email" +msgstr "Courriel requis" + +# "Ey, this is a DEMO!!" +#: ../../../../ajax/ajax_appMgmtSave.php:95 +#: ../../../../ajax/ajax_appMgmtSave.php:142 +#: ../../../../ajax/ajax_appMgmtSave.php:157 +#: ../../../../ajax/ajax_configSave.php:265 +#: ../../../../ajax/ajax_import.php:39 ../../../../ajax/ajax_migrate.php:39 +#: ../../../../ajax/ajax_userPrefsSave.php:56 +msgid "Ey, esto es una DEMO!!" +msgstr "Hey, ceci est une DEMO" + +# "Duplicated user login " +#: ../../../../ajax/ajax_appMgmtSave.php:100 +msgid "Login de usuario duplicado" +msgstr "Login utilisateur dupliqué" + +# "Duplicated user email" +#: ../../../../ajax/ajax_appMgmtSave.php:103 +msgid "Email de usuario duplicado" +msgstr "Courriel de l'utilisateur dupliqué" + +# "User added" +#: ../../../../ajax/ajax_appMgmtSave.php:122 +msgid "Usuario creado" +msgstr "Utilisateur ajouté" + +# "Error on creating user" +#: ../../../../ajax/ajax_appMgmtSave.php:125 +msgid "Error al crear el usuario" +msgstr "Erreur pendant la création d'utilisateur" + +# "User updated" +#: ../../../../ajax/ajax_appMgmtSave.php:135 +#: ../../../../inc/UserUtil.class.php:103 +msgid "Usuario actualizado" +msgstr "Utilisateur actualisé" + +# "Error on user update" +#: ../../../../ajax/ajax_appMgmtSave.php:138 +msgid "Error al actualizar el usuario" +msgstr "Erreur pendant l'actualisation de l'utilisateur" + +# "Error on updating password" +#: ../../../../ajax/ajax_appMgmtSave.php:153 +#: ../../../../ajax/ajax_passReset.php:78 msgid "Error al modificar la clave" msgstr "Erreur pendant la modification du mot de passe" # "Unable to delete, user in use" -#: ../../../../ajax/ajax_appMgmtSave.php:169 +#: ../../../../ajax/ajax_appMgmtSave.php:159 msgid "No es posible eliminar, usuario en uso" msgstr "Impossible à supprimer, utilisateur en activité" # "User deleted" -#: ../../../../ajax/ajax_appMgmtSave.php:173 +#: ../../../../ajax/ajax_appMgmtSave.php:163 msgid "Usuario eliminado" msgstr "Utilisateur supprimé" # "Error on user deletion" -#: ../../../../ajax/ajax_appMgmtSave.php:176 +#: ../../../../ajax/ajax_appMgmtSave.php:166 msgid "Error al eliminar el usuario" msgstr "Erreur pendant la suppression de l'utilisateur" -# "Invalid Action" -#: ../../../../ajax/ajax_appMgmtSave.php:179 -#: ../../../../ajax/ajax_appMgmtSave.php:240 -#: ../../../../ajax/ajax_appMgmtSave.php:318 -#: ../../../../ajax/ajax_appMgmtSave.php:369 -#: ../../../../ajax/ajax_appMgmtSave.php:418 -#: ../../../../ajax/ajax_accountSave.php:116 -#: ../../../../ajax/ajax_accountSave.php:268 -#: ../../../../ajax/ajax_configSave.php:229 -msgid "Acción Inválida" -msgstr "Action Invalide" - # "A group name is needed" -#: ../../../../ajax/ajax_appMgmtSave.php:188 +#: ../../../../ajax/ajax_appMgmtSave.php:181 msgid "Es necesario un nombre de grupo" msgstr "Nom de groupe requis" # "Duplicated group name" -#: ../../../../ajax/ajax_appMgmtSave.php:196 +#: ../../../../ajax/ajax_appMgmtSave.php:189 msgid "Nombre de grupo duplicado" msgstr "Nom de groupe dupliqué" @@ -178,3747 +410,5265 @@ msgid "Error al crear el grupo" msgstr "Erreur pendant la création de groupe" # "Group updated" -#: ../../../../ajax/ajax_appMgmtSave.php:207 +#: ../../../../ajax/ajax_appMgmtSave.php:214 msgid "Grupo actualizado" msgstr "Gropue actualisé" # "Error on updating group" -#: ../../../../ajax/ajax_appMgmtSave.php:210 +#: ../../../../ajax/ajax_appMgmtSave.php:217 msgid "Error al actualizar el grupo" msgstr "Erreur pendant l'actualisation du groupe" # "Users" -#: ../../../../ajax/ajax_appMgmtSave.php:221 -#: ../../../../ajax/ajax_appMgmtSave.php:298 -#: ../../../../inc/tpl/profiles.php:88 ../../../../inc/tpl/accounts.php:281 +#: ../../../../ajax/ajax_appMgmtSave.php:226 +#: ../../../../ajax/ajax_appMgmtSave.php:303 +#: ../../../../inc/CustomFieldsBase.class.php:83 +#: ../../../../inc/themes/classic/account.inc:109 +#: ../../../../inc/themes/classic/groups.inc:24 +#: ../../../../inc/themes/classic/profiles.inc:85 +#: ../../../../inc/themes/material-blue/account.inc:134 +#: ../../../../inc/themes/material-blue/groups.inc:32 +#: ../../../../inc/themes/material-blue/profiles.inc:99 msgid "Usuarios" msgstr "Utilisateurs" # "Accounts" -#: ../../../../ajax/ajax_appMgmtSave.php:225 -#: ../../../../ajax/ajax_appMgmtSave.php:356 -#: ../../../../inc/category.class.php:265 ../../../../inc/tpl/profiles.php:45 +#: ../../../../ajax/ajax_appMgmtSave.php:230 +#: ../../../../inc/Category.class.php:266 +#: ../../../../inc/CustomFieldsBase.class.php:80 +#: ../../../../inc/Customer.class.php:150 +#: ../../../../inc/themes/classic/profiles.inc:15 +#: ../../../../inc/themes/material-blue/config.inc:139 +#: ../../../../inc/themes/material-blue/profiles.inc:19 msgid "Cuentas" msgstr "Comptes" # "Unable to delete" -#: ../../../../ajax/ajax_appMgmtSave.php:228 -#: ../../../../ajax/ajax_appMgmtSave.php:300 -#: ../../../../ajax/ajax_appMgmtSave.php:358 -#: ../../../../ajax/ajax_appMgmtSave.php:407 +#: ../../../../ajax/ajax_appMgmtSave.php:233 +#: ../../../../ajax/ajax_appMgmtSave.php:305 +#: ../../../../inc/Category.class.php:119 +#: ../../../../inc/Customer.class.php:150 msgid "No es posible eliminar" msgstr "Impossible de supprimer" # "Group in use by:" -#: ../../../../ajax/ajax_appMgmtSave.php:228 +#: ../../../../ajax/ajax_appMgmtSave.php:233 msgid "Grupo en uso por:" msgstr "Groupe utilisé par:" # "Group deleted" -#: ../../../../ajax/ajax_appMgmtSave.php:233 +#: ../../../../ajax/ajax_appMgmtSave.php:238 msgid "Grupo eliminado" msgstr "Groupe supprimé" # "Error on group deletion" -#: ../../../../ajax/ajax_appMgmtSave.php:236 +#: ../../../../ajax/ajax_appMgmtSave.php:241 msgid "Error al eliminar el grupo" msgstr "Erreur pendant la supression du groupe" # "A profile name is needed" -#: ../../../../ajax/ajax_appMgmtSave.php:270 +#: ../../../../ajax/ajax_appMgmtSave.php:280 msgid "Es necesario un nombre de perfil" msgstr "Nom de profil requis" # "Duplicated profile name" -#: ../../../../ajax/ajax_appMgmtSave.php:276 +#: ../../../../ajax/ajax_appMgmtSave.php:282 msgid "Nombre de perfil duplicado" msgstr "Nom de profil dupliqué" # "Profile added" -#: ../../../../ajax/ajax_appMgmtSave.php:281 +#: ../../../../ajax/ajax_appMgmtSave.php:287 msgid "Perfil creado" msgstr "Profil ajouté" # "Error on creating profile" -#: ../../../../ajax/ajax_appMgmtSave.php:284 +#: ../../../../ajax/ajax_appMgmtSave.php:290 msgid "Error al crear el perfil" msgstr "Erreur pendant la création de profil" # "Profile updated" -#: ../../../../ajax/ajax_appMgmtSave.php:287 +#: ../../../../ajax/ajax_appMgmtSave.php:293 msgid "Perfil actualizado" msgstr "Profil actualisé" # "Error on updating profile" -#: ../../../../ajax/ajax_appMgmtSave.php:290 +#: ../../../../ajax/ajax_appMgmtSave.php:296 msgid "Error al actualizar el perfil" msgstr "Erreur pendant l'actualisation du profil" # "Profiles in use by:" -#: ../../../../ajax/ajax_appMgmtSave.php:300 +#: ../../../../ajax/ajax_appMgmtSave.php:305 msgid "Perfil en uso por:" msgstr "Profil utilisé par:" -# "Delete Profile" -#: ../../../../ajax/ajax_appMgmtSave.php:305 -#: ../../../../ajax/ajax_getContent.php:201 -msgid "Eliminar Perfil" -msgstr "Supprimer Profil" - -# "Profile" -#: ../../../../ajax/ajax_appMgmtSave.php:306 -#: ../../../../ajax/ajax_getContent.php:114 -#: ../../../../ajax/ajax_doLogin.php:153 -#: ../../../../inc/profiles.class.php:203 -#: ../../../../inc/profiles.class.php:254 ../../../../inc/tpl/users.php:98 -msgid "Perfil" -msgstr "Profil" - # "Profile deleted" -#: ../../../../ajax/ajax_appMgmtSave.php:311 +#: ../../../../ajax/ajax_appMgmtSave.php:308 msgid "Perfil eliminado" msgstr "Profil supprimé" # "Error on profile deletion" -#: ../../../../ajax/ajax_appMgmtSave.php:314 +#: ../../../../ajax/ajax_appMgmtSave.php:311 msgid "Error al eliminar el perfil" msgstr "Erreur pendant la suppression du profil" -# "A customer name needed" -#: ../../../../ajax/ajax_appMgmtSave.php:327 -#: ../../../../ajax/ajax_accountSave.php:71 -#: ../../../../ajax/ajax_accountSave.php:88 -msgid "Es necesario un nombre de cliente" -msgstr "Nom de client requis" - -# "Duplicated customer name" -#: ../../../../ajax/ajax_appMgmtSave.php:334 -msgid "Nombre de cliente duplicado" -msgstr "Nom de client dupliqué" - # "Customer added" -#: ../../../../ajax/ajax_appMgmtSave.php:339 +#: ../../../../ajax/ajax_appMgmtSave.php:346 msgid "Cliente creado" msgstr "Client ajouté" -# "Error on creating customer" -#: ../../../../ajax/ajax_appMgmtSave.php:341 -#: ../../../../ajax/ajax_accountSave.php:152 -#: ../../../../ajax/ajax_accountSave.php:201 -msgid "Error al crear el cliente" -msgstr "Erreur pendant la création du client" - # "Customer updated" -#: ../../../../ajax/ajax_appMgmtSave.php:345 +#: ../../../../ajax/ajax_appMgmtSave.php:361 msgid "Cliente actualizado" msgstr "Compte actualisé" -# "Error on updating customer" -#: ../../../../ajax/ajax_appMgmtSave.php:348 -msgid "Error al actualizar el cliente" -msgstr "Erreur pendant l'actualisation du client" - -# "Customer in use by:" -#: ../../../../ajax/ajax_appMgmtSave.php:358 -msgid "Cliente en uso por:" -msgstr "Client utilisé par:" - # "Customer deleted" -#: ../../../../ajax/ajax_appMgmtSave.php:362 +#: ../../../../ajax/ajax_appMgmtSave.php:371 msgid "Cliente eliminado" msgstr "Client supprimé" -# "Error on customer deletion" -#: ../../../../ajax/ajax_appMgmtSave.php:365 -msgid "Error al eliminar el cliente" -msgstr "Erreur pendant la suppression du client" - # "A category name needed" -#: ../../../../ajax/ajax_appMgmtSave.php:378 +#: ../../../../ajax/ajax_appMgmtSave.php:385 msgid "Es necesario un nombre de categoría" msgstr "Nom de catégorie requis" -# "Duplicated category name" -#: ../../../../ajax/ajax_appMgmtSave.php:385 -msgid "Nombre de categoría duplicado" -msgstr "Nom de catégorie dupliqué" - # "Category added" -#: ../../../../ajax/ajax_appMgmtSave.php:390 +#: ../../../../ajax/ajax_appMgmtSave.php:405 msgid "Categoría creada" msgstr "Catégorie ajoutée" -# "Error on creating category" -#: ../../../../ajax/ajax_appMgmtSave.php:392 -msgid "Error al crear la categoría" -msgstr "Erreur pendant la création de la catégorie" - # "Category updated" -#: ../../../../ajax/ajax_appMgmtSave.php:396 +#: ../../../../ajax/ajax_appMgmtSave.php:420 msgid "Categoría actualizada" msgstr "Catégorie actualisée" -# "Error on updating category" -#: ../../../../ajax/ajax_appMgmtSave.php:399 -msgid "Error al actualizar la categoría" -msgstr "Erreur pendant l'actualisation de la categorie" - -# "Category in use by:" -#: ../../../../ajax/ajax_appMgmtSave.php:407 -msgid "Categoría en uso por:" -msgstr "Catégorie utilisée par:" - # "Category deleted" -#: ../../../../ajax/ajax_appMgmtSave.php:411 +#: ../../../../ajax/ajax_appMgmtSave.php:431 msgid "Categoría eliminada" msgstr "Catégorie supprimée" -# "Error on category deletion" -#: ../../../../ajax/ajax_appMgmtSave.php:414 -msgid "Error al eliminar la categoría" -msgstr "Erreur pendant la suppression de la catégorie" +# "User/Pass not entered" +#: ../../../../ajax/ajax_appMgmtSave.php:447 +#, fuzzy +msgid "Usuario o acción no indicado" +msgstr "Utilisateur/Mot de passe non saisi" -# "Edit User" -#: ../../../../ajax/ajax_appMgmtData.php:46 -#: ../../../../ajax/ajax_getContent.php:137 -msgid "Editar Usuario" -msgstr "Editer Utilisateur" - -# "New User" -#: ../../../../ajax/ajax_appMgmtData.php:51 -#: ../../../../ajax/ajax_getContent.php:135 -#: ../../../../inc/users.class.php:787 -msgid "Nuevo Usuario" -msgstr "Nouvel Utilisateur" - -# "Edit Group" -#: ../../../../ajax/ajax_appMgmtData.php:56 -#: ../../../../ajax/ajax_getContent.php:168 -msgid "Editar Grupo" -msgstr "Editer Groupe" - -# "New Group" -#: ../../../../ajax/ajax_appMgmtData.php:61 -#: ../../../../ajax/ajax_getContent.php:167 -#: ../../../../inc/groups.class.php:150 -msgid "Nuevo Grupo" -msgstr "Nouveau Groupe" - -# "Edit Profile" -#: ../../../../ajax/ajax_appMgmtData.php:66 -#: ../../../../ajax/ajax_getContent.php:200 -msgid "Editar Perfil" -msgstr "Editer Profil" - -# "New Profile" -#: ../../../../ajax/ajax_appMgmtData.php:71 -#: ../../../../ajax/ajax_getContent.php:199 -#: ../../../../inc/profiles.class.php:202 -msgid "Nuevo Perfil" -msgstr "Nouveau Profil" - -# "Edit Customer" -#: ../../../../ajax/ajax_appMgmtData.php:76 -#: ../../../../ajax/ajax_getContent.php:285 -msgid "Editar Cliente" -msgstr "Editer Client" - -# "New Customer" -#: ../../../../ajax/ajax_appMgmtData.php:81 -#: ../../../../ajax/ajax_getContent.php:284 -#: ../../../../inc/customer.class.php:56 -msgid "Nuevo Cliente" -msgstr "Nouveau Client" - -# "Edit Category" -#: ../../../../ajax/ajax_appMgmtData.php:86 -#: ../../../../ajax/ajax_getContent.php:253 -msgid "Editar Categoría" -msgstr "Editer Catégorie" - -# "New Category" -#: ../../../../ajax/ajax_appMgmtData.php:91 -#: ../../../../ajax/ajax_getContent.php:252 -#: ../../../../inc/category.class.php:77 -msgid "Nueva Categoría" -msgstr "Nouvelle Catégorie" - -# "Download new version" -#: ../../../../ajax/ajax_checkUpds.php:41 -msgid "Descargar nueva versión" -msgstr "Télécharger nouvelle version" - -# "Updated" -#: ../../../../ajax/ajax_checkUpds.php:44 -msgid "Actualizado" -msgstr "Mis à jour" - -# "An account name needed" -#: ../../../../ajax/ajax_accountSave.php:67 -#: ../../../../ajax/ajax_accountSave.php:92 -msgid "Es necesario un nombre de cuenta" -msgstr "Nom de compte requis" - -# "An username is needed" -#: ../../../../ajax/ajax_accountSave.php:75 -#: ../../../../ajax/ajax_accountSave.php:96 -msgid "Es necesario un usuario" -msgstr "Nom d'utilisateur requis" - -# "A password is needed" -#: ../../../../ajax/ajax_accountSave.php:79 -msgid "Es necesario una clave" -msgstr "Mot de passe requis" - -# "Invalid Id" -#: ../../../../ajax/ajax_accountSave.php:100 -#: ../../../../ajax/ajax_accountSave.php:113 -msgid "Id inválido" -msgstr "Id Invalide" - -# "Crypto module cannot be loaded" -#: ../../../../ajax/ajax_accountSave.php:124 -#: ../../../../inc/import.class.php:237 -msgid "No se puede usar el módulo de encriptación" -msgstr "Le module d'encryption ne peut pas être chargé" - -# "Error on creating encryption data" -#: ../../../../ajax/ajax_accountSave.php:133 -#: ../../../../inc/import.class.php:244 -msgid "Error al generar datos cifrados" -msgstr "Erreur pendant la création des données d'encryption" - -# "Duplicated customer" -#: ../../../../ajax/ajax_accountSave.php:148 -#: ../../../../ajax/ajax_accountSave.php:197 -msgid "Cliente duplicado" -msgstr "Client dupliqué" - -# "Account added" -#: ../../../../ajax/ajax_accountSave.php:176 -msgid "Cuenta creada" +# "Account Activation" +#: ../../../../ajax/ajax_appMgmtSave.php:457 +#, fuzzy +msgid "Autorización creada" msgstr "Compte ajouté" -# "Error on account creation" -#: ../../../../ajax/ajax_accountSave.php:178 -msgid "Error al crear la cuenta" -msgstr "Erreur pendant la création de compte" - -# "No changes" -#: ../../../../ajax/ajax_accountSave.php:211 -msgid "Sin cambios" -msgstr "Aucun changement" - -# "Account updated" -#: ../../../../ajax/ajax_accountSave.php:216 -#: ../../../../inc/account.class.php:364 -msgid "Cuenta actualizada" +# "Configuration updated" +#: ../../../../ajax/ajax_appMgmtSave.php:465 +#, fuzzy +msgid "Autorización actualizada" msgstr "Compte actualisé" -# "Error on updating account" -#: ../../../../ajax/ajax_accountSave.php:218 -msgid "Error al modificar la cuenta" -msgstr "Erreur pendant la modification du compte" - # "Account deleted" -#: ../../../../ajax/ajax_accountSave.php:225 -msgid "Cuenta eliminada" +#: ../../../../ajax/ajax_appMgmtSave.php:475 +#, fuzzy +msgid "Autorización eliminada" msgstr "Compte supprimé" -# "Error on account deletion" -#: ../../../../ajax/ajax_accountSave.php:227 -msgid "Error al eliminar la cuenta" -msgstr "Erreur pendant la suppression du compte" +# "Duplicated group name" +#: ../../../../ajax/ajax_appMgmtSave.php:492 +#, fuzzy +msgid "Nombre del campo no indicado" +msgstr "Nom du client" -# "Error on updating password" -#: ../../../../ajax/ajax_accountSave.php:239 -msgid "Error al actualizar la clave" -msgstr "Erreur pendant l'actualisation du mot de passe" +# "File type not allowed" +#: ../../../../ajax/ajax_appMgmtSave.php:494 +#, fuzzy +msgid "Tipo del campo no indicado" +msgstr "Types de fichiers non supportés" -# "Account restored" -#: ../../../../ajax/ajax_accountSave.php:262 -msgid "Cuenta restaurada" -msgstr "Compte restauré" +#: ../../../../ajax/ajax_appMgmtSave.php:496 +msgid "Módulo del campo no indicado" +msgstr "" -# "Error on restoring account" -#: ../../../../ajax/ajax_accountSave.php:265 -msgid "Error al restaurar cuenta" -msgstr "Erreur pendant la restauration du compte" +# "Group added" +#: ../../../../ajax/ajax_appMgmtSave.php:510 +#, fuzzy +msgid "Campo creado" +msgstr "Utilisateur ajouté" -# "Event log cleared" -#: ../../../../ajax/ajax_eventlog.php:43 -msgid "Registro de eventos vaciado" -msgstr "Journal d'évènements nettoyé" +# "Group updated" +#: ../../../../ajax/ajax_appMgmtSave.php:519 +#, fuzzy +msgid "Campo actualizado" +msgstr "Mis à jour" -# "Error on clearing event log" -#: ../../../../ajax/ajax_eventlog.php:45 -msgid "Error al vaciar el registro de eventos" -msgstr "Erreur pendant le nettoyage du journal d'évènements" +# "Group deleted" +#: ../../../../ajax/ajax_appMgmtSave.php:529 +#, fuzzy +msgid "Campo eliminado" +msgstr "Utilisateur supprimé" -# "Missing Wiki parameters" -#: ../../../../ajax/ajax_configSave.php:96 -msgid "Faltan parámetros de Wiki" -msgstr "Paramètres Wiki manquants" - -# "Missing LDAP parameters" -#: ../../../../ajax/ajax_configSave.php:107 -msgid "Faltan parámetros de LDAP" -msgstr "Paramètres LDAP manquants" - -# "Missing Mail parameters" -#: ../../../../ajax/ajax_configSave.php:123 -msgid "Faltan parámetros de Correo" -msgstr "Paramètres de courriel manquants" - -# "The maximum file upload size is 16MB" -#: ../../../../ajax/ajax_configSave.php:144 -msgid "El tamaño máximo de archivo es de 16MB" -msgstr "La taille maximum pour le chargement de fichier est de 16Mo" - -# "Edit Configuration" -#: ../../../../ajax/ajax_configSave.php:161 -msgid "Modificar Configuración" -msgstr "Modifier Configuration" - -# "Configuration updated" -#: ../../../../ajax/ajax_configSave.php:169 -msgid "Configuración actualizada" -msgstr "Configuration actualisée" - -# "Master Password updated" -#: ../../../../ajax/ajax_configSave.php:178 -#: ../../../../ajax/ajax_configSave.php:224 -#: ../../../../ajax/ajax_viewpass.php:68 ../../../../ajax/ajax_viewpass.php:70 -#: ../../../../inc/html.class.php:419 -msgid "Clave maestra actualizada" -msgstr "Mot de passe maître actualisé" - -# "Restart session to update" -#: ../../../../ajax/ajax_configSave.php:178 -#: ../../../../ajax/ajax_viewpass.php:68 ../../../../ajax/ajax_viewpass.php:70 -#: ../../../../inc/html.class.php:419 -msgid "Reinicie la sesión para cambiarla" -msgstr "Redémarrez la session pour mettre à jour" - -# "Master Password needed" -#: ../../../../ajax/ajax_configSave.php:182 -msgid "Clave maestra no indicada" -msgstr "Mot de passe maître requis" - -# "The password update must be confirmed" -#: ../../../../ajax/ajax_configSave.php:186 -msgid "Se ha de confirmar el cambio de clave" -msgstr "Le changement de mot de passe doit être confirmé" - -# "The passwords are the same" -#: ../../../../ajax/ajax_configSave.php:190 -msgid "Las claves son idénticas" -msgstr "Les mots de passe sont identiques" - -# "The master passwords do not match" -#: ../../../../ajax/ajax_configSave.php:194 -msgid "Las claves maestras no coinciden" -msgstr "Les mots de passe maîtres ne correspondent pas" - -# "The current master password does not match" -#: ../../../../ajax/ajax_configSave.php:198 -msgid "La clave maestra actual no coincide" -msgstr "Le mot de passe maître actuel ne correspond pas" - -# "Error on updating accounts' passwords" -#: ../../../../ajax/ajax_configSave.php:207 -msgid "Errores al actualizar las claves de las cuentas" -msgstr "Erreur pendant la modification des mots de passe des comptes" - -# "Update Master Password" -#: ../../../../ajax/ajax_configSave.php:221 -#: ../../../../inc/account.class.php:736 -msgid "Actualizar Clave Maestra" -msgstr "Mettre à jour le Mot de passe Maître" - -# "Error on saving master password's hash" -#: ../../../../ajax/ajax_configSave.php:227 -msgid "Error al guardar el hash de la clave maestra" -msgstr "Erreur pendant la sauvegarde du hash du mot de passe maître" - -# "Incorrect parameters" -#: ../../../../ajax/ajax_getContent.php:42 -msgid "Parámetros incorrectos" -msgstr "Paramètres Incorrects" - -# "Users Management" -#: ../../../../ajax/ajax_getContent.php:100 ../../../../inc/tpl/main.php:54 -msgid "Gestión de Usuarios" -msgstr "Gestion des Utilisateurs" - -# "Groups Management" -#: ../../../../ajax/ajax_getContent.php:101 -msgid "Gestión de Grupos" -msgstr "Gestion des Groupes" - -# "Profiles Management" -#: ../../../../ajax/ajax_getContent.php:102 -msgid "Gestión de Perfiles" -msgstr "Gestion des Profils" - -# "Name" -#: ../../../../ajax/ajax_getContent.php:112 -#: ../../../../ajax/ajax_getContent.php:158 -#: ../../../../ajax/ajax_getContent.php:190 -#: ../../../../ajax/ajax_getContent.php:243 -#: ../../../../ajax/ajax_getContent.php:275 -#: ../../../../ajax/ajax_search.php:125 ../../../../ajax/ajax_search.php:236 -#: ../../../../inc/tpl/request.php:38 ../../../../inc/tpl/groups.php:39 -#: ../../../../inc/tpl/customers.php:39 ../../../../inc/tpl/profiles.php:39 -#: ../../../../inc/tpl/editpass.php:40 ../../../../inc/tpl/accounts.php:172 -#: ../../../../inc/tpl/categories.php:39 ../../../../inc/tpl/users.php:66 -msgid "Nombre" -msgstr "Nom" - -# "Login" -#: ../../../../ajax/ajax_getContent.php:113 -#: ../../../../ajax/ajax_passReset.php:74 ../../../../inc/users.class.php:866 -#: ../../../../inc/users.class.php:892 ../../../../inc/tpl/users.php:81 -msgid "Login" -msgstr "Login" - -# "Group" -#: ../../../../ajax/ajax_getContent.php:115 -#: ../../../../ajax/ajax_doLogin.php:154 ../../../../inc/groups.class.php:151 -#: ../../../../inc/groups.class.php:179 ../../../../inc/groups.class.php:205 -#: ../../../../inc/tpl/config.php:329 ../../../../inc/tpl/users.php:105 -msgid "Grupo" -msgstr "Groupe" - -# "Properties" -#: ../../../../ajax/ajax_getContent.php:116 -msgid "Propiedades" -msgstr "Propriétés" - -# "Application Admin" -#: ../../../../ajax/ajax_getContent.php:122 ../../../../inc/tpl/main.php:30 -msgid "Admin Aplicación" -msgstr "Admin Application" - -# "Account Admin" -#: ../../../../ajax/ajax_getContent.php:123 -msgid "Admin Cuentas" -msgstr "Admin Comptes" - -# "LDAP User" -#: ../../../../ajax/ajax_getContent.php:124 ../../../../inc/tpl/users.php:87 -msgid "Usuario de LDAP" -msgstr "Utilisateur LDAP" - -# "Disabled" -#: ../../../../ajax/ajax_getContent.php:125 ../../../../inc/tpl/users.php:164 -msgid "Deshabilitado" -msgstr "Désactivé" - -# "View User Details" -#: ../../../../ajax/ajax_getContent.php:136 -msgid "Ver Detalles de Usuario" -msgstr "Voir détails du compte" - -# "Delete User" -#: ../../../../ajax/ajax_getContent.php:138 -#: ../../../../inc/users.class.php:891 -msgid "Eliminar Usuario" -msgstr "Supprimer Utilisateur" - -# "Change User's Password" -#: ../../../../ajax/ajax_getContent.php:139 -msgid "Cambiar Clave de Usuario" -msgstr "Changer mot de passe utilisateur" - -# "Description" -#: ../../../../ajax/ajax_getContent.php:158 -#: ../../../../ajax/ajax_getContent.php:243 -#: ../../../../ajax/ajax_getContent.php:275 -#: ../../../../ajax/ajax_sendRequest.php:62 ../../../../inc/tpl/groups.php:46 -#: ../../../../inc/tpl/customers.php:46 ../../../../inc/tpl/categories.php:46 -#: ../../../../inc/tpl/eventlog.php:68 -msgid "Descripción" -msgstr "Description" - -# "Delete Group" -#: ../../../../ajax/ajax_getContent.php:169 -#: ../../../../inc/groups.class.php:204 -msgid "Eliminar Grupo" -msgstr "Supprimer Groupe" - -# "Categories Management" -#: ../../../../ajax/ajax_getContent.php:233 -msgid "Gestión de Categorías" -msgstr "Gestion des catégories" - -# "Customers Management" -#: ../../../../ajax/ajax_getContent.php:234 -msgid "Gestión de Clientes" -msgstr "Gestion des Clients" - -# "Delete Category" -#: ../../../../ajax/ajax_getContent.php:254 -#: ../../../../inc/category.class.php:131 -msgid "Eliminar Categoría" -msgstr "Supprimer Catégorie" - -# "Delete Customer" -#: ../../../../ajax/ajax_getContent.php:286 -#: ../../../../inc/customer.class.php:127 -msgid "Eliminar Cliente" -msgstr "Supprimer Client" - -# "Configuration" -#: ../../../../ajax/ajax_getContent.php:319 -#: ../../../../inc/config.class.php:124 ../../../../inc/config.class.php:150 -#: ../../../../inc/tpl/main.php:56 ../../../../inc/tpl/profiles.php:71 -msgid "Configuración" -msgstr "Configuration" - -# "Master Password" -#: ../../../../ajax/ajax_getContent.php:320 ../../../../inc/tpl/login.php:40 -#: ../../../../inc/tpl/login.php:48 ../../../../inc/tpl/profiles.php:76 -#: ../../../../inc/tpl/install.php:109 ../../../../inc/tpl/install.php:114 -#: ../../../../inc/tpl/install.php:115 -msgid "Clave Maestra" -msgstr "Mot de passe Maître" - -# "Backup" -#: ../../../../ajax/ajax_getContent.php:321 -msgid "Copia de Seguridad" -msgstr "Sauvegarde de sécurité" - -# "Import accounts from external sources" -#: ../../../../ajax/ajax_getContent.php:322 -msgid "Importar cuentas desde fuentes externas" -msgstr "Importer les comptes à partir d'une source externe" - -# "Import Accounts" -#: ../../../../ajax/ajax_getContent.php:322 -#: ../../../../inc/migrate.class.php:394 ../../../../inc/import.class.php:80 -#: ../../../../inc/import.class.php:160 -msgid "Importar Cuentas" -msgstr "Importer Comptes" +# "Make Backup" +#: ../../../../ajax/ajax_backup.php:52 ../../../../ajax/ajax_backup.php:57 +#: ../../../../inc/themes/classic/backup.inc:54 +msgid "Realizar Backup" +msgstr "Effectuer une sauvegarde" # "Error on doing backup" -#: ../../../../ajax/ajax_backup.php:49 +#: ../../../../ajax/ajax_backup.php:52 ../../../../ajax/ajax_backup.php:54 msgid "Error al realizar el backup" msgstr "Erreur pendant la sauvegarde" # "Please, check the event log for more details" -#: ../../../../ajax/ajax_backup.php:49 ../../../../ajax/ajax_checkLdap.php:54 -#: ../../../../inc/migrate.class.php:115 ../../../../inc/import.class.php:89 +#: ../../../../ajax/ajax_backup.php:54 ../../../../ajax/ajax_backup.php:68 +#: ../../../../ajax/ajax_checkLdap.php:57 ../../../../inc/Import.class.php:128 +#: ../../../../inc/Migrate.class.php:93 msgid "Revise el registro de eventos para más detalles" msgstr "Veuillez consulter le journal des évènements pour plus de détail" -# "Make Backup" -#: ../../../../ajax/ajax_backup.php:52 ../../../../inc/tpl/backup.php:82 -msgid "Realizar Backup" -msgstr "Effectuer une sauvegarde" - # "Application and database backup successfully done" -#: ../../../../ajax/ajax_backup.php:53 +#: ../../../../ajax/ajax_backup.php:57 msgid "Copia de la aplicación y base de datos realizada correctamente" -msgstr "" -"Sauvegarde de l'application et de la base de données effectuée correctement" +msgstr "Sauvegarde de l'application et de la base de données effectuée correctement" # "Backup process finished" -#: ../../../../ajax/ajax_backup.php:58 +#: ../../../../ajax/ajax_backup.php:59 msgid "Proceso de backup finalizado" msgstr "Processus de sauvegarde terminé" -# "Password Recovery" -#: ../../../../ajax/ajax_passReset.php:44 -msgid "Recuperación de Clave" -msgstr "Recupération de Mot de passe" - -# "Requested for" -#: ../../../../ajax/ajax_passReset.php:48 -#: ../../../../ajax/ajax_passReset.php:55 -msgid "Solicitado para" -msgstr "Requis pour" - -# "Request sent" -#: ../../../../ajax/ajax_passReset.php:52 -#: ../../../../ajax/ajax_sendRequest.php:71 -msgid "Solicitud enviada" -msgstr "Requête envoyée" - -# "You will receive an email to complete the request in short." -#: ../../../../ajax/ajax_passReset.php:52 -msgid "En breve recibirá un correo para completar la solicitud." -msgstr "Vous recevrez un courriel de confirmation sous peu." - -# "The request cannot be done. Please contact to the administrator" -#: ../../../../ajax/ajax_passReset.php:59 -msgid "No se ha podido realizar la solicitud. Consulte con el administrador." -msgstr "La requête ne peut aboutir. Veuillez contacter l'administrateur" - -# "Edit User Password" -#: ../../../../ajax/ajax_passReset.php:73 ../../../../inc/users.class.php:865 -msgid "Modificar Clave Usuario" -msgstr "Modifier Mot de passe Utilisateur" - -# "The password is incorrect or do not match" -#: ../../../../ajax/ajax_passReset.php:85 -msgid "La clave es incorrecta o no coincide" -msgstr "Le mot de passe est incorrect ou ne correspond pas" - -# "Files management disabled" -#: ../../../../ajax/ajax_files.php:44 ../../../../ajax/ajax_getFiles.php:36 -msgid "Gestión de archivos deshabilitada" -msgstr "Gestion des fichiers désactivé" - -# "There are no allowed extensions" -#: ../../../../ajax/ajax_files.php:63 -msgid "No hay extensiones permitidas" -msgstr "Il n'y a pas d'extension permise" - -# "File type not allowed" -#: ../../../../ajax/ajax_files.php:71 ../../../../inc/import.class.php:111 -msgid "Tipo de archivo no soportado" -msgstr "Types de fichiers non supportés" - -# "Invalid file" -#: ../../../../ajax/ajax_files.php:74 -msgid "Archivo inválido" -msgstr "Fichier invalide" - -# "Internal error on reading file" -#: ../../../../ajax/ajax_files.php:87 ../../../../ajax/ajax_files.php:99 -#: ../../../../ajax/ajax_files.php:103 ../../../../inc/import.class.php:122 -#: ../../../../inc/import.class.php:130 -msgid "Error interno al leer el archivo" -msgstr "Erreur interne à la lecture du fichier" - -# "The file is bigger than" -#: ../../../../ajax/ajax_files.php:91 -msgid "El archivo es mayor de " -msgstr "Fichier plus gros que" - -# "Upload File" -#: ../../../../ajax/ajax_files.php:98 ../../../../inc/files.class.php:51 -msgid "Subir Archivo" -msgstr "Charger Fichier" - -# "File saved" -#: ../../../../ajax/ajax_files.php:107 -msgid "Archivo guardado" -msgstr "Fichier sauvegardé" - -# "Error on saving file" -#: ../../../../ajax/ajax_files.php:109 -msgid "No se pudo guardar el archivo" -msgstr "Erreur pendant la sauvegarde de fichier" - -# "Invalid file ID" -#: ../../../../ajax/ajax_files.php:116 ../../../../ajax/ajax_files.php:174 -msgid "No es un ID de archivo válido" -msgstr "ID de fichier invalide" - -# "The file does not exist" -#: ../../../../ajax/ajax_files.php:124 ../../../../inc/files.class.php:140 -msgid "El archivo no existe" -msgstr "Fichier inexistant" - -# "Download File" -#: ../../../../ajax/ajax_files.php:133 ../../../../ajax/ajax_getFiles.php:67 -msgid "Descargar Archivo" -msgstr "Télécharger Fichier" - -# "ID" -#: ../../../../ajax/ajax_files.php:134 ../../../../ajax/ajax_viewpass.php:82 -#: ../../../../inc/files.class.php:107 ../../../../inc/tpl/eventlog.php:53 -msgid "ID" -msgstr "ID" - -# "File" -#: ../../../../ajax/ajax_files.php:135 ../../../../inc/files.class.php:53 -#: ../../../../inc/files.class.php:108 ../../../../inc/tpl/migrate.php:110 -msgid "Archivo" -msgstr "Fichier" - -# "Type" -#: ../../../../ajax/ajax_files.php:136 ../../../../inc/files.class.php:54 -#: ../../../../inc/files.class.php:109 -msgid "Tipo" -msgstr "Type" - -# "Size" -#: ../../../../ajax/ajax_files.php:137 ../../../../inc/files.class.php:55 -#: ../../../../inc/files.class.php:110 -msgid "Tamaño" -msgstr "Taille" - -# "File deleted" -#: ../../../../ajax/ajax_files.php:178 -msgid "Archivo eliminado" -msgstr "Fichier supprimé" - -# "Error on file deletion" -#: ../../../../ajax/ajax_files.php:180 -msgid "Error al eliminar el archivo" -msgstr "Erreur pendant la supression du fichier" - -# "Confirm account import" -#: ../../../../ajax/ajax_migrate.php:1 -msgid "Confirmar la importación de cuentas" -msgstr "Confirmer l'importation des comptes" - -# "A connection username is needed" -#: ../../../../ajax/ajax_migrate.php:1 -msgid "Es necesario un usuario de conexión" -msgstr "Nom d'utilisateur de connexion requis" - -# "The connection password is needed" -#: ../../../../ajax/ajax_migrate.php:1 -msgid "Es necesaria una clave de conexión" -msgstr "Mot de passe de connexion requis" - -# "A database name is needed" -#: ../../../../ajax/ajax_migrate.php:1 -msgid "Es necesario el nombre de la BBDD" -msgstr "Nom de base de données requis" - -# "A host name is needed" -#: ../../../../ajax/ajax_migrate.php:1 -msgid "Es necesario un nombre de host" -msgstr "Nom d'hôte requis" - -# "You don't have permission to access to this account" -#: ../../../../ajax/ajax_viewpass.php:52 ../../../../ajax/ajax_viewpass.php:58 -#: ../../../../inc/html.class.php:417 -msgid "No tiene permisos para acceder a esta cuenta" -msgstr "Vous n'avez pas les permissions pour accéder à ce compte" - -# "The master password does not match" -#: ../../../../ajax/ajax_viewpass.php:61 -msgid "La clave maestra no coincide" -msgstr "Le mot de passe maître ne correspond pas" - -# "View password" -#: ../../../../ajax/ajax_viewpass.php:81 ../../../../ajax/ajax_search.php:291 -#: ../../../../inc/tpl/profiles.php:50 ../../../../inc/tpl/accounts.php:522 -msgid "Ver Clave" -msgstr "Voir Mot de passe" - -# "Account" -#: ../../../../ajax/ajax_viewpass.php:83 -#: ../../../../ajax/ajax_sendRequest.php:60 ../../../../inc/files.class.php:52 -#: ../../../../inc/account.class.php:366 ../../../../inc/account.class.php:574 -#: ../../../../inc/account.class.php:596 ../../../../inc/account.class.php:867 -msgid "Cuenta" -msgstr "Compte" - -# "User" -#: ../../../../ajax/ajax_viewpass.php:95 ../../../../ajax/ajax_search.php:131 -#: ../../../../ajax/ajax_search.php:248 ../../../../ajax/ajax_doLogin.php:77 -#: ../../../../ajax/ajax_doLogin.php:84 ../../../../ajax/ajax_doLogin.php:91 -#: ../../../../ajax/ajax_doLogin.php:101 ../../../../ajax/ajax_doLogin.php:111 -#: ../../../../ajax/ajax_doLogin.php:152 ../../../../res/test.php:64 -#: ../../../../inc/init.php:546 ../../../../inc/users.class.php:788 -#: ../../../../inc/users.class.php:829 ../../../../inc/tpl/passreset.php:51 -#: ../../../../inc/tpl/request.php:49 ../../../../inc/tpl/login.php:35 -#: ../../../../inc/tpl/login.php:44 ../../../../inc/tpl/install.php:89 -#: ../../../../inc/tpl/install.php:90 ../../../../inc/tpl/editpass.php:53 -#: ../../../../inc/tpl/accounts.php:233 ../../../../inc/tpl/config.php:423 -#: ../../../../inc/tpl/eventlog.php:62 -msgid "Usuario" -msgstr "Utilisateur" - -# "Password" -#: ../../../../ajax/ajax_viewpass.php:99 ../../../../ajax/ajax_usrpass.php:53 -#: ../../../../ajax/ajax_usrpass.php:56 ../../../../inc/tpl/passreset.php:62 -#: ../../../../inc/tpl/login.php:37 ../../../../inc/tpl/login.php:45 -#: ../../../../inc/tpl/install.php:99 ../../../../inc/tpl/install.php:100 -#: ../../../../inc/tpl/editpass.php:57 ../../../../inc/tpl/accounts.php:250 -#: ../../../../inc/tpl/config.php:431 ../../../../inc/tpl/users.php:129 -msgid "Clave" -msgstr "Mot de passe" - -# "No records found" -#: ../../../../ajax/ajax_search.php:108 ../../../../inc/tpl/eventlog.php:42 -msgid "No se encontraron registros" -msgstr "Aucun enregistrement trouvé" - -# "Sort by Customer" -#: ../../../../ajax/ajax_search.php:122 -msgid "Ordenar por Cliente" -msgstr "Trié par Client" - -# "Customer" -#: ../../../../ajax/ajax_search.php:122 ../../../../ajax/ajax_search.php:231 -#: ../../../../ajax/ajax_sendRequest.php:61 -#: ../../../../inc/account.class.php:365 ../../../../inc/account.class.php:573 -#: ../../../../inc/account.class.php:595 ../../../../inc/account.class.php:866 -#: ../../../../inc/customer.class.php:57 -#: ../../../../inc/customer.class.php:103 -#: ../../../../inc/customer.class.php:128 ../../../../inc/tpl/request.php:41 -#: ../../../../inc/tpl/editpass.php:44 ../../../../inc/tpl/accounts.php:188 -msgid "Cliente" -msgstr "Client" - -# "Sort by Name" -#: ../../../../ajax/ajax_search.php:125 -msgid "Ordenar por Nombre" -msgstr "Trié par Nom" - -# "Sort by Category" -#: ../../../../ajax/ajax_search.php:128 -msgid "Ordenar por Categoría" -msgstr "Trié par Catégorie" - -# "Category" -#: ../../../../ajax/ajax_search.php:128 ../../../../ajax/ajax_search.php:241 -#: ../../../../inc/category.class.php:78 -#: ../../../../inc/category.class.php:132 -#: ../../../../inc/category.class.php:178 ../../../../inc/tpl/accounts.php:205 -msgid "Categoría" -msgstr "Catégorie" - -# "Sort by Username" -#: ../../../../ajax/ajax_search.php:131 -msgid "Ordenar por Usuario" -msgstr "Trié par Nom d'utilisateur" - -# "Sort by URL / IP" -#: ../../../../ajax/ajax_search.php:134 -msgid "Ordenar por URL / IP" -msgstr "Trié par URL / IP" - -# "URL / IP" -#: ../../../../ajax/ajax_search.php:134 ../../../../ajax/ajax_search.php:253 -#: ../../../../inc/tpl/request.php:45 ../../../../inc/tpl/editpass.php:48 -#: ../../../../inc/tpl/accounts.php:217 -msgid "URL / IP" -msgstr "URL / IP" - -# "Search in Wiki" -#: ../../../../ajax/ajax_search.php:173 -msgid "Buscar en Wiki" -msgstr "Chercher dans Wiki" - -# "Account Details" -#: ../../../../ajax/ajax_search.php:181 ../../../../ajax/ajax_search.php:287 -#: ../../../../inc/tpl/accounts.php:80 ../../../../inc/tpl/accounts.php:91 -msgid "Detalles de Cuenta" -msgstr "Détails du Compte" - -# "Open link to" -#: ../../../../ajax/ajax_search.php:199 ../../../../ajax/ajax_search.php:201 -msgid "Abrir enlace a" -msgstr "Ouvrir le lien vers" - -# "Notes" -#: ../../../../ajax/ajax_search.php:260 ../../../../inc/tpl/accounts.php:269 -#: ../../../../inc/tpl/users.php:147 -msgid "Notas" -msgstr "Notes" - -# "Attachments" -#: ../../../../ajax/ajax_search.php:264 -msgid "Archivos adjuntos" -msgstr "Fichiers joints" - -# "Link to Wiki" -#: ../../../../ajax/ajax_search.php:275 -msgid "Enlace a Wiki" -msgstr "Lien vers Wiki" - -# "Copy Password to Clipboard" -#: ../../../../ajax/ajax_search.php:292 ../../../../ajax/ajax_search.php:344 -#: ../../../../inc/tpl/accounts.php:527 ../../../../inc/tpl/accounts.php:616 -msgid "Copiar Clave en Portapapeles" -msgstr "Copier le mot de passe dans le presse papier" - -# "More Actions" -#: ../../../../ajax/ajax_search.php:296 ../../../../inc/html.class.php:536 -msgid "Más Acciones" -msgstr "Plus d'Actions" - -# "Edit Account" -#: ../../../../ajax/ajax_search.php:300 ../../../../inc/tpl/accounts.php:550 -msgid "Modificar Cuenta" -msgstr "Modifier Compte" - -# "Copy Account" -#: ../../../../ajax/ajax_search.php:304 ../../../../inc/tpl/accounts.php:53 -msgid "Copiar Cuenta" -msgstr "Copier Compte" - -# "Delete Account" -#: ../../../../ajax/ajax_search.php:308 ../../../../inc/account.class.php:594 -#: ../../../../inc/tpl/accounts.php:73 ../../../../inc/tpl/accounts.php:562 -msgid "Eliminar Cuenta" -msgstr "Supprimer Compte" - -# "Request Modification" -#: ../../../../ajax/ajax_search.php:315 ../../../../inc/tpl/accounts.php:555 -msgid "Solicitar Modificación" -msgstr "Demande Modification" - -# "Password Copied to Clipboard" -#: ../../../../ajax/ajax_search.php:348 ../../../../inc/tpl/accounts.php:620 -msgid "Clave Copiada al Portapapeles" -msgstr "Mot de passe copié dans le presse papier" - -# "A description is needed" -#: ../../../../ajax/ajax_sendRequest.php:45 -msgid "Es necesaria una descripción" -msgstr "Description requise" - -# "Request for Account Modification" -#: ../../../../ajax/ajax_sendRequest.php:58 -msgid "Solicitud de Modificación de Cuenta" -msgstr "Demande de modification de Compte" - -# "Requester" -#: ../../../../ajax/ajax_sendRequest.php:59 -msgid "Solicitante" -msgstr "Demandeur" - -# "Error on sending request" -#: ../../../../ajax/ajax_sendRequest.php:74 -msgid "Error al enviar la solicitud" -msgstr "Erreur à l'envoie de la demande" - -# "You don't have permission to do this operation" -#: ../../../../ajax/ajax_usrpass.php:41 -msgid "No tiene permisos para realizar esta operación" -msgstr "Vous n'avez pas les permissions pour effectuer cette opération" - -# "Password Change" -#: ../../../../ajax/ajax_usrpass.php:48 ../../../../inc/auth.class.php:185 -#: ../../../../inc/tpl/users.php:166 -msgid "Cambio de Clave" -msgstr "Changement de Mot de passe" - -# "Generate random password" -#: ../../../../ajax/ajax_usrpass.php:57 ../../../../inc/tpl/editpass.php:63 -#: ../../../../inc/tpl/accounts.php:257 ../../../../inc/tpl/users.php:133 -msgid "Generar clave aleatoria" -msgstr "Générer un mot de passe aléatoire" - -# "Password (repeat)" -#: ../../../../ajax/ajax_usrpass.php:62 ../../../../ajax/ajax_usrpass.php:64 -#: ../../../../inc/tpl/editpass.php:68 ../../../../inc/tpl/accounts.php:261 -#: ../../../../inc/tpl/users.php:138 -msgid "Clave (repetir)" -msgstr "Mot de passe (répéter)" - -# "Password strength level" -#: ../../../../ajax/ajax_usrpass.php:65 ../../../../inc/tpl/passreset.php:65 -#: ../../../../inc/tpl/passreset.php:73 ../../../../inc/tpl/masterpass.php:63 -#: ../../../../inc/tpl/install.php:104 ../../../../inc/tpl/install.php:119 -#: ../../../../inc/tpl/editpass.php:70 ../../../../inc/tpl/accounts.php:264 -#: ../../../../inc/tpl/users.php:141 -msgid "Nivel de fortaleza de la clave" -msgstr "Niveau de sécurité du mot de passe" - -# "Save" -#: ../../../../ajax/ajax_usrpass.php:81 ../../../../inc/tpl/masterpass.php:113 -#: ../../../../inc/tpl/groups.php:64 ../../../../inc/tpl/customers.php:64 -#: ../../../../inc/tpl/profiles.php:134 ../../../../inc/tpl/editpass.php:88 -#: ../../../../inc/tpl/accounts.php:536 ../../../../inc/tpl/categories.php:64 -#: ../../../../inc/tpl/config.php:488 ../../../../inc/tpl/users.php:210 -msgid "Guardar" -msgstr "Sauver" +# "Enable debug" +#: ../../../../ajax/ajax_backup.php:66 ../../../../ajax/ajax_backup.php:71 +#, fuzzy +msgid "Realizar Exportación" +msgstr "Effectuer une sauvegarde" + +# "Error on creating accounts files" +#: ../../../../ajax/ajax_backup.php:66 +#, fuzzy +msgid "Error al realizar la exportación de cuentas" +msgstr "Erreur pendant la création des fichiers de comptes" + +# "Error on doing backup" +#: ../../../../ajax/ajax_backup.php:68 +#, fuzzy +msgid "Error al realizar la exportación" +msgstr "Erreur pendant la sauvegarde" + +# "Application successfully updated" +#: ../../../../ajax/ajax_backup.php:71 +#, fuzzy +msgid "Exportación de cuentas realizada correctamente" +msgstr "Mise à jour de la configuration effectuée correctement." + +# "Backup process finished" +#: ../../../../ajax/ajax_backup.php:73 +#, fuzzy +msgid "Proceso de exportación finalizado" +msgstr "Processus de sauvegarde terminé" # "LDAP parameters are not set" -#: ../../../../ajax/ajax_checkLdap.php:48 ../../../../inc/ldap.class.php:239 +#: ../../../../ajax/ajax_checkLdap.php:51 ../../../../inc/Ldap.class.php:248 msgid "Los parámetros de LDAP no están configurados" msgstr "Les paramètres LDAP ne sont pas définis" # "Error on LDAP connection" -#: ../../../../ajax/ajax_checkLdap.php:54 +#: ../../../../ajax/ajax_checkLdap.php:57 msgid "Error de conexión a LDAP" msgstr "Erreur de connexion LDAP" # "LDAP connection OK" -#: ../../../../ajax/ajax_checkLdap.php:56 +#: ../../../../ajax/ajax_checkLdap.php:59 msgid "Conexión a LDAP correcta" msgstr "Connexion LDAP OK" # "Objects found" -#: ../../../../ajax/ajax_checkLdap.php:56 +#: ../../../../ajax/ajax_checkLdap.php:59 msgid "Objetos encontrados" msgstr "Objet trouvé" -# "Delete File" -#: ../../../../ajax/ajax_getFiles.php:63 ../../../../inc/files.class.php:106 -msgid "Eliminar Archivo" -msgstr "Supprimer Fichier" +# "Edit Configuration" +#: ../../../../ajax/ajax_configSave.php:55 +msgid "Modificar Configuración" +msgstr "Modifier Configuration" -# "View File" -#: ../../../../ajax/ajax_getFiles.php:70 -msgid "Ver Archivo" -msgstr "Voir Fichier" +# "The maximum file upload size is 16MB" +#: ../../../../ajax/ajax_configSave.php:60 +#, fuzzy +msgid "El tamaño máximo por archivo es de 16MB" +msgstr "La taille maximum pour le chargement de fichier est de 16Mo" + +# "Missing Mail parameters" +#: ../../../../ajax/ajax_configSave.php:114 +#, fuzzy +msgid "Faltan parámetros de Proxy" +msgstr "Paramètres Wiki manquants" + +# "General" +#: ../../../../ajax/ajax_configSave.php:125 +#: ../../../../web/ConfigC.class.php:122 +#: ../../../../inc/themes/classic/profiles.inc:61 +#: ../../../../inc/themes/material-blue/profiles.inc:72 +msgid "General" +msgstr "Générale" + +# "Missing Wiki parameters" +#: ../../../../ajax/ajax_configSave.php:137 +msgid "Faltan parámetros de Wiki" +msgstr "Paramètres Wiki manquants" + +# "Wiki" +#: ../../../../ajax/ajax_configSave.php:147 +#: ../../../../web/ConfigC.class.php:254 +#: ../../../../inc/themes/classic/wiki.inc:4 +#: ../../../../inc/themes/material-blue/wiki.inc:4 +msgid "Wiki" +msgstr "Wiki" + +# "Missing LDAP parameters" +#: ../../../../ajax/ajax_configSave.php:164 +msgid "Faltan parámetros de LDAP" +msgstr "Paramètres LDAP manquants" + +# "LDAP" +#: ../../../../ajax/ajax_configSave.php:179 +#: ../../../../web/ConfigC.class.php:286 +#: ../../../../inc/themes/classic/ldap.inc:4 +#: ../../../../inc/themes/material-blue/ldap.inc:4 +msgid "LDAP" +msgstr "LDAP" + +# "Missing Mail parameters" +#: ../../../../ajax/ajax_configSave.php:196 +msgid "Faltan parámetros de Correo" +msgstr "Paramètres de courriel manquants" + +# "Mail" +#: ../../../../ajax/ajax_configSave.php:216 +#: ../../../../web/ConfigC.class.php:316 +#: ../../../../inc/themes/classic/mail.inc:4 +#: ../../../../inc/themes/material-blue/mail.inc:4 +msgid "Correo" +msgstr "Courriel" + +# "Configuration updated" +#: ../../../../ajax/ajax_configSave.php:226 +msgid "Configuración actualizada" +msgstr "Configuration actualisée" + +# "Master Password updated" +#: ../../../../ajax/ajax_configSave.php:235 +#: ../../../../ajax/ajax_configSave.php:275 +#: ../../../../ajax/ajax_viewpass.php:60 +#: ../../../../inc/Controller.class.php:169 +msgid "Clave maestra actualizada" +msgstr "Mot de passe maître actualisé" + +# "Restart session to update" +#: ../../../../ajax/ajax_configSave.php:235 +#: ../../../../ajax/ajax_viewpass.php:60 +#: ../../../../inc/Controller.class.php:169 +msgid "Reinicie la sesión para cambiarla" +msgstr "Redémarrez la session pour mettre à jour" + +# "Master Password needed" +#: ../../../../ajax/ajax_configSave.php:237 +msgid "Clave maestra no indicada" +msgstr "Mot de passe maître requis" + +# "The password update must be confirmed" +#: ../../../../ajax/ajax_configSave.php:239 +msgid "Se ha de confirmar el cambio de clave" +msgstr "Le changement de mot de passe doit être confirmé" + +# "The passwords are the same" +#: ../../../../ajax/ajax_configSave.php:241 +msgid "Las claves son idénticas" +msgstr "Les mots de passe sont identiques" + +# "The master passwords do not match" +#: ../../../../ajax/ajax_configSave.php:243 +msgid "Las claves maestras no coinciden" +msgstr "Les mots de passe maîtres ne correspondent pas" + +# "The current master password does not match" +#: ../../../../ajax/ajax_configSave.php:245 +msgid "La clave maestra actual no coincide" +msgstr "Le mot de passe maître actuel ne correspond pas" + +# "Error on updating accounts' passwords" +#: ../../../../ajax/ajax_configSave.php:254 +msgid "Errores al actualizar las claves de las cuentas" +msgstr "Erreur pendant la modification des mots de passe des comptes" + +# "Error on updating accounts' passwords" +#: ../../../../ajax/ajax_configSave.php:260 +#, fuzzy +msgid "Errores al actualizar las claves de las cuentas del histórico" +msgstr "Erreur pendant la modification des mots de passe des comptes" + +# "Update Master Password" +#: ../../../../ajax/ajax_configSave.php:273 +#: ../../../../inc/Account.class.php:497 +msgid "Actualizar Clave Maestra" +msgstr "Mettre à jour le Mot de passe Maître" + +# "Error on saving master password's hash" +#: ../../../../ajax/ajax_configSave.php:277 +msgid "Error al guardar el hash de la clave maestra" +msgstr "Erreur pendant la sauvegarde du hash du mot de passe maître" + +# "Generate random password" +#: ../../../../ajax/ajax_configSave.php:285 +#, fuzzy +msgid "Generar Clave Temporal" +msgstr "Générer un mot de passe aléatoire" + +# "Password" +#: ../../../../ajax/ajax_configSave.php:285 +#: ../../../../inc/themes/classic/account.inc:83 +#: ../../../../inc/themes/classic/editpass.inc:25 +#: ../../../../inc/themes/classic/install.inc:38 +#: ../../../../inc/themes/classic/install.inc:39 +#: ../../../../inc/themes/classic/login.inc:10 +#: ../../../../inc/themes/classic/login.inc:22 +#: ../../../../inc/themes/classic/mail.inc:55 +#: ../../../../inc/themes/classic/passreset.inc:29 +#: ../../../../inc/themes/classic/users.inc:75 +#: ../../../../inc/themes/classic/userspass.inc:8 +#: ../../../../inc/themes/classic/userspass.inc:11 +#: ../../../../inc/themes/material-blue/account.inc:95 +#: ../../../../inc/themes/material-blue/account.inc:100 +#: ../../../../inc/themes/material-blue/config.inc:360 +#: ../../../../inc/themes/material-blue/editpass.inc:26 +#: ../../../../inc/themes/material-blue/editpass.inc:31 +#: ../../../../inc/themes/material-blue/editpass.inc:41 +#: ../../../../inc/themes/material-blue/install.inc:44 +#: ../../../../inc/themes/material-blue/ldap.inc:105 +#: ../../../../inc/themes/material-blue/login.inc:16 +#: ../../../../inc/themes/material-blue/login.inc:38 +#: ../../../../inc/themes/material-blue/mail.inc:73 +#: ../../../../inc/themes/material-blue/mail.inc:80 +#: ../../../../inc/themes/material-blue/passreset.inc:31 +#: ../../../../inc/themes/material-blue/users.inc:89 +#: ../../../../inc/themes/material-blue/users.inc:96 +#: ../../../../inc/themes/material-blue/userspass.inc:8 +#: ../../../../inc/themes/material-blue/userspass.inc:13 +msgid "Clave" +msgstr "Mot de passe" + +# "Generated Password" +#: ../../../../ajax/ajax_configSave.php:287 +#, fuzzy +msgid "Clave Temporal Generada" +msgstr "Mot de passe généré" # "User/Pass not entered" -#: ../../../../ajax/ajax_doLogin.php:41 +#: ../../../../ajax/ajax_doLogin.php:45 msgid "Usuario/Clave no introducidos" msgstr "Utilisateur/Mot de passe non saisi" # "Session start (LDAP)" -#: ../../../../ajax/ajax_doLogin.php:54 ../../../../ajax/ajax_doLogin.php:75 -#: ../../../../ajax/ajax_doLogin.php:82 ../../../../ajax/ajax_doLogin.php:89 -msgid "Inicio sesión (LDAP)" +#: ../../../../ajax/ajax_doLogin.php:57 +#, fuzzy +msgid "Inicio sesión" msgstr "Début de session (LDAP)" +# "Server" +#: ../../../../ajax/ajax_doLogin.php:62 +#, fuzzy +msgid "Servidor Login" +msgstr "Login" + # "Error on saving LDAP user data" -#: ../../../../ajax/ajax_doLogin.php:60 +#: ../../../../ajax/ajax_doLogin.php:68 msgid "Error al guardar los datos de LDAP" msgstr "Erreur pendant la sauvegarde des données utilisateur LDAP" # "Internal error" -#: ../../../../ajax/ajax_doLogin.php:63 ../../../../ajax/ajax_doLogin.php:71 -#: ../../../../ajax/ajax_doLogin.php:122 ../../../../inc/import.class.php:237 -#: ../../../../inc/import.class.php:244 ../../../../inc/import.class.php:262 +#: ../../../../ajax/ajax_doLogin.php:71 ../../../../ajax/ajax_doLogin.php:79 +#: ../../../../ajax/ajax_doLogin.php:131 ../../../../ajax/ajax_doLogin.php:172 +#: ../../../../inc/ApiTokens.class.php:140 +#: ../../../../inc/ApiTokens.class.php:186 +#: ../../../../inc/ApiTokens.class.php:217 +#: ../../../../inc/ApiTokens.class.php:243 +#: ../../../../inc/ApiTokens.class.php:262 +#: ../../../../inc/ApiTokens.class.php:304 +#: ../../../../inc/ApiTokens.class.php:328 ../../../../inc/Crypt.class.php:235 +#: ../../../../inc/Crypt.class.php:246 +#: ../../../../inc/XmlImportBase.class.php:74 msgid "Error interno" msgstr "Erreur Interne" # "Error on updating user password in BD" -#: ../../../../ajax/ajax_doLogin.php:68 +#: ../../../../ajax/ajax_doLogin.php:76 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" +msgstr "Erreur pendant l'actualisation du mot de passe utilisateur dans la base de données" # "Incorrect login" -#: ../../../../ajax/ajax_doLogin.php:76 ../../../../ajax/ajax_doLogin.php:100 +#: ../../../../ajax/ajax_doLogin.php:84 ../../../../ajax/ajax_doLogin.php:109 msgid "Login incorrecto" msgstr "Login incorrecte" +# "User" +#: ../../../../ajax/ajax_doLogin.php:85 ../../../../ajax/ajax_doLogin.php:92 +#: ../../../../ajax/ajax_doLogin.php:99 ../../../../ajax/ajax_doLogin.php:110 +#: ../../../../ajax/ajax_doLogin.php:120 ../../../../ajax/ajax_doLogin.php:167 +#: ../../../../inc/ApiTokens.class.php:190 +#: ../../../../inc/ApiTokens.class.php:308 ../../../../inc/Auth.class.php:112 +#: ../../../../inc/Init.class.php:516 ../../../../inc/UserBase.class.php:382 +#: ../../../../inc/UserBase.class.php:526 ../../../../res/test.php:64 +#: ../../../../web/SearchC.class.php:289 +#: ../../../../web/UsersMgmtC.class.php:392 +#: ../../../../inc/themes/classic/account.inc:70 +#: ../../../../inc/themes/classic/editpass.inc:21 +#: ../../../../inc/themes/classic/eventlog.inc:25 +#: ../../../../inc/themes/classic/info.inc:39 +#: ../../../../inc/themes/classic/install.inc:27 +#: ../../../../inc/themes/classic/install.inc:28 +#: ../../../../inc/themes/classic/login.inc:7 +#: ../../../../inc/themes/classic/login.inc:20 +#: ../../../../inc/themes/classic/mail.inc:47 +#: ../../../../inc/themes/classic/passreset.inc:17 +#: ../../../../inc/themes/classic/request.inc:17 +#: ../../../../inc/themes/classic/search.inc:52 +#: ../../../../inc/themes/classic/tokens.inc:8 +#: ../../../../inc/themes/material-blue/account.inc:80 +#: ../../../../inc/themes/material-blue/config.inc:346 +#: ../../../../inc/themes/material-blue/editpass.inc:22 +#: ../../../../inc/themes/material-blue/eventlog.inc:24 +#: ../../../../inc/themes/material-blue/info.inc:39 +#: ../../../../inc/themes/material-blue/login.inc:10 +#: ../../../../inc/themes/material-blue/login.inc:32 +#: ../../../../inc/themes/material-blue/mail.inc:61 +#: ../../../../inc/themes/material-blue/mail.inc:67 +#: ../../../../inc/themes/material-blue/passreset.inc:17 +#: ../../../../inc/themes/material-blue/request.inc:20 +#: ../../../../inc/themes/material-blue/search.inc:55 +#: ../../../../inc/themes/material-blue/tokens.inc:8 +msgid "Usuario" +msgstr "Utilisateur" + # "Wrong user/pass" -#: ../../../../ajax/ajax_doLogin.php:80 ../../../../ajax/ajax_doLogin.php:94 -#: ../../../../ajax/ajax_doLogin.php:104 +#: ../../../../ajax/ajax_doLogin.php:88 ../../../../ajax/ajax_doLogin.php:102 +#: ../../../../ajax/ajax_doLogin.php:113 msgid "Usuario/Clave incorrectos" msgstr "Utilisateur/Mot de passe incorrecte" # "Account expired" -#: ../../../../ajax/ajax_doLogin.php:83 ../../../../ajax/ajax_doLogin.php:87 +#: ../../../../ajax/ajax_doLogin.php:91 ../../../../ajax/ajax_doLogin.php:95 msgid "Cuenta expirada" msgstr "Compte expiré" # "The user have no associated groups" -#: ../../../../ajax/ajax_doLogin.php:90 +#: ../../../../ajax/ajax_doLogin.php:98 msgid "El usuario no tiene grupos asociados" msgstr "L'utilisateur n'a pas de groupe associé" -# "Session start (MySQL)" -#: ../../../../ajax/ajax_doLogin.php:96 -msgid "Inicio sesión (MySQL)" -msgstr "Début de session (MySQL)" - # "User disabled" -#: ../../../../ajax/ajax_doLogin.php:110 ../../../../ajax/ajax_doLogin.php:114 +#: ../../../../ajax/ajax_doLogin.php:119 ../../../../ajax/ajax_doLogin.php:123 msgid "Usuario deshabilitado" msgstr "Utilisateur désactivé" # "Error on retrieving user data from DB" -#: ../../../../ajax/ajax_doLogin.php:119 +#: ../../../../ajax/ajax_doLogin.php:128 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" +msgstr "Erreur pendant la récupération des données utilisateur à partir de la BDD" # "The master password not saved or is wrong" -#: ../../../../ajax/ajax_doLogin.php:127 +#: ../../../../ajax/ajax_doLogin.php:138 msgid "La clave maestra no ha sido guardada o es incorrecta" msgstr "Mot de passe maître non sauvegardé ou incorrecte" # "Invalid Master Password" -#: ../../../../ajax/ajax_doLogin.php:130 ../../../../ajax/ajax_doLogin.php:133 +#: ../../../../ajax/ajax_doLogin.php:145 ../../../../ajax/ajax_doLogin.php:148 msgid "Clave maestra incorrecta" msgstr "Mot de passe maître invalide" -# "Error on query" -#: ../../../../js/js.php:45 -msgid "Error en la consulta" -msgstr "Erreur pendant la requête" +# "Profile" +#: ../../../../ajax/ajax_doLogin.php:168 +#: ../../../../inc/ProfileBase.class.php:512 +#: ../../../../inc/ProfileBase.class.php:550 +#: ../../../../inc/ProfileBase.class.php:593 +#: ../../../../web/UsersMgmtC.class.php:89 +#: ../../../../inc/themes/classic/users.inc:37 +#: ../../../../inc/themes/material-blue/users.inc:43 +msgid "Perfil" +msgstr "Profil" -# "There was an error" -#: ../../../../js/js.php:46 -msgid "Ha ocurrido un error" -msgstr "Il y a une erreur" +# "Group" +#: ../../../../ajax/ajax_doLogin.php:169 ../../../../inc/Groups.class.php:158 +#: ../../../../inc/Groups.class.php:259 ../../../../inc/Groups.class.php:375 +#: ../../../../web/UsersMgmtC.class.php:90 +#: ../../../../inc/themes/classic/ldap.inc:116 +#: ../../../../inc/themes/classic/users.inc:49 +#: ../../../../inc/themes/material-blue/ldap.inc:139 +#: ../../../../inc/themes/material-blue/ldap.inc:164 +#: ../../../../inc/themes/material-blue/users.inc:57 +msgid "Grupo" +msgstr "Groupe" -# "Session finished" -#: ../../../../js/js.php:47 ../../../../inc/tpl/login.php:71 -msgid "Sesión finalizada" -msgstr "Session terminée" +# "Files management disabled" +#: ../../../../ajax/ajax_files.php:45 ../../../../ajax/ajax_getFiles.php:39 +msgid "Gestión de archivos deshabilitada" +msgstr "Gestion des fichiers désactivé" -# "Delete account?" -#: ../../../../js/js.php:48 -msgid "Borrar la cuenta?" -msgstr "Supprimer compte?" +# "Upload File" +#: ../../../../ajax/ajax_files.php:59 ../../../../inc/Files.class.php:63 +msgid "Subir Archivo" +msgstr "Charger Fichier" -# "Delete user?" -#: ../../../../js/js.php:49 -msgid "Borrar el usuario?" -msgstr "Supprimer l'utilisateur?" +# "There are no allowed extensions" +#: ../../../../ajax/ajax_files.php:68 +msgid "No hay extensiones permitidas" +msgstr "Il n'y a pas d'extension permise" -# "You should save configuration in order to take effect" -#: ../../../../js/js.php:50 -msgid "Guarde la configuración para que sea efectiva" -msgstr "" -"Vous devez sauvegarder la configuration pour qu'elle soit prise en compte" +# "File type not allowed" +#: ../../../../ajax/ajax_files.php:79 ../../../../inc/FileImport.class.php:115 +msgid "Tipo de archivo no soportado" +msgstr "Types de fichiers non supportés" -# "Generated Password" -#: ../../../../js/js.php:51 -msgid "Clave Generada" -msgstr "Mot de passe généré" +# "Invalid file" +#: ../../../../ajax/ajax_files.php:85 +msgid "Archivo inválido" +msgstr "Fichier invalide" -# "High level" -#: ../../../../js/js.php:52 -msgid "Nivel alto" -msgstr "Niveau haut" +# "Internal error on reading file" +#: ../../../../ajax/ajax_files.php:101 ../../../../ajax/ajax_files.php:118 +#: ../../../../inc/FileImport.class.php:131 +#: ../../../../inc/FileImport.class.php:149 +#: ../../../../inc/FileImport.class.php:167 +msgid "Error interno al leer el archivo" +msgstr "Erreur interne à la lecture du fichier" -# "Average level" -#: ../../../../js/js.php:53 -msgid "Nivel medio" -msgstr "Niveau moyen" +# "The file is bigger than" +#: ../../../../ajax/ajax_files.php:108 +msgid "El archivo es mayor de " +msgstr "Fichier plus gros que" -# "Low level" -#: ../../../../js/js.php:54 -msgid "Nivel bajo" -msgstr "Niveau bas" +# "File saved" +#: ../../../../ajax/ajax_files.php:125 +msgid "Archivo guardado" +msgstr "Fichier sauvegardé" -# "Very high level" -#: ../../../../js/js.php:55 -msgid "Nivel muy alto" -msgstr "Niveau très haut" +# "Error on saving file" +#: ../../../../ajax/ajax_files.php:130 +msgid "No se pudo guardar el archivo" +msgstr "Erreur pendant la sauvegarde de fichier" -# "You should use at least 8 characters" -#: ../../../../js/js.php:56 -msgid "Utilizar al menos 8 caracteres" -msgstr "Vous devriez utiliser au moins 8 caractères" +# "Invalid file ID" +#: ../../../../ajax/ajax_files.php:140 ../../../../ajax/ajax_files.php:199 +msgid "No es un ID de archivo válido" +msgstr "ID de fichier invalide" -# "Delete item?" -#: ../../../../js/js.php:57 -msgid "Borrar elemento?" -msgstr "Supprimer élément?" +# "The file does not exist" +#: ../../../../ajax/ajax_files.php:148 +msgid "El archivo no existe" +msgstr "Fichier inexistant" -# "Page not found" -#: ../../../../js/js.php:58 -msgid "Página no encontrada" -msgstr "Page introuvable" +# "Download File" +#: ../../../../ajax/ajax_files.php:157 +#: ../../../../inc/themes/classic/files.inc:19 +#: ../../../../inc/themes/material-blue/files.inc:19 +msgid "Descargar Archivo" +msgstr "Télécharger Fichier" -# "File not supported for preview" -#: ../../../../js/js.php:59 -msgid "Archivo no soportado para visualizar" -msgstr "Fichier non supporté pour la pré-visualisation" +# "ID" +#: ../../../../ajax/ajax_files.php:158 ../../../../ajax/ajax_viewpass.php:69 +#: ../../../../inc/Files.class.php:112 +#: ../../../../inc/themes/classic/eventlog.inc:16 +#: ../../../../inc/themes/material-blue/eventlog.inc:15 +msgid "ID" +msgstr "ID" -# "Delete file?" -#: ../../../../js/js.php:60 -msgid "Eliminar archivo?" -msgstr "Supprimer fichier?" +# "File" +#: ../../../../ajax/ajax_files.php:159 ../../../../inc/Files.class.php:65 +#: ../../../../inc/Files.class.php:113 +#: ../../../../inc/themes/classic/import.inc:155 +#: ../../../../inc/themes/material-blue/import.inc:83 +msgid "Archivo" +msgstr "Fichier" -# "Your browser does not support HTML5 file uploads" -#: ../../../../js/js.php:61 -msgid "Su navegador no soporta subir archivos con HTML5" -msgstr "Votre navigateur ne supporte pas le transfert de fichier HTML5" +# "Type" +#: ../../../../ajax/ajax_files.php:160 ../../../../inc/Files.class.php:66 +#: ../../../../inc/Files.class.php:114 +#: ../../../../web/AccountsMgmtC.class.php:266 +#: ../../../../inc/themes/classic/customfields.inc:16 +#: ../../../../inc/themes/material-blue/customfields.inc:19 +msgid "Tipo" +msgstr "Type" -# "Too many files" -#: ../../../../js/js.php:62 -msgid "Demasiados archivos" -msgstr "Trop de fichiers" +# "Size" +#: ../../../../ajax/ajax_files.php:161 ../../../../inc/Files.class.php:67 +#: ../../../../inc/Files.class.php:115 +msgid "Tamaño" +msgstr "Taille" -# "Unable to save the file.
    Max file size:" -#: ../../../../js/js.php:63 -msgid "No es posible guardar el archivo.
    Tamaño máximo:" -msgstr "Impossible de sauvegarder le fichier.
    Taille maximale:" +# "File deleted" +#: ../../../../ajax/ajax_files.php:203 +msgid "Archivo eliminado" +msgstr "Fichier supprimé" -# "Extension not allowed" -#: ../../../../js/js.php:64 -msgid "Extensión no permitida" -msgstr "Extension non autorisée" +# "Error on file deletion" +#: ../../../../ajax/ajax_files.php:208 +msgid "Error al eliminar el archivo" +msgstr "Erreur pendant la supression du fichier" -# "Clear event log?" -#: ../../../../js/js.php:65 -msgid "Vaciar el registro de eventos?" -msgstr "Nettoyer le journal d'évènements" +# "Incorrect parameters" +#: ../../../../ajax/ajax_getContent.php:41 +#: ../../../../inc/ApiRequest.class.php:55 +#: ../../../../inc/CustomFieldDef.class.php:38 +#: ../../../../inc/CustomFields.class.php:48 +msgid "Parámetros incorrectos" +msgstr "Paramètres Incorrects" + +# "Confirm account import" +#: ../../../../ajax/ajax_migrate.php:55 +msgid "Confirmar la importación de cuentas" +msgstr "Confirmer l'importation des comptes" + +# "A connection username is needed" +#: ../../../../ajax/ajax_migrate.php:57 +msgid "Es necesario un usuario de conexión" +msgstr "Nom d'utilisateur de connexion requis" + +# "The connection password is needed" +#: ../../../../ajax/ajax_migrate.php:59 +msgid "Es necesaria una clave de conexión" +msgstr "Mot de passe de connexion requis" + +# "A database name is needed" +#: ../../../../ajax/ajax_migrate.php:61 +msgid "Es necesario el nombre de la BBDD" +msgstr "Nom de base de données requis" + +# "A host name is needed" +#: ../../../../ajax/ajax_migrate.php:63 +msgid "Es necesario un nombre de host" +msgstr "Nom d'hôte requis" + +# "Password Recovery" +#: ../../../../ajax/ajax_passReset.php:47 +#: ../../../../ajax/ajax_passReset.php:50 +msgid "Recuperación de Clave" +msgstr "Recupération de Mot de passe" + +# "Requested for" +#: ../../../../ajax/ajax_passReset.php:53 +#: ../../../../ajax/ajax_passReset.php:58 +msgid "Solicitado para" +msgstr "Requis pour" + +# "Request sent" +#: ../../../../ajax/ajax_passReset.php:55 +#: ../../../../ajax/ajax_sendRequest.php:75 +msgid "Solicitud enviada" +msgstr "Requête envoyée" + +# "You will receive an email to complete the request in short." +#: ../../../../ajax/ajax_passReset.php:55 +msgid "En breve recibirá un correo para completar la solicitud." +msgstr "Vous recevrez un courriel de confirmation sous peu." + +# "The request cannot be done. Please contact to the administrator" +#: ../../../../ajax/ajax_passReset.php:60 +msgid "No se ha podido realizar la solicitud. Consulte con el administrador." +msgstr "La requête ne peut aboutir. Veuillez contacter l'administrateur" + +# "Edit User Password" +#: ../../../../ajax/ajax_passReset.php:72 +#: ../../../../inc/UserBase.class.php:568 +#: ../../../../inc/UserUtil.class.php:686 +msgid "Modificar Clave Usuario" +msgstr "Modifier Mot de passe Utilisateur" + +# "Login" +#: ../../../../ajax/ajax_passReset.php:72 +#: ../../../../inc/UserBase.class.php:568 +#: ../../../../inc/UserBase.class.php:592 +#: ../../../../inc/UserUtil.class.php:686 +#: ../../../../web/UsersMgmtC.class.php:88 +#: ../../../../inc/themes/classic/users.inc:21 +#: ../../../../inc/themes/material-blue/users.inc:24 +msgid "Login" +msgstr "Login" + +# "The password is incorrect or do not match" +#: ../../../../ajax/ajax_passReset.php:80 +msgid "La clave es incorrecta o no coincide" +msgstr "Le mot de passe est incorrect ou ne correspond pas" + +# "A description is needed" +#: ../../../../ajax/ajax_sendRequest.php:48 +msgid "Es necesaria una descripción" +msgstr "Description requise" + +# "Request for Account Modification" +#: ../../../../ajax/ajax_sendRequest.php:61 +msgid "Solicitud de Modificación de Cuenta" +msgstr "Demande de modification de Compte" + +# "Requester" +#: ../../../../ajax/ajax_sendRequest.php:62 +msgid "Solicitante" +msgstr "Demandeur" + +# "Account" +#: ../../../../ajax/ajax_sendRequest.php:63 +#: ../../../../ajax/ajax_viewpass.php:70 ../../../../inc/Account.class.php:165 +#: ../../../../inc/Account.class.php:219 ../../../../inc/Account.class.php:402 +#: ../../../../inc/Account.class.php:425 ../../../../inc/Account.class.php:667 +#: ../../../../inc/Files.class.php:64 +msgid "Cuenta" +msgstr "Compte" + +# "Customer" +#: ../../../../ajax/ajax_sendRequest.php:64 +#: ../../../../inc/Account.class.php:164 ../../../../inc/Account.class.php:218 +#: ../../../../inc/Account.class.php:401 ../../../../inc/Account.class.php:424 +#: ../../../../inc/Account.class.php:666 ../../../../inc/Customer.class.php:65 +#: ../../../../inc/Customer.class.php:115 +#: ../../../../inc/Customer.class.php:163 +#: ../../../../web/SearchC.class.php:271 +#: ../../../../inc/themes/classic/account.inc:23 +#: ../../../../inc/themes/classic/editpass.inc:12 +#: ../../../../inc/themes/classic/request.inc:9 +#: ../../../../inc/themes/classic/search.inc:21 +#: ../../../../inc/themes/material-blue/account.inc:29 +#: ../../../../inc/themes/material-blue/editpass.inc:13 +#: ../../../../inc/themes/material-blue/request.inc:10 +#: ../../../../inc/themes/material-blue/search.inc:24 +msgid "Cliente" +msgstr "Client" + +# "Description" +#: ../../../../ajax/ajax_sendRequest.php:65 +#: ../../../../web/AccountsMgmtC.class.php:79 +#: ../../../../web/AccountsMgmtC.class.php:138 +#: ../../../../web/UsersMgmtC.class.php:187 +#: ../../../../inc/themes/classic/categories.inc:16 +#: ../../../../inc/themes/classic/customers.inc:16 +#: ../../../../inc/themes/classic/eventlog.inc:31 +#: ../../../../inc/themes/classic/groups.inc:16 +#: ../../../../inc/themes/material-blue/categories.inc:20 +#: ../../../../inc/themes/material-blue/customers.inc:20 +#: ../../../../inc/themes/material-blue/eventlog.inc:30 +#: ../../../../inc/themes/material-blue/groups.inc:20 +msgid "Descripción" +msgstr "Description" + +# "Error on sending request" +#: ../../../../ajax/ajax_sendRequest.php:78 +msgid "Error al enviar la solicitud" +msgstr "Erreur à l'envoie de la demande" + +# "Error on updating profile" +#: ../../../../ajax/ajax_userPrefsSave.php:75 +#, fuzzy +msgid "Error al actualizar preferencias" +msgstr "Erreur pendant l'actualisation du mot de passe" + +# "Accounts updated:" +#: ../../../../ajax/ajax_userPrefsSave.php:78 +#, fuzzy +msgid "Preferencias actualizadas" +msgstr "Comptes actualisés:" + +# "The master password does not match" +#: ../../../../ajax/ajax_viewpass.php:54 +msgid "La clave maestra no coincide" +msgstr "Le mot de passe maître ne correspond pas" + +# "You don't have permission to access to this account" +#: ../../../../ajax/ajax_viewpass.php:58 +#: ../../../../inc/Controller.class.php:166 +msgid "No tiene permisos para acceder a esta cuenta" +msgstr "Vous n'avez pas les permissions pour accéder à ce compte" + +# "View password" +#: ../../../../ajax/ajax_viewpass.php:68 ../../../../inc/Acl.class.php:133 +#: ../../../../inc/themes/classic/account.inc:379 +#: ../../../../inc/themes/classic/profiles.inc:23 +#: ../../../../inc/themes/classic/search.inc:102 +#: ../../../../inc/themes/material-blue/account.inc:418 +#: ../../../../inc/themes/material-blue/profiles.inc:35 +#: ../../../../inc/themes/material-blue/search.inc:113 +msgid "Ver Clave" +msgstr "Voir Mot de passe" + +# "View account password" +#: ../../../../ajax/ajax_viewpass.php:79 +#, fuzzy +msgid "Clave de Cuenta" +msgstr "Modifier Mot de passe de Compte" + +# "Parameter" +#: ../../../../api.php:56 +#, fuzzy +msgid "Ayuda Parámetros" +msgstr "Aide :: FAQ :: Changelog" # "Unable to access to this file directly" -#: ../../../../inc/groups.class.php:27 ../../../../inc/util.class.php:26 -#: ../../../../inc/util.class.php:288 ../../../../inc/db.class.php:27 -#: ../../../../inc/html.class.php:27 ../../../../inc/files.class.php:27 -#: ../../../../inc/backup.class.php:26 ../../../../inc/ldap.class.php:27 -#: ../../../../inc/config.class.php:26 ../../../../inc/profiles.class.php:27 -#: ../../../../inc/common.class.php:26 ../../../../inc/account.class.php:26 -#: ../../../../inc/init.php:26 ../../../../inc/acl.class.php:27 -#: ../../../../inc/upgrade.class.php:27 ../../../../inc/migrate.class.php:26 -#: ../../../../inc/keepassimport.class.php:27 -#: ../../../../inc/installer.class.php:27 -#: ../../../../inc/keepassximport.class.php:27 -#: ../../../../inc/users.class.php:27 ../../../../inc/log.class.php:26 -#: ../../../../inc/crypt.class.php:26 ../../../../inc/customer.class.php:27 -#: ../../../../inc/category.class.php:27 ../../../../inc/import.class.php:27 -#: ../../../../inc/auth.class.php:27 ../../../../inc/tpl/request.php:25 -#: ../../../../inc/tpl/backup.php:26 ../../../../inc/tpl/masterpass.php:26 -#: ../../../../inc/tpl/groups.php:26 ../../../../inc/tpl/migrate.php:26 -#: ../../../../inc/tpl/login.php:26 ../../../../inc/tpl/customers.php:26 -#: ../../../../inc/tpl/main.php:26 ../../../../inc/tpl/profiles.php:26 -#: ../../../../inc/tpl/search.php:26 ../../../../inc/tpl/editpass.php:25 -#: ../../../../inc/tpl/accounts.php:26 ../../../../inc/tpl/categories.php:26 -#: ../../../../inc/tpl/config.php:26 ../../../../inc/tpl/users.php:26 -#: ../../../../inc/tpl/eventlog.php:26 +#: ../../../../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:30 ../../../../inc/Backup.class.php:28 +#: ../../../../inc/Category.class.php:29 ../../../../inc/Common.class.php:28 +#: ../../../../inc/Config.class.php:28 ../../../../inc/Controller.class.php:31 +#: ../../../../inc/Crypt.class.php:28 ../../../../inc/CsvImport.class.php:28 +#: ../../../../inc/CsvImportBase.class.php:28 +#: ../../../../inc/Customer.class.php:29 ../../../../inc/DB.class.php:28 +#: ../../../../inc/DBConnectionFactory.class.php:30 +#: ../../../../inc/FileImport.class.php:28 ../../../../inc/Files.class.php:29 +#: ../../../../inc/Groups.class.php:29 ../../../../inc/Html.class.php:28 +#: ../../../../inc/ImageUtil.class.php:28 ../../../../inc/Import.class.php:29 +#: ../../../../inc/ImportBase.class.php:28 ../../../../inc/Init.class.php:30 +#: ../../../../inc/Installer.class.php:29 +#: ../../../../inc/KeepassImport.class.php:28 +#: ../../../../inc/KeepassXImport.class.php:28 +#: ../../../../inc/Ldap.class.php:29 ../../../../inc/LdapADS.class.php:28 +#: ../../../../inc/Log.class.php:28 ../../../../inc/Migrate.class.php:28 +#: ../../../../inc/Profile.class.php:29 +#: ../../../../inc/ProfileBase.class.php:28 +#: ../../../../inc/Request.class.php:111 ../../../../inc/Session.class.php:28 +#: ../../../../inc/SyspassImport.class.php:28 +#: ../../../../inc/Upgrade.class.php:29 ../../../../inc/User.class.php:28 +#: ../../../../inc/UserLdap.class.php:28 +#: ../../../../inc/UserPreferences.class.php:28 +#: ../../../../inc/UserUtil.class.php:28 ../../../../inc/Util.class.php:30 +#: ../../../../inc/XmlImport.class.php:28 +#: ../../../../inc/XmlImportBase.class.php:28 +#: ../../../../web/AccountC.class.php:38 +#: ../../../../web/AccountsMgmtC.class.php:32 +#: ../../../../web/ConfigC.class.php:30 ../../../../web/EventlogC.class.php:28 +#: ../../../../web/SearchC.class.php:30 +#: ../../../../web/UsersMgmtC.class.php:39 +#: ../../../../web/UsersPrefsC.class.php:32 msgid "No es posible acceder directamente a este archivo" msgstr "Impossible d'accéder directement à ce fichier" -# "Edit Group" -#: ../../../../inc/groups.class.php:178 -msgid "Modificar Grupo" -msgstr "Modifier Groupe" - -# "Required PHP version >= 5.1" -#: ../../../../inc/util.class.php:115 -msgid "Versión de PHP requerida >= 5.1" -msgstr "Version de PHP requis >= 5.1" - -# "Please update the PHP version to run sysPass" -#: ../../../../inc/util.class.php:116 -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" - -# "Module unavilable" -#: ../../../../inc/util.class.php:136 ../../../../inc/tpl/config.php:375 -msgid "Módulo no disponible" -msgstr "Module indisponible" - -# "Without this module the application could not run correctly" -#: ../../../../inc/util.class.php:137 -msgid "Sin este módulo la aplicación puede no funcionar correctamente." -msgstr "Sans ce module, l'application ne peut pas fonctionner correctement." - -# "Unable to connect to the DB" -#: ../../../../inc/db.class.php:93 ../../../../inc/db.class.php:107 -#: ../../../../inc/db.class.php:114 -msgid "No es posible conectar con la BD" -msgstr "Impossible de se connecter à la base de données" - -# "Please, check connection parameters" -#: ../../../../inc/db.class.php:93 -msgid "Compruebe los datos de conexión" -msgstr "Veillez vérifier les parmètres de connexion" - -# "Javascript is needed in order to run correctly" -#: ../../../../inc/html.class.php:204 -msgid "Javascript es necesario para el correcto funcionamiento" -msgstr "Javascript est requis pour fonctionner correctement" - -# "Help :: FAQ :: Changelog" -#: ../../../../inc/html.class.php:229 -msgid "Ayuda :: FAQ :: Changelog" -msgstr "Aide :: FAQ :: Changelog" - -# "A cygnux.org project" -#: ../../../../inc/html.class.php:231 -msgid "Un proyecto de cygnux.org" -msgstr "Un projet cygnux.org" - -# "Filter ON" -#: ../../../../inc/html.class.php:273 -msgid "Filtro ON" -msgstr "Filtre ON" - -# "Global ON" -#: ../../../../inc/html.class.php:275 -msgid "Global ON" -msgstr "Global ON" - -# "First page" -#: ../../../../inc/html.class.php:280 ../../../../inc/html.class.php:313 -msgid "Primera página" -msgstr "Première page" - -# "Previous page" -#: ../../../../inc/html.class.php:281 ../../../../inc/html.class.php:314 -msgid "Página anterior" -msgstr "Page précédante" - -# "Next page" -#: ../../../../inc/html.class.php:288 ../../../../inc/html.class.php:321 -msgid "Página siguiente" -msgstr "Page suivante" - -# "Last page" -#: ../../../../inc/html.class.php:289 ../../../../inc/html.class.php:322 -msgid "Última página" -msgstr "Dernière page" - -# "Option unavailable" -#: ../../../../inc/html.class.php:416 -msgid "Opción no disponible" -msgstr "Option indisponible" - -# "Please, contact to the administrator" -#: ../../../../inc/html.class.php:416 ../../../../inc/html.class.php:417 -#: ../../../../inc/html.class.php:418 ../../../../inc/init.php:484 -msgid "Consulte con el administrador" -msgstr "Veuillez contacter votre administrateur" - -# "You don't have permission to access to this page" -#: ../../../../inc/html.class.php:418 -msgid "No tiene permisos para acceder a esta página" -msgstr "Vous n'avez pas les permissions pour accéder à cette page" - -# "This operation is only available on Linux environments" -#: ../../../../inc/backup.class.php:155 -msgid "Esta operación sólo es posible en entornos Linux" -msgstr "Cette opération est uniquement possible en environnement Linux" - -# "Error while doing backup in compatibility mode" -#: ../../../../inc/backup.class.php:159 -msgid "Error al realizar backup en modo compatibilidad" -msgstr "Erreur pendant la sauvegarde en mode compatibilité" - -# "Check backup directory permissions" -#: ../../../../inc/backup.class.php:217 -msgid "Compruebe los permisos del directorio de backups" -msgstr "Vérifiez les permissions du dossier de sauvegarde" - -# "Unable to connect to the LDAP server" -#: ../../../../inc/ldap.class.php:97 ../../../../inc/ldap.class.php:102 -msgid "No es posible conectar con el servidor de LDAP" -msgstr "Impossible de se connecter au server LDAP" - -# "Connection error (BIND)" -#: ../../../../inc/ldap.class.php:126 ../../../../inc/ldap.class.php:132 -msgid "Error al conectar (BIND)" -msgstr "Erreur de connexion (BIND)" - -# "Error on searching objects in base DN" -#: ../../../../inc/ldap.class.php:154 ../../../../inc/ldap.class.php:160 -msgid "Error al buscar objetos en DN base" -msgstr "Erreur pendant la recherche d'objets dans la base DN" - -# "Error on searching group RDN" -#: ../../../../inc/ldap.class.php:187 ../../../../inc/ldap.class.php:193 -#: ../../../../inc/ldap.class.php:200 ../../../../inc/ldap.class.php:205 -#: ../../../../inc/ldap.class.php:215 ../../../../inc/ldap.class.php:220 -msgid "Error al buscar RDN de grupo" -msgstr "Erreur pendant la recherche RDN du groupe" - -# "Group RDN found" -#: ../../../../inc/ldap.class.php:208 -msgid "RDN de grupo encontrado" -msgstr "RDN de groupe trouvé" - -# "Error on searching user DN" -#: ../../../../inc/ldap.class.php:270 ../../../../inc/ldap.class.php:276 -#: ../../../../inc/ldap.class.php:291 ../../../../inc/ldap.class.php:296 -msgid "Error al buscar el DN del usuario" -msgstr "Erreur pendant la recherche du DN de l'utilisateur" - -# "Error on searching user on LDAP" -#: ../../../../inc/ldap.class.php:283 ../../../../inc/ldap.class.php:288 -msgid "Error al localizar el usuario en LDAP" -msgstr "Erreur pendant la recherche de l'utilisateur dans l'annuaire LDAP" - -# "Error on searching users group" -#: ../../../../inc/ldap.class.php:369 ../../../../inc/ldap.class.php:375 -msgid "Error al buscar el grupo de usuarios" -msgstr "Erreur pendant la recherche de groupe d'utilisateurs" - -# "No group found with that name" -#: ../../../../inc/ldap.class.php:379 ../../../../inc/ldap.class.php:385 -msgid "No se encontró el grupo con ese nombre" -msgstr "Nom de groupe introuvable avec ce nom" - -# "Update Configuration" -#: ../../../../inc/config.class.php:125 ../../../../inc/config.class.php:151 -msgid "Modificar configuración" -msgstr "Modifier configuration" - -# "Parameter" -#: ../../../../inc/config.class.php:152 -msgid "Parámetro" -msgstr "Paramètre" - -# "Value" -#: ../../../../inc/config.class.php:153 -msgid "Valor" -msgstr "Valeur" - -# "Unable to write in configuration file" -#: ../../../../inc/config.class.php:312 -msgid "No es posible escribir el archivo de configuración" -msgstr "Impossible d'écrire dans le fichier de configuration" - -# "Please, check the "config" directory permissions" -#: ../../../../inc/config.class.php:313 -msgid "Compruebe los permisos del directorio \"config\"" -msgstr "Vérifiez les permissions du dossier \"config\"" - -# "Edit Profile" -#: ../../../../inc/profiles.class.php:253 -msgid "Modificar Perfil" -msgstr "Modifier Profil" - -# "N/A" -#: ../../../../inc/common.class.php:60 ../../../../inc/users.class.php:107 -msgid "N/D" -msgstr "N/A" - -# "Action" -#: ../../../../inc/common.class.php:61 -msgid "Acción" -msgstr "Action" - -# "Performed by" -#: ../../../../inc/common.class.php:62 -msgid "Realizado por" -msgstr "Réalisé par" - -# "Email sent" -#: ../../../../inc/common.class.php:80 -msgid "Correo enviado" -msgstr "Courriel envoyé" - -# "Error on sending email" -#: ../../../../inc/common.class.php:82 -msgid "Error al enviar correo" -msgstr "Erreur pendant l'envoi du courriel" - -# "Recipient" -#: ../../../../inc/common.class.php:87 -msgid "Destinatario" -msgstr "Destinataire" - -# "CC" -#: ../../../../inc/common.class.php:88 -msgid "CC" -msgstr "CC" - -# "Send Email" -#: ../../../../inc/common.class.php:90 -msgid "Enviar Email" -msgstr "Envoyer Courriel" - -# "Warning" -#: ../../../../inc/common.class.php:144 -msgid "Aviso" -msgstr "Avertissement" - -# "Enter phpPMS database connection user" -#: ../../../../inc/common.class.php:205 -msgid "Indicar el usuario de conexión a la base de datos de phpPMS" -msgstr "Saisir l'identifiant de connexion à la base de données phpPMS" - -# "Enter phpPMS database name" -#: ../../../../inc/common.class.php:206 -msgid "Indicar el nombre de la base de datos de phpPMS" -msgstr "Saisir le nom de la base de données phpPMS" - -# "Enter phpPMS database server name" -#: ../../../../inc/common.class.php:207 -msgid "Indicar el servidor de la base de datos de phpPMS" -msgstr "Saisir le nom du serveur de base de données phpPMS" - -# "" -#: ../../../../inc/common.class.php:208 -msgid "" -"Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles " -"de la cuenta" -msgstr "" -"Active le nom du compte comme lien pour les détails du compte dans la page " -"de recherche" - -# "Number of results that are shown per page when searching" -#: ../../../../inc/common.class.php:209 -msgid "Número de resultados por página a mostrar, al realizar una búsqueda" -msgstr "Nombre de résultats affichés par page lors d'une recherche" - -# "It enables upload/download the accounts' files" -#: ../../../../inc/common.class.php:210 -msgid "Habilita la subida/descarga de archivos para las cuentas" -msgstr "Active le Chargement/Téléchargement des fichiers de comptes" - -# "Sets up the max upload file size." -#: ../../../../inc/common.class.php:211 -msgid "Establece el tamaño máximo para subir archivos" -msgstr "Définir la taille maximale pour le chargement de fichier" - -# "The absolute maximum is 16MB." -#: ../../../../inc/common.class.php:211 -msgid "El máximo absuluto es de 16MB" -msgstr "Le maximum absolue est de 16Mo." - -# "" -#: ../../../../inc/common.class.php:212 -msgid "" -"Habilita la opción de añadir un enlace a Wiki externa para los resultados de " -"la búsqueda" -msgstr "" -"Active l'option d'ajout de liens externes Wiki pour le résultat des " -"recherches" - -# "URL that wiki uses to do a page search on it." -#: ../../../../inc/common.class.php:213 -msgid "" -"URL que utiliza la wiki para realizar una búsqueda de una página en esta" -msgstr "URL utilisé par wiki pour effectuer une recherche sur une page" - -# "It uses customer name as parameter." -#: ../../../../inc/common.class.php:213 -msgid "Como parámetro se utiliza el nombre del cliente" -msgstr "Utilise le nom d'utilsateur comme paramètre" - -# "Example" -#: ../../../../inc/common.class.php:213 ../../../../inc/common.class.php:214 -#: ../../../../inc/common.class.php:217 ../../../../inc/common.class.php:218 -#: ../../../../inc/common.class.php:219 -msgid "Ejemplo" -msgstr "Example" - -# "URL that wiki uses to access to page details on it." -#: ../../../../inc/common.class.php:214 -msgid "" -"URL que utiliza la wiki para acceder a los detalles de una página de ésta" -msgstr "URL que Wiki utilise pour accéder aux détails d'un page sur celui-ci" - -# "The account name is used as wiki search variable parameter." -#: ../../../../inc/common.class.php:214 -msgid "" -"El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda " -"de la Wiki" -msgstr "" -"Le nom du compte est utilisé comme paramètre pour la variable de recherche " -"wiki" - -# "Preffix to select what accounts have a wiki page link" -#: ../../../../inc/common.class.php:215 -msgid "" -"Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki" -msgstr "Préfix pour déterminer quels comptes aurront un lien Wiki." - -# "Examples" -#: ../../../../inc/common.class.php:215 -msgid "Ejemplos" -msgstr "Examples" - -# "It enables LDAP authentication" -#: ../../../../inc/common.class.php:216 -msgid "Habilita de autentificación mediante servidor LDAP" -msgstr "Active l'authentification LDAP" - -# "This method will switch to MySQL on failure" -#: ../../../../inc/common.class.php:216 -msgid "Este método utilizará MySQL en caso de fallo" -msgstr "Cette méthode basculera sur MySQL en cas d'échec" - -# "User to connect LDAP server" -#: ../../../../inc/common.class.php:217 -msgid "Usuario para conectar con el servicio de LDAP" -msgstr "Utilisateur pour se connecter au serveur LDAP" - -# "LDAP base to do users searches." -#: ../../../../inc/common.class.php:218 -msgid "Base en la que realizar la búsqueda de usuarios de LDAP" -msgstr "Base LDAP de recherche des utilisateurs" - -# "LDAP group that users belong to for access permission" -#: ../../../../inc/common.class.php:219 -msgid "" -"Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso" -msgstr "" -"Groupe LDAP auquel doivent apartenir les utilisateurs afin d'avoir les " -"permissions d'accès" - -# "LDAP server hostname or IP address" -#: ../../../../inc/common.class.php:220 -msgid "Nombre o dirección IP del servidor de LDAP" -msgstr "Nom ou adresse IP du serveur LDAP" - -# "Sets a new master password without re-encrypting the accounts." -#: ../../../../inc/common.class.php:221 -msgid "Establece una nueva clave maestra sin re-encriptar las cuentas" -msgstr "Définir un nouveau mot de passe maître sans ré-encrypter les comptes" - -# "LDAP bind user password" -#: ../../../../inc/common.class.php:222 -msgid "Clave del usuario de conexión a LDAP" -msgstr "Mot de passe utilisateur de connexion LDAP" - -# "" -#: ../../../../inc/common.class.php:223 -msgid "" -"En este modo no se puede acceder a la aplicación. Para deshabilitarlo es " -"necesario modificar el archivo de configuración" -msgstr "" -"Dans ce mode, vous ne pouvez pas accéder à l'application. Pour pouvoir le " -"faire, vous devez modifier le fichier de configuration." - -# "Shows some information about application and performance." -#: ../../../../inc/common.class.php:224 -msgid "" -"Muestra información relativa a la configuración de la aplicación y " -"rendimiento" -msgstr "" -"Affiche quelques informations à propos de l'application et de ces " -"performances" - -# "It saves the actions done by the application." -#: ../../../../inc/common.class.php:225 -msgid "Guarda las acciones realizadas en la aplicación" -msgstr "Sauvegarde les actions effectuées par l'application" - -# "Check for application updates (only for administrators)." -#: ../../../../inc/common.class.php:226 -msgid "" -"Comprobar actualizaciones de la aplicación (sólo para los usuarios " -"administradores)" -msgstr "Vérifier les mises à jour de l'application (Administrateurs seulement)" - -# "Extensions max length is 4 characters." -#: ../../../../inc/common.class.php:227 -msgid "Extensiones de máximo 4 caracteres." -msgstr "Extensions de 4 caractères maxi" - -# "Write extension and press enter to add." -#: ../../../../inc/common.class.php:227 -msgid "Escribir extensión y pulsar intro para añadir." -msgstr "Ecrire l'extension puis pressez Entrée pour ajouter." - -# "" -#: ../../../../inc/common.class.php:228 -msgid "" -"Importar desde KeePass o KeePassX. El nombre del cliente será igual a " -"KeePass o KeePassX" -msgstr "" -"Importer depuis KeePass ou KeePassX. Le nombre de clients sera égale à ceux " -"de KeePass ou KeePassX" - -# "Import form a CSV file with the format" -#: ../../../../inc/common.class.php:228 -msgid "Importar desde un archivo CSV con el formato" -msgstr "Importer depuis un fichier CSV avec le format" - -# "account_name -#: ../../../../inc/common.class.php:228 -msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas" -msgstr "nom_de_compte;client;categorie;url;utilisateur;mot_de_passe;notes" - -# "" -#: ../../../../inc/common.class.php:228 -msgid "" -"Si el cliente o la categoría no están creados, se crean automáticamente." -msgstr "" -"Si le client ou la catégorie ne sont pas créés, ils se créeront " -"automatiquement." - -# "Allows to show the non-permission accounts only for searches." -#: ../../../../inc/common.class.php:229 -msgid "" -"Permite que las cuentas sin acceso sean visibles sólo para las búsquedas." -msgstr "" -"Permet l'affichage des comptes non autorisés pour la recherche uniquement" - -# "Enables to show account's search results like a card format." -#: ../../../../inc/common.class.php:230 -msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta." -msgstr "Active l'affichage des résultats de recherche comme format carte." - -# "Enables Active Directory LDAP connection mode." -#: ../../../../inc/common.class.php:231 -msgid "Habilita el modo de conexión con LDAP de Active Directory." -msgstr "Permet le mode de connexion actif avec l'annuaire LDAP" - -# "Define the default users group for new LDAP users" -#: ../../../../inc/common.class.php:232 -msgid "" -"Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP." -msgstr "" -"Défini le groupe d'utilisateur par défaut pour les nouveaux utilisateurs LDAP" - -# "Define the default users profile for new LDAP users" -#: ../../../../inc/common.class.php:233 -msgid "" -"Define el perfil de usuario por defecto para los nuevos usuarios de LDAP." -msgstr "Défini le profile par défaut pour les nouveaux utilisateurs LDAP" - # "Error on updating history" -#: ../../../../inc/account.class.php:320 ../../../../inc/account.class.php:842 +#: ../../../../inc/Account.class.php:112 ../../../../inc/Account.class.php:185 +#: ../../../../inc/Account.class.php:636 msgid "Error al actualizar el historial" msgstr "Erreur pendant l'actualisation de l'historique" # "Update Account" -#: ../../../../inc/account.class.php:326 +#: ../../../../inc/Account.class.php:117 msgid "Actualizar Cuenta" msgstr "Actualiser Compte" # "Error on updating secondary groups" -#: ../../../../inc/account.class.php:329 ../../../../inc/account.class.php:555 +#: ../../../../inc/Account.class.php:120 ../../../../inc/Account.class.php:383 msgid "Error al actualizar los grupos secundarios" msgstr "Erreur pendant l'actualisation des groupes secondaires" # "Error on updating account's users" -#: ../../../../inc/account.class.php:335 ../../../../inc/account.class.php:563 +#: ../../../../inc/Account.class.php:126 ../../../../inc/Account.class.php:391 msgid "Error al actualizar los usuarios de la cuenta" msgstr "Erreur pendant la modification des comptes utilisateurs" # "Account Restore" -#: ../../../../inc/account.class.php:340 +#: ../../../../inc/Account.class.php:217 msgid "Restaurar Cuenta" msgstr "Restaurer Compte" +# "Error on retrieving accounts' passwords" +#: ../../../../inc/Account.class.php:326 +#: ../../../../inc/AccountHistory.class.php:343 +#: ../../../../inc/AccountHistory.class.php:505 +#, fuzzy +msgid "No se pudieron obtener los datos de la cuenta" +msgstr "Erreur pendant la récupération des mot de passe des comptes" + # "New Account" -#: ../../../../inc/account.class.php:572 ../../../../inc/tpl/main.php:53 -#: ../../../../inc/tpl/accounts.php:47 +#: ../../../../inc/Account.class.php:400 ../../../../inc/Acl.class.php:129 +#: ../../../../web/AccountC.class.php:147 ../../../../web/MainC.class.php:155 msgid "Nueva Cuenta" msgstr "Nouveau Compte" # "ERROR: Operation failed" -#: ../../../../inc/account.class.php:589 +#: ../../../../inc/Account.class.php:418 msgid "ERROR: Error en la operación." msgstr "ERREUR: Echec de l'opération" +# "Delete Account" +#: ../../../../inc/Account.class.php:423 ../../../../inc/Acl.class.php:134 +#: ../../../../web/AccountC.class.php:352 +#: ../../../../inc/themes/classic/account.inc:366 +#: ../../../../inc/themes/classic/search.inc:129 +#: ../../../../inc/themes/material-blue/account.inc:412 +#: ../../../../inc/themes/material-blue/search.inc:142 +msgid "Eliminar Cuenta" +msgstr "Supprimer Compte" + # "Error on deleting account's groups" -#: ../../../../inc/account.class.php:606 +#: ../../../../inc/Account.class.php:436 msgid "Error al eliminar grupos asociados a la cuenta" msgstr "Erreur pendant la suppression du groupe du compte" # "Error on deleting account's users" -#: ../../../../inc/account.class.php:610 +#: ../../../../inc/Account.class.php:440 msgid "Error al eliminar usuarios asociados a la cuenta" msgstr "Erreur pendant la suppression des utilisateurs du compte" # "Error on deleting account's files" -#: ../../../../inc/account.class.php:614 +#: ../../../../inc/Account.class.php:444 msgid "Error al eliminar archivos asociados a la cuenta" msgstr "Erreur pendant la supression des fichiers du compte" # "Start" -#: ../../../../inc/account.class.php:737 ../../../../inc/account.class.php:890 +#: ../../../../inc/Account.class.php:498 +#: ../../../../inc/AccountHistory.class.php:124 +#: ../../../../inc/XmlImport.class.php:62 msgid "Inicio" msgstr "Début" # "Error on encryption module" -#: ../../../../inc/account.class.php:747 ../../../../inc/account.class.php:900 +#: ../../../../inc/Account.class.php:503 +#: ../../../../inc/AccountHistory.class.php:130 msgid "Error en el módulo de encriptación" msgstr "Erreur dans le module d'encryption" # "Error on retrieving accounts' passwords" -#: ../../../../inc/account.class.php:755 ../../../../inc/account.class.php:908 +#: ../../../../inc/Account.class.php:511 +#: ../../../../inc/AccountHistory.class.php:138 msgid "Error al obtener las claves de las cuentas" msgstr "Erreur pendant la récupération des mot de passe des comptes" +# "View account password" +#: ../../../../inc/Account.class.php:527 +#: ../../../../inc/AccountHistory.class.php:160 +#, fuzzy +msgid "Clave de cuenta vacía" +msgstr "Modifier Mot de passe de Compte" + +#: ../../../../inc/Account.class.php:532 +#: ../../../../inc/AccountHistory.class.php:165 +#, fuzzy +msgid "IV de encriptación incorrecto" +msgstr "Le nombre de champs est incorrect" + +# "All accounts passwords will be encrypted again." +#: ../../../../inc/Account.class.php:541 +#: ../../../../inc/AccountHistory.class.php:174 +#, fuzzy +msgid "No es posible desencriptar la clave de la cuenta" +msgstr "Tous les mots de passe des comptes seront encryptés de nouveau." + # "Error on updating account's password" -#: ../../../../inc/account.class.php:781 +#: ../../../../inc/Account.class.php:547 msgid "Fallo al actualizar la clave de la cuenta" msgstr "Erreur à la mise à jour des mots de passe des comptes" # "Accounts updated:" -#: ../../../../inc/account.class.php:793 -msgid "Cuentas actualizadas:" +#: ../../../../inc/Account.class.php:561 +#, fuzzy +msgid "Cuentas actualizadas" msgstr "Comptes actualisés:" # "End" -#: ../../../../inc/account.class.php:798 ../../../../inc/account.class.php:956 +#: ../../../../inc/Account.class.php:566 +#: ../../../../inc/AccountHistory.class.php:199 msgid "Fin" msgstr "Fin" # "Update Password" -#: ../../../../inc/account.class.php:865 +#: ../../../../inc/Account.class.php:665 msgid "Modificar Clave" msgstr "Modifier Mot de passe" +# "Error on retrieving accounts' passwords" +#: ../../../../inc/Account.class.php:700 +#, fuzzy +msgid "No se pudieron obtener los datos de las cuentas" +msgstr "Erreur pendant la récupération des mot de passe des comptes" + # "Update Master Password (H)" -#: ../../../../inc/account.class.php:889 +#: ../../../../inc/AccountHistory.class.php:123 msgid "Actualizar Clave Maestra (H)" msgstr "Mettre à jour le Mot de Passe Maître (H)" # "The record's master password does not match" -#: ../../../../inc/account.class.php:922 +#: ../../../../inc/AccountHistory.class.php:155 msgid "La clave maestra del registro no coincide" msgstr "Le mot de passe maître de l'enregistrement ne correspond pas" # "Error on updating history's master password" -#: ../../../../inc/account.class.php:938 +#: ../../../../inc/AccountHistory.class.php:180 msgid "Fallo al actualizar la clave del histórico" msgstr "Erreur pendant la mise à jour du mot de passe maître de l'historique" # "Records updated" -#: ../../../../inc/account.class.php:951 -msgid "Registros actualizados:" +#: ../../../../inc/AccountHistory.class.php:194 +#, fuzzy +msgid "Registros actualizados" msgstr "Enregistrements actualisés" -# "Error on checking database" -#: ../../../../inc/init.php:127 -msgid "Error en la verificación de la base de datos" -msgstr "Erreur pendant la vérification de la base de données" - -# "The "/config" directory does not exist." -#: ../../../../inc/init.php:316 -msgid "El directorio \"/config\" no existe" -msgstr "Le dossier \"/config\" n'existe pas" - -# "Unable to write into the "/config" directory" -#: ../../../../inc/init.php:321 -msgid "No es posible escribir en el directorio \"config\"" -msgstr "Impossible d'écrire dans le dossier \"/config\"" - -# "The "/config" directory permissions are incorrect" -#: ../../../../inc/init.php:329 -msgid "Los permisos del directorio \"/config\" son incorrectos" -msgstr "Les permissions du dossier \"/config\" sont incorrectes" - -# "Current:" -#: ../../../../inc/init.php:329 -msgid "Actual:" -msgstr "Actuel" - -# "Needed: 750" -#: ../../../../inc/init.php:329 -msgid "Necesario: 750" -msgstr "Nécessaire: 750" - -# "Application in maintenance" -#: ../../../../inc/init.php:395 -msgid "Aplicación en mantenimiento" -msgstr "Application en maintenance" - -# "It will be running in short" -#: ../../../../inc/init.php:395 -msgid "En breve estará operativa" -msgstr "Sera opérationnel sous peu" - -# "The application needs to be updated" -#: ../../../../inc/init.php:426 -msgid "La aplicación necesita actualizarse" -msgstr "L'application a besoin d'être mis à jour" - -# "If you are an administrator, click on the link:" -#: ../../../../inc/init.php:426 -msgid "Si es un administrador pulse en el enlace:" -msgstr "Si vous êtes administrateur, cliquez sur le lien:" - -# "Update" -#: ../../../../inc/init.php:426 ../../../../inc/tpl/upgrade.php:54 -msgid "Actualizar" -msgstr "Mis à jour" - -# "Update" -#: ../../../../inc/init.php:455 -msgid "Actualización" -msgstr "Actualisation" - -# "Version updating done." -#: ../../../../inc/init.php:456 -msgid "Actualización de versión realizada." -msgstr "Mise à jour de version effectuée." - -# "Version" -#: ../../../../inc/init.php:457 -msgid "Versión" -msgstr "Version" - -# "Session" -#: ../../../../inc/init.php:478 -msgid "Sesion" -msgstr "Session" - -# "Session cannot be initialized" -#: ../../../../inc/init.php:478 ../../../../inc/init.php:483 -msgid "La sesión no puede ser inicializada" -msgstr "La session ne peut pas être initialisée" - -# "Logout session" -#: ../../../../inc/init.php:545 -msgid "Finalizar sesión" -msgstr "Deconnexion" - -# "Inactive time" -#: ../../../../inc/init.php:547 -msgid "Tiempo inactivo" -msgstr "Temps d'inactivité" - -# "Total time" -#: ../../../../inc/init.php:548 -msgid "Tiempo total" -msgstr "Temps total" - # "Access denied to" -#: ../../../../inc/acl.class.php:104 +#: ../../../../inc/Acl.class.php:112 msgid "Denegado acceso a" msgstr "Accès refusé pour" -# "Error on updating database" -#: ../../../../inc/upgrade.class.php:48 -msgid "Error al aplicar la actualización de la Base de Datos" -msgstr "Erreur pendant la mise à jour de la base de données." +# "New Account" +#: ../../../../inc/Acl.class.php:126 +#, fuzzy +msgid "Buscar Cuentas" +msgstr "Chercher" -# "Please, check the event log for more details" -#: ../../../../inc/upgrade.class.php:49 -msgid "Compruebe el registro de eventos para más detalles" -msgstr "Veuillez consulter le journal des évènements pour plus de détail" +# "Account" +#: ../../../../inc/Acl.class.php:127 +#, fuzzy +msgid "Ver Cuenta" +msgstr "Voir détails de compte" -# "Sign in" -#: ../../../../inc/upgrade.class.php:49 ../../../../inc/tpl/login.php:51 -msgid "Acceder" -msgstr "Se connecter" +# "Copy Account" +#: ../../../../inc/Acl.class.php:128 ../../../../web/AccountC.class.php:259 +#: ../../../../inc/themes/classic/search.inc:123 +#: ../../../../inc/themes/material-blue/search.inc:136 +msgid "Copiar Cuenta" +msgstr "Copier Compte" -# "Update DB" -#: ../../../../inc/upgrade.class.php:64 -msgid "Actualizar BBDD" -msgstr "Mis à jour BDD" +# "Edit Account" +#: ../../../../inc/Acl.class.php:130 ../../../../web/AccountC.class.php:323 +msgid "Editar Cuenta" +msgstr "Editer Compte" -# "Database update not needed." -#: ../../../../inc/upgrade.class.php:91 -msgid "No es necesario actualizar la Base de Datos." -msgstr "La mise à jour de la base de données n'est pas nécessaire." +# "Edit account password" +#: ../../../../inc/Acl.class.php:131 +#, fuzzy +msgid "Editar Clave de Cuenta" +msgstr "Editer mot de passe du compte" -# "Error on updating database." -#: ../../../../inc/upgrade.class.php:97 -msgid "Error al aplicar la actualización de la Base de Datos." -msgstr "Erreur pendant la mise à jour de la base de données." +# "View History" +#: ../../../../inc/Acl.class.php:132 +#: ../../../../inc/themes/classic/profiles.inc:28 +#: ../../../../inc/themes/material-blue/profiles.inc:40 +msgid "Ver Historial" +msgstr "Voir Historique" -# "Database updating was done successfully." -#: ../../../../inc/upgrade.class.php:104 -msgid "Actualización de la Base de Datos realizada correctamente." -msgstr "Mise à jour de la base de données effectuée." +# "Files" +#: ../../../../inc/Acl.class.php:135 +#: ../../../../inc/themes/classic/account.inc:188 +#: ../../../../inc/themes/classic/profiles.inc:50 +#: ../../../../inc/themes/material-blue/account.inc:230 +#: ../../../../inc/themes/material-blue/config.inc:226 +#: ../../../../inc/themes/material-blue/profiles.inc:60 +msgid "Archivos" +msgstr "Fichiers" -# "Update Configuration" -#: ../../../../inc/upgrade.class.php:174 -msgid "Actualizar Configuración" -msgstr "Mettre à jour la Configuration" +# "Request" +#: ../../../../inc/Acl.class.php:136 +#, fuzzy +msgid "Peticiones" +msgstr "Activer les demandes par courriel" -# "Configuration updating was done successfully." -#: ../../../../inc/upgrade.class.php:175 -msgid "Actualización de la Configuración realizada correctamente." -msgstr "Mise à jour de la configuration effectuée correctement." +# "Application Admin" +#: ../../../../inc/Acl.class.php:137 +#, fuzzy +msgid "Gestión Aplicación" +msgstr "Gestion" -# "Missing parameters" -#: ../../../../inc/migrate.class.php:85 -msgid "Faltan parámetros" -msgstr "Paramètres manquants" +# "Categories Management" +#: ../../../../inc/Acl.class.php:138 +#, fuzzy +msgid "Gestión Categorías" +msgstr "Gestion des catégories" -# "Import finished" -#: ../../../../inc/migrate.class.php:114 ../../../../inc/import.class.php:88 -msgid "Importación finalizada" -msgstr "Importation terminée" +# "Customers Management" +#: ../../../../inc/Acl.class.php:139 +#, fuzzy +msgid "Gestión Clientes" +msgstr "Gestion des Clients" -# "Wrong MySQL user/pass" -#: ../../../../inc/migrate.class.php:138 -#: ../../../../inc/installer.class.php:202 -msgid "El usuario/clave de MySQL no es correcto" -msgstr "Mauvais identifiant/mot de passe MySQL" +# "Files management disabled" +#: ../../../../inc/Acl.class.php:140 +#, fuzzy +msgid "Gestión Campos Personalizados" +msgstr "Gestion" -# "Please, check database connection user" -#: ../../../../inc/migrate.class.php:139 -#: ../../../../inc/installer.class.php:203 -msgid "Verifique el usuario de conexión con la Base de Datos" -msgstr "Veuillez vérifier l'utilsateur de connexion pour la base de données" +#: ../../../../inc/Acl.class.php:141 +#, fuzzy +msgid "Gestión Autorizaciones API" +msgstr "Gestion" -# "Incompatible version" -#: ../../../../inc/migrate.class.php:183 -msgid "La versión no es compatible" -msgstr "Version incompatible" +# "Users Management" +#: ../../../../inc/Acl.class.php:142 ../../../../inc/Acl.class.php:143 +#, fuzzy +msgid "Gestión Usuarios" +msgstr "Gestion des Utilisateurs" -# "Please, update to the last version of phpPMS" -#: ../../../../inc/migrate.class.php:184 -msgid "Actualice a la última versión de phpPMS" -msgstr "Mettez à niveau la dernière version de phpPMS" +# "Groups Management" +#: ../../../../inc/Acl.class.php:144 +#, fuzzy +msgid "Gestión Grupos" +msgstr "Gestion des Groupes" -# "Error on retrieving configuration" -#: ../../../../inc/migrate.class.php:202 -msgid "Error al obtener la configuración" -msgstr "Erreur pendant la récupération de la configuration" +# "Profiles Management" +#: ../../../../inc/Acl.class.php:145 +#, fuzzy +msgid "Gestión Perfiles" +msgstr "Gestion des Profils" -# "Error on cleaning table" -#: ../../../../inc/migrate.class.php:252 ../../../../inc/migrate.class.php:266 -msgid "Error al vaciar tabla" -msgstr "Erreur pendant le nettoyage de la table" +# "Configuration" +#: ../../../../inc/Acl.class.php:146 ../../../../inc/Config.class.php:118 +#: ../../../../inc/Config.class.php:400 ../../../../web/MainC.class.php:173 +#: ../../../../inc/themes/classic/profiles.inc:57 +#: ../../../../inc/themes/material-blue/profiles.inc:66 +msgid "Configuración" +msgstr "Configuration" -# "Current user is not application administrator" -#: ../../../../inc/migrate.class.php:271 -msgid "Usuario actual no es administrador de la aplicación" -msgstr "L'utilisateur actuel n'est administrateur de l'application" +# "General configuration" +#: ../../../../inc/Acl.class.php:147 +#, fuzzy +msgid "Configuración General" +msgstr "Configuration générale" -# "Unable to create the customer" -#: ../../../../inc/migrate.class.php:317 -msgid "No es posible crear el cliente" -msgstr "Impossible de créer le client" +# "Description" +#: ../../../../inc/Acl.class.php:148 ../../../../web/ConfigC.class.php:145 +#: ../../../../inc/themes/classic/profiles.inc:65 +#: ../../../../inc/themes/material-blue/profiles.inc:77 +#, fuzzy +msgid "Encriptación" +msgstr "Le module d'encryption ne peut pas être chargé" -# "Please, contact to the developer" -#: ../../../../inc/migrate.class.php:318 -msgid "Contacte con el desarrollador" -msgstr "Veuillez contacter le développeur" +# "Backup" +#: ../../../../inc/Acl.class.php:149 ../../../../web/ConfigC.class.php:187 +#: ../../../../inc/themes/classic/backup.inc:4 +#: ../../../../inc/themes/material-blue/backup.inc:4 +msgid "Copia de Seguridad" +msgstr "Sauvegarde de sécurité" -# "Import Customers" -#: ../../../../inc/migrate.class.php:322 -msgid "Importar Clientes" -msgstr "Importer Clients" +#: ../../../../inc/Acl.class.php:150 +msgid "Exportar" +msgstr "" -# "Records" -#: ../../../../inc/migrate.class.php:324 ../../../../inc/migrate.class.php:396 -#: ../../../../inc/migrate.class.php:483 ../../../../inc/migrate.class.php:555 -#: ../../../../inc/migrate.class.php:645 ../../../../inc/migrate.class.php:706 -#: ../../../../inc/migrate.class.php:780 ../../../../inc/migrate.class.php:857 -#: ../../../../inc/migrate.class.php:926 -msgid "Registros" -msgstr "Enregistrements" +# "phpPMS Import" +#: ../../../../inc/Acl.class.php:151 +#: ../../../../inc/themes/classic/profiles.inc:74 +#: ../../../../inc/themes/material-blue/profiles.inc:87 +#, fuzzy +msgid "Importar" +msgstr "Importer Comptes" -# "Error on retrieving customer" -#: ../../../../inc/migrate.class.php:343 -msgid "Error al obtener los clientes" -msgstr "Erreur pendant la récupération des clients" +# "Extension not allowed" +#: ../../../../inc/Api.class.php:65 ../../../../inc/Api.class.php:88 +#: ../../../../inc/Api.class.php:126 +#, fuzzy +msgid "Acceso no permitido" +msgstr "Accès refusé pour" -# "Error on retrieving accounts" -#: ../../../../inc/migrate.class.php:381 -msgid "Error al obtener cuentas" -msgstr "Erreur pendant la récupération des comptes" +# "Request Modification" +#: ../../../../inc/Api.class.php:166 +#, fuzzy +msgid "Error de codificación" +msgstr "Erreur de connexion LDAP" -# "Customer not found" -#: ../../../../inc/migrate.class.php:421 -msgid "Cliente no encontrado" -msgstr "Client introuvable" +#: ../../../../inc/ApiRequest.class.php:102 +#, fuzzy +msgid "Token de autorización" +msgstr "Demande de modification de Compte" -# "Error on importing account" -#: ../../../../inc/migrate.class.php:447 -msgid "Error al migrar cuenta" -msgstr "Erreur pendant l'importation des comptes" +# "Invalid Action" +#: ../../../../inc/ApiRequest.class.php:103 +#, fuzzy +msgid "Acción a realizar" +msgstr "Action" -# "Error on retrieving accounts groups" -#: ../../../../inc/migrate.class.php:468 -msgid "Error al obtener los grupos de cuentas" -msgstr "Erreur pendant la récupération des groupes de comptes" +# "LDAP bind user password" +#: ../../../../inc/ApiRequest.class.php:104 +#, fuzzy +msgid "Clave de usuario (opcional)" +msgstr "Changer mot de passe utilisateur" -# "Import Accounts Groups" -#: ../../../../inc/migrate.class.php:481 -msgid "Importar Grupos de Cuentas" -msgstr "Importer Groupes de Comptes" +# "Text to search" +#: ../../../../inc/ApiRequest.class.php:105 +#, fuzzy +msgid "Cadena a buscar" +msgstr "Chercher" -# "Error on accounts groups creation" -#: ../../../../inc/migrate.class.php:503 -msgid "Error al crear grupos de cuentas" -msgstr "Erreur pendant la création des groupes de comptes" +# "Number of results that are shown per page when searching" +#: ../../../../inc/ApiRequest.class.php:106 +#, fuzzy +msgid "Numero de cuentas a mostar en la búsqueda" +msgstr "Nombre de résultats affichés par page lors d'une recherche" -# "Error on retrieving accounts history" -#: ../../../../inc/migrate.class.php:540 -msgid "Error al obtener el historico de cuentas" -msgstr "Erreur pendant la récupération de l'historique des comptes" - -# "Import Accounts History" -#: ../../../../inc/migrate.class.php:553 -msgid "Importar Histórico de Cuentas" -msgstr "Importer Historique des Comptes" - -# "Error on creating accounts history" -#: ../../../../inc/migrate.class.php:605 -msgid "Error al crear historico de cuentas" -msgstr "Erreur pendant la création de l'historique des comptes" - -# "Error on retrieving accounts files" -#: ../../../../inc/migrate.class.php:630 -msgid "Error al obtener los archivos de cuentas" -msgstr "Erreur pendant la récupération des fichiers des comptes" - -# "Import Accounts Files" -#: ../../../../inc/migrate.class.php:643 -msgid "Importar Archivos de Cuentas" -msgstr "Importer Fichiers de Comptes" - -# "Error on creating accounts files" -#: ../../../../inc/migrate.class.php:670 -msgid "Error al crear archivos de cuentas" -msgstr "Erreur pendant la création des fichiers de comptes" - -# "Error on retrieving accounts categories" -#: ../../../../inc/migrate.class.php:691 -msgid "Error al obtener las categorías de cuentas" -msgstr "Erreur pendant la récupération des catégorie de comtpes" - -# "Import Accounts Categories" -#: ../../../../inc/migrate.class.php:704 -msgid "Importar Categorías de Cuentas" -msgstr "Importer Catégories de Comptes" - -# "Error on retrieving accounts categories" -#: ../../../../inc/migrate.class.php:727 -msgid "Error al crear categorías de cuentas" -msgstr "Erreur pendant la récupération des catégories de comptes" - -# "Error on retrieving users" -#: ../../../../inc/migrate.class.php:765 -msgid "Error al obtener los usuarios" -msgstr "Erreur pendant la récupération des utilisateurs" - -# "Import Users" -#: ../../../../inc/migrate.class.php:778 -msgid "Importar Usuarios" -msgstr "Importer Utilisateurs" - -# "Error on creating users" -#: ../../../../inc/migrate.class.php:820 -msgid "Error al crear usuarios" -msgstr "Erreur pendant la création des utilisateurs" - -# "Error on retrieving users groups" -#: ../../../../inc/migrate.class.php:842 -msgid "Error al obtener los grupos de usuarios" -msgstr "Erreur pendant la récupération des groupes d'utilisateurs" - -# "Import Users Groups" -#: ../../../../inc/migrate.class.php:855 -msgid "Importar Grupos de Usuarios" -msgstr "Importer Groupes d'Utilisateurs" - -# "Error on adding users groups" -#: ../../../../inc/migrate.class.php:879 -msgid "Error al crear los grupos de usuarios" -msgstr "Erreur pendant l'ajout des groupes d'utilisateurs" - -# "Import Configuration" -#: ../../../../inc/migrate.class.php:924 -msgid "Importar Configuración" -msgstr "Importer Configuration" - -# "Enter the admin username" -#: ../../../../inc/installer.class.php:89 -msgid "Indicar nombre de usuario admin" -msgstr "Saisir le nom de l'utilisateur admin" - -# "Admin user to login to the application" -#: ../../../../inc/installer.class.php:90 -msgid "Usuario admin para acceso a la aplicación" -msgstr "Utilisateur admin pour se connecter à l'application" - -# "Enter the admin's password" -#: ../../../../inc/installer.class.php:95 -msgid "Indicar la clave de admin" -msgstr "Saisir le mot de passe admin" - -# "Application administrator's password" -#: ../../../../inc/installer.class.php:96 -msgid "Clave del usuario admin de la aplicación" -msgstr "Mot de passe administrateur de l'application" - -# "Enter the master password" -#: ../../../../inc/installer.class.php:102 -msgid "Indicar la clave maestra" -msgstr "Saisir le mot de passe maître" - -# "Master password to encrypt the passwords" -#: ../../../../inc/installer.class.php:103 -msgid "Clave maestra para encriptar las claves" -msgstr "Mot de passe maître pour crypter les mots de passe" - -# "Master password too short" -#: ../../../../inc/installer.class.php:108 -msgid "Clave maestra muy corta" -msgstr "Mot de passe maître trop court" - -# "The master password length need to be at least 11 characters" -#: ../../../../inc/installer.class.php:109 -msgid "La longitud de la clave maestra ha de ser mayor de 11 caracteres" -msgstr "La longueur du mot de passe maître doit être de 11 caractères au moins" - -# "Enter the database user" -#: ../../../../inc/installer.class.php:115 -msgid "Indicar el usuario de la BBDD" -msgstr "Saisir l'utilisateur de la base de données" - -# "An user with database administrative rights" -#: ../../../../inc/installer.class.php:116 -msgid "Usuario con permisos de administrador de la Base de Datos" -msgstr "Un utilisateur avec des droits d'administration sur la BDD" - -# "Enter the database password" -#: ../../../../inc/installer.class.php:121 -msgid "Indicar la clave de la BBDD" -msgstr "Saisir le mot de passe de base de données" - -# "Database administartor's password" -#: ../../../../inc/installer.class.php:122 -msgid "Clave del usuario administrador de la Base de Datos" -msgstr "Mot de passe administrateur de la base de données" - -# "Enter the database name" -#: ../../../../inc/installer.class.php:127 -msgid "Indicar el nombre de la BBDD" -msgstr "Saisir le nom de la base de données" - -# "Application database name. eg. syspass" -#: ../../../../inc/installer.class.php:128 -msgid "Nombre para la BBDD de la aplicación pej. syspass" -msgstr "Nom pour la BD de l'application. eg. syspass" - -# "Database name cannot contain "."" -#: ../../../../inc/installer.class.php:133 -msgid "El nombre de la BBDD no puede contener \".\"" -msgstr "Le nom de la base de données ne peut pas contenir \".\"" - -# "Please, remove dots in database name" -#: ../../../../inc/installer.class.php:134 -msgid "Elimine los puntos del nombre de la Base de Datos" -msgstr "Veuillez supprimer les points du nom de la base de données" - -# "Enter the database server" -#: ../../../../inc/installer.class.php:140 -msgid "Indicar el servidor de la BBDD" -msgstr "Saisir le serveur de base de données" - -# "Server where the database will be installed" -#: ../../../../inc/installer.class.php:141 -msgid "Servidor donde se instalará la Base de Datos" -msgstr "Serveur où la base de données sera installée" +#: ../../../../inc/ApiRequest.class.php:107 +msgid "Item a devolver" +msgstr "" # "The database already exist" -#: ../../../../inc/installer.class.php:248 -msgid "La BBDD ya existe" +#: ../../../../inc/ApiTokens.class.php:221 +#, fuzzy +msgid "La autorización ya existe" msgstr "La base de données existe déjà" -# "Enter a new database or delete the existing one" -#: ../../../../inc/installer.class.php:249 -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à" +# "Update Configuration" +#: ../../../../inc/ApiTokens.class.php:307 +#, fuzzy +msgid "Actualizar Autorización" +msgstr "Mis à jour" -# "The MySQL user already exist" -#: ../../../../inc/installer.class.php:274 -msgid "El usuario de MySQL ya existe" -msgstr "L'utilisateur MySQL existe déjà" +# "Delete File" +#: ../../../../inc/ApiTokens.class.php:331 +#: ../../../../web/UsersMgmtC.class.php:421 +#, fuzzy +msgid "Eliminar Autorización" +msgstr "Supprimer Profil" -# "Enter a new username or delete the existing one" -#: ../../../../inc/installer.class.php:275 -msgid "Indique un nuevo usuario o elimine el existente" -msgstr "Saisissez un nouvel utilisateur ou supprimez celui qui existe déjà" +# "The user have no associated groups" +#: ../../../../inc/Auth.class.php:111 +#, fuzzy +msgid "Usuario no pertenece al grupo" +msgstr "L'utilisateur n'a pas de groupe associé" -# "Error on DB creation" -#: ../../../../inc/installer.class.php:294 -#: ../../../../inc/installer.class.php:370 -msgid "Error al crear la BBDD" -msgstr "Erreur pendant la création de la BDD" - -# "Please, check database user permissions" -#: ../../../../inc/installer.class.php:295 -#: ../../../../inc/installer.class.php:306 -msgid "Verifique los permisos del usuario de la Base de Datos" -msgstr "" -"Veuillez vérifier les permissions de l'utilisateur de la base de données" - -# "Error on setting database permissions" -#: ../../../../inc/installer.class.php:305 -msgid "Error al establecer permisos de la BBDD" -msgstr "Erreur pendant l'affectation des permissions de la base de données" - -# "The database structure file does not exist" -#: ../../../../inc/installer.class.php:348 -msgid "El archivo de estructura de la BBDD no existe" -msgstr "Fichier de structure de base de données inexistant" - -# "Unable to create the application database. Please, download it again." -#: ../../../../inc/installer.class.php:349 -msgid "No es posible crear la BBDD de la aplicación. Descárguela de nuevo." -msgstr "" -"Impossible de créer la base de donnée de l'application. Veuillez la " -"télécharger de nouveau." - -# "Error on selecting database." -#: ../../../../inc/installer.class.php:355 -msgid "Error al seleccionar la BBDD" -msgstr "Erreur pendant la sélection de la BDD" - -# "" -#: ../../../../inc/installer.class.php:356 -msgid "" -"No es posible usar la Base de Datos para crear la estructura. Compruebe los " -"permisos y que no exista." -msgstr "" -"Impossible d'utiliser la base de données pour créer la structure. Vérifiez " -"les permissions et l'inexistantce de la structure." - -# "Error on creating database structure." -#: ../../../../inc/installer.class.php:371 -msgid "Error al crear la estructura de la Base de Datos." -msgstr "Erreur pendant la création de la structure de la base de données." - -# "Error on creating "admin" group" -#: ../../../../inc/installer.class.php:397 -msgid "Error al crear el grupo \"admin\"" -msgstr "Erreur pendant la création du groupe \"admin\"" - -# "Warn to developer" -#: ../../../../inc/installer.class.php:398 -#: ../../../../inc/installer.class.php:430 -#: ../../../../inc/installer.class.php:448 -#: ../../../../inc/installer.class.php:463 -msgid "Informe al desarrollador" -msgstr "Avertissez le développeur" - -# "Error on creating "admin" profile" -#: ../../../../inc/installer.class.php:429 -msgid "Error al crear el perfil \"admin\"" -msgstr "Erreur pendant la création du profil \"admin\"" - -# "Error on creating "admin" user" -#: ../../../../inc/installer.class.php:447 -msgid "Error al crear el usuario \"admin\"" -msgstr "Erreur pendant la création de l'utilisateur \"admin\"" - -# "Error on updating master password for user "admin"" -#: ../../../../inc/installer.class.php:462 -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\"" - -# "Account Activation" -#: ../../../../inc/users.class.php:746 -msgid "Activación Cuenta" -msgstr "Activation Compte" - -# "Your account activation is pending." -#: ../../../../inc/users.class.php:747 -msgid "Su cuenta está pendiente de activación." -msgstr "Votre compte est en attente d'activation." - -# "You will receive a confirmation email in short." -#: ../../../../inc/users.class.php:748 -msgid "En breve recibirá un email de confirmación." -msgstr "Vous recevrez un courriel de confirmation sous peu." - -# "Could not perform the password change request." -#: ../../../../inc/users.class.php:792 ../../../../inc/users.class.php:833 -msgid "No se pudo realizar la petición de cambio de clave." -msgstr "Impossible d'effectuer la requête de changement de mot de passe." - -# "Edit User" -#: ../../../../inc/users.class.php:828 -msgid "Modificar Usuario" -msgstr "Modifier Utilisateur" - -# "Clear Events" -#: ../../../../inc/log.class.php:80 -msgid "Vaciar Eventos" -msgstr "Nettoyer les évènements" - -# "Clear event log" -#: ../../../../inc/log.class.php:81 ../../../../inc/tpl/eventlog.php:129 -msgid "Vaciar registro de eventos" -msgstr "Nettoyer le journal d'évènements" - -# "Update Customer" -#: ../../../../inc/customer.class.php:102 -msgid "Actualizar Cliente" -msgstr "Mettre à jour Clients" - -# "Category Edit" -#: ../../../../inc/category.class.php:177 -msgid "Modificar Categoría" -msgstr "Modifier Catégorie" - -# "File successfully uploaded" -#: ../../../../inc/import.class.php:103 -msgid "Archivo no subido correctamente" -msgstr "Fichier transféré avec succès" - -# "Please, check the web server's user permissions" -#: ../../../../inc/import.class.php:103 -msgid "Verifique los permisos del usuario del servidor web" -msgstr "Veuillez vérifier les permissions de l'utilisateur du serveur web" - -# "Please, check file extension" -#: ../../../../inc/import.class.php:111 -msgid "Compruebe la extensión del archivo" -msgstr "Veuillez vérifier l'extension de fichier" - -# "Please, check PHP configuration for upload files" -#: ../../../../inc/import.class.php:122 -msgid "Compruebe la configuración de PHP para subir archivos" -msgstr "Veuillez vérifier la configuration PHP pour le transfert de fichier" - -# "Please, check temporary directory permissions" -#: ../../../../inc/import.class.php:130 -msgid "Compruebe los permisos del directorio temporal" -msgstr "Vérifiez les permissions du dossier temporaire" - -# "Mime type not supported" -#: ../../../../inc/import.class.php:139 -msgid "Tipo mime no soportado" -msgstr "Types mime non supporté" - -# "Please, check the file format" -#: ../../../../inc/import.class.php:139 -msgid "Compruebe el formato del archivo" -msgstr "Veuillez vérifiez le format de fichier" - -# "The number of fields is incorrect" -#: ../../../../inc/import.class.php:156 -msgid "El número de campos es incorrecto" -msgstr "Le nombre de champs est incorrect" - -# "Please, check the CSV file format" -#: ../../../../inc/import.class.php:156 -msgid "Compruebe el formato del archivo CSV" -msgstr "Veuilez vérifier le format du fichier CSV" - -# "Error on importing account" -#: ../../../../inc/import.class.php:161 -msgid "Error importando cuenta" -msgstr "Erreur pendant l'importation des comptes" - -# "Unable to process XML file" -#: ../../../../inc/import.class.php:262 -msgid "No es posible procesar el archivo XML" -msgstr "Impossible de traiter le fichier XML" - -# "XML file not supported" -#: ../../../../inc/import.class.php:289 -msgid "Archivo XML no soportado" -msgstr "Fichier XML non supportés" - -# "Unable to detect the application the data was exported from" -#: ../../../../inc/import.class.php:289 -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" +# "Password Change" +#: ../../../../inc/Auth.class.php:191 +#: ../../../../inc/themes/classic/users.inc:117 +#: ../../../../inc/themes/classic/userspass.inc:2 +#: ../../../../inc/themes/material-blue/users.inc:161 +#: ../../../../inc/themes/material-blue/userspass.inc:2 +msgid "Cambio de Clave" +msgstr "Changement de Mot de passe" # "A request for changing your user password has been done." -#: ../../../../inc/auth.class.php:186 +#: ../../../../inc/Auth.class.php:193 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" +msgstr "Une demande de changement de mot de passe pour votre utilisateur a été faite" # "In order to complete the process, please go to this URL:" -#: ../../../../inc/auth.class.php:188 +#: ../../../../inc/Auth.class.php:195 msgid "Para completar el proceso es necesario que acceda a la siguiente URL:" msgstr "Afin de terminer le traitement, veuillez aller sur cet URL:" # "If you have not requested this action, please dismiss this message." -#: ../../../../inc/auth.class.php:192 +#: ../../../../inc/Auth.class.php:199 msgid "Si no ha solicitado esta acción, ignore este mensaje." +msgstr "Si vous n'êtes pas à l'origine de cette demande, ne tenez pas compte de ce message." + +# "This operation is only available on Linux environments" +#: ../../../../inc/Backup.class.php:161 +msgid "Esta operación sólo es posible en entornos Linux" +msgstr "Cette opération est uniquement possible en environnement Linux" + +# "Error while doing backup in compatibility mode" +#: ../../../../inc/Backup.class.php:163 +msgid "Error al realizar backup en modo compatibilidad" +msgstr "Erreur pendant la sauvegarde en mode compatibilité" + +#: ../../../../inc/Backup.class.php:217 +msgid "No es posible crear el directorio de backups" +msgstr "Impossible de créer le dossier de sauvegarde" + +# "Check backup directory permissions" +#: ../../../../inc/Backup.class.php:222 +msgid "Compruebe los permisos del directorio de backups" +msgstr "Vérifiez les permissions du dossier de sauvegarde" + +# "Duplicated category name" +#: ../../../../inc/Category.class.php:69 +#: ../../../../inc/Category.class.php:165 +msgid "Nombre de categoría duplicado" +msgstr "Nom de catégorie dupliqué" + +# "Error on creating category" +#: ../../../../inc/Category.class.php:78 +msgid "Error al crear la categoría" +msgstr "Erreur pendant la création de la catégorie" + +# "Category" +#: ../../../../inc/Category.class.php:83 +#: ../../../../inc/Category.class.php:132 +#: ../../../../inc/Category.class.php:182 +#: ../../../../web/SearchC.class.php:283 +#: ../../../../inc/themes/classic/account.inc:42 +#: ../../../../inc/themes/classic/search.inc:46 +#: ../../../../inc/themes/material-blue/account.inc:50 +#: ../../../../inc/themes/material-blue/search.inc:49 +msgid "Categoría" +msgstr "Catégorie" + +# "Category in use by:" +#: ../../../../inc/Category.class.php:119 +msgid "Categoría en uso por:" +msgstr "Catégorie utilisée par:" + +# "Error on category deletion" +#: ../../../../inc/Category.class.php:129 +msgid "Error al eliminar la categoría" +msgstr "Erreur pendant la suppression de la catégorie" + +# "Delete Category" +#: ../../../../inc/Category.class.php:132 +#: ../../../../web/AccountsMgmtC.class.php:101 +msgid "Eliminar Categoría" +msgstr "Supprimer Catégorie" + +# "Error on updating category" +#: ../../../../inc/Category.class.php:179 +msgid "Error al actualizar la categoría" +msgstr "Erreur pendant l'actualisation de la categorie" + +# "Category Edit" +#: ../../../../inc/Category.class.php:182 +msgid "Modificar Categoría" +msgstr "Modifier Catégorie" + +# "Update Configuration" +#: ../../../../inc/Config.class.php:118 ../../../../inc/Config.class.php:401 +msgid "Modificar configuración" +msgstr "Modifier configuration" + +# "Unable to write in configuration file" +#: ../../../../inc/Config.class.php:276 +msgid "No es posible escribir el archivo de configuración" +msgstr "Impossible d'écrire dans le fichier de configuration" + +# "Please, check the "config" directory permissions" +#: ../../../../inc/Config.class.php:276 +msgid "Compruebe los permisos del directorio \"config\"" +msgstr "Vérifiez les permissions du dossier \"config\"" + +# "Parameter" +#: ../../../../inc/Config.class.php:402 +msgid "Parámetro" +msgstr "Paramètre" + +# "Value" +#: ../../../../inc/Config.class.php:403 +msgid "Valor" +msgstr "Valeur" + +# "Option unavailable" +#: ../../../../inc/Controller.class.php:165 +msgid "Opción no disponible" +msgstr "Option indisponible" + +# "Please, contact to the 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:289 +msgid "Consulte con el administrador" +msgstr "Veuillez contacter votre administrateur" + +# "You don't have permission to access to this page" +#: ../../../../inc/Controller.class.php:167 +msgid "No tiene permisos para acceder a esta página" +msgstr "Vous n'avez pas les permissions pour accéder à cette page" + +# "You don't have permission to do this operation" +#: ../../../../inc/Controller.class.php:168 +msgid "No tiene permisos para realizar esta operación" +msgstr "Vous n'avez pas les permissions pour effectuer cette opération" + +# "Crypto module cannot be loaded" +#: ../../../../inc/Crypt.class.php:236 +msgid "No se puede usar el módulo de encriptación" +msgstr "Le module d'encryption ne peut pas être chargé" + +# "Error on creating encryption data" +#: ../../../../inc/Crypt.class.php:247 +msgid "Error al generar datos cifrados" +msgstr "Erreur pendant la création des données d'encryption" + +# "The number of fields is incorrect" +#: ../../../../inc/CsvImportBase.class.php:109 +#, fuzzy, php-format +msgid "El número de campos es incorrecto (%d)" +msgstr "Le nombre de champs est incorrect" + +# "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 "Veuilez vérifier le format du fichier CSV" + +# "Import Accounts" +#: ../../../../inc/CsvImportBase.class.php:140 +#: ../../../../inc/CsvImportBase.class.php:145 +#: ../../../../inc/Import.class.php:118 ../../../../inc/Import.class.php:124 +#: ../../../../inc/Migrate.class.php:349 +#: ../../../../inc/XmlImport.class.php:62 +#: ../../../../inc/XmlImport.class.php:63 +#: ../../../../web/ConfigC.class.php:209 +msgid "Importar Cuentas" +msgstr "Importer Comptes" + +# "Error on importing account" +#: ../../../../inc/CsvImportBase.class.php:141 +msgid "Error importando cuenta" +msgstr "Erreur pendant l'importation des comptes" + +# "Error on importing account" +#: ../../../../inc/CsvImportBase.class.php:142 +#, fuzzy, php-format +msgid "Error procesando línea %s" +msgstr "Erreur pendant l'importation des comptes" + +# "Account expired" +#: ../../../../inc/CsvImportBase.class.php:145 +#, fuzzy, php-format +msgid "Cuenta importada: %s" +msgstr "Timeout de session (s)" + +# "Categories" +#: ../../../../inc/CustomFieldsBase.class.php:81 +#: ../../../../inc/themes/classic/profiles.inc:98 +#: ../../../../inc/themes/material-blue/profiles.inc:114 +msgid "Categorías" +msgstr "Catégories" + +# "Customers" +#: ../../../../inc/CustomFieldsBase.class.php:82 +#: ../../../../inc/themes/classic/profiles.inc:103 +#: ../../../../inc/themes/material-blue/profiles.inc:119 +msgid "Clientes" +msgstr "Clients" + +# "Groups" +#: ../../../../inc/CustomFieldsBase.class.php:84 +#: ../../../../inc/themes/classic/account.inc:140 +#: ../../../../inc/themes/classic/profiles.inc:89 +#: ../../../../inc/themes/material-blue/account.inc:166 +#: ../../../../inc/themes/material-blue/profiles.inc:104 +msgid "Grupos" +msgstr "Groupes" + +# "Duplicated customer" +#: ../../../../inc/Customer.class.php:50 ../../../../inc/Customer.class.php:95 +msgid "Cliente duplicado" +msgstr "Client dupliqué" + +# "Error on creating customer" +#: ../../../../inc/Customer.class.php:60 +msgid "Error al crear el cliente" +msgstr "Erreur pendant la création du client" + +# "Error on updating customer" +#: ../../../../inc/Customer.class.php:112 +msgid "Error al actualizar el cliente" +msgstr "Erreur pendant l'actualisation du client" + +# "Update Customer" +#: ../../../../inc/Customer.class.php:115 +msgid "Actualizar Cliente" +msgstr "Mettre à jour Clients" + +# "Customer in use by:" +#: ../../../../inc/Customer.class.php:150 +msgid "Cliente en uso por:" +msgstr "Client utilisé par:" + +# "Error on customer deletion" +#: ../../../../inc/Customer.class.php:160 +msgid "Error al eliminar el cliente" +msgstr "Erreur pendant la suppression du client" + +# "Delete Customer" +#: ../../../../inc/Customer.class.php:163 +#: ../../../../web/AccountsMgmtC.class.php:159 +msgid "Eliminar Cliente" +msgstr "Supprimer Client" + +# "Unable to connect to the DB" +#: ../../../../inc/DBConnectionFactory.class.php:87 +#: ../../../../inc/DBConnectionFactory.class.php:89 +#: ../../../../inc/DBConnectionFactory.class.php:103 +#: ../../../../inc/Installer.class.php:235 +#: ../../../../inc/Migrate.class.php:115 +msgid "No es posible conectar con la BD" +msgstr "Impossible de se connecter à la base de données" + +# "Please, check connection parameters" +#: ../../../../inc/DBConnectionFactory.class.php:87 +#: ../../../../inc/DBConnectionFactory.class.php:89 +#: ../../../../inc/Installer.class.php:236 +#: ../../../../inc/Migrate.class.php:116 +msgid "Compruebe los datos de conexión" +msgstr "Veillez vérifier les parmètres de connexion" + +# "N/A" +#: ../../../../inc/Email.class.php:59 ../../../../inc/UserUtil.class.php:589 +msgid "N/D" +msgstr "N/A" + +# "Action" +#: ../../../../inc/Email.class.php:60 ../../../../web/UsersMgmtC.class.php:392 +#: ../../../../inc/themes/classic/tokens.inc:20 +#: ../../../../inc/themes/material-blue/tokens.inc:20 +msgid "Acción" +msgstr "Action" + +# "Performed by" +#: ../../../../inc/Email.class.php:61 +msgid "Realizado por" +msgstr "Réalisé par" + +# "Send Email" +#: ../../../../inc/Email.class.php:77 +msgid "Enviar Email" +msgstr "Envoyer Courriel" + +# "Email sent" +#: ../../../../inc/Email.class.php:81 +msgid "Correo enviado" +msgstr "Courriel envoyé" + +# "Error on sending email" +#: ../../../../inc/Email.class.php:83 +msgid "Error al enviar correo" +msgstr "Erreur pendant l'envoi du courriel" + +# "Recipient" +#: ../../../../inc/Email.class.php:87 +msgid "Destinatario" +msgstr "Destinataire" + +# "CC" +#: ../../../../inc/Email.class.php:90 +msgid "CC" +msgstr "CC" + +# "Warning" +#: ../../../../inc/Email.class.php:146 +msgid "Aviso" +msgstr "Avertissement" + +# "File successfully uploaded" +#: ../../../../inc/FileImport.class.php:105 +msgid "Archivo no subido correctamente" +msgstr "Fichier transféré avec succès" + +# "Please, check the web server's user permissions" +#: ../../../../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" + +# "Please, check file extension" +#: ../../../../inc/FileImport.class.php:116 +msgid "Compruebe la extensión del archivo" +msgstr "Veuillez vérifier l'extension de fichier" + +# "Please, check PHP configuration for upload files" +#: ../../../../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" + +# "Please, check temporary directory permissions" +#: ../../../../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" + +# "Delete File" +#: ../../../../inc/Files.class.php:111 +#: ../../../../inc/themes/classic/files.inc:15 +#: ../../../../inc/themes/material-blue/files.inc:16 +msgid "Eliminar Archivo" +msgstr "Supprimer Fichier" + +# "Error on updating account's users" +#: ../../../../inc/Groups.class.php:155 +#, fuzzy +msgid "Error al añadir los usuarios del grupo" +msgstr "Erreur pendant la modification des comptes utilisateurs" + +# "Error on updating account's users" +#: ../../../../inc/Groups.class.php:256 +#, fuzzy +msgid "Error al actualizar los usuarios del grupo" +msgstr "Erreur pendant la modification des comptes utilisateurs" + +# "Delete Group" +#: ../../../../inc/Groups.class.php:369 +#: ../../../../web/UsersMgmtC.class.php:209 +msgid "Eliminar Grupo" +msgstr "Supprimer Groupe" + +# "Error on user deletion" +#: ../../../../inc/Groups.class.php:372 +#, fuzzy +msgid "Error al eliminar los usuarios del grupo" +msgstr "Erreur pendant la suppression de l'utilisateur" + +# "Mime type not supported" +#: ../../../../inc/Import.class.php:109 +msgid "Tipo mime no soportado" +msgstr "Types mime non supporté" + +# "Please, check the file format" +#: ../../../../inc/Import.class.php:110 +msgid "Compruebe el formato del archivo" +msgstr "Veuillez vérifiez le format de fichier" + +# "Import finished" +#: ../../../../inc/Import.class.php:124 ../../../../inc/Import.class.php:127 +#: ../../../../inc/Migrate.class.php:92 +msgid "Importación finalizada" +msgstr "Importation terminée" + +# "Error on checking database" +#: ../../../../inc/Init.class.php:196 +msgid "Error en la verificación de la base de datos" +msgstr "Erreur pendant la vérification de la base de données" + +# "Session" +#: ../../../../inc/Init.class.php:285 +msgid "Sesion" +msgstr "Session" + +# "Session cannot be initialized" +#: ../../../../inc/Init.class.php:285 ../../../../inc/Init.class.php:289 +msgid "La sesión no puede ser inicializada" +msgstr "La session ne peut pas être initialisée" + +# "The "/config" directory does not exist." +#: ../../../../inc/Init.class.php:416 +msgid "El directorio \"/config\" no existe" +msgstr "Le dossier \"/config\" n'existe pas" + +# "Unable to write into the "/config" directory" +#: ../../../../inc/Init.class.php:421 +msgid "No es posible escribir en el directorio \"config\"" +msgstr "Impossible d'écrire dans le dossier \"/config\"" + +# "The "/config" directory permissions are incorrect" +#: ../../../../inc/Init.class.php:429 +msgid "Los permisos del directorio \"/config\" son incorrectos" +msgstr "Les permissions du dossier \"/config\" sont incorrectes" + +# "Current:" +#: ../../../../inc/Init.class.php:429 +msgid "Actual:" +msgstr "Actuel" + +# "Needed: 750" +#: ../../../../inc/Init.class.php:429 +msgid "Necesario: 750" +msgstr "Nécessaire: 750" + +# "Application in maintenance" +#: ../../../../inc/Init.class.php:478 +msgid "Aplicación en mantenimiento" +msgstr "Application en maintenance" + +# "It will be running in short" +#: ../../../../inc/Init.class.php:478 +msgid "En breve estará operativa" +msgstr "Sera opérationnel sous peu" + +# "Logout session" +#: ../../../../inc/Init.class.php:515 +msgid "Finalizar sesión" +msgstr "Deconnexion" + +# "Inactive time" +#: ../../../../inc/Init.class.php:517 +msgid "Tiempo inactivo" +msgstr "Temps d'inactivité" + +# "Total time" +#: ../../../../inc/Init.class.php:518 +msgid "Tiempo total" +msgstr "Temps total" + +# "The application needs to be updated" +#: ../../../../inc/Init.class.php:557 +msgid "La aplicación necesita actualizarse" +msgstr "L'application a besoin d'être mis à jour" + +# "If you are an administrator, click on the link:" +#: ../../../../inc/Init.class.php:557 +#, fuzzy, php-format +msgid "Si es un administrador pulse en el enlace: %s" +msgstr "Si vous êtes administrateur, cliquez sur le lien:" + +# "Update" +#: ../../../../inc/Init.class.php:557 +#: ../../../../inc/themes/classic/upgrade.inc:20 +#: ../../../../inc/themes/material-blue/upgrade.inc:25 +msgid "Actualizar" +msgstr "Mis à jour" + +# "Update" +#: ../../../../inc/Init.class.php:588 +msgid "Actualización" +msgstr "Actualisation" + +# "Version updating done." +#: ../../../../inc/Init.class.php:589 +msgid "Actualización de versión realizada." +msgstr "Mise à jour de version effectuée." + +# "Version" +#: ../../../../inc/Init.class.php:590 +#: ../../../../inc/themes/classic/info.inc:33 +#: ../../../../inc/themes/material-blue/info.inc:33 +msgid "Versión" +msgstr "Version" + +# "Enter the admin username" +#: ../../../../inc/Installer.class.php:127 +msgid "Indicar nombre de usuario admin" +msgstr "Saisir le nom de l'utilisateur admin" + +# "Admin user to login to the application" +#: ../../../../inc/Installer.class.php:128 +msgid "Usuario admin para acceso a la aplicación" +msgstr "Utilisateur admin pour se connecter à l'application" + +# "Enter the admin's password" +#: ../../../../inc/Installer.class.php:132 +msgid "Indicar la clave de admin" +msgstr "Saisir le mot de passe admin" + +# "Application administrator's password" +#: ../../../../inc/Installer.class.php:133 +msgid "Clave del usuario admin de la aplicación" +msgstr "Mot de passe administrateur de l'application" + +# "Enter the master password" +#: ../../../../inc/Installer.class.php:137 +msgid "Indicar la clave maestra" +msgstr "Saisir le mot de passe maître" + +# "Master password to encrypt the passwords" +#: ../../../../inc/Installer.class.php:138 +msgid "Clave maestra para encriptar las claves" +msgstr "Mot de passe maître pour crypter les mots de passe" + +# "Master password too short" +#: ../../../../inc/Installer.class.php:142 +msgid "Clave maestra muy corta" +msgstr "Mot de passe maître trop court" + +# "The master password length need to be at least 11 characters" +#: ../../../../inc/Installer.class.php:143 +msgid "La longitud de la clave maestra ha de ser mayor de 11 caracteres" +msgstr "La longueur du mot de passe maître doit être de 11 caractères au moins" + +# "Enter the database user" +#: ../../../../inc/Installer.class.php:147 +msgid "Indicar el usuario de la BBDD" +msgstr "Saisir l'utilisateur de la base de données" + +# "An user with database administrative rights" +#: ../../../../inc/Installer.class.php:148 +msgid "Usuario con permisos de administrador de la Base de Datos" +msgstr "Un utilisateur avec des droits d'administration sur la BDD" + +# "Enter the database password" +#: ../../../../inc/Installer.class.php:152 +msgid "Indicar la clave de la BBDD" +msgstr "Saisir le mot de passe de base de données" + +# "Database administartor's password" +#: ../../../../inc/Installer.class.php:153 +msgid "Clave del usuario administrador de la Base de Datos" +msgstr "Mot de passe administrateur de la base de données" + +# "Enter the database name" +#: ../../../../inc/Installer.class.php:157 +msgid "Indicar el nombre de la BBDD" +msgstr "Saisir le nom de la base de données" + +# "Application database name. eg. syspass" +#: ../../../../inc/Installer.class.php:158 +msgid "Nombre para la BBDD de la aplicación pej. syspass" +msgstr "Nom pour la BD de l'application. eg. syspass" + +# "Database name cannot contain "."" +#: ../../../../inc/Installer.class.php:162 +msgid "El nombre de la BBDD no puede contener \".\"" +msgstr "Le nom de la base de données ne peut pas contenir \".\"" + +# "Please, remove dots in database name" +#: ../../../../inc/Installer.class.php:163 +msgid "Elimine los puntos del nombre de la Base de Datos" +msgstr "Veuillez supprimer les points du nom de la base de données" + +# "Enter the database server" +#: ../../../../inc/Installer.class.php:167 +msgid "Indicar el servidor de la BBDD" +msgstr "Saisir le serveur de base de données" + +# "Server where the database will be installed" +#: ../../../../inc/Installer.class.php:168 +msgid "Servidor donde se instalará la Base de Datos" +msgstr "Serveur où la base de données sera installée" + +# "The MySQL user already exist" +#: ../../../../inc/Installer.class.php:313 +msgid "El usuario de MySQL ya existe" +msgstr "L'utilisateur MySQL existe déjà" + +# "Enter a new username or delete the existing one" +#: ../../../../inc/Installer.class.php:314 +msgid "Indique un nuevo usuario o elimine el existente" +msgstr "Saisissez un nouvel utilisateur ou supprimez celui qui existe déjà" + +# "The database already exist" +#: ../../../../inc/Installer.class.php:327 +msgid "La BBDD ya existe" +msgstr "La base de données existe déjà" + +# "Enter a new database or delete the existing one" +#: ../../../../inc/Installer.class.php:328 +msgid "Indique una nueva Base de Datos o elimine la existente" +msgstr "Saisissez une nouvelle base de données ou supprimez celle qui existe déjà" + +# "Error on DB creation" +#: ../../../../inc/Installer.class.php:337 +#: ../../../../inc/Installer.class.php:408 +msgid "Error al crear la BBDD" +msgstr "Erreur pendant la création de la BDD" + +# "Please, check database user permissions" +#: ../../../../inc/Installer.class.php:338 +#: ../../../../inc/Installer.class.php:349 +msgid "Verifique los permisos del usuario de la Base de Datos" +msgstr "Veuillez vérifier les permissions de l'utilisateur de la base de données" + +# "Error on setting database permissions" +#: ../../../../inc/Installer.class.php:348 +msgid "Error al establecer permisos de la BBDD" +msgstr "Erreur pendant l'affectation des permissions de la base de données" + +# "The database structure file does not exist" +#: ../../../../inc/Installer.class.php:381 +msgid "El archivo de estructura de la BBDD no existe" +msgstr "Fichier de structure de base de données inexistant" + +# "Unable to create the application database. Please, download it again." +#: ../../../../inc/Installer.class.php:382 +msgid "No es posible crear la BBDD de la aplicación. Descárguela de nuevo." +msgstr "Impossible de créer la base de donnée de l'application. Veuillez la télécharger de nouveau." + +# "Error on selecting database." +#: ../../../../inc/Installer.class.php:390 +msgid "Error al seleccionar la BBDD" +msgstr "Erreur pendant la sélection de la BDD" + +# "" +#: ../../../../inc/Installer.class.php:391 +msgid "No es posible usar la Base de Datos para crear la estructura. Compruebe los permisos y que no exista." +msgstr "Impossible d'utiliser la base de données pour créer la structure. Vérifiez les permissions et l'inexistantce de la structure." + +# "Error on creating database structure." +#: ../../../../inc/Installer.class.php:409 +msgid "Error al crear la estructura de la Base de Datos." +msgstr "Erreur pendant la création de la structure de la base de données." + +# "Error on creating "admin" group" +#: ../../../../inc/Installer.class.php:432 +msgid "Error al crear el grupo \"admin\"" +msgstr "Erreur pendant la création du groupe \"admin\"" + +# "Warn to developer" +#: ../../../../inc/Installer.class.php:433 +#: ../../../../inc/Installer.class.php:466 +#: ../../../../inc/Installer.class.php:483 +#: ../../../../inc/Installer.class.php:496 +msgid "Informe al desarrollador" +msgstr "Avertissez le développeur" + +# "Error on creating "admin" profile" +#: ../../../../inc/Installer.class.php:465 +msgid "Error al crear el perfil \"admin\"" +msgstr "Erreur pendant la création du profil \"admin\"" + +# "Error on creating "admin" user" +#: ../../../../inc/Installer.class.php:482 +msgid "Error al crear el usuario \"admin\"" +msgstr "Erreur pendant la création de l'utilisateur \"admin\"" + +# "Error on updating master password for user "admin"" +#: ../../../../inc/Installer.class.php:495 +msgid "Error al actualizar la clave maestra del usuario \"admin\"" +msgstr "Erreur pendant l'actualisation du mot de passe maître pour l'utilisateur \"admin\"" + +# "Unable to connect to the LDAP server" +#: ../../../../inc/Ldap.class.php:110 ../../../../inc/Ldap.class.php:114 +msgid "No es posible conectar con el servidor de LDAP" +msgstr "Impossible de se connecter au server LDAP" + +# "Connection error (BIND)" +#: ../../../../inc/Ldap.class.php:139 ../../../../inc/Ldap.class.php:144 +msgid "Error al conectar (BIND)" +msgstr "Erreur de connexion (BIND)" + +# "Error on searching objects in base DN" +#: ../../../../inc/Ldap.class.php:167 ../../../../inc/Ldap.class.php:172 +msgid "Error al buscar objetos en DN base" +msgstr "Erreur pendant la recherche d'objets dans la base DN" + +# "Error on searching group RDN" +#: ../../../../inc/Ldap.class.php:200 ../../../../inc/Ldap.class.php:205 +#: ../../../../inc/Ldap.class.php:212 ../../../../inc/Ldap.class.php:216 +#: ../../../../inc/Ldap.class.php:225 ../../../../inc/Ldap.class.php:229 +msgid "Error al buscar RDN de grupo" +msgstr "Erreur pendant la recherche RDN du groupe" + +# "Error on searching user DN" +#: ../../../../inc/Ldap.class.php:278 ../../../../inc/Ldap.class.php:283 +#: ../../../../inc/Ldap.class.php:297 ../../../../inc/Ldap.class.php:301 +msgid "Error al buscar el DN del usuario" +msgstr "Erreur pendant la recherche du DN de l'utilisateur" + +# "Error on searching user on LDAP" +#: ../../../../inc/Ldap.class.php:290 ../../../../inc/Ldap.class.php:294 +msgid "Error al localizar el usuario en LDAP" +msgstr "Erreur pendant la recherche de l'utilisateur dans l'annuaire LDAP" + +# "Error on searching users group" +#: ../../../../inc/Ldap.class.php:375 ../../../../inc/Ldap.class.php:380 +#: ../../../../inc/LdapADS.class.php:99 ../../../../inc/LdapADS.class.php:104 +msgid "Error al buscar el grupo de usuarios" +msgstr "Erreur pendant la recherche de groupe d'utilisateurs" + +# "User deleted" +#: ../../../../inc/Ldap.class.php:387 +#, fuzzy +msgid "Usuario verificado en grupo" +msgstr "Groupe utilisé par:" + +# "No group found with that name" +#: ../../../../inc/LdapADS.class.php:108 ../../../../inc/LdapADS.class.php:113 +msgid "No se encontró el grupo con ese nombre" +msgstr "Nom de groupe introuvable avec ce nom" + +# "Clear Events" +#: ../../../../inc/Log.class.php:88 +msgid "Vaciar Eventos" +msgstr "Nettoyer les évènements" + +# "Clear event log" +#: ../../../../inc/Log.class.php:88 +#: ../../../../inc/themes/classic/eventlog.inc:100 +#: ../../../../inc/themes/material-blue/eventlog.inc:100 +msgid "Vaciar registro de eventos" +msgstr "Nettoyer le journal d'évènements" + +# "Missing parameters" +#: ../../../../inc/Migrate.class.php:52 +msgid "Faltan parámetros" +msgstr "Paramètres manquants" + +# "Incompatible version" +#: ../../../../inc/Migrate.class.php:149 +msgid "La versión no es compatible" +msgstr "Version incompatible" + +# "Please, update to the last version of phpPMS" +#: ../../../../inc/Migrate.class.php:150 +msgid "Actualice a la última versión de phpPMS" +msgstr "Mettez à niveau la dernière version de phpPMS" + +# "Error on retrieving configuration" +#: ../../../../inc/Migrate.class.php:168 +msgid "Error al obtener la configuración" +msgstr "Erreur pendant la récupération de la configuration" + +# "Error on cleaning table" +#: ../../../../inc/Migrate.class.php:211 ../../../../inc/Migrate.class.php:224 +msgid "Error al vaciar tabla" +msgstr "Erreur pendant le nettoyage de la table" + +# "Current user is not application administrator" +#: ../../../../inc/Migrate.class.php:229 +msgid "Usuario actual no es administrador de la aplicación" +msgstr "L'utilisateur actuel n'est administrateur de l'application" + +# "Unable to create the customer" +#: ../../../../inc/Migrate.class.php:274 +msgid "No es posible crear el cliente" +msgstr "Impossible de créer le client" + +# "Please, contact to the developer" +#: ../../../../inc/Migrate.class.php:275 +msgid "Contacte con el desarrollador" +msgstr "Veuillez contacter le développeur" + +# "Import Customers" +#: ../../../../inc/Migrate.class.php:279 +msgid "Importar Clientes" +msgstr "Importer Clients" + +# "Records" +#: ../../../../inc/Migrate.class.php:281 ../../../../inc/Migrate.class.php:351 +#: ../../../../inc/Migrate.class.php:452 ../../../../inc/Migrate.class.php:525 +#: ../../../../inc/Migrate.class.php:633 ../../../../inc/Migrate.class.php:698 +#: ../../../../inc/Migrate.class.php:772 ../../../../inc/Migrate.class.php:862 +#: ../../../../inc/Migrate.class.php:933 +msgid "Registros" +msgstr "Enregistrements" + +# "Error on retrieving customer" +#: ../../../../inc/Migrate.class.php:303 +msgid "Error al obtener los clientes" +msgstr "Erreur pendant la récupération des clients" + +# "Error on retrieving accounts" +#: ../../../../inc/Migrate.class.php:345 +msgid "Error al obtener cuentas" +msgstr "Erreur pendant la récupération des comptes" + +# "Customer not found" +#: ../../../../inc/Migrate.class.php:374 +msgid "Cliente no encontrado" +msgstr "Client introuvable" + +# "Error on importing account" +#: ../../../../inc/Migrate.class.php:417 +msgid "Error al migrar cuenta" +msgstr "Erreur pendant l'importation des comptes" + +# "Error on retrieving accounts groups" +#: ../../../../inc/Migrate.class.php:446 +msgid "Error al obtener los grupos de cuentas" +msgstr "Erreur pendant la récupération des groupes de comptes" + +# "Import Accounts Groups" +#: ../../../../inc/Migrate.class.php:450 +msgid "Importar Grupos de Cuentas" +msgstr "Importer Groupes de Comptes" + +# "Error on accounts groups creation" +#: ../../../../inc/Migrate.class.php:472 +msgid "Error al crear grupos de cuentas" +msgstr "Erreur pendant la création des groupes de comptes" + +# "Error on retrieving accounts history" +#: ../../../../inc/Migrate.class.php:519 +msgid "Error al obtener el historico de cuentas" +msgstr "Erreur pendant la récupération de l'historique des comptes" + +# "Import Accounts History" +#: ../../../../inc/Migrate.class.php:523 +msgid "Importar Histórico de Cuentas" +msgstr "Importer Historique des Comptes" + +# "Error on creating accounts history" +#: ../../../../inc/Migrate.class.php:592 +msgid "Error al crear historico de cuentas" +msgstr "Erreur pendant la création de l'historique des comptes" + +# "Error on retrieving accounts files" +#: ../../../../inc/Migrate.class.php:627 +msgid "Error al obtener los archivos de cuentas" +msgstr "Erreur pendant la récupération des fichiers des comptes" + +# "Import Accounts Files" +#: ../../../../inc/Migrate.class.php:631 +msgid "Importar Archivos de Cuentas" +msgstr "Importer Fichiers de Comptes" + +# "Error on creating accounts files" +#: ../../../../inc/Migrate.class.php:663 +msgid "Error al crear archivos de cuentas" +msgstr "Erreur pendant la création des fichiers de comptes" + +# "Error on retrieving accounts categories" +#: ../../../../inc/Migrate.class.php:692 +msgid "Error al obtener las categorías de cuentas" +msgstr "Erreur pendant la récupération des catégorie de comtpes" + +# "Import Accounts Categories" +#: ../../../../inc/Migrate.class.php:696 +msgid "Importar Categorías de Cuentas" +msgstr "Importer Catégories de Comptes" + +# "Error on retrieving accounts categories" +#: ../../../../inc/Migrate.class.php:718 +msgid "Error al crear categorías de cuentas" +msgstr "Erreur pendant la récupération des catégories de comptes" + +# "Error on retrieving users" +#: ../../../../inc/Migrate.class.php:766 +msgid "Error al obtener los usuarios" +msgstr "Erreur pendant la récupération des utilisateurs" + +# "Import Users" +#: ../../../../inc/Migrate.class.php:770 +msgid "Importar Usuarios" +msgstr "Importer Utilisateurs" + +# "Error on creating users" +#: ../../../../inc/Migrate.class.php:827 +msgid "Error al crear usuarios" +msgstr "Erreur pendant la création des utilisateurs" + +# "Error on retrieving users groups" +#: ../../../../inc/Migrate.class.php:856 +msgid "Error al obtener los grupos de usuarios" +msgstr "Erreur pendant la récupération des groupes d'utilisateurs" + +# "Import Users Groups" +#: ../../../../inc/Migrate.class.php:860 +msgid "Importar Grupos de Usuarios" +msgstr "Importer Groupes d'Utilisateurs" + +# "Error on adding users groups" +#: ../../../../inc/Migrate.class.php:886 +msgid "Error al crear los grupos de usuarios" +msgstr "Erreur pendant l'ajout des groupes d'utilisateurs" + +# "Import Configuration" +#: ../../../../inc/Migrate.class.php:931 +msgid "Importar Configuración" +msgstr "Importer Configuration" + +# "Edit Profile" +#: ../../../../inc/Profile.class.php:69 ../../../../inc/Profile.class.php:123 +#: ../../../../inc/Profile.class.php:128 +#, fuzzy +msgid "Migrar Perfiles" +msgstr "Profils" + +# "Error on retrieving accounts" +#: ../../../../inc/Profile.class.php:69 +#, fuzzy +msgid "Error al obtener perfiles" +msgstr "Erreur pendant la récupération des comptes" + +# "Application successfully updated" +#: ../../../../inc/Profile.class.php:126 +#, fuzzy +msgid "Operación realizada correctamente" +msgstr "Application mis à jour avec succès" + +# "You don't have permission to do this operation" +#: ../../../../inc/Profile.class.php:128 +#, fuzzy +msgid "Fallo al realizar la operación" +msgstr "Erreur pendant la mise à jour du mot de passe maître de l'historique" + +# "Incorrect parameters" +#: ../../../../inc/ProfileBase.class.php:164 +#, fuzzy +msgid "Datos de perfil incorrectos" +msgstr "Nom de profil dupliqué" + +# "Delete Profile" +#: ../../../../inc/ProfileBase.class.php:550 +#: ../../../../web/UsersMgmtC.class.php:274 +msgid "Eliminar Perfil" +msgstr "Supprimer Profil" + +# "Edit Profile" +#: ../../../../inc/ProfileBase.class.php:593 +msgid "Modificar Perfil" +msgstr "Modifier Profil" + +# "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 "Id Invalide" + +#: ../../../../inc/SyspassImport.class.php:111 +#, fuzzy +msgid "No hay categorías para importar" +msgstr "Importer Catégories de Comptes" + +# "There are no backups for download" +#: ../../../../inc/SyspassImport.class.php:136 +#, fuzzy +msgid "No hay clientes para importar" +msgstr "Importer Clients" + +# "There are no backups for download" +#: ../../../../inc/SyspassImport.class.php:161 +#, fuzzy +msgid "No hay cuentas para importar" +msgstr "Il n'y a pas de sauvegarde à télécharger" + +# "Error on updating database" +#: ../../../../inc/Upgrade.class.php:51 +msgid "Error al aplicar la actualización de la Base de Datos" +msgstr "Erreur pendant la mise à jour de la base de données." + +# "Please, check the event log for more details" +#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58 +msgid "Compruebe el registro de eventos para más detalles" +msgstr "Veuillez consulter le journal des évènements pour plus de détail" + +# "Sign in" +#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58 +#: ../../../../inc/themes/classic/login.inc:32 +#: ../../../../inc/themes/material-blue/2fa.inc:26 +#: ../../../../inc/themes/material-blue/login.inc:60 +msgid "Acceder" +msgstr "Se connecter" + +# "Error on updating database" +#: ../../../../inc/Upgrade.class.php:57 +#, fuzzy +msgid "Error al aplicar la actualización auxiliar" +msgstr "Erreur pendant la mise à jour de la base de données." + +# "Update DB" +#: ../../../../inc/Upgrade.class.php:74 +msgid "Actualizar BBDD" +msgstr "Mis à jour BDD" + +# "Database update not needed." +#: ../../../../inc/Upgrade.class.php:121 +msgid "No es necesario actualizar la Base de Datos." +msgstr "La mise à jour de la base de données n'est pas nécessaire." + +# "Error on updating database." +#: ../../../../inc/Upgrade.class.php:129 +msgid "Error al aplicar la actualización de la Base de Datos." +msgstr "Erreur pendant la mise à jour de la base de données." + +# "Database updating was done successfully." +#: ../../../../inc/Upgrade.class.php:138 +msgid "Actualización de la Base de Datos realizada correctamente." +msgstr "Mise à jour de la base de données effectuée." + +# "Update Configuration" +#: ../../../../inc/Upgrade.class.php:215 +msgid "Actualizar Configuración" +msgstr "Mettre à jour la Configuration" + +# "Configuration updating was done successfully." +#: ../../../../inc/Upgrade.class.php:215 +msgid "Actualización de la Configuración realizada correctamente." +msgstr "Mise à jour de la configuration effectuée correctement." + +# "Could not perform the password change request." +#: ../../../../inc/UserBase.class.php:386 +#: ../../../../inc/UserBase.class.php:530 +msgid "No se pudo realizar la petición de cambio de clave." +msgstr "Impossible d'effectuer la requête de changement de mot de passe." + +# "Edit User" +#: ../../../../inc/UserBase.class.php:525 +msgid "Modificar Usuario" +msgstr "Modifier Utilisateur" + +# "Delete User" +#: ../../../../inc/UserBase.class.php:592 +#: ../../../../web/UsersMgmtC.class.php:150 +msgid "Eliminar Usuario" +msgstr "Supprimer Utilisateur" + +# "Account Activation" +#: ../../../../inc/UserLdap.class.php:78 +msgid "Activación Cuenta" +msgstr "Activation Compte" + +# "Your account activation is pending." +#: ../../../../inc/UserLdap.class.php:79 +msgid "Su cuenta está pendiente de activación." +msgstr "Votre compte est en attente d'activation." + +# "You will receive a confirmation email in short." +#: ../../../../inc/UserLdap.class.php:80 +msgid "En breve recibirá un email de confirmación." +msgstr "Vous recevrez un courriel de confirmation sous peu." + +# "LDAP User" +#: ../../../../inc/UserLdap.class.php:86 +#, fuzzy +msgid "Nuevo usuario de LDAP" +msgstr "Utilisateur LDAP" + +# "Edit Group" +#: ../../../../inc/UserUtil.class.php:727 +#, fuzzy +msgid "Migrar Grupos" +msgstr "Groupes" + +# "Error on adding users groups" +#: ../../../../inc/UserUtil.class.php:727 +#, fuzzy +msgid "Error al migrar grupo del usuario" +msgstr "Erreur pendant la recherche du DN de l'utilisateur" + +# "Required PHP version >= 5.1" +#: ../../../../inc/Util.class.php:122 +#, fuzzy +msgid "Versión de PHP requerida >= " +msgstr "Version de PHP requis >= 5.1" + +# "Please update the PHP version to run sysPass" +#: ../../../../inc/Util.class.php:123 +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" + +# "Module unavilable" +#: ../../../../inc/Util.class.php:159 +#: ../../../../inc/themes/classic/ldap.inc:212 +#: ../../../../inc/themes/material-blue/ldap.inc:238 +msgid "Módulo no disponible" +msgstr "Module indisponible" + +# "Without this module the application could not run correctly" +#: ../../../../inc/Util.class.php:160 +msgid "Sin este módulo la aplicación puede no funcionar correctamente." +msgstr "Sans ce module, l'application ne peut pas fonctionner correctement." + +# "CSV/XML Import" +#: ../../../../inc/XmlExport.class.php:104 +#, fuzzy +msgid "Importar XML" +msgstr "Importer CSV/XML" + +# "Error on creating user" +#: ../../../../inc/XmlExport.class.php:389 +#, fuzzy +msgid "Error al crear el archivo XML" +msgstr "Erreur pendant la création du client" + +#: ../../../../inc/XmlImport.class.php:63 +msgid "Formato detectado" msgstr "" -"Si vous n'êtes pas à l'origine de cette demande, ne tenez pas compte de ce " -"message." -# "Request Password Change" -#: ../../../../inc/tpl/passreset.php:47 -msgid "Solicitud de Cambio de Clave" -msgstr "Demande de changement de Mot de passe" +# "Unable to process XML file" +#: ../../../../inc/XmlImportBase.class.php:75 +msgid "No es posible procesar el archivo XML" +msgstr "Impossible de traiter le fichier XML" -# "User login" -#: ../../../../inc/tpl/passreset.php:50 -msgid "Login del Usuario" -msgstr "Login de l'utilisateur" +# "XML file not supported" +#: ../../../../inc/XmlImportBase.class.php:103 +msgid "Archivo XML no soportado" +msgstr "Fichier XML non supportés" -# "User's Email" -#: ../../../../inc/tpl/passreset.php:55 -msgid "Email del Usuario" -msgstr "Courriel de l'utilisateur" +# "Unable to detect the application the data was exported from" +#: ../../../../inc/XmlImportBase.class.php:104 +msgid "No es posible detectar la aplicación que exportó los datos" +msgstr "Impossible de détecter l'application depuis laquelle les données ont été exportés" -# "Email" -#: ../../../../inc/tpl/passreset.php:56 ../../../../inc/tpl/users.php:112 -msgid "Email" -msgstr "Courriel" +# "Error on query" +#: ../../../../js/strings.js.php:27 +msgid "Error en la consulta" +msgstr "Erreur pendant la requête" -# "New Password" -#: ../../../../inc/tpl/passreset.php:61 -msgid "Nueva Clave" -msgstr "Nouveau Mot de passe" +# "There was an error" +#: ../../../../js/strings.js.php:28 +msgid "Ha ocurrido un error" +msgstr "Il y a une erreur" -# "New Password (Verify)" -#: ../../../../inc/tpl/passreset.php:69 -msgid "Nueva Clave (Verificar)" -msgstr "Nouveau Mot de passe (Vérifier)" +# "Session finished" +#: ../../../../js/strings.js.php:29 +#: ../../../../inc/themes/classic/login.inc:52 +#: ../../../../inc/themes/material-blue/login.inc:75 +msgid "Sesión finalizada" +msgstr "Session terminée" -# "Password (Verify)" -#: ../../../../inc/tpl/passreset.php:70 -msgid "Clave (Verificar)" -msgstr "Mot de passe (Vérifier)" +# "Delete account?" +#: ../../../../js/strings.js.php:30 +msgid "Borrar la cuenta?" +msgstr "Supprimer compte?" -# "Back" -#: ../../../../inc/tpl/passreset.php:83 -msgid "Volver" -msgstr "Retour" +# "Delete user?" +#: ../../../../js/strings.js.php:31 +msgid "Borrar el usuario?" +msgstr "Supprimer l'utilisateur?" -# "Go back to login" -#: ../../../../inc/tpl/passreset.php:83 -msgid "Volver a iniciar sesión" -msgstr "Retour au login" +# "You should save configuration in order to take effect" +#: ../../../../js/strings.js.php:32 +msgid "Guarde la configuración para que sea efectiva" +msgstr "Vous devez sauvegarder la configuration pour qu'elle soit prise en compte" -# "Request" -#: ../../../../inc/tpl/passreset.php:85 -msgid "Solicitar" -msgstr "Demander" +# "Generated Password" +#: ../../../../js/strings.js.php:33 +msgid "Clave Generada" +msgstr "Mot de passe généré" -# "Request password change" -#: ../../../../inc/tpl/passreset.php:86 -msgid "Solicitar cambio de clave" -msgstr "Demander le changement de mot de passe" +# "High level" +#: ../../../../js/strings.js.php:34 +msgid "Nivel alto" +msgstr "Niveau haut" -# "Change" -#: ../../../../inc/tpl/passreset.php:88 -msgid "Cambiar" -msgstr "Changer" +# "Average level" +#: ../../../../js/strings.js.php:35 +msgid "Nivel medio" +msgstr "Niveau moyen" + +# "Low level" +#: ../../../../js/strings.js.php:36 +msgid "Nivel bajo" +msgstr "Niveau bas" + +# "Very high level" +#: ../../../../js/strings.js.php:37 +msgid "Nivel muy alto" +msgstr "Niveau très haut" + +# "You should use at least 8 characters" +#: ../../../../js/strings.js.php:38 +msgid "Utilizar al menos 8 caracteres" +msgstr "Vous devriez utiliser au moins 8 caractères" + +# "Delete item?" +#: ../../../../js/strings.js.php:39 +msgid "Borrar elemento?" +msgstr "Supprimer élément?" + +# "Page not found" +#: ../../../../js/strings.js.php:40 +msgid "Página no encontrada" +msgstr "Page introuvable" + +# "File not supported for preview" +#: ../../../../js/strings.js.php:41 +msgid "Archivo no soportado para visualizar" +msgstr "Fichier non supporté pour la pré-visualisation" + +# "Delete file?" +#: ../../../../js/strings.js.php:42 +msgid "Eliminar archivo?" +msgstr "Supprimer fichier?" + +# "Your browser does not support HTML5 file uploads" +#: ../../../../js/strings.js.php:43 +msgid "Su navegador no soporta subir archivos con HTML5" +msgstr "Votre navigateur ne supporte pas le transfert de fichier HTML5" + +# "Too many files" +#: ../../../../js/strings.js.php:44 +msgid "Demasiados archivos" +msgstr "Trop de fichiers" + +# "Unable to save the file.
    Max file size:" +#: ../../../../js/strings.js.php:45 +#, fuzzy, php-format +msgid "No es posible guardar el archivo.%sTamaño máximo:" +msgstr "Impossible de sauvegarder le fichier.
    Taille maximale:" + +# "Extension not allowed" +#: ../../../../js/strings.js.php:46 +msgid "Extensión no permitida" +msgstr "Extension non autorisée" + +# "Clear event log?" +#: ../../../../js/strings.js.php:47 +msgid "Vaciar el registro de eventos?" +msgstr "Nettoyer le journal d'évènements" + +# "Select Group" +#: ../../../../js/strings.js.php:48 +msgid "Seleccionar Grupo" +msgstr "Sélectionner Groupe" + +# "Select users" +#: ../../../../js/strings.js.php:49 +#, fuzzy +msgid "Seleccionar Usuario" +msgstr "Sélectionner date" + +# "Select Profile" +#: ../../../../js/strings.js.php:50 +msgid "Seleccionar Perfil" +msgstr "Sélectionner Profil" + +# "Select Customer" +#: ../../../../js/strings.js.php:51 +msgid "Seleccionar Cliente" +msgstr "Sélectionner Client" + +# "Select category" +#: ../../../../js/strings.js.php:52 +msgid "Seleccionar Categoría" +msgstr "Sélectionner Catégorie" + +# "No results" +#: ../../../../js/strings.js.php:53 +msgid "Sin resultados" +msgstr "Aucun résultat" + +# "Options" +#: ../../../../js/strings.js.php:54 +#, fuzzy +msgid "Opciones de clave" +msgstr "Options" + +# "Generate random password" +#: ../../../../js/strings.js.php:55 +msgid "Generar clave aleatoria" +msgstr "Générer un mot de passe aléatoire" + +#: ../../../../js/strings.js.php:56 +msgid "Complejidad" +msgstr "" + +#: ../../../../js/strings.js.php:57 +msgid "Reset" +msgstr "" + +# "Password strength level" +#: ../../../../js/strings.js.php:58 +#: ../../../../inc/themes/classic/editpass.inc:34 +msgid "Nivel de fortaleza de la clave" +msgstr "Niveau de sécurité du mot de passe" + +# "Show Password" +#: ../../../../js/strings.js.php:59 +msgid "Mostrar Clave" +msgstr "Afficher Mot de passe" + +# "Edit User" +#: ../../../../js/strings.js.php:60 +#, fuzzy +msgid "Copiar Usuario" +msgstr "Copier Compte" # "Change password" -#: ../../../../inc/tpl/passreset.php:89 -msgid "Cambiar Clave" -msgstr "Changer Mot de passe" +#: ../../../../js/strings.js.php:61 +#, fuzzy +msgid "Copiar Clave" +msgstr "Copier le mot de passe dans le presse papier" -# "Request Account Modification" -#: ../../../../inc/tpl/request.php:33 -msgid "Solicitar Modificación de Cuenta" -msgstr "Demander modification de Compte" +#: ../../../../js/strings.js.php:62 +msgid "Incluir Números" +msgstr "" -# "Request" -#: ../../../../inc/tpl/request.php:54 -msgid "Petición" -msgstr "Demande" +#: ../../../../js/strings.js.php:63 +msgid "Incluir Mayúsculas" +msgstr "" -# "Request description" -#: ../../../../inc/tpl/request.php:56 -msgid "Descripción de la petición" -msgstr "Description de la demande" +#: ../../../../js/strings.js.php:64 +msgid "Incluir Símbolos" +msgstr "" -# "Back" -#: ../../../../inc/tpl/request.php:68 ../../../../inc/tpl/editpass.php:84 -#: ../../../../inc/tpl/accounts.php:508 -msgid "Atrás" -msgstr "Retour" +#: ../../../../js/strings.js.php:65 +#, fuzzy +msgid "Longitud" +msgstr "La longueur du mot de passe maître doit être de 11 caractères au moins" -# "Send" -#: ../../../../inc/tpl/request.php:71 -msgid "Enviar" -msgstr "Envoyer" +# "Select Customer" +#: ../../../../js/strings.js.php:66 +#, fuzzy +msgid "Seleccionar Acción" +msgstr "Action" + +# "YES" +#: ../../../../js/strings.js.php:67 +#: ../../../../inc/themes/classic/account.inc:133 +#: ../../../../inc/themes/classic/account.inc:164 +#: ../../../../inc/themes/classic/account.inc:449 +#: ../../../../inc/themes/classic/install.inc:99 +msgid "SI" +msgstr "OUI" + +# "NO" +#: ../../../../js/strings.js.php:68 +#: ../../../../inc/themes/classic/account.inc:133 +#: ../../../../inc/themes/classic/account.inc:164 +#: ../../../../inc/themes/classic/account.inc:447 +#: ../../../../inc/themes/classic/encryption.inc:61 +#: ../../../../inc/themes/classic/encryption.inc:80 +#: ../../../../inc/themes/classic/import.inc:70 +#: ../../../../inc/themes/classic/install.inc:99 +#: ../../../../inc/themes/classic/tokens.inc:36 +msgid "NO" +msgstr "NON" + +# "Account Details" +#: ../../../../web/AccountC.class.php:380 +#: ../../../../web/AccountC.class.php:411 +#: ../../../../inc/themes/classic/search.inc:38 +#: ../../../../inc/themes/classic/search.inc:97 +#: ../../../../inc/themes/material-blue/search.inc:41 +#: ../../../../inc/themes/material-blue/search.inc:108 +msgid "Detalles de Cuenta" +msgstr "Détails du Compte" + +# "Edit Account Password" +#: ../../../../web/AccountC.class.php:468 +#: ../../../../inc/themes/classic/account.inc:394 +#: ../../../../inc/themes/material-blue/account.inc:429 +msgid "Modificar Clave de Cuenta" +msgstr "Modifier Mot de passe de Compte" + +# "Name" +#: ../../../../web/AccountsMgmtC.class.php:79 +#: ../../../../web/AccountsMgmtC.class.php:138 +#: ../../../../web/AccountsMgmtC.class.php:266 +#: ../../../../web/SearchC.class.php:277 +#: ../../../../web/UsersMgmtC.class.php:87 +#: ../../../../web/UsersMgmtC.class.php:187 +#: ../../../../web/UsersMgmtC.class.php:245 +#: ../../../../inc/themes/classic/account.inc:11 +#: ../../../../inc/themes/classic/categories.inc:8 +#: ../../../../inc/themes/classic/customers.inc:8 +#: ../../../../inc/themes/classic/customfields.inc:9 +#: ../../../../inc/themes/classic/editpass.inc:8 +#: ../../../../inc/themes/classic/groups.inc:8 +#: ../../../../inc/themes/classic/info.inc:25 +#: ../../../../inc/themes/classic/profiles.inc:8 +#: ../../../../inc/themes/classic/request.inc:6 +#: ../../../../inc/themes/classic/search.inc:36 +#: ../../../../inc/themes/classic/users.inc:8 +#: ../../../../inc/themes/material-blue/account.inc:15 +#: ../../../../inc/themes/material-blue/categories.inc:8 +#: ../../../../inc/themes/material-blue/customers.inc:8 +#: ../../../../inc/themes/material-blue/customfields.inc:8 +#: ../../../../inc/themes/material-blue/editpass.inc:9 +#: ../../../../inc/themes/material-blue/groups.inc:8 +#: ../../../../inc/themes/material-blue/info.inc:25 +#: ../../../../inc/themes/material-blue/profiles.inc:8 +#: ../../../../inc/themes/material-blue/request.inc:6 +#: ../../../../inc/themes/material-blue/search.inc:39 +#: ../../../../inc/themes/material-blue/users.inc:8 +msgid "Nombre" +msgstr "Nom" + +# "Categories Management" +#: ../../../../web/AccountsMgmtC.class.php:115 +msgid "Gestión de Categorías" +msgstr "Gestion des catégories" + +# "Customers Management" +#: ../../../../web/AccountsMgmtC.class.php:172 +msgid "Gestión de Clientes" +msgstr "Gestion des Clients" + +#: ../../../../web/AccountsMgmtC.class.php:266 +#: ../../../../inc/themes/classic/customfields.inc:27 +#: ../../../../inc/themes/material-blue/customfields.inc:30 +#, fuzzy +msgid "Módulo" +msgstr "Module indisponible" + +# "Delete Group" +#: ../../../../web/AccountsMgmtC.class.php:287 +#, fuzzy +msgid "Eliminar Campo" +msgstr "Supprimer Profil" + +#: ../../../../web/AccountsMgmtC.class.php:300 +#: ../../../../inc/themes/classic/profiles.inc:107 +#: ../../../../inc/themes/material-blue/profiles.inc:124 +msgid "Campos Personalizados" +msgstr "" # "Last backup" -#: ../../../../inc/tpl/backup.php:42 +#: ../../../../web/ConfigC.class.php:178 msgid "Último backup" msgstr "Dernière sauvegarde" # "There are no backups available" -#: ../../../../inc/tpl/backup.php:42 +#: ../../../../web/ConfigC.class.php:178 msgid "No se encontraron backups" msgstr "Il n'y a pas de sauvegarde disponible" -# "Result" -#: ../../../../inc/tpl/backup.php:48 -msgid "Resultado" -msgstr "Resultat" - -# "Download Current" -#: ../../../../inc/tpl/backup.php:56 -msgid "Descargar Actual" -msgstr "Télécharger l'élément actuel" - -# "There are no backups for download" -#: ../../../../inc/tpl/backup.php:64 -msgid "No hay backups para descargar" -msgstr "Il n'y a pas de sauvegarde à télécharger" - -# "Last Change" -#: ../../../../inc/tpl/masterpass.php:42 -msgid "Último cambio" -msgstr "Dernier changement" - -# "Current Master Password" -#: ../../../../inc/tpl/masterpass.php:51 -msgid "Clave Maestra actual" -msgstr "Mot de passe Maître actuel" - -# "New Master Password" -#: ../../../../inc/tpl/masterpass.php:59 -msgid "Nueva Clave Maestra" -msgstr "Nouveau Mot de passe Maître" - -# "New Master Password (repeat)" -#: ../../../../inc/tpl/masterpass.php:68 -msgid "Nueva Clave Maestra (repetir)" -msgstr "Nouveau Mot de passe Maître (répéter)" - -# "Do not modify accounts" -#: ../../../../inc/tpl/masterpass.php:76 -msgid "No modificar cuentas" -msgstr "Ne pas modifier les comptes" - -# "NO" -#: ../../../../inc/tpl/masterpass.php:80 ../../../../inc/tpl/masterpass.php:99 -#: ../../../../inc/tpl/masterpass.php:125 ../../../../inc/tpl/migrate.php:81 -#: ../../../../inc/tpl/migrate.php:130 ../../../../inc/tpl/accounts.php:305 -#: ../../../../inc/tpl/accounts.php:336 ../../../../inc/tpl/accounts.php:593 -msgid "NO" -msgstr "NON" - -# "Confirm Change" -#: ../../../../inc/tpl/masterpass.php:86 -msgid "Confirmar cambio" -msgstr "Confirmer changement" - -# "Warning" -#: ../../../../inc/tpl/masterpass.php:89 ../../../../inc/tpl/masterpass.php:92 -#: ../../../../inc/tpl/masterpass.php:95 ../../../../inc/tpl/migrate.php:78 -msgid "Atención" -msgstr "Attention" - -# "You should save the new password on a secure place" -#: ../../../../inc/tpl/masterpass.php:90 -msgid "Guarde la nueva clave en un lugar seguro." -msgstr "Vous devriez sauvegarder le mot de passe dans un endroit sûre" - -# "All accounts passwords will be encrypted again." -#: ../../../../inc/tpl/masterpass.php:93 -msgid "Se volverán a encriptar las claves de todas las cuentas." -msgstr "Tous les mots de passe des comptes seront encryptés de nouveau." - -# "Users will need to enter the new master key." -#: ../../../../inc/tpl/masterpass.php:96 -msgid "Los usuarios deberán de introducir la nueva clave maestra." -msgstr "Les utilisateurs devront saisir un nouveau mot de passe maître." - -# "YES" -#: ../../../../inc/tpl/masterpass.php:127 ../../../../inc/tpl/migrate.php:132 -#: ../../../../inc/tpl/accounts.php:305 ../../../../inc/tpl/accounts.php:336 -#: ../../../../inc/tpl/accounts.php:595 -msgid "SI" -msgstr "OUI" - -# "Group name" -#: ../../../../inc/tpl/groups.php:41 -msgid "Nombre del grupo" -msgstr "Nom du groupe" - -# "Group description" -#: ../../../../inc/tpl/groups.php:47 -msgid "Descripción del grupo" -msgstr "Description du groupe" - -# "phpPMS Import" -#: ../../../../inc/tpl/migrate.php:33 -msgid "Importar phpPMS" -msgstr "Importer phpPMS" - -# "DB Username" -#: ../../../../inc/tpl/migrate.php:40 ../../../../inc/tpl/install.php:131 -#: ../../../../inc/tpl/install.php:132 -msgid "Usuario BBDD" -msgstr "Utilisateur BDD" - -# "DB Password" -#: ../../../../inc/tpl/migrate.php:49 ../../../../inc/tpl/install.php:139 -#: ../../../../inc/tpl/install.php:140 -msgid "Clave BBDD" -msgstr "Mot de passe BDD" - -# "DB Name" -#: ../../../../inc/tpl/migrate.php:57 ../../../../inc/tpl/install.php:147 -#: ../../../../inc/tpl/install.php:148 -msgid "Nombre BBDD" -msgstr "Nom BDD" - -# "DB Server" -#: ../../../../inc/tpl/migrate.php:66 ../../../../inc/tpl/install.php:156 -#: ../../../../inc/tpl/install.php:157 -msgid "Servidor BBDD" -msgstr "Serveur BDD" - -# "Confirm" -#: ../../../../inc/tpl/migrate.php:75 -msgid "Confirmar" -msgstr "Confirmer" - -# "Current data will be removed (except current user)" -#: ../../../../inc/tpl/migrate.php:79 -msgid "Los datos actuales serán borrados (excepto el usuario actual)" -msgstr "Les données actuelles seront supprimées(sauf l'utilisateur actuel)" - -# "Start" -#: ../../../../inc/tpl/migrate.php:97 -msgid "Iniciar" -msgstr "Démarrer" - -# "CSV/XML Import" -#: ../../../../inc/tpl/migrate.php:103 -msgid "Importar CSV/XML" -msgstr "Importer CSV/XML" - -# "Drop files here or click to select" -#: ../../../../inc/tpl/migrate.php:117 -msgid "Soltar archivo aquí o click para seleccionar" -msgstr "Supprimer les fichier ici ou cliquez pour sélectionner" - -# "Lost your password?" -#: ../../../../inc/tpl/login.php:65 -msgid "¿Olvidó su clave?" -msgstr "Mot de passe oublié?" - -# "Application successfully updated" -#: ../../../../inc/tpl/login.php:78 -msgid "Aplicación actualizada correctamente" -msgstr "Application mis à jour avec succès" - -# New search interface with list or card like styles -#: ../../../../inc/tpl/login.php:84 +# "Last Modification" +#: ../../../../web/ConfigC.class.php:185 #, fuzzy -msgid "Nuevo interface de búsqueda con estilo de lista o tipo tarjeta" -msgstr "New search interface with list or card like styles" +msgid "Última exportación" +msgstr "Dernière page" -# Users and groups selection for account access -#: ../../../../inc/tpl/login.php:85 +# "Unable to write in configuration file" +#: ../../../../web/ConfigC.class.php:185 #, fuzzy -msgid "Selección de grupos y usuarios de acceso a cuentas" -msgstr "Users and groups selection for account access" +msgid "No se encontró archivo de exportación" +msgstr "Impossible d'écrire dans le fichier de configuration" -# Drag&Drop for files uploading -#: ../../../../inc/tpl/login.php:86 +# "Configuration" +#: ../../../../web/ConfigC.class.php:230 #, fuzzy -msgid "Drag&Drop para subida de archivos" -msgstr "Drag&Drop for files uploading" +msgid "Información" +msgstr "Affiche quelques informations à propos de l'application et de ces performances" -# "Copy Password to Clipboard" -#: ../../../../inc/tpl/login.php:87 -#, fuzzy -msgid "Copiar clave al portapapeles" -msgstr "Copier le mot de passe dans le presse papier" +# "Event log cleared" +#: ../../../../web/EventlogC.class.php:91 +msgid "Registro de eventos vaciado" +msgstr "Journal d'évènements nettoyé" -# Accounts history and restore points -#: ../../../../inc/tpl/login.php:88 -#, fuzzy -msgid "Historial de cuentas y restauración" -msgstr "Accounts history and restore points" +# "Error on clearing event log" +#: ../../../../web/EventlogC.class.php:93 +msgid "Error al vaciar el registro de eventos" +msgstr "Erreur pendant le nettoyage du journal d'évènements" -# New categories and customers management -#: ../../../../inc/tpl/login.php:89 -#, fuzzy -msgid "Nueva gestión de categorías y clientes" -msgstr "New categories and customers management" +# "Application Admin" +#: ../../../../web/MainC.class.php:131 +#: ../../../../web/UsersMgmtC.class.php:100 +msgid "Admin Aplicación" +msgstr "Admin Application" -# Reset password function for users -#: ../../../../inc/tpl/login.php:90 -#, fuzzy -msgid "Función de olvido de claves para usuarios" -msgstr "Reset password function for users" +# "Search" +#: ../../../../web/MainC.class.php:149 +msgid "Buscar" +msgstr "Chercher" -# Improved Active Directory and LDAP integration -#: ../../../../inc/tpl/login.php:91 -#, fuzzy -msgid "Integración con Active Directory y LDAP mejorada" -msgstr "Improved Active Directory and LDAP integration" +# "Users Management" +#: ../../../../web/MainC.class.php:161 +#: ../../../../web/UsersMgmtC.class.php:163 +msgid "Gestión de Usuarios" +msgstr "Gestion des Utilisateurs" -# Email notifications with authentication -#: ../../../../inc/tpl/login.php:92 -#, fuzzy -msgid "Autentificación para notificaciones por correo" -msgstr "Email notifications with authentication" +# "Customer and Categories management" +#: ../../../../web/MainC.class.php:167 +msgid "Gestión de Clientes y Categorías" +msgstr "Gestion des clients et catégories" -# Global account searching for unprivileged users -#: ../../../../inc/tpl/login.php:93 -#, fuzzy -msgid "Búsqueda global de cuentas para usuarios sin permisos" -msgstr "Global account searching for unprivileged users" +# "Event Log" +#: ../../../../web/MainC.class.php:179 +#: ../../../../inc/themes/classic/eventlog.inc:4 +#: ../../../../inc/themes/material-blue/eventlog.inc:3 +msgid "Registro de Eventos" +msgstr "Journal d'évènements" -# Requests for account modification for unprivileged users -#: ../../../../inc/tpl/login.php:94 +#: ../../../../web/MainC.class.php:199 +msgid "Nuevo estilo visual basado en Material Design Lite by Google" +msgstr "" + +#: ../../../../web/MainC.class.php:200 #, fuzzy -msgid "Solicitudes de modificación de cuentas para usuarios sin permisos" -msgstr "Requests for account modification for unprivileged users" +msgid "Usuarios en múltiples grupos" +msgstr "Importer Groupes d'Utilisateurs" + +# "Customers Management" +#: ../../../../web/MainC.class.php:201 +#, fuzzy +msgid "Previsualización de imágenes" +msgstr "Demande de modification de Compte" + +#: ../../../../web/MainC.class.php:202 +msgid "Mostrar claves como imágenes" +msgstr "" + +#: ../../../../web/MainC.class.php:203 +msgid "Campos personalizados" +msgstr "" + +# "Error on query" +#: ../../../../web/MainC.class.php:204 +#, fuzzy +msgid "API de consultas" +msgstr "Demande de modification de Compte" + +# "Enable Authentication" +#: ../../../../web/MainC.class.php:205 +#: ../../../../inc/themes/classic/2fa.inc:9 +#: ../../../../inc/themes/material-blue/2fa.inc:9 +#: ../../../../inc/themes/material-blue/security.inc:13 +#, fuzzy +msgid "Autentificación en 2 pasos" +msgstr "Activer l'authentification" + +#: ../../../../web/MainC.class.php:206 +#, fuzzy +msgid "Complejidad de generador de claves" +msgstr "Impossible de trouver le générateur de nombres aléatoires." + +#: ../../../../web/MainC.class.php:207 +msgid "Consultas especiales" +msgstr "" + +#: ../../../../web/MainC.class.php:208 +#, fuzzy +msgid "Exportación a XML" +msgstr "Fichier XML non supportés" + +# "Master password too short" +#: ../../../../web/MainC.class.php:209 +#, fuzzy +msgid "Clave maestra temporal" +msgstr "Mot de passe Maître" # Accounts import from KeePass, KeePassX and CSV -#: ../../../../inc/tpl/login.php:95 +#: ../../../../web/MainC.class.php:210 #, fuzzy -msgid "Importación de cuentas desde KeePass, KeePassX y CSV" +msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV" msgstr "Accounts import from KeePass, KeePassX and CSV" -# Clone account function -#: ../../../../inc/tpl/login.php:96 -#, fuzzy -msgid "Función de copiar cuentas" -msgstr "Clone account function" - # Code optimization and faster loading -#: ../../../../inc/tpl/login.php:97 +#: ../../../../web/MainC.class.php:211 #, fuzzy msgid "Optimización del código y mayor rapidez de carga" msgstr "Code optimization and faster loading" # Improved security to prevent XSS and SQL injection -#: ../../../../inc/tpl/login.php:98 +#: ../../../../web/MainC.class.php:212 #, fuzzy msgid "Mejoras de seguridad en XSS e inyección SQL" msgstr "Improved security to prevent XSS and SQL injection" -# New Features -#: ../../../../inc/tpl/login.php:101 ../../../../inc/tpl/login.php:102 -#, fuzzy -msgid "Nuevas Características" -msgstr "New Features" - -# "Customer name" -#: ../../../../inc/tpl/customers.php:41 -msgid "Nombre del cliente" -msgstr "Nom du client" - -# "Customer description" -#: ../../../../inc/tpl/customers.php:47 -msgid "Descripción del cliente" -msgstr "Description du client" - -# "Change user password" -#: ../../../../inc/tpl/main.php:37 -msgid "Cambiar clave de usuario" -msgstr "Changer mot de passe utilisateur" - -# "Sign out" -#: ../../../../inc/tpl/main.php:44 -msgid "Salir" -msgstr "Se déconnecter" - -# "Search" -#: ../../../../inc/tpl/main.php:52 -msgid "Buscar" -msgstr "Chercher" - -# "Customer and Categories management" -#: ../../../../inc/tpl/main.php:55 -msgid "Gestión de Clientes y Categorías" -msgstr "Gestion des clients et catégories" - -# "Event Log" -#: ../../../../inc/tpl/main.php:57 ../../../../inc/tpl/eventlog.php:37 -msgid "Registro de Eventos" -msgstr "Journal d'évènements" - -# "Profile name" -#: ../../../../inc/tpl/profiles.php:41 -msgid "Nombre del perfil" -msgstr "Nom du profil" - -# "View account details" -#: ../../../../inc/tpl/profiles.php:48 -msgid "Ver detalles de cuenta" -msgstr "Voir détails de compte" - -# "View" -#: ../../../../inc/tpl/profiles.php:48 -msgid "Ver" -msgstr "Voir" - -# "View account password" -#: ../../../../inc/tpl/profiles.php:50 -msgid "Ver clave de cuenta" -msgstr "Voir mot de passe de compte" - -# "View account history" -#: ../../../../inc/tpl/profiles.php:53 -msgid "Ver historial de cuenta" -msgstr "Voir historique de compte" - -# "View History" -#: ../../../../inc/tpl/profiles.php:53 -msgid "Ver Historial" -msgstr "Voir Historique" - -# "Edit account" -#: ../../../../inc/tpl/profiles.php:55 -msgid "Editar cuenta" -msgstr "Editer compte" - -# "Edit" -#: ../../../../inc/tpl/profiles.php:55 -msgid "Editar" -msgstr "Editer" - -# "Edit account password" -#: ../../../../inc/tpl/profiles.php:58 -msgid "Editar clave de cuenta" -msgstr "Editer mot de passe du compte" - -# "Edit Password" -#: ../../../../inc/tpl/profiles.php:58 -msgid "Editar Clave" -msgstr "Editer Mot de passe" - -# "Add new account" -#: ../../../../inc/tpl/profiles.php:60 -msgid "Añadir nueva cuenta" -msgstr "Ajouter nouveau compte" - -# "Add" -#: ../../../../inc/tpl/profiles.php:60 -msgid "Añadir" -msgstr "Ajouter" - -# "Delete account" -#: ../../../../inc/tpl/profiles.php:63 -msgid "Borrar cuenta" -msgstr "Supprimer compte" - -# "Delete" -#: ../../../../inc/tpl/profiles.php:63 -msgid "Borrar" -msgstr "Supprimer" - -# "View account files" -#: ../../../../inc/tpl/profiles.php:65 -msgid "Ver archivos de cuenta" -msgstr "Voir fichiers de compte" - -# "Files" -#: ../../../../inc/tpl/profiles.php:65 ../../../../inc/tpl/accounts.php:358 -msgid "Archivos" -msgstr "Fichiers" - -# "General configuration" -#: ../../../../inc/tpl/profiles.php:74 -msgid "Configuración general" -msgstr "Configuration générale" - -# "General" -#: ../../../../inc/tpl/profiles.php:74 -msgid "General" -msgstr "Générale" - -# "Change master password" -#: ../../../../inc/tpl/profiles.php:76 -msgid "Cambiar clave maestra" -msgstr "Changer mot de passe maître" - -# "Perform backup" -#: ../../../../inc/tpl/profiles.php:79 -msgid "Realizar copia de seguridad" -msgstr "Effectuer une sauvegarde" - -# "Backup" -#: ../../../../inc/tpl/profiles.php:79 -msgid "Backup" -msgstr "Sauvegarde" - -# "Management" -#: ../../../../inc/tpl/profiles.php:85 -msgid "Gestión" -msgstr "Gestion" - -# "Users management" -#: ../../../../inc/tpl/profiles.php:88 -msgid "Gestión de usuarios" -msgstr "Gestion des utilisateurs" - -# "Groups management" -#: ../../../../inc/tpl/profiles.php:90 -msgid "Gestión de grupos" -msgstr "Gestion des groupes" - -# "Groups" -#: ../../../../inc/tpl/profiles.php:90 ../../../../inc/tpl/accounts.php:312 -msgid "Grupos" -msgstr "Groupes" - -# "Profiles management" -#: ../../../../inc/tpl/profiles.php:93 -msgid "Gestión de perfiles" -msgstr "Gestion des profils" - -# "Profiles" -#: ../../../../inc/tpl/profiles.php:93 -msgid "Perfiles" -msgstr "Profils" - -# "Categories management" -#: ../../../../inc/tpl/profiles.php:95 -msgid "Gestión de categorías" -msgstr "Gestion des catégories" - -# "Categories" -#: ../../../../inc/tpl/profiles.php:95 -msgid "Categorías" -msgstr "Catégories" - -# "Customers management" -#: ../../../../inc/tpl/profiles.php:98 -msgid "Gestión de clientes" -msgstr "Gestion des clients" - -# "Customers" -#: ../../../../inc/tpl/profiles.php:98 -msgid "Clientes" -msgstr "Clients" - -# "Others" -#: ../../../../inc/tpl/profiles.php:104 -msgid "Otros" -msgstr "Autres" - -# "View event log" -#: ../../../../inc/tpl/profiles.php:107 -msgid "Ver log de eventos" -msgstr "Voir journal d'évènements" - -# "Event Log" -#: ../../../../inc/tpl/profiles.php:107 -msgid "Log de Eventos" -msgstr "Journal d'évènements" - -# "Clear" -#: ../../../../inc/tpl/search.php:59 -msgid "Limpiar" -msgstr "Nettoyer" - -# "Text to search" -#: ../../../../inc/tpl/search.php:60 -msgid "Texto a buscar" -msgstr "Text à chercher" - -# "Global search" -#: ../../../../inc/tpl/search.php:63 -msgid "Búsqueda global" -msgstr "Recherche globale" - -# "APP" -#: ../../../../inc/tpl/search.php:77 -msgid "CPP" -msgstr "APP" - -# "Accounts per page" -#: ../../../../inc/tpl/search.php:77 -msgid "Cuentas por página" -msgstr "Comptes par page" - -# "Select Customer" -#: ../../../../inc/tpl/search.php:84 ../../../../inc/tpl/accounts.php:572 -msgid "Seleccionar Cliente" -msgstr "Sélectionner Client" - -# "No results" -#: ../../../../inc/tpl/search.php:84 ../../../../inc/tpl/search.php:85 -#: ../../../../inc/tpl/accounts.php:574 ../../../../inc/tpl/accounts.php:579 -#: ../../../../inc/tpl/config.php:567 ../../../../inc/tpl/config.php:572 -#: ../../../../inc/tpl/users.php:220 ../../../../inc/tpl/users.php:225 -msgid "Sin resultados" -msgstr "Aucun résultat" - -# "Select category" -#: ../../../../inc/tpl/search.php:85 ../../../../inc/tpl/accounts.php:577 -msgid "Seleccionar Categoría" -msgstr "Sélectionner Catégorie" - -# "Installation finished" -#: ../../../../inc/tpl/install.php:35 -msgid "Instalación finalizada" -msgstr "Installation terminée" - -# "Click here to sign in" -#: ../../../../inc/tpl/install.php:36 -msgid "Pulse aquí para acceder" -msgstr "" -"Pressez ici pour vous connecter" - -# "Installation" -#: ../../../../inc/tpl/install.php:46 -msgid "Instalación " -msgstr "Installation" - # "This PHP version is vulnerable to NULL Byte attack CVE-2006-7243)" -#: ../../../../inc/tpl/install.php:57 +#: ../../../../web/MainC.class.php:254 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)" +msgstr "Cette version de PHP est vulnerable aux attaques NULL Byte (CVE-2006-7243)" # "Please update PHP version to run sysPass in a secure way" -#: ../../../../inc/tpl/install.php:58 +#: ../../../../web/MainC.class.php:255 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" +msgstr "Mettez à jour votre version de PHP afin d'utiliser sysPass de manière sécurisée" # "Cannot find random number generator." -#: ../../../../inc/tpl/install.php:62 +#: ../../../../web/MainC.class.php:262 msgid "No se encuentra el generador de números aleatorios." msgstr "Impossible de trouver le générateur de nombres aléatoires." # "" -#: ../../../../inc/tpl/install.php:63 -msgid "" -"Sin esta función un atacante puede utilizar su cuenta al resetear la clave" +#: ../../../../web/MainC.class.php:263 +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" + +# "Installation finished" +#: ../../../../web/MainC.class.php:282 +msgid "Instalación finalizada" +msgstr "Installation terminée" + +# "Click here to sign in" +#: ../../../../web/MainC.class.php:283 +msgid "Pulse aquí para acceder" +msgstr "Pressez ici pour vous connecter" + +# "Download new version" +#: ../../../../web/MainC.class.php:378 +msgid "Descargar nueva versión" +msgstr "Télécharger nouvelle version" + +# "Sort by Customer" +#: ../../../../web/SearchC.class.php:270 +msgid "Ordenar por Cliente" +msgstr "Trié par Client" + +# "Sort by Name" +#: ../../../../web/SearchC.class.php:276 +msgid "Ordenar por Nombre" +msgstr "Trié par Nom" + +# "Sort by Category" +#: ../../../../web/SearchC.class.php:282 +msgid "Ordenar por Categoría" +msgstr "Trié par Catégorie" + +# "Sort by Username" +#: ../../../../web/SearchC.class.php:288 +msgid "Ordenar por Usuario" +msgstr "Trié par Nom d'utilisateur" + +# "Sort by URL / IP" +#: ../../../../web/SearchC.class.php:294 +msgid "Ordenar por URL / IP" +msgstr "Trié par URL / IP" + +# "URL / IP" +#: ../../../../web/SearchC.class.php:295 +#: ../../../../inc/themes/classic/account.inc:58 +#: ../../../../inc/themes/classic/editpass.inc:16 +#: ../../../../inc/themes/classic/request.inc:13 +#: ../../../../inc/themes/classic/search.inc:59 +#: ../../../../inc/themes/material-blue/account.inc:66 +#: ../../../../inc/themes/material-blue/editpass.inc:17 +#: ../../../../inc/themes/material-blue/request.inc:15 +#: ../../../../inc/themes/material-blue/search.inc:62 +msgid "URL / IP" +msgstr "URL / IP" + +# "Properties" +#: ../../../../web/UsersMgmtC.class.php:91 +msgid "Propiedades" +msgstr "Propriétés" + +# "Account Admin" +#: ../../../../web/UsersMgmtC.class.php:104 +msgid "Admin Cuentas" +msgstr "Admin Comptes" + +# "LDAP User" +#: ../../../../web/UsersMgmtC.class.php:108 +#: ../../../../inc/themes/classic/users.inc:28 +#: ../../../../inc/themes/material-blue/users.inc:34 +msgid "Usuario de LDAP" +msgstr "Utilisateur LDAP" + +# "Disabled" +#: ../../../../web/UsersMgmtC.class.php:112 +#: ../../../../inc/themes/classic/users.inc:113 +#: ../../../../inc/themes/material-blue/users.inc:151 +#: ../../../../inc/themes/material-blue/users.inc:154 +msgid "Deshabilitado" +msgstr "Désactivé" + +# "View User Details" +#: ../../../../web/UsersMgmtC.class.php:129 +msgid "Ver Detalles de Usuario" +msgstr "Voir détails du compte" + +# "Change User's Password" +#: ../../../../web/UsersMgmtC.class.php:143 +msgid "Cambiar Clave de Usuario" +msgstr "Changer mot de passe utilisateur" + +# "Groups Management" +#: ../../../../web/UsersMgmtC.class.php:222 +msgid "Gestión de Grupos" +msgstr "Gestion des Groupes" + +# "View User Details" +#: ../../../../web/UsersMgmtC.class.php:260 +#, fuzzy +msgid "Ver Detalles de Perfil" +msgstr "Voir détails du compte" + +# "Profiles Management" +#: ../../../../web/UsersMgmtC.class.php:287 +msgid "Gestión de Perfiles" +msgstr "Gestion des Profils" + +#: ../../../../web/UsersMgmtC.class.php:407 +#, fuzzy +msgid "Ver token de Autorización" +msgstr "Voir détails du compte" + +# "Users Management" +#: ../../../../web/UsersMgmtC.class.php:434 +#, fuzzy +msgid "Gestión de Autorizaciones API" +msgstr "Gestion des fichiers désactivé" + +# "Configuration updated" +#: ../../../../web/UsersMgmtC.class.php:455 +#, fuzzy +msgid "Token de autorización visualizado" +msgstr "Configuration actualisée" + +#: ../../../../web/UsersMgmtC.class.php:456 +msgid "Autorizaciones" msgstr "" -"Sans cette fonction, un attaquant pourrait prendre votre compte sur un " -"changement de mot de passe" -# "Create sysPass admin account" -#: ../../../../inc/tpl/install.php:85 -msgid "Crear cuenta de admin de sysPass" -msgstr "Créer le compte admin sysPass" +# "Security" +#: ../../../../web/UsersPrefsC.class.php:84 +#: ../../../../inc/themes/classic/mail.inc:63 +#: ../../../../inc/themes/material-blue/mail.inc:86 +msgid "Seguridad" +msgstr "Sécurité" -# "sysPass administrator's login" -#: ../../../../inc/tpl/install.php:88 -msgid "Login del usuario administrador de sysPass" -msgstr "Login administrateur de sysPass" +# "Enter Security Code" +#: ../../../../inc/themes/classic/2fa.inc:14 +#: ../../../../inc/themes/material-blue/2fa.inc:14 +#, fuzzy +msgid "Introducir código" +msgstr "Saisir le code de sécurité" -# "Show Password" -#: ../../../../inc/tpl/install.php:96 ../../../../inc/tpl/install.php:97 -#: ../../../../inc/tpl/install.php:111 ../../../../inc/tpl/install.php:112 -#: ../../../../inc/tpl/install.php:137 ../../../../inc/tpl/install.php:138 -msgid "Mostrar Clave" -msgstr "Afficher Mot de passe" - -# "DB Configuration" -#: ../../../../inc/tpl/install.php:124 -msgid "Configurar BBDD" -msgstr "Configuration BDD" - -# "User login with with database administrative rights" -#: ../../../../inc/tpl/install.php:130 -msgid "Login de usuario con permisos de administrador de MySQL" -msgstr "Un utilisateur avec des droits d'administration sur la BDD" - -# "sysPass database name" -#: ../../../../inc/tpl/install.php:146 -msgid "Nombre de la base de datos para sysPass" -msgstr "Nom de la base de données sysPass" - -# "sysPass database server name" -#: ../../../../inc/tpl/install.php:155 -msgid "Nombre del servidor de la base de datos de sysPass" -msgstr "Nom du serveur de base de données sysPass" - -# "It does not create or verify the user's permissions on the DB" -#: ../../../../inc/tpl/install.php:165 -msgid "No crea ni verifica los permisos del usuario sobre la BBDD" -msgstr "" -"Ne crée pas ni ne vérifie les permissions de l'utilisateur dans la base de " -"données" - -# "Hosting Mode" -#: ../../../../inc/tpl/install.php:167 ../../../../inc/tpl/install.php:185 -#: ../../../../inc/tpl/install.php:187 -msgid "Modo Hosting" -msgstr "Mode Hébergé" - -# "Install" -#: ../../../../inc/tpl/install.php:174 -msgid "Instalar" -msgstr "Installer" - -# "Edit Account Password" -#: ../../../../inc/tpl/editpass.php:35 ../../../../inc/tpl/accounts.php:543 -msgid "Modificar Clave de Cuenta" -msgstr "Modifier Mot de passe de Compte" - -# "The generated password will be shown here" -#: ../../../../inc/tpl/editpass.php:60 ../../../../inc/tpl/accounts.php:254 -msgid "La clave generada se mostrará aquí" -msgstr "Le mot de passe généré sera affiché ici" - -# "Edit Account" -#: ../../../../inc/tpl/accounts.php:63 -msgid "Editar Cuenta" -msgstr "Editer Compte" +# "Password (Verify)" +#: ../../../../inc/themes/classic/2fa.inc:26 +#, fuzzy +msgid "Verificar" +msgstr "Mot de passe (Vérifier)" # "Account name" -#: ../../../../inc/tpl/accounts.php:177 +#: ../../../../inc/themes/classic/account.inc:14 +#: ../../../../inc/themes/material-blue/account.inc:21 msgid "Nombre de cuenta" msgstr "Nom de compte" # "Search down or enter" -#: ../../../../inc/tpl/accounts.php:196 +#: ../../../../inc/themes/classic/account.inc:35 msgid "Buscar en desplegable o introducir" msgstr "Chercher dans la liste déroulante ou entrer" # "Access URL or IP" -#: ../../../../inc/tpl/accounts.php:222 +#: ../../../../inc/themes/classic/account.inc:61 +#: ../../../../inc/themes/material-blue/account.inc:72 msgid "URL o IP de acceso" msgstr "URL ou IP d'accès" # "Access user" -#: ../../../../inc/tpl/accounts.php:238 +#: ../../../../inc/themes/classic/account.inc:73 +#: ../../../../inc/themes/material-blue/account.inc:86 msgid "Usuario de acceso" msgstr "Utilisateur d'accès" +# "Password (repeat)" +#: ../../../../inc/themes/classic/account.inc:90 +#: ../../../../inc/themes/classic/editpass.inc:32 +#: ../../../../inc/themes/classic/users.inc:83 +#: ../../../../inc/themes/classic/userspass.inc:19 +#: ../../../../inc/themes/classic/userspass.inc:21 +#: ../../../../inc/themes/material-blue/account.inc:105 +#: ../../../../inc/themes/material-blue/editpass.inc:36 +#: ../../../../inc/themes/material-blue/install.inc:64 +#: ../../../../inc/themes/material-blue/users.inc:102 +#: ../../../../inc/themes/material-blue/users.inc:109 +#: ../../../../inc/themes/material-blue/userspass.inc:19 +#: ../../../../inc/themes/material-blue/userspass.inc:25 +msgid "Clave (repetir)" +msgstr "Mot de passe (répéter)" + +# "Notes" +#: ../../../../inc/themes/classic/account.inc:97 +#: ../../../../inc/themes/classic/search.inc:75 +#: ../../../../inc/themes/classic/users.inc:91 +#: ../../../../inc/themes/material-blue/account.inc:116 +#: ../../../../inc/themes/material-blue/search.inc:82 +#: ../../../../inc/themes/material-blue/users.inc:116 +msgid "Notas" +msgstr "Notes" + # "Notes about the account" -#: ../../../../inc/tpl/accounts.php:271 +#: ../../../../inc/themes/classic/account.inc:99 +#: ../../../../inc/themes/material-blue/account.inc:121 +#: ../../../../inc/themes/material-blue/users.inc:123 msgid "Notas sobre la cuenta" msgstr "Notes sur le compte" # "Permissions" -#: ../../../../inc/tpl/accounts.php:277 +#: ../../../../inc/themes/classic/account.inc:105 +#: ../../../../inc/themes/material-blue/account.inc:130 +#: ../../../../inc/themes/material-blue/search.inc:75 msgid "Permisos" msgstr "Permissions" # "Enable Edit" -#: ../../../../inc/tpl/accounts.php:304 ../../../../inc/tpl/accounts.php:335 +#: ../../../../inc/themes/classic/account.inc:132 +#: ../../../../inc/themes/classic/account.inc:163 +#: ../../../../inc/themes/material-blue/account.inc:159 +#: ../../../../inc/themes/material-blue/account.inc:191 msgid "Hablitar edición" msgstr "Activer l'Edition" # "Drop files here (max. 5) or click to select" -#: ../../../../inc/tpl/accounts.php:371 +#: ../../../../inc/themes/classic/account.inc:201 +#: ../../../../inc/themes/material-blue/account.inc:243 msgid "Soltar archivos aquí (max. 5) o click para seleccionar" msgstr "Déposer les fichier ici (max. 5) ou cliquez pour les sélectionner" # "Maximum file size" -#: ../../../../inc/tpl/accounts.php:371 ../../../../inc/tpl/config.php:193 +#: ../../../../inc/themes/classic/account.inc:201 +#: ../../../../inc/themes/classic/config.inc:193 +#: ../../../../inc/themes/material-blue/account.inc:243 +#: ../../../../inc/themes/material-blue/config.inc:274 msgid "Tamaño máximo de archivo" msgstr "Taille maximale de fichier" # "History" -#: ../../../../inc/tpl/accounts.php:383 +#: ../../../../inc/themes/classic/account.inc:213 +#: ../../../../inc/themes/material-blue/account.inc:255 msgid "Historial" msgstr "Historique" # "Select date" -#: ../../../../inc/tpl/accounts.php:398 +#: ../../../../inc/themes/classic/account.inc:232 +#: ../../../../inc/themes/material-blue/account.inc:274 msgid "Seleccionar fecha" msgstr "Sélectionner date" # "Last Modification" -#: ../../../../inc/tpl/accounts.php:405 ../../../../inc/tpl/users.php:183 +#: ../../../../inc/themes/classic/account.inc:241 +#: ../../../../inc/themes/classic/users.inc:164 +#: ../../../../inc/themes/material-blue/account.inc:283 +#: ../../../../inc/themes/material-blue/users.inc:208 msgid "Última Modificación" msgstr "Dernière modification" # "by" -#: ../../../../inc/tpl/accounts.php:407 +#: ../../../../inc/themes/classic/account.inc:243 +#: ../../../../inc/themes/material-blue/account.inc:285 msgid "por" msgstr "par" # "Visits" -#: ../../../../inc/tpl/accounts.php:417 +#: ../../../../inc/themes/classic/account.inc:286 +#: ../../../../inc/themes/material-blue/account.inc:332 msgid "Visitas" msgstr "Visites" # "Date Added" -#: ../../../../inc/tpl/accounts.php:421 +#: ../../../../inc/themes/classic/account.inc:290 +#: ../../../../inc/themes/material-blue/account.inc:336 msgid "Fecha Alta" msgstr "Date Ajoutée" # "Creator" -#: ../../../../inc/tpl/accounts.php:425 +#: ../../../../inc/themes/classic/account.inc:294 +#: ../../../../inc/themes/material-blue/account.inc:340 msgid "Creador" msgstr "Créateur" # "Main Group" -#: ../../../../inc/tpl/accounts.php:429 +#: ../../../../inc/themes/classic/account.inc:298 +#: ../../../../inc/themes/material-blue/account.inc:200 +#: ../../../../inc/themes/material-blue/account.inc:344 msgid "Grupo Principal" msgstr "Groupe Principal" # "Secondary Users" -#: ../../../../inc/tpl/accounts.php:434 +#: ../../../../inc/themes/classic/account.inc:303 +#: ../../../../inc/themes/material-blue/account.inc:349 msgid "Usuarios Secundarios" msgstr "Utilisateur Secondaires" # "Secondary Groups" -#: ../../../../inc/tpl/accounts.php:455 +#: ../../../../inc/themes/classic/account.inc:322 +#: ../../../../inc/themes/material-blue/account.inc:368 msgid "Grupos Secundarios" msgstr "Groupes Secondaires" # "Date Modified" -#: ../../../../inc/tpl/accounts.php:477 +#: ../../../../inc/themes/classic/account.inc:342 +#: ../../../../inc/themes/material-blue/account.inc:388 msgid "Fecha Edición" msgstr "Date Modifiée" # "Editor" -#: ../../../../inc/tpl/accounts.php:481 +#: ../../../../inc/themes/classic/account.inc:346 +#: ../../../../inc/themes/material-blue/account.inc:392 msgid "Editor" msgstr "Editeur" -# "View Current" -#: ../../../../inc/tpl/accounts.php:503 -msgid "Ver Actual" -msgstr "Voir Actuel" - # "Restore account from this point" -#: ../../../../inc/tpl/accounts.php:515 +#: ../../../../inc/themes/classic/account.inc:373 +#: ../../../../inc/themes/material-blue/account.inc:455 msgid "Restaurar cuenta desde este punto" msgstr "Restaurer les comptes à partir de ce point" +# "Copy Password to Clipboard" +#: ../../../../inc/themes/classic/account.inc:385 +#: ../../../../inc/themes/classic/account.inc:468 +#: ../../../../inc/themes/classic/search.inc:105 +#: ../../../../inc/themes/classic/search.inc:184 +#: ../../../../inc/themes/material-blue/account.inc:422 +#: ../../../../inc/themes/material-blue/account.inc:492 +#: ../../../../inc/themes/material-blue/search.inc:118 +#: ../../../../inc/themes/material-blue/search.inc:197 +msgid "Copiar Clave en Portapapeles" +msgstr "Copier le mot de passe dans le presse papier" + +# "View Current" +#: ../../../../inc/themes/classic/account.inc:401 +#: ../../../../inc/themes/material-blue/account.inc:435 +msgid "Ver Actual" +msgstr "Voir Actuel" + +# "Back" +#: ../../../../inc/themes/classic/account.inc:406 +#: ../../../../inc/themes/classic/editpass.inc:46 +#: ../../../../inc/themes/classic/passreset.inc:46 +#: ../../../../inc/themes/material-blue/passreset.inc:43 +msgid "Volver" +msgstr "Retour" + +# "Edit Account" +#: ../../../../inc/themes/classic/account.inc:413 +#: ../../../../inc/themes/classic/search.inc:117 +#: ../../../../inc/themes/material-blue/account.inc:445 +#: ../../../../inc/themes/material-blue/search.inc:130 +msgid "Modificar Cuenta" +msgstr "Modifier Compte" + +# "Request Modification" +#: ../../../../inc/themes/classic/account.inc:418 +#: ../../../../inc/themes/classic/search.inc:138 +#: ../../../../inc/themes/material-blue/account.inc:449 +#: ../../../../inc/themes/material-blue/search.inc:150 +msgid "Solicitar Modificación" +msgstr "Demande Modification" + +# "Save" +#: ../../../../inc/themes/classic/account.inc:425 +#: ../../../../inc/themes/classic/categories.inc:62 +#: ../../../../inc/themes/classic/config.inc:275 +#: ../../../../inc/themes/classic/customers.inc:62 +#: ../../../../inc/themes/classic/customfields.inc:63 +#: ../../../../inc/themes/classic/editpass.inc:51 +#: ../../../../inc/themes/classic/encryption.inc:102 +#: ../../../../inc/themes/classic/groups.inc:77 +#: ../../../../inc/themes/classic/ldap.inc:229 +#: ../../../../inc/themes/classic/mail.inc:107 +#: ../../../../inc/themes/classic/profiles.inc:168 +#: ../../../../inc/themes/classic/security.inc:58 +#: ../../../../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:461 +#: ../../../../inc/themes/material-blue/categories.inc:72 +#: ../../../../inc/themes/material-blue/config.inc:390 +#: ../../../../inc/themes/material-blue/customers.inc:73 +#: ../../../../inc/themes/material-blue/customfields.inc:74 +#: ../../../../inc/themes/material-blue/editpass.inc:60 +#: ../../../../inc/themes/material-blue/groups.inc:88 +#: ../../../../inc/themes/material-blue/ldap.inc:257 +#: ../../../../inc/themes/material-blue/mail.inc:145 +#: ../../../../inc/themes/material-blue/profiles.inc:177 +#: ../../../../inc/themes/material-blue/security.inc:64 +#: ../../../../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" + # "Select secondary groups" -#: ../../../../inc/tpl/accounts.php:582 +#: ../../../../inc/themes/classic/account.inc:435 +#: ../../../../inc/themes/material-blue/account.inc:471 msgid "Seleccionar grupos secundarios" msgstr "Sélectionner les groupes secondaires" # "Select users" -#: ../../../../inc/tpl/accounts.php:585 +#: ../../../../inc/themes/classic/account.inc:439 +#: ../../../../inc/themes/material-blue/account.inc:474 msgid "Seleccionar usuarios" msgstr "Sélectionner utilisateurs" +# "Password Copied to Clipboard" +#: ../../../../inc/themes/classic/account.inc:472 +#: ../../../../inc/themes/classic/search.inc:188 +#: ../../../../inc/themes/material-blue/account.inc:496 +#: ../../../../inc/themes/material-blue/search.inc:201 +msgid "Clave Copiada al Portapapeles" +msgstr "Mot de passe copié dans le presse papier" + +# "Result" +#: ../../../../inc/themes/classic/backup.inc:10 +#: ../../../../inc/themes/classic/backup.inc:67 +#: ../../../../inc/themes/material-blue/backup.inc:10 +#: ../../../../inc/themes/material-blue/backup.inc:71 +msgid "Resultado" +msgstr "Resultat" + +# "Download Current" +#: ../../../../inc/themes/classic/backup.inc:18 +#: ../../../../inc/themes/classic/backup.inc:75 +#: ../../../../inc/themes/material-blue/backup.inc:18 +#: ../../../../inc/themes/material-blue/backup.inc:79 +msgid "Descargar Actual" +msgstr "Télécharger l'élément actuel" + +# "There are no backups for download" +#: ../../../../inc/themes/classic/backup.inc:31 +#: ../../../../inc/themes/material-blue/backup.inc:31 +msgid "No hay backups para descargar" +msgstr "Il n'y a pas de sauvegarde à télécharger" + +#: ../../../../inc/themes/classic/backup.inc:45 +#: ../../../../inc/themes/classic/backup.inc:49 +#: ../../../../inc/themes/classic/backup.inc:113 +#: ../../../../inc/themes/classic/backup.inc:117 +#: ../../../../inc/themes/classic/encryption.inc:93 +#: ../../../../inc/themes/classic/encryption.inc:97 +#: ../../../../inc/themes/classic/encryption.inc:152 +#: ../../../../inc/themes/classic/encryption.inc:156 +#: ../../../../inc/themes/classic/import.inc:15 +#: ../../../../inc/themes/classic/import.inc:37 +#: ../../../../inc/themes/classic/import.inc:51 +#: ../../../../inc/themes/classic/import.inc:97 +#: ../../../../inc/themes/classic/import.inc:118 +#: ../../../../inc/themes/classic/import.inc:170 +#: ../../../../inc/themes/classic/import.inc:174 +#: ../../../../inc/themes/classic/js-common.inc:13 +#: ../../../../inc/themes/classic/ldap.inc:13 +#: ../../../../inc/themes/classic/ldap.inc:33 +#: ../../../../inc/themes/classic/ldap.inc:58 +#: ../../../../inc/themes/classic/ldap.inc:82 +#: ../../../../inc/themes/classic/ldap.inc:93 +#: ../../../../inc/themes/classic/ldap.inc:117 +#: ../../../../inc/themes/classic/ldap.inc:145 +#: ../../../../inc/themes/classic/ldap.inc:166 +#: ../../../../inc/themes/classic/ldap.inc:187 +#: ../../../../inc/themes/classic/wiki.inc:12 +#: ../../../../inc/themes/classic/wiki.inc:28 +#: ../../../../inc/themes/classic/wiki.inc:55 +#: ../../../../inc/themes/classic/wiki.inc:82 +#: ../../../../inc/themes/material-blue/backup.inc:47 +#: ../../../../inc/themes/material-blue/backup.inc:51 +#: ../../../../inc/themes/material-blue/backup.inc:129 +#: ../../../../inc/themes/material-blue/backup.inc:133 +#: ../../../../inc/themes/material-blue/encryption.inc:107 +#: ../../../../inc/themes/material-blue/encryption.inc:111 +#: ../../../../inc/themes/material-blue/encryption.inc:171 +#: ../../../../inc/themes/material-blue/encryption.inc:175 +#: ../../../../inc/themes/material-blue/import.inc:99 +#: ../../../../inc/themes/material-blue/import.inc:103 +#: ../../../../inc/themes/material-blue/js-common.inc:11 +#, fuzzy +msgid "Ayuda" +msgstr "Aide :: FAQ :: Changelog" + +#: ../../../../inc/themes/classic/backup.inc:50 +#: ../../../../inc/themes/material-blue/backup.inc:52 +msgid "La copia de seguridad permite guardar y descargar tanto la base de datos de sysPass como los archivos de la aplicación y su configuración." +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:52 +#: ../../../../inc/themes/material-blue/backup.inc:54 +msgid "Con este método es posible guardar todos los datos de sysPass en otro lugar o utilizarlos para hacer la aplicación portable." +msgstr "" + +# "Import Accounts" +#: ../../../../inc/themes/classic/backup.inc:60 +#: ../../../../inc/themes/classic/backup.inc:126 +#: ../../../../inc/themes/material-blue/backup.inc:64 +#, fuzzy +msgid "Exportar Cuentas" +msgstr "Comptes" + +# "There are no backups for download" +#: ../../../../inc/themes/classic/backup.inc:84 +#: ../../../../inc/themes/material-blue/backup.inc:88 +#, fuzzy +msgid "No hay archivos XML para descargar" +msgstr "Il n'y a pas de sauvegarde à télécharger" + +# "Bind Password" +#: ../../../../inc/themes/classic/backup.inc:90 +#: ../../../../inc/themes/material-blue/backup.inc:94 +#: ../../../../inc/themes/material-blue/backup.inc:101 +#, fuzzy +msgid "Clave de Exportación" +msgstr "Changer mot de passe utilisateur" + +# "Password (repeat)" +#: ../../../../inc/themes/classic/backup.inc:98 +#: ../../../../inc/themes/material-blue/backup.inc:107 +#: ../../../../inc/themes/material-blue/backup.inc:114 +#, fuzzy +msgid "Clave de Exportación (repetir)" +msgstr "Mot de passe (répéter)" + +#: ../../../../inc/themes/classic/backup.inc:118 +#: ../../../../inc/themes/material-blue/backup.inc:134 +msgid "La exportación de cuentas permite guardar las cuentas y sus datos en formato XML para posteriormente poder ser importados en otras instancias de sysPass." +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:120 +#: ../../../../inc/themes/material-blue/backup.inc:136 +msgid "Los elementos exportados son cuentas, clientes y categorías." +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:122 +#: ../../../../inc/themes/material-blue/backup.inc:138 +msgid "Las claves de las cuentas son exportadas de forma encriptada para mayor seguridad." +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:124 +#: ../../../../inc/themes/material-blue/backup.inc:140 +msgid "Es posible establecer una clave de exportación para guardar todos los datos encriptados en el archivo XML." +msgstr "" + +# "Javascript is needed in order to run correctly" +#: ../../../../inc/themes/classic/body.inc:4 +#: ../../../../inc/themes/material-blue/body.inc:4 +msgid "Javascript es necesario para el correcto funcionamiento" +msgstr "Javascript est requis pour fonctionner correctement" + # "Category name" -#: ../../../../inc/tpl/categories.php:41 +#: ../../../../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" # "Category description" -#: ../../../../inc/tpl/categories.php:47 +#: ../../../../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" # "Site" -#: ../../../../inc/tpl/config.php:84 +#: ../../../../inc/themes/classic/config.inc:4 +#: ../../../../inc/themes/material-blue/config.inc:4 msgid "Sitio" msgstr "Site" # "Language" -#: ../../../../inc/tpl/config.php:92 +#: ../../../../inc/themes/classic/config.inc:10 +#: ../../../../inc/themes/material-blue/config.inc:11 msgid "Idioma" msgstr "Langage" +#: ../../../../inc/themes/classic/config.inc:21 +#: ../../../../inc/themes/material-blue/config.inc:22 +msgid "Tema Visual" +msgstr "" + # "Session timeout (s)" -#: ../../../../inc/tpl/config.php:106 +#: ../../../../inc/themes/classic/config.inc:33 +#: ../../../../inc/themes/material-blue/config.inc:34 +#: ../../../../inc/themes/material-blue/config.inc:42 msgid "Timeout de sesión (s)" msgstr "Timeout de session (s)" # "Enable event log" -#: ../../../../inc/tpl/config.php:114 +#: ../../../../inc/themes/classic/config.inc:42 +#: ../../../../inc/themes/material-blue/config.inc:48 msgid "Habilitar log de eventos" msgstr "Active le journal des évènements" +# "It saves the actions done by the application." +#: ../../../../inc/themes/classic/config.inc:46 +#: ../../../../inc/themes/material-blue/config.inc:52 +#, fuzzy +msgid "Guarda las acciones realizadas en la aplicación." +msgstr "Sauvegarde les actions effectuées par l'application" + # "Enable debug" -#: ../../../../inc/tpl/config.php:124 +#: ../../../../inc/themes/classic/config.inc:58 +#: ../../../../inc/themes/material-blue/config.inc:66 msgid "Habilitar depuración" msgstr "Activer le mode debug" +# "Shows some information about application and performance." +#: ../../../../inc/themes/classic/config.inc:62 +#: ../../../../inc/themes/material-blue/config.inc:70 +#, fuzzy +msgid "Muestra información relativa a la configuración de la aplicación y rendimiento." +msgstr "Affiche quelques informations à propos de l'application et de ces performances" + # "Maintenance mode" -#: ../../../../inc/tpl/config.php:134 +#: ../../../../inc/themes/classic/config.inc:74 +#: ../../../../inc/themes/material-blue/config.inc:84 msgid "Modo mantenimiento" msgstr "Mode maintenance" +# "" +#: ../../../../inc/themes/classic/config.inc:78 +#: ../../../../inc/themes/material-blue/config.inc:88 +#, fuzzy +msgid "En este modo no se puede acceder a la aplicación. Para deshabilitarlo es necesario modificar el archivo de configuración." +msgstr "Dans ce mode, vous ne pouvez pas accéder à l'application. Pour pouvoir le faire, vous devez modifier le fichier de configuration." + # "Check for updates" -#: ../../../../inc/tpl/config.php:144 +#: ../../../../inc/themes/classic/config.inc:90 +#: ../../../../inc/themes/material-blue/config.inc:102 msgid "Comprobar actualizaciones" msgstr "Vérifier les mises à jour" +# "Check for application updates (only for administrators)." +#: ../../../../inc/themes/classic/config.inc:94 +#: ../../../../inc/themes/material-blue/config.inc:106 +#, fuzzy +msgid "Comprobar actualizaciones de la aplicación (sólo para los usuarios administradores)." +msgstr "Vérifier les mises à jour de l'application (Administrateurs seulement)" + +# "Check for updates" +#: ../../../../inc/themes/classic/config.inc:106 +#: ../../../../inc/themes/material-blue/config.inc:120 +#, fuzzy +msgid "Comprobar notificaciones" +msgstr "Vérifier" + +# "Check for application updates (only for administrators)." +#: ../../../../inc/themes/classic/config.inc:110 +#: ../../../../inc/themes/material-blue/config.inc:124 +#, fuzzy +msgid "Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo para los usuarios administradores)." +msgstr "Vérifier les mises à jour de l'application (Administrateurs seulement)" + # "Account name as link" -#: ../../../../inc/tpl/config.php:154 +#: ../../../../inc/themes/classic/config.inc:122 +#: ../../../../inc/themes/material-blue/config.inc:145 msgid "Nombre de cuenta como enlace" msgstr "Nom de compte comme lien" +# "" +#: ../../../../inc/themes/classic/config.inc:126 +#: ../../../../inc/themes/material-blue/config.inc:149 +#, fuzzy +msgid "Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles de la cuenta." +msgstr "Active le nom du compte comme lien pour les détails du compte dans la page de recherche" + # "Files management" -#: ../../../../inc/tpl/config.php:164 +#: ../../../../inc/themes/classic/config.inc:138 +#: ../../../../inc/themes/material-blue/config.inc:232 msgid "Gestión de archivos" msgstr "Gestion des fichiers" +# "It enables upload/download the accounts' files" +#: ../../../../inc/themes/classic/config.inc:142 +#: ../../../../inc/themes/material-blue/config.inc:236 +#, fuzzy +msgid "Habilita la subida/descarga de archivos para las cuentas." +msgstr "Active le Chargement/Téléchargement des fichiers de comptes" + # "Global searches" -#: ../../../../inc/tpl/config.php:174 +#: ../../../../inc/themes/classic/config.inc:154 +#: ../../../../inc/themes/material-blue/config.inc:164 msgid "Búsquedas globales" msgstr "Recherches globales" +#: ../../../../inc/themes/classic/config.inc:158 +#: ../../../../inc/themes/material-blue/config.inc:168 +msgid "Permite que todos los usuarios puedan realizar búsquedas en todas las cuentas, pero no pueden ver el contenido de las que no tienen permisos." +msgstr "" + # "Allowed file extensions" -#: ../../../../inc/tpl/config.php:184 +#: ../../../../inc/themes/classic/config.inc:170 +#: ../../../../inc/themes/material-blue/config.inc:251 msgid "Extensiones de archivos permitidas" msgstr "Extensions de fichiers permises" +# Drag&Drop for files uploading +#: ../../../../inc/themes/classic/config.inc:174 +#: ../../../../inc/themes/material-blue/config.inc:255 +#, fuzzy +msgid "Extensiones permitidas para la subida de archivos." +msgstr "Active le Chargement/Téléchargement des fichiers de comptes" + +# "Extensions max length is 4 characters." +#: ../../../../inc/themes/classic/config.inc:178 +#: ../../../../inc/themes/material-blue/config.inc:259 +#, fuzzy +msgid "Se permite un máximo de 4 caracteres." +msgstr "Extensions de 4 caractères maxi" + +# "Write extension and press enter to add." +#: ../../../../inc/themes/classic/config.inc:182 +#: ../../../../inc/themes/material-blue/config.inc:263 +#, fuzzy +msgid "Escribir extensión y pulsar intro para añadir. Es necesario guardar la configuración." +msgstr "Ecrire l'extension puis pressez Entrée pour ajouter." + +# "Sets up the max upload file size." +#: ../../../../inc/themes/classic/config.inc:197 +#: ../../../../inc/themes/material-blue/config.inc:278 +#, fuzzy +msgid "Establece el tamaño máximo para subir archivos." +msgstr "Définir la taille maximale pour le chargement de fichier" + +# "The absolute maximum is 16MB." +#: ../../../../inc/themes/classic/config.inc:201 +#: ../../../../inc/themes/material-blue/config.inc:282 +#, fuzzy +msgid "El máximo absuluto es de 16MB." +msgstr "Le maximum absolue est de 16Mo." + # "Results per page" -#: ../../../../inc/tpl/config.php:202 +#: ../../../../inc/themes/classic/config.inc:212 +#: ../../../../inc/themes/material-blue/config.inc:183 msgid "Resultados por página" msgstr "Resultats par page" +# "Number of results that are shown per page when searching" +#: ../../../../inc/themes/classic/config.inc:216 +#: ../../../../inc/themes/material-blue/config.inc:187 +#, fuzzy +msgid "Número de resultados por página a mostrar, al realizar una búsqueda." +msgstr "Nombre de résultats affichés par page lors d'une recherche" + # "Results like Cards" -#: ../../../../inc/tpl/config.php:218 +#: ../../../../inc/themes/classic/config.inc:227 msgid "Resultados en Tarjetas" msgstr "Résultats format cartes" -# "Wiki" -#: ../../../../inc/tpl/config.php:230 -msgid "Wiki" -msgstr "Wiki" +# "Enables to show account's search results like a card format." +#: ../../../../inc/themes/classic/config.inc:231 +msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta." +msgstr "Active l'affichage des résultats de recherche comme format carte." -# "Enable Wiki links" -#: ../../../../inc/tpl/config.php:236 -msgid "Habilitar enlaces Wiki" -msgstr "Activer les liens Wiki" +#: ../../../../inc/themes/classic/config.inc:243 +#: ../../../../inc/themes/material-blue/config.inc:203 +#, fuzzy +msgid "Imagen para mostrar clave" +msgstr "Afficher Mot de passe" -# "Wiki search URL" -#: ../../../../inc/tpl/config.php:246 -msgid "URL de búsqueda Wiki" -msgstr "URL de recherche Wiki" +# "Error on retrieving accounts' passwords" +#: ../../../../inc/themes/classic/config.inc:247 +#: ../../../../inc/themes/material-blue/config.inc:207 +#, fuzzy +msgid "Generar una imagen con el texto de la clave de la cuenta." +msgstr "Erreur pendant la récupération des mot de passe des comptes" -# "Wiki page URL" -#: ../../../../inc/tpl/config.php:255 -msgid "URL de página en Wiki" -msgstr "URL de page Wiki" - -# "Account name preffix" -#: ../../../../inc/tpl/config.php:264 -msgid "Prefijo para nombre de cuenta" -msgstr "Préfix de nom de compte" - -# "LDAP" -#: ../../../../inc/tpl/config.php:276 -msgid "LDAP" -msgstr "LDAP" - -# "Enable LDAP" -#: ../../../../inc/tpl/config.php:283 -msgid "Habilitar LDAP" -msgstr "Activer l'annuaire LDAP" - -# "Server" -#: ../../../../inc/tpl/config.php:293 ../../../../inc/tpl/config.php:398 -msgid "Servidor" -msgstr "Serveur" - -# "Bind User" -#: ../../../../inc/tpl/config.php:302 -msgid "Usuario de conexión" -msgstr "Utilisateur de connexion" - -# "Bind Password" -#: ../../../../inc/tpl/config.php:311 -msgid "Clave de conexión" -msgstr "Mot de passe de connexion" - -# "Search base" -#: ../../../../inc/tpl/config.php:320 -msgid "Base de búsqueda" -msgstr "Base de recherche" - -# "Default Group" -#: ../../../../inc/tpl/config.php:338 -msgid "Grupo por Defecto" -msgstr "Groupe par défaut" - -# "Default Profile" -#: ../../../../inc/tpl/config.php:347 -msgid "Perfil por Defecto" -msgstr "Profil par défaut" - -# "Active Directory" -#: ../../../../inc/tpl/config.php:356 -msgid "Active Directory" -msgstr "Active Directory" - -# "Check" -#: ../../../../inc/tpl/config.php:366 -msgid "Comprobar" -msgstr "Vérifier" - -# "Check LDAP connection" -#: ../../../../inc/tpl/config.php:369 -msgid "Comprobar conexión con LDAP" -msgstr "Vérifier les connexions LDAP" - -# "Mail" -#: ../../../../inc/tpl/config.php:383 -msgid "Correo" -msgstr "Courriel" - -# "Enable email notifications" -#: ../../../../inc/tpl/config.php:389 -msgid "Habilitar notificaciones de correo" -msgstr "Activer les notifications par courriel" - -# "Port" -#: ../../../../inc/tpl/config.php:406 -msgid "Puerto" -msgstr "Port" - -# "Enable Authentication" -#: ../../../../inc/tpl/config.php:414 -msgid "Habilitar Autentificación" -msgstr "Activer l'authentification" - -# "Security" -#: ../../../../inc/tpl/config.php:439 -msgid "Seguridad" -msgstr "Sécurité" - -# "Disabled" -#: ../../../../inc/tpl/config.php:445 -msgid "Deshabilitada" -msgstr "Désactivé" - -# "Recipient email address" -#: ../../../../inc/tpl/config.php:456 -msgid "Dirección de correo de envío" -msgstr "Adresse courriel du destinataire" - -# "Enable requests by email" -#: ../../../../inc/tpl/config.php:464 -msgid "Habilitar peticiones por correo" -msgstr "Activer les demandes par courriel" +#: ../../../../inc/themes/classic/config.inc:250 +#: ../../../../inc/themes/material-blue/config.inc:210 +msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad." +msgstr "" # "Add extension" -#: ../../../../inc/tpl/config.php:507 +#: ../../../../inc/themes/classic/config.inc:285 +#: ../../../../inc/themes/material-blue/config.inc:400 msgid "Añadir extensión" msgstr "Ajouter extension" # "Delete extension" -#: ../../../../inc/tpl/config.php:508 +#: ../../../../inc/themes/classic/config.inc:286 +#: ../../../../inc/themes/material-blue/config.inc:401 msgid "Eliminar extensión" msgstr "Supprimer extension" -# "Add filter" -#: ../../../../inc/tpl/config.php:536 -msgid "Añadir filtro" -msgstr "Ajouter filtre" +# "Customer name" +#: ../../../../inc/themes/classic/customers.inc:10 +#: ../../../../inc/themes/material-blue/customers.inc:14 +msgid "Nombre del cliente" +msgstr "Nom du client" -# "Delete filter" -#: ../../../../inc/tpl/config.php:537 -msgid "Eliminar filtro" -msgstr "Supprimer filtre" +# "Customer description" +#: ../../../../inc/themes/classic/customers.inc:18 +#: ../../../../inc/themes/material-blue/customers.inc:26 +msgid "Descripción del cliente" +msgstr "Description du client" -# "Select Group" -#: ../../../../inc/tpl/config.php:565 ../../../../inc/tpl/users.php:223 -msgid "Seleccionar Grupo" -msgstr "Sélectionner Groupe" +# "Text to search" +#: ../../../../inc/themes/classic/customfields.inc:38 +#: ../../../../inc/themes/material-blue/customfields.inc:41 +#, fuzzy +msgid "Texto Ayuda" +msgstr "Text à chercher" -# "Select Profile" -#: ../../../../inc/tpl/config.php:570 ../../../../inc/tpl/users.php:218 -msgid "Seleccionar Perfil" -msgstr "Sélectionner Profil" +#: ../../../../inc/themes/classic/customfields.inc:44 +#: ../../../../inc/themes/material-blue/customfields.inc:52 +msgid "Obligatorio" +msgstr "" -# "Full username" -#: ../../../../inc/tpl/users.php:71 -msgid "Nombre de usuario completo" -msgstr "Nom complet d'utilisateur" +# "Master Password" +#: ../../../../inc/themes/classic/encryption.inc:8 +#: ../../../../inc/themes/classic/install.inc:46 +#: ../../../../inc/themes/classic/install.inc:50 +#: ../../../../inc/themes/classic/install.inc:51 +#: ../../../../inc/themes/classic/login.inc:15 +#: ../../../../inc/themes/classic/login.inc:27 +#: ../../../../inc/themes/material-blue/encryption.inc:8 +#: ../../../../inc/themes/material-blue/install.inc:49 +#: ../../../../inc/themes/material-blue/install.inc:56 +#: ../../../../inc/themes/material-blue/login.inc:24 +#: ../../../../inc/themes/material-blue/login.inc:46 +msgid "Clave Maestra" +msgstr "Mot de passe Maître" -# "Session login" -#: ../../../../inc/tpl/users.php:85 -msgid "Login de inicio de sesión" -msgstr "Login de début de session" +# "Last Change" +#: ../../../../inc/themes/classic/encryption.inc:16 +#: ../../../../inc/themes/classic/encryption.inc:116 +#: ../../../../inc/themes/material-blue/encryption.inc:16 +#: ../../../../inc/themes/material-blue/encryption.inc:131 +msgid "Último cambio" +msgstr "Dernier changement" -# "Email address" -#: ../../../../inc/tpl/users.php:117 -msgid "Dirección de correo" -msgstr "Adresse courriel" +# "Current Master Password" +#: ../../../../inc/themes/classic/encryption.inc:25 +#: ../../../../inc/themes/material-blue/encryption.inc:25 +#: ../../../../inc/themes/material-blue/encryption.inc:31 +msgid "Clave Maestra actual" +msgstr "Mot de passe Maître actuel" -# "Options" -#: ../../../../inc/tpl/users.php:154 -msgid "Opciones" -msgstr "Options" +# "New Master Password" +#: ../../../../inc/themes/classic/encryption.inc:34 +#: ../../../../inc/themes/material-blue/encryption.inc:37 +#: ../../../../inc/themes/material-blue/encryption.inc:43 +msgid "Nueva Clave Maestra" +msgstr "Nouveau Mot de passe Maître" -# "Application administrator" -#: ../../../../inc/tpl/users.php:158 -msgid "Administrador de la aplicación" -msgstr "Administrateur de l'application" +# "New Master Password (repeat)" +#: ../../../../inc/themes/classic/encryption.inc:43 +#: ../../../../inc/themes/material-blue/encryption.inc:49 +#: ../../../../inc/themes/material-blue/encryption.inc:55 +msgid "Nueva Clave Maestra (repetir)" +msgstr "Nouveau Mot de passe Maître (répéter)" -# "Application Admin" -#: ../../../../inc/tpl/users.php:158 -msgid "Admin. Aplicación" -msgstr "Admin. Application" +# "Do not modify accounts" +#: ../../../../inc/themes/classic/encryption.inc:51 +#: ../../../../inc/themes/material-blue/encryption.inc:61 +msgid "No modificar cuentas" +msgstr "Ne pas modifier les comptes" -# "Accounts administrator" -#: ../../../../inc/tpl/users.php:160 -msgid "Administrador de cuentas" -msgstr "Administrateur des comptes" +# "Sets a new master password without re-encrypting the accounts." +#: ../../../../inc/themes/classic/encryption.inc:56 +#: ../../../../inc/themes/material-blue/encryption.inc:66 +msgid "Establece una nueva clave maestra sin re-encriptar las cuentas" +msgstr "Définir un nouveau mot de passe maître sans ré-encrypter les comptes" -# "Accounts Admin" -#: ../../../../inc/tpl/users.php:160 -msgid "Admin. Cuentas" -msgstr "Admin. Comptes" +# "Confirm Change" +#: ../../../../inc/themes/classic/encryption.inc:67 +#: ../../../../inc/themes/material-blue/encryption.inc:79 +msgid "Confirmar cambio" +msgstr "Confirmer changement" -# "Force password change" -#: ../../../../inc/tpl/users.php:166 -msgid "Forzar cambio de clave" -msgstr "Forcer le changement de Mot de passe" +# "Warning" +#: ../../../../inc/themes/classic/encryption.inc:70 +#: ../../../../inc/themes/classic/encryption.inc:73 +#: ../../../../inc/themes/classic/encryption.inc:76 +#: ../../../../inc/themes/classic/import.inc:67 +#: ../../../../inc/themes/classic/security.inc:43 +msgid "Atención" +msgstr "Attention" -# "Entries" -#: ../../../../inc/tpl/users.php:173 -msgid "Entradas" -msgstr "Entrées" +# "You should save the new password on a secure place" +#: ../../../../inc/themes/classic/encryption.inc:71 +#: ../../../../inc/themes/material-blue/encryption.inc:83 +msgid "Guarde la nueva clave en un lugar seguro." +msgstr "Vous devriez sauvegarder le mot de passe dans un endroit sûre" -# "Last Access" -#: ../../../../inc/tpl/users.php:178 -msgid "Último Acceso" -msgstr "Dernier Accès" +# "All accounts passwords will be encrypted again." +#: ../../../../inc/themes/classic/encryption.inc:74 +#: ../../../../inc/themes/material-blue/encryption.inc:86 +msgid "Se volverán a encriptar las claves de todas las cuentas." +msgstr "Tous les mots de passe des comptes seront encryptés de nouveau." -# "Master Password Date" -#: ../../../../inc/tpl/users.php:188 -msgid "Fecha Clave Maestra" -msgstr "Date du Mot de passe Maître" +# "Users will need to enter the new master key." +#: ../../../../inc/themes/classic/encryption.inc:77 +#: ../../../../inc/themes/material-blue/encryption.inc:89 +msgid "Los usuarios deberán de introducir la nueva clave maestra." +msgstr "Les utilisateurs devront saisir un nouveau mot de passe maître." -# "DB Update" -#: ../../../../inc/tpl/upgrade.php:42 -msgid "Actualización de BBDD" -msgstr "Actualisation de la BDD" +#: ../../../../inc/themes/classic/encryption.inc:98 +#: ../../../../inc/themes/material-blue/encryption.inc:112 +msgid "La clave maestra es utilizada para encriptar las claves de las cuentas de sysPass para mantenerlas seguras." +msgstr "" -# "Enter Security Code" -#: ../../../../inc/tpl/upgrade.php:44 -msgid "Introducir Código de Seguridad" -msgstr "Saisir le code de sécurité" +#: ../../../../inc/themes/classic/encryption.inc:100 +#: ../../../../inc/themes/material-blue/encryption.inc:114 +msgid "Es recomendable cambiarla cada cierto tiempo y utilizar una clave compleja que incluya números, letras y símbolos." +msgstr "" -# "Security Code" -#: ../../../../inc/tpl/upgrade.php:45 -msgid "Código de Seguridad" -msgstr "code de sécurité" +# "Master Password" +#: ../../../../inc/themes/classic/encryption.inc:108 +#: ../../../../inc/themes/material-blue/encryption.inc:124 +#, fuzzy +msgid "Clave Temporal" +msgstr "Mot de passe Maître" -# "Start Update" -#: ../../../../inc/tpl/upgrade.php:55 -msgid "Iniciar Actualización" -msgstr "Démarrer la mise à jour" +# "Generated Password" +#: ../../../../inc/themes/classic/encryption.inc:119 +#: ../../../../inc/themes/classic/encryption.inc:130 +#: ../../../../inc/themes/material-blue/encryption.inc:134 +#: ../../../../inc/themes/material-blue/encryption.inc:145 +#, fuzzy +msgid "No generada" +msgstr "Mot de passe généré" + +#: ../../../../inc/themes/classic/encryption.inc:124 +#: ../../../../inc/themes/material-blue/encryption.inc:139 +msgid "Válido hasta" +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:136 +#: ../../../../inc/themes/material-blue/encryption.inc:151 +#: ../../../../inc/themes/material-blue/encryption.inc:157 +#, fuzzy +msgid "Validez (s)" +msgstr "Timeout de session (s)" + +#: ../../../../inc/themes/classic/encryption.inc:139 +msgid "Validez" +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:157 +#: ../../../../inc/themes/material-blue/encryption.inc:176 +msgid "La clave temporal es utilizada como clave maestra para los usuarios que necesitan introducirla al iniciar la sesión, así no es necesario facilitar la clave maestra original." +msgstr "" + +# "General" +#: ../../../../inc/themes/classic/encryption.inc:159 +#: ../../../../inc/themes/material-blue/encryption.inc:180 +#, fuzzy +msgid "Generar" +msgstr "Générer un mot de passe aléatoire" + +# "No records found" +#: ../../../../inc/themes/classic/eventlog.inc:8 +#: ../../../../inc/themes/classic/search.inc:5 +#: ../../../../inc/themes/material-blue/eventlog.inc:7 +#: ../../../../inc/themes/material-blue/search.inc:3 +msgid "No se encontraron registros" +msgstr "Aucun enregistrement trouvé" # "Date / Time" -#: ../../../../inc/tpl/eventlog.php:56 +#: ../../../../inc/themes/classic/eventlog.inc:19 +#: ../../../../inc/themes/material-blue/eventlog.inc:18 msgid "Fecha / Hora" msgstr "Date / Heure" # "Event" -#: ../../../../inc/tpl/eventlog.php:59 +#: ../../../../inc/themes/classic/eventlog.inc:22 +#: ../../../../inc/themes/material-blue/eventlog.inc:21 msgid "Evento" msgstr "Evènement" # "IP" -#: ../../../../inc/tpl/eventlog.php:65 +#: ../../../../inc/themes/classic/eventlog.inc:28 +#: ../../../../inc/themes/material-blue/eventlog.inc:27 msgid "IP" msgstr "IP" -#~ msgid "Borrar categoría" -#~ msgstr "Supprimer Catégorie" +# "First page" +#: ../../../../inc/themes/classic/eventlog.inc:86 +#: ../../../../inc/themes/classic/search.inc:161 +#: ../../../../inc/themes/material-blue/eventlog.inc:85 +#: ../../../../inc/themes/material-blue/search.inc:173 +msgid "Primera página" +msgstr "Première page" -#~ msgid "Categoría modificada" -#~ msgstr "Categorie modifiée" +# "Previous page" +#: ../../../../inc/themes/classic/eventlog.inc:88 +#: ../../../../inc/themes/classic/search.inc:163 +#: ../../../../inc/themes/material-blue/eventlog.inc:87 +#: ../../../../inc/themes/material-blue/search.inc:175 +msgid "Página anterior" +msgstr "Page précédante" -#~ msgid "Clave administrador BBDD" -#~ msgstr "Mot de passe administrateur BDD" +# "Next page" +#: ../../../../inc/themes/classic/eventlog.inc:93 +#: ../../../../inc/themes/classic/search.inc:168 +#: ../../../../inc/themes/material-blue/eventlog.inc:92 +#: ../../../../inc/themes/material-blue/search.inc:180 +msgid "Página siguiente" +msgstr "Page suivante" -#~ msgid "Clave maestra cambiada" -#~ msgstr "Mot de passe maître changé" +# "Last page" +#: ../../../../inc/themes/classic/eventlog.inc:95 +#: ../../../../inc/themes/classic/search.inc:170 +#: ../../../../inc/themes/material-blue/eventlog.inc:94 +#: ../../../../inc/themes/material-blue/search.inc:182 +msgid "Última página" +msgstr "Dernière page" -#~ msgid "Contacte con el administrador" -#~ msgstr "Veuillez contacter votre administrateur" +# "View File" +#: ../../../../inc/themes/classic/files.inc:22 +#: ../../../../inc/themes/material-blue/files.inc:21 +msgid "Ver Archivo" +msgstr "Voir Fichier" -#~ msgid "Copia BBDD" -#~ msgstr "Sauvegarde de la base de données" +# "Help :: FAQ :: Changelog" +#: ../../../../inc/themes/classic/footer.inc:10 +#: ../../../../inc/themes/material-blue/footer.inc:18 +msgid "Ayuda :: FAQ :: Changelog" +msgstr "Aide :: FAQ :: Changelog" -#~ msgid "DEMO" -#~ msgstr "DEMO" +# "A cygnux.org project" +#: ../../../../inc/themes/classic/footer.inc:13 +#: ../../../../inc/themes/material-blue/footer.inc:23 +msgid "Un proyecto de cygnux.org" +msgstr "Un projet cygnux.org" -#~ msgid "Descargar archivo" -#~ msgstr "Télécharger fichier" +# "Group name" +#: ../../../../inc/themes/classic/groups.inc:10 +#: ../../../../inc/themes/material-blue/groups.inc:14 +msgid "Nombre del grupo" +msgstr "Nom du groupe" -#~ msgid "ERROR EN LA CONSULTA" -#~ msgstr "ERREUR DE REQUETE" +# "Group description" +#: ../../../../inc/themes/classic/groups.inc:18 +#: ../../../../inc/themes/material-blue/groups.inc:26 +msgid "Descripción del grupo" +msgstr "Description du groupe" -#~ msgid "Eliminar" -#~ msgstr "Supprimer" +# "phpPMS Import" +#: ../../../../inc/themes/classic/import.inc:7 +#: ../../../../inc/themes/material-blue/import.inc:121 +msgid "Importar phpPMS" +msgstr "Importer phpPMS" -#~ msgid "Error al conectar con el usuario" -#~ msgstr "Erreur à la connexion avec l'utilisateur" +# "DB Username" +#: ../../../../inc/themes/classic/import.inc:14 +#: ../../../../inc/themes/classic/install.inc:63 +#: ../../../../inc/themes/classic/install.inc:64 +#: ../../../../inc/themes/material-blue/import.inc:128 +#: ../../../../inc/themes/material-blue/import.inc:140 +msgid "Usuario BBDD" +msgstr "Utilisateur BDD" -#~ msgid "Error al modificar la categoría" -#~ msgstr "Erreur pendant la modification de la catégorie" +# "Enter phpPMS database connection user" +#: ../../../../inc/themes/classic/import.inc:18 +#: ../../../../inc/themes/material-blue/import.inc:132 +#, fuzzy +msgid "Indicar el usuario de conexión a la base de datos de phpPMS." +msgstr "Saisir l'identifiant de connexion à la base de données phpPMS" -#~ msgid "Modificar categoría" -#~ msgstr "Modifier categorie" +# "DB Password" +#: ../../../../inc/themes/classic/import.inc:28 +#: ../../../../inc/themes/classic/install.inc:71 +#: ../../../../inc/themes/classic/install.inc:73 +#: ../../../../inc/themes/material-blue/import.inc:146 +#: ../../../../inc/themes/material-blue/import.inc:152 +msgid "Clave BBDD" +msgstr "Mot de passe BDD" -#~ msgid "No es posible crear el directorio de backups" -#~ msgstr "Impossible de créer le dossier de sauvegarde" +# "DB Name" +#: ../../../../inc/themes/classic/import.inc:36 +#: ../../../../inc/themes/classic/install.inc:78 +#: ../../../../inc/themes/classic/install.inc:79 +#: ../../../../inc/themes/material-blue/import.inc:158 +#: ../../../../inc/themes/material-blue/import.inc:170 +msgid "Nombre BBDD" +msgstr "Nom BDD" -#~ msgid "No es posible eliminar: Perfil en uso por" -#~ msgstr "Impossible à supprimer: Profil utilisé par" +# "Enter phpPMS database name" +#: ../../../../inc/themes/classic/import.inc:40 +#: ../../../../inc/themes/material-blue/import.inc:162 +#, fuzzy +msgid "Indicar el nombre de la base de datos de phpPMS." +msgstr "Saisir le nom de la base de données phpPMS" -#~ msgid "No es posible eliminar:Grupo en uso por" -#~ msgstr "Impossible à supprimer: Groupe utilisé par" +# "DB Server" +#: ../../../../inc/themes/classic/import.inc:50 +#: ../../../../inc/themes/classic/install.inc:87 +#: ../../../../inc/themes/classic/install.inc:88 +#: ../../../../inc/themes/material-blue/import.inc:176 +#: ../../../../inc/themes/material-blue/import.inc:188 +msgid "Servidor BBDD" +msgstr "Serveur BDD" -#~ msgid "Nueva categoría" -#~ msgstr "Nouvelle Catégorie" +# "Enter phpPMS database server name" +#: ../../../../inc/themes/classic/import.inc:54 +#: ../../../../inc/themes/material-blue/import.inc:180 +#, fuzzy +msgid "Indicar el servidor de la base de datos de phpPMS." +msgstr "Saisir le nom du serveur de base de données phpPMS" -#~ msgid "Nuevo" -#~ msgstr "Nouveau" +# "Confirm" +#: ../../../../inc/themes/classic/import.inc:64 +#: ../../../../inc/themes/material-blue/import.inc:194 +msgid "Confirmar" +msgstr "Confirmer" -#~ msgid "Subir archivo" -#~ msgstr "Charger fichier" +# "Current data will be removed (except current user)" +#: ../../../../inc/themes/classic/import.inc:68 +#: ../../../../inc/themes/material-blue/import.inc:198 +msgid "Los datos actuales serán borrados (excepto el usuario actual)" +msgstr "Les données actuelles seront supprimées(sauf l'utilisateur actuel)" -#~ msgid "Usuario Admin BBDD" -#~ msgstr "Utilisateur Admin BDD" +# "Start" +#: ../../../../inc/themes/classic/import.inc:83 +msgid "Iniciar" +msgstr "Démarrer" -#~ msgid "Usuario administrador BBDD" -#~ msgstr "Utilisateur administrateur BDD" +# "CSV/XML Import" +#: ../../../../inc/themes/classic/import.inc:89 +#: ../../../../inc/themes/material-blue/import.inc:7 +msgid "Importar CSV/XML" +msgstr "Importer CSV/XML" -#~ msgid "Ver clave" -#~ msgstr "Voir Mot de passe" +# "Default Group" +#: ../../../../inc/themes/classic/import.inc:96 +#: ../../../../inc/themes/material-blue/import.inc:14 +#, fuzzy +msgid "Usuario por Defecto" +msgstr "Défini le profile par défaut pour les nouveaux utilisateurs LDAP" -#~ msgid "Verifique el usuario de conexión para la Base de Datos" -#~ msgstr "Veuillez vérifier l'utilsateur de connexion pour la base de données" +# "Define the default users profile for new LDAP users" +#: ../../../../inc/themes/classic/import.inc:100 +#: ../../../../inc/themes/material-blue/import.inc:18 +#, fuzzy +msgid "Define el usuario por defecto para las cuentas importadas." +msgstr "Défini le profile par défaut pour les nouveaux utilisateurs LDAP" + +# "Default Group" +#: ../../../../inc/themes/classic/import.inc:117 +#: ../../../../inc/themes/classic/ldap.inc:144 +#: ../../../../inc/themes/material-blue/import.inc:36 +#: ../../../../inc/themes/material-blue/ldap.inc:170 +msgid "Grupo por Defecto" +msgstr "Groupe par défaut" + +# "Define the default users group for new LDAP users" +#: ../../../../inc/themes/classic/import.inc:121 +#: ../../../../inc/themes/material-blue/import.inc:40 +#, fuzzy +msgid "Define el grupo por defecto para las cuentas importadas." +msgstr "Défini le groupe d'utilisateur par défaut pour les nouveaux utilisateurs LDAP" + +# "Bind Password" +#: ../../../../inc/themes/classic/import.inc:138 +#: ../../../../inc/themes/material-blue/import.inc:58 +#: ../../../../inc/themes/material-blue/import.inc:64 +#, fuzzy +msgid "Clave de Importación" +msgstr "Confirmer l'importation des comptes" + +#: ../../../../inc/themes/classic/import.inc:146 +#: ../../../../inc/themes/material-blue/import.inc:70 +#: ../../../../inc/themes/material-blue/import.inc:76 +#, fuzzy +msgid "Delimitador CSV" +msgstr "Importer CSV/XML" + +# "Drop files here or click to select" +#: ../../../../inc/themes/classic/import.inc:162 +#: ../../../../inc/themes/material-blue/import.inc:90 +msgid "Soltar archivo aquí o click para seleccionar" +msgstr "Supprimer les fichier ici ou cliquez pour sélectionner" + +#: ../../../../inc/themes/classic/import.inc:175 +msgid "Permite realizar la importación de Cuentas, Categorías y Clientes desde arhcivos XML y CSV." +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:177 +#: ../../../../inc/themes/material-blue/import.inc:106 +msgid "Los formatos de archivos XML soportados son: sysPass, KeePass y KeePassX" +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:179 +#: ../../../../inc/themes/material-blue/import.inc:108 +msgid "Arrastar el archivo a importar a la zona indicada o hacer click sobre la flecha." +msgstr "" + +# "" +#: ../../../../inc/themes/classic/import.inc:181 +#: ../../../../inc/themes/material-blue/import.inc:110 +#, fuzzy +msgid "Para archivos de KeePass o KeePassX, el nombre del cliente será igual a KeePass o KeePassX y la categoría igual al nombre de los grupos." +msgstr "Importer depuis KeePass ou KeePassX. Le nombre de clients sera égale à ceux de KeePass ou KeePassX" + +# "Import form a CSV file with the format" +#: ../../../../inc/themes/classic/import.inc:183 +#: ../../../../inc/themes/material-blue/import.inc:112 +#, fuzzy +msgid "La importación de archivos CSV se realiza con el siguiente formato:" +msgstr "Importer depuis un fichier CSV avec le format" + +# "account_name +#: ../../../../inc/themes/classic/import.inc:185 +#: ../../../../inc/themes/material-blue/import.inc:114 +msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas" +msgstr "nom_de_compte;client;categorie;url;utilisateur;mot_de_passe;notes" + +# "" +#: ../../../../inc/themes/classic/import.inc:187 +#: ../../../../inc/themes/material-blue/import.inc:116 +#, fuzzy +msgid "En todos los casos, si el cliente o la categoría no están creados, se crean automáticamente." +msgstr "Si le client ou la catégorie ne sont pas créés, ils se créeront automatiquement." + +# "Request description" +#: ../../../../inc/themes/classic/info.inc:4 +#: ../../../../inc/themes/material-blue/info.inc:4 +#, fuzzy +msgid "Información de la Aplicación" +msgstr "Description de la demande" + +# "Version" +#: ../../../../inc/themes/classic/info.inc:10 +#: ../../../../inc/themes/material-blue/info.inc:10 +#, fuzzy +msgid "Versión sysPass" +msgstr "Version" + +# "Search base" +#: ../../../../inc/themes/classic/info.inc:18 +#: ../../../../inc/themes/material-blue/info.inc:18 +#, fuzzy +msgid "Base de Datos" +msgstr "La mise à jour de la base de données n'est pas nécessaire." + +# "APP" +#: ../../../../inc/themes/classic/info.inc:30 +#: ../../../../inc/themes/material-blue/info.inc:30 +#, fuzzy +msgid "PHP" +msgstr "Version de PHP requis >= 5.1" + +#: ../../../../inc/themes/classic/info.inc:35 +#: ../../../../inc/themes/material-blue/info.inc:35 +#, fuzzy +msgid "Extensiones" +msgstr "Il n'y a pas d'extension permise" + +#: ../../../../inc/themes/classic/info.inc:37 +#: ../../../../inc/themes/material-blue/info.inc:37 +msgid "Memoria Usada" +msgstr "" + +# "Server" +#: ../../../../inc/themes/classic/info.inc:44 +#: ../../../../inc/themes/classic/ldap.inc:32 +#: ../../../../inc/themes/classic/mail.inc:21 +#: ../../../../inc/themes/material-blue/config.inc:318 +#: ../../../../inc/themes/material-blue/info.inc:44 +#: ../../../../inc/themes/material-blue/ldap.inc:35 +#: ../../../../inc/themes/material-blue/ldap.inc:58 +#: ../../../../inc/themes/material-blue/ldap.inc:86 +#: ../../../../inc/themes/material-blue/mail.inc:24 +#: ../../../../inc/themes/material-blue/mail.inc:30 +msgid "Servidor" +msgstr "Serveur" + +# "Installation" +#: ../../../../inc/themes/classic/install.inc:4 +#: ../../../../inc/themes/material-blue/install.inc:4 +msgid "Instalación " +msgstr "Installation" + +# "Create sysPass admin account" +#: ../../../../inc/themes/classic/install.inc:25 +#: ../../../../inc/themes/material-blue/install.inc:25 +msgid "Crear cuenta de admin de sysPass" +msgstr "Créer le compte admin sysPass" + +# "sysPass administrator's login" +#: ../../../../inc/themes/classic/install.inc:32 +#: ../../../../inc/themes/material-blue/install.inc:36 +msgid "Login del usuario administrador de sysPass" +msgstr "Login administrateur de sysPass" + +# "DB Configuration" +#: ../../../../inc/themes/classic/install.inc:58 +#: ../../../../inc/themes/material-blue/install.inc:69 +msgid "Configurar BBDD" +msgstr "Configuration BDD" + +# "User login with with database administrative rights" +#: ../../../../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" + +# "sysPass database name" +#: ../../../../inc/themes/classic/install.inc:83 +#: ../../../../inc/themes/material-blue/install.inc:102 +msgid "Nombre de la base de datos para sysPass" +msgstr "Nom de la base de données sysPass" + +# "sysPass database server name" +#: ../../../../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" + +# "Hosting Mode" +#: ../../../../inc/themes/classic/install.inc:97 +#: ../../../../inc/themes/material-blue/install.inc:120 +msgid "Modo Hosting" +msgstr "Mode Hébergé" + +# "It does not create or verify the user's permissions on the DB" +#: ../../../../inc/themes/classic/install.inc:104 +#: ../../../../inc/themes/material-blue/install.inc:127 +msgid "No crea ni verifica los permisos del usuario sobre la BBDD" +msgstr "Ne crée pas ni ne vérifie les permissions de l'utilisateur dans la base de données" + +# "Install" +#: ../../../../inc/themes/classic/install.inc:108 +#: ../../../../inc/themes/material-blue/install.inc:134 +#: ../../../../inc/themes/material-blue/install.inc:135 +msgid "Instalar" +msgstr "Installer" + +# "Enable LDAP" +#: ../../../../inc/themes/classic/ldap.inc:12 +#: ../../../../inc/themes/material-blue/ldap.inc:12 +msgid "Habilitar LDAP" +msgstr "Activer l'annuaire LDAP" + +# "It enables LDAP authentication" +#: ../../../../inc/themes/classic/ldap.inc:16 +#: ../../../../inc/themes/material-blue/ldap.inc:16 +#, fuzzy +msgid "Habilita de autentificación mediante servidor LDAP." +msgstr "Active l'authentification LDAP" + +# "This method will switch to MySQL on failure" +#: ../../../../inc/themes/classic/ldap.inc:20 +#: ../../../../inc/themes/material-blue/ldap.inc:20 +#, fuzzy +msgid "Este método utilizará MySQL en caso de fallo." +msgstr "Cette méthode basculera sur MySQL en cas d'échec" + +# "LDAP server hostname or IP address" +#: ../../../../inc/themes/classic/ldap.inc:36 +#: ../../../../inc/themes/material-blue/ldap.inc:39 +#, fuzzy +msgid "Nombre o dirección IP del servidor de LDAP." +msgstr "Nom ou adresse IP du serveur LDAP" + +# "Examples" +#: ../../../../inc/themes/classic/ldap.inc:40 +#: ../../../../inc/themes/classic/ldap.inc:65 +#: ../../../../inc/themes/classic/ldap.inc:100 +#: ../../../../inc/themes/classic/ldap.inc:128 +#: ../../../../inc/themes/classic/wiki.inc:89 +#: ../../../../inc/themes/material-blue/ldap.inc:43 +#: ../../../../inc/themes/material-blue/ldap.inc:72 +#: ../../../../inc/themes/material-blue/ldap.inc:119 +#: ../../../../inc/themes/material-blue/ldap.inc:151 +#: ../../../../inc/themes/material-blue/wiki.inc:101 +#, fuzzy +msgid "Ejemplos:" +msgstr "Examples" + +# "Bind User" +#: ../../../../inc/themes/classic/ldap.inc:57 +#: ../../../../inc/themes/material-blue/ldap.inc:64 +msgid "Usuario de conexión" +msgstr "Utilisateur de connexion" + +# "User to connect LDAP server" +#: ../../../../inc/themes/classic/ldap.inc:61 +#: ../../../../inc/themes/material-blue/ldap.inc:68 +#, fuzzy +msgid "Usuario para conectar con el servicio de LDAP." +msgstr "Utilisateur pour se connecter au serveur LDAP" + +# "Bind Password" +#: ../../../../inc/themes/classic/ldap.inc:81 +#: ../../../../inc/themes/material-blue/ldap.inc:92 +msgid "Clave de conexión" +msgstr "Mot de passe de connexion" + +# "Search base" +#: ../../../../inc/themes/classic/ldap.inc:92 +#: ../../../../inc/themes/material-blue/ldap.inc:111 +#: ../../../../inc/themes/material-blue/ldap.inc:133 +msgid "Base de búsqueda" +msgstr "Base de recherche" + +# "LDAP base to do users searches." +#: ../../../../inc/themes/classic/ldap.inc:96 +#: ../../../../inc/themes/material-blue/ldap.inc:115 +#, fuzzy +msgid "Base en la que realizar la búsqueda de usuarios de LDAP." +msgstr "Base LDAP de recherche des utilisateurs" + +# "LDAP group that users belong to for access permission" +#: ../../../../inc/themes/classic/ldap.inc:120 +#: ../../../../inc/themes/material-blue/ldap.inc:143 +#, fuzzy +msgid "Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso." +msgstr "Groupe LDAP auquel doivent apartenir les utilisateurs afin d'avoir les permissions d'accès" + +#: ../../../../inc/themes/classic/ldap.inc:124 +#: ../../../../inc/themes/material-blue/ldap.inc:147 +msgid "Este grupo debe de estar ubicado en la base de búsquedas de LDAP." +msgstr "" + +# "Define the default users group for new LDAP users" +#: ../../../../inc/themes/classic/ldap.inc:148 +#: ../../../../inc/themes/material-blue/ldap.inc:174 +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" + +# "Default Profile" +#: ../../../../inc/themes/classic/ldap.inc:165 +#: ../../../../inc/themes/material-blue/ldap.inc:190 +msgid "Perfil por Defecto" +msgstr "Profil par défaut" + +# "Define the default users profile for new LDAP users" +#: ../../../../inc/themes/classic/ldap.inc:169 +#: ../../../../inc/themes/material-blue/ldap.inc:194 +#, fuzzy +msgid "Define el perfil de usuarios por defecto para los nuevos usuarios de LDAP." +msgstr "Défini le profile par défaut pour les nouveaux utilisateurs LDAP" + +# "Active Directory" +#: ../../../../inc/themes/classic/ldap.inc:186 +#: ../../../../inc/themes/material-blue/ldap.inc:210 +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 +msgid "Habilita el modo de conexión con LDAP de Active Directory." +msgstr "Permet le mode de connexion actif avec l'annuaire LDAP" + +# "Check" +#: ../../../../inc/themes/classic/ldap.inc:202 +#: ../../../../inc/themes/material-blue/ldap.inc:228 +msgid "Comprobar" +msgstr "Vérifier" + +# "Check LDAP connection" +#: ../../../../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" + +# "Lost your password?" +#: ../../../../inc/themes/classic/login.inc:46 +#: ../../../../inc/themes/material-blue/login.inc:69 +msgid "¿Olvidó su clave?" +msgstr "Mot de passe oublié?" + +# "Application successfully updated" +#: ../../../../inc/themes/classic/login.inc:59 +#: ../../../../inc/themes/material-blue/login.inc:82 +msgid "Aplicación actualizada correctamente" +msgstr "Application mis à jour avec succès" + +# New Features +#: ../../../../inc/themes/classic/login.inc:64 +#: ../../../../inc/themes/classic/login.inc:65 +#: ../../../../inc/themes/material-blue/login.inc:87 +#: ../../../../inc/themes/material-blue/login.inc:88 +#: ../../../../inc/themes/material-blue/login.inc:90 +#, fuzzy +msgid "Nuevas Características" +msgstr "New Features" + +# "Enable email notifications" +#: ../../../../inc/themes/classic/mail.inc:11 +#: ../../../../inc/themes/material-blue/mail.inc:11 +msgid "Habilitar notificaciones de correo" +msgstr "Activer les notifications par courriel" + +# "Port" +#: ../../../../inc/themes/classic/mail.inc:29 +#: ../../../../inc/themes/material-blue/config.inc:332 +#: ../../../../inc/themes/material-blue/mail.inc:36 +#: ../../../../inc/themes/material-blue/mail.inc:43 +msgid "Puerto" +msgstr "Port" + +# "Enable Authentication" +#: ../../../../inc/themes/classic/mail.inc:37 +#: ../../../../inc/themes/material-blue/mail.inc:49 +msgid "Habilitar Autentificación" +msgstr "Activer l'authentification" + +# "Disabled" +#: ../../../../inc/themes/classic/mail.inc:68 +#: ../../../../inc/themes/material-blue/mail.inc:91 +msgid "Deshabilitada" +msgstr "Désactivé" + +# "Recipient email address" +#: ../../../../inc/themes/classic/mail.inc:77 +#: ../../../../inc/themes/material-blue/mail.inc:100 +#: ../../../../inc/themes/material-blue/mail.inc:107 +msgid "Dirección de correo de envío" +msgstr "Adresse courriel du destinataire" + +# "Enable requests by email" +#: ../../../../inc/themes/classic/mail.inc:85 +#: ../../../../inc/themes/material-blue/mail.inc:113 +msgid "Habilitar peticiones por correo" +msgstr "Activer les demandes par courriel" + +# "More Actions" +#: ../../../../inc/themes/classic/mgmttabs.inc:66 +#: ../../../../inc/themes/classic/search.inc:112 +#: ../../../../inc/themes/material-blue/search.inc:125 +msgid "Más Acciones" +msgstr "Plus d'Actions" + +# "Request Password Change" +#: ../../../../inc/themes/classic/passreset.inc:13 +#: ../../../../inc/themes/material-blue/passreset.inc:10 +msgid "Solicitud de Cambio de Clave" +msgstr "Demande de changement de Mot de passe" + +# "User login" +#: ../../../../inc/themes/classic/passreset.inc:16 +msgid "Login del Usuario" +msgstr "Login de l'utilisateur" + +# "User's Email" +#: ../../../../inc/themes/classic/passreset.inc:21 +#: ../../../../inc/themes/material-blue/passreset.inc:24 +msgid "Email del Usuario" +msgstr "Courriel de l'utilisateur" + +# "Email" +#: ../../../../inc/themes/classic/passreset.inc:22 +#: ../../../../inc/themes/classic/users.inc:61 +#: ../../../../inc/themes/material-blue/users.inc:71 +msgid "Email" +msgstr "Courriel" + +# "New Password" +#: ../../../../inc/themes/classic/passreset.inc:27 +msgid "Nueva Clave" +msgstr "Nouveau Mot de passe" + +# "New Password (Verify)" +#: ../../../../inc/themes/classic/passreset.inc:34 +msgid "Nueva Clave (Verificar)" +msgstr "Nouveau Mot de passe (Vérifier)" + +# "Password (Verify)" +#: ../../../../inc/themes/classic/passreset.inc:35 +msgid "Clave (Verificar)" +msgstr "Mot de passe (Vérifier)" + +# "Go back to login" +#: ../../../../inc/themes/classic/passreset.inc:46 +#: ../../../../inc/themes/material-blue/passreset.inc:42 +msgid "Volver a iniciar sesión" +msgstr "Retour au login" + +# "Request" +#: ../../../../inc/themes/classic/passreset.inc:48 +#: ../../../../inc/themes/material-blue/2fa.inc:27 +#: ../../../../inc/themes/material-blue/passreset.inc:48 +#: ../../../../inc/themes/material-blue/passreset.inc:49 +msgid "Solicitar" +msgstr "Demander" + +# "Request password change" +#: ../../../../inc/themes/classic/passreset.inc:49 +msgid "Solicitar cambio de clave" +msgstr "Demander le changement de mot de passe" + +# "Change" +#: ../../../../inc/themes/classic/passreset.inc:51 +#: ../../../../inc/themes/material-blue/passreset.inc:53 +#: ../../../../inc/themes/material-blue/passreset.inc:54 +msgid "Cambiar" +msgstr "Changer" + +# "Change password" +#: ../../../../inc/themes/classic/passreset.inc:52 +msgid "Cambiar Clave" +msgstr "Changer Mot de passe" + +# "Profile name" +#: ../../../../inc/themes/classic/profiles.inc:11 +#: ../../../../inc/themes/material-blue/profiles.inc:14 +msgid "Nombre del perfil" +msgstr "Nom du profil" + +# "View account details" +#: ../../../../inc/themes/classic/profiles.inc:19 +#: ../../../../inc/themes/material-blue/profiles.inc:30 +msgid "Ver detalles de cuenta" +msgstr "Voir détails de compte" + +# "View" +#: ../../../../inc/themes/classic/profiles.inc:19 +#: ../../../../inc/themes/material-blue/profiles.inc:30 +msgid "Ver" +msgstr "Voir" + +# "View account password" +#: ../../../../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" + +# "View account history" +#: ../../../../inc/themes/classic/profiles.inc:28 +#: ../../../../inc/themes/material-blue/profiles.inc:40 +msgid "Ver historial de cuenta" +msgstr "Voir historique de compte" + +# "Edit account" +#: ../../../../inc/themes/classic/profiles.inc:32 +#: ../../../../inc/themes/material-blue/profiles.inc:45 +msgid "Editar cuenta" +msgstr "Editer compte" + +# "Edit" +#: ../../../../inc/themes/classic/profiles.inc:32 +#: ../../../../inc/themes/material-blue/profiles.inc:45 +msgid "Editar" +msgstr "Editer" + +# "Edit account password" +#: ../../../../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" + +# "Edit Password" +#: ../../../../inc/themes/classic/profiles.inc:37 +#: ../../../../inc/themes/material-blue/profiles.inc:50 +msgid "Editar Clave" +msgstr "Editer Mot de passe" + +# "Add new account" +#: ../../../../inc/themes/classic/profiles.inc:41 +msgid "Añadir nueva cuenta" +msgstr "Ajouter nouveau compte" + +# "Add" +#: ../../../../inc/themes/classic/profiles.inc:41 +msgid "Añadir" +msgstr "Ajouter" + +# "Delete account" +#: ../../../../inc/themes/classic/profiles.inc:46 +msgid "Borrar cuenta" +msgstr "Supprimer compte" + +# "Delete" +#: ../../../../inc/themes/classic/profiles.inc:46 +msgid "Borrar" +msgstr "Supprimer" + +# "View account files" +#: ../../../../inc/themes/classic/profiles.inc:50 +msgid "Ver archivos de cuenta" +msgstr "Voir fichiers de compte" + +# "General configuration" +#: ../../../../inc/themes/classic/profiles.inc:61 +#: ../../../../inc/themes/material-blue/profiles.inc:72 +msgid "Configuración general" +msgstr "Configuration générale" + +# "Change master password" +#: ../../../../inc/themes/classic/profiles.inc:65 +msgid "Cambiar clave maestra" +msgstr "Changer mot de passe maître" + +# "Perform backup" +#: ../../../../inc/themes/classic/profiles.inc:70 +msgid "Realizar copia de seguridad" +msgstr "Effectuer une sauvegarde" + +# "Backup" +#: ../../../../inc/themes/classic/profiles.inc:70 +#: ../../../../inc/themes/material-blue/profiles.inc:82 +msgid "Backup" +msgstr "Sauvegarde" + +# "Confirm account import" +#: ../../../../inc/themes/classic/profiles.inc:74 +#: ../../../../inc/themes/material-blue/profiles.inc:87 +#, fuzzy +msgid "Realizar importación de cuentas" +msgstr "Confirmer l'importation des comptes" + +# "Management" +#: ../../../../inc/themes/classic/profiles.inc:81 +#: ../../../../inc/themes/material-blue/profiles.inc:93 +msgid "Gestión" +msgstr "Gestion" + +# "Users management" +#: ../../../../inc/themes/classic/profiles.inc:85 +#: ../../../../inc/themes/material-blue/profiles.inc:99 +msgid "Gestión de usuarios" +msgstr "Gestion des utilisateurs" + +# "Groups management" +#: ../../../../inc/themes/classic/profiles.inc:89 +#: ../../../../inc/themes/material-blue/profiles.inc:104 +msgid "Gestión de grupos" +msgstr "Gestion des groupes" + +# "Profiles management" +#: ../../../../inc/themes/classic/profiles.inc:94 +#: ../../../../inc/themes/material-blue/profiles.inc:109 +msgid "Gestión de perfiles" +msgstr "Gestion des profils" + +# "Profiles" +#: ../../../../inc/themes/classic/profiles.inc:94 +#: ../../../../inc/themes/material-blue/profiles.inc:109 +msgid "Perfiles" +msgstr "Profils" + +# "Categories management" +#: ../../../../inc/themes/classic/profiles.inc:98 +#: ../../../../inc/themes/material-blue/profiles.inc:114 +msgid "Gestión de categorías" +msgstr "Gestion des catégories" + +# "Customers management" +#: ../../../../inc/themes/classic/profiles.inc:103 +#: ../../../../inc/themes/material-blue/profiles.inc:119 +msgid "Gestión de clientes" +msgstr "Gestion des clients" + +# "Files management disabled" +#: ../../../../inc/themes/classic/profiles.inc:107 +#: ../../../../inc/themes/material-blue/profiles.inc:124 +#, fuzzy +msgid "Gestión de campos personalizados" +msgstr "Le nombre de champs est incorrect" + +# "Files management" +#: ../../../../inc/themes/classic/profiles.inc:112 +#: ../../../../inc/themes/material-blue/profiles.inc:129 +#, fuzzy +msgid "Gestión de autorizaciones API" +msgstr "Gestion des fichiers désactivé" + +#: ../../../../inc/themes/classic/profiles.inc:112 +#: ../../../../inc/themes/material-blue/profiles.inc:129 +msgid "Autorizaciones API" +msgstr "" + +# "Others" +#: ../../../../inc/themes/classic/profiles.inc:120 +#: ../../../../inc/themes/material-blue/profiles.inc:135 +msgid "Otros" +msgstr "Autres" + +# "View event log" +#: ../../../../inc/themes/classic/profiles.inc:124 +#: ../../../../inc/themes/material-blue/profiles.inc:141 +msgid "Ver log de eventos" +msgstr "Voir journal d'évènements" + +# "Event Log" +#: ../../../../inc/themes/classic/profiles.inc:124 +#: ../../../../inc/themes/material-blue/profiles.inc:141 +msgid "Log de Eventos" +msgstr "Journal d'évènements" + +# "Performed by" +#: ../../../../inc/themes/classic/profiles.inc:132 +#: ../../../../inc/themes/material-blue/profiles.inc:148 +#, fuzzy +msgid "Usado por" +msgstr "par" + +#: ../../../../inc/themes/classic/profiles.inc:139 +#: ../../../../inc/themes/material-blue/profiles.inc:155 +msgid "No usado" +msgstr "" + +# "Request Account Modification" +#: ../../../../inc/themes/classic/request.inc:1 +#: ../../../../inc/themes/material-blue/request.inc:1 +msgid "Solicitar Modificación de Cuenta" +msgstr "Demander modification de Compte" + +# "Request" +#: ../../../../inc/themes/classic/request.inc:22 +#: ../../../../inc/themes/material-blue/request.inc:25 +msgid "Petición" +msgstr "Demande" + +# "Request description" +#: ../../../../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" + +# "Back" +#: ../../../../inc/themes/classic/request.inc:33 +#: ../../../../inc/themes/material-blue/account.inc:439 +#: ../../../../inc/themes/material-blue/editpass.inc:55 +#: ../../../../inc/themes/material-blue/request.inc:42 +msgid "Atrás" +msgstr "Retour" + +# "Send" +#: ../../../../inc/themes/classic/request.inc:38 +#: ../../../../inc/themes/material-blue/request.inc:48 +msgid "Enviar" +msgstr "Envoyer" + +# "Search in Wiki" +#: ../../../../inc/themes/classic/search.inc:26 +#: ../../../../inc/themes/material-blue/search.inc:29 +msgid "Buscar en Wiki" +msgstr "Chercher dans Wiki" + +# "Open link to" +#: ../../../../inc/themes/classic/search.inc:62 +#: ../../../../inc/themes/material-blue/search.inc:65 +msgid "Abrir enlace a" +msgstr "Ouvrir le lien vers" + +# "Attachments" +#: ../../../../inc/themes/classic/search.inc:80 +#: ../../../../inc/themes/material-blue/search.inc:89 +msgid "Archivos adjuntos" +msgstr "Fichiers joints" + +# "Link to Wiki" +#: ../../../../inc/themes/classic/search.inc:87 +#: ../../../../inc/themes/material-blue/search.inc:98 +msgid "Enlace a Wiki" +msgstr "Lien vers Wiki" + +# "Filter ON" +#: ../../../../inc/themes/classic/search.inc:151 +#: ../../../../inc/themes/material-blue/search.inc:163 +msgid "Filtro ON" +msgstr "Filtre ON" + +# "Global ON" +#: ../../../../inc/themes/classic/search.inc:155 +#: ../../../../inc/themes/material-blue/search.inc:167 +msgid "Global ON" +msgstr "Global ON" + +# "Clear" +#: ../../../../inc/themes/classic/searchbox.inc:5 +#: ../../../../inc/themes/material-blue/searchbox.inc:5 +msgid "Limpiar" +msgstr "Nettoyer" + +# "Text to search" +#: ../../../../inc/themes/classic/searchbox.inc:6 +#: ../../../../inc/themes/material-blue/searchbox.inc:10 +msgid "Texto a buscar" +msgstr "Text à chercher" + +# "Incorrect parameters" +#: ../../../../inc/themes/classic/searchbox.inc:10 +#: ../../../../inc/themes/material-blue/searchbox.inc:15 +#, fuzzy +msgid "Parámetros especiales:" +msgstr "Paramètres Incorrects" + +#: ../../../../inc/themes/classic/searchbox.inc:13 +#: ../../../../inc/themes/material-blue/searchbox.inc:18 +msgid "Buscar cuentas a las que 'login' tenga acceso" +msgstr "" + +#: ../../../../inc/themes/classic/searchbox.inc:14 +#: ../../../../inc/themes/material-blue/searchbox.inc:19 +msgid "Buscar cuentas a las que 'group_name' tenga acceso" +msgstr "" + +# "Global search" +#: ../../../../inc/themes/classic/searchbox.inc:18 +#: ../../../../inc/themes/material-blue/searchbox.inc:25 +#: ../../../../inc/themes/material-blue/searchbox.inc:28 +msgid "Búsqueda global" +msgstr "Recherche globale" + +# "APP" +#: ../../../../inc/themes/classic/searchbox.inc:41 +#: ../../../../inc/themes/material-blue/searchbox.inc:54 +msgid "CPP" +msgstr "APP" + +# "Accounts per page" +#: ../../../../inc/themes/classic/searchbox.inc:41 +#: ../../../../inc/themes/material-blue/searchbox.inc:54 +msgid "Cuentas por página" +msgstr "Comptes par page" + +# "Warning" +#: ../../../../inc/themes/classic/security.inc:4 +#, fuzzy +msgid "Autenticación" +msgstr "Attention" + +# "Account Activation" +#: ../../../../inc/themes/classic/security.inc:13 +#, fuzzy +msgid "Autenticación en 2 pasos" +msgstr "Activation Compte" + +#: ../../../../inc/themes/classic/security.inc:17 +#: ../../../../inc/themes/material-blue/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/security.inc:21 +#: ../../../../inc/themes/material-blue/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/security.inc:29 +#: ../../../../inc/themes/material-blue/security.inc:29 +msgid "Activar" +msgstr "" + +# "Error on retrieving accounts history" +#: ../../../../inc/themes/classic/security.inc:34 +#: ../../../../inc/themes/material-blue/security.inc:35 +#, fuzzy +msgid "Error al obtener el código QR. Inténtelo de nuevo" +msgstr "Erreur pendant la récupération de l'historique des comptes" + +#: ../../../../inc/themes/classic/security.inc:39 +#: ../../../../inc/themes/material-blue/security.inc:43 +#, fuzzy +msgid "Código" +msgstr "Saisir le code de sécurité" + +#: ../../../../inc/themes/classic/security.inc:44 +#: ../../../../inc/themes/material-blue/security.inc:48 +msgid "Una vez activada, sólo es posible acceder si se dispone del dispositivo generador de códigos asociado." +msgstr "" + +# "Change user password" +#: ../../../../inc/themes/classic/sessionbar.inc:6 +#: ../../../../inc/themes/material-blue/footer.inc:7 +msgid "Cambiar clave de usuario" +msgstr "Changer mot de passe utilisateur" + +#: ../../../../inc/themes/classic/sessionbar.inc:9 +msgid "Preferencias" +msgstr "" + +# "Sign out" +#: ../../../../inc/themes/classic/sessionbar.inc:15 +#: ../../../../inc/themes/material-blue/footer.inc:5 +msgid "Salir" +msgstr "Se déconnecter" + +# "Options" +#: ../../../../inc/themes/classic/tokens.inc:34 +#: ../../../../inc/themes/classic/users.inc:98 +#: ../../../../inc/themes/material-blue/tokens.inc:34 +#: ../../../../inc/themes/material-blue/users.inc:132 +msgid "Opciones" +msgstr "Options" + +# "Start Update" +#: ../../../../inc/themes/classic/tokens.inc:38 +#: ../../../../inc/themes/material-blue/tokens.inc:37 +#: ../../../../inc/themes/material-blue/tokens.inc:40 +#, fuzzy +msgid "Regenerar Autorización" +msgstr "Démarrer la mise à jour" + +#: ../../../../inc/themes/classic/tokens.inc:43 +#: ../../../../inc/themes/material-blue/tokens.inc:46 +msgid "Token" +msgstr "" + +# "Updated" +#: ../../../../inc/themes/classic/update.inc:18 +#: ../../../../inc/themes/material-blue/update.inc:20 +msgid "Actualizado" +msgstr "Mis à jour" + +# "Check for updates" +#: ../../../../inc/themes/classic/update.inc:23 +#: ../../../../inc/themes/material-blue/update.inc:22 +#, fuzzy +msgid "Error al comprobar actualizaciones" +msgstr "Vérifier les mises à jour" + +# "DB Update" +#: ../../../../inc/themes/classic/upgrade.inc:8 +#: ../../../../inc/themes/material-blue/upgrade.inc:8 +msgid "Actualización de BBDD" +msgstr "Actualisation de la BDD" + +# "Enter Security Code" +#: ../../../../inc/themes/classic/upgrade.inc:10 +msgid "Introducir Código de Seguridad" +msgstr "Saisir le code de sécurité" + +# "Security Code" +#: ../../../../inc/themes/classic/upgrade.inc:11 +#: ../../../../inc/themes/material-blue/upgrade.inc:14 +msgid "Código de Seguridad" +msgstr "code de sécurité" + +# "Start Update" +#: ../../../../inc/themes/classic/upgrade.inc:21 +#: ../../../../inc/themes/material-blue/upgrade.inc:26 +msgid "Iniciar Actualización" +msgstr "Démarrer la mise à jour" + +# "Full username" +#: ../../../../inc/themes/classic/users.inc:12 +#: ../../../../inc/themes/material-blue/users.inc:15 +msgid "Nombre de usuario completo" +msgstr "Nom complet d'utilisateur" + +# "Session login" +#: ../../../../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" + +# "Email address" +#: ../../../../inc/themes/classic/users.inc:64 +#: ../../../../inc/themes/material-blue/users.inc:78 +msgid "Dirección de correo" +msgstr "Adresse courriel" + +# "Application administrator" +#: ../../../../inc/themes/classic/users.inc:103 +#: ../../../../inc/themes/material-blue/users.inc:136 +msgid "Administrador de la aplicación" +msgstr "Administrateur de l'application" + +# "Application Admin" +#: ../../../../inc/themes/classic/users.inc:103 +#: ../../../../inc/themes/material-blue/users.inc:139 +msgid "Admin. Aplicación" +msgstr "Admin. Application" + +# "Accounts administrator" +#: ../../../../inc/themes/classic/users.inc:107 +#: ../../../../inc/themes/material-blue/users.inc:143 +msgid "Administrador de cuentas" +msgstr "Administrateur des comptes" + +# "Accounts Admin" +#: ../../../../inc/themes/classic/users.inc:107 +#: ../../../../inc/themes/material-blue/users.inc:146 +msgid "Admin. Cuentas" +msgstr "Admin. Comptes" + +# "Force password change" +#: ../../../../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" + +# "Entries" +#: ../../../../inc/themes/classic/users.inc:154 +#: ../../../../inc/themes/material-blue/users.inc:198 +msgid "Entradas" +msgstr "Entrées" + +# "Last Access" +#: ../../../../inc/themes/classic/users.inc:159 +#: ../../../../inc/themes/material-blue/users.inc:203 +msgid "Último Acceso" +msgstr "Dernier Accès" + +# "Master Password Date" +#: ../../../../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" + +# "Enable Wiki links" +#: ../../../../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 +#, fuzzy +msgid "Habilita la opción de añadir un enlace a Wiki externa para los resultados de la búsqueda." +msgstr "Active l'option d'ajout de liens externes Wiki pour le résultat des recherches" + +# "Wiki search URL" +#: ../../../../inc/themes/classic/wiki.inc:27 +#: ../../../../inc/themes/material-blue/wiki.inc:30 +#: ../../../../inc/themes/material-blue/wiki.inc:56 +msgid "URL de búsqueda Wiki" +msgstr "URL de recherche Wiki" + +# "URL that wiki uses to do a page search on it." +#: ../../../../inc/themes/classic/wiki.inc:31 +#: ../../../../inc/themes/material-blue/wiki.inc:34 +#, fuzzy +msgid "URL que utiliza la wiki para realizar una búsqueda de una página." +msgstr "URL utilisé par wiki pour effectuer une recherche sur une page" + +# "It uses customer name as parameter." +#: ../../../../inc/themes/classic/wiki.inc:35 +#: ../../../../inc/themes/material-blue/wiki.inc:38 +#, fuzzy +msgid "Como parámetro se utiliza el nombre del cliente." +msgstr "Utilise le nom d'utilsateur comme paramètre" + +# "Example" +#: ../../../../inc/themes/classic/wiki.inc:39 +#: ../../../../inc/themes/classic/wiki.inc:66 +#: ../../../../inc/themes/material-blue/wiki.inc:42 +#: ../../../../inc/themes/material-blue/wiki.inc:74 +#, fuzzy +msgid "Ejemplo:" +msgstr "Example" + +# "Wiki page URL" +#: ../../../../inc/themes/classic/wiki.inc:54 +#: ../../../../inc/themes/material-blue/wiki.inc:62 +#: ../../../../inc/themes/material-blue/wiki.inc:87 +msgid "URL de página en Wiki" +msgstr "URL de page Wiki" + +# "URL that wiki uses to access to page details on it." +#: ../../../../inc/themes/classic/wiki.inc:58 +#: ../../../../inc/themes/material-blue/wiki.inc:66 +#, fuzzy +msgid "URL que utiliza la wiki para acceder a los detalles de una página." +msgstr "URL que Wiki utilise pour accéder aux détails d'un page sur celui-ci" + +# "The account name is used as wiki search variable parameter." +#: ../../../../inc/themes/classic/wiki.inc:62 +#: ../../../../inc/themes/material-blue/wiki.inc:70 +#, fuzzy +msgid "El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda de la Wiki." +msgstr "Le nom du compte est utilisé comme paramètre pour la variable de recherche wiki" + +# "Account name preffix" +#: ../../../../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" + +# "Preffix to select what accounts have a wiki page link" +#: ../../../../inc/themes/classic/wiki.inc:85 +#: ../../../../inc/themes/material-blue/wiki.inc:97 +#, fuzzy +msgid "Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki." +msgstr "Préfix pour déterminer quels comptes aurront un lien Wiki." + +# "Add filter" +#: ../../../../inc/themes/classic/wiki.inc:121 +#: ../../../../inc/themes/material-blue/wiki.inc:135 +msgid "Añadir filtro" +msgstr "Ajouter filtre" + +# "Delete filter" +#: ../../../../inc/themes/classic/wiki.inc:122 +#: ../../../../inc/themes/material-blue/wiki.inc:136 +msgid "Eliminar filtro" +msgstr "Supprimer filtre" + +# "History" +#: ../../../../inc/themes/material-blue/account.inc:4 +#, fuzzy +msgid "Histórico" +msgstr "Importer Historique des Comptes" + +#: ../../../../inc/themes/material-blue/account.inc:42 +msgid "Seleccionar o escribir para crear uno nuevo" +msgstr "" + +# "Password (repeat)" +#: ../../../../inc/themes/material-blue/account.inc:110 +#, fuzzy +msgid "Clave (Repetir)" +msgstr "Mot de passe (répéter)" + +# "Performed by" +#: ../../../../inc/themes/material-blue/backup.inc:58 +#: ../../../../inc/themes/material-blue/backup.inc:144 +#: ../../../../inc/themes/material-blue/encryption.inc:118 +#: ../../../../inc/themes/material-blue/import.inc:217 +#, fuzzy +msgid "Realizar" +msgstr "Effectuer une sauvegarde" + +# "Results per page" +#: ../../../../inc/themes/material-blue/config.inc:197 +#, fuzzy +msgid "Número de resultados por página" +msgstr "Nombre de résultats affichés par page lors d'une recherche" + +# "Maximum file size" +#: ../../../../inc/themes/material-blue/config.inc:292 +#, fuzzy +msgid "Tamaño máximo de archivo en bytes" +msgstr "Taille maximale de fichier" + +#: ../../../../inc/themes/material-blue/config.inc:299 +msgid "Proxy" +msgstr "" + +#: ../../../../inc/themes/material-blue/config.inc:305 +msgid "Usar Proxy" +msgstr "" + +# "Server" +#: ../../../../inc/themes/material-blue/config.inc:326 +#, fuzzy +msgid "Servidor proxy" +msgstr "Serveur" + +#: ../../../../inc/themes/material-blue/config.inc:340 +msgid "Puerto del servidor proxy" +msgstr "" + +# "Access user" +#: ../../../../inc/themes/material-blue/config.inc:354 +#, fuzzy +msgid "Usuario del servidor proxy" +msgstr "Utilisateur d'accès" + +#: ../../../../inc/themes/material-blue/config.inc:368 +msgid "Clave del servidor proxy" +msgstr "" + +# "Group name" +#: ../../../../inc/themes/material-blue/customfields.inc:14 +#, fuzzy +msgid "Nombre del campo" +msgstr "Nom du client" + +#: ../../../../inc/themes/material-blue/customfields.inc:47 +#, fuzzy +msgid "Ayuda del campo" +msgstr "Aide :: FAQ :: Changelog" + +# "View User Details" +#: ../../../../inc/themes/material-blue/footer.inc:11 +#, fuzzy +msgid "Preferencias de usuario" +msgstr "Login utilisateur dupliqué" + +#: ../../../../inc/themes/material-blue/import.inc:104 +msgid "Permite realizar la importación de Cuentas, Categorías y Clientes desde archivos XML y CSV." +msgstr "" + +# "sysPass administrator's login" +#: ../../../../inc/themes/material-blue/install.inc:31 +#, fuzzy +msgid "Usuario administrador de sysPass" +msgstr "Login administrateur de sysPass" + +# "Access user" +#: ../../../../inc/themes/material-blue/install.inc:78 +#, fuzzy +msgid "Usuario acceso BBDD" +msgstr "Utilisateur d'accès" + +# "User login with with database administrative rights" +#: ../../../../inc/themes/material-blue/install.inc:83 +#, fuzzy +msgid "Usuario con permisos de administrador de MySQL" +msgstr "Un utilisateur avec des droits d'administration sur la BDD" + +# "DB Password" +#: ../../../../inc/themes/material-blue/install.inc:90 +#, fuzzy +msgid "Clave acceso BBDD" +msgstr "Mot de passe BDD" + +# "sysPass database name" +#: ../../../../inc/themes/material-blue/install.inc:97 +#, fuzzy +msgid "Nombre BBDD para sysPass" +msgstr "Nom de la base de données sysPass" + +# "DB Server" +#: ../../../../inc/themes/material-blue/install.inc:109 +#, fuzzy +msgid "Servidor BBDD para sysPass" +msgstr "Serveur BDD" + +# "sysPass database server name" +#: ../../../../inc/themes/material-blue/install.inc:114 +#, fuzzy +msgid "Nombre del servidor para instalar la base de datos de sysPass" +msgstr "Nom du serveur de base de données sysPass" + +# "LDAP bind user password" +#: ../../../../inc/themes/material-blue/ldap.inc:96 +#, fuzzy +msgid "Clave del usuario de conexión a LDAP." +msgstr "Mot de passe utilisateur de connexion LDAP" + +#: ../../../../inc/themes/material-blue/mail.inc:118 +msgid "Habilita que los usuarios puedan solicitar modificaciones o acceso a las cuentas sin permisos." +msgstr "" + +# "Add new account" +#: ../../../../inc/themes/material-blue/profiles.inc:25 +#, fuzzy +msgid "Crear nueva cuenta" +msgstr "Nouveau Compte" + +# "Creator" +#: ../../../../inc/themes/material-blue/profiles.inc:25 +#, fuzzy +msgid "Crear" +msgstr "Erreur pendant la création des utilisateurs" + +# "Delete Account" +#: ../../../../inc/themes/material-blue/profiles.inc:55 +#, fuzzy +msgid "Eliminar cuenta" +msgstr "Supprimer Compte" + +#: ../../../../inc/themes/material-blue/profiles.inc:55 +msgid "Eliminar" +msgstr "Supprimer" + +# "View account files" +#: ../../../../inc/themes/material-blue/profiles.inc:60 +#, fuzzy +msgid "Var archivos de cuenta" +msgstr "Voir fichiers de compte" + +# "Error on encryption module" +#: ../../../../inc/themes/material-blue/profiles.inc:77 +#, fuzzy +msgid "Opciones de encriptación" +msgstr "Options" + +# "Perform backup" +#: ../../../../inc/themes/material-blue/profiles.inc:82 +#, fuzzy +msgid "Realizar copia de seguridad y exportar" +msgstr "Effectuer une sauvegarde" + +#: ../../../../inc/themes/material-blue/searchbox.inc:20 +msgid "Buscar cuentas con archivos con el nombre 'file_name'" +msgstr "" + +# "Enable Authentication" +#: ../../../../inc/themes/material-blue/security.inc:4 +#, fuzzy +msgid "Autentificación" +msgstr "Activer l'authentification" diff --git a/inc/locales/hu_HU/LC_MESSAGES/messages.mo b/inc/locales/hu_HU/LC_MESSAGES/messages.mo index 0964bbceb78f02d26a959a8251bf40541e99a9ca..5c91bee54ffd3d2c2a09c8ab22d5138b25950eca 100644 GIT binary patch delta 13561 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 delta 18140 zcmaLd349bq{`c`txNiX=+%)%@5N?EUgd4eU1ra96BpEW937JWRh>iy;f`~9)APR9; zluOhRbVXDc4^~-MRMz#v+dtknuDE}BKHsj2!an;v{o2aAs=B+n>Q`0W!|uNSUh1LM z)nX@_RKLyPSexoNZ7_Pi;}lnOoTJ@U>o`{pa-4>EHP*sgtaoB#%G^Q@4IA-Ar?1KBTp5w%vcgQrN;v}}ff1x_kc!+5@16xwgMm=z$wHO;vj-fiR z4)wro*aG)rdpv@A;7L@w4KFYQ>4lAXzSEz~d7K#MRXEN(>`b{3)xbKejeG3*{aAq=}!`8L$l z?83Tu0Gs3UsE)jg8qqhlzB&`koI0&h5$T4yE*;g*NK`x1Q5|29Mf}x)02ONJGSm$> zp?Z7|YEeCm{qb$oTs9hRLOl@G@#&a`g|_}G>_&MrYNUrz5qS~y;1j6ld^Mc-D|5zP z(3qvGk#|AO`7q4Hv8XvOL(Opv=i(-8gWsUmO#P9jqkWML;P|l!HOJ4Q9(Wwv;%RG(Y&+Me$WB77mHDXlFGWS9*w)9& z$SBk+Q8%ndJ>YIsWFAD_@C+(4M^K?WVf`L;UCq(vz80u*57g8Q!}>S})lnZRVli_* z=4>IOk?uov;HdR2)Qu-m9sCKkMrx07oOamOnuQwSLeztEQ1?YqBfc8d?k%?d9$Vh! zosT)rU&yEfN9>9BPz`>C8u^c?weW9D#~NeJV(X9U&}8g@OHduV276*9UW7-nBX$|* zINfm~DiX`EGtYO{+Y^tXLjNu*#9!NT>UgsTnxaP3$(H+}t{;sW`E1mEetUie_N9Cy z*1!X(wRH$}{W};_#n)tbSvhqkm=TV_3d+k+q5BdQfzwzMt4%Z^u8SIR8fs1lp^LLo zBaGVf8&MH@70$o?Nfrt>5dvPGy6uSRX3{mAFQ`3iMomkUipqp>sPJXC0J zL@l=6w)`A+p?ngxT^mj|Q`Q~ZQyzu7e#vCw?~++Tg)ZET>gl7X`hQ?2{28@IT2C<@ z>4$1yIx574s0VIFy@;N{O#COR<8`JQyP_gK23zB$F?*r{GpM)&)x+oQ1)riCN}Xmp z&>z*{h1d-XP}i@=-nbVPk#|rXI)mzXm+9t#S*ZIjLJc5RMy5NNn^8ADhQ07D?1?pJ znDc#6bGiUE;^o*CccMCS%%1-RHL|psCZhdO51fj+ektlbvca5>Iro#%TpmJgr%y2* ze?^6|$1Jl5v(cqI9s6JjYHGHjI`%AT>OMq0p!#fMD{Cg|Ipa~+6``x||2i@X;e)8v z{IYj~MTfeu;T#jfOjL&^pc-0i>sMhW<-4#S9<}8&ID&E}ABqeNqjt|ds7T+3-u^#A zMh$<3nyVV~%vY}sYAVKK6D&oA@;cNay4QLT>r?(G*2Pb-DSnF$vHE=T?P!YCD7VGN z*a2hB$@C{v3opbpoQ1VQ1vP}0`_!}^6)uRUGY4AXE3>i!w1`~0@N z{37D76YHp`gZHA|RJ*YeK7#7$Vblm;N4B){fj!^*VskzV720X22h2rHNg--rn^03w zi9PTY)N@Z?%>4H!(`bQtSC7Gkl(*mz{1>*uzEmodQ?MB>L`7~Hw!qb>5m%zt(zB?J ze~cQ~DNIG@5@R*gfNI9bsOL>lp=yO~upg?S>8OUnsPk9jdAJGHv7Oi&pF=I)4^Y=T zi_Ercf_g6uMMbm#+u&uWT@<^OjBb1u`{GBKh0QKC+iDiJq+Eh}&>GZ;x1&1vG^(NZ za1b_HY|f8Ig?=$=fCZ??g;0@Og$;PVa~BznYzJ!59m2u*B38%LC1ymmP}{Dhb%Zq+ z^&VJ_n%mu|5&i=Q;18&6+}+1}A1_3;vle@5|35@#3>9yqZfu`pUNl*#jx9n(pbRyl z^{BOQ2WqiyM@_|U>kFtU_z*Q!KjH|ik!u#=SR6<>g2Q;evxAIQ<0q&&I*od8-8}Q) zj;N4lp&Fcvx-Q?A%TW)!0d?Ib)Z%&swHuzsnfNLaa;LN3OhrG8Rik1enN*yDdVx&0 zF2Ht_{a6oIp+Fs9>*4pP2mFS5w>J-(5%t9SlqaI*b}s7rTw5Qu^(%2a z^=nY~AH&)h`-F@h_%&*7su!CJTB8i!R~ z0se>@P-@83H$^%SbGn+0(+BHt!4RB=qp>Y+K&|$@sE|L68sR&r2c5)G_zmg-nPD@a zY*eV{qdFEqb>wPngzK@j_WxEg8u5=v6xER%u`%9_3guo~K8#wFucM~s z2h?2FE;S=;jOmoyqarjFo8TOrj0HFd6Btt{Kes1NVK(K_5wp)%p?V(2Mz{%e{SMTK z_n|`jG%6BrpmxJAsHtiiHLu!CY)pABs$&H>7;lRb{~l!iMnxw6jGCkFW#&~o2(_I? zU_-nZ)saH1kIPXJyAG@47Sw|)Q4x6xo8b$n>)ypC_#-M3waSVAg=A)zo1Wi;wJ1N1 zdcZR{0RM(fG4(R@tGGE{Ksg)LvCB~%TZ0@6WJEnoMKnhfMUaK z#Z1(Ng{Tl+g@Z6|eG&UpPN^^*9f*q52-G4Qk1cR2YAW(^7#5*Act7fayHF8%8i`oU zIZj3+{KWdBwc6#5^L`4Q!Iqr=VWk;SgDcDf(@>FWhYERr)Krbbaae(h#51V1brjXk z|60?oRK%G7zGQSF3$=LWp^FhzL~cdB`*)*8a0KB2k7Xd70d$}gct@H(o2k5L^vgXdw>tIc(tQ6oyn4miq|b5L_! zhI#|8MYVG?YAx(Q4P?*N#9yI3Kt%_91J#jVup@T5#xyh@wYo2{KsfL3Q}NYt0mPQpgqhfmCP>j742=DXO7m*cGqDE_ffh_!6q)U!ta} z_9|l+)JR9;5L|?c=~=~=Ee-{MtLx*LyJ-8gP4u0 zP#t(4`{GB~ADdlocEKdn3uiqJ#Dmxme?WCG*7XJxfyJoB5kf`cI@CzE+VT^qNWE_B zKf;cbf5Q&gVYPXYjX`zPhYEQJt78ncrdFY*@>Z;&{lArrF1*jWA9djisBQKJ*22$F zk@^m`?W*5sI&>Z?l=NAJJ?-)1WwL0y=%96cnY-!>a8*7yP+O90Cj!}Y8UuW9ly-huR(7uU@O+2lOW^b%ScF^Z%`xr32S1? zTGO%G*p_l*RKtBx4;qJB0}D`7bQyNX>v1^lMNR2fsI^e*CNpING1iNU`D8Sg*P=qd z9o6uDRL@_s^(RnM@--^N&N?&V#;EIh*m4%?x;Z!i^HBr43)^EQDguYrG5@;pI2HQX zoWy?E{$}1%I1B6G3s?`2p{D3vR7XF>E_ez%VVm{l{V@tPpry9F4!cr*40YWJRAf?b zA^ttdjJm~apCZ)uxf{FTG3zg=2X)wB9xws*Vp)co^EId`xfj*m-)vcKTH;*=5#%(V~?Xo_`a>LcB{FsH>%+!sP>|^*&gMjqy%wiaW6tK83CEO;iVe!sa~RX|%;GrmonG@<>d>xv2eKjOy50 zTfPU?!6#7<_yh;zFQ`cNz1w^n@^CEW?Wm4_fwi&mJ!W97FxHof;kF`-Ehuk9g?txg z;ajK?rfoGn?`<7#U4jibUx6C=YSchB<9YZHs-uUn1|G+T`1V%fuhslH6$){aZDx+! zp~_=WQ!^dafqc{=x*XNuR#apXsE|I7>cIP`kbjT5zd@zBzccE-3sCn>t&Eu)mr$V> zO$F*>vkL3tP4>b&tUFPmK8SkIPnd?a?lt$fM~%D(x;PTm-Vz*-g{Z~77rh9?$aJLQ zbJTmF!Jo|b8H&0vf^BgtDgp;>`Bl_n`WD+`{Xd&_dZWtIu?>c?KHh|>xXHQ&H8ruV zWHcuap+d4B)xclT#m`V9tb3nnup@el6xFf0*aai#;wIFCpTJ@G1`fie+syzjM4exZ z3_RwnB-4(Ht=Ji#!an$sEjPX2OwkZ@sh?%b5$r;F9S+9?>OtS39?<;(Gq7>i$*46k z6BW52*3Q(T+Qel6}2eCSShq~bus(~gu%!AXh8|B&96)#5(;9gXFFQB&L z$Ed}bw$tpUzNqU$IELptaWXUU4b=AQvCA|t8WrlrsJSo0nz#lV;RdXOm8cHxLan72 zP#yRj6`@+YS%{d9Di>oOmQ_esa=c5{2j#?wPp*r*cYC9c7 zMdlc)BVS^Dto@)_WX*6Q<*umuFzWu54-$WccmoyH@OG?$n^7a(hI-)rSR0=}HIT$f z_zG$yt@fG@kHcP+L)ZZ~qayMoX5)LP4tIFS?6QFm5&s@kgs9M*+=&<9LA(NgMs=X< zVbjoRRHSyHMw~)=)gLu)zBbr^a(`6hvaudc!%i4mKt`du61AAN zp&HnU4e>DQhGVET@GdsN)2Id->@)ZEMLl2`>iUVOj?TfxxEQrdmSI!86KOx@>?Wf{ za{%>#H&CJd5%unFwBMAwq8^xyii{seU@_`JyYYN{47GNSq8|L3^%Fdg^3T`|Yd@wn z#r(G;qmgz)H9QE1;0V-6FGG!JjV<4fx_$?0svgG~cn}rphL4*Ev_W;CpLHy1c$T-15cr@>+%;9xq+yun~8ehLhO&ls18=5I=tQ1 z??b&0K11*Ke~%|j2?69?mARHS03$tVJ8hfEJgp+Y$wRlgL~!8o?X2T*hQJZcKw zM~(a>Dk9&Y7VEF}e51pr<7ue(Lndl~!;LX#vORGzD#ZDykgmYKcq5L&12`W4je78y zqQ+Rwn2(cIVnc@dg|X% zg+10-@4{M~yNYXqSc)4`s)obKD@dJegIf9Tb5UnJO`1#nI@HmJd^%pl`5*8N(pY<6 z4?N%IsdjE8|AI0c*Pc~xYWUZ*ozvoo)!?+?n)|#wL-nX3ypYFd|JEzU1B)#v;zqqLlJ_i)W>+r}XBH`}Y0;6P-(kAjfyc+%q&$;i(KS_$%>*ir~(gUOyNU>)* zIgHGEq^9=9YBaQ#ydQN`k}f6PqXNePuAOYM=ls?0gjSq8`?!E|W7^54@&eo5+vN2r zzE|t-dMfYWqTTk!S)90%x-U>i8|ru2b6uL8e$)$@=cseD#LL# zdHuEslXAJ{fA#+VH6pQTn8}I^Kf0X=aoA>r#Q!1{eVhif%XdQ`M891ko>=Fd$IQ^4E&GA=Tn}^g(o=InfzO%f#h}cCf#<{_4O(LLb)z} zV(Vw%Hl#^~qHbv_^MAkYgIn(njh=;v*QllFVnMKapBfp(Bk3 z_>VJ;KU0+9xR7&o?Rk}7A`K;F+VdUpADkbKAL1EZ#IcWbA?X&p2kbLcag34 zPVy&6ic@!x^f>7z%3t7%_JSSc$CJGH-%4c#jg(PQK)RLG+Fp1k`MuE+l^g zb<4>Qw)M^NbIK(o9hcd9RYk-C!KrIQ?O>_eMaO|AJGNZj4;c(uX4h~M>x+@Q~0R_1q0{k~wJ z!dI$tPV$Keb$LEF&+nE+%6z4Pa76hjW3y)@N(SAO8b30mep4!P!y*6jKr#_>edgp( zLzYqWbLnFxBV`P?8~_`NT_yy8G85Q&!h^1`M5NRN2;p}o@b!==T(XxMAq zSDITGC=a`1X3tBE8@esEfiE{&=8Z7V7a5v(C#ywjqow}hl3>^wXN<(ZA8~c-;$-FW zKyldh(`>(F%mN5X|*(1yibMIM$H$y5XfWDldhJ9{q zX=8q%DBz4EFv%y1{e(+F^%a*eSe_gR<%Ua3{kc(k8FZt*;*P%L!(q3olU!Rh&a=9? zdF1%6RgvnG8}yZX&z-tr_RJ}SU(HrEns|5Q9VrW_iTd5*a9&uanXVG1o|bcSp_GX| zcTzIk8NO1jj7Xs`hk1?qN|_>B4f%8Z5iJ$970722<_w%)u}MREYwl(IzpET)Xalhb}p9YYAT z++APL+aG!U950R~{!+%kP#I0ID$J()oGK1PHO!zFy-0lT%&|QQUqr=#_e{IZScG=( zoweNKU(Srhv;cf%JR<6a(CmX^e_p`HUSW1h%L6QVuWQakI|1ixtg{v-O)+=B@8;f2 zJj>G`3i@(+h_|Ei{855pf}s^1^Op19k0gja#yR|=MWQ^d#2xuEkoJ32=%MVigyJ>vDeq_AYh)YRZ|?+YftOjx2!C=ClQ(VS+yDyO3O;Z@tF%Qom9qdW-A3k-WbiymHLCe zXrP=8<}HqJC_hk8#&Y*IqFE$oEkkz&vlq%sY+tY~B_6rtqj>7#Ce1Rka!NzZ*9BZKS^br`h68A4*Oy$*{oabwh$9d6n0cC5jV;=g&lwP0@dAB4={t( zl8yJzeXIG{X`1W;1&;;I1bQEoc)h%vn-%Em!W#JFyAkHQaeLl`)QK!0`|WbWUO;_O ze?ho3xyNVTuhC>B?;Lv1>hG-=s`9KuJ}10yqP!T3wP-UEZ|2Xd7MnH2d%skDBUw3@ zX-AnC;ver|Z#n+4SN~&B$sLiX&zbxGYwN#9(``-w&Tfq0v4VVw^rf>?YIwbfzp}7- zJ*`)+^nL&=FS;S6^;s`J>i<~#?8A;k|@&l9d$!Cd1A52Mc|X zicqpLm`u1udS5eke^H^oB5^d5Qq8=xa{{5fb1x0JOZ~w}MKX~%T0SMETXuz;e6nB# zt@)$gAdC5Y_)CkDJ3>*n>H$lA@wDY#v$HFLMZRFMuOe9)aq~+9kw|h+)O+Y3&v(1$ zMtnuyzKK-$d6QMJS^W_|*M)k-vzE7ur>;nAr8iK1vT|wAEei0orT$2T8sgE3i?5{}fD{_fXWwFmK^aoc&iA>0uss|D3K!o*6 zu%gNR!Du0)+Goc>!=?UcO~2{Np)01>pBP}SBIes0KeoF?qVbixQexvOSXb=sWFn6@ zaL8ZmM$7Ud6>g57X<;)I`71&J*H^)||2@_@z6^I_xL^grD)N=&M#90o-lhdjfG-rz zBmO}?wQiApqa`c#)?tzqm|_U&P?33~I4dMtpJi<_Vn{ zAF+-Sg|diSs7OWKa8X#*-rGJs#~+IOZ_et--G$*ugx}0nb3MQ<;ulI0J#>S9rXaE5 z=IPZ2d7FdK=$rQ+3qHhp%<%`4J4#q$EdPSAzQ_^1Y2zn0OmW9m@FmoX$i%%!p(`Rh zRB72p<2^R6ZRoXM$YKq$&-TQ>-Po+<_^Oqrsdvq4@>W~?yN%~}nVftw7-4yMvF8)S zcPbJt%3=BZ$CWL|Ym!*;-aH$AGs+`I*m7 zcJt$}+}dW)c>U^k1Kwv}Zv|paIRDsc`VJE3GXBs7*I%$A`D8R2|KirHTCV-N*Sl?E zLv7n~g3A_S@EdPSYiSo9U(RzQtCR679&C_Ua$D<^LB(aEBE8RfkN8<@dBoVYAN2ov z%6`==ZhyIp_f@CM(W-Y7Yooy15B3G)2BOi#xH~ec$Ddp|Hh%A2Lnlrxi~6GcTVY2b z-thYQG&tr@vfm!7HnumX>wmM@%CM%De>st?{=8RUi21}T@8Ni zL%V~#kAA#zXIje8#Eg4(rM8^xkFxhGlKZ1k^Zw-Rq~4UrPjB1S$y+Q{ab)>cM0JXZ zXAkp3AUCYmmhxA8lVCRhzD_H_H^(}wp)\n" "Language-Team: \n" "Language: hu_HU\n" @@ -19,267 +19,494 @@ msgstr "" "X-Poedit-KeywordsList: _;gettext;gettext_noop\n" "X-Poedit-Basepath: .\n" "X-Poedit-SourceCharset: UTF-8\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.6.10\n" "X-Poedit-SearchPath-0: ../../../..\n" -# "Session not started or timeout" -#: ../../../../ajax/ajax_appMgmtSave.php:34 -#: ../../../../ajax/ajax_accountSave.php:33 ../../../../ajax/ajax_import.php:1 -#: ../../../../ajax/ajax_configSave.php:33 ../../../../ajax/ajax_backup.php:32 -#: ../../../../ajax/ajax_migrate.php:1 -#: ../../../../ajax/ajax_sendRequest.php:32 -#: ../../../../ajax/ajax_checkLdap.php:32 -msgid "La sesión no se ha iniciado o ha caducado" -msgstr "A munkamenet nem indult el, vagy idõtúllépés miatt bezáródott" - # "INVALID QUERY" -#: ../../../../ajax/ajax_appMgmtSave.php:40 -#: ../../../../ajax/ajax_accountSave.php:39 ../../../../ajax/ajax_import.php:1 -#: ../../../../ajax/ajax_configSave.php:39 ../../../../ajax/ajax_backup.php:38 -#: ../../../../ajax/ajax_passReset.php:34 ../../../../ajax/ajax_files.php:40 -#: ../../../../ajax/ajax_migrate.php:1 ../../../../ajax/ajax_search.php:38 -#: ../../../../ajax/ajax_sendRequest.php:38 -#: ../../../../ajax/ajax_checkLdap.php:38 -#: ../../../../ajax/ajax_getFiles.php:43 +#: ../../../../ajax/ajax_2fa.php:35 ../../../../ajax/ajax_accountSave.php:41 +#: ../../../../ajax/ajax_appMgmtSave.php:42 +#: ../../../../ajax/ajax_backup.php:39 ../../../../ajax/ajax_checkLdap.php:41 +#: ../../../../ajax/ajax_configSave.php:41 ../../../../ajax/ajax_files.php:41 +#: ../../../../ajax/ajax_getFiles.php:46 ../../../../ajax/ajax_import.php:49 +#: ../../../../ajax/ajax_migrate.php:45 ../../../../ajax/ajax_passReset.php:37 +#: ../../../../ajax/ajax_search.php:41 +#: ../../../../ajax/ajax_sendRequest.php:41 +#: ../../../../ajax/ajax_userPrefsSave.php:42 msgid "CONSULTA INVÁLIDA" msgstr "Érvénytelen lekérdezés" -# "Username required" -#: ../../../../ajax/ajax_appMgmtSave.php:73 -msgid "Es necesario un nombre de usuario" +# "Incorrect login" +#: ../../../../ajax/ajax_2fa.php:55 +#, fuzzy +msgid "Código correcto" +msgstr "Hibás felhasználónév vagy jelszó" + +# "Incorrect login" +#: ../../../../ajax/ajax_2fa.php:58 ../../../../ajax/ajax_userPrefsSave.php:67 +#, fuzzy +msgid "Código incorrecto" +msgstr "Hibás felhasználónév vagy jelszó" + +# "Session not started or timeout" +#: ../../../../ajax/ajax_accountSave.php:35 +#: ../../../../ajax/ajax_appMgmtSave.php:36 +#: ../../../../ajax/ajax_backup.php:33 ../../../../ajax/ajax_checkLdap.php:35 +#: ../../../../ajax/ajax_configSave.php:35 ../../../../ajax/ajax_import.php:35 +#: ../../../../ajax/ajax_migrate.php:35 +#: ../../../../ajax/ajax_sendRequest.php:35 +#: ../../../../ajax/ajax_userPrefsSave.php:36 +#: ../../../../ajax/ajax_viewpass.php:36 +msgid "La sesión no se ha iniciado o ha caducado" +msgstr "A munkamenet nem indult el, vagy idõtúllépés miatt bezáródott" + +# "Account name needed" +#: ../../../../ajax/ajax_accountSave.php:75 +#: ../../../../ajax/ajax_accountSave.php:92 +msgid "Es necesario un nombre de cuenta" +msgstr "Fiók név szükséges" + +# "Customer name needed" +#: ../../../../ajax/ajax_accountSave.php:77 +#: ../../../../ajax/ajax_accountSave.php:90 +#: ../../../../ajax/ajax_appMgmtSave.php:326 +msgid "Es necesario un nombre de cliente" +msgstr "Ügyfél név szükséges" + +# "Username needed" +#: ../../../../ajax/ajax_accountSave.php:79 +#: ../../../../ajax/ajax_accountSave.php:94 +msgid "Es necesario un usuario" msgstr "Felhasználónév szükséges" -# "Login required" -#: ../../../../ajax/ajax_appMgmtSave.php:77 -msgid "Es necesario un login" -msgstr "Bejelentkezés szükséges" - -# "Profile required" -#: ../../../../ajax/ajax_appMgmtSave.php:81 -msgid "Es necesario un perfil" -msgstr "Profil szükséges" - -# "Group required" -#: ../../../../ajax/ajax_appMgmtSave.php:85 -msgid "Es necesario un grupo" -msgstr "Csoport szükséges" - -# "Email required" -#: ../../../../ajax/ajax_appMgmtSave.php:89 -msgid "Es necesario un email" -msgstr "Email szükséges" - -# "Duplicated user login " -#: ../../../../ajax/ajax_appMgmtSave.php:107 -msgid "Login de usuario duplicado" -msgstr "Dupla felhasználó bejelentkezés" - -# "Duplicated user email" -#: ../../../../ajax/ajax_appMgmtSave.php:110 -msgid "Email de usuario duplicado" -msgstr "Kettõzött felhasználó Email" - -# "Password cannot be blank" -#: ../../../../ajax/ajax_appMgmtSave.php:116 -#: ../../../../ajax/ajax_appMgmtSave.php:142 -#: ../../../../ajax/ajax_accountSave.php:105 -msgid "La clave no puede estar en blanco" -msgstr "A jelszó nem lehet üres" +# "Password needed" +#: ../../../../ajax/ajax_accountSave.php:81 +msgid "Es necesario una clave" +msgstr "Jelszó szükséges" # "Passwords mismatch" -#: ../../../../ajax/ajax_appMgmtSave.php:120 -#: ../../../../ajax/ajax_appMgmtSave.php:146 #: ../../../../ajax/ajax_accountSave.php:83 -#: ../../../../ajax/ajax_accountSave.php:109 +#: ../../../../ajax/ajax_accountSave.php:107 +#: ../../../../ajax/ajax_appMgmtSave.php:111 +#: ../../../../ajax/ajax_appMgmtSave.php:146 +#: ../../../../ajax/ajax_backup.php:62 msgid "Las claves no coinciden" msgstr "A jelszó nem egyezik" -# "User added" -#: ../../../../ajax/ajax_appMgmtSave.php:124 -msgid "Usuario creado" -msgstr "Felhasználó hozzáadva" +# "Category name needed" +#: ../../../../ajax/ajax_accountSave.php:85 +#: ../../../../ajax/ajax_accountSave.php:96 +#, fuzzy +msgid "Es necesario una categoría" +msgstr "Jelszó szükséges" -# "Error on creating user" -#: ../../../../ajax/ajax_appMgmtSave.php:127 -msgid "Error al crear el usuario" -msgstr "Hiba a felhasználó létrehozása közben" +# "Invalid Id" +#: ../../../../ajax/ajax_accountSave.php:100 +#: ../../../../ajax/ajax_accountSave.php:111 +msgid "Id inválido" +msgstr "Érvénytelen Id" -# "User updated" -#: ../../../../ajax/ajax_appMgmtSave.php:130 -#: ../../../../inc/users.class.php:224 -msgid "Usuario actualizado" -msgstr "Felhasználó frissítve" +# "Password cannot be blank" +#: ../../../../ajax/ajax_accountSave.php:105 +#: ../../../../ajax/ajax_appMgmtSave.php:109 +#: ../../../../ajax/ajax_appMgmtSave.php:144 +msgid "La clave no puede estar en blanco" +msgstr "A jelszó nem lehet üres" -# "Error on user update" -#: ../../../../ajax/ajax_appMgmtSave.php:133 -msgid "Error al actualizar el usuario" -msgstr "Hiba a felhasználó frissítése közben" +# "Invalid Action" +#: ../../../../ajax/ajax_accountSave.php:114 +#: ../../../../ajax/ajax_accountSave.php:258 +#: ../../../../ajax/ajax_appMgmtSave.php:532 +#: ../../../../ajax/ajax_configSave.php:290 +#: ../../../../ajax/ajax_userPrefsSave.php:80 ../../../../api.php:53 +msgid "Acción Inválida" +msgstr "Érvénytelen Akció" -# "Ey, this is a DEMO!!" -#: ../../../../ajax/ajax_appMgmtSave.php:138 -#: ../../../../ajax/ajax_appMgmtSave.php:160 -#: ../../../../ajax/ajax_import.php:1 ../../../../ajax/ajax_configSave.php:214 -#: ../../../../ajax/ajax_migrate.php:1 -msgid "Ey, esto es una DEMO!!" -msgstr "Aj, ez egy próbaverzió" +# "Account added" +#: ../../../../ajax/ajax_accountSave.php:168 +msgid "Cuenta creada" +msgstr "Fiók hozzáadva" + +# "Error on account creation" +#: ../../../../ajax/ajax_accountSave.php:171 +msgid "Error al crear la cuenta" +msgstr "Hiba a fiók létrehozása közben" + +# "No changes" +#: ../../../../ajax/ajax_accountSave.php:206 +msgid "Sin cambios" +msgstr "Nincsenek változások" + +# "Account updated" +#: ../../../../ajax/ajax_accountSave.php:218 +msgid "Cuenta actualizada" +msgstr "Fiók frissítve" + +# "Error on updating account" +#: ../../../../ajax/ajax_accountSave.php:221 +msgid "Error al modificar la cuenta" +msgstr "Hiba a fiók frissítése közben" + +# "Account deleted" +#: ../../../../ajax/ajax_accountSave.php:228 +msgid "Cuenta eliminada" +msgstr "Fiók törölve" + +# "Error on account deletion" +#: ../../../../ajax/ajax_accountSave.php:231 +msgid "Error al eliminar la cuenta" +msgstr "Hiba a fiók törlése közben" # "Password updated" -#: ../../../../ajax/ajax_appMgmtSave.php:153 -#: ../../../../ajax/ajax_accountSave.php:237 -#: ../../../../ajax/ajax_passReset.php:79 +#: ../../../../ajax/ajax_accountSave.php:241 +#: ../../../../ajax/ajax_appMgmtSave.php:150 +#: ../../../../ajax/ajax_passReset.php:74 msgid "Clave actualizada" msgstr "Jelszó frissítve" # "Error on updating password" -#: ../../../../ajax/ajax_appMgmtSave.php:156 -#: ../../../../ajax/ajax_passReset.php:83 +#: ../../../../ajax/ajax_accountSave.php:244 +msgid "Error al actualizar la clave" +msgstr "Hiba a jelszó frissítése közben" + +# "Account restored" +#: ../../../../ajax/ajax_accountSave.php:251 +msgid "Cuenta restaurada" +msgstr "Fiók restaurált" + +# "Error on restoring account" +#: ../../../../ajax/ajax_accountSave.php:254 +msgid "Error al restaurar cuenta" +msgstr "Hiba történt helyreállítása számla" + +# "User" +#: ../../../../ajax/ajax_appMgmtData.php:54 +#, fuzzy +msgid "Ver Usuario" +msgstr "Felhasználó részletek" + +# "Edit User" +#: ../../../../ajax/ajax_appMgmtData.php:61 +#: ../../../../web/UsersMgmtC.class.php:136 +msgid "Editar Usuario" +msgstr "Felhasználó módosítás" + +# "New User" +#: ../../../../ajax/ajax_appMgmtData.php:67 +#: ../../../../inc/UserBase.class.php:381 +#: ../../../../web/UsersMgmtC.class.php:121 +msgid "Nuevo Usuario" +msgstr "Új felhasználó" + +# "Group" +#: ../../../../ajax/ajax_appMgmtData.php:73 +#, fuzzy +msgid "Ver Grupo" +msgstr "Nézet" + +# "Edit Group" +#: ../../../../ajax/ajax_appMgmtData.php:80 +#: ../../../../web/UsersMgmtC.class.php:202 +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:194 +msgid "Nuevo Grupo" +msgstr "Új csoport" + +# "Profile" +#: ../../../../ajax/ajax_appMgmtData.php:92 +#, fuzzy +msgid "Ver Perfil" +msgstr "Nézet" + +# "Edit Profile" +#: ../../../../ajax/ajax_appMgmtData.php:99 +#: ../../../../web/UsersMgmtC.class.php:267 +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:252 +msgid "Nuevo Perfil" +msgstr "Új profil" + +# "Customer" +#: ../../../../ajax/ajax_appMgmtData.php:111 +#, fuzzy +msgid "Ver Cliente" +msgstr "Nézet" + +# "Edit Customer" +#: ../../../../ajax/ajax_appMgmtData.php:118 +#: ../../../../web/AccountsMgmtC.class.php:152 +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:145 +msgid "Nuevo Cliente" +msgstr "Új ügyfél" + +# "Category" +#: ../../../../ajax/ajax_appMgmtData.php:130 +#, fuzzy +msgid "Ver Categoría" +msgstr "Nézet" + +# "Edit Category" +#: ../../../../ajax/ajax_appMgmtData.php:137 +#: ../../../../web/AccountsMgmtC.class.php:94 +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:86 +msgid "Nueva Categoría" +msgstr "Új Kategória" + +# "Update" +#: ../../../../ajax/ajax_appMgmtData.php:149 +#, fuzzy +msgid "Ver Autorización" +msgstr "Nézet" + +# "Update" +#: ../../../../ajax/ajax_appMgmtData.php:156 +#: ../../../../inc/ApiTokens.class.php:189 +#: ../../../../web/UsersMgmtC.class.php:399 +#, fuzzy +msgid "Nueva Autorización" +msgstr "Új Kategória" + +# Start Update +#: ../../../../ajax/ajax_appMgmtData.php:162 +#: ../../../../web/UsersMgmtC.class.php:414 +#, fuzzy +msgid "Editar Autorización" +msgstr "Módosítás" + +# "New Group" +#: ../../../../ajax/ajax_appMgmtData.php:168 +#: ../../../../web/AccountsMgmtC.class.php:273 +#, fuzzy +msgid "Nuevo Campo" +msgstr "Új felhasználó" + +# "Edit Password" +#: ../../../../ajax/ajax_appMgmtData.php:174 +#: ../../../../web/AccountsMgmtC.class.php:280 +#, fuzzy +msgid "Editar Campo" +msgstr "Módosítás" + +# "Username required" +#: ../../../../ajax/ajax_appMgmtSave.php:85 +msgid "Es necesario un nombre de usuario" +msgstr "Felhasználónév szükséges" + +# "Login required" +#: ../../../../ajax/ajax_appMgmtSave.php:87 +msgid "Es necesario un login" +msgstr "Bejelentkezés szükséges" + +# "Profile required" +#: ../../../../ajax/ajax_appMgmtSave.php:89 +msgid "Es necesario un perfil" +msgstr "Profil szükséges" + +# "Group required" +#: ../../../../ajax/ajax_appMgmtSave.php:91 +msgid "Es necesario un grupo" +msgstr "Csoport szükséges" + +# "Email required" +#: ../../../../ajax/ajax_appMgmtSave.php:93 +msgid "Es necesario un email" +msgstr "Email szükséges" + +# "Ey, this is a DEMO!!" +#: ../../../../ajax/ajax_appMgmtSave.php:95 +#: ../../../../ajax/ajax_appMgmtSave.php:142 +#: ../../../../ajax/ajax_appMgmtSave.php:157 +#: ../../../../ajax/ajax_configSave.php:265 +#: ../../../../ajax/ajax_import.php:39 ../../../../ajax/ajax_migrate.php:39 +#: ../../../../ajax/ajax_userPrefsSave.php:56 +msgid "Ey, esto es una DEMO!!" +msgstr "Aj, ez egy próbaverzió" + +# "Duplicated user login " +#: ../../../../ajax/ajax_appMgmtSave.php:100 +msgid "Login de usuario duplicado" +msgstr "Dupla felhasználó bejelentkezés" + +# "Duplicated user email" +#: ../../../../ajax/ajax_appMgmtSave.php:103 +msgid "Email de usuario duplicado" +msgstr "Kettõzött felhasználó Email" + +# "User added" +#: ../../../../ajax/ajax_appMgmtSave.php:122 +msgid "Usuario creado" +msgstr "Felhasználó hozzáadva" + +# "Error on creating user" +#: ../../../../ajax/ajax_appMgmtSave.php:125 +msgid "Error al crear el usuario" +msgstr "Hiba a felhasználó létrehozása közben" + +# "User updated" +#: ../../../../ajax/ajax_appMgmtSave.php:135 +#: ../../../../inc/UserUtil.class.php:103 +msgid "Usuario actualizado" +msgstr "Felhasználó frissítve" + +# "Error on user update" +#: ../../../../ajax/ajax_appMgmtSave.php:138 +msgid "Error al actualizar el usuario" +msgstr "Hiba a felhasználó frissítése közben" + +# "Error on updating password" +#: ../../../../ajax/ajax_appMgmtSave.php:153 +#: ../../../../ajax/ajax_passReset.php:78 msgid "Error al modificar la clave" msgstr "Hiba a jelszó frissítése közben" # "Unable to delete, user in use" -#: ../../../../ajax/ajax_appMgmtSave.php:166 +#: ../../../../ajax/ajax_appMgmtSave.php:159 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:170 +#: ../../../../ajax/ajax_appMgmtSave.php:163 msgid "Usuario eliminado" msgstr "Felhasználó törölve" # "Error on user deletion" -#: ../../../../ajax/ajax_appMgmtSave.php:173 +#: ../../../../ajax/ajax_appMgmtSave.php:166 msgid "Error al eliminar el usuario" msgstr "Hiba a felhasználó törlése közben" -# "Invalid Action" -#: ../../../../ajax/ajax_appMgmtSave.php:176 -#: ../../../../ajax/ajax_appMgmtSave.php:237 -#: ../../../../ajax/ajax_appMgmtSave.php:315 -#: ../../../../ajax/ajax_appMgmtSave.php:366 -#: ../../../../ajax/ajax_appMgmtSave.php:415 -#: ../../../../ajax/ajax_accountSave.php:116 -#: ../../../../ajax/ajax_accountSave.php:268 -#: ../../../../ajax/ajax_configSave.php:229 -msgid "Acción Inválida" -msgstr "Érvénytelen Akció" - # "Group name required" -#: ../../../../ajax/ajax_appMgmtSave.php:185 +#: ../../../../ajax/ajax_appMgmtSave.php:181 msgid "Es necesario un nombre de grupo" msgstr "Csoport név szükséges" # "Duplicated group name" -#: ../../../../ajax/ajax_appMgmtSave.php:193 +#: ../../../../ajax/ajax_appMgmtSave.php:189 msgid "Nombre de grupo duplicado" msgstr "Kettõzött csoport név" # "Group added" -#: ../../../../ajax/ajax_appMgmtSave.php:198 +#: ../../../../ajax/ajax_appMgmtSave.php:201 msgid "Grupo creado" msgstr "Csoport hozzáadva" # "Error on group creation" -#: ../../../../ajax/ajax_appMgmtSave.php:200 +#: ../../../../ajax/ajax_appMgmtSave.php:203 msgid "Error al crear el grupo" msgstr "Hiba a csoport létrehozása közben" # "Group updated" -#: ../../../../ajax/ajax_appMgmtSave.php:204 +#: ../../../../ajax/ajax_appMgmtSave.php:214 msgid "Grupo actualizado" msgstr "Csoport frissítve" # "Error on updating group" -#: ../../../../ajax/ajax_appMgmtSave.php:207 +#: ../../../../ajax/ajax_appMgmtSave.php:217 msgid "Error al actualizar el grupo" msgstr "Hiba a csoport frissítése közben" # "Users" -#: ../../../../ajax/ajax_appMgmtSave.php:218 -#: ../../../../ajax/ajax_appMgmtSave.php:295 -#: ../../../../inc/tpl/profiles.php:88 ../../../../inc/tpl/accounts.php:281 +#: ../../../../ajax/ajax_appMgmtSave.php:226 +#: ../../../../ajax/ajax_appMgmtSave.php:303 +#: ../../../../inc/CustomFieldsBase.class.php:83 +#: ../../../../inc/themes/classic/account.inc:109 +#: ../../../../inc/themes/classic/groups.inc:24 +#: ../../../../inc/themes/classic/profiles.inc:85 +#: ../../../../inc/themes/material-blue/account.inc:134 +#: ../../../../inc/themes/material-blue/groups.inc:32 +#: ../../../../inc/themes/material-blue/profiles.inc:99 msgid "Usuarios" msgstr "Felhasználók" # "Accounts" -#: ../../../../ajax/ajax_appMgmtSave.php:222 -#: ../../../../ajax/ajax_appMgmtSave.php:353 -#: ../../../../inc/category.class.php:265 ../../../../inc/tpl/profiles.php:45 +#: ../../../../ajax/ajax_appMgmtSave.php:230 +#: ../../../../inc/Category.class.php:266 +#: ../../../../inc/CustomFieldsBase.class.php:80 +#: ../../../../inc/Customer.class.php:150 +#: ../../../../inc/themes/classic/profiles.inc:15 +#: ../../../../inc/themes/material-blue/config.inc:139 +#: ../../../../inc/themes/material-blue/profiles.inc:19 msgid "Cuentas" msgstr "Fiókok" # "Unable to delete" -#: ../../../../ajax/ajax_appMgmtSave.php:225 -#: ../../../../ajax/ajax_appMgmtSave.php:297 -#: ../../../../ajax/ajax_appMgmtSave.php:355 -#: ../../../../ajax/ajax_appMgmtSave.php:404 +#: ../../../../ajax/ajax_appMgmtSave.php:233 +#: ../../../../ajax/ajax_appMgmtSave.php:305 +#: ../../../../inc/Category.class.php:119 +#: ../../../../inc/Customer.class.php:150 msgid "No es posible eliminar" msgstr "Nem lehet törölni" # "Group in use by:" -#: ../../../../ajax/ajax_appMgmtSave.php:225 +#: ../../../../ajax/ajax_appMgmtSave.php:233 msgid "Grupo en uso por:" msgstr "Csoportot használja a:" # "Group deleted" -#: ../../../../ajax/ajax_appMgmtSave.php:230 +#: ../../../../ajax/ajax_appMgmtSave.php:238 msgid "Grupo eliminado" msgstr "Csoport törölve" # "Error on group deletion" -#: ../../../../ajax/ajax_appMgmtSave.php:233 +#: ../../../../ajax/ajax_appMgmtSave.php:241 msgid "Error al eliminar el grupo" msgstr "Hiba a csoport törlése közben" # "Profile name needed" -#: ../../../../ajax/ajax_appMgmtSave.php:267 +#: ../../../../ajax/ajax_appMgmtSave.php:280 msgid "Es necesario un nombre de perfil" msgstr "Profil név szükséges" # "Duplicated profile name" -#: ../../../../ajax/ajax_appMgmtSave.php:273 +#: ../../../../ajax/ajax_appMgmtSave.php:282 msgid "Nombre de perfil duplicado" msgstr "Kettözõtt profil név" # "Profile added" -#: ../../../../ajax/ajax_appMgmtSave.php:278 +#: ../../../../ajax/ajax_appMgmtSave.php:287 msgid "Perfil creado" msgstr "Profil hozzáadva" # "Error on creating profile" -#: ../../../../ajax/ajax_appMgmtSave.php:281 +#: ../../../../ajax/ajax_appMgmtSave.php:290 msgid "Error al crear el perfil" msgstr "Hiba a profil létrehozása közben" # "Profile updated" -#: ../../../../ajax/ajax_appMgmtSave.php:284 +#: ../../../../ajax/ajax_appMgmtSave.php:293 msgid "Perfil actualizado" msgstr "Profil frissítve" # "Error on updating profile" -#: ../../../../ajax/ajax_appMgmtSave.php:287 +#: ../../../../ajax/ajax_appMgmtSave.php:296 msgid "Error al actualizar el perfil" msgstr "Hiba a profil frissítése közben" # "Profiles in use by:" -#: ../../../../ajax/ajax_appMgmtSave.php:297 +#: ../../../../ajax/ajax_appMgmtSave.php:305 msgid "Perfil en uso por:" msgstr "A profilt használja:" -# "Delete Profile" -#: ../../../../ajax/ajax_appMgmtSave.php:302 -#: ../../../../ajax/ajax_getContent.php:201 -msgid "Eliminar Perfil" -msgstr "Profil törlése" - -# "Profile" -#: ../../../../ajax/ajax_appMgmtSave.php:303 -#: ../../../../ajax/ajax_getContent.php:114 -#: ../../../../ajax/ajax_doLogin.php:153 -#: ../../../../inc/profiles.class.php:203 -#: ../../../../inc/profiles.class.php:254 ../../../../inc/tpl/users.php:98 -msgid "Perfil" -msgstr "Profil" - # "Profile deleted" #: ../../../../ajax/ajax_appMgmtSave.php:308 msgid "Perfil eliminado" @@ -290,3494 +517,5191 @@ msgstr "Profil törölve" msgid "Error al eliminar el perfil" msgstr "Hiba a profil törlése közben" -# "Customer name needed" -#: ../../../../ajax/ajax_appMgmtSave.php:324 -#: ../../../../ajax/ajax_accountSave.php:71 -#: ../../../../ajax/ajax_accountSave.php:88 -msgid "Es necesario un nombre de cliente" -msgstr "Ügyfél név szükséges" - -# "Duplicated customer name" -#: ../../../../ajax/ajax_appMgmtSave.php:331 -msgid "Nombre de cliente duplicado" -msgstr "Kettõzött ügyfél név" - # "Customer added" -#: ../../../../ajax/ajax_appMgmtSave.php:336 +#: ../../../../ajax/ajax_appMgmtSave.php:346 msgid "Cliente creado" msgstr "Ügyfél hozzáadva" -# "Error on creating customer" -#: ../../../../ajax/ajax_appMgmtSave.php:338 -#: ../../../../ajax/ajax_accountSave.php:152 -#: ../../../../ajax/ajax_accountSave.php:201 -msgid "Error al crear el cliente" -msgstr "Hiba az ügyfél létrehozása közben" - # "Customer updated" -#: ../../../../ajax/ajax_appMgmtSave.php:342 +#: ../../../../ajax/ajax_appMgmtSave.php:361 msgid "Cliente actualizado" msgstr "Ügyfél frissítve" -# "Error on updating customer" -#: ../../../../ajax/ajax_appMgmtSave.php:345 -msgid "Error al actualizar el cliente" -msgstr "Hiba az ügyfél frissítése közben" - -# "Customer in use by:" -#: ../../../../ajax/ajax_appMgmtSave.php:355 -msgid "Cliente en uso por:" -msgstr "Az ügyfelet a következõ használja:" - # "Customer deleted" -#: ../../../../ajax/ajax_appMgmtSave.php:359 +#: ../../../../ajax/ajax_appMgmtSave.php:371 msgid "Cliente eliminado" msgstr "Ügyfél törölve" -# "Error on customer deletion" -#: ../../../../ajax/ajax_appMgmtSave.php:362 -msgid "Error al eliminar el cliente" -msgstr "Hiba az ügyfél törlése közben" - # "Category name needed" -#: ../../../../ajax/ajax_appMgmtSave.php:375 +#: ../../../../ajax/ajax_appMgmtSave.php:385 msgid "Es necesario un nombre de categoría" msgstr "Kategória név szükséges" -# "Category name duplicated" -#: ../../../../ajax/ajax_appMgmtSave.php:382 -msgid "Nombre de categoría duplicado" -msgstr "Kategória neve duplázva" - # "Category added" -#: ../../../../ajax/ajax_appMgmtSave.php:387 +#: ../../../../ajax/ajax_appMgmtSave.php:405 msgid "Categoría creada" msgstr "Kategória hozzáadva" -# "Error on creating category" -#: ../../../../ajax/ajax_appMgmtSave.php:389 -msgid "Error al crear la categoría" -msgstr "Hiba a kategória létrehozása közben" - # "Category updated" -#: ../../../../ajax/ajax_appMgmtSave.php:393 +#: ../../../../ajax/ajax_appMgmtSave.php:420 msgid "Categoría actualizada" msgstr "Kategória frissítve" -# "Error on updating category" -#: ../../../../ajax/ajax_appMgmtSave.php:396 -msgid "Error al actualizar la categoría" -msgstr "Hiba a kategória frissítése közben" - -# "Category in use by:" -#: ../../../../ajax/ajax_appMgmtSave.php:404 -msgid "Categoría en uso por:" -msgstr "A kategóriát a következõ használja:" - # "Category deleted" -#: ../../../../ajax/ajax_appMgmtSave.php:408 +#: ../../../../ajax/ajax_appMgmtSave.php:431 msgid "Categoría eliminada" msgstr "Kategória törölve" -# "Error on category deletion" -#: ../../../../ajax/ajax_appMgmtSave.php:411 -msgid "Error al eliminar la categoría" -msgstr "Hiba a kategória törlése közben" +# "User/Pass not entered" +#: ../../../../ajax/ajax_appMgmtSave.php:447 +#, fuzzy +msgid "Usuario o acción no indicado" +msgstr "Felhasználó/jelszó nem lett kitöltve" -# "Edit User" -#: ../../../../ajax/ajax_appMgmtData.php:46 -#: ../../../../ajax/ajax_getContent.php:137 -msgid "Editar Usuario" -msgstr "Felhasználó módosítás" - -# "New User" -#: ../../../../ajax/ajax_appMgmtData.php:51 -#: ../../../../ajax/ajax_getContent.php:135 -#: ../../../../inc/users.class.php:787 -msgid "Nuevo Usuario" -msgstr "Új felhasználó" - -# "Edit Group" -#: ../../../../ajax/ajax_appMgmtData.php:56 -#: ../../../../ajax/ajax_getContent.php:168 -msgid "Editar Grupo" -msgstr "Csoport módosítás" - -# "New Group" -#: ../../../../ajax/ajax_appMgmtData.php:61 -#: ../../../../ajax/ajax_getContent.php:167 -#: ../../../../inc/groups.class.php:150 -msgid "Nuevo Grupo" -msgstr "Új csoport" - -# "Edit Profile" -#: ../../../../ajax/ajax_appMgmtData.php:66 -#: ../../../../ajax/ajax_getContent.php:200 -msgid "Editar Perfil" -msgstr "Profil módosítás" - -# "New Profile" -#: ../../../../ajax/ajax_appMgmtData.php:71 -#: ../../../../ajax/ajax_getContent.php:199 -#: ../../../../inc/profiles.class.php:202 -msgid "Nuevo Perfil" -msgstr "Új profil" - -# "Edit Customer" -#: ../../../../ajax/ajax_appMgmtData.php:76 -#: ../../../../ajax/ajax_getContent.php:285 -msgid "Editar Cliente" -msgstr "Ügyfél módosítás" - -# "New Customer" -#: ../../../../ajax/ajax_appMgmtData.php:81 -#: ../../../../ajax/ajax_getContent.php:284 -#: ../../../../inc/customer.class.php:56 -msgid "Nuevo Cliente" -msgstr "Új ügyfél" - -# "Edit Category" -#: ../../../../ajax/ajax_appMgmtData.php:86 -#: ../../../../ajax/ajax_getContent.php:253 -msgid "Editar Categoría" -msgstr "Kategória módosítás" - -# "New Category" -#: ../../../../ajax/ajax_appMgmtData.php:91 -#: ../../../../ajax/ajax_getContent.php:252 -#: ../../../../inc/category.class.php:77 -msgid "Nueva Categoría" -msgstr "Új Kategória" - -# "Download new version" -#: ../../../../ajax/ajax_checkUpds.php:41 -msgid "Descargar nueva versión" -msgstr "Új verzió letöltése" - -# "Updated" -#: ../../../../ajax/ajax_checkUpds.php:44 -msgid "Actualizado" -msgstr "Frissítve" - -# "Account name needed" -#: ../../../../ajax/ajax_accountSave.php:67 -#: ../../../../ajax/ajax_accountSave.php:92 -msgid "Es necesario un nombre de cuenta" -msgstr "Fiók név szükséges" - -# "Username needed" -#: ../../../../ajax/ajax_accountSave.php:75 -#: ../../../../ajax/ajax_accountSave.php:96 -msgid "Es necesario un usuario" -msgstr "Felhasználónév szükséges" - -# "Password needed" -#: ../../../../ajax/ajax_accountSave.php:79 -msgid "Es necesario una clave" -msgstr "Jelszó szükséges" - -# "Invalid Id" -#: ../../../../ajax/ajax_accountSave.php:100 -#: ../../../../ajax/ajax_accountSave.php:113 -msgid "Id inválido" -msgstr "Érvénytelen Id" - -# "Crypto module can't be loaded" -#: ../../../../ajax/ajax_accountSave.php:124 -#: ../../../../inc/import.class.php:237 -msgid "No se puede usar el módulo de encriptación" -msgstr "A Crypto modul nem tölthetõ be" - -# "Error on creating encryption data" -#: ../../../../ajax/ajax_accountSave.php:133 -#: ../../../../inc/import.class.php:244 -msgid "Error al generar datos cifrados" -msgstr "Hiba a titkosítási folyamat közben" - -# "Duplicated customer" -#: ../../../../ajax/ajax_accountSave.php:148 -#: ../../../../ajax/ajax_accountSave.php:197 -msgid "Cliente duplicado" -msgstr "Kettõzött ügyfél" - -# "Account added" -#: ../../../../ajax/ajax_accountSave.php:176 -msgid "Cuenta creada" +# "Account Activation" +#: ../../../../ajax/ajax_appMgmtSave.php:457 +#, fuzzy +msgid "Autorización creada" msgstr "Fiók hozzáadva" -# "Error on account creation" -#: ../../../../ajax/ajax_accountSave.php:178 -msgid "Error al crear la cuenta" -msgstr "Hiba a fiók létrehozása közben" - -# "No changes" -#: ../../../../ajax/ajax_accountSave.php:211 -msgid "Sin cambios" -msgstr "Nincsenek változások" - -# "Account updated" -#: ../../../../ajax/ajax_accountSave.php:216 -#: ../../../../inc/account.class.php:364 -msgid "Cuenta actualizada" +# "Configuration updated" +#: ../../../../ajax/ajax_appMgmtSave.php:465 +#, fuzzy +msgid "Autorización actualizada" msgstr "Fiók frissítve" -# "Error on updating account" -#: ../../../../ajax/ajax_accountSave.php:218 -msgid "Error al modificar la cuenta" -msgstr "Hiba a fiók frissítése közben" - # "Account deleted" -#: ../../../../ajax/ajax_accountSave.php:225 -msgid "Cuenta eliminada" +#: ../../../../ajax/ajax_appMgmtSave.php:475 +#, fuzzy +msgid "Autorización eliminada" msgstr "Fiók törölve" -# "Error on account deletion" -#: ../../../../ajax/ajax_accountSave.php:227 -msgid "Error al eliminar la cuenta" -msgstr "Hiba a fiók törlése közben" +# "Duplicated group name" +#: ../../../../ajax/ajax_appMgmtSave.php:492 +#, fuzzy +msgid "Nombre del campo no indicado" +msgstr "Ügyfél név" -# "Error on updating password" -#: ../../../../ajax/ajax_accountSave.php:239 -msgid "Error al actualizar la clave" -msgstr "Hiba a jelszó frissítése közben" +# "File type not allowed" +#: ../../../../ajax/ajax_appMgmtSave.php:494 +#, fuzzy +msgid "Tipo del campo no indicado" +msgstr "Fájltípus nem engedélyezett" -# "Account restored" -#: ../../../../ajax/ajax_accountSave.php:262 -msgid "Cuenta restaurada" -msgstr "Fiók restaurált" +#: ../../../../ajax/ajax_appMgmtSave.php:496 +msgid "Módulo del campo no indicado" +msgstr "" -# "Error on restoring account" -#: ../../../../ajax/ajax_accountSave.php:265 -msgid "Error al restaurar cuenta" -msgstr "Hiba történt helyreállítása számla" +# "Group added" +#: ../../../../ajax/ajax_appMgmtSave.php:510 +#, fuzzy +msgid "Campo creado" +msgstr "Felhasználó hozzáadva" -# "Event log cleared" -#: ../../../../ajax/ajax_eventlog.php:43 -msgid "Registro de eventos vaciado" -msgstr "Esemény napló törölve" +# "Group updated" +#: ../../../../ajax/ajax_appMgmtSave.php:519 +#, fuzzy +msgid "Campo actualizado" +msgstr "Frissítve" -# "Error on clearing event log" -#: ../../../../ajax/ajax_eventlog.php:45 -msgid "Error al vaciar el registro de eventos" -msgstr "Hiba az esemény napló törlése közben" +# "Group deleted" +#: ../../../../ajax/ajax_appMgmtSave.php:529 +#, fuzzy +msgid "Campo eliminado" +msgstr "Felhasználó törölve" -# "Missing Wiki parameters" -#: ../../../../ajax/ajax_configSave.php:96 -msgid "Faltan parámetros de Wiki" -msgstr "Hiányzó Wiki paraméter" - -# "Missing LDAP parameters" -#: ../../../../ajax/ajax_configSave.php:107 -msgid "Faltan parámetros de LDAP" -msgstr "Hiányzó LDAP paraméter" - -# "Missing Mail parameters" -#: ../../../../ajax/ajax_configSave.php:123 -msgid "Faltan parámetros de Correo" -msgstr "Hiányzó mail paraméter" - -# "Maximum file upload size in 16MB" -#: ../../../../ajax/ajax_configSave.php:144 -msgid "El tamaño máximo de archivo es de 16MB" -msgstr "Maximálisan feltölthetõ fájl mérete 16MB" - -# "Edit Configuration" -#: ../../../../ajax/ajax_configSave.php:161 -msgid "Modificar Configuración" -msgstr "Konfiguráció szerkesztése" - -# "Configuration updated" -#: ../../../../ajax/ajax_configSave.php:169 -msgid "Configuración actualizada" -msgstr "Beállítások frissítve" - -# "Master Password updated" -#: ../../../../ajax/ajax_configSave.php:178 -#: ../../../../ajax/ajax_configSave.php:224 -#: ../../../../ajax/ajax_viewpass.php:68 ../../../../ajax/ajax_viewpass.php:70 -#: ../../../../inc/html.class.php:461 -msgid "Clave maestra actualizada" -msgstr "A mester jelszó frissítve" - -# "Restart session to update" -#: ../../../../ajax/ajax_configSave.php:178 -#: ../../../../ajax/ajax_viewpass.php:68 ../../../../ajax/ajax_viewpass.php:70 -#: ../../../../inc/html.class.php:461 -msgid "Reinicie la sesión para cambiarla" -msgstr "Indítsa újra a munkamenetot a frissítéshez" - -# "Master Password needed" -#: ../../../../ajax/ajax_configSave.php:182 -msgid "Clave maestra no indicada" -msgstr "Mester jelszó szükséges" - -# "Password update must be confirmed" -#: ../../../../ajax/ajax_configSave.php:186 -msgid "Se ha de confirmar el cambio de clave" -msgstr "A jelszó frissítéshez megerõsítés szükséges" - -# "Password are the same" -#: ../../../../ajax/ajax_configSave.php:190 -msgid "Las claves son idénticas" -msgstr "A jelszó megegyezik" - -# "Master passwords mismatch" -#: ../../../../ajax/ajax_configSave.php:194 -msgid "Las claves maestras no coinciden" -msgstr "A mester jelszó nem egyezik" - -# "Current master password mismatch" -#: ../../../../ajax/ajax_configSave.php:198 -msgid "La clave maestra actual no coincide" -msgstr "A jelenlegi mester jelszó nem egyezik" - -# "Error on updating accounts' passwords" -#: ../../../../ajax/ajax_configSave.php:207 -msgid "Errores al actualizar las claves de las cuentas" -msgstr "Hiba a fiókok jelszavainak frissítése közben" - -# "Update Master Password" -#: ../../../../ajax/ajax_configSave.php:221 -#: ../../../../inc/account.class.php:736 -msgid "Actualizar Clave Maestra" -msgstr "Frissítse a mester jelszót" - -# "Error on saving master password's hash" -#: ../../../../ajax/ajax_configSave.php:227 -msgid "Error al guardar el hash de la clave maestra" -msgstr "Hiba a mester jelszó hash-ének elmentése közben" - -# "Incorrect parameters" -#: ../../../../ajax/ajax_getContent.php:42 -msgid "Parámetros incorrectos" -msgstr "Helytelen paraméter" - -# "Users Management" -#: ../../../../ajax/ajax_getContent.php:100 ../../../../inc/tpl/main.php:54 -msgid "Gestión de Usuarios" -msgstr "Felhasználó Menedzsment" - -# "Groups Management" -#: ../../../../ajax/ajax_getContent.php:101 -msgid "Gestión de Grupos" -msgstr "Csoport Menedzsment" - -# "Profiles Management" -#: ../../../../ajax/ajax_getContent.php:102 -msgid "Gestión de Perfiles" -msgstr "Profil Menedzsment" - -# "Name" -#: ../../../../ajax/ajax_getContent.php:112 -#: ../../../../ajax/ajax_getContent.php:158 -#: ../../../../ajax/ajax_getContent.php:190 -#: ../../../../ajax/ajax_getContent.php:243 -#: ../../../../ajax/ajax_getContent.php:275 -#: ../../../../ajax/ajax_search.php:125 ../../../../ajax/ajax_search.php:236 -#: ../../../../inc/tpl/request.php:38 ../../../../inc/tpl/groups.php:39 -#: ../../../../inc/tpl/customers.php:39 ../../../../inc/tpl/profiles.php:39 -#: ../../../../inc/tpl/editpass.php:40 ../../../../inc/tpl/accounts.php:172 -#: ../../../../inc/tpl/categories.php:39 ../../../../inc/tpl/users.php:66 -msgid "Nombre" -msgstr "Név" - -# "Login" -#: ../../../../ajax/ajax_getContent.php:113 -#: ../../../../ajax/ajax_passReset.php:74 ../../../../inc/users.class.php:866 -#: ../../../../inc/users.class.php:892 ../../../../inc/tpl/users.php:81 -msgid "Login" -msgstr "Belépés" - -# "Group" -#: ../../../../ajax/ajax_getContent.php:115 -#: ../../../../ajax/ajax_doLogin.php:154 ../../../../inc/groups.class.php:151 -#: ../../../../inc/groups.class.php:179 ../../../../inc/groups.class.php:205 -#: ../../../../inc/tpl/config.php:328 ../../../../inc/tpl/users.php:105 -msgid "Grupo" -msgstr "Csoport" - -# "Properties" -#: ../../../../ajax/ajax_getContent.php:116 -msgid "Propiedades" -msgstr "Beállítások" - -# "Application Admin" -#: ../../../../ajax/ajax_getContent.php:122 ../../../../inc/tpl/main.php:30 -msgid "Admin Aplicación" -msgstr "Admin alkalmazás" - -# "Account Admin" -#: ../../../../ajax/ajax_getContent.php:123 -msgid "Admin Cuentas" -msgstr "Admin Fiók" - -# "LDAP User" -#: ../../../../ajax/ajax_getContent.php:124 ../../../../inc/tpl/users.php:87 -msgid "Usuario de LDAP" -msgstr "LDAP felhasználó" - -# "Disabled" -#: ../../../../ajax/ajax_getContent.php:125 ../../../../inc/tpl/users.php:164 -msgid "Deshabilitado" -msgstr "Inaktív" - -# "View user details" -#: ../../../../ajax/ajax_getContent.php:136 -msgid "Ver Detalles de Usuario" -msgstr "Felhasználó részletek" - -# "Delete User" -#: ../../../../ajax/ajax_getContent.php:138 -#: ../../../../inc/users.class.php:891 -msgid "Eliminar Usuario" -msgstr "felhasználó törlése" - -# "Change user password" -#: ../../../../ajax/ajax_getContent.php:139 -msgid "Cambiar Clave de Usuario" -msgstr "Változás felhasználói jelszó" - -# "Description" -#: ../../../../ajax/ajax_getContent.php:158 -#: ../../../../ajax/ajax_getContent.php:243 -#: ../../../../ajax/ajax_getContent.php:275 -#: ../../../../ajax/ajax_sendRequest.php:62 ../../../../inc/tpl/groups.php:46 -#: ../../../../inc/tpl/customers.php:46 ../../../../inc/tpl/categories.php:46 -#: ../../../../inc/tpl/eventlog.php:68 -msgid "Descripción" -msgstr "Leírás" - -# "Delete Group" -#: ../../../../ajax/ajax_getContent.php:169 -#: ../../../../inc/groups.class.php:204 -msgid "Eliminar Grupo" -msgstr "Csoport törlése" - -# "Categories management" -#: ../../../../ajax/ajax_getContent.php:233 -msgid "Gestión de Categorías" -msgstr "Kategória Menedzsment" - -# "Customers Management" -#: ../../../../ajax/ajax_getContent.php:234 -msgid "Gestión de Clientes" -msgstr "Ügyfél Menedzsment" - -# "Delete Category" -#: ../../../../ajax/ajax_getContent.php:254 -#: ../../../../inc/category.class.php:131 -msgid "Eliminar Categoría" -msgstr "Kategória törlése" - -# "Delete Customer" -#: ../../../../ajax/ajax_getContent.php:286 -#: ../../../../inc/customer.class.php:127 -msgid "Eliminar Cliente" -msgstr "Ügyfél törlése" - -# "Configuration" -#: ../../../../ajax/ajax_getContent.php:319 -#: ../../../../inc/config.class.php:124 ../../../../inc/config.class.php:150 -#: ../../../../inc/tpl/main.php:56 ../../../../inc/tpl/profiles.php:71 -msgid "Configuración" -msgstr "LDAP kapcsolat rendben" - -# "Master Password" -#: ../../../../ajax/ajax_getContent.php:320 ../../../../inc/tpl/login.php:40 -#: ../../../../inc/tpl/login.php:47 ../../../../inc/tpl/profiles.php:76 -#: ../../../../inc/tpl/install.php:109 ../../../../inc/tpl/install.php:114 -#: ../../../../inc/tpl/install.php:115 -msgid "Clave Maestra" -msgstr "Mester jelszó" - -# "Backup" -#: ../../../../ajax/ajax_getContent.php:321 -msgid "Copia de Seguridad" -msgstr "Archiválás" - -# "Import accounts from external sources" -#: ../../../../ajax/ajax_getContent.php:322 -msgid "Importar cuentas desde fuentes externas" -msgstr "Külsõ forrásból származó felhasználók importálása" - -# "Import Accounts" -#: ../../../../ajax/ajax_getContent.php:322 -#: ../../../../inc/migrate.class.php:394 ../../../../inc/import.class.php:80 -#: ../../../../inc/import.class.php:160 -msgid "Importar Cuentas" -msgstr "Fiókok importálása" +# "Make Backup" +#: ../../../../ajax/ajax_backup.php:52 ../../../../ajax/ajax_backup.php:57 +#: ../../../../inc/themes/classic/backup.inc:54 +msgid "Realizar Backup" +msgstr "Archívum készítés" # "Error while doing backup" -#: ../../../../ajax/ajax_backup.php:49 +#: ../../../../ajax/ajax_backup.php:52 ../../../../ajax/ajax_backup.php:54 msgid "Error al realizar el backup" msgstr "Hiba Archiválás közben" # "Please, check the event log for more details" -#: ../../../../ajax/ajax_backup.php:49 ../../../../ajax/ajax_checkLdap.php:54 -#: ../../../../inc/migrate.class.php:115 ../../../../inc/import.class.php:89 +#: ../../../../ajax/ajax_backup.php:54 ../../../../ajax/ajax_backup.php:68 +#: ../../../../ajax/ajax_checkLdap.php:57 ../../../../inc/Import.class.php:128 +#: ../../../../inc/Migrate.class.php:93 msgid "Revise el registro de eventos para más detalles" msgstr "Részletes leírást az esemény naplóban olvashat" -# "Make Backup" -#: ../../../../ajax/ajax_backup.php:52 ../../../../inc/tpl/backup.php:82 -msgid "Realizar Backup" -msgstr "Archívum készítés" - # Application and database backup successfully done -#: ../../../../ajax/ajax_backup.php:53 +#: ../../../../ajax/ajax_backup.php:57 #, fuzzy msgid "Copia de la aplicación y base de datos realizada correctamente" msgstr "Application and database backup successfully done" # "Backup process finished" -#: ../../../../ajax/ajax_backup.php:58 +#: ../../../../ajax/ajax_backup.php:59 msgid "Proceso de backup finalizado" msgstr "Archiválás kész" -# "Password Recovery" -#: ../../../../ajax/ajax_passReset.php:44 -msgid "Recuperación de Clave" -msgstr "Jelszó visszaállítás" - -# "Requested for" -#: ../../../../ajax/ajax_passReset.php:48 -#: ../../../../ajax/ajax_passReset.php:55 -msgid "Solicitado para" -msgstr "Kért, hogy" - -# "Request sent" -#: ../../../../ajax/ajax_passReset.php:52 -#: ../../../../ajax/ajax_sendRequest.php:71 -msgid "Solicitud enviada" -msgstr "Kérést elküldve" - -# "You will receive an email to complete the request in short." -#: ../../../../ajax/ajax_passReset.php:52 -msgid "En breve recibirá un correo para completar la solicitud." -msgstr "A kérés befejezéséhez email értesítõt küldünk" - -# "The request can't be done. Please contact with the administrator" -#: ../../../../ajax/ajax_passReset.php:59 -msgid "No se ha podido realizar la solicitud. Consulte con el administrador." -msgstr "" -"A kérést nem lehet befejezni. Kérem lépjen kapcsolatba a rendszergazdával" - -# "Edit User Password" -#: ../../../../ajax/ajax_passReset.php:73 ../../../../inc/users.class.php:865 -msgid "Modificar Clave Usuario" -msgstr "Felhasználó jelszavának szerkesztése" - -# "The password is incorrect or not the same" -#: ../../../../ajax/ajax_passReset.php:85 -msgid "La clave es incorrecta o no coincide" -msgstr "A jelszó helytelen, vagy nem egyezik" - -# "Files management disabled" -#: ../../../../ajax/ajax_files.php:44 ../../../../ajax/ajax_getFiles.php:36 -msgid "Gestión de archivos deshabilitada" -msgstr "Fálj menedzsment inaktív" - -# "There are no allowed extensions" -#: ../../../../ajax/ajax_files.php:63 -msgid "No hay extensiones permitidas" -msgstr "Tiltott kiterjesztések" - -# "File type not allowed" -#: ../../../../ajax/ajax_files.php:71 ../../../../inc/import.class.php:111 -msgid "Tipo de archivo no soportado" -msgstr "Fájltípus nem engedélyezett" - -# "Invalid file" -#: ../../../../ajax/ajax_files.php:74 -msgid "Archivo inválido" -msgstr "Érvénytelen fájl" - -# "Internal error while reading file" -#: ../../../../ajax/ajax_files.php:87 ../../../../ajax/ajax_files.php:99 -#: ../../../../ajax/ajax_files.php:103 ../../../../inc/import.class.php:122 -#: ../../../../inc/import.class.php:130 -msgid "Error interno al leer el archivo" -msgstr "Belsõ hiba a fájl olvasása közben" - -# "File is bigger than" -#: ../../../../ajax/ajax_files.php:91 -msgid "El archivo es mayor de " -msgstr "A fájl nagyobb, mint" - -# "Upload File" -#: ../../../../ajax/ajax_files.php:98 ../../../../inc/files.class.php:51 -msgid "Subir Archivo" -msgstr "Fájl feltöltés" - -# "File saved" -#: ../../../../ajax/ajax_files.php:107 -msgid "Archivo guardado" -msgstr "Fájl elmentve" - -# "Error on file save" -#: ../../../../ajax/ajax_files.php:109 -msgid "No se pudo guardar el archivo" -msgstr "Hiba a fájl mentése közben" - -# "Invalid file ID" -#: ../../../../ajax/ajax_files.php:116 ../../../../ajax/ajax_files.php:174 -msgid "No es un ID de archivo válido" -msgstr "Helytelen fájl ID" - -# "File doesn't exist" -#: ../../../../ajax/ajax_files.php:124 ../../../../inc/files.class.php:140 -msgid "El archivo no existe" -msgstr "A fájl nem létezik" - -# "Download File" -#: ../../../../ajax/ajax_files.php:133 ../../../../ajax/ajax_getFiles.php:67 -msgid "Descargar Archivo" -msgstr "Fájl letöltés" - -# "ID" -#: ../../../../ajax/ajax_files.php:134 ../../../../ajax/ajax_viewpass.php:82 -#: ../../../../inc/files.class.php:107 ../../../../inc/tpl/eventlog.php:53 -msgid "ID" -msgstr "ID" - -# "File" -#: ../../../../ajax/ajax_files.php:135 ../../../../inc/files.class.php:53 -#: ../../../../inc/files.class.php:108 ../../../../inc/tpl/migrate.php:110 -msgid "Archivo" -msgstr "Fájl" - -# "Type" -#: ../../../../ajax/ajax_files.php:136 ../../../../inc/files.class.php:54 -#: ../../../../inc/files.class.php:109 -msgid "Tipo" -msgstr "Típus" - -# "Size" -#: ../../../../ajax/ajax_files.php:137 ../../../../inc/files.class.php:55 -#: ../../../../inc/files.class.php:110 -msgid "Tamaño" -msgstr "Méret" - -# "File deleted" -#: ../../../../ajax/ajax_files.php:178 -msgid "Archivo eliminado" -msgstr "Fájl törölve" - -# "Error on file deletion" -#: ../../../../ajax/ajax_files.php:180 -msgid "Error al eliminar el archivo" -msgstr "Hiba a fájlok törlése közben" - -# "Confirm account import" -#: ../../../../ajax/ajax_migrate.php:1 -msgid "Confirmar la importación de cuentas" -msgstr "Fiók importálás megerõsítése" - -# "Connection username needed" -#: ../../../../ajax/ajax_migrate.php:1 -msgid "Es necesario un usuario de conexión" -msgstr "Kapcsolati felhasználónév szükséges" - -# "Connection password needed" -#: ../../../../ajax/ajax_migrate.php:1 -msgid "Es necesaria una clave de conexión" -msgstr "Kapcsolati jelszó szükséges" - -# "Database name needed" -#: ../../../../ajax/ajax_migrate.php:1 -msgid "Es necesario el nombre de la BBDD" -msgstr "Adatbázis név szükséges" - -# "Host name needed" -#: ../../../../ajax/ajax_migrate.php:1 -msgid "Es necesario un nombre de host" -msgstr "Host név szükséges" - -# "You don't have permission to access to this account" -#: ../../../../ajax/ajax_viewpass.php:52 ../../../../ajax/ajax_viewpass.php:58 -#: ../../../../inc/html.class.php:459 -msgid "No tiene permisos para acceder a esta cuenta" -msgstr "Nincs jogosultságod belépni ebbe a fiókba" - -# "Master password mismatch" -#: ../../../../ajax/ajax_viewpass.php:61 -msgid "La clave maestra no coincide" -msgstr "A mester jelszó nem egyezik" - -# "View password" -#: ../../../../ajax/ajax_viewpass.php:81 ../../../../ajax/ajax_search.php:291 -#: ../../../../inc/tpl/profiles.php:50 ../../../../inc/tpl/accounts.php:522 -msgid "Ver Clave" -msgstr "Jelszó" - -# "Account" -#: ../../../../ajax/ajax_viewpass.php:83 -#: ../../../../ajax/ajax_sendRequest.php:60 ../../../../inc/files.class.php:52 -#: ../../../../inc/account.class.php:366 ../../../../inc/account.class.php:574 -#: ../../../../inc/account.class.php:596 ../../../../inc/account.class.php:867 -msgid "Cuenta" -msgstr "Fiók" - -# "User" -#: ../../../../ajax/ajax_viewpass.php:95 ../../../../ajax/ajax_search.php:131 -#: ../../../../ajax/ajax_search.php:248 ../../../../ajax/ajax_doLogin.php:77 -#: ../../../../ajax/ajax_doLogin.php:84 ../../../../ajax/ajax_doLogin.php:91 -#: ../../../../ajax/ajax_doLogin.php:101 ../../../../ajax/ajax_doLogin.php:111 -#: ../../../../ajax/ajax_doLogin.php:152 ../../../../res/test.php:64 -#: ../../../../inc/init.php:531 ../../../../inc/users.class.php:788 -#: ../../../../inc/users.class.php:829 ../../../../inc/tpl/passreset.php:50 -#: ../../../../inc/tpl/request.php:49 ../../../../inc/tpl/login.php:35 -#: ../../../../inc/tpl/login.php:44 ../../../../inc/tpl/install.php:89 -#: ../../../../inc/tpl/install.php:90 ../../../../inc/tpl/editpass.php:53 -#: ../../../../inc/tpl/accounts.php:233 ../../../../inc/tpl/config.php:422 -#: ../../../../inc/tpl/eventlog.php:62 -msgid "Usuario" -msgstr "Felhasználó" - -# "Password" -#: ../../../../ajax/ajax_viewpass.php:99 ../../../../ajax/ajax_usrpass.php:53 -#: ../../../../ajax/ajax_usrpass.php:56 ../../../../inc/tpl/passreset.php:61 -#: ../../../../inc/tpl/login.php:37 ../../../../inc/tpl/login.php:45 -#: ../../../../inc/tpl/install.php:99 ../../../../inc/tpl/install.php:100 -#: ../../../../inc/tpl/editpass.php:57 ../../../../inc/tpl/accounts.php:250 -#: ../../../../inc/tpl/config.php:430 ../../../../inc/tpl/users.php:129 -msgid "Clave" -msgstr "Jelszó" - -# "No records found" -#: ../../../../ajax/ajax_search.php:108 ../../../../inc/tpl/eventlog.php:42 -msgid "No se encontraron registros" -msgstr "Nem találtam rekordokat" - -# "Sort by Customer" -#: ../../../../ajax/ajax_search.php:122 -msgid "Ordenar por Cliente" -msgstr "Rendezés Ügyfél szerint" - -# "Customer" -#: ../../../../ajax/ajax_search.php:122 ../../../../ajax/ajax_search.php:231 -#: ../../../../ajax/ajax_sendRequest.php:61 -#: ../../../../inc/account.class.php:365 ../../../../inc/account.class.php:573 -#: ../../../../inc/account.class.php:595 ../../../../inc/account.class.php:866 -#: ../../../../inc/customer.class.php:57 -#: ../../../../inc/customer.class.php:103 -#: ../../../../inc/customer.class.php:128 ../../../../inc/tpl/request.php:41 -#: ../../../../inc/tpl/editpass.php:44 ../../../../inc/tpl/accounts.php:188 -msgid "Cliente" -msgstr "Ügyfél" - -# "Sort by Name" -#: ../../../../ajax/ajax_search.php:125 -msgid "Ordenar por Nombre" -msgstr "Rendezés Név szerint" - -# "Sort by Category" -#: ../../../../ajax/ajax_search.php:128 -msgid "Ordenar por Categoría" -msgstr "Rendezés Kategória szerint" - -# "Category" -#: ../../../../ajax/ajax_search.php:128 ../../../../ajax/ajax_search.php:241 -#: ../../../../inc/category.class.php:78 -#: ../../../../inc/category.class.php:132 -#: ../../../../inc/category.class.php:178 ../../../../inc/tpl/accounts.php:205 -msgid "Categoría" -msgstr "Kategória" - -# "Sort by Username" -#: ../../../../ajax/ajax_search.php:131 -msgid "Ordenar por Usuario" -msgstr "Rendezés Felhasználónév szerint" - -# "Sort by URL / IP" -#: ../../../../ajax/ajax_search.php:134 -msgid "Ordenar por URL / IP" -msgstr "Rendezés URL / IP szerint" - -# "URL / IP" -#: ../../../../ajax/ajax_search.php:134 ../../../../ajax/ajax_search.php:253 -#: ../../../../inc/tpl/request.php:45 ../../../../inc/tpl/editpass.php:48 -#: ../../../../inc/tpl/accounts.php:217 -msgid "URL / IP" -msgstr "URL / IP" - -# "Search in Wiki" -#: ../../../../ajax/ajax_search.php:173 -msgid "Buscar en Wiki" -msgstr "Keresés a Wikiben" - -# "Account Details" -#: ../../../../ajax/ajax_search.php:181 ../../../../ajax/ajax_search.php:287 -#: ../../../../inc/tpl/accounts.php:80 ../../../../inc/tpl/accounts.php:91 -msgid "Detalles de Cuenta" -msgstr "Fiók adatok" - -# "Open link to" -#: ../../../../ajax/ajax_search.php:199 ../../../../ajax/ajax_search.php:201 -msgid "Abrir enlace a" -msgstr "Nyissa meg a linket, hogy" - -# "Notes" -#: ../../../../ajax/ajax_search.php:260 ../../../../inc/tpl/accounts.php:269 -#: ../../../../inc/tpl/users.php:147 -msgid "Notas" -msgstr "Jegyzetek" - -# "Attachments" -#: ../../../../ajax/ajax_search.php:264 -msgid "Archivos adjuntos" -msgstr "Csatolmányok" - -# "Link to Wiki" -#: ../../../../ajax/ajax_search.php:275 -msgid "Enlace a Wiki" -msgstr "Wiki link" - -# Copy Password to Clipboard -#: ../../../../ajax/ajax_search.php:292 ../../../../ajax/ajax_search.php:344 -#: ../../../../inc/tpl/accounts.php:527 ../../../../inc/tpl/accounts.php:616 +# "Enable debug" +#: ../../../../ajax/ajax_backup.php:66 ../../../../ajax/ajax_backup.php:71 #, fuzzy -msgid "Copiar Clave en Portapapeles" -msgstr "Jelszó másolása a vágólapra" +msgid "Realizar Exportación" +msgstr "Archívum készítés" -# "More Actions" -#: ../../../../ajax/ajax_search.php:296 ../../../../inc/html.class.php:578 -msgid "Más Acciones" -msgstr "Több akció" - -# "Edit Account" -#: ../../../../ajax/ajax_search.php:300 ../../../../inc/tpl/accounts.php:550 -msgid "Modificar Cuenta" -msgstr "Fiók módosítás" - -# "Copy Account" -#: ../../../../ajax/ajax_search.php:304 ../../../../inc/tpl/accounts.php:53 -msgid "Copiar Cuenta" -msgstr "Fiók másolása" - -# "Delete Account" -#: ../../../../ajax/ajax_search.php:308 ../../../../inc/account.class.php:594 -#: ../../../../inc/tpl/accounts.php:73 ../../../../inc/tpl/accounts.php:562 -msgid "Eliminar Cuenta" -msgstr "Fiók törlése" - -# "Request Modification" -#: ../../../../ajax/ajax_search.php:315 ../../../../inc/tpl/accounts.php:555 -msgid "Solicitar Modificación" -msgstr "Kérés módosítás" - -# Password Copied to Clipboard -#: ../../../../ajax/ajax_search.php:348 ../../../../inc/tpl/accounts.php:620 +# "Error on creating accounts files" +#: ../../../../ajax/ajax_backup.php:66 #, fuzzy -msgid "Clave Copiada al Portapapeles" -msgstr "Jelszó vágólapra másolt" +msgid "Error al realizar la exportación de cuentas" +msgstr "Hiba a fiók fájlok létrehozása közben" -# "Description is needed" -#: ../../../../ajax/ajax_sendRequest.php:45 -msgid "Es necesaria una descripción" -msgstr "Leírás szükséges" +# "Error while doing backup" +#: ../../../../ajax/ajax_backup.php:68 +#, fuzzy +msgid "Error al realizar la exportación" +msgstr "Hiba Archiválás közben" -# "Request for Account Modification" -#: ../../../../ajax/ajax_sendRequest.php:58 -msgid "Solicitud de Modificación de Cuenta" -msgstr "Kérés fiók módosításához" +# "Application successfully updated" +#: ../../../../ajax/ajax_backup.php:71 +#, fuzzy +msgid "Exportación de cuentas realizada correctamente" +msgstr "A beállítások elmentve" -# "Requester" -#: ../../../../ajax/ajax_sendRequest.php:59 -msgid "Solicitante" -msgstr "Kérõ" - -# "Error on sending request" -#: ../../../../ajax/ajax_sendRequest.php:74 -msgid "Error al enviar la solicitud" -msgstr "Hiba a kérés küldése közben" - -# "You don't have permission to do this operation" -#: ../../../../ajax/ajax_usrpass.php:41 -msgid "No tiene permisos para realizar esta operación" -msgstr "Nincs jogosultságod végrehajtani ezt a mûveletet" - -# "Password Change" -#: ../../../../ajax/ajax_usrpass.php:48 ../../../../inc/auth.class.php:185 -#: ../../../../inc/tpl/users.php:166 -msgid "Cambio de Clave" -msgstr "Jelszó változtatás" - -# "Generate random password" -#: ../../../../ajax/ajax_usrpass.php:57 ../../../../inc/tpl/editpass.php:63 -#: ../../../../inc/tpl/accounts.php:257 ../../../../inc/tpl/users.php:133 -msgid "Generar clave aleatoria" -msgstr "Véletlenszerû jelszó generálása" - -# "Password (repeat)" -#: ../../../../ajax/ajax_usrpass.php:62 ../../../../ajax/ajax_usrpass.php:64 -#: ../../../../inc/tpl/editpass.php:68 ../../../../inc/tpl/accounts.php:261 -#: ../../../../inc/tpl/users.php:138 -msgid "Clave (repetir)" -msgstr "Jelszó (ismét)" - -# "Password strength level" -#: ../../../../ajax/ajax_usrpass.php:65 ../../../../inc/tpl/passreset.php:64 -#: ../../../../inc/tpl/passreset.php:72 ../../../../inc/tpl/masterpass.php:63 -#: ../../../../inc/tpl/install.php:104 ../../../../inc/tpl/install.php:119 -#: ../../../../inc/tpl/editpass.php:70 ../../../../inc/tpl/accounts.php:264 -#: ../../../../inc/tpl/users.php:141 -msgid "Nivel de fortaleza de la clave" -msgstr "Jelszó erõssége" - -# "Save" -#: ../../../../ajax/ajax_usrpass.php:81 ../../../../inc/tpl/masterpass.php:113 -#: ../../../../inc/tpl/groups.php:64 ../../../../inc/tpl/customers.php:64 -#: ../../../../inc/tpl/profiles.php:134 ../../../../inc/tpl/editpass.php:87 -#: ../../../../inc/tpl/accounts.php:536 ../../../../inc/tpl/categories.php:64 -#: ../../../../inc/tpl/config.php:487 ../../../../inc/tpl/users.php:210 -msgid "Guardar" -msgstr "Mentés" +# "Backup process finished" +#: ../../../../ajax/ajax_backup.php:73 +#, fuzzy +msgid "Proceso de exportación finalizado" +msgstr "Archiválás kész" # "LDAP parameters are not set" -#: ../../../../ajax/ajax_checkLdap.php:48 ../../../../inc/ldap.class.php:239 +#: ../../../../ajax/ajax_checkLdap.php:51 ../../../../inc/Ldap.class.php:248 msgid "Los parámetros de LDAP no están configurados" msgstr "LDAP paraméterek nem lettek elmentve" # "LDAP connection error" -#: ../../../../ajax/ajax_checkLdap.php:54 +#: ../../../../ajax/ajax_checkLdap.php:57 msgid "Error de conexión a LDAP" msgstr "LDAP kapcsolódási hiba" # "LDAP connection OK" -#: ../../../../ajax/ajax_checkLdap.php:56 +#: ../../../../ajax/ajax_checkLdap.php:59 msgid "Conexión a LDAP correcta" msgstr "LDAP kapcsolat" # "Objects found" -#: ../../../../ajax/ajax_checkLdap.php:56 +#: ../../../../ajax/ajax_checkLdap.php:59 msgid "Objetos encontrados" msgstr "Objektum találatok" -# "Delete File" -#: ../../../../ajax/ajax_getFiles.php:63 ../../../../inc/files.class.php:106 -msgid "Eliminar Archivo" -msgstr "Fájl törlése" +# "Edit Configuration" +#: ../../../../ajax/ajax_configSave.php:55 +msgid "Modificar Configuración" +msgstr "Konfiguráció szerkesztése" -# "View File" -#: ../../../../ajax/ajax_getFiles.php:70 -msgid "Ver Archivo" -msgstr "Fájl megtekintése" +# "Maximum file upload size in 16MB" +#: ../../../../ajax/ajax_configSave.php:60 +#, fuzzy +msgid "El tamaño máximo por archivo es de 16MB" +msgstr "Maximálisan feltölthetõ fájl mérete 16MB" + +# "Missing Mail parameters" +#: ../../../../ajax/ajax_configSave.php:114 +#, fuzzy +msgid "Faltan parámetros de Proxy" +msgstr "Hiányzó Wiki paraméter" + +# "General" +#: ../../../../ajax/ajax_configSave.php:125 +#: ../../../../web/ConfigC.class.php:122 +#: ../../../../inc/themes/classic/profiles.inc:61 +#: ../../../../inc/themes/material-blue/profiles.inc:72 +msgid "General" +msgstr "Általános" + +# "Missing Wiki parameters" +#: ../../../../ajax/ajax_configSave.php:137 +msgid "Faltan parámetros de Wiki" +msgstr "Hiányzó Wiki paraméter" + +# "Wiki" +#: ../../../../ajax/ajax_configSave.php:147 +#: ../../../../web/ConfigC.class.php:254 +#: ../../../../inc/themes/classic/wiki.inc:4 +#: ../../../../inc/themes/material-blue/wiki.inc:4 +msgid "Wiki" +msgstr "Wiki" + +# "Missing LDAP parameters" +#: ../../../../ajax/ajax_configSave.php:164 +msgid "Faltan parámetros de LDAP" +msgstr "Hiányzó LDAP paraméter" + +# "LDAP" +#: ../../../../ajax/ajax_configSave.php:179 +#: ../../../../web/ConfigC.class.php:286 +#: ../../../../inc/themes/classic/ldap.inc:4 +#: ../../../../inc/themes/material-blue/ldap.inc:4 +msgid "LDAP" +msgstr "LDAP" + +# "Missing Mail parameters" +#: ../../../../ajax/ajax_configSave.php:196 +msgid "Faltan parámetros de Correo" +msgstr "Hiányzó mail paraméter" + +# "Mail" +#: ../../../../ajax/ajax_configSave.php:216 +#: ../../../../web/ConfigC.class.php:316 +#: ../../../../inc/themes/classic/mail.inc:4 +#: ../../../../inc/themes/material-blue/mail.inc:4 +msgid "Correo" +msgstr "Mail" + +# "Configuration updated" +#: ../../../../ajax/ajax_configSave.php:226 +msgid "Configuración actualizada" +msgstr "Beállítások frissítve" + +# "Master Password updated" +#: ../../../../ajax/ajax_configSave.php:235 +#: ../../../../ajax/ajax_configSave.php:275 +#: ../../../../ajax/ajax_viewpass.php:60 +#: ../../../../inc/Controller.class.php:169 +msgid "Clave maestra actualizada" +msgstr "A mester jelszó frissítve" + +# "Restart session to update" +#: ../../../../ajax/ajax_configSave.php:235 +#: ../../../../ajax/ajax_viewpass.php:60 +#: ../../../../inc/Controller.class.php:169 +msgid "Reinicie la sesión para cambiarla" +msgstr "Indítsa újra a munkamenetot a frissítéshez" + +# "Master Password needed" +#: ../../../../ajax/ajax_configSave.php:237 +msgid "Clave maestra no indicada" +msgstr "Mester jelszó szükséges" + +# "Password update must be confirmed" +#: ../../../../ajax/ajax_configSave.php:239 +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:241 +msgid "Las claves son idénticas" +msgstr "A jelszó megegyezik" + +# "Master passwords mismatch" +#: ../../../../ajax/ajax_configSave.php:243 +msgid "Las claves maestras no coinciden" +msgstr "A mester jelszó nem egyezik" + +# "Current master password mismatch" +#: ../../../../ajax/ajax_configSave.php:245 +msgid "La clave maestra actual no coincide" +msgstr "A jelenlegi mester jelszó nem egyezik" + +# "Error on updating accounts' passwords" +#: ../../../../ajax/ajax_configSave.php:254 +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:260 +#, fuzzy +msgid "Errores al actualizar las claves de las cuentas del histórico" +msgstr "Hiba a fiókok jelszavainak frissítése közben" + +# "Update Master Password" +#: ../../../../ajax/ajax_configSave.php:273 +#: ../../../../inc/Account.class.php:497 +msgid "Actualizar Clave Maestra" +msgstr "Frissítse a mester jelszót" + +# "Error on saving master password's hash" +#: ../../../../ajax/ajax_configSave.php:277 +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:285 +#, fuzzy +msgid "Generar Clave Temporal" +msgstr "Generate Temporary Password" + +# "Password" +#: ../../../../ajax/ajax_configSave.php:285 +#: ../../../../inc/themes/classic/account.inc:83 +#: ../../../../inc/themes/classic/editpass.inc:25 +#: ../../../../inc/themes/classic/install.inc:38 +#: ../../../../inc/themes/classic/install.inc:39 +#: ../../../../inc/themes/classic/login.inc:10 +#: ../../../../inc/themes/classic/login.inc:22 +#: ../../../../inc/themes/classic/mail.inc:55 +#: ../../../../inc/themes/classic/passreset.inc:29 +#: ../../../../inc/themes/classic/users.inc:75 +#: ../../../../inc/themes/classic/userspass.inc:8 +#: ../../../../inc/themes/classic/userspass.inc:11 +#: ../../../../inc/themes/material-blue/account.inc:95 +#: ../../../../inc/themes/material-blue/account.inc:100 +#: ../../../../inc/themes/material-blue/config.inc:360 +#: ../../../../inc/themes/material-blue/editpass.inc:26 +#: ../../../../inc/themes/material-blue/editpass.inc:31 +#: ../../../../inc/themes/material-blue/editpass.inc:41 +#: ../../../../inc/themes/material-blue/install.inc:44 +#: ../../../../inc/themes/material-blue/ldap.inc:105 +#: ../../../../inc/themes/material-blue/login.inc:16 +#: ../../../../inc/themes/material-blue/login.inc:38 +#: ../../../../inc/themes/material-blue/mail.inc:73 +#: ../../../../inc/themes/material-blue/mail.inc:80 +#: ../../../../inc/themes/material-blue/passreset.inc:31 +#: ../../../../inc/themes/material-blue/users.inc:89 +#: ../../../../inc/themes/material-blue/users.inc:96 +#: ../../../../inc/themes/material-blue/userspass.inc:8 +#: ../../../../inc/themes/material-blue/userspass.inc:13 +msgid "Clave" +msgstr "Jelszó" + +# "Generated Password" +#: ../../../../ajax/ajax_configSave.php:287 +#, fuzzy +msgid "Clave Temporal Generada" +msgstr "Generált Jelszó" # "User/Pass not entered" -#: ../../../../ajax/ajax_doLogin.php:41 +#: ../../../../ajax/ajax_doLogin.php:45 msgid "Usuario/Clave no introducidos" msgstr "Felhasználó/jelszó nem lett kitöltve" # "Session start (LDAP)" -#: ../../../../ajax/ajax_doLogin.php:54 ../../../../ajax/ajax_doLogin.php:75 -#: ../../../../ajax/ajax_doLogin.php:82 ../../../../ajax/ajax_doLogin.php:89 -msgid "Inicio sesión (LDAP)" +#: ../../../../ajax/ajax_doLogin.php:57 +#, fuzzy +msgid "Inicio sesión" msgstr "munkamenet elindult (LDAP)" +# "Server" +#: ../../../../ajax/ajax_doLogin.php:62 +#, fuzzy +msgid "Servidor Login" +msgstr "Belépés" + # "Error on saving LDAP user data" -#: ../../../../ajax/ajax_doLogin.php:60 +#: ../../../../ajax/ajax_doLogin.php:68 msgid "Error al guardar los datos de LDAP" msgstr "Hiba az LDAP felhasználók adatainak elmentése közben" # "Internal error" -#: ../../../../ajax/ajax_doLogin.php:63 ../../../../ajax/ajax_doLogin.php:71 -#: ../../../../ajax/ajax_doLogin.php:122 ../../../../inc/import.class.php:237 -#: ../../../../inc/import.class.php:244 ../../../../inc/import.class.php:262 +#: ../../../../ajax/ajax_doLogin.php:71 ../../../../ajax/ajax_doLogin.php:79 +#: ../../../../ajax/ajax_doLogin.php:131 ../../../../ajax/ajax_doLogin.php:172 +#: ../../../../inc/ApiTokens.class.php:140 +#: ../../../../inc/ApiTokens.class.php:186 +#: ../../../../inc/ApiTokens.class.php:217 +#: ../../../../inc/ApiTokens.class.php:243 +#: ../../../../inc/ApiTokens.class.php:262 +#: ../../../../inc/ApiTokens.class.php:304 +#: ../../../../inc/ApiTokens.class.php:328 ../../../../inc/Crypt.class.php:235 +#: ../../../../inc/Crypt.class.php:246 +#: ../../../../inc/XmlImportBase.class.php:74 msgid "Error interno" msgstr "Belsõ hiba" # "Error on updating user password in BD" -#: ../../../../ajax/ajax_doLogin.php:68 +#: ../../../../ajax/ajax_doLogin.php:76 msgid "Error al actualizar la clave del usuario en la BBDD" msgstr "Adatbázis Hiba a felhasználói jelszó frissítése közben" # "Incorrect login" -#: ../../../../ajax/ajax_doLogin.php:76 ../../../../ajax/ajax_doLogin.php:100 +#: ../../../../ajax/ajax_doLogin.php:84 ../../../../ajax/ajax_doLogin.php:109 msgid "Login incorrecto" msgstr "Hibás felhasználónév vagy jelszó" +# "User" +#: ../../../../ajax/ajax_doLogin.php:85 ../../../../ajax/ajax_doLogin.php:92 +#: ../../../../ajax/ajax_doLogin.php:99 ../../../../ajax/ajax_doLogin.php:110 +#: ../../../../ajax/ajax_doLogin.php:120 ../../../../ajax/ajax_doLogin.php:167 +#: ../../../../inc/ApiTokens.class.php:190 +#: ../../../../inc/ApiTokens.class.php:308 ../../../../inc/Auth.class.php:112 +#: ../../../../inc/Init.class.php:516 ../../../../inc/UserBase.class.php:382 +#: ../../../../inc/UserBase.class.php:526 ../../../../res/test.php:64 +#: ../../../../web/SearchC.class.php:289 +#: ../../../../web/UsersMgmtC.class.php:392 +#: ../../../../inc/themes/classic/account.inc:70 +#: ../../../../inc/themes/classic/editpass.inc:21 +#: ../../../../inc/themes/classic/eventlog.inc:25 +#: ../../../../inc/themes/classic/info.inc:39 +#: ../../../../inc/themes/classic/install.inc:27 +#: ../../../../inc/themes/classic/install.inc:28 +#: ../../../../inc/themes/classic/login.inc:7 +#: ../../../../inc/themes/classic/login.inc:20 +#: ../../../../inc/themes/classic/mail.inc:47 +#: ../../../../inc/themes/classic/passreset.inc:17 +#: ../../../../inc/themes/classic/request.inc:17 +#: ../../../../inc/themes/classic/search.inc:52 +#: ../../../../inc/themes/classic/tokens.inc:8 +#: ../../../../inc/themes/material-blue/account.inc:80 +#: ../../../../inc/themes/material-blue/config.inc:346 +#: ../../../../inc/themes/material-blue/editpass.inc:22 +#: ../../../../inc/themes/material-blue/eventlog.inc:24 +#: ../../../../inc/themes/material-blue/info.inc:39 +#: ../../../../inc/themes/material-blue/login.inc:10 +#: ../../../../inc/themes/material-blue/login.inc:32 +#: ../../../../inc/themes/material-blue/mail.inc:61 +#: ../../../../inc/themes/material-blue/mail.inc:67 +#: ../../../../inc/themes/material-blue/passreset.inc:17 +#: ../../../../inc/themes/material-blue/request.inc:20 +#: ../../../../inc/themes/material-blue/search.inc:55 +#: ../../../../inc/themes/material-blue/tokens.inc:8 +msgid "Usuario" +msgstr "Felhasználó" + # "Wrong user/pass" -#: ../../../../ajax/ajax_doLogin.php:80 ../../../../ajax/ajax_doLogin.php:94 -#: ../../../../ajax/ajax_doLogin.php:104 +#: ../../../../ajax/ajax_doLogin.php:88 ../../../../ajax/ajax_doLogin.php:102 +#: ../../../../ajax/ajax_doLogin.php:113 msgid "Usuario/Clave incorrectos" msgstr "Hibás felhasználó/jelszó" # Account Expired -#: ../../../../ajax/ajax_doLogin.php:83 ../../../../ajax/ajax_doLogin.php:87 +#: ../../../../ajax/ajax_doLogin.php:91 ../../../../ajax/ajax_doLogin.php:95 #, fuzzy msgid "Cuenta expirada" -msgstr "Account expired" +msgstr "Fiók" # "The user have no associated groups" -#: ../../../../ajax/ajax_doLogin.php:90 +#: ../../../../ajax/ajax_doLogin.php:98 msgid "El usuario no tiene grupos asociados" msgstr "a felhasználó nincs csoporthoz társítva" -# "Session start (MySQL)" -#: ../../../../ajax/ajax_doLogin.php:96 -msgid "Inicio sesión (MySQL)" -msgstr "munkamenet elindult (MySQL)" - # "User disabled" -#: ../../../../ajax/ajax_doLogin.php:110 ../../../../ajax/ajax_doLogin.php:114 +#: ../../../../ajax/ajax_doLogin.php:119 ../../../../ajax/ajax_doLogin.php:123 msgid "Usuario deshabilitado" msgstr "Felhasználó letiltva" # "Error on retrieving user data from DB" -#: ../../../../ajax/ajax_doLogin.php:119 +#: ../../../../ajax/ajax_doLogin.php:128 msgid "Error al obtener los datos del usuario de la BBDD" msgstr "Hiba a felhasználói adatok adatbázisból való betöltése közben" # "The master password not saved or is incorrect" -#: ../../../../ajax/ajax_doLogin.php:127 +#: ../../../../ajax/ajax_doLogin.php:138 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:130 ../../../../ajax/ajax_doLogin.php:133 +#: ../../../../ajax/ajax_doLogin.php:145 ../../../../ajax/ajax_doLogin.php:148 msgid "Clave maestra incorrecta" msgstr "Érvénytelen mester jelszó" -# "Query error" -#: ../../../../js/functions.php:36 -msgid "Error en la consulta" -msgstr "Lekérdezési hiba" +# "Profile" +#: ../../../../ajax/ajax_doLogin.php:168 +#: ../../../../inc/ProfileBase.class.php:512 +#: ../../../../inc/ProfileBase.class.php:550 +#: ../../../../inc/ProfileBase.class.php:593 +#: ../../../../web/UsersMgmtC.class.php:89 +#: ../../../../inc/themes/classic/users.inc:37 +#: ../../../../inc/themes/material-blue/users.inc:43 +msgid "Perfil" +msgstr "Profil" -# "There was an error" -#: ../../../../js/functions.php:37 -msgid "Ha ocurrido un error" -msgstr "Hiba történt" +# "Group" +#: ../../../../ajax/ajax_doLogin.php:169 ../../../../inc/Groups.class.php:158 +#: ../../../../inc/Groups.class.php:259 ../../../../inc/Groups.class.php:375 +#: ../../../../web/UsersMgmtC.class.php:90 +#: ../../../../inc/themes/classic/ldap.inc:116 +#: ../../../../inc/themes/classic/users.inc:49 +#: ../../../../inc/themes/material-blue/ldap.inc:139 +#: ../../../../inc/themes/material-blue/ldap.inc:164 +#: ../../../../inc/themes/material-blue/users.inc:57 +msgid "Grupo" +msgstr "Csoport" -# "Session finished" -#: ../../../../js/functions.php:38 ../../../../inc/tpl/login.php:69 -msgid "Sesión finalizada" -msgstr "Munkamenet befejezõdött" +# "Files management disabled" +#: ../../../../ajax/ajax_files.php:45 ../../../../ajax/ajax_getFiles.php:39 +msgid "Gestión de archivos deshabilitada" +msgstr "Fálj menedzsment inaktív" -# "Delete account?" -#: ../../../../js/functions.php:39 -msgid "Borrar la cuenta?" -msgstr "Fiók törlése?" +# "Upload File" +#: ../../../../ajax/ajax_files.php:59 ../../../../inc/Files.class.php:63 +msgid "Subir Archivo" +msgstr "Fájl feltöltés" -# "Delete user?" -#: ../../../../js/functions.php:40 -msgid "Borrar el usuario?" -msgstr "Törlöd a felhasználót?" +# "There are no allowed extensions" +#: ../../../../ajax/ajax_files.php:68 +msgid "No hay extensiones permitidas" +msgstr "Tiltott kiterjesztések" -# "You should save configuration in order to take effect" -#: ../../../../js/functions.php:41 -msgid "Guarde la configuración para que sea efectiva" -msgstr "A módosítások életbe lépéséhez mentened kell a beállításokat" +# "File type not allowed" +#: ../../../../ajax/ajax_files.php:79 ../../../../inc/FileImport.class.php:115 +msgid "Tipo de archivo no soportado" +msgstr "Fájltípus nem engedélyezett" -# "Generated Password" -#: ../../../../js/functions.php:42 -msgid "Clave Generada" -msgstr "Generált Jelszó" +# "Invalid file" +#: ../../../../ajax/ajax_files.php:85 +msgid "Archivo inválido" +msgstr "Érvénytelen fájl" -# "High level" -#: ../../../../js/functions.php:43 -msgid "Nivel alto" -msgstr "Erös" +# "Internal error while reading file" +#: ../../../../ajax/ajax_files.php:101 ../../../../ajax/ajax_files.php:118 +#: ../../../../inc/FileImport.class.php:131 +#: ../../../../inc/FileImport.class.php:149 +#: ../../../../inc/FileImport.class.php:167 +msgid "Error interno al leer el archivo" +msgstr "Belsõ hiba a fájl olvasása közben" -# "Average level" -#: ../../../../js/functions.php:44 -msgid "Nivel medio" -msgstr "Közepes" +# "File is bigger than" +#: ../../../../ajax/ajax_files.php:108 +msgid "El archivo es mayor de " +msgstr "A fájl nagyobb, mint" -# "Low level" -#: ../../../../js/functions.php:45 -msgid "Nivel bajo" -msgstr "Gyenge" +# "File saved" +#: ../../../../ajax/ajax_files.php:125 +msgid "Archivo guardado" +msgstr "Fájl elmentve" -# "Very high level" -#: ../../../../js/functions.php:46 -msgid "Nivel muy alto" -msgstr "Nagyon erös" +# "Error on file save" +#: ../../../../ajax/ajax_files.php:130 +msgid "No se pudo guardar el archivo" +msgstr "Hiba a fájl mentése közben" -# "You should use at least 8 characters" -#: ../../../../js/functions.php:47 -msgid "Utilizar al menos 8 caracteres" -msgstr "Legalább 8 karakterböl állót adj meg" +# "Invalid file ID" +#: ../../../../ajax/ajax_files.php:140 ../../../../ajax/ajax_files.php:199 +msgid "No es un ID de archivo válido" +msgstr "Helytelen fájl ID" -# "Delete item?" -#: ../../../../js/functions.php:48 -msgid "Borrar elemento?" -msgstr "Törlöd a tételt?" +# "File doesn't exist" +#: ../../../../ajax/ajax_files.php:148 +msgid "El archivo no existe" +msgstr "A fájl nem létezik" -# "Page not found" -#: ../../../../js/functions.php:49 -msgid "Página no encontrada" -msgstr "Oldal nem található" +# "Download File" +#: ../../../../ajax/ajax_files.php:157 +#: ../../../../inc/themes/classic/files.inc:19 +#: ../../../../inc/themes/material-blue/files.inc:19 +msgid "Descargar Archivo" +msgstr "Fájl letöltés" -# "File not supported for preview" -#: ../../../../js/functions.php:50 -msgid "Archivo no soportado para visualizar" -msgstr "A fájlnak nincs elönézete" +# "ID" +#: ../../../../ajax/ajax_files.php:158 ../../../../ajax/ajax_viewpass.php:69 +#: ../../../../inc/Files.class.php:112 +#: ../../../../inc/themes/classic/eventlog.inc:16 +#: ../../../../inc/themes/material-blue/eventlog.inc:15 +msgid "ID" +msgstr "ID" -# "Delete file?" -#: ../../../../js/functions.php:51 -msgid "Eliminar archivo?" -msgstr "Törlöd a fájlt?" +# "File" +#: ../../../../ajax/ajax_files.php:159 ../../../../inc/Files.class.php:65 +#: ../../../../inc/Files.class.php:113 +#: ../../../../inc/themes/classic/import.inc:155 +#: ../../../../inc/themes/material-blue/import.inc:83 +msgid "Archivo" +msgstr "Fájl" -# "Your browser does not support HTML5 file uploads" -#: ../../../../js/functions.php:52 -msgid "Su navegador no soporta subir archivos con HTML5" -msgstr "A böngészöd nem támogatja a HTML5 fájlok feltöltését" +# "Type" +#: ../../../../ajax/ajax_files.php:160 ../../../../inc/Files.class.php:66 +#: ../../../../inc/Files.class.php:114 +#: ../../../../web/AccountsMgmtC.class.php:266 +#: ../../../../inc/themes/classic/customfields.inc:16 +#: ../../../../inc/themes/material-blue/customfields.inc:19 +msgid "Tipo" +msgstr "Típus" -# "Too many files" -#: ../../../../js/functions.php:53 -msgid "Demasiados archivos" -msgstr "Túl sok fájl" +# "Size" +#: ../../../../ajax/ajax_files.php:161 ../../../../inc/Files.class.php:67 +#: ../../../../inc/Files.class.php:115 +msgid "Tamaño" +msgstr "Méret" -# "Unable to save file.
    Max file size:" -#: ../../../../js/functions.php:54 -msgid "No es posible guardar el archivo.
    Tamaño máximo:" -msgstr "Nem lehet elmenteni a fájlt.
    Maximális fájl méret:" +# "File deleted" +#: ../../../../ajax/ajax_files.php:203 +msgid "Archivo eliminado" +msgstr "Fájl törölve" -# "Extension not allowed" -#: ../../../../js/functions.php:55 -msgid "Extensión no permitida" -msgstr "A kiterjesztés nem engedélyezett" +# "Error on file deletion" +#: ../../../../ajax/ajax_files.php:208 +msgid "Error al eliminar el archivo" +msgstr "Hiba a fájlok törlése közben" -# "Clear event log?" -#: ../../../../js/functions.php:56 -msgid "Vaciar el registro de eventos?" -msgstr "Törlöd az esemény naplót?" +# "Incorrect parameters" +#: ../../../../ajax/ajax_getContent.php:41 +#: ../../../../inc/ApiRequest.class.php:55 +#: ../../../../inc/CustomFieldDef.class.php:38 +#: ../../../../inc/CustomFields.class.php:48 +msgid "Parámetros incorrectos" +msgstr "Helytelen paraméter" + +# "Confirm account import" +#: ../../../../ajax/ajax_migrate.php:55 +msgid "Confirmar la importación de cuentas" +msgstr "Fiók importálás megerõsítése" + +# "Connection username needed" +#: ../../../../ajax/ajax_migrate.php:57 +msgid "Es necesario un usuario de conexión" +msgstr "Kapcsolati felhasználónév szükséges" + +# "Connection password needed" +#: ../../../../ajax/ajax_migrate.php:59 +msgid "Es necesaria una clave de conexión" +msgstr "Kapcsolati jelszó szükséges" + +# "Database name needed" +#: ../../../../ajax/ajax_migrate.php:61 +msgid "Es necesario el nombre de la BBDD" +msgstr "Adatbázis név szükséges" + +# "Host name needed" +#: ../../../../ajax/ajax_migrate.php:63 +msgid "Es necesario un nombre de host" +msgstr "Host név szükséges" + +# "Password Recovery" +#: ../../../../ajax/ajax_passReset.php:47 +#: ../../../../ajax/ajax_passReset.php:50 +msgid "Recuperación de Clave" +msgstr "Jelszó visszaállítás" + +# "Requested for" +#: ../../../../ajax/ajax_passReset.php:53 +#: ../../../../ajax/ajax_passReset.php:58 +msgid "Solicitado para" +msgstr "Kért, hogy" + +# "Request sent" +#: ../../../../ajax/ajax_passReset.php:55 +#: ../../../../ajax/ajax_sendRequest.php:75 +msgid "Solicitud enviada" +msgstr "Kérést elküldve" + +# "You will receive an email to complete the request in short." +#: ../../../../ajax/ajax_passReset.php:55 +msgid "En breve recibirá un correo para completar la solicitud." +msgstr "A kérés befejezéséhez email értesítõt küldünk" + +# "The request can't be done. Please contact with the administrator" +#: ../../../../ajax/ajax_passReset.php:60 +msgid "No se ha podido realizar la solicitud. Consulte con el administrador." +msgstr "A kérést nem lehet befejezni. Kérem lépjen kapcsolatba a rendszergazdával" + +# "Edit User Password" +#: ../../../../ajax/ajax_passReset.php:72 +#: ../../../../inc/UserBase.class.php:568 +#: ../../../../inc/UserUtil.class.php:686 +msgid "Modificar Clave Usuario" +msgstr "Felhasználó jelszavának szerkesztése" + +# "Login" +#: ../../../../ajax/ajax_passReset.php:72 +#: ../../../../inc/UserBase.class.php:568 +#: ../../../../inc/UserBase.class.php:592 +#: ../../../../inc/UserUtil.class.php:686 +#: ../../../../web/UsersMgmtC.class.php:88 +#: ../../../../inc/themes/classic/users.inc:21 +#: ../../../../inc/themes/material-blue/users.inc:24 +msgid "Login" +msgstr "Belépés" + +# "The password is incorrect or not the same" +#: ../../../../ajax/ajax_passReset.php:80 +msgid "La clave es incorrecta o no coincide" +msgstr "A jelszó helytelen, vagy nem egyezik" + +# "Description is needed" +#: ../../../../ajax/ajax_sendRequest.php:48 +msgid "Es necesaria una descripción" +msgstr "Leírás szükséges" + +# "Request for Account Modification" +#: ../../../../ajax/ajax_sendRequest.php:61 +msgid "Solicitud de Modificación de Cuenta" +msgstr "Kérés fiók módosításához" + +# "Requester" +#: ../../../../ajax/ajax_sendRequest.php:62 +msgid "Solicitante" +msgstr "Kérõ" + +# "Account" +#: ../../../../ajax/ajax_sendRequest.php:63 +#: ../../../../ajax/ajax_viewpass.php:70 ../../../../inc/Account.class.php:165 +#: ../../../../inc/Account.class.php:219 ../../../../inc/Account.class.php:402 +#: ../../../../inc/Account.class.php:425 ../../../../inc/Account.class.php:667 +#: ../../../../inc/Files.class.php:64 +msgid "Cuenta" +msgstr "Fiók" + +# "Customer" +#: ../../../../ajax/ajax_sendRequest.php:64 +#: ../../../../inc/Account.class.php:164 ../../../../inc/Account.class.php:218 +#: ../../../../inc/Account.class.php:401 ../../../../inc/Account.class.php:424 +#: ../../../../inc/Account.class.php:666 ../../../../inc/Customer.class.php:65 +#: ../../../../inc/Customer.class.php:115 +#: ../../../../inc/Customer.class.php:163 +#: ../../../../web/SearchC.class.php:271 +#: ../../../../inc/themes/classic/account.inc:23 +#: ../../../../inc/themes/classic/editpass.inc:12 +#: ../../../../inc/themes/classic/request.inc:9 +#: ../../../../inc/themes/classic/search.inc:21 +#: ../../../../inc/themes/material-blue/account.inc:29 +#: ../../../../inc/themes/material-blue/editpass.inc:13 +#: ../../../../inc/themes/material-blue/request.inc:10 +#: ../../../../inc/themes/material-blue/search.inc:24 +msgid "Cliente" +msgstr "Ügyfél" + +# "Description" +#: ../../../../ajax/ajax_sendRequest.php:65 +#: ../../../../web/AccountsMgmtC.class.php:79 +#: ../../../../web/AccountsMgmtC.class.php:138 +#: ../../../../web/UsersMgmtC.class.php:187 +#: ../../../../inc/themes/classic/categories.inc:16 +#: ../../../../inc/themes/classic/customers.inc:16 +#: ../../../../inc/themes/classic/eventlog.inc:31 +#: ../../../../inc/themes/classic/groups.inc:16 +#: ../../../../inc/themes/material-blue/categories.inc:20 +#: ../../../../inc/themes/material-blue/customers.inc:20 +#: ../../../../inc/themes/material-blue/eventlog.inc:30 +#: ../../../../inc/themes/material-blue/groups.inc:20 +msgid "Descripción" +msgstr "Leírás" + +# "Error on sending request" +#: ../../../../ajax/ajax_sendRequest.php:78 +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 +#, fuzzy +msgid "Error al actualizar preferencias" +msgstr "Hiba a jelszó frissítése közben" + +# "Accounts updated:" +#: ../../../../ajax/ajax_userPrefsSave.php:78 +#, fuzzy +msgid "Preferencias actualizadas" +msgstr "Fiókok frissítve" + +# "Master password mismatch" +#: ../../../../ajax/ajax_viewpass.php:54 +msgid "La clave maestra no coincide" +msgstr "A mester jelszó nem egyezik" + +# "You don't have permission to access to this account" +#: ../../../../ajax/ajax_viewpass.php:58 +#: ../../../../inc/Controller.class.php:166 +msgid "No tiene permisos para acceder a esta cuenta" +msgstr "Nincs jogosultságod belépni ebbe a fiókba" + +# "View password" +#: ../../../../ajax/ajax_viewpass.php:68 ../../../../inc/Acl.class.php:133 +#: ../../../../inc/themes/classic/account.inc:379 +#: ../../../../inc/themes/classic/profiles.inc:23 +#: ../../../../inc/themes/classic/search.inc:102 +#: ../../../../inc/themes/material-blue/account.inc:418 +#: ../../../../inc/themes/material-blue/profiles.inc:35 +#: ../../../../inc/themes/material-blue/search.inc:113 +msgid "Ver Clave" +msgstr "Jelszó" + +# "View account password" +#: ../../../../ajax/ajax_viewpass.php:79 +#, fuzzy +msgid "Clave de Cuenta" +msgstr "Fiók jelszavának szerkesztése" + +# "Parameter" +#: ../../../../api.php:56 +#, fuzzy +msgid "Ayuda Parámetros" +msgstr "Segítség :: GYIK :: Változások Listája" # "Unable to access to this file directly" -#: ../../../../inc/groups.class.php:27 ../../../../inc/util.class.php:26 -#: ../../../../inc/util.class.php:288 ../../../../inc/db.class.php:27 -#: ../../../../inc/html.class.php:27 ../../../../inc/files.class.php:27 -#: ../../../../inc/backup.class.php:26 ../../../../inc/ldap.class.php:27 -#: ../../../../inc/config.class.php:26 ../../../../inc/profiles.class.php:27 -#: ../../../../inc/common.class.php:26 ../../../../inc/account.class.php:26 -#: ../../../../inc/init.php:26 ../../../../inc/acl.class.php:27 -#: ../../../../inc/upgrade.class.php:27 ../../../../inc/migrate.class.php:26 -#: ../../../../inc/keepassimport.class.php:27 -#: ../../../../inc/installer.class.php:27 -#: ../../../../inc/keepassximport.class.php:27 -#: ../../../../inc/users.class.php:27 ../../../../inc/log.class.php:26 -#: ../../../../inc/crypt.class.php:26 ../../../../inc/customer.class.php:27 -#: ../../../../inc/category.class.php:27 ../../../../inc/import.class.php:27 -#: ../../../../inc/auth.class.php:27 ../../../../inc/tpl/request.php:25 -#: ../../../../inc/tpl/backup.php:26 ../../../../inc/tpl/masterpass.php:26 -#: ../../../../inc/tpl/groups.php:26 ../../../../inc/tpl/migrate.php:26 -#: ../../../../inc/tpl/login.php:26 ../../../../inc/tpl/customers.php:26 -#: ../../../../inc/tpl/main.php:26 ../../../../inc/tpl/profiles.php:26 -#: ../../../../inc/tpl/search.php:26 ../../../../inc/tpl/editpass.php:25 -#: ../../../../inc/tpl/accounts.php:26 ../../../../inc/tpl/categories.php:26 -#: ../../../../inc/tpl/config.php:26 ../../../../inc/tpl/users.php:26 -#: ../../../../inc/tpl/eventlog.php:26 +#: ../../../../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:30 ../../../../inc/Backup.class.php:28 +#: ../../../../inc/Category.class.php:29 ../../../../inc/Common.class.php:28 +#: ../../../../inc/Config.class.php:28 ../../../../inc/Controller.class.php:31 +#: ../../../../inc/Crypt.class.php:28 ../../../../inc/CsvImport.class.php:28 +#: ../../../../inc/CsvImportBase.class.php:28 +#: ../../../../inc/Customer.class.php:29 ../../../../inc/DB.class.php:28 +#: ../../../../inc/DBConnectionFactory.class.php:30 +#: ../../../../inc/FileImport.class.php:28 ../../../../inc/Files.class.php:29 +#: ../../../../inc/Groups.class.php:29 ../../../../inc/Html.class.php:28 +#: ../../../../inc/ImageUtil.class.php:28 ../../../../inc/Import.class.php:29 +#: ../../../../inc/ImportBase.class.php:28 ../../../../inc/Init.class.php:30 +#: ../../../../inc/Installer.class.php:29 +#: ../../../../inc/KeepassImport.class.php:28 +#: ../../../../inc/KeepassXImport.class.php:28 +#: ../../../../inc/Ldap.class.php:29 ../../../../inc/LdapADS.class.php:28 +#: ../../../../inc/Log.class.php:28 ../../../../inc/Migrate.class.php:28 +#: ../../../../inc/Profile.class.php:29 +#: ../../../../inc/ProfileBase.class.php:28 +#: ../../../../inc/Request.class.php:111 ../../../../inc/Session.class.php:28 +#: ../../../../inc/SyspassImport.class.php:28 +#: ../../../../inc/Upgrade.class.php:29 ../../../../inc/User.class.php:28 +#: ../../../../inc/UserLdap.class.php:28 +#: ../../../../inc/UserPreferences.class.php:28 +#: ../../../../inc/UserUtil.class.php:28 ../../../../inc/Util.class.php:30 +#: ../../../../inc/XmlImport.class.php:28 +#: ../../../../inc/XmlImportBase.class.php:28 +#: ../../../../web/AccountC.class.php:38 +#: ../../../../web/AccountsMgmtC.class.php:32 +#: ../../../../web/ConfigC.class.php:30 ../../../../web/EventlogC.class.php:28 +#: ../../../../web/SearchC.class.php:30 +#: ../../../../web/UsersMgmtC.class.php:39 +#: ../../../../web/UsersPrefsC.class.php:32 msgid "No es posible acceder directamente a este archivo" msgstr "A fájl közvetlen elérése meghiúsult" -# "Edit Group" -#: ../../../../inc/groups.class.php:178 -msgid "Modificar Grupo" -msgstr "Csoport módosítás" - -# Required PHP version >= 5.1 -#: ../../../../inc/util.class.php:115 -#, fuzzy -msgid "Versión de PHP requerida >= 5.1" -msgstr "Szükséges PHP verzió> = 5.1" - -# "Please update PHP version to run sysPass in a secure way" -#: ../../../../inc/util.class.php:116 -#, 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:136 ../../../../inc/tpl/config.php:374 -msgid "Módulo no disponible" -msgstr "Modul nem elérhetõ" - -# "Without this module the application couldn't run correctly" -#: ../../../../inc/util.class.php:137 -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" - -# "Unable to connect to DB" -#: ../../../../inc/db.class.php:93 ../../../../inc/db.class.php:107 -#: ../../../../inc/db.class.php:114 -msgid "No es posible conectar con la BD" -msgstr "Csatlakozás a DB-hez meghiusúlt" - -# Please, check connection parameters -#: ../../../../inc/db.class.php:93 -#, fuzzy -msgid "Compruebe los datos de conexión" -msgstr "Please, check connection parameters" - -# "Javascript is needed in order to run correctly" -#: ../../../../inc/html.class.php:246 -msgid "Javascript es necesario para el correcto funcionamiento" -msgstr "Java szkript szükséges a megfelelõ mûködéshez" - -# Help :: FAQ :: Changelog -#: ../../../../inc/html.class.php:271 -msgid "Ayuda :: FAQ :: Changelog" -msgstr "Segítség :: GYIK :: Változások Listája" - -# "A cygnux.org project" -#: ../../../../inc/html.class.php:273 -msgid "Un proyecto de cygnux.org" -msgstr "A cygnux.org projekt" - -# "Filter ON" -#: ../../../../inc/html.class.php:315 -msgid "Filtro ON" -msgstr "Szûrõ bekapcsolva" - -# "Global ON" -#: ../../../../inc/html.class.php:317 -msgid "Global ON" -msgstr "Global On" - -# "First page" -#: ../../../../inc/html.class.php:322 ../../../../inc/html.class.php:355 -msgid "Primera página" -msgstr "Elsõ oldal" - -# "Previous page" -#: ../../../../inc/html.class.php:323 ../../../../inc/html.class.php:356 -msgid "Página anterior" -msgstr "Elõzõ oldal" - -# "Next page" -#: ../../../../inc/html.class.php:330 ../../../../inc/html.class.php:363 -msgid "Página siguiente" -msgstr "Következõ oldal" - -# "Last page" -#: ../../../../inc/html.class.php:331 ../../../../inc/html.class.php:364 -msgid "Última página" -msgstr "Utolsó oldal" - -# "Option unavilable" -#: ../../../../inc/html.class.php:458 -msgid "Opción no disponible" -msgstr "Beállítás nem elérhetõ" - -# "Please, contact to administrator" -#: ../../../../inc/html.class.php:458 ../../../../inc/html.class.php:459 -#: ../../../../inc/html.class.php:460 ../../../../inc/init.php:476 -msgid "Consulte con el administrador" -msgstr "Kérem, keresse a rendszergazdát" - -# "You don't have permission to access to this page" -#: ../../../../inc/html.class.php:460 -msgid "No tiene permisos para acceder a esta página" -msgstr "Nincs jogosultságod belépni ebbe az oldalba" - -# "This operation is only available on Linux environments" -#: ../../../../inc/backup.class.php:155 -msgid "Esta operación sólo es posible en entornos Linux" -msgstr "Ez a mûvelet csak Linux környezetben érhetõ el" - -# Error while doing backup in compatibility mode -#: ../../../../inc/backup.class.php:159 -#, fuzzy -msgid "Error al realizar backup en modo compatibilidad" -msgstr "Error while doing backup in compatibility mode" - -# "Check backup directory permissions" -#: ../../../../inc/backup.class.php:217 -msgid "Compruebe los permisos del directorio de backups" -msgstr "Ellenõrizze az archiválás mappa jogosultságait" - -# "Unable to connect to LDAP server" -#: ../../../../inc/ldap.class.php:97 ../../../../inc/ldap.class.php:102 -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:126 ../../../../inc/ldap.class.php:132 -msgid "Error al conectar (BIND)" -msgstr "Kapcsolat hiba (BIND)" - -# "Error on searching objects in base DN" -#: ../../../../inc/ldap.class.php:154 ../../../../inc/ldap.class.php:160 -msgid "Error al buscar objetos en DN base" -msgstr "Hiba a keresés közben" - -# "Error on searching group RDN" -#: ../../../../inc/ldap.class.php:187 ../../../../inc/ldap.class.php:193 -#: ../../../../inc/ldap.class.php:200 ../../../../inc/ldap.class.php:205 -#: ../../../../inc/ldap.class.php:215 ../../../../inc/ldap.class.php:220 -msgid "Error al buscar RDN de grupo" -msgstr "Hiba az RDN csoport keresése közben" - -# "Group RDN found" -#: ../../../../inc/ldap.class.php:208 -msgid "RDN de grupo encontrado" -msgstr "Alap RDN találat" - -# "Error on searching user DN" -#: ../../../../inc/ldap.class.php:270 ../../../../inc/ldap.class.php:276 -#: ../../../../inc/ldap.class.php:291 ../../../../inc/ldap.class.php:296 -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:283 ../../../../inc/ldap.class.php:288 -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:369 ../../../../inc/ldap.class.php:375 -msgid "Error al buscar el grupo de usuarios" -msgstr "Hiba a keresése közben" - -# "No group found with that name" -#: ../../../../inc/ldap.class.php:379 ../../../../inc/ldap.class.php:385 -msgid "No se encontró el grupo con ese nombre" -msgstr "Nincs ilyen nevû csoport" - -# "Update Configuration" -#: ../../../../inc/config.class.php:125 ../../../../inc/config.class.php:151 -msgid "Modificar configuración" -msgstr "Konfiguráció frissítése" - -# "Parameter" -#: ../../../../inc/config.class.php:152 -msgid "Parámetro" -msgstr "Paraméter" - -# "Value" -#: ../../../../inc/config.class.php:153 -msgid "Valor" -msgstr "Érték" - -# "Unable to write on configuration file" -#: ../../../../inc/config.class.php:312 -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:313 -msgid "Compruebe los permisos del directorio \"config\"" -msgstr "Kérem, ellenõrizze a 'config' mappa jogosultságait" - -# "Edit Profile" -#: ../../../../inc/profiles.class.php:253 -msgid "Modificar Perfil" -msgstr "Profil módosítás" - -# "N/A" -#: ../../../../inc/common.class.php:60 ../../../../inc/users.class.php:107 -msgid "N/D" -msgstr "n.a." - -# "Action" -#: ../../../../inc/common.class.php:61 -msgid "Acción" -msgstr "Akció" - -# "Performed by" -#: ../../../../inc/common.class.php:62 -msgid "Realizado por" -msgstr "Által végrehajtva" - -# "Email sent" -#: ../../../../inc/common.class.php:80 -msgid "Correo enviado" -msgstr "Email elküldve" - -# "Error on sending email" -#: ../../../../inc/common.class.php:82 -msgid "Error al enviar correo" -msgstr "Hiba az email küldése közben" - -# "Recipient" -#: ../../../../inc/common.class.php:87 -msgid "Destinatario" -msgstr "Címzett" - -# "CC" -#: ../../../../inc/common.class.php:88 -msgid "CC" -msgstr "CC" - -# "Send Email" -#: ../../../../inc/common.class.php:90 -msgid "Enviar Email" -msgstr "Email küldése" - -# "Warning" -#: ../../../../inc/common.class.php:144 -msgid "Aviso" -msgstr "Figyelem" - -# "Enter phpPMS database connection user" -#: ../../../../inc/common.class.php:205 -msgid "Indicar el usuario de conexión a la base de datos de phpPMS" -msgstr "Írd be az adatbázis kapcsolati felhasználót" - -# "Enter phpPMS database name" -#: ../../../../inc/common.class.php:206 -msgid "Indicar el nombre de la base de datos de phpPMS" -msgstr "Írd be a phpPMS adatbázis nevét" - -# "Enter phpPMS database server name" -#: ../../../../inc/common.class.php:207 -msgid "Indicar el servidor de la base de datos de phpPMS" -msgstr "Írd be az adatbázis szerver nevét" - -# "Enables account name as a link to account details in search page." -#: ../../../../inc/common.class.php:208 -msgid "" -"Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles " -"de la cuenta" -msgstr "Fiók nevére való keresés engedélyezése" - -# "Number of results that are shown per page when searching" -#: ../../../../inc/common.class.php:209 -msgid "Número de resultados por página a mostrar, al realizar una búsqueda" -msgstr "Keresési találok száma oldalanként" - -# "Enables upload/download accounts files." -#: ../../../../inc/common.class.php:210 -msgid "Habilita la subida/descarga de archivos para las cuentas" -msgstr "Fájlok Fel/Letöltésének engedélyezése" - -# "Sets up the max upload file size." -#: ../../../../inc/common.class.php:211 -msgid "Establece el tamaño máximo para subir archivos" -msgstr "A feltölthetõ fájlméret maximális értékének beállítása" - -# "The absolute maximum is 16MB." -#: ../../../../inc/common.class.php:211 -msgid "El máximo absuluto es de 16MB" -msgstr "A maximum 16MB" - -# "Enables the option to add an external Wiki link for accounts search results." -#: ../../../../inc/common.class.php:212 -msgid "" -"Habilita la opción de añadir un enlace a Wiki externa para los resultados de " -"la búsqueda" -msgstr "Külsõ Wiki forrásokban való keresés engedélyezése" - -# "URL that wiki uses to do a page search on it." -#: ../../../../inc/common.class.php:213 -msgid "" -"URL que utiliza la wiki para realizar una búsqueda de una página en esta" -msgstr "Wiki oldal keresõje" - -# "It uses customer name as parameter." -#: ../../../../inc/common.class.php:213 -msgid "Como parámetro se utiliza el nombre del cliente" -msgstr "Az ügyfelet paraméterként használja" - -# "Example" -#: ../../../../inc/common.class.php:213 ../../../../inc/common.class.php:214 -#: ../../../../inc/common.class.php:217 ../../../../inc/common.class.php:218 -#: ../../../../inc/common.class.php:219 -msgid "Ejemplo" -msgstr "Példa" - -# "URL that wiki uses to access to page details on it." -#: ../../../../inc/common.class.php:214 -msgid "" -"URL que utiliza la wiki para acceder a los detalles de una página de ésta" -msgstr "Wiki oldal adatainak elérése" - -# "The account name is used as wiki search variable parameter." -#: ../../../../inc/common.class.php:214 -msgid "" -"El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda " -"de la Wiki" -msgstr "A fiók neve wiki keresési paraméterként való használata" - -# "Preffix to select what accounts have a wiki page link." -#: ../../../../inc/common.class.php:215 -msgid "" -"Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki" -msgstr "Elõtag választás a fiókok tartalmaznak-e wiki linket" - -# "Examples" -#: ../../../../inc/common.class.php:215 -msgid "Ejemplos" -msgstr "Példák" - -# "Enables LDAP authentication" -#: ../../../../inc/common.class.php:216 -msgid "Habilita de autentificación mediante servidor LDAP" -msgstr "LDAP hitelesítés engedélyezése" - -# "This method will switch to MySQL on failure" -#: ../../../../inc/common.class.php:216 -msgid "Este método utilizará MySQL en caso de fallo" -msgstr "Ez a metódus hibát okoz a MySQL-ben" - -# "User to connect LDAP server" -#: ../../../../inc/common.class.php:217 -msgid "Usuario para conectar con el servicio de LDAP" -msgstr "Felhasználó az LDAP szerverhez való kapcsolódáshoz" - -# "LDAP base to do users searches." -#: ../../../../inc/common.class.php:218 -msgid "Base en la que realizar la búsqueda de usuarios de LDAP" -msgstr "LDAP bázis a felhasználó keresésekhez" - -# "LDAP group that users belong to for access permission" -#: ../../../../inc/common.class.php:219 -msgid "" -"Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso" -msgstr "LDAP csoport felhasználóinak belépési jgosultságia" - -# "LDAP server hostname or IP address" -#: ../../../../inc/common.class.php:220 -msgid "Nombre o dirección IP del servidor de LDAP" -msgstr "LDAP szerver hosztnév vagy IP cím" - -# "Sets a new master password without re-encrypt the accounts." -#: ../../../../inc/common.class.php:221 -msgid "Establece una nueva clave maestra sin re-encriptar las cuentas" -msgstr "Új mester jelszó beállítása a fiók újratitkosítása nélkül" - -# "LDAP bind user password" -#: ../../../../inc/common.class.php:222 -msgid "Clave del usuario de conexión a LDAP" -msgstr "LDAP bind felhasználói jelszó" - -# "In this mode you cannot login to application. To disable it, you need to modify configuration file." -#: ../../../../inc/common.class.php:223 -msgid "" -"En este modo no se puede acceder a la aplicación. Para deshabilitarlo es " -"necesario modificar el archivo de configuración" -msgstr "" -"Ezen a módon nem tudsz bejelentkezni az alkalmazásba. Hogy kikapcsold, " -"módosítanod kell a konfigurációs fájlt" - -# "Shows some information about application and performance." -#: ../../../../inc/common.class.php:224 -msgid "" -"Muestra información relativa a la configuración de la aplicación y " -"rendimiento" -msgstr "Mutat néhány információt az alkalmazásról és a teljesítményrõl" - -# "It saves the actions done by the application." -#: ../../../../inc/common.class.php:225 -msgid "Guarda las acciones realizadas en la aplicación" -msgstr "Ez elmenti az akciók kimenetét" - -# "Check for application updates (only for administrators)." -#: ../../../../inc/common.class.php:226 -msgid "" -"Comprobar actualizaciones de la aplicación (sólo para los usuarios " -"administradores)" -msgstr "Azlkalmazás frissítések keresése (csak rendszergazda esetén)" - -# "Extensions max length is 4 characters." -#: ../../../../inc/common.class.php:227 -msgid "Extensiones de máximo 4 caracteres." -msgstr "A kiterjesztések hossza maximum 4 karakter lehet" - -# "Write extension and press enter to add." -#: ../../../../inc/common.class.php:227 -msgid "Escribir extensión y pulsar intro para añadir." -msgstr "Írj kiterjesztést, majd nyomj entert a hozzáadáshoz" - -# Import from KeePass or KeePassX. The customer name will be KeePass or KeePassX. -#: ../../../../inc/common.class.php:228 -#, fuzzy -msgid "" -"Importar desde KeePass o KeePassX. El nombre del cliente será igual a " -"KeePass o KeePassX" -msgstr "" -"Import from KeePass or KeePassX. The customer name will be KeePass or " -"KeePassX." - -# "Import form a CSV file with the format" -#: ../../../../inc/common.class.php:228 -msgid "Importar desde un archivo CSV con el formato" -msgstr "Forma importálása a CSV fájl formátumával együtt" - -# "account_name;customer;category;url;user;password;notes" -#: ../../../../inc/common.class.php:228 -msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas" -msgstr "Fiók_név;ügyfél;kategória;url;felhasználó;jelszó;jegyzetek" - -# "If the customer or category are not created, they will be automatically created." -#: ../../../../inc/common.class.php:228 -msgid "" -"Si el cliente o la categoría no están creados, se crean automáticamente." -msgstr "" -"Amennyiben az ügyfél vagy a kategória nem létezik, automatikusan lesznek " -"létrehozva" - -# Allows to show the non-permission accounts only for searches. -#: ../../../../inc/common.class.php:229 -#, fuzzy -msgid "" -"Permite que las cuentas sin acceso sean visibles sólo para las búsquedas." -msgstr "Allows to show the non-permission accounts only for searches." - -# Enables to show account's search results like a card format. -#: ../../../../inc/common.class.php:230 -#, fuzzy -msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta." -msgstr "Enables to show account's search results like a card format." - -# Enables Active Directory LDAP connection mode. -#: ../../../../inc/common.class.php:231 -#, fuzzy -msgid "Habilita el modo de conexión con LDAP de Active Directory." -msgstr "Enables Active Directory LDAP connection mode." - -# Define the default users group for new LDAP users -#: ../../../../inc/common.class.php:232 -#, fuzzy -msgid "" -"Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP." -msgstr "Define the default users group for new LDAP users" - -# Define the default users profile for new LDAP users -#: ../../../../inc/common.class.php:233 -#, fuzzy -msgid "" -"Define el perfil de usuario por defecto para los nuevos usuarios de LDAP." -msgstr "Define the default users profile for new LDAP users" - # "Error on updating history" -#: ../../../../inc/account.class.php:320 ../../../../inc/account.class.php:842 +#: ../../../../inc/Account.class.php:112 ../../../../inc/Account.class.php:185 +#: ../../../../inc/Account.class.php:636 msgid "Error al actualizar el historial" msgstr "Hiba az elõzmények frissítése közben" # "Update Customer" -#: ../../../../inc/account.class.php:326 +#: ../../../../inc/Account.class.php:117 msgid "Actualizar Cuenta" msgstr "Frissítés Számla" # "Error on updating secondary groups" -#: ../../../../inc/account.class.php:329 ../../../../inc/account.class.php:555 +#: ../../../../inc/Account.class.php:120 ../../../../inc/Account.class.php:383 msgid "Error al actualizar los grupos secundarios" msgstr "Hiba a másodlagos csoportok frissítése közben" # "Error on updating account's users" -#: ../../../../inc/account.class.php:335 ../../../../inc/account.class.php:563 +#: ../../../../inc/Account.class.php:126 ../../../../inc/Account.class.php:391 msgid "Error al actualizar los usuarios de la cuenta" msgstr "Hiba a fiók felhasználóinak frissítése közben" # "Restore Account" -#: ../../../../inc/account.class.php:340 +#: ../../../../inc/Account.class.php:217 msgid "Restaurar Cuenta" msgstr "Restore Számla" +# "Error on retrieving accounts' passwords" +#: ../../../../inc/Account.class.php:326 +#: ../../../../inc/AccountHistory.class.php:343 +#: ../../../../inc/AccountHistory.class.php:505 +#, fuzzy +msgid "No se pudieron obtener los datos de la cuenta" +msgstr "Hiba a fiókok jelszavainak betöltése közben" + # "New Account" -#: ../../../../inc/account.class.php:572 ../../../../inc/tpl/main.php:53 -#: ../../../../inc/tpl/accounts.php:47 +#: ../../../../inc/Account.class.php:400 ../../../../inc/Acl.class.php:129 +#: ../../../../web/AccountC.class.php:147 ../../../../web/MainC.class.php:155 msgid "Nueva Cuenta" msgstr "Új fiók" # "ERROR: Operation failed" -#: ../../../../inc/account.class.php:589 +#: ../../../../inc/Account.class.php:418 msgid "ERROR: Error en la operación." msgstr "HIBA: A mûvelet meghiusult" +# "Delete Account" +#: ../../../../inc/Account.class.php:423 ../../../../inc/Acl.class.php:134 +#: ../../../../web/AccountC.class.php:352 +#: ../../../../inc/themes/classic/account.inc:366 +#: ../../../../inc/themes/classic/search.inc:129 +#: ../../../../inc/themes/material-blue/account.inc:412 +#: ../../../../inc/themes/material-blue/search.inc:142 +msgid "Eliminar Cuenta" +msgstr "Fiók törlése" + # "Error on deleting account's groups" -#: ../../../../inc/account.class.php:606 +#: ../../../../inc/Account.class.php:436 msgid "Error al eliminar grupos asociados a la cuenta" msgstr "Hiba a felhasználó csoportok törlése közben" # "Error on deleting account's users" -#: ../../../../inc/account.class.php:610 +#: ../../../../inc/Account.class.php:440 msgid "Error al eliminar usuarios asociados a la cuenta" msgstr "Hiba a fiók felhasználók törlése közben" # "Error on deleting account's files" -#: ../../../../inc/account.class.php:614 +#: ../../../../inc/Account.class.php:444 msgid "Error al eliminar archivos asociados a la cuenta" msgstr "Hiba a fiók fájljainak törlése közben" # "Start" -#: ../../../../inc/account.class.php:737 ../../../../inc/account.class.php:890 +#: ../../../../inc/Account.class.php:498 +#: ../../../../inc/AccountHistory.class.php:124 +#: ../../../../inc/XmlImport.class.php:62 msgid "Inicio" msgstr "Start" # "Error on encryption module" -#: ../../../../inc/account.class.php:747 ../../../../inc/account.class.php:900 +#: ../../../../inc/Account.class.php:503 +#: ../../../../inc/AccountHistory.class.php:130 msgid "Error en el módulo de encriptación" msgstr "Titkosító modul hiba" # "Error on retrieving accounts' passwords" -#: ../../../../inc/account.class.php:755 ../../../../inc/account.class.php:908 +#: ../../../../inc/Account.class.php:511 +#: ../../../../inc/AccountHistory.class.php:138 msgid "Error al obtener las claves de las cuentas" msgstr "Hiba a fiókok jelszavainak betöltése közben" +# "View account password" +#: ../../../../inc/Account.class.php:527 +#: ../../../../inc/AccountHistory.class.php:160 +#, fuzzy +msgid "Clave de cuenta vacía" +msgstr "Fiók jelszavának szerkesztése" + +#: ../../../../inc/Account.class.php:532 +#: ../../../../inc/AccountHistory.class.php:165 +#, fuzzy +msgid "IV de encriptación incorrecto" +msgstr "A mezõk száma helytelen" + +# "All accounts passwords will be encrypted again." +#: ../../../../inc/Account.class.php:541 +#: ../../../../inc/AccountHistory.class.php:174 +#, fuzzy +msgid "No es posible desencriptar la clave de la cuenta" +msgstr "Minden fiók jelszó újra titkosítva lesz" + # "Error on updating account's password" -#: ../../../../inc/account.class.php:781 +#: ../../../../inc/Account.class.php:547 msgid "Fallo al actualizar la clave de la cuenta" msgstr "Hiba a fiók jelszavának frissítése közben" # "Accounts updated:" -#: ../../../../inc/account.class.php:793 -msgid "Cuentas actualizadas:" +#: ../../../../inc/Account.class.php:561 +#, fuzzy +msgid "Cuentas actualizadas" msgstr "Fiókok frissítve" # "End" -#: ../../../../inc/account.class.php:798 ../../../../inc/account.class.php:956 +#: ../../../../inc/Account.class.php:566 +#: ../../../../inc/AccountHistory.class.php:199 msgid "Fin" msgstr "Vége" # "Update Password" -#: ../../../../inc/account.class.php:865 +#: ../../../../inc/Account.class.php:665 msgid "Modificar Clave" msgstr "Jelszó frissítés" +# "Error on retrieving accounts' passwords" +#: ../../../../inc/Account.class.php:700 +#, fuzzy +msgid "No se pudieron obtener los datos de las cuentas" +msgstr "Hiba a fiókok jelszavainak betöltése közben" + # "Update Master Password (H)" -#: ../../../../inc/account.class.php:889 +#: ../../../../inc/AccountHistory.class.php:123 msgid "Actualizar Clave Maestra (H)" msgstr "Frissítse a mester jelszót (H)" # "Record's Master password mismatch" -#: ../../../../inc/account.class.php:922 +#: ../../../../inc/AccountHistory.class.php:155 msgid "La clave maestra del registro no coincide" msgstr "A rekord mester jelszava nem egyezik" # "Error on updating history's master password" -#: ../../../../inc/account.class.php:938 +#: ../../../../inc/AccountHistory.class.php:180 msgid "Fallo al actualizar la clave del histórico" msgstr "Hiba a elõzmények mester jelszavának frissítése közben" # "Records updated" -#: ../../../../inc/account.class.php:951 -msgid "Registros actualizados:" +#: ../../../../inc/AccountHistory.class.php:194 +#, 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 +#, fuzzy +msgid "Buscar Cuentas" +msgstr "Keresés" + +# "Account" +#: ../../../../inc/Acl.class.php:127 +#, fuzzy +msgid "Ver Cuenta" +msgstr "Fiók adatok" + +# "Copy Account" +#: ../../../../inc/Acl.class.php:128 ../../../../web/AccountC.class.php:259 +#: ../../../../inc/themes/classic/search.inc:123 +#: ../../../../inc/themes/material-blue/search.inc:136 +msgid "Copiar Cuenta" +msgstr "Fiók másolása" + +# "Edit Account" +#: ../../../../inc/Acl.class.php:130 ../../../../web/AccountC.class.php:323 +msgid "Editar Cuenta" +msgstr "Fiók módosítás" + +# "Edit account password" +#: ../../../../inc/Acl.class.php:131 +#, fuzzy +msgid "Editar Clave de Cuenta" +msgstr "fiók jelszavának módosításe" + +# "View History" +#: ../../../../inc/Acl.class.php:132 +#: ../../../../inc/themes/classic/profiles.inc:28 +#: ../../../../inc/themes/material-blue/profiles.inc:40 +msgid "Ver Historial" +msgstr "Elõzmények" + +# "Files" +#: ../../../../inc/Acl.class.php:135 +#: ../../../../inc/themes/classic/account.inc:188 +#: ../../../../inc/themes/classic/profiles.inc:50 +#: ../../../../inc/themes/material-blue/account.inc:230 +#: ../../../../inc/themes/material-blue/config.inc:226 +#: ../../../../inc/themes/material-blue/profiles.inc:60 +msgid "Archivos" +msgstr "Fájlok" + +# "Request" +#: ../../../../inc/Acl.class.php:136 +#, fuzzy +msgid "Peticiones" +msgstr "Email kérések engedélyezése" + +# "Application Admin" +#: ../../../../inc/Acl.class.php:137 +#, fuzzy +msgid "Gestión Aplicación" +msgstr "Menedzsment" + +# "Categories management" +#: ../../../../inc/Acl.class.php:138 +#, fuzzy +msgid "Gestión Categorías" +msgstr "Kategória Menedzsment" + +# "Customers Management" +#: ../../../../inc/Acl.class.php:139 +#, fuzzy +msgid "Gestión Clientes" +msgstr "Ügyfél Menedzsment" + +# "Files management disabled" +#: ../../../../inc/Acl.class.php:140 +#, fuzzy +msgid "Gestión Campos Personalizados" +msgstr "Menedzsment" + +#: ../../../../inc/Acl.class.php:141 +#, fuzzy +msgid "Gestión Autorizaciones API" +msgstr "Menedzsment" + +# "Users Management" +#: ../../../../inc/Acl.class.php:142 ../../../../inc/Acl.class.php:143 +#, fuzzy +msgid "Gestión Usuarios" +msgstr "Felhasználó Menedzsment" + +# "Groups Management" +#: ../../../../inc/Acl.class.php:144 +#, fuzzy +msgid "Gestión Grupos" +msgstr "Csoport Menedzsment" + +# "Profiles Management" +#: ../../../../inc/Acl.class.php:145 +#, fuzzy +msgid "Gestión Perfiles" +msgstr "Profil Menedzsment" + +# "Configuration" +#: ../../../../inc/Acl.class.php:146 ../../../../inc/Config.class.php:118 +#: ../../../../inc/Config.class.php:400 ../../../../web/MainC.class.php:173 +#: ../../../../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:145 +#: ../../../../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:187 +#: ../../../../inc/themes/classic/backup.inc:4 +#: ../../../../inc/themes/material-blue/backup.inc:4 +msgid "Copia de Seguridad" +msgstr "Archiválás" + +#: ../../../../inc/Acl.class.php:150 +msgid "Exportar" +msgstr "" + +# "phpPMS Import" +#: ../../../../inc/Acl.class.php:151 +#: ../../../../inc/themes/classic/profiles.inc:74 +#: ../../../../inc/themes/material-blue/profiles.inc:87 +#, fuzzy +msgid "Importar" +msgstr "Fiókok importálása" + +# "Extension not allowed" +#: ../../../../inc/Api.class.php:65 ../../../../inc/Api.class.php:88 +#: ../../../../inc/Api.class.php:126 +#, fuzzy +msgid "Acceso no permitido" +msgstr "Belépés megtagadva" + +# "Request Modification" +#: ../../../../inc/Api.class.php:166 +#, fuzzy +msgid "Error de codificación" +msgstr "LDAP kapcsolódási hiba" + +#: ../../../../inc/ApiRequest.class.php:102 +#, fuzzy +msgid "Token de autorización" +msgstr "Kérés fiók módosításához" + +# "Invalid Action" +#: ../../../../inc/ApiRequest.class.php:103 +#, fuzzy +msgid "Acción a realizar" +msgstr "Akció" + +# "LDAP bind user password" +#: ../../../../inc/ApiRequest.class.php:104 +#, fuzzy +msgid "Clave de usuario (opcional)" +msgstr "Változás felhasználói jelszó" + +# "Text to search" +#: ../../../../inc/ApiRequest.class.php:105 +#, fuzzy +msgid "Cadena a buscar" +msgstr "Keresés" + +# "Number of results that are shown per page when searching" +#: ../../../../inc/ApiRequest.class.php:106 +#, fuzzy +msgid "Numero de cuentas a mostar en la búsqueda" +msgstr "Keresési találok száma oldalanként" + +#: ../../../../inc/ApiRequest.class.php:107 +msgid "Item a devolver" +msgstr "" + +# "Database already exist" +#: ../../../../inc/ApiTokens.class.php:221 +#, fuzzy +msgid "La autorización ya existe" +msgstr "Az adatbázis már létezik" + +# "Update Configuration" +#: ../../../../inc/ApiTokens.class.php:307 +#, fuzzy +msgid "Actualizar Autorización" +msgstr "Frissítés Számla" + +# "Delete File" +#: ../../../../inc/ApiTokens.class.php:331 +#: ../../../../web/UsersMgmtC.class.php:421 +#, fuzzy +msgid "Eliminar Autorización" +msgstr "Profil törlése" + +# "The user have no associated groups" +#: ../../../../inc/Auth.class.php:111 +#, fuzzy +msgid "Usuario no pertenece al grupo" +msgstr "a felhasználó nincs csoporthoz társítva" + +# "Password Change" +#: ../../../../inc/Auth.class.php:191 +#: ../../../../inc/themes/classic/users.inc:117 +#: ../../../../inc/themes/classic/userspass.inc:2 +#: ../../../../inc/themes/material-blue/users.inc:161 +#: ../../../../inc/themes/material-blue/userspass.inc:2 +msgid "Cambio de Clave" +msgstr "Jelszó változtatás" + +# A request for updating your user password has been done. +#: ../../../../inc/Auth.class.php:193 +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:195 +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:199 +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:161 +msgid "Esta operación sólo es posible en entornos Linux" +msgstr "Ez a mûvelet csak Linux környezetben érhetõ el" + +# Error while doing backup in compatibility mode +#: ../../../../inc/Backup.class.php:163 +#, fuzzy +msgid "Error al realizar backup en modo compatibilidad" +msgstr "Error while doing backup in compatibility mode" + +# "Unable to create backup directory" +#: ../../../../inc/Backup.class.php:217 +msgid "No es posible crear el directorio de backups" +msgstr "Arcív mappa létrehozása meghiusúlt" + +# "Check backup directory permissions" +#: ../../../../inc/Backup.class.php:222 +msgid "Compruebe los permisos del directorio de backups" +msgstr "Ellenõrizze az archiválás mappa jogosultságait" + +# "Category name duplicated" +#: ../../../../inc/Category.class.php:69 +#: ../../../../inc/Category.class.php:165 +msgid "Nombre de categoría duplicado" +msgstr "Kategória neve duplázva" + +# "Error on creating category" +#: ../../../../inc/Category.class.php:78 +msgid "Error al crear la categoría" +msgstr "Hiba a kategória létrehozása közben" + +# "Category" +#: ../../../../inc/Category.class.php:83 +#: ../../../../inc/Category.class.php:132 +#: ../../../../inc/Category.class.php:182 +#: ../../../../web/SearchC.class.php:283 +#: ../../../../inc/themes/classic/account.inc:42 +#: ../../../../inc/themes/classic/search.inc:46 +#: ../../../../inc/themes/material-blue/account.inc:50 +#: ../../../../inc/themes/material-blue/search.inc:49 +msgid "Categoría" +msgstr "Kategória" + +# "Category in use by:" +#: ../../../../inc/Category.class.php:119 +msgid "Categoría en uso por:" +msgstr "A kategóriát a következõ használja:" + +# "Error on category deletion" +#: ../../../../inc/Category.class.php:129 +msgid "Error al eliminar la categoría" +msgstr "Hiba a kategória törlése közben" + +# "Delete Category" +#: ../../../../inc/Category.class.php:132 +#: ../../../../web/AccountsMgmtC.class.php:101 +msgid "Eliminar Categoría" +msgstr "Kategória törlése" + +# "Error on updating category" +#: ../../../../inc/Category.class.php:179 +msgid "Error al actualizar la categoría" +msgstr "Hiba a kategória frissítése közben" + +# "Category Edit" +#: ../../../../inc/Category.class.php:182 +msgid "Modificar Categoría" +msgstr "Kategória szerkesztés" + +# "Update Configuration" +#: ../../../../inc/Config.class.php:118 ../../../../inc/Config.class.php:401 +msgid "Modificar configuración" +msgstr "Konfiguráció frissítése" + +# "Unable to write on configuration file" +#: ../../../../inc/Config.class.php:276 +msgid "No es posible escribir el archivo de configuración" +msgstr "Nem lehet a konfigurációs fájlba írni" + +# "Please, check 'config' directory permissions" +#: ../../../../inc/Config.class.php:276 +msgid "Compruebe los permisos del directorio \"config\"" +msgstr "Kérem, ellenõrizze a 'config' mappa jogosultságait" + +# "Parameter" +#: ../../../../inc/Config.class.php:402 +msgid "Parámetro" +msgstr "Paraméter" + +# "Value" +#: ../../../../inc/Config.class.php:403 +msgid "Valor" +msgstr "Érték" + +# "Option unavilable" +#: ../../../../inc/Controller.class.php:165 +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:289 +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 +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 +msgid "No tiene permisos para realizar esta operación" +msgstr "Nincs jogosultságod végrehajtani ezt a mûveletet" + +# "Crypto module can't be loaded" +#: ../../../../inc/Crypt.class.php:236 +msgid "No se puede usar el módulo de encriptación" +msgstr "A Crypto modul nem tölthetõ be" + +# "Error on creating encryption data" +#: ../../../../inc/Crypt.class.php:247 +msgid "Error al generar datos cifrados" +msgstr "Hiba a titkosítási folyamat közben" + +# "The number of fields is incorrect" +#: ../../../../inc/CsvImportBase.class.php:109 +#, fuzzy, php-format +msgid "El número de campos es incorrecto (%d)" +msgstr "A mezõk száma helytelen" + +# "Please, check the CSV file format" +#: ../../../../inc/CsvImportBase.class.php:110 +#, fuzzy, php-format +msgid "Compruebe el formato del archivo CSV en línea %s" +msgstr "Kérem, ellenõrizze a CSV fájl kiterjesztését" + +# "Import Accounts" +#: ../../../../inc/CsvImportBase.class.php:140 +#: ../../../../inc/CsvImportBase.class.php:145 +#: ../../../../inc/Import.class.php:118 ../../../../inc/Import.class.php:124 +#: ../../../../inc/Migrate.class.php:349 +#: ../../../../inc/XmlImport.class.php:62 +#: ../../../../inc/XmlImport.class.php:63 +#: ../../../../web/ConfigC.class.php:209 +msgid "Importar Cuentas" +msgstr "Fiókok importálása" + +# "Error on importing account" +#: ../../../../inc/CsvImportBase.class.php:141 +msgid "Error importando cuenta" +msgstr "Hiba a fiók importálása közben" + +# "Error on importing account" +#: ../../../../inc/CsvImportBase.class.php:142 +#, fuzzy, php-format +msgid "Error procesando línea %s" +msgstr "Hiba a fiók importálása közben" + +# Account Expired +#: ../../../../inc/CsvImportBase.class.php:145 +#, fuzzy, php-format +msgid "Cuenta importada: %s" +msgstr "Munkamenet idõ" + +# "Categories" +#: ../../../../inc/CustomFieldsBase.class.php:81 +#: ../../../../inc/themes/classic/profiles.inc:98 +#: ../../../../inc/themes/material-blue/profiles.inc:114 +msgid "Categorías" +msgstr "Kategóriák" + +# "Customers" +#: ../../../../inc/CustomFieldsBase.class.php:82 +#: ../../../../inc/themes/classic/profiles.inc:103 +#: ../../../../inc/themes/material-blue/profiles.inc:119 +msgid "Clientes" +msgstr "Ügyfél" + +# "Groups" +#: ../../../../inc/CustomFieldsBase.class.php:84 +#: ../../../../inc/themes/classic/account.inc:140 +#: ../../../../inc/themes/classic/profiles.inc:89 +#: ../../../../inc/themes/material-blue/account.inc:166 +#: ../../../../inc/themes/material-blue/profiles.inc:104 +msgid "Grupos" +msgstr "Csoportok" + +# "Duplicated customer" +#: ../../../../inc/Customer.class.php:50 ../../../../inc/Customer.class.php:95 +msgid "Cliente duplicado" +msgstr "Kettõzött ügyfél" + +# "Error on creating customer" +#: ../../../../inc/Customer.class.php:60 +msgid "Error al crear el cliente" +msgstr "Hiba az ügyfél létrehozása közben" + +# "Error on updating customer" +#: ../../../../inc/Customer.class.php:112 +msgid "Error al actualizar el cliente" +msgstr "Hiba az ügyfél frissítése közben" + +# "Update Customer" +#: ../../../../inc/Customer.class.php:115 +msgid "Actualizar Cliente" +msgstr "Frissítse az ügyfelet" + +# "Customer in use by:" +#: ../../../../inc/Customer.class.php:150 +msgid "Cliente en uso por:" +msgstr "Az ügyfelet a következõ használja:" + +# "Error on customer deletion" +#: ../../../../inc/Customer.class.php:160 +msgid "Error al eliminar el cliente" +msgstr "Hiba az ügyfél törlése közben" + +# "Delete Customer" +#: ../../../../inc/Customer.class.php:163 +#: ../../../../web/AccountsMgmtC.class.php:159 +msgid "Eliminar Cliente" +msgstr "Ügyfél törlése" + +# "Unable to connect to DB" +#: ../../../../inc/DBConnectionFactory.class.php:87 +#: ../../../../inc/DBConnectionFactory.class.php:89 +#: ../../../../inc/DBConnectionFactory.class.php:103 +#: ../../../../inc/Installer.class.php:235 +#: ../../../../inc/Migrate.class.php:115 +msgid "No es posible conectar con la BD" +msgstr "Csatlakozás a DB-hez meghiusúlt" + +# Please, check connection parameters +#: ../../../../inc/DBConnectionFactory.class.php:87 +#: ../../../../inc/DBConnectionFactory.class.php:89 +#: ../../../../inc/Installer.class.php:236 +#: ../../../../inc/Migrate.class.php:116 +#, fuzzy +msgid "Compruebe los datos de conexión" +msgstr "Please, check connection parameters" + +# "N/A" +#: ../../../../inc/Email.class.php:59 ../../../../inc/UserUtil.class.php:589 +msgid "N/D" +msgstr "n.a." + +# "Action" +#: ../../../../inc/Email.class.php:60 ../../../../web/UsersMgmtC.class.php:392 +#: ../../../../inc/themes/classic/tokens.inc:20 +#: ../../../../inc/themes/material-blue/tokens.inc:20 +msgid "Acción" +msgstr "Akció" + +# "Performed by" +#: ../../../../inc/Email.class.php:61 +msgid "Realizado por" +msgstr "Által végrehajtva" + +# "Send Email" +#: ../../../../inc/Email.class.php:77 +msgid "Enviar Email" +msgstr "Email küldése" + +# "Email sent" +#: ../../../../inc/Email.class.php:81 +msgid "Correo enviado" +msgstr "Email elküldve" + +# "Error on sending email" +#: ../../../../inc/Email.class.php:83 +msgid "Error al enviar correo" +msgstr "Hiba az email küldése közben" + +# "Recipient" +#: ../../../../inc/Email.class.php:87 +msgid "Destinatario" +msgstr "Címzett" + +# "CC" +#: ../../../../inc/Email.class.php:90 +msgid "CC" +msgstr "CC" + +# "Warning" +#: ../../../../inc/Email.class.php:146 +msgid "Aviso" +msgstr "Figyelem" + +# "File successfully uploaded" +#: ../../../../inc/FileImport.class.php:105 +msgid "Archivo no subido correctamente" +msgstr "A fájl feltöltése sikeres" + +# "Please, check the web server's user permissions" +#: ../../../../inc/FileImport.class.php:105 +msgid "Verifique los permisos del usuario del servidor web" +msgstr "Kérem, ellenõrizze az webszerver felhasználójának jogosultságait" + +# "Please, check file extension" +#: ../../../../inc/FileImport.class.php:116 +msgid "Compruebe la extensión del archivo" +msgstr "Kérem, ellenõrizze a fájl kiterjesztését" + +# "Please, check PHP configuration for upload files" +#: ../../../../inc/FileImport.class.php:132 +msgid "Compruebe la configuración de PHP para subir archivos" +msgstr "Kérem, tekintse meg a PHP konfigurációt fájlok feltötése elõtt" + +# "Please, check temporary directory permissions" +#: ../../../../inc/FileImport.class.php:150 +#: ../../../../inc/FileImport.class.php:168 +msgid "Compruebe los permisos del directorio temporal" +msgstr "Kérem, ellenõrizze az ideiglenes mappa jogosultságait" + +# "Delete File" +#: ../../../../inc/Files.class.php:111 +#: ../../../../inc/themes/classic/files.inc:15 +#: ../../../../inc/themes/material-blue/files.inc:16 +msgid "Eliminar Archivo" +msgstr "Fájl törlése" + +# "Error on updating account's users" +#: ../../../../inc/Groups.class.php:155 +#, fuzzy +msgid "Error al añadir los usuarios del grupo" +msgstr "Hiba a fiók felhasználóinak frissítése közben" + +# "Error on updating account's users" +#: ../../../../inc/Groups.class.php:256 +#, fuzzy +msgid "Error al actualizar los usuarios del grupo" +msgstr "Hiba a fiók felhasználóinak frissítése közben" + +# "Delete Group" +#: ../../../../inc/Groups.class.php:369 +#: ../../../../web/UsersMgmtC.class.php:209 +msgid "Eliminar Grupo" +msgstr "Csoport törlése" + +# "Error on user deletion" +#: ../../../../inc/Groups.class.php:372 +#, fuzzy +msgid "Error al eliminar los usuarios del grupo" +msgstr "Hiba a felhasználó törlése közben" + +# Mime type not supported +#: ../../../../inc/Import.class.php:109 +#, fuzzy +msgid "Tipo mime no soportado" +msgstr "Fájltípus nem engedélyezett" + +# Please, check the file format +#: ../../../../inc/Import.class.php:110 +#, fuzzy +msgid "Compruebe el formato del archivo" +msgstr "Kérem, ellenõrizze a CSV fájl kiterjesztését" + +# "Import finished" +#: ../../../../inc/Import.class.php:124 ../../../../inc/Import.class.php:127 +#: ../../../../inc/Migrate.class.php:92 +msgid "Importación finalizada" +msgstr "Importálás kész" + # "Error on checking database" -#: ../../../../inc/init.php:127 +#: ../../../../inc/Init.class.php:196 msgid "Error en la verificación de la base de datos" msgstr "Hiba az adatbázis ellenõrzése közben" -# "\"/config\" directory doesn't exist." -#: ../../../../inc/init.php:310 -msgid "El directorio \"/config\" no existe" -msgstr "\"/config\" mappa nem létezik" - -# "Unable to write into \"/config\" directory" -#: ../../../../inc/init.php:315 -msgid "No es posible escribir en el directorio \"config\"" -msgstr "Nem lehet a \"/config\" mappába írni" - -# "\"/config\" directory permissions are incorrect" -#: ../../../../inc/init.php:323 -msgid "Los permisos del directorio \"/config\" son incorrectos" -msgstr "\"/config\" mappa jogosultságai helytelenek" - -# Current -#: ../../../../inc/init.php:323 -#, fuzzy -msgid "Actual:" -msgstr "Current:" - -# Needed: 750 -#: ../../../../inc/init.php:323 -#, fuzzy -msgid "Necesario: 750" -msgstr "Needed: 750" - -# "Application in maintenance" -#: ../../../../inc/init.php:389 -msgid "Aplicación en mantenimiento" -msgstr "Az alkalmazás fut" - -# "It will be running in short" -#: ../../../../inc/init.php:389 -msgid "En breve estará operativa" -msgstr "Hamar végezni fog" - -# "The application needs to be updated" -#: ../../../../inc/init.php:419 -msgid "La aplicación necesita actualizarse" -msgstr "Frissítsd az alkalmazást" - -# If you are an administrator, click on the link: -#: ../../../../inc/init.php:419 -#, fuzzy -msgid "Si es un administrador pulse en el enlace:" -msgstr "If you are an administrator, click on the link:" - -# Update -#: ../../../../inc/init.php:419 ../../../../inc/tpl/upgrade.php:54 -#, fuzzy -msgid "Actualizar" -msgstr "Update" - -# "Update" -#: ../../../../inc/init.php:447 -msgid "Actualización" -msgstr "Frissítés" - -# "Version updating done." -#: ../../../../inc/init.php:448 -msgid "Actualización de versión realizada." -msgstr "Verzió frissítés kész" - -# "Version" -#: ../../../../inc/init.php:449 -msgid "Versión" -msgstr "Verzió" - # "Session" -#: ../../../../inc/init.php:470 +#: ../../../../inc/Init.class.php:285 msgid "Sesion" msgstr "Munkamenet" # "Session cannot be initialized." -#: ../../../../inc/init.php:470 ../../../../inc/init.php:475 +#: ../../../../inc/Init.class.php:285 ../../../../inc/Init.class.php:289 msgid "La sesión no puede ser inicializada" msgstr "A munkamenetot nem lehet elindítani" +# "\"/config\" directory doesn't exist." +#: ../../../../inc/Init.class.php:416 +msgid "El directorio \"/config\" no existe" +msgstr "\"/config\" mappa nem létezik" + +# "Unable to write into \"/config\" directory" +#: ../../../../inc/Init.class.php:421 +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:429 +msgid "Los permisos del directorio \"/config\" son incorrectos" +msgstr "\"/config\" mappa jogosultságai helytelenek" + +# Current +#: ../../../../inc/Init.class.php:429 +#, fuzzy +msgid "Actual:" +msgstr "Általános" + +# Needed: 750 +#: ../../../../inc/Init.class.php:429 +#, fuzzy +msgid "Necesario: 750" +msgstr "Felhasználónév szükséges" + +# "Application in maintenance" +#: ../../../../inc/Init.class.php:478 +msgid "Aplicación en mantenimiento" +msgstr "Az alkalmazás fut" + +# "It will be running in short" +#: ../../../../inc/Init.class.php:478 +msgid "En breve estará operativa" +msgstr "Hamar végezni fog" + # "Logout session" -#: ../../../../inc/init.php:530 +#: ../../../../inc/Init.class.php:515 msgid "Finalizar sesión" msgstr "Kijelentkezés" # "Inactive time" -#: ../../../../inc/init.php:532 +#: ../../../../inc/Init.class.php:517 msgid "Tiempo inactivo" msgstr "Idõ kikapcsolása" # "Total time" -#: ../../../../inc/init.php:533 +#: ../../../../inc/Init.class.php:518 msgid "Tiempo total" msgstr "Teljes idõ" -# "Access denied to" -#: ../../../../inc/acl.class.php:104 -msgid "Denegado acceso a" -msgstr "Belépés megtagadva" +# "The application needs to be updated" +#: ../../../../inc/Init.class.php:557 +msgid "La aplicación necesita actualizarse" +msgstr "Frissítsd az alkalmazást" -# "Error on updating database" -#: ../../../../inc/upgrade.class.php:48 -msgid "Error al aplicar la actualización de la Base de Datos" -msgstr "Hiba az adatbázis frissítése közben" +# If you are an administrator, click on the link: +#: ../../../../inc/Init.class.php:557 +#, fuzzy, php-format +msgid "Si es un administrador pulse en el enlace: %s" +msgstr "If you are an administrator, click on the link:" -# "Please, check the event log for more details" -#: ../../../../inc/upgrade.class.php:49 -msgid "Compruebe el registro de eventos para más detalles" -msgstr "Részletes leírást az esemény naplóban olvashat" +# Update +#: ../../../../inc/Init.class.php:557 +#: ../../../../inc/themes/classic/upgrade.inc:20 +#: ../../../../inc/themes/material-blue/upgrade.inc:25 +#, fuzzy +msgid "Actualizar" +msgstr "Frissítés Számla" -# "Login" -#: ../../../../inc/upgrade.class.php:49 ../../../../inc/tpl/login.php:50 -msgid "Acceder" -msgstr "Belépés" +# "Update" +#: ../../../../inc/Init.class.php:588 +msgid "Actualización" +msgstr "Frissítés" -# "Update DB" -#: ../../../../inc/upgrade.class.php:64 -msgid "Actualizar BBDD" -msgstr "Frissítse az adatbázist" +# "Version updating done." +#: ../../../../inc/Init.class.php:589 +msgid "Actualización de versión realizada." +msgstr "Verzió frissítés kész" -# "Database update not needed." -#: ../../../../inc/upgrade.class.php:91 -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:97 -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:104 -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:172 -msgid "Actualizar Configuración" -msgstr "Konfiguráció frissítése" - -# "Configuration updating successfully done." -#: ../../../../inc/upgrade.class.php:173 -msgid "Actualización de la Configuración realizada correctamente." -msgstr "A beállítások elmentve" - -# "Missing parameters" -#: ../../../../inc/migrate.class.php:85 -msgid "Faltan parámetros" -msgstr "Hiányzó paraméter" - -# "Import finished" -#: ../../../../inc/migrate.class.php:114 ../../../../inc/import.class.php:88 -msgid "Importación finalizada" -msgstr "Importálás kész" - -# "Wrong MySQL user/pass" -#: ../../../../inc/migrate.class.php:138 -#: ../../../../inc/installer.class.php:202 -msgid "El usuario/clave de MySQL no es correcto" -msgstr "Hibás MySQL felhasználó/jelszó" - -# "Please, check database connection user" -#: ../../../../inc/migrate.class.php:139 -#: ../../../../inc/installer.class.php:203 -msgid "Verifique el usuario de conexión con la Base de Datos" -msgstr "Kérem, ellenõrizze az adatbázis felhasználót" - -# "Incompatible version" -#: ../../../../inc/migrate.class.php:183 -msgid "La versión no es compatible" -msgstr "Nem kompatibilis verzió" - -# "Please, update to last version of phpPMS" -#: ../../../../inc/migrate.class.php:184 -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:202 -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:252 ../../../../inc/migrate.class.php:266 -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:271 -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:317 -msgid "No es posible crear el cliente" -msgstr "Ügyfél létrehozása meghiusúlt" - -# "Please, contact to developer" -#: ../../../../inc/migrate.class.php:318 -msgid "Contacte con el desarrollador" -msgstr "Kérem, keresse a fejlesztõt" - -# "Import Customers" -#: ../../../../inc/migrate.class.php:322 -msgid "Importar Clientes" -msgstr "Ügyfelek importálása" - -# "Records" -#: ../../../../inc/migrate.class.php:324 ../../../../inc/migrate.class.php:396 -#: ../../../../inc/migrate.class.php:483 ../../../../inc/migrate.class.php:555 -#: ../../../../inc/migrate.class.php:645 ../../../../inc/migrate.class.php:706 -#: ../../../../inc/migrate.class.php:780 ../../../../inc/migrate.class.php:857 -#: ../../../../inc/migrate.class.php:926 -msgid "Registros" -msgstr "Rekordok" - -# "Error on retrieving customer" -#: ../../../../inc/migrate.class.php:343 -msgid "Error al obtener los clientes" -msgstr "Hiba az ügyfél betöltése közben" - -# "Error on retrieving accounts" -#: ../../../../inc/migrate.class.php:381 -msgid "Error al obtener cuentas" -msgstr "Hiba a fiókok betöltése közben" - -# "Customer not found" -#: ../../../../inc/migrate.class.php:421 -msgid "Cliente no encontrado" -msgstr "Nincs ügyfél találat" - -# "Error on importing account" -#: ../../../../inc/migrate.class.php:447 -msgid "Error al migrar cuenta" -msgstr "Hiba a fiók importálása közben" - -# "Error on retrieving accounts groups" -#: ../../../../inc/migrate.class.php:468 -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:481 -msgid "Importar Grupos de Cuentas" -msgstr "Fiók csoportok importálása" - -# "Error on accounts groups creation" -#: ../../../../inc/migrate.class.php:503 -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:540 -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:553 -msgid "Importar Histórico de Cuentas" -msgstr "Fiók elõzmények importálása" - -# "Error on creating accounts history" -#: ../../../../inc/migrate.class.php:605 -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:630 -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:643 -msgid "Importar Archivos de Cuentas" -msgstr "Fiók fájljainak importálása" - -# "Error on creating accounts files" -#: ../../../../inc/migrate.class.php:670 -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:704 -msgid "Importar Categorías de Cuentas" -msgstr "Fiók kategóriák importálása" - -# "Error on retrieving accounts categories" -#: ../../../../inc/migrate.class.php:727 -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:778 -msgid "Importar Usuarios" -msgstr "Felhasználók importálása" - -# "Error on creating users" -#: ../../../../inc/migrate.class.php:820 -msgid "Error al crear usuarios" -msgstr "Hiba a profil létrehozása közben" - -# "Error on retrieving users groups" -#: ../../../../inc/migrate.class.php:842 -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:855 -msgid "Importar Grupos de Usuarios" -msgstr "Felhasználó csoportok importálása" - -# "Error on adding users groups" -#: ../../../../inc/migrate.class.php:879 -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:924 -msgid "Importar Configuración" -msgstr "Konfiguráció importálása" +# "Version" +#: ../../../../inc/Init.class.php:590 +#: ../../../../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:89 +#: ../../../../inc/Installer.class.php:127 msgid "Indicar nombre de usuario admin" msgstr "Írd be az admin felhasználó nevét" # "Admin user to login to application" -#: ../../../../inc/installer.class.php:90 +#: ../../../../inc/Installer.class.php:128 msgid "Usuario admin para acceso a la aplicación" msgstr "Rendszergazda felhasználó bejelentkezés" # "Enter admin password" -#: ../../../../inc/installer.class.php:95 +#: ../../../../inc/Installer.class.php:132 msgid "Indicar la clave de admin" msgstr "Írd be az admin jelszót" # "Application administrator's password" -#: ../../../../inc/installer.class.php:96 +#: ../../../../inc/Installer.class.php:133 msgid "Clave del usuario admin de la aplicación" msgstr "Az alkalmazás rendszergazdai jelszava" # "Enter master password" -#: ../../../../inc/installer.class.php:102 +#: ../../../../inc/Installer.class.php:137 msgid "Indicar la clave maestra" msgstr "Írd be a mester jelszót" # "Master password to encrypt the passwords" -#: ../../../../inc/installer.class.php:103 +#: ../../../../inc/Installer.class.php:138 msgid "Clave maestra para encriptar las claves" msgstr "Mester jelszó szükséges a jelszavak titkosításához" # "Master password too short" -#: ../../../../inc/installer.class.php:108 +#: ../../../../inc/Installer.class.php:142 msgid "Clave maestra muy corta" msgstr "Túl rövid a mester jelszó" # "Master password length need to be at least 11 characters" -#: ../../../../inc/installer.class.php:109 +#: ../../../../inc/Installer.class.php:143 msgid "La longitud de la clave maestra ha de ser mayor de 11 caracteres" msgstr "A mester jelszó legaláb 11 karakterbõl kell, hogy álljon" # "Enter database user" -#: ../../../../inc/installer.class.php:115 +#: ../../../../inc/Installer.class.php:147 msgid "Indicar el usuario de la BBDD" msgstr "Írd be az adatbázis felhasználót" # "An user with database administrative rights" -#: ../../../../inc/installer.class.php:116 +#: ../../../../inc/Installer.class.php:148 msgid "Usuario con permisos de administrador de la Base de Datos" msgstr "Adatbázis rendszergazdai jogokkal rendelkezõ felhasználó" # "Enter database password" -#: ../../../../inc/installer.class.php:121 +#: ../../../../inc/Installer.class.php:152 msgid "Indicar la clave de la BBDD" msgstr "Írd be az aadtbázis jelszavát" # "Database administartor's password" -#: ../../../../inc/installer.class.php:122 +#: ../../../../inc/Installer.class.php:153 msgid "Clave del usuario administrador de la Base de Datos" msgstr "Az adatbázis rendszergazdai jelszava" # "Enter database name" -#: ../../../../inc/installer.class.php:127 +#: ../../../../inc/Installer.class.php:157 msgid "Indicar el nombre de la BBDD" msgstr "Írd be az adatbázis nevét" # "Application database name. eg. syspass" -#: ../../../../inc/installer.class.php:128 +#: ../../../../inc/Installer.class.php:158 msgid "Nombre para la BBDD de la aplicación pej. syspass" msgstr "Az alkalmazás neve. Pl.: syspass" # "Database name can't contains \".\"" -#: ../../../../inc/installer.class.php:133 +#: ../../../../inc/Installer.class.php:162 msgid "El nombre de la BBDD no puede contener \".\"" msgstr "Az adatbázis neve nem tartalmazhat: \".\"" # "Please, remove dots on database name" -#: ../../../../inc/installer.class.php:134 +#: ../../../../inc/Installer.class.php:163 msgid "Elimine los puntos del nombre de la Base de Datos" msgstr "Kérem, törölje a pontokat az adatbázis nevébõl" # "Enter database server" -#: ../../../../inc/installer.class.php:140 +#: ../../../../inc/Installer.class.php:167 msgid "Indicar el servidor de la BBDD" msgstr "Írd be az adatbázis szervert" # "Server where the database will be installed" -#: ../../../../inc/installer.class.php:141 +#: ../../../../inc/Installer.class.php:168 msgid "Servidor donde se instalará la Base de Datos" msgstr "Szerver, ahová az adatbázis telepítve lesz" -# "Database already exist" -#: ../../../../inc/installer.class.php:248 -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:249 -msgid "Indique una nueva Base de Datos o elimine la existente" -msgstr "Írd be az új adatbázist, vagy töröld a jelenlegit" - # "MySQL user already exist" -#: ../../../../inc/installer.class.php:274 +#: ../../../../inc/Installer.class.php:313 msgid "El usuario de MySQL ya existe" msgstr "MySQL felhasználó már létezik" # "Enter a new username or delete the existing one" -#: ../../../../inc/installer.class.php:275 +#: ../../../../inc/Installer.class.php:314 msgid "Indique un nuevo usuario o elimine el existente" msgstr "Írd be az új felhasználónevet, vagy töröld a jelenlegit" +# "Database already exist" +#: ../../../../inc/Installer.class.php:327 +msgid "La BBDD ya existe" +msgstr "Az adatbázis már létezik" + +# "Enter a new database or delete the existing one" +#: ../../../../inc/Installer.class.php:328 +msgid "Indique una nueva Base de Datos o elimine la existente" +msgstr "Írd be az új adatbázist, vagy töröld a jelenlegit" + # "Error on DB creation" -#: ../../../../inc/installer.class.php:294 -#: ../../../../inc/installer.class.php:370 +#: ../../../../inc/Installer.class.php:337 +#: ../../../../inc/Installer.class.php:408 msgid "Error al crear la BBDD" msgstr "Hiba az adatbázis létrehozása közben" # "Please, check database user permissions" -#: ../../../../inc/installer.class.php:295 -#: ../../../../inc/installer.class.php:306 +#: ../../../../inc/Installer.class.php:338 +#: ../../../../inc/Installer.class.php:349 msgid "Verifique los permisos del usuario de la Base de Datos" msgstr "Kérem, ellenõrizze az adatbázis felhasználó jogosultságait" # "Error on setting database permissions" -#: ../../../../inc/installer.class.php:305 +#: ../../../../inc/Installer.class.php:348 msgid "Error al establecer permisos de la BBDD" msgstr "Hiba az adatbázis jogosultságok beállítása közben" # "Database structure file doesn't exist" -#: ../../../../inc/installer.class.php:348 +#: ../../../../inc/Installer.class.php:381 msgid "El archivo de estructura de la BBDD no existe" msgstr "Adatbázis fájl nem létezik" # "Unable to create application database. Please, download it again." -#: ../../../../inc/installer.class.php:349 +#: ../../../../inc/Installer.class.php:382 msgid "No es posible crear la BBDD de la aplicación. Descárguela de nuevo." msgstr "Az adatbázis létrehozása meghiúsult. Kérem, töltse le újra" # "Error on selecting database." -#: ../../../../inc/installer.class.php:355 +#: ../../../../inc/Installer.class.php:390 msgid "Error al seleccionar la BBDD" msgstr "Hiba az adatbázis kiválasztása közben" # "Unable to use the database to create the structure. Check permissions and it doesn't exist." -#: ../../../../inc/installer.class.php:356 -msgid "" -"No es posible usar la Base de Datos para crear la estructura. Compruebe los " -"permisos y que no exista." -msgstr "" -"Új elem létrehozás aaz adatbázisban meghiúsult. Ellenõrizze a " -"jogosultságokat és hogy valóban létezik az adatbázis" +#: ../../../../inc/Installer.class.php:391 +msgid "No es posible usar la Base de Datos para crear la estructura. Compruebe los permisos y que no exista." +msgstr "Új elem létrehozás aaz adatbázisban meghiúsult. Ellenõrizze a jogosultságokat és hogy valóban létezik az adatbázis" # "Error on creating database structure." -#: ../../../../inc/installer.class.php:371 +#: ../../../../inc/Installer.class.php:409 msgid "Error al crear la estructura de la Base de Datos." msgstr "Hiba az adatbázis létrehozása közben" # "Error on creating \"admin\" group" -#: ../../../../inc/installer.class.php:397 +#: ../../../../inc/Installer.class.php:432 msgid "Error al crear el grupo \"admin\"" msgstr "Hiba az ügyfél létrehozása közben" # "Warn to developer" -#: ../../../../inc/installer.class.php:398 -#: ../../../../inc/installer.class.php:430 -#: ../../../../inc/installer.class.php:448 -#: ../../../../inc/installer.class.php:463 +#: ../../../../inc/Installer.class.php:433 +#: ../../../../inc/Installer.class.php:466 +#: ../../../../inc/Installer.class.php:483 +#: ../../../../inc/Installer.class.php:496 msgid "Informe al desarrollador" msgstr "Figyelmeztetsd a fejlesztõt" # "Error on creating \"admin\" profile" -#: ../../../../inc/installer.class.php:429 +#: ../../../../inc/Installer.class.php:465 msgid "Error al crear el perfil \"admin\"" msgstr "Hiba az \"admin\" profil létrehozása közben" # "Error on creating \"admin\" user" -#: ../../../../inc/installer.class.php:447 +#: ../../../../inc/Installer.class.php:482 msgid "Error al crear el usuario \"admin\"" msgstr "Hiba az \"admin\" felhasználó létrehozása közben" # "Error on updating master password for user \"admin\"" -#: ../../../../inc/installer.class.php:462 +#: ../../../../inc/Installer.class.php:495 msgid "Error al actualizar la clave maestra del usuario \"admin\"" msgstr "Hiba a mester jelszó frissítése közben" -# "Account Activation" -#: ../../../../inc/users.class.php:746 -msgid "Activación Cuenta" -msgstr "Fiók Aktiválás" +# "Unable to connect to LDAP server" +#: ../../../../inc/Ldap.class.php:110 ../../../../inc/Ldap.class.php:114 +msgid "No es posible conectar con el servidor de LDAP" +msgstr "Csatlakozás az LDAP szerverhez meghiúsult" -# "Your account activation is pending." -#: ../../../../inc/users.class.php:747 -msgid "Su cuenta está pendiente de activación." -msgstr "Az ön fiók aktiválása függõben van" +# "Connection error (BIND)" +#: ../../../../inc/Ldap.class.php:139 ../../../../inc/Ldap.class.php:144 +msgid "Error al conectar (BIND)" +msgstr "Kapcsolat hiba (BIND)" -# "You will receive a confirmation email in short." -#: ../../../../inc/users.class.php:748 -msgid "En breve recibirá un email de confirmación." -msgstr "Hamarosan megerõsítésre váró emailt küldünk" +# "Error on searching objects in base DN" +#: ../../../../inc/Ldap.class.php:167 ../../../../inc/Ldap.class.php:172 +msgid "Error al buscar objetos en DN base" +msgstr "Hiba a keresés közben" + +# "Error on searching group RDN" +#: ../../../../inc/Ldap.class.php:200 ../../../../inc/Ldap.class.php:205 +#: ../../../../inc/Ldap.class.php:212 ../../../../inc/Ldap.class.php:216 +#: ../../../../inc/Ldap.class.php:225 ../../../../inc/Ldap.class.php:229 +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:278 ../../../../inc/Ldap.class.php:283 +#: ../../../../inc/Ldap.class.php:297 ../../../../inc/Ldap.class.php:301 +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:290 ../../../../inc/Ldap.class.php:294 +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:375 ../../../../inc/Ldap.class.php:380 +#: ../../../../inc/LdapADS.class.php:99 ../../../../inc/LdapADS.class.php:104 +msgid "Error al buscar el grupo de usuarios" +msgstr "Hiba a keresése közben" + +# "User deleted" +#: ../../../../inc/Ldap.class.php:387 +#, fuzzy +msgid "Usuario verificado en grupo" +msgstr "Csoportot használja a:" + +# "No group found with that name" +#: ../../../../inc/LdapADS.class.php:108 ../../../../inc/LdapADS.class.php:113 +msgid "No se encontró el grupo con ese nombre" +msgstr "Nincs ilyen nevû csoport" + +# "Clear Events" +#: ../../../../inc/Log.class.php:88 +msgid "Vaciar Eventos" +msgstr "Események törlése" + +# "Clear event log" +#: ../../../../inc/Log.class.php:88 +#: ../../../../inc/themes/classic/eventlog.inc:100 +#: ../../../../inc/themes/material-blue/eventlog.inc:100 +msgid "Vaciar registro de eventos" +msgstr "Esemény napló törlése" + +# "Missing parameters" +#: ../../../../inc/Migrate.class.php:52 +msgid "Faltan parámetros" +msgstr "Hiányzó paraméter" + +# "Incompatible version" +#: ../../../../inc/Migrate.class.php:149 +msgid "La versión no es compatible" +msgstr "Nem kompatibilis verzió" + +# "Please, update to last version of phpPMS" +#: ../../../../inc/Migrate.class.php:150 +msgid "Actualice a la última versión de phpPMS" +msgstr "Kérem, telepítse a phpPMS legfrissebb változatát" + +# "Error on retrieving configuration" +#: ../../../../inc/Migrate.class.php:168 +msgid "Error al obtener la configuración" +msgstr "Hiba a konfiguráció betöltése közben" + +# "Error on cleaning table" +#: ../../../../inc/Migrate.class.php:211 ../../../../inc/Migrate.class.php:224 +msgid "Error al vaciar tabla" +msgstr "Hiba a tábla törlése közben" + +# "Current user is not application administrator" +#: ../../../../inc/Migrate.class.php:229 +msgid "Usuario actual no es administrador de la aplicación" +msgstr "A jelenlegi felhasználó nem rendszergazda" + +# "Unable to create customer" +#: ../../../../inc/Migrate.class.php:274 +msgid "No es posible crear el cliente" +msgstr "Ügyfél létrehozása meghiusúlt" + +# "Please, contact to developer" +#: ../../../../inc/Migrate.class.php:275 +msgid "Contacte con el desarrollador" +msgstr "Kérem, keresse a fejlesztõt" + +# "Import Customers" +#: ../../../../inc/Migrate.class.php:279 +msgid "Importar Clientes" +msgstr "Ügyfelek importálása" + +# "Records" +#: ../../../../inc/Migrate.class.php:281 ../../../../inc/Migrate.class.php:351 +#: ../../../../inc/Migrate.class.php:452 ../../../../inc/Migrate.class.php:525 +#: ../../../../inc/Migrate.class.php:633 ../../../../inc/Migrate.class.php:698 +#: ../../../../inc/Migrate.class.php:772 ../../../../inc/Migrate.class.php:862 +#: ../../../../inc/Migrate.class.php:933 +msgid "Registros" +msgstr "Rekordok" + +# "Error on retrieving customer" +#: ../../../../inc/Migrate.class.php:303 +msgid "Error al obtener los clientes" +msgstr "Hiba az ügyfél betöltése közben" + +# "Error on retrieving accounts" +#: ../../../../inc/Migrate.class.php:345 +msgid "Error al obtener cuentas" +msgstr "Hiba a fiókok betöltése közben" + +# "Customer not found" +#: ../../../../inc/Migrate.class.php:374 +msgid "Cliente no encontrado" +msgstr "Nincs ügyfél találat" + +# "Error on importing account" +#: ../../../../inc/Migrate.class.php:417 +msgid "Error al migrar cuenta" +msgstr "Hiba a fiók importálása közben" + +# "Error on retrieving accounts groups" +#: ../../../../inc/Migrate.class.php:446 +msgid "Error al obtener los grupos de cuentas" +msgstr "Hiba a fiók csoportok betöltése közben" + +# "Import Accounts Groups" +#: ../../../../inc/Migrate.class.php:450 +msgid "Importar Grupos de Cuentas" +msgstr "Fiók csoportok importálása" + +# "Error on accounts groups creation" +#: ../../../../inc/Migrate.class.php:472 +msgid "Error al crear grupos de cuentas" +msgstr "Hiba a fiók csoportok létrehozása közben" + +# "Error on retrieving accounts history" +#: ../../../../inc/Migrate.class.php:519 +msgid "Error al obtener el historico de cuentas" +msgstr "Hiba a fiókok elõzményeinek betöltése közben" + +# "Import Accounts History" +#: ../../../../inc/Migrate.class.php:523 +msgid "Importar Histórico de Cuentas" +msgstr "Fiók elõzmények importálása" + +# "Error on creating accounts history" +#: ../../../../inc/Migrate.class.php:592 +msgid "Error al crear historico de cuentas" +msgstr "Hiba a fiók elõzmények létrehozása közben" + +# "Error on retrieving accounts files" +#: ../../../../inc/Migrate.class.php:627 +msgid "Error al obtener los archivos de cuentas" +msgstr "Hiba a fiókok fájljainak betöltése közben" + +# "Import Accounts Files" +#: ../../../../inc/Migrate.class.php:631 +msgid "Importar Archivos de Cuentas" +msgstr "Fiók fájljainak importálása" + +# "Error on creating accounts files" +#: ../../../../inc/Migrate.class.php:663 +msgid "Error al crear archivos de cuentas" +msgstr "Hiba a fiók fájlok létrehozása közben" + +# "Error on retrieving accounts categories" +#: ../../../../inc/Migrate.class.php:692 +msgid "Error al obtener las categorías de cuentas" +msgstr "Hiba a fiók kategóriák elérése közben" + +# "Import Accounts Categories" +#: ../../../../inc/Migrate.class.php:696 +msgid "Importar Categorías de Cuentas" +msgstr "Fiók kategóriák importálása" + +# "Error on retrieving accounts categories" +#: ../../../../inc/Migrate.class.php:718 +msgid "Error al crear categorías de cuentas" +msgstr "Hiba a fiók kategóriák elérése közben" + +# "Error on retrieving users" +#: ../../../../inc/Migrate.class.php:766 +msgid "Error al obtener los usuarios" +msgstr "Hiba a felhasználók betöltése közben" + +# "Import Users" +#: ../../../../inc/Migrate.class.php:770 +msgid "Importar Usuarios" +msgstr "Felhasználók importálása" + +# "Error on creating users" +#: ../../../../inc/Migrate.class.php:827 +msgid "Error al crear usuarios" +msgstr "Hiba a profil létrehozása közben" + +# "Error on retrieving users groups" +#: ../../../../inc/Migrate.class.php:856 +msgid "Error al obtener los grupos de usuarios" +msgstr "Hiba a felhasználói csoportok betöltése közben" + +# "Import Users Groups" +#: ../../../../inc/Migrate.class.php:860 +msgid "Importar Grupos de Usuarios" +msgstr "Felhasználó csoportok importálása" + +# "Error on adding users groups" +#: ../../../../inc/Migrate.class.php:886 +msgid "Error al crear los grupos de usuarios" +msgstr "Hiba a felhasználói csoportok hozzáadás közben" + +# "Import Configuration" +#: ../../../../inc/Migrate.class.php:931 +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:274 +msgid "Eliminar Perfil" +msgstr "Profil törlése" + +# "Edit Profile" +#: ../../../../inc/ProfileBase.class.php:593 +msgid "Modificar Perfil" +msgstr "Profil módosítás" + +# "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" + +# "Error on updating database" +#: ../../../../inc/Upgrade.class.php:51 +msgid "Error al aplicar la actualización de la Base de Datos" +msgstr "Hiba az adatbázis frissítése közben" + +# "Please, check the event log for more details" +#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58 +msgid "Compruebe el registro de eventos para más detalles" +msgstr "Részletes leírást az esemény naplóban olvashat" + +# "Login" +#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58 +#: ../../../../inc/themes/classic/login.inc:32 +#: ../../../../inc/themes/material-blue/2fa.inc:26 +#: ../../../../inc/themes/material-blue/login.inc:60 +msgid "Acceder" +msgstr "Belépés" + +# "Error on updating database" +#: ../../../../inc/Upgrade.class.php:57 +#, fuzzy +msgid "Error al aplicar la actualización auxiliar" +msgstr "Hiba az adatbázis frissítése közben" + +# "Update DB" +#: ../../../../inc/Upgrade.class.php:74 +msgid "Actualizar BBDD" +msgstr "Frissítse az adatbázist" + +# "Database update not needed." +#: ../../../../inc/Upgrade.class.php:121 +msgid "No es necesario actualizar la Base de Datos." +msgstr "Az adatbázis frissítése nem szükséges" + +# "Error on updating database." +#: ../../../../inc/Upgrade.class.php:129 +msgid "Error al aplicar la actualización de la Base de Datos." +msgstr "Hiba az adatbázis frissítése közben" + +# "Database updating was done successfully." +#: ../../../../inc/Upgrade.class.php:138 +msgid "Actualización de la Base de Datos realizada correctamente." +msgstr "Az adatbázis frissítés sikeresen megtörtént" + +# "Update Configuration" +#: ../../../../inc/Upgrade.class.php:215 +msgid "Actualizar Configuración" +msgstr "Konfiguráció frissítése" + +# "Configuration updating successfully done." +#: ../../../../inc/Upgrade.class.php:215 +msgid "Actualización de la Configuración realizada correctamente." +msgstr "A beállítások elmentve" # Could not perform the password change request. -#: ../../../../inc/users.class.php:792 ../../../../inc/users.class.php:833 +#: ../../../../inc/UserBase.class.php:386 +#: ../../../../inc/UserBase.class.php:530 #, fuzzy msgid "No se pudo realizar la petición de cambio de clave." msgstr "Nem sikerült végrehajtani a jelszócsere kérelmet." # "Edit User" -#: ../../../../inc/users.class.php:828 +#: ../../../../inc/UserBase.class.php:525 msgid "Modificar Usuario" msgstr "Felhasználó módosítás" -# "Clear Events" -#: ../../../../inc/log.class.php:80 -msgid "Vaciar Eventos" -msgstr "Események törlése" +# "Delete User" +#: ../../../../inc/UserBase.class.php:592 +#: ../../../../web/UsersMgmtC.class.php:150 +msgid "Eliminar Usuario" +msgstr "felhasználó törlése" -# "Clear event log" -#: ../../../../inc/log.class.php:81 ../../../../inc/tpl/eventlog.php:129 -msgid "Vaciar registro de eventos" -msgstr "Esemény napló törlése" +# "Account Activation" +#: ../../../../inc/UserLdap.class.php:78 +msgid "Activación Cuenta" +msgstr "Fiók Aktiválás" -# "Update Customer" -#: ../../../../inc/customer.class.php:102 -msgid "Actualizar Cliente" -msgstr "Frissítse az ügyfelet" +# "Your account activation is pending." +#: ../../../../inc/UserLdap.class.php:79 +msgid "Su cuenta está pendiente de activación." +msgstr "Az ön fiók aktiválása függõben van" -# "Category Edit" -#: ../../../../inc/category.class.php:177 -msgid "Modificar Categoría" -msgstr "Kategória szerkesztés" +# "You will receive a confirmation email in short." +#: ../../../../inc/UserLdap.class.php:80 +msgid "En breve recibirá un email de confirmación." +msgstr "Hamarosan megerõsítésre váró emailt küldünk" -# "File successfully uploaded" -#: ../../../../inc/import.class.php:103 -msgid "Archivo no subido correctamente" -msgstr "A fájl feltöltése sikeres" - -# "Please, check the web server's user permissions" -#: ../../../../inc/import.class.php:103 -msgid "Verifique los permisos del usuario del servidor web" -msgstr "Kérem, ellenõrizze az webszerver felhasználójának jogosultságait" - -# "Please, check file extension" -#: ../../../../inc/import.class.php:111 -msgid "Compruebe la extensión del archivo" -msgstr "Kérem, ellenõrizze a fájl kiterjesztését" - -# "Please, check PHP configuration for upload files" -#: ../../../../inc/import.class.php:122 -msgid "Compruebe la configuración de PHP para subir archivos" -msgstr "Kérem, tekintse meg a PHP konfigurációt fájlok feltötése elõtt" - -# "Please, check temporary directory permissions" -#: ../../../../inc/import.class.php:130 -msgid "Compruebe los permisos del directorio temporal" -msgstr "Kérem, ellenõrizze az ideiglenes mappa jogosultságait" - -# Mime type not supported -#: ../../../../inc/import.class.php:139 +# "LDAP User" +#: ../../../../inc/UserLdap.class.php:86 #, fuzzy -msgid "Tipo mime no soportado" -msgstr "Mime type not supported" +msgid "Nuevo usuario de LDAP" +msgstr "LDAP felhasználó" -# Please, check the file format -#: ../../../../inc/import.class.php:139 +# "Edit Group" +#: ../../../../inc/UserUtil.class.php:727 #, fuzzy -msgid "Compruebe el formato del archivo" -msgstr "Kérem, ellenõrizze a fájl kiterjesztését" +msgid "Migrar Grupos" +msgstr "Csoportok" -# "The number of fields is incorrect" -#: ../../../../inc/import.class.php:156 -msgid "El número de campos es incorrecto" -msgstr "A mezõk száma helytelen" +# "Error on adding users groups" +#: ../../../../inc/UserUtil.class.php:727 +#, fuzzy +msgid "Error al migrar grupo del usuario" +msgstr "Hiba a DN felhasználó keresése közben" -# "Please, check the CSV file format" -#: ../../../../inc/import.class.php:156 -msgid "Compruebe el formato del archivo CSV" -msgstr "Kérem, ellenõrizze a CSV fájl kiterjesztését" +# Required PHP version >= 5.1 +#: ../../../../inc/Util.class.php:122 +#, fuzzy +msgid "Versión de PHP requerida >= " +msgstr "Szükséges PHP verzió> = 5.1" -# "Error on importing account" -#: ../../../../inc/import.class.php:161 -msgid "Error importando cuenta" -msgstr "Hiba a fiók importálása közben" +# "Please update PHP version to run sysPass in a secure way" +#: ../../../../inc/Util.class.php:123 +#, 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:159 +#: ../../../../inc/themes/classic/ldap.inc:212 +#: ../../../../inc/themes/material-blue/ldap.inc:238 +msgid "Módulo no disponible" +msgstr "Modul nem elérhetõ" + +# "Without this module the application couldn't run correctly" +#: ../../../../inc/Util.class.php:160 +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:104 +#, fuzzy +msgid "Importar XML" +msgstr "Fiókok importálása" + +# "Error on creating user" +#: ../../../../inc/XmlExport.class.php:389 +#, fuzzy +msgid "Error al crear el archivo XML" +msgstr "Hiba az ügyfél létrehozása közben" + +#: ../../../../inc/XmlImport.class.php:63 +msgid "Formato detectado" +msgstr "" # Unable to process XML file -#: ../../../../inc/import.class.php:262 +#: ../../../../inc/XmlImportBase.class.php:75 #, fuzzy msgid "No es posible procesar el archivo XML" -msgstr "Unable to process XML file" +msgstr "Nem lehet a konfigurációs fájlba írni" # XML file not supported -#: ../../../../inc/import.class.php:289 +#: ../../../../inc/XmlImportBase.class.php:103 #, fuzzy msgid "Archivo XML no soportado" -msgstr "XML file not supported" +msgstr "Fájltípus nem engedélyezett" # Unable to detect the application the data was exported from -#: ../../../../inc/import.class.php:289 +#: ../../../../inc/XmlImportBase.class.php:104 #, fuzzy msgid "No es posible detectar la aplicación que exportó los datos" msgstr "Unable to detect the application the data was exported from" -# A request for updating your user password has been done. -#: ../../../../inc/auth.class.php:186 -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." +# "Query error" +#: ../../../../js/strings.js.php:27 +msgid "Error en la consulta" +msgstr "Lekérdezési hiba" -# "In order to complete the process, please go to this URL:" -#: ../../../../inc/auth.class.php:188 -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:" +# "There was an error" +#: ../../../../js/strings.js.php:28 +msgid "Ha ocurrido un error" +msgstr "Hiba történt" -# "If you have not requested this action, please dismiss this message." -#: ../../../../inc/auth.class.php:192 -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" +# "Session finished" +#: ../../../../js/strings.js.php:29 +#: ../../../../inc/themes/classic/login.inc:52 +#: ../../../../inc/themes/material-blue/login.inc:75 +msgid "Sesión finalizada" +msgstr "Munkamenet befejezõdött" -# "Request Password Change" -#: ../../../../inc/tpl/passreset.php:46 -msgid "Solicitud de Cambio de Clave" -msgstr "Kérés jelszó módosítás" +# "Delete account?" +#: ../../../../js/strings.js.php:30 +msgid "Borrar la cuenta?" +msgstr "Fiók törlése?" -# "User login" -#: ../../../../inc/tpl/passreset.php:49 -msgid "Login del Usuario" -msgstr "Felhasználó bejelentkezés" +# "Delete user?" +#: ../../../../js/strings.js.php:31 +msgid "Borrar el usuario?" +msgstr "Törlöd a felhasználót?" -# "User Email" -#: ../../../../inc/tpl/passreset.php:54 -msgid "Email del Usuario" -msgstr "Felhasználó Email" +# "You should save configuration in order to take effect" +#: ../../../../js/strings.js.php:32 +msgid "Guarde la configuración para que sea efectiva" +msgstr "A módosítások életbe lépéséhez mentened kell a beállításokat" -# "Email" -#: ../../../../inc/tpl/passreset.php:55 ../../../../inc/tpl/users.php:112 -msgid "Email" -msgstr "Email" +# "Generated Password" +#: ../../../../js/strings.js.php:33 +msgid "Clave Generada" +msgstr "Generált Jelszó" -# "New Password" -#: ../../../../inc/tpl/passreset.php:60 -msgid "Nueva Clave" -msgstr "Új jelszó" +# "High level" +#: ../../../../js/strings.js.php:34 +msgid "Nivel alto" +msgstr "Erös" -# "New Password (Verify)" -#: ../../../../inc/tpl/passreset.php:68 -msgid "Nueva Clave (Verificar)" -msgstr "Új jelszó (megerõsítés)" +# "Average level" +#: ../../../../js/strings.js.php:35 +msgid "Nivel medio" +msgstr "Közepes" -# "Password (Verify)" -#: ../../../../inc/tpl/passreset.php:69 -msgid "Clave (Verificar)" -msgstr "Jelszó (Megerõsítés)" +# "Low level" +#: ../../../../js/strings.js.php:36 +msgid "Nivel bajo" +msgstr "Gyenge" -# "Back" -#: ../../../../inc/tpl/passreset.php:82 -msgid "Volver" -msgstr "Vissza" +# "Very high level" +#: ../../../../js/strings.js.php:37 +msgid "Nivel muy alto" +msgstr "Nagyon erös" -# "Go back to login" -#: ../../../../inc/tpl/passreset.php:82 -msgid "Volver a iniciar sesión" -msgstr "Vissza a bejelentkezéshez" +# "You should use at least 8 characters" +#: ../../../../js/strings.js.php:38 +msgid "Utilizar al menos 8 caracteres" +msgstr "Legalább 8 karakterböl állót adj meg" -# "Request" -#: ../../../../inc/tpl/passreset.php:84 -msgid "Solicitar" -msgstr "Kérés" +# "Delete item?" +#: ../../../../js/strings.js.php:39 +msgid "Borrar elemento?" +msgstr "Törlöd a tételt?" -# "Request password change" -#: ../../../../inc/tpl/passreset.php:85 -msgid "Solicitar cambio de clave" -msgstr "Kérés jelszó módosítás" +# "Page not found" +#: ../../../../js/strings.js.php:40 +msgid "Página no encontrada" +msgstr "Oldal nem található" -# "Change" -#: ../../../../inc/tpl/passreset.php:87 -msgid "Cambiar" -msgstr "Változtatás" +# "File not supported for preview" +#: ../../../../js/strings.js.php:41 +msgid "Archivo no soportado para visualizar" +msgstr "A fájlnak nincs elönézete" + +# "Delete file?" +#: ../../../../js/strings.js.php:42 +msgid "Eliminar archivo?" +msgstr "Törlöd a fájlt?" + +# "Your browser does not support HTML5 file uploads" +#: ../../../../js/strings.js.php:43 +msgid "Su navegador no soporta subir archivos con HTML5" +msgstr "A böngészöd nem támogatja a HTML5 fájlok feltöltését" + +# "Too many files" +#: ../../../../js/strings.js.php:44 +msgid "Demasiados archivos" +msgstr "Túl sok fájl" + +# "Unable to save file.
    Max file size:" +#: ../../../../js/strings.js.php:45 +#, fuzzy, php-format +msgid "No es posible guardar el archivo.%sTamaño máximo:" +msgstr "Nem lehet elmenteni a fájlt.
    Maximális fájl méret:" + +# "Extension not allowed" +#: ../../../../js/strings.js.php:46 +msgid "Extensión no permitida" +msgstr "A kiterjesztés nem engedélyezett" + +# "Clear event log?" +#: ../../../../js/strings.js.php:47 +msgid "Vaciar el registro de eventos?" +msgstr "Törlöd az esemény naplót?" + +# "Select Group" +#: ../../../../js/strings.js.php:48 +msgid "Seleccionar Grupo" +msgstr "Válassz csoportot" + +# "Select users" +#: ../../../../js/strings.js.php:49 +#, fuzzy +msgid "Seleccionar Usuario" +msgstr "Válassz dátumot" + +# "Select Profile" +#: ../../../../js/strings.js.php:50 +msgid "Seleccionar Perfil" +msgstr "Válassz profilt" + +# "Select Customer" +#: ../../../../js/strings.js.php:51 +msgid "Seleccionar Cliente" +msgstr "Válassz ügyfelet" + +# "Select category" +#: ../../../../js/strings.js.php:52 +msgid "Seleccionar Categoría" +msgstr "Válassz kategóriát" + +# "No results" +#: ../../../../js/strings.js.php:53 +msgid "Sin resultados" +msgstr "Nincsenek eredmények" + +# "Options" +#: ../../../../js/strings.js.php:54 +#, fuzzy +msgid "Opciones de clave" +msgstr "Beállítások" + +# "Generate random password" +#: ../../../../js/strings.js.php:55 +msgid "Generar clave aleatoria" +msgstr "Véletlenszerû jelszó generálása" + +#: ../../../../js/strings.js.php:56 +msgid "Complejidad" +msgstr "" + +#: ../../../../js/strings.js.php:57 +msgid "Reset" +msgstr "" + +# "Password strength level" +#: ../../../../js/strings.js.php:58 +#: ../../../../inc/themes/classic/editpass.inc:34 +msgid "Nivel de fortaleza de la clave" +msgstr "Jelszó erõssége" + +# Show Password +#: ../../../../js/strings.js.php:59 +#, fuzzy +msgid "Mostrar Clave" +msgstr "Show Password" + +# "Edit User" +#: ../../../../js/strings.js.php:60 +#, fuzzy +msgid "Copiar Usuario" +msgstr "Fiók másolása" # "Change password" -#: ../../../../inc/tpl/passreset.php:88 -msgid "Cambiar Clave" -msgstr "Változtatsd meg a jelszót" +#: ../../../../js/strings.js.php:61 +#, fuzzy +msgid "Copiar Clave" +msgstr "Fiók másolása" -# "Request Account Modification" -#: ../../../../inc/tpl/request.php:33 -msgid "Solicitar Modificación de Cuenta" -msgstr "Kérés fiók módosítás" +#: ../../../../js/strings.js.php:62 +msgid "Incluir Números" +msgstr "" -# "Request" -#: ../../../../inc/tpl/request.php:54 -msgid "Petición" -msgstr "Kérés" +#: ../../../../js/strings.js.php:63 +msgid "Incluir Mayúsculas" +msgstr "" -# "Request description" -#: ../../../../inc/tpl/request.php:56 -msgid "Descripción de la petición" -msgstr "Kérés leírás" +#: ../../../../js/strings.js.php:64 +msgid "Incluir Símbolos" +msgstr "" -# "Back" -#: ../../../../inc/tpl/request.php:68 ../../../../inc/tpl/editpass.php:83 -#: ../../../../inc/tpl/accounts.php:508 -msgid "Atrás" -msgstr "Vissza" +#: ../../../../js/strings.js.php:65 +#, fuzzy +msgid "Longitud" +msgstr "A mester jelszó legaláb 11 karakterbõl kell, hogy álljon" -# "Send" -#: ../../../../inc/tpl/request.php:71 -msgid "Enviar" -msgstr "Küldés" +# "Select Customer" +#: ../../../../js/strings.js.php:66 +#, fuzzy +msgid "Seleccionar Acción" +msgstr "Akció" + +# "YES" +#: ../../../../js/strings.js.php:67 +#: ../../../../inc/themes/classic/account.inc:133 +#: ../../../../inc/themes/classic/account.inc:164 +#: ../../../../inc/themes/classic/account.inc:449 +#: ../../../../inc/themes/classic/install.inc:99 +msgid "SI" +msgstr "Igen" + +# "NO" +#: ../../../../js/strings.js.php:68 +#: ../../../../inc/themes/classic/account.inc:133 +#: ../../../../inc/themes/classic/account.inc:164 +#: ../../../../inc/themes/classic/account.inc:447 +#: ../../../../inc/themes/classic/encryption.inc:61 +#: ../../../../inc/themes/classic/encryption.inc:80 +#: ../../../../inc/themes/classic/import.inc:70 +#: ../../../../inc/themes/classic/install.inc:99 +#: ../../../../inc/themes/classic/tokens.inc:36 +msgid "NO" +msgstr "Nem" + +# "Account Details" +#: ../../../../web/AccountC.class.php:380 +#: ../../../../web/AccountC.class.php:411 +#: ../../../../inc/themes/classic/search.inc:38 +#: ../../../../inc/themes/classic/search.inc:97 +#: ../../../../inc/themes/material-blue/search.inc:41 +#: ../../../../inc/themes/material-blue/search.inc:108 +msgid "Detalles de Cuenta" +msgstr "Fiók adatok" + +# "Edit Account Password" +#: ../../../../web/AccountC.class.php:468 +#: ../../../../inc/themes/classic/account.inc:394 +#: ../../../../inc/themes/material-blue/account.inc:429 +msgid "Modificar Clave de Cuenta" +msgstr "Fiók jelszavának szerkesztése" + +# "Name" +#: ../../../../web/AccountsMgmtC.class.php:79 +#: ../../../../web/AccountsMgmtC.class.php:138 +#: ../../../../web/AccountsMgmtC.class.php:266 +#: ../../../../web/SearchC.class.php:277 +#: ../../../../web/UsersMgmtC.class.php:87 +#: ../../../../web/UsersMgmtC.class.php:187 +#: ../../../../web/UsersMgmtC.class.php:245 +#: ../../../../inc/themes/classic/account.inc:11 +#: ../../../../inc/themes/classic/categories.inc:8 +#: ../../../../inc/themes/classic/customers.inc:8 +#: ../../../../inc/themes/classic/customfields.inc:9 +#: ../../../../inc/themes/classic/editpass.inc:8 +#: ../../../../inc/themes/classic/groups.inc:8 +#: ../../../../inc/themes/classic/info.inc:25 +#: ../../../../inc/themes/classic/profiles.inc:8 +#: ../../../../inc/themes/classic/request.inc:6 +#: ../../../../inc/themes/classic/search.inc:36 +#: ../../../../inc/themes/classic/users.inc:8 +#: ../../../../inc/themes/material-blue/account.inc:15 +#: ../../../../inc/themes/material-blue/categories.inc:8 +#: ../../../../inc/themes/material-blue/customers.inc:8 +#: ../../../../inc/themes/material-blue/customfields.inc:8 +#: ../../../../inc/themes/material-blue/editpass.inc:9 +#: ../../../../inc/themes/material-blue/groups.inc:8 +#: ../../../../inc/themes/material-blue/info.inc:25 +#: ../../../../inc/themes/material-blue/profiles.inc:8 +#: ../../../../inc/themes/material-blue/request.inc:6 +#: ../../../../inc/themes/material-blue/search.inc:39 +#: ../../../../inc/themes/material-blue/users.inc:8 +msgid "Nombre" +msgstr "Név" + +# "Categories management" +#: ../../../../web/AccountsMgmtC.class.php:115 +msgid "Gestión de Categorías" +msgstr "Kategória Menedzsment" + +# "Customers Management" +#: ../../../../web/AccountsMgmtC.class.php:172 +msgid "Gestión de Clientes" +msgstr "Ügyfél Menedzsment" + +#: ../../../../web/AccountsMgmtC.class.php:266 +#: ../../../../inc/themes/classic/customfields.inc:27 +#: ../../../../inc/themes/material-blue/customfields.inc:30 +#, fuzzy +msgid "Módulo" +msgstr "Modul nem elérhetõ" + +# "Delete Group" +#: ../../../../web/AccountsMgmtC.class.php:287 +#, fuzzy +msgid "Eliminar Campo" +msgstr "Profil törlése" + +#: ../../../../web/AccountsMgmtC.class.php:300 +#: ../../../../inc/themes/classic/profiles.inc:107 +#: ../../../../inc/themes/material-blue/profiles.inc:124 +msgid "Campos Personalizados" +msgstr "" # "Last backup" -#: ../../../../inc/tpl/backup.php:42 +#: ../../../../web/ConfigC.class.php:178 msgid "Último backup" msgstr "Utolsó Archiválás" # "There're no backups available" -#: ../../../../inc/tpl/backup.php:42 +#: ../../../../web/ConfigC.class.php:178 msgid "No se encontraron backups" msgstr "Nincsenek elérhetõ Archívumok" -# "Result" -#: ../../../../inc/tpl/backup.php:48 -msgid "Resultado" -msgstr "Eredmény" - -# "Download Current" -#: ../../../../inc/tpl/backup.php:56 -msgid "Descargar Actual" -msgstr "Aktuális letöltés" - -# "There're no backups for download" -#: ../../../../inc/tpl/backup.php:64 -msgid "No hay backups para descargar" -msgstr "Nincsenek letölthetõ Archívumok" - -# "Last Change" -#: ../../../../inc/tpl/masterpass.php:42 -msgid "Último cambio" -msgstr "Utolsó változtatás" - -# "Current Master Password" -#: ../../../../inc/tpl/masterpass.php:51 -msgid "Clave Maestra actual" -msgstr "Jelenlegki mester jelszó" - -# "New Master Password" -#: ../../../../inc/tpl/masterpass.php:59 -msgid "Nueva Clave Maestra" -msgstr "Új mester jelszó" - -# "New Master Password (repeat)" -#: ../../../../inc/tpl/masterpass.php:68 -msgid "Nueva Clave Maestra (repetir)" -msgstr "Új mester jelszó (megerõsítés)" - -# "Don't modify accounts" -#: ../../../../inc/tpl/masterpass.php:76 -msgid "No modificar cuentas" -msgstr "Ne módosítsa a fiókokat" - -# "NO" -#: ../../../../inc/tpl/masterpass.php:80 ../../../../inc/tpl/masterpass.php:99 -#: ../../../../inc/tpl/masterpass.php:125 ../../../../inc/tpl/migrate.php:81 -#: ../../../../inc/tpl/migrate.php:130 ../../../../inc/tpl/accounts.php:305 -#: ../../../../inc/tpl/accounts.php:336 ../../../../inc/tpl/accounts.php:593 -msgid "NO" -msgstr "Nem" - -# "Confirm Change" -#: ../../../../inc/tpl/masterpass.php:86 -msgid "Confirmar cambio" -msgstr "Változás megerõsítése" - -# "Warning" -#: ../../../../inc/tpl/masterpass.php:89 ../../../../inc/tpl/masterpass.php:92 -#: ../../../../inc/tpl/masterpass.php:95 ../../../../inc/tpl/migrate.php:78 -msgid "Atención" -msgstr "Figyelem" - -# "You should save the new password on a secure place" -#: ../../../../inc/tpl/masterpass.php:90 -msgid "Guarde la nueva clave en un lugar seguro." -msgstr "Tárold biztonságos helyen az új jelszót" - -# "All accounts passwords will be encrypted again." -#: ../../../../inc/tpl/masterpass.php:93 -msgid "Se volverán a encriptar las claves de todas las cuentas." -msgstr "Minden fiók jelszó újra titkosítva lesz" - -# "All users must re-enter the new master password." -#: ../../../../inc/tpl/masterpass.php:96 -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" - -# "YES" -#: ../../../../inc/tpl/masterpass.php:127 ../../../../inc/tpl/migrate.php:132 -#: ../../../../inc/tpl/accounts.php:305 ../../../../inc/tpl/accounts.php:336 -#: ../../../../inc/tpl/accounts.php:595 -msgid "SI" -msgstr "Igen" - -# "Group name" -#: ../../../../inc/tpl/groups.php:41 -msgid "Nombre del grupo" -msgstr "Csoport név" - -# "Group description" -#: ../../../../inc/tpl/groups.php:47 -msgid "Descripción del grupo" -msgstr "Csoport leírás" - -# "phpPMS Import" -#: ../../../../inc/tpl/migrate.php:33 -msgid "Importar phpPMS" -msgstr "phpPMS importálása" - -# "DB Username" -#: ../../../../inc/tpl/migrate.php:40 ../../../../inc/tpl/install.php:131 -#: ../../../../inc/tpl/install.php:132 -msgid "Usuario BBDD" -msgstr "DB felhasználónév" - -# "DB Password" -#: ../../../../inc/tpl/migrate.php:49 ../../../../inc/tpl/install.php:139 -#: ../../../../inc/tpl/install.php:140 -msgid "Clave BBDD" -msgstr "Adatbázis jelszó" - -# "DB Name" -#: ../../../../inc/tpl/migrate.php:57 ../../../../inc/tpl/install.php:147 -#: ../../../../inc/tpl/install.php:148 -msgid "Nombre BBDD" -msgstr "DB név" - -# "DB Server" -#: ../../../../inc/tpl/migrate.php:66 ../../../../inc/tpl/install.php:156 -#: ../../../../inc/tpl/install.php:157 -msgid "Servidor BBDD" -msgstr "DB szerver" - -# "Confirm" -#: ../../../../inc/tpl/migrate.php:75 -msgid "Confirmar" -msgstr "Megerõsítés" - -# "Current data will be removed (except current user)" -#: ../../../../inc/tpl/migrate.php:79 -msgid "Los datos actuales serán borrados (excepto el usuario actual)" -msgstr "Jelenlegi adatok törlése (kivéve a jelenlegi felhasználót)" - -# "Start" -#: ../../../../inc/tpl/migrate.php:97 -msgid "Iniciar" -msgstr "Start" - -# CSV/XML Import -#: ../../../../inc/tpl/migrate.php:103 +# "Last Modification" +#: ../../../../web/ConfigC.class.php:185 #, fuzzy -msgid "Importar CSV/XML" -msgstr "Import CSV/XML" +msgid "Última exportación" +msgstr "Utolsó oldal" -# "Drop files here or click to select" -#: ../../../../inc/tpl/migrate.php:117 -msgid "Soltar archivo aquí o click para seleccionar" -msgstr "Dobja el a fájlokat vagy kattintson a választáshoz" +# "Unable to write on configuration file" +#: ../../../../web/ConfigC.class.php:185 +#, fuzzy +msgid "No se encontró archivo de exportación" +msgstr "Nem lehet a konfigurációs fájlba írni" -# "Lost your password?" -#: ../../../../inc/tpl/login.php:63 -msgid "¿Olvidó su clave?" -msgstr "Elvesztette jelszavát?" +# "Configuration" +#: ../../../../web/ConfigC.class.php:230 +#, fuzzy +msgid "Información" +msgstr "Mutat néhány információt az alkalmazásról és a teljesítményrõl" -# "Application successfully updated" -#: ../../../../inc/tpl/login.php:76 -msgid "Aplicación actualizada correctamente" -msgstr "Az alkalmazás frissítése sikeres" +# "Event log cleared" +#: ../../../../web/EventlogC.class.php:91 +msgid "Registro de eventos vaciado" +msgstr "Esemény napló törölve" -# "Customer name" -#: ../../../../inc/tpl/customers.php:41 -msgid "Nombre del cliente" -msgstr "Ügyfél név" +# "Error on clearing event log" +#: ../../../../web/EventlogC.class.php:93 +msgid "Error al vaciar el registro de eventos" +msgstr "Hiba az esemény napló törlése közben" -# "Customer description" -#: ../../../../inc/tpl/customers.php:47 -msgid "Descripción del cliente" -msgstr "Ügyfél leírás" - -# "Change user password" -#: ../../../../inc/tpl/main.php:37 -msgid "Cambiar clave de usuario" -msgstr "Változatsd meg a felhasználói jelszót" - -# "Logout" -#: ../../../../inc/tpl/main.php:44 -msgid "Salir" -msgstr "Kijelentkezés" +# "Application Admin" +#: ../../../../web/MainC.class.php:131 +#: ../../../../web/UsersMgmtC.class.php:100 +msgid "Admin Aplicación" +msgstr "Admin alkalmazás" # "Search" -#: ../../../../inc/tpl/main.php:52 +#: ../../../../web/MainC.class.php:149 msgid "Buscar" msgstr "Keresés" +# "Users Management" +#: ../../../../web/MainC.class.php:161 +#: ../../../../web/UsersMgmtC.class.php:163 +msgid "Gestión de Usuarios" +msgstr "Felhasználó Menedzsment" + # "Customer and Categories management" -#: ../../../../inc/tpl/main.php:55 +#: ../../../../web/MainC.class.php:167 msgid "Gestión de Clientes y Categorías" msgstr "Ügyfél és Kategória Menedzsment" # "Event Log" -#: ../../../../inc/tpl/main.php:57 ../../../../inc/tpl/eventlog.php:37 +#: ../../../../web/MainC.class.php:179 +#: ../../../../inc/themes/classic/eventlog.inc:4 +#: ../../../../inc/themes/material-blue/eventlog.inc:3 msgid "Registro de Eventos" msgstr "Esemény napló" -# "Profile name" -#: ../../../../inc/tpl/profiles.php:41 -msgid "Nombre del perfil" -msgstr "Profil név" +#: ../../../../web/MainC.class.php:199 +msgid "Nuevo estilo visual basado en Material Design Lite by Google" +msgstr "" -# "View account details" -#: ../../../../inc/tpl/profiles.php:48 -msgid "Ver detalles de cuenta" -msgstr "Fiók adatok" - -# "View" -#: ../../../../inc/tpl/profiles.php:48 -msgid "Ver" -msgstr "Nézet" - -# "View account password" -#: ../../../../inc/tpl/profiles.php:50 -msgid "Ver clave de cuenta" -msgstr "Fiók jelszó" - -# "View account history" -#: ../../../../inc/tpl/profiles.php:53 -msgid "Ver historial de cuenta" -msgstr "Fiók elõzmények" - -# "View History" -#: ../../../../inc/tpl/profiles.php:53 -msgid "Ver Historial" -msgstr "Elõzmények" - -# "Edit account" -#: ../../../../inc/tpl/profiles.php:55 -msgid "Editar cuenta" -msgstr "fiók" - -# "Edit" -#: ../../../../inc/tpl/profiles.php:55 -msgid "Editar" -msgstr "Módosítás" - -# "Edit account password" -#: ../../../../inc/tpl/profiles.php:58 -msgid "Editar clave de cuenta" -msgstr "fiók jelszavának módosításe" - -# "Edit Password" -#: ../../../../inc/tpl/profiles.php:58 -msgid "Editar Clave" -msgstr "Jelszó módosítás" - -# "Add new account" -#: ../../../../inc/tpl/profiles.php:60 -msgid "Añadir nueva cuenta" -msgstr "Új fiók hozzáadása" - -# "Add" -#: ../../../../inc/tpl/profiles.php:60 -msgid "Añadir" -msgstr "Hozzáad" - -# "Delete account" -#: ../../../../inc/tpl/profiles.php:63 -msgid "Borrar cuenta" -msgstr "Fiók Törlése" - -# "Delete" -#: ../../../../inc/tpl/profiles.php:63 -msgid "Borrar" -msgstr "Törlés" - -# "View account files" -#: ../../../../inc/tpl/profiles.php:65 -msgid "Ver archivos de cuenta" -msgstr "Fiók fáljok" - -# "Files" -#: ../../../../inc/tpl/profiles.php:65 ../../../../inc/tpl/accounts.php:358 -msgid "Archivos" -msgstr "Fájlok" - -# "General configuration" -#: ../../../../inc/tpl/profiles.php:74 -msgid "Configuración general" -msgstr "Általános beállítások" - -# "General" -#: ../../../../inc/tpl/profiles.php:74 -msgid "General" -msgstr "Általános" - -# "Change master password" -#: ../../../../inc/tpl/profiles.php:76 -msgid "Cambiar clave maestra" -msgstr "Változtatsd meg a mester jelszót" - -# "Make backup" -#: ../../../../inc/tpl/profiles.php:79 -msgid "Realizar copia de seguridad" -msgstr "archívum készítés" - -# "Backup" -#: ../../../../inc/tpl/profiles.php:79 -msgid "Backup" -msgstr "Archiválás" - -# "Management" -#: ../../../../inc/tpl/profiles.php:85 -msgid "Gestión" -msgstr "Menedzsment" - -# "Users management" -#: ../../../../inc/tpl/profiles.php:88 -msgid "Gestión de usuarios" -msgstr "Felhasználó menedzsment" - -# "Groups management" -#: ../../../../inc/tpl/profiles.php:90 -msgid "Gestión de grupos" -msgstr "Csoport menedzsment" - -# "Groups" -#: ../../../../inc/tpl/profiles.php:90 ../../../../inc/tpl/accounts.php:312 -msgid "Grupos" -msgstr "Csoportok" - -# "Profiles management" -#: ../../../../inc/tpl/profiles.php:93 -msgid "Gestión de perfiles" -msgstr "Profil menedzsment" - -# "Profiles" -#: ../../../../inc/tpl/profiles.php:93 -msgid "Perfiles" -msgstr "Profilok" - -# "Categories management" -#: ../../../../inc/tpl/profiles.php:95 -msgid "Gestión de categorías" -msgstr "Kategória Menedzsment" - -# "Categories" -#: ../../../../inc/tpl/profiles.php:95 -msgid "Categorías" -msgstr "Kategóriák" +#: ../../../../web/MainC.class.php:200 +#, fuzzy +msgid "Usuarios en múltiples grupos" +msgstr "Felhasználó csoportok importálása" # "Customers Management" -#: ../../../../inc/tpl/profiles.php:98 -msgid "Gestión de clientes" -msgstr "Ügyfél Menedzsment" +#: ../../../../web/MainC.class.php:201 +#, fuzzy +msgid "Previsualización de imágenes" +msgstr "Kérés fiók módosításához" -# "Customers" -#: ../../../../inc/tpl/profiles.php:98 -msgid "Clientes" -msgstr "Ügyfél" - -# "Others" -#: ../../../../inc/tpl/profiles.php:104 -msgid "Otros" -msgstr "Egyebek" - -# "View event log" -#: ../../../../inc/tpl/profiles.php:107 -msgid "Ver log de eventos" -msgstr "Esemény napló" - -# "Event Log" -#: ../../../../inc/tpl/profiles.php:107 -msgid "Log de Eventos" -msgstr "Esemény napló" - -# "Clear" -#: ../../../../inc/tpl/search.php:59 -msgid "Limpiar" -msgstr "Tiszta" - -# "Text to search" -#: ../../../../inc/tpl/search.php:60 -msgid "Texto a buscar" -msgstr "Keresendõ szöveg" - -# "Global search" -#: ../../../../inc/tpl/search.php:63 -msgid "Búsqueda global" -msgstr "Globális keresés" - -# "APP" -#: ../../../../inc/tpl/search.php:77 -msgid "CPP" -msgstr "APP" - -# "Accounts per page" -#: ../../../../inc/tpl/search.php:77 -msgid "Cuentas por página" -msgstr "Fiók/oldal" - -# "Select Customer" -#: ../../../../inc/tpl/search.php:84 ../../../../inc/tpl/accounts.php:572 -msgid "Seleccionar Cliente" -msgstr "Válassz ügyfelet" - -# "No results" -#: ../../../../inc/tpl/search.php:84 ../../../../inc/tpl/search.php:85 -#: ../../../../inc/tpl/accounts.php:574 ../../../../inc/tpl/accounts.php:579 -#: ../../../../inc/tpl/config.php:566 ../../../../inc/tpl/config.php:571 -#: ../../../../inc/tpl/users.php:220 ../../../../inc/tpl/users.php:225 -msgid "Sin resultados" -msgstr "Nincsenek eredmények" - -# "Select category" -#: ../../../../inc/tpl/search.php:85 ../../../../inc/tpl/accounts.php:577 -msgid "Seleccionar Categoría" -msgstr "Válassz kategóriát" - -# "Installation finished" -#: ../../../../inc/tpl/install.php:35 -msgid "Instalación finalizada" -msgstr "A telepítés befejezõdött" - -# "Click here to access" -#: ../../../../inc/tpl/install.php:36 -msgid "Pulse aquí para acceder" +#: ../../../../web/MainC.class.php:202 +msgid "Mostrar claves como imágenes" msgstr "" -"Kattinst here a " -"bejelentkezéshez" -# "Installation" -#: ../../../../inc/tpl/install.php:46 -msgid "Instalación " -msgstr "Telepítés" +#: ../../../../web/MainC.class.php:203 +msgid "Campos personalizados" +msgstr "" + +# "Query error" +#: ../../../../web/MainC.class.php:204 +#, fuzzy +msgid "API de consultas" +msgstr "Kérés fiók módosításához" + +# "Enable Authentication" +#: ../../../../web/MainC.class.php:205 +#: ../../../../inc/themes/classic/2fa.inc:9 +#: ../../../../inc/themes/material-blue/2fa.inc:9 +#: ../../../../inc/themes/material-blue/security.inc:13 +#, fuzzy +msgid "Autentificación en 2 pasos" +msgstr "Engedélyezése Hitelesítés" + +#: ../../../../web/MainC.class.php:206 +#, fuzzy +msgid "Complejidad de generador de claves" +msgstr "Nem találom a véletlen szám generátort" + +#: ../../../../web/MainC.class.php:207 +msgid "Consultas especiales" +msgstr "" + +#: ../../../../web/MainC.class.php:208 +msgid "Exportación a XML" +msgstr "" + +# "Master password too short" +#: ../../../../web/MainC.class.php:209 +#, fuzzy +msgid "Clave maestra temporal" +msgstr "Generate Temporary Password" + +#: ../../../../web/MainC.class.php:210 +msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV" +msgstr "" + +#: ../../../../web/MainC.class.php:211 +msgid "Optimización del código y mayor rapidez de carga" +msgstr "" + +#: ../../../../web/MainC.class.php:212 +msgid "Mejoras de seguridad en XSS e inyección SQL" +msgstr "" # "This PHP version is vulnerable to NULL Byte attack CVE-2006-7243)" -#: ../../../../inc/tpl/install.php:57 +#: ../../../../web/MainC.class.php:254 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)" +msgstr "Ez a PHP verzió sérülékeny a NULL Byte támadásokkal szemben (CVE-2006-7243)" # "Please update PHP version to run sysPass in a secure way" -#: ../../../../inc/tpl/install.php:58 +#: ../../../../web/MainC.class.php:255 msgid "Actualice la versión de PHP para usar sysPass de forma segura" msgstr "Kérem, frissítse a PHP verziót, hogy a sysPass biztonságos legyen" # "Cannot find random number generator." -#: ../../../../inc/tpl/install.php:62 +#: ../../../../web/MainC.class.php:262 msgid "No se encuentra el generador de números aleatorios." msgstr "Nem találom a véletlen szám generátort" # "Without this function, an attacker could take your account on password reset." -#: ../../../../inc/tpl/install.php:63 -msgid "" -"Sin esta función un atacante puede utilizar su cuenta al resetear la clave" +#: ../../../../web/MainC.class.php:263 +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:282 +msgid "Instalación finalizada" +msgstr "A telepítés befejezõdött" + +# "Click here to access" +#: ../../../../web/MainC.class.php:283 +msgid "Pulse aquí para acceder" +msgstr "Kattinst here a bejelentkezéshez" + +# "Download new version" +#: ../../../../web/MainC.class.php:378 +msgid "Descargar nueva versión" +msgstr "Új verzió letöltése" + +# "Sort by Customer" +#: ../../../../web/SearchC.class.php:270 +msgid "Ordenar por Cliente" +msgstr "Rendezés Ügyfél szerint" + +# "Sort by Name" +#: ../../../../web/SearchC.class.php:276 +msgid "Ordenar por Nombre" +msgstr "Rendezés Név szerint" + +# "Sort by Category" +#: ../../../../web/SearchC.class.php:282 +msgid "Ordenar por Categoría" +msgstr "Rendezés Kategória szerint" + +# "Sort by Username" +#: ../../../../web/SearchC.class.php:288 +msgid "Ordenar por Usuario" +msgstr "Rendezés Felhasználónév szerint" + +# "Sort by URL / IP" +#: ../../../../web/SearchC.class.php:294 +msgid "Ordenar por URL / IP" +msgstr "Rendezés URL / IP szerint" + +# "URL / IP" +#: ../../../../web/SearchC.class.php:295 +#: ../../../../inc/themes/classic/account.inc:58 +#: ../../../../inc/themes/classic/editpass.inc:16 +#: ../../../../inc/themes/classic/request.inc:13 +#: ../../../../inc/themes/classic/search.inc:59 +#: ../../../../inc/themes/material-blue/account.inc:66 +#: ../../../../inc/themes/material-blue/editpass.inc:17 +#: ../../../../inc/themes/material-blue/request.inc:15 +#: ../../../../inc/themes/material-blue/search.inc:62 +msgid "URL / IP" +msgstr "URL / IP" + +# "Properties" +#: ../../../../web/UsersMgmtC.class.php:91 +msgid "Propiedades" +msgstr "Beállítások" + +# "Account Admin" +#: ../../../../web/UsersMgmtC.class.php:104 +msgid "Admin Cuentas" +msgstr "Admin Fiók" + +# "LDAP User" +#: ../../../../web/UsersMgmtC.class.php:108 +#: ../../../../inc/themes/classic/users.inc:28 +#: ../../../../inc/themes/material-blue/users.inc:34 +msgid "Usuario de LDAP" +msgstr "LDAP felhasználó" + +# "Disabled" +#: ../../../../web/UsersMgmtC.class.php:112 +#: ../../../../inc/themes/classic/users.inc:113 +#: ../../../../inc/themes/material-blue/users.inc:151 +#: ../../../../inc/themes/material-blue/users.inc:154 +msgid "Deshabilitado" +msgstr "Inaktív" + +# "View user details" +#: ../../../../web/UsersMgmtC.class.php:129 +msgid "Ver Detalles de Usuario" +msgstr "Felhasználó részletek" + +# "Change user password" +#: ../../../../web/UsersMgmtC.class.php:143 +msgid "Cambiar Clave de Usuario" +msgstr "Változás felhasználói jelszó" + +# "Groups Management" +#: ../../../../web/UsersMgmtC.class.php:222 +msgid "Gestión de Grupos" +msgstr "Csoport Menedzsment" + +# "View user details" +#: ../../../../web/UsersMgmtC.class.php:260 +#, fuzzy +msgid "Ver Detalles de Perfil" +msgstr "Felhasználó részletek" + +# "Profiles Management" +#: ../../../../web/UsersMgmtC.class.php:287 +msgid "Gestión de Perfiles" +msgstr "Profil Menedzsment" + +#: ../../../../web/UsersMgmtC.class.php:407 +#, fuzzy +msgid "Ver token de Autorización" +msgstr "Felhasználó részletek" + +# "Users Management" +#: ../../../../web/UsersMgmtC.class.php:434 +#, fuzzy +msgid "Gestión de Autorizaciones API" +msgstr "Fálj menedzsment inaktív" + +# "Configuration updated" +#: ../../../../web/UsersMgmtC.class.php:455 +#, fuzzy +msgid "Token de autorización visualizado" +msgstr "Beállítások frissítve" + +#: ../../../../web/UsersMgmtC.class.php:456 +msgid "Autorizaciones" +msgstr "" + +# "Security" +#: ../../../../web/UsersPrefsC.class.php:84 +#: ../../../../inc/themes/classic/mail.inc:63 +#: ../../../../inc/themes/material-blue/mail.inc:86 +msgid "Seguridad" +msgstr "Biztonság" + +# Enter Security Code +#: ../../../../inc/themes/classic/2fa.inc:14 +#: ../../../../inc/themes/material-blue/2fa.inc:14 +#, fuzzy +msgid "Introducir código" +msgstr "Enter Security Code" + +# "Password (Verify)" +#: ../../../../inc/themes/classic/2fa.inc:26 +#, fuzzy +msgid "Verificar" +msgstr "Jelszó (Megerõsítés)" + +# "Account name" +#: ../../../../inc/themes/classic/account.inc:14 +#: ../../../../inc/themes/material-blue/account.inc:21 +msgid "Nombre de cuenta" +msgstr "Fiók név" + +# "Search down or enter" +#: ../../../../inc/themes/classic/account.inc:35 +msgid "Buscar en desplegable o introducir" +msgstr "Keress lentebb, vagy nyomj entert" + +# "Access URL or IP" +#: ../../../../inc/themes/classic/account.inc:61 +#: ../../../../inc/themes/material-blue/account.inc:72 +msgid "URL o IP de acceso" +msgstr "URL vagy IP elérés" + +# "Access user" +#: ../../../../inc/themes/classic/account.inc:73 +#: ../../../../inc/themes/material-blue/account.inc:86 +msgid "Usuario de acceso" +msgstr "Felhasználó elérése" + +# "Password (repeat)" +#: ../../../../inc/themes/classic/account.inc:90 +#: ../../../../inc/themes/classic/editpass.inc:32 +#: ../../../../inc/themes/classic/users.inc:83 +#: ../../../../inc/themes/classic/userspass.inc:19 +#: ../../../../inc/themes/classic/userspass.inc:21 +#: ../../../../inc/themes/material-blue/account.inc:105 +#: ../../../../inc/themes/material-blue/editpass.inc:36 +#: ../../../../inc/themes/material-blue/install.inc:64 +#: ../../../../inc/themes/material-blue/users.inc:102 +#: ../../../../inc/themes/material-blue/users.inc:109 +#: ../../../../inc/themes/material-blue/userspass.inc:19 +#: ../../../../inc/themes/material-blue/userspass.inc:25 +msgid "Clave (repetir)" +msgstr "Jelszó (ismét)" + +# "Notes" +#: ../../../../inc/themes/classic/account.inc:97 +#: ../../../../inc/themes/classic/search.inc:75 +#: ../../../../inc/themes/classic/users.inc:91 +#: ../../../../inc/themes/material-blue/account.inc:116 +#: ../../../../inc/themes/material-blue/search.inc:82 +#: ../../../../inc/themes/material-blue/users.inc:116 +msgid "Notas" +msgstr "Jegyzetek" + +# "Notes about the account" +#: ../../../../inc/themes/classic/account.inc:99 +#: ../../../../inc/themes/material-blue/account.inc:121 +#: ../../../../inc/themes/material-blue/users.inc:123 +msgid "Notas sobre la cuenta" +msgstr "Jegyzetek a fiókokról" + +# "Permissions" +#: ../../../../inc/themes/classic/account.inc:105 +#: ../../../../inc/themes/material-blue/account.inc:130 +#: ../../../../inc/themes/material-blue/search.inc:75 +msgid "Permisos" +msgstr "Jofosultságok" + +# "Enable Edit" +#: ../../../../inc/themes/classic/account.inc:132 +#: ../../../../inc/themes/classic/account.inc:163 +#: ../../../../inc/themes/material-blue/account.inc:159 +#: ../../../../inc/themes/material-blue/account.inc:191 +msgid "Hablitar edición" +msgstr "Szerkesztés engedélyezése" + +# "Drop files here (max. 5) or click to select" +#: ../../../../inc/themes/classic/account.inc:201 +#: ../../../../inc/themes/material-blue/account.inc:243 +msgid "Soltar archivos aquí (max. 5) o click para seleccionar" +msgstr "Dobja el a fájlokat (max. 5) vagy kattintson a választáshoz" + +# "Maximum file size" +#: ../../../../inc/themes/classic/account.inc:201 +#: ../../../../inc/themes/classic/config.inc:193 +#: ../../../../inc/themes/material-blue/account.inc:243 +#: ../../../../inc/themes/material-blue/config.inc:274 +msgid "Tamaño máximo de archivo" +msgstr "Maximális fájl méret" + +# "History" +#: ../../../../inc/themes/classic/account.inc:213 +#: ../../../../inc/themes/material-blue/account.inc:255 +msgid "Historial" +msgstr "Elõzmények" + +# "Select date" +#: ../../../../inc/themes/classic/account.inc:232 +#: ../../../../inc/themes/material-blue/account.inc:274 +msgid "Seleccionar fecha" +msgstr "Válassz dátumot" + +# "Last Modification" +#: ../../../../inc/themes/classic/account.inc:241 +#: ../../../../inc/themes/classic/users.inc:164 +#: ../../../../inc/themes/material-blue/account.inc:283 +#: ../../../../inc/themes/material-blue/users.inc:208 +msgid "Última Modificación" +msgstr "Utoljára módosítva" + +# "by" +#: ../../../../inc/themes/classic/account.inc:243 +#: ../../../../inc/themes/material-blue/account.inc:285 +msgid "por" +msgstr "által" + +# "Visits" +#: ../../../../inc/themes/classic/account.inc:286 +#: ../../../../inc/themes/material-blue/account.inc:332 +msgid "Visitas" +msgstr "Látogatók" + +# "Date Added" +#: ../../../../inc/themes/classic/account.inc:290 +#: ../../../../inc/themes/material-blue/account.inc:336 +msgid "Fecha Alta" +msgstr "Dátum hozzáadva" + +# "Creator" +#: ../../../../inc/themes/classic/account.inc:294 +#: ../../../../inc/themes/material-blue/account.inc:340 +msgid "Creador" +msgstr "Készítõ" + +# "Main Group" +#: ../../../../inc/themes/classic/account.inc:298 +#: ../../../../inc/themes/material-blue/account.inc:200 +#: ../../../../inc/themes/material-blue/account.inc:344 +msgid "Grupo Principal" +msgstr "Fõcsoport" + +# "Secondary Users" +#: ../../../../inc/themes/classic/account.inc:303 +#: ../../../../inc/themes/material-blue/account.inc:349 +msgid "Usuarios Secundarios" +msgstr "Másodlagos felhasználók" + +# "Secondary Groups" +#: ../../../../inc/themes/classic/account.inc:322 +#: ../../../../inc/themes/material-blue/account.inc:368 +msgid "Grupos Secundarios" +msgstr "Másodlagos csoportok" + +# "Date Modified" +#: ../../../../inc/themes/classic/account.inc:342 +#: ../../../../inc/themes/material-blue/account.inc:388 +msgid "Fecha Edición" +msgstr "Adat módosítva" + +# "Editor" +#: ../../../../inc/themes/classic/account.inc:346 +#: ../../../../inc/themes/material-blue/account.inc:392 +msgid "Editor" +msgstr "Szerkesztõ" + +# "Restore account from this point" +#: ../../../../inc/themes/classic/account.inc:373 +#: ../../../../inc/themes/material-blue/account.inc:455 +msgid "Restaurar cuenta desde este punto" +msgstr "Restore véve ezen a ponton" + +# Copy Password to Clipboard +#: ../../../../inc/themes/classic/account.inc:385 +#: ../../../../inc/themes/classic/account.inc:468 +#: ../../../../inc/themes/classic/search.inc:105 +#: ../../../../inc/themes/classic/search.inc:184 +#: ../../../../inc/themes/material-blue/account.inc:422 +#: ../../../../inc/themes/material-blue/account.inc:492 +#: ../../../../inc/themes/material-blue/search.inc:118 +#: ../../../../inc/themes/material-blue/search.inc:197 +#, fuzzy +msgid "Copiar Clave en Portapapeles" +msgstr "A jelszó nem lehet üres" + +# "View Current" +#: ../../../../inc/themes/classic/account.inc:401 +#: ../../../../inc/themes/material-blue/account.inc:435 +msgid "Ver Actual" +msgstr "Általános" + +# "Back" +#: ../../../../inc/themes/classic/account.inc:406 +#: ../../../../inc/themes/classic/editpass.inc:46 +#: ../../../../inc/themes/classic/passreset.inc:46 +#: ../../../../inc/themes/material-blue/passreset.inc:43 +msgid "Volver" +msgstr "Vissza" + +# "Edit Account" +#: ../../../../inc/themes/classic/account.inc:413 +#: ../../../../inc/themes/classic/search.inc:117 +#: ../../../../inc/themes/material-blue/account.inc:445 +#: ../../../../inc/themes/material-blue/search.inc:130 +msgid "Modificar Cuenta" +msgstr "Fiók módosítás" + +# "Request Modification" +#: ../../../../inc/themes/classic/account.inc:418 +#: ../../../../inc/themes/classic/search.inc:138 +#: ../../../../inc/themes/material-blue/account.inc:449 +#: ../../../../inc/themes/material-blue/search.inc:150 +msgid "Solicitar Modificación" +msgstr "Kérés módosítás" + +# "Save" +#: ../../../../inc/themes/classic/account.inc:425 +#: ../../../../inc/themes/classic/categories.inc:62 +#: ../../../../inc/themes/classic/config.inc:275 +#: ../../../../inc/themes/classic/customers.inc:62 +#: ../../../../inc/themes/classic/customfields.inc:63 +#: ../../../../inc/themes/classic/editpass.inc:51 +#: ../../../../inc/themes/classic/encryption.inc:102 +#: ../../../../inc/themes/classic/groups.inc:77 +#: ../../../../inc/themes/classic/ldap.inc:229 +#: ../../../../inc/themes/classic/mail.inc:107 +#: ../../../../inc/themes/classic/profiles.inc:168 +#: ../../../../inc/themes/classic/security.inc:58 +#: ../../../../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:461 +#: ../../../../inc/themes/material-blue/categories.inc:72 +#: ../../../../inc/themes/material-blue/config.inc:390 +#: ../../../../inc/themes/material-blue/customers.inc:73 +#: ../../../../inc/themes/material-blue/customfields.inc:74 +#: ../../../../inc/themes/material-blue/editpass.inc:60 +#: ../../../../inc/themes/material-blue/groups.inc:88 +#: ../../../../inc/themes/material-blue/ldap.inc:257 +#: ../../../../inc/themes/material-blue/mail.inc:145 +#: ../../../../inc/themes/material-blue/profiles.inc:177 +#: ../../../../inc/themes/material-blue/security.inc:64 +#: ../../../../inc/themes/material-blue/tokens.inc:63 +#: ../../../../inc/themes/material-blue/users.inc:235 +#: ../../../../inc/themes/material-blue/userspass.inc:40 +#: ../../../../inc/themes/material-blue/wiki.inc:124 +msgid "Guardar" +msgstr "Mentés" + +# "Select secondary groups" +#: ../../../../inc/themes/classic/account.inc:435 +#: ../../../../inc/themes/material-blue/account.inc:471 +msgid "Seleccionar grupos secundarios" +msgstr " Válassz másodlagos csoportot" + +# "Select users" +#: ../../../../inc/themes/classic/account.inc:439 +#: ../../../../inc/themes/material-blue/account.inc:474 +msgid "Seleccionar usuarios" +msgstr "Válassz felhasználót" + +# Password Copied to Clipboard +#: ../../../../inc/themes/classic/account.inc:472 +#: ../../../../inc/themes/classic/search.inc:188 +#: ../../../../inc/themes/material-blue/account.inc:496 +#: ../../../../inc/themes/material-blue/search.inc:201 +#, fuzzy +msgid "Clave Copiada al Portapapeles" +msgstr "Hiba a jelszó frissítése közben" + +# "Result" +#: ../../../../inc/themes/classic/backup.inc:10 +#: ../../../../inc/themes/classic/backup.inc:67 +#: ../../../../inc/themes/material-blue/backup.inc:10 +#: ../../../../inc/themes/material-blue/backup.inc:71 +msgid "Resultado" +msgstr "Eredmény" + +# "Download Current" +#: ../../../../inc/themes/classic/backup.inc:18 +#: ../../../../inc/themes/classic/backup.inc:75 +#: ../../../../inc/themes/material-blue/backup.inc:18 +#: ../../../../inc/themes/material-blue/backup.inc:79 +msgid "Descargar Actual" +msgstr "Aktuális letöltés" + +# "There're no backups for download" +#: ../../../../inc/themes/classic/backup.inc:31 +#: ../../../../inc/themes/material-blue/backup.inc:31 +msgid "No hay backups para descargar" +msgstr "Nincsenek letölthetõ Archívumok" + +#: ../../../../inc/themes/classic/backup.inc:45 +#: ../../../../inc/themes/classic/backup.inc:49 +#: ../../../../inc/themes/classic/backup.inc:113 +#: ../../../../inc/themes/classic/backup.inc:117 +#: ../../../../inc/themes/classic/encryption.inc:93 +#: ../../../../inc/themes/classic/encryption.inc:97 +#: ../../../../inc/themes/classic/encryption.inc:152 +#: ../../../../inc/themes/classic/encryption.inc:156 +#: ../../../../inc/themes/classic/import.inc:15 +#: ../../../../inc/themes/classic/import.inc:37 +#: ../../../../inc/themes/classic/import.inc:51 +#: ../../../../inc/themes/classic/import.inc:97 +#: ../../../../inc/themes/classic/import.inc:118 +#: ../../../../inc/themes/classic/import.inc:170 +#: ../../../../inc/themes/classic/import.inc:174 +#: ../../../../inc/themes/classic/js-common.inc:13 +#: ../../../../inc/themes/classic/ldap.inc:13 +#: ../../../../inc/themes/classic/ldap.inc:33 +#: ../../../../inc/themes/classic/ldap.inc:58 +#: ../../../../inc/themes/classic/ldap.inc:82 +#: ../../../../inc/themes/classic/ldap.inc:93 +#: ../../../../inc/themes/classic/ldap.inc:117 +#: ../../../../inc/themes/classic/ldap.inc:145 +#: ../../../../inc/themes/classic/ldap.inc:166 +#: ../../../../inc/themes/classic/ldap.inc:187 +#: ../../../../inc/themes/classic/wiki.inc:12 +#: ../../../../inc/themes/classic/wiki.inc:28 +#: ../../../../inc/themes/classic/wiki.inc:55 +#: ../../../../inc/themes/classic/wiki.inc:82 +#: ../../../../inc/themes/material-blue/backup.inc:47 +#: ../../../../inc/themes/material-blue/backup.inc:51 +#: ../../../../inc/themes/material-blue/backup.inc:129 +#: ../../../../inc/themes/material-blue/backup.inc:133 +#: ../../../../inc/themes/material-blue/encryption.inc:107 +#: ../../../../inc/themes/material-blue/encryption.inc:111 +#: ../../../../inc/themes/material-blue/encryption.inc:171 +#: ../../../../inc/themes/material-blue/encryption.inc:175 +#: ../../../../inc/themes/material-blue/import.inc:99 +#: ../../../../inc/themes/material-blue/import.inc:103 +#: ../../../../inc/themes/material-blue/js-common.inc:11 +#, fuzzy +msgid "Ayuda" +msgstr "Segítség :: GYIK :: Változások Listája" + +#: ../../../../inc/themes/classic/backup.inc:50 +#: ../../../../inc/themes/material-blue/backup.inc:52 +msgid "La copia de seguridad permite guardar y descargar tanto la base de datos de sysPass como los archivos de la aplicación y su configuración." +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:52 +#: ../../../../inc/themes/material-blue/backup.inc:54 +msgid "Con este método es posible guardar todos los datos de sysPass en otro lugar o utilizarlos para hacer la aplicación portable." +msgstr "" + +# "Import Accounts" +#: ../../../../inc/themes/classic/backup.inc:60 +#: ../../../../inc/themes/classic/backup.inc:126 +#: ../../../../inc/themes/material-blue/backup.inc:64 +#, fuzzy +msgid "Exportar Cuentas" +msgstr "Fiókok" + +# "There're no backups for download" +#: ../../../../inc/themes/classic/backup.inc:84 +#: ../../../../inc/themes/material-blue/backup.inc:88 +#, fuzzy +msgid "No hay archivos XML para descargar" +msgstr "Nincsenek letölthetõ Archívumok" + +# "Bind Password" +#: ../../../../inc/themes/classic/backup.inc:90 +#: ../../../../inc/themes/material-blue/backup.inc:94 +#: ../../../../inc/themes/material-blue/backup.inc:101 +#, fuzzy +msgid "Clave de Exportación" +msgstr "Változás felhasználói jelszó" + +# "Password (repeat)" +#: ../../../../inc/themes/classic/backup.inc:98 +#: ../../../../inc/themes/material-blue/backup.inc:107 +#: ../../../../inc/themes/material-blue/backup.inc:114 +#, fuzzy +msgid "Clave de Exportación (repetir)" +msgstr "Jelszó (ismét)" + +#: ../../../../inc/themes/classic/backup.inc:118 +#: ../../../../inc/themes/material-blue/backup.inc:134 +msgid "La exportación de cuentas permite guardar las cuentas y sus datos en formato XML para posteriormente poder ser importados en otras instancias de sysPass." +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:120 +#: ../../../../inc/themes/material-blue/backup.inc:136 +msgid "Los elementos exportados son cuentas, clientes y categorías." +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:122 +#: ../../../../inc/themes/material-blue/backup.inc:138 +msgid "Las claves de las cuentas son exportadas de forma encriptada para mayor seguridad." +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:124 +#: ../../../../inc/themes/material-blue/backup.inc:140 +msgid "Es posible establecer una clave de exportación para guardar todos los datos encriptados en el archivo XML." +msgstr "" + +# "Javascript is needed in order to run correctly" +#: ../../../../inc/themes/classic/body.inc:4 +#: ../../../../inc/themes/material-blue/body.inc:4 +msgid "Javascript es necesario para el correcto funcionamiento" +msgstr "Java szkript szükséges a megfelelõ mûködéshez" + +# "Category name" +#: ../../../../inc/themes/classic/categories.inc:10 +#: ../../../../inc/themes/material-blue/categories.inc:14 +msgid "Nombre de la categoría" +msgstr "Kategória név" + +# "Category description" +#: ../../../../inc/themes/classic/categories.inc:18 +#: ../../../../inc/themes/material-blue/categories.inc:26 +msgid "Descripción de la categoría" +msgstr "Kategória leírás" + +# "Site" +#: ../../../../inc/themes/classic/config.inc:4 +#: ../../../../inc/themes/material-blue/config.inc:4 +msgid "Sitio" +msgstr "Oldal" + +# "Language" +#: ../../../../inc/themes/classic/config.inc:10 +#: ../../../../inc/themes/material-blue/config.inc:11 +msgid "Idioma" +msgstr "Nyelv" + +#: ../../../../inc/themes/classic/config.inc:21 +#: ../../../../inc/themes/material-blue/config.inc:22 +msgid "Tema Visual" +msgstr "" + +# "Session timeout (s)" +#: ../../../../inc/themes/classic/config.inc:33 +#: ../../../../inc/themes/material-blue/config.inc:34 +#: ../../../../inc/themes/material-blue/config.inc:42 +msgid "Timeout de sesión (s)" +msgstr "Munkamenet idõ" + +# "Enable event log" +#: ../../../../inc/themes/classic/config.inc:42 +#: ../../../../inc/themes/material-blue/config.inc:48 +msgid "Habilitar log de eventos" +msgstr "Esemény napló engedélyezése" + +# "It saves the actions done by the application." +#: ../../../../inc/themes/classic/config.inc:46 +#: ../../../../inc/themes/material-blue/config.inc:52 +#, fuzzy +msgid "Guarda las acciones realizadas en la aplicación." +msgstr "Ez elmenti az akciók kimenetét" + +# "Enable debug" +#: ../../../../inc/themes/classic/config.inc:58 +#: ../../../../inc/themes/material-blue/config.inc:66 +msgid "Habilitar depuración" +msgstr "Nyomkövetés engedélyezése" + +# "Shows some information about application and performance." +#: ../../../../inc/themes/classic/config.inc:62 +#: ../../../../inc/themes/material-blue/config.inc:70 +#, fuzzy +msgid "Muestra información relativa a la configuración de la aplicación y rendimiento." +msgstr "Mutat néhány információt az alkalmazásról és a teljesítményrõl" + +# "Maintenance mode." +#: ../../../../inc/themes/classic/config.inc:74 +#: ../../../../inc/themes/material-blue/config.inc:84 +msgid "Modo mantenimiento" +msgstr "Fenntartás mód" + +# "In this mode you cannot login to application. To disable it, you need to modify configuration file." +#: ../../../../inc/themes/classic/config.inc:78 +#: ../../../../inc/themes/material-blue/config.inc:88 +#, fuzzy +msgid "En este modo no se puede acceder a la aplicación. Para deshabilitarlo es necesario modificar el archivo de configuración." +msgstr "Ezen a módon nem tudsz bejelentkezni az alkalmazásba. Hogy kikapcsold, módosítanod kell a konfigurációs fájlt" + +# "Check for updates" +#: ../../../../inc/themes/classic/config.inc:90 +#: ../../../../inc/themes/material-blue/config.inc:102 +msgid "Comprobar actualizaciones" +msgstr "Frissítések keresése" + +# "Check for application updates (only for administrators)." +#: ../../../../inc/themes/classic/config.inc:94 +#: ../../../../inc/themes/material-blue/config.inc:106 +#, fuzzy +msgid "Comprobar actualizaciones de la aplicación (sólo para los usuarios administradores)." +msgstr "Azlkalmazás frissítések keresése (csak rendszergazda esetén)" + +# "Check for updates" +#: ../../../../inc/themes/classic/config.inc:106 +#: ../../../../inc/themes/material-blue/config.inc:120 +#, fuzzy +msgid "Comprobar notificaciones" +msgstr "Ellenõrzés" + +# "Check for application updates (only for administrators)." +#: ../../../../inc/themes/classic/config.inc:110 +#: ../../../../inc/themes/material-blue/config.inc:124 +#, fuzzy +msgid "Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo para los usuarios administradores)." +msgstr "Azlkalmazás frissítések keresése (csak rendszergazda esetén)" + +# "Account name as link" +#: ../../../../inc/themes/classic/config.inc:122 +#: ../../../../inc/themes/material-blue/config.inc:145 +msgid "Nombre de cuenta como enlace" +msgstr "Fiók neve linkként" + +# "Enables account name as a link to account details in search page." +#: ../../../../inc/themes/classic/config.inc:126 +#: ../../../../inc/themes/material-blue/config.inc:149 +#, fuzzy +msgid "Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles de la cuenta." +msgstr "Fiók nevére való keresés engedélyezése" + +# "Files management" +#: ../../../../inc/themes/classic/config.inc:138 +#: ../../../../inc/themes/material-blue/config.inc:232 +msgid "Gestión de archivos" +msgstr "Fájl menedzsment" + +# "Enables upload/download accounts files." +#: ../../../../inc/themes/classic/config.inc:142 +#: ../../../../inc/themes/material-blue/config.inc:236 +#, fuzzy +msgid "Habilita la subida/descarga de archivos para las cuentas." +msgstr "Fájlok Fel/Letöltésének engedélyezése" + +# "Global searches" +#: ../../../../inc/themes/classic/config.inc:154 +#: ../../../../inc/themes/material-blue/config.inc:164 +msgid "Búsquedas globales" +msgstr "Gblobális Keresések" + +#: ../../../../inc/themes/classic/config.inc:158 +#: ../../../../inc/themes/material-blue/config.inc:168 +msgid "Permite que todos los usuarios puedan realizar búsquedas en todas las cuentas, pero no pueden ver el contenido de las que no tienen permisos." +msgstr "" + +# "Allowed file extensions" +#: ../../../../inc/themes/classic/config.inc:170 +#: ../../../../inc/themes/material-blue/config.inc:251 +msgid "Extensiones de archivos permitidas" +msgstr "Engedélyezett fájl kiterjesztés" + +#: ../../../../inc/themes/classic/config.inc:174 +#: ../../../../inc/themes/material-blue/config.inc:255 +#, fuzzy +msgid "Extensiones permitidas para la subida de archivos." +msgstr "Fájlok Fel/Letöltésének engedélyezése" + +# "Extensions max length is 4 characters." +#: ../../../../inc/themes/classic/config.inc:178 +#: ../../../../inc/themes/material-blue/config.inc:259 +#, fuzzy +msgid "Se permite un máximo de 4 caracteres." +msgstr "A kiterjesztések hossza maximum 4 karakter lehet" + +# "Write extension and press enter to add." +#: ../../../../inc/themes/classic/config.inc:182 +#: ../../../../inc/themes/material-blue/config.inc:263 +#, fuzzy +msgid "Escribir extensión y pulsar intro para añadir. Es necesario guardar la configuración." +msgstr "Írj kiterjesztést, majd nyomj entert a hozzáadáshoz" + +# "Sets up the max upload file size." +#: ../../../../inc/themes/classic/config.inc:197 +#: ../../../../inc/themes/material-blue/config.inc:278 +#, fuzzy +msgid "Establece el tamaño máximo para subir archivos." +msgstr "A feltölthetõ fájlméret maximális értékének beállítása" + +# "The absolute maximum is 16MB." +#: ../../../../inc/themes/classic/config.inc:201 +#: ../../../../inc/themes/material-blue/config.inc:282 +#, fuzzy +msgid "El máximo absuluto es de 16MB." +msgstr "A maximum 16MB" + +# "Results per page" +#: ../../../../inc/themes/classic/config.inc:212 +#: ../../../../inc/themes/material-blue/config.inc:183 +msgid "Resultados por página" +msgstr "Eredmény / oldal" + +# "Number of results that are shown per page when searching" +#: ../../../../inc/themes/classic/config.inc:216 +#: ../../../../inc/themes/material-blue/config.inc:187 +#, fuzzy +msgid "Número de resultados por página a mostrar, al realizar una búsqueda." +msgstr "Keresési találok száma oldalanként" + +# Results like Cards +#: ../../../../inc/themes/classic/config.inc:227 +#, fuzzy +msgid "Resultados en Tarjetas" +msgstr "Nincsenek eredmények" + +# Enables to show account's search results like a card format. +#: ../../../../inc/themes/classic/config.inc:231 +#, fuzzy +msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta." +msgstr "Enables to show account's search results like a card format." + +#: ../../../../inc/themes/classic/config.inc:243 +#: ../../../../inc/themes/material-blue/config.inc:203 +#, fuzzy +msgid "Imagen para mostrar clave" +msgstr "Mester jelszó szükséges a jelszavak titkosításához" + +# "Error on retrieving accounts' passwords" +#: ../../../../inc/themes/classic/config.inc:247 +#: ../../../../inc/themes/material-blue/config.inc:207 +#, fuzzy +msgid "Generar una imagen con el texto de la clave de la cuenta." +msgstr "Hiba a fiókok jelszavainak betöltése közben" + +#: ../../../../inc/themes/classic/config.inc:250 +#: ../../../../inc/themes/material-blue/config.inc:210 +msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad." +msgstr "" + +# "Add extension" +#: ../../../../inc/themes/classic/config.inc:285 +#: ../../../../inc/themes/material-blue/config.inc:400 +msgid "Añadir extensión" +msgstr "Kiterjesztés hozzáadása" + +# "Delete extension" +#: ../../../../inc/themes/classic/config.inc:286 +#: ../../../../inc/themes/material-blue/config.inc:401 +msgid "Eliminar extensión" +msgstr "Kiterjesztés törlése" + +# "Customer name" +#: ../../../../inc/themes/classic/customers.inc:10 +#: ../../../../inc/themes/material-blue/customers.inc:14 +msgid "Nombre del cliente" +msgstr "Ügyfél név" + +# "Customer description" +#: ../../../../inc/themes/classic/customers.inc:18 +#: ../../../../inc/themes/material-blue/customers.inc:26 +msgid "Descripción del cliente" +msgstr "Ügyfél leírás" + +# "Text to search" +#: ../../../../inc/themes/classic/customfields.inc:38 +#: ../../../../inc/themes/material-blue/customfields.inc:41 +#, fuzzy +msgid "Texto Ayuda" +msgstr "Keresendõ szöveg" + +#: ../../../../inc/themes/classic/customfields.inc:44 +#: ../../../../inc/themes/material-blue/customfields.inc:52 +msgid "Obligatorio" +msgstr "" + +# "Master Password" +#: ../../../../inc/themes/classic/encryption.inc:8 +#: ../../../../inc/themes/classic/install.inc:46 +#: ../../../../inc/themes/classic/install.inc:50 +#: ../../../../inc/themes/classic/install.inc:51 +#: ../../../../inc/themes/classic/login.inc:15 +#: ../../../../inc/themes/classic/login.inc:27 +#: ../../../../inc/themes/material-blue/encryption.inc:8 +#: ../../../../inc/themes/material-blue/install.inc:49 +#: ../../../../inc/themes/material-blue/install.inc:56 +#: ../../../../inc/themes/material-blue/login.inc:24 +#: ../../../../inc/themes/material-blue/login.inc:46 +msgid "Clave Maestra" +msgstr "Mester jelszó" + +# "Last Change" +#: ../../../../inc/themes/classic/encryption.inc:16 +#: ../../../../inc/themes/classic/encryption.inc:116 +#: ../../../../inc/themes/material-blue/encryption.inc:16 +#: ../../../../inc/themes/material-blue/encryption.inc:131 +msgid "Último cambio" +msgstr "Utolsó változtatás" + +# "Current Master Password" +#: ../../../../inc/themes/classic/encryption.inc:25 +#: ../../../../inc/themes/material-blue/encryption.inc:25 +#: ../../../../inc/themes/material-blue/encryption.inc:31 +msgid "Clave Maestra actual" +msgstr "Jelenlegki mester jelszó" + +# "New Master Password" +#: ../../../../inc/themes/classic/encryption.inc:34 +#: ../../../../inc/themes/material-blue/encryption.inc:37 +#: ../../../../inc/themes/material-blue/encryption.inc:43 +msgid "Nueva Clave Maestra" +msgstr "Új mester jelszó" + +# "New Master Password (repeat)" +#: ../../../../inc/themes/classic/encryption.inc:43 +#: ../../../../inc/themes/material-blue/encryption.inc:49 +#: ../../../../inc/themes/material-blue/encryption.inc:55 +msgid "Nueva Clave Maestra (repetir)" +msgstr "Új mester jelszó (megerõsítés)" + +# "Don't modify accounts" +#: ../../../../inc/themes/classic/encryption.inc:51 +#: ../../../../inc/themes/material-blue/encryption.inc:61 +msgid "No modificar cuentas" +msgstr "Ne módosítsa a fiókokat" + +# "Sets a new master password without re-encrypt the accounts." +#: ../../../../inc/themes/classic/encryption.inc:56 +#: ../../../../inc/themes/material-blue/encryption.inc:66 +msgid "Establece una nueva clave maestra sin re-encriptar las cuentas" +msgstr "Új mester jelszó beállítása a fiók újratitkosítása nélkül" + +# "Confirm Change" +#: ../../../../inc/themes/classic/encryption.inc:67 +#: ../../../../inc/themes/material-blue/encryption.inc:79 +msgid "Confirmar cambio" +msgstr "Változás megerõsítése" + +# "Warning" +#: ../../../../inc/themes/classic/encryption.inc:70 +#: ../../../../inc/themes/classic/encryption.inc:73 +#: ../../../../inc/themes/classic/encryption.inc:76 +#: ../../../../inc/themes/classic/import.inc:67 +#: ../../../../inc/themes/classic/security.inc:43 +msgid "Atención" +msgstr "Figyelem" + +# "You should save the new password on a secure place" +#: ../../../../inc/themes/classic/encryption.inc:71 +#: ../../../../inc/themes/material-blue/encryption.inc:83 +msgid "Guarde la nueva clave en un lugar seguro." +msgstr "Tárold biztonságos helyen az új jelszót" + +# "All accounts passwords will be encrypted again." +#: ../../../../inc/themes/classic/encryption.inc:74 +#: ../../../../inc/themes/material-blue/encryption.inc:86 +msgid "Se volverán a encriptar las claves de todas las cuentas." +msgstr "Minden fiók jelszó újra titkosítva lesz" + +# "All users must re-enter the new master password." +#: ../../../../inc/themes/classic/encryption.inc:77 +#: ../../../../inc/themes/material-blue/encryption.inc:89 +msgid "Los usuarios deberán de introducir la nueva clave maestra." +msgstr "Minden felhasználónak úrja be kell írnia az új mester jelszót" + +#: ../../../../inc/themes/classic/encryption.inc:98 +#: ../../../../inc/themes/material-blue/encryption.inc:112 +msgid "La clave maestra es utilizada para encriptar las claves de las cuentas de sysPass para mantenerlas seguras." +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:100 +#: ../../../../inc/themes/material-blue/encryption.inc:114 +msgid "Es recomendable cambiarla cada cierto tiempo y utilizar una clave compleja que incluya números, letras y símbolos." +msgstr "" + +# "Master Password" +#: ../../../../inc/themes/classic/encryption.inc:108 +#: ../../../../inc/themes/material-blue/encryption.inc:124 +#, fuzzy +msgid "Clave Temporal" +msgstr "Generate Temporary Password" + +# "Generated Password" +#: ../../../../inc/themes/classic/encryption.inc:119 +#: ../../../../inc/themes/classic/encryption.inc:130 +#: ../../../../inc/themes/material-blue/encryption.inc:134 +#: ../../../../inc/themes/material-blue/encryption.inc:145 +#, fuzzy +msgid "No generada" +msgstr "Generált Jelszó" + +#: ../../../../inc/themes/classic/encryption.inc:124 +#: ../../../../inc/themes/material-blue/encryption.inc:139 +msgid "Válido hasta" +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:136 +#: ../../../../inc/themes/material-blue/encryption.inc:151 +#: ../../../../inc/themes/material-blue/encryption.inc:157 +#, fuzzy +msgid "Validez (s)" +msgstr "Munkamenet idõ" + +#: ../../../../inc/themes/classic/encryption.inc:139 +msgid "Validez" +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:157 +#: ../../../../inc/themes/material-blue/encryption.inc:176 +msgid "La clave temporal es utilizada como clave maestra para los usuarios que necesitan introducirla al iniciar la sesión, así no es necesario facilitar la clave maestra original." +msgstr "" + +# "General" +#: ../../../../inc/themes/classic/encryption.inc:159 +#: ../../../../inc/themes/material-blue/encryption.inc:180 +#, fuzzy +msgid "Generar" +msgstr "Generate Temporary Password" + +# "No records found" +#: ../../../../inc/themes/classic/eventlog.inc:8 +#: ../../../../inc/themes/classic/search.inc:5 +#: ../../../../inc/themes/material-blue/eventlog.inc:7 +#: ../../../../inc/themes/material-blue/search.inc:3 +msgid "No se encontraron registros" +msgstr "Nem találtam rekordokat" + +# "Date / Time" +#: ../../../../inc/themes/classic/eventlog.inc:19 +#: ../../../../inc/themes/material-blue/eventlog.inc:18 +msgid "Fecha / Hora" +msgstr "Dátum / Idõ" + +# "Event" +#: ../../../../inc/themes/classic/eventlog.inc:22 +#: ../../../../inc/themes/material-blue/eventlog.inc:21 +msgid "Evento" +msgstr "Esemény" + +# "IP" +#: ../../../../inc/themes/classic/eventlog.inc:28 +#: ../../../../inc/themes/material-blue/eventlog.inc:27 +msgid "IP" +msgstr "IP" + +# "First page" +#: ../../../../inc/themes/classic/eventlog.inc:86 +#: ../../../../inc/themes/classic/search.inc:161 +#: ../../../../inc/themes/material-blue/eventlog.inc:85 +#: ../../../../inc/themes/material-blue/search.inc:173 +msgid "Primera página" +msgstr "Elsõ oldal" + +# "Previous page" +#: ../../../../inc/themes/classic/eventlog.inc:88 +#: ../../../../inc/themes/classic/search.inc:163 +#: ../../../../inc/themes/material-blue/eventlog.inc:87 +#: ../../../../inc/themes/material-blue/search.inc:175 +msgid "Página anterior" +msgstr "Elõzõ oldal" + +# "Next page" +#: ../../../../inc/themes/classic/eventlog.inc:93 +#: ../../../../inc/themes/classic/search.inc:168 +#: ../../../../inc/themes/material-blue/eventlog.inc:92 +#: ../../../../inc/themes/material-blue/search.inc:180 +msgid "Página siguiente" +msgstr "Következõ oldal" + +# "Last page" +#: ../../../../inc/themes/classic/eventlog.inc:95 +#: ../../../../inc/themes/classic/search.inc:170 +#: ../../../../inc/themes/material-blue/eventlog.inc:94 +#: ../../../../inc/themes/material-blue/search.inc:182 +msgid "Última página" +msgstr "Utolsó oldal" + +# "View File" +#: ../../../../inc/themes/classic/files.inc:22 +#: ../../../../inc/themes/material-blue/files.inc:21 +msgid "Ver Archivo" +msgstr "Fájl megtekintése" + +# Help :: FAQ :: Changelog +#: ../../../../inc/themes/classic/footer.inc:10 +#: ../../../../inc/themes/material-blue/footer.inc:18 +msgid "Ayuda :: FAQ :: Changelog" +msgstr "Segítség :: GYIK :: Változások Listája" + +# "A cygnux.org project" +#: ../../../../inc/themes/classic/footer.inc:13 +#: ../../../../inc/themes/material-blue/footer.inc:23 +msgid "Un proyecto de cygnux.org" +msgstr "A cygnux.org projekt" + +# "Group name" +#: ../../../../inc/themes/classic/groups.inc:10 +#: ../../../../inc/themes/material-blue/groups.inc:14 +msgid "Nombre del grupo" +msgstr "Csoport név" + +# "Group description" +#: ../../../../inc/themes/classic/groups.inc:18 +#: ../../../../inc/themes/material-blue/groups.inc:26 +msgid "Descripción del grupo" +msgstr "Csoport leírás" + +# "phpPMS Import" +#: ../../../../inc/themes/classic/import.inc:7 +#: ../../../../inc/themes/material-blue/import.inc:121 +msgid "Importar phpPMS" +msgstr "phpPMS importálása" + +# "DB Username" +#: ../../../../inc/themes/classic/import.inc:14 +#: ../../../../inc/themes/classic/install.inc:63 +#: ../../../../inc/themes/classic/install.inc:64 +#: ../../../../inc/themes/material-blue/import.inc:128 +#: ../../../../inc/themes/material-blue/import.inc:140 +msgid "Usuario BBDD" +msgstr "DB felhasználónév" + +# "Enter phpPMS database connection user" +#: ../../../../inc/themes/classic/import.inc:18 +#: ../../../../inc/themes/material-blue/import.inc:132 +#, fuzzy +msgid "Indicar el usuario de conexión a la base de datos de phpPMS." +msgstr "Írd be az adatbázis kapcsolati felhasználót" + +# "DB Password" +#: ../../../../inc/themes/classic/import.inc:28 +#: ../../../../inc/themes/classic/install.inc:71 +#: ../../../../inc/themes/classic/install.inc:73 +#: ../../../../inc/themes/material-blue/import.inc:146 +#: ../../../../inc/themes/material-blue/import.inc:152 +msgid "Clave BBDD" +msgstr "Adatbázis jelszó" + +# "DB Name" +#: ../../../../inc/themes/classic/import.inc:36 +#: ../../../../inc/themes/classic/install.inc:78 +#: ../../../../inc/themes/classic/install.inc:79 +#: ../../../../inc/themes/material-blue/import.inc:158 +#: ../../../../inc/themes/material-blue/import.inc:170 +msgid "Nombre BBDD" +msgstr "DB név" + +# "Enter phpPMS database name" +#: ../../../../inc/themes/classic/import.inc:40 +#: ../../../../inc/themes/material-blue/import.inc:162 +#, fuzzy +msgid "Indicar el nombre de la base de datos de phpPMS." +msgstr "Írd be a phpPMS adatbázis nevét" + +# "DB Server" +#: ../../../../inc/themes/classic/import.inc:50 +#: ../../../../inc/themes/classic/install.inc:87 +#: ../../../../inc/themes/classic/install.inc:88 +#: ../../../../inc/themes/material-blue/import.inc:176 +#: ../../../../inc/themes/material-blue/import.inc:188 +msgid "Servidor BBDD" +msgstr "DB szerver" + +# "Enter phpPMS database server name" +#: ../../../../inc/themes/classic/import.inc:54 +#: ../../../../inc/themes/material-blue/import.inc:180 +#, fuzzy +msgid "Indicar el servidor de la base de datos de phpPMS." +msgstr "Írd be az adatbázis szerver nevét" + +# "Confirm" +#: ../../../../inc/themes/classic/import.inc:64 +#: ../../../../inc/themes/material-blue/import.inc:194 +msgid "Confirmar" +msgstr "Megerõsítés" + +# "Current data will be removed (except current user)" +#: ../../../../inc/themes/classic/import.inc:68 +#: ../../../../inc/themes/material-blue/import.inc:198 +msgid "Los datos actuales serán borrados (excepto el usuario actual)" +msgstr "Jelenlegi adatok törlése (kivéve a jelenlegi felhasználót)" + +# "Start" +#: ../../../../inc/themes/classic/import.inc:83 +msgid "Iniciar" +msgstr "Start" + +# CSV/XML Import +#: ../../../../inc/themes/classic/import.inc:89 +#: ../../../../inc/themes/material-blue/import.inc:7 +#, fuzzy +msgid "Importar CSV/XML" +msgstr "Import CSV/XML" + +# Default Group +#: ../../../../inc/themes/classic/import.inc:96 +#: ../../../../inc/themes/material-blue/import.inc:14 +#, fuzzy +msgid "Usuario por Defecto" +msgstr "Rendezés Felhasználónév szerint" + +# Define the default users profile for new LDAP users +#: ../../../../inc/themes/classic/import.inc:100 +#: ../../../../inc/themes/material-blue/import.inc:18 +#, fuzzy +msgid "Define el usuario por defecto para las cuentas importadas." +msgstr "Define the default users profile for new LDAP users" + +# Default Group +#: ../../../../inc/themes/classic/import.inc:117 +#: ../../../../inc/themes/classic/ldap.inc:144 +#: ../../../../inc/themes/material-blue/import.inc:36 +#: ../../../../inc/themes/material-blue/ldap.inc:170 +#, fuzzy +msgid "Grupo por Defecto" +msgstr "Csoportot használja a:" + +# Define the default users group for new LDAP users +#: ../../../../inc/themes/classic/import.inc:121 +#: ../../../../inc/themes/material-blue/import.inc:40 +#, fuzzy +msgid "Define el grupo por defecto para las cuentas importadas." +msgstr "Define the default users group for new LDAP users" + +# "Bind Password" +#: ../../../../inc/themes/classic/import.inc:138 +#: ../../../../inc/themes/material-blue/import.inc:58 +#: ../../../../inc/themes/material-blue/import.inc:64 +#, fuzzy +msgid "Clave de Importación" +msgstr "Fiók importálás megerõsítése" + +#: ../../../../inc/themes/classic/import.inc:146 +#: ../../../../inc/themes/material-blue/import.inc:70 +#: ../../../../inc/themes/material-blue/import.inc:76 +msgid "Delimitador CSV" +msgstr "" + +# "Drop files here or click to select" +#: ../../../../inc/themes/classic/import.inc:162 +#: ../../../../inc/themes/material-blue/import.inc:90 +msgid "Soltar archivo aquí o click para seleccionar" +msgstr "Dobja el a fájlokat vagy kattintson a választáshoz" + +#: ../../../../inc/themes/classic/import.inc:175 +msgid "Permite realizar la importación de Cuentas, Categorías y Clientes desde arhcivos XML y CSV." +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:177 +#: ../../../../inc/themes/material-blue/import.inc:106 +msgid "Los formatos de archivos XML soportados son: sysPass, KeePass y KeePassX" +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:179 +#: ../../../../inc/themes/material-blue/import.inc:108 +msgid "Arrastar el archivo a importar a la zona indicada o hacer click sobre la flecha." +msgstr "" + +# Import from KeePass or KeePassX. The customer name will be KeePass or KeePassX. +#: ../../../../inc/themes/classic/import.inc:181 +#: ../../../../inc/themes/material-blue/import.inc:110 +#, fuzzy +msgid "Para archivos de KeePass o KeePassX, el nombre del cliente será igual a KeePass o KeePassX y la categoría igual al nombre de los grupos." +msgstr "Import from KeePass or KeePassX. The customer name will be KeePass or KeePassX." + +# "Import form a CSV file with the format" +#: ../../../../inc/themes/classic/import.inc:183 +#: ../../../../inc/themes/material-blue/import.inc:112 +#, fuzzy +msgid "La importación de archivos CSV se realiza con el siguiente formato:" +msgstr "Forma importálása a CSV fájl formátumával együtt" + +# "account_name;customer;category;url;user;password;notes" +#: ../../../../inc/themes/classic/import.inc:185 +#: ../../../../inc/themes/material-blue/import.inc:114 +msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas" +msgstr "Fiók_név;ügyfél;kategória;url;felhasználó;jelszó;jegyzetek" + +# "If the customer or category are not created, they will be automatically created." +#: ../../../../inc/themes/classic/import.inc:187 +#: ../../../../inc/themes/material-blue/import.inc:116 +#, fuzzy +msgid "En todos los casos, si el cliente o la categoría no están creados, se crean automáticamente." +msgstr "Amennyiben az ügyfél vagy a kategória nem létezik, automatikusan lesznek létrehozva" + +# "Request description" +#: ../../../../inc/themes/classic/info.inc:4 +#: ../../../../inc/themes/material-blue/info.inc:4 +#, fuzzy +msgid "Información de la Aplicación" +msgstr "Kérés leírás" + +# "Version" +#: ../../../../inc/themes/classic/info.inc:10 +#: ../../../../inc/themes/material-blue/info.inc:10 +#, fuzzy +msgid "Versión sysPass" +msgstr "Verzió" + +# "Search base" +#: ../../../../inc/themes/classic/info.inc:18 +#: ../../../../inc/themes/material-blue/info.inc:18 +#, fuzzy +msgid "Base de Datos" +msgstr "Az adatbázis frissítése nem szükséges" + +# "APP" +#: ../../../../inc/themes/classic/info.inc:30 +#: ../../../../inc/themes/material-blue/info.inc:30 +#, fuzzy +msgid "PHP" +msgstr "Kérem, tekintse meg a PHP konfigurációt fájlok feltötése elõtt" + +#: ../../../../inc/themes/classic/info.inc:35 +#: ../../../../inc/themes/material-blue/info.inc:35 +#, fuzzy +msgid "Extensiones" +msgstr "Tiltott kiterjesztések" + +#: ../../../../inc/themes/classic/info.inc:37 +#: ../../../../inc/themes/material-blue/info.inc:37 +msgid "Memoria Usada" +msgstr "" + +# "Server" +#: ../../../../inc/themes/classic/info.inc:44 +#: ../../../../inc/themes/classic/ldap.inc:32 +#: ../../../../inc/themes/classic/mail.inc:21 +#: ../../../../inc/themes/material-blue/config.inc:318 +#: ../../../../inc/themes/material-blue/info.inc:44 +#: ../../../../inc/themes/material-blue/ldap.inc:35 +#: ../../../../inc/themes/material-blue/ldap.inc:58 +#: ../../../../inc/themes/material-blue/ldap.inc:86 +#: ../../../../inc/themes/material-blue/mail.inc:24 +#: ../../../../inc/themes/material-blue/mail.inc:30 +msgid "Servidor" +msgstr "Szerver" + +# "Installation" +#: ../../../../inc/themes/classic/install.inc:4 +#: ../../../../inc/themes/material-blue/install.inc:4 +msgid "Instalación " +msgstr "Telepítés" + # Create sysPass admin account -#: ../../../../inc/tpl/install.php:85 +#: ../../../../inc/themes/classic/install.inc:25 +#: ../../../../inc/themes/material-blue/install.inc:25 #, fuzzy msgid "Crear cuenta de admin de sysPass" msgstr "Create sysPass admin account" # sysPass administrator's login -#: ../../../../inc/tpl/install.php:88 +#: ../../../../inc/themes/classic/install.inc:32 +#: ../../../../inc/themes/material-blue/install.inc:36 #, fuzzy msgid "Login del usuario administrador de sysPass" msgstr "sysPass administrator's login" -# Show Password -#: ../../../../inc/tpl/install.php:96 ../../../../inc/tpl/install.php:97 -#: ../../../../inc/tpl/install.php:111 ../../../../inc/tpl/install.php:112 -#: ../../../../inc/tpl/install.php:137 ../../../../inc/tpl/install.php:138 -#, fuzzy -msgid "Mostrar Clave" -msgstr "Show Password" - # "DB Configuration" -#: ../../../../inc/tpl/install.php:124 +#: ../../../../inc/themes/classic/install.inc:58 +#: ../../../../inc/themes/material-blue/install.inc:69 msgid "Configurar BBDD" msgstr "Adatbázis beállítások" # User login with with database administrative rights -#: ../../../../inc/tpl/install.php:130 +#: ../../../../inc/themes/classic/install.inc:67 #, fuzzy msgid "Login de usuario con permisos de administrador de MySQL" -msgstr "User login with with database administrative rights" +msgstr "Adatbázis rendszergazdai jogokkal rendelkezõ felhasználó" # sysPass database name -#: ../../../../inc/tpl/install.php:146 +#: ../../../../inc/themes/classic/install.inc:83 +#: ../../../../inc/themes/material-blue/install.inc:102 #, fuzzy msgid "Nombre de la base de datos para sysPass" -msgstr "ÍsysPass database name" +msgstr "Írd be a phpPMS adatbázis nevét" # sysPass database server name -#: ../../../../inc/tpl/install.php:155 +#: ../../../../inc/themes/classic/install.inc:91 #, fuzzy msgid "Nombre del servidor de la base de datos de sysPass" -msgstr "sysPass database server name" - -# "It does not create or verify the user's permissions on the DB" -#: ../../../../inc/tpl/install.php:165 -msgid "No crea ni verifica los permisos del usuario sobre la BBDD" -msgstr "Ez nem hozza létre, illetve erõsíti meg az adatbázis jogosultságokat" +msgstr "Kérem, törölje a pontokat az adatbázis nevébõl" # "Hosting Mode" -#: ../../../../inc/tpl/install.php:167 ../../../../inc/tpl/install.php:185 -#: ../../../../inc/tpl/install.php:187 +#: ../../../../inc/themes/classic/install.inc:97 +#: ../../../../inc/themes/material-blue/install.inc:120 msgid "Modo Hosting" msgstr "Hosting mód" +# "It does not create or verify the user's permissions on the DB" +#: ../../../../inc/themes/classic/install.inc:104 +#: ../../../../inc/themes/material-blue/install.inc:127 +msgid "No crea ni verifica los permisos del usuario sobre la BBDD" +msgstr "Ez nem hozza létre, illetve erõsíti meg az adatbázis jogosultságokat" + # "Install" -#: ../../../../inc/tpl/install.php:174 +#: ../../../../inc/themes/classic/install.inc:108 +#: ../../../../inc/themes/material-blue/install.inc:134 +#: ../../../../inc/themes/material-blue/install.inc:135 msgid "Instalar" msgstr "Telepítés" -# "Edit Account Password" -#: ../../../../inc/tpl/editpass.php:35 ../../../../inc/tpl/accounts.php:543 -msgid "Modificar Clave de Cuenta" -msgstr "Fiók jelszavának szerkesztése" - -# "The generated password will be shown here" -#: ../../../../inc/tpl/editpass.php:60 ../../../../inc/tpl/accounts.php:254 -msgid "La clave generada se mostrará aquí" -msgstr "A generált jelszó megjelenítése itt" - -# "Edit Account" -#: ../../../../inc/tpl/accounts.php:63 -msgid "Editar Cuenta" -msgstr "Fiók módosítás" - -# "Account name" -#: ../../../../inc/tpl/accounts.php:177 -msgid "Nombre de cuenta" -msgstr "Fiók név" - -# "Search down or enter" -#: ../../../../inc/tpl/accounts.php:196 -msgid "Buscar en desplegable o introducir" -msgstr "Keress lentebb, vagy nyomj entert" - -# "Access URL or IP" -#: ../../../../inc/tpl/accounts.php:222 -msgid "URL o IP de acceso" -msgstr "URL vagy IP elérés" - -# "Access user" -#: ../../../../inc/tpl/accounts.php:238 -msgid "Usuario de acceso" -msgstr "Felhasználó elérése" - -# "Notes about the account" -#: ../../../../inc/tpl/accounts.php:271 -msgid "Notas sobre la cuenta" -msgstr "Jegyzetek a fiókokról" - -# "Permissions" -#: ../../../../inc/tpl/accounts.php:277 -msgid "Permisos" -msgstr "Jofosultságok" - -# "Enable Edit" -#: ../../../../inc/tpl/accounts.php:304 ../../../../inc/tpl/accounts.php:335 -msgid "Hablitar edición" -msgstr "Szerkesztés engedélyezése" - -# "Drop files here (max. 5) or click to select" -#: ../../../../inc/tpl/accounts.php:371 -msgid "Soltar archivos aquí (max. 5) o click para seleccionar" -msgstr "Dobja el a fájlokat (max. 5) vagy kattintson a választáshoz" - -# "Maximum file size" -#: ../../../../inc/tpl/accounts.php:371 ../../../../inc/tpl/config.php:192 -msgid "Tamaño máximo de archivo" -msgstr "Maximális fájl méret" - -# "History" -#: ../../../../inc/tpl/accounts.php:383 -msgid "Historial" -msgstr "Elõzmények" - -# "Select date" -#: ../../../../inc/tpl/accounts.php:398 -msgid "Seleccionar fecha" -msgstr "Válassz dátumot" - -# "Last Modification" -#: ../../../../inc/tpl/accounts.php:405 ../../../../inc/tpl/users.php:183 -msgid "Última Modificación" -msgstr "Utoljára módosítva" - -# "by" -#: ../../../../inc/tpl/accounts.php:407 -msgid "por" -msgstr "által" - -# "Visits" -#: ../../../../inc/tpl/accounts.php:417 -msgid "Visitas" -msgstr "Látogatók" - -# "Date Added" -#: ../../../../inc/tpl/accounts.php:421 -msgid "Fecha Alta" -msgstr "Dátum hozzáadva" - -# "Creator" -#: ../../../../inc/tpl/accounts.php:425 -msgid "Creador" -msgstr "Készítõ" - -# "Main Group" -#: ../../../../inc/tpl/accounts.php:429 -msgid "Grupo Principal" -msgstr "Fõcsoport" - -# "Secondary Users" -#: ../../../../inc/tpl/accounts.php:434 -msgid "Usuarios Secundarios" -msgstr "Másodlagos felhasználók" - -# "Secondary Groups" -#: ../../../../inc/tpl/accounts.php:455 -msgid "Grupos Secundarios" -msgstr "Másodlagos csoportok" - -# "Date Modified" -#: ../../../../inc/tpl/accounts.php:477 -msgid "Fecha Edición" -msgstr "Adat módosítva" - -# "Editor" -#: ../../../../inc/tpl/accounts.php:481 -msgid "Editor" -msgstr "Szerkesztõ" - -# "View Current" -#: ../../../../inc/tpl/accounts.php:503 -msgid "Ver Actual" -msgstr "Általános" - -# "Restore account from this point" -#: ../../../../inc/tpl/accounts.php:515 -msgid "Restaurar cuenta desde este punto" -msgstr "Restore véve ezen a ponton" - -# "Select secondary groups" -#: ../../../../inc/tpl/accounts.php:582 -msgid "Seleccionar grupos secundarios" -msgstr " Válassz másodlagos csoportot" - -# "Select users" -#: ../../../../inc/tpl/accounts.php:585 -msgid "Seleccionar usuarios" -msgstr "Válassz felhasználót" - -# "Category name" -#: ../../../../inc/tpl/categories.php:41 -msgid "Nombre de la categoría" -msgstr "Kategória név" - -# "Category description" -#: ../../../../inc/tpl/categories.php:47 -msgid "Descripción de la categoría" -msgstr "Kategória leírás" - -# "Site" -#: ../../../../inc/tpl/config.php:83 -msgid "Sitio" -msgstr "Oldal" - -# "Language" -#: ../../../../inc/tpl/config.php:91 -msgid "Idioma" -msgstr "Nyelv" - -# "Session timeout (s)" -#: ../../../../inc/tpl/config.php:105 -msgid "Timeout de sesión (s)" -msgstr "Munkamenet idõ" - -# "Enable event log" -#: ../../../../inc/tpl/config.php:113 -msgid "Habilitar log de eventos" -msgstr "Esemény napló engedélyezése" - -# "Enable debug" -#: ../../../../inc/tpl/config.php:123 -msgid "Habilitar depuración" -msgstr "Nyomkövetés engedélyezése" - -# "Maintenance mode." -#: ../../../../inc/tpl/config.php:133 -msgid "Modo mantenimiento" -msgstr "Fenntartás mód" - -# "Check for updates" -#: ../../../../inc/tpl/config.php:143 -msgid "Comprobar actualizaciones" -msgstr "Frissítések keresése" - -# "Account name as link" -#: ../../../../inc/tpl/config.php:153 -msgid "Nombre de cuenta como enlace" -msgstr "Fiók neve linkként" - -# "Files management" -#: ../../../../inc/tpl/config.php:163 -msgid "Gestión de archivos" -msgstr "Fájl menedzsment" - -# "Global searches" -#: ../../../../inc/tpl/config.php:173 -msgid "Búsquedas globales" -msgstr "Gblobális Keresések" - -# "Allowed file extensions" -#: ../../../../inc/tpl/config.php:183 -msgid "Extensiones de archivos permitidas" -msgstr "Engedélyezett fájl kiterjesztés" - -# "Results per page" -#: ../../../../inc/tpl/config.php:201 -msgid "Resultados por página" -msgstr "Eredmény / oldal" - -# Results like Cards -#: ../../../../inc/tpl/config.php:217 -#, fuzzy -msgid "Resultados en Tarjetas" -msgstr "Results like Cards" - -# "Wiki" -#: ../../../../inc/tpl/config.php:229 -msgid "Wiki" -msgstr "Wiki" - -# "Enable Wiki links" -#: ../../../../inc/tpl/config.php:235 -msgid "Habilitar enlaces Wiki" -msgstr "Wiki linkek engedélyezése" - -# "Wiki search URL" -#: ../../../../inc/tpl/config.php:245 -msgid "URL de búsqueda Wiki" -msgstr "Wiki keresés URL" - -# "Wiki page URL" -#: ../../../../inc/tpl/config.php:254 -msgid "URL de página en Wiki" -msgstr "Wiki oldal URL" - -# "Account name preffix" -#: ../../../../inc/tpl/config.php:263 -msgid "Prefijo para nombre de cuenta" -msgstr "Fiók név elõtag" - -# "LDAP" -#: ../../../../inc/tpl/config.php:275 -msgid "LDAP" -msgstr "LDAP" - # "Enable LDAP" -#: ../../../../inc/tpl/config.php:282 +#: ../../../../inc/themes/classic/ldap.inc:12 +#: ../../../../inc/themes/material-blue/ldap.inc:12 msgid "Habilitar LDAP" msgstr "LDAP engedélyezése" -# "Server" -#: ../../../../inc/tpl/config.php:292 ../../../../inc/tpl/config.php:397 -msgid "Servidor" -msgstr "Szerver" +# "Enables LDAP authentication" +#: ../../../../inc/themes/classic/ldap.inc:16 +#: ../../../../inc/themes/material-blue/ldap.inc:16 +#, fuzzy +msgid "Habilita de autentificación mediante servidor LDAP." +msgstr "LDAP hitelesítés engedélyezése" + +# "This method will switch to MySQL on failure" +#: ../../../../inc/themes/classic/ldap.inc:20 +#: ../../../../inc/themes/material-blue/ldap.inc:20 +#, fuzzy +msgid "Este método utilizará MySQL en caso de fallo." +msgstr "Ez a metódus hibát okoz a MySQL-ben" + +# "LDAP server hostname or IP address" +#: ../../../../inc/themes/classic/ldap.inc:36 +#: ../../../../inc/themes/material-blue/ldap.inc:39 +#, fuzzy +msgid "Nombre o dirección IP del servidor de LDAP." +msgstr "LDAP szerver hosztnév vagy IP cím" + +# "Examples" +#: ../../../../inc/themes/classic/ldap.inc:40 +#: ../../../../inc/themes/classic/ldap.inc:65 +#: ../../../../inc/themes/classic/ldap.inc:100 +#: ../../../../inc/themes/classic/ldap.inc:128 +#: ../../../../inc/themes/classic/wiki.inc:89 +#: ../../../../inc/themes/material-blue/ldap.inc:43 +#: ../../../../inc/themes/material-blue/ldap.inc:72 +#: ../../../../inc/themes/material-blue/ldap.inc:119 +#: ../../../../inc/themes/material-blue/ldap.inc:151 +#: ../../../../inc/themes/material-blue/wiki.inc:101 +#, fuzzy +msgid "Ejemplos:" +msgstr "Példák" # "Bind User" -#: ../../../../inc/tpl/config.php:301 +#: ../../../../inc/themes/classic/ldap.inc:57 +#: ../../../../inc/themes/material-blue/ldap.inc:64 msgid "Usuario de conexión" msgstr "Bind felhasználó" +# "User to connect LDAP server" +#: ../../../../inc/themes/classic/ldap.inc:61 +#: ../../../../inc/themes/material-blue/ldap.inc:68 +#, fuzzy +msgid "Usuario para conectar con el servicio de LDAP." +msgstr "Felhasználó az LDAP szerverhez való kapcsolódáshoz" + # "Bind Password" -#: ../../../../inc/tpl/config.php:310 +#: ../../../../inc/themes/classic/ldap.inc:81 +#: ../../../../inc/themes/material-blue/ldap.inc:92 msgid "Clave de conexión" msgstr "Bind jelszó" # "Search base" -#: ../../../../inc/tpl/config.php:319 +#: ../../../../inc/themes/classic/ldap.inc:92 +#: ../../../../inc/themes/material-blue/ldap.inc:111 +#: ../../../../inc/themes/material-blue/ldap.inc:133 msgid "Base de búsqueda" msgstr "Keresés" -# Default Group -#: ../../../../inc/tpl/config.php:337 +# "LDAP base to do users searches." +#: ../../../../inc/themes/classic/ldap.inc:96 +#: ../../../../inc/themes/material-blue/ldap.inc:115 #, fuzzy -msgid "Grupo por Defecto" -msgstr "Default Group" +msgid "Base en la que realizar la búsqueda de usuarios de LDAP." +msgstr "LDAP bázis a felhasználó keresésekhez" + +# "LDAP group that users belong to for access permission" +#: ../../../../inc/themes/classic/ldap.inc:120 +#: ../../../../inc/themes/material-blue/ldap.inc:143 +#, fuzzy +msgid "Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso." +msgstr "LDAP csoport felhasználóinak belépési jgosultságia" + +#: ../../../../inc/themes/classic/ldap.inc:124 +#: ../../../../inc/themes/material-blue/ldap.inc:147 +msgid "Este grupo debe de estar ubicado en la base de búsquedas de LDAP." +msgstr "" + +# Define the default users group for new LDAP users +#: ../../../../inc/themes/classic/ldap.inc:148 +#: ../../../../inc/themes/material-blue/ldap.inc:174 +#, fuzzy +msgid "Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP." +msgstr "Define the default users group for new LDAP users" # Default Profile -#: ../../../../inc/tpl/config.php:346 +#: ../../../../inc/themes/classic/ldap.inc:165 +#: ../../../../inc/themes/material-blue/ldap.inc:190 #, fuzzy msgid "Perfil por Defecto" -msgstr "Default Profile" +msgstr "A profilt használja:" + +# Define the default users profile for new LDAP users +#: ../../../../inc/themes/classic/ldap.inc:169 +#: ../../../../inc/themes/material-blue/ldap.inc:194 +#, fuzzy +msgid "Define el perfil de usuarios por defecto para los nuevos usuarios de LDAP." +msgstr "Define the default users profile for new LDAP users" # Active Directory -#: ../../../../inc/tpl/config.php:355 +#: ../../../../inc/themes/classic/ldap.inc:186 +#: ../../../../inc/themes/material-blue/ldap.inc:210 #, fuzzy msgid "Active Directory" msgstr "Active Directory" +# Enables Active Directory LDAP connection mode. +#: ../../../../inc/themes/classic/ldap.inc:190 +#: ../../../../inc/themes/material-blue/ldap.inc:214 +#, fuzzy +msgid "Habilita el modo de conexión con LDAP de Active Directory." +msgstr "Enables Active Directory LDAP connection mode." + # "Check" -#: ../../../../inc/tpl/config.php:365 +#: ../../../../inc/themes/classic/ldap.inc:202 +#: ../../../../inc/themes/material-blue/ldap.inc:228 msgid "Comprobar" msgstr "Ellenõrzés" # "Check LDAP connection" -#: ../../../../inc/tpl/config.php:368 +#: ../../../../inc/themes/classic/ldap.inc:206 +#: ../../../../inc/themes/material-blue/ldap.inc:232 msgid "Comprobar conexión con LDAP" msgstr "LDAP kapcsolat ellenõrzése" -# "Mail" -#: ../../../../inc/tpl/config.php:382 -msgid "Correo" -msgstr "Mail" +# "Lost your password?" +#: ../../../../inc/themes/classic/login.inc:46 +#: ../../../../inc/themes/material-blue/login.inc:69 +msgid "¿Olvidó su clave?" +msgstr "Elvesztette jelszavát?" + +# "Application successfully updated" +#: ../../../../inc/themes/classic/login.inc:59 +#: ../../../../inc/themes/material-blue/login.inc:82 +msgid "Aplicación actualizada correctamente" +msgstr "Az alkalmazás frissítése sikeres" + +# "New Category" +#: ../../../../inc/themes/classic/login.inc:64 +#: ../../../../inc/themes/classic/login.inc:65 +#: ../../../../inc/themes/material-blue/login.inc:87 +#: ../../../../inc/themes/material-blue/login.inc:88 +#: ../../../../inc/themes/material-blue/login.inc:90 +#, fuzzy +msgid "Nuevas Características" +msgstr "Új Kategória" # "Enable email notifications" -#: ../../../../inc/tpl/config.php:388 +#: ../../../../inc/themes/classic/mail.inc:11 +#: ../../../../inc/themes/material-blue/mail.inc:11 msgid "Habilitar notificaciones de correo" msgstr "Email értesítés engedélyezése" # "Port" -#: ../../../../inc/tpl/config.php:405 +#: ../../../../inc/themes/classic/mail.inc:29 +#: ../../../../inc/themes/material-blue/config.inc:332 +#: ../../../../inc/themes/material-blue/mail.inc:36 +#: ../../../../inc/themes/material-blue/mail.inc:43 msgid "Puerto" msgstr "Port" # "Enable Authentication" -#: ../../../../inc/tpl/config.php:413 +#: ../../../../inc/themes/classic/mail.inc:37 +#: ../../../../inc/themes/material-blue/mail.inc:49 msgid "Habilitar Autentificación" msgstr "Engedélyezése Hitelesítés" -# "Security" -#: ../../../../inc/tpl/config.php:438 -msgid "Seguridad" -msgstr "Biztonság" - # "Disabled" -#: ../../../../inc/tpl/config.php:444 +#: ../../../../inc/themes/classic/mail.inc:68 +#: ../../../../inc/themes/material-blue/mail.inc:91 msgid "Deshabilitada" msgstr "Inaktív" # "Recipient email address" -#: ../../../../inc/tpl/config.php:455 +#: ../../../../inc/themes/classic/mail.inc:77 +#: ../../../../inc/themes/material-blue/mail.inc:100 +#: ../../../../inc/themes/material-blue/mail.inc:107 msgid "Dirección de correo de envío" msgstr "Címzett email címe" # "Enable requests by email" -#: ../../../../inc/tpl/config.php:463 +#: ../../../../inc/themes/classic/mail.inc:85 +#: ../../../../inc/themes/material-blue/mail.inc:113 msgid "Habilitar peticiones por correo" msgstr "Email kérések engedélyezése" -# "Add extension" -#: ../../../../inc/tpl/config.php:506 -msgid "Añadir extensión" -msgstr "Kiterjesztés hozzáadása" +# "More Actions" +#: ../../../../inc/themes/classic/mgmttabs.inc:66 +#: ../../../../inc/themes/classic/search.inc:112 +#: ../../../../inc/themes/material-blue/search.inc:125 +msgid "Más Acciones" +msgstr "Több akció" -# "Delete extension" -#: ../../../../inc/tpl/config.php:507 -msgid "Eliminar extensión" -msgstr "Kiterjesztés törlése" +# "Request Password Change" +#: ../../../../inc/themes/classic/passreset.inc:13 +#: ../../../../inc/themes/material-blue/passreset.inc:10 +msgid "Solicitud de Cambio de Clave" +msgstr "Kérés jelszó módosítás" -# "Add filter" -#: ../../../../inc/tpl/config.php:535 -msgid "Añadir filtro" -msgstr "Szûrõ hozzáadása" +# "User login" +#: ../../../../inc/themes/classic/passreset.inc:16 +msgid "Login del Usuario" +msgstr "Felhasználó bejelentkezés" -# "Delete filter" -#: ../../../../inc/tpl/config.php:536 -msgid "Eliminar filtro" -msgstr "Szûrõ törlése" +# "User Email" +#: ../../../../inc/themes/classic/passreset.inc:21 +#: ../../../../inc/themes/material-blue/passreset.inc:24 +msgid "Email del Usuario" +msgstr "Felhasználó Email" -# "Select Group" -#: ../../../../inc/tpl/config.php:564 ../../../../inc/tpl/users.php:223 -msgid "Seleccionar Grupo" -msgstr "Válassz csoportot" +# "Email" +#: ../../../../inc/themes/classic/passreset.inc:22 +#: ../../../../inc/themes/classic/users.inc:61 +#: ../../../../inc/themes/material-blue/users.inc:71 +msgid "Email" +msgstr "Email" -# "Select Profile" -#: ../../../../inc/tpl/config.php:569 ../../../../inc/tpl/users.php:218 -msgid "Seleccionar Perfil" -msgstr "Válassz profilt" +# "New Password" +#: ../../../../inc/themes/classic/passreset.inc:27 +msgid "Nueva Clave" +msgstr "Új jelszó" + +# "New Password (Verify)" +#: ../../../../inc/themes/classic/passreset.inc:34 +msgid "Nueva Clave (Verificar)" +msgstr "Új jelszó (megerõsítés)" + +# "Password (Verify)" +#: ../../../../inc/themes/classic/passreset.inc:35 +msgid "Clave (Verificar)" +msgstr "Jelszó (Megerõsítés)" + +# "Go back to login" +#: ../../../../inc/themes/classic/passreset.inc:46 +#: ../../../../inc/themes/material-blue/passreset.inc:42 +msgid "Volver a iniciar sesión" +msgstr "Vissza a bejelentkezéshez" + +# "Request" +#: ../../../../inc/themes/classic/passreset.inc:48 +#: ../../../../inc/themes/material-blue/2fa.inc:27 +#: ../../../../inc/themes/material-blue/passreset.inc:48 +#: ../../../../inc/themes/material-blue/passreset.inc:49 +msgid "Solicitar" +msgstr "Kérés" + +# "Request password change" +#: ../../../../inc/themes/classic/passreset.inc:49 +msgid "Solicitar cambio de clave" +msgstr "Kérés jelszó módosítás" + +# "Change" +#: ../../../../inc/themes/classic/passreset.inc:51 +#: ../../../../inc/themes/material-blue/passreset.inc:53 +#: ../../../../inc/themes/material-blue/passreset.inc:54 +msgid "Cambiar" +msgstr "Változtatás" + +# "Change password" +#: ../../../../inc/themes/classic/passreset.inc:52 +msgid "Cambiar Clave" +msgstr "Változtatsd meg a jelszót" + +# "Profile name" +#: ../../../../inc/themes/classic/profiles.inc:11 +#: ../../../../inc/themes/material-blue/profiles.inc:14 +msgid "Nombre del perfil" +msgstr "Profil név" + +# "View account details" +#: ../../../../inc/themes/classic/profiles.inc:19 +#: ../../../../inc/themes/material-blue/profiles.inc:30 +msgid "Ver detalles de cuenta" +msgstr "Fiók adatok" + +# "View" +#: ../../../../inc/themes/classic/profiles.inc:19 +#: ../../../../inc/themes/material-blue/profiles.inc:30 +msgid "Ver" +msgstr "Nézet" + +# "View account password" +#: ../../../../inc/themes/classic/profiles.inc:23 +#: ../../../../inc/themes/material-blue/profiles.inc:35 +msgid "Ver clave de cuenta" +msgstr "Fiók jelszó" + +# "View account history" +#: ../../../../inc/themes/classic/profiles.inc:28 +#: ../../../../inc/themes/material-blue/profiles.inc:40 +msgid "Ver historial de cuenta" +msgstr "Fiók elõzmények" + +# "Edit account" +#: ../../../../inc/themes/classic/profiles.inc:32 +#: ../../../../inc/themes/material-blue/profiles.inc:45 +msgid "Editar cuenta" +msgstr "fiók" + +# "Edit" +#: ../../../../inc/themes/classic/profiles.inc:32 +#: ../../../../inc/themes/material-blue/profiles.inc:45 +msgid "Editar" +msgstr "Módosítás" + +# "Edit account password" +#: ../../../../inc/themes/classic/profiles.inc:37 +#: ../../../../inc/themes/material-blue/profiles.inc:50 +msgid "Editar clave de cuenta" +msgstr "fiók jelszavának módosításe" + +# "Edit Password" +#: ../../../../inc/themes/classic/profiles.inc:37 +#: ../../../../inc/themes/material-blue/profiles.inc:50 +msgid "Editar Clave" +msgstr "Jelszó módosítás" + +# "Add new account" +#: ../../../../inc/themes/classic/profiles.inc:41 +msgid "Añadir nueva cuenta" +msgstr "Új fiók hozzáadása" + +# "Add" +#: ../../../../inc/themes/classic/profiles.inc:41 +msgid "Añadir" +msgstr "Hozzáad" + +# "Delete account" +#: ../../../../inc/themes/classic/profiles.inc:46 +msgid "Borrar cuenta" +msgstr "Fiók Törlése" + +# "Delete" +#: ../../../../inc/themes/classic/profiles.inc:46 +msgid "Borrar" +msgstr "Törlés" + +# "View account files" +#: ../../../../inc/themes/classic/profiles.inc:50 +msgid "Ver archivos de cuenta" +msgstr "Fiók fáljok" + +# "General configuration" +#: ../../../../inc/themes/classic/profiles.inc:61 +#: ../../../../inc/themes/material-blue/profiles.inc:72 +msgid "Configuración general" +msgstr "Általános beállítások" + +# "Change master password" +#: ../../../../inc/themes/classic/profiles.inc:65 +msgid "Cambiar clave maestra" +msgstr "Változtatsd meg a mester jelszót" + +# "Make backup" +#: ../../../../inc/themes/classic/profiles.inc:70 +msgid "Realizar copia de seguridad" +msgstr "archívum készítés" + +# "Backup" +#: ../../../../inc/themes/classic/profiles.inc:70 +#: ../../../../inc/themes/material-blue/profiles.inc:82 +msgid "Backup" +msgstr "Archiválás" + +# "Confirm account import" +#: ../../../../inc/themes/classic/profiles.inc:74 +#: ../../../../inc/themes/material-blue/profiles.inc:87 +#, fuzzy +msgid "Realizar importación de cuentas" +msgstr "Fiók importálás megerõsítése" + +# "Management" +#: ../../../../inc/themes/classic/profiles.inc:81 +#: ../../../../inc/themes/material-blue/profiles.inc:93 +msgid "Gestión" +msgstr "Menedzsment" + +# "Users management" +#: ../../../../inc/themes/classic/profiles.inc:85 +#: ../../../../inc/themes/material-blue/profiles.inc:99 +msgid "Gestión de usuarios" +msgstr "Felhasználó menedzsment" + +# "Groups management" +#: ../../../../inc/themes/classic/profiles.inc:89 +#: ../../../../inc/themes/material-blue/profiles.inc:104 +msgid "Gestión de grupos" +msgstr "Csoport menedzsment" + +# "Profiles management" +#: ../../../../inc/themes/classic/profiles.inc:94 +#: ../../../../inc/themes/material-blue/profiles.inc:109 +msgid "Gestión de perfiles" +msgstr "Profil menedzsment" + +# "Profiles" +#: ../../../../inc/themes/classic/profiles.inc:94 +#: ../../../../inc/themes/material-blue/profiles.inc:109 +msgid "Perfiles" +msgstr "Profilok" + +# "Categories management" +#: ../../../../inc/themes/classic/profiles.inc:98 +#: ../../../../inc/themes/material-blue/profiles.inc:114 +msgid "Gestión de categorías" +msgstr "Kategória Menedzsment" + +# "Customers Management" +#: ../../../../inc/themes/classic/profiles.inc:103 +#: ../../../../inc/themes/material-blue/profiles.inc:119 +msgid "Gestión de clientes" +msgstr "Ügyfél Menedzsment" + +# "Files management disabled" +#: ../../../../inc/themes/classic/profiles.inc:107 +#: ../../../../inc/themes/material-blue/profiles.inc:124 +#, fuzzy +msgid "Gestión de campos personalizados" +msgstr "A mezõk száma helytelen" + +# "Files management" +#: ../../../../inc/themes/classic/profiles.inc:112 +#: ../../../../inc/themes/material-blue/profiles.inc:129 +#, fuzzy +msgid "Gestión de autorizaciones API" +msgstr "Fálj menedzsment inaktív" + +#: ../../../../inc/themes/classic/profiles.inc:112 +#: ../../../../inc/themes/material-blue/profiles.inc:129 +msgid "Autorizaciones API" +msgstr "" + +# "Others" +#: ../../../../inc/themes/classic/profiles.inc:120 +#: ../../../../inc/themes/material-blue/profiles.inc:135 +msgid "Otros" +msgstr "Egyebek" + +# "View event log" +#: ../../../../inc/themes/classic/profiles.inc:124 +#: ../../../../inc/themes/material-blue/profiles.inc:141 +msgid "Ver log de eventos" +msgstr "Esemény napló" + +# "Event Log" +#: ../../../../inc/themes/classic/profiles.inc:124 +#: ../../../../inc/themes/material-blue/profiles.inc:141 +msgid "Log de Eventos" +msgstr "Esemény napló" + +# "Performed by" +#: ../../../../inc/themes/classic/profiles.inc:132 +#: ../../../../inc/themes/material-blue/profiles.inc:148 +#, fuzzy +msgid "Usado por" +msgstr "által" + +#: ../../../../inc/themes/classic/profiles.inc:139 +#: ../../../../inc/themes/material-blue/profiles.inc:155 +msgid "No usado" +msgstr "" + +# "Request Account Modification" +#: ../../../../inc/themes/classic/request.inc:1 +#: ../../../../inc/themes/material-blue/request.inc:1 +msgid "Solicitar Modificación de Cuenta" +msgstr "Kérés fiók módosítás" + +# "Request" +#: ../../../../inc/themes/classic/request.inc:22 +#: ../../../../inc/themes/material-blue/request.inc:25 +msgid "Petición" +msgstr "Kérés" + +# "Request description" +#: ../../../../inc/themes/classic/request.inc:24 +#: ../../../../inc/themes/material-blue/request.inc:29 +msgid "Descripción de la petición" +msgstr "Kérés leírás" + +# "Back" +#: ../../../../inc/themes/classic/request.inc:33 +#: ../../../../inc/themes/material-blue/account.inc:439 +#: ../../../../inc/themes/material-blue/editpass.inc:55 +#: ../../../../inc/themes/material-blue/request.inc:42 +msgid "Atrás" +msgstr "Vissza" + +# "Send" +#: ../../../../inc/themes/classic/request.inc:38 +#: ../../../../inc/themes/material-blue/request.inc:48 +msgid "Enviar" +msgstr "Küldés" + +# "Search in Wiki" +#: ../../../../inc/themes/classic/search.inc:26 +#: ../../../../inc/themes/material-blue/search.inc:29 +msgid "Buscar en Wiki" +msgstr "Keresés a Wikiben" + +# "Open link to" +#: ../../../../inc/themes/classic/search.inc:62 +#: ../../../../inc/themes/material-blue/search.inc:65 +msgid "Abrir enlace a" +msgstr "Nyissa meg a linket, hogy" + +# "Attachments" +#: ../../../../inc/themes/classic/search.inc:80 +#: ../../../../inc/themes/material-blue/search.inc:89 +msgid "Archivos adjuntos" +msgstr "Csatolmányok" + +# "Link to Wiki" +#: ../../../../inc/themes/classic/search.inc:87 +#: ../../../../inc/themes/material-blue/search.inc:98 +msgid "Enlace a Wiki" +msgstr "Wiki link" + +# "Filter ON" +#: ../../../../inc/themes/classic/search.inc:151 +#: ../../../../inc/themes/material-blue/search.inc:163 +msgid "Filtro ON" +msgstr "Szûrõ bekapcsolva" + +# "Global ON" +#: ../../../../inc/themes/classic/search.inc:155 +#: ../../../../inc/themes/material-blue/search.inc:167 +msgid "Global ON" +msgstr "Global On" + +# "Clear" +#: ../../../../inc/themes/classic/searchbox.inc:5 +#: ../../../../inc/themes/material-blue/searchbox.inc:5 +msgid "Limpiar" +msgstr "Tiszta" + +# "Text to search" +#: ../../../../inc/themes/classic/searchbox.inc:6 +#: ../../../../inc/themes/material-blue/searchbox.inc:10 +msgid "Texto a buscar" +msgstr "Keresendõ szöveg" + +# "Incorrect parameters" +#: ../../../../inc/themes/classic/searchbox.inc:10 +#: ../../../../inc/themes/material-blue/searchbox.inc:15 +#, fuzzy +msgid "Parámetros especiales:" +msgstr "Helytelen paraméter" + +#: ../../../../inc/themes/classic/searchbox.inc:13 +#: ../../../../inc/themes/material-blue/searchbox.inc:18 +msgid "Buscar cuentas a las que 'login' tenga acceso" +msgstr "" + +#: ../../../../inc/themes/classic/searchbox.inc:14 +#: ../../../../inc/themes/material-blue/searchbox.inc:19 +msgid "Buscar cuentas a las que 'group_name' tenga acceso" +msgstr "" + +# "Global search" +#: ../../../../inc/themes/classic/searchbox.inc:18 +#: ../../../../inc/themes/material-blue/searchbox.inc:25 +#: ../../../../inc/themes/material-blue/searchbox.inc:28 +msgid "Búsqueda global" +msgstr "Globális keresés" + +# "APP" +#: ../../../../inc/themes/classic/searchbox.inc:41 +#: ../../../../inc/themes/material-blue/searchbox.inc:54 +msgid "CPP" +msgstr "APP" + +# "Accounts per page" +#: ../../../../inc/themes/classic/searchbox.inc:41 +#: ../../../../inc/themes/material-blue/searchbox.inc:54 +msgid "Cuentas por página" +msgstr "Fiók/oldal" + +# "Warning" +#: ../../../../inc/themes/classic/security.inc:4 +#, fuzzy +msgid "Autenticación" +msgstr "Figyelem" + +# "Account Activation" +#: ../../../../inc/themes/classic/security.inc:13 +#, fuzzy +msgid "Autenticación en 2 pasos" +msgstr "Fiók Aktiválás" + +#: ../../../../inc/themes/classic/security.inc:17 +#: ../../../../inc/themes/material-blue/security.inc: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/security.inc:21 +#: ../../../../inc/themes/material-blue/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/security.inc:29 +#: ../../../../inc/themes/material-blue/security.inc:29 +msgid "Activar" +msgstr "" + +# "Error on retrieving accounts history" +#: ../../../../inc/themes/classic/security.inc:34 +#: ../../../../inc/themes/material-blue/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/security.inc:39 +#: ../../../../inc/themes/material-blue/security.inc:43 +msgid "Código" +msgstr "" + +#: ../../../../inc/themes/classic/security.inc:44 +#: ../../../../inc/themes/material-blue/security.inc:48 +msgid "Una vez activada, sólo es posible acceder si se dispone del dispositivo generador de códigos asociado." +msgstr "" + +# "Change user password" +#: ../../../../inc/themes/classic/sessionbar.inc:6 +#: ../../../../inc/themes/material-blue/footer.inc:7 +msgid "Cambiar clave de usuario" +msgstr "Változatsd meg a felhasználói jelszót" + +#: ../../../../inc/themes/classic/sessionbar.inc:9 +msgid "Preferencias" +msgstr "" + +# "Logout" +#: ../../../../inc/themes/classic/sessionbar.inc:15 +#: ../../../../inc/themes/material-blue/footer.inc:5 +msgid "Salir" +msgstr "Kijelentkezés" + +# "Options" +#: ../../../../inc/themes/classic/tokens.inc:34 +#: ../../../../inc/themes/classic/users.inc:98 +#: ../../../../inc/themes/material-blue/tokens.inc:34 +#: ../../../../inc/themes/material-blue/users.inc:132 +msgid "Opciones" +msgstr "Beállítások" + +# Start Update +#: ../../../../inc/themes/classic/tokens.inc:38 +#: ../../../../inc/themes/material-blue/tokens.inc:37 +#: ../../../../inc/themes/material-blue/tokens.inc:40 +#, fuzzy +msgid "Regenerar Autorización" +msgstr "Start Update" + +#: ../../../../inc/themes/classic/tokens.inc:43 +#: ../../../../inc/themes/material-blue/tokens.inc:46 +msgid "Token" +msgstr "" + +# "Updated" +#: ../../../../inc/themes/classic/update.inc:18 +#: ../../../../inc/themes/material-blue/update.inc:20 +msgid "Actualizado" +msgstr "Frissítve" + +# "Check for updates" +#: ../../../../inc/themes/classic/update.inc:23 +#: ../../../../inc/themes/material-blue/update.inc:22 +#, fuzzy +msgid "Error al comprobar actualizaciones" +msgstr "Frissítések keresése" + +# DB Update +#: ../../../../inc/themes/classic/upgrade.inc:8 +#: ../../../../inc/themes/material-blue/upgrade.inc:8 +#, fuzzy +msgid "Actualización de BBDD" +msgstr "Verzió frissítés kész" + +# Enter Security Code +#: ../../../../inc/themes/classic/upgrade.inc:10 +#, fuzzy +msgid "Introducir Código de Seguridad" +msgstr "Archiválás" + +# Security Code +#: ../../../../inc/themes/classic/upgrade.inc:11 +#: ../../../../inc/themes/material-blue/upgrade.inc:14 +#, fuzzy +msgid "Código de Seguridad" +msgstr "Archiválás" + +# Start Update +#: ../../../../inc/themes/classic/upgrade.inc:21 +#: ../../../../inc/themes/material-blue/upgrade.inc:26 +#, fuzzy +msgid "Iniciar Actualización" +msgstr "Start" # "Full username" -#: ../../../../inc/tpl/users.php:71 +#: ../../../../inc/themes/classic/users.inc:12 +#: ../../../../inc/themes/material-blue/users.inc:15 msgid "Nombre de usuario completo" msgstr "Teljes felhasznlónév" # "Session login" -#: ../../../../inc/tpl/users.php:85 +#: ../../../../inc/themes/classic/users.inc:25 +#: ../../../../inc/themes/material-blue/users.inc:31 msgid "Login de inicio de sesión" msgstr "Bejelentkezési munkamenet " # "Email address" -#: ../../../../inc/tpl/users.php:117 +#: ../../../../inc/themes/classic/users.inc:64 +#: ../../../../inc/themes/material-blue/users.inc:78 msgid "Dirección de correo" msgstr "Email cím" -# "Options" -#: ../../../../inc/tpl/users.php:154 -msgid "Opciones" -msgstr "Beállítások" - # "Application administrator" -#: ../../../../inc/tpl/users.php:158 +#: ../../../../inc/themes/classic/users.inc:103 +#: ../../../../inc/themes/material-blue/users.inc:136 msgid "Administrador de la aplicación" msgstr "Rendszergazda" # "Application Admin" -#: ../../../../inc/tpl/users.php:158 +#: ../../../../inc/themes/classic/users.inc:103 +#: ../../../../inc/themes/material-blue/users.inc:139 msgid "Admin. Aplicación" msgstr "Admin alkalmazás" # "Accounts administrator" -#: ../../../../inc/tpl/users.php:160 +#: ../../../../inc/themes/classic/users.inc:107 +#: ../../../../inc/themes/material-blue/users.inc:143 msgid "Administrador de cuentas" msgstr "Fiókok adminja" # "Accounts Admin" -#: ../../../../inc/tpl/users.php:160 +#: ../../../../inc/themes/classic/users.inc:107 +#: ../../../../inc/themes/material-blue/users.inc:146 msgid "Admin. Cuentas" msgstr "Admin fiók" # "Force password change" -#: ../../../../inc/tpl/users.php:166 +#: ../../../../inc/themes/classic/users.inc:117 +#: ../../../../inc/themes/material-blue/users.inc:158 msgid "Forzar cambio de clave" msgstr "Jelszó változtatásának erõltetése" # "Entries" -#: ../../../../inc/tpl/users.php:173 +#: ../../../../inc/themes/classic/users.inc:154 +#: ../../../../inc/themes/material-blue/users.inc:198 msgid "Entradas" msgstr "Belépések" # "Last Access" -#: ../../../../inc/tpl/users.php:178 +#: ../../../../inc/themes/classic/users.inc:159 +#: ../../../../inc/themes/material-blue/users.inc:203 msgid "Último Acceso" msgstr "Utolsó belépés" # "Master Password Date" -#: ../../../../inc/tpl/users.php:188 +#: ../../../../inc/themes/classic/users.inc:169 +#: ../../../../inc/themes/material-blue/users.inc:213 msgid "Fecha Clave Maestra" msgstr "Mester jelszó dátum" -# DB Update -#: ../../../../inc/tpl/upgrade.php:42 +# "Enable Wiki links" +#: ../../../../inc/themes/classic/wiki.inc:11 +#: ../../../../inc/themes/material-blue/wiki.inc:11 +msgid "Habilitar enlaces Wiki" +msgstr "Wiki linkek engedélyezése" + +# "Enables the option to add an external Wiki link for accounts search results." +#: ../../../../inc/themes/classic/wiki.inc:15 +#: ../../../../inc/themes/material-blue/wiki.inc:15 #, fuzzy -msgid "Actualización de BBDD" -msgstr "DB Update" +msgid "Habilita la opción de añadir un enlace a Wiki externa para los resultados de la búsqueda." +msgstr "Külsõ Wiki forrásokban való keresés engedélyezése" -# Enter Security Code -#: ../../../../inc/tpl/upgrade.php:44 +# "Wiki search URL" +#: ../../../../inc/themes/classic/wiki.inc:27 +#: ../../../../inc/themes/material-blue/wiki.inc:30 +#: ../../../../inc/themes/material-blue/wiki.inc:56 +msgid "URL de búsqueda Wiki" +msgstr "Wiki keresés URL" + +# "URL that wiki uses to do a page search on it." +#: ../../../../inc/themes/classic/wiki.inc:31 +#: ../../../../inc/themes/material-blue/wiki.inc:34 #, fuzzy -msgid "Introducir Código de Seguridad" -msgstr "Enter Security Code" +msgid "URL que utiliza la wiki para realizar una búsqueda de una página." +msgstr "Wiki oldal keresõje" -# Security Code -#: ../../../../inc/tpl/upgrade.php:45 +# "It uses customer name as parameter." +#: ../../../../inc/themes/classic/wiki.inc:35 +#: ../../../../inc/themes/material-blue/wiki.inc:38 #, fuzzy -msgid "Código de Seguridad" -msgstr "Security Code" +msgid "Como parámetro se utiliza el nombre del cliente." +msgstr "Az ügyfelet paraméterként használja" -# Start Update -#: ../../../../inc/tpl/upgrade.php:55 +# "Example" +#: ../../../../inc/themes/classic/wiki.inc:39 +#: ../../../../inc/themes/classic/wiki.inc:66 +#: ../../../../inc/themes/material-blue/wiki.inc:42 +#: ../../../../inc/themes/material-blue/wiki.inc:74 #, fuzzy -msgid "Iniciar Actualización" -msgstr "Start Update" +msgid "Ejemplo:" +msgstr "Példa" -# "Date / Time" -#: ../../../../inc/tpl/eventlog.php:56 -msgid "Fecha / Hora" -msgstr "Dátum / Idõ" +# "Wiki page URL" +#: ../../../../inc/themes/classic/wiki.inc:54 +#: ../../../../inc/themes/material-blue/wiki.inc:62 +#: ../../../../inc/themes/material-blue/wiki.inc:87 +msgid "URL de página en Wiki" +msgstr "Wiki oldal URL" -# "Event" -#: ../../../../inc/tpl/eventlog.php:59 -msgid "Evento" -msgstr "Esemény" - -# "IP" -#: ../../../../inc/tpl/eventlog.php:65 -msgid "IP" -msgstr "IP" - -# "Unable to create backup directory" -#~ msgid "No es posible crear el directorio de backups" -#~ msgstr "Arcív mappa létrehozása meghiusúlt" - -# "Database Backup" -#~ msgid "Copia BBDD" -#~ msgstr "Adatbázis archiválás" - -# sysPass administrator's password +# "URL that wiki uses to access to page details on it." +#: ../../../../inc/themes/classic/wiki.inc:58 +#: ../../../../inc/themes/material-blue/wiki.inc:66 #, fuzzy -#~ msgid "Clave de administrador de sysPass" -#~ msgstr "sysPass administrator's password" +msgid "URL que utiliza la wiki para acceder a los detalles de una página." +msgstr "Wiki oldal adatainak elérése" + +# "The account name is used as wiki search variable parameter." +#: ../../../../inc/themes/classic/wiki.inc:62 +#: ../../../../inc/themes/material-blue/wiki.inc:70 +#, fuzzy +msgid "El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda de la Wiki." +msgstr "A fiók neve wiki keresési paraméterként való használata" + +# "Account name preffix" +#: ../../../../inc/themes/classic/wiki.inc:81 +#: ../../../../inc/themes/material-blue/wiki.inc:93 +msgid "Prefijo para nombre de cuenta" +msgstr "Fiók név elõtag" + +# "Preffix to select what accounts have a wiki page link." +#: ../../../../inc/themes/classic/wiki.inc:85 +#: ../../../../inc/themes/material-blue/wiki.inc:97 +#, fuzzy +msgid "Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki." +msgstr "Elõtag választás a fiókok tartalmaznak-e wiki linket" + +# "Add filter" +#: ../../../../inc/themes/classic/wiki.inc:121 +#: ../../../../inc/themes/material-blue/wiki.inc:135 +msgid "Añadir filtro" +msgstr "Szûrõ hozzáadása" + +# "Delete filter" +#: ../../../../inc/themes/classic/wiki.inc:122 +#: ../../../../inc/themes/material-blue/wiki.inc:136 +msgid "Eliminar filtro" +msgstr "Szûrõ törlése" + +# "History" +#: ../../../../inc/themes/material-blue/account.inc:4 +#, fuzzy +msgid "Histórico" +msgstr "Fiók elõzmények importálása" + +#: ../../../../inc/themes/material-blue/account.inc:42 +msgid "Seleccionar o escribir para crear uno nuevo" +msgstr "" + +# "Password (repeat)" +#: ../../../../inc/themes/material-blue/account.inc:110 +#, fuzzy +msgid "Clave (Repetir)" +msgstr "Jelszó (ismét)" + +# "Performed by" +#: ../../../../inc/themes/material-blue/backup.inc:58 +#: ../../../../inc/themes/material-blue/backup.inc:144 +#: ../../../../inc/themes/material-blue/encryption.inc:118 +#: ../../../../inc/themes/material-blue/import.inc:217 +#, fuzzy +msgid "Realizar" +msgstr "Archívum készítés" + +# "Results per page" +#: ../../../../inc/themes/material-blue/config.inc:197 +#, fuzzy +msgid "Número de resultados por página" +msgstr "Keresési találok száma oldalanként" + +# "Maximum file size" +#: ../../../../inc/themes/material-blue/config.inc:292 +#, fuzzy +msgid "Tamaño máximo de archivo en bytes" +msgstr "Maximális fájl méret" + +#: ../../../../inc/themes/material-blue/config.inc:299 +msgid "Proxy" +msgstr "" + +#: ../../../../inc/themes/material-blue/config.inc:305 +msgid "Usar Proxy" +msgstr "" + +# "Server" +#: ../../../../inc/themes/material-blue/config.inc:326 +#, fuzzy +msgid "Servidor proxy" +msgstr "Szerver" + +#: ../../../../inc/themes/material-blue/config.inc:340 +msgid "Puerto del servidor proxy" +msgstr "" + +# "Access user" +#: ../../../../inc/themes/material-blue/config.inc:354 +#, fuzzy +msgid "Usuario del servidor proxy" +msgstr "Felhasználó elérése" + +#: ../../../../inc/themes/material-blue/config.inc:368 +msgid "Clave del servidor proxy" +msgstr "" + +# "Group name" +#: ../../../../inc/themes/material-blue/customfields.inc:14 +#, fuzzy +msgid "Nombre del campo" +msgstr "Ügyfél név" + +#: ../../../../inc/themes/material-blue/customfields.inc:47 +#, fuzzy +msgid "Ayuda del campo" +msgstr "Segítség :: GYIK :: Változások Listája" + +# "View user details" +#: ../../../../inc/themes/material-blue/footer.inc:11 +#, fuzzy +msgid "Preferencias de usuario" +msgstr "Dupla felhasználó bejelentkezés" + +#: ../../../../inc/themes/material-blue/import.inc:104 +msgid "Permite realizar la importación de Cuentas, Categorías y Clientes desde archivos XML y CSV." +msgstr "" + +# sysPass administrator's login +#: ../../../../inc/themes/material-blue/install.inc:31 +#, fuzzy +msgid "Usuario administrador de sysPass" +msgstr "sysPass administrator's login" + +# "Access user" +#: ../../../../inc/themes/material-blue/install.inc:78 +#, fuzzy +msgid "Usuario acceso BBDD" +msgstr "Felhasználó elérése" + +# User login with with database administrative rights +#: ../../../../inc/themes/material-blue/install.inc:83 +#, fuzzy +msgid "Usuario con permisos de administrador de MySQL" +msgstr "User login with with database administrative rights" + +# "DB Password" +#: ../../../../inc/themes/material-blue/install.inc:90 +#, fuzzy +msgid "Clave acceso BBDD" +msgstr "Adatbázis jelszó" + +# sysPass database name +#: ../../../../inc/themes/material-blue/install.inc:97 +#, fuzzy +msgid "Nombre BBDD para sysPass" +msgstr "ÍsysPass database name" + +# "DB Server" +#: ../../../../inc/themes/material-blue/install.inc:109 +#, fuzzy +msgid "Servidor BBDD para sysPass" +msgstr "DB szerver" + +# sysPass database server name +#: ../../../../inc/themes/material-blue/install.inc:114 +#, fuzzy +msgid "Nombre del servidor para instalar la base de datos de sysPass" +msgstr "sysPass database server name" + +# "LDAP bind user password" +#: ../../../../inc/themes/material-blue/ldap.inc:96 +#, fuzzy +msgid "Clave del usuario de conexión a LDAP." +msgstr "LDAP bind felhasználói jelszó" + +#: ../../../../inc/themes/material-blue/mail.inc:118 +msgid "Habilita que los usuarios puedan solicitar modificaciones o acceso a las cuentas sin permisos." +msgstr "" + +# "Add new account" +#: ../../../../inc/themes/material-blue/profiles.inc:25 +#, fuzzy +msgid "Crear nueva cuenta" +msgstr "Új fiók" + +# "Creator" +#: ../../../../inc/themes/material-blue/profiles.inc:25 +#, fuzzy +msgid "Crear" +msgstr "Hiba a profil létrehozása közben" + +# "Delete Account" +#: ../../../../inc/themes/material-blue/profiles.inc:55 +#, fuzzy +msgid "Eliminar cuenta" +msgstr "Fiók törlése" + +# "Delete Group" +#: ../../../../inc/themes/material-blue/profiles.inc:55 +#, fuzzy +msgid "Eliminar" +msgstr "Profil törlése" + +# "View account files" +#: ../../../../inc/themes/material-blue/profiles.inc:60 +#, fuzzy +msgid "Var archivos de cuenta" +msgstr "Fiók fáljok" + +# "Error on encryption module" +#: ../../../../inc/themes/material-blue/profiles.inc:77 +#, fuzzy +msgid "Opciones de encriptación" +msgstr "Beállítások" + +# "Make backup" +#: ../../../../inc/themes/material-blue/profiles.inc:82 +#, fuzzy +msgid "Realizar copia de seguridad y exportar" +msgstr "archívum készítés" + +#: ../../../../inc/themes/material-blue/searchbox.inc:20 +msgid "Buscar cuentas con archivos con el nombre 'file_name'" +msgstr "" + +# "Enable Authentication" +#: ../../../../inc/themes/material-blue/security.inc:4 +#, fuzzy +msgid "Autentificación" +msgstr "Engedélyezése Hitelesítés" diff --git a/inc/locales/it_IT/LC_MESSAGES/messages.mo b/inc/locales/it_IT/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..521349fc825f2e3b8664d7908c27332d0c8976aa GIT binary patch literal 533 zcmah^!Ab)$5UuEGkDfh5@Ste6*~&_rx+1Nu6k1&DD&8b+$8BVrEJ;?{5Ao{+zr|Ts zTMvRm9+_m`%)IxpyYtq-*h1_f4iMXj6GRnl#5)!{cvqZt#74hB>gZ@j@4;B96(@FO zV_~fq-z2neKsfxRSHb}&Ef$27btnr-5c2T!m<5a>k>0|qth)c^b!y&NSVt2hl+A_H zh7(mT?LsPY{+(Rn>H=5$+GH2rSg5QN8PEj8Vomra!O($9^-QXallGHz-UGb`1*UcrYnVw# z0{_ep7?$cc?FkEoaC1(4FV0INayryzVbM|X^|Vo|OX@T_RAfIQ!BKb9Kh>p4p\n" +"Language-Team: nuxsmin@syspass.org \n" +"Language: it_IT\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.6.10\n" +"X-Poedit-Basepath: .\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-SearchPath-0: ../../../..\n" + +#: ../../../../ajax/ajax_2fa.php:35 ../../../../ajax/ajax_accountSave.php:41 +#: ../../../../ajax/ajax_appMgmtSave.php:42 +#: ../../../../ajax/ajax_backup.php:39 ../../../../ajax/ajax_checkLdap.php:41 +#: ../../../../ajax/ajax_configSave.php:41 ../../../../ajax/ajax_files.php:41 +#: ../../../../ajax/ajax_getFiles.php:46 ../../../../ajax/ajax_import.php:49 +#: ../../../../ajax/ajax_migrate.php:45 ../../../../ajax/ajax_passReset.php:37 +#: ../../../../ajax/ajax_search.php:41 +#: ../../../../ajax/ajax_sendRequest.php:41 +#: ../../../../ajax/ajax_userPrefsSave.php:42 +msgid "CONSULTA INVÁLIDA" +msgstr "" + +#: ../../../../ajax/ajax_2fa.php:55 +msgid "Código correcto" +msgstr "" + +#: ../../../../ajax/ajax_2fa.php:58 ../../../../ajax/ajax_userPrefsSave.php:67 +msgid "Código incorrecto" +msgstr "" + +#: ../../../../ajax/ajax_accountSave.php:35 +#: ../../../../ajax/ajax_appMgmtSave.php:36 +#: ../../../../ajax/ajax_backup.php:33 ../../../../ajax/ajax_checkLdap.php:35 +#: ../../../../ajax/ajax_configSave.php:35 ../../../../ajax/ajax_import.php:35 +#: ../../../../ajax/ajax_migrate.php:35 +#: ../../../../ajax/ajax_sendRequest.php:35 +#: ../../../../ajax/ajax_userPrefsSave.php:36 +#: ../../../../ajax/ajax_viewpass.php:36 +msgid "La sesión no se ha iniciado o ha caducado" +msgstr "" + +#: ../../../../ajax/ajax_accountSave.php:75 +#: ../../../../ajax/ajax_accountSave.php:92 +msgid "Es necesario un nombre de cuenta" +msgstr "" + +#: ../../../../ajax/ajax_accountSave.php:77 +#: ../../../../ajax/ajax_accountSave.php:90 +#: ../../../../ajax/ajax_appMgmtSave.php:326 +msgid "Es necesario un nombre de cliente" +msgstr "" + +#: ../../../../ajax/ajax_accountSave.php:79 +#: ../../../../ajax/ajax_accountSave.php:94 +msgid "Es necesario un usuario" +msgstr "" + +#: ../../../../ajax/ajax_accountSave.php:81 +msgid "Es necesario una clave" +msgstr "" + +#: ../../../../ajax/ajax_accountSave.php:83 +#: ../../../../ajax/ajax_accountSave.php:107 +#: ../../../../ajax/ajax_appMgmtSave.php:111 +#: ../../../../ajax/ajax_appMgmtSave.php:146 +#: ../../../../ajax/ajax_backup.php:62 +msgid "Las claves no coinciden" +msgstr "" + +#: ../../../../ajax/ajax_accountSave.php:85 +#: ../../../../ajax/ajax_accountSave.php:96 +msgid "Es necesario una categoría" +msgstr "" + +#: ../../../../ajax/ajax_accountSave.php:100 +#: ../../../../ajax/ajax_accountSave.php:111 +msgid "Id inválido" +msgstr "" + +#: ../../../../ajax/ajax_accountSave.php:105 +#: ../../../../ajax/ajax_appMgmtSave.php:109 +#: ../../../../ajax/ajax_appMgmtSave.php:144 +msgid "La clave no puede estar en blanco" +msgstr "" + +#: ../../../../ajax/ajax_accountSave.php:114 +#: ../../../../ajax/ajax_accountSave.php:258 +#: ../../../../ajax/ajax_appMgmtSave.php:532 +#: ../../../../ajax/ajax_configSave.php:290 +#: ../../../../ajax/ajax_userPrefsSave.php:80 ../../../../api.php:53 +msgid "Acción Inválida" +msgstr "" + +#: ../../../../ajax/ajax_accountSave.php:168 +msgid "Cuenta creada" +msgstr "" + +#: ../../../../ajax/ajax_accountSave.php:171 +msgid "Error al crear la cuenta" +msgstr "" + +#: ../../../../ajax/ajax_accountSave.php:206 +msgid "Sin cambios" +msgstr "" + +#: ../../../../ajax/ajax_accountSave.php:218 +msgid "Cuenta actualizada" +msgstr "" + +#: ../../../../ajax/ajax_accountSave.php:221 +msgid "Error al modificar la cuenta" +msgstr "" + +#: ../../../../ajax/ajax_accountSave.php:228 +msgid "Cuenta eliminada" +msgstr "" + +#: ../../../../ajax/ajax_accountSave.php:231 +msgid "Error al eliminar la cuenta" +msgstr "" + +#: ../../../../ajax/ajax_accountSave.php:241 +#: ../../../../ajax/ajax_appMgmtSave.php:150 +#: ../../../../ajax/ajax_passReset.php:74 +msgid "Clave actualizada" +msgstr "" + +#: ../../../../ajax/ajax_accountSave.php:244 +msgid "Error al actualizar la clave" +msgstr "" + +#: ../../../../ajax/ajax_accountSave.php:251 +msgid "Cuenta restaurada" +msgstr "" + +#: ../../../../ajax/ajax_accountSave.php:254 +msgid "Error al restaurar cuenta" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtData.php:54 +msgid "Ver Usuario" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtData.php:61 +#: ../../../../web/UsersMgmtC.class.php:136 +msgid "Editar Usuario" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtData.php:67 +#: ../../../../inc/UserBase.class.php:381 +#: ../../../../web/UsersMgmtC.class.php:121 +msgid "Nuevo Usuario" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtData.php:73 +msgid "Ver Grupo" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtData.php:80 +#: ../../../../web/UsersMgmtC.class.php:202 +msgid "Editar Grupo" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtData.php:86 +#: ../../../../inc/Groups.class.php:152 ../../../../inc/Groups.class.php:253 +#: ../../../../web/UsersMgmtC.class.php:194 +msgid "Nuevo Grupo" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtData.php:92 +msgid "Ver Perfil" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtData.php:99 +#: ../../../../web/UsersMgmtC.class.php:267 +msgid "Editar Perfil" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtData.php:105 +#: ../../../../inc/ProfileBase.class.php:512 +#: ../../../../web/UsersMgmtC.class.php:252 +msgid "Nuevo Perfil" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtData.php:111 +msgid "Ver Cliente" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtData.php:118 +#: ../../../../web/AccountsMgmtC.class.php:152 +msgid "Editar Cliente" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtData.php:124 +#: ../../../../inc/Customer.class.php:65 +#: ../../../../web/AccountsMgmtC.class.php:145 +msgid "Nuevo Cliente" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtData.php:130 +msgid "Ver Categoría" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtData.php:137 +#: ../../../../web/AccountsMgmtC.class.php:94 +msgid "Editar Categoría" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtData.php:143 +#: ../../../../inc/Category.class.php:83 +#: ../../../../web/AccountsMgmtC.class.php:86 +msgid "Nueva Categoría" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtData.php:149 +msgid "Ver Autorización" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtData.php:156 +#: ../../../../inc/ApiTokens.class.php:189 +#: ../../../../web/UsersMgmtC.class.php:399 +msgid "Nueva Autorización" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtData.php:162 +#: ../../../../web/UsersMgmtC.class.php:414 +msgid "Editar Autorización" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtData.php:168 +#: ../../../../web/AccountsMgmtC.class.php:273 +msgid "Nuevo Campo" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtData.php:174 +#: ../../../../web/AccountsMgmtC.class.php:280 +msgid "Editar Campo" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:85 +msgid "Es necesario un nombre de usuario" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:87 +msgid "Es necesario un login" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:89 +msgid "Es necesario un perfil" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:91 +msgid "Es necesario un grupo" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:93 +msgid "Es necesario un email" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:95 +#: ../../../../ajax/ajax_appMgmtSave.php:142 +#: ../../../../ajax/ajax_appMgmtSave.php:157 +#: ../../../../ajax/ajax_configSave.php:265 +#: ../../../../ajax/ajax_import.php:39 ../../../../ajax/ajax_migrate.php:39 +#: ../../../../ajax/ajax_userPrefsSave.php:56 +msgid "Ey, esto es una DEMO!!" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:100 +msgid "Login de usuario duplicado" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:103 +msgid "Email de usuario duplicado" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:122 +msgid "Usuario creado" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:125 +msgid "Error al crear el usuario" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:135 +#: ../../../../inc/UserUtil.class.php:103 +msgid "Usuario actualizado" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:138 +msgid "Error al actualizar el usuario" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:153 +#: ../../../../ajax/ajax_passReset.php:78 +msgid "Error al modificar la clave" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:159 +msgid "No es posible eliminar, usuario en uso" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:163 +msgid "Usuario eliminado" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:166 +msgid "Error al eliminar el usuario" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:181 +msgid "Es necesario un nombre de grupo" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:189 +msgid "Nombre de grupo duplicado" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:201 +msgid "Grupo creado" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:203 +msgid "Error al crear el grupo" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:214 +msgid "Grupo actualizado" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:217 +msgid "Error al actualizar el grupo" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:226 +#: ../../../../ajax/ajax_appMgmtSave.php:303 +#: ../../../../inc/CustomFieldsBase.class.php:83 +#: ../../../../inc/themes/classic/account.inc:109 +#: ../../../../inc/themes/classic/groups.inc:24 +#: ../../../../inc/themes/classic/profiles.inc:85 +#: ../../../../inc/themes/material-blue/account.inc:134 +#: ../../../../inc/themes/material-blue/groups.inc:32 +#: ../../../../inc/themes/material-blue/profiles.inc:99 +msgid "Usuarios" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:230 +#: ../../../../inc/Category.class.php:266 +#: ../../../../inc/CustomFieldsBase.class.php:80 +#: ../../../../inc/Customer.class.php:150 +#: ../../../../inc/themes/classic/profiles.inc:15 +#: ../../../../inc/themes/material-blue/config.inc:139 +#: ../../../../inc/themes/material-blue/profiles.inc:19 +msgid "Cuentas" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:233 +#: ../../../../ajax/ajax_appMgmtSave.php:305 +#: ../../../../inc/Category.class.php:119 +#: ../../../../inc/Customer.class.php:150 +msgid "No es posible eliminar" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:233 +msgid "Grupo en uso por:" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:238 +msgid "Grupo eliminado" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:241 +msgid "Error al eliminar el grupo" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:280 +msgid "Es necesario un nombre de perfil" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:282 +msgid "Nombre de perfil duplicado" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:287 +msgid "Perfil creado" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:290 +msgid "Error al crear el perfil" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:293 +msgid "Perfil actualizado" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:296 +msgid "Error al actualizar el perfil" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:305 +msgid "Perfil en uso por:" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:308 +msgid "Perfil eliminado" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:311 +msgid "Error al eliminar el perfil" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:346 +msgid "Cliente creado" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:361 +msgid "Cliente actualizado" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:371 +msgid "Cliente eliminado" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:385 +msgid "Es necesario un nombre de categoría" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:405 +msgid "Categoría creada" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:420 +msgid "Categoría actualizada" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:431 +msgid "Categoría eliminada" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:447 +msgid "Usuario o acción no indicado" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:457 +msgid "Autorización creada" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:465 +msgid "Autorización actualizada" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:475 +msgid "Autorización eliminada" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:492 +msgid "Nombre del campo no indicado" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:494 +msgid "Tipo del campo no indicado" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:496 +msgid "Módulo del campo no indicado" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:510 +msgid "Campo creado" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:519 +msgid "Campo actualizado" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:529 +msgid "Campo eliminado" +msgstr "" + +#: ../../../../ajax/ajax_backup.php:52 ../../../../ajax/ajax_backup.php:57 +#: ../../../../inc/themes/classic/backup.inc:54 +msgid "Realizar Backup" +msgstr "" + +#: ../../../../ajax/ajax_backup.php:52 ../../../../ajax/ajax_backup.php:54 +msgid "Error al realizar el backup" +msgstr "" + +#: ../../../../ajax/ajax_backup.php:54 ../../../../ajax/ajax_backup.php:68 +#: ../../../../ajax/ajax_checkLdap.php:57 ../../../../inc/Import.class.php:128 +#: ../../../../inc/Migrate.class.php:93 +msgid "Revise el registro de eventos para más detalles" +msgstr "" + +#: ../../../../ajax/ajax_backup.php:57 +msgid "Copia de la aplicación y base de datos realizada correctamente" +msgstr "" + +#: ../../../../ajax/ajax_backup.php:59 +msgid "Proceso de backup finalizado" +msgstr "" + +#: ../../../../ajax/ajax_backup.php:66 ../../../../ajax/ajax_backup.php:71 +msgid "Realizar Exportación" +msgstr "" + +#: ../../../../ajax/ajax_backup.php:66 +msgid "Error al realizar la exportación de cuentas" +msgstr "" + +#: ../../../../ajax/ajax_backup.php:68 +msgid "Error al realizar la exportación" +msgstr "" + +#: ../../../../ajax/ajax_backup.php:71 +msgid "Exportación de cuentas realizada correctamente" +msgstr "" + +#: ../../../../ajax/ajax_backup.php:73 +msgid "Proceso de exportación finalizado" +msgstr "" + +#: ../../../../ajax/ajax_checkLdap.php:51 ../../../../inc/Ldap.class.php:248 +msgid "Los parámetros de LDAP no están configurados" +msgstr "" + +#: ../../../../ajax/ajax_checkLdap.php:57 +msgid "Error de conexión a LDAP" +msgstr "" + +#: ../../../../ajax/ajax_checkLdap.php:59 +msgid "Conexión a LDAP correcta" +msgstr "" + +#: ../../../../ajax/ajax_checkLdap.php:59 +msgid "Objetos encontrados" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:55 +msgid "Modificar Configuración" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:60 +msgid "El tamaño máximo por archivo es de 16MB" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:114 +msgid "Faltan parámetros de Proxy" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:125 +#: ../../../../web/ConfigC.class.php:122 +#: ../../../../inc/themes/classic/profiles.inc:61 +#: ../../../../inc/themes/material-blue/profiles.inc:72 +msgid "General" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:137 +msgid "Faltan parámetros de Wiki" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:147 +#: ../../../../web/ConfigC.class.php:254 +#: ../../../../inc/themes/classic/wiki.inc:4 +#: ../../../../inc/themes/material-blue/wiki.inc:4 +msgid "Wiki" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:164 +msgid "Faltan parámetros de LDAP" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:179 +#: ../../../../web/ConfigC.class.php:286 +#: ../../../../inc/themes/classic/ldap.inc:4 +#: ../../../../inc/themes/material-blue/ldap.inc:4 +msgid "LDAP" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:196 +msgid "Faltan parámetros de Correo" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:216 +#: ../../../../web/ConfigC.class.php:316 +#: ../../../../inc/themes/classic/mail.inc:4 +#: ../../../../inc/themes/material-blue/mail.inc:4 +msgid "Correo" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:226 +msgid "Configuración actualizada" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:235 +#: ../../../../ajax/ajax_configSave.php:275 +#: ../../../../ajax/ajax_viewpass.php:60 +#: ../../../../inc/Controller.class.php:169 +msgid "Clave maestra actualizada" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:235 +#: ../../../../ajax/ajax_viewpass.php:60 +#: ../../../../inc/Controller.class.php:169 +msgid "Reinicie la sesión para cambiarla" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:237 +msgid "Clave maestra no indicada" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:239 +msgid "Se ha de confirmar el cambio de clave" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:241 +msgid "Las claves son idénticas" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:243 +msgid "Las claves maestras no coinciden" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:245 +msgid "La clave maestra actual no coincide" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:254 +msgid "Errores al actualizar las claves de las cuentas" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:260 +msgid "Errores al actualizar las claves de las cuentas del histórico" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:273 +#: ../../../../inc/Account.class.php:497 +msgid "Actualizar Clave Maestra" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:277 +msgid "Error al guardar el hash de la clave maestra" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:285 +msgid "Generar Clave Temporal" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:285 +#: ../../../../inc/themes/classic/account.inc:83 +#: ../../../../inc/themes/classic/editpass.inc:25 +#: ../../../../inc/themes/classic/install.inc:38 +#: ../../../../inc/themes/classic/install.inc:39 +#: ../../../../inc/themes/classic/login.inc:10 +#: ../../../../inc/themes/classic/login.inc:22 +#: ../../../../inc/themes/classic/mail.inc:55 +#: ../../../../inc/themes/classic/passreset.inc:29 +#: ../../../../inc/themes/classic/users.inc:75 +#: ../../../../inc/themes/classic/userspass.inc:8 +#: ../../../../inc/themes/classic/userspass.inc:11 +#: ../../../../inc/themes/material-blue/account.inc:95 +#: ../../../../inc/themes/material-blue/account.inc:100 +#: ../../../../inc/themes/material-blue/config.inc:360 +#: ../../../../inc/themes/material-blue/editpass.inc:26 +#: ../../../../inc/themes/material-blue/editpass.inc:31 +#: ../../../../inc/themes/material-blue/editpass.inc:41 +#: ../../../../inc/themes/material-blue/install.inc:44 +#: ../../../../inc/themes/material-blue/ldap.inc:105 +#: ../../../../inc/themes/material-blue/login.inc:16 +#: ../../../../inc/themes/material-blue/login.inc:38 +#: ../../../../inc/themes/material-blue/mail.inc:73 +#: ../../../../inc/themes/material-blue/mail.inc:80 +#: ../../../../inc/themes/material-blue/passreset.inc:31 +#: ../../../../inc/themes/material-blue/users.inc:89 +#: ../../../../inc/themes/material-blue/users.inc:96 +#: ../../../../inc/themes/material-blue/userspass.inc:8 +#: ../../../../inc/themes/material-blue/userspass.inc:13 +msgid "Clave" +msgstr "" + +#: ../../../../ajax/ajax_configSave.php:287 +msgid "Clave Temporal Generada" +msgstr "" + +#: ../../../../ajax/ajax_doLogin.php:45 +msgid "Usuario/Clave no introducidos" +msgstr "" + +#: ../../../../ajax/ajax_doLogin.php:57 +msgid "Inicio sesión" +msgstr "" + +#: ../../../../ajax/ajax_doLogin.php:62 +msgid "Servidor Login" +msgstr "" + +#: ../../../../ajax/ajax_doLogin.php:68 +msgid "Error al guardar los datos de LDAP" +msgstr "" + +#: ../../../../ajax/ajax_doLogin.php:71 ../../../../ajax/ajax_doLogin.php:79 +#: ../../../../ajax/ajax_doLogin.php:131 ../../../../ajax/ajax_doLogin.php:172 +#: ../../../../inc/ApiTokens.class.php:140 +#: ../../../../inc/ApiTokens.class.php:186 +#: ../../../../inc/ApiTokens.class.php:217 +#: ../../../../inc/ApiTokens.class.php:243 +#: ../../../../inc/ApiTokens.class.php:262 +#: ../../../../inc/ApiTokens.class.php:304 +#: ../../../../inc/ApiTokens.class.php:328 ../../../../inc/Crypt.class.php:235 +#: ../../../../inc/Crypt.class.php:246 +#: ../../../../inc/XmlImportBase.class.php:74 +msgid "Error interno" +msgstr "" + +#: ../../../../ajax/ajax_doLogin.php:76 +msgid "Error al actualizar la clave del usuario en la BBDD" +msgstr "" + +#: ../../../../ajax/ajax_doLogin.php:84 ../../../../ajax/ajax_doLogin.php:109 +msgid "Login incorrecto" +msgstr "" + +#: ../../../../ajax/ajax_doLogin.php:85 ../../../../ajax/ajax_doLogin.php:92 +#: ../../../../ajax/ajax_doLogin.php:99 ../../../../ajax/ajax_doLogin.php:110 +#: ../../../../ajax/ajax_doLogin.php:120 ../../../../ajax/ajax_doLogin.php:167 +#: ../../../../inc/ApiTokens.class.php:190 +#: ../../../../inc/ApiTokens.class.php:308 ../../../../inc/Auth.class.php:112 +#: ../../../../inc/Init.class.php:516 ../../../../inc/UserBase.class.php:382 +#: ../../../../inc/UserBase.class.php:526 ../../../../res/test.php:64 +#: ../../../../web/SearchC.class.php:289 +#: ../../../../web/UsersMgmtC.class.php:392 +#: ../../../../inc/themes/classic/account.inc:70 +#: ../../../../inc/themes/classic/editpass.inc:21 +#: ../../../../inc/themes/classic/eventlog.inc:25 +#: ../../../../inc/themes/classic/info.inc:39 +#: ../../../../inc/themes/classic/install.inc:27 +#: ../../../../inc/themes/classic/install.inc:28 +#: ../../../../inc/themes/classic/login.inc:7 +#: ../../../../inc/themes/classic/login.inc:20 +#: ../../../../inc/themes/classic/mail.inc:47 +#: ../../../../inc/themes/classic/passreset.inc:17 +#: ../../../../inc/themes/classic/request.inc:17 +#: ../../../../inc/themes/classic/search.inc:52 +#: ../../../../inc/themes/classic/tokens.inc:8 +#: ../../../../inc/themes/material-blue/account.inc:80 +#: ../../../../inc/themes/material-blue/config.inc:346 +#: ../../../../inc/themes/material-blue/editpass.inc:22 +#: ../../../../inc/themes/material-blue/eventlog.inc:24 +#: ../../../../inc/themes/material-blue/info.inc:39 +#: ../../../../inc/themes/material-blue/login.inc:10 +#: ../../../../inc/themes/material-blue/login.inc:32 +#: ../../../../inc/themes/material-blue/mail.inc:61 +#: ../../../../inc/themes/material-blue/mail.inc:67 +#: ../../../../inc/themes/material-blue/passreset.inc:17 +#: ../../../../inc/themes/material-blue/request.inc:20 +#: ../../../../inc/themes/material-blue/search.inc:55 +#: ../../../../inc/themes/material-blue/tokens.inc:8 +msgid "Usuario" +msgstr "" + +#: ../../../../ajax/ajax_doLogin.php:88 ../../../../ajax/ajax_doLogin.php:102 +#: ../../../../ajax/ajax_doLogin.php:113 +msgid "Usuario/Clave incorrectos" +msgstr "" + +#: ../../../../ajax/ajax_doLogin.php:91 ../../../../ajax/ajax_doLogin.php:95 +msgid "Cuenta expirada" +msgstr "" + +#: ../../../../ajax/ajax_doLogin.php:98 +msgid "El usuario no tiene grupos asociados" +msgstr "" + +#: ../../../../ajax/ajax_doLogin.php:119 ../../../../ajax/ajax_doLogin.php:123 +msgid "Usuario deshabilitado" +msgstr "" + +#: ../../../../ajax/ajax_doLogin.php:128 +msgid "Error al obtener los datos del usuario de la BBDD" +msgstr "" + +#: ../../../../ajax/ajax_doLogin.php:138 +msgid "La clave maestra no ha sido guardada o es incorrecta" +msgstr "" + +#: ../../../../ajax/ajax_doLogin.php:145 ../../../../ajax/ajax_doLogin.php:148 +msgid "Clave maestra incorrecta" +msgstr "" + +#: ../../../../ajax/ajax_doLogin.php:168 +#: ../../../../inc/ProfileBase.class.php:512 +#: ../../../../inc/ProfileBase.class.php:550 +#: ../../../../inc/ProfileBase.class.php:593 +#: ../../../../web/UsersMgmtC.class.php:89 +#: ../../../../inc/themes/classic/users.inc:37 +#: ../../../../inc/themes/material-blue/users.inc:43 +msgid "Perfil" +msgstr "" + +#: ../../../../ajax/ajax_doLogin.php:169 ../../../../inc/Groups.class.php:158 +#: ../../../../inc/Groups.class.php:259 ../../../../inc/Groups.class.php:375 +#: ../../../../web/UsersMgmtC.class.php:90 +#: ../../../../inc/themes/classic/ldap.inc:116 +#: ../../../../inc/themes/classic/users.inc:49 +#: ../../../../inc/themes/material-blue/ldap.inc:139 +#: ../../../../inc/themes/material-blue/ldap.inc:164 +#: ../../../../inc/themes/material-blue/users.inc:57 +msgid "Grupo" +msgstr "" + +#: ../../../../ajax/ajax_files.php:45 ../../../../ajax/ajax_getFiles.php:39 +msgid "Gestión de archivos deshabilitada" +msgstr "" + +#: ../../../../ajax/ajax_files.php:59 ../../../../inc/Files.class.php:63 +msgid "Subir Archivo" +msgstr "" + +#: ../../../../ajax/ajax_files.php:68 +msgid "No hay extensiones permitidas" +msgstr "" + +#: ../../../../ajax/ajax_files.php:79 ../../../../inc/FileImport.class.php:115 +msgid "Tipo de archivo no soportado" +msgstr "" + +#: ../../../../ajax/ajax_files.php:85 +msgid "Archivo inválido" +msgstr "" + +#: ../../../../ajax/ajax_files.php:101 ../../../../ajax/ajax_files.php:118 +#: ../../../../inc/FileImport.class.php:131 +#: ../../../../inc/FileImport.class.php:149 +#: ../../../../inc/FileImport.class.php:167 +msgid "Error interno al leer el archivo" +msgstr "" + +#: ../../../../ajax/ajax_files.php:108 +msgid "El archivo es mayor de " +msgstr "" + +#: ../../../../ajax/ajax_files.php:125 +msgid "Archivo guardado" +msgstr "" + +#: ../../../../ajax/ajax_files.php:130 +msgid "No se pudo guardar el archivo" +msgstr "" + +#: ../../../../ajax/ajax_files.php:140 ../../../../ajax/ajax_files.php:199 +msgid "No es un ID de archivo válido" +msgstr "" + +#: ../../../../ajax/ajax_files.php:148 +msgid "El archivo no existe" +msgstr "" + +#: ../../../../ajax/ajax_files.php:157 +#: ../../../../inc/themes/classic/files.inc:19 +#: ../../../../inc/themes/material-blue/files.inc:19 +msgid "Descargar Archivo" +msgstr "" + +#: ../../../../ajax/ajax_files.php:158 ../../../../ajax/ajax_viewpass.php:69 +#: ../../../../inc/Files.class.php:112 +#: ../../../../inc/themes/classic/eventlog.inc:16 +#: ../../../../inc/themes/material-blue/eventlog.inc:15 +msgid "ID" +msgstr "" + +#: ../../../../ajax/ajax_files.php:159 ../../../../inc/Files.class.php:65 +#: ../../../../inc/Files.class.php:113 +#: ../../../../inc/themes/classic/import.inc:155 +#: ../../../../inc/themes/material-blue/import.inc:83 +msgid "Archivo" +msgstr "" + +#: ../../../../ajax/ajax_files.php:160 ../../../../inc/Files.class.php:66 +#: ../../../../inc/Files.class.php:114 +#: ../../../../web/AccountsMgmtC.class.php:266 +#: ../../../../inc/themes/classic/customfields.inc:16 +#: ../../../../inc/themes/material-blue/customfields.inc:19 +msgid "Tipo" +msgstr "" + +#: ../../../../ajax/ajax_files.php:161 ../../../../inc/Files.class.php:67 +#: ../../../../inc/Files.class.php:115 +msgid "Tamaño" +msgstr "" + +#: ../../../../ajax/ajax_files.php:203 +msgid "Archivo eliminado" +msgstr "" + +#: ../../../../ajax/ajax_files.php:208 +msgid "Error al eliminar el archivo" +msgstr "" + +#: ../../../../ajax/ajax_getContent.php:41 +#: ../../../../inc/ApiRequest.class.php:55 +#: ../../../../inc/CustomFieldDef.class.php:38 +#: ../../../../inc/CustomFields.class.php:48 +msgid "Parámetros incorrectos" +msgstr "" + +#: ../../../../ajax/ajax_migrate.php:55 +msgid "Confirmar la importación de cuentas" +msgstr "" + +#: ../../../../ajax/ajax_migrate.php:57 +msgid "Es necesario un usuario de conexión" +msgstr "" + +#: ../../../../ajax/ajax_migrate.php:59 +msgid "Es necesaria una clave de conexión" +msgstr "" + +#: ../../../../ajax/ajax_migrate.php:61 +msgid "Es necesario el nombre de la BBDD" +msgstr "" + +#: ../../../../ajax/ajax_migrate.php:63 +msgid "Es necesario un nombre de host" +msgstr "" + +#: ../../../../ajax/ajax_passReset.php:47 +#: ../../../../ajax/ajax_passReset.php:50 +msgid "Recuperación de Clave" +msgstr "" + +#: ../../../../ajax/ajax_passReset.php:53 +#: ../../../../ajax/ajax_passReset.php:58 +msgid "Solicitado para" +msgstr "" + +#: ../../../../ajax/ajax_passReset.php:55 +#: ../../../../ajax/ajax_sendRequest.php:75 +msgid "Solicitud enviada" +msgstr "" + +#: ../../../../ajax/ajax_passReset.php:55 +msgid "En breve recibirá un correo para completar la solicitud." +msgstr "" + +#: ../../../../ajax/ajax_passReset.php:60 +msgid "No se ha podido realizar la solicitud. Consulte con el administrador." +msgstr "" + +#: ../../../../ajax/ajax_passReset.php:72 +#: ../../../../inc/UserBase.class.php:568 +#: ../../../../inc/UserUtil.class.php:686 +msgid "Modificar Clave Usuario" +msgstr "" + +#: ../../../../ajax/ajax_passReset.php:72 +#: ../../../../inc/UserBase.class.php:568 +#: ../../../../inc/UserBase.class.php:592 +#: ../../../../inc/UserUtil.class.php:686 +#: ../../../../web/UsersMgmtC.class.php:88 +#: ../../../../inc/themes/classic/users.inc:21 +#: ../../../../inc/themes/material-blue/users.inc:24 +msgid "Login" +msgstr "" + +#: ../../../../ajax/ajax_passReset.php:80 +msgid "La clave es incorrecta o no coincide" +msgstr "" + +#: ../../../../ajax/ajax_sendRequest.php:48 +msgid "Es necesaria una descripción" +msgstr "" + +#: ../../../../ajax/ajax_sendRequest.php:61 +msgid "Solicitud de Modificación de Cuenta" +msgstr "" + +#: ../../../../ajax/ajax_sendRequest.php:62 +msgid "Solicitante" +msgstr "" + +#: ../../../../ajax/ajax_sendRequest.php:63 +#: ../../../../ajax/ajax_viewpass.php:70 ../../../../inc/Account.class.php:165 +#: ../../../../inc/Account.class.php:219 ../../../../inc/Account.class.php:402 +#: ../../../../inc/Account.class.php:425 ../../../../inc/Account.class.php:667 +#: ../../../../inc/Files.class.php:64 +msgid "Cuenta" +msgstr "" + +#: ../../../../ajax/ajax_sendRequest.php:64 +#: ../../../../inc/Account.class.php:164 ../../../../inc/Account.class.php:218 +#: ../../../../inc/Account.class.php:401 ../../../../inc/Account.class.php:424 +#: ../../../../inc/Account.class.php:666 ../../../../inc/Customer.class.php:65 +#: ../../../../inc/Customer.class.php:115 +#: ../../../../inc/Customer.class.php:163 +#: ../../../../web/SearchC.class.php:271 +#: ../../../../inc/themes/classic/account.inc:23 +#: ../../../../inc/themes/classic/editpass.inc:12 +#: ../../../../inc/themes/classic/request.inc:9 +#: ../../../../inc/themes/classic/search.inc:21 +#: ../../../../inc/themes/material-blue/account.inc:29 +#: ../../../../inc/themes/material-blue/editpass.inc:13 +#: ../../../../inc/themes/material-blue/request.inc:10 +#: ../../../../inc/themes/material-blue/search.inc:24 +msgid "Cliente" +msgstr "" + +#: ../../../../ajax/ajax_sendRequest.php:65 +#: ../../../../web/AccountsMgmtC.class.php:79 +#: ../../../../web/AccountsMgmtC.class.php:138 +#: ../../../../web/UsersMgmtC.class.php:187 +#: ../../../../inc/themes/classic/categories.inc:16 +#: ../../../../inc/themes/classic/customers.inc:16 +#: ../../../../inc/themes/classic/eventlog.inc:31 +#: ../../../../inc/themes/classic/groups.inc:16 +#: ../../../../inc/themes/material-blue/categories.inc:20 +#: ../../../../inc/themes/material-blue/customers.inc:20 +#: ../../../../inc/themes/material-blue/eventlog.inc:30 +#: ../../../../inc/themes/material-blue/groups.inc:20 +msgid "Descripción" +msgstr "" + +#: ../../../../ajax/ajax_sendRequest.php:78 +msgid "Error al enviar la solicitud" +msgstr "" + +#: ../../../../ajax/ajax_userPrefsSave.php:75 +msgid "Error al actualizar preferencias" +msgstr "" + +#: ../../../../ajax/ajax_userPrefsSave.php:78 +msgid "Preferencias actualizadas" +msgstr "" + +#: ../../../../ajax/ajax_viewpass.php:54 +msgid "La clave maestra no coincide" +msgstr "" + +#: ../../../../ajax/ajax_viewpass.php:58 +#: ../../../../inc/Controller.class.php:166 +msgid "No tiene permisos para acceder a esta cuenta" +msgstr "" + +#: ../../../../ajax/ajax_viewpass.php:68 ../../../../inc/Acl.class.php:133 +#: ../../../../inc/themes/classic/account.inc:379 +#: ../../../../inc/themes/classic/profiles.inc:23 +#: ../../../../inc/themes/classic/search.inc:102 +#: ../../../../inc/themes/material-blue/account.inc:418 +#: ../../../../inc/themes/material-blue/profiles.inc:35 +#: ../../../../inc/themes/material-blue/search.inc:113 +msgid "Ver Clave" +msgstr "" + +#: ../../../../ajax/ajax_viewpass.php:79 +msgid "Clave de Cuenta" +msgstr "" + +#: ../../../../api.php:56 +msgid "Ayuda Parámetros" +msgstr "" + +#: ../../../../inc/Account.class.php:28 +#: ../../../../inc/AccountBase.class.php:28 +#: ../../../../inc/AccountHistory.class.php:28 +#: ../../../../inc/AccountInterface.class.php:28 +#: ../../../../inc/AccountSearch.class.php:28 ../../../../inc/Acl.class.php:29 +#: ../../../../inc/Api.class.php:30 ../../../../inc/ApiRequest.class.php:28 +#: ../../../../inc/ApiTokens.class.php:28 ../../../../inc/Auth.class.php:29 +#: ../../../../inc/Auth2FA.class.php:30 ../../../../inc/Backup.class.php:28 +#: ../../../../inc/Category.class.php:29 ../../../../inc/Common.class.php:28 +#: ../../../../inc/Config.class.php:28 ../../../../inc/Controller.class.php:31 +#: ../../../../inc/Crypt.class.php:28 ../../../../inc/CsvImport.class.php:28 +#: ../../../../inc/CsvImportBase.class.php:28 +#: ../../../../inc/Customer.class.php:29 ../../../../inc/DB.class.php:28 +#: ../../../../inc/DBConnectionFactory.class.php:30 +#: ../../../../inc/FileImport.class.php:28 ../../../../inc/Files.class.php:29 +#: ../../../../inc/Groups.class.php:29 ../../../../inc/Html.class.php:28 +#: ../../../../inc/ImageUtil.class.php:28 ../../../../inc/Import.class.php:29 +#: ../../../../inc/ImportBase.class.php:28 ../../../../inc/Init.class.php:30 +#: ../../../../inc/Installer.class.php:29 +#: ../../../../inc/KeepassImport.class.php:28 +#: ../../../../inc/KeepassXImport.class.php:28 +#: ../../../../inc/Ldap.class.php:29 ../../../../inc/LdapADS.class.php:28 +#: ../../../../inc/Log.class.php:28 ../../../../inc/Migrate.class.php:28 +#: ../../../../inc/Profile.class.php:29 +#: ../../../../inc/ProfileBase.class.php:28 +#: ../../../../inc/Request.class.php:111 ../../../../inc/Session.class.php:28 +#: ../../../../inc/SyspassImport.class.php:28 +#: ../../../../inc/Upgrade.class.php:29 ../../../../inc/User.class.php:28 +#: ../../../../inc/UserLdap.class.php:28 +#: ../../../../inc/UserPreferences.class.php:28 +#: ../../../../inc/UserUtil.class.php:28 ../../../../inc/Util.class.php:30 +#: ../../../../inc/XmlImport.class.php:28 +#: ../../../../inc/XmlImportBase.class.php:28 +#: ../../../../web/AccountC.class.php:38 +#: ../../../../web/AccountsMgmtC.class.php:32 +#: ../../../../web/ConfigC.class.php:30 ../../../../web/EventlogC.class.php:28 +#: ../../../../web/SearchC.class.php:30 +#: ../../../../web/UsersMgmtC.class.php:39 +#: ../../../../web/UsersPrefsC.class.php:32 +msgid "No es posible acceder directamente a este archivo" +msgstr "" + +#: ../../../../inc/Account.class.php:112 ../../../../inc/Account.class.php:185 +#: ../../../../inc/Account.class.php:636 +msgid "Error al actualizar el historial" +msgstr "" + +#: ../../../../inc/Account.class.php:117 +msgid "Actualizar Cuenta" +msgstr "" + +#: ../../../../inc/Account.class.php:120 ../../../../inc/Account.class.php:383 +msgid "Error al actualizar los grupos secundarios" +msgstr "" + +#: ../../../../inc/Account.class.php:126 ../../../../inc/Account.class.php:391 +msgid "Error al actualizar los usuarios de la cuenta" +msgstr "" + +#: ../../../../inc/Account.class.php:217 +msgid "Restaurar Cuenta" +msgstr "" + +#: ../../../../inc/Account.class.php:326 +#: ../../../../inc/AccountHistory.class.php:343 +#: ../../../../inc/AccountHistory.class.php:505 +msgid "No se pudieron obtener los datos de la cuenta" +msgstr "" + +#: ../../../../inc/Account.class.php:400 ../../../../inc/Acl.class.php:129 +#: ../../../../web/AccountC.class.php:147 ../../../../web/MainC.class.php:155 +msgid "Nueva Cuenta" +msgstr "" + +#: ../../../../inc/Account.class.php:418 +msgid "ERROR: Error en la operación." +msgstr "" + +#: ../../../../inc/Account.class.php:423 ../../../../inc/Acl.class.php:134 +#: ../../../../web/AccountC.class.php:352 +#: ../../../../inc/themes/classic/account.inc:366 +#: ../../../../inc/themes/classic/search.inc:129 +#: ../../../../inc/themes/material-blue/account.inc:412 +#: ../../../../inc/themes/material-blue/search.inc:142 +msgid "Eliminar Cuenta" +msgstr "" + +#: ../../../../inc/Account.class.php:436 +msgid "Error al eliminar grupos asociados a la cuenta" +msgstr "" + +#: ../../../../inc/Account.class.php:440 +msgid "Error al eliminar usuarios asociados a la cuenta" +msgstr "" + +#: ../../../../inc/Account.class.php:444 +msgid "Error al eliminar archivos asociados a la cuenta" +msgstr "" + +#: ../../../../inc/Account.class.php:498 +#: ../../../../inc/AccountHistory.class.php:124 +#: ../../../../inc/XmlImport.class.php:62 +msgid "Inicio" +msgstr "" + +#: ../../../../inc/Account.class.php:503 +#: ../../../../inc/AccountHistory.class.php:130 +msgid "Error en el módulo de encriptación" +msgstr "" + +#: ../../../../inc/Account.class.php:511 +#: ../../../../inc/AccountHistory.class.php:138 +msgid "Error al obtener las claves de las cuentas" +msgstr "" + +#: ../../../../inc/Account.class.php:527 +#: ../../../../inc/AccountHistory.class.php:160 +msgid "Clave de cuenta vacía" +msgstr "" + +#: ../../../../inc/Account.class.php:532 +#: ../../../../inc/AccountHistory.class.php:165 +msgid "IV de encriptación incorrecto" +msgstr "" + +#: ../../../../inc/Account.class.php:541 +#: ../../../../inc/AccountHistory.class.php:174 +msgid "No es posible desencriptar la clave de la cuenta" +msgstr "" + +#: ../../../../inc/Account.class.php:547 +msgid "Fallo al actualizar la clave de la cuenta" +msgstr "" + +#: ../../../../inc/Account.class.php:561 +msgid "Cuentas actualizadas" +msgstr "" + +#: ../../../../inc/Account.class.php:566 +#: ../../../../inc/AccountHistory.class.php:199 +msgid "Fin" +msgstr "" + +#: ../../../../inc/Account.class.php:665 +msgid "Modificar Clave" +msgstr "" + +#: ../../../../inc/Account.class.php:700 +msgid "No se pudieron obtener los datos de las cuentas" +msgstr "" + +#: ../../../../inc/AccountHistory.class.php:123 +msgid "Actualizar Clave Maestra (H)" +msgstr "" + +#: ../../../../inc/AccountHistory.class.php:155 +msgid "La clave maestra del registro no coincide" +msgstr "" + +#: ../../../../inc/AccountHistory.class.php:180 +msgid "Fallo al actualizar la clave del histórico" +msgstr "" + +#: ../../../../inc/AccountHistory.class.php:194 +msgid "Registros actualizados" +msgstr "" + +#: ../../../../inc/Acl.class.php:112 +msgid "Denegado acceso a" +msgstr "" + +#: ../../../../inc/Acl.class.php:126 +msgid "Buscar Cuentas" +msgstr "" + +#: ../../../../inc/Acl.class.php:127 +msgid "Ver Cuenta" +msgstr "" + +#: ../../../../inc/Acl.class.php:128 ../../../../web/AccountC.class.php:259 +#: ../../../../inc/themes/classic/search.inc:123 +#: ../../../../inc/themes/material-blue/search.inc:136 +msgid "Copiar Cuenta" +msgstr "" + +#: ../../../../inc/Acl.class.php:130 ../../../../web/AccountC.class.php:323 +msgid "Editar Cuenta" +msgstr "" + +#: ../../../../inc/Acl.class.php:131 +msgid "Editar Clave de Cuenta" +msgstr "" + +#: ../../../../inc/Acl.class.php:132 +#: ../../../../inc/themes/classic/profiles.inc:28 +#: ../../../../inc/themes/material-blue/profiles.inc:40 +msgid "Ver Historial" +msgstr "" + +#: ../../../../inc/Acl.class.php:135 +#: ../../../../inc/themes/classic/account.inc:188 +#: ../../../../inc/themes/classic/profiles.inc:50 +#: ../../../../inc/themes/material-blue/account.inc:230 +#: ../../../../inc/themes/material-blue/config.inc:226 +#: ../../../../inc/themes/material-blue/profiles.inc:60 +msgid "Archivos" +msgstr "" + +#: ../../../../inc/Acl.class.php:136 +msgid "Peticiones" +msgstr "" + +#: ../../../../inc/Acl.class.php:137 +msgid "Gestión Aplicación" +msgstr "" + +#: ../../../../inc/Acl.class.php:138 +msgid "Gestión Categorías" +msgstr "" + +#: ../../../../inc/Acl.class.php:139 +msgid "Gestión Clientes" +msgstr "" + +#: ../../../../inc/Acl.class.php:140 +msgid "Gestión Campos Personalizados" +msgstr "" + +#: ../../../../inc/Acl.class.php:141 +msgid "Gestión Autorizaciones API" +msgstr "" + +#: ../../../../inc/Acl.class.php:142 ../../../../inc/Acl.class.php:143 +msgid "Gestión Usuarios" +msgstr "" + +#: ../../../../inc/Acl.class.php:144 +msgid "Gestión Grupos" +msgstr "" + +#: ../../../../inc/Acl.class.php:145 +msgid "Gestión Perfiles" +msgstr "" + +#: ../../../../inc/Acl.class.php:146 ../../../../inc/Config.class.php:118 +#: ../../../../inc/Config.class.php:400 ../../../../web/MainC.class.php:173 +#: ../../../../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:145 +#: ../../../../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:187 +#: ../../../../inc/themes/classic/backup.inc:4 +#: ../../../../inc/themes/material-blue/backup.inc:4 +msgid "Copia de Seguridad" +msgstr "" + +#: ../../../../inc/Acl.class.php:150 +msgid "Exportar" +msgstr "" + +#: ../../../../inc/Acl.class.php:151 +#: ../../../../inc/themes/classic/profiles.inc:74 +#: ../../../../inc/themes/material-blue/profiles.inc:87 +msgid "Importar" +msgstr "" + +#: ../../../../inc/Api.class.php:65 ../../../../inc/Api.class.php:88 +#: ../../../../inc/Api.class.php:126 +msgid "Acceso no permitido" +msgstr "" + +#: ../../../../inc/Api.class.php:166 +msgid "Error de codificación" +msgstr "" + +#: ../../../../inc/ApiRequest.class.php:102 +msgid "Token de autorización" +msgstr "" + +#: ../../../../inc/ApiRequest.class.php:103 +msgid "Acción a realizar" +msgstr "" + +#: ../../../../inc/ApiRequest.class.php:104 +msgid "Clave de usuario (opcional)" +msgstr "" + +#: ../../../../inc/ApiRequest.class.php:105 +msgid "Cadena a buscar" +msgstr "" + +#: ../../../../inc/ApiRequest.class.php:106 +msgid "Numero de cuentas a mostar en la búsqueda" +msgstr "" + +#: ../../../../inc/ApiRequest.class.php:107 +msgid "Item a devolver" +msgstr "" + +#: ../../../../inc/ApiTokens.class.php:221 +msgid "La autorización ya existe" +msgstr "" + +#: ../../../../inc/ApiTokens.class.php:307 +msgid "Actualizar Autorización" +msgstr "" + +#: ../../../../inc/ApiTokens.class.php:331 +#: ../../../../web/UsersMgmtC.class.php:421 +msgid "Eliminar Autorización" +msgstr "" + +#: ../../../../inc/Auth.class.php:111 +msgid "Usuario no pertenece al grupo" +msgstr "" + +#: ../../../../inc/Auth.class.php:191 +#: ../../../../inc/themes/classic/users.inc:117 +#: ../../../../inc/themes/classic/userspass.inc:2 +#: ../../../../inc/themes/material-blue/users.inc:161 +#: ../../../../inc/themes/material-blue/userspass.inc:2 +msgid "Cambio de Clave" +msgstr "" + +#: ../../../../inc/Auth.class.php:193 +msgid "Se ha solicitado el cambio de su clave de usuario." +msgstr "" + +#: ../../../../inc/Auth.class.php:195 +msgid "Para completar el proceso es necesario que acceda a la siguiente URL:" +msgstr "" + +#: ../../../../inc/Auth.class.php:199 +msgid "Si no ha solicitado esta acción, ignore este mensaje." +msgstr "" + +#: ../../../../inc/Backup.class.php:161 +msgid "Esta operación sólo es posible en entornos Linux" +msgstr "" + +#: ../../../../inc/Backup.class.php:163 +msgid "Error al realizar backup en modo compatibilidad" +msgstr "" + +#: ../../../../inc/Backup.class.php:217 +msgid "No es posible crear el directorio de backups" +msgstr "" + +#: ../../../../inc/Backup.class.php:222 +msgid "Compruebe los permisos del directorio de backups" +msgstr "" + +#: ../../../../inc/Category.class.php:69 +#: ../../../../inc/Category.class.php:165 +msgid "Nombre de categoría duplicado" +msgstr "" + +#: ../../../../inc/Category.class.php:78 +msgid "Error al crear la categoría" +msgstr "" + +#: ../../../../inc/Category.class.php:83 +#: ../../../../inc/Category.class.php:132 +#: ../../../../inc/Category.class.php:182 +#: ../../../../web/SearchC.class.php:283 +#: ../../../../inc/themes/classic/account.inc:42 +#: ../../../../inc/themes/classic/search.inc:46 +#: ../../../../inc/themes/material-blue/account.inc:50 +#: ../../../../inc/themes/material-blue/search.inc:49 +msgid "Categoría" +msgstr "" + +#: ../../../../inc/Category.class.php:119 +msgid "Categoría en uso por:" +msgstr "" + +#: ../../../../inc/Category.class.php:129 +msgid "Error al eliminar la categoría" +msgstr "" + +#: ../../../../inc/Category.class.php:132 +#: ../../../../web/AccountsMgmtC.class.php:101 +msgid "Eliminar Categoría" +msgstr "" + +#: ../../../../inc/Category.class.php:179 +msgid "Error al actualizar la categoría" +msgstr "" + +#: ../../../../inc/Category.class.php:182 +msgid "Modificar Categoría" +msgstr "" + +#: ../../../../inc/Config.class.php:118 ../../../../inc/Config.class.php:401 +msgid "Modificar configuración" +msgstr "" + +#: ../../../../inc/Config.class.php:276 +msgid "No es posible escribir el archivo de configuración" +msgstr "" + +#: ../../../../inc/Config.class.php:276 +msgid "Compruebe los permisos del directorio \"config\"" +msgstr "" + +#: ../../../../inc/Config.class.php:402 +msgid "Parámetro" +msgstr "" + +#: ../../../../inc/Config.class.php:403 +msgid "Valor" +msgstr "" + +#: ../../../../inc/Controller.class.php:165 +msgid "Opción no disponible" +msgstr "" + +#: ../../../../inc/Controller.class.php:165 +#: ../../../../inc/Controller.class.php:166 +#: ../../../../inc/Controller.class.php:167 +#: ../../../../inc/Controller.class.php:168 ../../../../inc/Init.class.php:289 +msgid "Consulte con el administrador" +msgstr "" + +#: ../../../../inc/Controller.class.php:167 +msgid "No tiene permisos para acceder a esta página" +msgstr "" + +#: ../../../../inc/Controller.class.php:168 +msgid "No tiene permisos para realizar esta operación" +msgstr "" + +#: ../../../../inc/Crypt.class.php:236 +msgid "No se puede usar el módulo de encriptación" +msgstr "" + +#: ../../../../inc/Crypt.class.php:247 +msgid "Error al generar datos cifrados" +msgstr "" + +#: ../../../../inc/CsvImportBase.class.php:109 +#, php-format +msgid "El número de campos es incorrecto (%d)" +msgstr "" + +#: ../../../../inc/CsvImportBase.class.php:110 +#, php-format +msgid "Compruebe el formato del archivo CSV en línea %s" +msgstr "" + +#: ../../../../inc/CsvImportBase.class.php:140 +#: ../../../../inc/CsvImportBase.class.php:145 +#: ../../../../inc/Import.class.php:118 ../../../../inc/Import.class.php:124 +#: ../../../../inc/Migrate.class.php:349 +#: ../../../../inc/XmlImport.class.php:62 +#: ../../../../inc/XmlImport.class.php:63 +#: ../../../../web/ConfigC.class.php:209 +msgid "Importar Cuentas" +msgstr "" + +#: ../../../../inc/CsvImportBase.class.php:141 +msgid "Error importando cuenta" +msgstr "" + +#: ../../../../inc/CsvImportBase.class.php:142 +#, php-format +msgid "Error procesando línea %s" +msgstr "" + +#: ../../../../inc/CsvImportBase.class.php:145 +#, php-format +msgid "Cuenta importada: %s" +msgstr "" + +#: ../../../../inc/CustomFieldsBase.class.php:81 +#: ../../../../inc/themes/classic/profiles.inc:98 +#: ../../../../inc/themes/material-blue/profiles.inc:114 +msgid "Categorías" +msgstr "" + +#: ../../../../inc/CustomFieldsBase.class.php:82 +#: ../../../../inc/themes/classic/profiles.inc:103 +#: ../../../../inc/themes/material-blue/profiles.inc:119 +msgid "Clientes" +msgstr "" + +#: ../../../../inc/CustomFieldsBase.class.php:84 +#: ../../../../inc/themes/classic/account.inc:140 +#: ../../../../inc/themes/classic/profiles.inc:89 +#: ../../../../inc/themes/material-blue/account.inc:166 +#: ../../../../inc/themes/material-blue/profiles.inc:104 +msgid "Grupos" +msgstr "" + +#: ../../../../inc/Customer.class.php:50 ../../../../inc/Customer.class.php:95 +msgid "Cliente duplicado" +msgstr "" + +#: ../../../../inc/Customer.class.php:60 +msgid "Error al crear el cliente" +msgstr "" + +#: ../../../../inc/Customer.class.php:112 +msgid "Error al actualizar el cliente" +msgstr "" + +#: ../../../../inc/Customer.class.php:115 +msgid "Actualizar Cliente" +msgstr "" + +#: ../../../../inc/Customer.class.php:150 +msgid "Cliente en uso por:" +msgstr "" + +#: ../../../../inc/Customer.class.php:160 +msgid "Error al eliminar el cliente" +msgstr "" + +#: ../../../../inc/Customer.class.php:163 +#: ../../../../web/AccountsMgmtC.class.php:159 +msgid "Eliminar Cliente" +msgstr "" + +#: ../../../../inc/DBConnectionFactory.class.php:87 +#: ../../../../inc/DBConnectionFactory.class.php:89 +#: ../../../../inc/DBConnectionFactory.class.php:103 +#: ../../../../inc/Installer.class.php:235 +#: ../../../../inc/Migrate.class.php:115 +msgid "No es posible conectar con la BD" +msgstr "" + +#: ../../../../inc/DBConnectionFactory.class.php:87 +#: ../../../../inc/DBConnectionFactory.class.php:89 +#: ../../../../inc/Installer.class.php:236 +#: ../../../../inc/Migrate.class.php:116 +msgid "Compruebe los datos de conexión" +msgstr "" + +#: ../../../../inc/Email.class.php:59 ../../../../inc/UserUtil.class.php:589 +msgid "N/D" +msgstr "" + +#: ../../../../inc/Email.class.php:60 ../../../../web/UsersMgmtC.class.php:392 +#: ../../../../inc/themes/classic/tokens.inc:20 +#: ../../../../inc/themes/material-blue/tokens.inc:20 +msgid "Acción" +msgstr "" + +#: ../../../../inc/Email.class.php:61 +msgid "Realizado por" +msgstr "" + +#: ../../../../inc/Email.class.php:77 +msgid "Enviar Email" +msgstr "" + +#: ../../../../inc/Email.class.php:81 +msgid "Correo enviado" +msgstr "" + +#: ../../../../inc/Email.class.php:83 +msgid "Error al enviar correo" +msgstr "" + +#: ../../../../inc/Email.class.php:87 +msgid "Destinatario" +msgstr "" + +#: ../../../../inc/Email.class.php:90 +msgid "CC" +msgstr "" + +#: ../../../../inc/Email.class.php:146 +msgid "Aviso" +msgstr "" + +#: ../../../../inc/FileImport.class.php:105 +msgid "Archivo no subido correctamente" +msgstr "" + +#: ../../../../inc/FileImport.class.php:105 +msgid "Verifique los permisos del usuario del servidor web" +msgstr "" + +#: ../../../../inc/FileImport.class.php:116 +msgid "Compruebe la extensión del archivo" +msgstr "" + +#: ../../../../inc/FileImport.class.php:132 +msgid "Compruebe la configuración de PHP para subir archivos" +msgstr "" + +#: ../../../../inc/FileImport.class.php:150 +#: ../../../../inc/FileImport.class.php:168 +msgid "Compruebe los permisos del directorio temporal" +msgstr "" + +#: ../../../../inc/Files.class.php:111 +#: ../../../../inc/themes/classic/files.inc:15 +#: ../../../../inc/themes/material-blue/files.inc:16 +msgid "Eliminar Archivo" +msgstr "" + +#: ../../../../inc/Groups.class.php:155 +msgid "Error al añadir los usuarios del grupo" +msgstr "" + +#: ../../../../inc/Groups.class.php:256 +msgid "Error al actualizar los usuarios del grupo" +msgstr "" + +#: ../../../../inc/Groups.class.php:369 +#: ../../../../web/UsersMgmtC.class.php:209 +msgid "Eliminar Grupo" +msgstr "" + +#: ../../../../inc/Groups.class.php:372 +msgid "Error al eliminar los usuarios del grupo" +msgstr "" + +#: ../../../../inc/Import.class.php:109 +msgid "Tipo mime no soportado" +msgstr "" + +#: ../../../../inc/Import.class.php:110 +msgid "Compruebe el formato del archivo" +msgstr "" + +#: ../../../../inc/Import.class.php:124 ../../../../inc/Import.class.php:127 +#: ../../../../inc/Migrate.class.php:92 +msgid "Importación finalizada" +msgstr "" + +#: ../../../../inc/Init.class.php:196 +msgid "Error en la verificación de la base de datos" +msgstr "" + +#: ../../../../inc/Init.class.php:285 +msgid "Sesion" +msgstr "" + +#: ../../../../inc/Init.class.php:285 ../../../../inc/Init.class.php:289 +msgid "La sesión no puede ser inicializada" +msgstr "" + +#: ../../../../inc/Init.class.php:416 +msgid "El directorio \"/config\" no existe" +msgstr "" + +#: ../../../../inc/Init.class.php:421 +msgid "No es posible escribir en el directorio \"config\"" +msgstr "" + +#: ../../../../inc/Init.class.php:429 +msgid "Los permisos del directorio \"/config\" son incorrectos" +msgstr "" + +#: ../../../../inc/Init.class.php:429 +msgid "Actual:" +msgstr "" + +#: ../../../../inc/Init.class.php:429 +msgid "Necesario: 750" +msgstr "" + +#: ../../../../inc/Init.class.php:478 +msgid "Aplicación en mantenimiento" +msgstr "" + +#: ../../../../inc/Init.class.php:478 +msgid "En breve estará operativa" +msgstr "" + +#: ../../../../inc/Init.class.php:515 +msgid "Finalizar sesión" +msgstr "" + +#: ../../../../inc/Init.class.php:517 +msgid "Tiempo inactivo" +msgstr "" + +#: ../../../../inc/Init.class.php:518 +msgid "Tiempo total" +msgstr "" + +#: ../../../../inc/Init.class.php:557 +msgid "La aplicación necesita actualizarse" +msgstr "" + +#: ../../../../inc/Init.class.php:557 +#, php-format +msgid "Si es un administrador pulse en el enlace: %s" +msgstr "" + +#: ../../../../inc/Init.class.php:557 +#: ../../../../inc/themes/classic/upgrade.inc:20 +#: ../../../../inc/themes/material-blue/upgrade.inc:25 +msgid "Actualizar" +msgstr "" + +#: ../../../../inc/Init.class.php:588 +msgid "Actualización" +msgstr "" + +#: ../../../../inc/Init.class.php:589 +msgid "Actualización de versión realizada." +msgstr "" + +#: ../../../../inc/Init.class.php:590 +#: ../../../../inc/themes/classic/info.inc:33 +#: ../../../../inc/themes/material-blue/info.inc:33 +msgid "Versión" +msgstr "" + +#: ../../../../inc/Installer.class.php:127 +msgid "Indicar nombre de usuario admin" +msgstr "" + +#: ../../../../inc/Installer.class.php:128 +msgid "Usuario admin para acceso a la aplicación" +msgstr "" + +#: ../../../../inc/Installer.class.php:132 +msgid "Indicar la clave de admin" +msgstr "" + +#: ../../../../inc/Installer.class.php:133 +msgid "Clave del usuario admin de la aplicación" +msgstr "" + +#: ../../../../inc/Installer.class.php:137 +msgid "Indicar la clave maestra" +msgstr "" + +#: ../../../../inc/Installer.class.php:138 +msgid "Clave maestra para encriptar las claves" +msgstr "" + +#: ../../../../inc/Installer.class.php:142 +msgid "Clave maestra muy corta" +msgstr "" + +#: ../../../../inc/Installer.class.php:143 +msgid "La longitud de la clave maestra ha de ser mayor de 11 caracteres" +msgstr "" + +#: ../../../../inc/Installer.class.php:147 +msgid "Indicar el usuario de la BBDD" +msgstr "" + +#: ../../../../inc/Installer.class.php:148 +msgid "Usuario con permisos de administrador de la Base de Datos" +msgstr "" + +#: ../../../../inc/Installer.class.php:152 +msgid "Indicar la clave de la BBDD" +msgstr "" + +#: ../../../../inc/Installer.class.php:153 +msgid "Clave del usuario administrador de la Base de Datos" +msgstr "" + +#: ../../../../inc/Installer.class.php:157 +msgid "Indicar el nombre de la BBDD" +msgstr "" + +#: ../../../../inc/Installer.class.php:158 +msgid "Nombre para la BBDD de la aplicación pej. syspass" +msgstr "" + +#: ../../../../inc/Installer.class.php:162 +msgid "El nombre de la BBDD no puede contener \".\"" +msgstr "" + +#: ../../../../inc/Installer.class.php:163 +msgid "Elimine los puntos del nombre de la Base de Datos" +msgstr "" + +#: ../../../../inc/Installer.class.php:167 +msgid "Indicar el servidor de la BBDD" +msgstr "" + +#: ../../../../inc/Installer.class.php:168 +msgid "Servidor donde se instalará la Base de Datos" +msgstr "" + +#: ../../../../inc/Installer.class.php:313 +msgid "El usuario de MySQL ya existe" +msgstr "" + +#: ../../../../inc/Installer.class.php:314 +msgid "Indique un nuevo usuario o elimine el existente" +msgstr "" + +#: ../../../../inc/Installer.class.php:327 +msgid "La BBDD ya existe" +msgstr "" + +#: ../../../../inc/Installer.class.php:328 +msgid "Indique una nueva Base de Datos o elimine la existente" +msgstr "" + +#: ../../../../inc/Installer.class.php:337 +#: ../../../../inc/Installer.class.php:408 +msgid "Error al crear la BBDD" +msgstr "" + +#: ../../../../inc/Installer.class.php:338 +#: ../../../../inc/Installer.class.php:349 +msgid "Verifique los permisos del usuario de la Base de Datos" +msgstr "" + +#: ../../../../inc/Installer.class.php:348 +msgid "Error al establecer permisos de la BBDD" +msgstr "" + +#: ../../../../inc/Installer.class.php:381 +msgid "El archivo de estructura de la BBDD no existe" +msgstr "" + +#: ../../../../inc/Installer.class.php:382 +msgid "No es posible crear la BBDD de la aplicación. Descárguela de nuevo." +msgstr "" + +#: ../../../../inc/Installer.class.php:390 +msgid "Error al seleccionar la BBDD" +msgstr "" + +#: ../../../../inc/Installer.class.php:391 +msgid "No es posible usar la Base de Datos para crear la estructura. Compruebe los permisos y que no exista." +msgstr "" + +#: ../../../../inc/Installer.class.php:409 +msgid "Error al crear la estructura de la Base de Datos." +msgstr "" + +#: ../../../../inc/Installer.class.php:432 +msgid "Error al crear el grupo \"admin\"" +msgstr "" + +#: ../../../../inc/Installer.class.php:433 +#: ../../../../inc/Installer.class.php:466 +#: ../../../../inc/Installer.class.php:483 +#: ../../../../inc/Installer.class.php:496 +msgid "Informe al desarrollador" +msgstr "" + +#: ../../../../inc/Installer.class.php:465 +msgid "Error al crear el perfil \"admin\"" +msgstr "" + +#: ../../../../inc/Installer.class.php:482 +msgid "Error al crear el usuario \"admin\"" +msgstr "" + +#: ../../../../inc/Installer.class.php:495 +msgid "Error al actualizar la clave maestra del usuario \"admin\"" +msgstr "" + +#: ../../../../inc/Ldap.class.php:110 ../../../../inc/Ldap.class.php:114 +msgid "No es posible conectar con el servidor de LDAP" +msgstr "" + +#: ../../../../inc/Ldap.class.php:139 ../../../../inc/Ldap.class.php:144 +msgid "Error al conectar (BIND)" +msgstr "" + +#: ../../../../inc/Ldap.class.php:167 ../../../../inc/Ldap.class.php:172 +msgid "Error al buscar objetos en DN base" +msgstr "" + +#: ../../../../inc/Ldap.class.php:200 ../../../../inc/Ldap.class.php:205 +#: ../../../../inc/Ldap.class.php:212 ../../../../inc/Ldap.class.php:216 +#: ../../../../inc/Ldap.class.php:225 ../../../../inc/Ldap.class.php:229 +msgid "Error al buscar RDN de grupo" +msgstr "" + +#: ../../../../inc/Ldap.class.php:278 ../../../../inc/Ldap.class.php:283 +#: ../../../../inc/Ldap.class.php:297 ../../../../inc/Ldap.class.php:301 +msgid "Error al buscar el DN del usuario" +msgstr "" + +#: ../../../../inc/Ldap.class.php:290 ../../../../inc/Ldap.class.php:294 +msgid "Error al localizar el usuario en LDAP" +msgstr "" + +#: ../../../../inc/Ldap.class.php:375 ../../../../inc/Ldap.class.php:380 +#: ../../../../inc/LdapADS.class.php:99 ../../../../inc/LdapADS.class.php:104 +msgid "Error al buscar el grupo de usuarios" +msgstr "" + +#: ../../../../inc/Ldap.class.php:387 +msgid "Usuario verificado en grupo" +msgstr "" + +#: ../../../../inc/LdapADS.class.php:108 ../../../../inc/LdapADS.class.php:113 +msgid "No se encontró el grupo con ese nombre" +msgstr "" + +#: ../../../../inc/Log.class.php:88 +msgid "Vaciar Eventos" +msgstr "" + +#: ../../../../inc/Log.class.php:88 +#: ../../../../inc/themes/classic/eventlog.inc:100 +#: ../../../../inc/themes/material-blue/eventlog.inc:100 +msgid "Vaciar registro de eventos" +msgstr "" + +#: ../../../../inc/Migrate.class.php:52 +msgid "Faltan parámetros" +msgstr "" + +#: ../../../../inc/Migrate.class.php:149 +msgid "La versión no es compatible" +msgstr "" + +#: ../../../../inc/Migrate.class.php:150 +msgid "Actualice a la última versión de phpPMS" +msgstr "" + +#: ../../../../inc/Migrate.class.php:168 +msgid "Error al obtener la configuración" +msgstr "" + +#: ../../../../inc/Migrate.class.php:211 ../../../../inc/Migrate.class.php:224 +msgid "Error al vaciar tabla" +msgstr "" + +#: ../../../../inc/Migrate.class.php:229 +msgid "Usuario actual no es administrador de la aplicación" +msgstr "" + +#: ../../../../inc/Migrate.class.php:274 +msgid "No es posible crear el cliente" +msgstr "" + +#: ../../../../inc/Migrate.class.php:275 +msgid "Contacte con el desarrollador" +msgstr "" + +#: ../../../../inc/Migrate.class.php:279 +msgid "Importar Clientes" +msgstr "" + +#: ../../../../inc/Migrate.class.php:281 ../../../../inc/Migrate.class.php:351 +#: ../../../../inc/Migrate.class.php:452 ../../../../inc/Migrate.class.php:525 +#: ../../../../inc/Migrate.class.php:633 ../../../../inc/Migrate.class.php:698 +#: ../../../../inc/Migrate.class.php:772 ../../../../inc/Migrate.class.php:862 +#: ../../../../inc/Migrate.class.php:933 +msgid "Registros" +msgstr "" + +#: ../../../../inc/Migrate.class.php:303 +msgid "Error al obtener los clientes" +msgstr "" + +#: ../../../../inc/Migrate.class.php:345 +msgid "Error al obtener cuentas" +msgstr "" + +#: ../../../../inc/Migrate.class.php:374 +msgid "Cliente no encontrado" +msgstr "" + +#: ../../../../inc/Migrate.class.php:417 +msgid "Error al migrar cuenta" +msgstr "" + +#: ../../../../inc/Migrate.class.php:446 +msgid "Error al obtener los grupos de cuentas" +msgstr "" + +#: ../../../../inc/Migrate.class.php:450 +msgid "Importar Grupos de Cuentas" +msgstr "" + +#: ../../../../inc/Migrate.class.php:472 +msgid "Error al crear grupos de cuentas" +msgstr "" + +#: ../../../../inc/Migrate.class.php:519 +msgid "Error al obtener el historico de cuentas" +msgstr "" + +#: ../../../../inc/Migrate.class.php:523 +msgid "Importar Histórico de Cuentas" +msgstr "" + +#: ../../../../inc/Migrate.class.php:592 +msgid "Error al crear historico de cuentas" +msgstr "" + +#: ../../../../inc/Migrate.class.php:627 +msgid "Error al obtener los archivos de cuentas" +msgstr "" + +#: ../../../../inc/Migrate.class.php:631 +msgid "Importar Archivos de Cuentas" +msgstr "" + +#: ../../../../inc/Migrate.class.php:663 +msgid "Error al crear archivos de cuentas" +msgstr "" + +#: ../../../../inc/Migrate.class.php:692 +msgid "Error al obtener las categorías de cuentas" +msgstr "" + +#: ../../../../inc/Migrate.class.php:696 +msgid "Importar Categorías de Cuentas" +msgstr "" + +#: ../../../../inc/Migrate.class.php:718 +msgid "Error al crear categorías de cuentas" +msgstr "" + +#: ../../../../inc/Migrate.class.php:766 +msgid "Error al obtener los usuarios" +msgstr "" + +#: ../../../../inc/Migrate.class.php:770 +msgid "Importar Usuarios" +msgstr "" + +#: ../../../../inc/Migrate.class.php:827 +msgid "Error al crear usuarios" +msgstr "" + +#: ../../../../inc/Migrate.class.php:856 +msgid "Error al obtener los grupos de usuarios" +msgstr "" + +#: ../../../../inc/Migrate.class.php:860 +msgid "Importar Grupos de Usuarios" +msgstr "" + +#: ../../../../inc/Migrate.class.php:886 +msgid "Error al crear los grupos de usuarios" +msgstr "" + +#: ../../../../inc/Migrate.class.php:931 +msgid "Importar Configuración" +msgstr "" + +#: ../../../../inc/Profile.class.php:69 ../../../../inc/Profile.class.php:123 +#: ../../../../inc/Profile.class.php:128 +msgid "Migrar Perfiles" +msgstr "" + +#: ../../../../inc/Profile.class.php:69 +msgid "Error al obtener perfiles" +msgstr "" + +#: ../../../../inc/Profile.class.php:126 +msgid "Operación realizada correctamente" +msgstr "" + +#: ../../../../inc/Profile.class.php:128 +msgid "Fallo al realizar la operación" +msgstr "" + +#: ../../../../inc/ProfileBase.class.php:164 +msgid "Datos de perfil incorrectos" +msgstr "" + +#: ../../../../inc/ProfileBase.class.php:550 +#: ../../../../web/UsersMgmtC.class.php:274 +msgid "Eliminar Perfil" +msgstr "" + +#: ../../../../inc/ProfileBase.class.php:593 +msgid "Modificar Perfil" +msgstr "" + +#: ../../../../inc/SyspassImport.class.php:111 +#: ../../../../inc/SyspassImport.class.php:136 +#: ../../../../inc/SyspassImport.class.php:161 +msgid "Formato de XML inválido" +msgstr "" + +#: ../../../../inc/SyspassImport.class.php:111 +msgid "No hay categorías para importar" +msgstr "" + +#: ../../../../inc/SyspassImport.class.php:136 +msgid "No hay clientes para importar" +msgstr "" + +#: ../../../../inc/SyspassImport.class.php:161 +msgid "No hay cuentas para importar" +msgstr "" + +#: ../../../../inc/Upgrade.class.php:51 +msgid "Error al aplicar la actualización de la Base de Datos" +msgstr "" + +#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58 +msgid "Compruebe el registro de eventos para más detalles" +msgstr "" + +#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58 +#: ../../../../inc/themes/classic/login.inc:32 +#: ../../../../inc/themes/material-blue/2fa.inc:26 +#: ../../../../inc/themes/material-blue/login.inc:60 +msgid "Acceder" +msgstr "" + +#: ../../../../inc/Upgrade.class.php:57 +msgid "Error al aplicar la actualización auxiliar" +msgstr "" + +#: ../../../../inc/Upgrade.class.php:74 +msgid "Actualizar BBDD" +msgstr "" + +#: ../../../../inc/Upgrade.class.php:121 +msgid "No es necesario actualizar la Base de Datos." +msgstr "" + +#: ../../../../inc/Upgrade.class.php:129 +msgid "Error al aplicar la actualización de la Base de Datos." +msgstr "" + +#: ../../../../inc/Upgrade.class.php:138 +msgid "Actualización de la Base de Datos realizada correctamente." +msgstr "" + +#: ../../../../inc/Upgrade.class.php:215 +msgid "Actualizar Configuración" +msgstr "" + +#: ../../../../inc/Upgrade.class.php:215 +msgid "Actualización de la Configuración realizada correctamente." +msgstr "" + +#: ../../../../inc/UserBase.class.php:386 +#: ../../../../inc/UserBase.class.php:530 +msgid "No se pudo realizar la petición de cambio de clave." +msgstr "" + +#: ../../../../inc/UserBase.class.php:525 +msgid "Modificar Usuario" +msgstr "" + +#: ../../../../inc/UserBase.class.php:592 +#: ../../../../web/UsersMgmtC.class.php:150 +msgid "Eliminar Usuario" +msgstr "" + +#: ../../../../inc/UserLdap.class.php:78 +msgid "Activación Cuenta" +msgstr "" + +#: ../../../../inc/UserLdap.class.php:79 +msgid "Su cuenta está pendiente de activación." +msgstr "" + +#: ../../../../inc/UserLdap.class.php:80 +msgid "En breve recibirá un email de confirmación." +msgstr "" + +#: ../../../../inc/UserLdap.class.php:86 +msgid "Nuevo usuario de LDAP" +msgstr "" + +#: ../../../../inc/UserUtil.class.php:727 +msgid "Migrar Grupos" +msgstr "" + +#: ../../../../inc/UserUtil.class.php:727 +msgid "Error al migrar grupo del usuario" +msgstr "" + +#: ../../../../inc/Util.class.php:122 +msgid "Versión de PHP requerida >= " +msgstr "" + +#: ../../../../inc/Util.class.php:123 +msgid "Actualice la versión de PHP para que la aplicación funcione correctamente" +msgstr "" + +#: ../../../../inc/Util.class.php:159 +#: ../../../../inc/themes/classic/ldap.inc:212 +#: ../../../../inc/themes/material-blue/ldap.inc:238 +msgid "Módulo no disponible" +msgstr "" + +#: ../../../../inc/Util.class.php:160 +msgid "Sin este módulo la aplicación puede no funcionar correctamente." +msgstr "" + +#: ../../../../inc/XmlExport.class.php:104 +msgid "Importar XML" +msgstr "" + +#: ../../../../inc/XmlExport.class.php:389 +msgid "Error al crear el archivo XML" +msgstr "" + +#: ../../../../inc/XmlImport.class.php:63 +msgid "Formato detectado" +msgstr "" + +#: ../../../../inc/XmlImportBase.class.php:75 +msgid "No es posible procesar el archivo XML" +msgstr "" + +#: ../../../../inc/XmlImportBase.class.php:103 +msgid "Archivo XML no soportado" +msgstr "" + +#: ../../../../inc/XmlImportBase.class.php:104 +msgid "No es posible detectar la aplicación que exportó los datos" +msgstr "" + +#: ../../../../js/strings.js.php:27 +msgid "Error en la consulta" +msgstr "" + +#: ../../../../js/strings.js.php:28 +msgid "Ha ocurrido un error" +msgstr "" + +#: ../../../../js/strings.js.php:29 +#: ../../../../inc/themes/classic/login.inc:52 +#: ../../../../inc/themes/material-blue/login.inc:75 +msgid "Sesión finalizada" +msgstr "" + +#: ../../../../js/strings.js.php:30 +msgid "Borrar la cuenta?" +msgstr "" + +#: ../../../../js/strings.js.php:31 +msgid "Borrar el usuario?" +msgstr "" + +#: ../../../../js/strings.js.php:32 +msgid "Guarde la configuración para que sea efectiva" +msgstr "" + +#: ../../../../js/strings.js.php:33 +msgid "Clave Generada" +msgstr "" + +#: ../../../../js/strings.js.php:34 +msgid "Nivel alto" +msgstr "" + +#: ../../../../js/strings.js.php:35 +msgid "Nivel medio" +msgstr "" + +#: ../../../../js/strings.js.php:36 +msgid "Nivel bajo" +msgstr "" + +#: ../../../../js/strings.js.php:37 +msgid "Nivel muy alto" +msgstr "" + +#: ../../../../js/strings.js.php:38 +msgid "Utilizar al menos 8 caracteres" +msgstr "" + +#: ../../../../js/strings.js.php:39 +msgid "Borrar elemento?" +msgstr "" + +#: ../../../../js/strings.js.php:40 +msgid "Página no encontrada" +msgstr "" + +#: ../../../../js/strings.js.php:41 +msgid "Archivo no soportado para visualizar" +msgstr "" + +#: ../../../../js/strings.js.php:42 +msgid "Eliminar archivo?" +msgstr "" + +#: ../../../../js/strings.js.php:43 +msgid "Su navegador no soporta subir archivos con HTML5" +msgstr "" + +#: ../../../../js/strings.js.php:44 +msgid "Demasiados archivos" +msgstr "" + +#: ../../../../js/strings.js.php:45 +#, php-format +msgid "No es posible guardar el archivo.%sTamaño máximo:" +msgstr "" + +#: ../../../../js/strings.js.php:46 +msgid "Extensión no permitida" +msgstr "" + +#: ../../../../js/strings.js.php:47 +msgid "Vaciar el registro de eventos?" +msgstr "" + +#: ../../../../js/strings.js.php:48 +msgid "Seleccionar Grupo" +msgstr "" + +#: ../../../../js/strings.js.php:49 +msgid "Seleccionar Usuario" +msgstr "" + +#: ../../../../js/strings.js.php:50 +msgid "Seleccionar Perfil" +msgstr "" + +#: ../../../../js/strings.js.php:51 +msgid "Seleccionar Cliente" +msgstr "" + +#: ../../../../js/strings.js.php:52 +msgid "Seleccionar Categoría" +msgstr "" + +#: ../../../../js/strings.js.php:53 +msgid "Sin resultados" +msgstr "" + +#: ../../../../js/strings.js.php:54 +msgid "Opciones de clave" +msgstr "" + +#: ../../../../js/strings.js.php:55 +msgid "Generar clave aleatoria" +msgstr "" + +#: ../../../../js/strings.js.php:56 +msgid "Complejidad" +msgstr "" + +#: ../../../../js/strings.js.php:57 +msgid "Reset" +msgstr "" + +#: ../../../../js/strings.js.php:58 +#: ../../../../inc/themes/classic/editpass.inc:34 +msgid "Nivel de fortaleza de la clave" +msgstr "" + +#: ../../../../js/strings.js.php:59 +msgid "Mostrar Clave" +msgstr "" + +#: ../../../../js/strings.js.php:60 +msgid "Copiar Usuario" +msgstr "" + +#: ../../../../js/strings.js.php:61 +msgid "Copiar Clave" +msgstr "" + +#: ../../../../js/strings.js.php:62 +msgid "Incluir Números" +msgstr "" + +#: ../../../../js/strings.js.php:63 +msgid "Incluir Mayúsculas" +msgstr "" + +#: ../../../../js/strings.js.php:64 +msgid "Incluir Símbolos" +msgstr "" + +#: ../../../../js/strings.js.php:65 +msgid "Longitud" +msgstr "" + +#: ../../../../js/strings.js.php:66 +msgid "Seleccionar Acción" +msgstr "" + +#: ../../../../js/strings.js.php:67 +#: ../../../../inc/themes/classic/account.inc:133 +#: ../../../../inc/themes/classic/account.inc:164 +#: ../../../../inc/themes/classic/account.inc:449 +#: ../../../../inc/themes/classic/install.inc:99 +msgid "SI" +msgstr "" + +#: ../../../../js/strings.js.php:68 +#: ../../../../inc/themes/classic/account.inc:133 +#: ../../../../inc/themes/classic/account.inc:164 +#: ../../../../inc/themes/classic/account.inc:447 +#: ../../../../inc/themes/classic/encryption.inc:61 +#: ../../../../inc/themes/classic/encryption.inc:80 +#: ../../../../inc/themes/classic/import.inc:70 +#: ../../../../inc/themes/classic/install.inc:99 +#: ../../../../inc/themes/classic/tokens.inc:36 +msgid "NO" +msgstr "" + +#: ../../../../web/AccountC.class.php:380 +#: ../../../../web/AccountC.class.php:411 +#: ../../../../inc/themes/classic/search.inc:38 +#: ../../../../inc/themes/classic/search.inc:97 +#: ../../../../inc/themes/material-blue/search.inc:41 +#: ../../../../inc/themes/material-blue/search.inc:108 +msgid "Detalles de Cuenta" +msgstr "" + +#: ../../../../web/AccountC.class.php:468 +#: ../../../../inc/themes/classic/account.inc:394 +#: ../../../../inc/themes/material-blue/account.inc:429 +msgid "Modificar Clave de Cuenta" +msgstr "" + +#: ../../../../web/AccountsMgmtC.class.php:79 +#: ../../../../web/AccountsMgmtC.class.php:138 +#: ../../../../web/AccountsMgmtC.class.php:266 +#: ../../../../web/SearchC.class.php:277 +#: ../../../../web/UsersMgmtC.class.php:87 +#: ../../../../web/UsersMgmtC.class.php:187 +#: ../../../../web/UsersMgmtC.class.php:245 +#: ../../../../inc/themes/classic/account.inc:11 +#: ../../../../inc/themes/classic/categories.inc:8 +#: ../../../../inc/themes/classic/customers.inc:8 +#: ../../../../inc/themes/classic/customfields.inc:9 +#: ../../../../inc/themes/classic/editpass.inc:8 +#: ../../../../inc/themes/classic/groups.inc:8 +#: ../../../../inc/themes/classic/info.inc:25 +#: ../../../../inc/themes/classic/profiles.inc:8 +#: ../../../../inc/themes/classic/request.inc:6 +#: ../../../../inc/themes/classic/search.inc:36 +#: ../../../../inc/themes/classic/users.inc:8 +#: ../../../../inc/themes/material-blue/account.inc:15 +#: ../../../../inc/themes/material-blue/categories.inc:8 +#: ../../../../inc/themes/material-blue/customers.inc:8 +#: ../../../../inc/themes/material-blue/customfields.inc:8 +#: ../../../../inc/themes/material-blue/editpass.inc:9 +#: ../../../../inc/themes/material-blue/groups.inc:8 +#: ../../../../inc/themes/material-blue/info.inc:25 +#: ../../../../inc/themes/material-blue/profiles.inc:8 +#: ../../../../inc/themes/material-blue/request.inc:6 +#: ../../../../inc/themes/material-blue/search.inc:39 +#: ../../../../inc/themes/material-blue/users.inc:8 +msgid "Nombre" +msgstr "" + +#: ../../../../web/AccountsMgmtC.class.php:115 +msgid "Gestión de Categorías" +msgstr "" + +#: ../../../../web/AccountsMgmtC.class.php:172 +msgid "Gestión de Clientes" +msgstr "" + +#: ../../../../web/AccountsMgmtC.class.php:266 +#: ../../../../inc/themes/classic/customfields.inc:27 +#: ../../../../inc/themes/material-blue/customfields.inc:30 +msgid "Módulo" +msgstr "" + +#: ../../../../web/AccountsMgmtC.class.php:287 +msgid "Eliminar Campo" +msgstr "" + +#: ../../../../web/AccountsMgmtC.class.php:300 +#: ../../../../inc/themes/classic/profiles.inc:107 +#: ../../../../inc/themes/material-blue/profiles.inc:124 +msgid "Campos Personalizados" +msgstr "" + +#: ../../../../web/ConfigC.class.php:178 +msgid "Último backup" +msgstr "" + +#: ../../../../web/ConfigC.class.php:178 +msgid "No se encontraron backups" +msgstr "" + +#: ../../../../web/ConfigC.class.php:185 +msgid "Última exportación" +msgstr "" + +#: ../../../../web/ConfigC.class.php:185 +msgid "No se encontró archivo de exportación" +msgstr "" + +#: ../../../../web/ConfigC.class.php:230 +msgid "Información" +msgstr "" + +#: ../../../../web/EventlogC.class.php:91 +msgid "Registro de eventos vaciado" +msgstr "" + +#: ../../../../web/EventlogC.class.php:93 +msgid "Error al vaciar el registro de eventos" +msgstr "" + +#: ../../../../web/MainC.class.php:131 +#: ../../../../web/UsersMgmtC.class.php:100 +msgid "Admin Aplicación" +msgstr "" + +#: ../../../../web/MainC.class.php:149 +msgid "Buscar" +msgstr "" + +#: ../../../../web/MainC.class.php:161 +#: ../../../../web/UsersMgmtC.class.php:163 +msgid "Gestión de Usuarios" +msgstr "" + +#: ../../../../web/MainC.class.php:167 +msgid "Gestión de Clientes y Categorías" +msgstr "" + +#: ../../../../web/MainC.class.php:179 +#: ../../../../inc/themes/classic/eventlog.inc:4 +#: ../../../../inc/themes/material-blue/eventlog.inc:3 +msgid "Registro de Eventos" +msgstr "" + +#: ../../../../web/MainC.class.php:199 +msgid "Nuevo estilo visual basado en Material Design Lite by Google" +msgstr "" + +#: ../../../../web/MainC.class.php:200 +msgid "Usuarios en múltiples grupos" +msgstr "" + +#: ../../../../web/MainC.class.php:201 +msgid "Previsualización de imágenes" +msgstr "" + +#: ../../../../web/MainC.class.php:202 +msgid "Mostrar claves como imágenes" +msgstr "" + +#: ../../../../web/MainC.class.php:203 +msgid "Campos personalizados" +msgstr "" + +#: ../../../../web/MainC.class.php:204 +msgid "API de consultas" +msgstr "" + +#: ../../../../web/MainC.class.php:205 +#: ../../../../inc/themes/classic/2fa.inc:9 +#: ../../../../inc/themes/material-blue/2fa.inc:9 +#: ../../../../inc/themes/material-blue/security.inc:13 +msgid "Autentificación en 2 pasos" +msgstr "" + +#: ../../../../web/MainC.class.php:206 +msgid "Complejidad de generador de claves" +msgstr "" + +#: ../../../../web/MainC.class.php:207 +msgid "Consultas especiales" +msgstr "" + +#: ../../../../web/MainC.class.php:208 +msgid "Exportación a XML" +msgstr "" + +#: ../../../../web/MainC.class.php:209 +msgid "Clave maestra temporal" +msgstr "" + +#: ../../../../web/MainC.class.php:210 +msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV" +msgstr "" + +#: ../../../../web/MainC.class.php:211 +msgid "Optimización del código y mayor rapidez de carga" +msgstr "" + +#: ../../../../web/MainC.class.php:212 +msgid "Mejoras de seguridad en XSS e inyección SQL" +msgstr "" + +#: ../../../../web/MainC.class.php:254 +msgid "La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)" +msgstr "" + +#: ../../../../web/MainC.class.php:255 +msgid "Actualice la versión de PHP para usar sysPass de forma segura" +msgstr "" + +#: ../../../../web/MainC.class.php:262 +msgid "No se encuentra el generador de números aleatorios." +msgstr "" + +#: ../../../../web/MainC.class.php:263 +msgid "Sin esta función un atacante puede utilizar su cuenta al resetear la clave" +msgstr "" + +#: ../../../../web/MainC.class.php:282 +msgid "Instalación finalizada" +msgstr "" + +#: ../../../../web/MainC.class.php:283 +msgid "Pulse aquí para acceder" +msgstr "" + +#: ../../../../web/MainC.class.php:378 +msgid "Descargar nueva versión" +msgstr "" + +#: ../../../../web/SearchC.class.php:270 +msgid "Ordenar por Cliente" +msgstr "" + +#: ../../../../web/SearchC.class.php:276 +msgid "Ordenar por Nombre" +msgstr "" + +#: ../../../../web/SearchC.class.php:282 +msgid "Ordenar por Categoría" +msgstr "" + +#: ../../../../web/SearchC.class.php:288 +msgid "Ordenar por Usuario" +msgstr "" + +#: ../../../../web/SearchC.class.php:294 +msgid "Ordenar por URL / IP" +msgstr "" + +#: ../../../../web/SearchC.class.php:295 +#: ../../../../inc/themes/classic/account.inc:58 +#: ../../../../inc/themes/classic/editpass.inc:16 +#: ../../../../inc/themes/classic/request.inc:13 +#: ../../../../inc/themes/classic/search.inc:59 +#: ../../../../inc/themes/material-blue/account.inc:66 +#: ../../../../inc/themes/material-blue/editpass.inc:17 +#: ../../../../inc/themes/material-blue/request.inc:15 +#: ../../../../inc/themes/material-blue/search.inc:62 +msgid "URL / IP" +msgstr "" + +#: ../../../../web/UsersMgmtC.class.php:91 +msgid "Propiedades" +msgstr "" + +#: ../../../../web/UsersMgmtC.class.php:104 +msgid "Admin Cuentas" +msgstr "" + +#: ../../../../web/UsersMgmtC.class.php:108 +#: ../../../../inc/themes/classic/users.inc:28 +#: ../../../../inc/themes/material-blue/users.inc:34 +msgid "Usuario de LDAP" +msgstr "" + +#: ../../../../web/UsersMgmtC.class.php:112 +#: ../../../../inc/themes/classic/users.inc:113 +#: ../../../../inc/themes/material-blue/users.inc:151 +#: ../../../../inc/themes/material-blue/users.inc:154 +msgid "Deshabilitado" +msgstr "" + +#: ../../../../web/UsersMgmtC.class.php:129 +msgid "Ver Detalles de Usuario" +msgstr "" + +#: ../../../../web/UsersMgmtC.class.php:143 +msgid "Cambiar Clave de Usuario" +msgstr "" + +#: ../../../../web/UsersMgmtC.class.php:222 +msgid "Gestión de Grupos" +msgstr "" + +#: ../../../../web/UsersMgmtC.class.php:260 +msgid "Ver Detalles de Perfil" +msgstr "" + +#: ../../../../web/UsersMgmtC.class.php:287 +msgid "Gestión de Perfiles" +msgstr "" + +#: ../../../../web/UsersMgmtC.class.php:407 +msgid "Ver token de Autorización" +msgstr "" + +#: ../../../../web/UsersMgmtC.class.php:434 +msgid "Gestión de Autorizaciones API" +msgstr "" + +#: ../../../../web/UsersMgmtC.class.php:455 +msgid "Token de autorización visualizado" +msgstr "" + +#: ../../../../web/UsersMgmtC.class.php:456 +msgid "Autorizaciones" +msgstr "" + +#: ../../../../web/UsersPrefsC.class.php:84 +#: ../../../../inc/themes/classic/mail.inc:63 +#: ../../../../inc/themes/material-blue/mail.inc:86 +msgid "Seguridad" +msgstr "" + +#: ../../../../inc/themes/classic/2fa.inc:14 +#: ../../../../inc/themes/material-blue/2fa.inc:14 +msgid "Introducir código" +msgstr "" + +#: ../../../../inc/themes/classic/2fa.inc:26 +msgid "Verificar" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:14 +#: ../../../../inc/themes/material-blue/account.inc:21 +msgid "Nombre de cuenta" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:35 +msgid "Buscar en desplegable o introducir" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:61 +#: ../../../../inc/themes/material-blue/account.inc:72 +msgid "URL o IP de acceso" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:73 +#: ../../../../inc/themes/material-blue/account.inc:86 +msgid "Usuario de acceso" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:90 +#: ../../../../inc/themes/classic/editpass.inc:32 +#: ../../../../inc/themes/classic/users.inc:83 +#: ../../../../inc/themes/classic/userspass.inc:19 +#: ../../../../inc/themes/classic/userspass.inc:21 +#: ../../../../inc/themes/material-blue/account.inc:105 +#: ../../../../inc/themes/material-blue/editpass.inc:36 +#: ../../../../inc/themes/material-blue/install.inc:64 +#: ../../../../inc/themes/material-blue/users.inc:102 +#: ../../../../inc/themes/material-blue/users.inc:109 +#: ../../../../inc/themes/material-blue/userspass.inc:19 +#: ../../../../inc/themes/material-blue/userspass.inc:25 +msgid "Clave (repetir)" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:97 +#: ../../../../inc/themes/classic/search.inc:75 +#: ../../../../inc/themes/classic/users.inc:91 +#: ../../../../inc/themes/material-blue/account.inc:116 +#: ../../../../inc/themes/material-blue/search.inc:82 +#: ../../../../inc/themes/material-blue/users.inc:116 +msgid "Notas" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:99 +#: ../../../../inc/themes/material-blue/account.inc:121 +#: ../../../../inc/themes/material-blue/users.inc:123 +msgid "Notas sobre la cuenta" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:105 +#: ../../../../inc/themes/material-blue/account.inc:130 +#: ../../../../inc/themes/material-blue/search.inc:75 +msgid "Permisos" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:132 +#: ../../../../inc/themes/classic/account.inc:163 +#: ../../../../inc/themes/material-blue/account.inc:159 +#: ../../../../inc/themes/material-blue/account.inc:191 +msgid "Hablitar edición" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:201 +#: ../../../../inc/themes/material-blue/account.inc:243 +msgid "Soltar archivos aquí (max. 5) o click para seleccionar" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:201 +#: ../../../../inc/themes/classic/config.inc:193 +#: ../../../../inc/themes/material-blue/account.inc:243 +#: ../../../../inc/themes/material-blue/config.inc:274 +msgid "Tamaño máximo de archivo" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:213 +#: ../../../../inc/themes/material-blue/account.inc:255 +msgid "Historial" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:232 +#: ../../../../inc/themes/material-blue/account.inc:274 +msgid "Seleccionar fecha" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:241 +#: ../../../../inc/themes/classic/users.inc:164 +#: ../../../../inc/themes/material-blue/account.inc:283 +#: ../../../../inc/themes/material-blue/users.inc:208 +msgid "Última Modificación" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:243 +#: ../../../../inc/themes/material-blue/account.inc:285 +msgid "por" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:286 +#: ../../../../inc/themes/material-blue/account.inc:332 +msgid "Visitas" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:290 +#: ../../../../inc/themes/material-blue/account.inc:336 +msgid "Fecha Alta" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:294 +#: ../../../../inc/themes/material-blue/account.inc:340 +msgid "Creador" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:298 +#: ../../../../inc/themes/material-blue/account.inc:200 +#: ../../../../inc/themes/material-blue/account.inc:344 +msgid "Grupo Principal" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:303 +#: ../../../../inc/themes/material-blue/account.inc:349 +msgid "Usuarios Secundarios" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:322 +#: ../../../../inc/themes/material-blue/account.inc:368 +msgid "Grupos Secundarios" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:342 +#: ../../../../inc/themes/material-blue/account.inc:388 +msgid "Fecha Edición" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:346 +#: ../../../../inc/themes/material-blue/account.inc:392 +msgid "Editor" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:373 +#: ../../../../inc/themes/material-blue/account.inc:455 +msgid "Restaurar cuenta desde este punto" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:385 +#: ../../../../inc/themes/classic/account.inc:468 +#: ../../../../inc/themes/classic/search.inc:105 +#: ../../../../inc/themes/classic/search.inc:184 +#: ../../../../inc/themes/material-blue/account.inc:422 +#: ../../../../inc/themes/material-blue/account.inc:492 +#: ../../../../inc/themes/material-blue/search.inc:118 +#: ../../../../inc/themes/material-blue/search.inc:197 +msgid "Copiar Clave en Portapapeles" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:401 +#: ../../../../inc/themes/material-blue/account.inc:435 +msgid "Ver Actual" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:406 +#: ../../../../inc/themes/classic/editpass.inc:46 +#: ../../../../inc/themes/classic/passreset.inc:46 +#: ../../../../inc/themes/material-blue/passreset.inc:43 +msgid "Volver" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:413 +#: ../../../../inc/themes/classic/search.inc:117 +#: ../../../../inc/themes/material-blue/account.inc:445 +#: ../../../../inc/themes/material-blue/search.inc:130 +msgid "Modificar Cuenta" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:418 +#: ../../../../inc/themes/classic/search.inc:138 +#: ../../../../inc/themes/material-blue/account.inc:449 +#: ../../../../inc/themes/material-blue/search.inc:150 +msgid "Solicitar Modificación" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:425 +#: ../../../../inc/themes/classic/categories.inc:62 +#: ../../../../inc/themes/classic/config.inc:275 +#: ../../../../inc/themes/classic/customers.inc:62 +#: ../../../../inc/themes/classic/customfields.inc:63 +#: ../../../../inc/themes/classic/editpass.inc:51 +#: ../../../../inc/themes/classic/encryption.inc:102 +#: ../../../../inc/themes/classic/groups.inc:77 +#: ../../../../inc/themes/classic/ldap.inc:229 +#: ../../../../inc/themes/classic/mail.inc:107 +#: ../../../../inc/themes/classic/profiles.inc:168 +#: ../../../../inc/themes/classic/security.inc:58 +#: ../../../../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:461 +#: ../../../../inc/themes/material-blue/categories.inc:72 +#: ../../../../inc/themes/material-blue/config.inc:390 +#: ../../../../inc/themes/material-blue/customers.inc:73 +#: ../../../../inc/themes/material-blue/customfields.inc:74 +#: ../../../../inc/themes/material-blue/editpass.inc:60 +#: ../../../../inc/themes/material-blue/groups.inc:88 +#: ../../../../inc/themes/material-blue/ldap.inc:257 +#: ../../../../inc/themes/material-blue/mail.inc:145 +#: ../../../../inc/themes/material-blue/profiles.inc:177 +#: ../../../../inc/themes/material-blue/security.inc:64 +#: ../../../../inc/themes/material-blue/tokens.inc:63 +#: ../../../../inc/themes/material-blue/users.inc:235 +#: ../../../../inc/themes/material-blue/userspass.inc:40 +#: ../../../../inc/themes/material-blue/wiki.inc:124 +msgid "Guardar" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:435 +#: ../../../../inc/themes/material-blue/account.inc:471 +msgid "Seleccionar grupos secundarios" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:439 +#: ../../../../inc/themes/material-blue/account.inc:474 +msgid "Seleccionar usuarios" +msgstr "" + +#: ../../../../inc/themes/classic/account.inc:472 +#: ../../../../inc/themes/classic/search.inc:188 +#: ../../../../inc/themes/material-blue/account.inc:496 +#: ../../../../inc/themes/material-blue/search.inc:201 +msgid "Clave Copiada al Portapapeles" +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:10 +#: ../../../../inc/themes/classic/backup.inc:67 +#: ../../../../inc/themes/material-blue/backup.inc:10 +#: ../../../../inc/themes/material-blue/backup.inc:71 +msgid "Resultado" +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:18 +#: ../../../../inc/themes/classic/backup.inc:75 +#: ../../../../inc/themes/material-blue/backup.inc:18 +#: ../../../../inc/themes/material-blue/backup.inc:79 +msgid "Descargar Actual" +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:31 +#: ../../../../inc/themes/material-blue/backup.inc:31 +msgid "No hay backups para descargar" +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:45 +#: ../../../../inc/themes/classic/backup.inc:49 +#: ../../../../inc/themes/classic/backup.inc:113 +#: ../../../../inc/themes/classic/backup.inc:117 +#: ../../../../inc/themes/classic/encryption.inc:93 +#: ../../../../inc/themes/classic/encryption.inc:97 +#: ../../../../inc/themes/classic/encryption.inc:152 +#: ../../../../inc/themes/classic/encryption.inc:156 +#: ../../../../inc/themes/classic/import.inc:15 +#: ../../../../inc/themes/classic/import.inc:37 +#: ../../../../inc/themes/classic/import.inc:51 +#: ../../../../inc/themes/classic/import.inc:97 +#: ../../../../inc/themes/classic/import.inc:118 +#: ../../../../inc/themes/classic/import.inc:170 +#: ../../../../inc/themes/classic/import.inc:174 +#: ../../../../inc/themes/classic/js-common.inc:13 +#: ../../../../inc/themes/classic/ldap.inc:13 +#: ../../../../inc/themes/classic/ldap.inc:33 +#: ../../../../inc/themes/classic/ldap.inc:58 +#: ../../../../inc/themes/classic/ldap.inc:82 +#: ../../../../inc/themes/classic/ldap.inc:93 +#: ../../../../inc/themes/classic/ldap.inc:117 +#: ../../../../inc/themes/classic/ldap.inc:145 +#: ../../../../inc/themes/classic/ldap.inc:166 +#: ../../../../inc/themes/classic/ldap.inc:187 +#: ../../../../inc/themes/classic/wiki.inc:12 +#: ../../../../inc/themes/classic/wiki.inc:28 +#: ../../../../inc/themes/classic/wiki.inc:55 +#: ../../../../inc/themes/classic/wiki.inc:82 +#: ../../../../inc/themes/material-blue/backup.inc:47 +#: ../../../../inc/themes/material-blue/backup.inc:51 +#: ../../../../inc/themes/material-blue/backup.inc:129 +#: ../../../../inc/themes/material-blue/backup.inc:133 +#: ../../../../inc/themes/material-blue/encryption.inc:107 +#: ../../../../inc/themes/material-blue/encryption.inc:111 +#: ../../../../inc/themes/material-blue/encryption.inc:171 +#: ../../../../inc/themes/material-blue/encryption.inc:175 +#: ../../../../inc/themes/material-blue/import.inc:99 +#: ../../../../inc/themes/material-blue/import.inc:103 +#: ../../../../inc/themes/material-blue/js-common.inc:11 +msgid "Ayuda" +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:50 +#: ../../../../inc/themes/material-blue/backup.inc:52 +msgid "La copia de seguridad permite guardar y descargar tanto la base de datos de sysPass como los archivos de la aplicación y su configuración." +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:52 +#: ../../../../inc/themes/material-blue/backup.inc:54 +msgid "Con este método es posible guardar todos los datos de sysPass en otro lugar o utilizarlos para hacer la aplicación portable." +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:60 +#: ../../../../inc/themes/classic/backup.inc:126 +#: ../../../../inc/themes/material-blue/backup.inc:64 +msgid "Exportar Cuentas" +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:84 +#: ../../../../inc/themes/material-blue/backup.inc:88 +msgid "No hay archivos XML para descargar" +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:90 +#: ../../../../inc/themes/material-blue/backup.inc:94 +#: ../../../../inc/themes/material-blue/backup.inc:101 +msgid "Clave de Exportación" +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:98 +#: ../../../../inc/themes/material-blue/backup.inc:107 +#: ../../../../inc/themes/material-blue/backup.inc:114 +msgid "Clave de Exportación (repetir)" +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:118 +#: ../../../../inc/themes/material-blue/backup.inc:134 +msgid "La exportación de cuentas permite guardar las cuentas y sus datos en formato XML para posteriormente poder ser importados en otras instancias de sysPass." +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:120 +#: ../../../../inc/themes/material-blue/backup.inc:136 +msgid "Los elementos exportados son cuentas, clientes y categorías." +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:122 +#: ../../../../inc/themes/material-blue/backup.inc:138 +msgid "Las claves de las cuentas son exportadas de forma encriptada para mayor seguridad." +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:124 +#: ../../../../inc/themes/material-blue/backup.inc:140 +msgid "Es posible establecer una clave de exportación para guardar todos los datos encriptados en el archivo XML." +msgstr "" + +#: ../../../../inc/themes/classic/body.inc:4 +#: ../../../../inc/themes/material-blue/body.inc:4 +msgid "Javascript es necesario para el correcto funcionamiento" +msgstr "" + +#: ../../../../inc/themes/classic/categories.inc:10 +#: ../../../../inc/themes/material-blue/categories.inc:14 +msgid "Nombre de la categoría" +msgstr "" + +#: ../../../../inc/themes/classic/categories.inc:18 +#: ../../../../inc/themes/material-blue/categories.inc:26 +msgid "Descripción de la categoría" +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:4 +#: ../../../../inc/themes/material-blue/config.inc:4 +msgid "Sitio" +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:10 +#: ../../../../inc/themes/material-blue/config.inc:11 +msgid "Idioma" +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:21 +#: ../../../../inc/themes/material-blue/config.inc:22 +msgid "Tema Visual" +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:33 +#: ../../../../inc/themes/material-blue/config.inc:34 +#: ../../../../inc/themes/material-blue/config.inc:42 +msgid "Timeout de sesión (s)" +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:42 +#: ../../../../inc/themes/material-blue/config.inc:48 +msgid "Habilitar log de eventos" +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:46 +#: ../../../../inc/themes/material-blue/config.inc:52 +msgid "Guarda las acciones realizadas en la aplicación." +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:58 +#: ../../../../inc/themes/material-blue/config.inc:66 +msgid "Habilitar depuración" +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:62 +#: ../../../../inc/themes/material-blue/config.inc:70 +msgid "Muestra información relativa a la configuración de la aplicación y rendimiento." +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:74 +#: ../../../../inc/themes/material-blue/config.inc:84 +msgid "Modo mantenimiento" +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:78 +#: ../../../../inc/themes/material-blue/config.inc:88 +msgid "En este modo no se puede acceder a la aplicación. Para deshabilitarlo es necesario modificar el archivo de configuración." +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:90 +#: ../../../../inc/themes/material-blue/config.inc:102 +msgid "Comprobar actualizaciones" +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:94 +#: ../../../../inc/themes/material-blue/config.inc:106 +msgid "Comprobar actualizaciones de la aplicación (sólo para los usuarios administradores)." +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:106 +#: ../../../../inc/themes/material-blue/config.inc:120 +msgid "Comprobar notificaciones" +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:110 +#: ../../../../inc/themes/material-blue/config.inc:124 +msgid "Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo para los usuarios administradores)." +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:122 +#: ../../../../inc/themes/material-blue/config.inc:145 +msgid "Nombre de cuenta como enlace" +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:126 +#: ../../../../inc/themes/material-blue/config.inc:149 +msgid "Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles de la cuenta." +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:138 +#: ../../../../inc/themes/material-blue/config.inc:232 +msgid "Gestión de archivos" +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:142 +#: ../../../../inc/themes/material-blue/config.inc:236 +msgid "Habilita la subida/descarga de archivos para las cuentas." +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:154 +#: ../../../../inc/themes/material-blue/config.inc:164 +msgid "Búsquedas globales" +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:158 +#: ../../../../inc/themes/material-blue/config.inc:168 +msgid "Permite que todos los usuarios puedan realizar búsquedas en todas las cuentas, pero no pueden ver el contenido de las que no tienen permisos." +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:170 +#: ../../../../inc/themes/material-blue/config.inc:251 +msgid "Extensiones de archivos permitidas" +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:174 +#: ../../../../inc/themes/material-blue/config.inc:255 +msgid "Extensiones permitidas para la subida de archivos." +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:178 +#: ../../../../inc/themes/material-blue/config.inc:259 +msgid "Se permite un máximo de 4 caracteres." +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:182 +#: ../../../../inc/themes/material-blue/config.inc:263 +msgid "Escribir extensión y pulsar intro para añadir. Es necesario guardar la configuración." +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:197 +#: ../../../../inc/themes/material-blue/config.inc:278 +msgid "Establece el tamaño máximo para subir archivos." +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:201 +#: ../../../../inc/themes/material-blue/config.inc:282 +msgid "El máximo absuluto es de 16MB." +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:212 +#: ../../../../inc/themes/material-blue/config.inc:183 +msgid "Resultados por página" +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:216 +#: ../../../../inc/themes/material-blue/config.inc:187 +msgid "Número de resultados por página a mostrar, al realizar una búsqueda." +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:227 +msgid "Resultados en Tarjetas" +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:231 +msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta." +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:243 +#: ../../../../inc/themes/material-blue/config.inc:203 +msgid "Imagen para mostrar clave" +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:247 +#: ../../../../inc/themes/material-blue/config.inc:207 +msgid "Generar una imagen con el texto de la clave de la cuenta." +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:250 +#: ../../../../inc/themes/material-blue/config.inc:210 +msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad." +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:285 +#: ../../../../inc/themes/material-blue/config.inc:400 +msgid "Añadir extensión" +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:286 +#: ../../../../inc/themes/material-blue/config.inc:401 +msgid "Eliminar extensión" +msgstr "" + +#: ../../../../inc/themes/classic/customers.inc:10 +#: ../../../../inc/themes/material-blue/customers.inc:14 +msgid "Nombre del cliente" +msgstr "" + +#: ../../../../inc/themes/classic/customers.inc:18 +#: ../../../../inc/themes/material-blue/customers.inc:26 +msgid "Descripción del cliente" +msgstr "" + +#: ../../../../inc/themes/classic/customfields.inc:38 +#: ../../../../inc/themes/material-blue/customfields.inc:41 +msgid "Texto Ayuda" +msgstr "" + +#: ../../../../inc/themes/classic/customfields.inc:44 +#: ../../../../inc/themes/material-blue/customfields.inc:52 +msgid "Obligatorio" +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:8 +#: ../../../../inc/themes/classic/install.inc:46 +#: ../../../../inc/themes/classic/install.inc:50 +#: ../../../../inc/themes/classic/install.inc:51 +#: ../../../../inc/themes/classic/login.inc:15 +#: ../../../../inc/themes/classic/login.inc:27 +#: ../../../../inc/themes/material-blue/encryption.inc:8 +#: ../../../../inc/themes/material-blue/install.inc:49 +#: ../../../../inc/themes/material-blue/install.inc:56 +#: ../../../../inc/themes/material-blue/login.inc:24 +#: ../../../../inc/themes/material-blue/login.inc:46 +msgid "Clave Maestra" +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:16 +#: ../../../../inc/themes/classic/encryption.inc:116 +#: ../../../../inc/themes/material-blue/encryption.inc:16 +#: ../../../../inc/themes/material-blue/encryption.inc:131 +msgid "Último cambio" +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:25 +#: ../../../../inc/themes/material-blue/encryption.inc:25 +#: ../../../../inc/themes/material-blue/encryption.inc:31 +msgid "Clave Maestra actual" +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:34 +#: ../../../../inc/themes/material-blue/encryption.inc:37 +#: ../../../../inc/themes/material-blue/encryption.inc:43 +msgid "Nueva Clave Maestra" +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:43 +#: ../../../../inc/themes/material-blue/encryption.inc:49 +#: ../../../../inc/themes/material-blue/encryption.inc:55 +msgid "Nueva Clave Maestra (repetir)" +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:51 +#: ../../../../inc/themes/material-blue/encryption.inc:61 +msgid "No modificar cuentas" +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:56 +#: ../../../../inc/themes/material-blue/encryption.inc:66 +msgid "Establece una nueva clave maestra sin re-encriptar las cuentas" +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:67 +#: ../../../../inc/themes/material-blue/encryption.inc:79 +msgid "Confirmar cambio" +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:70 +#: ../../../../inc/themes/classic/encryption.inc:73 +#: ../../../../inc/themes/classic/encryption.inc:76 +#: ../../../../inc/themes/classic/import.inc:67 +#: ../../../../inc/themes/classic/security.inc:43 +msgid "Atención" +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:71 +#: ../../../../inc/themes/material-blue/encryption.inc:83 +msgid "Guarde la nueva clave en un lugar seguro." +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:74 +#: ../../../../inc/themes/material-blue/encryption.inc:86 +msgid "Se volverán a encriptar las claves de todas las cuentas." +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:77 +#: ../../../../inc/themes/material-blue/encryption.inc:89 +msgid "Los usuarios deberán de introducir la nueva clave maestra." +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:98 +#: ../../../../inc/themes/material-blue/encryption.inc:112 +msgid "La clave maestra es utilizada para encriptar las claves de las cuentas de sysPass para mantenerlas seguras." +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:100 +#: ../../../../inc/themes/material-blue/encryption.inc:114 +msgid "Es recomendable cambiarla cada cierto tiempo y utilizar una clave compleja que incluya números, letras y símbolos." +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:108 +#: ../../../../inc/themes/material-blue/encryption.inc:124 +msgid "Clave Temporal" +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:119 +#: ../../../../inc/themes/classic/encryption.inc:130 +#: ../../../../inc/themes/material-blue/encryption.inc:134 +#: ../../../../inc/themes/material-blue/encryption.inc:145 +msgid "No generada" +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:124 +#: ../../../../inc/themes/material-blue/encryption.inc:139 +msgid "Válido hasta" +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:136 +#: ../../../../inc/themes/material-blue/encryption.inc:151 +#: ../../../../inc/themes/material-blue/encryption.inc:157 +msgid "Validez (s)" +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:139 +msgid "Validez" +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:157 +#: ../../../../inc/themes/material-blue/encryption.inc:176 +msgid "La clave temporal es utilizada como clave maestra para los usuarios que necesitan introducirla al iniciar la sesión, así no es necesario facilitar la clave maestra original." +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:159 +#: ../../../../inc/themes/material-blue/encryption.inc:180 +msgid "Generar" +msgstr "" + +#: ../../../../inc/themes/classic/eventlog.inc:8 +#: ../../../../inc/themes/classic/search.inc:5 +#: ../../../../inc/themes/material-blue/eventlog.inc:7 +#: ../../../../inc/themes/material-blue/search.inc:3 +msgid "No se encontraron registros" +msgstr "" + +#: ../../../../inc/themes/classic/eventlog.inc:19 +#: ../../../../inc/themes/material-blue/eventlog.inc:18 +msgid "Fecha / Hora" +msgstr "" + +#: ../../../../inc/themes/classic/eventlog.inc:22 +#: ../../../../inc/themes/material-blue/eventlog.inc:21 +msgid "Evento" +msgstr "" + +#: ../../../../inc/themes/classic/eventlog.inc:28 +#: ../../../../inc/themes/material-blue/eventlog.inc:27 +msgid "IP" +msgstr "" + +#: ../../../../inc/themes/classic/eventlog.inc:86 +#: ../../../../inc/themes/classic/search.inc:161 +#: ../../../../inc/themes/material-blue/eventlog.inc:85 +#: ../../../../inc/themes/material-blue/search.inc:173 +msgid "Primera página" +msgstr "" + +#: ../../../../inc/themes/classic/eventlog.inc:88 +#: ../../../../inc/themes/classic/search.inc:163 +#: ../../../../inc/themes/material-blue/eventlog.inc:87 +#: ../../../../inc/themes/material-blue/search.inc:175 +msgid "Página anterior" +msgstr "" + +#: ../../../../inc/themes/classic/eventlog.inc:93 +#: ../../../../inc/themes/classic/search.inc:168 +#: ../../../../inc/themes/material-blue/eventlog.inc:92 +#: ../../../../inc/themes/material-blue/search.inc:180 +msgid "Página siguiente" +msgstr "" + +#: ../../../../inc/themes/classic/eventlog.inc:95 +#: ../../../../inc/themes/classic/search.inc:170 +#: ../../../../inc/themes/material-blue/eventlog.inc:94 +#: ../../../../inc/themes/material-blue/search.inc:182 +msgid "Última página" +msgstr "" + +#: ../../../../inc/themes/classic/files.inc:22 +#: ../../../../inc/themes/material-blue/files.inc:21 +msgid "Ver Archivo" +msgstr "" + +#: ../../../../inc/themes/classic/footer.inc:10 +#: ../../../../inc/themes/material-blue/footer.inc:18 +msgid "Ayuda :: FAQ :: Changelog" +msgstr "" + +#: ../../../../inc/themes/classic/footer.inc:13 +#: ../../../../inc/themes/material-blue/footer.inc:23 +msgid "Un proyecto de cygnux.org" +msgstr "" + +#: ../../../../inc/themes/classic/groups.inc:10 +#: ../../../../inc/themes/material-blue/groups.inc:14 +msgid "Nombre del grupo" +msgstr "" + +#: ../../../../inc/themes/classic/groups.inc:18 +#: ../../../../inc/themes/material-blue/groups.inc:26 +msgid "Descripción del grupo" +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:7 +#: ../../../../inc/themes/material-blue/import.inc:121 +msgid "Importar phpPMS" +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:14 +#: ../../../../inc/themes/classic/install.inc:63 +#: ../../../../inc/themes/classic/install.inc:64 +#: ../../../../inc/themes/material-blue/import.inc:128 +#: ../../../../inc/themes/material-blue/import.inc:140 +msgid "Usuario BBDD" +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:18 +#: ../../../../inc/themes/material-blue/import.inc:132 +msgid "Indicar el usuario de conexión a la base de datos de phpPMS." +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:28 +#: ../../../../inc/themes/classic/install.inc:71 +#: ../../../../inc/themes/classic/install.inc:73 +#: ../../../../inc/themes/material-blue/import.inc:146 +#: ../../../../inc/themes/material-blue/import.inc:152 +msgid "Clave BBDD" +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:36 +#: ../../../../inc/themes/classic/install.inc:78 +#: ../../../../inc/themes/classic/install.inc:79 +#: ../../../../inc/themes/material-blue/import.inc:158 +#: ../../../../inc/themes/material-blue/import.inc:170 +msgid "Nombre BBDD" +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:40 +#: ../../../../inc/themes/material-blue/import.inc:162 +msgid "Indicar el nombre de la base de datos de phpPMS." +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:50 +#: ../../../../inc/themes/classic/install.inc:87 +#: ../../../../inc/themes/classic/install.inc:88 +#: ../../../../inc/themes/material-blue/import.inc:176 +#: ../../../../inc/themes/material-blue/import.inc:188 +msgid "Servidor BBDD" +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:54 +#: ../../../../inc/themes/material-blue/import.inc:180 +msgid "Indicar el servidor de la base de datos de phpPMS." +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:64 +#: ../../../../inc/themes/material-blue/import.inc:194 +msgid "Confirmar" +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:68 +#: ../../../../inc/themes/material-blue/import.inc:198 +msgid "Los datos actuales serán borrados (excepto el usuario actual)" +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:83 +msgid "Iniciar" +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:89 +#: ../../../../inc/themes/material-blue/import.inc:7 +msgid "Importar CSV/XML" +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:96 +#: ../../../../inc/themes/material-blue/import.inc:14 +msgid "Usuario por Defecto" +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:100 +#: ../../../../inc/themes/material-blue/import.inc:18 +msgid "Define el usuario por defecto para las cuentas importadas." +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:117 +#: ../../../../inc/themes/classic/ldap.inc:144 +#: ../../../../inc/themes/material-blue/import.inc:36 +#: ../../../../inc/themes/material-blue/ldap.inc:170 +msgid "Grupo por Defecto" +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:121 +#: ../../../../inc/themes/material-blue/import.inc:40 +msgid "Define el grupo por defecto para las cuentas importadas." +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:138 +#: ../../../../inc/themes/material-blue/import.inc:58 +#: ../../../../inc/themes/material-blue/import.inc:64 +msgid "Clave de Importación" +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:146 +#: ../../../../inc/themes/material-blue/import.inc:70 +#: ../../../../inc/themes/material-blue/import.inc:76 +msgid "Delimitador CSV" +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:162 +#: ../../../../inc/themes/material-blue/import.inc:90 +msgid "Soltar archivo aquí o click para seleccionar" +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:175 +msgid "Permite realizar la importación de Cuentas, Categorías y Clientes desde arhcivos XML y CSV." +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:177 +#: ../../../../inc/themes/material-blue/import.inc:106 +msgid "Los formatos de archivos XML soportados son: sysPass, KeePass y KeePassX" +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:179 +#: ../../../../inc/themes/material-blue/import.inc:108 +msgid "Arrastar el archivo a importar a la zona indicada o hacer click sobre la flecha." +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:181 +#: ../../../../inc/themes/material-blue/import.inc:110 +msgid "Para archivos de KeePass o KeePassX, el nombre del cliente será igual a KeePass o KeePassX y la categoría igual al nombre de los grupos." +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:183 +#: ../../../../inc/themes/material-blue/import.inc:112 +msgid "La importación de archivos CSV se realiza con el siguiente formato:" +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:185 +#: ../../../../inc/themes/material-blue/import.inc:114 +msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas" +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:187 +#: ../../../../inc/themes/material-blue/import.inc:116 +msgid "En todos los casos, si el cliente o la categoría no están creados, se crean automáticamente." +msgstr "" + +#: ../../../../inc/themes/classic/info.inc:4 +#: ../../../../inc/themes/material-blue/info.inc:4 +msgid "Información de la Aplicación" +msgstr "" + +#: ../../../../inc/themes/classic/info.inc:10 +#: ../../../../inc/themes/material-blue/info.inc:10 +msgid "Versión sysPass" +msgstr "" + +#: ../../../../inc/themes/classic/info.inc:18 +#: ../../../../inc/themes/material-blue/info.inc:18 +msgid "Base de Datos" +msgstr "" + +#: ../../../../inc/themes/classic/info.inc:30 +#: ../../../../inc/themes/material-blue/info.inc:30 +msgid "PHP" +msgstr "" + +#: ../../../../inc/themes/classic/info.inc:35 +#: ../../../../inc/themes/material-blue/info.inc:35 +msgid "Extensiones" +msgstr "" + +#: ../../../../inc/themes/classic/info.inc:37 +#: ../../../../inc/themes/material-blue/info.inc:37 +msgid "Memoria Usada" +msgstr "" + +#: ../../../../inc/themes/classic/info.inc:44 +#: ../../../../inc/themes/classic/ldap.inc:32 +#: ../../../../inc/themes/classic/mail.inc:21 +#: ../../../../inc/themes/material-blue/config.inc:318 +#: ../../../../inc/themes/material-blue/info.inc:44 +#: ../../../../inc/themes/material-blue/ldap.inc:35 +#: ../../../../inc/themes/material-blue/ldap.inc:58 +#: ../../../../inc/themes/material-blue/ldap.inc:86 +#: ../../../../inc/themes/material-blue/mail.inc:24 +#: ../../../../inc/themes/material-blue/mail.inc:30 +msgid "Servidor" +msgstr "" + +#: ../../../../inc/themes/classic/install.inc:4 +#: ../../../../inc/themes/material-blue/install.inc:4 +msgid "Instalación " +msgstr "" + +#: ../../../../inc/themes/classic/install.inc:25 +#: ../../../../inc/themes/material-blue/install.inc:25 +msgid "Crear cuenta de admin de sysPass" +msgstr "" + +#: ../../../../inc/themes/classic/install.inc:32 +#: ../../../../inc/themes/material-blue/install.inc:36 +msgid "Login del usuario administrador de sysPass" +msgstr "" + +#: ../../../../inc/themes/classic/install.inc:58 +#: ../../../../inc/themes/material-blue/install.inc:69 +msgid "Configurar BBDD" +msgstr "" + +#: ../../../../inc/themes/classic/install.inc:67 +msgid "Login de usuario con permisos de administrador de MySQL" +msgstr "" + +#: ../../../../inc/themes/classic/install.inc:83 +#: ../../../../inc/themes/material-blue/install.inc:102 +msgid "Nombre de la base de datos para sysPass" +msgstr "" + +#: ../../../../inc/themes/classic/install.inc:91 +msgid "Nombre del servidor de la base de datos de sysPass" +msgstr "" + +#: ../../../../inc/themes/classic/install.inc:97 +#: ../../../../inc/themes/material-blue/install.inc:120 +msgid "Modo Hosting" +msgstr "" + +#: ../../../../inc/themes/classic/install.inc:104 +#: ../../../../inc/themes/material-blue/install.inc:127 +msgid "No crea ni verifica los permisos del usuario sobre la BBDD" +msgstr "" + +#: ../../../../inc/themes/classic/install.inc:108 +#: ../../../../inc/themes/material-blue/install.inc:134 +#: ../../../../inc/themes/material-blue/install.inc:135 +msgid "Instalar" +msgstr "" + +#: ../../../../inc/themes/classic/ldap.inc:12 +#: ../../../../inc/themes/material-blue/ldap.inc:12 +msgid "Habilitar LDAP" +msgstr "" + +#: ../../../../inc/themes/classic/ldap.inc:16 +#: ../../../../inc/themes/material-blue/ldap.inc:16 +msgid "Habilita de autentificación mediante servidor LDAP." +msgstr "" + +#: ../../../../inc/themes/classic/ldap.inc:20 +#: ../../../../inc/themes/material-blue/ldap.inc:20 +msgid "Este método utilizará MySQL en caso de fallo." +msgstr "" + +#: ../../../../inc/themes/classic/ldap.inc:36 +#: ../../../../inc/themes/material-blue/ldap.inc:39 +msgid "Nombre o dirección IP del servidor de LDAP." +msgstr "" + +#: ../../../../inc/themes/classic/ldap.inc:40 +#: ../../../../inc/themes/classic/ldap.inc:65 +#: ../../../../inc/themes/classic/ldap.inc:100 +#: ../../../../inc/themes/classic/ldap.inc:128 +#: ../../../../inc/themes/classic/wiki.inc:89 +#: ../../../../inc/themes/material-blue/ldap.inc:43 +#: ../../../../inc/themes/material-blue/ldap.inc:72 +#: ../../../../inc/themes/material-blue/ldap.inc:119 +#: ../../../../inc/themes/material-blue/ldap.inc:151 +#: ../../../../inc/themes/material-blue/wiki.inc:101 +msgid "Ejemplos:" +msgstr "" + +#: ../../../../inc/themes/classic/ldap.inc:57 +#: ../../../../inc/themes/material-blue/ldap.inc:64 +msgid "Usuario de conexión" +msgstr "" + +#: ../../../../inc/themes/classic/ldap.inc:61 +#: ../../../../inc/themes/material-blue/ldap.inc:68 +msgid "Usuario para conectar con el servicio de LDAP." +msgstr "" + +#: ../../../../inc/themes/classic/ldap.inc:81 +#: ../../../../inc/themes/material-blue/ldap.inc:92 +msgid "Clave de conexión" +msgstr "" + +#: ../../../../inc/themes/classic/ldap.inc:92 +#: ../../../../inc/themes/material-blue/ldap.inc:111 +#: ../../../../inc/themes/material-blue/ldap.inc:133 +msgid "Base de búsqueda" +msgstr "" + +#: ../../../../inc/themes/classic/ldap.inc:96 +#: ../../../../inc/themes/material-blue/ldap.inc:115 +msgid "Base en la que realizar la búsqueda de usuarios de LDAP." +msgstr "" + +#: ../../../../inc/themes/classic/ldap.inc:120 +#: ../../../../inc/themes/material-blue/ldap.inc:143 +msgid "Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso." +msgstr "" + +#: ../../../../inc/themes/classic/ldap.inc:124 +#: ../../../../inc/themes/material-blue/ldap.inc:147 +msgid "Este grupo debe de estar ubicado en la base de búsquedas de LDAP." +msgstr "" + +#: ../../../../inc/themes/classic/ldap.inc:148 +#: ../../../../inc/themes/material-blue/ldap.inc:174 +msgid "Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP." +msgstr "" + +#: ../../../../inc/themes/classic/ldap.inc:165 +#: ../../../../inc/themes/material-blue/ldap.inc:190 +msgid "Perfil por Defecto" +msgstr "" + +#: ../../../../inc/themes/classic/ldap.inc:169 +#: ../../../../inc/themes/material-blue/ldap.inc:194 +msgid "Define el perfil de usuarios por defecto para los nuevos usuarios de LDAP." +msgstr "" + +#: ../../../../inc/themes/classic/ldap.inc:186 +#: ../../../../inc/themes/material-blue/ldap.inc:210 +msgid "Active Directory" +msgstr "" + +#: ../../../../inc/themes/classic/ldap.inc:190 +#: ../../../../inc/themes/material-blue/ldap.inc:214 +msgid "Habilita el modo de conexión con LDAP de Active Directory." +msgstr "" + +#: ../../../../inc/themes/classic/ldap.inc:202 +#: ../../../../inc/themes/material-blue/ldap.inc:228 +msgid "Comprobar" +msgstr "" + +#: ../../../../inc/themes/classic/ldap.inc:206 +#: ../../../../inc/themes/material-blue/ldap.inc:232 +msgid "Comprobar conexión con LDAP" +msgstr "" + +#: ../../../../inc/themes/classic/login.inc:46 +#: ../../../../inc/themes/material-blue/login.inc:69 +msgid "¿Olvidó su clave?" +msgstr "" + +#: ../../../../inc/themes/classic/login.inc:59 +#: ../../../../inc/themes/material-blue/login.inc:82 +msgid "Aplicación actualizada correctamente" +msgstr "" + +#: ../../../../inc/themes/classic/login.inc:64 +#: ../../../../inc/themes/classic/login.inc:65 +#: ../../../../inc/themes/material-blue/login.inc:87 +#: ../../../../inc/themes/material-blue/login.inc:88 +#: ../../../../inc/themes/material-blue/login.inc:90 +msgid "Nuevas Características" +msgstr "" + +#: ../../../../inc/themes/classic/mail.inc:11 +#: ../../../../inc/themes/material-blue/mail.inc:11 +msgid "Habilitar notificaciones de correo" +msgstr "" + +#: ../../../../inc/themes/classic/mail.inc:29 +#: ../../../../inc/themes/material-blue/config.inc:332 +#: ../../../../inc/themes/material-blue/mail.inc:36 +#: ../../../../inc/themes/material-blue/mail.inc:43 +msgid "Puerto" +msgstr "" + +#: ../../../../inc/themes/classic/mail.inc:37 +#: ../../../../inc/themes/material-blue/mail.inc:49 +msgid "Habilitar Autentificación" +msgstr "" + +#: ../../../../inc/themes/classic/mail.inc:68 +#: ../../../../inc/themes/material-blue/mail.inc:91 +msgid "Deshabilitada" +msgstr "" + +#: ../../../../inc/themes/classic/mail.inc:77 +#: ../../../../inc/themes/material-blue/mail.inc:100 +#: ../../../../inc/themes/material-blue/mail.inc:107 +msgid "Dirección de correo de envío" +msgstr "" + +#: ../../../../inc/themes/classic/mail.inc:85 +#: ../../../../inc/themes/material-blue/mail.inc:113 +msgid "Habilitar peticiones por correo" +msgstr "" + +#: ../../../../inc/themes/classic/mgmttabs.inc:66 +#: ../../../../inc/themes/classic/search.inc:112 +#: ../../../../inc/themes/material-blue/search.inc:125 +msgid "Más Acciones" +msgstr "" + +#: ../../../../inc/themes/classic/passreset.inc:13 +#: ../../../../inc/themes/material-blue/passreset.inc:10 +msgid "Solicitud de Cambio de Clave" +msgstr "" + +#: ../../../../inc/themes/classic/passreset.inc:16 +msgid "Login del Usuario" +msgstr "" + +#: ../../../../inc/themes/classic/passreset.inc:21 +#: ../../../../inc/themes/material-blue/passreset.inc:24 +msgid "Email del Usuario" +msgstr "" + +#: ../../../../inc/themes/classic/passreset.inc:22 +#: ../../../../inc/themes/classic/users.inc:61 +#: ../../../../inc/themes/material-blue/users.inc:71 +msgid "Email" +msgstr "" + +#: ../../../../inc/themes/classic/passreset.inc:27 +msgid "Nueva Clave" +msgstr "" + +#: ../../../../inc/themes/classic/passreset.inc:34 +msgid "Nueva Clave (Verificar)" +msgstr "" + +#: ../../../../inc/themes/classic/passreset.inc:35 +msgid "Clave (Verificar)" +msgstr "" + +#: ../../../../inc/themes/classic/passreset.inc:46 +#: ../../../../inc/themes/material-blue/passreset.inc:42 +msgid "Volver a iniciar sesión" +msgstr "" + +#: ../../../../inc/themes/classic/passreset.inc:48 +#: ../../../../inc/themes/material-blue/2fa.inc:27 +#: ../../../../inc/themes/material-blue/passreset.inc:48 +#: ../../../../inc/themes/material-blue/passreset.inc:49 +msgid "Solicitar" +msgstr "" + +#: ../../../../inc/themes/classic/passreset.inc:49 +msgid "Solicitar cambio de clave" +msgstr "" + +#: ../../../../inc/themes/classic/passreset.inc:51 +#: ../../../../inc/themes/material-blue/passreset.inc:53 +#: ../../../../inc/themes/material-blue/passreset.inc:54 +msgid "Cambiar" +msgstr "" + +#: ../../../../inc/themes/classic/passreset.inc:52 +msgid "Cambiar Clave" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:11 +#: ../../../../inc/themes/material-blue/profiles.inc:14 +msgid "Nombre del perfil" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:19 +#: ../../../../inc/themes/material-blue/profiles.inc:30 +msgid "Ver detalles de cuenta" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:19 +#: ../../../../inc/themes/material-blue/profiles.inc:30 +msgid "Ver" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:23 +#: ../../../../inc/themes/material-blue/profiles.inc:35 +msgid "Ver clave de cuenta" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:28 +#: ../../../../inc/themes/material-blue/profiles.inc:40 +msgid "Ver historial de cuenta" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:32 +#: ../../../../inc/themes/material-blue/profiles.inc:45 +msgid "Editar cuenta" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:32 +#: ../../../../inc/themes/material-blue/profiles.inc:45 +msgid "Editar" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:37 +#: ../../../../inc/themes/material-blue/profiles.inc:50 +msgid "Editar clave de cuenta" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:37 +#: ../../../../inc/themes/material-blue/profiles.inc:50 +msgid "Editar Clave" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:41 +msgid "Añadir nueva cuenta" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:41 +msgid "Añadir" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:46 +msgid "Borrar cuenta" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:46 +msgid "Borrar" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:50 +msgid "Ver archivos de cuenta" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:61 +#: ../../../../inc/themes/material-blue/profiles.inc:72 +msgid "Configuración general" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:65 +msgid "Cambiar clave maestra" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:70 +msgid "Realizar copia de seguridad" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:70 +#: ../../../../inc/themes/material-blue/profiles.inc:82 +msgid "Backup" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:74 +#: ../../../../inc/themes/material-blue/profiles.inc:87 +msgid "Realizar importación de cuentas" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:81 +#: ../../../../inc/themes/material-blue/profiles.inc:93 +msgid "Gestión" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:85 +#: ../../../../inc/themes/material-blue/profiles.inc:99 +msgid "Gestión de usuarios" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:89 +#: ../../../../inc/themes/material-blue/profiles.inc:104 +msgid "Gestión de grupos" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:94 +#: ../../../../inc/themes/material-blue/profiles.inc:109 +msgid "Gestión de perfiles" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:94 +#: ../../../../inc/themes/material-blue/profiles.inc:109 +msgid "Perfiles" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:98 +#: ../../../../inc/themes/material-blue/profiles.inc:114 +msgid "Gestión de categorías" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:103 +#: ../../../../inc/themes/material-blue/profiles.inc:119 +msgid "Gestión de clientes" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:107 +#: ../../../../inc/themes/material-blue/profiles.inc:124 +msgid "Gestión de campos personalizados" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:112 +#: ../../../../inc/themes/material-blue/profiles.inc:129 +msgid "Gestión de autorizaciones API" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:112 +#: ../../../../inc/themes/material-blue/profiles.inc:129 +msgid "Autorizaciones API" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:120 +#: ../../../../inc/themes/material-blue/profiles.inc:135 +msgid "Otros" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:124 +#: ../../../../inc/themes/material-blue/profiles.inc:141 +msgid "Ver log de eventos" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:124 +#: ../../../../inc/themes/material-blue/profiles.inc:141 +msgid "Log de Eventos" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:132 +#: ../../../../inc/themes/material-blue/profiles.inc:148 +msgid "Usado por" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:139 +#: ../../../../inc/themes/material-blue/profiles.inc:155 +msgid "No usado" +msgstr "" + +#: ../../../../inc/themes/classic/request.inc:1 +#: ../../../../inc/themes/material-blue/request.inc:1 +msgid "Solicitar Modificación de Cuenta" +msgstr "" + +#: ../../../../inc/themes/classic/request.inc:22 +#: ../../../../inc/themes/material-blue/request.inc:25 +msgid "Petición" +msgstr "" + +#: ../../../../inc/themes/classic/request.inc:24 +#: ../../../../inc/themes/material-blue/request.inc:29 +msgid "Descripción de la petición" +msgstr "" + +#: ../../../../inc/themes/classic/request.inc:33 +#: ../../../../inc/themes/material-blue/account.inc:439 +#: ../../../../inc/themes/material-blue/editpass.inc:55 +#: ../../../../inc/themes/material-blue/request.inc:42 +msgid "Atrás" +msgstr "" + +#: ../../../../inc/themes/classic/request.inc:38 +#: ../../../../inc/themes/material-blue/request.inc:48 +msgid "Enviar" +msgstr "" + +#: ../../../../inc/themes/classic/search.inc:26 +#: ../../../../inc/themes/material-blue/search.inc:29 +msgid "Buscar en Wiki" +msgstr "" + +#: ../../../../inc/themes/classic/search.inc:62 +#: ../../../../inc/themes/material-blue/search.inc:65 +msgid "Abrir enlace a" +msgstr "" + +#: ../../../../inc/themes/classic/search.inc:80 +#: ../../../../inc/themes/material-blue/search.inc:89 +msgid "Archivos adjuntos" +msgstr "" + +#: ../../../../inc/themes/classic/search.inc:87 +#: ../../../../inc/themes/material-blue/search.inc:98 +msgid "Enlace a Wiki" +msgstr "" + +#: ../../../../inc/themes/classic/search.inc:151 +#: ../../../../inc/themes/material-blue/search.inc:163 +msgid "Filtro ON" +msgstr "" + +#: ../../../../inc/themes/classic/search.inc:155 +#: ../../../../inc/themes/material-blue/search.inc:167 +msgid "Global ON" +msgstr "" + +#: ../../../../inc/themes/classic/searchbox.inc:5 +#: ../../../../inc/themes/material-blue/searchbox.inc:5 +msgid "Limpiar" +msgstr "" + +#: ../../../../inc/themes/classic/searchbox.inc:6 +#: ../../../../inc/themes/material-blue/searchbox.inc:10 +msgid "Texto a buscar" +msgstr "" + +#: ../../../../inc/themes/classic/searchbox.inc:10 +#: ../../../../inc/themes/material-blue/searchbox.inc:15 +msgid "Parámetros especiales:" +msgstr "" + +#: ../../../../inc/themes/classic/searchbox.inc:13 +#: ../../../../inc/themes/material-blue/searchbox.inc:18 +msgid "Buscar cuentas a las que 'login' tenga acceso" +msgstr "" + +#: ../../../../inc/themes/classic/searchbox.inc:14 +#: ../../../../inc/themes/material-blue/searchbox.inc:19 +msgid "Buscar cuentas a las que 'group_name' tenga acceso" +msgstr "" + +#: ../../../../inc/themes/classic/searchbox.inc:18 +#: ../../../../inc/themes/material-blue/searchbox.inc:25 +#: ../../../../inc/themes/material-blue/searchbox.inc:28 +msgid "Búsqueda global" +msgstr "" + +#: ../../../../inc/themes/classic/searchbox.inc:41 +#: ../../../../inc/themes/material-blue/searchbox.inc:54 +msgid "CPP" +msgstr "" + +#: ../../../../inc/themes/classic/searchbox.inc:41 +#: ../../../../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: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/security.inc:21 +#: ../../../../inc/themes/material-blue/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/security.inc:29 +#: ../../../../inc/themes/material-blue/security.inc:29 +msgid "Activar" +msgstr "" + +#: ../../../../inc/themes/classic/security.inc:34 +#: ../../../../inc/themes/material-blue/security.inc:35 +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:43 +msgid "Código" +msgstr "" + +#: ../../../../inc/themes/classic/security.inc:44 +#: ../../../../inc/themes/material-blue/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/sessionbar.inc:6 +#: ../../../../inc/themes/material-blue/footer.inc:7 +msgid "Cambiar clave de usuario" +msgstr "" + +#: ../../../../inc/themes/classic/sessionbar.inc:9 +msgid "Preferencias" +msgstr "" + +#: ../../../../inc/themes/classic/sessionbar.inc:15 +#: ../../../../inc/themes/material-blue/footer.inc:5 +msgid "Salir" +msgstr "" + +#: ../../../../inc/themes/classic/tokens.inc:34 +#: ../../../../inc/themes/classic/users.inc:98 +#: ../../../../inc/themes/material-blue/tokens.inc:34 +#: ../../../../inc/themes/material-blue/users.inc:132 +msgid "Opciones" +msgstr "" + +#: ../../../../inc/themes/classic/tokens.inc:38 +#: ../../../../inc/themes/material-blue/tokens.inc:37 +#: ../../../../inc/themes/material-blue/tokens.inc:40 +msgid "Regenerar Autorización" +msgstr "" + +#: ../../../../inc/themes/classic/tokens.inc:43 +#: ../../../../inc/themes/material-blue/tokens.inc:46 +msgid "Token" +msgstr "" + +#: ../../../../inc/themes/classic/update.inc:18 +#: ../../../../inc/themes/material-blue/update.inc:20 +msgid "Actualizado" +msgstr "" + +#: ../../../../inc/themes/classic/update.inc:23 +#: ../../../../inc/themes/material-blue/update.inc:22 +msgid "Error al comprobar actualizaciones" +msgstr "" + +#: ../../../../inc/themes/classic/upgrade.inc:8 +#: ../../../../inc/themes/material-blue/upgrade.inc:8 +msgid "Actualización de BBDD" +msgstr "" + +#: ../../../../inc/themes/classic/upgrade.inc:10 +msgid "Introducir Código de Seguridad" +msgstr "" + +#: ../../../../inc/themes/classic/upgrade.inc:11 +#: ../../../../inc/themes/material-blue/upgrade.inc:14 +msgid "Código de Seguridad" +msgstr "" + +#: ../../../../inc/themes/classic/upgrade.inc:21 +#: ../../../../inc/themes/material-blue/upgrade.inc:26 +msgid "Iniciar Actualización" +msgstr "" + +#: ../../../../inc/themes/classic/users.inc:12 +#: ../../../../inc/themes/material-blue/users.inc:15 +msgid "Nombre de usuario completo" +msgstr "" + +#: ../../../../inc/themes/classic/users.inc:25 +#: ../../../../inc/themes/material-blue/users.inc:31 +msgid "Login de inicio de sesión" +msgstr "" + +#: ../../../../inc/themes/classic/users.inc:64 +#: ../../../../inc/themes/material-blue/users.inc:78 +msgid "Dirección de correo" +msgstr "" + +#: ../../../../inc/themes/classic/users.inc:103 +#: ../../../../inc/themes/material-blue/users.inc:136 +msgid "Administrador de la aplicación" +msgstr "" + +#: ../../../../inc/themes/classic/users.inc:103 +#: ../../../../inc/themes/material-blue/users.inc:139 +msgid "Admin. Aplicación" +msgstr "" + +#: ../../../../inc/themes/classic/users.inc:107 +#: ../../../../inc/themes/material-blue/users.inc:143 +msgid "Administrador de cuentas" +msgstr "" + +#: ../../../../inc/themes/classic/users.inc:107 +#: ../../../../inc/themes/material-blue/users.inc:146 +msgid "Admin. Cuentas" +msgstr "" + +#: ../../../../inc/themes/classic/users.inc:117 +#: ../../../../inc/themes/material-blue/users.inc:158 +msgid "Forzar cambio de clave" +msgstr "" + +#: ../../../../inc/themes/classic/users.inc:154 +#: ../../../../inc/themes/material-blue/users.inc:198 +msgid "Entradas" +msgstr "" + +#: ../../../../inc/themes/classic/users.inc:159 +#: ../../../../inc/themes/material-blue/users.inc:203 +msgid "Último Acceso" +msgstr "" + +#: ../../../../inc/themes/classic/users.inc:169 +#: ../../../../inc/themes/material-blue/users.inc:213 +msgid "Fecha Clave Maestra" +msgstr "" + +#: ../../../../inc/themes/classic/wiki.inc:11 +#: ../../../../inc/themes/material-blue/wiki.inc:11 +msgid "Habilitar enlaces Wiki" +msgstr "" + +#: ../../../../inc/themes/classic/wiki.inc:15 +#: ../../../../inc/themes/material-blue/wiki.inc:15 +msgid "Habilita la opción de añadir un enlace a Wiki externa para los resultados de la búsqueda." +msgstr "" + +#: ../../../../inc/themes/classic/wiki.inc:27 +#: ../../../../inc/themes/material-blue/wiki.inc:30 +#: ../../../../inc/themes/material-blue/wiki.inc:56 +msgid "URL de búsqueda Wiki" +msgstr "" + +#: ../../../../inc/themes/classic/wiki.inc:31 +#: ../../../../inc/themes/material-blue/wiki.inc:34 +msgid "URL que utiliza la wiki para realizar una búsqueda de una página." +msgstr "" + +#: ../../../../inc/themes/classic/wiki.inc:35 +#: ../../../../inc/themes/material-blue/wiki.inc:38 +msgid "Como parámetro se utiliza el nombre del cliente." +msgstr "" + +#: ../../../../inc/themes/classic/wiki.inc:39 +#: ../../../../inc/themes/classic/wiki.inc:66 +#: ../../../../inc/themes/material-blue/wiki.inc:42 +#: ../../../../inc/themes/material-blue/wiki.inc:74 +msgid "Ejemplo:" +msgstr "" + +#: ../../../../inc/themes/classic/wiki.inc:54 +#: ../../../../inc/themes/material-blue/wiki.inc:62 +#: ../../../../inc/themes/material-blue/wiki.inc:87 +msgid "URL de página en Wiki" +msgstr "" + +#: ../../../../inc/themes/classic/wiki.inc:58 +#: ../../../../inc/themes/material-blue/wiki.inc:66 +msgid "URL que utiliza la wiki para acceder a los detalles de una página." +msgstr "" + +#: ../../../../inc/themes/classic/wiki.inc:62 +#: ../../../../inc/themes/material-blue/wiki.inc:70 +msgid "El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda de la Wiki." +msgstr "" + +#: ../../../../inc/themes/classic/wiki.inc:81 +#: ../../../../inc/themes/material-blue/wiki.inc:93 +msgid "Prefijo para nombre de cuenta" +msgstr "" + +#: ../../../../inc/themes/classic/wiki.inc:85 +#: ../../../../inc/themes/material-blue/wiki.inc:97 +msgid "Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki." +msgstr "" + +#: ../../../../inc/themes/classic/wiki.inc:121 +#: ../../../../inc/themes/material-blue/wiki.inc:135 +msgid "Añadir filtro" +msgstr "" + +#: ../../../../inc/themes/classic/wiki.inc:122 +#: ../../../../inc/themes/material-blue/wiki.inc:136 +msgid "Eliminar filtro" +msgstr "" + +#: ../../../../inc/themes/material-blue/account.inc:4 +msgid "Histórico" +msgstr "" + +#: ../../../../inc/themes/material-blue/account.inc:42 +msgid "Seleccionar o escribir para crear uno nuevo" +msgstr "" + +#: ../../../../inc/themes/material-blue/account.inc:110 +msgid "Clave (Repetir)" +msgstr "" + +#: ../../../../inc/themes/material-blue/backup.inc:58 +#: ../../../../inc/themes/material-blue/backup.inc:144 +#: ../../../../inc/themes/material-blue/encryption.inc:118 +#: ../../../../inc/themes/material-blue/import.inc:217 +msgid "Realizar" +msgstr "" + +#: ../../../../inc/themes/material-blue/config.inc:197 +msgid "Número de resultados por página" +msgstr "" + +#: ../../../../inc/themes/material-blue/config.inc:292 +msgid "Tamaño máximo de archivo en bytes" +msgstr "" + +#: ../../../../inc/themes/material-blue/config.inc:299 +msgid "Proxy" +msgstr "" + +#: ../../../../inc/themes/material-blue/config.inc:305 +msgid "Usar Proxy" +msgstr "" + +#: ../../../../inc/themes/material-blue/config.inc:326 +msgid "Servidor proxy" +msgstr "" + +#: ../../../../inc/themes/material-blue/config.inc:340 +msgid "Puerto del servidor proxy" +msgstr "" + +#: ../../../../inc/themes/material-blue/config.inc:354 +msgid "Usuario del servidor proxy" +msgstr "" + +#: ../../../../inc/themes/material-blue/config.inc:368 +msgid "Clave del servidor proxy" +msgstr "" + +#: ../../../../inc/themes/material-blue/customfields.inc:14 +msgid "Nombre del campo" +msgstr "" + +#: ../../../../inc/themes/material-blue/customfields.inc:47 +msgid "Ayuda del campo" +msgstr "" + +#: ../../../../inc/themes/material-blue/footer.inc:11 +msgid "Preferencias de usuario" +msgstr "" + +#: ../../../../inc/themes/material-blue/import.inc:104 +msgid "Permite realizar la importación de Cuentas, Categorías y Clientes desde archivos XML y CSV." +msgstr "" + +#: ../../../../inc/themes/material-blue/install.inc:31 +msgid "Usuario administrador de sysPass" +msgstr "" + +#: ../../../../inc/themes/material-blue/install.inc:78 +msgid "Usuario acceso BBDD" +msgstr "" + +#: ../../../../inc/themes/material-blue/install.inc:83 +msgid "Usuario con permisos de administrador de MySQL" +msgstr "" + +#: ../../../../inc/themes/material-blue/install.inc:90 +msgid "Clave acceso BBDD" +msgstr "" + +#: ../../../../inc/themes/material-blue/install.inc:97 +msgid "Nombre BBDD para sysPass" +msgstr "" + +#: ../../../../inc/themes/material-blue/install.inc:109 +msgid "Servidor BBDD para sysPass" +msgstr "" + +#: ../../../../inc/themes/material-blue/install.inc:114 +msgid "Nombre del servidor para instalar la base de datos de sysPass" +msgstr "" + +#: ../../../../inc/themes/material-blue/ldap.inc:96 +msgid "Clave del usuario de conexión a LDAP." +msgstr "" + +#: ../../../../inc/themes/material-blue/mail.inc:118 +msgid "Habilita que los usuarios puedan solicitar modificaciones o acceso a las cuentas sin permisos." +msgstr "" + +#: ../../../../inc/themes/material-blue/profiles.inc:25 +msgid "Crear nueva cuenta" +msgstr "" + +#: ../../../../inc/themes/material-blue/profiles.inc:25 +msgid "Crear" +msgstr "" + +#: ../../../../inc/themes/material-blue/profiles.inc:55 +msgid "Eliminar cuenta" +msgstr "" + +#: ../../../../inc/themes/material-blue/profiles.inc:55 +msgid "Eliminar" +msgstr "" + +#: ../../../../inc/themes/material-blue/profiles.inc:60 +msgid "Var archivos de cuenta" +msgstr "" + +#: ../../../../inc/themes/material-blue/profiles.inc:77 +msgid "Opciones de encriptación" +msgstr "" + +#: ../../../../inc/themes/material-blue/profiles.inc:82 +msgid "Realizar copia de seguridad y exportar" +msgstr "" + +#: ../../../../inc/themes/material-blue/searchbox.inc:20 +msgid "Buscar cuentas con archivos con el nombre 'file_name'" +msgstr "" + +#: ../../../../inc/themes/material-blue/security.inc:4 +msgid "Autentificación" +msgstr "" diff --git a/inc/locales/ru_RU/LC_MESSAGES/messages.mo b/inc/locales/ru_RU/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..c4686f847025d1d0041d08da519a5253d6a952e7 GIT binary patch literal 60443 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 tho;U`&gHV7SIBw^a+, 2012-2015 +msgid "" +msgstr "" +"Project-Id-Version: sysPass\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-09-05 15:29+0100\n" +"PO-Revision-Date: 2015-09-05 15:30+0100\n" +"Last-Translator: nuxsmin \n" +"Language-Team: \n" +"Language: ru_RU\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"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" +"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-SearchPath-0: ../../../..\n" + +#: ../../../../ajax/ajax_2fa.php:35 ../../../../ajax/ajax_accountSave.php:41 +#: ../../../../ajax/ajax_appMgmtSave.php:42 +#: ../../../../ajax/ajax_backup.php:39 ../../../../ajax/ajax_checkLdap.php:41 +#: ../../../../ajax/ajax_configSave.php:41 ../../../../ajax/ajax_files.php:41 +#: ../../../../ajax/ajax_getFiles.php:46 ../../../../ajax/ajax_import.php:49 +#: ../../../../ajax/ajax_migrate.php:45 ../../../../ajax/ajax_passReset.php:37 +#: ../../../../ajax/ajax_search.php:41 +#: ../../../../ajax/ajax_sendRequest.php:41 +#: ../../../../ajax/ajax_userPrefsSave.php:42 +msgid "CONSULTA INVÁLIDA" +msgstr "ОШИБОЧНЫЙ ЗАПРОС" + +#: ../../../../ajax/ajax_2fa.php:55 +#, fuzzy +msgid "Código correcto" +msgstr "Введите код безопасности" + +#: ../../../../ajax/ajax_2fa.php:58 ../../../../ajax/ajax_userPrefsSave.php:67 +#, fuzzy +msgid "Código incorrecto" +msgstr "Ошибка входа" + +#: ../../../../ajax/ajax_accountSave.php:35 +#: ../../../../ajax/ajax_appMgmtSave.php:36 +#: ../../../../ajax/ajax_backup.php:33 ../../../../ajax/ajax_checkLdap.php:35 +#: ../../../../ajax/ajax_configSave.php:35 ../../../../ajax/ajax_import.php:35 +#: ../../../../ajax/ajax_migrate.php:35 +#: ../../../../ajax/ajax_sendRequest.php:35 +#: ../../../../ajax/ajax_userPrefsSave.php:36 +#: ../../../../ajax/ajax_viewpass.php:36 +msgid "La sesión no se ha iniciado o ha caducado" +msgstr "Сессия истекла или ошибка сессии" + +#: ../../../../ajax/ajax_accountSave.php:75 +#: ../../../../ajax/ajax_accountSave.php:92 +msgid "Es necesario un nombre de cuenta" +msgstr "Необходимо имя учетной записи" + +#: ../../../../ajax/ajax_accountSave.php:77 +#: ../../../../ajax/ajax_accountSave.php:90 +#: ../../../../ajax/ajax_appMgmtSave.php:326 +msgid "Es necesario un nombre de cliente" +msgstr "Необходимо имя заказчика" + +#: ../../../../ajax/ajax_accountSave.php:79 +#: ../../../../ajax/ajax_accountSave.php:94 +msgid "Es necesario un usuario" +msgstr "Необходимо имя пользователя" + +#: ../../../../ajax/ajax_accountSave.php:81 +msgid "Es necesario una clave" +msgstr "Необходим пароль" + +#: ../../../../ajax/ajax_accountSave.php:83 +#: ../../../../ajax/ajax_accountSave.php:107 +#: ../../../../ajax/ajax_appMgmtSave.php:111 +#: ../../../../ajax/ajax_appMgmtSave.php:146 +#: ../../../../ajax/ajax_backup.php:62 +msgid "Las claves no coinciden" +msgstr "Пароль и подтверждение не совпадают" + +#: ../../../../ajax/ajax_accountSave.php:85 +#: ../../../../ajax/ajax_accountSave.php:96 +#, fuzzy +msgid "Es necesario una categoría" +msgstr "Необходим пароль" + +#: ../../../../ajax/ajax_accountSave.php:100 +#: ../../../../ajax/ajax_accountSave.php:111 +msgid "Id inválido" +msgstr "Ошибочный ID" + +#: ../../../../ajax/ajax_accountSave.php:105 +#: ../../../../ajax/ajax_appMgmtSave.php:109 +#: ../../../../ajax/ajax_appMgmtSave.php:144 +msgid "La clave no puede estar en blanco" +msgstr "Пароль не может быть пустым" + +#: ../../../../ajax/ajax_accountSave.php:114 +#: ../../../../ajax/ajax_accountSave.php:258 +#: ../../../../ajax/ajax_appMgmtSave.php:532 +#: ../../../../ajax/ajax_configSave.php:290 +#: ../../../../ajax/ajax_userPrefsSave.php:80 ../../../../api.php:53 +msgid "Acción Inválida" +msgstr "Ошибочное действие" + +#: ../../../../ajax/ajax_accountSave.php:168 +msgid "Cuenta creada" +msgstr "Аккаунт создан" + +#: ../../../../ajax/ajax_accountSave.php:171 +msgid "Error al crear la cuenta" +msgstr "Ошибка при создании учетной записи" + +#: ../../../../ajax/ajax_accountSave.php:206 +msgid "Sin cambios" +msgstr "Нет изменений" + +#: ../../../../ajax/ajax_accountSave.php:218 +msgid "Cuenta actualizada" +msgstr "Информация об учетной записи изменена" + +#: ../../../../ajax/ajax_accountSave.php:221 +msgid "Error al modificar la cuenta" +msgstr "Ошибка при изменении учетной записи" + +#: ../../../../ajax/ajax_accountSave.php:228 +msgid "Cuenta eliminada" +msgstr "Аккаунт удален" + +#: ../../../../ajax/ajax_accountSave.php:231 +msgid "Error al eliminar la cuenta" +msgstr "Ошибка при удалении учетной записи" + +#: ../../../../ajax/ajax_accountSave.php:241 +#: ../../../../ajax/ajax_appMgmtSave.php:150 +#: ../../../../ajax/ajax_passReset.php:74 +msgid "Clave actualizada" +msgstr "Пароль изменен" + +#: ../../../../ajax/ajax_accountSave.php:244 +msgid "Error al actualizar la clave" +msgstr "Ошибка изменения пароля" + +#: ../../../../ajax/ajax_accountSave.php:251 +msgid "Cuenta restaurada" +msgstr "Аккаунт восстановлен" + +#: ../../../../ajax/ajax_accountSave.php:254 +msgid "Error al restaurar cuenta" +msgstr "Ошибка восстановления учетной записи" + +#: ../../../../ajax/ajax_appMgmtData.php:54 +#, fuzzy +msgid "Ver Usuario" +msgstr "Просмотр информации пользователя" + +#: ../../../../ajax/ajax_appMgmtData.php:61 +#: ../../../../web/UsersMgmtC.class.php:136 +msgid "Editar Usuario" +msgstr "Редактировать пользователя" + +#: ../../../../ajax/ajax_appMgmtData.php:67 +#: ../../../../inc/UserBase.class.php:381 +#: ../../../../web/UsersMgmtC.class.php:121 +msgid "Nuevo Usuario" +msgstr "Создать пользователя" + +#: ../../../../ajax/ajax_appMgmtData.php:73 +#, fuzzy +msgid "Ver Grupo" +msgstr "Показать" + +#: ../../../../ajax/ajax_appMgmtData.php:80 +#: ../../../../web/UsersMgmtC.class.php:202 +msgid "Editar Grupo" +msgstr "Редактировать группу" + +#: ../../../../ajax/ajax_appMgmtData.php:86 +#: ../../../../inc/Groups.class.php:152 ../../../../inc/Groups.class.php:253 +#: ../../../../web/UsersMgmtC.class.php:194 +msgid "Nuevo Grupo" +msgstr "Создать группу" + +#: ../../../../ajax/ajax_appMgmtData.php:92 +#, fuzzy +msgid "Ver Perfil" +msgstr "Показать" + +#: ../../../../ajax/ajax_appMgmtData.php:99 +#: ../../../../web/UsersMgmtC.class.php:267 +msgid "Editar Perfil" +msgstr "Редактировать профиль" + +#: ../../../../ajax/ajax_appMgmtData.php:105 +#: ../../../../inc/ProfileBase.class.php:512 +#: ../../../../web/UsersMgmtC.class.php:252 +msgid "Nuevo Perfil" +msgstr "Создать профиль" + +#: ../../../../ajax/ajax_appMgmtData.php:111 +#, fuzzy +msgid "Ver Cliente" +msgstr "Показать" + +#: ../../../../ajax/ajax_appMgmtData.php:118 +#: ../../../../web/AccountsMgmtC.class.php:152 +msgid "Editar Cliente" +msgstr "Редактировать заказчика" + +#: ../../../../ajax/ajax_appMgmtData.php:124 +#: ../../../../inc/Customer.class.php:65 +#: ../../../../web/AccountsMgmtC.class.php:145 +msgid "Nuevo Cliente" +msgstr "Новый заказчик" + +#: ../../../../ajax/ajax_appMgmtData.php:130 +#, fuzzy +msgid "Ver Categoría" +msgstr "Показать" + +#: ../../../../ajax/ajax_appMgmtData.php:137 +#: ../../../../web/AccountsMgmtC.class.php:94 +msgid "Editar Categoría" +msgstr "Редактировать категорию" + +#: ../../../../ajax/ajax_appMgmtData.php:143 +#: ../../../../inc/Category.class.php:83 +#: ../../../../web/AccountsMgmtC.class.php:86 +msgid "Nueva Categoría" +msgstr "Создать категорию" + +#: ../../../../ajax/ajax_appMgmtData.php:149 +#, fuzzy +msgid "Ver Autorización" +msgstr "Показать" + +#: ../../../../ajax/ajax_appMgmtData.php:156 +#: ../../../../inc/ApiTokens.class.php:189 +#: ../../../../web/UsersMgmtC.class.php:399 +#, fuzzy +msgid "Nueva Autorización" +msgstr "Создать категорию" + +#: ../../../../ajax/ajax_appMgmtData.php:162 +#: ../../../../web/UsersMgmtC.class.php:414 +#, fuzzy +msgid "Editar Autorización" +msgstr "Изменить" + +#: ../../../../ajax/ajax_appMgmtData.php:168 +#: ../../../../web/AccountsMgmtC.class.php:273 +#, fuzzy +msgid "Nuevo Campo" +msgstr "Создать пользователя" + +#: ../../../../ajax/ajax_appMgmtData.php:174 +#: ../../../../web/AccountsMgmtC.class.php:280 +#, fuzzy +msgid "Editar Campo" +msgstr "Изменить" + +#: ../../../../ajax/ajax_appMgmtSave.php:85 +msgid "Es necesario un nombre de usuario" +msgstr "Необходимо имя пользователя" + +#: ../../../../ajax/ajax_appMgmtSave.php:87 +msgid "Es necesario un login" +msgstr "Необходим логин" + +#: ../../../../ajax/ajax_appMgmtSave.php:89 +msgid "Es necesario un perfil" +msgstr "Необходим профиль" + +#: ../../../../ajax/ajax_appMgmtSave.php:91 +msgid "Es necesario un grupo" +msgstr "Необходима группа" + +#: ../../../../ajax/ajax_appMgmtSave.php:93 +msgid "Es necesario un email" +msgstr "Необходим email" + +#: ../../../../ajax/ajax_appMgmtSave.php:95 +#: ../../../../ajax/ajax_appMgmtSave.php:142 +#: ../../../../ajax/ajax_appMgmtSave.php:157 +#: ../../../../ajax/ajax_configSave.php:265 +#: ../../../../ajax/ajax_import.php:39 ../../../../ajax/ajax_migrate.php:39 +#: ../../../../ajax/ajax_userPrefsSave.php:56 +msgid "Ey, esto es una DEMO!!" +msgstr "Ey, это DEMO!!" + +#: ../../../../ajax/ajax_appMgmtSave.php:100 +msgid "Login de usuario duplicado" +msgstr "Указанный логин уже существует" + +#: ../../../../ajax/ajax_appMgmtSave.php:103 +msgid "Email de usuario duplicado" +msgstr "Указанный email уже существует" + +#: ../../../../ajax/ajax_appMgmtSave.php:122 +msgid "Usuario creado" +msgstr "Пользователь создан" + +#: ../../../../ajax/ajax_appMgmtSave.php:125 +msgid "Error al crear el usuario" +msgstr "Ошибка при создании пользователя" + +#: ../../../../ajax/ajax_appMgmtSave.php:135 +#: ../../../../inc/UserUtil.class.php:103 +msgid "Usuario actualizado" +msgstr "Данные пользователя обновлены" + +#: ../../../../ajax/ajax_appMgmtSave.php:138 +msgid "Error al actualizar el usuario" +msgstr "Ошибка при обновлении данных пользователя" + +#: ../../../../ajax/ajax_appMgmtSave.php:153 +#: ../../../../ajax/ajax_passReset.php:78 +msgid "Error al modificar la clave" +msgstr "Ошибка изменения пароля" + +#: ../../../../ajax/ajax_appMgmtSave.php:159 +msgid "No es posible eliminar, usuario en uso" +msgstr "Не могу удалить, пользователь работает" + +#: ../../../../ajax/ajax_appMgmtSave.php:163 +msgid "Usuario eliminado" +msgstr "Пользователь удален" + +#: ../../../../ajax/ajax_appMgmtSave.php:166 +msgid "Error al eliminar el usuario" +msgstr "Ошибка удаления пользователя" + +#: ../../../../ajax/ajax_appMgmtSave.php:181 +msgid "Es necesario un nombre de grupo" +msgstr "Необходимо имя группы" + +#: ../../../../ajax/ajax_appMgmtSave.php:189 +msgid "Nombre de grupo duplicado" +msgstr "Указанное имя группы уже существует" + +#: ../../../../ajax/ajax_appMgmtSave.php:201 +msgid "Grupo creado" +msgstr "Группа создана" + +#: ../../../../ajax/ajax_appMgmtSave.php:203 +msgid "Error al crear el grupo" +msgstr "Ошибка при создании группы" + +#: ../../../../ajax/ajax_appMgmtSave.php:214 +msgid "Grupo actualizado" +msgstr "Группа обновлена" + +#: ../../../../ajax/ajax_appMgmtSave.php:217 +msgid "Error al actualizar el grupo" +msgstr "Ошибка при обновлении группы" + +#: ../../../../ajax/ajax_appMgmtSave.php:226 +#: ../../../../ajax/ajax_appMgmtSave.php:303 +#: ../../../../inc/CustomFieldsBase.class.php:83 +#: ../../../../inc/themes/classic/account.inc:109 +#: ../../../../inc/themes/classic/groups.inc:24 +#: ../../../../inc/themes/classic/profiles.inc:85 +#: ../../../../inc/themes/material-blue/account.inc:134 +#: ../../../../inc/themes/material-blue/groups.inc:32 +#: ../../../../inc/themes/material-blue/profiles.inc:99 +msgid "Usuarios" +msgstr "Пользователи" + +#: ../../../../ajax/ajax_appMgmtSave.php:230 +#: ../../../../inc/Category.class.php:266 +#: ../../../../inc/CustomFieldsBase.class.php:80 +#: ../../../../inc/Customer.class.php:150 +#: ../../../../inc/themes/classic/profiles.inc:15 +#: ../../../../inc/themes/material-blue/config.inc:139 +#: ../../../../inc/themes/material-blue/profiles.inc:19 +msgid "Cuentas" +msgstr "Учетные записи" + +#: ../../../../ajax/ajax_appMgmtSave.php:233 +#: ../../../../ajax/ajax_appMgmtSave.php:305 +#: ../../../../inc/Category.class.php:119 +#: ../../../../inc/Customer.class.php:150 +msgid "No es posible eliminar" +msgstr "Невозможно удалить" + +#: ../../../../ajax/ajax_appMgmtSave.php:233 +msgid "Grupo en uso por:" +msgstr "Группа используется:" + +#: ../../../../ajax/ajax_appMgmtSave.php:238 +msgid "Grupo eliminado" +msgstr "Группа удалена" + +#: ../../../../ajax/ajax_appMgmtSave.php:241 +msgid "Error al eliminar el grupo" +msgstr "Ошибка при удалении группы" + +#: ../../../../ajax/ajax_appMgmtSave.php:280 +msgid "Es necesario un nombre de perfil" +msgstr "Необходимо имя профиля" + +#: ../../../../ajax/ajax_appMgmtSave.php:282 +msgid "Nombre de perfil duplicado" +msgstr "Профиль с таким именем уже существует" + +#: ../../../../ajax/ajax_appMgmtSave.php:287 +msgid "Perfil creado" +msgstr "Профиль создан" + +#: ../../../../ajax/ajax_appMgmtSave.php:290 +msgid "Error al crear el perfil" +msgstr "Ошибка при создании профиля" + +#: ../../../../ajax/ajax_appMgmtSave.php:293 +msgid "Perfil actualizado" +msgstr "Профиль изменен" + +#: ../../../../ajax/ajax_appMgmtSave.php:296 +msgid "Error al actualizar el perfil" +msgstr "Ошибка при изменении профиля" + +#: ../../../../ajax/ajax_appMgmtSave.php:305 +msgid "Perfil en uso por:" +msgstr "Профиль используется:" + +#: ../../../../ajax/ajax_appMgmtSave.php:308 +msgid "Perfil eliminado" +msgstr "Профиль удален" + +#: ../../../../ajax/ajax_appMgmtSave.php:311 +msgid "Error al eliminar el perfil" +msgstr "Ошибка при удалении профиля" + +#: ../../../../ajax/ajax_appMgmtSave.php:346 +msgid "Cliente creado" +msgstr "Заказчик добавлен" + +#: ../../../../ajax/ajax_appMgmtSave.php:361 +msgid "Cliente actualizado" +msgstr "Информация о заказчике обновлена" + +#: ../../../../ajax/ajax_appMgmtSave.php:371 +msgid "Cliente eliminado" +msgstr "Заказчик удален" + +#: ../../../../ajax/ajax_appMgmtSave.php:385 +msgid "Es necesario un nombre de categoría" +msgstr "Необходимо имя категории" + +#: ../../../../ajax/ajax_appMgmtSave.php:405 +msgid "Categoría creada" +msgstr "Категория создана" + +#: ../../../../ajax/ajax_appMgmtSave.php:420 +msgid "Categoría actualizada" +msgstr "Информация о категории изменена" + +#: ../../../../ajax/ajax_appMgmtSave.php:431 +msgid "Categoría eliminada" +msgstr "Категория удалена" + +#: ../../../../ajax/ajax_appMgmtSave.php:447 +#, fuzzy +msgid "Usuario o acción no indicado" +msgstr "Пользователь / пароль не введены" + +#: ../../../../ajax/ajax_appMgmtSave.php:457 +#, fuzzy +msgid "Autorización creada" +msgstr "Аккаунт создан" + +#: ../../../../ajax/ajax_appMgmtSave.php:465 +#, fuzzy +msgid "Autorización actualizada" +msgstr "Информация об учетной записи изменена" + +#: ../../../../ajax/ajax_appMgmtSave.php:475 +#, fuzzy +msgid "Autorización eliminada" +msgstr "Аккаунт удален" + +#: ../../../../ajax/ajax_appMgmtSave.php:492 +#, fuzzy +msgid "Nombre del campo no indicado" +msgstr "Имя заказчика" + +#: ../../../../ajax/ajax_appMgmtSave.php:494 +#, fuzzy +msgid "Tipo del campo no indicado" +msgstr "Данный тип файлов запрещен" + +#: ../../../../ajax/ajax_appMgmtSave.php:496 +msgid "Módulo del campo no indicado" +msgstr "" + +#: ../../../../ajax/ajax_appMgmtSave.php:510 +#, fuzzy +msgid "Campo creado" +msgstr "Пользователь создан" + +#: ../../../../ajax/ajax_appMgmtSave.php:519 +#, fuzzy +msgid "Campo actualizado" +msgstr "Обновлено" + +#: ../../../../ajax/ajax_appMgmtSave.php:529 +#, fuzzy +msgid "Campo eliminado" +msgstr "Пользователь удален" + +#: ../../../../ajax/ajax_backup.php:52 ../../../../ajax/ajax_backup.php:57 +#: ../../../../inc/themes/classic/backup.inc:54 +msgid "Realizar Backup" +msgstr "Выполнить резервное копирование" + +#: ../../../../ajax/ajax_backup.php:52 ../../../../ajax/ajax_backup.php:54 +msgid "Error al realizar el backup" +msgstr "Ошибка при выполнении резервной копии" + +#: ../../../../ajax/ajax_backup.php:54 ../../../../ajax/ajax_backup.php:68 +#: ../../../../ajax/ajax_checkLdap.php:57 ../../../../inc/Import.class.php:128 +#: ../../../../inc/Migrate.class.php:93 +msgid "Revise el registro de eventos para más detalles" +msgstr "Пожалуйста, за деталями обратиться в журнал событий" + +#: ../../../../ajax/ajax_backup.php:57 +msgid "Copia de la aplicación y base de datos realizada correctamente" +msgstr "Резервная копия программы и базы успешно создана" + +#: ../../../../ajax/ajax_backup.php:59 +msgid "Proceso de backup finalizado" +msgstr "Процесс резервного копирования закончен." + +#: ../../../../ajax/ajax_backup.php:66 ../../../../ajax/ajax_backup.php:71 +#, fuzzy +msgid "Realizar Exportación" +msgstr "Выполнить резервное копирование" + +#: ../../../../ajax/ajax_backup.php:66 +#, fuzzy +msgid "Error al realizar la exportación de cuentas" +msgstr "Ошибка создания файлов учетных записей" + +#: ../../../../ajax/ajax_backup.php:68 +#, fuzzy +msgid "Error al realizar la exportación" +msgstr "Ошибка при выполнении резервной копии" + +#: ../../../../ajax/ajax_backup.php:71 +#, fuzzy +msgid "Exportación de cuentas realizada correctamente" +msgstr "Конфигурация была успешно обновлена." + +#: ../../../../ajax/ajax_backup.php:73 +#, fuzzy +msgid "Proceso de exportación finalizado" +msgstr "Процесс резервного копирования закончен." + +#: ../../../../ajax/ajax_checkLdap.php:51 ../../../../inc/Ldap.class.php:248 +msgid "Los parámetros de LDAP no están configurados" +msgstr "Параметры LDAP не указаны" + +#: ../../../../ajax/ajax_checkLdap.php:57 +msgid "Error de conexión a LDAP" +msgstr "Ошибка подключения к LDAP" + +#: ../../../../ajax/ajax_checkLdap.php:59 +msgid "Conexión a LDAP correcta" +msgstr "Подключение к LDAP успешно" + +#: ../../../../ajax/ajax_checkLdap.php:59 +msgid "Objetos encontrados" +msgstr "Найдено объектов" + +#: ../../../../ajax/ajax_configSave.php:55 +msgid "Modificar Configuración" +msgstr "Изменить конфигурацию" + +#: ../../../../ajax/ajax_configSave.php:60 +#, fuzzy +msgid "El tamaño máximo por archivo es de 16MB" +msgstr "Максимальный размер файла 16MB" + +#: ../../../../ajax/ajax_configSave.php:114 +#, fuzzy +msgid "Faltan parámetros de Proxy" +msgstr "Пропущены настройки Wiki" + +#: ../../../../ajax/ajax_configSave.php:125 +#: ../../../../web/ConfigC.class.php:122 +#: ../../../../inc/themes/classic/profiles.inc:61 +#: ../../../../inc/themes/material-blue/profiles.inc:72 +msgid "General" +msgstr "Основное" + +#: ../../../../ajax/ajax_configSave.php:137 +msgid "Faltan parámetros de Wiki" +msgstr "Пропущены настройки Wiki" + +#: ../../../../ajax/ajax_configSave.php:147 +#: ../../../../web/ConfigC.class.php:254 +#: ../../../../inc/themes/classic/wiki.inc:4 +#: ../../../../inc/themes/material-blue/wiki.inc:4 +msgid "Wiki" +msgstr "Wiki" + +#: ../../../../ajax/ajax_configSave.php:164 +msgid "Faltan parámetros de LDAP" +msgstr "Пропущены настройки LDAP" + +#: ../../../../ajax/ajax_configSave.php:179 +#: ../../../../web/ConfigC.class.php:286 +#: ../../../../inc/themes/classic/ldap.inc:4 +#: ../../../../inc/themes/material-blue/ldap.inc:4 +msgid "LDAP" +msgstr "LDAP" + +#: ../../../../ajax/ajax_configSave.php:196 +msgid "Faltan parámetros de Correo" +msgstr "Пропущены настройки почты" + +#: ../../../../ajax/ajax_configSave.php:216 +#: ../../../../web/ConfigC.class.php:316 +#: ../../../../inc/themes/classic/mail.inc:4 +#: ../../../../inc/themes/material-blue/mail.inc:4 +msgid "Correo" +msgstr "Mail" + +#: ../../../../ajax/ajax_configSave.php:226 +msgid "Configuración actualizada" +msgstr "Конфигурация изменена" + +#: ../../../../ajax/ajax_configSave.php:235 +#: ../../../../ajax/ajax_configSave.php:275 +#: ../../../../ajax/ajax_viewpass.php:60 +#: ../../../../inc/Controller.class.php:169 +msgid "Clave maestra actualizada" +msgstr "Мастер-пароль изменен" + +#: ../../../../ajax/ajax_configSave.php:235 +#: ../../../../ajax/ajax_viewpass.php:60 +#: ../../../../inc/Controller.class.php:169 +msgid "Reinicie la sesión para cambiarla" +msgstr "Перезайдите для вступления изменений" + +#: ../../../../ajax/ajax_configSave.php:237 +msgid "Clave maestra no indicada" +msgstr "Необходим мастер-пароль" + +#: ../../../../ajax/ajax_configSave.php:239 +msgid "Se ha de confirmar el cambio de clave" +msgstr "Изменение пароля должно быть подтверждено" + +#: ../../../../ajax/ajax_configSave.php:241 +msgid "Las claves son idénticas" +msgstr "Пароли одинаковы" + +#: ../../../../ajax/ajax_configSave.php:243 +msgid "Las claves maestras no coinciden" +msgstr "Мастер-пароль не совпадает" + +#: ../../../../ajax/ajax_configSave.php:245 +msgid "La clave maestra actual no coincide" +msgstr "Текущий мастер-пароль ошибочен" + +#: ../../../../ajax/ajax_configSave.php:254 +msgid "Errores al actualizar las claves de las cuentas" +msgstr "Ошибка при изменении паролей учетной записи" + +#: ../../../../ajax/ajax_configSave.php:260 +#, fuzzy +msgid "Errores al actualizar las claves de las cuentas del histórico" +msgstr "Ошибка при изменении паролей учетной записи" + +#: ../../../../ajax/ajax_configSave.php:273 +#: ../../../../inc/Account.class.php:497 +msgid "Actualizar Clave Maestra" +msgstr "Изменить мастер-пароль" + +#: ../../../../ajax/ajax_configSave.php:277 +msgid "Error al guardar el hash de la clave maestra" +msgstr "Ошибка при сохранении хеша мастер-пароля" + +#: ../../../../ajax/ajax_configSave.php:285 +#, fuzzy +msgid "Generar Clave Temporal" +msgstr "Сгенерировать пароль" + +#: ../../../../ajax/ajax_configSave.php:285 +#: ../../../../inc/themes/classic/account.inc:83 +#: ../../../../inc/themes/classic/editpass.inc:25 +#: ../../../../inc/themes/classic/install.inc:38 +#: ../../../../inc/themes/classic/install.inc:39 +#: ../../../../inc/themes/classic/login.inc:10 +#: ../../../../inc/themes/classic/login.inc:22 +#: ../../../../inc/themes/classic/mail.inc:55 +#: ../../../../inc/themes/classic/passreset.inc:29 +#: ../../../../inc/themes/classic/users.inc:75 +#: ../../../../inc/themes/classic/userspass.inc:8 +#: ../../../../inc/themes/classic/userspass.inc:11 +#: ../../../../inc/themes/material-blue/account.inc:95 +#: ../../../../inc/themes/material-blue/account.inc:100 +#: ../../../../inc/themes/material-blue/config.inc:360 +#: ../../../../inc/themes/material-blue/editpass.inc:26 +#: ../../../../inc/themes/material-blue/editpass.inc:31 +#: ../../../../inc/themes/material-blue/editpass.inc:41 +#: ../../../../inc/themes/material-blue/install.inc:44 +#: ../../../../inc/themes/material-blue/ldap.inc:105 +#: ../../../../inc/themes/material-blue/login.inc:16 +#: ../../../../inc/themes/material-blue/login.inc:38 +#: ../../../../inc/themes/material-blue/mail.inc:73 +#: ../../../../inc/themes/material-blue/mail.inc:80 +#: ../../../../inc/themes/material-blue/passreset.inc:31 +#: ../../../../inc/themes/material-blue/users.inc:89 +#: ../../../../inc/themes/material-blue/users.inc:96 +#: ../../../../inc/themes/material-blue/userspass.inc:8 +#: ../../../../inc/themes/material-blue/userspass.inc:13 +msgid "Clave" +msgstr "Пароль" + +#: ../../../../ajax/ajax_configSave.php:287 +#, fuzzy +msgid "Clave Temporal Generada" +msgstr "Сгенерированный пароль" + +#: ../../../../ajax/ajax_doLogin.php:45 +msgid "Usuario/Clave no introducidos" +msgstr "Пользователь / пароль не введены" + +#: ../../../../ajax/ajax_doLogin.php:57 +#, fuzzy +msgid "Inicio sesión" +msgstr "Начало сессии (LDAP)" + +#: ../../../../ajax/ajax_doLogin.php:62 +#, fuzzy +msgid "Servidor Login" +msgstr "Логин" + +#: ../../../../ajax/ajax_doLogin.php:68 +msgid "Error al guardar los datos de LDAP" +msgstr "Ошибка сохранении данных пользователя из LDAP" + +#: ../../../../ajax/ajax_doLogin.php:71 ../../../../ajax/ajax_doLogin.php:79 +#: ../../../../ajax/ajax_doLogin.php:131 ../../../../ajax/ajax_doLogin.php:172 +#: ../../../../inc/ApiTokens.class.php:140 +#: ../../../../inc/ApiTokens.class.php:186 +#: ../../../../inc/ApiTokens.class.php:217 +#: ../../../../inc/ApiTokens.class.php:243 +#: ../../../../inc/ApiTokens.class.php:262 +#: ../../../../inc/ApiTokens.class.php:304 +#: ../../../../inc/ApiTokens.class.php:328 ../../../../inc/Crypt.class.php:235 +#: ../../../../inc/Crypt.class.php:246 +#: ../../../../inc/XmlImportBase.class.php:74 +msgid "Error interno" +msgstr "Внутренняя ошибка" + +#: ../../../../ajax/ajax_doLogin.php:76 +msgid "Error al actualizar la clave del usuario en la BBDD" +msgstr "Ошибка изменения пароля пользователя в БД" + +#: ../../../../ajax/ajax_doLogin.php:84 ../../../../ajax/ajax_doLogin.php:109 +msgid "Login incorrecto" +msgstr "Ошибка входа" + +#: ../../../../ajax/ajax_doLogin.php:85 ../../../../ajax/ajax_doLogin.php:92 +#: ../../../../ajax/ajax_doLogin.php:99 ../../../../ajax/ajax_doLogin.php:110 +#: ../../../../ajax/ajax_doLogin.php:120 ../../../../ajax/ajax_doLogin.php:167 +#: ../../../../inc/ApiTokens.class.php:190 +#: ../../../../inc/ApiTokens.class.php:308 ../../../../inc/Auth.class.php:112 +#: ../../../../inc/Init.class.php:516 ../../../../inc/UserBase.class.php:382 +#: ../../../../inc/UserBase.class.php:526 ../../../../res/test.php:64 +#: ../../../../web/SearchC.class.php:289 +#: ../../../../web/UsersMgmtC.class.php:392 +#: ../../../../inc/themes/classic/account.inc:70 +#: ../../../../inc/themes/classic/editpass.inc:21 +#: ../../../../inc/themes/classic/eventlog.inc:25 +#: ../../../../inc/themes/classic/info.inc:39 +#: ../../../../inc/themes/classic/install.inc:27 +#: ../../../../inc/themes/classic/install.inc:28 +#: ../../../../inc/themes/classic/login.inc:7 +#: ../../../../inc/themes/classic/login.inc:20 +#: ../../../../inc/themes/classic/mail.inc:47 +#: ../../../../inc/themes/classic/passreset.inc:17 +#: ../../../../inc/themes/classic/request.inc:17 +#: ../../../../inc/themes/classic/search.inc:52 +#: ../../../../inc/themes/classic/tokens.inc:8 +#: ../../../../inc/themes/material-blue/account.inc:80 +#: ../../../../inc/themes/material-blue/config.inc:346 +#: ../../../../inc/themes/material-blue/editpass.inc:22 +#: ../../../../inc/themes/material-blue/eventlog.inc:24 +#: ../../../../inc/themes/material-blue/info.inc:39 +#: ../../../../inc/themes/material-blue/login.inc:10 +#: ../../../../inc/themes/material-blue/login.inc:32 +#: ../../../../inc/themes/material-blue/mail.inc:61 +#: ../../../../inc/themes/material-blue/mail.inc:67 +#: ../../../../inc/themes/material-blue/passreset.inc:17 +#: ../../../../inc/themes/material-blue/request.inc:20 +#: ../../../../inc/themes/material-blue/search.inc:55 +#: ../../../../inc/themes/material-blue/tokens.inc:8 +msgid "Usuario" +msgstr "Пользователь" + +#: ../../../../ajax/ajax_doLogin.php:88 ../../../../ajax/ajax_doLogin.php:102 +#: ../../../../ajax/ajax_doLogin.php:113 +msgid "Usuario/Clave incorrectos" +msgstr "Неправильный пользователь / пароль" + +#: ../../../../ajax/ajax_doLogin.php:91 ../../../../ajax/ajax_doLogin.php:95 +msgid "Cuenta expirada" +msgstr "Аккаунт просрочен" + +#: ../../../../ajax/ajax_doLogin.php:98 +msgid "El usuario no tiene grupos asociados" +msgstr "Для пользователя не указаны группы" + +#: ../../../../ajax/ajax_doLogin.php:119 ../../../../ajax/ajax_doLogin.php:123 +msgid "Usuario deshabilitado" +msgstr "Пользователь заблокирован" + +#: ../../../../ajax/ajax_doLogin.php:128 +msgid "Error al obtener los datos del usuario de la BBDD" +msgstr "Ошибка получения данных о пользователе из DB" + +#: ../../../../ajax/ajax_doLogin.php:138 +msgid "La clave maestra no ha sido guardada o es incorrecta" +msgstr "Мастер-пароль не сохранен или ошибочен" + +#: ../../../../ajax/ajax_doLogin.php:145 ../../../../ajax/ajax_doLogin.php:148 +msgid "Clave maestra incorrecta" +msgstr "Неправильный мастер-пароль" + +#: ../../../../ajax/ajax_doLogin.php:168 +#: ../../../../inc/ProfileBase.class.php:512 +#: ../../../../inc/ProfileBase.class.php:550 +#: ../../../../inc/ProfileBase.class.php:593 +#: ../../../../web/UsersMgmtC.class.php:89 +#: ../../../../inc/themes/classic/users.inc:37 +#: ../../../../inc/themes/material-blue/users.inc:43 +msgid "Perfil" +msgstr "Профиль" + +#: ../../../../ajax/ajax_doLogin.php:169 ../../../../inc/Groups.class.php:158 +#: ../../../../inc/Groups.class.php:259 ../../../../inc/Groups.class.php:375 +#: ../../../../web/UsersMgmtC.class.php:90 +#: ../../../../inc/themes/classic/ldap.inc:116 +#: ../../../../inc/themes/classic/users.inc:49 +#: ../../../../inc/themes/material-blue/ldap.inc:139 +#: ../../../../inc/themes/material-blue/ldap.inc:164 +#: ../../../../inc/themes/material-blue/users.inc:57 +msgid "Grupo" +msgstr "Группа" + +#: ../../../../ajax/ajax_files.php:45 ../../../../ajax/ajax_getFiles.php:39 +msgid "Gestión de archivos deshabilitada" +msgstr "Управление файлами отключено" + +#: ../../../../ajax/ajax_files.php:59 ../../../../inc/Files.class.php:63 +msgid "Subir Archivo" +msgstr "Загрузить файл" + +#: ../../../../ajax/ajax_files.php:68 +msgid "No hay extensiones permitidas" +msgstr "Нет доступных расширений файлов" + +#: ../../../../ajax/ajax_files.php:79 ../../../../inc/FileImport.class.php:115 +msgid "Tipo de archivo no soportado" +msgstr "Данный тип файлов запрещен" + +#: ../../../../ajax/ajax_files.php:85 +msgid "Archivo inválido" +msgstr "Ошибочный файл" + +#: ../../../../ajax/ajax_files.php:101 ../../../../ajax/ajax_files.php:118 +#: ../../../../inc/FileImport.class.php:131 +#: ../../../../inc/FileImport.class.php:149 +#: ../../../../inc/FileImport.class.php:167 +msgid "Error interno al leer el archivo" +msgstr "Внутренняя ошибка чтения файла" + +#: ../../../../ajax/ajax_files.php:108 +msgid "El archivo es mayor de " +msgstr "Файл больше чем" + +#: ../../../../ajax/ajax_files.php:125 +msgid "Archivo guardado" +msgstr "Файл сохранен" + +#: ../../../../ajax/ajax_files.php:130 +msgid "No se pudo guardar el archivo" +msgstr "Ошибка сохранения файла" + +#: ../../../../ajax/ajax_files.php:140 ../../../../ajax/ajax_files.php:199 +msgid "No es un ID de archivo válido" +msgstr "Ошибочный ID файла" + +#: ../../../../ajax/ajax_files.php:148 +msgid "El archivo no existe" +msgstr "Файл не существует" + +#: ../../../../ajax/ajax_files.php:157 +#: ../../../../inc/themes/classic/files.inc:19 +#: ../../../../inc/themes/material-blue/files.inc:19 +msgid "Descargar Archivo" +msgstr "Скачать файл" + +#: ../../../../ajax/ajax_files.php:158 ../../../../ajax/ajax_viewpass.php:69 +#: ../../../../inc/Files.class.php:112 +#: ../../../../inc/themes/classic/eventlog.inc:16 +#: ../../../../inc/themes/material-blue/eventlog.inc:15 +msgid "ID" +msgstr "ID" + +#: ../../../../ajax/ajax_files.php:159 ../../../../inc/Files.class.php:65 +#: ../../../../inc/Files.class.php:113 +#: ../../../../inc/themes/classic/import.inc:155 +#: ../../../../inc/themes/material-blue/import.inc:83 +msgid "Archivo" +msgstr "Файл" + +#: ../../../../ajax/ajax_files.php:160 ../../../../inc/Files.class.php:66 +#: ../../../../inc/Files.class.php:114 +#: ../../../../web/AccountsMgmtC.class.php:266 +#: ../../../../inc/themes/classic/customfields.inc:16 +#: ../../../../inc/themes/material-blue/customfields.inc:19 +msgid "Tipo" +msgstr "Тип" + +#: ../../../../ajax/ajax_files.php:161 ../../../../inc/Files.class.php:67 +#: ../../../../inc/Files.class.php:115 +msgid "Tamaño" +msgstr "Размер" + +#: ../../../../ajax/ajax_files.php:203 +msgid "Archivo eliminado" +msgstr "Файл удален" + +#: ../../../../ajax/ajax_files.php:208 +msgid "Error al eliminar el archivo" +msgstr "Ошибка при удалении файла" + +#: ../../../../ajax/ajax_getContent.php:41 +#: ../../../../inc/ApiRequest.class.php:55 +#: ../../../../inc/CustomFieldDef.class.php:38 +#: ../../../../inc/CustomFields.class.php:48 +msgid "Parámetros incorrectos" +msgstr "Ошибочные параметры" + +#: ../../../../ajax/ajax_migrate.php:55 +msgid "Confirmar la importación de cuentas" +msgstr "Подтвердите импорт учетной записи" + +#: ../../../../ajax/ajax_migrate.php:57 +msgid "Es necesario un usuario de conexión" +msgstr "Требуется имя пользовтеля для подключения" + +#: ../../../../ajax/ajax_migrate.php:59 +msgid "Es necesaria una clave de conexión" +msgstr "Требуется пароль для подключения" + +#: ../../../../ajax/ajax_migrate.php:61 +msgid "Es necesario el nombre de la BBDD" +msgstr "Необходимо имя базы данных" + +#: ../../../../ajax/ajax_migrate.php:63 +msgid "Es necesario un nombre de host" +msgstr "Необходимо имя сервера" + +#: ../../../../ajax/ajax_passReset.php:47 +#: ../../../../ajax/ajax_passReset.php:50 +msgid "Recuperación de Clave" +msgstr "Восстановление пароля" + +#: ../../../../ajax/ajax_passReset.php:53 +#: ../../../../ajax/ajax_passReset.php:58 +msgid "Solicitado para" +msgstr "Запрошено для" + +#: ../../../../ajax/ajax_passReset.php:55 +#: ../../../../ajax/ajax_sendRequest.php:75 +msgid "Solicitud enviada" +msgstr "Запрос отправлен" + +#: ../../../../ajax/ajax_passReset.php:55 +msgid "En breve recibirá un correo para completar la solicitud." +msgstr "В скором времени вы получите email для завершения запроса." + +#: ../../../../ajax/ajax_passReset.php:60 +msgid "No se ha podido realizar la solicitud. Consulte con el administrador." +msgstr "Запрос не может быть выполнен. Пожалуйста, свяжитесь с администратором." + +#: ../../../../ajax/ajax_passReset.php:72 +#: ../../../../inc/UserBase.class.php:568 +#: ../../../../inc/UserUtil.class.php:686 +msgid "Modificar Clave Usuario" +msgstr "Изменить пароль пользователя" + +#: ../../../../ajax/ajax_passReset.php:72 +#: ../../../../inc/UserBase.class.php:568 +#: ../../../../inc/UserBase.class.php:592 +#: ../../../../inc/UserUtil.class.php:686 +#: ../../../../web/UsersMgmtC.class.php:88 +#: ../../../../inc/themes/classic/users.inc:21 +#: ../../../../inc/themes/material-blue/users.inc:24 +msgid "Login" +msgstr "Логин" + +#: ../../../../ajax/ajax_passReset.php:80 +msgid "La clave es incorrecta o no coincide" +msgstr "Ошибка пароля" + +#: ../../../../ajax/ajax_sendRequest.php:48 +msgid "Es necesaria una descripción" +msgstr "Необходимо описание" + +#: ../../../../ajax/ajax_sendRequest.php:61 +msgid "Solicitud de Modificación de Cuenta" +msgstr "Запрос на изменение учетной записи" + +#: ../../../../ajax/ajax_sendRequest.php:62 +msgid "Solicitante" +msgstr "Запросил" + +#: ../../../../ajax/ajax_sendRequest.php:63 +#: ../../../../ajax/ajax_viewpass.php:70 ../../../../inc/Account.class.php:165 +#: ../../../../inc/Account.class.php:219 ../../../../inc/Account.class.php:402 +#: ../../../../inc/Account.class.php:425 ../../../../inc/Account.class.php:667 +#: ../../../../inc/Files.class.php:64 +msgid "Cuenta" +msgstr "Учетная запись" + +#: ../../../../ajax/ajax_sendRequest.php:64 +#: ../../../../inc/Account.class.php:164 ../../../../inc/Account.class.php:218 +#: ../../../../inc/Account.class.php:401 ../../../../inc/Account.class.php:424 +#: ../../../../inc/Account.class.php:666 ../../../../inc/Customer.class.php:65 +#: ../../../../inc/Customer.class.php:115 +#: ../../../../inc/Customer.class.php:163 +#: ../../../../web/SearchC.class.php:271 +#: ../../../../inc/themes/classic/account.inc:23 +#: ../../../../inc/themes/classic/editpass.inc:12 +#: ../../../../inc/themes/classic/request.inc:9 +#: ../../../../inc/themes/classic/search.inc:21 +#: ../../../../inc/themes/material-blue/account.inc:29 +#: ../../../../inc/themes/material-blue/editpass.inc:13 +#: ../../../../inc/themes/material-blue/request.inc:10 +#: ../../../../inc/themes/material-blue/search.inc:24 +msgid "Cliente" +msgstr "Заказчик" + +#: ../../../../ajax/ajax_sendRequest.php:65 +#: ../../../../web/AccountsMgmtC.class.php:79 +#: ../../../../web/AccountsMgmtC.class.php:138 +#: ../../../../web/UsersMgmtC.class.php:187 +#: ../../../../inc/themes/classic/categories.inc:16 +#: ../../../../inc/themes/classic/customers.inc:16 +#: ../../../../inc/themes/classic/eventlog.inc:31 +#: ../../../../inc/themes/classic/groups.inc:16 +#: ../../../../inc/themes/material-blue/categories.inc:20 +#: ../../../../inc/themes/material-blue/customers.inc:20 +#: ../../../../inc/themes/material-blue/eventlog.inc:30 +#: ../../../../inc/themes/material-blue/groups.inc:20 +msgid "Descripción" +msgstr "Описание" + +#: ../../../../ajax/ajax_sendRequest.php:78 +msgid "Error al enviar la solicitud" +msgstr "Ошибка при отправке запроса" + +#: ../../../../ajax/ajax_userPrefsSave.php:75 +#, fuzzy +msgid "Error al actualizar preferencias" +msgstr "Ошибка изменения пароля" + +#: ../../../../ajax/ajax_userPrefsSave.php:78 +#, fuzzy +msgid "Preferencias actualizadas" +msgstr "Обновлены учетные записи:" + +#: ../../../../ajax/ajax_viewpass.php:54 +msgid "La clave maestra no coincide" +msgstr "Неверный мастер-пароль" + +#: ../../../../ajax/ajax_viewpass.php:58 +#: ../../../../inc/Controller.class.php:166 +msgid "No tiene permisos para acceder a esta cuenta" +msgstr "Нет прав для доступа к данной учетной записи" + +#: ../../../../ajax/ajax_viewpass.php:68 ../../../../inc/Acl.class.php:133 +#: ../../../../inc/themes/classic/account.inc:379 +#: ../../../../inc/themes/classic/profiles.inc:23 +#: ../../../../inc/themes/classic/search.inc:102 +#: ../../../../inc/themes/material-blue/account.inc:418 +#: ../../../../inc/themes/material-blue/profiles.inc:35 +#: ../../../../inc/themes/material-blue/search.inc:113 +msgid "Ver Clave" +msgstr "Показать пароль" + +#: ../../../../ajax/ajax_viewpass.php:79 +#, fuzzy +msgid "Clave de Cuenta" +msgstr "Изменить пароль учетной записи" + +#: ../../../../api.php:56 +#, fuzzy +msgid "Ayuda Parámetros" +msgstr "Help :: FAQ :: Changelog" + +#: ../../../../inc/Account.class.php:28 +#: ../../../../inc/AccountBase.class.php:28 +#: ../../../../inc/AccountHistory.class.php:28 +#: ../../../../inc/AccountInterface.class.php:28 +#: ../../../../inc/AccountSearch.class.php:28 ../../../../inc/Acl.class.php:29 +#: ../../../../inc/Api.class.php:30 ../../../../inc/ApiRequest.class.php:28 +#: ../../../../inc/ApiTokens.class.php:28 ../../../../inc/Auth.class.php:29 +#: ../../../../inc/Auth2FA.class.php:30 ../../../../inc/Backup.class.php:28 +#: ../../../../inc/Category.class.php:29 ../../../../inc/Common.class.php:28 +#: ../../../../inc/Config.class.php:28 ../../../../inc/Controller.class.php:31 +#: ../../../../inc/Crypt.class.php:28 ../../../../inc/CsvImport.class.php:28 +#: ../../../../inc/CsvImportBase.class.php:28 +#: ../../../../inc/Customer.class.php:29 ../../../../inc/DB.class.php:28 +#: ../../../../inc/DBConnectionFactory.class.php:30 +#: ../../../../inc/FileImport.class.php:28 ../../../../inc/Files.class.php:29 +#: ../../../../inc/Groups.class.php:29 ../../../../inc/Html.class.php:28 +#: ../../../../inc/ImageUtil.class.php:28 ../../../../inc/Import.class.php:29 +#: ../../../../inc/ImportBase.class.php:28 ../../../../inc/Init.class.php:30 +#: ../../../../inc/Installer.class.php:29 +#: ../../../../inc/KeepassImport.class.php:28 +#: ../../../../inc/KeepassXImport.class.php:28 +#: ../../../../inc/Ldap.class.php:29 ../../../../inc/LdapADS.class.php:28 +#: ../../../../inc/Log.class.php:28 ../../../../inc/Migrate.class.php:28 +#: ../../../../inc/Profile.class.php:29 +#: ../../../../inc/ProfileBase.class.php:28 +#: ../../../../inc/Request.class.php:111 ../../../../inc/Session.class.php:28 +#: ../../../../inc/SyspassImport.class.php:28 +#: ../../../../inc/Upgrade.class.php:29 ../../../../inc/User.class.php:28 +#: ../../../../inc/UserLdap.class.php:28 +#: ../../../../inc/UserPreferences.class.php:28 +#: ../../../../inc/UserUtil.class.php:28 ../../../../inc/Util.class.php:30 +#: ../../../../inc/XmlImport.class.php:28 +#: ../../../../inc/XmlImportBase.class.php:28 +#: ../../../../web/AccountC.class.php:38 +#: ../../../../web/AccountsMgmtC.class.php:32 +#: ../../../../web/ConfigC.class.php:30 ../../../../web/EventlogC.class.php:28 +#: ../../../../web/SearchC.class.php:30 +#: ../../../../web/UsersMgmtC.class.php:39 +#: ../../../../web/UsersPrefsC.class.php:32 +msgid "No es posible acceder directamente a este archivo" +msgstr "Невозможно обратиться к файлу напрямую" + +#: ../../../../inc/Account.class.php:112 ../../../../inc/Account.class.php:185 +#: ../../../../inc/Account.class.php:636 +msgid "Error al actualizar el historial" +msgstr "Ошибка при обновлении истории" + +#: ../../../../inc/Account.class.php:117 +msgid "Actualizar Cuenta" +msgstr "Редактировать учетную запись" + +#: ../../../../inc/Account.class.php:120 ../../../../inc/Account.class.php:383 +msgid "Error al actualizar los grupos secundarios" +msgstr "Ошибка изменения вторичных групп" + +#: ../../../../inc/Account.class.php:126 ../../../../inc/Account.class.php:391 +msgid "Error al actualizar los usuarios de la cuenta" +msgstr "Ошибка изменения пользователей с доступом к учетной записи" + +#: ../../../../inc/Account.class.php:217 +msgid "Restaurar Cuenta" +msgstr "Восстановление учетной записи" + +#: ../../../../inc/Account.class.php:326 +#: ../../../../inc/AccountHistory.class.php:343 +#: ../../../../inc/AccountHistory.class.php:505 +#, fuzzy +msgid "No se pudieron obtener los datos de la cuenta" +msgstr "Ошибка получения паролей для учетной записи" + +#: ../../../../inc/Account.class.php:400 ../../../../inc/Acl.class.php:129 +#: ../../../../web/AccountC.class.php:147 ../../../../web/MainC.class.php:155 +msgid "Nueva Cuenta" +msgstr "Новая учетная запись" + +#: ../../../../inc/Account.class.php:418 +msgid "ERROR: Error en la operación." +msgstr "ОШИБКА: Сбой операции" + +#: ../../../../inc/Account.class.php:423 ../../../../inc/Acl.class.php:134 +#: ../../../../web/AccountC.class.php:352 +#: ../../../../inc/themes/classic/account.inc:366 +#: ../../../../inc/themes/classic/search.inc:129 +#: ../../../../inc/themes/material-blue/account.inc:412 +#: ../../../../inc/themes/material-blue/search.inc:142 +msgid "Eliminar Cuenta" +msgstr "Удалить учетную запись" + +#: ../../../../inc/Account.class.php:436 +msgid "Error al eliminar grupos asociados a la cuenta" +msgstr "Ошибка удаления групп учетной записи" + +#: ../../../../inc/Account.class.php:440 +msgid "Error al eliminar usuarios asociados a la cuenta" +msgstr "Ошибка удаления пользователей учетной записи" + +#: ../../../../inc/Account.class.php:444 +msgid "Error al eliminar archivos asociados a la cuenta" +msgstr "Ошибка удаления файлов учетной записи" + +#: ../../../../inc/Account.class.php:498 +#: ../../../../inc/AccountHistory.class.php:124 +#: ../../../../inc/XmlImport.class.php:62 +msgid "Inicio" +msgstr "Старт" + +#: ../../../../inc/Account.class.php:503 +#: ../../../../inc/AccountHistory.class.php:130 +msgid "Error en el módulo de encriptación" +msgstr "Ошибка в модуле шифрования" + +#: ../../../../inc/Account.class.php:511 +#: ../../../../inc/AccountHistory.class.php:138 +msgid "Error al obtener las claves de las cuentas" +msgstr "Ошибка получения паролей для учетной записи" + +#: ../../../../inc/Account.class.php:527 +#: ../../../../inc/AccountHistory.class.php:160 +#, fuzzy +msgid "Clave de cuenta vacía" +msgstr "Изменить пароль учетной записи" + +#: ../../../../inc/Account.class.php:532 +#: ../../../../inc/AccountHistory.class.php:165 +#, fuzzy +msgid "IV de encriptación incorrecto" +msgstr "Количество полей неправильно" + +#: ../../../../inc/Account.class.php:541 +#: ../../../../inc/AccountHistory.class.php:174 +#, fuzzy +msgid "No es posible desencriptar la clave de la cuenta" +msgstr "Все пароли учетных записей будут зашифрованы вновь." + +#: ../../../../inc/Account.class.php:547 +msgid "Fallo al actualizar la clave de la cuenta" +msgstr "Ошибка изменения пароля учетной записи" + +#: ../../../../inc/Account.class.php:561 +#, fuzzy +msgid "Cuentas actualizadas" +msgstr "Обновлены учетные записи:" + +#: ../../../../inc/Account.class.php:566 +#: ../../../../inc/AccountHistory.class.php:199 +msgid "Fin" +msgstr "Конец" + +#: ../../../../inc/Account.class.php:665 +msgid "Modificar Clave" +msgstr "Изменить пароль" + +#: ../../../../inc/Account.class.php:700 +#, fuzzy +msgid "No se pudieron obtener los datos de las cuentas" +msgstr "Ошибка получения паролей для учетной записи" + +#: ../../../../inc/AccountHistory.class.php:123 +msgid "Actualizar Clave Maestra (H)" +msgstr "Изменить мастер-пароль (H)" + +#: ../../../../inc/AccountHistory.class.php:155 +msgid "La clave maestra del registro no coincide" +msgstr "Мастер-пароль не совпадает" + +#: ../../../../inc/AccountHistory.class.php:180 +msgid "Fallo al actualizar la clave del histórico" +msgstr "Ошибка обновления истории мастер-паролей" + +#: ../../../../inc/AccountHistory.class.php:194 +#, fuzzy +msgid "Registros actualizados" +msgstr "Записи изменены" + +#: ../../../../inc/Acl.class.php:112 +msgid "Denegado acceso a" +msgstr "Доступ запрещен к" + +#: ../../../../inc/Acl.class.php:126 +#, fuzzy +msgid "Buscar Cuentas" +msgstr "Поиск" + +#: ../../../../inc/Acl.class.php:127 +#, fuzzy +msgid "Ver Cuenta" +msgstr "Просмотр деталей учетной записи" + +#: ../../../../inc/Acl.class.php:128 ../../../../web/AccountC.class.php:259 +#: ../../../../inc/themes/classic/search.inc:123 +#: ../../../../inc/themes/material-blue/search.inc:136 +msgid "Copiar Cuenta" +msgstr "Скопировать учетную запись" + +#: ../../../../inc/Acl.class.php:130 ../../../../web/AccountC.class.php:323 +msgid "Editar Cuenta" +msgstr "Изменить учетную запись" + +#: ../../../../inc/Acl.class.php:131 +#, fuzzy +msgid "Editar Clave de Cuenta" +msgstr "Изменить пароль учетной записи" + +#: ../../../../inc/Acl.class.php:132 +#: ../../../../inc/themes/classic/profiles.inc:28 +#: ../../../../inc/themes/material-blue/profiles.inc:40 +msgid "Ver Historial" +msgstr "Показать историю" + +#: ../../../../inc/Acl.class.php:135 +#: ../../../../inc/themes/classic/account.inc:188 +#: ../../../../inc/themes/classic/profiles.inc:50 +#: ../../../../inc/themes/material-blue/account.inc:230 +#: ../../../../inc/themes/material-blue/config.inc:226 +#: ../../../../inc/themes/material-blue/profiles.inc:60 +msgid "Archivos" +msgstr "Файлы" + +#: ../../../../inc/Acl.class.php:136 +#, fuzzy +msgid "Peticiones" +msgstr "Включить запросы по email" + +#: ../../../../inc/Acl.class.php:137 +#, fuzzy +msgid "Gestión Aplicación" +msgstr "Управление" + +#: ../../../../inc/Acl.class.php:138 +#, fuzzy +msgid "Gestión Categorías" +msgstr "Управление категориями" + +#: ../../../../inc/Acl.class.php:139 +#, fuzzy +msgid "Gestión Clientes" +msgstr "Управление заказчиками" + +#: ../../../../inc/Acl.class.php:140 +#, fuzzy +msgid "Gestión Campos Personalizados" +msgstr "Управление" + +#: ../../../../inc/Acl.class.php:141 +#, fuzzy +msgid "Gestión Autorizaciones API" +msgstr "Управление" + +#: ../../../../inc/Acl.class.php:142 ../../../../inc/Acl.class.php:143 +#, fuzzy +msgid "Gestión Usuarios" +msgstr "Управление пользователями" + +#: ../../../../inc/Acl.class.php:144 +#, fuzzy +msgid "Gestión Grupos" +msgstr "Управление группами" + +#: ../../../../inc/Acl.class.php:145 +#, fuzzy +msgid "Gestión Perfiles" +msgstr "Управление профилями" + +#: ../../../../inc/Acl.class.php:146 ../../../../inc/Config.class.php:118 +#: ../../../../inc/Config.class.php:400 ../../../../web/MainC.class.php:173 +#: ../../../../inc/themes/classic/profiles.inc:57 +#: ../../../../inc/themes/material-blue/profiles.inc:66 +msgid "Configuración" +msgstr "Конфигурация" + +#: ../../../../inc/Acl.class.php:147 +#, fuzzy +msgid "Configuración General" +msgstr "Основная конфигурация" + +#: ../../../../inc/Acl.class.php:148 ../../../../web/ConfigC.class.php:145 +#: ../../../../inc/themes/classic/profiles.inc:65 +#: ../../../../inc/themes/material-blue/profiles.inc:77 +#, fuzzy +msgid "Encriptación" +msgstr "Ошибка в модуле шифрования" + +#: ../../../../inc/Acl.class.php:149 ../../../../web/ConfigC.class.php:187 +#: ../../../../inc/themes/classic/backup.inc:4 +#: ../../../../inc/themes/material-blue/backup.inc:4 +msgid "Copia de Seguridad" +msgstr "Backup" + +#: ../../../../inc/Acl.class.php:150 +msgid "Exportar" +msgstr "" + +#: ../../../../inc/Acl.class.php:151 +#: ../../../../inc/themes/classic/profiles.inc:74 +#: ../../../../inc/themes/material-blue/profiles.inc:87 +#, fuzzy +msgid "Importar" +msgstr "Импорт учетных записей" + +#: ../../../../inc/Api.class.php:65 ../../../../inc/Api.class.php:88 +#: ../../../../inc/Api.class.php:126 +#, fuzzy +msgid "Acceso no permitido" +msgstr "Доступ запрещен к" + +#: ../../../../inc/Api.class.php:166 +#, fuzzy +msgid "Error de codificación" +msgstr "Ошибка подключения к LDAP" + +#: ../../../../inc/ApiRequest.class.php:102 +#, fuzzy +msgid "Token de autorización" +msgstr "Запрос на изменение учетной записи" + +#: ../../../../inc/ApiRequest.class.php:103 +#, fuzzy +msgid "Acción a realizar" +msgstr "Действие" + +#: ../../../../inc/ApiRequest.class.php:104 +#, fuzzy +msgid "Clave de usuario (opcional)" +msgstr "Изменить пароль пользователя" + +#: ../../../../inc/ApiRequest.class.php:105 +#, fuzzy +msgid "Cadena a buscar" +msgstr "Поиск" + +#: ../../../../inc/ApiRequest.class.php:106 +#, fuzzy +msgid "Numero de cuentas a mostar en la búsqueda" +msgstr "Число результатов поиска на страницу" + +#: ../../../../inc/ApiRequest.class.php:107 +msgid "Item a devolver" +msgstr "" + +#: ../../../../inc/ApiTokens.class.php:221 +#, fuzzy +msgid "La autorización ya existe" +msgstr "База данных уже существует" + +#: ../../../../inc/ApiTokens.class.php:307 +#, fuzzy +msgid "Actualizar Autorización" +msgstr "Обновить" + +#: ../../../../inc/ApiTokens.class.php:331 +#: ../../../../web/UsersMgmtC.class.php:421 +#, fuzzy +msgid "Eliminar Autorización" +msgstr "Удалить учетную запись" + +#: ../../../../inc/Auth.class.php:111 +#, fuzzy +msgid "Usuario no pertenece al grupo" +msgstr "Пользователь не состоит в группах" + +#: ../../../../inc/Auth.class.php:191 +#: ../../../../inc/themes/classic/users.inc:117 +#: ../../../../inc/themes/classic/userspass.inc:2 +#: ../../../../inc/themes/material-blue/users.inc:161 +#: ../../../../inc/themes/material-blue/userspass.inc:2 +msgid "Cambio de Clave" +msgstr "Изменение пароля" + +#: ../../../../inc/Auth.class.php:193 +msgid "Se ha solicitado el cambio de su clave de usuario." +msgstr "Запрос на смену пароля выполнен." + +#: ../../../../inc/Auth.class.php:195 +msgid "Para completar el proceso es necesario que acceda a la siguiente URL:" +msgstr "Для завершения, пожалуйста пройдите по ссылке :" + +#: ../../../../inc/Auth.class.php:199 +msgid "Si no ha solicitado esta acción, ignore este mensaje." +msgstr "Если Вы не запрашивали данное действие, пожалуйста, проигнорируйте данное письмо." + +#: ../../../../inc/Backup.class.php:161 +msgid "Esta operación sólo es posible en entornos Linux" +msgstr "Данная операция возможна только в Linux" + +#: ../../../../inc/Backup.class.php:163 +msgid "Error al realizar backup en modo compatibilidad" +msgstr "Ошибка при создании резервной копии в режиме совместимости" + +#: ../../../../inc/Backup.class.php:217 +#, fuzzy +msgid "No es posible crear el directorio de backups" +msgstr "Невозможно создать заказчика" + +#: ../../../../inc/Backup.class.php:222 +msgid "Compruebe los permisos del directorio de backups" +msgstr "Проверьте права на папку резервных копий" + +#: ../../../../inc/Category.class.php:69 +#: ../../../../inc/Category.class.php:165 +msgid "Nombre de categoría duplicado" +msgstr "Категория с таким именем уже существует" + +#: ../../../../inc/Category.class.php:78 +msgid "Error al crear la categoría" +msgstr "Ошибка при создании категории" + +#: ../../../../inc/Category.class.php:83 +#: ../../../../inc/Category.class.php:132 +#: ../../../../inc/Category.class.php:182 +#: ../../../../web/SearchC.class.php:283 +#: ../../../../inc/themes/classic/account.inc:42 +#: ../../../../inc/themes/classic/search.inc:46 +#: ../../../../inc/themes/material-blue/account.inc:50 +#: ../../../../inc/themes/material-blue/search.inc:49 +msgid "Categoría" +msgstr "Категория" + +#: ../../../../inc/Category.class.php:119 +msgid "Categoría en uso por:" +msgstr "Категория используется:" + +#: ../../../../inc/Category.class.php:129 +msgid "Error al eliminar la categoría" +msgstr "Ошибка при удалении категории" + +#: ../../../../inc/Category.class.php:132 +#: ../../../../web/AccountsMgmtC.class.php:101 +msgid "Eliminar Categoría" +msgstr "Удалить категорию" + +#: ../../../../inc/Category.class.php:179 +msgid "Error al actualizar la categoría" +msgstr "Ошибка изменения информации о категории" + +#: ../../../../inc/Category.class.php:182 +msgid "Modificar Categoría" +msgstr "Изменить категорию" + +#: ../../../../inc/Config.class.php:118 ../../../../inc/Config.class.php:401 +msgid "Modificar configuración" +msgstr "Изменить конфигурацию" + +#: ../../../../inc/Config.class.php:276 +msgid "No es posible escribir el archivo de configuración" +msgstr "Ошибка записи файла конфигурации" + +#: ../../../../inc/Config.class.php:276 +msgid "Compruebe los permisos del directorio \"config\"" +msgstr "Пожалуйста, проверьте права на папку \"config\"" + +#: ../../../../inc/Config.class.php:402 +msgid "Parámetro" +msgstr "Параметр" + +#: ../../../../inc/Config.class.php:403 +msgid "Valor" +msgstr "Значение" + +#: ../../../../inc/Controller.class.php:165 +msgid "Opción no disponible" +msgstr "Опция недоступна" + +#: ../../../../inc/Controller.class.php:165 +#: ../../../../inc/Controller.class.php:166 +#: ../../../../inc/Controller.class.php:167 +#: ../../../../inc/Controller.class.php:168 ../../../../inc/Init.class.php:289 +msgid "Consulte con el administrador" +msgstr "Пожалуйста, свяжитесь с администратором" + +#: ../../../../inc/Controller.class.php:167 +msgid "No tiene permisos para acceder a esta página" +msgstr "Нет прав для доступа к данной странице" + +#: ../../../../inc/Controller.class.php:168 +msgid "No tiene permisos para realizar esta operación" +msgstr "Нет прав для данной операции" + +#: ../../../../inc/Crypt.class.php:236 +msgid "No se puede usar el módulo de encriptación" +msgstr "Модуль криптографии не может быть загружен" + +#: ../../../../inc/Crypt.class.php:247 +msgid "Error al generar datos cifrados" +msgstr "Ошибка при создании шифрованных данных" + +#: ../../../../inc/CsvImportBase.class.php:109 +#, fuzzy, php-format +msgid "El número de campos es incorrecto (%d)" +msgstr "Количество полей неправильно" + +#: ../../../../inc/CsvImportBase.class.php:110 +#, fuzzy, php-format +msgid "Compruebe el formato del archivo CSV en línea %s" +msgstr "Пожалуйста, проверьте формат файла CSV" + +#: ../../../../inc/CsvImportBase.class.php:140 +#: ../../../../inc/CsvImportBase.class.php:145 +#: ../../../../inc/Import.class.php:118 ../../../../inc/Import.class.php:124 +#: ../../../../inc/Migrate.class.php:349 +#: ../../../../inc/XmlImport.class.php:62 +#: ../../../../inc/XmlImport.class.php:63 +#: ../../../../web/ConfigC.class.php:209 +msgid "Importar Cuentas" +msgstr "Импорт учетных записей" + +#: ../../../../inc/CsvImportBase.class.php:141 +msgid "Error importando cuenta" +msgstr "Ошибка импорта учетной записи" + +#: ../../../../inc/CsvImportBase.class.php:142 +#, fuzzy, php-format +msgid "Error procesando línea %s" +msgstr "Ошибка импорта учетной записи" + +#: ../../../../inc/CsvImportBase.class.php:145 +#, fuzzy, php-format +msgid "Cuenta importada: %s" +msgstr "Таймаут сессии (секунды)" + +#: ../../../../inc/CustomFieldsBase.class.php:81 +#: ../../../../inc/themes/classic/profiles.inc:98 +#: ../../../../inc/themes/material-blue/profiles.inc:114 +msgid "Categorías" +msgstr "Категории" + +#: ../../../../inc/CustomFieldsBase.class.php:82 +#: ../../../../inc/themes/classic/profiles.inc:103 +#: ../../../../inc/themes/material-blue/profiles.inc:119 +msgid "Clientes" +msgstr "Заказчики" + +#: ../../../../inc/CustomFieldsBase.class.php:84 +#: ../../../../inc/themes/classic/account.inc:140 +#: ../../../../inc/themes/classic/profiles.inc:89 +#: ../../../../inc/themes/material-blue/account.inc:166 +#: ../../../../inc/themes/material-blue/profiles.inc:104 +msgid "Grupos" +msgstr "Группы" + +#: ../../../../inc/Customer.class.php:50 ../../../../inc/Customer.class.php:95 +msgid "Cliente duplicado" +msgstr "Такой заказчик уже существует" + +#: ../../../../inc/Customer.class.php:60 +msgid "Error al crear el cliente" +msgstr "Ошибка при создании заказчика" + +#: ../../../../inc/Customer.class.php:112 +msgid "Error al actualizar el cliente" +msgstr "Ошибка при изменении информации о заказчике" + +#: ../../../../inc/Customer.class.php:115 +msgid "Actualizar Cliente" +msgstr "Изменить заказчика" + +#: ../../../../inc/Customer.class.php:150 +msgid "Cliente en uso por:" +msgstr "Заказчик используется:" + +#: ../../../../inc/Customer.class.php:160 +msgid "Error al eliminar el cliente" +msgstr "Ошибка при удалении заказчика" + +#: ../../../../inc/Customer.class.php:163 +#: ../../../../web/AccountsMgmtC.class.php:159 +msgid "Eliminar Cliente" +msgstr "Удалить заказчика" + +#: ../../../../inc/DBConnectionFactory.class.php:87 +#: ../../../../inc/DBConnectionFactory.class.php:89 +#: ../../../../inc/DBConnectionFactory.class.php:103 +#: ../../../../inc/Installer.class.php:235 +#: ../../../../inc/Migrate.class.php:115 +msgid "No es posible conectar con la BD" +msgstr "Невозможно подключиться к базе данных" + +#: ../../../../inc/DBConnectionFactory.class.php:87 +#: ../../../../inc/DBConnectionFactory.class.php:89 +#: ../../../../inc/Installer.class.php:236 +#: ../../../../inc/Migrate.class.php:116 +msgid "Compruebe los datos de conexión" +msgstr "Пожалуйста, проверьте параметры подключения" + +#: ../../../../inc/Email.class.php:59 ../../../../inc/UserUtil.class.php:589 +msgid "N/D" +msgstr "N/A" + +#: ../../../../inc/Email.class.php:60 ../../../../web/UsersMgmtC.class.php:392 +#: ../../../../inc/themes/classic/tokens.inc:20 +#: ../../../../inc/themes/material-blue/tokens.inc:20 +msgid "Acción" +msgstr "Действие" + +#: ../../../../inc/Email.class.php:61 +msgid "Realizado por" +msgstr "Выполнено" + +#: ../../../../inc/Email.class.php:77 +msgid "Enviar Email" +msgstr "Отправить email" + +#: ../../../../inc/Email.class.php:81 +msgid "Correo enviado" +msgstr "Email выслан" + +#: ../../../../inc/Email.class.php:83 +msgid "Error al enviar correo" +msgstr "Ошибка отправка email" + +#: ../../../../inc/Email.class.php:87 +msgid "Destinatario" +msgstr "Получатель" + +#: ../../../../inc/Email.class.php:90 +msgid "CC" +msgstr "CC" + +#: ../../../../inc/Email.class.php:146 +msgid "Aviso" +msgstr "Предупреждение" + +#: ../../../../inc/FileImport.class.php:105 +msgid "Archivo no subido correctamente" +msgstr "Файл успешно закачан" + +#: ../../../../inc/FileImport.class.php:105 +msgid "Verifique los permisos del usuario del servidor web" +msgstr "Пожалуйста, проверьте права пользователя веб-сервера " + +#: ../../../../inc/FileImport.class.php:116 +msgid "Compruebe la extensión del archivo" +msgstr "Пожалуйста, проверьте расширение файла" + +#: ../../../../inc/FileImport.class.php:132 +msgid "Compruebe la configuración de PHP para subir archivos" +msgstr "Пожалуйста, проверьте конфигурацию PHP для загрузки файлов" + +#: ../../../../inc/FileImport.class.php:150 +#: ../../../../inc/FileImport.class.php:168 +msgid "Compruebe los permisos del directorio temporal" +msgstr "Пожалуйста, проверьте права для временной папки" + +#: ../../../../inc/Files.class.php:111 +#: ../../../../inc/themes/classic/files.inc:15 +#: ../../../../inc/themes/material-blue/files.inc:16 +msgid "Eliminar Archivo" +msgstr "Удалить файл" + +#: ../../../../inc/Groups.class.php:155 +#, fuzzy +msgid "Error al añadir los usuarios del grupo" +msgstr "Ошибка изменения пользователей с доступом к учетной записи" + +#: ../../../../inc/Groups.class.php:256 +#, fuzzy +msgid "Error al actualizar los usuarios del grupo" +msgstr "Ошибка изменения пользователей с доступом к учетной записи" + +#: ../../../../inc/Groups.class.php:369 +#: ../../../../web/UsersMgmtC.class.php:209 +msgid "Eliminar Grupo" +msgstr "Удалить группу" + +#: ../../../../inc/Groups.class.php:372 +#, fuzzy +msgid "Error al eliminar los usuarios del grupo" +msgstr "Ошибка удаления пользователя" + +#: ../../../../inc/Import.class.php:109 +msgid "Tipo mime no soportado" +msgstr "Тип Mime не поддерживается" + +#: ../../../../inc/Import.class.php:110 +msgid "Compruebe el formato del archivo" +msgstr "Пожалуйста, проверьте формат файла" + +#: ../../../../inc/Import.class.php:124 ../../../../inc/Import.class.php:127 +#: ../../../../inc/Migrate.class.php:92 +msgid "Importación finalizada" +msgstr "Импорт завершен" + +#: ../../../../inc/Init.class.php:196 +msgid "Error en la verificación de la base de datos" +msgstr "Ошибка проверки базы данных" + +#: ../../../../inc/Init.class.php:285 +msgid "Sesion" +msgstr "Сессия" + +#: ../../../../inc/Init.class.php:285 ../../../../inc/Init.class.php:289 +msgid "La sesión no puede ser inicializada" +msgstr "Сессия не может быть запущена" + +#: ../../../../inc/Init.class.php:416 +msgid "El directorio \"/config\" no existe" +msgstr "Папка \"/config\" не существует." + +#: ../../../../inc/Init.class.php:421 +msgid "No es posible escribir en el directorio \"config\"" +msgstr "Невозможно произвести запись в папку \"/config\"" + +#: ../../../../inc/Init.class.php:429 +msgid "Los permisos del directorio \"/config\" son incorrectos" +msgstr "Права для папки \"/config\" заданы неверно " + +#: ../../../../inc/Init.class.php:429 +msgid "Actual:" +msgstr "Текущие:" + +#: ../../../../inc/Init.class.php:429 +msgid "Necesario: 750" +msgstr "Требуемые: 750" + +#: ../../../../inc/Init.class.php:478 +msgid "Aplicación en mantenimiento" +msgstr "Программа на ослуживании" + +#: ../../../../inc/Init.class.php:478 +msgid "En breve estará operativa" +msgstr "Скоро работа будет возобновлена" + +#: ../../../../inc/Init.class.php:515 +msgid "Finalizar sesión" +msgstr "Завершить сессию" + +#: ../../../../inc/Init.class.php:517 +msgid "Tiempo inactivo" +msgstr "Время бездействия" + +#: ../../../../inc/Init.class.php:518 +msgid "Tiempo total" +msgstr "Общее время" + +#: ../../../../inc/Init.class.php:557 +msgid "La aplicación necesita actualizarse" +msgstr "Необходимо обновить программу" + +#: ../../../../inc/Init.class.php:557 +#, fuzzy, php-format +msgid "Si es un administrador pulse en el enlace: %s" +msgstr "Если Вы администратор, нажмите на ссылку:" + +#: ../../../../inc/Init.class.php:557 +#: ../../../../inc/themes/classic/upgrade.inc:20 +#: ../../../../inc/themes/material-blue/upgrade.inc:25 +msgid "Actualizar" +msgstr "Обновить" + +#: ../../../../inc/Init.class.php:588 +msgid "Actualización" +msgstr "Обновить" + +#: ../../../../inc/Init.class.php:589 +msgid "Actualización de versión realizada." +msgstr "Обновление версии завершено." + +#: ../../../../inc/Init.class.php:590 +#: ../../../../inc/themes/classic/info.inc:33 +#: ../../../../inc/themes/material-blue/info.inc:33 +msgid "Versión" +msgstr "Версия" + +#: ../../../../inc/Installer.class.php:127 +msgid "Indicar nombre de usuario admin" +msgstr "Ввведи имя пользователя администратора" + +#: ../../../../inc/Installer.class.php:128 +msgid "Usuario admin para acceso a la aplicación" +msgstr "Пользователь администратора для входа в программу" + +#: ../../../../inc/Installer.class.php:132 +msgid "Indicar la clave de admin" +msgstr "Введите административный пароль" + +#: ../../../../inc/Installer.class.php:133 +msgid "Clave del usuario admin de la aplicación" +msgstr "Пароль администратора программы" + +#: ../../../../inc/Installer.class.php:137 +msgid "Indicar la clave maestra" +msgstr "Введите мастер-пароль" + +#: ../../../../inc/Installer.class.php:138 +msgid "Clave maestra para encriptar las claves" +msgstr "Матер-пароль для шифрования паролей " + +#: ../../../../inc/Installer.class.php:142 +msgid "Clave maestra muy corta" +msgstr "Длина мастер-пароля мала." + +#: ../../../../inc/Installer.class.php:143 +msgid "La longitud de la clave maestra ha de ser mayor de 11 caracteres" +msgstr "Мастер-пароль должен быть не менее 11 символов" + +#: ../../../../inc/Installer.class.php:147 +msgid "Indicar el usuario de la BBDD" +msgstr "Введите пользователя базы данных" + +#: ../../../../inc/Installer.class.php:148 +msgid "Usuario con permisos de administrador de la Base de Datos" +msgstr "Пользователь с правами администратора для базы данных" + +#: ../../../../inc/Installer.class.php:152 +msgid "Indicar la clave de la BBDD" +msgstr "Введите пароль базы данных" + +#: ../../../../inc/Installer.class.php:153 +msgid "Clave del usuario administrador de la Base de Datos" +msgstr "Пароль администратора базы данных" + +#: ../../../../inc/Installer.class.php:157 +msgid "Indicar el nombre de la BBDD" +msgstr "Введите имя базы данных" + +#: ../../../../inc/Installer.class.php:158 +msgid "Nombre para la BBDD de la aplicación pej. syspass" +msgstr "Имя базы данных программы. Например, syspass" + +#: ../../../../inc/Installer.class.php:162 +msgid "El nombre de la BBDD no puede contener \".\"" +msgstr "Имя базы данных не может содержать \".\"" + +#: ../../../../inc/Installer.class.php:163 +msgid "Elimine los puntos del nombre de la Base de Datos" +msgstr "Пожалуйста, уберите точки из имени базы данных" + +#: ../../../../inc/Installer.class.php:167 +msgid "Indicar el servidor de la BBDD" +msgstr "Введите сервер баз данных" + +#: ../../../../inc/Installer.class.php:168 +msgid "Servidor donde se instalará la Base de Datos" +msgstr "Сервер, на котором будет создана база данных" + +#: ../../../../inc/Installer.class.php:313 +msgid "El usuario de MySQL ya existe" +msgstr "Пользователь MySQL уже существует" + +#: ../../../../inc/Installer.class.php:314 +msgid "Indique un nuevo usuario o elimine el existente" +msgstr "Введите новое имя пользователя или удалите существующего" + +#: ../../../../inc/Installer.class.php:327 +msgid "La BBDD ya existe" +msgstr "База данных уже существует" + +#: ../../../../inc/Installer.class.php:328 +msgid "Indique una nueva Base de Datos o elimine la existente" +msgstr "Введите новую базу данных или удалите существующую" + +#: ../../../../inc/Installer.class.php:337 +#: ../../../../inc/Installer.class.php:408 +msgid "Error al crear la BBDD" +msgstr "Ошибка при создании БД." + +#: ../../../../inc/Installer.class.php:338 +#: ../../../../inc/Installer.class.php:349 +msgid "Verifique los permisos del usuario de la Base de Datos" +msgstr "Пожалуйста, проверьте права доступа к базе данных " + +#: ../../../../inc/Installer.class.php:348 +msgid "Error al establecer permisos de la BBDD" +msgstr "Ошибка при установке прав доступа к базе данных" + +#: ../../../../inc/Installer.class.php:381 +msgid "El archivo de estructura de la BBDD no existe" +msgstr "Файл структуры базы данных не существует" + +#: ../../../../inc/Installer.class.php:382 +msgid "No es posible crear la BBDD de la aplicación. Descárguela de nuevo." +msgstr "Невозможно создать базу данных программы. Пожалуйста, скачайте её заново." + +#: ../../../../inc/Installer.class.php:390 +msgid "Error al seleccionar la BBDD" +msgstr "Ошибка выбора базы данных." + +#: ../../../../inc/Installer.class.php:391 +msgid "No es posible usar la Base de Datos para crear la estructura. Compruebe los permisos y que no exista." +msgstr "Невозможно использовать базу данных для создания её структуры. Проверьте права доступа к базе данных." + +#: ../../../../inc/Installer.class.php:409 +msgid "Error al crear la estructura de la Base de Datos." +msgstr "Ошибка создания структуры базы данных." + +#: ../../../../inc/Installer.class.php:432 +msgid "Error al crear el grupo \"admin\"" +msgstr "Ошибка создания группы \"admin\"" + +#: ../../../../inc/Installer.class.php:433 +#: ../../../../inc/Installer.class.php:466 +#: ../../../../inc/Installer.class.php:483 +#: ../../../../inc/Installer.class.php:496 +msgid "Informe al desarrollador" +msgstr "Предупреждение разработчику" + +#: ../../../../inc/Installer.class.php:465 +msgid "Error al crear el perfil \"admin\"" +msgstr "Ошибка создания профиля \"admin\"" + +#: ../../../../inc/Installer.class.php:482 +msgid "Error al crear el usuario \"admin\"" +msgstr "Ошибка создания пользователя \"admin\"" + +#: ../../../../inc/Installer.class.php:495 +msgid "Error al actualizar la clave maestra del usuario \"admin\"" +msgstr "Ошибка обновления мастер-пароля для пользователя \"admin\"" + +#: ../../../../inc/Ldap.class.php:110 ../../../../inc/Ldap.class.php:114 +msgid "No es posible conectar con el servidor de LDAP" +msgstr "Невозможно подключиться к серверу LDAP" + +#: ../../../../inc/Ldap.class.php:139 ../../../../inc/Ldap.class.php:144 +msgid "Error al conectar (BIND)" +msgstr "Ошибка подключения (BIND)" + +#: ../../../../inc/Ldap.class.php:167 ../../../../inc/Ldap.class.php:172 +msgid "Error al buscar objetos en DN base" +msgstr "Ошибка поиска объектов в DN" + +#: ../../../../inc/Ldap.class.php:200 ../../../../inc/Ldap.class.php:205 +#: ../../../../inc/Ldap.class.php:212 ../../../../inc/Ldap.class.php:216 +#: ../../../../inc/Ldap.class.php:225 ../../../../inc/Ldap.class.php:229 +msgid "Error al buscar RDN de grupo" +msgstr "Ошибка поиска группы в RDN" + +#: ../../../../inc/Ldap.class.php:278 ../../../../inc/Ldap.class.php:283 +#: ../../../../inc/Ldap.class.php:297 ../../../../inc/Ldap.class.php:301 +msgid "Error al buscar el DN del usuario" +msgstr "Ошибка поиска пользователя в DN" + +#: ../../../../inc/Ldap.class.php:290 ../../../../inc/Ldap.class.php:294 +msgid "Error al localizar el usuario en LDAP" +msgstr "Ошибка поиска пользователя в LDAP" + +#: ../../../../inc/Ldap.class.php:375 ../../../../inc/Ldap.class.php:380 +#: ../../../../inc/LdapADS.class.php:99 ../../../../inc/LdapADS.class.php:104 +msgid "Error al buscar el grupo de usuarios" +msgstr "Ошибка поиска групп пользователя" + +#: ../../../../inc/Ldap.class.php:387 +#, fuzzy +msgid "Usuario verificado en grupo" +msgstr "Группа используется:" + +#: ../../../../inc/LdapADS.class.php:108 ../../../../inc/LdapADS.class.php:113 +msgid "No se encontró el grupo con ese nombre" +msgstr "No group found with that name" + +#: ../../../../inc/Log.class.php:88 +msgid "Vaciar Eventos" +msgstr "Очистить записи" + +#: ../../../../inc/Log.class.php:88 +#: ../../../../inc/themes/classic/eventlog.inc:100 +#: ../../../../inc/themes/material-blue/eventlog.inc:100 +msgid "Vaciar registro de eventos" +msgstr "Очистить журнал событий" + +#: ../../../../inc/Migrate.class.php:52 +msgid "Faltan parámetros" +msgstr "Пропущены параметры" + +#: ../../../../inc/Migrate.class.php:149 +msgid "La versión no es compatible" +msgstr "Несовместимая версия" + +#: ../../../../inc/Migrate.class.php:150 +msgid "Actualice a la última versión de phpPMS" +msgstr "Пожалуйста, обновите phpPMS до последней версии" + +#: ../../../../inc/Migrate.class.php:168 +msgid "Error al obtener la configuración" +msgstr "Ошибка получения конфигурации" + +#: ../../../../inc/Migrate.class.php:211 ../../../../inc/Migrate.class.php:224 +msgid "Error al vaciar tabla" +msgstr "Ошибка очистки таблицы" + +#: ../../../../inc/Migrate.class.php:229 +msgid "Usuario actual no es administrador de la aplicación" +msgstr "Текущий пользователь не является администратором программы" + +#: ../../../../inc/Migrate.class.php:274 +msgid "No es posible crear el cliente" +msgstr "Невозможно создать заказчика" + +#: ../../../../inc/Migrate.class.php:275 +msgid "Contacte con el desarrollador" +msgstr "Пожалуйста, свяжитесь с разработчиками" + +#: ../../../../inc/Migrate.class.php:279 +msgid "Importar Clientes" +msgstr "Импорт заказчиков" + +#: ../../../../inc/Migrate.class.php:281 ../../../../inc/Migrate.class.php:351 +#: ../../../../inc/Migrate.class.php:452 ../../../../inc/Migrate.class.php:525 +#: ../../../../inc/Migrate.class.php:633 ../../../../inc/Migrate.class.php:698 +#: ../../../../inc/Migrate.class.php:772 ../../../../inc/Migrate.class.php:862 +#: ../../../../inc/Migrate.class.php:933 +msgid "Registros" +msgstr "Записи" + +#: ../../../../inc/Migrate.class.php:303 +msgid "Error al obtener los clientes" +msgstr "Ошибка получения заказчиков" + +#: ../../../../inc/Migrate.class.php:345 +msgid "Error al obtener cuentas" +msgstr "Ошибка получения учетных записей" + +#: ../../../../inc/Migrate.class.php:374 +msgid "Cliente no encontrado" +msgstr "Заказчик не найден" + +#: ../../../../inc/Migrate.class.php:417 +msgid "Error al migrar cuenta" +msgstr "Ошибка импорта учетной записи" + +#: ../../../../inc/Migrate.class.php:446 +msgid "Error al obtener los grupos de cuentas" +msgstr "Ошибка получения групп учетных записей" + +#: ../../../../inc/Migrate.class.php:450 +msgid "Importar Grupos de Cuentas" +msgstr "Импорт групп учетных записей" + +#: ../../../../inc/Migrate.class.php:472 +msgid "Error al crear grupos de cuentas" +msgstr "Ошибка при создании групп учетных записей" + +#: ../../../../inc/Migrate.class.php:519 +msgid "Error al obtener el historico de cuentas" +msgstr "Ошибка при получении истории учетных записей" + +#: ../../../../inc/Migrate.class.php:523 +msgid "Importar Histórico de Cuentas" +msgstr "Импорт истории учетных записей" + +#: ../../../../inc/Migrate.class.php:592 +msgid "Error al crear historico de cuentas" +msgstr "Ошибка создания истории учетных записей" + +#: ../../../../inc/Migrate.class.php:627 +msgid "Error al obtener los archivos de cuentas" +msgstr "Ошибка получения файлов учетных записей" + +#: ../../../../inc/Migrate.class.php:631 +msgid "Importar Archivos de Cuentas" +msgstr "Импорт файлов учетных записей" + +#: ../../../../inc/Migrate.class.php:663 +msgid "Error al crear archivos de cuentas" +msgstr "Ошибка создания файлов учетных записей" + +#: ../../../../inc/Migrate.class.php:692 +msgid "Error al obtener las categorías de cuentas" +msgstr "Ошибка получения категорий учетных записей" + +#: ../../../../inc/Migrate.class.php:696 +msgid "Importar Categorías de Cuentas" +msgstr "Импорт категорий учетных записей" + +#: ../../../../inc/Migrate.class.php:718 +msgid "Error al crear categorías de cuentas" +msgstr "Ошибка получения категорий учетных записей" + +#: ../../../../inc/Migrate.class.php:766 +msgid "Error al obtener los usuarios" +msgstr "Ошибка получения пользователей" + +#: ../../../../inc/Migrate.class.php:770 +msgid "Importar Usuarios" +msgstr "Импорт пользователей" + +#: ../../../../inc/Migrate.class.php:827 +msgid "Error al crear usuarios" +msgstr "Ошибка создания пользователей" + +#: ../../../../inc/Migrate.class.php:856 +msgid "Error al obtener los grupos de usuarios" +msgstr "Ошибка получения групп пользователей" + +#: ../../../../inc/Migrate.class.php:860 +msgid "Importar Grupos de Usuarios" +msgstr "Импорт групп пользователей" + +#: ../../../../inc/Migrate.class.php:886 +msgid "Error al crear los grupos de usuarios" +msgstr "Ошибка добавления групп пользователей" + +#: ../../../../inc/Migrate.class.php:931 +msgid "Importar Configuración" +msgstr "Импорт конфигурации" + +#: ../../../../inc/Profile.class.php:69 ../../../../inc/Profile.class.php:123 +#: ../../../../inc/Profile.class.php:128 +#, fuzzy +msgid "Migrar Perfiles" +msgstr "Профили" + +#: ../../../../inc/Profile.class.php:69 +#, fuzzy +msgid "Error al obtener perfiles" +msgstr "Ошибка получения учетных записей" + +#: ../../../../inc/Profile.class.php:126 +#, fuzzy +msgid "Operación realizada correctamente" +msgstr "Программа успешно обновлена" + +#: ../../../../inc/Profile.class.php:128 +#, fuzzy +msgid "Fallo al realizar la operación" +msgstr "Ошибка обновления истории мастер-паролей" + +#: ../../../../inc/ProfileBase.class.php:164 +#, fuzzy +msgid "Datos de perfil incorrectos" +msgstr "Профиль с таким именем уже существует" + +#: ../../../../inc/ProfileBase.class.php:550 +#: ../../../../web/UsersMgmtC.class.php:274 +msgid "Eliminar Perfil" +msgstr "Удалить профиль" + +#: ../../../../inc/ProfileBase.class.php:593 +msgid "Modificar Perfil" +msgstr "Редактировать профиль" + +#: ../../../../inc/SyspassImport.class.php:111 +#: ../../../../inc/SyspassImport.class.php:136 +#: ../../../../inc/SyspassImport.class.php:161 +#, fuzzy +msgid "Formato de XML inválido" +msgstr "Ошибочный ID" + +#: ../../../../inc/SyspassImport.class.php:111 +#, fuzzy +msgid "No hay categorías para importar" +msgstr "Нет резервных копий для скачивания" + +#: ../../../../inc/SyspassImport.class.php:136 +#, fuzzy +msgid "No hay clientes para importar" +msgstr "Импорт заказчиков" + +#: ../../../../inc/SyspassImport.class.php:161 +#, fuzzy +msgid "No hay cuentas para importar" +msgstr "Нет резервных копий для скачивания" + +#: ../../../../inc/Upgrade.class.php:51 +msgid "Error al aplicar la actualización de la Base de Datos" +msgstr "Ошибка обновления базы данных" + +#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58 +msgid "Compruebe el registro de eventos para más detalles" +msgstr "См. журнал событий для получения подробностей." + +#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58 +#: ../../../../inc/themes/classic/login.inc:32 +#: ../../../../inc/themes/material-blue/2fa.inc:26 +#: ../../../../inc/themes/material-blue/login.inc:60 +msgid "Acceder" +msgstr "Войти" + +#: ../../../../inc/Upgrade.class.php:57 +#, fuzzy +msgid "Error al aplicar la actualización auxiliar" +msgstr "Ошибка обновления базы данных" + +#: ../../../../inc/Upgrade.class.php:74 +msgid "Actualizar BBDD" +msgstr "Обновление БД" + +#: ../../../../inc/Upgrade.class.php:121 +msgid "No es necesario actualizar la Base de Datos." +msgstr "Обновление базы данных не требуется." + +#: ../../../../inc/Upgrade.class.php:129 +msgid "Error al aplicar la actualización de la Base de Datos." +msgstr "Ошибка обновления базы данных." + +#: ../../../../inc/Upgrade.class.php:138 +msgid "Actualización de la Base de Datos realizada correctamente." +msgstr "Обновление базы данных завершено успешно." + +#: ../../../../inc/Upgrade.class.php:215 +msgid "Actualizar Configuración" +msgstr "Обновить конфигурацию" + +#: ../../../../inc/Upgrade.class.php:215 +msgid "Actualización de la Configuración realizada correctamente." +msgstr "Конфигурация была успешно обновлена." + +#: ../../../../inc/UserBase.class.php:386 +#: ../../../../inc/UserBase.class.php:530 +msgid "No se pudo realizar la petición de cambio de clave." +msgstr "Выполнить запрос на смену пароля невозможно." + +#: ../../../../inc/UserBase.class.php:525 +msgid "Modificar Usuario" +msgstr "Изменить пользователя" + +#: ../../../../inc/UserBase.class.php:592 +#: ../../../../web/UsersMgmtC.class.php:150 +msgid "Eliminar Usuario" +msgstr "Удалить пользователя" + +#: ../../../../inc/UserLdap.class.php:78 +msgid "Activación Cuenta" +msgstr "Активация учетной записи" + +#: ../../../../inc/UserLdap.class.php:79 +msgid "Su cuenta está pendiente de activación." +msgstr "Активация Вашей учетной записи в процессе." + +#: ../../../../inc/UserLdap.class.php:80 +msgid "En breve recibirá un email de confirmación." +msgstr "Вы получите письмо в скором времени." + +#: ../../../../inc/UserLdap.class.php:86 +#, fuzzy +msgid "Nuevo usuario de LDAP" +msgstr "Пользователь LDAP" + +#: ../../../../inc/UserUtil.class.php:727 +#, fuzzy +msgid "Migrar Grupos" +msgstr "Ошибка импорта учетной записи" + +#: ../../../../inc/UserUtil.class.php:727 +#, fuzzy +msgid "Error al migrar grupo del usuario" +msgstr "Ошибка поиска пользователя в DN" + +#: ../../../../inc/Util.class.php:122 +#, fuzzy +msgid "Versión de PHP requerida >= " +msgstr "Необходим PHP версии >= 5.1" + +#: ../../../../inc/Util.class.php:123 +msgid "Actualice la versión de PHP para que la aplicación funcione correctamente" +msgstr "Пожалуйста, обновите PHP для использования sysPass" + +#: ../../../../inc/Util.class.php:159 +#: ../../../../inc/themes/classic/ldap.inc:212 +#: ../../../../inc/themes/material-blue/ldap.inc:238 +msgid "Módulo no disponible" +msgstr "Модуль недоступен" + +#: ../../../../inc/Util.class.php:160 +msgid "Sin este módulo la aplicación puede no funcionar correctamente." +msgstr "Без этого модуля программа не может работать корректно" + +#: ../../../../inc/XmlExport.class.php:104 +#, fuzzy +msgid "Importar XML" +msgstr "Импорт CSV/XML" + +#: ../../../../inc/XmlExport.class.php:389 +#, fuzzy +msgid "Error al crear el archivo XML" +msgstr "Ошибка при создании пользователя" + +#: ../../../../inc/XmlImport.class.php:63 +msgid "Formato detectado" +msgstr "" + +#: ../../../../inc/XmlImportBase.class.php:75 +msgid "No es posible procesar el archivo XML" +msgstr "Невозможно обработать файл XML" + +#: ../../../../inc/XmlImportBase.class.php:103 +msgid "Archivo XML no soportado" +msgstr "Файл XML не поддерживается" + +#: ../../../../inc/XmlImportBase.class.php:104 +msgid "No es posible detectar la aplicación que exportó los datos" +msgstr "Невозможно определить программу, из которой были экспортированы данные" + +#: ../../../../js/strings.js.php:27 +msgid "Error en la consulta" +msgstr "Ошибка запроса" + +#: ../../../../js/strings.js.php:28 +msgid "Ha ocurrido un error" +msgstr "Произошла ошибка" + +#: ../../../../js/strings.js.php:29 +#: ../../../../inc/themes/classic/login.inc:52 +#: ../../../../inc/themes/material-blue/login.inc:75 +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 +#, fuzzy, php-format +msgid "No es posible guardar el archivo.%sTamaño máximo:" +msgstr "Сохранить файл невозможно.
    Максимальный размер:" + +#: ../../../../js/strings.js.php:46 +msgid "Extensión no permitida" +msgstr "Данный тип файла заблокирован" + +#: ../../../../js/strings.js.php:47 +msgid "Vaciar el registro de eventos?" +msgstr "Очистить журнал событий?" + +#: ../../../../js/strings.js.php:48 +msgid "Seleccionar Grupo" +msgstr "Выбрать группу" + +#: ../../../../js/strings.js.php:49 +#, fuzzy +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 +#, fuzzy +msgid "Opciones de clave" +msgstr "Опции" + +#: ../../../../js/strings.js.php:55 +msgid "Generar clave aleatoria" +msgstr "Сгенерировать пароль" + +#: ../../../../js/strings.js.php:56 +msgid "Complejidad" +msgstr "" + +#: ../../../../js/strings.js.php:57 +msgid "Reset" +msgstr "" + +#: ../../../../js/strings.js.php:58 +#: ../../../../inc/themes/classic/editpass.inc:34 +msgid "Nivel de fortaleza de la clave" +msgstr "Уровень длины пароля" + +#: ../../../../js/strings.js.php:59 +msgid "Mostrar Clave" +msgstr "Показать пароль" + +#: ../../../../js/strings.js.php:60 +#, fuzzy +msgid "Copiar Usuario" +msgstr "Скопировать учетную запись" + +#: ../../../../js/strings.js.php:61 +#, fuzzy +msgid "Copiar Clave" +msgstr "Копирование пароля в буфер" + +#: ../../../../js/strings.js.php:62 +msgid "Incluir Números" +msgstr "" + +#: ../../../../js/strings.js.php:63 +msgid "Incluir Mayúsculas" +msgstr "" + +#: ../../../../js/strings.js.php:64 +msgid "Incluir Símbolos" +msgstr "" + +#: ../../../../js/strings.js.php:65 +#, fuzzy +msgid "Longitud" +msgstr "Мастер-пароль должен быть не менее 11 символов" + +#: ../../../../js/strings.js.php:66 +#, fuzzy +msgid "Seleccionar Acción" +msgstr "Действие" + +#: ../../../../js/strings.js.php:67 +#: ../../../../inc/themes/classic/account.inc:133 +#: ../../../../inc/themes/classic/account.inc:164 +#: ../../../../inc/themes/classic/account.inc:449 +#: ../../../../inc/themes/classic/install.inc:99 +msgid "SI" +msgstr "ДА" + +#: ../../../../js/strings.js.php:68 +#: ../../../../inc/themes/classic/account.inc:133 +#: ../../../../inc/themes/classic/account.inc:164 +#: ../../../../inc/themes/classic/account.inc:447 +#: ../../../../inc/themes/classic/encryption.inc:61 +#: ../../../../inc/themes/classic/encryption.inc:80 +#: ../../../../inc/themes/classic/import.inc:70 +#: ../../../../inc/themes/classic/install.inc:99 +#: ../../../../inc/themes/classic/tokens.inc:36 +msgid "NO" +msgstr "НЕТ" + +#: ../../../../web/AccountC.class.php:380 +#: ../../../../web/AccountC.class.php:411 +#: ../../../../inc/themes/classic/search.inc:38 +#: ../../../../inc/themes/classic/search.inc:97 +#: ../../../../inc/themes/material-blue/search.inc:41 +#: ../../../../inc/themes/material-blue/search.inc:108 +msgid "Detalles de Cuenta" +msgstr "Детали учетной записи" + +#: ../../../../web/AccountC.class.php:468 +#: ../../../../inc/themes/classic/account.inc:394 +#: ../../../../inc/themes/material-blue/account.inc:429 +msgid "Modificar Clave de Cuenta" +msgstr "Изменить пароль учетной записи" + +#: ../../../../web/AccountsMgmtC.class.php:79 +#: ../../../../web/AccountsMgmtC.class.php:138 +#: ../../../../web/AccountsMgmtC.class.php:266 +#: ../../../../web/SearchC.class.php:277 +#: ../../../../web/UsersMgmtC.class.php:87 +#: ../../../../web/UsersMgmtC.class.php:187 +#: ../../../../web/UsersMgmtC.class.php:245 +#: ../../../../inc/themes/classic/account.inc:11 +#: ../../../../inc/themes/classic/categories.inc:8 +#: ../../../../inc/themes/classic/customers.inc:8 +#: ../../../../inc/themes/classic/customfields.inc:9 +#: ../../../../inc/themes/classic/editpass.inc:8 +#: ../../../../inc/themes/classic/groups.inc:8 +#: ../../../../inc/themes/classic/info.inc:25 +#: ../../../../inc/themes/classic/profiles.inc:8 +#: ../../../../inc/themes/classic/request.inc:6 +#: ../../../../inc/themes/classic/search.inc:36 +#: ../../../../inc/themes/classic/users.inc:8 +#: ../../../../inc/themes/material-blue/account.inc:15 +#: ../../../../inc/themes/material-blue/categories.inc:8 +#: ../../../../inc/themes/material-blue/customers.inc:8 +#: ../../../../inc/themes/material-blue/customfields.inc:8 +#: ../../../../inc/themes/material-blue/editpass.inc:9 +#: ../../../../inc/themes/material-blue/groups.inc:8 +#: ../../../../inc/themes/material-blue/info.inc:25 +#: ../../../../inc/themes/material-blue/profiles.inc:8 +#: ../../../../inc/themes/material-blue/request.inc:6 +#: ../../../../inc/themes/material-blue/search.inc:39 +#: ../../../../inc/themes/material-blue/users.inc:8 +msgid "Nombre" +msgstr "Имя" + +#: ../../../../web/AccountsMgmtC.class.php:115 +msgid "Gestión de Categorías" +msgstr "Управление категориями" + +#: ../../../../web/AccountsMgmtC.class.php:172 +msgid "Gestión de Clientes" +msgstr "Управление заказчиками" + +#: ../../../../web/AccountsMgmtC.class.php:266 +#: ../../../../inc/themes/classic/customfields.inc:27 +#: ../../../../inc/themes/material-blue/customfields.inc:30 +#, fuzzy +msgid "Módulo" +msgstr "Модуль недоступен" + +#: ../../../../web/AccountsMgmtC.class.php:287 +#, fuzzy +msgid "Eliminar Campo" +msgstr "Удалить учетную запись" + +#: ../../../../web/AccountsMgmtC.class.php:300 +#: ../../../../inc/themes/classic/profiles.inc:107 +#: ../../../../inc/themes/material-blue/profiles.inc:124 +msgid "Campos Personalizados" +msgstr "" + +#: ../../../../web/ConfigC.class.php:178 +msgid "Último backup" +msgstr "Последняя резервная копия" + +#: ../../../../web/ConfigC.class.php:178 +msgid "No se encontraron backups" +msgstr "Резервные копии не найдены" + +#: ../../../../web/ConfigC.class.php:185 +#, fuzzy +msgid "Última exportación" +msgstr "Последнее изменение" + +#: ../../../../web/ConfigC.class.php:185 +#, fuzzy +msgid "No se encontró archivo de exportación" +msgstr "Ошибка записи файла конфигурации" + +#: ../../../../web/ConfigC.class.php:230 +#, fuzzy +msgid "Información" +msgstr "Показывает информацию о программе и производительности." + +#: ../../../../web/EventlogC.class.php:91 +msgid "Registro de eventos vaciado" +msgstr "Журнал очищен" + +#: ../../../../web/EventlogC.class.php:93 +msgid "Error al vaciar el registro de eventos" +msgstr "Ошибка очистки журнала" + +#: ../../../../web/MainC.class.php:131 +#: ../../../../web/UsersMgmtC.class.php:100 +msgid "Admin Aplicación" +msgstr "Администратор программы" + +#: ../../../../web/MainC.class.php:149 +msgid "Buscar" +msgstr "Поиск" + +#: ../../../../web/MainC.class.php:161 +#: ../../../../web/UsersMgmtC.class.php:163 +msgid "Gestión de Usuarios" +msgstr "Управление пользователями" + +#: ../../../../web/MainC.class.php:167 +msgid "Gestión de Clientes y Categorías" +msgstr "Управление заказчиками и категориями" + +#: ../../../../web/MainC.class.php:179 +#: ../../../../inc/themes/classic/eventlog.inc:4 +#: ../../../../inc/themes/material-blue/eventlog.inc:3 +msgid "Registro de Eventos" +msgstr "Журнал событий" + +#: ../../../../web/MainC.class.php:199 +msgid "Nuevo estilo visual basado en Material Design Lite by Google" +msgstr "" + +#: ../../../../web/MainC.class.php:200 +#, fuzzy +msgid "Usuarios en múltiples grupos" +msgstr "Импорт групп пользователей" + +#: ../../../../web/MainC.class.php:201 +#, fuzzy +msgid "Previsualización de imágenes" +msgstr "Запрос на изменение учетной записи" + +#: ../../../../web/MainC.class.php:202 +msgid "Mostrar claves como imágenes" +msgstr "" + +#: ../../../../web/MainC.class.php:203 +msgid "Campos personalizados" +msgstr "" + +#: ../../../../web/MainC.class.php:204 +#, fuzzy +msgid "API de consultas" +msgstr "Запрос на изменение учетной записи" + +#: ../../../../web/MainC.class.php:205 +#: ../../../../inc/themes/classic/2fa.inc:9 +#: ../../../../inc/themes/material-blue/2fa.inc:9 +#: ../../../../inc/themes/material-blue/security.inc:13 +#, fuzzy +msgid "Autentificación en 2 pasos" +msgstr "Включить аутентификацию" + +#: ../../../../web/MainC.class.php:206 +#, fuzzy +msgid "Complejidad de generador de claves" +msgstr "Не могу найти генератор случайных чисел." + +#: ../../../../web/MainC.class.php:207 +msgid "Consultas especiales" +msgstr "" + +#: ../../../../web/MainC.class.php:208 +#, fuzzy +msgid "Exportación a XML" +msgstr "Файл XML не поддерживается" + +#: ../../../../web/MainC.class.php:209 +#, fuzzy +msgid "Clave maestra temporal" +msgstr "Мастер-пароль" + +#: ../../../../web/MainC.class.php:210 +#, fuzzy +msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV" +msgstr "Импорт учетных записей из KeePass, KeePassX и CSV" + +#: ../../../../web/MainC.class.php:211 +msgid "Optimización del código y mayor rapidez de carga" +msgstr "Оптимизация кода" + +#: ../../../../web/MainC.class.php:212 +msgid "Mejoras de seguridad en XSS e inyección SQL" +msgstr "Улучшена защита от XSS и SQL инъекций" + +#: ../../../../web/MainC.class.php:254 +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:255 +msgid "Actualice la versión de PHP para usar sysPass de forma segura" +msgstr "Пожалуйста, обновите версию PHP для безопасного использования sysPass" + +#: ../../../../web/MainC.class.php:262 +msgid "No se encuentra el generador de números aleatorios." +msgstr "Не могу найти генератор случайных чисел." + +#: ../../../../web/MainC.class.php:263 +msgid "Sin esta función un atacante puede utilizar su cuenta al resetear la clave" +msgstr "Без этой функции, атакующий может завладеть вашим аккаунтом при сбросе пароля." + +#: ../../../../web/MainC.class.php:282 +msgid "Instalación finalizada" +msgstr "Установка завершена" + +#: ../../../../web/MainC.class.php:283 +msgid "Pulse aquí para acceder" +msgstr "Назмите здесь для входа" + +#: ../../../../web/MainC.class.php:378 +msgid "Descargar nueva versión" +msgstr "Скачать новую версию" + +#: ../../../../web/SearchC.class.php:270 +msgid "Ordenar por Cliente" +msgstr "Сортировать по заказчику" + +#: ../../../../web/SearchC.class.php:276 +msgid "Ordenar por Nombre" +msgstr "Сортировать по имени" + +#: ../../../../web/SearchC.class.php:282 +msgid "Ordenar por Categoría" +msgstr "Сортировать по категории" + +#: ../../../../web/SearchC.class.php:288 +msgid "Ordenar por Usuario" +msgstr "Сортировать по имени пользователя" + +#: ../../../../web/SearchC.class.php:294 +msgid "Ordenar por URL / IP" +msgstr "Сортировать по URL / IP" + +#: ../../../../web/SearchC.class.php:295 +#: ../../../../inc/themes/classic/account.inc:58 +#: ../../../../inc/themes/classic/editpass.inc:16 +#: ../../../../inc/themes/classic/request.inc:13 +#: ../../../../inc/themes/classic/search.inc:59 +#: ../../../../inc/themes/material-blue/account.inc:66 +#: ../../../../inc/themes/material-blue/editpass.inc:17 +#: ../../../../inc/themes/material-blue/request.inc:15 +#: ../../../../inc/themes/material-blue/search.inc:62 +msgid "URL / IP" +msgstr "URL / IP" + +#: ../../../../web/UsersMgmtC.class.php:91 +msgid "Propiedades" +msgstr "Настройки" + +#: ../../../../web/UsersMgmtC.class.php:104 +msgid "Admin Cuentas" +msgstr "Администратор учетных записей" + +#: ../../../../web/UsersMgmtC.class.php:108 +#: ../../../../inc/themes/classic/users.inc:28 +#: ../../../../inc/themes/material-blue/users.inc:34 +msgid "Usuario de LDAP" +msgstr "Пользователь LDAP" + +#: ../../../../web/UsersMgmtC.class.php:112 +#: ../../../../inc/themes/classic/users.inc:113 +#: ../../../../inc/themes/material-blue/users.inc:151 +#: ../../../../inc/themes/material-blue/users.inc:154 +msgid "Deshabilitado" +msgstr "Отключен" + +#: ../../../../web/UsersMgmtC.class.php:129 +msgid "Ver Detalles de Usuario" +msgstr "Просмотр информации пользователя" + +#: ../../../../web/UsersMgmtC.class.php:143 +msgid "Cambiar Clave de Usuario" +msgstr "Изменить пароль пользователя" + +#: ../../../../web/UsersMgmtC.class.php:222 +msgid "Gestión de Grupos" +msgstr "Управление группами" + +#: ../../../../web/UsersMgmtC.class.php:260 +#, fuzzy +msgid "Ver Detalles de Perfil" +msgstr "Просмотр информации пользователя" + +#: ../../../../web/UsersMgmtC.class.php:287 +msgid "Gestión de Perfiles" +msgstr "Управление профилями" + +#: ../../../../web/UsersMgmtC.class.php:407 +#, fuzzy +msgid "Ver token de Autorización" +msgstr "Просмотр информации пользователя" + +#: ../../../../web/UsersMgmtC.class.php:434 +#, fuzzy +msgid "Gestión de Autorizaciones API" +msgstr "Управление файлами отключено" + +#: ../../../../web/UsersMgmtC.class.php:455 +#, fuzzy +msgid "Token de autorización visualizado" +msgstr "Конфигурация изменена" + +#: ../../../../web/UsersMgmtC.class.php:456 +msgid "Autorizaciones" +msgstr "" + +#: ../../../../web/UsersPrefsC.class.php:84 +#: ../../../../inc/themes/classic/mail.inc:63 +#: ../../../../inc/themes/material-blue/mail.inc:86 +msgid "Seguridad" +msgstr "Безопасность" + +#: ../../../../inc/themes/classic/2fa.inc:14 +#: ../../../../inc/themes/material-blue/2fa.inc:14 +#, fuzzy +msgid "Introducir código" +msgstr "Введите код безопасности" + +#: ../../../../inc/themes/classic/2fa.inc:26 +#, fuzzy +msgid "Verificar" +msgstr "Пароль (подтверждение)" + +#: ../../../../inc/themes/classic/account.inc:14 +#: ../../../../inc/themes/material-blue/account.inc:21 +msgid "Nombre de cuenta" +msgstr "Имя учетной записи" + +#: ../../../../inc/themes/classic/account.inc:35 +msgid "Buscar en desplegable o introducir" +msgstr "Выберите снизу или введите" + +#: ../../../../inc/themes/classic/account.inc:61 +#: ../../../../inc/themes/material-blue/account.inc:72 +msgid "URL o IP de acceso" +msgstr "URL или IP доступа" + +#: ../../../../inc/themes/classic/account.inc:73 +#: ../../../../inc/themes/material-blue/account.inc:86 +msgid "Usuario de acceso" +msgstr "Пользователь доступа" + +#: ../../../../inc/themes/classic/account.inc:90 +#: ../../../../inc/themes/classic/editpass.inc:32 +#: ../../../../inc/themes/classic/users.inc:83 +#: ../../../../inc/themes/classic/userspass.inc:19 +#: ../../../../inc/themes/classic/userspass.inc:21 +#: ../../../../inc/themes/material-blue/account.inc:105 +#: ../../../../inc/themes/material-blue/editpass.inc:36 +#: ../../../../inc/themes/material-blue/install.inc:64 +#: ../../../../inc/themes/material-blue/users.inc:102 +#: ../../../../inc/themes/material-blue/users.inc:109 +#: ../../../../inc/themes/material-blue/userspass.inc:19 +#: ../../../../inc/themes/material-blue/userspass.inc:25 +msgid "Clave (repetir)" +msgstr "Подтверждение пароля" + +#: ../../../../inc/themes/classic/account.inc:97 +#: ../../../../inc/themes/classic/search.inc:75 +#: ../../../../inc/themes/classic/users.inc:91 +#: ../../../../inc/themes/material-blue/account.inc:116 +#: ../../../../inc/themes/material-blue/search.inc:82 +#: ../../../../inc/themes/material-blue/users.inc:116 +msgid "Notas" +msgstr "Заметки" + +#: ../../../../inc/themes/classic/account.inc:99 +#: ../../../../inc/themes/material-blue/account.inc:121 +#: ../../../../inc/themes/material-blue/users.inc:123 +msgid "Notas sobre la cuenta" +msgstr "Заметки по учетной записи" + +#: ../../../../inc/themes/classic/account.inc:105 +#: ../../../../inc/themes/material-blue/account.inc:130 +#: ../../../../inc/themes/material-blue/search.inc:75 +msgid "Permisos" +msgstr "Разрешения" + +#: ../../../../inc/themes/classic/account.inc:132 +#: ../../../../inc/themes/classic/account.inc:163 +#: ../../../../inc/themes/material-blue/account.inc:159 +#: ../../../../inc/themes/material-blue/account.inc:191 +msgid "Hablitar edición" +msgstr "Разрешить изменения" + +#: ../../../../inc/themes/classic/account.inc:201 +#: ../../../../inc/themes/material-blue/account.inc:243 +msgid "Soltar archivos aquí (max. 5) o click para seleccionar" +msgstr "Перетащите файлы сюда (не более 5) или нажмите для выбора" + +#: ../../../../inc/themes/classic/account.inc:201 +#: ../../../../inc/themes/classic/config.inc:193 +#: ../../../../inc/themes/material-blue/account.inc:243 +#: ../../../../inc/themes/material-blue/config.inc:274 +msgid "Tamaño máximo de archivo" +msgstr "Максимальный размер файла" + +#: ../../../../inc/themes/classic/account.inc:213 +#: ../../../../inc/themes/material-blue/account.inc:255 +msgid "Historial" +msgstr "История" + +#: ../../../../inc/themes/classic/account.inc:232 +#: ../../../../inc/themes/material-blue/account.inc:274 +msgid "Seleccionar fecha" +msgstr "Выберите дату" + +#: ../../../../inc/themes/classic/account.inc:241 +#: ../../../../inc/themes/classic/users.inc:164 +#: ../../../../inc/themes/material-blue/account.inc:283 +#: ../../../../inc/themes/material-blue/users.inc:208 +msgid "Última Modificación" +msgstr "Последнее изменение" + +#: ../../../../inc/themes/classic/account.inc:243 +#: ../../../../inc/themes/material-blue/account.inc:285 +msgid "por" +msgstr "выполнено" + +#: ../../../../inc/themes/classic/account.inc:286 +#: ../../../../inc/themes/material-blue/account.inc:332 +msgid "Visitas" +msgstr "Просмотров" + +#: ../../../../inc/themes/classic/account.inc:290 +#: ../../../../inc/themes/material-blue/account.inc:336 +msgid "Fecha Alta" +msgstr "Дата создания" + +#: ../../../../inc/themes/classic/account.inc:294 +#: ../../../../inc/themes/material-blue/account.inc:340 +msgid "Creador" +msgstr "Создатель" + +#: ../../../../inc/themes/classic/account.inc:298 +#: ../../../../inc/themes/material-blue/account.inc:200 +#: ../../../../inc/themes/material-blue/account.inc:344 +msgid "Grupo Principal" +msgstr "Основная группа" + +#: ../../../../inc/themes/classic/account.inc:303 +#: ../../../../inc/themes/material-blue/account.inc:349 +msgid "Usuarios Secundarios" +msgstr "Вторичные пользователи" + +#: ../../../../inc/themes/classic/account.inc:322 +#: ../../../../inc/themes/material-blue/account.inc:368 +msgid "Grupos Secundarios" +msgstr "Вторичные группы" + +#: ../../../../inc/themes/classic/account.inc:342 +#: ../../../../inc/themes/material-blue/account.inc:388 +msgid "Fecha Edición" +msgstr "Дата изменения" + +#: ../../../../inc/themes/classic/account.inc:346 +#: ../../../../inc/themes/material-blue/account.inc:392 +msgid "Editor" +msgstr "Изменил" + +#: ../../../../inc/themes/classic/account.inc:373 +#: ../../../../inc/themes/material-blue/account.inc:455 +msgid "Restaurar cuenta desde este punto" +msgstr "Восстановить учетную запись из текущей точки" + +#: ../../../../inc/themes/classic/account.inc:385 +#: ../../../../inc/themes/classic/account.inc:468 +#: ../../../../inc/themes/classic/search.inc:105 +#: ../../../../inc/themes/classic/search.inc:184 +#: ../../../../inc/themes/material-blue/account.inc:422 +#: ../../../../inc/themes/material-blue/account.inc:492 +#: ../../../../inc/themes/material-blue/search.inc:118 +#: ../../../../inc/themes/material-blue/search.inc:197 +msgid "Copiar Clave en Portapapeles" +msgstr "Копировать пароль в буфер" + +#: ../../../../inc/themes/classic/account.inc:401 +#: ../../../../inc/themes/material-blue/account.inc:435 +msgid "Ver Actual" +msgstr "Просмотр текущей версии" + +#: ../../../../inc/themes/classic/account.inc:406 +#: ../../../../inc/themes/classic/editpass.inc:46 +#: ../../../../inc/themes/classic/passreset.inc:46 +#: ../../../../inc/themes/material-blue/passreset.inc:43 +msgid "Volver" +msgstr "Назад" + +#: ../../../../inc/themes/classic/account.inc:413 +#: ../../../../inc/themes/classic/search.inc:117 +#: ../../../../inc/themes/material-blue/account.inc:445 +#: ../../../../inc/themes/material-blue/search.inc:130 +msgid "Modificar Cuenta" +msgstr "Редактировать учетную запись" + +#: ../../../../inc/themes/classic/account.inc:418 +#: ../../../../inc/themes/classic/search.inc:138 +#: ../../../../inc/themes/material-blue/account.inc:449 +#: ../../../../inc/themes/material-blue/search.inc:150 +msgid "Solicitar Modificación" +msgstr "Запросить изменение" + +#: ../../../../inc/themes/classic/account.inc:425 +#: ../../../../inc/themes/classic/categories.inc:62 +#: ../../../../inc/themes/classic/config.inc:275 +#: ../../../../inc/themes/classic/customers.inc:62 +#: ../../../../inc/themes/classic/customfields.inc:63 +#: ../../../../inc/themes/classic/editpass.inc:51 +#: ../../../../inc/themes/classic/encryption.inc:102 +#: ../../../../inc/themes/classic/groups.inc:77 +#: ../../../../inc/themes/classic/ldap.inc:229 +#: ../../../../inc/themes/classic/mail.inc:107 +#: ../../../../inc/themes/classic/profiles.inc:168 +#: ../../../../inc/themes/classic/security.inc:58 +#: ../../../../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:461 +#: ../../../../inc/themes/material-blue/categories.inc:72 +#: ../../../../inc/themes/material-blue/config.inc:390 +#: ../../../../inc/themes/material-blue/customers.inc:73 +#: ../../../../inc/themes/material-blue/customfields.inc:74 +#: ../../../../inc/themes/material-blue/editpass.inc:60 +#: ../../../../inc/themes/material-blue/groups.inc:88 +#: ../../../../inc/themes/material-blue/ldap.inc:257 +#: ../../../../inc/themes/material-blue/mail.inc:145 +#: ../../../../inc/themes/material-blue/profiles.inc:177 +#: ../../../../inc/themes/material-blue/security.inc:64 +#: ../../../../inc/themes/material-blue/tokens.inc:63 +#: ../../../../inc/themes/material-blue/users.inc:235 +#: ../../../../inc/themes/material-blue/userspass.inc:40 +#: ../../../../inc/themes/material-blue/wiki.inc:124 +msgid "Guardar" +msgstr "Сохранить" + +#: ../../../../inc/themes/classic/account.inc:435 +#: ../../../../inc/themes/material-blue/account.inc:471 +msgid "Seleccionar grupos secundarios" +msgstr "Выберите вторичные группы" + +#: ../../../../inc/themes/classic/account.inc:439 +#: ../../../../inc/themes/material-blue/account.inc:474 +msgid "Seleccionar usuarios" +msgstr "Выберите пользователей" + +#: ../../../../inc/themes/classic/account.inc:472 +#: ../../../../inc/themes/classic/search.inc:188 +#: ../../../../inc/themes/material-blue/account.inc:496 +#: ../../../../inc/themes/material-blue/search.inc:201 +msgid "Clave Copiada al Portapapeles" +msgstr "Пароль скопирован в буфер" + +#: ../../../../inc/themes/classic/backup.inc:10 +#: ../../../../inc/themes/classic/backup.inc:67 +#: ../../../../inc/themes/material-blue/backup.inc:10 +#: ../../../../inc/themes/material-blue/backup.inc:71 +msgid "Resultado" +msgstr "Результат" + +#: ../../../../inc/themes/classic/backup.inc:18 +#: ../../../../inc/themes/classic/backup.inc:75 +#: ../../../../inc/themes/material-blue/backup.inc:18 +#: ../../../../inc/themes/material-blue/backup.inc:79 +msgid "Descargar Actual" +msgstr "Скачать текущий" + +#: ../../../../inc/themes/classic/backup.inc:31 +#: ../../../../inc/themes/material-blue/backup.inc:31 +msgid "No hay backups para descargar" +msgstr "Нет резервных копий для скачивания" + +#: ../../../../inc/themes/classic/backup.inc:45 +#: ../../../../inc/themes/classic/backup.inc:49 +#: ../../../../inc/themes/classic/backup.inc:113 +#: ../../../../inc/themes/classic/backup.inc:117 +#: ../../../../inc/themes/classic/encryption.inc:93 +#: ../../../../inc/themes/classic/encryption.inc:97 +#: ../../../../inc/themes/classic/encryption.inc:152 +#: ../../../../inc/themes/classic/encryption.inc:156 +#: ../../../../inc/themes/classic/import.inc:15 +#: ../../../../inc/themes/classic/import.inc:37 +#: ../../../../inc/themes/classic/import.inc:51 +#: ../../../../inc/themes/classic/import.inc:97 +#: ../../../../inc/themes/classic/import.inc:118 +#: ../../../../inc/themes/classic/import.inc:170 +#: ../../../../inc/themes/classic/import.inc:174 +#: ../../../../inc/themes/classic/js-common.inc:13 +#: ../../../../inc/themes/classic/ldap.inc:13 +#: ../../../../inc/themes/classic/ldap.inc:33 +#: ../../../../inc/themes/classic/ldap.inc:58 +#: ../../../../inc/themes/classic/ldap.inc:82 +#: ../../../../inc/themes/classic/ldap.inc:93 +#: ../../../../inc/themes/classic/ldap.inc:117 +#: ../../../../inc/themes/classic/ldap.inc:145 +#: ../../../../inc/themes/classic/ldap.inc:166 +#: ../../../../inc/themes/classic/ldap.inc:187 +#: ../../../../inc/themes/classic/wiki.inc:12 +#: ../../../../inc/themes/classic/wiki.inc:28 +#: ../../../../inc/themes/classic/wiki.inc:55 +#: ../../../../inc/themes/classic/wiki.inc:82 +#: ../../../../inc/themes/material-blue/backup.inc:47 +#: ../../../../inc/themes/material-blue/backup.inc:51 +#: ../../../../inc/themes/material-blue/backup.inc:129 +#: ../../../../inc/themes/material-blue/backup.inc:133 +#: ../../../../inc/themes/material-blue/encryption.inc:107 +#: ../../../../inc/themes/material-blue/encryption.inc:111 +#: ../../../../inc/themes/material-blue/encryption.inc:171 +#: ../../../../inc/themes/material-blue/encryption.inc:175 +#: ../../../../inc/themes/material-blue/import.inc:99 +#: ../../../../inc/themes/material-blue/import.inc:103 +#: ../../../../inc/themes/material-blue/js-common.inc:11 +#, fuzzy +msgid "Ayuda" +msgstr "Help :: FAQ :: Changelog" + +#: ../../../../inc/themes/classic/backup.inc:50 +#: ../../../../inc/themes/material-blue/backup.inc:52 +msgid "La copia de seguridad permite guardar y descargar tanto la base de datos de sysPass como los archivos de la aplicación y su configuración." +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:52 +#: ../../../../inc/themes/material-blue/backup.inc:54 +msgid "Con este método es posible guardar todos los datos de sysPass en otro lugar o utilizarlos para hacer la aplicación portable." +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:60 +#: ../../../../inc/themes/classic/backup.inc:126 +#: ../../../../inc/themes/material-blue/backup.inc:64 +#, fuzzy +msgid "Exportar Cuentas" +msgstr "Учетные записи" + +#: ../../../../inc/themes/classic/backup.inc:84 +#: ../../../../inc/themes/material-blue/backup.inc:88 +#, fuzzy +msgid "No hay archivos XML para descargar" +msgstr "Нет резервных копий для скачивания" + +#: ../../../../inc/themes/classic/backup.inc:90 +#: ../../../../inc/themes/material-blue/backup.inc:94 +#: ../../../../inc/themes/material-blue/backup.inc:101 +#, fuzzy +msgid "Clave de Exportación" +msgstr "Восстановление пароля" + +#: ../../../../inc/themes/classic/backup.inc:98 +#: ../../../../inc/themes/material-blue/backup.inc:107 +#: ../../../../inc/themes/material-blue/backup.inc:114 +#, fuzzy +msgid "Clave de Exportación (repetir)" +msgstr "Подтверждение пароля" + +#: ../../../../inc/themes/classic/backup.inc:118 +#: ../../../../inc/themes/material-blue/backup.inc:134 +msgid "La exportación de cuentas permite guardar las cuentas y sus datos en formato XML para posteriormente poder ser importados en otras instancias de sysPass." +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:120 +#: ../../../../inc/themes/material-blue/backup.inc:136 +msgid "Los elementos exportados son cuentas, clientes y categorías." +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:122 +#: ../../../../inc/themes/material-blue/backup.inc:138 +msgid "Las claves de las cuentas son exportadas de forma encriptada para mayor seguridad." +msgstr "" + +#: ../../../../inc/themes/classic/backup.inc:124 +#: ../../../../inc/themes/material-blue/backup.inc:140 +msgid "Es posible establecer una clave de exportación para guardar todos los datos encriptados en el archivo XML." +msgstr "" + +#: ../../../../inc/themes/classic/body.inc:4 +#: ../../../../inc/themes/material-blue/body.inc:4 +msgid "Javascript es necesario para el correcto funcionamiento" +msgstr "Javascript необходим для корректной работы" + +#: ../../../../inc/themes/classic/categories.inc:10 +#: ../../../../inc/themes/material-blue/categories.inc:14 +msgid "Nombre de la categoría" +msgstr "Имя категории" + +#: ../../../../inc/themes/classic/categories.inc:18 +#: ../../../../inc/themes/material-blue/categories.inc:26 +msgid "Descripción de la categoría" +msgstr "Описание категории" + +#: ../../../../inc/themes/classic/config.inc:4 +#: ../../../../inc/themes/material-blue/config.inc:4 +msgid "Sitio" +msgstr "Сайт" + +#: ../../../../inc/themes/classic/config.inc:10 +#: ../../../../inc/themes/material-blue/config.inc:11 +msgid "Idioma" +msgstr "Язык" + +#: ../../../../inc/themes/classic/config.inc:21 +#: ../../../../inc/themes/material-blue/config.inc:22 +msgid "Tema Visual" +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:33 +#: ../../../../inc/themes/material-blue/config.inc:34 +#: ../../../../inc/themes/material-blue/config.inc:42 +msgid "Timeout de sesión (s)" +msgstr "Таймаут сессии (секунды)" + +#: ../../../../inc/themes/classic/config.inc:42 +#: ../../../../inc/themes/material-blue/config.inc:48 +msgid "Habilitar log de eventos" +msgstr "Включить журнал событий" + +#: ../../../../inc/themes/classic/config.inc:46 +#: ../../../../inc/themes/material-blue/config.inc:52 +#, fuzzy +msgid "Guarda las acciones realizadas en la aplicación." +msgstr "Ведет запись действий в программе." + +#: ../../../../inc/themes/classic/config.inc:58 +#: ../../../../inc/themes/material-blue/config.inc:66 +msgid "Habilitar depuración" +msgstr "Включить отладку" + +#: ../../../../inc/themes/classic/config.inc:62 +#: ../../../../inc/themes/material-blue/config.inc:70 +#, fuzzy +msgid "Muestra información relativa a la configuración de la aplicación y rendimiento." +msgstr "Показывает информацию о программе и производительности." + +#: ../../../../inc/themes/classic/config.inc:74 +#: ../../../../inc/themes/material-blue/config.inc:84 +msgid "Modo mantenimiento" +msgstr "Режим обслуживания" + +#: ../../../../inc/themes/classic/config.inc:78 +#: ../../../../inc/themes/material-blue/config.inc:88 +#, fuzzy +msgid "En este modo no se puede acceder a la aplicación. Para deshabilitarlo es necesario modificar el archivo de configuración." +msgstr "В данном режиме войти в программу невозможно. Для его отключения необходимо редактировать файл конфигурации." + +#: ../../../../inc/themes/classic/config.inc:90 +#: ../../../../inc/themes/material-blue/config.inc:102 +msgid "Comprobar actualizaciones" +msgstr "Проверка обновлений" + +#: ../../../../inc/themes/classic/config.inc:94 +#: ../../../../inc/themes/material-blue/config.inc:106 +#, fuzzy +msgid "Comprobar actualizaciones de la aplicación (sólo para los usuarios administradores)." +msgstr "Проверяет обновления программы (только для администраторов)." + +#: ../../../../inc/themes/classic/config.inc:106 +#: ../../../../inc/themes/material-blue/config.inc:120 +#, fuzzy +msgid "Comprobar notificaciones" +msgstr "Проверить" + +#: ../../../../inc/themes/classic/config.inc:110 +#: ../../../../inc/themes/material-blue/config.inc:124 +#, fuzzy +msgid "Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo para los usuarios administradores)." +msgstr "Проверяет обновления программы (только для администраторов)." + +#: ../../../../inc/themes/classic/config.inc:122 +#: ../../../../inc/themes/material-blue/config.inc:145 +msgid "Nombre de cuenta como enlace" +msgstr "Имя учетной записи как ссылка" + +#: ../../../../inc/themes/classic/config.inc:126 +#: ../../../../inc/themes/material-blue/config.inc:149 +#, fuzzy +msgid "Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles de la cuenta." +msgstr "Превращает имя учетной записи в ссылку на её детали на странице поиска" + +#: ../../../../inc/themes/classic/config.inc:138 +#: ../../../../inc/themes/material-blue/config.inc:232 +msgid "Gestión de archivos" +msgstr "Управление файлами" + +#: ../../../../inc/themes/classic/config.inc:142 +#: ../../../../inc/themes/material-blue/config.inc:236 +#, fuzzy +msgid "Habilita la subida/descarga de archivos para las cuentas." +msgstr "Включает загрузку/скачивание файлов учетной записи" + +#: ../../../../inc/themes/classic/config.inc:154 +#: ../../../../inc/themes/material-blue/config.inc:164 +msgid "Búsquedas globales" +msgstr "Глобальные поиски" + +#: ../../../../inc/themes/classic/config.inc:158 +#: ../../../../inc/themes/material-blue/config.inc:168 +msgid "Permite que todos los usuarios puedan realizar búsquedas en todas las cuentas, pero no pueden ver el contenido de las que no tienen permisos." +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:170 +#: ../../../../inc/themes/material-blue/config.inc:251 +msgid "Extensiones de archivos permitidas" +msgstr "Разрешенные расширения файлов" + +#: ../../../../inc/themes/classic/config.inc:174 +#: ../../../../inc/themes/material-blue/config.inc:255 +#, fuzzy +msgid "Extensiones permitidas para la subida de archivos." +msgstr "Включает загрузку/скачивание файлов учетной записи" + +#: ../../../../inc/themes/classic/config.inc:178 +#: ../../../../inc/themes/material-blue/config.inc:259 +#, fuzzy +msgid "Se permite un máximo de 4 caracteres." +msgstr "Максимальная длина расширения 4 символа." + +#: ../../../../inc/themes/classic/config.inc:182 +#: ../../../../inc/themes/material-blue/config.inc:263 +#, fuzzy +msgid "Escribir extensión y pulsar intro para añadir. Es necesario guardar la configuración." +msgstr "Введите расширение и нажмите Enter для добавления." + +#: ../../../../inc/themes/classic/config.inc:197 +#: ../../../../inc/themes/material-blue/config.inc:278 +#, fuzzy +msgid "Establece el tamaño máximo para subir archivos." +msgstr "Максимальный размер загружаемого файла." + +#: ../../../../inc/themes/classic/config.inc:201 +#: ../../../../inc/themes/material-blue/config.inc:282 +#, fuzzy +msgid "El máximo absuluto es de 16MB." +msgstr "Абсолютный максимум 16MB." + +#: ../../../../inc/themes/classic/config.inc:212 +#: ../../../../inc/themes/material-blue/config.inc:183 +msgid "Resultados por página" +msgstr "Результатов на страницу" + +#: ../../../../inc/themes/classic/config.inc:216 +#: ../../../../inc/themes/material-blue/config.inc:187 +#, fuzzy +msgid "Número de resultados por página a mostrar, al realizar una búsqueda." +msgstr "Число результатов поиска на страницу" + +#: ../../../../inc/themes/classic/config.inc:227 +msgid "Resultados en Tarjetas" +msgstr "Результаты в виде карточек" + +#: ../../../../inc/themes/classic/config.inc:231 +msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta." +msgstr "Включает показ учетных записей в результатах поиска в виде карточек." + +#: ../../../../inc/themes/classic/config.inc:243 +#: ../../../../inc/themes/material-blue/config.inc:203 +#, fuzzy +msgid "Imagen para mostrar clave" +msgstr "Показать пароль" + +#: ../../../../inc/themes/classic/config.inc:247 +#: ../../../../inc/themes/material-blue/config.inc:207 +#, fuzzy +msgid "Generar una imagen con el texto de la clave de la cuenta." +msgstr "Ошибка получения паролей для учетной записи" + +#: ../../../../inc/themes/classic/config.inc:250 +#: ../../../../inc/themes/material-blue/config.inc:210 +msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad." +msgstr "" + +#: ../../../../inc/themes/classic/config.inc:285 +#: ../../../../inc/themes/material-blue/config.inc:400 +msgid "Añadir extensión" +msgstr "Добавить расширение" + +#: ../../../../inc/themes/classic/config.inc:286 +#: ../../../../inc/themes/material-blue/config.inc:401 +msgid "Eliminar extensión" +msgstr "Удалить расширение" + +#: ../../../../inc/themes/classic/customers.inc:10 +#: ../../../../inc/themes/material-blue/customers.inc:14 +msgid "Nombre del cliente" +msgstr "Имя заказчика" + +#: ../../../../inc/themes/classic/customers.inc:18 +#: ../../../../inc/themes/material-blue/customers.inc:26 +msgid "Descripción del cliente" +msgstr "Описание заказчика" + +#: ../../../../inc/themes/classic/customfields.inc:38 +#: ../../../../inc/themes/material-blue/customfields.inc:41 +#, fuzzy +msgid "Texto Ayuda" +msgstr "Текст для поиска" + +#: ../../../../inc/themes/classic/customfields.inc:44 +#: ../../../../inc/themes/material-blue/customfields.inc:52 +msgid "Obligatorio" +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:8 +#: ../../../../inc/themes/classic/install.inc:46 +#: ../../../../inc/themes/classic/install.inc:50 +#: ../../../../inc/themes/classic/install.inc:51 +#: ../../../../inc/themes/classic/login.inc:15 +#: ../../../../inc/themes/classic/login.inc:27 +#: ../../../../inc/themes/material-blue/encryption.inc:8 +#: ../../../../inc/themes/material-blue/install.inc:49 +#: ../../../../inc/themes/material-blue/install.inc:56 +#: ../../../../inc/themes/material-blue/login.inc:24 +#: ../../../../inc/themes/material-blue/login.inc:46 +msgid "Clave Maestra" +msgstr "Мастер-пароль" + +#: ../../../../inc/themes/classic/encryption.inc:16 +#: ../../../../inc/themes/classic/encryption.inc:116 +#: ../../../../inc/themes/material-blue/encryption.inc:16 +#: ../../../../inc/themes/material-blue/encryption.inc:131 +msgid "Último cambio" +msgstr "Последнее изменение" + +#: ../../../../inc/themes/classic/encryption.inc:25 +#: ../../../../inc/themes/material-blue/encryption.inc:25 +#: ../../../../inc/themes/material-blue/encryption.inc:31 +msgid "Clave Maestra actual" +msgstr "Текущий мастер-пароль" + +#: ../../../../inc/themes/classic/encryption.inc:34 +#: ../../../../inc/themes/material-blue/encryption.inc:37 +#: ../../../../inc/themes/material-blue/encryption.inc:43 +msgid "Nueva Clave Maestra" +msgstr "Новый мастер-пароль" + +#: ../../../../inc/themes/classic/encryption.inc:43 +#: ../../../../inc/themes/material-blue/encryption.inc:49 +#: ../../../../inc/themes/material-blue/encryption.inc:55 +msgid "Nueva Clave Maestra (repetir)" +msgstr "Новый мастер-пароль (подтверждение)" + +#: ../../../../inc/themes/classic/encryption.inc:51 +#: ../../../../inc/themes/material-blue/encryption.inc:61 +msgid "No modificar cuentas" +msgstr "Не изменять учетные записи" + +#: ../../../../inc/themes/classic/encryption.inc:56 +#: ../../../../inc/themes/material-blue/encryption.inc:66 +msgid "Establece una nueva clave maestra sin re-encriptar las cuentas" +msgstr "Устанавливает мастер-пароль без повторного шифрования учетных записей." + +#: ../../../../inc/themes/classic/encryption.inc:67 +#: ../../../../inc/themes/material-blue/encryption.inc:79 +msgid "Confirmar cambio" +msgstr "Подтвердите изменение" + +#: ../../../../inc/themes/classic/encryption.inc:70 +#: ../../../../inc/themes/classic/encryption.inc:73 +#: ../../../../inc/themes/classic/encryption.inc:76 +#: ../../../../inc/themes/classic/import.inc:67 +#: ../../../../inc/themes/classic/security.inc:43 +msgid "Atención" +msgstr "Предупреждение" + +#: ../../../../inc/themes/classic/encryption.inc:71 +#: ../../../../inc/themes/material-blue/encryption.inc:83 +msgid "Guarde la nueva clave en un lugar seguro." +msgstr "Необходимо сохранить новый пароль в надежном месте" + +#: ../../../../inc/themes/classic/encryption.inc:74 +#: ../../../../inc/themes/material-blue/encryption.inc:86 +msgid "Se volverán a encriptar las claves de todas las cuentas." +msgstr "Все пароли учетных записей будут зашифрованы вновь." + +#: ../../../../inc/themes/classic/encryption.inc:77 +#: ../../../../inc/themes/material-blue/encryption.inc:89 +msgid "Los usuarios deberán de introducir la nueva clave maestra." +msgstr "Пользователям потребуется ввести новый мастер-пароль." + +#: ../../../../inc/themes/classic/encryption.inc:98 +#: ../../../../inc/themes/material-blue/encryption.inc:112 +msgid "La clave maestra es utilizada para encriptar las claves de las cuentas de sysPass para mantenerlas seguras." +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:100 +#: ../../../../inc/themes/material-blue/encryption.inc:114 +msgid "Es recomendable cambiarla cada cierto tiempo y utilizar una clave compleja que incluya números, letras y símbolos." +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:108 +#: ../../../../inc/themes/material-blue/encryption.inc:124 +#, fuzzy +msgid "Clave Temporal" +msgstr "Мастер-пароль" + +#: ../../../../inc/themes/classic/encryption.inc:119 +#: ../../../../inc/themes/classic/encryption.inc:130 +#: ../../../../inc/themes/material-blue/encryption.inc:134 +#: ../../../../inc/themes/material-blue/encryption.inc:145 +#, fuzzy +msgid "No generada" +msgstr "Сгенерированный пароль" + +#: ../../../../inc/themes/classic/encryption.inc:124 +#: ../../../../inc/themes/material-blue/encryption.inc:139 +msgid "Válido hasta" +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:136 +#: ../../../../inc/themes/material-blue/encryption.inc:151 +#: ../../../../inc/themes/material-blue/encryption.inc:157 +#, fuzzy +msgid "Validez (s)" +msgstr "Таймаут сессии (секунды)" + +#: ../../../../inc/themes/classic/encryption.inc:139 +msgid "Validez" +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:157 +#: ../../../../inc/themes/material-blue/encryption.inc:176 +msgid "La clave temporal es utilizada como clave maestra para los usuarios que necesitan introducirla al iniciar la sesión, así no es necesario facilitar la clave maestra original." +msgstr "" + +#: ../../../../inc/themes/classic/encryption.inc:159 +#: ../../../../inc/themes/material-blue/encryption.inc:180 +#, fuzzy +msgid "Generar" +msgstr "Сгенерировать пароль" + +#: ../../../../inc/themes/classic/eventlog.inc:8 +#: ../../../../inc/themes/classic/search.inc:5 +#: ../../../../inc/themes/material-blue/eventlog.inc:7 +#: ../../../../inc/themes/material-blue/search.inc:3 +msgid "No se encontraron registros" +msgstr "Записи не найдены" + +#: ../../../../inc/themes/classic/eventlog.inc:19 +#: ../../../../inc/themes/material-blue/eventlog.inc:18 +msgid "Fecha / Hora" +msgstr "Дата / Время" + +#: ../../../../inc/themes/classic/eventlog.inc:22 +#: ../../../../inc/themes/material-blue/eventlog.inc:21 +msgid "Evento" +msgstr "Событие" + +#: ../../../../inc/themes/classic/eventlog.inc:28 +#: ../../../../inc/themes/material-blue/eventlog.inc:27 +msgid "IP" +msgstr "IP" + +#: ../../../../inc/themes/classic/eventlog.inc:86 +#: ../../../../inc/themes/classic/search.inc:161 +#: ../../../../inc/themes/material-blue/eventlog.inc:85 +#: ../../../../inc/themes/material-blue/search.inc:173 +msgid "Primera página" +msgstr "Первая страница" + +#: ../../../../inc/themes/classic/eventlog.inc:88 +#: ../../../../inc/themes/classic/search.inc:163 +#: ../../../../inc/themes/material-blue/eventlog.inc:87 +#: ../../../../inc/themes/material-blue/search.inc:175 +msgid "Página anterior" +msgstr "Прошлая страница" + +#: ../../../../inc/themes/classic/eventlog.inc:93 +#: ../../../../inc/themes/classic/search.inc:168 +#: ../../../../inc/themes/material-blue/eventlog.inc:92 +#: ../../../../inc/themes/material-blue/search.inc:180 +msgid "Página siguiente" +msgstr "Следующая страница" + +#: ../../../../inc/themes/classic/eventlog.inc:95 +#: ../../../../inc/themes/classic/search.inc:170 +#: ../../../../inc/themes/material-blue/eventlog.inc:94 +#: ../../../../inc/themes/material-blue/search.inc:182 +msgid "Última página" +msgstr "Последняя страница" + +#: ../../../../inc/themes/classic/files.inc:22 +#: ../../../../inc/themes/material-blue/files.inc:21 +msgid "Ver Archivo" +msgstr "Показать файл" + +#: ../../../../inc/themes/classic/footer.inc:10 +#: ../../../../inc/themes/material-blue/footer.inc:18 +msgid "Ayuda :: FAQ :: Changelog" +msgstr "Help :: FAQ :: Changelog" + +#: ../../../../inc/themes/classic/footer.inc:13 +#: ../../../../inc/themes/material-blue/footer.inc:23 +msgid "Un proyecto de cygnux.org" +msgstr "Проект cygnux.org" + +#: ../../../../inc/themes/classic/groups.inc:10 +#: ../../../../inc/themes/material-blue/groups.inc:14 +msgid "Nombre del grupo" +msgstr "Имя группы" + +#: ../../../../inc/themes/classic/groups.inc:18 +#: ../../../../inc/themes/material-blue/groups.inc:26 +msgid "Descripción del grupo" +msgstr "Описание группы" + +#: ../../../../inc/themes/classic/import.inc:7 +#: ../../../../inc/themes/material-blue/import.inc:121 +msgid "Importar phpPMS" +msgstr "Импорт phpPMS" + +#: ../../../../inc/themes/classic/import.inc:14 +#: ../../../../inc/themes/classic/install.inc:63 +#: ../../../../inc/themes/classic/install.inc:64 +#: ../../../../inc/themes/material-blue/import.inc:128 +#: ../../../../inc/themes/material-blue/import.inc:140 +msgid "Usuario BBDD" +msgstr "Имя пользователя DB" + +#: ../../../../inc/themes/classic/import.inc:18 +#: ../../../../inc/themes/material-blue/import.inc:132 +#, fuzzy +msgid "Indicar el usuario de conexión a la base de datos de phpPMS." +msgstr "Введите пользователя для подключения к базе phpPMS" + +#: ../../../../inc/themes/classic/import.inc:28 +#: ../../../../inc/themes/classic/install.inc:71 +#: ../../../../inc/themes/classic/install.inc:73 +#: ../../../../inc/themes/material-blue/import.inc:146 +#: ../../../../inc/themes/material-blue/import.inc:152 +msgid "Clave BBDD" +msgstr "Пароль DB" + +#: ../../../../inc/themes/classic/import.inc:36 +#: ../../../../inc/themes/classic/install.inc:78 +#: ../../../../inc/themes/classic/install.inc:79 +#: ../../../../inc/themes/material-blue/import.inc:158 +#: ../../../../inc/themes/material-blue/import.inc:170 +msgid "Nombre BBDD" +msgstr "Имя DB" + +#: ../../../../inc/themes/classic/import.inc:40 +#: ../../../../inc/themes/material-blue/import.inc:162 +#, fuzzy +msgid "Indicar el nombre de la base de datos de phpPMS." +msgstr "Введите имя базы phpPMS" + +#: ../../../../inc/themes/classic/import.inc:50 +#: ../../../../inc/themes/classic/install.inc:87 +#: ../../../../inc/themes/classic/install.inc:88 +#: ../../../../inc/themes/material-blue/import.inc:176 +#: ../../../../inc/themes/material-blue/import.inc:188 +msgid "Servidor BBDD" +msgstr "Сервер DB" + +#: ../../../../inc/themes/classic/import.inc:54 +#: ../../../../inc/themes/material-blue/import.inc:180 +#, fuzzy +msgid "Indicar el servidor de la base de datos de phpPMS." +msgstr "Введите имя сервера с базой phpPMS" + +#: ../../../../inc/themes/classic/import.inc:64 +#: ../../../../inc/themes/material-blue/import.inc:194 +msgid "Confirmar" +msgstr "Подтвердить" + +#: ../../../../inc/themes/classic/import.inc:68 +#: ../../../../inc/themes/material-blue/import.inc:198 +msgid "Los datos actuales serán borrados (excepto el usuario actual)" +msgstr "Текущие данные будут удалены (кроме текущего пользователя)" + +#: ../../../../inc/themes/classic/import.inc:83 +msgid "Iniciar" +msgstr "Старт" + +#: ../../../../inc/themes/classic/import.inc:89 +#: ../../../../inc/themes/material-blue/import.inc:7 +msgid "Importar CSV/XML" +msgstr "Импорт CSV/XML" + +#: ../../../../inc/themes/classic/import.inc:96 +#: ../../../../inc/themes/material-blue/import.inc:14 +#, fuzzy +msgid "Usuario por Defecto" +msgstr "Задает профиль по умолчанию для новых пользователей из LDAP" + +#: ../../../../inc/themes/classic/import.inc:100 +#: ../../../../inc/themes/material-blue/import.inc:18 +#, fuzzy +msgid "Define el usuario por defecto para las cuentas importadas." +msgstr "Задает профиль по умолчанию для новых пользователей из LDAP" + +#: ../../../../inc/themes/classic/import.inc:117 +#: ../../../../inc/themes/classic/ldap.inc:144 +#: ../../../../inc/themes/material-blue/import.inc:36 +#: ../../../../inc/themes/material-blue/ldap.inc:170 +msgid "Grupo por Defecto" +msgstr "Группа по умолчанию" + +#: ../../../../inc/themes/classic/import.inc:121 +#: ../../../../inc/themes/material-blue/import.inc:40 +#, fuzzy +msgid "Define el grupo por defecto para las cuentas importadas." +msgstr "Задает группу по умолчанию для новых пользователей из LDAP" + +#: ../../../../inc/themes/classic/import.inc:138 +#: ../../../../inc/themes/material-blue/import.inc:58 +#: ../../../../inc/themes/material-blue/import.inc:64 +#, fuzzy +msgid "Clave de Importación" +msgstr "Подтвердите импорт учетной записи" + +#: ../../../../inc/themes/classic/import.inc:146 +#: ../../../../inc/themes/material-blue/import.inc:70 +#: ../../../../inc/themes/material-blue/import.inc:76 +#, fuzzy +msgid "Delimitador CSV" +msgstr "Импорт CSV/XML" + +#: ../../../../inc/themes/classic/import.inc:162 +#: ../../../../inc/themes/material-blue/import.inc:90 +msgid "Soltar archivo aquí o click para seleccionar" +msgstr "Перетащите файлы сюда или нажниме для выбора" + +#: ../../../../inc/themes/classic/import.inc:175 +msgid "Permite realizar la importación de Cuentas, Categorías y Clientes desde arhcivos XML y CSV." +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:177 +#: ../../../../inc/themes/material-blue/import.inc:106 +msgid "Los formatos de archivos XML soportados son: sysPass, KeePass y KeePassX" +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:179 +#: ../../../../inc/themes/material-blue/import.inc:108 +msgid "Arrastar el archivo a importar a la zona indicada o hacer click sobre la flecha." +msgstr "" + +#: ../../../../inc/themes/classic/import.inc:181 +#: ../../../../inc/themes/material-blue/import.inc:110 +#, fuzzy +msgid "Para archivos de KeePass o KeePassX, el nombre del cliente será igual a KeePass o KeePassX y la categoría igual al nombre de los grupos." +msgstr "Импорт из KeePass или KeePassX. Имя заказчика будет KeePass или KeePassX." + +#: ../../../../inc/themes/classic/import.inc:183 +#: ../../../../inc/themes/material-blue/import.inc:112 +#, fuzzy +msgid "La importación de archivos CSV se realiza con el siguiente formato:" +msgstr "Импорт из CSV в формате" + +#: ../../../../inc/themes/classic/import.inc:185 +#: ../../../../inc/themes/material-blue/import.inc:114 +msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas" +msgstr "account_name;customer;category;url;user;password;notes" + +#: ../../../../inc/themes/classic/import.inc:187 +#: ../../../../inc/themes/material-blue/import.inc:116 +#, fuzzy +msgid "En todos los casos, si el cliente o la categoría no están creados, se crean automáticamente." +msgstr "Если заказчика или категории нет, они будут автоматически созданы." + +#: ../../../../inc/themes/classic/info.inc:4 +#: ../../../../inc/themes/material-blue/info.inc:4 +#, fuzzy +msgid "Información de la Aplicación" +msgstr "Описание запроса" + +#: ../../../../inc/themes/classic/info.inc:10 +#: ../../../../inc/themes/material-blue/info.inc:10 +#, fuzzy +msgid "Versión sysPass" +msgstr "Версия" + +#: ../../../../inc/themes/classic/info.inc:18 +#: ../../../../inc/themes/material-blue/info.inc:18 +#, fuzzy +msgid "Base de Datos" +msgstr "Обновление базы данных не требуется." + +#: ../../../../inc/themes/classic/info.inc:30 +#: ../../../../inc/themes/material-blue/info.inc:30 +#, fuzzy +msgid "PHP" +msgstr "Необходим PHP версии >= 5.1" + +#: ../../../../inc/themes/classic/info.inc:35 +#: ../../../../inc/themes/material-blue/info.inc:35 +#, fuzzy +msgid "Extensiones" +msgstr "Нет доступных расширений файлов" + +#: ../../../../inc/themes/classic/info.inc:37 +#: ../../../../inc/themes/material-blue/info.inc:37 +msgid "Memoria Usada" +msgstr "" + +#: ../../../../inc/themes/classic/info.inc:44 +#: ../../../../inc/themes/classic/ldap.inc:32 +#: ../../../../inc/themes/classic/mail.inc:21 +#: ../../../../inc/themes/material-blue/config.inc:318 +#: ../../../../inc/themes/material-blue/info.inc:44 +#: ../../../../inc/themes/material-blue/ldap.inc:35 +#: ../../../../inc/themes/material-blue/ldap.inc:58 +#: ../../../../inc/themes/material-blue/ldap.inc:86 +#: ../../../../inc/themes/material-blue/mail.inc:24 +#: ../../../../inc/themes/material-blue/mail.inc:30 +msgid "Servidor" +msgstr "Сервер" + +#: ../../../../inc/themes/classic/install.inc:4 +#: ../../../../inc/themes/material-blue/install.inc:4 +msgid "Instalación " +msgstr "Установка" + +#: ../../../../inc/themes/classic/install.inc:25 +#: ../../../../inc/themes/material-blue/install.inc:25 +msgid "Crear cuenta de admin de sysPass" +msgstr "Создать аккаунт администратора sysPass" + +#: ../../../../inc/themes/classic/install.inc:32 +#: ../../../../inc/themes/material-blue/install.inc:36 +msgid "Login del usuario administrador de sysPass" +msgstr "Учетная запись администратора sysPass" + +#: ../../../../inc/themes/classic/install.inc:58 +#: ../../../../inc/themes/material-blue/install.inc:69 +msgid "Configurar BBDD" +msgstr "Конфигурация БД" + +#: ../../../../inc/themes/classic/install.inc:67 +msgid "Login de usuario con permisos de administrador de MySQL" +msgstr "Используйте учетную запись с правами администратора базы данных" + +#: ../../../../inc/themes/classic/install.inc:83 +#: ../../../../inc/themes/material-blue/install.inc:102 +msgid "Nombre de la base de datos para sysPass" +msgstr "Имя базы данных sysPass" + +#: ../../../../inc/themes/classic/install.inc:91 +msgid "Nombre del servidor de la base de datos de sysPass" +msgstr "Имя сервера базы данных sysPass" + +#: ../../../../inc/themes/classic/install.inc:97 +#: ../../../../inc/themes/material-blue/install.inc:120 +msgid "Modo Hosting" +msgstr "Режим хостинга" + +#: ../../../../inc/themes/classic/install.inc:104 +#: ../../../../inc/themes/material-blue/install.inc:127 +msgid "No crea ni verifica los permisos del usuario sobre la BBDD" +msgstr "Права доступа к БД не создаются и не проеряются" + +#: ../../../../inc/themes/classic/install.inc:108 +#: ../../../../inc/themes/material-blue/install.inc:134 +#: ../../../../inc/themes/material-blue/install.inc:135 +msgid "Instalar" +msgstr "Установка" + +#: ../../../../inc/themes/classic/ldap.inc:12 +#: ../../../../inc/themes/material-blue/ldap.inc:12 +msgid "Habilitar LDAP" +msgstr "Включить LDAP" + +#: ../../../../inc/themes/classic/ldap.inc:16 +#: ../../../../inc/themes/material-blue/ldap.inc:16 +#, fuzzy +msgid "Habilita de autentificación mediante servidor LDAP." +msgstr "Включает аутентификацию по LDAP" + +#: ../../../../inc/themes/classic/ldap.inc:20 +#: ../../../../inc/themes/material-blue/ldap.inc:20 +#, fuzzy +msgid "Este método utilizará MySQL en caso de fallo." +msgstr "Этот метод будет переключаться на MySQL при сбоях" + +#: ../../../../inc/themes/classic/ldap.inc:36 +#: ../../../../inc/themes/material-blue/ldap.inc:39 +#, fuzzy +msgid "Nombre o dirección IP del servidor de LDAP." +msgstr "Адрес сервера LDAP" + +#: ../../../../inc/themes/classic/ldap.inc:40 +#: ../../../../inc/themes/classic/ldap.inc:65 +#: ../../../../inc/themes/classic/ldap.inc:100 +#: ../../../../inc/themes/classic/ldap.inc:128 +#: ../../../../inc/themes/classic/wiki.inc:89 +#: ../../../../inc/themes/material-blue/ldap.inc:43 +#: ../../../../inc/themes/material-blue/ldap.inc:72 +#: ../../../../inc/themes/material-blue/ldap.inc:119 +#: ../../../../inc/themes/material-blue/ldap.inc:151 +#: ../../../../inc/themes/material-blue/wiki.inc:101 +#, fuzzy +msgid "Ejemplos:" +msgstr "Примеры" + +#: ../../../../inc/themes/classic/ldap.inc:57 +#: ../../../../inc/themes/material-blue/ldap.inc:64 +msgid "Usuario de conexión" +msgstr "Пользователь для подключения" + +#: ../../../../inc/themes/classic/ldap.inc:61 +#: ../../../../inc/themes/material-blue/ldap.inc:68 +#, fuzzy +msgid "Usuario para conectar con el servicio de LDAP." +msgstr "Пользователь для подключения к серверу LDAP" + +#: ../../../../inc/themes/classic/ldap.inc:81 +#: ../../../../inc/themes/material-blue/ldap.inc:92 +msgid "Clave de conexión" +msgstr "Пароль для подключения" + +#: ../../../../inc/themes/classic/ldap.inc:92 +#: ../../../../inc/themes/material-blue/ldap.inc:111 +#: ../../../../inc/themes/material-blue/ldap.inc:133 +msgid "Base de búsqueda" +msgstr "Начинать поиск с" + +#: ../../../../inc/themes/classic/ldap.inc:96 +#: ../../../../inc/themes/material-blue/ldap.inc:115 +#, fuzzy +msgid "Base en la que realizar la búsqueda de usuarios de LDAP." +msgstr "Откуда начинать поиск в LDAP." + +#: ../../../../inc/themes/classic/ldap.inc:120 +#: ../../../../inc/themes/material-blue/ldap.inc:143 +#, fuzzy +msgid "Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso." +msgstr "Пользователи из LDAP должны состоять в указанной группе для получения доступа" + +#: ../../../../inc/themes/classic/ldap.inc:124 +#: ../../../../inc/themes/material-blue/ldap.inc:147 +msgid "Este grupo debe de estar ubicado en la base de búsquedas de LDAP." +msgstr "" + +#: ../../../../inc/themes/classic/ldap.inc:148 +#: ../../../../inc/themes/material-blue/ldap.inc:174 +msgid "Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP." +msgstr "Задает группу по умолчанию для новых пользователей из LDAP" + +#: ../../../../inc/themes/classic/ldap.inc:165 +#: ../../../../inc/themes/material-blue/ldap.inc:190 +msgid "Perfil por Defecto" +msgstr "Профиль по умолчанию" + +#: ../../../../inc/themes/classic/ldap.inc:169 +#: ../../../../inc/themes/material-blue/ldap.inc:194 +#, fuzzy +msgid "Define el perfil de usuarios por defecto para los nuevos usuarios de LDAP." +msgstr "Задает профиль по умолчанию для новых пользователей из LDAP" + +#: ../../../../inc/themes/classic/ldap.inc:186 +#: ../../../../inc/themes/material-blue/ldap.inc:210 +msgid "Active Directory" +msgstr "Active Directory" + +#: ../../../../inc/themes/classic/ldap.inc:190 +#: ../../../../inc/themes/material-blue/ldap.inc:214 +msgid "Habilita el modo de conexión con LDAP de Active Directory." +msgstr "Включает режим подключения Active Directory к серверу LDAP." + +#: ../../../../inc/themes/classic/ldap.inc:202 +#: ../../../../inc/themes/material-blue/ldap.inc:228 +msgid "Comprobar" +msgstr "Проверить" + +#: ../../../../inc/themes/classic/ldap.inc:206 +#: ../../../../inc/themes/material-blue/ldap.inc:232 +msgid "Comprobar conexión con LDAP" +msgstr "Проверить подключение к LDAP" + +#: ../../../../inc/themes/classic/login.inc:46 +#: ../../../../inc/themes/material-blue/login.inc:69 +msgid "¿Olvidó su clave?" +msgstr "Забыли пароль?" + +#: ../../../../inc/themes/classic/login.inc:59 +#: ../../../../inc/themes/material-blue/login.inc:82 +msgid "Aplicación actualizada correctamente" +msgstr "Программа успешно обновлена" + +#: ../../../../inc/themes/classic/login.inc:64 +#: ../../../../inc/themes/classic/login.inc:65 +#: ../../../../inc/themes/material-blue/login.inc:87 +#: ../../../../inc/themes/material-blue/login.inc:88 +#: ../../../../inc/themes/material-blue/login.inc:90 +msgid "Nuevas Características" +msgstr "Новые возможности" + +#: ../../../../inc/themes/classic/mail.inc:11 +#: ../../../../inc/themes/material-blue/mail.inc:11 +msgid "Habilitar notificaciones de correo" +msgstr "Включить уведомления по email" + +#: ../../../../inc/themes/classic/mail.inc:29 +#: ../../../../inc/themes/material-blue/config.inc:332 +#: ../../../../inc/themes/material-blue/mail.inc:36 +#: ../../../../inc/themes/material-blue/mail.inc:43 +msgid "Puerto" +msgstr "Порт" + +#: ../../../../inc/themes/classic/mail.inc:37 +#: ../../../../inc/themes/material-blue/mail.inc:49 +msgid "Habilitar Autentificación" +msgstr "Включить аутентификацию" + +#: ../../../../inc/themes/classic/mail.inc:68 +#: ../../../../inc/themes/material-blue/mail.inc:91 +msgid "Deshabilitada" +msgstr "Отключена" + +#: ../../../../inc/themes/classic/mail.inc:77 +#: ../../../../inc/themes/material-blue/mail.inc:100 +#: ../../../../inc/themes/material-blue/mail.inc:107 +msgid "Dirección de correo de envío" +msgstr "Email получателя" + +#: ../../../../inc/themes/classic/mail.inc:85 +#: ../../../../inc/themes/material-blue/mail.inc:113 +msgid "Habilitar peticiones por correo" +msgstr "Включить запросы по email" + +#: ../../../../inc/themes/classic/mgmttabs.inc:66 +#: ../../../../inc/themes/classic/search.inc:112 +#: ../../../../inc/themes/material-blue/search.inc:125 +msgid "Más Acciones" +msgstr "Другие действия" + +#: ../../../../inc/themes/classic/passreset.inc:13 +#: ../../../../inc/themes/material-blue/passreset.inc:10 +msgid "Solicitud de Cambio de Clave" +msgstr "Запросить смену пароля" + +#: ../../../../inc/themes/classic/passreset.inc:16 +msgid "Login del Usuario" +msgstr "Логин" + +#: ../../../../inc/themes/classic/passreset.inc:21 +#: ../../../../inc/themes/material-blue/passreset.inc:24 +msgid "Email del Usuario" +msgstr "Email" + +#: ../../../../inc/themes/classic/passreset.inc:22 +#: ../../../../inc/themes/classic/users.inc:61 +#: ../../../../inc/themes/material-blue/users.inc:71 +msgid "Email" +msgstr "Email" + +#: ../../../../inc/themes/classic/passreset.inc:27 +msgid "Nueva Clave" +msgstr "Новый пароль" + +#: ../../../../inc/themes/classic/passreset.inc:34 +msgid "Nueva Clave (Verificar)" +msgstr "Новый пароль (подтверждение)" + +#: ../../../../inc/themes/classic/passreset.inc:35 +msgid "Clave (Verificar)" +msgstr "Пароль (подтверждение)" + +#: ../../../../inc/themes/classic/passreset.inc:46 +#: ../../../../inc/themes/material-blue/passreset.inc:42 +msgid "Volver a iniciar sesión" +msgstr "Назад ко входу" + +#: ../../../../inc/themes/classic/passreset.inc:48 +#: ../../../../inc/themes/material-blue/2fa.inc:27 +#: ../../../../inc/themes/material-blue/passreset.inc:48 +#: ../../../../inc/themes/material-blue/passreset.inc:49 +msgid "Solicitar" +msgstr "Запрос" + +#: ../../../../inc/themes/classic/passreset.inc:49 +msgid "Solicitar cambio de clave" +msgstr "Запрос на изменение пароля" + +#: ../../../../inc/themes/classic/passreset.inc:51 +#: ../../../../inc/themes/material-blue/passreset.inc:53 +#: ../../../../inc/themes/material-blue/passreset.inc:54 +msgid "Cambiar" +msgstr "Изменение" + +#: ../../../../inc/themes/classic/passreset.inc:52 +msgid "Cambiar Clave" +msgstr "Изменение пароля" + +#: ../../../../inc/themes/classic/profiles.inc:11 +#: ../../../../inc/themes/material-blue/profiles.inc:14 +msgid "Nombre del perfil" +msgstr "Имя профиля" + +#: ../../../../inc/themes/classic/profiles.inc:19 +#: ../../../../inc/themes/material-blue/profiles.inc:30 +msgid "Ver detalles de cuenta" +msgstr "Просмотр деталей учетной записи" + +#: ../../../../inc/themes/classic/profiles.inc:19 +#: ../../../../inc/themes/material-blue/profiles.inc:30 +msgid "Ver" +msgstr "Показать" + +#: ../../../../inc/themes/classic/profiles.inc:23 +#: ../../../../inc/themes/material-blue/profiles.inc:35 +msgid "Ver clave de cuenta" +msgstr "Показать пароль учетной записи" + +#: ../../../../inc/themes/classic/profiles.inc:28 +#: ../../../../inc/themes/material-blue/profiles.inc:40 +msgid "Ver historial de cuenta" +msgstr "Показать историю учетной записи" + +#: ../../../../inc/themes/classic/profiles.inc:32 +#: ../../../../inc/themes/material-blue/profiles.inc:45 +msgid "Editar cuenta" +msgstr "Изменить учетную запись" + +#: ../../../../inc/themes/classic/profiles.inc:32 +#: ../../../../inc/themes/material-blue/profiles.inc:45 +msgid "Editar" +msgstr "Изменить" + +#: ../../../../inc/themes/classic/profiles.inc:37 +#: ../../../../inc/themes/material-blue/profiles.inc:50 +msgid "Editar clave de cuenta" +msgstr "Изменить пароль учетной записи" + +#: ../../../../inc/themes/classic/profiles.inc:37 +#: ../../../../inc/themes/material-blue/profiles.inc:50 +msgid "Editar Clave" +msgstr "Изменить пароль" + +#: ../../../../inc/themes/classic/profiles.inc:41 +msgid "Añadir nueva cuenta" +msgstr "Добавить новую учетную запись" + +#: ../../../../inc/themes/classic/profiles.inc:41 +msgid "Añadir" +msgstr "Добавить" + +#: ../../../../inc/themes/classic/profiles.inc:46 +msgid "Borrar cuenta" +msgstr "Удалить учетную запись" + +#: ../../../../inc/themes/classic/profiles.inc:46 +msgid "Borrar" +msgstr "Удалить" + +#: ../../../../inc/themes/classic/profiles.inc:50 +msgid "Ver archivos de cuenta" +msgstr "Просмотр файлов учетной записи" + +#: ../../../../inc/themes/classic/profiles.inc:61 +#: ../../../../inc/themes/material-blue/profiles.inc:72 +msgid "Configuración general" +msgstr "Основная конфигурация" + +#: ../../../../inc/themes/classic/profiles.inc:65 +msgid "Cambiar clave maestra" +msgstr "Изменить мастер-пароль" + +#: ../../../../inc/themes/classic/profiles.inc:70 +msgid "Realizar copia de seguridad" +msgstr "Выполнить резервное копирование" + +#: ../../../../inc/themes/classic/profiles.inc:70 +#: ../../../../inc/themes/material-blue/profiles.inc:82 +msgid "Backup" +msgstr "Резервное копирование" + +#: ../../../../inc/themes/classic/profiles.inc:74 +#: ../../../../inc/themes/material-blue/profiles.inc:87 +#, fuzzy +msgid "Realizar importación de cuentas" +msgstr "Подтвердите импорт учетной записи" + +#: ../../../../inc/themes/classic/profiles.inc:81 +#: ../../../../inc/themes/material-blue/profiles.inc:93 +msgid "Gestión" +msgstr "Управление" + +#: ../../../../inc/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 +#, fuzzy +msgid "Gestión de campos personalizados" +msgstr "Количество полей неправильно" + +#: ../../../../inc/themes/classic/profiles.inc:112 +#: ../../../../inc/themes/material-blue/profiles.inc:129 +#, fuzzy +msgid "Gestión de autorizaciones API" +msgstr "Управление файлами отключено" + +#: ../../../../inc/themes/classic/profiles.inc:112 +#: ../../../../inc/themes/material-blue/profiles.inc:129 +msgid "Autorizaciones API" +msgstr "" + +#: ../../../../inc/themes/classic/profiles.inc:120 +#: ../../../../inc/themes/material-blue/profiles.inc:135 +msgid "Otros" +msgstr "Другие" + +#: ../../../../inc/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 +#, fuzzy +msgid "Usado por" +msgstr "выполнено" + +#: ../../../../inc/themes/classic/profiles.inc:139 +#: ../../../../inc/themes/material-blue/profiles.inc:155 +msgid "No usado" +msgstr "" + +#: ../../../../inc/themes/classic/request.inc:1 +#: ../../../../inc/themes/material-blue/request.inc:1 +msgid "Solicitar Modificación de Cuenta" +msgstr "Запрос изменения учетной записи" + +#: ../../../../inc/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:439 +#: ../../../../inc/themes/material-blue/editpass.inc:55 +#: ../../../../inc/themes/material-blue/request.inc:42 +msgid "Atrás" +msgstr "Назад" + +#: ../../../../inc/themes/classic/request.inc:38 +#: ../../../../inc/themes/material-blue/request.inc:48 +msgid "Enviar" +msgstr "Отправить" + +#: ../../../../inc/themes/classic/search.inc:26 +#: ../../../../inc/themes/material-blue/search.inc:29 +msgid "Buscar en Wiki" +msgstr "Поиск в Wiki" + +#: ../../../../inc/themes/classic/search.inc:62 +#: ../../../../inc/themes/material-blue/search.inc:65 +msgid "Abrir enlace a" +msgstr "Открыть ссылку" + +#: ../../../../inc/themes/classic/search.inc:80 +#: ../../../../inc/themes/material-blue/search.inc:89 +msgid "Archivos adjuntos" +msgstr "Вложения" + +#: ../../../../inc/themes/classic/search.inc:87 +#: ../../../../inc/themes/material-blue/search.inc:98 +msgid "Enlace a Wiki" +msgstr "Ссылка на Wiki" + +#: ../../../../inc/themes/classic/search.inc:151 +#: ../../../../inc/themes/material-blue/search.inc:163 +msgid "Filtro ON" +msgstr "Включен фильтр" + +#: ../../../../inc/themes/classic/search.inc:155 +#: ../../../../inc/themes/material-blue/search.inc:167 +msgid "Global ON" +msgstr "Глобальный" + +#: ../../../../inc/themes/classic/searchbox.inc:5 +#: ../../../../inc/themes/material-blue/searchbox.inc:5 +msgid "Limpiar" +msgstr "Очистить" + +#: ../../../../inc/themes/classic/searchbox.inc:6 +#: ../../../../inc/themes/material-blue/searchbox.inc:10 +msgid "Texto a buscar" +msgstr "Текст для поиска" + +#: ../../../../inc/themes/classic/searchbox.inc:10 +#: ../../../../inc/themes/material-blue/searchbox.inc:15 +#, fuzzy +msgid "Parámetros especiales:" +msgstr "Ошибочные параметры" + +#: ../../../../inc/themes/classic/searchbox.inc:13 +#: ../../../../inc/themes/material-blue/searchbox.inc:18 +msgid "Buscar cuentas a las que 'login' tenga acceso" +msgstr "" + +#: ../../../../inc/themes/classic/searchbox.inc:14 +#: ../../../../inc/themes/material-blue/searchbox.inc:19 +msgid "Buscar cuentas a las que 'group_name' tenga acceso" +msgstr "" + +#: ../../../../inc/themes/classic/searchbox.inc:18 +#: ../../../../inc/themes/material-blue/searchbox.inc:25 +#: ../../../../inc/themes/material-blue/searchbox.inc:28 +msgid "Búsqueda global" +msgstr "Глобальный поиск" + +#: ../../../../inc/themes/classic/searchbox.inc:41 +#: ../../../../inc/themes/material-blue/searchbox.inc:54 +msgid "CPP" +msgstr "APP" + +#: ../../../../inc/themes/classic/searchbox.inc:41 +#: ../../../../inc/themes/material-blue/searchbox.inc:54 +msgid "Cuentas por página" +msgstr "Учетных записей на страницу" + +#: ../../../../inc/themes/classic/security.inc:4 +#, fuzzy +msgid "Autenticación" +msgstr "Предупреждение" + +#: ../../../../inc/themes/classic/security.inc:13 +#, fuzzy +msgid "Autenticación en 2 pasos" +msgstr "Активация учетной записи" + +#: ../../../../inc/themes/classic/security.inc:17 +#: ../../../../inc/themes/material-blue/security.inc: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/security.inc:21 +#: ../../../../inc/themes/material-blue/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/security.inc:29 +#: ../../../../inc/themes/material-blue/security.inc:29 +msgid "Activar" +msgstr "" + +#: ../../../../inc/themes/classic/security.inc:34 +#: ../../../../inc/themes/material-blue/security.inc:35 +#, fuzzy +msgid "Error al obtener el código QR. Inténtelo de nuevo" +msgstr "Ошибка при получении истории учетных записей" + +#: ../../../../inc/themes/classic/security.inc:39 +#: ../../../../inc/themes/material-blue/security.inc:43 +#, fuzzy +msgid "Código" +msgstr "Введите код безопасности" + +#: ../../../../inc/themes/classic/security.inc:44 +#: ../../../../inc/themes/material-blue/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/sessionbar.inc:6 +#: ../../../../inc/themes/material-blue/footer.inc:7 +msgid "Cambiar clave de usuario" +msgstr "Изменение пароля" + +#: ../../../../inc/themes/classic/sessionbar.inc:9 +msgid "Preferencias" +msgstr "" + +#: ../../../../inc/themes/classic/sessionbar.inc:15 +#: ../../../../inc/themes/material-blue/footer.inc:5 +msgid "Salir" +msgstr "Выйти" + +#: ../../../../inc/themes/classic/tokens.inc:34 +#: ../../../../inc/themes/classic/users.inc:98 +#: ../../../../inc/themes/material-blue/tokens.inc:34 +#: ../../../../inc/themes/material-blue/users.inc:132 +msgid "Opciones" +msgstr "Опции" + +#: ../../../../inc/themes/classic/tokens.inc:38 +#: ../../../../inc/themes/material-blue/tokens.inc:37 +#: ../../../../inc/themes/material-blue/tokens.inc:40 +#, fuzzy +msgid "Regenerar Autorización" +msgstr "Начать обновление" + +#: ../../../../inc/themes/classic/tokens.inc:43 +#: ../../../../inc/themes/material-blue/tokens.inc:46 +msgid "Token" +msgstr "" + +#: ../../../../inc/themes/classic/update.inc:18 +#: ../../../../inc/themes/material-blue/update.inc:20 +msgid "Actualizado" +msgstr "Обновлено" + +#: ../../../../inc/themes/classic/update.inc:23 +#: ../../../../inc/themes/material-blue/update.inc:22 +#, fuzzy +msgid "Error al comprobar actualizaciones" +msgstr "Проверка обновлений" + +#: ../../../../inc/themes/classic/upgrade.inc:8 +#: ../../../../inc/themes/material-blue/upgrade.inc:8 +msgid "Actualización de BBDD" +msgstr "Обновление БД" + +#: ../../../../inc/themes/classic/upgrade.inc:10 +msgid "Introducir Código de Seguridad" +msgstr "Введите код безопасности" + +#: ../../../../inc/themes/classic/upgrade.inc:11 +#: ../../../../inc/themes/material-blue/upgrade.inc:14 +msgid "Código de Seguridad" +msgstr "Код безопасности" + +#: ../../../../inc/themes/classic/upgrade.inc:21 +#: ../../../../inc/themes/material-blue/upgrade.inc:26 +msgid "Iniciar Actualización" +msgstr "Начать обновление" + +#: ../../../../inc/themes/classic/users.inc:12 +#: ../../../../inc/themes/material-blue/users.inc:15 +msgid "Nombre de usuario completo" +msgstr "Полное имя пользователя" + +#: ../../../../inc/themes/classic/users.inc:25 +#: ../../../../inc/themes/material-blue/users.inc:31 +msgid "Login de inicio de sesión" +msgstr "Session login" + +#: ../../../../inc/themes/classic/users.inc:64 +#: ../../../../inc/themes/material-blue/users.inc:78 +msgid "Dirección de correo" +msgstr "Адрес email" + +#: ../../../../inc/themes/classic/users.inc:103 +#: ../../../../inc/themes/material-blue/users.inc:136 +msgid "Administrador de la aplicación" +msgstr "Администратор программы" + +#: ../../../../inc/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 +#, fuzzy +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 +#, fuzzy +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 +#, fuzzy +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 +#, fuzzy +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 +#, fuzzy +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 +#, fuzzy +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 +#, fuzzy +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 +#, fuzzy +msgid "Histórico" +msgstr "Импорт истории учетных записей" + +#: ../../../../inc/themes/material-blue/account.inc:42 +msgid "Seleccionar o escribir para crear uno nuevo" +msgstr "" + +#: ../../../../inc/themes/material-blue/account.inc:110 +#, fuzzy +msgid "Clave (Repetir)" +msgstr "Подтверждение пароля" + +#: ../../../../inc/themes/material-blue/backup.inc:58 +#: ../../../../inc/themes/material-blue/backup.inc:144 +#: ../../../../inc/themes/material-blue/encryption.inc:118 +#: ../../../../inc/themes/material-blue/import.inc:217 +#, fuzzy +msgid "Realizar" +msgstr "Выполнить резервное копирование" + +#: ../../../../inc/themes/material-blue/config.inc:197 +#, fuzzy +msgid "Número de resultados por página" +msgstr "Число результатов поиска на страницу" + +#: ../../../../inc/themes/material-blue/config.inc:292 +#, fuzzy +msgid "Tamaño máximo de archivo en bytes" +msgstr "Максимальный размер файла" + +#: ../../../../inc/themes/material-blue/config.inc:299 +msgid "Proxy" +msgstr "" + +#: ../../../../inc/themes/material-blue/config.inc:305 +msgid "Usar Proxy" +msgstr "" + +#: ../../../../inc/themes/material-blue/config.inc:326 +#, fuzzy +msgid "Servidor proxy" +msgstr "Сервер" + +#: ../../../../inc/themes/material-blue/config.inc:340 +msgid "Puerto del servidor proxy" +msgstr "" + +#: ../../../../inc/themes/material-blue/config.inc:354 +#, fuzzy +msgid "Usuario del servidor proxy" +msgstr "Пользователь доступа" + +#: ../../../../inc/themes/material-blue/config.inc:368 +msgid "Clave del servidor proxy" +msgstr "" + +#: ../../../../inc/themes/material-blue/customfields.inc:14 +#, fuzzy +msgid "Nombre del campo" +msgstr "Имя заказчика" + +#: ../../../../inc/themes/material-blue/customfields.inc:47 +#, fuzzy +msgid "Ayuda del campo" +msgstr "Help :: FAQ :: Changelog" + +#: ../../../../inc/themes/material-blue/footer.inc:11 +#, fuzzy +msgid "Preferencias de usuario" +msgstr "Указанный логин уже существует" + +#: ../../../../inc/themes/material-blue/import.inc:104 +msgid "Permite realizar la importación de Cuentas, Categorías y Clientes desde archivos XML y CSV." +msgstr "" + +#: ../../../../inc/themes/material-blue/install.inc:31 +#, fuzzy +msgid "Usuario administrador de sysPass" +msgstr "Учетная запись администратора sysPass" + +#: ../../../../inc/themes/material-blue/install.inc:78 +#, fuzzy +msgid "Usuario acceso BBDD" +msgstr "Пользователь доступа" + +#: ../../../../inc/themes/material-blue/install.inc:83 +#, fuzzy +msgid "Usuario con permisos de administrador de MySQL" +msgstr "Используйте учетную запись с правами администратора базы данных" + +#: ../../../../inc/themes/material-blue/install.inc:90 +#, fuzzy +msgid "Clave acceso BBDD" +msgstr "Пароль DB" + +#: ../../../../inc/themes/material-blue/install.inc:97 +#, fuzzy +msgid "Nombre BBDD para sysPass" +msgstr "Имя базы данных sysPass" + +#: ../../../../inc/themes/material-blue/install.inc:109 +#, fuzzy +msgid "Servidor BBDD para sysPass" +msgstr "Сервер DB" + +#: ../../../../inc/themes/material-blue/install.inc:114 +#, fuzzy +msgid "Nombre del servidor para instalar la base de datos de sysPass" +msgstr "Имя сервера базы данных sysPass" + +#: ../../../../inc/themes/material-blue/ldap.inc:96 +#, fuzzy +msgid "Clave del usuario de conexión a LDAP." +msgstr "Пароль пользователя для подключения к LDAP" + +#: ../../../../inc/themes/material-blue/mail.inc:118 +msgid "Habilita que los usuarios puedan solicitar modificaciones o acceso a las cuentas sin permisos." +msgstr "" + +#: ../../../../inc/themes/material-blue/profiles.inc:25 +#, fuzzy +msgid "Crear nueva cuenta" +msgstr "Новая учетная запись" + +#: ../../../../inc/themes/material-blue/profiles.inc:25 +#, fuzzy +msgid "Crear" +msgstr "Ошибка создания пользователей" + +#: ../../../../inc/themes/material-blue/profiles.inc:55 +#, fuzzy +msgid "Eliminar cuenta" +msgstr "Удалить учетную запись" + +#: ../../../../inc/themes/material-blue/profiles.inc:55 +#, fuzzy +msgid "Eliminar" +msgstr "Удалить учетную запись" + +#: ../../../../inc/themes/material-blue/profiles.inc:60 +#, fuzzy +msgid "Var archivos de cuenta" +msgstr "Просмотр файлов учетной записи" + +#: ../../../../inc/themes/material-blue/profiles.inc:77 +#, fuzzy +msgid "Opciones de encriptación" +msgstr "Опции" + +#: ../../../../inc/themes/material-blue/profiles.inc:82 +#, fuzzy +msgid "Realizar copia de seguridad y exportar" +msgstr "Выполнить резервное копирование" + +#: ../../../../inc/themes/material-blue/searchbox.inc:20 +msgid "Buscar cuentas con archivos con el nombre 'file_name'" +msgstr "" + +#: ../../../../inc/themes/material-blue/security.inc:4 +#, fuzzy +msgid "Autentificación" +msgstr "Включить аутентификацию" diff --git a/inc/themes/classic/footer.inc b/inc/themes/classic/footer.inc index 6070d153..4059d661 100644 --- a/inc/themes/classic/footer.inc +++ b/inc/themes/classic/footer.inc @@ -1,7 +1,10 @@