Exemplo n.º 1
0
def accept_quest(agent_uid, accept_uid, qid):
    from services.content_manager import update_quest
    from services.resource_manager import get_all_resources_under_path, change_resource_uploader
    from services.user_services import get_user_by_uid, update_user
    from models import db
    agent_uid = str(agent_uid)
    # check agent privilege
    if agent_uid != accept_uid:
        if not get_user_by_uid(agent_uid).privilege.operate_quest:
            return 2
    # check user privilege
    if not get_user_by_uid(accept_uid).privilege.accept_quest:
        return 1
    quest = get_quest_by_qid(qid)
    # check quest availability
    if quest.status != "HIRING":
        return 3
    # TODO: solve simultaneous problem
    quest.accept_uid = accept_uid
    quest.accept_on = db.func.now()
    update_quest(quest)
    quest.status = "WORKING"
    db.session.commit()
    update_user(accept_uid)
    # assign uploader to resources if exist
    if quest.resource is not None:
        resources = get_all_resources_under_path(".sys/quest/" + str(qid))
        for resource in resources:
            try:
                change_resource_uploader(resource, accept_uid)
            except:
                pass
    return 0
Exemplo n.º 2
0
def quest_check(qid):
    quest, chapter, manga = get_quest_by_qid(qid)
    if quest is None:
        abort(404)
    from services.user_services import get_user_by_uid
    from services.user_services import get_users
    if quest.quest_type == "PROOFREADING":
        return render_template('quest/proofreading.html',
                               user=get_user_by_uid(session.get('uid')),
                               quest=quest,
                               get_users=get_users)
    return render_template('quest/article.html',
                           user=get_user_by_uid(session.get('uid')),
                           quest=quest,
                           get_users=get_users)
Exemplo n.º 3
0
def chapter_mark(uid, cid, mark, force=False):
    from services.user_services import get_user_by_uid
    from models import db
    # check user privilege
    if force is not True and get_user_by_uid(
            uid).privilege.operate_chapter is not True:
        return 1
    chapter, useless = get_chapter_by_cid(cid)
    if chapter.status == "FINISHED" and mark == "WORKING":
        chapter.status = "WORKING"
    if chapter.status == "WORKING" and mark == "FINISHED":
        chapter.status = "FINISHED"
    if chapter.status == "WORKING" and mark == "HALT":
        chapter.status = "HALT"
        # halt all non-finished quests
        from services.quest_manager import close_quest
        for quest in chapter.quests:
            if quest.status != "FINISHED":
                try:
                    code = close_quest(uid, quest.qid)
                except:
                    pass
    if chapter.status == "HALT" and mark == "WORKING":
        chapter.status = "WORKING"
        # reopen all non-finished quests
        from services.quest_manager import reopen_quest
        for quest in chapter.quests:
            if quest.status != "FINISHED":
                try:
                    code = reopen_quest(uid, quest.qid)
                except:
                    pass
    db.session.commit()
    return 0
Exemplo n.º 4
0
def upload_resource(file, uid, filepath, public_access, filename=None, file_ext=None):
    from models.resource import Resource
    from services.user_services import get_user_by_uid
    from models import db
    from os import path
    from os import makedirs
    secure_filename(file.filename)
    secure_filepath(filepath)
    # check user privilege
    if get_user_by_uid(uid).privilege.upload_file is False:
        return None
    if not path.exists(RESOURCE_FOLDER + filepath):
        makedirs(RESOURCE_FOLDER + filepath)
    if filename is None:
        filename = file.filename
    else:
        if file_ext is None:
            filename = filename + path.splitext(file.filename)[1]
        else:
            filename = filename + '.' + file_ext
    # filename clash resolve
    if path.exists(path.join(RESOURCE_FOLDER + filepath, file.filename)):
        ext = '.' + filename.split('.')[-1]
        name = filename[:len(filename)-len(ext)]
        count = 1
        while path.exists(path.join(RESOURCE_FOLDER + filepath, name + '(' + str(count) + ')' + ext)):
            count += 1
        filename = name + '(' + str(count) + ')' + ext
    # save file
    file.save(path.join(RESOURCE_FOLDER + filepath, filename))
    # update database
    new_resource = Resource(resource_name=filename, resource_path=filepath, uploader_uid=uid, public_access=public_access)
    db.session.add(new_resource)
    db.session.commit()
    return new_resource
