Example #1
0
def flags_complete(queue, id):
    cuser = muser.getCurrentUser()
    if queue not in ["mod", "admin"]:
        abort(404)
    cuser = muser.getCurrentUser()
    if not cuser.isMod():
        abort(404)
    q = {"mod": mreviews.ModQueue, "admin": mreviews.AdminQueue}
    q = q[queue]
    data = q.getItemData(id)
    if data == False:
        abort(404)
    if data["state"] == 0:
        q.completeReview(id)
    return url_for("flags_page")
Example #2
0
def course_enroll(id, label=None):
    if not mcourses.Courses.exists(id) or muser.require_login(
    ) or muser.getCurrentUser().isDisabled():
        abort(404)
    course = mcourses.Courses(id)
    if course.getLabel() != label:
        return redirect(
            url_for("course_enroll", id=id, label=course.getLabel()))
    cuser = muser.getCurrentUser()
    if course.getCourseRole(cuser) == 4 or (
            cuser.isDev() and
        (course.isEnrolled(cuser) or course.getDetail("manual_enrollment"))):
        if request.method == "POST":
            user = muser.User.safe(request.form["id"])
            if not user:
                abort(400)
            course.enroll(user)
            if "add_another" in request.form:
                return redirect(url_for("course_enroll", id=id, label=label))
            else:
                return redirect(
                    url_for("course_admin",
                            id=id,
                            label=label,
                            page="membership"))
        return render_template("courses/enroll.html",
                               title="Benutzer einschreiben: " +
                               course.getTitle(),
                               thispage="courses",
                               course=course)
    elif not course.getDetail("manual_enrollment"):
        if not course.isEnrolled(cuser):
            course.enroll(cuser)
            enrolled_count = course.getEnrolledCount()
            earners = course.getEnrolledByPerm(4) + course.getEnrolledByPerm(3)
            if enrolled_count - len(earners) < 50:
                for e in earners:
                    e.setDetail("reputation", 1 + e.getInfo()["reputation"])
                    e.setReputationChange(
                        "enroll", "Kurs: [" + course.getTitle() + "](/c/" +
                        str(course.id) + ")", 1)
        if course.getDetail("state") != 0:
            return redirect(
                url_for("course_start", label=course.getLabel(), id=course.id))
        return redirect(
            url_for("course_info", label=course.getLabel(), id=course.id))
    else:
        abort(403)
Example #3
0
def devtools_for_user(id):
    if not muser.User.exists(id):
        abort(404)
    cuser = muser.getCurrentUser()
    id = int(id)
    if not cuser.isDev():
        abort(403)

    user = muser.User(id)

    data = request.json

    if data["action"] == "update-role":
        user.setDetail("role", data["role"])
        return "ok"
    elif data["action"] == "override-delete":
        if user.isDeleted():
            user.setDetail("reputation", 0)
            return "ok"
        else:
            return "account not deleted", 400
    elif data["action"] == "reget-reputation":
        user.regetRep(data["global"])
        return "ok"

    return "no action found", 400
Example #4
0
def survey_edit(id, label=None):
    cuser = muser.getCurrentUser()
    if msurvey.Survey.exists(id):
        survey = msurvey.Survey(id)
        forum = mforum.Forum(survey.getDetail("associated_forum"))
        if not (cuser.isDev() or survey.getDetail("survey_owner")
                == cuser.id) or cuser.isDisabled():
            if survey.getDetail("associated_forum") == 0:
                abort(404)
            else:
                cou = mcourses.Courses(forum.id)
                if not cou.getCourseRole(cuser) > 3 or cuser.isDIsabled():
                    abort(404)
        if request.method == "GET":
            if label != survey.getLabel():
                return redirect(
                    url_for("survey_edit", id=id, label=survey.getLabel()))
            else:
                return render_template("survey/edit.html",
                                       title="Umfrage bearbeiten - " +
                                       survey.getTitle(),
                                       survey=survey,
                                       forum=forum)
        elif request.method == "POST":
            survey.setDetail("content", request.json["content"])
            survey.setDetail("title", request.json["title"])
            survey.setDetail("state", request.json["state"])
            return "ok"
    else:
        abort(404)
