3 declare(strict_types
=1);
5 namespace PhpMyAdmin\Export
;
7 use PhpMyAdmin\DatabaseInterface
;
8 use PhpMyAdmin\Dbal\ConnectionType
;
9 use PhpMyAdmin\Identifiers\DatabaseName
;
10 use PhpMyAdmin\Identifiers\TableName
;
15 final class TemplateModel
17 public function __construct(private DatabaseInterface
$dbi)
21 public function create(DatabaseName
$db, TableName
$table, Template
$template): string
24 'INSERT INTO %s.%s (`username`, `export_type`, `template_name`, `template_data`)'
25 . ' VALUES (%s, %s, %s, %s);',
27 Util
::backquote($table),
28 $this->dbi
->quoteString($template->getUsername(), ConnectionType
::ControlUser
),
29 $this->dbi
->quoteString($template->getExportType(), ConnectionType
::ControlUser
),
30 $this->dbi
->quoteString($template->getName(), ConnectionType
::ControlUser
),
31 $this->dbi
->quoteString($template->getData(), ConnectionType
::ControlUser
),
33 $result = $this->dbi
->tryQueryAsControlUser($query);
34 if ($result !== false) {
38 return $this->dbi
->getError(ConnectionType
::ControlUser
);
41 public function delete(DatabaseName
$db, TableName
$table, string $user, int $id): string
44 'DELETE FROM %s.%s WHERE `id` = %d AND `username` = %s;',
46 Util
::backquote($table),
48 $this->dbi
->quoteString($user, ConnectionType
::ControlUser
),
50 $result = $this->dbi
->tryQueryAsControlUser($query);
51 if ($result !== false) {
55 return $this->dbi
->getError(ConnectionType
::ControlUser
);
58 public function load(DatabaseName
$db, TableName
$table, string $user, int $id): Template|
string
61 'SELECT * FROM %s.%s WHERE `id` = %d AND `username` = %s;',
63 Util
::backquote($table),
65 $this->dbi
->quoteString($user, ConnectionType
::ControlUser
),
67 $result = $this->dbi
->tryQueryAsControlUser($query);
68 if ($result === false) {
69 return $this->dbi
->getError(ConnectionType
::ControlUser
);
73 while ($row = $result->fetchAssoc()) {
77 return Template
::fromArray([
78 'id' => (int) $data['id'],
79 'username' => $data['username'],
80 'exportType' => $data['export_type'],
81 'name' => $data['template_name'],
82 'data' => $data['template_data'],
86 public function update(DatabaseName
$db, TableName
$table, Template
$template): string
89 'UPDATE %s.%s SET `template_data` = %s WHERE `id` = %d AND `username` = %s;',
91 Util
::backquote($table),
92 $this->dbi
->quoteString($template->getData(), ConnectionType
::ControlUser
),
94 $this->dbi
->quoteString($template->getUsername(), ConnectionType
::ControlUser
),
96 $result = $this->dbi
->tryQueryAsControlUser($query);
97 if ($result !== false) {
101 return $this->dbi
->getError(ConnectionType
::ControlUser
);
104 /** @return Template[]|string */
105 public function getAll(DatabaseName
$db, TableName
$table, string $user, string $exportType): array|
string
108 'SELECT * FROM %s.%s WHERE `username` = %s AND `export_type` = %s ORDER BY `template_name`;',
109 Util
::backquote($db),
110 Util
::backquote($table),
111 $this->dbi
->quoteString($user, ConnectionType
::ControlUser
),
112 $this->dbi
->quoteString($exportType, ConnectionType
::ControlUser
),
114 $result = $this->dbi
->tryQueryAsControlUser($query);
115 if ($result === false) {
116 return $this->dbi
->getError(ConnectionType
::ControlUser
);
120 while ($row = $result->fetchAssoc()) {
121 $templates[] = Template
::fromArray([
122 'id' => (int) $row['id'],
123 'username' => $row['username'],
124 'exportType' => $row['export_type'],
125 'name' => $row['template_name'],
126 'data' => $row['template_data'],