Exemplo n.º 5
0
def transfer_quest(uid, qid):
    from models import db
    from services.user_services import get_user_by_uid
    from services.resource_manager import delete_resource, change_resource_uploader, get_all_resources_under_path
    # check user privilege
    quest = get_quest_by_qid(qid)
    user = get_user_by_uid(uid)
    if not user.privilege.operate_quest:
        return 1
    # update quest
    quest.status = "HIRING"
    quest.accept_uid = None
    res = quest.resource
    # quest.resource_rid = None
    db.session.commit()
    if res is not None:
        # delete_resource(res, res.uploader_uid)
        # change the owner of all files under the quest folder to nobody
        resources = get_all_resources_under_path(".sys/quest/" + str(qid))
        for resource in resources:
            try:
                change_resource_uploader(resource, None)
            except:
                pass
    return 0
Exemplo n.º 6
0
def manga_cover(uid, new_cover, mid):
    from models import db
    from services.user_services import get_user_by_uid
    from services.resource_manager import upload_resource, delete_resource, compress_image
    from os.path import join
    # check user privilege
    user = get_user_by_uid(uid)
    if not user.privilege.operate_quest:
        return 1
    # check manga existence
    manga = get_manga_by_mid(mid)
    if manga is None:
        return 2
    # change cover
    old_cover = manga.manga_cover
    manga.manga_cover_rid = None
    db.session.commit()
    delete_resource(old_cover, uid)
    resource = upload_resource(new_cover,
                               uid,
                               '.sys/manga/' + str(manga.mid),
                               True,
                               filename='cover')
    manga.manga_cover_rid = resource.rid
    db.session.commit()
    compress_image(join(resource.resource_path, resource.resource_name))
    update_manga(manga)
    return 0
Exemplo n.º 7
0
def quest():
    from services.user_services import get_user_by_uid
    from services.content_manager import get_quests
    from services.statistics import count_iter
    return render_template('dashboard/quest.html',
                           user=get_user_by_uid(session['uid']),
                           get_quests=get_quests,
                           count_iter=count_iter)
Exemplo n.º 8
0
def manga():
    from services.user_services import get_user_by_uid
    from services.content_manager import get_mangas
    from services import statistics
    return render_template('manga.html',
                           user=get_user_by_uid(session.get('uid')),
                           mangas=get_mangas(),
                           statistics=statistics)
Exemplo n.º 9
0
def change_resource_accessibility(res, uid, new_accessibility):
    from services.user_services import get_user_by_uid
    from models import db
    user = get_user_by_uid(uid)
    # check user privilege
    if user.privilege.operate_file is not True:
        return 1
    res.public_access = new_accessibility
    db.session.commit()
Exemplo n.º 10
0
def new_dir(uid, filepath, dir_name):
    from services.user_services import get_user_by_uid
    from os import path, makedirs
    # check user privilege
    if get_user_by_uid(uid).privilege.operate_file is not True:
        return 1
    if not path.exists(path.join(RESOURCE_FOLDER, filepath, dir_name)):
        makedirs(path.join(RESOURCE_FOLDER, filepath, dir_name))
    return 0
Exemplo n.º 11
0
def icode():
    if request.method == 'GET':
        from services.user_services import get_user_by_uid
        return render_template('dashboard/invitation.html',
                               user=get_user_by_uid(session['uid']))
    privilege = 2  # TODO: For now, only issue privilege 2
    code, i_code = user_services.issue_invitation(session['uid'], privilege)
    response = {'code': code, 'i_code': i_code}
    return JSONEncoder().encode(response)
Exemplo n.º 12
0
def chapter_check(cid):
    chapter, manga = get_chapter_by_cid(cid)
    if chapter is None:
        abort(404)
    from services.user_services import get_user_by_uid
    return render_template('chapter_template.html',
                           user=get_user_by_uid(session.get('uid')),
                           chapter=chapter,
                           manga=manga)
Exemplo n.º 13
0
def index():
    from services.user_services import get_user_by_uid
    from services.content_manager import get_quests
    from services import statistics
    from services.content_manager import get_mangas
    return render_template('index.html',
                           user=get_user_by_uid(session.get('uid')),
                           get_quests=get_quests,
                           mangas=get_mangas(),
                           statistics=statistics)
Exemplo n.º 14
0
def manga_check(mid):
    from services import statistics
    manga = get_manga_by_mid(mid)
    if manga is None:
        abort(404)
    from services.user_services import get_user_by_uid
    return render_template('manga_template.html',
                           user=get_user_by_uid(session.get('uid')),
                           manga=manga,
                           statistics=statistics)