Example #5
0
def user_del_page(id, name=None):
    try:
        id = int(id)
    except:
        abort(404)
    if muser.User.exists(id):
        user = muser.User.from_id(id)
        cuser = muser.getCurrentUser()
        mt = user.getDetail("mergeto")
        if mt and not cuser.isMod():
            return redirect(url_for("user_page", id=mt))
        if user.isDeleted():
            if not cuser.isMod():
                abort(404)
            else:
                return redirect(url_for("user_deleted_page", id=id))

        if not cuser.isMod() and cuser.id != id:
            abort(404)
        if name != user.getDetail("name"):
            return redirect(
                url_for("user_del_page", id=id, name=user.getDetail("name")))
        else:
            return render_template("user/delete.html",
                                   data=user,
                                   thispage="user",
                                   title="Benutzer löschen: " +
                                   user.getHTMLName(False),
                                   current_time=time.time())
    else:
        abort(404)
Example #6
0
def tools_info():
    cuser = muser.getCurrentUser()
    if not cuser.isMod():
        abort(404)
    return render_template("tools/info.html",
                           title="Werkzeuge",
                           thispage="tools")
Example #7
0
def branch_revert_override(override_id,
                           branch_id,
                           course_id,
                           course_label=None):
    if not mcourses.Courses.exists(course_id):
        abort(404)
    course = mcourses.Courses(course_id)
    cuser = muser.getCurrentUser()
    if course.getLabel() != course_label and request.method != "POST":
        return redirect(
            url_for("branch_revert_override",
                    branch_id=branch_id,
                    course_id=course_id,
                    course_label=course.getLabel(),
                    override_id=override_id))
    if not mpull_requests.Branch.exists(branch_id):
        abort(404)
    branch = mpull_requests.Branch(branch_id)

    if branch.getDetail("pull_request") or branch.isAbandoned(): abort(404)

    if not (branch.getDetail("author") == cuser.id or cuser.isMod(
    )) or cuser.isDisabled() or branch.getDetail("course_id") != course.id:
        abort(404)

    override = branch.getSingleOverride(override_id)
    if not override or override["branch"] != branch_id:
        abort(404)
    branch.removeOverride(override_id)

    return redirect(
        url_for("course_single_branch",
                id=branch_id,
                course_id=course_id,
                course_label=course.getLabel()))
Example #8
0
def preferences_for_user(id):
    if not muser.User.exists(id):
        abort(404)
    cuser = muser.getCurrentUser()
    id = int(id)
    if id < 0 and not cuser.isMod():
        abort(403)
    if not (cuser.isMod() or id == cuser.id):
        abort(403)

    user = muser.User(id)

    data = request.json

    VALID_PREFERENCES = [
        "darkTheme", "autoSave", "mail:community", "mail:research",
        "pinnedNav", "betaTester", "gdpr:hideHomeCourseRecommendations"
    ]

    if data["key"] not in VALID_PREFERENCES:
        return jsonify({"result": "error", "error": "Ungültige Einstellung"})

    user.setPref(data["key"], data["value"])

    return jsonify({"result": "ok"})
Example #9
0
def course_unit_reorder(id, label=None):
    if not mcourses.Courses.exists(id):
        abort(404)
    course = mcourses.Courses(id)
    cuser = muser.getCurrentUser()
    if not (course.getCourseRole(cuser) >= 3) or cuser.isDisabled():
        abort(404)
    if request.method == "POST":
        data = (request.json)
        for item in data:
            u = mcourses.Units(item["id"])
            if u.getDetail("courseid") != id:
                return "invalid"
            u.setDetail("unit_order", item["order"])
            u.setDetail("parent", 0)
            for subitem in item["subitems"]:
                u = mcourses.Units(subitem["id"])
                if u.getDetail("courseid") != id:
                    return "invalid"
                u.setDetail("unit_order", subitem["order"])
                u.setDetail("parent", item["id"])
        return "ok"
    else:
        if course.getLabel() != label:
            return redirect(
                url_for("course_unit_reorder", id=id, label=course.getLabel()))
        return render_template('courses/edit/reorder.html',
                               title="Kursmodule neu anordnen: " +
                               course.getTitle(),
                               thispage="courses",
                               data=course)
