. */ namespace SP\Config; use SP\Core\Exceptions\SPException; use SP\Log\Email; use SP\Log\Log; use SP\Storage\DbWrapper; use SP\Storage\QueryData; defined('APP_ROOT') || die(); /** * Class ConfigDB para la gestión de la configuración en la BD * * @package SP */ class ConfigDB implements ConfigInterface { /** * @var array */ protected static $cache; /** * @var bool */ protected static $init; /** * Obtener un array con la configuración almacenada en la BBDD. * * @return bool */ public static function readConfig() { $query = 'SELECT parameter, value FROM Config'; $Data = new QueryData(); $Data->setUseKeyPair(true); $Data->setQuery($query); $queryRes = DbWrapper::getResults($Data); if ($queryRes === false) { return false; } self::$cache = $queryRes; return $queryRes; } /** * Guardar la configuración en la BBDD. * * @param bool $isInsert realizar un 'insert'? * @return bool * @throws \PHPMailer\PHPMailer\Exception */ public static function writeConfig($isInsert = false) { foreach (self::$cache as $param => $value) { $Data = new QueryData(); if ($isInsert) { $query = 'INSERT INTO Config VALUES (:param,:value) ON DUPLICATE KEY UPDATE value = :valuedup'; $Data->addParam($value, 'valuedup'); } else { $query = 'UPDATE Config SET value = :value WHERE parameter = :param'; } $Data->setQuery($query); $Data->addParam($param, 'param'); $Data->addParam($value, 'value'); try { DbWrapper::getQuery($Data); } catch (SPException $e) { return false; } } $Log = new Log(); $LogMessage = $Log->getLogMessage(); $LogMessage->setAction(__('Configuración', false)); $LogMessage->addDescription(__('Modificar configuración', false)); $Log->writeLog(); Email::sendEmail($LogMessage); return true; } /** * Guardar un parámetro de configuración en la BBDD. * * @param string $param con el parámetro a guardar * @param string $value con el valor a guardar * @param bool $email enviar email? * @param bool $hideValue Ocultar el valor del registro en el log * @return bool * @throws \PHPMailer\PHPMailer\Exception */ public static function setValue($param, $value, $email = true, $hideValue = false) { $query = /** @lang SQL */ 'INSERT INTO Config ' . 'SET parameter = :param,' . 'value = :value ' . 'ON DUPLICATE KEY UPDATE value = :valuedup'; $Data = new QueryData(); $Data->setQuery($query); $Data->addParam($param, 'param'); $Data->addParam($value, 'value'); $Data->addParam($value, 'valuedup'); try { DbWrapper::getQuery($Data); } catch (SPException $e) { return false; } $Log = new Log(); $LogMessage = $Log->getLogMessage(); $LogMessage->setAction(__('Configuración', false)); $LogMessage->addDescription(__('Modificar configuración', false)); $LogMessage->addDetails(__('Parámetro', false), $param); if ($hideValue === false) { $LogMessage->addDetails(__('Valor', false), $value); } $Log->writeLog(); if ($email === true) { Email::sendEmail($LogMessage); } return true; } /** * Actualizar el array de parámetros de configuración * * @param $param string La clave a actualizar * @param $value mixed El valor a actualizar */ public static function setCacheConfigValue($param, $value) { self::$cache[$param] = $value; } /** * Obtener un parámetro del el array de parámetros de configuración * * @param null $param La clave a obtener * @return mixed */ public static function getCacheConfigValue($param = null) { if (null !== $param && isset(self::$cache[$param])) { return self::$cache[$param]; } return self::$cache; } /** * Obtiene un valor desde la configuración en la BBDD. * * @param string $param con el parámetro de configuración * @param string $default El valor por defecto * @return false|string con el valor */ public static function getValue($param, $default = null) { $query = 'SELECT value FROM Config WHERE parameter = :param LIMIT 1'; $Data = new QueryData(); $Data->setQuery($query); $Data->addParam($param, 'param'); $queryRes = DbWrapper::getResults($Data); if ($queryRes === false) { return false; } return is_object($queryRes) ? $queryRes->value : $default; } /** * Elimina un parámetro de la configuración. * * @param string $param clave * @return bool * @throws \SP\Core\Exceptions\QueryException * @throws \SP\Core\Exceptions\ConstraintException */ public static function deleteParam($param) { $query = 'DELETE FROM Config WHERE parameter = :param LIMIT 1'; $Data = new QueryData(); $Data->setQuery($query); $Data->addParam($param, 'param'); return DbWrapper::getQuery($Data); } }