def make_standard_course_lesson(
     course, title="Lesson", active=True, language="EN", slug="lesson", order=1
 ):
     lesson = datamodels.Lesson(
         course=course,
         title=title,
         active=active,
         language=language,
         slug=slug,
         order=order,
     )
     return lesson
Example #2
0
def course_add_edit_intro_lesson(user, course, course_slug, institute=""):
    form = AjaxCSRFTokenForm(request.form)
    intro_lesson = course.intro_lesson

    if form.validate() and "intro_lesson" in request.form:
        db = datamodels.get_session()

        slug = "intro-lesson"
        if (datamodels.get_lesson_by_slugs(course.slug, "intro-lesson")
                is not None and not intro_lesson):
            slug = slug + "-" + str(uuid4())[:3]
        if intro_lesson:
            segment = intro_lesson.intro_segment
            set_segment_video_url(segment, request.form["segment_url"])
            html = ""
        else:
            intro_lesson = datamodels.Lesson(
                title="Intro lesson",
                slug=slug,
                description="Intro lesson video",
                order=0,
                course=course,
            )

            db.add(intro_lesson)

            segment = datamodels.Segment(
                lesson=intro_lesson,
                order=0,
                type="video",
                title="Introduction",
                barrier=SegmentBarrierEnum.normal,
                video_type=VideoTypeEnum.standard,
                url=request.form["segment_url"],
                duration_seconds=0,
                slug="intro-segment",
            )
            set_segment_video_url(segment, request.form["segment_url"])
            html = render_intro(segment)

        db.add(segment)
        db.commit()
        return jsonify({
            "message":
            "Intro lesson {}".format("updated" if not html else "added"),
            "html":
            html,
        })
    else:
        return jsonify({"message": "Couldn't create intro lesson"}), 400
Example #3
0
def add(user, course, course_slug, lesson_id=None, institute=""):
    form = AddLessonForm(request.form)

    if form.validate():
        lesson = datamodels.Lesson(course=course,
                                   order=len(course.lessons) + 1)
        lesson.title = form.title.data
        lesson.description = form.description.data
        lesson.slug = slugify(form.title.data)

        db = datamodels.get_session()
        db.add(lesson)
        db.commit()

        return redirect("/course/{}/lessons/{}/edit".format(
            course.slug, lesson.id))
    else:
        for error in form.errors:
            flash(error)

    return redirect("/course/{}/edit".format(course.slug))
Example #4
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()