exists($key)) { $options[$key] = $this->getOption($key); return \count($options) > 1 ? $options : \reset($options); } } else { if (!\is_array($columns)) { $keys = [$columns]; } else { $keys = []; foreach ($columns as $key) { $keys[] = \is_string($key) ? (int) \preg_replace('/[^0-9.]/', '', $key) : $key; } } foreach ($keys as $key) { if ($this->exists($key)) { $options[$key] = $this->getOption($key); unset($keys[$key]); } } if (empty($keys)) { return \count($options) > 1 ? $options : \reset($options); } } try { $dbOptions = []; $query = new Builder($this->connection); $query->select(...static::$columns) ->from($this->connection->prefix . static::$table); if (!empty($columns)) { $query->where(static::$columns[0], 'in', $keys); } else { if ($name !== null) { $query->where(static::$columns['name'], '=', $name); } if ($module !== null) { $query->andWhere(static::$columns['module'], '=', $module); } if ($group !== null) { $query->andWhere(static::$columns['group'], '=', $group); } if ($account !== null) { $query->andWhere(static::$columns['account'], '=', $account); } } $sql = $query->toSql(); $sth = $this->connection->con->prepare($sql); $sth->execute(); $dbOptions = $sth->fetchAll(\PDO::FETCH_KEY_PAIR); $options += $dbOptions === false ? [] : $dbOptions; if ($dbOptions === false) { return \count($options) > 1 ? $options : \reset($options); // @codeCoverageIgnore } $this->setOptions($dbOptions); } catch (\Throwable $e) { throw $e; } return \count($options) > 1 ? $options : \reset($options); } /** * Set option by key. * * @param string[] $options Column values for filtering * @param bool $store Save this Setting immediately to database * * @return void * * @since 1.0.0 */ public function set(array $options, bool $store = false) : void { $this->setOptions($options); if ($store) { $this->connection->con->beginTransaction(); foreach ($options as $key => $option) { if (\is_string($key)) { $key = (int) \preg_replace('/[^0-9.]/', '', $key); } $query = new Builder($this->connection); $sql = $query->update($this->connection->prefix . static::$table) ->set([static::$columns[1] => $option]) ->where(static::$columns[0], '=', $key) ->toSql(); $sth = $this->connection->con->prepare($sql); $sth->execute(); } $this->connection->con->commit(); } } /** * Save options. * * @return void * * @since 1.0.0 */ public function save() : void { $this->connection->con->beginTransaction(); foreach ($this->options as $key => $option) { if (\is_string($key)) { $key = (int) \preg_replace('/[^0-9.]/', '', $key); } $query = new Builder($this->connection); $sql = $query->update($this->connection->prefix . static::$table) ->set([static::$columns[1] => $option]) ->where(static::$columns[0], '=', $key) ->toSql(); $sth = $this->connection->con->prepare($sql); $sth->execute(); } $this->connection->con->commit(); } }