Файл: concrete5.7.5.6/concrete/src/Config/DatabaseSaver.php
Строк: 148
<?php
namespace ConcreteCoreConfig;
use ConcreteCoreDatabaseConnectionConnection;
use ConcreteCoreSupportFacadeDatabase;
use DoctrineDBALDriverPDOStatement;
class DatabaseSaver implements SaverInterface
{
/**
* @var ConcreteCoreDatabaseConnectionConnection
*/
protected $connection;
/**
* @return Connection
*/
public function getConnection()
{
if (!$this->connection) {
$this->connection = Database::connection();
}
return $this->connection;
}
/**
* @param Connection $connection
*/
public function setConnection($connection)
{
$this->connection = $connection;
}
/**
* Save config item
*
* @param string $item
* @param string $value
* @param string $environment
* @param string $group
* @param string|null $namespace
* @return bool
*/
public function save($item, $value, $environment, $group, $namespace = null)
{
$builder = $this->getConnection()->createQueryBuilder();
$query = $builder->delete('Config')
->where('configNamespace = :namespace',
'configGroup = :group',
'configItem LIKE :item')
->setParameters(array(
':namespace' => $namespace ?: '',
':group' => $group,
':item' => "{$item}.%"
));
$amount_deleted = $query->execute();
$this->doSave($item, $value, $environment, $group, $namespace);
}
private function doSave($item, $value, $environment, $group, $namespace = null)
{
$connection = $this->getConnection();
$query = $connection->createQueryBuilder();
if (is_array($value)) {
foreach ($value as $key => $val) {
$key = ($item ? $item . '.' : '') . $key;
$this->doSave($key, $val, $environment, $group, $namespace);
}
return;
}
$query->update('Config', 'c')
->set('configValue', $query->expr()->literal($value))
->where($query->expr()->comparison('configGroup', '=', $query->expr()->literal($group)));
if ($item) {
$query->andWhere($query->expr()->comparison('configItem', '=', $query->expr()->literal($item)));
}
$query->andWhere($query->expr()->comparison('configNamespace', '=', $query->expr()->literal($namespace ?: '')));
if (!$query->execute()) {
try {
$query = "INSERT INTO Config (configItem, configValue, configGroup, configNamespace) VALUES (?, ?, ?, ?)";
Database::executeQuery(
$query,
array(
$item,
$value,
$group,
$namespace ?: ''
));
} catch (Exception $e) {
// This happens when the update succeeded, but didn't actually change anything on the row.
}
}
}
}