public static function create_tags_for_post(post_model $post, $tags) { if ($tags === '') { return; } $post_tags = []; $tag_names = array_map('trim', explode(',', $tags)); $old_tags = tag_model::get_in('name', $tag_names); if ($old_tags === []) { foreach ($tag_names as $tag_name) { $tag_id = tag_model::add(array('name' => $tag_name, 'refer_count' => 1)); $post_tags[] = array('post_id' => $post->id, 'tag_id' => $tag_id); } setting_model::inc_by_id(array('value' => count($tag_names)), setting_model::id_tag_count); } else { tag_model::inc_by_ids(array('refer_count' => 1), array_keys($old_tags)); $old_tag_names = []; foreach ($old_tags as $old_tag) { $post_tags[] = array('post_id' => $post->id, 'tag_id' => $old_tag->id); $old_tag_names[] = $old_tag->name; } $new_tag_names = array_diff($tag_names, $old_tag_names); if ($new_tag_names !== []) { foreach ($new_tag_names as $new_tag_name) { $tag_id = tag_model::add(array('name' => $new_tag_name, 'refer_count' => 1)); $post_tags[] = array('post_id' => $post->id, 'tag_id' => $tag_id); } setting_model::inc_by_id(array('value' => count($new_tag_names)), setting_model::id_tag_count); } } if ($post_tags !== []) { post_tag_model::add_many($post_tags); } }
public static function new_action() { // 拦截 self::method('post'); $post_id = g_int('post_id'); $post = post_model::get_by_id($post_id); self::forward_404_if($post === null, '文章不存在,无法评论'); try { // 校验 $checker = new lazy_checker(p()); $checker->check('captcha', array('should_be' => array(setting_model::get_by_id(setting_model::id_captcha_answer)->value, '验证码不正确'))); $checker->del('captcha'); $checker->check_model_rules('comment'); $comment = $checker->get_all(); if (!visitor::has_role('member') && member_model::get_one(array('name' => $comment['author'])) !== null) { $checker->failed('author', '您不能使用管理员的昵称'); } // 执行 $comment['post_id'] = $post_id; $comment['pub_time'] = clock::get_stamp(); comment_model::add($comment); post_model::inc_by_id(array('comment_count' => 1), $post_id); setting_model::inc_by_id(array('value' => 1), setting_model::id_comment_count); // 成功 self::json_result(true, '评论成功', 0, url('post/show?id=' . $post_id)); } catch (check_failed $e) { // 失败 self::json_result(false, $e->get_reasons()); } }