博客的添加
博客的添加要经历身份的验证,允许拥有博客权限的用户创建、编辑和发布博客文章,博客的文章主要应用了markdown富文本标记的方式
一.新增:
1.在添加博客时,导入和权限验证:
requirePHPLib('form');
if (!UOJContext::hasBlogPermission()) {
become403Page();
}
requirePHPLib('form'):引入需要的库文件。
UOJContext::hasBlogPermission():检查用户是否有博客权限。如果没有权限,会调用 become403Page() 返回 403 错误页面。
2.博客加载和处理:
if (isset($_GET['id'])) {
if (!validateUInt($_GET['id']) || !($blog = queryBlog($_GET['id'])) || !UOJContext::isHisBlog($blog)) {
become404Page();
}
} else {
$blog = DB::selectFirst("select * from blogs where poster = '".UOJContext::user()['username']."' and type = 'B' and is_draft = true");
}
3.初始化博客编辑器:
$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(
'title' => '新博客',
'content_md' => '',
'content' => '',
'tags' => array(),
'is_hidden' => true
);
}
if ($blog && !$blog['is_draft']) {
$blog_editor->blog_url = HTML::blog_url(UOJContext::user()['username'], "/post/{$blog['id']}");
} else {
$blog_editor->blog_url = null;
}
创建 UOJBlogEditor 对象并设置其名称。
如果已存在博客,初始化编辑器数据为博客内容,否则初始化为默认新博客数据。
设置博客 URL,如果存在博客且不是草稿,则设置为对应博客的 URL。
4.数据库操作函数:
php
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) {
DB::insert("insert into blogs (title, content, content_md, poster, is_hidden, is_draft, post_time) values ('".DB::escape($data['title'])."', '".DB::escape($data['content'])."', '".DB::escape($data['content_md'])."', '".Auth::id()."', {$data['is_hidden']}, {$data['is_draft']}, now())");
}
updateBlog($id, $data):更新指定 ID 博客的数据。
insertBlog($data):插入新博客数据。
5.保存博客逻辑:
php
$blog_editor->save = function($data) {
global $blog;
$ret = array();
if ($blog) {
if ($blog['is_draft']) {
if ($data['is_hidden']) {
updateBlog($blog['id'], $data);
} else {
deleteBlog($blog['id']);
insertBlog(array_merge($data, array('is_draft' => 0)));
$blog = array('id' => DB::insert_id(), 'tags' => array());
$ret['blog_write_url'] = HTML::blog_url(UOJContext::user()['username'], "/post/{$blog['id']}/write");
$ret['blog_url'] = HTML::blog_url(UOJContext::user()['username'], "/post/{$blog['id']}");
}
} else {
updateBlog($blog['id'], $data);
}
} else {
insertBlog(array_merge($data, array('is_draft' => $data['is_hidden'] ? 1 : 0)));
$blog = array('id' => DB::insert_id(), 'tags' => array());
if (!$data['is_hidden']) {
$ret['blog_write_url'] = HTML::blog_url(UOJContext::user()['username'], "/post/{$blog['id']}/write");
$ret['blog_url'] = HTML::blog_url(UOJContext::user()['username'], "/post/{$blog['id']}");
}
}
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;
};
逻辑较为复杂,主要处理博客的保存操作,包括新建、更新、发布和标签管理。
如果博客存在且是草稿,根据是否隐藏来决定更新或发布。
如果博客不存在,则插入新博客,并根据是否隐藏设置草稿状态。
处理标签的更新。
6.运行编辑器和页面生成:
php
$blog_editor->runAtServer();
echoUOJPageHeader('写博客');
$blog_editor->printHTML();
echoUOJPageFooter();
runAtServer():在服务器端运行编辑器逻辑。
使用 echoUOJPageHeader 和 echoUOJPageFooter 函数生成页面头部和尾部,并在中间打印博客编辑器的 HTML。
二.删除
<?php
requirePHPLib('form');
if (!UOJContext::hasBlogPermission()) {
become403Page();
}
if (!isset($_GET['id']) || !validateUInt($_GET['id']) || !($blog = queryBlog($_GET['id'])) || !UOJContext::isHis($blog)) {
become404Page();
}
$delete_form = new UOJForm('delete');
$delete_form->handle = function() {
global $blog;
deleteBlog($blog['id']);
};
$delete_form->submit_button_config['class_str'] = 'btn btn-danger';
$delete_form->submit_button_config['text'] = '是的,我确定要删除';
$delete_form->succ_href = "/archive";
$delete_form->runAtServer();
?>
<?php echoUOJPageHeader('删除博客 - ' . HTML::stripTags($blog['title'])) ?>
<h3>您真的要删除博客 <?= $blog['title'] ?> 吗?该操作不可逆!</h3>
<?php $delete_form->printHTML(); ?>
<?php echoUOJPageFooter() ?>
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...