From 6439dd037de2ea9f0c9b52f25dddd6bbd5d2302a Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Tue, 12 Jun 2018 07:54:04 +0200 Subject: [PATCH] * [MOD] Improved database handling --- lib/SP/Log/Log.php | 3 - .../Repositories/Config/ConfigRepository.php | 5 +- lib/SP/Services/Crypt/MasterPassService.php | 7 +- lib/SP/Services/Import/ImportService.php | 7 +- .../Upgrade/UpgradeCustomFieldDefinition.php | 7 +- lib/SP/Services/Upgrade/UpgradePublicLink.php | 7 +- lib/SP/Storage/Database/Database.php | 42 +++- lib/SP/Storage/Database/DbWrapper.php | 188 ------------------ public/js/app-actions.min.js | 2 +- 9 files changed, 56 insertions(+), 212 deletions(-) delete mode 100644 lib/SP/Storage/Database/DbWrapper.php diff --git a/lib/SP/Log/Log.php b/lib/SP/Log/Log.php index b20e13bf..4e8cd19d 100644 --- a/lib/SP/Log/Log.php +++ b/lib/SP/Log/Log.php @@ -26,7 +26,6 @@ namespace SP\Log; use SP\Core\Exceptions\SPException; use SP\Core\Messages\LogMessage; -use SP\Storage\Database\DbWrapper; use SP\Storage\Database\QueryData; use SP\Util\HttpUtil; use SP\Util\Util; @@ -89,8 +88,6 @@ class Log extends ActionLog $Data = new QueryData(); $Data->setQuery($query); $Data->setOnErrorMessage(__('Error al vaciar el registro de eventos', false)); - - return DbWrapper::getQuery($Data); } /** diff --git a/lib/SP/Repositories/Config/ConfigRepository.php b/lib/SP/Repositories/Config/ConfigRepository.php index 8333dc80..a54a74aa 100644 --- a/lib/SP/Repositories/Config/ConfigRepository.php +++ b/lib/SP/Repositories/Config/ConfigRepository.php @@ -28,7 +28,6 @@ use SP\Core\Exceptions\ConstraintException; use SP\Core\Exceptions\QueryException; use SP\DataModel\ConfigData; use SP\Repositories\Repository; -use SP\Storage\Database\DbWrapper; use SP\Storage\Database\QueryData; /** @@ -46,7 +45,7 @@ class ConfigRepository extends Repository */ public function updateBatch(array $data) { - DbWrapper::beginTransaction($this->db); + $this->db->beginTransaction(); try { foreach ($data as $configData) { @@ -57,7 +56,7 @@ class ConfigRepository extends Repository } catch (ConstraintException $e) { debugLog($e->getMessage()); } finally { - return DbWrapper::endTransaction($this->db); + return $this->db->endTransaction(); } } diff --git a/lib/SP/Services/Crypt/MasterPassService.php b/lib/SP/Services/Crypt/MasterPassService.php index cc63758a..8542493c 100644 --- a/lib/SP/Services/Crypt/MasterPassService.php +++ b/lib/SP/Services/Crypt/MasterPassService.php @@ -33,7 +33,6 @@ use SP\Services\CustomField\CustomFieldCryptService; use SP\Services\Service; use SP\Services\ServiceException; use SP\Storage\Database\Database; -use SP\Storage\Database\DbWrapper; /** * Class MasterPassService @@ -87,7 +86,7 @@ class MasterPassService extends Service $db = $this->dic->get(Database::class); try { - if (!DbWrapper::beginTransaction($db)) { + if (!$db->beginTransaction()) { throw new ServiceException(__u('No es posible iniciar una transacción'), ServiceException::ERROR); } @@ -97,11 +96,11 @@ class MasterPassService extends Service $this->customFieldCryptService->updateMasterPassword($request); - if (!DbWrapper::endTransaction($db)) { + if (!$db->endTransaction()) { throw new ServiceException(__u('No es posible finalizar una transacción'), ServiceException::ERROR); } } catch (\Exception $e) { - if (DbWrapper::rollbackTransaction($db)) { + if ($db->rollbackTransaction()) { $this->eventDispatcher->notifyEvent('update.masterPassword.rollback', new Event($this, EventMessage::factory() ->addDescription(__u('Rollback'))) diff --git a/lib/SP/Services/Import/ImportService.php b/lib/SP/Services/Import/ImportService.php index 1b20d3a2..326b18d8 100644 --- a/lib/SP/Services/Import/ImportService.php +++ b/lib/SP/Services/Import/ImportService.php @@ -29,7 +29,6 @@ use SP\Core\Events\Event; use SP\Core\Events\EventMessage; use SP\Services\Service; use SP\Storage\Database\Database; -use SP\Storage\Database\DbWrapper; defined('APP_ROOT') || die(); @@ -67,19 +66,19 @@ class ImportService extends Service $db = $this->dic->get(Database::class); try { - if (!DbWrapper::beginTransaction($db)) { + if (!$db->beginTransaction()) { throw new ImportException(__u('No es posible iniciar una transacción')); } $counter = $import->doImport()->getCounter(); - if (!DbWrapper::endTransaction($db)) { + if (!$db->endTransaction()) { throw new ImportException(__u('No es posible finalizar una transacción')); } return $counter; } catch (\Exception $e) { - if (DbWrapper::rollbackTransaction($db)) { + if ($db->rollbackTransaction()) { $this->eventDispatcher->notifyEvent('run.import.rollback', new Event($this, EventMessage::factory() ->addDescription(__u('Rollback'))) diff --git a/lib/SP/Services/Upgrade/UpgradeCustomFieldDefinition.php b/lib/SP/Services/Upgrade/UpgradeCustomFieldDefinition.php index 6206abb1..96c75286 100644 --- a/lib/SP/Services/Upgrade/UpgradeCustomFieldDefinition.php +++ b/lib/SP/Services/Upgrade/UpgradeCustomFieldDefinition.php @@ -32,7 +32,6 @@ use SP\Services\CustomField\CustomFieldDefService; use SP\Services\Service; use SP\Services\ServiceException; use SP\Storage\Database\Database; -use SP\Storage\Database\DbWrapper; use SP\Storage\Database\QueryData; use SP\Util\Util; @@ -67,7 +66,7 @@ class UpgradeCustomFieldDefinition extends Service $queryData->setQuery('SELECT id, moduleId, field FROM CustomFieldDefinition WHERE field IS NOT NULL'); try { - if (!DbWrapper::beginTransaction($this->db)) { + if (!$this->db->beginTransaction()) { throw new ServiceException(__u('No es posible iniciar una transacción')); } @@ -93,11 +92,11 @@ class UpgradeCustomFieldDefinition extends Service ); } - if (!DbWrapper::endTransaction($this->db)) { + if (!$this->db->endTransaction()) { throw new ServiceException(__u('No es posible finalizar una transacción')); } } catch (\Exception $e) { - DbWrapper::rollbackTransaction($this->db); + $this->db->rollbackTransaction(); processException($e); diff --git a/lib/SP/Services/Upgrade/UpgradePublicLink.php b/lib/SP/Services/Upgrade/UpgradePublicLink.php index 57ac860d..07e4fe39 100644 --- a/lib/SP/Services/Upgrade/UpgradePublicLink.php +++ b/lib/SP/Services/Upgrade/UpgradePublicLink.php @@ -32,7 +32,6 @@ use SP\Services\PublicLink\PublicLinkService; use SP\Services\Service; use SP\Services\ServiceException; use SP\Storage\Database\Database; -use SP\Storage\Database\DbWrapper; use SP\Storage\Database\QueryData; use SP\Util\Util; @@ -67,7 +66,7 @@ class UpgradePublicLink extends Service try { $publicLinkService = $this->dic->get(PublicLinkService::class); - if (!DbWrapper::beginTransaction($this->db)) { + if (!$this->db->beginTransaction()) { throw new ServiceException(__u('No es posible iniciar una transacción')); } @@ -98,11 +97,11 @@ class UpgradePublicLink extends Service ); } - if (!DbWrapper::endTransaction($this->db)) { + if (!$this->db->endTransaction()) { throw new ServiceException(__u('No es posible finalizar una transacción')); } } catch (\Exception $e) { - DbWrapper::rollbackTransaction($this->db); + $this->db->rollbackTransaction(); processException($e); diff --git a/lib/SP/Storage/Database/Database.php b/lib/SP/Storage/Database/Database.php index 612fea34..828d01cb 100644 --- a/lib/SP/Storage/Database/Database.php +++ b/lib/SP/Storage/Database/Database.php @@ -110,7 +110,7 @@ class Database implements DatabaseInterface /** * @param QueryData $queryData - * @param bool $fullCount + * @param bool $fullCount * * @return QueryResult * @throws ConstraintException @@ -299,10 +299,50 @@ class Database implements DatabaseInterface * @param QueryData $queryData * * @return \PDOStatement + * @throws ConstraintException * @throws QueryException */ public function doQueryRaw(QueryData $queryData) { return $this->prepareQueryData($queryData); } + + /** + * Iniciar una transacción + * + * @return bool + * @throws SPException + */ + public function beginTransaction() + { + $conn = $this->dbHandler->getConnection(); + + return !$conn->inTransaction() && $conn->beginTransaction(); + } + + /** + * Finalizar una transacción + * + * @return bool + * @throws SPException + */ + public function endTransaction() + { + $conn = $this->dbHandler->getConnection(); + + return $conn->inTransaction() && $conn->commit(); + } + + /** + * Rollback de una transacción + * + * @return bool + * @throws SPException + */ + public function rollbackTransaction() + { + $conn = $this->dbHandler->getConnection(); + + return $conn->inTransaction() && $conn->rollBack(); + } } \ No newline at end of file diff --git a/lib/SP/Storage/Database/DbWrapper.php b/lib/SP/Storage/Database/DbWrapper.php deleted file mode 100644 index 5f016671..00000000 --- a/lib/SP/Storage/Database/DbWrapper.php +++ /dev/null @@ -1,188 +0,0 @@ -. - */ - -namespace SP\Storage\Database; - -use SP\Core\Exceptions\ConstraintException; -use SP\Core\Exceptions\QueryException; -use SP\Core\Exceptions\SPException; - -defined('APP_ROOT') || die(); - -/** - * Esta clase es la encargada de realizar las operaciones con la BBDD de sysPass. - */ -class DbWrapper -{ - /** - * @var int - */ - public static $lastId; - /** - * @var bool Contar el número de filas totales - */ - private static $fullRowCount = false; - - /** - * @return int - */ - public static function getLastId() - { - return self::$lastId; - } - - /** - * Devolver los resultados en array - * - * @param QueryData $queryData - * @param DatabaseInterface $db - * - * @return QueryResult - * @throws ConstraintException - * @throws QueryException - */ - public static function getResultsArray(QueryData $queryData, DatabaseInterface $db = null) - { - return $db->doQuery($queryData); - } - - /** - * Obtener los resultados de una consulta. - * - * @param QueryData $queryData QueryData Los datos de la consulta - * @param DatabaseInterface $db - * - * @return QueryResult devuelve bool si hay un error. Devuelve array con el array de registros devueltos - * @throws ConstraintException - * @throws QueryException - */ - public static function getResults(QueryData $queryData, DatabaseInterface $db = null) - { - return $db->doQuery($queryData); - } - - /** - * Realizar una consulta y devolver el resultado sin datos - * - * @param QueryData $queryData Los datos para realizar la consulta - * @param DatabaseInterface $db - * - * @return int - * @throws QueryException - * @throws ConstraintException - */ - public static function getQuery(QueryData $queryData, DatabaseInterface $db) - { - return $db->doQuery($queryData)->getAffectedNumRows(); - } - - /** - * Establecer si es necesario contar el número total de resultados devueltos - */ - public static function setFullRowCount() - { - self::$fullRowCount = true; - } - - /** - * Iniciar una transacción - * - * @param DatabaseInterface $db - * - * @return bool - * @throws SPException - */ - public static function beginTransaction(DatabaseInterface $db) - { - $conn = $db->getDbHandler()->getConnection(); - - return !$conn->inTransaction() && $conn->beginTransaction(); - } - - /** - * Finalizar una transacción - * - * @param DatabaseInterface $db - * - * @return bool - * @throws SPException - */ - public static function endTransaction(DatabaseInterface $db) - { - $conn = $db->getDbHandler()->getConnection(); - - return $conn->inTransaction() && $conn->commit(); - } - - /** - * Rollback de una transacción - * - * @param DatabaseInterface $db - * - * @return bool - * @throws SPException - */ - public static function rollbackTransaction(DatabaseInterface $db) - { - $conn = $db->getDbHandler()->getConnection(); - - return $conn->inTransaction() && $conn->rollBack(); - } - - /** - * Restablecer los atributos estáticos - */ - private static function resetVars() - { - self::$fullRowCount = false; - } - - /** - * Método para registar los eventos de BD en el log - * - * @param string $query La consulta que genera el error - * @param \Exception $e - * @param string $queryFunction - */ - private static function logDBException($query, \Exception $e, $queryFunction) - { -// $caller = Util::traceLastCall($queryFunction); -// -// $LogMessage = new LogMessage(); -// $LogMessage->setAction($caller); -// $LogMessage->addDescription(__u('Error en la consulta')); -// $LogMessage->addDescription(sprintf('%s (%s)', $e->getMessage(), $e->getCode())); -// $LogMessage->addDetails('SQL', DBUtil::escape($query)); - - debugLog(sprintf('%s (%s)', $e->getMessage(), $e->getCode()), true); - debugLog($query); - - // Solo registrar eventos de ls BD si no son consultas del registro de eventos -// if ($caller !== 'writeLog') { -// $Log = new Log($LogMessage); -// $Log->setLogLevel(Log::ERROR); -// $Log->writeLog(); -// } - } -} diff --git a/public/js/app-actions.min.js b/public/js/app-actions.min.js index 1c9e4bfb..536dcb89 100644 --- a/public/js/app-actions.min.js +++ b/public/js/app-actions.min.js @@ -1,5 +1,5 @@ var $jscomp={scope:{},findInternal:function(b,e,l){b instanceof String&&(b=String(b));for(var f=b.length,h=0;h'+c+""),g=d.find("img");if(0===g.length)return m(c);g.hide();$.magnificPopup.open({items:{src:d,type:"inline"},callbacks:{open:function(){var a=