Example #10
0
 def post(self):
     bidsToAddJson = self.request.get(dojoAjaxKey)
     bidsToAddObj = json.loads(bidsToAddJson)
     # Adding the bid model objects
     dbUser = getTheUser(users.get_current_user())
     # Getting the bids for the current user
     userBids = dbUser.bids
     currentBids = {}
     #TODO if the user is an admin, then add all the bids
     #TODO if the user is a MO, the add the users for the MO
     i = 0 
     for bid in userBids:
         if bid.loan:
             currentBids[bid.loan.collateral_key] = bid
         else:
             currentBids[i] = bid
             i += 1
            
     currentBidsKeys = currentBids.keys()
     # Adding or updating the bids
     statusChoices = Bid.status.choices
     creationTime = datetime.now()
     expirationTime = creationTime + timedelta(hours=2)
     for key, value in bidsToAddObj.iteritems():
         # Getting user input values
         participation = float(value['participation'])
         bidrate = float(value['bidrate'])
         # Checking if there is a bid for a given collateral key
         if (key in currentBidsKeys):
             bid = currentBids[key]
             bid.participation = participation
             bid.bidrate = bidrate
             bid.put()
         else:
             loanQuery = loan.Loan.all(). \
                     filter('collateral_key =', key)
             loan = loanQuery.get()
             #TODO check why the status is random?
             #status = random.choice(statusChoices)
             status = 'Active'
             Bid(parent = dbUser,
                     user = dbUser,
                     loan = loan,
                     participation = participation,
                     bidrate = bidrate,
                     #TODO add the posibility of get a None value in
                     # bidrate, it is in the myscript.js
                     ordertype = 'Noncompetitive' if bidrate else
                             'Competitive',
                     status = status,
                     createdAt = creationTime,
                     expiresAt = expirationTime,
                     #Added to agree with the LiqSpop engine
                     #TODO is better to put it on the web
                     bidtype = 'Specified',
                     lorm = 'Loan',
                     ordertiming = 'Day Trade',
                     key_name = "%s %s" % (getCurrentUser(),
                         creationTime),
                 ).put()
Example #11
0
def upload_post():
    cu = muser.getCurrentUser()
    if not cu.isLoggedIn() or cu.isDisabled():
        return redirect(url_for("upload_dialog", error="not-anonymous"))
    if 'file' not in request.files:
        return redirect(url_for("upload_dialog", error="not-selected"))
    file = request.files['file']
    # if user does not select file, browser also
    # submit an empty part without filename
    if file.filename == '':
        return redirect(url_for("upload_dialog", error="not-selected"))

    if file and allowed_file(file.filename):
        filext = file.filename.rsplit('.', 1)[1].lower()

        img_key = hashlib.md5(file.read()).hexdigest()
        file.seek(0)
        file.save(os.path.join(UPLOAD_PATH, img_key + "." + filext))

        filesize = os.stat(os.path.join(UPLOAD_PATH,
                                        img_key + "." + filext)).st_size

        img = mupload.UserUpload.new(cu, img_key + "." + filext, filesize)

        return render_template("uploader/info.html",
                               filepath="/upload/" + str(img) + "/" +
                               secure_filename(file.filename))
    return redirect(url_for("upload_dialog", error="not-allowed"))
