Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
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
Esempio n. 4
0
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
Esempio n. 5
0
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
Esempio n. 6
0
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
Esempio n. 7
0
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
Esempio n. 8
0
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