Merge pull request #4 from LeOSW42/copilot/refactor-populate-function

Harden model population for safer data hydration
This commit is contained in:
2026-01-24 14:00:58 +01:00
committed by GitHub
6 changed files with 311 additions and 81 deletions

View File

@@ -33,6 +33,19 @@ class BlogArticle
public $content_txt = NULL; public $content_txt = NULL;
public $author_name = NULL; public $author_name = NULL;
private function decodeJsonText($value) {
if ($value === null || $value === '') {
return '';
}
$decoded = json_decode($value, true);
if (!is_array($decoded)) {
return '';
}
return isset($decoded['text']) ? $decoded['text'] : '';
}
/***** /*****
** Checks if a page at this URL exists and return the ID ** Checks if a page at this URL exists and return the ID
*****/ *****/
@@ -69,23 +82,60 @@ class BlogArticle
** Populate the object using its ID ** Populate the object using its ID
*****/ *****/
public function populate($row) { public function populate($row) {
$json = json_decode($row['content'], true); if (!is_array($row)) {
return;
}
$decodedContent = null;
if (array_key_exists('content', $row)) {
$decodedContent = $this->decodeJsonText($row['content']);
}
if (array_key_exists('content_id', $row)) {
$this->content_id = $row['content_id']; $this->content_id = $row['content_id'];
}
if (array_key_exists('locale_id', $row)) {
$this->locale_id = $row['locale_id']; $this->locale_id = $row['locale_id'];
}
if (array_key_exists('version_id', $row)) {
$this->version_id = $row['version_id']; $this->version_id = $row['version_id'];
}
if (array_key_exists('permalink', $row)) {
$this->permalink = $row['permalink']; $this->permalink = $row['permalink'];
}
if (array_key_exists('version', $row)) {
$this->version = $row['version']; $this->version = $row['version'];
}
if (array_key_exists('locale', $row)) {
$this->locale = $row['locale']; $this->locale = $row['locale'];
}
if (array_key_exists('creation_date', $row)) {
$this->creation_date = $row['creation_date']; $this->creation_date = $row['creation_date'];
}
if (array_key_exists('update_date', $row)) {
$this->update_date = $row['update_date']; $this->update_date = $row['update_date'];
}
if (array_key_exists('author', $row)) {
$this->author = $row['author']; $this->author = $row['author'];
}
if (array_key_exists('is_public', $row)) {
$this->is_public = $row['is_public']; $this->is_public = $row['is_public'];
}
if (array_key_exists('is_archive', $row)) {
$this->is_archive = $row['is_archive']; $this->is_archive = $row['is_archive'];
}
if (array_key_exists('is_commentable', $row)) {
$this->is_commentable = $row['is_commentable']; $this->is_commentable = $row['is_commentable'];
}
if (array_key_exists('type', $row)) {
$this->type = $row['type']; $this->type = $row['type'];
}
if (array_key_exists('name', $row)) {
$this->name = $row['name']; $this->name = $row['name'];
$this->content = isset($json['text']) ? $json['text'] : ''; }
if ($decodedContent !== null) {
$this->content = $decodedContent;
}
} }
/***** /*****

View File

@@ -60,17 +60,41 @@ class Comment
** Populate the object using its ID ** Populate the object using its ID
*****/ *****/
public function populate($row) { public function populate($row) {
if (!is_array($row)) {
return;
}
if (array_key_exists('id', $row)) {
$this->id = $row['id']; $this->id = $row['id'];
}
if (array_key_exists('version', $row)) {
$this->version = $row['version']; $this->version = $row['version'];
}
if (array_key_exists('creation_date', $row)) {
$this->creation_date = $row['creation_date']; $this->creation_date = $row['creation_date'];
}
if (array_key_exists('update_date', $row)) {
$this->update_date = $row['update_date']; $this->update_date = $row['update_date'];
}
if (array_key_exists('author', $row)) {
$this->author = $row['author']; $this->author = $row['author'];
}
if (array_key_exists('is_public', $row)) {
$this->is_public = $row['is_public']; $this->is_public = $row['is_public'];
}
if (array_key_exists('is_archive', $row)) {
$this->is_archive = $row['is_archive']; $this->is_archive = $row['is_archive'];
}
if (array_key_exists('content', $row)) {
$this->content = $row['content']; $this->content = $row['content'];
}
if (array_key_exists('comment', $row)) {
$this->comment = $row['comment']; $this->comment = $row['comment'];
}
if (array_key_exists('locale', $row)) {
$this->locale = $row['locale']; $this->locale = $row['locale'];
} }
}
/***** /*****
** Create a new comment ** Create a new comment

View File

@@ -48,10 +48,20 @@ class Locale
** Populate the object using raw data from SQL ** Populate the object using raw data from SQL
*****/ *****/
public function populate($row) { public function populate($row) {
if (!is_array($row)) {
return;
}
if (array_key_exists('name', $row)) {
$this->name = $row['name']; $this->name = $row['name'];
}
if (array_key_exists('display_name', $row)) {
$this->display_name = $row['display_name']; $this->display_name = $row['display_name'];
}
if (array_key_exists('flag_name', $row)) {
$this->flag_name = $row['flag_name']; $this->flag_name = $row['flag_name'];
} }
}
} }
/********************************************************** /**********************************************************

View File

@@ -40,6 +40,19 @@ class Poi
public $ele; public $ele;
public $author_name; public $author_name;
private function decodeJsonArray($value) {
if ($value === null || $value === '') {
return [];
}
$decoded = json_decode($value, true);
if (!is_array($decoded)) {
return [];
}
return $decoded;
}
/***** /*****
** Checks if a page at this URL exists and return the ID ** Checks if a page at this URL exists and return the ID
*****/ *****/
@@ -117,29 +130,82 @@ class Poi
** Populate the object using its ID ** Populate the object using its ID
*****/ *****/
public function populate($row) { public function populate($row) {
if (!is_array($row)) {
return;
}
$decodedParameters = null;
if (array_key_exists('parameters', $row)) {
$decodedParameters = $this->decodeJsonArray($row['parameters']);
}
if (array_key_exists('content_id', $row)) {
$this->content_id = $row['content_id']; $this->content_id = $row['content_id'];
}
if (array_key_exists('locale_id', $row)) {
$this->locale_id = $row['locale_id']; $this->locale_id = $row['locale_id'];
}
if (array_key_exists('source_id', $row)) {
$this->source_id = $row['source_id']; $this->source_id = $row['source_id'];
}
if (array_key_exists('version_id', $row)) {
$this->version_id = $row['version_id']; $this->version_id = $row['version_id'];
}
if (array_key_exists('permalink', $row)) {
$this->permalink = $row['permalink']; $this->permalink = $row['permalink'];
}
if (array_key_exists('version', $row)) {
$this->version = $row['version']; $this->version = $row['version'];
}
if (array_key_exists('locale', $row)) {
$this->locale = $row['locale']; $this->locale = $row['locale'];
}
if (array_key_exists('creation_date', $row)) {
$this->creation_date = $row['creation_date']; $this->creation_date = $row['creation_date'];
}
if (array_key_exists('update_date', $row)) {
$this->update_date = $row['update_date']; $this->update_date = $row['update_date'];
}
if (array_key_exists('author', $row)) {
$this->author = $row['author']; $this->author = $row['author'];
}
if (array_key_exists('is_public', $row)) {
$this->is_public = $row['is_public']; $this->is_public = $row['is_public'];
}
if (array_key_exists('is_archive', $row)) {
$this->is_archive = $row['is_archive']; $this->is_archive = $row['is_archive'];
}
if (array_key_exists('is_commentable', $row)) {
$this->is_commentable = $row['is_commentable']; $this->is_commentable = $row['is_commentable'];
}
if (array_key_exists('type', $row)) {
$this->type = $row['type']; $this->type = $row['type'];
}
if (array_key_exists('poi_type', $row)) {
$this->poi_type = $row['poi_type']; $this->poi_type = $row['poi_type'];
}
if (array_key_exists('name', $row)) {
$this->name = $row['name']; $this->name = $row['name'];
$this->parameters = json_decode($row['parameters'], true); }
if ($decodedParameters !== null) {
$this->parameters = $decodedParameters;
}
if (array_key_exists('lon', $row)) {
$this->lon = $row['lon']; $this->lon = $row['lon'];
}
if (array_key_exists('lat', $row)) {
$this->lat = $row['lat']; $this->lat = $row['lat'];
}
if (array_key_exists('ele', $row)) {
$this->ele = $row['ele']; $this->ele = $row['ele'];
}
if (array_key_exists('source', $row)) {
$this->source = $row['source']; $this->source = $row['source'];
}
if (array_key_exists('remote_source_id', $row)) {
$this->remote_source_id = $row['remote_source_id']; $this->remote_source_id = $row['remote_source_id'];
} }
}
/***** /*****
** Create a new poi ** Create a new poi

View File

@@ -102,20 +102,50 @@ class User
** Populate the object using raw data from SQL ** Populate the object using raw data from SQL
*****/ *****/
public function populate($row) { public function populate($row) {
if (!is_array($row)) {
return;
}
if (array_key_exists('id', $row)) {
$this->id = $row['id']; $this->id = $row['id'];
}
if (array_key_exists('name', $row)) {
$this->name = $row['name']; $this->name = $row['name'];
}
if (array_key_exists('version', $row)) {
$this->version = $row['version']; $this->version = $row['version'];
}
if (array_key_exists('email', $row)) {
$this->email = $row['email']; $this->email = $row['email'];
}
if (array_key_exists('password', $row)) {
$this->password = $row['password']; $this->password = $row['password'];
}
if (array_key_exists('website', $row)) {
$this->website = $row['website']; $this->website = $row['website'];
}
if (array_key_exists('is_avatar_present', $row)) {
$this->is_avatar_present = $row['is_avatar_present']; $this->is_avatar_present = $row['is_avatar_present'];
}
if (array_key_exists('is_archive', $row)) {
$this->is_archive = $row['is_archive']; $this->is_archive = $row['is_archive'];
}
if (array_key_exists('rank', $row)) {
$this->rank = $row['rank']; $this->rank = $row['rank'];
}
if (array_key_exists('locale', $row)) {
$this->locale = $row['locale']; $this->locale = $row['locale'];
}
if (array_key_exists('timezone', $row)) {
$this->timezone = $row['timezone']; $this->timezone = $row['timezone'];
}
if (array_key_exists('visit_date', $row)) {
$this->visit_date = $row['visit_date']; $this->visit_date = $row['visit_date'];
}
if (array_key_exists('register_date', $row)) {
$this->register_date = $row['register_date']; $this->register_date = $row['register_date'];
} }
}
/***** /*****
** Simple return only functions ** Simple return only functions

View File

@@ -32,8 +32,21 @@ class WikiPage
public $content_html; public $content_html;
private function decodeJsonText($value) {
if ($value === null || $value === '') {
return '';
}
$decoded = json_decode($value, true);
if (!is_array($decoded)) {
return '';
}
return isset($decoded['text']) ? $decoded['text'] : '';
}
/***** /*****
** Checks if a page at this ermalink exists and return the populated element ** Checks if a page at this permalink exists and return the populated element
*****/ *****/
public function checkPermalink($permalink, $withArchive=0, $elementNb=0) { public function checkPermalink($permalink, $withArchive=0, $elementNb=0) {
global $config; global $config;
@@ -68,23 +81,60 @@ class WikiPage
** Populate the object using raw data from SQL ** Populate the object using raw data from SQL
*****/ *****/
public function populate($row) { public function populate($row) {
$json = json_decode($row['content'], true); if (!is_array($row)) {
return;
}
$decodedContent = null;
if (array_key_exists('content', $row)) {
$decodedContent = $this->decodeJsonText($row['content']);
}
if (array_key_exists('content_id', $row)) {
$this->content_id = $row['content_id']; $this->content_id = $row['content_id'];
}
if (array_key_exists('locale_id', $row)) {
$this->locale_id = $row['locale_id']; $this->locale_id = $row['locale_id'];
}
if (array_key_exists('version_id', $row)) {
$this->version_id = $row['version_id']; $this->version_id = $row['version_id'];
}
if (array_key_exists('permalink', $row)) {
$this->permalink = $row['permalink']; $this->permalink = $row['permalink'];
}
if (array_key_exists('version', $row)) {
$this->version = $row['version']; $this->version = $row['version'];
}
if (array_key_exists('locale', $row)) {
$this->locale = $row['locale']; $this->locale = $row['locale'];
}
if (array_key_exists('creation_date', $row)) {
$this->creation_date = $row['creation_date']; $this->creation_date = $row['creation_date'];
}
if (array_key_exists('update_date', $row)) {
$this->update_date = $row['update_date']; $this->update_date = $row['update_date'];
}
if (array_key_exists('author', $row)) {
$this->author = $row['author']; $this->author = $row['author'];
}
if (array_key_exists('is_public', $row)) {
$this->is_public = $row['is_public']; $this->is_public = $row['is_public'];
}
if (array_key_exists('is_archive', $row)) {
$this->is_archive = $row['is_archive']; $this->is_archive = $row['is_archive'];
}
if (array_key_exists('is_commentable', $row)) {
$this->is_commentable = $row['is_commentable']; $this->is_commentable = $row['is_commentable'];
}
if (array_key_exists('type', $row)) {
$this->type = $row['type']; $this->type = $row['type'];
}
if (array_key_exists('name', $row)) {
$this->name = $row['name']; $this->name = $row['name'];
$this->content = isset($json['text']) ? $json['text'] : ''; }
if ($decodedContent !== null) {
$this->content = $decodedContent;
}
} }
/***** /*****