Example #12
0
def assignments(team):
    tg, member, cuser = team_access_control(team, muser.getCurrentUser())

    assignments = TeachAssignments.query.filter(
        TeachAssignments.team_id == tg.id, TeachAssignments.active).all()

    excluded_items = []
    own_assignment_completions = TeachAssignmentCompletions.query.filter(
        TeachAssignmentCompletions.team_id == tg.id,
        TeachAssignmentCompletions.user_id == cuser.id)

    excluded_items += [
        item.assignment_id for item in own_assignment_completions
    ]

    for item in assignments:
        if item.id in excluded_items:
            assignments.remove(item)

    return render_template("teach/team/assignments.html",
                           title=tg.name,
                           thispage="teach",
                           tg=tg,
                           member=member,
                           assignments=assignments,
                           course_maker=mcourses.Courses.__init__,
                           TeachAssignmentTypes=TeachAssignmentTypes)
Example #13
0
def dialog_post_api(post_id, route):
    try:
        post_id = int(post_id)
    except:
        return _error("Ungültige Anfrage, bitte im globalen Forum melden.")
    cuser = muser.getCurrentUser()
    if not cuser.isLoggedIn():
        return _error("Nur angemeldete Benutzer können Beiträge melden.")

    if not mforum.Article.exists(post_id):
        return _error("Beitrag nicht gefunden.")
    post = mforum.Article(post_id)

    if post.isDeleted() or post.getDetail("author") == cuser.id:
        r = "post_own_or_deleted"
    elif post.isClosed():
        r = "post_closed"
    elif cuser.may("forum_closeQuestion"):
        r = "post_close_priv"
    else:
        r = "post_no_close_priv"

    if route.startswith("mod"):
        r = "post"

    return _dialog(r, route)
Example #14
0
def join_complete(team):
    tg, member, cuser = team_access_control(team, muser.getCurrentUser())

    return render_template("teach/team/welcome.html",
                           title=_("Neue Lerngruppe erstellt"),
                           thispage="teach",
                           tg=tg)
Example #15
0
def tools_user_flags_item(id):
    cuser = muser.getCurrentUser()
    if not cuser.isMod():
        abort(404)

    flagged = mreviews.CustomQueue.getItemData(id)
    flagged = dict(flagged)
    flagged["user"] = muser.User.from_id(flagged["item_id"])

    if not flagged or flagged["item_type"] != "user":
        abort(404)

    flags = mreviews.CustomQueue.getItemFlags(id)

    def _prepare(d):
        d = dict(d)
        d["flagger"] = muser.User.from_id(d["flagger_id"])
        return d

    flags = list(map(_prepare, flags))

    has_open_flags = mreviews.CustomQueue.getItemOpenFlagsCount(id) != 0

    return render_template("tools/user_flag_item.html",
                           title="Werkzeuge - Benutzermeldungen",
                           thispage="tools",
                           item=flagged,
                           flags=flags,
                           has_open_flags=has_open_flags)
Example #16
0
def course_single_branch(id, course_id, course_label=None):
    if not mcourses.Courses.exists(course_id):
        abort(404)
    course = mcourses.Courses(course_id)
    cuser = muser.getCurrentUser()
    if course.getLabel() != course_label and request.method != "POST":
        return redirect(
            url_for("course_single_branch",
                    id=id,
                    course_id=course_id,
                    course_label=course.getLabel()))
    if not mpull_requests.Branch.exists(id):
        abort(404)
    branch = mpull_requests.Branch(id)

    if not (branch.getDetail("author") == cuser.id or cuser.isMod(
    )) or cuser.isDisabled() or branch.getDetail("course_id") != course.id:
        abort(404)

    return render_template('courses/pull-requests/branch.html',
                           title="Branch #" + str(branch.id) + " für " +
                           course.getTitle(),
                           thispage="courses",
                           course=course,
                           branch=branch)
