Commit a025c2cf by Waheed Ahmed

Course edit page and Institution/Course admin widget.

ECOM-6488
ECOM-6055
parent 7da8b084
......@@ -29,6 +29,18 @@ class PersonModelMultipleChoice(forms.ModelMultipleChoiceField):
return str(render_to_string('publisher/_personFieldLabel.html', context=context))
class ClearableImageInput(forms.ClearableFileInput):
"""
ClearableFileInput render the saved image as link.
Render img tag instead of link and add some classes for JS and CSS, also
remove image link and clear checkbox.
"""
clear_checkbox_label = _('Remove Image')
template_with_initial = render_to_string('publisher/_clearableImageInput.html')
template_with_clear = render_to_string('publisher/_clearImageLink.html')
class BaseCourseForm(forms.ModelForm):
""" Base Course Form. """
......@@ -110,6 +122,9 @@ class CustomCourseForm(CourseForm):
class Meta(CourseForm.Meta):
model = Course
widgets = {
'image': ClearableImageInput()
}
fields = (
'title', 'number', 'short_description', 'full_description',
'expected_learnings', 'level_type', 'primary_subject', 'secondary_subject',
......@@ -118,11 +133,18 @@ class CustomCourseForm(CourseForm):
)
def __init__(self, *args, **kwargs):
user = kwargs.pop('user', None)
organization = kwargs.pop('organization', None)
if organization:
org_extension = OrganizationExtension.objects.get(organization=organization)
self.declared_fields['team_admin'].queryset = User.objects.filter(groups__name=org_extension.group)
if user:
self.declared_fields['organization'].queryset = Organization.objects.filter(
organization_extension__organization_id__isnull=False,
organization_extension__group__in=user.groups.all()
)
super(CustomCourseForm, self).__init__(*args, **kwargs)
......
......@@ -43,11 +43,11 @@ IMAGE_TOO_LARGE = 'The image you uploaded is too large. The required maximum res
@ddt.ddt
class CreateUpdateCourseViewTests(TestCase):
""" Tests for the publisher `CreateCourseView` and `UpdateCourseView`. """
class CreateCourseViewTests(TestCase):
""" Tests for the publisher `CreateCourseView`. """
def setUp(self):
super(CreateUpdateCourseViewTests, self).setUp()
super(CreateCourseViewTests, self).setUp()
self.user = UserFactory()
self.internal_user_group = Group.objects.get(name=INTERNAL_USER_GROUP_NAME)
self.user.groups.add(self.internal_user_group)
......@@ -177,85 +177,6 @@ class CreateUpdateCourseViewTests(TestCase):
self.assertEqual(response.status_code, 400)
self._assert_records(1)
def test_update_course_with_admin(self):
""" Verify that publisher admin can update an existing course. """
self.user.groups.add(Group.objects.get(name=ADMIN_GROUP_NAME))
course_dict = model_to_dict(self.course)
course_dict.pop('verification_deadline')
course_dict.pop('image')
updated_course_title = 'Updated {}'.format(self.course.title)
course_dict['title'] = updated_course_title
self.assertNotEqual(self.course.title, updated_course_title)
self.assertNotEqual(self.course.changed_by, self.user)
response = self.client.post(
reverse('publisher:publisher_courses_edit', kwargs={'pk': self.course.id}),
course_dict
)
self.assertRedirects(
response,
expected_url=reverse('publisher:publisher_course_detail', kwargs={'pk': self.course.id}),
status_code=302,
target_status_code=200
)
course = Course.objects.get(id=self.course.id)
# Assert that course is updated.
self.assertEqual(course.title, updated_course_title)
self.assertEqual(course.changed_by, self.user)
# add new and check the comment on edit page.
comment = CommentFactory(content_object=self.course, user=self.user, site=self.site)
response = self.client.get(reverse('publisher:publisher_courses_edit', kwargs={'pk': self.course.id}))
self.assertContains(response, 'Total Comments 1')
self.assertContains(response, 'Add new comment')
self.assertContains(response, comment.comment)
def test_update_course_without_publisher_admin_rights(self):
""" Verify that non-admin users cannot update the course. """
self.client.logout()
user = UserFactory()
self.client.login(username=user.username, password=USER_PASSWORD)
course_dict = model_to_dict(self.course)
course_dict.pop('verification_deadline')
course_dict.pop('image')
updated_course_title = 'Updated {}'.format(self.course.title)
course_dict['title'] = updated_course_title
self.assertNotEqual(self.course.title, updated_course_title)
response = self.client.post(
reverse('publisher:publisher_courses_edit', kwargs={'pk': self.course.id}),
course_dict
)
# verify that non staff user can't update course without permission
self.assertEqual(response.status_code, 403)
user.groups.add(Group.objects.get(name=ADMIN_GROUP_NAME))
response = self.client.post(
reverse('publisher:publisher_courses_edit', kwargs={'pk': self.course.id}),
course_dict
)
self.assertRedirects(
response,
expected_url=reverse('publisher:publisher_course_detail', kwargs={'pk': self.course.id}),
status_code=302,
target_status_code=200
)
course = Course.objects.get(id=self.course.id)
# Assert that course is updated.
self.assertEqual(course.title, updated_course_title)
# add new and check the comment on edit page.
comment = CommentFactory(content_object=self.course, user=user, site=self.site)
response = self.client.get(reverse('publisher:publisher_courses_edit', kwargs={'pk': self.course.id}))
self.assertContains(response, 'Total Comments 1')
self.assertContains(response, 'Add new comment')
self.assertContains(response, comment.comment)
@ddt.data(Seat.VERIFIED, Seat.PROFESSIONAL)
def test_create_course_without_price_with_error(self, seat_type):
""" Verify that if seat type is not honor/audit then price should be given.
......@@ -294,7 +215,8 @@ class CreateUpdateCourseViewTests(TestCase):
"""Verify that if there are more than one organization then there will be
a drop down of organization choices.
"""
factories.OrganizationExtensionFactory()
organization_extension = factories.OrganizationExtensionFactory()
self.user.groups.add(organization_extension.group)
response = self.client.get(reverse('publisher:publisher_courses_new'))
self.assertContains(response,
'<select class="field-input input-select" id="id_organization" name="organization">')
......@@ -339,6 +261,7 @@ class CreateUpdateCourseViewTests(TestCase):
course_dict['start'] = self.start_date_time
course_dict['end'] = self.end_date_time
course_dict['organization'] = self.organization_extension.organization.id
course_dict['lms_course_id'] = ''
if seat:
course_dict.update(**model_to_dict(seat))
course_dict.pop('verification_deadline')
......@@ -1645,6 +1568,9 @@ class CourseEditViewTests(TestCase):
self.organization_extension = factories.OrganizationExtensionFactory()
self.course.organizations.add(self.organization_extension.organization)
self.course_team_role = factories.CourseUserRoleFactory(course=self.course, role=PublisherUserRole.CourseTeam)
self.organization_extension.group.user_set.add(*(self.user, self.course_team_role.user))
self.edit_page_url = reverse('publisher:publisher_courses_edit', args=[self.course.id])
def test_edit_page_without_permission(self):
......@@ -1679,6 +1605,109 @@ class CourseEditViewTests(TestCase):
response = self.client.get(self.edit_page_url)
self.assertEqual(response.status_code, 200)
def test_update_course_with_admin(self):
"""
Verify that publisher admin can update an existing course.
"""
self.user.groups.add(Group.objects.get(name=ADMIN_GROUP_NAME))
post_data = self._post_data(self.organization_extension)
updated_course_title = 'Updated {}'.format(self.course.title)
post_data['title'] = updated_course_title
self.assertNotEqual(self.course.title, updated_course_title)
self.assertNotEqual(self.course.changed_by, self.user)
response = self.client.post(self.edit_page_url, data=post_data)
self.assertRedirects(
response,
expected_url=reverse('publisher:publisher_course_detail', kwargs={'pk': self.course.id}),
status_code=302,
target_status_code=200
)
course = Course.objects.get(id=self.course.id)
# Assert that course is updated.
self.assertEqual(course.title, updated_course_title)
self.assertEqual(course.changed_by, self.user)
def test_update_course_with_non_internal_user(self):
"""
Verify that non-internal user cannot update the course.
"""
self.client.logout()
user = UserFactory()
self.client.login(username=user.username, password=USER_PASSWORD)
user.groups.add(self.organization_extension.group)
post_data = self._post_data(self.organization_extension)
response = self.client.post(self.edit_page_url, data=post_data)
self.assertEqual(response.status_code, 403)
def test_update_course_team_admin(self):
"""
Verify that publisher user can update course team admin.
"""
self._assign_permissions(self.organization_extension)
self.assertEqual(self.course.course_team_admin, self.course_team_role.user)
response = self.client.post(self.edit_page_url, data=self._post_data(self.organization_extension))
self.assertRedirects(
response,
expected_url=reverse('publisher:publisher_course_detail', kwargs={'pk': self.course.id}),
status_code=302,
target_status_code=200
)
self.assertEqual(self.course.course_team_admin, self.user)
def test_update_course_organization(self):
"""
Verify that publisher user can update course organization.
"""
self._assign_permissions(self.organization_extension)
# Create new OrganizationExtension and assign edit/view permissions.
organization_extension = factories.OrganizationExtensionFactory()
organization_extension.group.user_set.add(*(self.user, self.course_team_role.user))
self._assign_permissions(organization_extension)
self.assertEqual(self.course.organizations.first(), self.organization_extension.organization)
response = self.client.post(self.edit_page_url, data=self._post_data(organization_extension))
self.assertRedirects(
response,
expected_url=reverse('publisher:publisher_course_detail', kwargs={'pk': self.course.id}),
status_code=302,
target_status_code=200
)
self.assertEqual(self.course.organizations.first(), organization_extension.organization)
def _assign_permissions(self, organization_extension):
"""
Assign View/Edit permissions to OrganizationExtension object.
"""
assign_perm(OrganizationExtension.VIEW_COURSE, organization_extension.group, organization_extension)
assign_perm(OrganizationExtension.EDIT_COURSE, organization_extension.group, organization_extension)
def _post_data(self, organization_extension):
"""
Generate post data and return.
"""
post_data = model_to_dict(self.course)
post_data.pop('image')
post_data['team_admin'] = self.user.id
post_data['organization'] = organization_extension.organization.id
return post_data
class CourseRunEditViewTests(TestCase):
""" Tests for the course run edit view. """
......
......@@ -20,7 +20,7 @@ from course_discovery.apps.core.models import User
from course_discovery.apps.publisher.choices import PublisherUserRole
from course_discovery.apps.publisher.emails import send_email_for_course_creation
from course_discovery.apps.publisher.forms import (
CourseForm, SeatForm, CustomCourseForm, CustomCourseRunForm, CustomSeatForm, UpdateCourseForm
SeatForm, CustomCourseForm, CustomCourseRunForm, CustomSeatForm, UpdateCourseForm
)
from course_discovery.apps.publisher import mixins
from course_discovery.apps.publisher.models import (
......@@ -188,7 +188,7 @@ class CreateCourseView(mixins.LoginRequiredMixin, mixins.PublisherUserRequiredMi
def get_context_data(self):
return {
'course_form': self.course_form,
'course_form': self.course_form(user=self.request.user),
'run_form': self.run_form,
'seat_form': self.seat_form,
'publisher_hide_features_for_pilot': waffle.switch_is_active('publisher_hide_features_for_pilot'),
......@@ -204,7 +204,9 @@ class CreateCourseView(mixins.LoginRequiredMixin, mixins.PublisherUserRequiredMi
# pass selected organization to CustomCourseForm to populate related
# choices into institution admin field
organization = self.request.POST.get('organization')
course_form = self.course_form(request.POST, request.FILES, organization=organization)
course_form = self.course_form(
request.POST, request.FILES, user=self.request.user, organization=organization
)
run_form = self.run_form(request.POST)
seat_form = self.seat_form(request.POST)
if course_form.is_valid() and run_form.is_valid() and seat_form.is_valid():
......@@ -275,21 +277,62 @@ class CreateCourseView(mixins.LoginRequiredMixin, mixins.PublisherUserRequiredMi
return render(request, self.template_name, ctx, status=400)
class CourseEditView(mixins.PublisherPermissionMixin, mixins.FormValidMixin, UpdateView):
class CourseEditView(mixins.PublisherPermissionMixin, UpdateView):
""" Course Edit View."""
model = Course
form_class = CourseForm
form_class = CustomCourseForm
permission = OrganizationExtension.EDIT_COURSE
template_name = 'publisher/course_form.html'
template_name = 'publisher/course_edit_form.html'
success_url = 'publisher:publisher_course_detail'
def get_success_url(self):
return reverse(self.success_url, kwargs={'pk': self.object.id})
def get_context_data(self, **kwargs):
context = super(CourseEditView, self).get_context_data(**kwargs)
context['comment_object'] = self.object
return context
def get_form_kwargs(self):
"""
Pass extra kwargs to form, required for team_admin and organization querysets.
"""
kwargs = super(CourseEditView, self).get_form_kwargs()
request = self.request
if request.POST:
kwargs.update(
{'user': request.user, 'organization': request.POST.get('organization')}
)
else:
organization = self.object.organizations.first()
kwargs.update(
user=request.user,
organization=organization,
initial={
'organization': organization,
'team_admin': self.object.course_team_admin
}
)
return kwargs
def form_valid(self, form):
"""
If the form is valid, update organization and team_admin.
"""
self.object = form.save()
self.object.changed_by = self.request.user
self.object.save()
organization_extension = get_object_or_404(
OrganizationExtension, organization=form.data['organization']
)
self.object.organizations.remove(self.object.organizations.first())
self.object.organizations.add(organization_extension.organization)
course_admin_role = get_object_or_404(
CourseUserRole, course=self.object, role=PublisherUserRole.CourseTeam
)
course_admin_role.user_id = form.data['team_admin']
course_admin_role.save()
return super(CourseEditView, self).form_valid(form)
class CourseDetailView(mixins.LoginRequiredMixin, mixins.PublisherPermissionMixin, DetailView):
......
......@@ -40,22 +40,10 @@ class CommentsTests(TestCase):
toggle_switch('enable_publisher_email_notifications', True)
def test_course_edit_page_with_multiple_comments(self):
""" Verify course edit page can load multiple comments"""
self._add_assert_multiple_comments(self.course, self.course_edit_page)
def test_course_run_edit_page_with_multiple_comments(self):
""" Verify course-run edit page can load multiple comments"""
self._add_assert_multiple_comments(self.course_run, self.course_run_edit_page)
def test_comment_edit_with_course(self):
""" Verify that only comments attached with specific course appears on edited page. """
comments = self._generate_comments_for_all_content_types()
response = self.client.get(reverse(self.course_edit_page, kwargs={'pk': self.course.id}))
self.assertContains(response, comments.get(self.course).comment)
self.assertNotContains(response, comments.get(self.course_run).comment)
self.assertNotContains(response, comments.get(self.seat).comment)
def test_comment_edit_with_courserun(self):
""" Verify that only comments attached with specific course run appears on edited page. """
comments = self._generate_comments_for_all_content_types()
......
......@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-25 12:05+0500\n"
"POT-Creation-Date: 2017-01-26 15:26+0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: \n"
#: apps/api/filters.py
#, python-brace-format
......@@ -461,6 +461,10 @@ msgid "New Studio instance request for {title}"
msgstr ""
#: apps/publisher/forms.py
msgid "Remove Image"
msgstr ""
#: apps/publisher/forms.py
msgid "Organization Name"
msgstr ""
......@@ -797,7 +801,7 @@ msgstr ""
#: templates/metadata/admin/course_run.html
#: templates/publisher/_add_instructor_popup.html
#: templates/publisher/course_form.html
#: templates/publisher/course_edit_form.html
msgid "Cancel"
msgstr ""
......@@ -920,7 +924,7 @@ msgid "Sign Out"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_detail.html templates/publisher/course_form.html
#: templates/publisher/course_detail.html
msgid "Course Form"
msgstr ""
......@@ -929,12 +933,14 @@ msgid "Add Course"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"The information in the Studio Instance section is required before edX can "
"create a Studio instance for the course run."
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"The information in the About Page section is not required before edX creates"
" a Studio instance for the course run. You can return to this page and enter"
......@@ -943,10 +949,12 @@ msgid ""
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Studio Instance"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"This information is required before edX can create a Studio instance for a "
"course run."
......@@ -960,74 +968,90 @@ msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/add_courserun_form.html
#: templates/publisher/course_edit_form.html
msgid "COURSE TITLE"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/add_courserun_form.html
#: templates/publisher/course_edit_form.html
msgid "Best Practices"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Examples"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Maximum 70 characters. Recommended 50 or fewer characters."
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "An effective course title:"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Clearly indicates the course subject matter."
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Follows search engine optimization (SEO) guidelines."
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Targets a global audience."
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"If the course is part of a sequence, include both sequence and course "
"information as \\"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Single Courses"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/add_courserun_form.html
#: templates/publisher/course_edit_form.html
msgid "English Grammar and Essay Writing"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Project Management Life Cycle"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/add_courserun_form.html
#: templates/publisher/course_edit_form.html
msgid "Sequence Courses:"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/add_courserun_form.html
#: templates/publisher/course_edit_form.html
msgid "Introduction to Statistics"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/add_courserun_form.html
#: templates/publisher/course_edit_form.html
msgid "Statistics: Inference"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/add_courserun_form.html
#: templates/publisher/course_edit_form.html
msgid "Statistics: Probability"
msgstr ""
......@@ -1082,14 +1106,17 @@ msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/add_courserun_form.html
#: templates/publisher/course_edit_form.html
msgid "COURSE NUMBER"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Maximum 10 characters. Characters can be letters, numbers, or periods."
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"If a course consists of several modules, the course number can have an "
"ending such as .1x or .2x."
......@@ -1097,6 +1124,7 @@ msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/add_courserun_form.html
#: templates/publisher/course_edit_form.html
msgid "About page information"
msgstr ""
......@@ -1128,70 +1156,85 @@ msgid ""
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "BRIEF DESCRIPTION"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"Reads as a tag line - a short, engaging description for students browsing "
"course listings"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Conveys why someone should take the course"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "SEO optimized and targeted to a global audience"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "140 character limit, including spaces."
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "FULL DESCRIPTION"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Summarized description of course content"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Describe why a learner should take this course"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"Text should be easily scannable, using bullet points to highlight instead of"
" long, dense text paragraphs"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"Note: the first 4-5 lines will be visible to the learner immediately upon "
"clicking the page;"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"additional text will be hidden yet available via \"See More\" clickable text"
" under the first 4-5 lines"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "2500 character limit, including spaces."
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "EXPECTED LEARNINGS"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Answer to the question: \"What will you learn from this course?\""
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "bulleted items, approximately 4-10 words per bullet"
msgstr ""
......@@ -1218,74 +1261,90 @@ msgid "Instructor"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "SUBJECT FIELD"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"Only one primary subject will appear on the About Page; please select one "
"primary subject and a maximum of two additional subject areas for search."
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "COURSE IMAGE"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"Select an eye-catching, colorful image that captures the content and essence"
" of your course"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Do not include text or headlines"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Choose an image that you have permission to use."
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "This can be a stock photo (try Flickr creative commons, "
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"Stock Vault, Stock XCHNG, iStock Photo) or an image custom designed for your"
" course"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Sequenced courses should each have a unique image"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Size: 2120 x 1192 pixels"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "PREREQUISITES"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"List concepts and level (basic, advanced, undergraduate, graduate) students "
"should be familiar with"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "If there are no prerequisites, please list \"None.\""
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "200 character limit, including spaces"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "200 character limit, including spaces."
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "SYLLABUS"
msgstr ""
......@@ -1340,22 +1399,26 @@ msgid "indicate whether the course should be listed as 8 weeks or 9 weeks."
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "LEVEL TYPE"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"Introductory - No prerequisites; an individual with some to all of a "
"secondary school degree could complete"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"Intermediate - Basic prerequisites; a secondary school degree likely "
"required to be successful as well as some university"
msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"Advanced - Significant number of prerequisites required; course geared to "
"3rd or 4th year university student or a masters degree student"
......@@ -1542,12 +1605,12 @@ msgstr ""
msgid "Not yet created"
msgstr ""
#: templates/publisher/course_form.html
msgid "UPDATE COURSE"
#: templates/publisher/course_edit_form.html
msgid "Edit Course"
msgstr ""
#: templates/publisher/course_form.html
msgid "Add Course Run"
#: templates/publisher/course_edit_form.html
msgid "UPDATE COURSE"
msgstr ""
#: templates/publisher/course_run_detail.html
......
......@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-25 12:05+0500\n"
"POT-Creation-Date: 2017-01-26 15:26+0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: \n"
#: static/js/catalogs-change-form.js
msgid "Preview"
......
......@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-25 12:05+0500\n"
"POT-Creation-Date: 2017-01-26 15:26+0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps/api/filters.py
......@@ -575,6 +575,10 @@ msgstr ""
"¢σηѕє¢тєт#"
#: apps/publisher/forms.py
msgid "Remove Image"
msgstr "Rémövé Ìmägé Ⱡ'σяєм ιρѕυм ∂σłσя ѕ#"
#: apps/publisher/forms.py
msgid "Organization Name"
msgstr "Örgänïzätïön Nämé Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмє#"
......@@ -946,7 +950,7 @@ msgstr "Sävé Ⱡ'σяєм ι#"
#: templates/metadata/admin/course_run.html
#: templates/publisher/_add_instructor_popup.html
#: templates/publisher/course_form.html
#: templates/publisher/course_edit_form.html
msgid "Cancel"
msgstr "Çänçél Ⱡ'σяєм ιρѕυ#"
......@@ -1072,7 +1076,7 @@ msgid "Sign Out"
msgstr "Sïgn Öüt Ⱡ'σяєм ιρѕυм ∂#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_detail.html templates/publisher/course_form.html
#: templates/publisher/course_detail.html
msgid "Course Form"
msgstr "Çöürsé Förm Ⱡ'σяєм ιρѕυм ∂σłσя #"
......@@ -1081,6 +1085,7 @@ msgid "Add Course"
msgstr "Àdd Çöürsé Ⱡ'σяєм ιρѕυм ∂σłσ#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"The information in the Studio Instance section is required before edX can "
"create a Studio instance for the course run."
......@@ -1089,6 +1094,7 @@ msgstr ""
"çréäté ä Stüdïö ïnstänçé för thé çöürsé rün. Ⱡ'σяєм ιρѕυм #"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"The information in the About Page section is not required before edX creates"
" a Studio instance for the course run. You can return to this page and enter"
......@@ -1105,10 +1111,12 @@ msgstr ""
"νєłιт єѕѕє#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Studio Instance"
msgstr "Stüdïö Ìnstänçé Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт α#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"This information is required before edX can create a Studio instance for a "
"course run."
......@@ -1126,45 +1134,54 @@ msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/add_courserun_form.html
#: templates/publisher/course_edit_form.html
msgid "COURSE TITLE"
msgstr "ÇÖÛRSÉ TÌTLÉ Ⱡ'σяєм ιρѕυм ∂σłσя ѕ#"
#: templates/publisher/add_course_form.html
#: templates/publisher/add_courserun_form.html
#: templates/publisher/course_edit_form.html
msgid "Best Practices"
msgstr "Bést Präçtïçés Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Examples"
msgstr "Éxämplés Ⱡ'σяєм ιρѕυм ∂#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Maximum 70 characters. Recommended 50 or fewer characters."
msgstr ""
"Mäxïmüm 70 çhäräçtérs. Réçömméndéd 50 ör féwér çhäräçtérs. Ⱡ'σяєм ιρѕυм "
"∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя α#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "An effective course title:"
msgstr "Àn éfféçtïvé çöürsé tïtlé: Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕ#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Clearly indicates the course subject matter."
msgstr ""
"Çléärlý ïndïçätés thé çöürsé süßjéçt mättér. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, "
"¢σηѕє¢тєтυя #"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Follows search engine optimization (SEO) guidelines."
msgstr ""
"Föllöws séärçh éngïné öptïmïzätïön (SÉÖ) güïdélïnés. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт "
"αмєт, ¢σηѕє¢тєтυя α#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Targets a global audience."
msgstr "Tärgéts ä glößäl äüdïénçé. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕ#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"If the course is part of a sequence, include both sequence and course "
"information as \\"
......@@ -1173,36 +1190,43 @@ msgstr ""
"ïnförmätïön äs \\ Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Single Courses"
msgstr "Sïnglé Çöürsés Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт#"
#: templates/publisher/add_course_form.html
#: templates/publisher/add_courserun_form.html
#: templates/publisher/course_edit_form.html
msgid "English Grammar and Essay Writing"
msgstr ""
"Énglïsh Grämmär änd Éssäý Wrïtïng Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тє#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Project Management Life Cycle"
msgstr "Pröjéçt Mänägémént Lïfé Çýçlé Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢#"
#: templates/publisher/add_course_form.html
#: templates/publisher/add_courserun_form.html
#: templates/publisher/course_edit_form.html
msgid "Sequence Courses:"
msgstr "Séqüénçé Çöürsés: Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмє#"
#: templates/publisher/add_course_form.html
#: templates/publisher/add_courserun_form.html
#: templates/publisher/course_edit_form.html
msgid "Introduction to Statistics"
msgstr "Ìntrödüçtïön tö Stätïstïçs Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕ#"
#: templates/publisher/add_course_form.html
#: templates/publisher/add_courserun_form.html
#: templates/publisher/course_edit_form.html
msgid "Statistics: Inference"
msgstr "Stätïstïçs: Ìnférénçé Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, #"
#: templates/publisher/add_course_form.html
#: templates/publisher/add_courserun_form.html
#: templates/publisher/course_edit_form.html
msgid "Statistics: Probability"
msgstr "Stätïstïçs: Prößäßïlïtý Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σ#"
......@@ -1285,16 +1309,19 @@ msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/add_courserun_form.html
#: templates/publisher/course_edit_form.html
msgid "COURSE NUMBER"
msgstr "ÇÖÛRSÉ NÛMBÉR Ⱡ'σяєм ιρѕυм ∂σłσя ѕι#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Maximum 10 characters. Characters can be letters, numbers, or periods."
msgstr ""
"Mäxïmüm 10 çhäräçtérs. Çhäräçtérs çän ßé léttérs, nümßérs, ör pérïöds. "
"Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя #"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"If a course consists of several modules, the course number can have an "
"ending such as .1x or .2x."
......@@ -1304,6 +1331,7 @@ msgstr ""
#: templates/publisher/add_course_form.html
#: templates/publisher/add_courserun_form.html
#: templates/publisher/course_edit_form.html
msgid "About page information"
msgstr "Àßöüt pägé ïnförmätïön Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢#"
......@@ -1343,10 +1371,12 @@ msgstr ""
"döllärs (mïnïmüm öf $49) Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, #"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "BRIEF DESCRIPTION"
msgstr "BRÌÉF DÉSÇRÌPTÌÖN Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмє#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"Reads as a tag line - a short, engaging description for students browsing "
"course listings"
......@@ -1355,40 +1385,47 @@ msgstr ""
"çöürsé lïstïngs Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕ#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Conveys why someone should take the course"
msgstr ""
"Çönvéýs whý söméöné shöüld täké thé çöürsé Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, "
"¢σηѕє¢тєтυя #"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "SEO optimized and targeted to a global audience"
msgstr ""
"SÉÖ öptïmïzéd änd tärgétéd tö ä glößäl äüdïénçé Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт,"
" ¢σηѕє¢тєтυя α#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "140 character limit, including spaces."
msgstr ""
"140 çhäräçtér lïmït, ïnçlüdïng späçés. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, "
"¢σηѕє¢тєтυя#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "FULL DESCRIPTION"
msgstr "FÛLL DÉSÇRÌPTÌÖN Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αм#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Summarized description of course content"
msgstr ""
"Sümmärïzéd désçrïptïön öf çöürsé çöntént Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, "
"¢σηѕє¢тєтυя#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Describe why a learner should take this course"
msgstr ""
"Désçrïßé whý ä léärnér shöüld täké thïs çöürsé Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, "
"¢σηѕє¢тєтυя α#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"Text should be easily scannable, using bullet points to highlight instead of"
" long, dense text paragraphs"
......@@ -1397,6 +1434,7 @@ msgstr ""
" löng, dénsé téxt pärägräphs Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт α#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"Note: the first 4-5 lines will be visible to the learner immediately upon "
"clicking the page;"
......@@ -1405,6 +1443,7 @@ msgstr ""
"çlïçkïng thé pägé; Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢ση#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"additional text will be hidden yet available via \"See More\" clickable text"
" under the first 4-5 lines"
......@@ -1413,22 +1452,26 @@ msgstr ""
" ündér thé fïrst 4-5 lïnés Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "2500 character limit, including spaces."
msgstr ""
"2500 çhäräçtér lïmït, ïnçlüdïng späçés. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, "
"¢σηѕє¢тєтυя#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "EXPECTED LEARNINGS"
msgstr "ÉXPÉÇTÉD LÉÀRNÌNGS Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Answer to the question: \"What will you learn from this course?\""
msgstr ""
"Ànswér tö thé qüéstïön: \"Whät wïll ýöü léärn fröm thïs çöürsé?\" Ⱡ'σяєм "
"ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя α#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "bulleted items, approximately 4-10 words per bullet"
msgstr ""
"ßüllétéd ïtéms, äppröxïmätélý 4-10 wörds pér ßüllét Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт "
......@@ -1461,10 +1504,12 @@ msgid "Instructor"
msgstr "Ìnstrüçtör Ⱡ'σяєм ιρѕυм ∂σłσ#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "SUBJECT FIELD"
msgstr "SÛBJÉÇT FÌÉLD Ⱡ'σяєм ιρѕυм ∂σłσя ѕι#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"Only one primary subject will appear on the About Page; please select one "
"primary subject and a maximum of two additional subject areas for search."
......@@ -1479,10 +1524,12 @@ msgstr ""
"ηση ρяσι∂єηт, ѕυηт ιη ¢υłρα qυι σƒƒι¢ια ∂єѕєяυηт мσłłιт αηιм #"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "COURSE IMAGE"
msgstr "ÇÖÛRSÉ ÌMÀGÉ Ⱡ'σяєм ιρѕυм ∂σłσя ѕ#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"Select an eye-catching, colorful image that captures the content and essence"
" of your course"
......@@ -1491,23 +1538,27 @@ msgstr ""
" öf ýöür çöürsé Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢ση#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Do not include text or headlines"
msgstr ""
"Dö nöt ïnçlüdé téxt ör héädlïnés Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тє#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Choose an image that you have permission to use."
msgstr ""
"Çhöösé än ïmägé thät ýöü hävé pérmïssïön tö üsé. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт "
"αмєт, ¢σηѕє¢тєтυя α#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "This can be a stock photo (try Flickr creative commons, "
msgstr ""
"Thïs çän ßé ä stöçk phötö (trý Flïçkr çréätïvé çömmöns, Ⱡ'σяєм ιρѕυм ∂σłσя "
"ѕιт αмєт, ¢σηѕє¢тєтυя α#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"Stock Vault, Stock XCHNG, iStock Photo) or an image custom designed for your"
" course"
......@@ -1516,20 +1567,24 @@ msgstr ""
" çöürsé Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢т#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Sequenced courses should each have a unique image"
msgstr ""
"Séqüénçéd çöürsés shöüld éäçh hävé ä ünïqüé ïmägé Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт "
"αмєт, ¢σηѕє¢тєтυя α#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "Size: 2120 x 1192 pixels"
msgstr "Sïzé: 2120 x 1192 pïxéls Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢ση#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "PREREQUISITES"
msgstr "PRÉRÉQÛÌSÌTÉS Ⱡ'σяєм ιρѕυм ∂σłσя ѕι#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"List concepts and level (basic, advanced, undergraduate, graduate) students "
"should be familiar with"
......@@ -1538,24 +1593,28 @@ msgstr ""
"shöüld ßé fämïlïär wïth Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "If there are no prerequisites, please list \"None.\""
msgstr ""
"Ìf théré äré nö préréqüïsïtés, pléäsé lïst \"Nöné.\" Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт "
"αмєт, ¢σηѕє¢тєтυя α#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "200 character limit, including spaces"
msgstr ""
"200 çhäräçtér lïmït, ïnçlüdïng späçés Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, "
"¢σηѕє¢тєтυ#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "200 character limit, including spaces."
msgstr ""
"200 çhäräçtér lïmït, ïnçlüdïng späçés. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, "
"¢σηѕє¢тєтυя#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "SYLLABUS"
msgstr "SÝLLÀBÛS Ⱡ'σяєм ιρѕυм ∂#"
......@@ -1624,10 +1683,12 @@ msgstr ""
"ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя #"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid "LEVEL TYPE"
msgstr "LÉVÉL TÝPÉ Ⱡ'σяєм ιρѕυм ∂σłσ#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"Introductory - No prerequisites; an individual with some to all of a "
"secondary school degree could complete"
......@@ -1636,6 +1697,7 @@ msgstr ""
"séçöndärý sçhööl dégréé çöüld çömplété Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"Intermediate - Basic prerequisites; a secondary school degree likely "
"required to be successful as well as some university"
......@@ -1644,6 +1706,7 @@ msgstr ""
"réqüïréd tö ßé süççéssfül äs wéll äs sömé ünïvérsïtý Ⱡ'σяєм ιρѕυ#"
#: templates/publisher/add_course_form.html
#: templates/publisher/course_edit_form.html
msgid ""
"Advanced - Significant number of prerequisites required; course geared to "
"3rd or 4th year university student or a masters degree student"
......@@ -1875,14 +1938,14 @@ msgstr "STÛDÌÖ ÛRL Ⱡ'σяєм ιρѕυм ∂σłσ#"
msgid "Not yet created"
msgstr "Nöt ýét çréätéd Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт α#"
#: templates/publisher/course_form.html
#: templates/publisher/course_edit_form.html
msgid "Edit Course"
msgstr "Édït Çöürsé Ⱡ'σяєм ιρѕυм ∂σłσя #"
#: templates/publisher/course_edit_form.html
msgid "UPDATE COURSE"
msgstr "ÛPDÀTÉ ÇÖÛRSÉ Ⱡ'σяєм ιρѕυм ∂σłσя ѕι#"
#: templates/publisher/course_form.html
msgid "Add Course Run"
msgstr "Àdd Çöürsé Rün Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт#"
#: templates/publisher/course_run_detail.html
msgid "Course Run Detail"
msgstr "Çöürsé Rün Détäïl Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмє#"
......
......@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-25 12:05+0500\n"
"POT-Creation-Date: 2017-01-26 15:26+0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: static/js/catalogs-change-form.js
......
......@@ -57,6 +57,25 @@ $(document).ready(function(){
renderSelectedInstructor(id, name, image_source);
});
$('.remove-image').click(function (e) {
e.preventDefault();
$('.course-image-input').removeClass('hidden');
$('.course-image-thumbnail').hide();
$('.course-image-field a').hide();
$('input#image-clear_id').prop('checked', true);
});
// If file selected mark checkbox unchecked otherwise checked.
$('input#id_image').change(function (e) {
var clearImageInput = $('input#image-clear_id');
e.preventDefault();
if (this.files && this.files[0]) {
clearImageInput.prop('checked', false);
} else {
clearImageInput.prop('checked', true);
}
});
});
$(document).on('change', '#id_organization', function (e) {
......
......@@ -120,3 +120,9 @@
.stopScroll{
overflow: hidden;
}
.course-edit-actions {
@include margin-right(10px);
@include text-align(right);
width: 100%;
}
......@@ -535,6 +535,10 @@ select {
}
}
}
textarea {
width: 100%;
}
}
.comments-container {
......@@ -820,7 +824,20 @@ select {
.course-image {
width: 480px;
height: 250px;
}
.course-image-field {
.clear-image {
text-align: center;
margin-top: 10px;
width: 100%;
}
.course-image-thumbnail {
width: 100%;
height: 200px;
}
}
.selected-instructor {
......
<div class="clear-image">
<a class="remove-image" href="#">%(clear_checkbox_label)s</a>
<div class="hidden">%(clear)s</div>
</div>
<img class="course-image-thumbnail" src="%(initial_url)s">%(clear_template)s
<div class="course-image-input hidden">%(input)s</div>
{% extends 'publisher/base.html' %}
{% load i18n %}
{% load staticfiles %}
{% block title %}
{% trans "Edit Course" %}
{% endblock title %}
{% block page_content %}
<div>
<h1 class="hd-1 emphasized">{% trans "Edit Course" %}</h1>
<div class="alert-messages">
{% if messages %}
{% for message in messages %}
<div class="alert alert-{{ message.tags }}" role="alert" aria-labelledby="alert-title-{{ message.tags }}" tabindex="-1">
<div><p class="alert-copy">{{ message }}</p></div>
</div>
{% endfor %}
{% endif %}
<p>
{% trans "The information in the Studio Instance section is required before edX can create a Studio instance for the course run." %}
</p>
<p class="{% if publisher_hide_features_for_pilot %}hidden{% endif %}">
{% trans "The information in the About Page section is not required before edX creates a Studio instance for the course run. You can return to this page and enter this information later. This information is required before edX announces the course." %}
</p>
<form class="form" method="post" action="" enctype="multipart/form-data">{% csrf_token %}
<div class="layout-full publisher-layout layout">
<h2 class="layout-title">{% trans "Studio Instance" %}</h2>
<div class="card course-form">
<p class="required">
{% trans "This information is required before edX can create a Studio instance for a course run." %}
</p>
<div class="course-information">
<fieldset class="form-group grid-container grid-manual">
<div class="field-title">{% trans "COURSE TITLE" %}</div>
<div class="row">
<div class="col col-6 help-text">
<div class="row">
<ul class="tabs">
<li class="course-tabs active" data-tab="tab-practices">
{% trans "Best Practices" %}
</li>
<li class="course-tabs" data-tab="tab-example">
{% trans "Examples" %}
</li>
</ul>
</div>
<div id="tab-practices" class="content active">
<p>{% trans "Maximum 70 characters. Recommended 50 or fewer characters." %}</p>
<p>{% trans "An effective course title:" %}</p>
<ul>
<li>{% trans "Clearly indicates the course subject matter." %}</li>
<li>{% trans "Follows search engine optimization (SEO) guidelines." %}</li>
<li>{% trans "Targets a global audience." %}</li>
</ul>
<p>{% trans "If the course is part of a sequence, include both sequence and course information as \"Sequence: Course\"." %}</p>
</div>
<div id="tab-example" class="content">
<p></p>
<strong>{% trans "Single Courses" %}</strong>
<p>“{% trans "English Grammar and Essay Writing" %}”</p>
<p>“{% trans "Project Management Life Cycle" %}”</p>
<br />
<strong>{% trans "Sequence Courses:" %}</strong>
<p>“{% trans "Introduction to Statistics" %}”</p>
<p>“{% trans "Statistics: Inference" %}”</p>
<p>“{% trans "Statistics: Probability" %}”</p>
</div>
</div>
<div class="col col-6">
{% if form.organization.field.queryset.all.count > 1 %}
<label class="field-label">{{ form.organization.label_tag }} </label>
{{ form.organization }}
{% else %}
{% with form.organization.field.queryset|first as organization %}
<label id="organization-name" class="field-label"
data-org_id="{{ organization.id }}">{{ form.organization.label_tag }}
</label>
<span class="read-only-field">{{ organization.name }}</span>
<input id="id_organization" name="organization" type="hidden" value="{{ organization.id }}">
{% endwith %}
{% endif %}
<label class="field-label">
{{ form.team_admin.label_tag }}
</label> {{ form.team_admin }}
<label class="field-label ">{{ form.title.label }}</label>
{{ form.title }}
</div>
</div>
<div class="field-title">{% trans "COURSE NUMBER" %}</div>
<div class="row">
<div class="col col-6 help-text">
<p>{% trans "Maximum 10 characters. Characters can be letters, numbers, or periods." %}</p>
<p>{% trans "If a course consists of several modules, the course number can have an ending such as .1x or .2x." %}</p>
</div>
<div class="col col-6">
<label class="field-label ">{{ form.number.label_tag }}</label>
{{ form.number }}
</div>
</div>
</fieldset>
</div>
</div>
</div>
<div class="layout-full publisher-layout layout {% if publisher_hide_features_for_pilot %}hidden{% endif %}">
<h2 class="layout-title">{% trans "About page information" %}</h2>
<div class="card course-form">
<div class="course-information">
<fieldset class="form-group grid-container grid-manual">
<div class="field-title">{% trans "BRIEF DESCRIPTION" %}</div>
<div class="row">
<div class="col col-6 help-text">
<ul>
<li>{% trans "Reads as a tag line - a short, engaging description for students browsing course listings" %}
</li>
<li>{% trans "Conveys why someone should take the course" %}</li>
<li>{% trans "SEO optimized and targeted to a global audience" %}</li>
</ul>
</div>
<div class="col col-6">
<label class="field-label ">{{ form.short_description.label_tag }}</label>
{{ form.short_description }}
<p>{% trans "140 character limit, including spaces." %}</p>
</div>
</div>
<div class="field-title">{% trans "FULL DESCRIPTION" %}</div>
<div class="row">
<div class="col col-6 help-text">
{% trans "Summarized description of course content" %}
<ul>
<li>{% trans "Describe why a learner should take this course" %}</li>
<li>{% trans "SEO optimized and targeted to a global audience" %}</li>
<li>{% trans "Text should be easily scannable, using bullet points to highlight instead of long, dense text paragraphs" %}
</li>
<li>
{% trans "Note: the first 4-5 lines will be visible to the learner immediately upon clicking the page;" %}
{% trans 'additional text will be hidden yet available via "See More" clickable text under the first 4-5 lines' %}
</li>
</ul>
</div>
<div class="col col-6">
<label class="field-label ">{{ form.full_description.label_tag }}</label>
{{ form.full_description }}
<p>{% trans "2500 character limit, including spaces." %}</p>
</div>
</div>
<div class="field-title">{% trans "EXPECTED LEARNINGS" %}</div>
<div class="row">
<div class="col col-6 help-text">
<ul>
<li>{% trans 'Answer to the question: "What will you learn from this course?"' %}</li>
<li>{% trans "bulleted items, approximately 4-10 words per bullet" %}</li>
</ul>
</div>
<div class="col col-6">
<label class="field-label ">{{ form.expected_learnings.label_tag }}</label>
{{ form.expected_learnings }}
</div>
</div>
<div class="field-title">{% trans "SUBJECT FIELD" %}</div>
<div class="row">
<div class="col col-6 help-text">
{% trans "Only one primary subject will appear on the About Page; please select one primary subject and a maximum of two additional subject areas for search." %}
</div>
<div class="col col-6">
<label class="field-label ">{{ form.primary_subject.label_tag }}</label>
{{ form.primary_subject }}
</div>
</div>
<div class="row">
<div class="col col-6 help-text">&nbsp;
</div>
<div class="col col-6">
<label class="field-label ">{{ form.secondary_subject.label_tag }}</label>
{{ form.secondary_subject }}
</div>
</div>
<div class="row">
<div class="col col-6 help-text">&nbsp;
</div>
<div class="col col-6">
<label class="field-label ">{{ form.tertiary_subject.label_tag }}</label>
{{ form.tertiary_subject }}
</div>
</div>
<div class="field-title">{% trans "COURSE IMAGE" %}</div>
<div class="row">
<div class="col col-6 help-text">
{% trans "Select an eye-catching, colorful image that captures the content and essence of your course" %}
<ul>
<li>{% trans "Do not include text or headlines" %}</li>
<li>{% trans "Choose an image that you have permission to use." %}
{% trans "This can be a stock photo (try Flickr creative commons, " %}
{% trans "Stock Vault, Stock XCHNG, iStock Photo) or an image custom designed for your course" %}
</li>
<li>{% trans "Sequenced courses should each have a unique image" %}</li>
<li>{% trans "Size: 2120 x 1192 pixels" %}</li>
</ul>
</div>
<div class="col col-6">
<label class="field-label ">{{ form.image.label_tag }}</label>
<div class="course-image-field">
{{ form.image }}
{{ form.image.errors }}
</div>
</div>
</div>
<div class="field-title">{% trans "PREREQUISITES" %}</div>
<div class="row">
<div class="col col-6 help-text">
<ul>
<li>{% trans "List concepts and level (basic, advanced, undergraduate, graduate) students should be familiar with" %}
</li>
<li>{% trans 'If there are no prerequisites, please list "None."' %}</li>
<li>{% trans "200 character limit, including spaces" %}</li>
</ul>
</div>
<div class="col col-6">
<label class="field-label ">{{ form.prerequisites.label_tag }}</label>
{{ form.prerequisites }}
<p>{% trans "200 character limit, including spaces." %}</p>
</div>
</div>
<div class="field-title">{% trans "SYLLABUS" %}</div>
<div class="row">
<div class="col col-6 help-text">
<ul>
<!-- Help text will go here when we have it.-->
</ul>
</div>
<div class="col col-6">
<label class="field-label ">{{ form.syllabus.label_tag }}</label>
{{ form.syllabus }}
</div>
</div>
<div class="field-title">{% trans "LEVEL TYPE" %}</div>
<div class="row">
<div class="col col-6 help-text">
<ul>
<li>{% trans "Introductory - No prerequisites; an individual with some to all of a secondary school degree could complete" %}
</li>
<li>
{% trans "Intermediate - Basic prerequisites; a secondary school degree likely required to be successful as well as some university" %}
</li>
<li>
{% trans "Advanced - Significant number of prerequisites required; course geared to 3rd or 4th year university student or a masters degree student" %}
</li>
</ul>
</div>
<div class="col col-6 help-text">
<label class="field-label ">{{ form.level_type.label_tag }}</label>
{{ form.level_type }}
</div>
</div>
</fieldset>
</div>
</div>
</div>
<div class="layout-full layout">
<div class="course-edit-actions">
<a class="btn-cancel" href="{% url 'publisher:publisher_course_detail' course.id %}">
{% trans "Cancel" %}
</a>
<button class="btn-brand btn-base btn-save" type="submit">{% trans "UPDATE COURSE" %}</button>
</div>
</div>
</form>
</div>
</div>
{% endblock %}
{% block extra_js %}
<script src="{% static 'js/publisher/publisher.js' %}"></script>
{% endblock %}
{% extends 'publisher/base.html' %}
{% load i18n %}
{% block title %}
{% trans "Course Form" %}
{% endblock title %}
{% block page_content %}
<div class="layout-full layout publisher-layout">
<div class="publisher-container">
<div class="course-information">
<h4 class="hd-4">{% trans "Course Form" %}</h4>
<form class="form" method="post" action="" enctype="multipart/form-data">
{% csrf_token %}
<fieldset class="form-group">
{% for field in form %}
{% include "publisher/form_field.html" %}
{% endfor %}
</fieldset>
<a class="btn-cancel" href="{% url 'publisher:publisher_course_detail' course.id %}">{% trans "Cancel" %}</a>
<button class="btn-brand btn-base btn-save" type="submit">{% trans "UPDATE COURSE" %}</button>
</form>
</div>
<div class="comment-container">
{% if object.id %}
<a href="{% url 'publisher:publisher_course_runs_new' object.id %}" class="btn btn-neutral btn-add">
{% trans "Add Course Run" %}
</a>
{% endif %}
{% include 'comments/comments_list.html' %}
{% include 'comments/add_auth_comments.html' %}
</div>
</div>
</div>
{% endblock %}
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