def post_issue(): tid = request.argget.all('id') title = request.argget.all('title', "").strip() content = request.argget.all('content', "") content_text = request.argget.all('content_text', "") editor = request.argget.all('editor') category = request.argget.all('category') tags = json_to_pyseq(request.argget.all('tags', [])) issue_way = request.argget.all('issue_way', 'issue') cover_url = request.argget.all('cover_url') # 标签处理验证 tag_max_num = get_config("post", "TAG_MAX_NUM") if len(tags) > tag_max_num: data = { "msg": gettext("Up to {} tags are used").format(tag_max_num), "msg_type": "w", "custom_status": 403 } return data tags = list(set(tags)) temp_tags = "" for tag in tags: s, r = arg_verify(reqargs=[(gettext("tag"), tag)], max_len=get_config("post", "TAG_MAX_LEN")) if not s: return r temp_tags = "{} {}".format(tag, temp_tags) # 分类验证 try: ObjectId(category) except BaseException: category = None # Title 处理 s, r = arg_verify(reqargs=[(gettext("title"), title.strip())], max_len=get_config("post", "TITLE_MAX_LEN"), required=True) if not s: return r # content s, r = arg_verify(reqargs=[(gettext("content"), content.strip()), ("editor", editor)], required=True) if not s: return r text_l = len(content_text) if text_l > get_config("post", "BRIEF_LEN"): brief_content = content_text[0:get_config("post", "BRIEF_LEN")] else: brief_content = content_text s, r = arg_verify(reqargs=[(gettext("content"), content_text)], max_len=int(get_config("post", "MAX_LEN"))) if not s: data = r else: if issue_way == "issue": issue_way = 1 else: issue_way = 0 # 获取已上传的文章图片 old_imgs = [] if tid: # 文章更新 post = mdbs["web"].db.post.find_one({ "_id": ObjectId(tid), "user_id": current_user.str_id }) if post["issue_time"]: # 有发布时间,则发布时间不改变 issue_time = post["issue_time"] elif issue_way: # 第一次发布 issue_time = time.time() else: # 不发布 issue_time = 0 old_imgs = post["imgs"] elif issue_way: # 发布时间 issue_time = time.time() else: # 不发布就不需要发布时间 issue_time = 0 # 获取文章中使用的图片 # 如果是markdown if editor == "markdown": srcs = richtext_extract_img(richtext=markdown.markdown(content)) else: srcs = richtext_extract_img(richtext=content) imgs = clean_tempfile(user_id=current_user.str_id, type="image", old_file=old_imgs, keey_file=srcs) if not cover_url and len(imgs) > 0: cover_url = imgs[0] if issue_way: r = content_inspection_text("{} {} {}".format( title, content, temp_tags)) audit_score = r["score"] audit_label = r["label"] if r["label"] == "detection_off" or ("suggestion" in r and r["suggestion"] == "review"): # 未开启审核或无法自动鉴别, 等待人工审核 audited = 0 audit_way = "artificial" elif r["label"] == "no_plugin": # 没有检查插件 audited = 0 audit_way = "artificial" else: audit_label = r["label"] audited = 1 audit_way = "auto" else: # 草稿 audit_label = None audited = audit_score = 0 audit_way = "auto" content = content_attack_defense(content)["content"] brief_content = content_attack_defense(brief_content)["content"] post = { "title": title.strip(), "content": content.strip(), "brief_content": brief_content, "category": category, "tags": tags, "issued": issue_way, "issue_time": issue_time, "update_time": time.time(), "audited": audited, "audit_score": audit_score, "audit_user_id": None, "audit_way": audit_way, "audit_label": audit_label, "word_num": text_l, "is_delete": 0, "imgs": imgs, "cover_url": cover_url } if tid: mdbs["web"].db.post.update_one( { "_id": ObjectId(tid), "user_id": current_user.str_id }, {"$set": post}, upsert=True) else: post["comment_num"] = 0 post["like"] = 0 post["like_user_id"] = [] post["user_id"] = current_user.str_id post["editor"] = editor r = mdbs["web"].db.post.insert_one(post) tid = r.inserted_id # 如果已审核, 并且分数高于最高检查违规分, 给用户通知 if audited and issue_way and audit_score >= get_config( "content_inspection", "ALLEGED_ILLEGAL_SCORE"): insert_user_msg( user_id=post["user_id"], ctype="notice", label="audit_failure", title=gettext("[Label:{}]Post allegedly violated").format( audit_label), content={"text": post["brief_content"]}, target_id=str(tid), target_type="post") if issue_way: data = { "msg": gettext("Issue success"), "msg_type": "s", "custom_status": 201 } else: data = { "msg": gettext("Save success"), "msg_type": "s", "custom_status": 201 } return data
def add_display_setting(): """ :return: """ batch = request.argget.all("batch", False) name = request.argget.all("name") link = request.argget.all("link") link_open_new_tab = str_to_num(request.argget.all("link_open_new_tab", 1)) link_name = request.argget.all("link_name") title = request.argget.all("title") text = request.argget.all("text", "") text_html = request.argget.all("text_html", "") code = request.argget.all("code", "") code_type = request.argget.all("code_type") ctype = request.argget.all("ctype") category_id = request.argget.all("category_id") data = {} category = "Default" if code_type == "json": code = json_to_pyseq(code) if category_id and category_id.lower() != "default": display_setting_category = mdbs["web"].db.category.find_one( {"_id": ObjectId(category_id)}) if display_setting_category: category = display_setting_category["name"] elif not category_id or category_id.lower() == "default": category_id = "" s, r = arg_verify([(gettext("type"), ctype)], only=get_config("category", "CATEGORY_TYPE").values()) if not s: return r s, r = arg_verify([(gettext("name"), name)], required=True) if not s and not batch: return r # 如果有上传文件 if request.files: data = file_upload(return_key=True, prefix="multidisplay_setting/{}/".format(ctype)) if data["msg_type"] != "s": return data theme_name = get_config("theme", "CURRENT_THEME_NAME") if not batch and mdbs["sys"].db.theme_display_setting.find_one( { "name": name, "type": ctype, "theme_name": theme_name }): type_alias = ctype for k, v in get_config("category", "CATEGORY_TYPE").items(): if v == ctype: type_alias = k break data = { "msg": gettext('The type "{}" exists in the name "{}"').format( type_alias, name), "msg_type": "w", "custom_status": 403 } else: # 获取text_html使用的图片 if text_html: srcs = richtext_extract_img(richtext=text_html) else: srcs = [] text_imgs = clean_tempfile(user_id=current_user.str_id, type="image", keey_file=srcs) info = { "theme_name": theme_name, "category": category, "category_id": category_id, "link": link, "link_open_new_tab": link_open_new_tab, "link_name": link_name, "title": title, "text": text, "text_html": text_html, "code": code, "code_type": code_type, "switch": 0, "text_imgs": text_imgs, "type": ctype, "time": time.time() } if "keys" in data: for key in data["keys"]: rand_name = "{}_{}".format(name, uuid1()) info["name"] = rand_name info["url"] = key mdbs["sys"].db.theme_display_setting.insert_one(info) data["msg"] = gettext("{} uploaded successfully").format( ctype.capitalize()) else: info["name"] = name info["url"] = None mdbs["sys"].db.theme_display_setting.insert_one(info) data["msg"] = gettext("Added successfully").format( ctype.capitalize()) data["msg_type"] = "s" data["custom_status"] = 201 return data
def edit_display_setting(): """ :return: """ display_setting_id = request.argget.all("id") name = request.argget.all("name") link = request.argget.all("link") link_name = request.argget.all("link_name") link_open_new_tab = str_to_num(request.argget.all("link_open_new_tab", 1)) title = request.argget.all("title") text = request.argget.all("text", "") text_html = request.argget.all("text_html", "") code = request.argget.all("code", "") code_type = request.argget.all("code_type") switch = request.argget.all("switch") category_id = request.argget.all("category_id") s, r = arg_verify([("id", display_setting_id)], required=True) if not s: return r s, r = arg_verify([(gettext("name"), name)], required=True) if not s: return r if code_type == "json": code = json_to_pyseq(code) theme_name = get_config("theme", "CURRENT_THEME_NAME") old_display_setting = mdbs["sys"].db.theme_display_setting.find_one({ "_id": ObjectId(display_setting_id), "theme_name": theme_name }) # 如果只是更新图片, 则保存上传图片 if request.files: data = file_upload(return_key=True, prefix="multidisplay_setting/{}/".format( old_display_setting["type"])) if data["msg_type"] != "s": return data else: # 删除旧的图片 if "url" in old_display_setting: file_del(old_display_setting["url"]) temp_url = None if "keys" in data: for key in data["keys"]: temp_url = key if temp_url: mdbs["sys"].db.theme_display_setting.update_one( { "_id": ObjectId(display_setting_id), "theme_name": theme_name }, {"$set": { "url": temp_url }}) data = { "msg": gettext("Update picture successfully"), "msg_type": "s", "custom_status": 201 } else: data = { "msg": gettext("Failed to update"), "msg_type": "e", "custom_status": 400 } return data category = "Default" not_updated_category = False if category_id is None: # 不更新category not_updated_category = True elif category_id and category_id.lower() != "default": display_setting_category = mdbs["web"].db.category.find_one( {"_id": ObjectId(category_id)}) if display_setting_category: category = display_setting_category["name"] elif category_id.lower() == "default": category_id = "" # 处理其他字段更新 query = { "name": name, "type": old_display_setting["type"], "_id": { "$ne": ObjectId(display_setting_id) }, "theme_name": theme_name } if mdbs["sys"].db.theme_display_setting.find_one(query): type_alias = old_display_setting["type"] for k, v in get_config("category", "CATEGORY_TYPE").items(): if v == old_display_setting["type"]: type_alias = k break data = { "msg": gettext('The type "{}" exists in the name "{}"').format( type_alias, name), "msg_type": "w", "custom_status": 403 } else: # 获取text_html使用的图片 old_imgs = old_display_setting.get("text_imgs", []) if text_html: srcs = richtext_extract_img(richtext=text_html) else: srcs = [] text_imgs = clean_tempfile(user_id=current_user.str_id, type="image", old_file=old_imgs, keey_file=srcs) info = { "name": name, "link": link, "link_name": link_name, "link_open_new_tab": link_open_new_tab, "title": title, "text": text, "text_html": text_html, "code": code, "code_type": code_type, "text_imgs": text_imgs, } if switch is not None and switch.isdigit(): info["switch"] = int(switch) if not not_updated_category: info["category_id"] = category_id info["category"] = category r = mdbs["sys"].db.theme_display_setting.update_one( { "_id": ObjectId(display_setting_id), "theme_name": theme_name }, {"$set": info}) if r.modified_count: data = { "msg": gettext("Modify the success"), "msg_type": "s", "custom_status": 201 } else: data = { "msg": gettext("The content is not modified"), "msg_type": "w", "custom_status": 400 } return data
def send_msg(): ''' 发送消息 :return: ''' title = request.argget.all("title") content = request.argget.all("content") content_html = request.argget.all("content_html") send_type = json_to_pyseq(request.argget.all("send_type",[])) username = json_to_pyseq(request.argget.all("username", [])) s, r = arg_verify([(gettext(gettext("title")), title), (gettext("content"), content_html), (gettext("send type"), send_type), (gettext("user name"), username)], required=True) if not s: return r data = {"msg":"", "msg_type":"s"} query = {"is_delete": {"$in": [False, 0, ""]}, "active": {"$in": [True, 1]}} if len(username) > 1 or username[0].lower() != "all": # 不是发给全部用户 query["username"] = {"$in": username} users = list(mdb_user.db.user.find(query, {"_id": 1, "email": 1, "mphone_num":1})) # 清理消息中的临时img if "email" not in send_type: # 删除所有上传的图片 srcs = [] else: # 保留邮件内容中使用的图片 srcs = richtext_extract_img(richtext=content_html) imgs = clean_tempfile(user_id=current_user.str_id, type="image", old_file=[], keey_file=srcs) if imgs: # 保存邮件中上传的图片记录, 以便之后删除 mdb_sys.db.sys_msg_img.insert({"time":time.time(), "imgs":imgs, "send_user_id":current_user.str_id, "title":title}) for send_t in send_type: if send_t == "on_site": for user in users: insert_user_msg(user_id=user["_id"], ctype="notice", label="sys_notice", title=title, content={"text":content}, is_sys_msg=True) if users: data["msg"] = "{}. {}".format(data["msg"], gettext("Station news success")) else: data["msg"] = "{}. {}".format(data["msg"], gettext("No relevant user")) data["msg_type"] = "w" elif send_t == "email": to_emails = [] for user in users: to_emails.append(user["email"]) if to_emails: send_email(subject=title, recipients=to_emails, html_msg=content_html) data["msg"] = "{}. {}".format(data["msg"], gettext("Mail message is being sent")) else: data["msg"] = "{}. {}".format(data["msg"], gettext("There is no such email address user")) data["msg_type"] = "w" elif send_t == "sms": # 发送短信 to_mnumber = [] for user in users: if "mphone_num" in user: to_mnumber.append(user["mphone_num"]) if to_mnumber: send_mobile_msg(to_mnumber, content) data["msg"] = "{}. {}".format(data["msg"], gettext("SMS sent")) else: data["msg"] = "{}. {}".format(data["msg"], gettext("No user mobile phone number was obtained")) data["msg_type"] = "w" data["msg"]= data["msg"].strip(". ") data["http_status"] = 201 return data
def add_media(user_id=None): """ :param user_id: 媒体为管理端(系统)所有时需要传入user_id = 0 :return: """ if user_id is None: user_id = current_user.str_id batch = request.argget.all("batch", False) name = request.argget.all("name") link = request.argget.all("link") link_open_new_tab = str_to_num(request.argget.all("link_open_new_tab", 1)) link_name = request.argget.all("link_name") title = request.argget.all("title") text = request.argget.all("text", "") text_html = request.argget.all("text_html", "") ctype = request.argget.all("ctype") category_id = request.argget.all("category_id") data = {} category = "Default" if category_id and category_id.lower() != "default": media_category = mdb_web.db.category.find_one( {"_id": ObjectId(category_id)}) if media_category: category = media_category["name"] elif not category_id or category_id.lower() == "default": category_id = "" s, r = arg_verify([(gettext("type"), ctype)], only=get_config("category", "CATEGORY_TYPE").values()) if not s: return r s, r = arg_verify([(gettext("name"), name)], required=True) if not s and not batch: return r # 如果有上传文件 if request.files: data = file_upload(return_key=True, prefix="multimedia/{}/".format(ctype)) if data["msg_type"] != "s": return data if not batch and mdb_web.db.media.find_one({"name": name, "type": ctype}): type_alias = ctype for k, v in get_config("category", "CATEGORY_TYPE").items(): if v == ctype: type_alias = k break data = { "msg": gettext('The type "{}" exists in the name "{}"').format( type_alias, name), "msg_type": "w", "http_status": 403 } else: # 获取text_html使用的图片 text_imgs = [] if text_html: srcs = richtext_extract_img(richtext=text_html) else: srcs = [] text_imgs = clean_tempfile(user_id=current_user.str_id, type="image", keey_file=srcs) info = { "category": category, "category_id": category_id, "link": link, "link_open_new_tab": link_open_new_tab, "link_name": link_name, "title": title, "text": text, "text_html": text_html, "text_imgs": text_imgs, "type": ctype, "time": time.time(), "user_id": user_id } if "keys" in data: for key in data["keys"]: rand_name = "{}_{}".format(name, uuid1()) info["name"] = rand_name info["url"] = key mdb_web.db.media.insert_one(info) data["msg"] = gettext("{} uploaded successfully").format( ctype.capitalize()) else: info["name"] = name info["url"] = None mdb_web.db.media.insert_one(info) data["msg"] = gettext("Added successfully").format( ctype.capitalize()) data["msg_type"] = "s" data["http_status"] = 201 return data
def edit_media(user_id=None): """ :param user_id: 媒体为管理端(系统)所有时需要传入user_id = 0 :return: """ if user_id is None: user_id = current_user.str_id media_id = request.argget.all("id") name = request.argget.all("name") link = request.argget.all("link") link_name = request.argget.all("link_name") link_open_new_tab = str_to_num(request.argget.all("link_open_new_tab", 1)) title = request.argget.all("title") text = request.argget.all("text", "") text_html = request.argget.all("text_html", "") category_id = request.argget.all("category_id") s, r = arg_verify([("id", media_id)], required=True) if not s: return r s, r = arg_verify([(gettext("name"), name)], required=True) if not s: return r old_media = mdb_web.db.media.find_one({"_id": ObjectId(media_id)}) # 如果只是更新图片, 则保存上传图片 if request.files: data = file_upload(return_key=True, prefix="multimedia/{}/".format(old_media["type"])) if data["msg_type"] != "s": return data else: # 删除旧的图片 file_del(old_media["url"]) temp_url = None if "keys" in data: for key in data["keys"]: temp_url = key if temp_url: mdb_web.db.media.update_one( { "_id": ObjectId(media_id), "user_id": user_id }, {"$set": { "url": temp_url }}) data = { "msg": gettext("Update picture successfully"), "msg_type": "s", "http_status": 201 } else: data = { "msg": gettext("Failed to update"), "msg_type": "e", "http_status": 400 } return data category = "Default" not_updated_category = False if category_id is None: # 不更新category not_updated_category = True elif category_id and category_id.lower() != "default": media_category = mdb_web.db.category.find_one( {"_id": ObjectId(category_id)}) if media_category: category = media_category["name"] elif category_id.lower() == "default": category_id = "" # 处理其他字段更新 query = { "name": name, "type": old_media["type"], "_id": { "$ne": ObjectId(media_id) } } if mdb_web.db.media.find_one(query): type_alias = old_media["type"] for k, v in get_config("category", "CATEGORY_TYPE").items(): if v == old_media["type"]: type_alias = k break data = { "msg": gettext('The type "{}" exists in the name "{}"').format( type_alias, name), "msg_type": "w", "http_status": 403 } else: # 获取text_html使用的图片 old_imgs = old_media.get("text_imgs", []) if text_html: srcs = richtext_extract_img(richtext=text_html) else: srcs = [] text_imgs = clean_tempfile(user_id=current_user.str_id, type="image", old_file=old_imgs, keey_file=srcs) info = { "name": name, "link": link, "link_name": link_name, "link_open_new_tab": link_open_new_tab, "title": title, "text": text, "text_html": text_html, "text_imgs": text_imgs } if not not_updated_category: info["category_id"] = category_id info["category"] = category r = mdb_web.db.media.update_one( { "_id": ObjectId(media_id), "user_id": user_id }, {"$set": info}) if r.modified_count: data = { "msg": gettext("Modify the success"), "msg_type": "s", "http_status": 201 } else: data = { "msg": gettext("The content is not modified"), "msg_type": "w", "http_status": 400 } return data