Exemplo n.º 15
0
def delete_resource(res, uid):
    from models import db
    from services.user_services import get_user_by_uid
    from os import path, remove
    # check user privilege
    if res.uploader_uid != uid and get_user_by_uid(uid).privilege.operate_file is not True:
        return 1
    filepath = get_resource_filepath(res)
    remove(filepath)
    db.session.delete(res)
    db.session.commit()
    return 0
Exemplo n.º 16
0
def close_quest(uid, qid):
    from models import db
    from services.user_services import get_user_by_uid
    # check user privilege
    quest = get_quest_by_qid(qid)
    user = get_user_by_uid(uid)
    if not user.privilege.operate_quest:
        return 1
    # mark it close
    quest.complete_on = db.func.now()
    quest.status = "CLOSED"
    db.session.commit()
    return 0
Exemplo n.º 17
0
def reopen_quest(uid, qid, force=False):
    from models import db
    from services.user_services import get_user_by_uid
    # check user privilege
    quest = get_quest_by_qid(qid)
    user = get_user_by_uid(uid)
    if force is not True and not user.privilege.operate_quest:
        return 1
    # mark it open
    quest.complete_on = db.func.now()
    if quest.accept_uid is not None:
        quest.status = "WORKING"
    else:
        quest.status = "HIRING"
    db.session.commit()
    return 0
Exemplo n.º 18
0
def manga_title(uid, new_title, mid):
    from models import db
    from services.user_services import get_user_by_uid
    # check user privilege
    user = get_user_by_uid(uid)
    if not user.privilege.operate_quest:
        return 1
    # check manga existence
    manga = get_manga_by_mid(mid)
    if manga is None:
        return 2
    # change title
    manga.manga_name = new_title
    db.session.commit()
    update_manga(manga)
    return 0
Exemplo n.º 19
0
def delete_chapter(uid, cid):
    from models import db
    from services.user_services import get_user_by_uid
    from services.quest_manager import delete_quest
    # check user privilege
    chapter, useless = get_chapter_by_cid(cid)
    user = get_user_by_uid(uid)
    if not user.privilege.operate_chapter:
        return 1
    # delete quests
    for quest in chapter.quests:
        delete_quest(uid, quest.qid)
    # delete chapter
    db.session.delete(chapter)
    db.session.commit()
    return 0
Exemplo n.º 20
0
def create_resource(filename, uid, filepath, public_access):
    from models.resource import Resource
    from services.user_services import get_user_by_uid
    from models import db
    from os import path
    from os import makedirs
    secure_filename(filename)
    # check user privilege
    if get_user_by_uid(uid).privilege.upload_file is False:
        return None
    if not path.exists(RESOURCE_FOLDER + filepath):
        makedirs(RESOURCE_FOLDER + filepath)
    new_file = open(path.join(RESOURCE_FOLDER + filepath, filename), "w")
    new_resource = Resource(resource_name=filename, resource_path=filepath, uploader_uid=uid, public_access=public_access)
    db.session.add(new_resource)
    db.session.commit()
    return new_resource
Exemplo n.º 21
0
def manga_status(uid, new_status, mid):
    from models import db
    from services.user_services import get_user_by_uid
    # check user privilege
    user = get_user_by_uid(uid)
    if not user.privilege.operate_quest:
        return 1
    # check manga existence
    manga = get_manga_by_mid(mid)
    if manga is None:
        return 2
    # check status validity
    if new_status not in ["WORKING", "HALT", "FINISHED"]:
        return 3
    manga.status = new_status
    db.session.commit()
    return 0
Exemplo n.º 22
0
def delete_quest(uid, qid):
    from models import db
    from services.user_services import get_user_by_uid
    from services.resource_manager import get_all_resources_under_path, delete_resource
    # check user privilege
    quest = get_quest_by_qid(qid)
    user = get_user_by_uid(uid)
    if not user.privilege.operate_quest:
        return 1
    # delete all resources under the quest file
    try:
        resources = get_all_resources_under_path(".sys/quest/" + qid)
        for res in resources:
            delete_resource(res, uid)
    except:
        pass
    db.session.delete(quest)
    db.session.commit()
    return 0
Exemplo n.º 23
0
def change_quest_accessibility(uid, qid, new_accessibility):
    from models import db
    from services.user_services import get_user_by_uid
    from services.resource_manager import get_all_resources_under_path, change_resource_accessibility
    # check user privilege
    quest = get_quest_by_qid(qid)
    user = get_user_by_uid(uid)
    if not user.privilege.operate_quest:
        return 1
    # check quest status
    if quest.status != "FINISHED" and quest.status != "CLOSED":
        return 2
    # change resources accessibility
    resources = get_all_resources_under_path('.sys/quest/' + qid)
    for res in resources:
        change_resource_accessibility(res, uid, new_accessibility)
    # change quest accessibility
    quest.public_access = new_accessibility
    db.session.commit()
    return 0
