def delete_course_update(location, update, passed_id, user):
    """
    Don't delete course update item from db.
    Delete the given course_info update by settings "status" flag to 'deleted'.
    Returns the resulting course_updates.
    """
    if not passed_id:
        return HttpResponseBadRequest()

    try:
        course_updates = modulestore().get_item(location)
    except ItemNotFoundError:
        return HttpResponseBadRequest()

    course_update_items = list(reversed(get_course_update_items(course_updates)))
    passed_index = _get_index(passed_id)

    # delete update item from given index
    if 0 < passed_index <= len(course_update_items):
        course_update_item = course_update_items[passed_index - 1]
        # soft delete course update item
        course_update_item["status"] = CourseInfoModule.STATUS_DELETED
        course_update_items[passed_index - 1] = course_update_item

        # update db record
        save_course_update_items(location, course_updates, course_update_items, user)
        return _get_visible_update(course_update_items)
    else:
        return HttpResponseBadRequest(_("Invalid course update id."))
Example #2
0
def delete_course_update(location, update, passed_id, user):
    """
    Don't delete course update item from db.
    Delete the given course_info update by settings "status" flag to 'deleted'.
    Returns the resulting course_updates.
    """
    if not passed_id:
        return HttpResponseBadRequest()

    try:
        course_updates = modulestore().get_item(location)
    except ItemNotFoundError:
        return HttpResponseBadRequest()

    course_update_items = list(
        reversed(get_course_update_items(course_updates)))
    passed_index = _get_index(passed_id)

    # delete update item from given index
    if 0 < passed_index <= len(course_update_items):
        course_update_item = course_update_items[passed_index - 1]
        # soft delete course update item
        course_update_item["status"] = CourseInfoModule.STATUS_DELETED
        course_update_items[passed_index - 1] = course_update_item

        # update db record
        save_course_update_items(location, course_updates, course_update_items,
                                 user)
        return _get_visible_update(course_update_items)
    else:
        return HttpResponseBadRequest(_("Invalid course update id."))
def update_course_updates(location, update, passed_id=None, user=None):
    """
    Either add or update the given course update.
    Add:
        If the passed_id is absent or None, the course update is added.
    Update:
        It will update it if it has a passed_id which has a valid value.
        Until updates have distinct values, the passed_id is the location url + an index into the html structure.
    """
    try:
        course_updates = modulestore().get_item(location)
    except ItemNotFoundError:
        course_updates = modulestore().create_item(user.id,
                                                   location.course_key,
                                                   location.block_type,
                                                   location.block_id)

    course_update_items = list(
        reversed(get_course_update_items(course_updates)))
    course_update_dict = None

    if passed_id is not None:
        passed_index = _get_index(passed_id)

        # if passed_index in course_update_items_ids:
        for course_update_item in course_update_items:
            if course_update_item["id"] == passed_index:
                course_update_dict = course_update_item
                course_update_item["date"] = update["date"]
                course_update_item["content"] = update["content"]
                break
        if course_update_dict is None:
            return HttpResponseBadRequest(_("Invalid course update id."))
    else:
        course_update_items_ids = [
            course_update_item['id']
            for course_update_item in course_update_items
        ]

        course_update_dict = {
            # if no course updates then the id will be 1 otherwise maxid + 1
            "id":
            max(course_update_items_ids) + 1 if course_update_items_ids else 1,
            "date": update["date"],
            "content": update["content"],
            "status": CourseInfoBlock.STATUS_VISIBLE
        }
        course_update_items.append(course_update_dict)

    # update db record
    save_course_update_items(location, course_updates, course_update_items,
                             user)
    # remove status key
    if "status" in course_update_dict:
        del course_update_dict["status"]
    return course_update_dict
def get_course_updates(location, provided_id, user_id):
    """
    Retrieve the relevant course_info updates and unpack into the model which the client expects:
    [{id : index, date : string, content : html string}]
    """
    try:
        course_updates = modulestore().get_item(location)
    except ItemNotFoundError:
        course_updates = modulestore().create_item(user_id, location.course_key, location.block_type, location.block_id)

    course_update_items = get_course_update_items(course_updates, _get_index(provided_id))
    return _get_visible_update(course_update_items)
def get_course_updates(location, provided_id, user_id):
    """
    Retrieve the relevant course_info updates and unpack into the model which the client expects:
    [{id : index, date : string, content : html string}]
    """
    try:
        course_updates = modulestore().get_item(location)
    except ItemNotFoundError:
        course_updates = modulestore().create_item(user_id, location.course_key, location.block_type, location.block_id)

    course_update_items = get_course_update_items(course_updates, _get_index(provided_id))
    return _get_visible_update(course_update_items)
Example #6
0
    def list(self, request, course, *args, **kwargs):
        course_updates_module = get_course_info_section_module(request, request.user, course, "updates")
        update_items = get_course_update_items(course_updates_module)

        updates_to_show = [update for update in update_items if update.get("status") != "deleted"]

        for item in updates_to_show:
            content = item["content"]
            content = replace_static_urls(content, course_id=course.id, static_asset_path=course.static_asset_path)
            item["content"] = make_static_urls_absolute(request, content)

        return Response(updates_to_show)
Example #7
0
    def list(self, request, course, *args, **kwargs):  # lint-amnesty, pylint: disable=arguments-differ
        course_updates_module = get_course_info_section_module(request, request.user, course, 'updates')
        update_items = get_course_update_items(course_updates_module)

        updates_to_show = [
            update for update in update_items
            if update.get("status") != "deleted"
        ]

        for item in updates_to_show:
            item['content'] = apply_wrappers_to_content(item['content'], course_updates_module, request)

        return Response(updates_to_show)