Example #17
0
def course_single_pr(id, course_id, course_label=None):
    if not mcourses.Courses.exists(course_id):
        abort(404)
    course = mcourses.Courses(course_id)
    cuser = muser.getCurrentUser()
    if course.getLabel() != course_label and request.method != "POST":
        return redirect(
            url_for("course_single_pr",
                    id=id,
                    course_id=course_id,
                    course_label=course.getLabel()))
    if not mpull_requests.PullRequest.exists(id):
        abort(404)
    pr = mpull_requests.PullRequest(id)
    branch = pr.getBranch()

    if pr.isHiddenAsSpam() and not cuser.isLoggedIn() or pr.getDetail(
            "course_id") != course.id:
        abort(404)

    return render_template('courses/pull-requests/pr.html',
                           title="PR #" + str(pr.id) + " für " +
                           course.getTitle(),
                           thispage="courses",
                           course=course,
                           pr=pr,
                           branch=branch)
Example #18
0
def branch_cancel(branch_id, course_id, course_label=None):
    if not mcourses.Courses.exists(course_id):
        abort(404)
    course = mcourses.Courses(course_id)
    cuser = muser.getCurrentUser()
    if course.getLabel() != course_label and request.method != "POST":
        return redirect(
            url_for("branch_submit",
                    branch_id=branch_id,
                    course_id=course_id,
                    course_label=course.getLabel()))
    if not mpull_requests.Branch.exists(branch_id):
        abort(404)
    branch = mpull_requests.Branch(branch_id)

    if branch.getDetail("pull_request") or branch.isAbandoned(): abort(404)

    if request.method == "POST":
        branch.setDetail("abandoned", 1)
        branch.setDetail("abandoned_date", time.time())
        return jsonify({
            "url":
            url_for("course_single_branch",
                    id=branch.id,
                    course_id=course.id,
                    course_label=course.getLabel())
        })
    else:
        return render_template('courses/pull-requests/cancel.html',
                               title="Verwerfen: Branch #" + str(branch.id) +
                               " für " + course.getTitle(),
                               thispage="courses",
                               course=course,
                               branch=branch)
Example #19
0
def tools_forum_flags_action(id):
    cuser = muser.getCurrentUser()
    if not cuser.isMod():
        abort(404)

    flagged = mreviews.CustomQueue.getItemData(id)
    flagged = dict(flagged)

    if not flagged or (flagged["item_type"] != "forum.question"
                       and flagged["item_type"] != "forum.answer"):
        abort(404)

    if flagged["item_type"] == "forum.question":
        flagged["post"] = mforum.Article(flagged["item_id"])
    elif flagged["item_type"] == "forum.answer":
        flagged["post"] = mforum.Answer(flagged["item_id"])

    if flagged["state"] == 0:
        flags = request.json["flags"]
        for f in flags:
            mreviews.CustomQueue.manageFlag(id, f, request.json["result"],
                                            request.json["response"])
        if mreviews.CustomQueue.getItemOpenFlagsCount(id) == 0:
            return "{ok:last}"
        return "{ok}"
    return "{ok:last}"
Example #20
0
def assignment_complete(team, assignment):
    tg, member, cuser = team_access_control(team, muser.getCurrentUser())

    assignment = TeachAssignments.query.filter(
        TeachAssignments.team_id == tg.id, TeachAssignments.active,
        TeachAssignments.token == assignment).first_or_404()

    if request.method == "POST":
        if assignment.type == TeachAssignmentTypes.CLICK_TO_RESOLVE:
            ac = TeachAssignmentCompletions(
                team_id=tg.id,
                assignment_id=assignment.id,
                user_id=cuser.id,
                token="".join([
                    "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"[
                        random.randint(0, 61)] for i in range(16)
                ]))
            ac.submission_at = datetime.datetime.now()
            ac.is_submission_late = (
                assignment.to_be_completed_before is not None
                and ac.submission_at > assignment.to_be_completed_before)
            ac.points_for_submission = assignment.max_points_for_completion

            db.session.add(ac)
            db.session.commit()
            return redirect(url_for("teach.assignments", team=tg.token))

    return render_template("teach/team/assignment_single.html",
                           title=tg.name,
                           thispage="teach",
                           tg=tg,
                           member=member,
                           assignment=assignment,
                           course_maker=mcourses.Courses.__init__,
                           TeachAssignmentTypes=TeachAssignmentTypes)