Exemplo n.º 24
0
def create_manga(uid, name, cover):
    from models import db
    from services.user_services import get_user_by_uid
    from services.resource_manager import upload_resource, compress_image
    from models.manga import Manga
    from os.path import join
    # check user privilege
    user = get_user_by_uid(uid)
    if not user.privilege.operate_manga:
        return 1
    # create manga
    new_manga = Manga(manga_name=name)
    db.session.add(new_manga)
    db.session.commit()
    resource = upload_resource(cover,
                               uid,
                               '.sys/manga/' + str(new_manga.mid),
                               True,
                               filename='cover')
    new_manga.manga_cover_rid = resource.rid
    db.session.commit()
    compress_image(join(resource.resource_path, resource.resource_name))
    update_manga(new_manga)
    return 0
Exemplo n.º 25
0
def finish_quest(uid, qid):
    from services.user_services import get_user_by_uid, update_user
    from models import db
    # check user privilege
    quest = get_quest_by_qid(qid)
    if quest.accept_uid != uid and not get_user_by_uid(
            uid).privilege.operate_quest:
        return 1
    # mark it finish
    quest.complete_on = db.func.now()
    quest.status = "FINISHED"
    db.session.commit()
    update_user(uid)
    # chain opener
    quests = quest.chapter.quests
    if quest.quest_type == "TRANSLATION" or quest.quest_type == "PROOFREADING":
        if quest.quest_type == "TRANSLATION":
            unfinished_translation = []
            proofreading = []
            typesetting = []
            for q in quests:
                if q.quest_type == "TRANSLATION" and (q.status == "WORKING"
                                                      or q.status == "HIRING"):
                    unfinished_translation.append(q)
                elif q.quest_type == "PROOFREADING":
                    proofreading.append(q)
                elif q.quest_type == "TYPESETTING":
                    typesetting.append(q)
            if len(unfinished_translation) == 0:
                if len(proofreading) > 0:
                    for q in proofreading:
                        if q.status == "CLOSED":
                            reopen_quest(uid, q.qid, force=True)
                else:
                    for q in typesetting:
                        if q.status == "CLOSED":
                            reopen_quest(uid, q.qid, force=True)
        if quest.quest_type == "PROOFREADING":
            unfinished_translation = []
            unfinished_proofreading = []
            typesetting = []
            for q in quests:
                if q.quest_type == "TRANSLATION" and (q.status == "WORKING"
                                                      or q.status == "HIRING"):
                    unfinished_translation.append(q)
                elif q.quest_type == "PROOFREADING" and (
                        q.status == "WORKING" or q.status == "HIRING"):
                    unfinished_proofreading.append(q)
                elif q.quest_type == "TYPESETTING":
                    typesetting.append(q)
            if len(unfinished_translation) == 0 and len(
                    unfinished_proofreading) == 0:
                for q in typesetting:
                    if q.status == "CLOSED":
                        reopen_quest(uid, q.qid, force=True)
    # auto finishing chapter
    for q in quests:
        if q.status != "FINISHED":
            return 0
    from services.content_manager import chapter_mark
    chapter_mark(uid, quest.chapter.cid, "FINISHED", force=True)
    return 0
Exemplo n.º 26
0
def about():
    from services.user_services import get_user_by_uid
    return render_template('about.html',
                           user=get_user_by_uid(session.get('uid')))
Exemplo n.º 27
0
def members():
    from services.user_services import get_user_by_uid, get_users
    from services.statistics import count_iter
    from services.content_manager import get_quests
    return render_template('members.html', user=get_user_by_uid(session.get('uid')), get_users=get_users, get_quests=get_quests, count_iter=count_iter)
Exemplo n.º 28
0
def members_check(uid):
    from services.user_services import get_user_by_uid
    from services.content_manager import get_quests
    return render_template('member_template.html', user=get_user_by_uid(session.get('uid')), member=get_user_by_uid(uid), get_quests=get_quests)
Exemplo n.º 29
0
def content():
    from services.user_services import get_user_by_uid
    return render_template('dashboard/content.html',
                           user=get_user_by_uid(session['uid']))
Exemplo n.º 30
0
def profile():
    from services.user_services import get_user_by_uid
    return render_template('dashboard/profile.html',
                           user=get_user_by_uid(session['uid']))