16 import(
'lib.pkp.classes.site.Site');
17 import(
'classes.core.Services');
23 'redirect' =>
'redirect',
24 'primaryLocale' =>
'primary_locale',
25 'minPasswordLength' =>
'min_password_length',
26 'installedLocales' =>
'installed_locales',
27 'supportedLocales' =>
'supported_locales',
41 if ($result->RecordCount() != 0) {
42 $site = $this->
_fromRow($result->GetRowAssoc(
false));
60 function _fromRow($primaryRow, $callHook =
true) {
62 $schema = $schemaService->get(SCHEMA_SITE);
66 foreach ($this->primaryTableColumns as $propName => $column) {
67 if (isset($primaryRow[$column])) {
77 if (in_array($column, [
'installed_locales',
'supported_locales']) &&
78 !is_null($primaryRow[$column]) && strpos($primaryRow[$column],
'{') ===
false) {
79 $site->setData($propName, explode(
':', $primaryRow[$column]));
83 $this->convertFromDb($primaryRow[$column], $schema->properties->{$propName}->type)
89 $result = $this->
retrieve(
"SELECT * FROM site_settings");
91 while (!$result->EOF) {
92 $settingRow = $result->getRowAssoc(
false);
93 if (!empty($schema->properties->{$settingRow[
'setting_name']})) {
95 $settingRow[
'setting_name'],
97 $settingRow[
'setting_value'],
98 $schema->properties->{$settingRow[
'setting_name']}->type
100 empty($settingRow[
'locale']) ?
null : $settingRow[
'locale']
113 function insertSite(&$site) {
115 $returner = $this->update(
117 (redirect, min_password_length, primary_locale, installed_locales, supported_locales)
121 $site->getRedirect(),
122 (
int) $site->getMinPasswordLength(),
123 $site->getPrimaryLocale(),
124 $this->convertToDB($site->getInstalledLocales(), $type),
125 $this->convertToDB($site->getInstalledLocales(), $type),
134 public function updateObject($site) {
136 $schema = $schemaService->get(SCHEMA_SITE);
137 $sanitizedProps = $schemaService->sanitize(SCHEMA_SITE, $site->_data);
140 foreach ($this->primaryTableColumns as $propName => $column) {
141 $set[] = $column .
' = ?';
142 $params[] = $this->convertToDb($sanitizedProps[$propName], $schema->properties->{$propName}->type);
144 $this->update(
"UPDATE site SET " . join(
',', $set), $params);
146 $deleteSettings = [];
147 $keyColumns = [
'locale',
'setting_name'];
148 foreach ($schema->properties as $propName => $propSchema) {
149 if (array_key_exists($propName, $this->primaryTableColumns)) {
151 } elseif (!isset($sanitizedProps[$propName])) {
152 $deleteSettings[] = $propName;
155 if (!empty($propSchema->multilingual)) {
156 foreach ($sanitizedProps[$propName] as $localeKey => $localeValue) {
158 if (is_null($localeValue)) {
159 $this->update(
"DELETE FROM site_settings WHERE setting_name = ? AND locale = ?",[
165 'locale' => $localeKey,
166 'setting_name' => $propName,
167 'setting_value' => $this->convertToDB($localeValue, $schema->properties->{$propName}->type),
169 $result = $this->replace(
'site_settings', $updateArray, $keyColumns);
175 'setting_name' => $propName,
176 'setting_value' => $this->convertToDB($sanitizedProps[$propName], $schema->properties->{$propName}->type),
178 $this->replace(
'site_settings', $updateArray, $keyColumns);
182 if (count($deleteSettings)) {
183 $deleteSettingNames = join(
',', array_map(
function($settingName) {
184 return "'$settingName'";
185 }, $deleteSettings));
186 $this->update(
"DELETE FROM site_settings WHERE setting_name in ($deleteSettingNames)");