Example #21
0
def tools_forum_flags_item(id):
    cuser = muser.getCurrentUser()
    if not cuser.isMod():
        abort(404)

    flagged = mreviews.CustomQueue.getItemData(id)
    flagged = dict(flagged)

    if not flagged or (flagged["item_type"] != "forum.question"
                       and flagged["item_type"] != "forum.answer"):
        abort(404)

    if flagged["item_type"] == "forum.question":
        flagged["post"] = mforum.Article(flagged["item_id"])
    elif flagged["item_type"] == "forum.answer":
        flagged["post"] = mforum.Answer(flagged["item_id"])

    flags = mreviews.CustomQueue.getItemFlags(id)

    def _prepare(d):
        d = dict(d)
        d["flagger"] = muser.User.from_id(d["flagger_id"])
        return d

    flags = list(map(_prepare, flags))

    has_open_flags = mreviews.CustomQueue.getItemOpenFlagsCount(id) != 0

    return render_template("tools/forum_flag_item.html",
                           title="Werkzeuge - Beitragsmeldungen",
                           thispage="tools",
                           item=flagged,
                           flags=flags,
                           has_open_flags=has_open_flags)
Example #22
0
def Update():
    cuser = muser.getCurrentUser()
    return jsonify({
        "badges": cuser.hasUnknownBadges(),
        "reputation": cuser.getRepDelta(),
        "messages": g.countNotifications(cuser.getNotifications())
    })
Example #23
0
def dialog_post_api_fetch(post_id, route):
    try:
        post_id = int(post_id)
    except:
        return _error("Ungültige Anfrage, bitte im globalen Forum melden.")
    cuser = muser.getCurrentUser()
    if not cuser.isLoggedIn():
        return _error("Nur angemeldete Benutzer können Beiträge melden.")

    if not mforum.Article.exists(post_id):
        return _error("Beitrag nicht gefunden.")
    post = mforum.Article(post_id)

    live = bool(request.values.get("live", 0))
    if live:
        if post.isClosed() or post.isDeleted():
            return "<div style='color: #c00; font-family:  \"Open Sans\", Arial, sans-serif'>Beitrag ist bereits geschlossen oder gelöscht.</div>"

        if route not in ["flagging/closure/duplicate", "closure/duplicate"]:
            return "<div style='color: #c00; font-family:  \"Open Sans\", Arial, sans-serif'>Ein Fehler ist aufgetreten. Bitte im <a href='/f/0' target='_blank' style='color: #600; font-weight: bold;'>globalen Forum</a> melden.</div>"

        search = request.values.get("search", "").strip()
        if search == "":
            return ""

        id = None
        if search.startswith("#"):
            try:
                id = int(search[1:])
            except:
                id = None
            if not mforum.Article.exists(id):
                id = None

        if id:
            data = mforum.Article(id)
            return render_template("forum/raw_qna.html", data=data)
        else:
            return "<div style='font-family:  \"Open Sans\", Arial, sans-serif'>Bitte wähle ein Suchergebnis aus der Liste rechts.</div>"

    else:
        if post.isClosed() or post.isDeleted():
            return "[]"

        if route not in ["flagging/closure/duplicate", "closure/duplicate"]:
            return "[]"

        search = request.values.get("search", "").strip()
        if search == "":
            return "[]"
        forum = mforum.Forum(post.getDetail("forumID"))
        data = forum.getArticles(search, "score")[:80]
        data = [{
            "id": k.id,
            "title": k.getHTMLTitle(),
            "score": k.getScore(),
            "tags": k.getTags(),
            "closed": k.isClosed()
        } for k in data if not k.isDeleted()]
        return jsonify(data[:10])
