Skip to content

Commit

Permalink
Merge pull request #692 from mitodl/release-candidate
Browse files Browse the repository at this point in the history
Release 0.12.0
  • Loading branch information
annagav authored Jul 6, 2016
2 parents 96f5498 + bf259cb commit fe9fb0a
Show file tree
Hide file tree
Showing 107 changed files with 4,737 additions and 1,664 deletions.
4 changes: 4 additions & 0 deletions .flowconfig
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@

[libs]
./static/js/flow/declarations.js
node_modules/iflow-lodash/index.js.flow
node_modules/iflow-moment/index.js.flow
node_modules/iflow-react-router/index.js.flow
node_modules/iflow-redux/index.js.flow

[options]
esproposal.class_static_fields=enable
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -88,3 +88,4 @@ codekit-config.json
staticfiles/

.venv
release-notes-checklist
29 changes: 16 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# MicroMaster’s
Portal for learners and course teams to access MITx MicroMaster’s programs
# MicroMasters
Portal for learners and course teams to access MITx MicroMasters programs

## Major Dependencies
- Docker
Expand All @@ -26,7 +26,7 @@ with the edX instance.

## Running edX devstack locally _(optional, but recommended)_

MicroMaster’s can work with a live instance of edX, but it's recommended that
MicroMasters can work with a live instance of edX, but it's recommended that
you get it running locally. It's obviously more configurable that way, and you'll
likely need to run it locally for other projects in the future.

Expand Down Expand Up @@ -93,17 +93,18 @@ new Application. Fill in the values as follows:

- **User**: Use the lookup (magnifying glass) to find your superuser
- **Redirect uris**: The URL where MicroMaster’s will be running, followed by "/complete/edxorg/".
If you're running it via Docker, run ``docker-machine ip`` from the host machine to get the
container IP. MicroMaster’s runs on port ``8079`` by default, so this value should be something
like ``http://192.168.99.100:8079/complete/edxorg/``
**Linux users:** the MicroMaster’s URL will be `http://localhost:8079`. **OSX users:** The MicroMaster's
IP can be found by running ``docker-machine ip <machine_name>`` from the host machine. MicroMaster’s runs on port
``8079`` by default, so the full URL should be something like
``http://192.168.99.100:8079/complete/edxorg/``
- **Client type**: Set to '_Confidential_'.
- **Authorization grant type**: Set to '_Authorization Code_'.
- **Name**: Anything you want. Something like 'mm-local' would do fine here.

#### 5) Copy relevant values to use in the MicroMaster’s .env file
#### 5) Copy relevant values to use in the MicroMasters .env file

The MicroMaster’s codebase contains a ``.env.sample`` file which will be used as
a template to create your ``.env`` file. For MicroMaster’s to work, it needs 3 values:
The MicroMasters codebase contains a ``.env.sample`` file which will be used as
a template to create your ``.env`` file. For MicroMasters to work, it needs 3 values:

- ``EDXORG_BASE_URL``

Expand Down Expand Up @@ -174,7 +175,7 @@ For first-time container start-up, start it with a full build:

docker-compose up --build

In another terminal tab, navigate the the MicroMaster’s directory
In another terminal tab, navigate the the MicroMasters directory
and add a superuser in the now-running Docker container:

docker-compose run web python3 manage.py createsuperuser
Expand All @@ -184,16 +185,16 @@ param: ``docker-compose up``

You should now be able to do the following:

1. Visit MicroMaster’s in your browser on port `8079`. _(OSX Only)_ Docker auto-assigns
the container IP. Run ``docker-machine ip`` to see it. Your MicroMaster’s URL will
1. Visit MicroMasters in your browser on port `8079`. _(OSX Only)_ Docker auto-assigns
the container IP. Run ``docker-machine ip`` to see it. Your MicroMasters URL will
be something like this: ``192.168.99.100:8079``.
1. Click "Sign in with edX.org" and sign in by authorizing an edX client. If you're
running edX locally, this will be the client you created in the steps above.

## Running Commands and Testing

As shown above, manage commands can be executed on the Docker-contained
MicroMaster’s app. For example, you can run a Python shell with the following command:
MicroMasters app. For example, you can run a Python shell with the following command:

