Ejemplo n.º 1
0
def delete_teacher(user,
                   course,
                   course_slug,
                   lesson_id,
                   teacher_id,
                   institute=""):
    lesson = datamodels.Course.find_lesson_by_course_slug_and_id(
        course.slug, lesson_id)

    if not lesson:
        return jsonify({
            "success": False,
            "message": "Wrong lesson or course"
        }), 400

    if not datamodels.get_user(teacher_id):
        return jsonify({"success": False, "message": "No such teacher"}), 400

    removed = lesson.remove_teacher(teacher_id)

    return jsonify({
        "success": removed,
        "teacher_id": teacher_id,
        "message": "Teacher removed"
    })
Ejemplo n.º 2
0
def remove_user(user, user_id=None, access_type="teacher", institute=""):

    institute = datamodels.Institute.find_by_slug(institute)

    if not institute or (not user.super_admin
                         and not institute.is_admin(user)):
        raise abort(
            404, "No such institute or you don't have permissions to edit it")

    if user.id == user_id and access_type == InstitutePermissionEnum.admin.name:
        return (
            jsonify({
                "success": False,
                "message": "You can't remove yourself from an admin role",
            }),
            400,
        )

    user_to_remove = datamodels.get_user(user_id)
    if not user_to_remove:
        return jsonify({"success": False, "message": "No such user"}), 400

    removed = institute.remove_user(user_to_remove, access_type)

    return jsonify({
        "success": removed,
        "teacher_id": user_id,
        "message": "User removed from role {}".format(access_type),
    })
Ejemplo n.º 3
0
 def test_user_creation(self):
     u = self.makeUser(
         id=1,
         first_name="Marge",
         last_name="Simpson",
         email="*****@*****.**",
         password="******",
     )
     self.session.add(u)
     u2 = datamodels.get_user(1)
     self.assertEqual(u2.full_name, "Marge Simpson")
     self.assertEqual(u2.email, "*****@*****.**")
     self.assertTrue(u2.check_password, "password")
Ejemplo n.º 4
0
 def test_student_enrollment(self):
     u = self.makeUser(id=1)
     self.session.add(u)
     c = self.make_standard_course(slug="abc")
     self.session.add(c)
     self.session.commit()
     c.enroll(u)
     u2 = datamodels.get_user(1)
     u3 = self.makeUser(id=2, email="*****@*****.**", username="******")
     self.session.add(u3)
     c.enroll(u3)
     self.assertEqual(len(u2.courses), 1)
     self.assertEqual(u2.courses[0].id, 1)
     self.assertEqual(u2.course_enrollments[0].access_level, CourseAccess.student)
     c2 = datamodels.get_course_by_slug("abc")
     self.assertEqual(len(c2.students), 2)
Ejemplo n.º 5
0
def add_event(event_type):
    """
    Log an event triggered by the current user to the database if
    it's the right type, or just some random logfile if it's not.
    """
    user = None
    if "user_id" in session:
        user = datamodels.get_user(session["user_id"])
    if event_type == "progress":
        segment_id = request.form["segment_id"]
        progress = int(request.form["percent"])
        if user is not None:
            user_id = user.id
            progress = request.form["percent"]
            seg = datamodels.get_segment(segment_id)
            seg.save_user_progress(user, progress)
            d = {
                "segment_id": segment_id,
                "user_id": user_id,
                "user_status": seg.user_status(user),
                "progress": seg.user_progress(user),
            }

            return json.dumps(d)
        else:
            sess = session.get("anon_progress", "{}")
            d = json.loads(sess)
            if segment_id not in d or d[segment_id] < progress:
                d[segment_id] = progress
            session["anon_progress"] = json.dumps(d)
            seg = datamodels.get_segment(segment_id)
            d = {
                "segment_id": segment_id,
                "user_status": seg.user_status(user=None, progress=progress),
                "progress": progress,
            }
            return json.dumps(d)
    else:
        return event_type
Ejemplo n.º 6
0
def remove_teacher(user, course_slug=None, teacher_id=None, institute=""):
    course = datamodels.get_course_by_slug(course_slug)

    if not course or not user.teaches(course):
        raise abort(404,
                    "No such course or you don't have permissions to edit it")

    if user.id == teacher_id:
        return jsonify({
            "success": False,
            "message": "You can't remove yourself"
        }), 400

    if not datamodels.get_user(teacher_id):
        return jsonify({"success": False, "message": "No such teacher"}), 400

    removed = course.remove_teacher(teacher_id)

    return jsonify({
        "success": removed,
        "teacher_id": teacher_id,
        "message": "Teacher removed"
    })
