diff --git a/inc/SP/Account/Account.class.php b/inc/SP/Account/Account.class.php
index 3baaa41c..511a6c74 100644
--- a/inc/SP/Account/Account.class.php
+++ b/inc/SP/Account/Account.class.php
@@ -612,12 +612,10 @@ class Account extends AccountBase implements AccountInterface
$query = /** @lang SQL */
'SELECT account_id, account_name, account_pass, account_IV FROM accounts';
- DB::setReturnArray();
-
$Data = new QueryData();
$Data->setQuery($query);
- return DB::getResults($Data);
+ return DB::getResultsArray($Data);
}
/**
diff --git a/inc/SP/Account/AccountFavorites.class.php b/inc/SP/Account/AccountFavorites.class.php
index d2155bc9..f01f06e1 100644
--- a/inc/SP/Account/AccountFavorites.class.php
+++ b/inc/SP/Account/AccountFavorites.class.php
@@ -50,15 +50,9 @@ class AccountFavorites
$Data->setQuery($query);
$Data->addParam($userId, 'userId');
- DB::setReturnArray();
+ $queryRes = DB::getResultsArray($Data);
- $queryRes = DB::getResults($Data);
-
- if ($queryRes === false){
- return array();
- }
-
- $favorites = array();
+ $favorites = [];
foreach($queryRes as $favorite){
$favorites[] = $favorite->accfavorite_accountId;
diff --git a/inc/SP/Account/AccountHistory.class.php b/inc/SP/Account/AccountHistory.class.php
index a4689e5a..3a0afe23 100644
--- a/inc/SP/Account/AccountHistory.class.php
+++ b/inc/SP/Account/AccountHistory.class.php
@@ -70,15 +70,9 @@ class AccountHistory extends AccountBase implements AccountInterface
$Data->setQuery($query);
$Data->addParam($accountId, 'id');
- DB::setReturnArray();
+ $queryRes = DB::getResultsArray($Data);
- $queryRes = DB::getResults($Data);
-
- if ($queryRes === false) {
- return false;
- }
-
- $arrHistory = array();
+ $arrHistory = [];
foreach ($queryRes as $history) {
// Comprobamos si la entrada en el historial es la primera (no tiene editor ni fecha de edición)
@@ -234,9 +228,7 @@ class AccountHistory extends AccountBase implements AccountInterface
$Data = new QueryData();
$Data->setQuery($query);
- DB::setReturnArray();
-
- return DB::getResults($Data);
+ return DB::getResultsArray($Data);
}
/**
diff --git a/inc/SP/Account/AccountSearch.class.php b/inc/SP/Account/AccountSearch.class.php
index 9e99919c..f37d36af 100644
--- a/inc/SP/Account/AccountSearch.class.php
+++ b/inc/SP/Account/AccountSearch.class.php
@@ -454,18 +454,11 @@ class AccountSearch
// Obtener el número total de cuentas visibles por el usuario
DB::setFullRowCount();
- // Obtener los resultados siempre en array de objetos
- DB::setReturnArray();
-
// Log::writeNewLog(__FUNCTION__, $Data->getQuery(), Log::DEBUG);
// Log::writeNewLog(__FUNCTION__, print_r($Data->getParams(), true), Log::DEBUG);
// Consulta de la búsqueda de cuentas
- $queryRes = DB::getResults($Data);
-
- if ($queryRes === false) {
- return false;
- }
+ $queryRes = DB::getResultsArray($Data);
// Obtenemos el número de registros totales de la consulta sin contar el LIMIT
self::$queryNumRows = $Data->getQueryNumRows();
diff --git a/inc/SP/Account/AccountTags.class.php b/inc/SP/Account/AccountTags.class.php
index f49c014c..40b38d2d 100644
--- a/inc/SP/Account/AccountTags.class.php
+++ b/inc/SP/Account/AccountTags.class.php
@@ -60,9 +60,7 @@ class AccountTags
$Data->setUseKeyPair(true);
$Data->addParam($accountData->getAccountId(), 'id');
- DB::setReturnArray();
-
- return DB::getResults($Data);
+ return DB::getResultsArray($Data);
}
/**
diff --git a/inc/SP/Account/AccountUtil.class.php b/inc/SP/Account/AccountUtil.class.php
index a115e8ee..c1c54522 100644
--- a/inc/SP/Account/AccountUtil.class.php
+++ b/inc/SP/Account/AccountUtil.class.php
@@ -126,11 +126,9 @@ class AccountUtil
$Data = new QueryData();
$Data->setQuery($query);
- DB::setReturnArray();
-
- $queryRes = DB::getResults($Data);
-
- if ($queryRes === false) {
+ try {
+ $queryRes = DB::getResultsArray($Data);
+ }catch (SPException $e) {
throw new SPException(SPException::SP_CRITICAL, _('No se pudieron obtener los datos de las cuentas'));
}
@@ -191,14 +189,9 @@ class AccountUtil
$Data->setQuery($query);
- DB::setReturnArray();
DB::setFullRowCount();
- $queryRes = DB::getResults($Data);
-
- if ($queryRes === false) {
- return array();
- }
+ $queryRes = DB::getResultsArray($Data);
$queryRes['count'] = $Data->getQueryNumRows();
diff --git a/inc/SP/Account/UserAccounts.class.php b/inc/SP/Account/UserAccounts.class.php
index 9cec95a1..eb737784 100644
--- a/inc/SP/Account/UserAccounts.class.php
+++ b/inc/SP/Account/UserAccounts.class.php
@@ -133,11 +133,9 @@ class UserAccounts
$Data->setQuery($query);
$Data->addParam($accountId, 'id');
- DB::setReturnArray();
-
$users = [];
- foreach (DB::getResults($Data) as $user) {
+ foreach (DB::getResultsArray($Data) as $user) {
$users[] = (int)$user->accuser_userId;
}
@@ -165,8 +163,6 @@ class UserAccounts
$Data->setQuery($query);
$Data->addParam($accountId, 'id');
- DB::setReturnArray();
-
- return DB::getResults($Data);
+ return DB::getResultsArray($Data);
}
}
\ No newline at end of file
diff --git a/inc/SP/Api/ApiTokensUtil.class.php b/inc/SP/Api/ApiTokensUtil.class.php
index c4637f4a..632c0764 100644
--- a/inc/SP/Api/ApiTokensUtil.class.php
+++ b/inc/SP/Api/ApiTokensUtil.class.php
@@ -61,28 +61,22 @@ class ApiTokensUtil
$Data = new QueryData();
if (!is_null($tokenId)) {
- $query .= "WHERE authtoken_id = :id LIMIT 1";
+ $query .= 'WHERE authtoken_id = :id LIMIT 1';
$Data->addParam($tokenId, 'id');
} else {
- $query .= "ORDER BY user_login";
+ $query .= 'ORDER BY user_login';
}
$Data->setQuery($query);
if (!$returnRawData) {
- DB::setReturnArray();
- }
+ $queryRes = DB::getResultsArray($Data);
- $queryRes = DB::getResults($Data);
-
- if ($queryRes === false) {
- return array();
- }
-
- if (!$returnRawData) {
foreach ($queryRes as &$token) {
$token->authtoken_actionId = Acl::getActionName($token->authtoken_actionId);
}
+ } else {
+ $queryRes = DB::getResults($Data);
}
return $queryRes;
@@ -120,14 +114,9 @@ class ApiTokensUtil
$Data->setQuery($query);
- DB::setReturnArray();
DB::setFullRowCount();
- $queryRes = DB::getResults($Data);
-
- if ($queryRes === false) {
- return array();
- }
+ $queryRes = DB::getResultsArray($Data);
foreach ($queryRes as &$token) {
$token->authtoken_actionId = Acl::getActionName($token->authtoken_actionId);
diff --git a/inc/SP/Controller/AccItemController.class.php b/inc/SP/Controller/AccItemController.class.php
index 0c52a924..41d5cd38 100644
--- a/inc/SP/Controller/AccItemController.class.php
+++ b/inc/SP/Controller/AccItemController.class.php
@@ -196,6 +196,8 @@ class AccItemController extends ControllerBase implements ActionsInterface
$this->module = self::ACTION_MGM_PUBLICLINKS;
$this->view->addTemplate('publiclinks');
- $this->view->assign('link', PublicLink::getItem()->getById($this->view->itemId));
+ $PublicLink = PublicLink::getItem();
+
+ $this->view->assign('link', $PublicLink->getItemForList($PublicLink->getById($this->view->itemId)));
}
}
\ No newline at end of file
diff --git a/inc/SP/Controller/AccountController.class.php b/inc/SP/Controller/AccountController.class.php
index a496a9ae..2c11a5be 100644
--- a/inc/SP/Controller/AccountController.class.php
+++ b/inc/SP/Controller/AccountController.class.php
@@ -44,6 +44,7 @@ use SP\Mgmt\Customers\Customer;
use SP\Mgmt\Groups\Group;
use SP\Mgmt\Groups\GroupAccountsUtil;
use SP\Mgmt\CustomFields\CustomField;
+use SP\Mgmt\PublicLinks\PublicLink;
use SP\Mgmt\Tags\Tag;
use SP\Core\Session;
use SP\Core\SessionUtil;
@@ -181,7 +182,9 @@ class AccountController extends ControllerBase implements ActionsInterface
$this->view->assign('maxFileSize', round(Config::getConfig()->getFilesAllowedSize() / 1024, 1));
$this->view->assign('filesAllowedExts', implode(',', Config::getConfig()->getFilesAllowedExts()));
- $publicLinkUrl = (Checks::publicLinksIsEnabled() && $this->AccountData->getPublicLinkHash() ? Init::$WEBURI . '/?h=' . $this->AccountData->getPublicLinkHash() . '&a=link' : '');
+ $PublicLinkData = PublicLink::getItem()->getHashForItem($this->getId());
+
+ $publicLinkUrl = (Checks::publicLinksIsEnabled() && $PublicLinkData ? Init::$WEBURI . '/?h=' . $PublicLinkData->getPublicLinkHash() . '&a=link' : '');
$this->view->assign('publicLinkUrl', $publicLinkUrl);
$this->view->assign('accountPassDate', gmdate('Y-m-d H:i:s', $this->AccountData->getAccountPassDate()));
@@ -488,14 +491,16 @@ class AccountController extends ControllerBase implements ActionsInterface
);
$this->Account->incrementViewCounter();
$this->Account->incrementDecryptCounter();
- $this->Account->getAccountPassData();
+ $AccountPassData = $this->Account->getAccountPassData();
// Desencriptar la clave de la cuenta
$pass = Crypt::generateAesKey($PublicLinkData->getLinkHash());
$masterPass = Crypt::getDecrypt($PublicLinkData->getPass(), $PublicLinkData->getPassIV(), $pass);
- $accountPass = Crypt::getDecrypt($this->Account->getAccountData()->getAccountPass(), $this->Account->getAccountData()->getAccountIV(), $masterPass);
+ $accountPass = Crypt::getDecrypt($AccountPassData->pass, $AccountPassData->iv, $masterPass);
- if (Config::getConfig()->isPublinksImageEnabled()) {
+ $this->view->assign('useImage', Config::getConfig()->isPublinksImageEnabled());
+
+ if ($this->view->useImage) {
$accountPass = ImageUtil::convertText($accountPass);
}
diff --git a/inc/SP/Controller/ItemActionController.class.php b/inc/SP/Controller/ItemActionController.class.php
index 1b6cd639..dc0fb3d6 100644
--- a/inc/SP/Controller/ItemActionController.class.php
+++ b/inc/SP/Controller/ItemActionController.class.php
@@ -478,23 +478,24 @@ class ItemActionController
protected function publicLinkAction()
{
$PublicLinkData = new PublicLinkData();
- $PublicLinkData->setItemId($this->itemId);
+ $PublicLinkData->setPublicLinkItemId($this->itemId);
$PublicLinkData->setTypeId(PublicLink::TYPE_ACCOUNT);
$PublicLinkData->setNotify(Request::analyze('notify', false, false, true));
switch ($this->actionId) {
case ActionsInterface::ACTION_MGM_PUBLICLINKS_NEW:
+ $PublicLinkData->setItemId($this->itemId);
PublicLink::getItem($PublicLinkData)->add();
$this->jsonResponse->setDescription(_('Enlace creado'));
break;
case ActionsInterface::ACTION_MGM_PUBLICLINKS_REFRESH:
- PublicLink::getItem($PublicLinkData)->update();
+ PublicLink::getItem(PublicLink::getItem()->getById($this->itemId))->refresh();
$this->jsonResponse->setDescription(_('Enlace actualizado'));
break;
case ActionsInterface::ACTION_MGM_PUBLICLINKS_DELETE:
- PublicLink::getItem()->delete($PublicLinkData->getId());
+ PublicLink::getItem()->delete($this->itemId);
$this->jsonResponse->setDescription(_('Enlace eliminado'));
break;
diff --git a/inc/SP/Core/Backup.class.php b/inc/SP/Core/Backup.class.php
index e5b81f57..e6a2c5ef 100644
--- a/inc/SP/Core/Backup.class.php
+++ b/inc/SP/Core/Backup.class.php
@@ -137,12 +137,10 @@ class Backup
$sqlOut .= $txtCreate->{'Create Table'} . ';' . PHP_EOL . PHP_EOL;
fwrite($handle, $sqlOut);
- DB::setReturnRawData();
-
$Data->setQuery('SELECT * FROM ' . $tableName);
// Consulta para obtener los registros de la tabla
- $queryRes = DB::getResults($Data);
+ $queryRes = DB::getResultsRaw($Data);
$numColumns = $queryRes->columnCount();
@@ -165,9 +163,8 @@ class Backup
}
fwrite($handle, ');' . PHP_EOL);
}
- fwrite($handle, PHP_EOL . PHP_EOL);
- DB::setReturnRawData(false);
+ fwrite($handle, PHP_EOL . PHP_EOL);
}
$sqlOut = '--' . PHP_EOL;
diff --git a/inc/SP/Core/Crypt.class.php b/inc/SP/Core/Crypt.class.php
index 171040e5..633c7664 100644
--- a/inc/SP/Core/Crypt.class.php
+++ b/inc/SP/Core/Crypt.class.php
@@ -31,7 +31,6 @@ use SP\Config\ConfigDB;
use SP\Core\Exceptions\SPException;
use SP\Log\Log;
use SP\Util\Checks;
-use SP\Util\Util;
defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
@@ -64,9 +63,7 @@ class Crypt
*/
public static function makeHashSalt()
{
- $salt = '$2y$07$' . bin2hex(self::getIV()) . '$';
-
- return $salt;
+ return '$2y$07$' . bin2hex(self::getIV()) . '$';
}
/**
@@ -123,7 +120,7 @@ class Crypt
// Comprobar si el hash está en formato anterior a 12002
if ($isMPass && strlen($checkedHash) === 128) {
- $check = (hash("sha256", substr($checkedHash, 0, 64) . $pwd) == substr($checkedHash, 64, 64));
+ $check = (hash('sha256', substr($checkedHash, 0, 64) . $pwd) === substr($checkedHash, 64, 64));
if ($check) {
$newHash = self::mkHashPassword($pwd);
@@ -137,7 +134,7 @@ class Crypt
}
// Si los hashes son idénticos, la clave es válida
- return $testHash == $validHash;
+ return $testHash === $validHash;
}
/**
@@ -151,9 +148,8 @@ class Crypt
{
$cryptIV = self::getIV();
$cryptValue = self::encrypt($masterPwd, $customPwd, $cryptIV);
- $dataCrypt = array($cryptValue, $cryptIV);
- return $dataCrypt;
+ return [$cryptValue, $cryptIV];
}
/**
@@ -234,7 +230,7 @@ class Crypt
*/
public static function mkEncrypt($data, $masterPwd = null)
{
- $masterPwd = (is_null($masterPwd)) ? SessionUtil::getSessionMPass() : $masterPwd;
+ $masterPwd = null === $masterPwd ? SessionUtil::getSessionMPass() : $masterPwd;
self::$strInitialVector = self::getIV();
$cryptValue = self::encrypt($data, $masterPwd, self::$strInitialVector);
@@ -256,7 +252,7 @@ class Crypt
return false;
}
- if (is_null($password)) {
+ if (null === $password) {
$password = SessionUtil::getSessionMPass();
// self::getSessionMasterPass();
}
@@ -280,14 +276,13 @@ class Crypt
*/
public static function generateAesKey($string, $salt = null)
{
- if (is_null($salt)) {
+ if (null === $salt) {
$salt = Config::getConfig()->getPasswordSalt();
}
$salt = '$2y$07$' . $salt . '$';
- $key = substr(crypt($string, $salt), 7, 32);
- return $key;
+ return substr(crypt($string, $salt), 7, 32);
}
public static function checkPassword($pwd, $salt)
diff --git a/inc/SP/Core/Exceptions/SPException.class.php b/inc/SP/Core/Exceptions/SPException.class.php
index 7485cc07..17d0b427 100644
--- a/inc/SP/Core/Exceptions/SPException.class.php
+++ b/inc/SP/Core/Exceptions/SPException.class.php
@@ -55,7 +55,7 @@ class SPException extends Exception
* SPException constructor.
*
* @param string $type
- * @param int $message
+ * @param string $message
* @param string $hint
* @param int $code
* @param Exception|null $previous
diff --git a/inc/SP/DataModel/PublicLinkBaseData.class.php b/inc/SP/DataModel/PublicLinkBaseData.class.php
index a0c33c5a..a3f9b671 100644
--- a/inc/SP/DataModel/PublicLinkBaseData.class.php
+++ b/inc/SP/DataModel/PublicLinkBaseData.class.php
@@ -34,6 +34,10 @@ defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'
*/
class PublicLinkBaseData extends DataModelBase
{
+ /**
+ * @var int
+ */
+ public $publicLink_id = 0;
/**
* @var int
*/
@@ -50,17 +54,17 @@ class PublicLinkBaseData extends DataModelBase
/**
* @return int
*/
- public function getPublicLinkItemId()
+ public function getPublicLinkId()
{
- return $this->publicLink_itemId;
+ return (int)$this->publicLink_id;
}
/**
- * @param int $publicLink_itemId
+ * @param int $publicLink_id
*/
- public function setPublicLinkItemId($publicLink_itemId)
+ public function setPublicLinkId($publicLink_id)
{
- $this->publicLink_itemId = $publicLink_itemId;
+ $this->publicLink_id = (int)$publicLink_id;
}
/**
@@ -94,4 +98,20 @@ class PublicLinkBaseData extends DataModelBase
{
$this->publicLink_linkData = $publicLink_linkData;
}
+
+ /**
+ * @return int
+ */
+ public function getPublicLinkItemId()
+ {
+ return (int)$this->publicLink_itemId;
+ }
+
+ /**
+ * @param int $publicLink_itemId
+ */
+ public function setPublicLinkItemId($publicLink_itemId)
+ {
+ $this->publicLink_itemId = (int)$publicLink_itemId;
+ }
}
\ No newline at end of file
diff --git a/inc/SP/Import/Migrate.class.php b/inc/SP/Import/Migrate.class.php
deleted file mode 100644
index eecfbd57..00000000
--- a/inc/SP/Import/Migrate.class.php
+++ /dev/null
@@ -1,970 +0,0 @@
-.
- *
- */
-
-namespace SP\Import;
-
-use SP\Config\Config;
-use SP\DataModel\CategoryData;
-use SP\Mgmt\Customers\Customer;
-use SP\Log\Log;
-use SP\Core\Session;
-use SP\Core\Exceptions\SPException;
-use SP\Storage\DB;
-use SP\Storage\DBUtil;
-use SP\Storage\QueryData;
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-/**
- * Esta clase es la encargada de realizar la migración de datos desde phpPMS.
- */
-class Migrate
-{
- private static $DB; // Database connection
- private static $customersByName;
- private static $currentQuery;
- private static $result = array();
- private static $oldConfig = array();
-
- /**
- * Iniciar migración desde phpPMS.
- *
- * @param array $options datos de conexión
- * @return array resultado del proceso
- */
- public static function migrate($options)
- {
-
- if (!is_array($options)) {
- $result['error'][]['description'] = _('Faltan parámetros');
- return $result;
- }
-
- $dbname = $options['dbname'];
-
- if (preg_match('/(.*):(\d{1,5})/', $options['dbhost'], $match)){
- $dbhost = $match[1];
- $dbport = $match[2];
- } else {
- $dbhost = $options['dbhost'];
- $dbport = 3306;
- }
-
- $dbadmin = $options['dbuser'];
- $dbpass = $options['dbpass'];
-
- try {
- self::checkDatabaseAdmin($dbhost, $dbadmin, $dbpass, $dbname, $dbport);
- self::checkDatabaseExist($dbname);
- self::checkSourceVersion();
- self::cleanCurrentDB();
- self::migrateCustomers();
- self::migrateAccounts();
- self::migrateAccountsGroups();
- self::migrateAccountsHistory();
- self::migrateAcountsFiles();
- self::migrateAccountsCategories();
- self::migrateUsers();
- self::migrateUsersGroups();
- self::migrateConfig();
- } catch (SPException $e) {
- self::$result['error'][] = array(
- 'type' => $e->getType(),
- 'description' => $e->getMessage(),
- 'hint' => $e->getHint()
- );
- return (self::$result);
- }
-
- self::$result['ok'][] = _('Importación finalizada');
- self::$result['ok'][] = _('Revise el registro de eventos para más detalles');
-
- return (self::$result);
- }
-
- /**
- * Comprobar si la conexión con la BBDD de phpPMS es posible.
- *
- * @param string $dbhost host de conexión
- * @param string $dbadmin usuario de conexión
- * @param string $dbpass clave de conexión
- * @param string $dbname nombre de la base de datos
- * @param string $dbport puerto de conexión
- * @throws \SP\Core\Exceptions\SPException
- */
- private static function checkDatabaseAdmin($dbhost, $dbadmin, $dbpass, $dbname, $dbport)
- {
- try {
- $dsn = 'mysql:host=' . $dbhost . ';dbname=' . $dbname . ';dbport=' . $dbport . ';charset=utf8';
- self::$DB = new \PDO($dsn, $dbadmin, $dbpass);
- } catch (\PDOException $e) {
- throw new SPException(SPException::SP_CRITICAL
- , _('No es posible conectar con la BD')
- , _('Compruebe los datos de conexión') . '
' . $e->getMessage());
- }
- }
-
- /**
- * Comprobar si la BBDD existe.
- *
- * @param string $dbname nombre de la base de datos
- * @return bool
- */
- private static function checkDatabaseExist($dbname)
- {
- $query = 'SELECT COUNT(*) '
- . 'FROM information_schema.tables '
- . 'WHERE table_schema = \'' . $dbname . '\' '
- . 'AND table_name = \'usrData\' LIMIT 1';
-
- return (intval(self::$DB->query($query)->fetchColumn()) === 0);
- }
-
- /**
- * Comprobar la versión de phpPMS.
- *
- * @throws \SP\Core\Exceptions\SPException
- */
- private static function checkSourceVersion()
- {
- if (!isset(self::$oldConfig['version'])) {
- self::getSourceConfig();
- }
-
- if (self::$oldConfig['version'] != "0.973b") {
- throw new SPException(SPException::SP_CRITICAL,
- _('La versión no es compatible') . '(' . self::$oldConfig['version'] . ')',
- _('Actualice a la última versión de phpPMS'));
- }
- }
-
- /**
- * Obtener la configuración desde desde phpPMS.
- *
- * @throws \SP\Core\Exceptions\SPException
- */
- private static function getSourceConfig()
- {
- $query = 'SELECT vacValue as value,vacParameter as parameter FROM config';
-
- try {
- self::parseSourceConfig(self::$DB->query($query));
- } catch (\PDOException $e) {
-
- throw new SPException(SPException::SP_CRITICAL,
- _('Error al obtener la configuración'),
- $e->getMessage());
- }
- }
-
- /**
- * Parsear los valores de configuración de phpPMS y adaptarlos a sysPass.
- *
- * @param array $config con los datos de configuración
- * @return bool
- */
- private static function parseSourceConfig($config)
- {
- if (!is_array($config)) {
- return false;
- }
-
- if (strtolower($config['value']) == 'true' || strtolower($config['value']) == 'on') {
- $value = 1;
- } else {
- $value = (is_numeric($config['value'])) ? (int)$config['value'] : trim($config['value']);
- }
-
- // Guardar la configuración anterior
- self::$oldConfig[$config['parameter']] = $value;
- }
-
- /**
- * Limpiar los datos de sysPass.
- * Limpiar las tablas de la base de sysPass para la importación.
- *
- * @throws \SP\Core\Exceptions\SPException
- */
- private static function cleanCurrentDB()
- {
- $tables = array('accounts', 'accHistory', 'accFiles', 'accGroups', 'categories', 'customers', 'usrGroups');
-
- // Limpiar datos de las tablas
- foreach ($tables as $table) {
- $query = 'TRUNCATE TABLE ' . $table;
-
- $Data = new QueryData();
- $Data->setQuery($query);
-
- if (DB::getQuery($Data) === false) {
- throw new SPException(SPException::SP_CRITICAL,
- _('Error al vaciar tabla') . ' (' . $table . ')',
- DB::$txtError);
- }
- }
-
- $currentUserId = Session::getUserId();
-
- // Limpiar datos de usuarios manteniendo el usuario actual
- if (self::checkAdminAccount($currentUserId)) {
- $query = 'DELETE FROM usrData WHERE user_id != :userid';
-
- $Data = new QueryData();
- $Data->setQuery($query);
- $Data->addParam($currentUserId, 'userid');
-
- if (DB::getQuery($Data) === false) {
- throw new SPException(SPException::SP_CRITICAL,
- _('Error al vaciar tabla') . ' (' . $table . ')',
- DB::$txtError);
- }
- } else {
- throw new SPException(SPException::SP_CRITICAL,
- _('Usuario actual no es administrador de la aplicación'), 1);
- }
- }
-
- /**
- * Comprobar si el usuario actual es administrador de la aplicación.
- *
- * @param int $currentUserId con el Id del usuario de la sesión actual
- * @return bool
- */
- private static function checkAdminAccount($currentUserId)
- {
- $query = 'SELECT user_id FROM usrData WHERE user_id = :id AND user_isAdminApp = 1 LIMIT 1';
-
- $Data = new QueryData();
- $Data->setQuery($query);
- $Data->addParam($currentUserId, 'id');
-
- DB::getQuery($Data);
-
- return ($Data->getQueryNumRows() === 0);
- }
-
- /**
- * Migrar los clientes desde phpPMS.
- *
- * @throws \SP\Core\Exceptions\SPException
- * @return array resultado
- */
- private static function migrateCustomers()
- {
- $customers = self::getCustomers();
-
- $totalRecords = count($customers);
- $num = 0;
-
- foreach ($customers as $customer) {
- try {
- Customer::getItem(new CategoryData(null, $customer))->add();
- $num++;
- } catch (SPException $e) {
- if ($e->getType() === SPException::SP_WARNING){
- continue;
- }
- throw new SPException(SPException::SP_CRITICAL,
- _('No es posible crear el cliente'),
- _('Contacte con el desarrollador'));
- }
- }
-
- $Log = new Log(_('Importar Clientes'));
- $Log->addDescription('OK');
- $Log->addDetails(_('Registros'), $num . '/' . $totalRecords);
- $Log->writeLog();
- }
-
- /**
- * Obtener los clientes desde phpPMS.
- *
- * @throws \SP\Core\Exceptions\SPException
- * @return array con los clientes
- */
- private static function getCustomers()
- {
- $query = 'SELECT DISTINCT vacCliente FROM accounts';
-
- try {
- foreach (self::$DB->query($query) as $row) {
- $customers[] = trim($row['vacCliente']);
- }
-
- return $customers;
- } catch (\PDOException $e) {
- throw new SPException(SPException::SP_CRITICAL,
- _('Error al obtener los clientes'),
- $e->getMessage());
- }
- }
-
- /**
- * Migrar las cuentas desde phpPMS.
- *
- * @throws \SP\Core\Exceptions\SPException
- * @return array resultado
- */
- private static function migrateAccounts()
- {
- $query = 'SELECT intAccountId,'
- . 'intUGroupFId,'
- . 'intUserFId,'
- . 'intUEditFId,'
- . 'vacCliente,vacName,'
- . 'intCategoryFid,'
- . 'vacLogin,'
- . 'vacUrl,'
- . 'vacPassword,'
- . 'vacMd5Password,'
- . 'vacInitialValue,'
- . 'txtNotice,'
- . 'intCountView,'
- . 'intCountDecrypt,'
- . 'datAdded,datChanged '
- . 'FROM accounts ';
-
- $totalRecords = 0;
- $num = 0;
-
- try {
- foreach (self::$DB->query($query) as $row) {
- if (self::insertAccounts($row)) {
- $num++;
- }
- $totalRecords++;
- }
- } catch (\PDOException $e) {
- throw new SPException(SPException::SP_CRITICAL,
- _('Error al obtener cuentas'),
- $e->getMessage());
- }
-
- $Log = new Log(_('Importar Cuentas'));
- $Log->addDescription('OK');
- $Log->addDetails(_('Registros'), $num . '/' . $totalRecords);
- $Log->writeLog();
- }
-
- /**
- * Insertar una cuenta en sysPass.
- *
- * @param array $account con los datos de la cuenta
- * @throws \SP\Core\Exceptions\SPException
- * @return bool
- */
- private static function insertAccounts($account)
- {
- // FIXME
- if (!is_array(self::$customersByName)) {
- $customers = Customer::getCustomers(NULL, true);
- self::$customersByName = array_flip($customers);
- }
-
- $customer = trim($account['vacCliente']);
-
- if (array_key_exists($customer, self::$customersByName)) {
- $customerId = self::$customersByName[$customer];
- } else {
- self::$result['error'][] = _('Cliente no encontrado') . ": " . $account['vacCliente'];
-
- return false;
- }
-
- $query = 'INSERT INTO accounts SET ' .
- 'account_id = :id,' .
- 'account_userGroupId = :userGroupId,' .
- 'account_userId = :userId,' .
- 'account_userEditId = :userEditId,' .
- 'account_customerId = :customerId,' .
- 'account_name = :name,' .
- 'account_categoryId = :categoryId,' .
- 'account_login = :login,' .
- 'account_url = :url,' .
- 'account_pass = :pass,' .
- 'account_IV = :iv,' .
- 'account_notes = :notes,' .
- 'account_countView = :countView,' .
- 'account_countDecrypt = :countDecrypt,' .
- 'account_dateAdd = :dateAdd,' .
- 'account_dateEdit = :dateEdit';
-
- $Data = new QueryData();
- $Data->setQuery($query);
- $Data->addParam($account['intAccountId'], 'id');
- $Data->addParam($account['intUGroupFId'], 'userGroupId');
- $Data->addParam($account['intUserFId'], 'userId');
- $Data->addParam($account['intUEditFId'], 'userEditId');
- $Data->addParam($customerId, 'customerId');
- $Data->addParam($account['vacName'], 'name');
- $Data->addParam($account['intCategoryFid'], 'categoryId');
- $Data->addParam($account['vacLogin'], 'login');
- $Data->addParam($account['vacUrl'], 'url');
- $Data->addParam($account['vacPassword'], 'pass');
- $Data->addParam($account['vacInitialValue'], 'iv');
- $Data->addParam($account['txtNotice'], 'notes');
- $Data->addParam($account['intCountView'], 'countView');
- $Data->addParam($account['intCountDecrypt'], 'countDecrypt');
- $Data->addParam($account['datAdded'], 'dateAdd');
- $Data->addParam($account['datChanged'], 'dateEdit');
-
- if (DB::getQuery($Data) === false) {
- self::$currentQuery = DBUtil::escape($query);
- throw new SPException(SPException::SP_CRITICAL,
- _('Error al migrar cuenta'),
- DB::$txtError);
- }
-
- return true;
- }
-
- /**
- * Migrar las grupos secundarios de las cuentas desde phpPMS.
- *
- * @throws \SP\Core\Exceptions\SPException
- * @return array resultado
- */
- private static function migrateAccountsGroups()
- {
- $query = 'SELECT intAccId,intUGroupId FROM acc_usergroups';
-
- $totalRecords = 0;
- $num = 0;
-
- try {
- foreach(self::$DB->query($query) as $row){
- if (self::insertAccountsGroups($row)) {
- $num++;
- }
- $totalRecords++;
- }
- } catch(\PDOException $e){
- throw new SPException(SPException::SP_CRITICAL,
- _('Error al obtener los grupos de cuentas'),
- $e->getMessage());
- }
-
- $Log = new Log(_('Importar Grupos de Cuentas'));
- $Log->addDescription('OK');
- $Log->addDetails(_('Registros'), $num . '/' . $totalRecords);
- $Log->writeLog();
- }
-
- /**
- * Insertar los grupos secundarios de una cuenta en sysPass.
- *
- * @param array $accountGroup con los datos de los grupos secundarios
- * @throws \SP\Core\Exceptions\SPException
- * @return bool
- */
- private static function insertAccountsGroups($accountGroup)
- {
- $query = 'INSERT INTO accGroups SET ' .
- 'accgroup_accountId = :accountId,' .
- 'accgroup_groupId = :groudId';
-
- $Data = new QueryData();
- $Data->setQuery($query);
- $Data->addParam($accountGroup['intAccId'], 'accountId');
- $Data->addParam($accountGroup['intUGroupId'], 'groupId');
-
- if (DB::getQuery($Data) === false) {
- throw new SPException(SPException::SP_CRITICAL,
- _('Error al crear grupos de cuentas'),
- DB::$txtError);
- }
-
- return true;
- }
-
- /**
- * Migrar el historail de las cuentas desde phpPMS.
- *
- * @throws \SP\Core\Exceptions\SPException
- * @return array resultado
- */
- private static function migrateAccountsHistory()
- {
- $query = 'SELECT intAccountId,'
- . 'intUGroupFId,'
- . 'intUserFId,'
- . 'intUEditFId,'
- . 'vacCliente,'
- . 'vacName,'
- . 'intCategoryFid,'
- . 'vacLogin,'
- . 'vacUrl,'
- . 'vacPassword,'
- . 'vacInitialValue,'
- . 'txtNotice,'
- . 'intCountView,'
- . 'intCountDecrypt,'
- . 'datAdded,'
- . 'datChanged,'
- . 'blnModificada,'
- . 'blnEliminada '
- . 'FROM acc_history';
-
- $totalRecords = 0;
- $num = 0;
-
- try {
- foreach(self::$DB->query($query) as $row){
- if (self::insertAccountsHistory($row)) {
- $num++;
- }
- $totalRecords++;
- }
- } catch(\PDOException $e){
- throw new SPException(SPException::SP_CRITICAL,
- _('Error al obtener el historico de cuentas'),
- self::$DB->error);
- }
-
- $Log = new Log(_('Importar Histórico de Cuentas'));
- $Log->addDescription('OK');
- $Log->addDetails(_('Registros'), $num . '/' . $totalRecords);
- $Log->writeLog();
- }
-
- /**
- * Insertar el historial de una cuenta en sysPass.
- *
- * @param array $accountHistory con los datos del historial de la cuenta
- * @throws \SP\Core\Exceptions\SPException
- * @return bool
- */
- private static function insertAccountsHistory($accountHistory)
- {
- if (!is_array(self::$customersByName)) {
- $customers = Customer::getCustomers(null, true);
- self::$customersByName = array_flip($customers);
- }
-
- $customer = trim($accountHistory['vacCliente']);
-
- if (array_key_exists($customer, self::$customersByName)) {
- $customerId = self::$customersByName[$customer];
- } else {
- return false;
- }
-
- $query = 'INSERT INTO accHistory SET ' .
- 'acchistory_accountId = :id,' .
- 'acchistory_userGroupId = :userGroupId,' .
- 'acchistory_userId = :userId,' .
- 'acchistory_userEditId = :userEditId,' .
- 'acchistory_customerId = :customerId,' .
- 'acchistory_name = :name,' .
- 'acchistory_categoryId = :categoryId,' .
- 'acchistory_login = :login,' .
- 'acchistory_url = :url,' .
- 'acchistory_pass = :pass,' .
- 'acchistory_IV = :iv,' .
- 'acchistory_notes = :notes,' .
- 'acchistory_countView = :countView,' .
- 'acchistory_countDecrypt = :countDecrypt,' .
- 'acchistory_dateAdd = :dateAdd,' .
- 'acchistory_dateEdit = :dateEdit,' .
- 'acchistory_isModify = :isModify,' .
- 'acchistory_isDeleted = :isDeleted';
-
- $Data = new QueryData();
- $Data->setQuery($query);
- $Data->addParam($accountHistory['intAccountId'], 'id');
- $Data->addParam($accountHistory['intUGroupFId'], 'userGroupId');
- $Data->addParam($accountHistory['intUserFId'], 'userId');
- $Data->addParam($accountHistory['intUEditFId'], 'userEditId');
- $Data->addParam($customerId, 'customerId');
- $Data->addParam($accountHistory['vacName'], 'name');
- $Data->addParam($accountHistory['intCategoryFid'], 'categoryId');
- $Data->addParam($accountHistory['vacLogin'], 'login');
- $Data->addParam($accountHistory['vacUrl'], 'url');
- $Data->addParam($accountHistory['vacPassword'], 'pass');
- $Data->addParam($accountHistory['vacInitialValue'], 'iv');
- $Data->addParam($accountHistory['txtNotice'], 'notes');
- $Data->addParam($accountHistory['intCountView'], 'countView');
- $Data->addParam($accountHistory['intCountDecrypt'], 'countDecrypt');
- $Data->addParam($accountHistory['datAdded'], 'dateAdd');
- $Data->addParam($accountHistory['datChanged'], 'dateEdit');
- $Data->addParam($accountHistory['blnModificada'], 'isModify');
- $Data->addParam($accountHistory['blnEliminada'], 'isDeleted');
-
- if (DB::getQuery($Data) === false) {
- throw new SPException(SPException::SP_CRITICAL,
- _('Error al crear historico de cuentas'),
- DB::$txtError);
- }
-
- return true;
- }
-
- /**
- * Migrar los archivos de de las cuentas desde phpPMS.
- *
- * @throws \SP\Core\Exceptions\SPException
- * @return array resultado
- */
- private static function migrateAcountsFiles()
- {
- $query = 'SELECT intAccountId,'
- . 'vacName,'
- . 'vacType,'
- . 'intSize,'
- . 'blobContent,'
- . 'vacExtension '
- . 'FROM files';
-
- $totalRecords = 0;
- $num = 0;
-
- try {
- foreach(self::$DB->query($query) as $row){
- if (self::insertAccountsFiles($row)) {
- $num++;
- }
- $totalRecords++;
- }
- } catch(\PDOException $e){
- throw new SPException(SPException::SP_CRITICAL,
- _('Error al obtener los archivos de cuentas'),
- self::$DB->error);
- }
-
- $Log = new Log(_('Importar Archivos de Cuentas'));
- $Log->addDescription('OK');
- $Log->addDetails(_('Registros'), $num . '/' . $totalRecords);
- $Log->writeLog();
- }
-
- /**
- * Insertar los archivos de una cuenta en sysPass.
- *
- * @param array $accountFile con los datos del archivo
- * @throws \SP\Core\Exceptions\SPException
- * @return bool
- */
- private static function insertAccountsFiles($accountFile)
- {
- $query = 'INSERT INTO accFiles '
- . 'SET accfile_accountId = :id,'
- . 'accfile_name = :name,'
- . 'accfile_type = :type,'
- . 'accfile_size = :size,'
- . 'accfile_content = :blobcontent,'
- . 'accfile_extension = :extension';
-
- $Data = new QueryData();
- $Data->setQuery($query);
- $Data->addParam($accountFile['intAccountId'], 'id');
- $Data->addParam($accountFile['vacName'], 'name');
- $Data->addParam($accountFile['vacType'], 'type');
- $Data->addParam($accountFile['intSize'], 'size');
- $Data->addParam($accountFile['blobContent'], 'blobcontent');
- $Data->addParam($accountFile['vacExtension'], 'extension');
-
- if (DB::getQuery($Data) === false) {
- throw new SPException(SPException::SP_CRITICAL,
- _('Error al crear archivos de cuentas'),
- DB::$txtError);
- }
-
- return true;
- }
-
- /**
- * Migrar las categorías de las cuentas desde phpPMS.
- *
- * @throws \SP\Core\Exceptions\SPException
- * @return array resultado
- */
- private static function migrateAccountsCategories()
- {
- $query = 'SELECT intCategoryId,vacCategoryName FROM categories';
-
- $totalRecords = 0;
- $num = 0;
-
- try {
- foreach(self::$DB->query($query) as $row){
- if (self::insertAccountsCategories($row)) {
- $num++;
- }
- $totalRecords++;
- }
- } catch(\PDOException $e){
- throw new SPException(SPException::SP_CRITICAL,
- _('Error al obtener las categorías de cuentas'),
- self::$DB->error);
- }
-
- $Log = new Log(_('Importar Categorías de Cuentas'));
- $Log->addDescription('OK');
- $Log->addDetails(_('Registros'), $num . '/' . $totalRecords);
- $Log->writeLog();
- }
-
- /**
- * Insertar las categorías en sysPass.
- *
- * @param array $accountCategory con los datos de la categoría
- * @throws \SP\Core\Exceptions\SPException
- * @return bool
- */
- private static function insertAccountsCategories($accountCategory)
- {
- $query = 'INSERT INTO categories SET category_id = :id,category_name = :name';
-
- $Data = new QueryData();
- $Data->setQuery($query);
- $Data->addParam($accountCategory['intCategoryId'], 'id');
- $Data->addParam($accountCategory['vacCategoryName'], 'name');
-
- if (DB::getQuery($Data) === false) {
- throw new SPException(SPException::SP_CRITICAL,
- _('Error al crear categorías de cuentas'),
- DB::$txtError);
- }
-
- return true;
- }
-
- /**
- * Migrar los usuarios desde desde phpPMS.
- *
- * @throws \SP\Core\Exceptions\SPException
- * @return array resultado
- */
- private static function migrateUsers()
- {
- $query = 'SELECT intUserId,'
- . 'vacUName,'
- . 'intUGroupFid,'
- . 'vacULogin,'
- . 'vacUPassword,'
- . 'vacUEmail,'
- . 'txtUNotes,'
- . 'intUCount,'
- . 'intUProfile,'
- . 'datULastLogin,'
- . 'blnIsAdminApp,'
- . 'blnIsAdminAcc,'
- . 'vacUserMPwd,'
- . 'vacUserMIv,'
- . 'datULastUpdate,'
- . 'datUserLastUpdateMPass,'
- . 'blnFromLdap,'
- . 'blnDisabled '
- . 'FROM users '
- . 'WHERE intUserId <> ' . Session::getUserId();
-
- $totalRecords = 0;
- $num = 0;
-
- try {
- foreach(self::$DB->query($query) as $row){
- if (self::insertUsers($row)) {
- $num++;
- }
- $totalRecords++;
- }
- } catch(\PDOException $e){
- throw new SPException(SPException::SP_CRITICAL,
- _('Error al obtener los usuarios'),
- self::$DB->error);
- }
-
- $Log = new Log(_('Importar Usuarios'));
- $Log->addDescription('OK');
- $Log->addDetails(_('Registros'), $num . '/' . $totalRecords);
- $Log->writeLog();
- }
-
- /**
- * Insertar los usuarios en sysPass.
- *
- * @param array $users con los datos del usuario
- * @throws \SP\Core\Exceptions\SPException
- * @return bool
- *
- * El usuario importado está deshabilitado
- */
- private static function insertUsers($users)
- {
- $query = 'INSERT INTO usrData '
- . 'SET user_id = :id,'
- . 'user_name = :name,'
- . 'user_groupId = :goupId,'
- . 'user_login = :login,'
- . 'user_pass = :pass,'
- . 'user_mPass = :mpass,'
- . 'user_mIV = :miv,'
- . 'user_email = :email,'
- . 'user_notes = :notes,'
- . 'user_count = :count,'
- . 'user_profileId = 0,'
- . 'user_lastLogin = :lastLogin,'
- . 'user_lastUpdate = :lastUpdate,'
- . 'user_lastUpdateMPass = :lastUpdateMPass,'
- . 'user_isAdminApp = :isAdminApp,'
- . 'user_isAdminAcc = :isAdminAcc,'
- . 'user_isLdap = :isLdap,'
- . 'user_isDisabled = 1,'
- . 'user_isMigrate = 1';
-
- $Data = new QueryData();
- $Data->setQuery($query);
- $Data->addParam($users['intUserId'], 'id');
- $Data->addParam($users['vacUName'], 'name');
- $Data->addParam($users['intUGroupFid'], 'groupId');
- $Data->addParam($users['vacULogin'], 'login');
- $Data->addParam($users['vacUPassword'], 'pass');
- $Data->addParam($users['vacUserMPwd'], 'mpass');
- $Data->addParam($users['vacUserMIv'], 'miv');
- $Data->addParam($users['vacUEmail'], 'email');
- $Data->addParam($users['txtUNotes'], 'notes');
- $Data->addParam($users['intUCount'], 'count');
- $Data->addParam($users['datULastLogin'], 'lastLogin');
- $Data->addParam($users['datULastUpdate'], 'lastUpdate');
- $Data->addParam($users['datUserLastUpdateMPass'], 'lastUpdateMPass');
- $Data->addParam($users['blnIsAdminApp'], 'isAdminApp');
- $Data->addParam($users['blnIsAdminAcc'], 'isAdminAcc');
- $Data->addParam($users['blnFromLdap'], 'isLdap');
-
- if (DB::getQuery($Data) === false) {
- throw new SPException(SPException::SP_CRITICAL,
- _('Error al crear usuarios'),
- DB::$txtError);
- }
-
- return true;
- }
-
- /**
- * Migrar los grupos de usuarios desde desde phpPMS.
- *
- * @throws \SP\Core\Exceptions\SPException
- * @return array resultado
- */
- private static function migrateUsersGroups()
- {
- $query = 'SELECT intUGroupId,vacUGroupName,vacUGroupDesc FROM usergroups';
-
- $totalRecords = 0;
- $num = 0;
-
- try {
- foreach(self::$DB->query($query) as $row){
- if (self::insertUsersGroups($row)) {
- $num++;
- }
- $totalRecords++;
- }
- } catch(\PDOException $e){
- throw new SPException(SPException::SP_CRITICAL,
- _('Error al obtener los grupos de usuarios'),
- self::$DB->error);
- }
-
- $Log = new Log(_('Importar Grupos de Usuarios'));
- $Log->addDescription('OK');
- $Log->addDetails(_('Registros'), $num . '/' . $totalRecords);
- $Log->writeLog();
- }
-
- /**
- * Insertar los grupos de usuarios en sysPass.
- *
- * @param array $usersGroups con los datos del grupo
- * @throws \SP\Core\Exceptions\SPException
- * @return bool
- */
- private static function insertUsersGroups($usersGroups)
- {
- $query = 'INSERT INTO usrGroups '
- . 'SET usergroup_id = :id,'
- . 'usergroup_name = :name,'
- . 'usergroup_description = :description';
-
- $Data = new QueryData();
- $Data->setQuery($query);
- $Data->addParam($usersGroups['intUGroupId'], 'id');
- $Data->addParam($usersGroups['vacUGroupName'], 'name');
- $Data->addParam($usersGroups['vacUGroupDesc'], 'description');
-
- if (DB::getQuery($Data) === false) {
- throw new SPException(SPException::SP_CRITICAL,
- _('Error al crear los grupos de usuarios'),
- DB::$txtError);
- }
-
- return true;
- }
-
- /**
- * Migrar la configuración desde phpPMS.
- *
- * @return array resultado
- */
- private static function migrateConfig()
- {
- // Obtener la configuración actual
- self::getSourceConfig();
-
- $skip = array('version',
- 'installed',
- 'install',
- 'dbhost',
- 'dbname',
- 'dbuser',
- 'dbpass',
- 'siteroot',
- 'sitelang',
- 'sitename',
- 'siteshortname',
- 'md5_pass',
- 'password_show',
- 'lastupdatempass',
- 'passwordsalt');
-
- $totalParams = count(self::$oldConfig);
- $num = 0;
-
- // Guardar la nueva configuración
- foreach (self::$oldConfig as $key => $value) {
- if (array_key_exists($key, $skip)) {
- continue;
- }
- // FIXME
-// Config::setValue($key, $value);
- $num++;
- }
-
- $Log = new Log(_('Importar Configuración'));
- $Log->addDescription('OK');
- $Log->addDetails(_('Registros'), $num . '/' . $totalParams);
- $Log->writeLog();
- }
-}
\ No newline at end of file
diff --git a/inc/SP/Log/Log.class.php b/inc/SP/Log/Log.class.php
index 82f9aeac..7fc312db 100644
--- a/inc/SP/Log/Log.class.php
+++ b/inc/SP/Log/Log.class.php
@@ -74,14 +74,7 @@ class Log extends ActionLog
// Obtenemos el número total de registros
DB::setFullRowCount();
- // Devolver un array siempre
- DB::setReturnArray();
-
- $queryRes = DB::getResults($Data);
-
- if ($queryRes === false) {
- return false;
- }
+ $queryRes = DB::getResultsArray($Data);
self::$numRows = $Data->getQueryNumRows();
diff --git a/inc/SP/Mgmt/Categories/Category.class.php b/inc/SP/Mgmt/Categories/Category.class.php
index e9bf9a40..d3457954 100644
--- a/inc/SP/Mgmt/Categories/Category.class.php
+++ b/inc/SP/Mgmt/Categories/Category.class.php
@@ -227,8 +227,6 @@ class Category extends CategoryBase implements ItemInterface, ItemSelectInterfac
$Data->setMapClassName($this->getDataModel());
$Data->setQuery($query);
- DB::setReturnArray();
-
- return DB::getResults($Data);
+ return DB::getResultsArray($Data);
}
}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Categories/CategorySearch.class.php b/inc/SP/Mgmt/Categories/CategorySearch.class.php
index 8cb6759a..823922f0 100644
--- a/inc/SP/Mgmt/Categories/CategorySearch.class.php
+++ b/inc/SP/Mgmt/Categories/CategorySearch.class.php
@@ -69,15 +69,10 @@ class CategorySearch extends CategoryBase implements ItemSearchInterface
$Data->setQuery($query);
- DB::setReturnArray();
DB::setFullRowCount();
/** @var array $queryRes */
- $queryRes = DB::getResults($Data);
-
- if ($queryRes === false) {
- return array();
- }
+ $queryRes = DB::getResultsArray($Data);
$queryRes['count'] = $Data->getQueryNumRows();
diff --git a/inc/SP/Mgmt/CustomFields/CustomField.class.php b/inc/SP/Mgmt/CustomFields/CustomField.class.php
index d26fdc91..9c607948 100644
--- a/inc/SP/Mgmt/CustomFields/CustomField.class.php
+++ b/inc/SP/Mgmt/CustomFields/CustomField.class.php
@@ -219,9 +219,7 @@ class CustomField extends CustomFieldBase implements ItemInterface
$Data->addParam($this->itemData->getModule());
$Data->addParam($id);
- DB::setReturnArray();
-
- $queryRes = DB::getResults($Data);
+ $queryRes = DB::getResultsArray($Data);
$customFields = [];
@@ -293,12 +291,10 @@ class CustomField extends CustomFieldBase implements ItemInterface
$Data->setQuery($query);
$Data->addParam($this->itemData->getModule());
- DB::setReturnArray();
+ $queryRes = DB::getResultsArray($Data);
- $queryRes = DB::getResults($Data);
-
- if ($queryRes === false) {
- return array('hash' => '');
+ if (count($queryRes) === 0) {
+ return ['hash' => ''];
}
foreach ($queryRes as $CustomFieldDef) {
diff --git a/inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php b/inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php
index c1f80e81..260fe27f 100644
--- a/inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php
+++ b/inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php
@@ -225,11 +225,9 @@ class CustomFieldDef extends CustomFieldBase implements ItemInterface
$Data->setMapClassName($this->getDataModel());
$Data->setQuery($query);
- DB::setReturnArray();
+ $queryRes = DB::getResultsArray($Data);
- $queryRes = DB::getResults($Data);
-
- if ($queryRes === false) {
+ if (count($queryRes) === 0) {
throw new SPException(SPException::SP_INFO, _('No se encontraron campos personalizados'));
}
diff --git a/inc/SP/Mgmt/CustomFields/CustomFieldDefSearch.class.php b/inc/SP/Mgmt/CustomFields/CustomFieldDefSearch.class.php
index b88bd61e..08f71e95 100644
--- a/inc/SP/Mgmt/CustomFields/CustomFieldDefSearch.class.php
+++ b/inc/SP/Mgmt/CustomFields/CustomFieldDefSearch.class.php
@@ -73,16 +73,11 @@ class CustomFieldDefSearch extends CustomFieldBase implements ItemSearchInterfac
$Data->addParam($SearchData->getLimitStart());
$Data->addParam($SearchData->getLimitCount());
- DB::setReturnArray();
DB::setFullRowCount();
- $queryRes = DB::getResults($Data);
+ $queryRes = DB::getResultsArray($Data);
- if ($queryRes === false) {
- return array();
- }
-
- $customFields = array();
+ $customFields = [];
foreach ($queryRes as $CustomField) {
/**
diff --git a/inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php b/inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php
index 7ad7ec6c..75947b1c 100644
--- a/inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php
+++ b/inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php
@@ -73,11 +73,9 @@ class CustomFieldsUtil
$Data->setMapClassName('SP\DataModel\CustomFieldData');
$Data->setQuery($query);
- DB::setReturnArray();
+ $queryRes = DB::getResultsArray($Data);
- $queryRes = DB::getResults($Data);
-
- if ($queryRes === false) {
+ if (count($queryRes) === 0) {
$Log->addDescription(_('Fin'));
$Log->writeLog();
diff --git a/inc/SP/Mgmt/Customers/Customer.class.php b/inc/SP/Mgmt/Customers/Customer.class.php
index 49371a12..595bfacb 100644
--- a/inc/SP/Mgmt/Customers/Customer.class.php
+++ b/inc/SP/Mgmt/Customers/Customer.class.php
@@ -252,8 +252,6 @@ class Customer extends CustomerBase implements ItemInterface, ItemSelectInterfac
$Data->setMapClassName($this->getDataModel());
$Data->setQuery($query);
- DB::setReturnArray();
-
- return DB::getResults($Data);
+ return DB::getResultsArray($Data);
}
}
diff --git a/inc/SP/Mgmt/Customers/CustomerSearch.class.php b/inc/SP/Mgmt/Customers/CustomerSearch.class.php
index 47e597bc..591c1ceb 100644
--- a/inc/SP/Mgmt/Customers/CustomerSearch.class.php
+++ b/inc/SP/Mgmt/Customers/CustomerSearch.class.php
@@ -71,14 +71,9 @@ class CustomerSearch extends CustomerBase implements ItemSearchInterface
$Data->setQuery($query);
- DB::setReturnArray();
DB::setFullRowCount();
- $queryRes = DB::getResults($Data);
-
- if ($queryRes === false) {
- return array();
- }
+ $queryRes = DB::getResultsArray($Data);
$queryRes['count'] = $Data->getQueryNumRows();
diff --git a/inc/SP/Mgmt/Files/FileSearch.class.php b/inc/SP/Mgmt/Files/FileSearch.class.php
index ee662505..f6cffbb9 100644
--- a/inc/SP/Mgmt/Files/FileSearch.class.php
+++ b/inc/SP/Mgmt/Files/FileSearch.class.php
@@ -80,14 +80,9 @@ class FileSearch extends FileBase implements ItemSearchInterface
$Data->setQuery($query);
- DB::setReturnArray();
DB::setFullRowCount();
- $queryRes = DB::getResults($Data);
-
- if ($queryRes === false) {
- return array();
- }
+ $queryRes = DB::getResultsArray($Data);
$queryRes['count'] = $Data->getQueryNumRows();
diff --git a/inc/SP/Mgmt/Files/FileUtil.class.php b/inc/SP/Mgmt/Files/FileUtil.class.php
index f7305381..d4d64a24 100644
--- a/inc/SP/Mgmt/Files/FileUtil.class.php
+++ b/inc/SP/Mgmt/Files/FileUtil.class.php
@@ -63,15 +63,7 @@ class FileUtil
$Data->setQuery($query);
$Data->addParam($accountId);
- DB::setReturnArray();
-
- $queryRes = DB::getResults($Data);
-
- if ($queryRes === false) {
- return false;
- }
-
- return $queryRes;
+ return DB::getResultsArray($Data);
}
/**
diff --git a/inc/SP/Mgmt/Groups/Group.class.php b/inc/SP/Mgmt/Groups/Group.class.php
index 1c5bccdd..30a02657 100644
--- a/inc/SP/Mgmt/Groups/Group.class.php
+++ b/inc/SP/Mgmt/Groups/Group.class.php
@@ -270,8 +270,6 @@ class Group extends GroupBase implements ItemInterface, ItemSelectInterface
$Data->setMapClassName($this->getDataModel());
$Data->setQuery($query);
- DB::setReturnArray();
-
- return DB::getResults($Data);
+ return DB::getResultsArray($Data);
}
}
diff --git a/inc/SP/Mgmt/Groups/GroupAccounts.class.php b/inc/SP/Mgmt/Groups/GroupAccounts.class.php
index 0dbc5ddd..a0b82069 100644
--- a/inc/SP/Mgmt/Groups/GroupAccounts.class.php
+++ b/inc/SP/Mgmt/Groups/GroupAccounts.class.php
@@ -118,11 +118,7 @@ class GroupAccounts extends GroupAccountsBase implements ItemInterface
$Data->setQuery($query);
$Data->addParam($id);
- DB::setReturnArray();
-
- $this->itemData = DB::getResults($Data);
-
- return $this;
+ return DB::getResultsArray($Data);
}
/**
@@ -181,8 +177,6 @@ class GroupAccounts extends GroupAccountsBase implements ItemInterface
$Data->setQuery($query);
$Data->addParam($id);
- DB::setReturnArray();
-
- return DB::getResults($Data);
+ return DB::getResultsArray($Data);
}
}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Groups/GroupAccountsUtil.class.php b/inc/SP/Mgmt/Groups/GroupAccountsUtil.class.php
index 1a09a25e..90bd7393 100644
--- a/inc/SP/Mgmt/Groups/GroupAccountsUtil.class.php
+++ b/inc/SP/Mgmt/Groups/GroupAccountsUtil.class.php
@@ -59,9 +59,7 @@ class GroupAccountsUtil
$Data->setQuery($query);
$Data->addParam($accountId);
- DB::setReturnArray();
-
- return DB::getResults($Data);
+ return DB::getResultsArray($Data);
}
/**
diff --git a/inc/SP/Mgmt/Groups/GroupSearch.class.php b/inc/SP/Mgmt/Groups/GroupSearch.class.php
index 136f2f09..87cc502a 100644
--- a/inc/SP/Mgmt/Groups/GroupSearch.class.php
+++ b/inc/SP/Mgmt/Groups/GroupSearch.class.php
@@ -71,14 +71,9 @@ class GroupSearch extends GroupBase implements ItemSearchInterface
$Data->setQuery($query);
- DB::setReturnArray();
DB::setFullRowCount();
- $queryRes = DB::getResults($Data);
-
- if ($queryRes === false) {
- return array();
- }
+ $queryRes = DB::getResultsArray($Data);
$queryRes['count'] = $Data->getQueryNumRows();
diff --git a/inc/SP/Mgmt/Groups/GroupUsers.class.php b/inc/SP/Mgmt/Groups/GroupUsers.class.php
index d6af941a..37d05641 100644
--- a/inc/SP/Mgmt/Groups/GroupUsers.class.php
+++ b/inc/SP/Mgmt/Groups/GroupUsers.class.php
@@ -122,9 +122,7 @@ class GroupUsers extends GroupUsersBase implements ItemInterface, ItemSelectInte
$Data->setQuery($query);
$Data->addParam($id);
- DB::setReturnArray();
-
- return DB::getResults($Data);
+ return DB::getResultsArray($Data);
}
/**
diff --git a/inc/SP/Mgmt/Profiles/Profile.class.php b/inc/SP/Mgmt/Profiles/Profile.class.php
index 4029fbbb..ee11a4b4 100644
--- a/inc/SP/Mgmt/Profiles/Profile.class.php
+++ b/inc/SP/Mgmt/Profiles/Profile.class.php
@@ -274,9 +274,7 @@ class Profile extends ProfileBase implements ItemInterface, ItemSelectInterface
$Data->setMapClassName($this->getDataModel());
$Data->setQuery($query);
- DB::setReturnArray();
-
- return DB::getResults($Data);
+ return DB::getResultsArray($Data);
}
/**
diff --git a/inc/SP/Mgmt/Profiles/ProfileSearch.class.php b/inc/SP/Mgmt/Profiles/ProfileSearch.class.php
index 20793ad0..047756b1 100644
--- a/inc/SP/Mgmt/Profiles/ProfileSearch.class.php
+++ b/inc/SP/Mgmt/Profiles/ProfileSearch.class.php
@@ -73,14 +73,9 @@ class ProfileSearch extends ProfileBase implements ItemSearchInterface
$Data->setQuery($query);
- DB::setReturnArray();
DB::setFullRowCount();
- $queryRes = DB::getResults($Data);
-
- if ($queryRes === false) {
- return array();
- }
+ $queryRes = DB::getResultsArray($Data);
$queryRes['count'] = $Data->getQueryNumRows();
diff --git a/inc/SP/Mgmt/Profiles/ProfileUtil.class.php b/inc/SP/Mgmt/Profiles/ProfileUtil.class.php
index 9d58962c..31262ae5 100644
--- a/inc/SP/Mgmt/Profiles/ProfileUtil.class.php
+++ b/inc/SP/Mgmt/Profiles/ProfileUtil.class.php
@@ -75,11 +75,9 @@ class ProfileUtil
$Data = new QueryData();
$Data->setQuery($query);
- DB::setReturnArray();
+ $queryRes = DB::getResultsArray($Data);
- $queryRes = DB::getResults($Data);
-
- if ($queryRes === false) {
+ if (count($queryRes) === 0) {
$Log->setLogLevel(Log::ERROR);
$Log->addDescription(_('Error al obtener perfiles'));
return false;
@@ -168,8 +166,6 @@ class ProfileUtil
$Data->setQuery($query);
$Data->addParam($id);
- DB::setReturnArray();
-
- return DB::getResults($Data);
+ return DB::getResultsArray($Data);
}
}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/PublicLinks/PublicLink.class.php b/inc/SP/Mgmt/PublicLinks/PublicLink.class.php
index d881d127..3c60837b 100644
--- a/inc/SP/Mgmt/PublicLinks/PublicLink.class.php
+++ b/inc/SP/Mgmt/PublicLinks/PublicLink.class.php
@@ -96,7 +96,7 @@ class PublicLink extends PublicLinkBase implements ItemInterface
$Data->setQuery($query);
$Data->addParam(serialize($this->itemData));
$Data->addParam($this->itemData->getLinkHash());
- $Data->addParam($this->itemData->getItemId());
+ $Data->addParam($this->itemData->getPublicLinkId());
if (DB::getQuery($Data) === false) {
throw new SPException(SPException::SP_ERROR, _('Error al actualizar enlace'));
@@ -130,8 +130,8 @@ class PublicLink extends PublicLinkBase implements ItemInterface
$Data = new QueryData();
$Data->setQuery($query);
- $Data->addParam($this->itemData->getLinkHash());
- $Data->addParam($this->itemData->getItemId());
+ $Data->addParam($this->itemData->getPublicLinkHash());
+ $Data->addParam($this->itemData->getPublicLinkItemId());
$Data->addParam(serialize($this->itemData));
if (DB::getQuery($Data) === false) {
@@ -187,7 +187,7 @@ class PublicLink extends PublicLinkBase implements ItemInterface
$Log = new Log(_('Eliminar Enlace'));
$Log->addDescription(_('Enlace eliminado'));
- $Log->addDetails(Html::strongText(_('ID')), $this->itemData->getItemId());
+ $Log->addDetails(Html::strongText(_('ID')), $this->itemData->getPublicLinkId());
$Log->writeLog();
Email::sendEmail($Log);
@@ -216,8 +216,8 @@ class PublicLink extends PublicLinkBase implements ItemInterface
$Data = new QueryData();
$Data->setQuery($query);
$Data->addParam(serialize($this->itemData));
- $Data->addParam($this->itemData->getLinkHash());
- $Data->addParam($this->itemData->getItemId());
+ $Data->addParam($this->itemData->getPublicLinkHash());
+ $Data->addParam($this->itemData->getPublicLinkId());
if (DB::getQuery($Data) === false) {
throw new SPException(SPException::SP_ERROR, _('Error al renovar enlace'));
@@ -237,7 +237,7 @@ class PublicLink extends PublicLinkBase implements ItemInterface
/**
* @param $id int
- * @return PublicLinkListData
+ * @return PublicLinkData
* @throws SPException
*/
public function getById($id)
@@ -249,7 +249,7 @@ class PublicLink extends PublicLinkBase implements ItemInterface
FROM publicLinks WHERE publicLink_id = ? LIMIT 1';
$Data = new QueryData();
- $Data->setMapClassName('SP\DataModel\PublicLinkBaseData');
+ $Data->setMapClassName($this->getDataModel());
$Data->setQuery($query);
$Data->addParam($id);
@@ -269,17 +269,9 @@ class PublicLink extends PublicLinkBase implements ItemInterface
$PublicLink = Util::castToClass($this->getDataModel(), $PublicLink);
}
- $PublicLinkListData = new PublicLinkListData();
- $PublicLinkListData->setPublicLinkItemId($queryRes->getPublicLinkItemId());
- $PublicLinkListData->setAccountName(AccountUtil::getAccountNameById($PublicLink->getItemId()));
- $PublicLinkListData->setUserLogin(UserUtil::getUserLoginById($PublicLink->getUserId()));
- $PublicLinkListData->setNotify($PublicLink->isNotify() ? _('ON') : _('OFF'));
- $PublicLinkListData->setDateAdd(date('Y-m-d H:i', $PublicLink->getDateAdd()));
- $PublicLinkListData->setDateExpire(date('Y-m-d H:i', $PublicLink->getDateExpire()));
- $PublicLinkListData->setCountViews($PublicLink->getCountViews() . '/' . $PublicLink->getMaxCountViews());
- $PublicLinkListData->setUseInfo($PublicLink->getUseInfo());
+ $PublicLink->setPublicLinkId($id);
- return $PublicLinkListData;
+ return $PublicLink;
}
/**
@@ -291,20 +283,12 @@ class PublicLink extends PublicLinkBase implements ItemInterface
'SELECT publicLink_id, publicLink_hash, publicLink_linkData FROM publicLinks';
$Data = new QueryData();
- $Data->setMapClassName('SP\DataModel\PublicLinkListData');
+ $Data->setMapClassName($this->getDataModel());
$Data->setQuery($query);
- DB::setReturnArray();
-
- $queryRes = DB::getResults($Data);
-
- if ($queryRes === false) {
- return array();
- }
-
$publicLinks = [];
- foreach ($queryRes as $PublicLinkListData) {
+ foreach (DB::getResultsArray($Data) as $PublicLinkListData) {
/**
* @var PublicLinkData $PublicLinkData
* @var PublicLinkListData $PublicLinkListData
@@ -316,20 +300,36 @@ class PublicLink extends PublicLinkBase implements ItemInterface
$PublicLinkData = Util::castToClass($this->getDataModel(), $PublicLinkData);
}
- $PublicLinkListData->setAccountName(AccountUtil::getAccountNameById($PublicLinkData->getItemId()));
- $PublicLinkListData->setUserLogin(UserUtil::getUserLoginById($PublicLinkData->getUserId()));
- $PublicLinkListData->setNotify($PublicLinkData->isNotify() ? _('ON') : _('OFF'));
- $PublicLinkListData->setDateAdd(date('Y-m-d H:i', $PublicLinkData->getDateAdd()));
- $PublicLinkListData->setDateExpire(date('Y-m-d H:i', $PublicLinkData->getDateExpire()));
- $PublicLinkListData->setCountViews($PublicLinkData->getCountViews() . '/' . $PublicLinkData->getMaxCountViews());
- $PublicLinkListData->setUseInfo($PublicLinkData->getUseInfo());
+ $PublicLinkData->setPublicLinkId($PublicLinkListData->getPublicLinkId());
- $publicLinks[] = $PublicLinkListData;
+ $publicLinks[] = $this->getItemForList($PublicLinkData);
}
return $publicLinks;
}
+ /**
+ * Devuelve los datos de un enlace para mostrarlo
+ *
+ * @param PublicLinkData $PublicLinkData
+ * @return PublicLinkListData
+ */
+ public function getItemForList(PublicLinkData $PublicLinkData)
+ {
+ $PublicLinkListData = new PublicLinkListData();
+ $PublicLinkListData->setPublicLinkId($PublicLinkData->getPublicLinkId());
+ $PublicLinkListData->setPublicLinkHash($PublicLinkData->getLinkHash());
+ $PublicLinkListData->setAccountName(AccountUtil::getAccountNameById($PublicLinkData->getItemId()));
+ $PublicLinkListData->setUserLogin(UserUtil::getUserLoginById($PublicLinkData->getUserId()));
+ $PublicLinkListData->setNotify($PublicLinkData->isNotify() ? _('ON') : _('OFF'));
+ $PublicLinkListData->setDateAdd(date('Y-m-d H:i', $PublicLinkData->getDateAdd()));
+ $PublicLinkListData->setDateExpire(date('Y-m-d H:i', $PublicLinkData->getDateExpire()));
+ $PublicLinkListData->setCountViews($PublicLinkData->getCountViews() . '/' . $PublicLinkData->getMaxCountViews());
+ $PublicLinkListData->setUseInfo($PublicLinkData->getUseInfo());
+
+ return $PublicLinkListData;
+ }
+
/**
* @param $id int
* @return mixed
@@ -361,7 +361,7 @@ class PublicLink extends PublicLinkBase implements ItemInterface
FROM publicLinks WHERE publicLink_hash = ? LIMIT 1';
$Data = new QueryData();
- $Data->setMapClassName('SP\DataModel\PublicLinkBaseData');
+ $Data->setMapClassName($this->getDataModel());
$Data->setQuery($query);
$Data->addParam($hash);
@@ -381,8 +381,37 @@ class PublicLink extends PublicLinkBase implements ItemInterface
$PublicLink = Util::castToClass($this->getDataModel(), $PublicLink);
}
- $PublicLink->setItemId($queryRes->getPublicLinkItemId());
+ $PublicLink->setPublicLinkId($queryRes->getPublicLinkId());
return $PublicLink;
}
+
+ /**
+ * Devolver el hash asociado a un elemento
+ *
+ * @param int $itemId
+ * @return PublicLinkData
+ * @throws SPException
+ */
+ public function getHashForItem($itemId)
+ {
+ $query = /** @lang SQL */
+ 'SELECT publicLink_hash FROM publicLinks WHERE publicLink_itemId = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+ $Data->addParam($itemId);
+
+ $queryRes = DB::getResults($Data);
+
+ error_log(print_r($queryRes, true));
+ error_log(print_r($itemId, true));
+
+ if ($queryRes === false) {
+ throw new SPException(SPException::SP_ERROR, _('Error al obtener enlace'));
+ }
+
+ return $queryRes;
+ }
}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/PublicLinks/PublicLinkBase.class.php b/inc/SP/Mgmt/PublicLinks/PublicLinkBase.class.php
index d20bcb6b..9ee41f7d 100644
--- a/inc/SP/Mgmt/PublicLinks/PublicLinkBase.class.php
+++ b/inc/SP/Mgmt/PublicLinks/PublicLinkBase.class.php
@@ -52,9 +52,9 @@ abstract class PublicLinkBase extends ItemBase
public function __construct($itemData = null)
{
if (!$this->dataModel) {
- $this->setDataModel('SP\DataModel\PublicLinkData');
+ $this->setDataModel('SP\DataModel\PublicLinkBaseData');
}
-
+
parent::__construct($itemData);
}
@@ -88,10 +88,13 @@ abstract class PublicLinkBase extends ItemBase
*/
protected final function createLinkHash($refresh = false)
{
- if ($this->itemData->getLinkHash() === ''
- || $refresh === true
+ if ($refresh === true
+ || $this->itemData->getLinkHash() === ''
) {
- $this->itemData->setLinkHash(hash('sha256', uniqid()));
+ $hash = hash('sha256', uniqid('sysPassPublicLink', true));
+
+ $this->itemData->setPublicLinkHash($hash);
+ $this->itemData->setLinkHash($hash);
}
return $this->itemData->getLinkHash();
diff --git a/inc/SP/Mgmt/PublicLinks/PublicLinkSearch.class.php b/inc/SP/Mgmt/PublicLinks/PublicLinkSearch.class.php
index 906943ae..443f18a0 100644
--- a/inc/SP/Mgmt/PublicLinks/PublicLinkSearch.class.php
+++ b/inc/SP/Mgmt/PublicLinks/PublicLinkSearch.class.php
@@ -59,14 +59,9 @@ class PublicLinkSearch extends PublicLinkBase implements ItemSearchInterface
$Data->addParam($SearchData->getLimitStart());
$Data->addParam($SearchData->getLimitCount());
- DB::setReturnArray();
DB::setFullRowCount();
- $queryRes = DB::getResults($Data);
-
- if ($queryRes === false) {
- return array();
- }
+ $queryRes = DB::getResultsArray($Data);
$publicLinks = [];
$publicLinks['count'] = $Data->getQueryNumRows();
@@ -85,8 +80,8 @@ class PublicLinkSearch extends PublicLinkBase implements ItemSearchInterface
$PublicLinkListData->setAccountName(AccountUtil::getAccountNameById($PublicLinkData->getItemId()));
$PublicLinkListData->setUserLogin(UserUtil::getUserLoginById($PublicLinkData->getUserId()));
$PublicLinkListData->setNotify(($PublicLinkData->isNotify()) ? _('ON') : _('OFF'));
- $PublicLinkListData->setDateAdd(date("Y-m-d H:i", $PublicLinkData->getDateAdd()));
- $PublicLinkListData->setDateExpire(date("Y-m-d H:i", $PublicLinkData->getDateExpire()));
+ $PublicLinkListData->setDateAdd(date('Y-m-d H:i', $PublicLinkData->getDateAdd()));
+ $PublicLinkListData->setDateExpire(date('Y-m-d H:i', $PublicLinkData->getDateExpire()));
$PublicLinkListData->setCountViews($PublicLinkData->getCountViews() . '/' . $PublicLinkData->getMaxCountViews());
$PublicLinkListData->setUseInfo($PublicLinkData->getUseInfo());
diff --git a/inc/SP/Mgmt/Tags/Tag.class.php b/inc/SP/Mgmt/Tags/Tag.class.php
index 75cdfe93..c7ac083a 100644
--- a/inc/SP/Mgmt/Tags/Tag.class.php
+++ b/inc/SP/Mgmt/Tags/Tag.class.php
@@ -181,9 +181,7 @@ class Tag extends TagBase implements ItemInterface, ItemSelectInterface
$Data->setQuery($query);
$Data->setMapClassName($this->getDataModel());
- DB::setReturnArray();
-
- return DB::getResults($Data);
+ return DB::getResultsArray($Data);
}
/**
diff --git a/inc/SP/Mgmt/Tags/TagSearch.class.php b/inc/SP/Mgmt/Tags/TagSearch.class.php
index 69314290..6dbecff2 100644
--- a/inc/SP/Mgmt/Tags/TagSearch.class.php
+++ b/inc/SP/Mgmt/Tags/TagSearch.class.php
@@ -63,14 +63,9 @@ class TagSearch extends TagBase implements ItemSearchInterface
$Data->setQuery($query);
- DB::setReturnArray();
DB::setFullRowCount();
- $queryRes = DB::getResults($Data);
-
- if ($queryRes === false) {
- return array();
- }
+ $queryRes = DB::getResultsArray($Data);
$queryRes['count'] = $Data->getQueryNumRows();
diff --git a/inc/SP/Mgmt/Users/User.class.php b/inc/SP/Mgmt/Users/User.class.php
index 16fafd28..d7e943ab 100644
--- a/inc/SP/Mgmt/Users/User.class.php
+++ b/inc/SP/Mgmt/Users/User.class.php
@@ -297,11 +297,10 @@ class User extends UserBase implements ItemInterface, ItemSelectInterface
$Data->setMapClassName($this->getDataModel());
$Data->setQuery($query);
- DB::setReturnArray();
- $queryRes = DB::getResults($Data);
-
- if ($queryRes === false) {
+ try {
+ $queryRes = DB::getResultsArray($Data);
+ } catch (SPException $e) {
throw new SPException(SPException::SP_ERROR, _('Error al obtener los usuarios'));
}
diff --git a/inc/SP/Mgmt/Users/UserSearch.class.php b/inc/SP/Mgmt/Users/UserSearch.class.php
index 0fd32b60..9a0eefc4 100644
--- a/inc/SP/Mgmt/Users/UserSearch.class.php
+++ b/inc/SP/Mgmt/Users/UserSearch.class.php
@@ -84,14 +84,9 @@ class UserSearch extends UserBase implements ItemSearchInterface
$Data->setQuery($query);
- DB::setReturnArray();
DB::setFullRowCount();
- $queryRes = DB::getResults($Data);
-
- if ($queryRes === false) {
- return array();
- }
+ $queryRes = DB::getResultsArray($Data);
$queryRes['count'] = $Data->getQueryNumRows();
diff --git a/inc/SP/Mgmt/Users/UserUtil.class.php b/inc/SP/Mgmt/Users/UserUtil.class.php
index c4bb3d64..4fac63c2 100644
--- a/inc/SP/Mgmt/Users/UserUtil.class.php
+++ b/inc/SP/Mgmt/Users/UserUtil.class.php
@@ -140,12 +140,9 @@ class UserUtil
'SELECT user_id, user_login, user_name FROM usrData ORDER BY user_login';
$Data = new QueryData();
-// $Data->setMapClassName('\SP\DataModel\UserData');
$Data->setQuery($query);
- DB::setReturnArray();
-
- return DB::getResults($Data);
+ return DB::getResultsArray($Data);
}
}
\ No newline at end of file
diff --git a/inc/SP/Storage/DB.class.php b/inc/SP/Storage/DB.class.php
index 1d1c33ff..46e7d0e7 100644
--- a/inc/SP/Storage/DB.class.php
+++ b/inc/SP/Storage/DB.class.php
@@ -26,7 +26,7 @@
namespace SP\Storage;
use PDO;
-use SP\Config\Config;
+use PDOStatement;
use SP\Core\DiFactory;
use SP\Log\Log;
use SP\Core\Exceptions\SPException;
@@ -39,26 +39,10 @@ defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'
*/
class DB
{
- /**
- * @var string
- */
- public static $txtError = '';
- /**
- * @var int
- */
- public static $numError = 0;
/**
* @var int
*/
public static $lastId;
- /**
- * @var bool Resultado como array
- */
- private static $retArray = false;
- /**
- * @var bool Resultado como un objeto PDO
- */
- private static $returnRawData = false;
/**
* @var bool Contar el número de filas totales
*/
@@ -85,18 +69,27 @@ class DB
}
/**
- * Establecer si se devuelve un array de objetos siempre
+ * Devolver los resultados en array
+ *
+ * @param QueryData $queryData
+ * @return array
*/
- public static function setReturnArray()
+ public static function getResultsArray(QueryData $queryData)
{
- self::$retArray = true;
+ $results = self::getResults($queryData);
+
+ if ($results === false) {
+ return [];
+ }
+
+ return is_object($results) ? [$results] : $results;
}
/**
* Obtener los resultados de una consulta.
*
* @param $queryData QueryData Los datos de la consulta
- * @return bool|array devuelve bool si hay un error. Devuelve array con el array de registros devueltos
+ * @return mixed devuelve bool si hay un error. Devuelve array con el array de registros devueltos
*/
public static function getResults(QueryData $queryData)
{
@@ -107,33 +100,22 @@ class DB
try {
$db = new DB();
- $doQuery = $db->doQuery($queryData, self::$returnRawData);
- $numRows = (self::$fullRowCount === false) ? $db->numRows : $db->getFullRowCount($queryData);
- $queryData->setQueryNumRows($numRows);
+ $db->doQuery($queryData);
+
+ if (self::$fullRowCount === true) {
+ $db->getFullRowCount($queryData);
+ }
} catch (SPException $e) {
self::logDBException($queryData->getQuery(), $e->getMessage(), $e->getCode(), __FUNCTION__);
return false;
}
- if (self::$returnRawData
- && is_object($doQuery)
- && get_class($doQuery) === 'PDOStatement'
- ) {
- return $doQuery;
- } elseif ($db->numRows === 0) {
- if (self::$retArray) {
- self::resetVars();
- return [];
- } else {
- self::resetVars();
- return false;
- }
- } elseif ($db->numRows === 1 && self::$retArray === false) {
- self::resetVars();
+ self::resetVars();
+
+ if ($db->numRows === 1) {
return $db->lastResult[0];
}
- self::resetVars();
return $db->lastResult;
}
@@ -142,9 +124,7 @@ class DB
*/
private static function resetVars()
{
- self::$returnRawData = false;
self::$fullRowCount = false;
- self::$retArray = false;
}
/**
@@ -152,15 +132,15 @@ class DB
*
* @param $queryData QueryData Los datos de la consulta
* @param $getRawData bool realizar la consulta para obtener registro a registro
- * @return false|int devuelve bool si hay un error. Devuelve int con el número de registros
+ * @return bool
* @throws SPException
*/
public function doQuery(QueryData $queryData, $getRawData = false)
{
$isSelect = preg_match("/^(select|show)\s/i", $queryData->getQuery());
- // Limpiar valores de caché y errores
- $this->lastResult = array();
+ // Limpiar valores de caché
+ $this->lastResult = [];
try {
$queryRes = $this->prepareQueryData($queryData);
@@ -169,17 +149,18 @@ class DB
}
if ($isSelect) {
- if (!$getRawData) {
- $this->numFields = $queryRes->columnCount();
- $this->lastResult = $queryRes->fetchAll();
- } else {
+ if ($getRawData) {
return $queryRes;
}
-// $queryRes->closeCursor();
-
+ $this->numFields = $queryRes->columnCount();
+ $this->lastResult = $queryRes->fetchAll();
$this->numRows = count($this->lastResult);
+
+ $queryData->setQueryNumRows($this->numRows);
}
+
+ return $queryRes;
}
/**
@@ -283,11 +264,11 @@ class DB
$queryRes = $this->prepareQueryData($queryData, true);
$num = (int)$queryRes->fetchColumn();
$queryRes->closeCursor();
-
- return $num;
+ $queryData->setQueryNumRows($num);
} catch (SPException $e) {
error_log('Exception: ' . $e->getMessage());
- throw new SPException(SPException::SP_CRITICAL, $e->getMessage(), $e->getCode());
+
+ throw $e;
}
}
@@ -313,14 +294,33 @@ class DB
error_log($Log->getDetails());
}
+ /**
+ * Devolver los resultados como objeto PDOStatement
+ *
+ * @param QueryData $queryData
+ * @return PDOStatement|false
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function getResultsRaw(QueryData $queryData)
+ {
+ try {
+ $db = new DB();
+ return $db->doQuery($queryData, true);
+ } catch (SPException $e) {
+ self::logDBException($queryData->getQuery(), $e->getMessage(), $e->getCode(), __FUNCTION__);
+
+ throw $e;
+ }
+ }
+
/**
* Realizar una consulta y devolver el resultado sin datos
*
- * @param QueryData $queryData Los datos para realizar la consulta
- * @param $getRawData bool Si se deben de obtener los datos como PDOStatement
+ * @param QueryData $queryData Los datos para realizar la consulta
* @return bool
+ * @throws SPException
*/
- public static function getQuery(QueryData $queryData, $getRawData = false)
+ public static function getQuery(QueryData $queryData)
{
if ($queryData->getQuery() === '') {
return false;
@@ -328,12 +328,9 @@ class DB
try {
$db = new DB();
- $db->doQuery($queryData, $getRawData);
- $queryData->setQueryNumRows($db->numRows);
+ $db->doQuery($queryData);;
} catch (SPException $e) {
self::logDBException($queryData->getQuery(), $e->getMessage(), $e->getCode(), __FUNCTION__);
- self::$txtError = $e->getMessage();
- self::$numError = $e->getCode();
return false;
}
@@ -341,16 +338,6 @@ class DB
return true;
}
- /**
- * Establecer si se devuelven los datos obtenidos como PDOStatement
- *
- * @param bool $on
- */
- public static function setReturnRawData($on = true)
- {
- self::$returnRawData = (bool)$on;
- }
-
/**
* Establecer si es necesario contar el número total de resultados devueltos
*/
diff --git a/inc/SP/Storage/DBUtil.class.php b/inc/SP/Storage/DBUtil.class.php
index e05fc230..43401caf 100644
--- a/inc/SP/Storage/DBUtil.class.php
+++ b/inc/SP/Storage/DBUtil.class.php
@@ -64,48 +64,6 @@ class DBUtil
return false;
}
- /**
- * Obtener los datos para generar un select.
- *
- * @param $tblName string con el nombre de la tabla a cunsultar
- * @param $tblColId string con el nombre de la columna del tipo Id a mostrar
- * @param $tblColName string con el nombre de la columna del tipo Name a mostrar
- * @param $arrFilter array con las columnas a filtrar
- * @param $arrOrder array con el orden de las columnas
- * @return array con los valores del select con el Id como clave y el nombre como valor
- */
- // FIXME
- public static function getValuesForSelect($tblName, $tblColId, $tblColName, $arrFilter = NULL, $arrOrder = NULL)
- {
- if (!$tblName || !$tblColId || !$tblColName) {
- return false;
- }
-
- $strFilter = is_array($arrFilter) ? ' WHERE ' . implode(' OR ', $arrFilter) : '';
- $strOrder = is_array($arrOrder) ? ' ORDER BY ' . implode(',', $arrOrder) : 'ORDER BY ' . $tblColName . ' ASC';
-
- $query = "SELECT $tblColId, $tblColName FROM $tblName $strFilter $strOrder";
-
- $Data = new QueryData();
- $Data->setQuery($query);
-
- DB::setReturnArray();
-
- $queryRes = DB::getResults($Data);
-
- if ($queryRes === false) {
- return array();
- }
-
- $arrValues = array();
-
- foreach ($queryRes as $row) {
- $arrValues[$row->$tblColId] = $row->$tblColName;
- }
-
- return $arrValues;
- }
-
/**
* Escapar una cadena de texto con funciones de mysqli.
*
diff --git a/inc/SP/Util/ImageUtil.class.php b/inc/SP/Util/ImageUtil.class.php
index 7a5ec1d8..73139b1f 100644
--- a/inc/SP/Util/ImageUtil.class.php
+++ b/inc/SP/Util/ImageUtil.class.php
@@ -51,7 +51,11 @@ class ImageUtil
return false;
}
- $im = imagecreatetruecolor(strlen($text) * 20, 30);
+ $im = @imagecreatetruecolor(strlen($text) * 20, 30);
+
+ if ($im === false) {
+ return false;
+ }
// Colores de la imagen
$bgColor = imagecolorallocate($im, 245, 245, 245);
diff --git a/inc/themes/material-blue/css/styles.css b/inc/themes/material-blue/css/styles.css
index ce4f73c0..1776cb4c 100644
--- a/inc/themes/material-blue/css/styles.css
+++ b/inc/themes/material-blue/css/styles.css
@@ -637,10 +637,6 @@ pre, code, samp, kbd {
width: 15em;
}
-#content .data-rows li.cell-actions:hover {
- background-color: #fffef0 !important
-}
-
#content .data-rows li.cell-nodata img, #content .data-rows li.cell-actions img, #content #data-search .account-info img, #content #data-search .account-actions img {
width: 24px;
height: 24px;
diff --git a/inc/themes/material-blue/css/styles.min.css b/inc/themes/material-blue/css/styles.min.css
index 2a002ebe..b34805b8 100644
--- a/inc/themes/material-blue/css/styles.min.css
+++ b/inc/themes/material-blue/css/styles.min.css
@@ -1 +1 @@
-html,body{margin:0;padding:0;text-align:left;background-color:#f5f5f5;color:#555;font-size:12px;font-weight:normal;box-sizing:border-box}*{font-family:Roboto-Regular,Verdana,Tahoma,sans-serif}*,*:before,*:after{box-sizing:inherit}table{font-size:11px;border-spacing:0}#searchbox,#tblAccion{border:1px solid #d9d9d9;background-color:#f9f9f9;background-color:rgba(249,249,249,.5);vertical-align:middle}table th{border-bottom:2px solid transparent;vertical-align:middle}table th .icon{width:24px;height:24px}table tr.odd{background-color:#f9f9f9}table tr.even>td,table tr.odd>td{border-bottom:1px solid #d9d9d9!important}table tr.even:hover{background-color:#e8ff99}table tr.odd:hover{background-color:#e8ff99}table tr{height:20px}table td{padding:3px}table td.txtCliente{font-weight:bold;text-align:center}form{font-size:11px;border:0 solid #5dd;margin:0}input.inputImg,img.inputImg{background-color:transparent!important;width:24px!important;height:24px!important;border:0;vertical-align:middle;margin:0 .5em}input.txtFile{width:200px}input.txtLong{width:300px}textarea{width:350px;resize:none}select.files{width:250px}input.spinner{width:5em}img{margin:0;padding:0;border:0;cursor:pointer}img.inputImgMini{background-color:transparent!important;width:16px!important;height:16px!important;margin:0 5px 0 5px;border:0;vertical-align:middle}i{cursor:pointer}.altTable{border:0;font-size:10px}.altTable .section{font-size:14px;font-weight:bold}a,a:visited{text-decoration:none;color:rgba(83,109,254,1)}a:hover,a:active,a:focus{text-decoration:none;color:rgba(83,109,254,.6);cursor:pointer}#nojs{width:80%;text-align:center;vertical-align:middle;margin:10px auto;padding:3px;background-color:red;color:white;font-weight:bold;font-size:14px}pre,code,samp,kbd{font-family:Consolas,"Andale Mono WT","Andale Mono","Bitstream Vera Sans Mono","Nimbus Mono L",Monaco,"Courier New",monospace;font-size:1em;direction:ltr;text-align:left;background-color:#fbfaf9;color:#333;box-shadow:inset 0 0 .3em #ccc;border-radius:2px}#wrap{height:auto!important;min-height:100%;width:100%;background-color:#f5f5f5}#wrap-loading{position:fixed;z-index:9999;top:50%;left:50%;padding:1em;background-color:rgba(255,255,255,.8);border-radius:5px;display:none}#container{margin:auto;width:100%}#container.login{padding-top:10em}#container.main{position:absolute;top:0;width:100%;height:auto;background:url("../imgs/logo_full.svg") no-repeat left top transparent;background-size:auto 150px}#container.error,#container.install,#container.passreset{width:100%}#container #header{width:100%;margin-bottom:15px}#container #actions-bar{z-index:100;display:flex;justify-content:space-between;position:fixed;border:0 none;top:0;left:0;width:100%;padding:1em 0;background-color:transparent}#container #actions-bar-icons{flex-grow:1;text-align:center}#container #actions-bar-logo{display:none;padding:0 .5em}#container #actions-bar-logo img{display:inline-block;width:50px;opacity:.75}#container #content{width:95%;margin:10em auto 5em auto}#container #content.public-link{min-height:0;margin:0}#content td.descField,#fancyContainer td.descField{text-align:right;padding-right:20px;width:25%;font-weight:bold;border-right:1px solid #d9d9d9;color:#555}#content td.valField,#fancyContainer td.valField{padding-left:20px;width:100%}#content #resBuscar{margin-bottom:50px}#content #resBuscar img{vertical-align:middle}#content #pageNav{width:100%;margin-top:15px;padding:.5em;vertical-align:middle;font-size:11px;color:#999;border:1px solid #d9d9d9;background-color:#f5f5f5}#content #pageNav img{margin-left:5px;vertical-align:middle}#content #pageNav a{margin-left:5px;font-size:12px;color:#999}#content #pageNav .current{margin-left:5px;color:darkorange}#content #pageNav>div{display:inline-block;width:49%}#content #pageNav #pageNavLeft{text-align:left}#content #pageNav #pageNavRight{text-align:right}#content #title{width:50%;padding:7px;margin:auto;background-color:#d9d9d9;color:#fff;font-size:17px;letter-spacing:.3em;text-align:center}#content #title.titleBlue{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 #title.titleNormal{background-color:#607d8b;color:#fff}#content .data{width:75%;padding:10px;border:1px solid #c9c9c9;margin:auto;background-color:#f9f9f9}#content .data #history-icon{position:relative;top:5em;right:2em}#content .data td{text-align:left}#content .data td.descField{text-align:right;font-size:12px;font-weight:bold;color:#999}#content .data select{min-width:210px}#content .data #files-wrap{max-height:100px;width:95%;overflow-y:auto;padding:.5em;margin:1em 0}#content .data #files-list{list-style-type:none;margin:0;padding:0}#content .data #files-list li{background:#f2f2f2;padding:.5em;font-size:1em;margin-bottom:5px}#content .data #files-list li:hover{background:#fffccd;color:#000}#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{width:30em;padding:1em;border:2px dashed #009688;text-align:center}#content .data .dropzone img{vertical-align:middle}#content .data .file-upload{display:none}#content .data .account-permissions{width:100%}#content .data .account-permissions fieldset{border:1px solid #c9c9c9;padding:1em}#content .data .account-permissions legend{font-weight:bold;color:#999;padding:.2em 0}#content .data .account-permissions fieldset>span{font-weight:bold;color:#999;padding:.2em 0;display:inline-block;width:100px;text-align:right}#content span.tag{margin:0 3px 3px 0;padding:.2em;background:#5c6bc0;color:#fff;border:0 solid rgba(0,0,0,0);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}#content .extra-info{margin-top:20px}#content .tblIcon{background:url("../imgs/clock.png") no-repeat transparent}#content #tabs .ui-tabs-nav{position:relative;left:12em;width:90%}#content #tabs fieldset{border:1px solid #c9c9c9}#content #tabs #frmConfig label{float:left}#content .tblConfig{margin-bottom:2em}#content .tblConfig td.descField{width:35%;font-size:11px;font-weight:bold}#content .tblConfig td.rowHeader{padding:5px 0 5px 0;background-color:#f5f5f5;text-align:center;font-weight:bold;border-top:15px solid #f9f9f9;border-bottom:3px solid #a9c1d7;letter-spacing:.5em;color:#696969}#content .tblConfig input.checkbox{width:15px;text-align:left;padding:0}#content .tblConfig .option-disabled{text-align:center;background-color:#fff2d9;color:orange;font-weight:bold}#content #tblAccion{width:100%}#content h2{width:100%;height:1.5em;font-size:18px;color:white;background-color:#a9c1d7;margin:0;padding-top:.1em}#content .section{margin-top:2.5em;border-bottom:1px solid #d9d9d9;text-align:left;font-size:14px;font-weight:bold;color:#045fb4}#content .row_even>td{background-color:#f5f5f5}#content .row_odd>td{background-color:white}#content .data-header ul{list-style:none;width:100%;margin:0 0 10px 0;padding:0}#content .data-header li{display:inline-block;padding:.2em .5em;font-weight:bold;letter-spacing:.2em;color:#fff;text-align:center}#content .data-header li a{color:#777}#content .data-header li img{float:right;width:24px;height:24px;vertical-align:middle}#content .data-header-minimal{border-bottom:1px solid #dfdfdf}#content .data-header-minimal ul{display:flex;flex-wrap:wrap;justify-content:flex-start;margin:0}#content .data-header-minimal li{display:inline-flex;min-width:10em;font-weight:normal;letter-spacing:normal}#content .data-header-minimal li a{color:#b9b9b9;padding:.3em .8em}#content .data-rows ul{display:table;list-style:none;width:100%;margin:0 0 10px 0;padding:0;background-color:#fcfcfc}#content .data-rows li{float:left;display:block;padding:1em;color:#696969;text-align:center;min-height:2em}#content .data-rows li.cell-nodata{padding:1em 0;min-height:2em;text-align:left}#content .data-rows li.cell-actions{float:right;min-height:2em;padding:1em 0;text-align:center;background-color:#fcfcfc;width:15em}#content .data-rows li.cell-actions:hover{background-color:#fffef0!important}#content .data-rows li.cell-nodata img,#content .data-rows li.cell-actions img,#content #data-search .account-info img,#content #data-search .account-actions img{width:24px;height:24px;margin:0 .5em}#content .rowSpace>.cellBorder{height:10px;border-top:1px solid #d9d9d9}#content .rowSpace>.cellBlank{height:10px}#content #resEventLog .data{width:100%}#content #resEventLog thead{text-align:center}#content #resEventLog tbody{width:100%;height:500px;overflow:auto}#content #resEventLog td{border-bottom:1px solid #d9d9d9}#content #resEventLog .cell{text-align:center}#content #resEventLog .cell-description{width:60%}#content #searchbox{position:relative;left:8%;width:91%;height:auto;padding:0 1em}#content #searchbox form{display:flex;justify-content:flex-start;align-items:center;text-align:left}#content #searchbox .search-filters>*{margin:0 .5em}#content #searchbox .search-filters .filter-buttons{display:inline-block}#content #searchbox div.chosen-container{margin:0 .2em}#content #searchbox select{min-width:15em}#content .btn-clear{opacity:.35;filter:alpha(opacity=35)}#content .btn-clear:hover{opacity:1;filter:alpha(opacity=100)}#content #tabs.ui-widget-content{border:0;background-color:transparent}#content #tabs .ui-widget-header{background:0;border:0;border-bottom:1px solid #c9c9c9}#content #tabs.ui-widget-content{background:none!important}#content #tabs .tabs-spacer{float:left;height:200px}#content .tabs-bottom .ui-tabs-nav{clear:left;padding:0 .2em .2em .2em}#content .tabs-bottom .ui-tabs-nav li{top:auto;bottom:0;margin:0 .2em 1px 0;border-top:0}#content .tabs-bottom .ui-tabs-nav li.ui-tabs-active{margin-top:-1px;padding-top:1px}#datos{float:left;width:400px;text-align:left;margin-top:10px;color:#b9b9b9}#datos a{color:orange;font-weight:bold;border:0;padding:3px;margin:5px 0 5px 0;display:block;width:40px;text-align:center;background-color:transparent}#datos img{border:0}#resAccion,#resFancyAccion{height:20px;padding:5px;margin:5px;font-weight:bold;font-size:14px}#resAccion span{padding:5px;border:#a9a9a9 1px solid}#fancyView{min-width:250px;text-align:center;padding:15px;line-height:20px;border:#d9d9d9 1px solid;font-size:14px}#fancyView ul{list-style:none}#fancyView.msgError{margin:5px;background-color:#fee8e6;color:#c00;font-weight:bold;border:#fed2ce 1px solid}#fancyView.msgOk{margin:5px;background-color:#ecfde4;color:green;font-weight:bold;border:#dbfdcb 1px solid}#fancyView.msgWarn{margin:5px;background-color:#fff2d9;color:orange;font-weight:bold;border:#ffe5b3 1px solid}#fancyView.msgInfo{margin:5px;background-color:#e9e9e9;color:orange;font-weight:bold;border:#ffe5b3 1px solid}#fancyView.backGrey{background-color:#f2f2f2!important}#fancyView PRE{text-align:left}#fancyView table{border:0;width:100%;font-size:14px;text-align:left}#fancyView td{border-bottom:#d9d9d9 1px solid}#fancyMsg{min-width:250px;height:150px;background-color:#f5f5f5;font-family:Verdana,Arial;font-size:16px;text-align:center;display:table-cell;vertical-align:middle;font-weight:bold;border:0;line-height:20px;padding:0 15px;border-radius:25px;-moz-border-radius:25px;-webkit-border-radius:25px}#fancyMsg table{border:0;width:100%;font-size:14px;text-align:left}#fancyMsg td{border-bottom:#d9d9d9 1px solid}#fancyMsg.msgError{background:url('../imgs/bg_msg_error.png') white repeat-x;color:#c00}#fancyMsg.msgOk{background:url('../imgs/bg_msg_ok.png') white repeat-x;color:green}#fancyMsg.msgWarn{background:url('../imgs/bg_msg_warn.png') white repeat-x;color:orange}#fancyMsg.msgInfo{background:url('../imgs/bg_msg_info.png') white repeat-x;color:#555}#fancyView a,#fancyMsg a{color:#555}#fancyContainer{padding:0}#fancyContainer>h2{width:100%;font-size:18px;color:white;background-color:#607d8b;margin:0 0 1em 0;padding:.5em 0;line-height:1em}#fancyContainer select{width:220px}#fancyContainer.help{min-height:100px;background-color:#f5f5f5}#fancyContainer.help p{font-size:14px;text-align:justify;line-height:2em}#fancyContainer #resFancyAccion{display:none}#fancyContainer #resCheck{display:inline-block;width:80%;height:4em;padding:1em 0}#debug{float:left;text-align:left}#debuginfo{width:100%;min-height:10em;padding:1em;background-color:lightgoldenrodyellow;text-align:left;line-height:1.5em}#debuginfo H3{text-align:center}.fancyNone{background-color:transparent!important}.fancydata{min-width:400px;border:0;text-align:left;margin:0 .5em}.fancydata .descField{min-width:100px;font-weight:bold}footer{display:flex;justify-content:space-between;position:fixed;bottom:0;z-index:100;width:100%;padding:.5em 0;background-color:#f5f5f5;color:#b9b9b9;font-size:1em;box-shadow:0 -8px 6px -6px #c9c9c9;-webkit-box-shadow:0 -8px 6px -6px #c9c9c9;-moz-box-shadow:0 -8px 6px -6px #c9c9c9}footer,footer .footer-parts{display:flex;justify-content:space-between}footer #footer-left,footer #footer-right{width:50%;margin:0 1em}footer #footer-right{justify-content:flex-end;text-align:right}footer #updates{min-width:10em;text-align:center;cursor:pointer}footer #status{margin:0 1em}footer #status>div{display:inline-block}footer #status .status-info{padding:.5em}footer #session{text-align:left;color:#999;font-size:.8em}footer a,footer a:visited{color:#b9b9b9}footer #project a:hover{color:#a9c1d7;border-bottom:1px solid #a9c1d7}footer #updates a:hover{color:#a9c1d7}footer img{border:0;width:16px;height:16px;vertical-align:middle}.round{border-radius:5px!important;-moz-border-radius:5px!important;-webkit-border-radius:5px!important}.round5{border-radius:5px!important;-moz-border-radius:5px!important;-webkit-border-radius:5px!important}.midround{border-radius:0 0 10px 10px!important;-moz-border-radius:0 0 10px 10px!important;-webkit-border-radius:0 0 10px 10px!important}.midroundup{border-radius:10px 10px 0 0!important;-moz-border-radius:10px 10px 0 0!important;-webkit-border-radius:10px 10px 0 0!important}.fullround{border-radius:50%!important;-moz-border-radius:50%!important;-webkit-border-radius:50%!important}.iconMini{width:16px!important;height:16px!important;vertical-align:middle}#content .error{width:350px;margin:15px;padding:15px;background-color:#f9f9f9;color:orange;border:orange 1px solid;margin:0 auto;text-align:center;font-size:16px;line-height:1.5em}.hide{display:none!important}.btn-checks{padding:5px;margin:.2em 0;width:30em;border-bottom:1px solid #c9c9c9}.shadow{box-shadow:1px 1px 2px #d9d9d9}.noRes{width:60%;margin:15px;padding:15px;background-color:#f9f9f9;color:#a9a9a9;border:#c9c9c9 1px solid;margin:20px auto;text-align:center;font-size:16px}.header-blue{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:#607d8b;color:#fff;min-height:2em}.no-background{background:none!important}.action{max-width:75%;height:4em;margin:.7em auto;text-align:right}.action-in-box{display:inline-block;height:4em;margin:.7em 0;text-align:right}.action ul{list-style:none;margin:0;padding:0;padding-right:2em}.action-in-box ul{list-style:none;margin:0;padding:0}.action li{display:inline-block;width:2em;height:2em;margin-left:3em}.action li img,.action-in-box li img{padding:1em;border:1px solid #d9d9d9;border-radius:3em;background-color:#f9f9f9!important}.fullWidth{max-width:100%!important}.filterOn{padding:.3em 1em;background-color:#ecfde4;color:green!important;border:#dbfdcb 1px solid!important}.globalOn{padding:.3em 1em;background-color:#fff2d9;color:orange!important;border:#ffe5b3 1px solid!important}.opacity50{filter:alpha(opacity=50);-moz-opacity:.5;-khtml-opacity:.5;opacity:.5}.custom-combobox{position:relative;display:inline-block}.custom-combobox input{width:80%}.custom-combobox-toggle{position:absolute;top:0;bottom:0;margin-left:-1px;padding:0;*height:1.7em;*top:.1em}.custom-combobox-input{margin:0;padding:.3em}.ui-tooltip{background:#ffffa3;color:#555;padding:10px;border-radius:10px;box-shadow:0 0 7px #a9a9a9}.ui-autocomplete,.ui-menu-item{z-index:8050}.fancybox-inner{overflow:visible!important}.passLevel{width:20px;height:20px;display:inline-block;position:relative;top:2px}.passLevel.strongest,.passLevel.strongest:hover{background-color:#ecfde4!important;color:green;font-weight:bold;border:lightgreen 1px solid}.passLevel.strong,.passLevel.strong:hover{background-color:#e6f2ff!important;color:#64b4f4;font-weight:bold;border:#64b4f4 1px solid}.passLevel.good,.passLevel.good:hover{background-color:#fff2d9!important;color:orange;font-weight:bold;border:#ffe5b3 1px solid}.passLevel.weak,.passLevel.weak:hover{background-color:#fee8e6!important;color:#c00;font-weight:bold;border:#fed2ce 1px solid}#alert #alert-text{margin:15px auto;font-size:14px;font-weight:bold}#alert #alert-pass{width:50%;padding:10px;margin:15px auto;border:1px solid #c9c9c9;color:#555;font-weight:bold}.dialog-user-text{padding:.5em;border-bottom:#d9d9d9 1px solid;text-align:center;min-width:200px;color:#d9d9d9}.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:#607d8b}.help-box>*{font-weight:bold}.help-text{text-align:justify;line-height:1.5em;margin-top:1em}.tooltip{width:300px;max-width:300px;background-color:#777;color:#fff;z-index:101}.cursor-pointer{cursor:pointer}.password-actions{display:inline-block;width:12em}.password-actions>span,.password-actions i{margin-right:.6em}.custom-input-color{width:3em;height:1em;display:inline-block}.account-pass-image{height:32px;width:auto}.select-box{width:20em}#boxLogin{width:45em;min-height:150px;margin:0 auto;padding:1em;background:url("../imgs/logo_full.svg") no-repeat #fff;background-size:300px auto;background-position:.5em .5em}#boxLogin .error{float:left;width:315px;margin-top:15px;color:orange;border:1px orange solid;margin-left:auto;margin-right:auto}#boxLogin #boxData,#boxLogin #boxButton{margin-top:7em}#boxLogin #boxData{display:inline-block;width:250px;height:100%;min-height:100px;text-align:left;margin-left:13em;background-color:transparent}#boxLogin #boxButton{display:inline-block;text-align:right;margin-left:2em}#boxLogin #boxActions{width:100%;height:1em;margin-top:1em;text-align:right}#boxLogin #boxActions a{color:#c9c9c9}#boxLogout{width:250px;margin:8em auto 0 auto;font-size:14px;text-align:center;color:orange;background:#fff2d9;border:#ffe5b3 1px solid;padding:.5em}#boxUpdated{width:350px;margin:5em auto 5em auto;font-size:14px;text-align:center;color:green;background:#ecfde4;border:#dbfdcb 1px solid;padding:.5em}fieldset.warning{padding:8px;color:#b94a48;background-color:#f2dede;border:1px solid #eed3d7;border-radius:5px}fieldset.warning legend{color:#b94a48!important}fieldset.warning a{color:#b94a48!important;font-weight:bold}#actions{width:100%;margin:auto auto 50px;line-height:2em}#actions #logo{display:flex;width:100%;margin-bottom:30px;color:#607d8b;box-shadow:0 8px 6px -6px rgba(83,109,254,.3);-webkit-box-shadow:0 8px 6px -6px rgba(83,109,254,.3);-moz-box-shadow:0 8px 6px -6px rgba(83,109,254,.3);align-items:center;background:url("../imgs/logo_full.svg") left no-repeat;background-size:auto 150px;height:150px}#actions #logo #pageDesc{color:#607d8b;align-self:auto;flex:1 0 auto;text-align:center}#actions #logo #pageDesc h1{font-weight:bold;font-size:24px;letter-spacing:3px}#actions ul.errors{max-width:40%;margin:0 auto;list-style:none;font-size:14px;text-align:left}#actions ul.errors>li{margin:1.5em auto;border-radius:5px;padding:.5em}#actions ul.errors>li.err_critical{color:#b94a48;background:#fed7d7;border:1px solid red}#actions ul.errors>li.err_warning{color:orange;background:#fff2d9;border:#ffe5b3 1px solid}#actions ul.errors>li.err_ok{color:green;background:#ecfde4;border:#dbfdcb 1px solid;font-weight:bold}#actions ul.errors>li>p.hint{background-image:url('../imgs/info.png');background-repeat:no-repeat;color:#777;padding-left:25px;background-position:0 .3em;font-size:12px}#actions form{width:450px;margin:0 auto;text-align:left}#actions form fieldset legend{width:100%;margin-top:1em;color:#fff;font-size:14px;font-weight:bold;text-align:center;background-color:#607d8b;margin-bottom:1em;border-radius:5px;letter-spacing:.2em;padding:.2em 0}#actions div.buttons{margin-top:2em;text-align:center}#whatsNewIcon{text-align:center}#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;padding:2em;line-height:1.5em;font-size:16px;color:#555;border:1px solid #d9d9d9;margin-bottom:3em;display:none}#whatsNew ul{padding:0;border:0}#whatsNew li{padding-left:37px;background:url("../imgs/arrow-list.png") left center no-repeat;line-height:32px;list-style:none}.no-title .ui-dialog-titlebar{display:none}.ui-dialog{z-index:9999!important}@media screen and (max-width:1000px){#content #searchbox{position:relative;left:0;width:100%}#content #searchbox form{flex-wrap:wrap}#content #searchbox form>div{width:100%}#content #searchbox input[type=text]{width:100%}footer,footer .footer-parts{justify-content:space-between;flex-wrap:wrap}footer #footer-left,footer #footer-right,footer .footer-parts>div{width:100%}footer .footer-parts>div{padding:.5em 0}}
\ No newline at end of file
+html,body{margin:0;padding:0;text-align:left;background-color:#f5f5f5;color:#555;font-size:12px;font-weight:normal;box-sizing:border-box}*{font-family:Roboto-Regular,Verdana,Tahoma,sans-serif}*,*:before,*:after{box-sizing:inherit}table{font-size:11px;border-spacing:0}#searchbox,#tblAccion{border:1px solid #d9d9d9;background-color:#f9f9f9;background-color:rgba(249,249,249,.5);vertical-align:middle}table th{border-bottom:2px solid transparent;vertical-align:middle}table th .icon{width:24px;height:24px}table tr.odd{background-color:#f9f9f9}table tr.even>td,table tr.odd>td{border-bottom:1px solid #d9d9d9 !important}table tr.even:hover{background-color:#e8ff99}table tr.odd:hover{background-color:#e8ff99}table tr{height:20px}table td{padding:3px}table td.txtCliente{font-weight:bold;text-align:center}form{font-size:11px;border:0 solid #5dd;margin:0}input.inputImg,img.inputImg{background-color:transparent !important;width:24px !important;height:24px !important;border:0;vertical-align:middle;margin:0 .5em}input.txtFile{width:200px}input.txtLong{width:300px}textarea{width:350px;resize:none}select.files{width:250px}input.spinner{width:5em}img{margin:0;padding:0;border:0;cursor:pointer}img.inputImgMini{background-color:transparent !important;width:16px !important;height:16px !important;margin:0 5px 0 5px;border:0;vertical-align:middle}i{cursor:pointer}.altTable{border:0;font-size:10px}.altTable .section{font-size:14px;font-weight:bold}a,a:visited{text-decoration:none;color:rgba(83,109,254,1)}a:hover,a:active,a:focus{text-decoration:none;color:rgba(83,109,254,.6);cursor:pointer}#nojs{width:80%;text-align:center;vertical-align:middle;margin:10px auto;padding:3px;background-color:red;color:white;font-weight:bold;font-size:14px}pre,code,samp,kbd{font-family:Consolas,"Andale Mono WT","Andale Mono","Bitstream Vera Sans Mono","Nimbus Mono L",Monaco,"Courier New",monospace;font-size:1em;direction:ltr;text-align:left;background-color:#fbfaf9;color:#333;box-shadow:inset 0 0 .3em #ccc;border-radius:2px}#wrap{height:auto !important;min-height:100%;width:100%;background-color:#f5f5f5}#wrap-loading{position:fixed;z-index:9999;top:50%;left:50%;padding:1em;background-color:rgba(255,255,255,.8);border-radius:5px;display:none}#container{margin:auto;width:100%}#container.login{padding-top:10em}#container.main{position:absolute;top:0;width:100%;height:auto;background:url("../imgs/logo_full.svg") no-repeat left top transparent;background-size:auto 150px}#container.error,#container.install,#container.passreset{width:100%}#container #header{width:100%;margin-bottom:15px}#container #actions-bar{z-index:100;display:flex;justify-content:space-between;position:fixed;border:0 none;top:0;left:0;width:100%;padding:1em 0;background-color:transparent}#container #actions-bar-icons{flex-grow:1;text-align:center}#container #actions-bar-logo{display:none;padding:0 .5em}#container #actions-bar-logo img{display:inline-block;width:50px;opacity:.75}#container #content{width:95%;margin:10em auto 5em auto}#container #content.public-link{min-height:0;margin:0}#content td.descField,#fancyContainer td.descField{text-align:right;padding-right:20px;width:25%;font-weight:bold;border-right:1px solid #d9d9d9;color:#555}#content td.valField,#fancyContainer td.valField{padding-left:20px;width:100%}#content #resBuscar{margin-bottom:50px}#content #resBuscar img{vertical-align:middle}#content #pageNav{width:100%;margin-top:15px;padding:.5em;vertical-align:middle;font-size:11px;color:#999;border:1px solid #d9d9d9;background-color:#f5f5f5}#content #pageNav img{margin-left:5px;vertical-align:middle}#content #pageNav a{margin-left:5px;font-size:12px;color:#999}#content #pageNav .current{margin-left:5px;color:darkorange}#content #pageNav>div{display:inline-block;width:49%}#content #pageNav #pageNavLeft{text-align:left}#content #pageNav #pageNavRight{text-align:right}#content #title{width:50%;padding:7px;margin:auto;background-color:#d9d9d9;color:#fff;font-size:17px;letter-spacing:.3em;text-align:center}#content #title.titleBlue{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 #title.titleNormal{background-color:#607d8b;color:#fff}#content .data{width:75%;padding:10px;border:1px solid #c9c9c9;margin:auto;background-color:#f9f9f9}#content .data #history-icon{position:relative;top:5em;right:2em}#content .data td{text-align:left}#content .data td.descField{text-align:right;font-size:12px;font-weight:bold;color:#999}#content .data select{min-width:210px}#content .data #files-wrap{max-height:100px;width:95%;overflow-y:auto;padding:.5em;margin:1em 0}#content .data #files-list{list-style-type:none;margin:0;padding:0}#content .data #files-list li{background:#f2f2f2;padding:.5em;font-size:1em;margin-bottom:5px}#content .data #files-list li:hover{background:#fffccd;color:#000}#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{width:30em;padding:1em;border:2px dashed #009688;text-align:center}#content .data .dropzone img{vertical-align:middle}#content .data .file-upload{display:none}#content .data .account-permissions{width:100%}#content .data .account-permissions fieldset{border:1px solid #c9c9c9;padding:1em}#content .data .account-permissions legend{font-weight:bold;color:#999;padding:.2em 0}#content .data .account-permissions fieldset>span{font-weight:bold;color:#999;padding:.2em 0;display:inline-block;width:100px;text-align:right}#content span.tag{margin:0 3px 3px 0;padding:.2em;background:#5c6bc0;color:#fff;border:0 solid rgba(0,0,0,0);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}#content .extra-info{margin-top:20px}#content .tblIcon{background:url("../imgs/clock.png") no-repeat transparent}#content #tabs .ui-tabs-nav{position:relative;left:12em;width:90%}#content #tabs fieldset{border:1px solid #c9c9c9}#content #tabs #frmConfig label{float:left}#content .tblConfig{margin-bottom:2em}#content .tblConfig td.descField{width:35%;font-size:11px;font-weight:bold}#content .tblConfig td.rowHeader{padding:5px 0 5px 0;background-color:#f5f5f5;text-align:center;font-weight:bold;border-top:15px solid #f9f9f9;border-bottom:3px solid #a9c1d7;letter-spacing:.5em;color:#696969}#content .tblConfig input.checkbox{width:15px;text-align:left;padding:0}#content .tblConfig .option-disabled{text-align:center;background-color:#fff2d9;color:orange;font-weight:bold}#content #tblAccion{width:100%}#content h2{width:100%;height:1.5em;font-size:18px;color:white;background-color:#a9c1d7;margin:0;padding-top:.1em}#content .section{margin-top:2.5em;border-bottom:1px solid #d9d9d9;text-align:left;font-size:14px;font-weight:bold;color:#045fb4}#content .row_even>td{background-color:#f5f5f5}#content .row_odd>td{background-color:white}#content .data-header ul{list-style:none;width:100%;margin:0 0 10px 0;padding:0}#content .data-header li{display:inline-block;padding:.2em .5em;font-weight:bold;letter-spacing:.2em;color:#fff;text-align:center}#content .data-header li a{color:#777}#content .data-header li img{float:right;width:24px;height:24px;vertical-align:middle}#content .data-header-minimal{border-bottom:1px solid #dfdfdf}#content .data-header-minimal ul{display:flex;flex-wrap:wrap;justify-content:flex-start;margin:0}#content .data-header-minimal li{display:inline-flex;min-width:10em;font-weight:normal;letter-spacing:normal}#content .data-header-minimal li a{color:#b9b9b9;padding:.3em .8em}#content .data-rows ul{display:table;list-style:none;width:100%;margin:0 0 10px 0;padding:0;background-color:#fcfcfc}#content .data-rows li{float:left;display:block;padding:1em;color:#696969;text-align:center;min-height:2em}#content .data-rows li.cell-nodata{padding:1em 0;min-height:2em;text-align:left}#content .data-rows li.cell-actions{float:right;min-height:2em;padding:1em 0;text-align:center;background-color:#fcfcfc;width:15em}#content .data-rows li.cell-nodata img,#content .data-rows li.cell-actions img,#content #data-search .account-info img,#content #data-search .account-actions img{width:24px;height:24px;margin:0 .5em}#content .rowSpace>.cellBorder{height:10px;border-top:1px solid #d9d9d9}#content .rowSpace>.cellBlank{height:10px}#content #resEventLog .data{width:100%}#content #resEventLog thead{text-align:center}#content #resEventLog tbody{width:100%;height:500px;overflow:auto}#content #resEventLog td{border-bottom:1px solid #d9d9d9}#content #resEventLog .cell{text-align:center}#content #resEventLog .cell-description{width:60%}#content #searchbox{position:relative;left:8%;width:91%;height:auto;padding:0 1em}#content #searchbox form{display:flex;justify-content:flex-start;align-items:center;text-align:left}#content #searchbox .search-filters>*{margin:0 .5em}#content #searchbox .search-filters .filter-buttons{display:inline-block}#content #searchbox div.chosen-container{margin:0 .2em}#content #searchbox select{min-width:15em}#content .btn-clear{opacity:.35;filter:alpha(opacity=35)}#content .btn-clear:hover{opacity:1;filter:alpha(opacity=100)}#content #tabs.ui-widget-content{border:0;background-color:transparent}#content #tabs .ui-widget-header{background:0;border:0;border-bottom:1px solid #c9c9c9}#content #tabs.ui-widget-content{background:none !important}#content #tabs .tabs-spacer{float:left;height:200px}#content .tabs-bottom .ui-tabs-nav{clear:left;padding:0 .2em .2em .2em}#content .tabs-bottom .ui-tabs-nav li{top:auto;bottom:0;margin:0 .2em 1px 0;border-top:0}#content .tabs-bottom .ui-tabs-nav li.ui-tabs-active{margin-top:-1px;padding-top:1px}#datos{float:left;width:400px;text-align:left;margin-top:10px;color:#b9b9b9}#datos a{color:orange;font-weight:bold;border:0;padding:3px;margin:5px 0 5px 0;display:block;width:40px;text-align:center;background-color:transparent}#datos img{border:0}#resAccion,#resFancyAccion{height:20px;padding:5px;margin:5px;font-weight:bold;font-size:14px}#resAccion span{padding:5px;border:#a9a9a9 1px solid}#fancyView{min-width:250px;text-align:center;padding:15px;line-height:20px;border:#d9d9d9 1px solid;font-size:14px}#fancyView ul{list-style:none}#fancyView.msgError{margin:5px;background-color:#fee8e6;color:#c00;font-weight:bold;border:#fed2ce 1px solid}#fancyView.msgOk{margin:5px;background-color:#ecfde4;color:green;font-weight:bold;border:#dbfdcb 1px solid}#fancyView.msgWarn{margin:5px;background-color:#fff2d9;color:orange;font-weight:bold;border:#ffe5b3 1px solid}#fancyView.msgInfo{margin:5px;background-color:#e9e9e9;color:orange;font-weight:bold;border:#ffe5b3 1px solid}#fancyView.backGrey{background-color:#f2f2f2 !important}#fancyView PRE{text-align:left}#fancyView table{border:0;width:100%;font-size:14px;text-align:left}#fancyView td{border-bottom:#d9d9d9 1px solid}#fancyMsg{min-width:250px;height:150px;background-color:#f5f5f5;font-family:Verdana,Arial;font-size:16px;text-align:center;display:table-cell;vertical-align:middle;font-weight:bold;border:0;line-height:20px;padding:0 15px;border-radius:25px;-moz-border-radius:25px;-webkit-border-radius:25px}#fancyMsg table{border:0;width:100%;font-size:14px;text-align:left}#fancyMsg td{border-bottom:#d9d9d9 1px solid}#fancyMsg.msgError{background:url('../imgs/bg_msg_error.png') white repeat-x;color:#c00}#fancyMsg.msgOk{background:url('../imgs/bg_msg_ok.png') white repeat-x;color:green}#fancyMsg.msgWarn{background:url('../imgs/bg_msg_warn.png') white repeat-x;color:orange}#fancyMsg.msgInfo{background:url('../imgs/bg_msg_info.png') white repeat-x;color:#555}#fancyView a,#fancyMsg a{color:#555}#fancyContainer{padding:0}#fancyContainer>h2{width:100%;font-size:18px;color:white;background-color:#607d8b;margin:0 0 1em 0;padding:.5em 0;line-height:1em}#fancyContainer select{width:220px}#fancyContainer.help{min-height:100px;background-color:#f5f5f5}#fancyContainer.help p{font-size:14px;text-align:justify;line-height:2em}#fancyContainer #resFancyAccion{display:none}#fancyContainer #resCheck{display:inline-block;width:80%;height:4em;padding:1em 0}#debug{float:left;text-align:left}#debuginfo{width:100%;min-height:10em;padding:1em;background-color:lightgoldenrodyellow;text-align:left;line-height:1.5em}#debuginfo H3{text-align:center}.fancyNone{background-color:transparent !important}.fancydata{min-width:400px;border:0;text-align:left;margin:0 .5em}.fancydata .descField{min-width:100px;font-weight:bold}footer{display:flex;justify-content:space-between;position:fixed;bottom:0;z-index:100;width:100%;padding:.5em 0;background-color:#f5f5f5;color:#b9b9b9;font-size:1em;box-shadow:0 -8px 6px -6px #c9c9c9;-webkit-box-shadow:0 -8px 6px -6px #c9c9c9;-moz-box-shadow:0 -8px 6px -6px #c9c9c9}footer,footer .footer-parts{display:flex;justify-content:space-between}footer #footer-left,footer #footer-right{width:50%;margin:0 1em}footer #footer-right{justify-content:flex-end;text-align:right}footer #updates{min-width:10em;text-align:center;cursor:pointer}footer #status{margin:0 1em}footer #status>div{display:inline-block}footer #status .status-info{padding:.5em}footer #session{text-align:left;color:#999;font-size:.8em}footer a,footer a:visited{color:#b9b9b9}footer #project a:hover{color:#a9c1d7;border-bottom:1px solid #a9c1d7}footer #updates a:hover{color:#a9c1d7}footer img{border:0;width:16px;height:16px;vertical-align:middle}.round{border-radius:5px !important;-moz-border-radius:5px !important;-webkit-border-radius:5px !important}.round5{border-radius:5px !important;-moz-border-radius:5px !important;-webkit-border-radius:5px !important}.midround{border-radius:0 0 10px 10px !important;-moz-border-radius:0 0 10px 10px !important;-webkit-border-radius:0 0 10px 10px !important}.midroundup{border-radius:10px 10px 0 0 !important;-moz-border-radius:10px 10px 0 0 !important;-webkit-border-radius:10px 10px 0 0 !important}.fullround{border-radius:50% !important;-moz-border-radius:50% !important;-webkit-border-radius:50% !important}.iconMini{width:16px !important;height:16px !important;vertical-align:middle}#content .error{width:350px;margin:15px;padding:15px;background-color:#f9f9f9;color:orange;border:orange 1px solid;margin:0 auto;text-align:center;font-size:16px;line-height:1.5em}.hide{display:none !important}.btn-checks{padding:5px;margin:.2em 0;width:30em;border-bottom:1px solid #c9c9c9}.shadow{box-shadow:1px 1px 2px #d9d9d9}.noRes{width:60%;margin:15px;padding:15px;background-color:#f9f9f9;color:#a9a9a9;border:#c9c9c9 1px solid;margin:20px auto;text-align:center;font-size:16px}.header-blue{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:#607d8b;color:#fff;min-height:2em}.no-background{background:none !important}.action{max-width:75%;height:4em;margin:.7em auto;text-align:right}.action-in-box{display:inline-block;height:4em;margin:.7em 0;text-align:right}.action ul{list-style:none;margin:0;padding:0;padding-right:2em}.action-in-box ul{list-style:none;margin:0;padding:0}.action li{display:inline-block;width:2em;height:2em;margin-left:3em}.action li img,.action-in-box li img{padding:1em;border:1px solid #d9d9d9;border-radius:3em;background-color:#f9f9f9 !important}.fullWidth{max-width:100% !important}.filterOn{padding:.3em 1em;background-color:#ecfde4;color:green !important;border:#dbfdcb 1px solid !important}.globalOn{padding:.3em 1em;background-color:#fff2d9;color:orange !important;border:#ffe5b3 1px solid !important}.opacity50{filter:alpha(opacity=50);-moz-opacity:.5;-khtml-opacity:.5;opacity:.5}.custom-combobox{position:relative;display:inline-block}.custom-combobox input{width:80%}.custom-combobox-toggle{position:absolute;top:0;bottom:0;margin-left:-1px;padding:0;*height:1.7em;*top:.1em}.custom-combobox-input{margin:0;padding:.3em}.ui-tooltip{background:#ffffa3;color:#555;padding:10px;border-radius:10px;box-shadow:0 0 7px #a9a9a9}.ui-autocomplete,.ui-menu-item{z-index:8050}.fancybox-inner{overflow:visible !important}.passLevel{width:20px;height:20px;display:inline-block;position:relative;top:2px}.passLevel.strongest,.passLevel.strongest:hover{background-color:#ecfde4 !important;color:green;font-weight:bold;border:lightgreen 1px solid}.passLevel.strong,.passLevel.strong:hover{background-color:#e6f2ff !important;color:#64b4f4;font-weight:bold;border:#64b4f4 1px solid}.passLevel.good,.passLevel.good:hover{background-color:#fff2d9 !important;color:orange;font-weight:bold;border:#ffe5b3 1px solid}.passLevel.weak,.passLevel.weak:hover{background-color:#fee8e6 !important;color:#c00;font-weight:bold;border:#fed2ce 1px solid}#alert #alert-text{margin:15px auto;font-size:14px;font-weight:bold}#alert #alert-pass{width:50%;padding:10px;margin:15px auto;border:1px solid #c9c9c9;color:#555;font-weight:bold}.dialog-user-text{padding:.5em;border-bottom:#d9d9d9 1px solid;text-align:center;min-width:200px;color:#d9d9d9}.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:#607d8b}.help-box>*{font-weight:bold}.help-text{text-align:justify;line-height:1.5em;margin-top:1em}.tooltip{width:300px;max-width:300px;background-color:#777;color:#fff;z-index:101}.cursor-pointer{cursor:pointer}.password-actions{display:inline-block;width:12em}.password-actions>span,.password-actions i{margin-right:.6em}.custom-input-color{width:3em;height:1em;display:inline-block}.account-pass-image{height:32px;width:auto}.select-box{width:20em}#boxLogin{width:45em;min-height:150px;margin:0 auto;padding:1em;background:url("../imgs/logo_full.svg") no-repeat #fff;background-size:300px auto;background-position:.5em .5em}#boxLogin .error{float:left;width:315px;margin-top:15px;color:orange;border:1px orange solid;margin-left:auto;margin-right:auto}#boxLogin #boxData,#boxLogin #boxButton{margin-top:7em}#boxLogin #boxData{display:inline-block;width:250px;height:100%;min-height:100px;text-align:left;margin-left:13em;background-color:transparent}#boxLogin #boxButton{display:inline-block;text-align:right;margin-left:2em}#boxLogin #boxActions{width:100%;height:1em;margin-top:1em;text-align:right}#boxLogin #boxActions a{color:#c9c9c9}#boxLogout{width:250px;margin:8em auto 0 auto;font-size:14px;text-align:center;color:orange;background:#fff2d9;border:#ffe5b3 1px solid;padding:.5em}#boxUpdated{width:350px;margin:5em auto 5em auto;font-size:14px;text-align:center;color:green;background:#ecfde4;border:#dbfdcb 1px solid;padding:.5em}fieldset.warning{padding:8px;color:#b94a48;background-color:#f2dede;border:1px solid #eed3d7;border-radius:5px}fieldset.warning legend{color:#b94a48 !important}fieldset.warning a{color:#b94a48 !important;font-weight:bold}#actions{width:100%;margin:auto auto 50px;line-height:2em}#actions #logo{display:flex;width:100%;margin-bottom:30px;color:#607d8b;box-shadow:0 8px 6px -6px rgba(83,109,254,.3);-webkit-box-shadow:0 8px 6px -6px rgba(83,109,254,.3);-moz-box-shadow:0 8px 6px -6px rgba(83,109,254,.3);align-items:center;background:url("../imgs/logo_full.svg") left no-repeat;background-size:auto 150px;height:150px}#actions #logo #pageDesc{color:#607d8b;align-self:auto;flex:1 0 auto;text-align:center}#actions #logo #pageDesc h1{font-weight:bold;font-size:24px;letter-spacing:3px}#actions ul.errors{max-width:40%;margin:0 auto;list-style:none;font-size:14px;text-align:left}#actions ul.errors>li{margin:1.5em auto;border-radius:5px;padding:.5em}#actions ul.errors>li.err_critical{color:#b94a48;background:#fed7d7;border:1px solid red}#actions ul.errors>li.err_warning{color:orange;background:#fff2d9;border:#ffe5b3 1px solid}#actions ul.errors>li.err_ok{color:green;background:#ecfde4;border:#dbfdcb 1px solid;font-weight:bold}#actions ul.errors>li>p.hint{background-image:url('../imgs/info.png');background-repeat:no-repeat;color:#777;padding-left:25px;background-position:0 .3em;font-size:12px}#actions form{width:450px;margin:0 auto;text-align:left}#actions form fieldset legend{width:100%;margin-top:1em;color:#fff;font-size:14px;font-weight:bold;text-align:center;background-color:#607d8b;margin-bottom:1em;border-radius:5px;letter-spacing:.2em;padding:.2em 0}#actions div.buttons{margin-top:2em;text-align:center}#whatsNewIcon{text-align:center}#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;padding:2em;line-height:1.5em;font-size:16px;color:#555;border:1px solid #d9d9d9;margin-bottom:3em;display:none}#whatsNew ul{padding:0;border:0}#whatsNew li{padding-left:37px;background:url("../imgs/arrow-list.png") left center no-repeat;line-height:32px;list-style:none}.no-title .ui-dialog-titlebar{display:none}.ui-dialog{z-index:9999 !important}@media screen and (max-width:1000px){#content #searchbox{position:relative;left:0;width:100%}#content #searchbox form{flex-wrap:wrap}#content #searchbox form>div{width:100%}#content #searchbox input[type=text]{width:100%}footer,footer .footer-parts{justify-content:space-between;flex-wrap:wrap}footer #footer-left,footer #footer-right,footer .footer-parts>div{width:100%}footer .footer-parts>div{padding:.5em 0}}
\ No newline at end of file
diff --git a/inc/themes/material-blue/views/account/account-link.inc b/inc/themes/material-blue/views/account/account-link.inc
index 36f98d2c..7fb4ab06 100644
--- a/inc/themes/material-blue/views/account/account-link.inc
+++ b/inc/themes/material-blue/views/account/account-link.inc
@@ -46,7 +46,7 @@