docker-compose run web python3 manage.py shell

Expand All @@ -211,3 +212,5 @@ Tests should be run in the Docker container, not the host machine. They can be r
docker-compose run watch npm test /path/to/test.js
# Run the JS linter
docker-compose run watch npm run-script lint
# Run JS type-checking
docker-compose run watch npm run-script flow
57 changes: 57 additions & 0 deletions RELEASE.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,63 @@
Release Notes
=============

Version 0.12.0
--------------

- Added ErrorMessage to UserPage
- Changed dateFields to disallow non-numerical input (#641)
- Added deadline for upgrade
- Removed some (now) useless cases in constants
- Modified FAQ field to have rich text
- FAQ collapsed by default
- Added spinner and error message for profile page (#661)
- Added user page link to dropdown
- Changed field of study select to match anywhere in string w/ highlighted text
- Removed routing from profile flow
- added docstring
- fixed MORE unit tests
- fixed js test
- refactored error page code and fixed unit tests
- nevermind. tabs changed to spaces in base_error.html
- changed base_error.html to match tab/space style, which is apparently mixed
- Added user page link to dropdown
- Added thumbnail to wagtail CMS (#625)
- Redirected to 404 if user goes to a missing user page (#629)
- Added spinner for dashboard (#646)
- Removed x&#39;s from text fields (#642)
- Tests fixed
- Removed upgrade logic from the frontend
- Changed the label of settings button
- Added settings page
- Added link to home page on program page logo (#645)
- Added text to JumboTron for terms of service (#644)
- Updated validation text (#643)
- Added resumeOrder to education entries
- Updated edx-api-client requirement
- Removed padding from date field (#631)
- Removed UI validators from PrivacyTab validator callback
- Raised 404 exception when user wants to access someones profile whose privacy mode is set tp private
- Fixed filtering text to remain if textbox clicked (#628)
- Made FieldsOfStudySelectField wider
- Added new types for Course, CourseRun, added flow to many files
- Added react-virtualized to AutoComplete (#568)
- Fixed style regression (#624)
- Link opens in the same page
- Added possibility to link external program pages
- Added custom 500 page
- Added &#39;confirm delete all entries&#39; when closing switches
- Sorted employment entries in resume order
- Updated documentation to reflect edX changes
- First working version
- Removed apostrophe from MicroMaster&#39;s (#560)
- Updated to redux-asserts 0.0.8 and fixed related test failures (#616)
- Fixed bug with preferred name not updating on Jumbotron
- Added babel-polyfill to support IE11 (#611)
- Swapped courses and faq in program page
- Upgraded to wagtail 1.5.2
- Fixed spinner positioning (#563)
- Bumped django version

Version 0.11.0
--------------

Expand Down
20 changes: 20 additions & 0 deletions cms/migrations/0012_programpage_external_program_page_url.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-06-22 20:59
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('cms', '0011_programpage_title_over_image'),
]

operations = [
migrations.AddField(
model_name='programpage',
name='external_program_page_url',
field=models.URLField(blank=True, help_text='Use this field to directly link an external web page for this program.', null=True),
),
]
22 changes: 22 additions & 0 deletions cms/migrations/0013_programpage_thumbnail_image.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-06-22 15:41
from __future__ import unicode_literals

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('wagtailimages', '0012_copy_image_permissions_to_collections'),
('cms', '0012_programpage_external_program_page_url'),
]

operations = [
migrations.AddField(
model_name='programpage',
name='thumbnail_image',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.Image'),
),
]
21 changes: 21 additions & 0 deletions cms/migrations/0014_html_in_faq_answers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-06-29 16:12
from __future__ import unicode_literals

from django.db import migrations
import wagtail.wagtailcore.fields


class Migration(migrations.Migration):

dependencies = [
('cms', '0013_programpage_thumbnail_image'),
]

operations = [
migrations.AlterField(
model_name='frequentlyaskedquestion',
name='answer',
field=wagtail.wagtailcore.fields.RichTextField(),
),
]
19 changes: 17 additions & 2 deletions cms/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,11 @@ class ProgramPage(Page):
"""
description = RichTextField(blank=True)
program = models.OneToOneField('courses.Program', null=True, on_delete=models.SET_NULL)
external_program_page_url = models.URLField(
blank=True,
null=True,
help_text="Use this field to directly link an external web page for this program."
)
background_image = models.ForeignKey(
Image,
null=True,
Expand All @@ -73,14 +78,24 @@ class ProgramPage(Page):
contact_us = RichTextField(blank=True)
title_over_image = RichTextField(blank=True)

thumbnail_image = models.ForeignKey(
Image,
null=True,
blank=True,
on_delete=models.SET_NULL,
related_name='+'
)

content_panels = Page.content_panels + [
FieldPanel('description', classname="full"),
FieldPanel('program'),
FieldPanel('thumbnail_image'),
FieldPanel('external_program_page_url'),
FieldPanel('background_image'),
FieldPanel('contact_us'),
FieldPanel('title_over_image'),
InlinePanel('courses', label='Program Courses'),
InlinePanel('faqs', label='Frequently Asked Questions'),
InlinePanel('courses', label='Program Courses')
]

def get_context(self, request):
Expand Down Expand Up @@ -128,7 +143,7 @@ class FrequentlyAskedQuestion(Orderable):
"""
program_page = ParentalKey(ProgramPage, related_name='faqs')
question = models.TextField()
answer = models.TextField()
answer = RichTextField()

content_panels = [
MultiFieldPanel(
Expand Down
47 changes: 28 additions & 19 deletions cms/templates/cms/home_page.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
{% wagtailuserbar %}
{% block body_class %}template-programpage{% endblock %}

{% block title %}{% trans "MIT MicroMaster’s" %}{% endblock %}
{% block title %}{% trans "MIT MicroMasters" %}{% endblock %}

{% block content %}

Expand All @@ -15,7 +15,7 @@
<nav class="navbar navbar-default" role="navigation">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="javascript:void(0)"><img src="/static/images/logo-micromasters@2x.png" width="215" height="40" alt="MIT MicroMaster’s" /></a>
<a class="navbar-brand" href="javascript:void(0)"><img src="{% static 'images/logo-micromasters.png' %}" width="215" height="40" alt="MIT MicroMasters" /></a>
<div class="nav-utility pull-right">
{% if authenticated %}
<a class="btn btn-danger" href="/logout">
Expand Down Expand Up @@ -46,7 +46,7 @@
<div class="banner-wrapper-content">
<h1>
<div class="banner-image">
<img src="static/images/[email protected]" alt="MIT" />
<img src="{% static 'images/[email protected]' %}" alt="MIT" />
</div>
{{ title }}
</h1>
Expand All @@ -56,26 +56,36 @@ <h1>
<div class="row sub-banner">
<div class="col-md-12">
<div class="sub-banner-content">
MIT has created a new credential for online learners: the MicroMaster’s, which will be granted by <a href="https://www.edx.org/school/mitx" target="_blank">MITx</a> to students who do exceptionally well in a given set of graduate-level online courses and do well in a subsequent exam. <a href="javascript:void()" data-target="#modal-about" data-toggle="modal">Learn more</a>.
MIT has created a new credential for online learners: the MicroMasters, which will be granted by <a href="https://www.edx.org/school/mitx" target="_blank">MITx</a> to students who do exceptionally well in a given set of graduate-level online courses and do well in a subsequent exam. <a href="javascript:void()" data-target="#modal-about" data-toggle="modal">Learn more</a>.
</div>
</div>
</div>

<div class="panel panel-main-content">
<div class="panel-body">
<h3>MicroMaster’s</h3>
<h3>MicroMasters</h3>
<div class="media-list is-grid padding-bottom-50">
<ul class="blocks list-unstyled" data-plugin="animateList" data-child=">li">

{% for program in programs %}
<li class="col-sm-6">
{% if program.programpage %}
<a href="{{ program.programpage.url }}" class="program-link">
{% if program.programpage.external_program_page_url %}
<a href="{{ program.programpage.external_program_page_url }}" class="program-link">
{% else %}
<a href="{{ program.programpage.url }}" class="program-link">
{% endif %}
{% endif %}
<div class="media-item">
<div class="media-top">
<div class="image-wrap">
<img class="image" src="static/images/course-1.png" alt="course image for {{program}}">
{% if program.programpage and program.programpage.thumbnail_image %}
{% image program.programpage.thumbnail_image fill-378x225 as thumbnail_image %}
<img class="image" src="{{ thumbnail_image.url }}" alt="course image for {{program}}"
width="{{ thumbnail_image.width }}" height="{{ thumbnail_image.height }}" />
{% else %}
<img class="image" src="{% static 'images/course-thumbnail.png' %}" alt="course image for {{program}}" width="378" height="225" />
{% endif %}
</div>
</div>
<div class="info-wrap">
Expand Down Expand Up @@ -106,16 +116,16 @@ <h3>MicroMaster’s</h3>
<br/><br/><br/>
<div class="container">
<div class="col-sm-12 title-coming-soon text-center">
MIT has plans to bring more MicroMaster’s programs to motivated learners like you.
MIT has plans to bring more MicroMasters programs to motivated learners like you.
Please sign up for our <a href="#" data-toggle="modal"
data-target="#subscribeAlert">mailing list</a>
to hear about new MicroMaster’s programs.
Also, don't hesitate to let us know about what MicroMaster’s you’d like to see.
to hear about new MicroMasters programs.
Also, don't hesitate to let us know about what MicroMasters you’d like to see.
</div>
<div class="row">
<div class="col-sm-12">
<button class="btn btn-danger button-subscribe-alerts center-block" data-toggle="modal"
data-target="#subscribeAlert">Yes, tell me when MicroMaster’s are available</button>
data-target="#subscribeAlert">Yes, tell me when MicroMasters are available</button>
</div>
</div>
</div>
Expand All @@ -128,7 +138,7 @@ <h3>MicroMaster’s</h3>
</section>
</div>

{% include "cms/footer.html" %}
{% include "footer.html" %}

<div class="modal fade modal-fade-in-scale-up" id="modal-about" aria-hidden="true" aria-labelledby="modal-about"
role="dialog" tabindex="-1">
Expand All @@ -138,20 +148,19 @@ <h3>MicroMaster’s</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<!-- <h4 class="modal-title">About MicroMaster’s</h4> -->
</div>
<div class="modal-body">
<h2>MicroMaster’s is a new credential</h2>
<h2>MicroMasters is a new credential</h2>
<p>
MIT has created a new credential for online learners: the “MicroMaster’s,” which will be granted by MITx (MIT’s online learning initiative) to students who do exceptionally well in a given set of graduate-level online courses and do well in a subsequent exam. The credential will first be available to students who register for the SCM program’s online courses.
MIT has created a new credential for online learners: the “MicroMasters,” which will be granted by MITx (MIT’s online learning initiative) to students who do exceptionally well in a given set of graduate-level online courses and do well in a subsequent exam. The credential will first be available to students who register for the SCM program’s online courses.
</p>
<h3>Join the MIT MicroMaster’s community</h3>
<h3>Join the MIT MicroMasters community</h3>
<p>
MicroMaster’s aren't just about courseware. Part of the the MIT experience is interacting with other exceptional students like yourself. Fill out your profile on this site and build professional relationships with like-minded learners.
MicroMasters aren't just about courseware. Part of the the MIT experience is interacting with other exceptional students like yourself. Fill out your profile on this site and build professional relationships with like-minded learners.
</p>
<h3>MicroMaster’s courses are delivered through edX.org</h3>
<h3>MicroMasters courses are delivered through edX.org</h3>
<p>
Use your edX.org account to enroll in a MicroMaster’s program and share your grades and progress with MIT. When you complete all the requirements and earn a MicroMaster’s credential, you can use it to apply for a Masters degree at MIT.
Use your edX.org account to enroll in a MicroMasters program and share your grades and progress with MIT. When you complete all the requirements and earn a MicroMasters credential, you can use it to apply for a Master’s degree at MIT.
</p>
</div>
</div>
Expand Down
Loading

0 comments on commit fe9fb0a

Please sign in to comment.