S2OJ/web/app/controllers/subdomain/blog/blog_write.php

114 lines
3.9 KiB
PHP
Raw Normal View History

2016-07-18 16:39:37 +00:00
<?php
2022-10-22 13:12:13 +00:00
requireLib('bootstrap5');
2016-07-18 16:39:37 +00:00
requirePHPLib('form');
2022-03-17 04:00:03 +00:00
2022-10-08 06:10:14 +00:00
if (!Auth::check() && UOJConfig::$data['switch']['force-login']) {
redirectToLogin();
2022-03-17 04:00:03 +00:00
}
2022-10-08 06:10:14 +00:00
if (!isNormalUser($myUser) && UOJConfig::$data['switch']['force-login']) {
become403Page();
}
2016-07-18 16:39:37 +00:00
if (!UOJContext::hasBlogPermission()) {
become403Page();
}
if (isset($_GET['id'])) {
if (!validateUInt($_GET['id']) || !($blog = queryBlog($_GET['id'])) || !UOJContext::isHisBlog($blog)) {
become404Page();
}
}
$blog_editor = new UOJBlogEditor();
$blog_editor->name = 'blog';
if ($blog) {
$blog_editor->cur_data = array(
'title' => $blog['title'],
'content_md' => $blog['content_md'],
'content' => $blog['content'],
'tags' => queryBlogTags($blog['id']),
'is_hidden' => $blog['is_hidden']
);
} else {
$blog_editor->cur_data = array(
2022-09-28 12:38:16 +00:00
'title' => $_GET['title'] ?: '新博客',
2016-07-18 16:39:37 +00:00
'content_md' => '',
'content' => '',
'tags' => array(),
2022-09-28 12:38:16 +00:00
'is_hidden' => isset($_GET['is_hidden']) ? $_GET['is_hidden'] : true,
2016-07-18 16:39:37 +00:00
);
}
2022-03-17 08:38:39 +00:00
if ($blog) {
2022-10-18 01:18:09 +00:00
$blog_editor->blog_url = HTML::blog_url(UOJContext::userid(), "/post/{$blog['id']}");
2016-07-18 16:39:37 +00:00
} else {
$blog_editor->blog_url = null;
}
function updateBlog($id, $data) {
DB::update("update blogs set title = '".DB::escape($data['title'])."', content = '".DB::escape($data['content'])."', content_md = '".DB::escape($data['content_md'])."', is_hidden = {$data['is_hidden']} where id = {$id}");
}
function insertBlog($data) {
2022-10-18 01:18:09 +00:00
DB::insert("insert into blogs (title, content, content_md, poster, is_hidden, post_time) values ('".DB::escape($data['title'])."', '".DB::escape($data['content'])."', '".DB::escape($data['content_md'])."', '".UOJContext::userid()."', {$data['is_hidden']}, now())");
2016-07-18 16:39:37 +00:00
}
$blog_editor->save = function($data) {
global $blog;
$ret = array();
if ($blog) {
2022-03-17 08:38:39 +00:00
updateBlog($blog['id'], $data);
2016-07-18 16:39:37 +00:00
} else {
2022-03-17 08:38:39 +00:00
insertBlog($data);
2016-07-18 16:39:37 +00:00
$blog = array('id' => DB::insert_id(), 'tags' => array());
2022-10-16 12:38:03 +00:00
$ret['blog_id'] = $blog['id'];
2022-10-18 01:18:09 +00:00
$ret['blog_write_url'] = HTML::blog_url(UOJContext::userid(), "/post/{$blog['id']}/write");
$ret['blog_url'] = HTML::blog_url(UOJContext::userid(), "/post/{$blog['id']}");
2016-07-18 16:39:37 +00:00
}
if ($data['tags'] !== $blog['tags']) {
DB::delete("delete from blogs_tags where blog_id = {$blog['id']}");
foreach ($data['tags'] as $tag) {
DB::insert("insert into blogs_tags (blog_id, tag) values ({$blog['id']}, '".DB::escape($tag)."')");
}
}
return $ret;
};
$blog_editor->runAtServer();
2022-09-18 04:58:35 +00:00
?>
2016-07-18 16:39:37 +00:00
<?php echoUOJPageHeader('写博客') ?>
<div class="card">
2022-10-16 12:38:03 +00:00
<div class="card-header bg-transparent d-flex justify-content-between">
<div class="fw-bold">写博客</div>
<div id="div-blog-id"
<?php if (!$blog): ?>
style="display: none"
<?php endif ?>
>
<?php if ($blog): ?>
<small>博客 ID<b><?= $blog['id'] ?></b></small>
<?php endif ?>
</div>
</div>
<div class="card-body">
2016-07-18 16:39:37 +00:00
<?php $blog_editor->printHTML() ?>
</div>
</div>
<!-- 提示信息 -->
<div class="card mt-3">
<div class="card-body">
<h2 class="h4 card-title">提示</h2>
<ol>
<li>题解发布后还需要返回对应题目的题解页面 <b>手动输入博客 ID</b> 来将本文添加到题目的题解列表中(博客 ID 可以在右上角找到);</li>
<li>请勿引用不稳定的外部资源(如来自个人服务器的图片或文档等),以便备份及后期维护;</li>
<li>请勿在博文中直接插入大段 HTML 代码,这可能会破坏页面的显示,可以考虑使用 <a class="text-decoration-none" href="/html2markdown" target="_blank">转换工具</a> 转换后再作修正;</li>
<li>图片上传推荐使用 <a class="text-decoration-none" href="/image_hosting" target="_blank">S2OJ 图床</a>,以免后续产生外链图片大量失效的情况。</li>
</ol>
<p class="card-text">
帮助:<a class="text-decoration-none" href="http://uoj.ac/blog/7">UOJ 博客使用教程</a>
</p>
</div>
</div>
2016-07-18 16:39:37 +00:00
<?php echoUOJPageFooter() ?>