Commit 982e99bd by Peter Desjardins

Merge pull request #11998 from edx/pdesjardins/api-deprecation

Deprecating REST APIs per DOC-2101, DOC-2653. Also adding the -W shpinx-build option per DOC-2530.
parents ac6749ac 3983d4b5
......@@ -2,7 +2,7 @@
#
# You can set these variables from the command line.
SPHINXOPTS ?= -n
SPHINXOPTS ?= -W
SPHINXBUILD ?= sphinx-build
PAPER ?=
BUILDDIR ?= build
......
......@@ -13,19 +13,17 @@ Change Log
* - Date
- Change
* - 10 June 2015
- Added the section :ref:`Profile Images API Version 1.0`.
- Added documentation for the profile images API.
* - 11 May 2015
- Updated the :ref:`User API <edX Platform User API>` to
Version 1.0.
* -
- Added the :ref:`User Preferences API`.
* - 23 April 2015
- Updated the example responses in :ref:`Get the Users Enrollment Status
in a Course`, :ref:`Get Enrollment Details for a Course`, and :ref:`View
and add to a Users Course Enrollments` to include new
``enrollment_start`` and ``enrollment_end fields``.
- Updated the example responses in the profile images API documentation.
* - 2 April 2015
- Added the :ref:`EdX Platform Course Structure API Version 0`, :ref:`edX
- Added documentation for the course structure API, :ref:`edX
Platform Enrollment API` and edX Platform User API Version 0 sections.
* - 29 January 2015
- Added the :ref:`Get or Change User Status in a Course` section.
- Added documentation about changing a user's status in a course to the
profile images API documentation.
......@@ -231,6 +231,6 @@ extensions = [
'sphinx.ext.mathjax', 'sphinx.ext.viewcode', 'sphinxcontrib.napoleon']
project = u'Open edX Platform APIs'
copyright = u'2015, edX'
copyright = u'2016, edX Inc. and licensed under a Creative Commons Attribution-ShareAlike 4.0 International License unless otherwise specified'
exclude_patterns = ['build', 'links.rst']
########################################
Course Structure API Resource
########################################
With the Course Structure API **Course Structure** resource, you can complete
the following tasks.
.. contents::
:local:
:depth: 1
.. _Get a List of Courses:
**************************
Get a List of Courses
**************************
.. autoclass:: course_structure_api.v0.views.CourseList
**Example response**
.. code-block:: json
{
"count": 809,
"next": "https://courses.edx.org/api/course_structure/v0/courses/?page=3",
"previous": "https://courses.edx.org/api/course_structure/v0/courses/?page=1",
"num_pages": 81,
"results": [
{
"id": "ANUx/ANU-ASTRO1x/1T2014",
"name": "Greatest Unsolved Mysteries of the Universe",
"category": "course",
"org": "ANUx",
"run": "1T2014",
"course": "ANU-ASTRO1x",
"uri": "https://courses.edx.org/api/course_structure/v0/courses/ANUx/ANU-ASTRO1x/1T2014/",
"image_url": "/c4x/ANUx/ANU-ASTRO1x/asset/dome_dashboard.jpg",
"start": "2014-03-24T18:30:00Z",
"end": null
},
{
"id": "ANUx/ANU-ASTRO4x/1T2015",
"name": "COSMOLOGY",
"category": "course",
"org": "ANUx",
"run": "1T2015",
"course": "ANU-ASTRO4x",
"uri": "https://courses.edx.org/api/course_structure/v0/courses/ANUx/ANU-ASTRO4x/1T2015/",
"image_url": "/c4x/ANUx/ANU-ASTRO4x/asset/ASTRO4x_dashboard_image.jpeg",
"start": "2015-02-03T00:00:00Z",
"end": "2015-04-28T23:30:00Z"
}
. . .
]
}
.. _Get Course Details:
**************************
Get Course Details
**************************
.. autoclass:: course_structure_api.v0.views.CourseDetail
**Example response**
.. code-block:: json
HTTP 200 OK
Vary: Accept
Content-Type: text/html; charset=utf-8
Allow: GET, HEAD, OPTIONS
{
"id": "ANUx/ANU-INDIA1x/1T2014",
"name": "Engaging India",
"category": "course",
"org": "ANUx",
"run": "1T2014",
"course": "ANU-INDIA1x",
"uri": "https://courses.edx.org/api/course_structure/v0/courses/ANUx/ANU-INDIA1x/1T2014/",
"image_url": "/c4x/ANUx/ANU-INDIA1x/asset/homepage_course_image.jpg",
"start": "2014-04-29T01:00:00Z",
"end": "2014-07-21T01:00:00Z"
}
.. _Get the Course Structure:
**************************
Get the Course Structure
**************************
.. .. autoclass:: course_structure_api.v0.views.CourseStructure
**Example response**
.. code-block:: json
{
"root": "i4x://ANUx/ANU-INDIA1x/course/1T2014",
"blocks": {
"i4x://ANUx/ANU-INDIA1x/html/834f845ae8b944f1882f14ce6417c9d1": {
"id": "i4x://ANUx/ANU-
INDIA1x/html/834f845ae8b944f1882f14ce6417c9d1",
"type": "html",
"display_name": "",
"graded": false,
"format": null,
"children": []
},
"i4x://ANUx/ANU-INDIA1x/html/c3493aaebaba4ab6a0499fbc27ac3b0e": {
"id": "i4x://ANUx/ANU-
INDIA1x/html/c3493aaebaba4ab6a0499fbc27ac3b0e",
"type": "problem",
"display_name": "Check your learning - Part 1",
"graded": true,
"format": null,
"children": []
},
"i4x://ANUx/ANU-INDIA1x/sequential/3731eee6a39c473c98ef6a5c3f56c04c": {
"id": "i4x://ANUx/ANU-
INDIA1x/sequential/3731eee6a39c473c98ef6a5c3f56c04c",
"type": "sequential",
"display_name": "Reflective project",
"graded": true,
"format": "Reflective Project",
"children": [
"i4x://ANUx/ANU-
INDIA1x/vertical/efe3f47a5bc24894b726c229d6bf5968",
"i4x://ANUx/ANU-
INDIA1x/vertical/9106a1b1fad040858bad56fe5d48074e",
"i4x://ANUx/ANU-
INDIA1x/vertical/27d2cf635bd44038a1207461b761a63a",
"i4x://ANUx/ANU-
INDIA1x/vertical/94b719b765b046e2a811f1c4e4f84e5b"
]
},
"i4x://ANUx/ANU-INDIA1x/vertical/0a3cd583cb1d4108bfbdaf57c511da3a": {
"id": "i4x://ANUx/ANU-
INDIA1x/vertical/0a3cd583cb1d4108bfbdaf57c511da3a",
"type": "vertical",
"display_name": "What you need to do this week",
"graded": false,
"format": null,
"children": [
"i4x://ANUx/ANU-INDIA1x/html/a20abbba4a0f4a578d96cbdd4b34307b"
]
},
. . .
}
}
.. _Get the Course Grading Policy:
*****************************
Get the Course Grading Policy
*****************************
.. autoclass:: course_structure_api.v0.views.CourseGradingPolicy
**Example response**
.. code-block:: json
HTTP 200 OK
Vary: Accept
Content-Type: text/html; charset=utf-8
Allow: GET, HEAD, OPTIONS
[
{
"assignment_type": "Week 1 Survey",
"count": 2,
"dropped": 1,
"weight": 0.03
},
{
"assignment_type": "Week 5 Survey",
"count": 2,
"dropped": 1,
"weight": 0.03
},
{
"assignment_type": "Reflective Project",
"count": 1,
"dropped": 0,
"weight": 0.2
},
. . .
]
.. _EdX Platform Course Structure API Version 0:
#############################################
Course Structure API Version 0
Course Structure API Version 0 (Deprecated)
#############################################
.. toctree::
:maxdepth: 2
overview
course_structure
The course structure API version 0 is deprecated. EdX platform developers
should not implement new client functions that use the course structure API
version 0.
You can get information about the courses offered by an edX platform
installation by using the ``/api/courses/v1/courses/`` REST endpoint.
You can get information about the parameters and return values of
``/api/courses/v1/courses`` from the Django REST framework web page for that
endpoint. For example, `https://courses.edx.org/api/courses/v1/courses/`_ provides information about the courses offered by edx.org.
.. note::
The documentation available at `docs.edx.org`_ does not include information
about the ``/api/courses/v1/courses/`` REST endpoint. Developer
documentation for the ``/api/courses/v1/courses/`` is planned in upcoming
documentation releases.
.. include:: ../links.rst
.. _EdX Platform Course Structure API Overview:
################################################
Course Structure API Overview
################################################
Use the edX Platform Course Structure API to view course details, including the
blocks in the course and the course grading policy.
.. contents::
:local:
:depth: 1
********************************************
Course Structure API Version 0
********************************************
The Course Structure API is currently at version 0. We plan on making
significant enhancements to this API. Currently the Course Structure API is for
internal use only; third parties cannot use the API to access course structure
data.
**********************************************
Course Structure API Resources and Endpoints
**********************************************
The Course Structure API supports the following resources, tasks, methods, and
endpoints.
.. list-table::
:widths: 10 70
:header-rows: 1
* - To:
- Use this endpoint:
* - :ref:`Get a list of courses in the edX platform <Get a List of Courses>`
- GET /api/course_structure/v0/courses/
* - :ref:`Get details about a course <Get Course Details>`
- GET /api/course_structure/v0/courses/{course_id}/
* - :ref:`Get a course's structure, or blocks <Get the Course Structure>`
- GET /api/course_structure/v0/course_structures/{course_id}/
* - :ref:`Get a course's grading policy <Get the Course Grading Policy>`
- GET /api/course_structure/v0/grading_policies/{course_id}/
......@@ -6,11 +6,11 @@ Open edX Platform APIs
.. toctree::
:titlesonly:
read_me
preface
change_log
.. toctree::
:maxdepth: 2
......@@ -25,15 +25,15 @@ Supported APIs
:maxdepth: 2
enrollment/index
mobile/index
profile_images/index
user/index
******************
Experimental APIs
Deprecated APIs
******************
.. toctree::
:maxdepth: 2
course_structure/index
mobile/index
profile_images/index
.. _OAuth 2.0 Standard: https://tools.ietf.org/html/draft-ietf-oauth-v2-31
\ No newline at end of file
.. _OAuth 2.0 Standard: https://tools.ietf.org/html/draft-ietf-oauth-v2-31
.. _docs.edx.org: http://docs.edx.org/
.. _https://courses.edx.org/api/courses/v1/courses/: https://courses.edx.org/api/courses/v1/courses/
##################################################
Mobile API Course Information Resource
##################################################
With the Mobile API **Course Information** resource, you can complete the
following tasks.
.. contents::
:local:
:depth: 1
.. _Get Course Updates:
*******************
Get Course Updates
*******************
.. autoclass:: mobile_api.course_info.views.CourseUpdatesList
**Example response**
.. code-block:: json
HTTP 200 OK
Content-Type: application/json
Vary: Accept
Allow: GET, HEAD, OPTIONS
[
{
"date": "October 4, 2014",
"content": "Reminder about the quiz due today.
"status": "visible",
"id": 2
},
{ "date": "October 1, 2014",
"content": "Welcome to the course. We
built this to help you become more familiar with taking a course on
edX prior to your first day of class. \n<br>\n<br>\nIn a live course,
this section is where all of the latest course announcements and
updates would be.,
"id": 1 } ]
.. _Get Course Handouts:
*******************
Get Course Handouts
*******************
.. autoclass:: mobile_api.course_info.views.CourseHandoutsList
**Example response**
.. code-block:: json
HTTP 200 OK
Content-Type: application/json
Vary: Accept
Allow: GET, HEAD, OPTIONS
{
"handouts_html": "\n\n<ol class=\"treeview-handoutsnav\">\n
<li><a href=\"/static/demoPDF.pdf\">Example handout</a></li>
</ol>\n\n"
}
.. _edX Platform Mobile API Version 0.5:
#####################################
Mobile API Version 0.5
Mobile API Version 0.5 (Deprecated)
#####################################
.. toctree::
:maxdepth: 2
overview
course_info
users
video_outlines
The mobile API version 0.5 is deprecated. EdX platform developers should not
implement new client functions that use the mobile API version 0.5.
You can get information about the courses offered by an edX platform
installation by using the ``/api/courses/v1/courses/`` REST endpoint.
You can get information about the parameters and return values of
``/api/courses/v1/courses`` from the Django REST framework web page for that
endpoint. For example, `https://courses.edx.org/api/courses/v1/courses/`_
provides information about the courses offered by edx.org.
.. note::
The documentation available at `docs.edx.org`_ does not include information
about the ``/api/courses/v1/courses/`` REST endpoint. Developer
documentation for the ``/api/courses/v1/courses/`` is planned in upcoming
documentation releases.
You can get and update information about learners by using the edX platform
user API. For more information about getting and updating learner information
in the user API, see :ref:`Get and Update the User's Account Information`.
.. include:: ../links.rst
.. _edX Platform Mobile API Overview:
################################################
Mobile API Overview
################################################
Use the Mobile API to build mobile applications for students to view course
information and videos for courses on your instance of Open edX.
.. contents::
:local:
:depth: 1
******************************************
Mobile API Version and Status
******************************************
The Mobile API is currently at version 0.5 and is an alpha release. We plan on
making significant enhancements and changes to the API.
.. caution::
As this is a new and rapidly evolving API, at this time edX does not
guarantee forward compatibility. We encourage you to use and experiment with
the API, while keeping in mind that endpoints might change.
*************************************
Mobile API Resources and Endpoints
*************************************
The Mobile API supports the following resources, tasks, methods, and
endpoints.
========================
Mobile API User Resource
========================
.. list-table::
:widths: 20 10 70
:header-rows: 1
* - Task
- Method
- Endpoint
* - :ref:`Get details about a user<Get User Details>`
- GET
- /api/mobile/v0.5/users/{username}
* - :ref:`Get course enrollments for a user<Get a User's Course Enrollments>`
- GET
- /api/mobile/v0.5/users/{username}/course_enrollments/
* - :ref:`Get a user's status in a course<Get or Change User Status in a Course>`
- GET
- /api/mobile/v0.5/users/{username}/course_status_info/{course_id}
* - :ref:`Change a user's status in a course<Get or Change User Status in a Course>`
- PATCH
- /api/mobile/v0.5/users/{username}/course_status_info/{course_id}
========================================
Mobile API Course Information Resource
========================================
.. list-table::
:widths: 20 10 70
:header-rows: 1
* - Task
- Method
- Endpoint
* - :ref:`Get updates for a course<Get Course Updates>`
- GET
- /api/mobile/v0.5/course_info/{organization}/{course_number}/{course_run}/updates
* - :ref:`Get handouts for a course<Get Course Handouts>`
- GET
- /api/mobile/v0.5/course_info/{organization}/{course_number}/{course_run}/handouts
=====================================
Mobile API Video Outlines Resource
=====================================
.. list-table::
:widths: 20 10 70
:header-rows: 1
* - Task
- Method
- Endpoint
* - :ref:`Get videos in a course<Get the Video List>`
- GET
- /api/mobile/v0.5/video_outlines/courses/{organization}/{course_number}/{course_run}
* - :ref:`Get a video transcript<Get a Video Transcript>`
- GET
- /api/mobile/v0.5/video_outlines/transcripts/{organization}/{course_number}/{course_run}/{video ID}/{language code}
####################################
Mobile API User Resource
####################################
With the Mobile API **User** resource, you can complete the following tasks.
.. contents::
:local:
:depth: 1
.. _Get User Details:
*******************
Get User Details
*******************
.. autoclass:: mobile_api.users.views.UserDetail
**Example response**
.. code-block:: json
HTTP 200 OK
Vary: Accept
Content-Type: text/html; charset=utf-8
Allow: GET, HEAD, OPTIONS
{
"id": 67,
"username": "mtwain",
"email": "mtwain@email-domain.com",
"name": "mtwain",
"course_enrollments": "http://localhost:8000/api/mobile/v0.5/users/mtwain/course_enrollments/"
}
.. _Get a User's Course Enrollments:
**************************************
Get a User's Course Enrollments
**************************************
.. autoclass:: mobile_api.users.views.UserCourseEnrollmentsList
**Example response**
.. code-block:: json
HTTP 200 OK
Vary: Accept
Content-Type: text/html; charset=utf-8
Allow: GET, HEAD, OPTIONS
{
"created": "2014-04-18T13:44:25Z",
"mode": "honor",
"is_active": true,
"course": {
"course_about": "http://localhost:8000/api/mobile/v0.5/course_info/edX/Open_DemoX/edx_demo_course/about",
"course_updates": "http://localhost:8000/api/mobile/v0.5/course_info/edX/Open_DemoX/edx_demo_course/updates",
"number": "Open_DemoX",
"org": "edX",
"video_outline": "http://localhost:8000/api/mobile/v0.5/video_outlines/courses/edX/Open_DemoX/edx_demo_course",
"id": "edX/Open_DemoX/edx_demo_course",
"latest_updates": {
"video": null
},
"end": null,
"name": "edX Demonstration Course",
"course_handouts": "http://localhost:8000/api/mobile/v0.5/course_info/edX/Open_DemoX/edx_demo_course/handouts",
"start": "1970-01-01T05:00:00Z",
"course_image": "/c4x/edX/Open_DemoX/asset/images_course_image.jpg",
"discussion_url": "http://localhost:8000/api/discussion/v1/courses/course-v1:edX/Open_DemoX/edx_demo_course"
}
},
{
"created": "2014-09-29T13:46:06Z",
"mode": "honor",
"is_active": true,
"course": {
"course_about": "http://localhost:8000/api/mobile/v0.5/course_info/edX/DemoX/Demo_Course/about",
"course_updates": "http://localhost:8000/api/mobile/v0.5/course_info/edX/DemoX/Demo_Course/updates",
"number": "DemoX",
"org": "edX",
"video_outline": "http://localhost:8000/api/mobile/v0.5/video_outlines/courses/edX/DemoX/Demo_Course",
"id": "edX/DemoX/Demo_Course",
"latest_updates": {
"video": null
},
"end": null,
"name": "edX Demonstration Course",
"course_handouts": "http://localhost:8000/api/mobile/v0.5/course_info/edX/DemoX/Demo_Course/handouts",
"start": "2013-02-05T05:00:00Z",
"course_image": "/c4x/edX/DemoX/asset/images_course_image.jpg",
"discussion_url": "http://localhost:8000/api/discussion/v1/courses/course-v1:edX/DemoX/Demo_Course",
}
}
.. _Get or Change User Status in a Course:
**************************************
Get or Change User Status in a Course
**************************************
.. autoclass:: mobile_api.users.views.UserCourseStatus
**Example Response**
.. code-block:: json
HTTP 200 OK
Vary: Accept
Content-Type: text/html; charset=utf-8
Allow: GET, HEAD, OPTIONS
{
"last_visited_module_id": "i4x://edX/DemoX/html/6018785795994726950614ce7d0f38c5",
"last_visited_module_path": [
"i4x://edX/DemoX/html/6018785795994726950614ce7d0f38c5",
"i4x://edX/DemoX/vertical/26d89b08f75d48829a63520ed8b0037d",
"i4x://edX/DemoX/sequential/dbe8fc027bcb4fe9afb744d2e8415855",
"i4x://edX/DemoX/chapter/social_integration",
"i4x://edX/DemoX/course/Demo_Course"
]
}
##################################################
Mobile API Video Outlines Resource
##################################################
With the Mobile API **Video Outlines** resource, you can complete the
following tasks.
.. contents::
:local:
:depth: 1
.. _Get the Video List:
**************************
Get the Course Video List
**************************
.. autoclass:: mobile_api.video_outlines.views.VideoSummaryList
**Example response**
.. code-block:: json
HTTP 200 OK
Vary: Accept
Content-Type: text/html; charset=utf-8
Allow: GET, HEAD, OPTIONS
[
{
"section_url": "http://localhost:8000/courses/edX/Open_DemoX/edx_demo_course/courseware/d8a6192ade314473a78242dfeedfbf5b/edx_introduction/",
"path": [
{
"category": "chapter",
"name": "Introduction"
},
{
"category": "sequential",
"name": "Demo Course Overview"
},
{
"category": "vertical",
"name": "Introduction: Video and Sequences"
}
],
"unit_url": "http://localhost:8000/courses/edX/Open_DemoX/edx_demo_course/courseware/d8a6192ade314473a78242dfeedfbf5b/edx_introduction/1",
"named_path": [
"Introduction",
"Demo Course Overview"
],
"summary": {
"category": "video",
"video_thumbnail_url": null,
"language": "en",
"name": "Welcome!",
"video_url": "https://s3.amazonaws.com/edx-course-videos/edx-edx101/EDXSPCPJSP13-H010000_100.mp4",
"duration": null,
"transcripts": {
"en": "http://localhost:8000/api/mobile/v0.5/video_outlines/transcripts/edX/Open_DemoX/edx_demo_course/0b9e39477cf34507a7a48f74be381fdd/en"
},
"id": "i4x://edX/Open_DemoX/video/0b9e39477cf34507a7a48f74be381fdd",
"size": 0
}
}
]
.. _Get a Video Transcript:
***********************
Get a Video Transcript
***********************
.. autoclass:: mobile_api.video_outlines.views.VideoTranscripts
......@@ -17,14 +17,4 @@ Supported edX Platform API Modules
The following edX Platform APIs are currently supported.
* :ref:`edX Platform Enrollment API`
* :ref:`edX Platform Mobile API Version 0.5`
* :ref:`Profile Images API Version 1.0`
* :ref:`edX Platform User API`
**********************************************
Experimental edX Platform API Modules
**********************************************
The following edX Platform APIs are currently experimental.
* :ref:`EdX Platform Course Structure API Version 0`
.. _Profile Images API Version 1.0:
#################################
Profile Images API Version 1.0
#################################
.. toctree::
:maxdepth: 2
overview
profile_images
###########################################
Profile Images API Version 1.0 (Deprecated)
###########################################
The profile images API version 1.0 is deprecated. EdX platform developers
should not implement new client functions that use the profile images API
version 1.0.
You can get and update learners' profile images by using the edX platform user
API. The ``profile_image`` object is included in the JSON information for a
learner. For more information about getting and updating profile images in the
user API, see :ref:`Get and Update the User's Account Information`.
.. include:: ../links.rst
################################################
Profile Images Overview
################################################
Use the Profile Images API to upload or remove profile images.
The requesting user can upload or remove his or her own profile image.
Users with staff access can remove profile images from any user account.
.. contents::
:local:
:depth: 1
*************************************
Profile Images API Version and Status
*************************************
The Profile Images API is currently at version 1.0.
**********************************************
Profile Images API Endpoints
**********************************************
The Profile Images API supports the following tasks, methods, and endpoints.
.. list-table::
:widths: 20 10 70
:header-rows: 1
* - Task
- Method
- Endpoint
* - :ref:`Upload a profile image <Upload a Profile Image>`
- POST
- /api/profile_images/v1/{username}/upload
* - :ref:`Remove a profile image <Remove a Profile Image>`
- POST
- /api/profile_images/v1/{username}/remove
\ No newline at end of file
.. Profile Images API:
##################################################
Profile Images API Profile Images Resource
##################################################
With the Profile Images API **Profile Images** resource, you can complete the
following tasks.
.. contents::
:local:
:depth: 1
.. _Upload a Profile Image:
**************************************************
Upload a Profile Image
**************************************************
.. autoclass:: profile_images.views.ProfileImageUploadView
**Example Response**
.. code-block:: json
HTTP 204
No Content
.. _Remove a Profile Image:
**************************************************
Remove a Profile Image
**************************************************
.. autoclass:: profile_images.views.ProfileImageRemoveView
**Example Response**
.. code-block:: json
HTTP 204
No Content
......@@ -14,12 +14,12 @@ tasks.
.. _Get and Update the User's Account Information:
**********************************************
Get and Update the User's Account Information
Get and Update a User's Account Information
**********************************************
.. autoclass:: user_api.accounts.views.AccountView
**Example response showing the user's account information**
**Example response showing a user's account information**
.. code-block:: json
......@@ -29,16 +29,16 @@ Get and Update the User's Account Information
Allow: GET, HEAD, OPTIONS, PATCH
{
"username": "John",
"name": "John Doe",
"language": "",
"gender": "m",
"year_of_birth": 1987,
"level_of_education": "m",
"goals": "Professional Development",
"country": US,
"mailing_address": "123 Main Street, Anytown, MA 02144",
"email": "johndoe@company.com",
"username": "John",
"name": "John Doe",
"language": "",
"gender": "m",
"year_of_birth": 1987,
"level_of_education": "m",
"goals": "Professional Development",
"country": US,
"mailing_address": "123 Main Street, Anytown, MA 02144",
"email": "johndoe@company.com",
"date_joined": "2015-03-18T13:42:40Z",
"account_privacy": "all_users"
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment