def category_edit(user_id=None): if user_id is None: user_id = current_user.str_id tid = request.argget.all('id') ntype = request.argget.all('type') name = request.argget.all('name') # theme_name = get_config("theme", "CURRENT_THEME_NAME") theme_name = g.get_config("theme", "CURRENT_THEME_NAME") s1, v = short_str_verifi(name, "class_name") s2, r2 = arg_verify(reqargs=[ (gettext("name"), name), ], required=True, max_len=int(get_config("category", "CATEGORY_MAX_LEN"))) if not s1: data = {"msg": v, "msg_type": "w", "custom_status": 422} elif not s2: data = r2 elif mdbs["web"].db.theme_category.find_one({ "_id": { "$ne": ObjectId(tid) }, "type": ntype, "user_id": user_id, "theme_name": theme_name, "name": name }): data = { "msg": gettext("Name already exists"), "msg_type": "w", "custom_status": 403 } else: r = mdbs["web"].db.theme_category.update_one( { "_id": ObjectId(tid), "user_id": user_id }, {"$set": { "name": name }}) if r.modified_count: update_media_category_name.apply_async(kwargs={ "category_id": tid, "new_name": name }) data = { "msg": gettext("Modify the success"), "msg_type": "s", "custom_status": 201 } else: data = { "msg": gettext("No modification"), "msg_type": "w", "custom_status": 400 } data["theme_name"] = theme_name return data
def category_delete(user_id=None): if user_id is None: user_id = current_user.str_id ids = json_to_pyseq(request.argget.all('ids', [])) if not isinstance(ids, list): ids = json.loads(ids) for i, tid in enumerate(ids): ids[i] = ObjectId(tid) r = mdbs["web"].db.theme_category.delete_many({ "_id": { "$in": ids }, "user_id": user_id }) if r.deleted_count > 0: data = { "msg": gettext("Delete the success,{}").format(r.deleted_count), "msg_type": "s", "custom_status": 204 } else: data = { "msg": gettext("Delete failed"), "msg_type": "w", "custom_status": 400 } # theme_name = get_config("theme", "CURRENT_THEME_NAME") theme_name = g.get_config("theme", "CURRENT_THEME_NAME") data["theme_name"] = theme_name return data
def get_email_html(data): """ 获取发送邮件使用的html模板 :param data: 需要再模板中使用的数据, 使用Jinjia2 格式:{"title": "标题", "body": "正文, 可以使用html标签", "other_info":"其他信息, 可以使用html标签", } :return: """ # 查找主题邮件发送html模板 data["app_name"] = get_config("email", "APP_NAME") data["app_logo_url"] = get_config("email", "APP_LOG_URL") conf_site_url = get_config("site_config", "SITE_URL") if conf_site_url: data["site_url"] = url_for("theme_view.index") else: data["site_url"] = url_for("theme_view.index") data["utc_time"] = time_to_utcdate(time_stamp=time.time(), tformat="%Y-%m-%d %H:%M:%S") path = "{}/pages/module/email/send-temp.html".format( # get_config("theme", "CURRENT_THEME_NAME") g.get_config("theme", "CURRENT_THEME_NAME")) absolute_path = os.path.abspath("{}/{}".format(theme_view.template_folder, path)) if os.path.isfile(absolute_path): html = render_template(path, data=data) else: # 主题不存页面,使用系统自带的页面 path = "{}/module/email/send-temp.html".format( admin_view.template_folder) html = render_absolute_path_template(path, data=data) return html
def internal_server_error(e): """ 处理服务器错误 :param e: :return: """ try: code = e.code except BaseException: code = 500 msg_type = "w" msg = gettext("An error occurred. Please contact the administrator") if code == 401: msg = gettext("Permission denied") elif code == 404: msg = gettext("The api does not exist or has been deprecated") elif code == 500: msg = gettext("Server error") msg_type = "e" elif isinstance(code, int) and code // 500 == 1: msg = gettext( "Server error, please check whether the third-party plug-in is normal" ) msg_type = "e" data = { "http_status": code, "custom_status": None, "request_id": g.weblog_id, "msg": msg, "msg_type": msg_type } if request.path.startswith(api.url_prefix): return response_format(data) else: g.site_global = dict(g.site_global, **get_global_site_data(req_type="view")) path = "{}/pages/{}.html".format( # get_config("theme", "CURRENT_THEME_NAME"), g.get_config("theme", "CURRENT_THEME_NAME"), code) absolute_path = os.path.abspath("{}/{}".format( theme_view.template_folder, path)) if not os.path.isfile(absolute_path): # 主题不存在<e.code>错误页面(如404页面),使用系统自带的页面 path = "{}/module/exception/{}.html".format( admin_view.template_folder, code) return render_absolute_path_template(path, data=data), 404 return render_template(path, data=data), code
def get_global_site_data(req_type="api"): """ 获取全局的站点信息 req_type:如果为"view"则不需要返回用户基本信息 :return: """ data = {} # 全局数据 # theme data["theme_config"] = get_configs("theme_global_conf") theme_name = g.get_config("theme", "CURRENT_THEME_NAME") lang = g.site_global["language"]["current"] data["theme_config"]["navs"] = get_global_theme_navs(theme_name=theme_name, lang=lang) # site data["site_config"] = get_configs("site_config") data["site_config"]["STATIC_FILE_VERSION"] = "{}_{}".format( data["site_config"]["STATIC_FILE_VERSION"], lang) data["site_config"] = dict(data["site_config"], **get_configs("seo")) data["site_config"]["sys_version"] = VERSION # msg if current_user.is_authenticated: msgs = mdbs["user"].db.message.find( { "user_id": current_user.str_id, "$or": [{ "status": "not_noticed" }, { "status": { "$exists": False } }] }, { "_id": 0, "content": 0 }) msg_cnt = msgs.count(True) data["user_msg"] = { "msg_count": msg_cnt, "msgs": list(msgs.sort([("time", -1)])) } if req_type != "view": if current_user.is_authenticated: user_info = objid_to_str(current_user.user_info, ["id", "role_id"]) data["is_authenticated"] = True data["user_info"] = user_info else: data["is_authenticated"] = False data["user_info"] = {} data['d_msg'] = gettext("Get the current user information successfully") data['d_msg_type'] = "s" return data
def get_category_info(): """ 获取category信息 :return: """ tid = request.argget.all('id') s, r = arg_verify([(gettext("category id"), tid)], required=True) if not s: return r data = {} category = mdbs["web"].db.theme_category.find_one({"_id": ObjectId(tid)}) category["_id"] = str(category["_id"]) data["category"] = category # theme_name = get_config("theme", "CURRENT_THEME_NAME") theme_name = g.get_config("theme", "CURRENT_THEME_NAME") data["theme_name"] = theme_name return data
def categorys(user_id=None): if user_id is None: user_id = current_user.str_id data = {} ntype = request.argget.all('type') theme_name = request.argget.all( 'theme_name', # get_config("theme", "CURRENT_THEME_NAME") g.get_config("theme", "CURRENT_THEME_NAME")) s, r = arg_verify([(gettext("category type"), ntype)], required=True) if not s: return r category = list(mdbs["web"].db.theme_category.find({ "user_id": user_id, "type": ntype, "theme_name": theme_name })) data["categorys"] = objid_to_str(category, ["_id", "user_id"]) data["theme_name"] = theme_name return data
def get_global_media(dbname, collname): """ 根据conditions, category_name 获取media或theme_display_setting中的数据 :param dbname: :param collname: :return: """ mdb = mdbs[dbname] conditions = json_to_pyseq(request.argget.all("conditions", [])) category_name = json_to_pyseq(request.argget.all("category_name", [])) media_id = request.argget.all("media_id") theme_name = request.argget.all("theme_name") medias = {} if collname == "theme_display_setting": if not theme_name: theme_name = g.get_config("theme", "CURRENT_THEME_NAME") q = {"theme_name": theme_name} else: q = {} q["switch"] = {"$nin": [0, False]} # categiries r = list(mdbs["web"].db.theme_category.find({ "user_id": 0, "theme_name": theme_name })) categories = {} for cate in r: categories[str(cate["_id"])] = cate["name"] if media_id: q["_id"] = ObjectId(media_id) media = mdb.dbs[collname].find_one(q) media["_id"] = str(media["_id"]) media["url"] = get_file_url(media["url"]) if media["category_id"] and str(media["category_id"]) in categories: media["category"] = categories[str(media["category_id"])] data = {"media": media} return data elif category_name and collname == "media": # collname == "media" 的时候 # 获取指定category_name user_id type的media category_user_id = request.argget.all("category_user_id", 0) category_type = request.argget.all("category_type") page = str_to_num(request.argget.all("page", 1)) pre = str_to_num(request.argget.all("pre", 8)) categorys = mdbs["web"].db.category.find( { "type": category_type, "user_id": category_user_id, "name": { "$in": category_name } }, {"_id": 1}) category_ids = [] for category in categorys: category_ids.append(str(category["_id"])) sort = [("time", -1)] q["category_id"] = {"$in": category_ids} medias = mdb.dbs[collname].find(q) data_cnt = medias.count(True) medias = list(medias.sort(sort).skip(pre * (page - 1)).limit(pre)) for d in medias: d["_id"] = str(d["_id"]) if "url" in d and d["url"]: d["url"] = get_file_url(d["url"]) if d["category_id"] and str(d["category_id"]) in categories: d["category"] = categories[str(d["category_id"])] medias = datas_paging(pre=pre, page_num=page, data_cnt=data_cnt, datas=medias) else: for condition in conditions: if "name_regex" in condition and condition["name_regex"]: q["type"] = condition["type"] q["name"] = { "$regex": condition["name_regex"], "$options": "$i" } temp_media = list(mdb.dbs[collname].find( q, regular_escape=False).sort([("name", 1)])) else: q["type"] = condition["type"] q["name"] = {"$in": condition["names"]} temp_media = list(mdb.dbs[collname].find(q).sort([("name", 1) ])) for d in temp_media: d["_id"] = str(d["_id"]) if "url" in d and d["url"]: d["url"] = get_file_url(d["url"]) if d["category_id"] and str(d["category_id"]) in categories: d["category"] = categories[str(d["category_id"])] medias[condition["result_key"]] = temp_media data = {"medias": medias} return data