Example #24
0
def accept(id):
    if not mproposal.Proposal.exists(id):
        abort(404)
    proposal = mproposal.Proposal(id)
    cuser = muser.getCurrentUser()
    if not cuser.isMod():
        abort(403)

    if proposal.getDetail("courseid") == 0:
        proposal.createCourse()
        proposal = mproposal.Proposal(id)

        owner = proposal.getProposer()

        cmail.send_textbased_email(
            owner.getDetail("email"), "Dein Kursvorschlag für '" +
            proposal.getTitle() + "' war erfolgreich!", """Hallo %s,

dein Kursvorschlag für einen Kurs

## %s

war erfolgreich. Du kannst jetzt den Kurs erstellen.

{# Zum Kurs -> %s #}""" %
            (owner.getDetail("realname"), proposal.getTitle(),
             request.url_root + "c/" + str(proposal.getDetail("courseid"))))
    return "{ok}"
Example #25
0
def survey_results(id, label=None):
    cuser = muser.getCurrentUser()
    if msurvey.Survey.exists(id):
        survey = msurvey.Survey(id)
        forum = mforum.Forum(survey.getDetail("associated_forum"))
        if not (cuser.isDev() or survey.getDetail("survey_owner") == cuser.id):
            if survey.getDetail("associated_forum") == 0:
                abort(404)
            else:
                cou = mcourses.Courses(forum.id)
                if not cou.getCourseRole(cuser) > 3:
                    abort(404)
        if request.method == "GET":
            if label != survey.getLabel():
                return redirect(
                    url_for("survey_results", id=id, label=survey.getLabel()))
            else:
                return render_template("survey/results_direct.html",
                                       title="Umfrageergebnisse - " +
                                       survey.getTitle(),
                                       survey=survey,
                                       forum=forum,
                                       int=int,
                                       len=len)
        elif request.method == "POST":
            RESULT = {}
            con = survey.getContent()
            i = 1
            for c in con:
                if c["type"] == "text-answer":
                    RESULT[i] = {
                        "question": c["data"]["question"],
                        "data": [],
                        "type": "text-answer"
                    }
                if c["type"] == "multiple-choice":
                    selc = len(c["data"]["choices"])
                    RESULT[i] = {
                        "question": c["data"]["question"],
                        "data": ["0" for _ in range(selc)],
                        "type": "multiple-choice",
                        "choices": c["data"]["choices"]
                    }
                i += 1
            subm = survey.getSubmissions()
            for s in subm:
                s = json.loads(s[0])
                for field, value in list(s.items()):
                    r = RESULT[int(field)]
                    if r["type"] == "text-answer":
                        if value:
                            r["data"].append(value)
                    elif r["type"] == "multiple-choice":
                        r["data"][int(value)] += str(
                            int(r["data"][int(value) - 1]) + 1)
            survey.setDetail("results", json.dumps(RESULT))
            return "done"
    else:
        abort(404)
Example #26
0
def msg_tpl_data(tpid):
    cuser = muser.getCurrentUser()
    if not cuser.isMod():
        abort(404)

    tpl = mmodmsg.getTemplateById(tpid)

    return jsonify(tpl)
Example #27
0
def dashboard(team):
    tg, member, cuser = team_access_control(team, muser.getCurrentUser())

    return render_template("teach/team/dashboard.html",
                           title=tg.name,
                           thispage="teach",
                           tg=tg,
                           member=member)
Example #28
0
def revoke(id):
    if not mbadges.Badge.exists(id):
        abort(404)
    if not muser.getCurrentUser().isDev():
        abort(403)
    badge = mbadges.Badge(id)
    badge.revokeFrom(request.form["from"], request.form["ts"])
    return redirect(url_for("badges.single", id=id))