Ejemplo n.º 7
0
def reseed():
    session = datamodels.get_session()

    for student in stubs.students:
        user = copy.deepcopy(student)
        password = user.pop("password")
        u = datamodels.User(**user)
        u.password = password
        session.add(u)
    session.commit()

    c = datamodels.Course(
        title="Into to Social Enterprise",
        slug="fitzroy-academy",
        course_code="abc123",
        target_audience="Super early stage social enterprise founders, starting your first business or a new project from scratch.",
        skill_level="Introduction.",
        visibility="public",
        info="Start here! Basic business models and customer discovery, to pitching for investment. тЭдя╕П ЁЯЪА",
        workload_summary="This course will take 20-30 hours on average, and is best done in teams.",
        summary_html="""
        <p><strong>Go from zero to one:</strong> From a basic idea to early customers, business models and getting the numbers right.</p>
        <p>We don't need any previous business experience, but by the end you'll cover quite complex topics like financial modelling, </p>
        <p><strong>On the social impact</strong> side of things, you'll define your impact model, look into creating behaviour
        change that lasts, and maybe even think about partnering with another organisation to create impact.</p>
        """,
        cover_image="/static/assets/images/lessons/customer-interviews.jpg",
        guest_access=True,
        draft=False,
        workload_title="",
        workload_subtitle="",
    )
    session.add(c)
    session.commit()

    c.add_instructor(datamodels.get_user(1))  # Homer
    c.add_instructor(datamodels.get_user(2))  # Marge

    c.enroll(datamodels.get_user(3))  # Bart
    c.enroll(datamodels.get_user(4))  # Lisa
    c.enroll(datamodels.get_user(5))  # Maggie
    session.add(c)
    session.commit()

    for i, lesson in enumerate(stubs.lessons):
        lesson = copy.deepcopy(lesson)
        resources = lesson.pop("resources")
        segments = lesson.pop("segments")
        lesson.pop("id")
        lesson.pop("course_id")
        lesson["language"] = "en"
        new_lesson = datamodels.Lesson(**lesson)
        new_lesson.course = c
        c.lessons.append(new_lesson)
        session.add(new_lesson)
        session.commit()
        for j, segment in enumerate(segments):
            segment = copy.deepcopy(segment)
            segment["duration_seconds"] = get_seconds(segment.pop("duration"))
            segment.pop("lesson_id")
            segment.pop("course_id")
            segment.pop("template")  # ultimately derived from external URL
            segment["slug"] = segment.pop("id")
            segment["language"] = "en"
            segment["type"] = SegmentType.video
            s = datamodels.Segment(**segment)
            new_lesson.segments.append(s)
            s.lesson = new_lesson
            session.add(s)
        for j, resource in enumerate(resources):
            resource = copy.deepcopy(resource)
            resource["language"] = resource.pop("lang")
            resource["slug"] = resource.pop("id")
            resource["order"] = j
            r = datamodels.Resource(**resource)
            r.lesson = new_lesson
            new_lesson.resources.append(r)
            session.add(r)
        session.commit()

    for user_progress in stubs.user_segment_progress:
        user = datamodels.User.find_by_email(user_progress["email"])
        for lesson in user_progress["lessons"]:
            for slug, progress in lesson["progress"].items():
                # we can search segments by slug because in stubs segments slugs are unique
                segment = (
                    datamodels.Segment.objects()
                    .filter(datamodels.Segment.slug == slug)
                    .first()
                )
                datamodels.SegmentUserProgress.save_user_progress(
                    segment.id, user.id, progress
                )

    # default institute, whitout subdomain
    fitz_institute = datamodels.Institute(name="Fitzroyacademy", logo="", slug="")

    session.add(fitz_institute)
    session.commit()

    fitz_institute.add_admin(datamodels.get_user(1))  # Homer

    institute1 = datamodels.Institute(name="Jedi Temple", logo="", slug="jeditemple")

    session.add(institute1)
    session.commit()

    institute1.add_admin(datamodels.get_user(3))  # Bart
    session.commit()
Ejemplo n.º 8
0
 def test_user_not_found(self):
     u = datamodels.get_user(1)
     self.assertIsNone(u)
Ejemplo n.º 9
0
def get_current_user():
    if "user_id" in session:
        return datamodels.get_user(session["user_id"])
    else:
        return None
Ejemplo n.º 10
0
def view(slug, institute=""):
    """ View a user's profile. """
    user_id = slug
    user = datamodels.get_user(user_id)
    data = {"user": user, "form": EditUserForm()}
    return render_template("user.html", **data)