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 @@ - + @@ -54,15 +54,15 @@ -
- +
+