aboutsummaryrefslogtreecommitdiff
path: root/model/Post.php
diff options
context:
space:
mode:
Diffstat (limited to 'model/Post.php')
-rw-r--r--model/Post.php193
1 files changed, 0 insertions, 193 deletions
diff --git a/model/Post.php b/model/Post.php
deleted file mode 100644
index 6f3f1ab..0000000
--- a/model/Post.php
+++ /dev/null
@@ -1,193 +0,0 @@
-<?php
-
-class Post extends Model {
-
- const DB_TABLE = 'posts';
-
- public int $id;
- public string $title;
- public string $md;
- public string $html;
- public string $tocHtml;
- public string $text;
- public int $ts;
- public int $updateTs;
- public bool $visible;
- public bool $toc;
- public string $shortName;
-
- public function edit(array $data) {
- $cur_ts = time();
- if (!$this->visible && $data['visible'])
- $data['ts'] = $cur_ts;
-
- $data['update_ts'] = $cur_ts;
-
- if ($data['md'] != $this->md) {
- $data['html'] = markup::markdownToHtml($data['md']);
- $data['text'] = markup::htmlToText($data['html']);
- }
-
- if ((isset($data['toc']) && $data['toc']) || $this->toc) {
- $data['toc_html'] = markup::toc($data['md']);
- }
-
- parent::edit($data);
- $this->updateImagePreviews();
- }
-
- public function updateHtml() {
- $html = markup::markdownToHtml($this->md);
- $this->html = $html;
-
- getDb()->query("UPDATE posts SET html=? WHERE id=?", $html, $this->id);
- }
-
- public function updateText() {
- $html = markup::markdownToHtml($this->md);
- $text = markup::htmlToText($html);
- $this->text = $text;
-
- getDb()->query("UPDATE posts SET text=? WHERE id=?", $text, $this->id);
- }
-
- public function getDescriptionPreview(int $len): string {
- if (mb_strlen($this->text) >= $len)
- return mb_substr($this->text, 0, $len-3).'...';
- return $this->text;
- }
-
- public function getFirstImage(): ?Upload {
- if (!preg_match('/\{image:([\w]{8})/', $this->md, $match))
- return null;
- return uploads::getByRandomId($match[1]);
- }
-
- public function getUrl(): string {
- return $this->shortName != '' ? "/{$this->shortName}/" : "/{$this->id}/";
- }
-
- public function getDate(): string {
- return date('j M', $this->ts);
- }
-
- public function getYear(): int {
- return (int)date('Y', $this->ts);
- }
-
- public function getFullDate(): string {
- return date('j F Y', $this->ts);
- }
-
- public function getUpdateDate(): string {
- return date('j M', $this->updateTs);
- }
-
- public function getFullUpdateDate(): string {
- return date('j F Y', $this->updateTs);
- }
-
- public function getHtml(bool $is_retina, string $theme): string {
- $html = $this->html;
- $html = markup::htmlImagesFix($html, $is_retina, $theme);
- return $html;
- }
-
- public function getToc(): ?string {
- return $this->toc ? $this->tocHtml : null;
- }
-
- public function isUpdated(): bool {
- return $this->updateTs && $this->updateTs != $this->ts;
- }
-
- /**
- * @return Tag[]
- */
- public function getTags(): array {
- $db = getDb();
- $q = $db->query("SELECT tags.* FROM posts_tags
- LEFT JOIN tags ON tags.id=posts_tags.tag_id
- WHERE posts_tags.post_id=?
- ORDER BY posts_tags.tag_id", $this->id);
- return array_map('Tag::create_instance', $db->fetchAll($q));
- }
-
- /**
- * @return int[]
- */
- public function getTagIds(): array {
- $ids = [];
- $db = getDb();
- $q = $db->query("SELECT tag_id FROM posts_tags WHERE post_id=? ORDER BY tag_id", $this->id);
- while ($row = $db->fetch($q)) {
- $ids[] = (int)$row['tag_id'];
- }
- return $ids;
- }
-
- public function setTagIds(array $new_tag_ids) {
- $cur_tag_ids = $this->getTagIds();
- $add_tag_ids = array_diff($new_tag_ids, $cur_tag_ids);
- $rm_tag_ids = array_diff($cur_tag_ids, $new_tag_ids);
-
- $db = getDb();
- if (!empty($add_tag_ids)) {
- $rows = [];
- foreach ($add_tag_ids as $id)
- $rows[] = ['post_id' => $this->id, 'tag_id' => $id];
- $db->multipleInsert('posts_tags', $rows);
- }
-
- if (!empty($rm_tag_ids))
- $db->query("DELETE FROM posts_tags WHERE post_id=? AND tag_id IN(".implode(',', $rm_tag_ids).")", $this->id);
-
- $upd_tag_ids = array_merge($new_tag_ids, $rm_tag_ids);
- $upd_tag_ids = array_unique($upd_tag_ids);
- foreach ($upd_tag_ids as $id)
- posts::recountPostsWithTag($id);
- }
-
- /**
- * @param bool $update Whether to overwrite preview if already exists
- * @return int
- */
- public function updateImagePreviews(bool $update = false): int {
- $images = [];
- if (!preg_match_all('/\{image:([\w]{8}),(.*?)}/', $this->md, $matches))
- return 0;
-
- for ($i = 0; $i < count($matches[0]); $i++) {
- $id = $matches[1][$i];
- $w = $h = null;
- $opts = explode(',', $matches[2][$i]);
- foreach ($opts as $opt) {
- if (strpos($opt, '=') !== false) {
- list($k, $v) = explode('=', $opt);
- if ($k == 'w')
- $w = (int)$v;
- else if ($k == 'h')
- $h = (int)$v;
- }
- }
- $images[$id][] = [$w, $h];
- }
-
- if (empty($images))
- return 0;
-
- $images_affected = 0;
- $uploads = uploads::getUploadsByRandomId(array_keys($images), true);
- foreach ($uploads as $u) {
- foreach ($images[$u->randomId] as $s) {
- list($w, $h) = $s;
- list($w, $h) = $u->getImagePreviewSize($w, $h);
- if ($u->createImagePreview($w, $h, $update, $u->imageMayHaveAlphaChannel()))
- $images_affected++;
- }
- }
-
- return $images_affected;
- }
-
-}