Example #29
0
def oauth_callback(provider):
    email = nickname = username = None
    if provider == "google":
        resp = mauth.google.authorized_response()
        if resp is None:
            return redirect("/oauth-error/" + provider)
        session[provider + '_token'] = (resp['access_token'], '')
        me = mauth.google.get('userinfo')
        email = me.data["email"]
        username = me.data["name"].lower().replace(" ", ".")
        username = re.sub("[^a-z0-9.-]", "", username)
        nickname = me.data["name"]
    if email is None:
        return redirect('/oauth_error/' + provider)
    # Look if the user already exists
    cuser = muser.getCurrentUser()
    if cuser.isLoggedIn():
        user = muser.User.oauth_login(provider, email)
        if user < 0:
            cuser.loginMethod_add("oauth:" + provider, email, None)
            return redirect(
                url_for("user_edit_page",
                        id=cuser.id,
                        name=cuser.getDetail("name"),
                        page="login"))
        elif user == cuser.id:
            return redirect("/")
            session["login_time"] = time.time()
        else:
            return redirect(
                url_for("user_edit_page",
                        id=cuser.id,
                        name=cuser.getDetail("name"),
                        page="login-alter",
                        method="google",
                        error="dualism"))
    else:
        user = muser.User.oauth_login(provider, email)
        if user < 0:
            # Create the user. Try and use their name returned by Google,
            # but if it is not set, split the email address at the @.
            if (nickname is None or nickname == "") or (username is None
                                                        or username == ""):
                nickname = username = email.split('@')[0]
            user = muser.User.register(None, nickname, email)
            if user < 0:
                return render_template('login.html',
                                       error="format",
                                       title="Anmelden",
                                       thispage="login")
            user = muser.User.from_id(user)
            user.loginMethod_add("oauth:" + provider, email, None)

    session['login'] = user
    session["login_time"] = time.time()
    return redirect(url_for('index'))
Example #30
0
def commit(id):
    if not mproposal.Proposal.exists(id):
        abort(404)
    proposal = mproposal.Proposal(id)
    cuser = muser.getCurrentUser()
    if cuser.isDisabled() or not cuser.isLoggedIn():
        return "[no.permission]"
    if not proposal.hasUserCommitment(cuser):
        proposal.addUserCommitment(cuser)
    return "{ok}"
Example #31
0
def data_page():
    cuser = muser.getCurrentUser()
    if not cuser.isDev():
        abort(404)
    hasLargeModTraffic = mreviews.ModQueue.getOpenItemCount(
    ) > HIGH_MOD_TRAFFIC
    return render_template("review/data/index.html",
                           thispage="review",
                           title="Moderationslisten",
                           hasLargeModTraffic=hasLargeModTraffic)
Example #32
0
  def get(self):
      page = Page.CALC
      parameters = getPageDict(page)
      parameters['User'] = "******" % (getCurrentUser(), getGroup())
      try:
          c = calc()
          logging.debug(80*"*")
          logging.debug("loans =")
          logging.debug(c['loans'])
          logging.debug(80*"*")
          logging.debug("bids =")
          logging.debug(c['bids'])
          if 'loans' in c and 'bids' in c:
              parameters['loans'] = c['loans']
              parameters['bids'] = c['bids']
          for i in range(1, len(c['bids'])):
              b = Bid.get_by_key_name(key_names = c['bids'][i][0]['bid'])
              for j in range(len(c['bids'][i])):
                  if 'key' in c['bids'][i][j]:
                      l = loan.getLoan(c['bids'][i][j]['key'])
                      if (l.curr_upb >= long(float(c['bids'][i][j]['val']))):
                          l.curr_upb -= long(float(c['bids'][i][j]['val']))
                          l.put()
                      else:
                          raise CalcError("ERROR: At discount Bit %s to Loan %s curr_upb %s" %
                                  (str(c['bids'][i][0]['bid']), str(l.collateral_key),
                                  str(l.curr_upb)))
 
              b.status = 'Accepted'
              b.put()
          self.response.out.write(template.render("templates/results.html",
                  parameters))
      except:
          g = getGroup()
          if g == 'Demo':
              c = Demo_Param_Calc()
              parameters['loans'] = c['loans']
              parameters['bids'] = c['bids']
              self.response.out.write(template.render(
                      "templates/results.html", parameters))
          else:
              self.response.out.write(template.render("templates/oops.html",
                      []))
Example #33
0
 def get(self):
     page = Page.MYBIDS
     parameters = getPageDict(page)
     parameters['User'] = "******" % (getCurrentUser(), getGroup())
     self.response.out.write(template.render("templates/mybids.html",
             parameters))