Example #8
0
    def list(self, request, course, *args, **kwargs):
        course_updates_module = get_course_info_section_module(request, request.user, course, 'updates')
        update_items = get_course_update_items(course_updates_module)

        updates_to_show = [
            update for update in update_items
            if update.get("status") != "deleted"
        ]

        for item in updates_to_show:
            item['content'] = apply_wrappers_to_content(item['content'], course_updates_module, request)

        return Response(updates_to_show)
Example #9
0
def update_course_updates(location, update, passed_id=None, user=None):
    """
    Either add or update the given course update.
    Add:
        If the passed_id is absent or None, the course update is added.
        If push_notification_selected is set in the update, a celery task for the push notification is created.
    Update:
        It will update it if it has a passed_id which has a valid value.
        Until updates have distinct values, the passed_id is the location url + an index into the html structure.
    """
    try:
        course_updates = modulestore().get_item(location)
    except ItemNotFoundError:
        course_updates = modulestore().create_item(user.id,
                                                   location.course_key,
                                                   location.block_type,
                                                   location.block_id)

    course_update_items = list(
        reversed(get_course_update_items(course_updates)))

    if passed_id is not None:
        passed_index = _get_index(passed_id)
        # oldest update at start of list
        if 0 < passed_index <= len(course_update_items):
            course_update_dict = course_update_items[passed_index - 1]
            course_update_dict["date"] = update["date"]
            course_update_dict["content"] = update["content"]
            course_update_items[passed_index - 1] = course_update_dict
        else:
            return HttpResponseBadRequest(_("Invalid course update id."))
    else:
        course_update_dict = {
            "id": len(course_update_items) + 1,
            "date": update["date"],
            "content": update["content"],
            "status": CourseInfoModule.STATUS_VISIBLE
        }
        course_update_items.append(course_update_dict)
        enqueue_push_course_update(update, location.course_key)

    # update db record
    save_course_update_items(location, course_updates, course_update_items,
                             user)
    # remove status key
    if "status" in course_update_dict:
        del course_update_dict["status"]
    return course_update_dict
Example #10
0
    def test_course_update_id(self):
        """
        Test that a user can successfully update a course update without a sequential ids
        """
        # create two course updates
        self.post_course_update()
        self.post_course_update()

        updates_location = self.course.id.make_usage_key(
            'course_info', 'updates')
        self.assertTrue(isinstance(updates_location, UsageKey))
        self.assertEqual(updates_location.block_id, u'updates')

        course_updates = modulestore().get_item(updates_location)
        course_update_items = list(
            reversed(get_course_update_items(course_updates)))

        # Delete the course update with id 1
        course_update_items = [
            course_update_item for course_update_item in course_update_items
            if course_update_item.get('id') != 1
        ]

        course_updates.items = course_update_items
        course_updates.data = ""

        # update db record
        modulestore().update_item(course_updates, self.user.id)

        update_content = 'Testing'
        update_date = u"January 23, 2014"
        course_update_url = self.create_update_url()
        payload = {'content': update_content, 'date': update_date}
        resp = self.client.ajax_post(course_update_url + '2',
                                     payload,
                                     HTTP_X_HTTP_METHOD_OVERRIDE="PUT",
                                     REQUEST_METHOD="POST")

        self.assertHTMLEqual(
            update_content,
            json.loads(resp.content.decode('utf-8'))['content'])
        course_updates = modulestore().get_item(updates_location)
        del course_updates.items[0]["status"]
        self.assertEqual(course_updates.items, [{
            u'date': update_date,
            u'content': update_content,
            u'id': 2
        }])
Example #11
0
    def list(self, request, course, *args, **kwargs):
        course_updates_module = get_course_info_section_module(request, course, 'updates')
        update_items = get_course_update_items(course_updates_module)

        updates_to_show = [
            update for update in update_items
            if update.get("status") != "deleted"
        ]

        for item in updates_to_show:
            content = item['content']
            content = replace_static_urls(
                content,
                course_id=course.id,
                static_asset_path=course.static_asset_path)
            item['content'] = make_static_urls_absolute(request, content)

        return Response(updates_to_show)
def update_course_updates(location, update, passed_id=None, user=None):
    """
    Either add or update the given course update.
    Add:
        If the passed_id is absent or None, the course update is added.
        If push_notification_selected is set in the update, a celery task for the push notification is created.
    Update:
        It will update it if it has a passed_id which has a valid value.
        Until updates have distinct values, the passed_id is the location url + an index into the html structure.
    """
    try:
        course_updates = modulestore().get_item(location)
    except ItemNotFoundError:
        course_updates = modulestore().create_item(user.id, location.course_key, location.block_type, location.block_id)

    course_update_items = list(reversed(get_course_update_items(course_updates)))

    if passed_id is not None:
        passed_index = _get_index(passed_id)
        # oldest update at start of list
        if 0 < passed_index <= len(course_update_items):
            course_update_dict = course_update_items[passed_index - 1]
            course_update_dict["date"] = update["date"]
            course_update_dict["content"] = update["content"]
            course_update_items[passed_index - 1] = course_update_dict
        else:
            return HttpResponseBadRequest(_("Invalid course update id."))
    else:
        course_update_dict = {
            "id": len(course_update_items) + 1,
            "date": update["date"],
            "content": update["content"],
            "status": CourseInfoModule.STATUS_VISIBLE
        }
        course_update_items.append(course_update_dict)
        enqueue_push_course_update(update, location.course_key)

    # update db record
    save_course_update_items(location, course_updates, course_update_items, user)
    # remove status key
    if "status" in course_update_dict:
        del course_update_dict["status"]
    return course_update_dict