diff --git a/.gitignore b/.gitignore index f24bdb1bfc..3b7223108b 100644 --- a/.gitignore +++ b/.gitignore @@ -9,8 +9,6 @@ .AppleDouble database.sqlite courseware/static/js/mathjax/* -db.newaskbot -db.oldaskbot flushdb.sh build .coverage diff --git a/.gitmodules b/.gitmodules index 72ec77d0e2..e69de29bb2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +0,0 @@ -[submodule "askbot"] - path = askbot - url = git@github.com:MITx/askbot-devel.git diff --git a/.hgignore b/.hgignore deleted file mode 100644 index 67ea339cd8..0000000000 --- a/.hgignore +++ /dev/null @@ -1,12 +0,0 @@ -syntax: glob -*.pyc -*~ -*.scssc -*.swp -*.orig -*.DS_Store -database.sqlite -courseware/static/js/mathjax/* -db.newaskbot -db.oldaskbot -flushdb.sh diff --git a/askbot b/askbot deleted file mode 160000 index e56ae38084..0000000000 --- a/askbot +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e56ae380846f7c6cdaeacfc58880fab103540491 diff --git a/common/djangoapps/student/migrations/0021_remove_askbot.py b/common/djangoapps/student/migrations/0021_remove_askbot.py new file mode 100644 index 0000000000..89f7208f40 --- /dev/null +++ b/common/djangoapps/student/migrations/0021_remove_askbot.py @@ -0,0 +1,157 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +ASKBOT_AUTH_USER_COLUMNS = ( + 'website', + 'about', + 'gold', + 'email_isvalid', + 'real_name', + 'location', + 'reputation', + 'gravatar', + 'bronze', + 'last_seen', + 'silver', + 'questions_per_page', + 'new_response_count', + 'seen_response_count', +) + + +class Migration(SchemaMigration): + + def forwards(self, orm): + "Kill the askbot" + # For MySQL, we're batching the alters together for performance reasons + if db.backend_name == 'mysql': + drops = ["drop `{0}`".format(col) for col in ASKBOT_AUTH_USER_COLUMNS] + statement = "alter table `auth_user` {0};".format(", ".join(drops)) + db.execute(statement) + else: + for column in ASKBOT_AUTH_USER_COLUMNS: + db.delete_column('auth_user', column) + + def backwards(self, orm): + raise RuntimeError("Cannot reverse this migration: there's no going back to Askbot.") + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'student.courseenrollment': { + 'Meta': {'unique_together': "(('user', 'course_id'),)", 'object_name': 'CourseEnrollment'}, + 'course_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'db_index': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + }, + 'student.pendingemailchange': { + 'Meta': {'object_name': 'PendingEmailChange'}, + 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'new_email': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}) + }, + 'student.pendingnamechange': { + 'Meta': {'object_name': 'PendingNameChange'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'new_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'rationale': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}) + }, + 'student.registration': { + 'Meta': {'object_name': 'Registration', 'db_table': "'auth_registration'"}, + 'activation_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'}) + }, + 'student.testcenteruser': { + 'Meta': {'object_name': 'TestCenterUser'}, + 'address_1': ('django.db.models.fields.CharField', [], {'max_length': '40'}), + 'address_2': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}), + 'address_3': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}), + 'candidate_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'db_index': 'True'}), + 'city': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}), + 'client_candidate_id': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}), + 'company_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'country': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}), + 'extension': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '8', 'blank': 'True'}), + 'fax': ('django.db.models.fields.CharField', [], {'max_length': '35', 'blank': 'True'}), + 'fax_country_code': ('django.db.models.fields.CharField', [], {'max_length': '3', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}), + 'middle_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'phone': ('django.db.models.fields.CharField', [], {'max_length': '35'}), + 'phone_country_code': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'}), + 'postal_code': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '16', 'blank': 'True'}), + 'salutation': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'state': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '20', 'blank': 'True'}), + 'suffix': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['auth.User']", 'unique': 'True'}), + 'user_updated_at': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}) + }, + 'student.userprofile': { + 'Meta': {'object_name': 'UserProfile', 'db_table': "'auth_userprofile'"}, + 'courseware': ('django.db.models.fields.CharField', [], {'default': "'course.xml'", 'max_length': '255', 'blank': 'True'}), + 'gender': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}), + 'goals': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}), + 'level_of_education': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '6', 'null': 'True', 'blank': 'True'}), + 'location': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}), + 'mailing_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'meta': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}), + 'year_of_birth': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}) + }, + 'student.usertestgroup': { + 'Meta': {'object_name': 'UserTestGroup'}, + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}), + 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'db_index': 'True', 'symmetrical': 'False'}) + } + } + + complete_apps = ['student'] diff --git a/common/djangoapps/student/models.py b/common/djangoapps/student/models.py index 61c2537399..5975853a21 100644 --- a/common/djangoapps/student/models.py +++ b/common/djangoapps/student/models.py @@ -3,6 +3,8 @@ Models for Student Information Replication Notes +TODO: Update this to be consistent with reality (no portal servers, no more askbot) + In our live deployment, we intend to run in a scenario where there is a pool of Portal servers that hold the canoncial user information and that user information is replicated to slave Course server pools. Each Course has a set of @@ -34,10 +36,12 @@ file and check it in at the same time as your model changes. To do that, 3. Add the migration file created in mitx/common/djangoapps/student/migrations/ """ from datetime import datetime +from hashlib import sha1 import json import logging import uuid + from django.conf import settings from django.contrib.auth.models import User from django.db import models @@ -123,9 +127,9 @@ class UserProfile(models.Model): self.meta = json.dumps(js) class TestCenterUser(models.Model): - """This is our representation of the User for in-person testing, and + """This is our representation of the User for in-person testing, and specifically for Pearson at this point. A few things to note: - + * Pearson only supports Latin-1, so we have to make sure that the data we capture here will work with that encoding. * While we have a lot of this demographic data in UserProfile, it's much @@ -133,9 +137,9 @@ class TestCenterUser(models.Model): UserProfile, but we'll need to have a step where people who are signing up re-enter their demographic data into the fields we specify. * Users are only created here if they register to take an exam in person. - + The field names and lengths are modeled on the conventions and constraints - of Pearson's data import system, including oddities such as suffix having + of Pearson's data import system, including oddities such as suffix having a limit of 255 while last_name only gets 50. """ # Our own record keeping... @@ -146,21 +150,21 @@ class TestCenterUser(models.Model): # and is something Pearson needs to know to manage updates. Unlike # updated_at, this will not get incremented when we do a batch data import. user_updated_at = models.DateTimeField(db_index=True) - + # Unique ID given to us for this User by the Testing Center. It's null when # we first create the User entry, and is assigned by Pearson later. candidate_id = models.IntegerField(null=True, db_index=True) - + # Unique ID we assign our user for a the Test Center. client_candidate_id = models.CharField(max_length=50, db_index=True) - + # Name first_name = models.CharField(max_length=30, db_index=True) last_name = models.CharField(max_length=50, db_index=True) middle_name = models.CharField(max_length=30, blank=True) suffix = models.CharField(max_length=255, blank=True) salutation = models.CharField(max_length=50, blank=True) - + # Address address_1 = models.CharField(max_length=40) address_2 = models.CharField(max_length=40, blank=True) @@ -173,7 +177,7 @@ class TestCenterUser(models.Model): postal_code = models.CharField(max_length=16, blank=True, db_index=True) # country is a ISO 3166-1 alpha-3 country code (e.g. "USA", "CAN", "MNG") country = models.CharField(max_length=3, db_index=True) - + # Phone phone = models.CharField(max_length=35) extension = models.CharField(max_length=8, blank=True, db_index=True) @@ -181,14 +185,28 @@ class TestCenterUser(models.Model): fax = models.CharField(max_length=35, blank=True) # fax_country_code required *if* fax is present. fax_country_code = models.CharField(max_length=3, blank=True) - + # Company company_name = models.CharField(max_length=50, blank=True) - + @property def email(self): return self.user.email +def unique_id_for_user(user): + """ + Return a unique id for a user, suitable for inserting into + e.g. personalized survey links. + + Currently happens to be implemented as a sha1 hash of the username + (and thus assumes that usernames don't change). + """ + # Using the user id as the salt because it's sort of random, and is already + # in the db. + salt = str(user.id) + return sha1(salt + user.username).hexdigest() + + ## TODO: Should be renamed to generic UserGroup, and possibly # Given an optional field for type of group class UserTestGroup(models.Model): @@ -361,10 +379,10 @@ def replicate_user_save(sender, **kwargs): # @receiver(post_save, sender=CourseEnrollment) def replicate_enrollment_save(sender, **kwargs): - """This is called when a Student enrolls in a course. It has to do the + """This is called when a Student enrolls in a course. It has to do the following: - 1. Make sure the User is copied into the Course DB. It may already exist + 1. Make sure the User is copied into the Course DB. It may already exist (someone deleting and re-adding a course). This has to happen first or the foreign key constraint breaks. 2. Replicate the CourseEnrollment. @@ -408,9 +426,9 @@ USER_FIELDS_TO_COPY = ["id", "username", "first_name", "last_name", "email", def replicate_user(portal_user, course_db_name): """Replicate a User to the correct Course DB. This is more complicated than - it should be because Askbot extends the auth_user table and adds its own + it should be because Askbot extends the auth_user table and adds its own fields. So we need to only push changes to the standard fields and leave - the rest alone so that Askbot changes at the Course DB level don't get + the rest alone so that Askbot changes at the Course DB level don't get overridden. """ try: @@ -455,7 +473,7 @@ def is_valid_course_id(course_id): """Right now, the only database that's not a course database is 'default'. I had nicer checking in here originally -- it would scan the courses that were in the system and only let you choose that. But it was annoying to run - tests with, since we don't have course data for some for our course test + tests with, since we don't have course data for some for our course test databases. Hence the lazy version. """ return course_id != 'default' diff --git a/common/djangoapps/student/tests.py b/common/djangoapps/student/tests.py index cde95153fd..4c7c9e2592 100644 --- a/common/djangoapps/student/tests.py +++ b/common/djangoapps/student/tests.py @@ -6,11 +6,16 @@ Replace this with more appropriate tests for your application. """ import logging from datetime import datetime +from hashlib import sha1 from django.test import TestCase +from mock import patch, Mock from nose.plugins.skip import SkipTest -from .models import User, UserProfile, CourseEnrollment, replicate_user, USER_FIELDS_TO_COPY +from .models import (User, UserProfile, CourseEnrollment, + replicate_user, USER_FIELDS_TO_COPY, + unique_id_for_user) +from .views import process_survey_link, _cert_info COURSE_1 = 'edX/toy/2012_Fall' COURSE_2 = 'edx/full/6.002_Spring_2012' @@ -55,7 +60,7 @@ class ReplicationTest(TestCase): # This hasattr lameness is here because we don't want this test to be # triggered when we're being run by CMS tests (Askbot doesn't exist # there, so the test will fail). - # + # # seen_response_count isn't a field we care about, so it shouldn't have # been copied over. if hasattr(portal_user, 'seen_response_count'): @@ -74,7 +79,7 @@ class ReplicationTest(TestCase): # During this entire time, the user data should never have made it over # to COURSE_2 - self.assertRaises(User.DoesNotExist, + self.assertRaises(User.DoesNotExist, User.objects.using(COURSE_2).get, id=portal_user.id) @@ -108,19 +113,19 @@ class ReplicationTest(TestCase): # Grab all the copies we expect course_user = User.objects.using(COURSE_1).get(id=portal_user.id) self.assertEquals(portal_user, course_user) - self.assertRaises(User.DoesNotExist, + self.assertRaises(User.DoesNotExist, User.objects.using(COURSE_2).get, id=portal_user.id) course_enrollment = CourseEnrollment.objects.using(COURSE_1).get(id=portal_enrollment.id) self.assertEquals(portal_enrollment, course_enrollment) - self.assertRaises(CourseEnrollment.DoesNotExist, + self.assertRaises(CourseEnrollment.DoesNotExist, CourseEnrollment.objects.using(COURSE_2).get, id=portal_enrollment.id) course_user_profile = UserProfile.objects.using(COURSE_1).get(id=portal_user_profile.id) self.assertEquals(portal_user_profile, course_user_profile) - self.assertRaises(UserProfile.DoesNotExist, + self.assertRaises(UserProfile.DoesNotExist, UserProfile.objects.using(COURSE_2).get, id=portal_user_profile.id) @@ -174,30 +179,112 @@ class ReplicationTest(TestCase): portal_user.save() portal_user_profile.gender = 'm' portal_user_profile.save() - - # Grab all the copies we expect, and make sure it doesn't end up in + + # Grab all the copies we expect, and make sure it doesn't end up in # places we don't expect. course_user = User.objects.using(COURSE_1).get(id=portal_user.id) self.assertEquals(portal_user, course_user) - self.assertRaises(User.DoesNotExist, + self.assertRaises(User.DoesNotExist, User.objects.using(COURSE_2).get, id=portal_user.id) course_enrollment = CourseEnrollment.objects.using(COURSE_1).get(id=portal_enrollment.id) self.assertEquals(portal_enrollment, course_enrollment) - self.assertRaises(CourseEnrollment.DoesNotExist, + self.assertRaises(CourseEnrollment.DoesNotExist, CourseEnrollment.objects.using(COURSE_2).get, id=portal_enrollment.id) course_user_profile = UserProfile.objects.using(COURSE_1).get(id=portal_user_profile.id) self.assertEquals(portal_user_profile, course_user_profile) - self.assertRaises(UserProfile.DoesNotExist, + self.assertRaises(UserProfile.DoesNotExist, UserProfile.objects.using(COURSE_2).get, id=portal_user_profile.id) +class CourseEndingTest(TestCase): + """Test things related to course endings: certificates, surveys, etc""" + def test_process_survey_link(self): + username = "fred" + user = Mock(username=username) + id = unique_id_for_user(user) + link1 = "http://www.mysurvey.com" + self.assertEqual(process_survey_link(link1, user), link1) + link2 = "http://www.mysurvey.com?unique={UNIQUE_ID}" + link2_expected = "http://www.mysurvey.com?unique={UNIQUE_ID}".format(UNIQUE_ID=id) + self.assertEqual(process_survey_link(link2, user), link2_expected) + def test_cert_info(self): + user = Mock(username="fred") + survey_url = "http://a_survey.com" + course = Mock(end_of_course_survey_url=survey_url) + self.assertEqual(_cert_info(user, course, None), + {'status': 'processing', + 'show_disabled_download_button': False, + 'show_download_url': False, + 'show_survey_button': False,}) + cert_status = {'status': 'unavailable'} + self.assertEqual(_cert_info(user, course, cert_status), + {'status': 'processing', + 'show_disabled_download_button': False, + 'show_download_url': False, + 'show_survey_button': False}) + + cert_status = {'status': 'generating', 'grade': '67'} + self.assertEqual(_cert_info(user, course, cert_status), + {'status': 'generating', + 'show_disabled_download_button': True, + 'show_download_url': False, + 'show_survey_button': True, + 'survey_url': survey_url, + 'grade': '67' + }) + + cert_status = {'status': 'regenerating', 'grade': '67'} + self.assertEqual(_cert_info(user, course, cert_status), + {'status': 'generating', + 'show_disabled_download_button': True, + 'show_download_url': False, + 'show_survey_button': True, + 'survey_url': survey_url, + 'grade': '67' + }) + + download_url = 'http://s3.edx/cert' + cert_status = {'status': 'downloadable', 'grade': '67', + 'download_url': download_url} + self.assertEqual(_cert_info(user, course, cert_status), + {'status': 'ready', + 'show_disabled_download_button': False, + 'show_download_url': True, + 'download_url': download_url, + 'show_survey_button': True, + 'survey_url': survey_url, + 'grade': '67' + }) + + cert_status = {'status': 'notpassing', 'grade': '67', + 'download_url': download_url} + self.assertEqual(_cert_info(user, course, cert_status), + {'status': 'notpassing', + 'show_disabled_download_button': False, + 'show_download_url': False, + 'show_survey_button': True, + 'survey_url': survey_url, + 'grade': '67' + }) + + # Test a course that doesn't have a survey specified + course2 = Mock(end_of_course_survey_url=None) + cert_status = {'status': 'notpassing', 'grade': '67', + 'download_url': download_url} + self.assertEqual(_cert_info(user, course2, cert_status), + {'status': 'notpassing', + 'show_disabled_download_button': False, + 'show_download_url': False, + 'show_survey_button': False, + 'grade': '67' + }) diff --git a/common/djangoapps/student/views.py b/common/djangoapps/student/views.py index 78ade4152c..44877ef597 100644 --- a/common/djangoapps/student/views.py +++ b/common/djangoapps/student/views.py @@ -28,7 +28,7 @@ from django.core.cache import cache from django_future.csrf import ensure_csrf_cookie, csrf_exempt from student.models import (Registration, UserProfile, PendingNameChange, PendingEmailChange, - CourseEnrollment) + CourseEnrollment, unique_id_for_user) from certificates.models import CertificateStatuses, certificate_status_for_student @@ -39,6 +39,7 @@ from xmodule.modulestore.exceptions import ItemNotFoundError from datetime import date from collections import namedtuple + from courseware.courses import get_courses_by_university from courseware.access import has_access @@ -68,20 +69,6 @@ def index(request, extra_context={}, user=None): extra_context is used to allow immediate display of certain modal windows, eg signup, as used by external_auth. ''' - feed_data = cache.get("students_index_rss_feed_data") - if feed_data == None: - if hasattr(settings, 'RSS_URL'): - feed_data = urllib.urlopen(settings.RSS_URL).read() - else: - feed_data = render_to_string("feed.rss", None) - cache.set("students_index_rss_feed_data", feed_data, settings.RSS_TIMEOUT) - - feed = feedparser.parse(feed_data) - entries = feed['entries'][0:3] - for entry in entries: - soup = BeautifulSoup(entry.description) - entry.image = soup.img['src'] if soup.img else None - entry.summary = soup.getText() # The course selection work is done in courseware.courses. domain = settings.MITX_FEATURES.get('FORCE_UNIVERSITY_DOMAIN') # normally False @@ -89,7 +76,11 @@ def index(request, extra_context={}, user=None): domain = request.META.get('HTTP_HOST') universities = get_courses_by_university(None, domain=domain) - context = {'universities': universities, 'entries': entries} + + # Get the 3 most recent news + top_news = _get_news(top=3) + + context = {'universities': universities, 'news': top_news} context.update(extra_context) return render_to_response('index.html', context) @@ -98,6 +89,19 @@ def course_from_id(course_id): course_loc = CourseDescriptor.id_to_location(course_id) return modulestore().get_instance(course_id, course_loc) +import re +day_pattern = re.compile('\s\d+,\s') +multimonth_pattern = re.compile('\s?\-\s?\S+\s') + +def get_date_for_press(publish_date): + import datetime + # strip off extra months, and just use the first: + date = re.sub(multimonth_pattern, ", ", publish_date) + if re.search(day_pattern, date): + date = datetime.datetime.strptime(date, "%B %d, %Y") + else: + date = datetime.datetime.strptime(date, "%B, %Y") + return date def press(request): json_articles = cache.get("student_press_json_articles") @@ -110,9 +114,91 @@ def press(request): json_articles = json.loads(content) cache.set("student_press_json_articles", json_articles) articles = [Article(**article) for article in json_articles] + articles.sort(key=lambda item: get_date_for_press(item.publish_date), reverse=True) return render_to_response('static_templates/press.html', {'articles': articles}) +def process_survey_link(survey_link, user): + """ + If {UNIQUE_ID} appears in the link, replace it with a unique id for the user. + Currently, this is sha1(user.username). Otherwise, return survey_link. + """ + return survey_link.format(UNIQUE_ID=unique_id_for_user(user)) + + +def cert_info(user, course): + """ + Get the certificate info needed to render the dashboard section for the given + student and course. Returns a dictionary with keys: + + 'status': one of 'generating', 'ready', 'notpassing', 'processing' + 'show_download_url': bool + 'download_url': url, only present if show_download_url is True + 'show_disabled_download_button': bool -- true if state is 'generating' + 'show_survey_button': bool + 'survey_url': url, only if show_survey_button is True + 'grade': if status is not 'processing' + """ + if not course.has_ended(): + return {} + + return _cert_info(user, course, certificate_status_for_student(user, course.id)) + +def _cert_info(user, course, cert_status): + """ + Implements the logic for cert_info -- split out for testing. + """ + default_status = 'processing' + + default_info = {'status': default_status, + 'show_disabled_download_button': False, + 'show_download_url': False, + 'show_survey_button': False} + + if cert_status is None: + return default_info + + # simplify the status for the template using this lookup table + template_state = { + CertificateStatuses.generating: 'generating', + CertificateStatuses.regenerating: 'generating', + CertificateStatuses.downloadable: 'ready', + CertificateStatuses.notpassing: 'notpassing', + } + + status = template_state.get(cert_status['status'], default_status) + + d = {'status': status, + 'show_download_url': status == 'ready', + 'show_disabled_download_button': status == 'generating',} + + if (status in ('generating', 'ready', 'notpassing') and + course.end_of_course_survey_url is not None): + d.update({ + 'show_survey_button': True, + 'survey_url': process_survey_link(course.end_of_course_survey_url, user)}) + else: + d['show_survey_button'] = False + + if status == 'ready': + if 'download_url' not in cert_status: + log.warning("User %s has a downloadable cert for %s, but no download url", + user.username, course.id) + return default_info + else: + d['download_url'] = cert_status['download_url'] + + if status in ('generating', 'ready', 'notpassing'): + if 'grade' not in cert_status: + # Note: as of 11/20/2012, we know there are students in this state-- cs169.1x, + # who need to be regraded (we weren't tracking 'notpassing' at first). + # We can add a log.warning here once we think it shouldn't happen. + return default_info + else: + d['grade'] = cert_status['grade'] + + return d + @login_required @ensure_csrf_cookie def dashboard(request): @@ -146,12 +232,10 @@ def dashboard(request): show_courseware_links_for = frozenset(course.id for course in courses if has_access(request.user, course, 'load')) - # TODO: workaround to not have to zip courses and certificates in the template - # since before there is a migration to certificates - if settings.MITX_FEATURES.get('CERTIFICATES_ENABLED'): - cert_statuses = { course.id: certificate_status_for_student(request.user, course.id) for course in courses} - else: - cert_statuses = {} + cert_statuses = { course.id: cert_info(request.user, course) for course in courses} + + # Get the 3 most recent news + top_news = _get_news(top=3) context = {'courses': courses, 'message': message, @@ -159,6 +243,7 @@ def dashboard(request): 'errored_courses': errored_courses, 'show_courseware_links_for' : show_courseware_links_for, 'cert_statuses': cert_statuses, + 'news': top_news, } return render_to_response('dashboard.html', context) @@ -806,3 +891,24 @@ def test_center_login(request): return redirect('/courses/MITx/6.002x/2012_Fall/courseware/Final_Exam/Final_Exam_Fall_2012/') else: return HttpResponseForbidden() + + +def _get_news(top=None): + "Return the n top news items on settings.RSS_URL" + + feed_data = cache.get("students_index_rss_feed_data") + if feed_data == None: + if hasattr(settings, 'RSS_URL'): + feed_data = urllib.urlopen(settings.RSS_URL).read() + else: + feed_data = render_to_string("feed.rss", None) + cache.set("students_index_rss_feed_data", feed_data, settings.RSS_TIMEOUT) + + feed = feedparser.parse(feed_data) + entries = feed['entries'][0:top] # all entries if top is None + for entry in entries: + soup = BeautifulSoup(entry.description) + entry.image = soup.img['src'] if soup.img else None + entry.summary = soup.getText() + + return entries diff --git a/common/lib/xmodule/xmodule/x_module.py b/common/lib/xmodule/xmodule/x_module.py index dd0df2125a..2b2e709bcb 100644 --- a/common/lib/xmodule/xmodule/x_module.py +++ b/common/lib/xmodule/xmodule/x_module.py @@ -388,7 +388,7 @@ class XModuleDescriptor(Plugin, HTMLSnippet, ResourceTemplates): entry_point = "xmodule.v1" module_class = XModule - # Attributes for inpsection of the descriptor + # Attributes for inspection of the descriptor stores_state = False # Indicates whether the xmodule state should be # stored in a database (independent of shared state) has_score = False # This indicates whether the xmodule is a problem-type. diff --git a/common/test/data/full/problem/choiceresponse_demo.xml b/common/test/data/full/problem/choiceresponse_demo.xml new file mode 100644 index 0000000000..f7d1fcf16c --- /dev/null +++ b/common/test/data/full/problem/choiceresponse_demo.xml @@ -0,0 +1,37 @@ + + + +

Consider a hypothetical magnetic field pointing out of your computer screen. Now imagine an electron traveling from right to leftin the plane of your screen. A diagram of this situation is show below.

+
+ +

a. The magnitude of the force experienced by the electron is proportional the product of which of the following? (Select all that apply.)

+ + + +Magnetic field strength +Electric field strength +Electric charge of the electron +Radius of the electron +Mass of the electron +Velocity of the electron + + + + + +

b. The direction of the force experienced by the electron is _______.

+ + + +up, in the plane of the screen. +down, in the plane of the screen. +into the plane of the screen. +out of the plane of the screen. +towards the right, in the plane of the screen. +towards the left, in the plane of the screen. + + + + + +
diff --git a/common/test/data/full/problem/codeinput_demo.xml b/common/test/data/full/problem/codeinput_demo.xml new file mode 100644 index 0000000000..03d8fd8c31 --- /dev/null +++ b/common/test/data/full/problem/codeinput_demo.xml @@ -0,0 +1,205 @@ + + + +

+ Part 1: Function Types +

+

+For each of the following functions, specify the type of its output. You can assume each function is called with an appropriate argument, as specified by its docstring.

+

+If the output can be either an int or a float, select num, which isn't a real Python type, but which we'll use to indicate that either basic numeric type is legal.

+

+In fact, in Python, booleans True and False can be operated on as if they were the integers 1 and 0; but it is ugly and confusing to take advantage of this fact, and we will resolutely pretend that it isn't true.

+

+

+
+
+ What are those lines under the function definitions? +
+
+

+In this and future problems, you'll see function definitions that look like this:

+
+def a(x):
+   '''
+   x: int or float.
+   '''
+   return x + 1
+
+

+What are those three lines between def a(x): and return x + 1? These lines are called the docstring of the function. A docstring is a special type of comment that is used to document what your function is doing. Typically, docstrings will explain what the function expects the type(s) of the argument(s) to be, and what the function is returning.

+

+In Python, docstrings appear immediately after the def line of a function, before the body. Docstrings start and end with triple quotes - this can be triple single quotes or triple double quotes, it doesn't matter as long as they match. To sum up this general form:

+
+def myFunction(argument):
+   """
+   Docstring goes here. Explain what type argument(s) should have, and what your function
+   is going to return.
+   """
+   < Code for your function (the body of the function) goes here >
+
+

+As you begin coding your own functions, we strongly encourage you to document all your functions by using properly-formatted docstrings!

+
+
+
+

+
    +
  1. +
    +def a(x):
    +   '''
    +   x: int or float.
    +   '''
    +   return x + 1
    + 
    +

    + Indicate the type of the output that the function a will yield.

    +
  2. +
  3. +
    +def b(x):
    +   '''
    +   x: int or float.
    +   '''
    +   return x + 1.0
    + 
    +

    + Indicate the type of the output that the function b will yield.

    +
  4. +
  5. +
    +def c(x, y):
    +   '''
    +   x: int or float. 
    +   y: int or float.
    +   '''
    +   return x + y
    + 
    +

    + Indicate the type of the output that the function c will yield.

    +
  6. +
  7. +
    +def d(x, y):
    +   '''
    +   x: Can be of any type.
    +   y: Can be of any type.
    +   '''
    +   return x > y
    + 
    +

    + Indicate the type of the output that the function d will yield.

    +
  8. +
  9. +
    +def e(x, y, z):
    +   '''
    +   x: Can be of any type.
    +   y: Can be of any type.
    +   z: Can be of any type.
    +   '''
    +   return x >= y and x <= z
    + 
    +

    + Indicate the type of the output that the function e will yield.

    +
  10. +
  11. +
    +def f(x, y):
    +   '''
    +   x: int or float.
    +   y: int or float
    +   '''
    +   x + y - 2
    + 
    +

    + Indicate the type of the output that the function f will yield.

    +
  12. +
+

+ Part 2: Transcript +

+

+Below is a transcript of a session with the Python shell. Assume the functions from Part 1 (above) have been defined. Provide the type and value of the expressions being evaluated. If evaluating an expression would cause an error, select NoneType and write 'error' in the box. If the value of an expression is a function, select function as the type and write 'function' in the box.

+
    +
  1. +

    + a(6) + + + + + + +

    +
  2. +
  3. +

    + a(-5.3) + + + + + + +

    +
  4. +
  5. +

    + a(a(a(6))) + + + + + + +

    +
  6. +
  7. +

    + c(a(1), b(1)) + + + + + + +

    +
  8. +
  9. +

    + d('apple', 11.1) + + + + + + +

    +
  10. +
  11. +

    + e(a(3), b(4), c(3, 4)) + + + + + + +

    +
  12. +
  13. +

    + f + + + + + + +

    +
  14. +
+
+
diff --git a/common/test/data/full/problem/multiplechoicelresponse_demo.xml b/common/test/data/full/problem/multiplechoicelresponse_demo.xml new file mode 100644 index 0000000000..b3e89a39e3 --- /dev/null +++ b/common/test/data/full/problem/multiplechoicelresponse_demo.xml @@ -0,0 +1,17 @@ + + +

Suppose you were to pass a hydroge ion (H+) through an electric field and measure the deflection of the ion. How would its deflection compare to the deflection of an electron passed through the same electric field?

+ + + + + + The ion would deflect identically as both species have the same charge. + The ion would deflect by an amount identical in magnitude but opposite in direction because the charges are of opposite sign but equal in magnitude. + The deflection will be in the same direction but smaller in magnitude due to the larger mass of the ion. + The deflection will be smaller in magnitude due to the increased mass of the ion, as well as in the opposite direction due to the opposite sign of the charge. + + + + +
\ No newline at end of file diff --git a/common/test/data/full/problem/numericalresponse_demo.xml b/common/test/data/full/problem/numericalresponse_demo.xml new file mode 100644 index 0000000000..629b56edfd --- /dev/null +++ b/common/test/data/full/problem/numericalresponse_demo.xml @@ -0,0 +1,31 @@ + + + +

Gaseous hydrogen can be reacted with gaseous oxygen in the presence of a flame to produce water vapor according to the following reaction:

+ [mathjax] \text{ a } \text{H}_{2 } + \text{ b }\text{O}_{2 } = \text{ c }\text{H}_{2 }\text{O }[/mathjax] +

Balance the equation i.e., specify the values of a, b, and c. Use the lowest whole number coefficients.

+ +

a =

+ + + + + + +

b = + + + +

+ +

c = + + + +

+ + +
+
+ + diff --git a/common/test/data/full/problem/test_files/chemicalformularesponse.xml b/common/test/data/full/problem/test_files/chemicalformularesponse.xml new file mode 100644 index 0000000000..28591013f5 --- /dev/null +++ b/common/test/data/full/problem/test_files/chemicalformularesponse.xml @@ -0,0 +1,64 @@ + + +

Metallothermic production of zirconium (Zr) would involve the reaction of sodium (Na) with zirconium tetrachloride (ZrCl4).

+ +

(a) Write a balanced chemical equation.

+ + + + + + + +if chemcalc.chemical_equations_equal(submission[0], 'ZrCl4 + 4 Na -> 4 NaCl + Zr'): + correct = ['correct'] +else: + correct = ['incorrect'] + + + + +

(b) Write the balanced chemical equation using lowest whole numbers.

+ + + + + + + +if chemcalc.chemical_equations_equal(submission[0], 'ZrCl4 + 4 Na -> 4 NaCl + Zr', exact=True): + correct = ['correct'] +else: + correct = ['incorrect'] + + + + + + +

(c) Calculate the amount of zirconium produced (in kg) if a reactor were charged with 111 kg [mathjaxinline]\text{ZrCl}_4[/mathjaxinline] and 11.1 kg [mathjaxinline]\text{Na}[/mathjaxinline]. + + + +

+
+ +

SOLUTION:

+

(b)[mathjax] \text{ZrCl}_{4 } + \mathbf{4 }\text{Na} = \mathbf{4 }\text{NaCl } + \mathbf{1 } \text{Zr} [/mathjax]

+

(c)

+

[mathjaxinline]111\text{kg ZrCl}_4 = 111000/[91.22 + (4 \times 35.45)] = 476 \text{ moles ZrCl}_4[/mathjaxinline]

+

[mathjaxinline]11.1\text{ kg Na} = 11100/22.99 = 483\text{ moles C}[/mathjaxinline]

+

stoichiometry of reaction further dictates that on a molar basis there needs to be 4 x amount of [mathjaxinline]\text{Na}[/mathjaxinline] as there is [mathjaxinline]\text{ZrCl}_4[/mathjaxinline], but calculations show there to be a shortfall of [mathjaxinline]\text{Na}[/mathjaxinline]

+

[mathjaxinline]\therefore[/mathjaxinline] reaction yield is contrained by [mathjaxinline]\text{Na}[/mathjaxinline] present

+

stoichiometry of reaction further dictates that if [mathjaxinline]\text{Na}[/mathjaxinline] controls the yield, then the amount of [mathjaxinline]\text{Zr}[/mathjaxinline] produced = 1/4 x molar quantity of [mathjaxinline]\text{Na}[/mathjaxinline] = 1/4 x 483 moles = 121

+ [mathjaxinline]121 \text{ moles Zr} \times 91.22\text{ g / mol } \mathbf{= 11.0 \text{ kg Zr} }[/mathjaxinline]
+
+
+
+ + diff --git a/common/test/data/full/problem/test_files/choiceresponse_checkbox.xml b/common/test/data/full/problem/test_files/choiceresponse_checkbox.xml new file mode 100644 index 0000000000..c087266d04 --- /dev/null +++ b/common/test/data/full/problem/test_files/choiceresponse_checkbox.xml @@ -0,0 +1,59 @@ + + + + + This is foil One. + + + This is foil Two. + + + This is foil Three. + + + This is foil Four. + + + This is foil Five. + + + + + + + This is foil One. + + + This is foil Two. + + + This is foil Three. + + + This is foil Four. + + + This is foil Five. + + + + + + + This is foil One. + + + This is foil Two. + + + This is foil Three. + + + This is foil Four. + + + This is foil Five. + + + + diff --git a/common/test/data/full/problem/test_files/choiceresponse_radio.xml b/common/test/data/full/problem/test_files/choiceresponse_radio.xml new file mode 100644 index 0000000000..a85d663b2b --- /dev/null +++ b/common/test/data/full/problem/test_files/choiceresponse_radio.xml @@ -0,0 +1,40 @@ + + + + + This is foil One. + + + This is foil Two. + + + This is foil Three. + + + This is foil Four. + + + This is foil Five. + + + + + + + This is foil One. + + + This is foil Two. + + + This is foil Three. + + + This is foil Four. + + + This is foil Five. + + + + diff --git a/common/test/data/full/problem/test_files/coderesponse.xml b/common/test/data/full/problem/test_files/coderesponse.xml new file mode 100644 index 0000000000..1c0bf8d4e6 --- /dev/null +++ b/common/test/data/full/problem/test_files/coderesponse.xml @@ -0,0 +1,33 @@ + + +

Code response

+ +

+

+ + +Write a program to compute the square of a number + + + + def square(x): + answer + grader stuff + + + + + +Write a program to compute the square of a number + + + + def square(x): + answer + grader stuff + + + + +
+
diff --git a/common/test/data/full/problem/test_files/coderesponse_externalresponseformat.xml b/common/test/data/full/problem/test_files/coderesponse_externalresponseformat.xml new file mode 100644 index 0000000000..42b6e0a54a --- /dev/null +++ b/common/test/data/full/problem/test_files/coderesponse_externalresponseformat.xml @@ -0,0 +1,101 @@ + + +

Code response

+ +

+

+ + +Write a program to compute the square of a number + + + + + + + + +Write a program to compute the cube of a number + + + + + + + +
+
diff --git a/common/test/data/full/problem/test_files/formularesponse_with_hint.xml b/common/test/data/full/problem/test_files/formularesponse_with_hint.xml new file mode 100644 index 0000000000..90248dcf04 --- /dev/null +++ b/common/test/data/full/problem/test_files/formularesponse_with_hint.xml @@ -0,0 +1,45 @@ + + + + +

Hints can be provided to students, based on the last response given, as well as the history of responses given. Here is an example of a hint produced by a Formula Response problem.

+ +

+What is the equation of the line which passess through ($x1,$y1) and +($x2,$y2)?

+ +

The correct answer is $answer. A common error is to invert the equation for the slope. Enter +$wrongans to see a hint.

+ +
+ + + + y = + + + + + You have inverted the slope in the question. + + + +
+ diff --git a/common/test/data/full/problem/test_files/imageresponse.xml b/common/test/data/full/problem/test_files/imageresponse.xml new file mode 100644 index 0000000000..34dba37e3b --- /dev/null +++ b/common/test/data/full/problem/test_files/imageresponse.xml @@ -0,0 +1,21 @@ + +

+Two skiers are on frictionless black diamond ski slopes. +Hello

+ + + +Click on the image where the top skier will stop momentarily if the top skier starts from rest. + +Click on the image where the lower skier will stop momentarily if the lower skier starts from rest. + +Click on either of the two positions as discussed previously. + +Click on either of the two positions as discussed previously. + +Click on either of the two positions as discussed previously. + +

Use conservation of energy.

+
+
+
diff --git a/common/test/data/full/problem/test_files/javascriptresponse.xml b/common/test/data/full/problem/test_files/javascriptresponse.xml new file mode 100644 index 0000000000..439866e62c --- /dev/null +++ b/common/test/data/full/problem/test_files/javascriptresponse.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/common/test/data/full/problem/test_files/multi_bare.xml b/common/test/data/full/problem/test_files/multi_bare.xml new file mode 100644 index 0000000000..20bc8f853d --- /dev/null +++ b/common/test/data/full/problem/test_files/multi_bare.xml @@ -0,0 +1,21 @@ + + + + + This is foil One. + + + This is foil Two. + + + This is foil Three. + + + This is foil Four. + + + This is foil Five. + + + + diff --git a/common/test/data/full/problem/test_files/multichoice.xml b/common/test/data/full/problem/test_files/multichoice.xml new file mode 100644 index 0000000000..60bf02ec59 --- /dev/null +++ b/common/test/data/full/problem/test_files/multichoice.xml @@ -0,0 +1,21 @@ + + + + + This is foil One. + + + This is foil Two. + + + This is foil Three. + + + This is foil Four. + + + This is foil Five. + + + + diff --git a/common/test/data/full/problem/test_files/multiplechoicelresponse_demo.xml b/common/test/data/full/problem/test_files/multiplechoicelresponse_demo.xml new file mode 100644 index 0000000000..b3e89a39e3 --- /dev/null +++ b/common/test/data/full/problem/test_files/multiplechoicelresponse_demo.xml @@ -0,0 +1,17 @@ + + +

Suppose you were to pass a hydroge ion (H+) through an electric field and measure the deflection of the ion. How would its deflection compare to the deflection of an electron passed through the same electric field?

+ + + + + + The ion would deflect identically as both species have the same charge. + The ion would deflect by an amount identical in magnitude but opposite in direction because the charges are of opposite sign but equal in magnitude. + The deflection will be in the same direction but smaller in magnitude due to the larger mass of the ion. + The deflection will be smaller in magnitude due to the increased mass of the ion, as well as in the opposite direction due to the opposite sign of the charge. + + + + +
\ No newline at end of file diff --git a/common/test/data/full/problem/test_files/numericalresponse_demo.xml b/common/test/data/full/problem/test_files/numericalresponse_demo.xml new file mode 100644 index 0000000000..629b56edfd --- /dev/null +++ b/common/test/data/full/problem/test_files/numericalresponse_demo.xml @@ -0,0 +1,31 @@ + + + +

Gaseous hydrogen can be reacted with gaseous oxygen in the presence of a flame to produce water vapor according to the following reaction:

+ [mathjax] \text{ a } \text{H}_{2 } + \text{ b }\text{O}_{2 } = \text{ c }\text{H}_{2 }\text{O }[/mathjax] +

Balance the equation i.e., specify the values of a, b, and c. Use the lowest whole number coefficients.

+ +

a =

+ + + + + + +

b = + + + +

+ +

c = + + + +

+ + +
+
+ + diff --git a/common/test/data/full/problem/test_files/optionresponse.xml b/common/test/data/full/problem/test_files/optionresponse.xml new file mode 100644 index 0000000000..99a17e8fac --- /dev/null +++ b/common/test/data/full/problem/test_files/optionresponse.xml @@ -0,0 +1,63 @@ + + +

+Why do bicycles benefit from having larger wheels when going up a bump as shown in the picture?
+Assume that for both bicycles:
+1.) The tires have equal air pressure.
+2.) The bicycles never leave the contact with the bump.
+3.) The bicycles have the same mass. The bicycle tires (regardless of size) have the same mass.
+

+
+ + + + +
+
+
+
+
+
diff --git a/common/test/data/full/problem/test_files/stringresponse_with_hint.xml b/common/test/data/full/problem/test_files/stringresponse_with_hint.xml new file mode 100644 index 0000000000..86efdf0f18 --- /dev/null +++ b/common/test/data/full/problem/test_files/stringresponse_with_hint.xml @@ -0,0 +1,25 @@ + +

Example: String Response Problem

+
+
+ + Which US state has Lansing as its capital? + + + + + + + + + The state capital of Wisconsin is Madison. + + + The state capital of Minnesota is St. Paul. + + + The state you are looking for is also known as the 'Great Lakes State' + + + +
diff --git a/common/test/data/full/problem/test_files/symbolicresponse.xml b/common/test/data/full/problem/test_files/symbolicresponse.xml new file mode 100644 index 0000000000..4dc2bc9d7b --- /dev/null +++ b/common/test/data/full/problem/test_files/symbolicresponse.xml @@ -0,0 +1,29 @@ + + +

Example: Symbolic Math Response Problem

+ +

+A symbolic math response problem presents one or more symbolic math +input fields for input. Correctness of input is evaluated based on +the symbolic properties of the expression entered. The student enters +text, but sees a proper symbolic rendition of the entered formula, in +real time, next to the input box. +

+ +

This is a correct answer which may be entered below:

+

cos(theta)*[[1,0],[0,1]] + i*sin(theta)*[[0,1],[1,0]]

+ + + Compute [mathjax] U = \exp\left( i \theta \left[ \begin{matrix} 0 & 1 \\ 1 & 0 \end{matrix} \right] \right) [/mathjax] + and give the resulting \(2 \times 2\) matrix.
+ Your input should be typed in as a list of lists, eg [[1,2],[3,4]].
+ [mathjax]U=[/mathjax] + + +
+
+ +
+
diff --git a/common/test/data/full/problem/test_files/truefalse.xml b/common/test/data/full/problem/test_files/truefalse.xml new file mode 100644 index 0000000000..60018f7a2d --- /dev/null +++ b/common/test/data/full/problem/test_files/truefalse.xml @@ -0,0 +1,21 @@ + + + + + This is foil One. + + + This is foil Two. + + + This is foil Three. + + + This is foil Four. + + + This is foil Five. + + + + diff --git a/common/test/data/full/vertical/test_problems.xml b/common/test/data/full/vertical/test_problems.xml new file mode 100644 index 0000000000..6cdc7977d9 --- /dev/null +++ b/common/test/data/full/vertical/test_problems.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/create-dev-env.sh b/create-dev-env.sh index 0d7e392313..e481d3fd5e 100755 --- a/create-dev-env.sh +++ b/create-dev-env.sh @@ -72,12 +72,6 @@ clone_repos() { git clone git@github.com:MITx/mitx.git fi - if [[ ! -d "$BASE/mitx/askbot/.git" ]]; then - output "Cloning askbot as a submodule of mitx" - cd "$BASE/mitx" - git submodule update --init - fi - # By default, dev environments start with a copy of 6.002x cd "$BASE" mkdir -p "$BASE/data" @@ -334,9 +328,6 @@ pip install -r mitx/pre-requirements.txt output "Installing MITx requirements" cd mitx pip install -r requirements.txt -output "Installing askbot requirements" -pip install -r askbot/askbot_requirements.txt -pip install -r askbot/askbot_requirements_dev.txt mkdir "$BASE/log" || true mkdir "$BASE/db" || true diff --git a/doc/overview.md b/doc/overview.md index 36e22e16eb..f64d12920d 100644 --- a/doc/overview.md +++ b/doc/overview.md @@ -27,7 +27,7 @@ You should be familiar with the following. If you're not, go read some docs... - CMS -- Course Management System. The instructor-facing parts of the system. Allows instructors to see and modify their course, add lectures, problems, reorder things, etc. - - Askbot -- the discussion forums. We have a custom fork of this project. We're also hoping to replace it with something better later. (e.g. need support for multiple classes, etc) + - Forums -- this is a ruby on rails service that runs on Heroku. Contributed by berkeley folks. The LMS has a wrapper lib that talks to it. - Data. In the data/ dir. There is currently a single `course.xml` file that describes an entire course. Speaking of which... diff --git a/install.txt b/install.txt index 37a6e50986..801036af6b 100644 --- a/install.txt +++ b/install.txt @@ -9,7 +9,6 @@ There is also a script "create-dev-env.sh" that automates these steps. mkdir ~/mitx_all cd ~/mitx_all git clone git@github.com:MITx/mitx.git - git clone git@github.com:MITx/askbot-devel hg clone ssh://hg-content@gp.mitx.mit.edu/data 2) Install OSX dependencies (Mac users only) @@ -49,8 +48,6 @@ There is also a script "create-dev-env.sh" that automates these steps. source ~/mitx_all/python/bin/activate cd ~/mitx_all - pip install -r askbot-devel/askbot_requirements.txt - pip install -r askbot-devel/askbot_requirements_dev.txt pip install -r mitx/pre-requirements.txt pip install -r mitx/requirements.txt diff --git a/lms/askbot/skins/README b/lms/askbot/skins/README deleted file mode 100644 index 3fbc8c331e..0000000000 --- a/lms/askbot/skins/README +++ /dev/null @@ -1,71 +0,0 @@ -============================= -Customization of Askbot skins -============================= - -The default skin at the moment is in the development, however -it is already possible to start customizing your site without -incurring much maintenance overhead. - -Current status of templates -=========================== -The two busiest templates are - the "main" page and the "question" page, -the main page is more or less complete. "Question" page will be significantly -refactored in the near future. - -How skins work in Askbot -======================== - -The skins reside in up to two directories: - -* `askbot/skins` in the source code (contains any stock skins) -* directory pointed to by a ASKBOT_EXTRA_SKINS_DIR in your settings.py - with any other skins - -Currently, the skin is selected by the site administrator in the live settings. -Also, at the moment skin default is special - it serves any resources -absent in other skins. In a way - all other skins inherit from the "default". - -Templates and media are resolved in the following way: -* check in skin named as in settings.ASKBOT_DEFAULT_SKIN -* then skin named 'default' - -How to customize a skin -======================= - -There are three options: - -* edit custom css via the settings interface - good for small tweaks - (no need to directly log in to the server) -* create a new skin in separate files (need direct access to the server - files, more maintenance overhead) -* directly modify the "default" skin (as in the previous option - need - direct access to the server, less maintenance overhead, some - knowledge of git system is required) - -The first option only allows to modify css and add custom javascript. -The latter two options allow changing the templates as well. - -If you wish to follow the second option, create a directory named the same -way as the skin you are building and start adding files with the same names -and relative locations as those in the "default" skin. - -NO NEED TO CREATE ALL TEMPLATES/MEDIA FILES AT ONCE as your skin will inherit -pieces from the "default". - -The disadvantage of thil second approach is that you will be on your own maintaining -the synchrony of your template, stylesheet and the core code. - -Third approach is the best, but it requires (the most basic) use of -git source code management software. With git you will easily merge the updates -from the development repository. - -Structure of the skin directories -================================= -Todo. - -To simplify maintenance of the css as the skin is being developed, -populate css file `media/style/extra.css` with any rules that will -override those in the `media/style/style.css` file. If you do that - -media does not have to be composed of files named the same way as in default skin -whatever media you link to from your templates - will be in operation diff --git a/lms/askbot/skins/__init__.py b/lms/askbot/skins/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/lms/askbot/skins/common/media/images/anon.png b/lms/askbot/skins/common/media/images/anon.png deleted file mode 100644 index a204159021..0000000000 Binary files a/lms/askbot/skins/common/media/images/anon.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/bigbutton.png b/lms/askbot/skins/common/media/images/bigbutton.png deleted file mode 100644 index 2a7c0f0585..0000000000 Binary files a/lms/askbot/skins/common/media/images/bigbutton.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/bigbuttonhover.png b/lms/askbot/skins/common/media/images/bigbuttonhover.png deleted file mode 100644 index cf4bacca69..0000000000 Binary files a/lms/askbot/skins/common/media/images/bigbuttonhover.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/blue-up-arrow-h18px.png b/lms/askbot/skins/common/media/images/blue-up-arrow-h18px.png deleted file mode 100755 index e1f29e8633..0000000000 Binary files a/lms/askbot/skins/common/media/images/blue-up-arrow-h18px.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/box-arrow.gif b/lms/askbot/skins/common/media/images/box-arrow.gif deleted file mode 100755 index 89dcf5b3dd..0000000000 Binary files a/lms/askbot/skins/common/media/images/box-arrow.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/bullet_green.gif b/lms/askbot/skins/common/media/images/bullet_green.gif deleted file mode 100755 index fa530910f9..0000000000 Binary files a/lms/askbot/skins/common/media/images/bullet_green.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/cc-88x31.png b/lms/askbot/skins/common/media/images/cc-88x31.png deleted file mode 100755 index 0f2a0f1072..0000000000 Binary files a/lms/askbot/skins/common/media/images/cc-88x31.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/cc-by-sa.png b/lms/askbot/skins/common/media/images/cc-by-sa.png deleted file mode 100644 index f0a944e0b8..0000000000 Binary files a/lms/askbot/skins/common/media/images/cc-by-sa.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/close-small-dark.png b/lms/askbot/skins/common/media/images/close-small-dark.png deleted file mode 100755 index 280c1fc74e..0000000000 Binary files a/lms/askbot/skins/common/media/images/close-small-dark.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/close-small-hover.png b/lms/askbot/skins/common/media/images/close-small-hover.png deleted file mode 100755 index 7899aec721..0000000000 Binary files a/lms/askbot/skins/common/media/images/close-small-hover.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/close-small.png b/lms/askbot/skins/common/media/images/close-small.png deleted file mode 100755 index 5a99d31f17..0000000000 Binary files a/lms/askbot/skins/common/media/images/close-small.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/contributorsback.png b/lms/askbot/skins/common/media/images/contributorsback.png deleted file mode 100644 index dd72838396..0000000000 Binary files a/lms/askbot/skins/common/media/images/contributorsback.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/dash.gif b/lms/askbot/skins/common/media/images/dash.gif deleted file mode 100755 index d1ddc507fe..0000000000 Binary files a/lms/askbot/skins/common/media/images/dash.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/dialog-warning-off.png b/lms/askbot/skins/common/media/images/dialog-warning-off.png deleted file mode 100644 index 258e4d86c0..0000000000 Binary files a/lms/askbot/skins/common/media/images/dialog-warning-off.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/dialog-warning.png b/lms/askbot/skins/common/media/images/dialog-warning.png deleted file mode 100644 index a9e4ff3991..0000000000 Binary files a/lms/askbot/skins/common/media/images/dialog-warning.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/djangomade124x25_grey.gif b/lms/askbot/skins/common/media/images/djangomade124x25_grey.gif deleted file mode 100755 index d34bb31161..0000000000 Binary files a/lms/askbot/skins/common/media/images/djangomade124x25_grey.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/dot-g.gif b/lms/askbot/skins/common/media/images/dot-g.gif deleted file mode 100755 index 5d6bb28e56..0000000000 Binary files a/lms/askbot/skins/common/media/images/dot-g.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/dot-list.gif b/lms/askbot/skins/common/media/images/dot-list.gif deleted file mode 100755 index f6a6b86531..0000000000 Binary files a/lms/askbot/skins/common/media/images/dot-list.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/edit.png b/lms/askbot/skins/common/media/images/edit.png deleted file mode 100755 index dcb09be064..0000000000 Binary files a/lms/askbot/skins/common/media/images/edit.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/expander-arrow-hide.gif b/lms/askbot/skins/common/media/images/expander-arrow-hide.gif deleted file mode 100755 index feb6a6187c..0000000000 Binary files a/lms/askbot/skins/common/media/images/expander-arrow-hide.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/expander-arrow-show.gif b/lms/askbot/skins/common/media/images/expander-arrow-show.gif deleted file mode 100755 index 6825c56ee4..0000000000 Binary files a/lms/askbot/skins/common/media/images/expander-arrow-show.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/favicon.gif b/lms/askbot/skins/common/media/images/favicon.gif deleted file mode 100644 index d106e5da96..0000000000 Binary files a/lms/askbot/skins/common/media/images/favicon.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/favicon.ico b/lms/askbot/skins/common/media/images/favicon.ico deleted file mode 100644 index 67203a5c95..0000000000 Binary files a/lms/askbot/skins/common/media/images/favicon.ico and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/feed-icon-small.png b/lms/askbot/skins/common/media/images/feed-icon-small.png deleted file mode 100644 index 2794b0f54d..0000000000 Binary files a/lms/askbot/skins/common/media/images/feed-icon-small.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ad.gif b/lms/askbot/skins/common/media/images/flags/ad.gif deleted file mode 100755 index 57b499733f..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ad.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ae.gif b/lms/askbot/skins/common/media/images/flags/ae.gif deleted file mode 100755 index 78d15b67dc..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ae.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/af.gif b/lms/askbot/skins/common/media/images/flags/af.gif deleted file mode 100755 index 9889408211..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/af.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ag.gif b/lms/askbot/skins/common/media/images/flags/ag.gif deleted file mode 100755 index 48f8e7bc72..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ag.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ai.gif b/lms/askbot/skins/common/media/images/flags/ai.gif deleted file mode 100755 index 1cbc57958b..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ai.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/al.gif b/lms/askbot/skins/common/media/images/flags/al.gif deleted file mode 100755 index c44fe0a0ae..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/al.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/am.gif b/lms/askbot/skins/common/media/images/flags/am.gif deleted file mode 100755 index 2915e30cb2..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/am.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/an.gif b/lms/askbot/skins/common/media/images/flags/an.gif deleted file mode 100755 index cb570c6799..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/an.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ao.gif b/lms/askbot/skins/common/media/images/flags/ao.gif deleted file mode 100644 index 8c854fa108..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ao.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ar.gif b/lms/askbot/skins/common/media/images/flags/ar.gif deleted file mode 100755 index a9f71f7d6d..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ar.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/as.gif b/lms/askbot/skins/common/media/images/flags/as.gif deleted file mode 100755 index d776ec2711..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/as.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/at.gif b/lms/askbot/skins/common/media/images/flags/at.gif deleted file mode 100755 index 87e1217365..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/at.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/au.gif b/lms/askbot/skins/common/media/images/flags/au.gif deleted file mode 100755 index 5269c6a0e0..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/au.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/aw.gif b/lms/askbot/skins/common/media/images/flags/aw.gif deleted file mode 100755 index 27fdb4d139..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/aw.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ax.gif b/lms/askbot/skins/common/media/images/flags/ax.gif deleted file mode 100755 index 0ceb6849f4..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ax.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/az.gif b/lms/askbot/skins/common/media/images/flags/az.gif deleted file mode 100755 index d771618498..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/az.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ba.gif b/lms/askbot/skins/common/media/images/flags/ba.gif deleted file mode 100755 index 9bf5f0ac7e..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ba.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/bb.gif b/lms/askbot/skins/common/media/images/flags/bb.gif deleted file mode 100755 index b7d08e57e3..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/bb.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/bd.gif b/lms/askbot/skins/common/media/images/flags/bd.gif deleted file mode 100755 index 0fd27ecabe..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/bd.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/be.gif b/lms/askbot/skins/common/media/images/flags/be.gif deleted file mode 100755 index ae09bfbe14..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/be.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/bf.gif b/lms/askbot/skins/common/media/images/flags/bf.gif deleted file mode 100755 index 9d6772cd0c..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/bf.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/bg.gif b/lms/askbot/skins/common/media/images/flags/bg.gif deleted file mode 100755 index 11cf8ff3b3..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/bg.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/bh.gif b/lms/askbot/skins/common/media/images/flags/bh.gif deleted file mode 100755 index 56aa72b2b6..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/bh.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/bi.gif b/lms/askbot/skins/common/media/images/flags/bi.gif deleted file mode 100755 index 6e2cbe1216..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/bi.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/bj.gif b/lms/askbot/skins/common/media/images/flags/bj.gif deleted file mode 100755 index e676116f8e..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/bj.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/bm.gif b/lms/askbot/skins/common/media/images/flags/bm.gif deleted file mode 100755 index 9feb87bc9e..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/bm.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/bn.gif b/lms/askbot/skins/common/media/images/flags/bn.gif deleted file mode 100755 index b7b6b0f919..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/bn.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/bo.gif b/lms/askbot/skins/common/media/images/flags/bo.gif deleted file mode 100755 index 4844f85692..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/bo.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/br.gif b/lms/askbot/skins/common/media/images/flags/br.gif deleted file mode 100755 index 8c8661626b..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/br.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/bs.gif b/lms/askbot/skins/common/media/images/flags/bs.gif deleted file mode 100755 index c0a741e5ca..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/bs.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/bt.gif b/lms/askbot/skins/common/media/images/flags/bt.gif deleted file mode 100755 index abe2f3ccb0..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/bt.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/bv.gif b/lms/askbot/skins/common/media/images/flags/bv.gif deleted file mode 100755 index 6202d1f3a2..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/bv.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/bw.gif b/lms/askbot/skins/common/media/images/flags/bw.gif deleted file mode 100755 index 986ab63c27..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/bw.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/by.gif b/lms/askbot/skins/common/media/images/flags/by.gif deleted file mode 100755 index 43ffcd4c71..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/by.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/bz.gif b/lms/askbot/skins/common/media/images/flags/bz.gif deleted file mode 100755 index 791737f0bd..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/bz.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ca.gif b/lms/askbot/skins/common/media/images/flags/ca.gif deleted file mode 100755 index 457d9662d5..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ca.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/catalonia.gif b/lms/askbot/skins/common/media/images/flags/catalonia.gif deleted file mode 100644 index 73df9a0498..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/catalonia.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/cc.gif b/lms/askbot/skins/common/media/images/flags/cc.gif deleted file mode 100755 index 3f7832702d..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/cc.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/cd.gif b/lms/askbot/skins/common/media/images/flags/cd.gif deleted file mode 100644 index 1df717ae5c..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/cd.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/cf.gif b/lms/askbot/skins/common/media/images/flags/cf.gif deleted file mode 100755 index 35787ca489..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/cf.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/cg.gif b/lms/askbot/skins/common/media/images/flags/cg.gif deleted file mode 100755 index e0a62a51ca..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/cg.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ch.gif b/lms/askbot/skins/common/media/images/flags/ch.gif deleted file mode 100755 index d5c0e5b7fa..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ch.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ci.gif b/lms/askbot/skins/common/media/images/flags/ci.gif deleted file mode 100755 index 844120a52b..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ci.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ck.gif b/lms/askbot/skins/common/media/images/flags/ck.gif deleted file mode 100755 index 2edb73994c..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ck.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/cl.gif b/lms/askbot/skins/common/media/images/flags/cl.gif deleted file mode 100755 index cbc370e6ca..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/cl.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/cm.gif b/lms/askbot/skins/common/media/images/flags/cm.gif deleted file mode 100755 index 1fb102b295..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/cm.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/cn.gif b/lms/askbot/skins/common/media/images/flags/cn.gif deleted file mode 100755 index b052530978..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/cn.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/co.gif b/lms/askbot/skins/common/media/images/flags/co.gif deleted file mode 100755 index d0e15cafea..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/co.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/cr.gif b/lms/askbot/skins/common/media/images/flags/cr.gif deleted file mode 100755 index 0728dd6a49..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/cr.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/cs.gif b/lms/askbot/skins/common/media/images/flags/cs.gif deleted file mode 100755 index 101db64939..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/cs.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/cu.gif b/lms/askbot/skins/common/media/images/flags/cu.gif deleted file mode 100755 index 291255ca3f..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/cu.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/cv.gif b/lms/askbot/skins/common/media/images/flags/cv.gif deleted file mode 100755 index 43c6c6cb6e..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/cv.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/cx.gif b/lms/askbot/skins/common/media/images/flags/cx.gif deleted file mode 100755 index a5b43089b0..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/cx.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/cy.gif b/lms/askbot/skins/common/media/images/flags/cy.gif deleted file mode 100755 index 35c661e161..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/cy.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/cz.gif b/lms/askbot/skins/common/media/images/flags/cz.gif deleted file mode 100755 index 0a605e581d..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/cz.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/de.gif b/lms/askbot/skins/common/media/images/flags/de.gif deleted file mode 100755 index 75728ddf21..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/de.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/dj.gif b/lms/askbot/skins/common/media/images/flags/dj.gif deleted file mode 100755 index 212406d973..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/dj.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/dk.gif b/lms/askbot/skins/common/media/images/flags/dk.gif deleted file mode 100755 index 03e75bd297..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/dk.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/dm.gif b/lms/askbot/skins/common/media/images/flags/dm.gif deleted file mode 100755 index 2f87f3ca6a..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/dm.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/do.gif b/lms/askbot/skins/common/media/images/flags/do.gif deleted file mode 100755 index f7d0bad39e..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/do.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/dz.gif b/lms/askbot/skins/common/media/images/flags/dz.gif deleted file mode 100755 index ed580a7cec..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/dz.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ec.gif b/lms/askbot/skins/common/media/images/flags/ec.gif deleted file mode 100755 index 9e41e0ec8c..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ec.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ee.gif b/lms/askbot/skins/common/media/images/flags/ee.gif deleted file mode 100755 index 9397a2d084..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ee.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/eg.gif b/lms/askbot/skins/common/media/images/flags/eg.gif deleted file mode 100755 index 6857c7dd57..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/eg.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/eh.gif b/lms/askbot/skins/common/media/images/flags/eh.gif deleted file mode 100755 index dd0391c280..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/eh.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/england.gif b/lms/askbot/skins/common/media/images/flags/england.gif deleted file mode 100755 index 933a4f0b3d..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/england.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/er.gif b/lms/askbot/skins/common/media/images/flags/er.gif deleted file mode 100755 index 3d4d612c77..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/er.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/es.gif b/lms/askbot/skins/common/media/images/flags/es.gif deleted file mode 100755 index c27d65e5f1..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/es.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/et.gif b/lms/askbot/skins/common/media/images/flags/et.gif deleted file mode 100755 index f77995d0ab..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/et.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/europeanunion.gif b/lms/askbot/skins/common/media/images/flags/europeanunion.gif deleted file mode 100644 index 28a762a59c..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/europeanunion.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/fam.gif b/lms/askbot/skins/common/media/images/flags/fam.gif deleted file mode 100755 index 7d528852dc..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/fam.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/fi.gif b/lms/askbot/skins/common/media/images/flags/fi.gif deleted file mode 100755 index 8d3a191828..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/fi.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/fj.gif b/lms/askbot/skins/common/media/images/flags/fj.gif deleted file mode 100755 index 486151cb8d..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/fj.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/fk.gif b/lms/askbot/skins/common/media/images/flags/fk.gif deleted file mode 100755 index 37b5ecf303..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/fk.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/fm.gif b/lms/askbot/skins/common/media/images/flags/fm.gif deleted file mode 100755 index 7f8723b7da..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/fm.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/fo.gif b/lms/askbot/skins/common/media/images/flags/fo.gif deleted file mode 100755 index 4a90fc043d..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/fo.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/fr.gif b/lms/askbot/skins/common/media/images/flags/fr.gif deleted file mode 100755 index 43d0b80172..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/fr.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ga.gif b/lms/askbot/skins/common/media/images/flags/ga.gif deleted file mode 100755 index 23fd5f0d2d..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ga.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/gb.gif b/lms/askbot/skins/common/media/images/flags/gb.gif deleted file mode 100644 index 3c6bce15c4..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/gb.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/gd.gif b/lms/askbot/skins/common/media/images/flags/gd.gif deleted file mode 100755 index 25ea312318..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/gd.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ge.gif b/lms/askbot/skins/common/media/images/flags/ge.gif deleted file mode 100755 index faa7f126a7..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ge.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/gf.gif b/lms/askbot/skins/common/media/images/flags/gf.gif deleted file mode 100755 index 43d0b80172..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/gf.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/gh.gif b/lms/askbot/skins/common/media/images/flags/gh.gif deleted file mode 100755 index 273fb7d1a9..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/gh.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/gi.gif b/lms/askbot/skins/common/media/images/flags/gi.gif deleted file mode 100755 index 7b1984bc69..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/gi.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/gl.gif b/lms/askbot/skins/common/media/images/flags/gl.gif deleted file mode 100755 index ef445be003..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/gl.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/gm.gif b/lms/askbot/skins/common/media/images/flags/gm.gif deleted file mode 100755 index 6847c5a8c0..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/gm.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/gn.gif b/lms/askbot/skins/common/media/images/flags/gn.gif deleted file mode 100755 index a982ac6f56..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/gn.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/gp.gif b/lms/askbot/skins/common/media/images/flags/gp.gif deleted file mode 100755 index 31166db665..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/gp.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/gq.gif b/lms/askbot/skins/common/media/images/flags/gq.gif deleted file mode 100755 index 8b4e0cc41e..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/gq.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/gr.gif b/lms/askbot/skins/common/media/images/flags/gr.gif deleted file mode 100755 index b4c8c04e53..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/gr.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/gs.gif b/lms/askbot/skins/common/media/images/flags/gs.gif deleted file mode 100755 index ccc96ec009..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/gs.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/gt.gif b/lms/askbot/skins/common/media/images/flags/gt.gif deleted file mode 100755 index 7e94d1dda0..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/gt.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/gu.gif b/lms/askbot/skins/common/media/images/flags/gu.gif deleted file mode 100755 index eafef683d5..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/gu.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/gw.gif b/lms/askbot/skins/common/media/images/flags/gw.gif deleted file mode 100755 index 55f7571150..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/gw.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/gy.gif b/lms/askbot/skins/common/media/images/flags/gy.gif deleted file mode 100755 index 1cb4cd71d6..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/gy.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/hk.gif b/lms/askbot/skins/common/media/images/flags/hk.gif deleted file mode 100755 index 798af96da8..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/hk.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/hm.gif b/lms/askbot/skins/common/media/images/flags/hm.gif deleted file mode 100755 index 5269c6a0e0..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/hm.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/hn.gif b/lms/askbot/skins/common/media/images/flags/hn.gif deleted file mode 100755 index 6c4ffe8e84..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/hn.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/hr.gif b/lms/askbot/skins/common/media/images/flags/hr.gif deleted file mode 100755 index 557c660202..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/hr.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ht.gif b/lms/askbot/skins/common/media/images/flags/ht.gif deleted file mode 100755 index 059604ab20..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ht.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/hu.gif b/lms/askbot/skins/common/media/images/flags/hu.gif deleted file mode 100755 index 6142d86817..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/hu.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/id.gif b/lms/askbot/skins/common/media/images/flags/id.gif deleted file mode 100755 index 865161b030..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/id.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ie.gif b/lms/askbot/skins/common/media/images/flags/ie.gif deleted file mode 100755 index 506ad28590..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ie.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/il.gif b/lms/askbot/skins/common/media/images/flags/il.gif deleted file mode 100755 index c8483ae52f..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/il.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/in.gif b/lms/askbot/skins/common/media/images/flags/in.gif deleted file mode 100755 index 1cd80272e8..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/in.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/io.gif b/lms/askbot/skins/common/media/images/flags/io.gif deleted file mode 100755 index de7e7ab385..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/io.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/iq.gif b/lms/askbot/skins/common/media/images/flags/iq.gif deleted file mode 100755 index c34fe3c44a..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/iq.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ir.gif b/lms/askbot/skins/common/media/images/flags/ir.gif deleted file mode 100755 index 156040fc57..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ir.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/is.gif b/lms/askbot/skins/common/media/images/flags/is.gif deleted file mode 100755 index b42502de4b..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/is.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/it.gif b/lms/askbot/skins/common/media/images/flags/it.gif deleted file mode 100755 index d79e90e99e..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/it.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/jm.gif b/lms/askbot/skins/common/media/images/flags/jm.gif deleted file mode 100755 index 0bed67c239..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/jm.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/jo.gif b/lms/askbot/skins/common/media/images/flags/jo.gif deleted file mode 100755 index 03daf8af67..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/jo.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/jp.gif b/lms/askbot/skins/common/media/images/flags/jp.gif deleted file mode 100755 index 444c1d05c5..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/jp.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ke.gif b/lms/askbot/skins/common/media/images/flags/ke.gif deleted file mode 100755 index c2b5d45c43..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ke.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/kg.gif b/lms/askbot/skins/common/media/images/flags/kg.gif deleted file mode 100755 index 72a4d412c8..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/kg.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/kh.gif b/lms/askbot/skins/common/media/images/flags/kh.gif deleted file mode 100755 index 30a183158d..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/kh.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ki.gif b/lms/askbot/skins/common/media/images/flags/ki.gif deleted file mode 100755 index 4a0751a221..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ki.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/km.gif b/lms/askbot/skins/common/media/images/flags/km.gif deleted file mode 100755 index 5859595e80..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/km.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/kn.gif b/lms/askbot/skins/common/media/images/flags/kn.gif deleted file mode 100755 index bb9cc34a92..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/kn.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/kp.gif b/lms/askbot/skins/common/media/images/flags/kp.gif deleted file mode 100755 index 6e0ca09e0b..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/kp.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/kr.gif b/lms/askbot/skins/common/media/images/flags/kr.gif deleted file mode 100755 index 1cddbe75b3..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/kr.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/kw.gif b/lms/askbot/skins/common/media/images/flags/kw.gif deleted file mode 100755 index 1efc7347ec..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/kw.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ky.gif b/lms/askbot/skins/common/media/images/flags/ky.gif deleted file mode 100755 index d3d02ee4d3..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ky.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/kz.gif b/lms/askbot/skins/common/media/images/flags/kz.gif deleted file mode 100755 index 24baebe05c..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/kz.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/la.gif b/lms/askbot/skins/common/media/images/flags/la.gif deleted file mode 100755 index d14cf4d82c..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/la.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/lb.gif b/lms/askbot/skins/common/media/images/flags/lb.gif deleted file mode 100755 index 003d83af5e..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/lb.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/lc.gif b/lms/askbot/skins/common/media/images/flags/lc.gif deleted file mode 100644 index f5fe5bffd2..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/lc.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/li.gif b/lms/askbot/skins/common/media/images/flags/li.gif deleted file mode 100755 index 713c58e1df..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/li.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/lk.gif b/lms/askbot/skins/common/media/images/flags/lk.gif deleted file mode 100755 index 1b3ee7f572..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/lk.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/lr.gif b/lms/askbot/skins/common/media/images/flags/lr.gif deleted file mode 100755 index 435af9e506..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/lr.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ls.gif b/lms/askbot/skins/common/media/images/flags/ls.gif deleted file mode 100755 index 427ae957e5..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ls.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/lt.gif b/lms/askbot/skins/common/media/images/flags/lt.gif deleted file mode 100755 index dee9c601ad..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/lt.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/lu.gif b/lms/askbot/skins/common/media/images/flags/lu.gif deleted file mode 100755 index 7d7293edd6..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/lu.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/lv.gif b/lms/askbot/skins/common/media/images/flags/lv.gif deleted file mode 100755 index 17e71b7eb6..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/lv.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ly.gif b/lms/askbot/skins/common/media/images/flags/ly.gif deleted file mode 100755 index a654c30afa..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ly.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ma.gif b/lms/askbot/skins/common/media/images/flags/ma.gif deleted file mode 100755 index fc784119d3..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ma.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/mc.gif b/lms/askbot/skins/common/media/images/flags/mc.gif deleted file mode 100755 index 02a7c8e1bd..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/mc.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/md.gif b/lms/askbot/skins/common/media/images/flags/md.gif deleted file mode 100755 index e4b8a7e3f6..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/md.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/me.gif b/lms/askbot/skins/common/media/images/flags/me.gif deleted file mode 100644 index a260453c2f..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/me.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/mg.gif b/lms/askbot/skins/common/media/images/flags/mg.gif deleted file mode 100755 index a91b577d13..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/mg.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/mh.gif b/lms/askbot/skins/common/media/images/flags/mh.gif deleted file mode 100755 index 92f5f485c3..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/mh.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/mk.gif b/lms/askbot/skins/common/media/images/flags/mk.gif deleted file mode 100755 index 7aeb8311b2..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/mk.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ml.gif b/lms/askbot/skins/common/media/images/flags/ml.gif deleted file mode 100755 index 53d6f490c1..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ml.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/mm.gif b/lms/askbot/skins/common/media/images/flags/mm.gif deleted file mode 100755 index 9e0a2756d2..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/mm.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/mn.gif b/lms/askbot/skins/common/media/images/flags/mn.gif deleted file mode 100755 index dff8ea5a63..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/mn.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/mo.gif b/lms/askbot/skins/common/media/images/flags/mo.gif deleted file mode 100755 index 66cf5b4f05..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/mo.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/mp.gif b/lms/askbot/skins/common/media/images/flags/mp.gif deleted file mode 100755 index 73b7147e9c..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/mp.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/mq.gif b/lms/askbot/skins/common/media/images/flags/mq.gif deleted file mode 100755 index 570bc5dd18..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/mq.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/mr.gif b/lms/askbot/skins/common/media/images/flags/mr.gif deleted file mode 100755 index f52fcf0933..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/mr.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ms.gif b/lms/askbot/skins/common/media/images/flags/ms.gif deleted file mode 100755 index 5e5a67aa88..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ms.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/mt.gif b/lms/askbot/skins/common/media/images/flags/mt.gif deleted file mode 100755 index 45c709f2bc..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/mt.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/mu.gif b/lms/askbot/skins/common/media/images/flags/mu.gif deleted file mode 100755 index 081ab45336..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/mu.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/mv.gif b/lms/askbot/skins/common/media/images/flags/mv.gif deleted file mode 100755 index 46b63875b1..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/mv.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/mw.gif b/lms/askbot/skins/common/media/images/flags/mw.gif deleted file mode 100755 index ad045a09c1..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/mw.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/mx.gif b/lms/askbot/skins/common/media/images/flags/mx.gif deleted file mode 100755 index ddc75d04d8..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/mx.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/my.gif b/lms/askbot/skins/common/media/images/flags/my.gif deleted file mode 100755 index fc7d523614..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/my.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/mz.gif b/lms/askbot/skins/common/media/images/flags/mz.gif deleted file mode 100755 index 7d635082a6..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/mz.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/na.gif b/lms/askbot/skins/common/media/images/flags/na.gif deleted file mode 100755 index c0babe7231..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/na.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/nc.gif b/lms/askbot/skins/common/media/images/flags/nc.gif deleted file mode 100755 index b1e91b9a80..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/nc.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ne.gif b/lms/askbot/skins/common/media/images/flags/ne.gif deleted file mode 100755 index ff4eaf074e..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ne.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/nf.gif b/lms/askbot/skins/common/media/images/flags/nf.gif deleted file mode 100755 index c83424c2c3..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/nf.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ng.gif b/lms/askbot/skins/common/media/images/flags/ng.gif deleted file mode 100755 index bdde7cb3bf..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ng.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ni.gif b/lms/askbot/skins/common/media/images/flags/ni.gif deleted file mode 100755 index d05894d0cb..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ni.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/nl.gif b/lms/askbot/skins/common/media/images/flags/nl.gif deleted file mode 100755 index c1c8f46d0c..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/nl.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/no.gif b/lms/askbot/skins/common/media/images/flags/no.gif deleted file mode 100755 index 6202d1f3a2..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/no.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/np.gif b/lms/askbot/skins/common/media/images/flags/np.gif deleted file mode 100755 index 1096893a70..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/np.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/nr.gif b/lms/askbot/skins/common/media/images/flags/nr.gif deleted file mode 100755 index 2e4c0c5cad..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/nr.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/nu.gif b/lms/askbot/skins/common/media/images/flags/nu.gif deleted file mode 100755 index 618210a755..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/nu.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/nz.gif b/lms/askbot/skins/common/media/images/flags/nz.gif deleted file mode 100755 index 028a5dc6e4..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/nz.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/om.gif b/lms/askbot/skins/common/media/images/flags/om.gif deleted file mode 100755 index 2b8c77501d..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/om.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/pa.gif b/lms/askbot/skins/common/media/images/flags/pa.gif deleted file mode 100755 index d518b2f978..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/pa.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/pe.gif b/lms/askbot/skins/common/media/images/flags/pe.gif deleted file mode 100755 index 3bc7639057..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/pe.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/pf.gif b/lms/askbot/skins/common/media/images/flags/pf.gif deleted file mode 100755 index 849297a570..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/pf.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/pg.gif b/lms/askbot/skins/common/media/images/flags/pg.gif deleted file mode 100755 index 2d20b07856..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/pg.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ph.gif b/lms/askbot/skins/common/media/images/flags/ph.gif deleted file mode 100755 index 12b380acd3..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ph.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/pk.gif b/lms/askbot/skins/common/media/images/flags/pk.gif deleted file mode 100755 index f3f62c2ebc..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/pk.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/pl.gif b/lms/askbot/skins/common/media/images/flags/pl.gif deleted file mode 100755 index bf10646366..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/pl.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/pm.gif b/lms/askbot/skins/common/media/images/flags/pm.gif deleted file mode 100755 index 99bf6fdb60..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/pm.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/pn.gif b/lms/askbot/skins/common/media/images/flags/pn.gif deleted file mode 100755 index 4bc86a1d86..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/pn.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/pr.gif b/lms/askbot/skins/common/media/images/flags/pr.gif deleted file mode 100755 index 6d5d589670..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/pr.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ps.gif b/lms/askbot/skins/common/media/images/flags/ps.gif deleted file mode 100755 index 6afa3b718c..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ps.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/pt.gif b/lms/askbot/skins/common/media/images/flags/pt.gif deleted file mode 100755 index e735f740e1..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/pt.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/pw.gif b/lms/askbot/skins/common/media/images/flags/pw.gif deleted file mode 100755 index 5854510fa9..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/pw.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/py.gif b/lms/askbot/skins/common/media/images/flags/py.gif deleted file mode 100755 index f2e66af75d..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/py.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/qa.gif b/lms/askbot/skins/common/media/images/flags/qa.gif deleted file mode 100755 index 2e843ff9eb..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/qa.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/re.gif b/lms/askbot/skins/common/media/images/flags/re.gif deleted file mode 100755 index 43d0b80172..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/re.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ro.gif b/lms/askbot/skins/common/media/images/flags/ro.gif deleted file mode 100755 index f5d5f125b8..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ro.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/rs.gif b/lms/askbot/skins/common/media/images/flags/rs.gif deleted file mode 100644 index 3bd1fb2fd8..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/rs.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ru.gif b/lms/askbot/skins/common/media/images/flags/ru.gif deleted file mode 100755 index b525c46233..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ru.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/rw.gif b/lms/askbot/skins/common/media/images/flags/rw.gif deleted file mode 100755 index 0d095f7aed..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/rw.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/sa.gif b/lms/askbot/skins/common/media/images/flags/sa.gif deleted file mode 100755 index 179961b692..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/sa.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/sb.gif b/lms/askbot/skins/common/media/images/flags/sb.gif deleted file mode 100755 index 8f5ff837fe..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/sb.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/sc.gif b/lms/askbot/skins/common/media/images/flags/sc.gif deleted file mode 100755 index 31b47677e0..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/sc.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/scotland.gif b/lms/askbot/skins/common/media/images/flags/scotland.gif deleted file mode 100755 index 03f3f1de2c..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/scotland.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/sd.gif b/lms/askbot/skins/common/media/images/flags/sd.gif deleted file mode 100755 index 53ae214fa1..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/sd.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/se.gif b/lms/askbot/skins/common/media/images/flags/se.gif deleted file mode 100755 index 80f6285228..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/se.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/sg.gif b/lms/askbot/skins/common/media/images/flags/sg.gif deleted file mode 100755 index 5663d39f86..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/sg.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/sh.gif b/lms/askbot/skins/common/media/images/flags/sh.gif deleted file mode 100755 index dcc7f3bcff..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/sh.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/si.gif b/lms/askbot/skins/common/media/images/flags/si.gif deleted file mode 100755 index 23852b50e3..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/si.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/sj.gif b/lms/askbot/skins/common/media/images/flags/sj.gif deleted file mode 100755 index 6202d1f3a2..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/sj.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/sk.gif b/lms/askbot/skins/common/media/images/flags/sk.gif deleted file mode 100755 index 1b3f22baf9..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/sk.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/sl.gif b/lms/askbot/skins/common/media/images/flags/sl.gif deleted file mode 100755 index f0f34923dc..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/sl.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/sm.gif b/lms/askbot/skins/common/media/images/flags/sm.gif deleted file mode 100755 index 04d98de5a5..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/sm.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/sn.gif b/lms/askbot/skins/common/media/images/flags/sn.gif deleted file mode 100755 index 6dac8709d4..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/sn.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/so.gif b/lms/askbot/skins/common/media/images/flags/so.gif deleted file mode 100755 index f1961694ab..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/so.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/sr.gif b/lms/askbot/skins/common/media/images/flags/sr.gif deleted file mode 100755 index 0f7499ad95..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/sr.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/st.gif b/lms/askbot/skins/common/media/images/flags/st.gif deleted file mode 100755 index 4f1e6e092b..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/st.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/sv.gif b/lms/askbot/skins/common/media/images/flags/sv.gif deleted file mode 100755 index 2d7b159a12..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/sv.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/sy.gif b/lms/askbot/skins/common/media/images/flags/sy.gif deleted file mode 100755 index dc8bd50948..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/sy.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/sz.gif b/lms/askbot/skins/common/media/images/flags/sz.gif deleted file mode 100755 index f37aaf8011..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/sz.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/tc.gif b/lms/askbot/skins/common/media/images/flags/tc.gif deleted file mode 100755 index 11a8c232fc..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/tc.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/td.gif b/lms/askbot/skins/common/media/images/flags/td.gif deleted file mode 100755 index 7aa8a10dfc..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/td.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/tf.gif b/lms/askbot/skins/common/media/images/flags/tf.gif deleted file mode 100755 index 51a4325096..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/tf.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/tg.gif b/lms/askbot/skins/common/media/images/flags/tg.gif deleted file mode 100755 index ca6b4e7744..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/tg.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/th.gif b/lms/askbot/skins/common/media/images/flags/th.gif deleted file mode 100755 index 0130792409..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/th.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/tj.gif b/lms/askbot/skins/common/media/images/flags/tj.gif deleted file mode 100755 index 2fe38d4ab9..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/tj.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/tk.gif b/lms/askbot/skins/common/media/images/flags/tk.gif deleted file mode 100755 index 3d3a727fde..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/tk.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/tl.gif b/lms/askbot/skins/common/media/images/flags/tl.gif deleted file mode 100755 index df22d58239..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/tl.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/tm.gif b/lms/askbot/skins/common/media/images/flags/tm.gif deleted file mode 100755 index 36d0994fb9..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/tm.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/tn.gif b/lms/askbot/skins/common/media/images/flags/tn.gif deleted file mode 100755 index 917d4288c9..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/tn.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/to.gif b/lms/askbot/skins/common/media/images/flags/to.gif deleted file mode 100755 index d7ed4d1164..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/to.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/tr.gif b/lms/askbot/skins/common/media/images/flags/tr.gif deleted file mode 100755 index e407d553d2..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/tr.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/tt.gif b/lms/askbot/skins/common/media/images/flags/tt.gif deleted file mode 100755 index 47d3b806b5..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/tt.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/tv.gif b/lms/askbot/skins/common/media/images/flags/tv.gif deleted file mode 100755 index 3c33827789..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/tv.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/tw.gif b/lms/askbot/skins/common/media/images/flags/tw.gif deleted file mode 100755 index cacfd9b7aa..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/tw.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/tz.gif b/lms/askbot/skins/common/media/images/flags/tz.gif deleted file mode 100755 index 82b52ca298..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/tz.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ua.gif b/lms/askbot/skins/common/media/images/flags/ua.gif deleted file mode 100755 index 5d6cd83f59..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ua.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ug.gif b/lms/askbot/skins/common/media/images/flags/ug.gif deleted file mode 100755 index 58b731ad5c..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ug.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/um.gif b/lms/askbot/skins/common/media/images/flags/um.gif deleted file mode 100755 index 3b4c848393..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/um.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/us.gif b/lms/askbot/skins/common/media/images/flags/us.gif deleted file mode 100755 index 8f198f73a7..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/us.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/uy.gif b/lms/askbot/skins/common/media/images/flags/uy.gif deleted file mode 100755 index 12848c7413..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/uy.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/uz.gif b/lms/askbot/skins/common/media/images/flags/uz.gif deleted file mode 100755 index dc9daecaa8..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/uz.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/va.gif b/lms/askbot/skins/common/media/images/flags/va.gif deleted file mode 100755 index 2bd74468d6..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/va.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/vc.gif b/lms/askbot/skins/common/media/images/flags/vc.gif deleted file mode 100755 index 48213816af..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/vc.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ve.gif b/lms/askbot/skins/common/media/images/flags/ve.gif deleted file mode 100755 index 19ce6c1466..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ve.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/vg.gif b/lms/askbot/skins/common/media/images/flags/vg.gif deleted file mode 100755 index 1fc0f96eed..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/vg.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/vi.gif b/lms/askbot/skins/common/media/images/flags/vi.gif deleted file mode 100755 index 66f9e746b6..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/vi.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/vn.gif b/lms/askbot/skins/common/media/images/flags/vn.gif deleted file mode 100755 index f1e20c9412..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/vn.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/vu.gif b/lms/askbot/skins/common/media/images/flags/vu.gif deleted file mode 100755 index 8a8b2b065f..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/vu.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/wales.gif b/lms/askbot/skins/common/media/images/flags/wales.gif deleted file mode 100755 index 901d17507d..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/wales.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/wf.gif b/lms/askbot/skins/common/media/images/flags/wf.gif deleted file mode 100755 index eaa954b136..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/wf.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ws.gif b/lms/askbot/skins/common/media/images/flags/ws.gif deleted file mode 100755 index a51f939ede..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ws.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/ye.gif b/lms/askbot/skins/common/media/images/flags/ye.gif deleted file mode 100755 index 7b0183d0e1..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/ye.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/yt.gif b/lms/askbot/skins/common/media/images/flags/yt.gif deleted file mode 100755 index a2267c0546..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/yt.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/za.gif b/lms/askbot/skins/common/media/images/flags/za.gif deleted file mode 100755 index ede5258919..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/za.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/zm.gif b/lms/askbot/skins/common/media/images/flags/zm.gif deleted file mode 100755 index b2851d2b40..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/zm.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/flags/zw.gif b/lms/askbot/skins/common/media/images/flags/zw.gif deleted file mode 100755 index 02901f627d..0000000000 Binary files a/lms/askbot/skins/common/media/images/flags/zw.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/go-up-grey.png b/lms/askbot/skins/common/media/images/go-up-grey.png deleted file mode 100644 index 763bb799ed..0000000000 Binary files a/lms/askbot/skins/common/media/images/go-up-grey.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/go-up-orange.png b/lms/askbot/skins/common/media/images/go-up-orange.png deleted file mode 100644 index eca3579d35..0000000000 Binary files a/lms/askbot/skins/common/media/images/go-up-orange.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/gray-up-arrow-h18px.png b/lms/askbot/skins/common/media/images/gray-up-arrow-h18px.png deleted file mode 100755 index 78767445ec..0000000000 Binary files a/lms/askbot/skins/common/media/images/gray-up-arrow-h18px.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/grippie.png b/lms/askbot/skins/common/media/images/grippie.png deleted file mode 100755 index 6524d4167d..0000000000 Binary files a/lms/askbot/skins/common/media/images/grippie.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/indicator.gif b/lms/askbot/skins/common/media/images/indicator.gif deleted file mode 100755 index 1c72ebb554..0000000000 Binary files a/lms/askbot/skins/common/media/images/indicator.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/logo.gif b/lms/askbot/skins/common/media/images/logo.gif deleted file mode 100644 index ac4ceda66e..0000000000 Binary files a/lms/askbot/skins/common/media/images/logo.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/logo.png b/lms/askbot/skins/common/media/images/logo.png deleted file mode 100644 index 10559161a3..0000000000 Binary files a/lms/askbot/skins/common/media/images/logo.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/logo1.png b/lms/askbot/skins/common/media/images/logo1.png deleted file mode 100755 index d79a627174..0000000000 Binary files a/lms/askbot/skins/common/media/images/logo1.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/logo2.png b/lms/askbot/skins/common/media/images/logo2.png deleted file mode 100755 index bd3cccd9f4..0000000000 Binary files a/lms/askbot/skins/common/media/images/logo2.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/mail-envelope-empty.png b/lms/askbot/skins/common/media/images/mail-envelope-empty.png deleted file mode 100644 index 0fde87dc9d..0000000000 Binary files a/lms/askbot/skins/common/media/images/mail-envelope-empty.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/mail-envelope-full.png b/lms/askbot/skins/common/media/images/mail-envelope-full.png deleted file mode 100644 index 2277e91977..0000000000 Binary files a/lms/askbot/skins/common/media/images/mail-envelope-full.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/medala.gif b/lms/askbot/skins/common/media/images/medala.gif deleted file mode 100755 index 93dd1a3960..0000000000 Binary files a/lms/askbot/skins/common/media/images/medala.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/medala_on.gif b/lms/askbot/skins/common/media/images/medala_on.gif deleted file mode 100755 index a18f9e8562..0000000000 Binary files a/lms/askbot/skins/common/media/images/medala_on.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/new.gif b/lms/askbot/skins/common/media/images/new.gif deleted file mode 100755 index 8a220b5312..0000000000 Binary files a/lms/askbot/skins/common/media/images/new.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/nophoto.png b/lms/askbot/skins/common/media/images/nophoto.png deleted file mode 100755 index 2daf0ffd43..0000000000 Binary files a/lms/askbot/skins/common/media/images/nophoto.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/openid.gif b/lms/askbot/skins/common/media/images/openid.gif deleted file mode 100755 index 8540e12bcd..0000000000 Binary files a/lms/askbot/skins/common/media/images/openid.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/openid/aol.gif b/lms/askbot/skins/common/media/images/openid/aol.gif deleted file mode 100755 index decc4f1236..0000000000 Binary files a/lms/askbot/skins/common/media/images/openid/aol.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/openid/blogger.ico b/lms/askbot/skins/common/media/images/openid/blogger.ico deleted file mode 100755 index 1b9730b01c..0000000000 Binary files a/lms/askbot/skins/common/media/images/openid/blogger.ico and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/openid/claimid.ico b/lms/askbot/skins/common/media/images/openid/claimid.ico deleted file mode 100755 index 2b80f49183..0000000000 Binary files a/lms/askbot/skins/common/media/images/openid/claimid.ico and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/openid/facebook.gif b/lms/askbot/skins/common/media/images/openid/facebook.gif deleted file mode 100755 index b997b358f7..0000000000 Binary files a/lms/askbot/skins/common/media/images/openid/facebook.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/openid/flickr.ico b/lms/askbot/skins/common/media/images/openid/flickr.ico deleted file mode 100755 index 11f6e07f68..0000000000 Binary files a/lms/askbot/skins/common/media/images/openid/flickr.ico and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/openid/google.gif b/lms/askbot/skins/common/media/images/openid/google.gif deleted file mode 100755 index 1b6cd07bd8..0000000000 Binary files a/lms/askbot/skins/common/media/images/openid/google.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/openid/livejournal.ico b/lms/askbot/skins/common/media/images/openid/livejournal.ico deleted file mode 100755 index f3d21ec5e8..0000000000 Binary files a/lms/askbot/skins/common/media/images/openid/livejournal.ico and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/openid/myopenid.ico b/lms/askbot/skins/common/media/images/openid/myopenid.ico deleted file mode 100755 index ceb06e6a3f..0000000000 Binary files a/lms/askbot/skins/common/media/images/openid/myopenid.ico and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/openid/openid-inputicon.gif b/lms/askbot/skins/common/media/images/openid/openid-inputicon.gif deleted file mode 100755 index cde836c893..0000000000 Binary files a/lms/askbot/skins/common/media/images/openid/openid-inputicon.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/openid/openid.gif b/lms/askbot/skins/common/media/images/openid/openid.gif deleted file mode 100755 index c718b0e6f3..0000000000 Binary files a/lms/askbot/skins/common/media/images/openid/openid.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/openid/technorati.ico b/lms/askbot/skins/common/media/images/openid/technorati.ico deleted file mode 100755 index fa1083c116..0000000000 Binary files a/lms/askbot/skins/common/media/images/openid/technorati.ico and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/openid/twitter.png b/lms/askbot/skins/common/media/images/openid/twitter.png deleted file mode 100755 index 9a6552d184..0000000000 Binary files a/lms/askbot/skins/common/media/images/openid/twitter.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/openid/verisign.ico b/lms/askbot/skins/common/media/images/openid/verisign.ico deleted file mode 100755 index 3953af9319..0000000000 Binary files a/lms/askbot/skins/common/media/images/openid/verisign.ico and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/openid/vidoop.ico b/lms/askbot/skins/common/media/images/openid/vidoop.ico deleted file mode 100755 index bbd9a0d50f..0000000000 Binary files a/lms/askbot/skins/common/media/images/openid/vidoop.ico and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/openid/wordpress.ico b/lms/askbot/skins/common/media/images/openid/wordpress.ico deleted file mode 100755 index 31b7d2c2b7..0000000000 Binary files a/lms/askbot/skins/common/media/images/openid/wordpress.ico and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/openid/yahoo.gif b/lms/askbot/skins/common/media/images/openid/yahoo.gif deleted file mode 100755 index 0f0eb8efe7..0000000000 Binary files a/lms/askbot/skins/common/media/images/openid/yahoo.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/print.png b/lms/askbot/skins/common/media/images/print.png deleted file mode 100644 index 37bf88afb2..0000000000 Binary files a/lms/askbot/skins/common/media/images/print.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/pw-login.gif b/lms/askbot/skins/common/media/images/pw-login.gif deleted file mode 100644 index f88b1bcf0b..0000000000 Binary files a/lms/askbot/skins/common/media/images/pw-login.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/quest-bg.gif b/lms/askbot/skins/common/media/images/quest-bg.gif deleted file mode 100755 index b754023882..0000000000 Binary files a/lms/askbot/skins/common/media/images/quest-bg.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/scopearrow.png b/lms/askbot/skins/common/media/images/scopearrow.png deleted file mode 100644 index 73dc674452..0000000000 Binary files a/lms/askbot/skins/common/media/images/scopearrow.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/sprite.png b/lms/askbot/skins/common/media/images/sprite.png deleted file mode 100644 index 1a0fbc78df..0000000000 Binary files a/lms/askbot/skins/common/media/images/sprite.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/sprites.png b/lms/askbot/skins/common/media/images/sprites.png deleted file mode 100644 index e7244673e6..0000000000 Binary files a/lms/askbot/skins/common/media/images/sprites.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/sprites_source/sprites.svg b/lms/askbot/skins/common/media/images/sprites_source/sprites.svg deleted file mode 100644 index 34898e3037..0000000000 --- a/lms/askbot/skins/common/media/images/sprites_source/sprites.svg +++ /dev/null @@ -1,732 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - X - - - X - - - X - - - - - - - - - - - - - - - - - - - - - - - - - ASK A QUESTION - ASK A QUESTION - - - - - - - - - - - - - diff --git a/lms/askbot/skins/common/media/images/summary-background.png b/lms/askbot/skins/common/media/images/summary-background.png deleted file mode 100644 index 58c3855abb..0000000000 Binary files a/lms/askbot/skins/common/media/images/summary-background.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/tag-left.png b/lms/askbot/skins/common/media/images/tag-left.png deleted file mode 100644 index 5a9d8a0d38..0000000000 Binary files a/lms/askbot/skins/common/media/images/tag-left.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/tag-right.png b/lms/askbot/skins/common/media/images/tag-right.png deleted file mode 100644 index 871664c301..0000000000 Binary files a/lms/askbot/skins/common/media/images/tag-right.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/vote-accepted-on.png b/lms/askbot/skins/common/media/images/vote-accepted-on.png deleted file mode 100755 index 2026f3bcc5..0000000000 Binary files a/lms/askbot/skins/common/media/images/vote-accepted-on.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/vote-accepted.png b/lms/askbot/skins/common/media/images/vote-accepted.png deleted file mode 100755 index ecd185515a..0000000000 Binary files a/lms/askbot/skins/common/media/images/vote-accepted.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/vote-arrow-down-on.png b/lms/askbot/skins/common/media/images/vote-arrow-down-on.png deleted file mode 100755 index 048dbb44dc..0000000000 Binary files a/lms/askbot/skins/common/media/images/vote-arrow-down-on.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/vote-arrow-down.png b/lms/askbot/skins/common/media/images/vote-arrow-down.png deleted file mode 100755 index e4fdec0ab0..0000000000 Binary files a/lms/askbot/skins/common/media/images/vote-arrow-down.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/vote-arrow-up-on.png b/lms/askbot/skins/common/media/images/vote-arrow-up-on.png deleted file mode 100755 index 56ad0c2591..0000000000 Binary files a/lms/askbot/skins/common/media/images/vote-arrow-up-on.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/vote-arrow-up.png b/lms/askbot/skins/common/media/images/vote-arrow-up.png deleted file mode 100755 index 6e9a51c7df..0000000000 Binary files a/lms/askbot/skins/common/media/images/vote-arrow-up.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/vote-favorite-off.png b/lms/askbot/skins/common/media/images/vote-favorite-off.png deleted file mode 100755 index c1bef0745e..0000000000 Binary files a/lms/askbot/skins/common/media/images/vote-favorite-off.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/vote-favorite-on.png b/lms/askbot/skins/common/media/images/vote-favorite-on.png deleted file mode 100755 index 1f9c14ab08..0000000000 Binary files a/lms/askbot/skins/common/media/images/vote-favorite-on.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/images/wiki.png b/lms/askbot/skins/common/media/images/wiki.png deleted file mode 100644 index 06d487f3e2..0000000000 Binary files a/lms/askbot/skins/common/media/images/wiki.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/aol.gif b/lms/askbot/skins/common/media/jquery-openid/images/aol.gif deleted file mode 100755 index 24d1e152c9..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/aol.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/blogger-1.png b/lms/askbot/skins/common/media/jquery-openid/images/blogger-1.png deleted file mode 100755 index 8b360ea562..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/blogger-1.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/blogger.ico b/lms/askbot/skins/common/media/jquery-openid/images/blogger.ico deleted file mode 100755 index 1b9730b01c..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/blogger.ico and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/claimid-0.png b/lms/askbot/skins/common/media/jquery-openid/images/claimid-0.png deleted file mode 100755 index 4a0ea1b35a..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/claimid-0.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/claimid.ico b/lms/askbot/skins/common/media/jquery-openid/images/claimid.ico deleted file mode 100755 index 2b80f49183..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/claimid.ico and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/facebook.gif b/lms/askbot/skins/common/media/jquery-openid/images/facebook.gif deleted file mode 100755 index c558645522..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/facebook.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/flickr.ico b/lms/askbot/skins/common/media/jquery-openid/images/flickr.ico deleted file mode 100755 index 11f6e07f68..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/flickr.ico and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/flickr.png b/lms/askbot/skins/common/media/jquery-openid/images/flickr.png deleted file mode 100755 index 142405a6e6..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/flickr.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/google.gif b/lms/askbot/skins/common/media/jquery-openid/images/google.gif deleted file mode 100755 index 653953658f..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/google.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/identica.png b/lms/askbot/skins/common/media/jquery-openid/images/identica.png deleted file mode 100644 index 2b607db163..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/identica.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/linkedin.gif b/lms/askbot/skins/common/media/jquery-openid/images/linkedin.gif deleted file mode 100644 index 36e049ac7f..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/linkedin.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/livejournal-1.png b/lms/askbot/skins/common/media/jquery-openid/images/livejournal-1.png deleted file mode 100755 index e643608186..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/livejournal-1.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/livejournal.ico b/lms/askbot/skins/common/media/jquery-openid/images/livejournal.ico deleted file mode 100755 index f3d21ec5e8..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/livejournal.ico and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/myopenid-2.png b/lms/askbot/skins/common/media/jquery-openid/images/myopenid-2.png deleted file mode 100755 index f64fb8e81b..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/myopenid-2.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/myopenid.ico b/lms/askbot/skins/common/media/jquery-openid/images/myopenid.ico deleted file mode 100755 index ceb06e6a3f..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/myopenid.ico and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/openid-inputicon.gif b/lms/askbot/skins/common/media/jquery-openid/images/openid-inputicon.gif deleted file mode 100755 index cde836c893..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/openid-inputicon.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/openid.gif b/lms/askbot/skins/common/media/jquery-openid/images/openid.gif deleted file mode 100755 index 19eb7c6f68..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/openid.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/openidico.png b/lms/askbot/skins/common/media/jquery-openid/images/openidico.png deleted file mode 100755 index ab622669df..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/openidico.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/openidico16.png b/lms/askbot/skins/common/media/jquery-openid/images/openidico16.png deleted file mode 100755 index ad718ac5a6..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/openidico16.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/technorati-1.png b/lms/askbot/skins/common/media/jquery-openid/images/technorati-1.png deleted file mode 100755 index f719524034..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/technorati-1.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/technorati.ico b/lms/askbot/skins/common/media/jquery-openid/images/technorati.ico deleted file mode 100755 index fa1083c116..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/technorati.ico and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/twitter.gif b/lms/askbot/skins/common/media/jquery-openid/images/twitter.gif deleted file mode 100644 index 173cace1cb..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/twitter.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/verisign-2.png b/lms/askbot/skins/common/media/jquery-openid/images/verisign-2.png deleted file mode 100755 index c14670084a..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/verisign-2.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/verisign.ico b/lms/askbot/skins/common/media/jquery-openid/images/verisign.ico deleted file mode 100755 index 3953af9319..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/verisign.ico and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/vidoop.ico b/lms/askbot/skins/common/media/jquery-openid/images/vidoop.ico deleted file mode 100755 index bbd9a0d50f..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/vidoop.ico and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/vidoop.png b/lms/askbot/skins/common/media/jquery-openid/images/vidoop.png deleted file mode 100755 index 032c9e9897..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/vidoop.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/wordpress.ico b/lms/askbot/skins/common/media/jquery-openid/images/wordpress.ico deleted file mode 100755 index 31b7d2c2b7..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/wordpress.ico and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/wordpress.png b/lms/askbot/skins/common/media/jquery-openid/images/wordpress.png deleted file mode 100755 index ee29f0cf1a..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/wordpress.png and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/images/yahoo.gif b/lms/askbot/skins/common/media/jquery-openid/images/yahoo.gif deleted file mode 100755 index 614910a9d3..0000000000 Binary files a/lms/askbot/skins/common/media/jquery-openid/images/yahoo.gif and /dev/null differ diff --git a/lms/askbot/skins/common/media/jquery-openid/jquery.openid.js b/lms/askbot/skins/common/media/jquery-openid/jquery.openid.js deleted file mode 100644 index 249413b919..0000000000 --- a/lms/askbot/skins/common/media/jquery-openid/jquery.openid.js +++ /dev/null @@ -1,440 +0,0 @@ -$.fn.authenticator = function() { - var signin_page = $(this); - var signin_form = $('#signin-form'); - var openid_login_token_input = $('input[name=openid_login_token]'); - var openid_login_token_input_fields = $('#openid-fs'); - var provider_name_input = $('input[name=login_provider_name]'); - var email_input_fields = $('#email-input-fs'); - var account_recovery_heading = $('#account-recovery-heading'); - var account_recovery_hint = $('#account-recovery-form>.hint'); - var account_recovery_link = $('#account-recovery-form>.hint>span.link'); - var account_recovery_text_span = $('#account-recovery-form>.hint>span.text'); - var password_input_fields = $('#password-fs'); - var existing_login_methods_div = $('#existing-login-methods'); - var openid_submit_button = $('input[name=openid_login_with_extra_token]'); - var existing_login_methods = {}; - - var account_recovery_question_text = account_recovery_heading.html(); - var account_recovery_prompt_text = account_recovery_text_span.html(); - - var setup_click_handler = function(elements, handler_function){ - elements.unbind('click').click(handler_function); - }; - - var setup_enter_key_handler = function(elements, handler_function){ - elements.each( - function(index, element){ - $(element).unbind('keypress').keypress( - function(e){ - if ((e.which && e.which == 13)||(e.keyCode && e.keyCode == 13)){ - if (handler_function){ - return handler_function(); - } - else { - element.click(); - return false; - } - } - } - ); - } - ); - }; - - var setup_event_handlers = function(elements, handler_function){ - setup_click_handler(elements, handler_function); - setup_enter_key_handler(elements); - }; - - var get_provider_name = function(row_el){ - var row = $(row_el); - var name_span = row.find('.ab-provider-name'); - return provider_name = $.trim(name_span.html()); - }; - - var read_existing_login_methods = function(){ - $('.ab-provider-row').each( - function(i, provider_row){ - var provider_name = get_provider_name(provider_row); - existing_login_methods[provider_name] = true; - } - ); - }; - - var setup_login_method_deleters = function(){ - $('.ab-provider-row').each( - function(i, provider_row){ - var provider_name = get_provider_name(provider_row); - var remove_button = $( - provider_row - ).find('button'); - remove_button.click( - function(){ - var message = interpolate(gettext('Are you sure you want to remove your %s login?'), [provider_name]); - if (confirm(message)){ - $.ajax({ - type: 'POST', - url: authUrl + 'delete_login_method/',//url!!! - data: {provider_name: provider_name}, - success: function(data, text_status, xhr){ - $(provider_row).remove(); - delete existing_login_methods[provider_name]; - provider_count -=1; - if (provider_count < 0){ - provider_count === 0; - } - if (provider_count === 0){ - $('#ab-existing-login-methods').remove(); - $('#ab-show-login-methods').remove(); - $('h1').html( - gettext("Please add one or more login methods.") - ); - $('#login-intro').html( - gettext("You don\'t have a method to log in right now, please add one or more by clicking any of the icons below.") - ); - existing_login_methods = null; - } - } - }); - } - } - ); - } - ); - } - - var submit_login_with_password = function(){ - var username = $('#id_username'); - var password = $('#id_password'); - - if (username.val().length < 1){ - username.focus(); - return false; - } - if (password.val().length < 1){ - password.focus(); - return false; - } - return true; - }; - - var submit_change_password = function(){ - var newpass = $('#id_new_password'); - var newpass_retyped = $('#id_new_password_retyped'); - if (newpass.val().length < 1){ - newpass.focus(); - return false - } - if (newpass_retyped.val().length < 1){ - newpass_retyped.focus(); - return false; - } - if (newpass.val() !== newpass_retyped.val()){ - newpass_retyped.after( - '' + - gettext('passwords do not match') + - '' - ); - newpass.val('').focus(); - newpass_retyped.val(''); - return false; - } - return true; - }; - - //validator, may be extended to check url for openid - var submit_with_extra_openid_token = function() { - if (openid_login_token_input.val().length < 1) { - openid_login_token_input.focus(); - return false; - } - return true; - }; - - var insert_login_list_enabler = function(){ - var enabler = $('#login-list-enabler'); - if (enabler.is('p#login-list-enabler')){ - enabler.show(); - } - else { - enabler = $( - '

' + - gettext('Show/change current login methods') + - '

'); - setup_event_handlers( - enabler, - function(){ - if (askbot['settings']['signin_always_show_local_login'] === false){ - password_input_fields.hide(); - } - openid_login_token_input_fields.hide(); - enabler.hide(); - existing_login_methods_div.show(); - } - ); - existing_login_methods_div.after(enabler); - } - }; - - var reset_password_input_fields = function(){ - if (userIsAuthenticated){ - $('#id_new_password').val(''); - $('#id_new_password_retyped').val(''); - } - else { - $('#id_username').val(''); - $('#id_password').val(''); - } - }; - - var reset_form = function(){ - openid_login_token_input_fields.hide(); - if (askbot['settings']['signin_always_show_local_login'] === false){ - password_input_fields.hide(); - } - reset_password_input_fields(); - if (userIsAuthenticated === false){ - email_input_fields.hide(); - account_recovery_heading.hide(); - account_recovery_link.show(); - account_recovery_hint.show(); - $('#account-recovery-form>p.hint').css('margin-top','10px'); - account_recovery_text_span.html(account_recovery_question_text).show(); - } - else { - if (existing_login_methods !== null){ - existing_login_methods_div.hide(); - insert_login_list_enabler(); - } - } - }; - - var reset_form_and_errors = function(){ - reset_form(); - $('.error').remove(); - } - - var set_provider_name = function(element){ - var provider_name = element.attr('name'); - provider_name_input.val(provider_name); - }; - - var show_openid_input_fields = function(provider_name){ - reset_form_and_errors(); - var token_name = extra_token_name[provider_name] - if (userIsAuthenticated){ - $('#openid-heading').html( - interpolate(gettext('Please enter your %s, then proceed'), [token_name]) - ); - var button_text = gettext('Connect your %(provider_name)s account to %(site)s'); - var data = { - provider_name: provider_name, - site: siteName - } - button_text = interpolate(button_text, data, true); - openid_submit_button.val(button_text); - } - else { - $('#openid-heading>span').html(token_name); - } - openid_login_token_input_fields.show(); - openid_login_token_input.focus(); - }; - - var start_simple_login = function() { - //$('#openid_form .providers td').removeClass('highlight'); - //$li.addClass('highlight'); - set_provider_name($(this)); - signin_form.submit(); - return true; - }; - - var start_login_with_extra_openid_token = function() { - show_openid_input_fields($(this).attr('name')); - set_provider_name($(this)); - - setup_enter_key_handler( - openid_login_token_input, - function(){ - openid_submit_button.click(); - return false; - } - ); - - setup_event_handlers( - openid_submit_button, - function(){ - signin_form.unbind( - 'submit' - ).submit( - submit_with_extra_openid_token - ); - } - ); - return false; - }; - - var start_facebook_login = function(){ - set_provider_name($(this)); - if (typeof FB != 'undefined'){ - FB.getLoginStatus(function(response){ - if (response.authResponse){ - signin_form.submit(); - } - else { - if (FB.getAuthResponse()){ - signin_form.submit(); - } - FB.login(); - } - }); - } - return false; - }; - - var start_password_login_or_change = function(){ - //called upon clicking on one of the password login buttons - reset_form_and_errors(); - set_provider_name($(this)); - var provider_name = $(this).attr('name'); - return setup_password_login_or_change(provider_name); - }; - - var init_always_visible_password_login = function(){ - reset_form(); - //will break wordpress and ldap - provider_name_input.val('local'); - setup_password_login_or_change('local'); - }; - - var setup_password_login_or_change = function(provider_name){ - var token_name = extra_token_name[provider_name] - var password_action_input = $('input[name=password_action]'); - if (userIsAuthenticated === true){ - var password_button = $('input[name=change_password]'); - var submit_action = submit_change_password; - if (provider_name === 'local'){ - var provider_cleaned_name = siteName; - } - else { - var provider_cleaned_name = provider_name; - } - if (existing_login_methods && existing_login_methods[provider_name]){ - var password_heading_text = interpolate(gettext('Change your %s password'), [provider_cleaned_name]) - var password_button_text = gettext('Change password') - } - else { - var password_heading_text = interpolate(gettext('Create a password for %s'), [provider_cleaned_name]) - var password_button_text = gettext('Create password') - } - $('#password-heading').html( - password_heading_text - ) - password_button.val(password_button_text); - password_action_input.val('change_password'); - var focus_input = $('#id_new_password'); - var submittable_input = $('#id_new_password_retyped'); - } - else{ - $('#password-heading>span').html(token_name); - var password_button = $('input[name=login_with_password]'); - var submit_action = submit_login_with_password; - var create_pw_link = $('a.create-password-account') - if (create_pw_link.length > 0){ - create_pw_link.html(gettext('Create a password-protected account')); - var url = create_pw_link.attr('href'); - if (url.indexOf('?') !== -1){ - url = url.replace(/\?.*$/,'?login_provider=' + provider_name); - } - else{ - url += '?login_provider=' + provider_name; - } - create_pw_link.attr('href', url); - } - password_action_input.val('login'); - var focus_input = $('#id_username'); - var submittable_input = $('#id_password'); - } - password_input_fields.show(); - focus_input.focus(); - - var submit_password_login = function(){ - signin_form.unbind('submit').submit(submit_action); - }; - - setup_enter_key_handler( - submittable_input, - function() { - password_button.click(); - return false; - } - ); - setup_event_handlers(password_button, submit_password_login); - return false; - }; - - var start_account_recovery = function(){ - reset_form_and_errors(); - account_recovery_hint.hide(); - account_recovery_heading.css('margin-bottom', '0px'); - account_recovery_heading.html(account_recovery_prompt_text).show(); - email_input_fields.show(); - $('#id_email').focus(); - }; - - var clear_password_fields = function(){ - $('#id_password').val(''); - $('#id_new_password').val(''); - $('#id_new_password_retyped').val(''); - }; - - var setup_default_handlers = function(){ - setup_event_handlers( - signin_page.find('input.openid-direct'), - start_simple_login - ); - - setup_event_handlers( - signin_page.find('input.openid-username'), - start_login_with_extra_openid_token - ); - - setup_event_handlers( - signin_page.find('input.openid-generic'), - start_login_with_extra_openid_token - ); - - setup_event_handlers( - signin_page.find('input.facebook'), - start_facebook_login - ); - - setup_event_handlers( - signin_page.find('input.oauth'), - start_simple_login - ); - - setup_event_handlers( - signin_page.find('input.password'), - start_password_login_or_change - ); - setup_event_handlers( - signin_page.find('input.wordpress_site'), - start_password_login_or_change - ); - - setup_event_handlers(account_recovery_link, start_account_recovery); - - if (userIsAuthenticated){ - read_existing_login_methods(); - setup_login_method_deleters(); - } - }; - - setup_default_handlers(); - if (askbot['settings']['signin_always_show_local_login'] === true){ - init_always_visible_password_login(); - } - clear_password_fields(); - return this; -}; diff --git a/lms/askbot/skins/common/media/jquery-openid/openid.css b/lms/askbot/skins/common/media/jquery-openid/openid.css deleted file mode 100644 index 0028722442..0000000000 --- a/lms/askbot/skins/common/media/jquery-openid/openid.css +++ /dev/null @@ -1,39 +0,0 @@ -div#login-icons {margin:10px 0 0 0;padding:10px;border:#eee 1px solid;} -ul.login-icons {width: 450px; margin:0;padding:0;text-align:left; list-style-type:none; display:block;} -ul.login-icons li {display:inline;} -ul.large input {height: 40px; width: 90px;border:1px solid #ccc;margin:0 5px 5px 0;} -.openid-signin h2 {margin-top:15px;} -.openid-signin h2#account-recovery-heading {margin-bottom:2px;} -#account-recovery-form p.hint a {color:#1b79bd; text-decoration: none;} -#account-recovery-form p.hint a:hover {text-decoration: underline;} -.openid-signin fieldset { border-style:none;margin:0;padding:0;} -.openid-signin p {margin:0;padding:0}; -.openid-signin p.hint {color: #555;} -.openid-signin #password-fs label {width:100px;margin-top:5px;text-align:left;} -.openid-signin #password-fs .hint {margin-bottom:5px} -#password-fs a {padding-left:5px;} -/*#signin-form #account-recovery-form input {cursor:pointer;} -#signin-form #account-recovery-form input.text {cursor:default;}*/ - -table.login { text-align: right;} - -.openid-signin .submit-b { - cursor: pointer; /*letter-spacing:1px;*/ - margin: 0 0 2px 0; - vertical-align: middle; -} - -.openid-signin .highlight { -moz-border-radius:4px; -webkit-border-radius:4px; background-color: #FD6} - -ul.providers { - display: block; -} - -.openid-signin th { - color: #555; - font-weight: normal; -} - -.openid-signin .ab-provider-name { - font-weight: bold; -} diff --git a/lms/askbot/skins/common/media/js/autocompleter.js b/lms/askbot/skins/common/media/js/autocompleter.js deleted file mode 100644 index a7c5431592..0000000000 --- a/lms/askbot/skins/common/media/js/autocompleter.js +++ /dev/null @@ -1,766 +0,0 @@ -/** - * AutoCompleter Object, refactored closure style from - * jQuery autocomplete plugin - * @param {Object=} options Settings - * @constructor - */ -var AutoCompleter = function(options) { - - /** - * Default options for autocomplete plugin - */ - var defaults = { - autocompleteMultiple: true, - multipleSeparator: ' ',//a single character - inputClass: 'acInput', - loadingClass: 'acLoading', - resultsClass: 'acResults', - selectClass: 'acSelect', - queryParamName: 'q', - limitParamName: 'limit', - extraParams: {}, - lineSeparator: '\n', - cellSeparator: '|', - minChars: 2, - maxItemsToShow: 10, - delay: 400, - useCache: true, - maxCacheLength: 10, - matchSubset: true, - matchCase: false, - matchInside: true, - mustMatch: false, - preloadData: false, - selectFirst: false, - stopCharRegex: /\s+/, - selectOnly: false, - formatItem: null, // TBD - onItemSelect: false, - autoFill: false, - filterResults: true, - sortResults: true, - sortFunction: false, - onNoMatch: false - }; - - /** - * Options dictionary - * @type Object - * @private - */ - this.options = $.extend({}, defaults, options); - - /** - * Cached data - * @type Object - * @private - */ - this.cacheData_ = {}; - - /** - * Number of cached data items - * @type number - * @private - */ - this.cacheLength_ = 0; - - /** - * Class name to mark selected item - * @type string - * @private - */ - this.selectClass_ = 'jquery-autocomplete-selected-item'; - - /** - * Handler to activation timeout - * @type ?number - * @private - */ - this.keyTimeout_ = null; - - /** - * Last key pressed in the input field (store for behavior) - * @type ?number - * @private - */ - this.lastKeyPressed_ = null; - - /** - * Last value processed by the autocompleter - * @type ?string - * @private - */ - this.lastProcessedValue_ = null; - - /** - * Last value selected by the user - * @type ?string - * @private - */ - this.lastSelectedValue_ = null; - - /** - * Is this autocompleter active? - * @type boolean - * @private - */ - this.active_ = false; - - /** - * Is it OK to finish on blur? - * @type boolean - * @private - */ - this.finishOnBlur_ = true; - - this.options.minChars = parseInt(this.options.minChars, 10); - if (isNaN(this.options.minChars) || this.options.minChars < 1) { - this.options.minChars = 2; - } - - this.options.maxItemsToShow = parseInt(this.options.maxItemsToShow, 10); - if (isNaN(this.options.maxItemsToShow) || this.options.maxItemsToShow < 1) { - this.options.maxItemsToShow = 10; - } - - this.options.maxCacheLength = parseInt(this.options.maxCacheLength, 10); - if (isNaN(this.options.maxCacheLength) || this.options.maxCacheLength < 1) { - this.options.maxCacheLength = 10; - } - - if (this.options['preloadData'] === true){ - this.fetchRemoteData('', function(){}); - } -}; -inherits(AutoCompleter, WrappedElement); - -AutoCompleter.prototype.decorate = function(element){ - - /** - * Init DOM elements repository - */ - this._element = element; - - /** - * Switch off the native autocomplete - */ - this._element.attr('autocomplete', 'off'); - - /** - * Create DOM element to hold results - */ - this._results = $('
').hide(); - if (this.options.resultsClass) { - this._results.addClass(this.options.resultsClass); - } - this._results.css({ - position: 'absolute' - }); - $('body').append(this._results); - - this.setEventHandlers(); -}; - -AutoCompleter.prototype.setEventHandlers = function(){ - /** - * Shortcut to self - */ - var self = this; - - /** - * Attach keyboard monitoring to $elem - */ - self._element.keydown(function(e) { - self.lastKeyPressed_ = e.keyCode; - switch(self.lastKeyPressed_) { - - case 38: // up - e.preventDefault(); - if (self.active_) { - self.focusPrev(); - } else { - self.activate(); - } - return false; - break; - - case 40: // down - e.preventDefault(); - if (self.active_) { - self.focusNext(); - } else { - self.activate(); - } - return false; - break; - - case 9: // tab - case 13: // return - if (self.active_) { - e.preventDefault(); - self.selectCurrent(); - return false; - } - break; - - case 27: // escape - if (self.active_) { - e.preventDefault(); - self.finish(); - return false; - } - break; - - default: - self.activate(); - - } - }); - self._element.blur(function() { - if (self.finishOnBlur_) { - setTimeout(function() { self.finish(); }, 200); - } - }); -}; - -AutoCompleter.prototype.position = function() { - var offset = this._element.offset(); - this._results.css({ - top: offset.top + this._element.outerHeight(), - left: offset.left - }); -}; - -AutoCompleter.prototype.cacheRead = function(filter) { - var filterLength, searchLength, search, maxPos, pos; - if (this.options.useCache) { - filter = String(filter); - filterLength = filter.length; - if (this.options.matchSubset) { - searchLength = 1; - } else { - searchLength = filterLength; - } - while (searchLength <= filterLength) { - if (this.options.matchInside) { - maxPos = filterLength - searchLength; - } else { - maxPos = 0; - } - pos = 0; - while (pos <= maxPos) { - search = filter.substr(0, searchLength); - if (this.cacheData_[search] !== undefined) { - return this.cacheData_[search]; - } - pos++; - } - searchLength++; - } - } - return false; -}; - -AutoCompleter.prototype.cacheWrite = function(filter, data) { - if (this.options.useCache) { - if (this.cacheLength_ >= this.options.maxCacheLength) { - this.cacheFlush(); - } - filter = String(filter); - if (this.cacheData_[filter] !== undefined) { - this.cacheLength_++; - } - return this.cacheData_[filter] = data; - } - return false; -}; - -AutoCompleter.prototype.cacheFlush = function() { - this.cacheData_ = {}; - this.cacheLength_ = 0; -}; - -AutoCompleter.prototype.callHook = function(hook, data) { - var f = this.options[hook]; - if (f && $.isFunction(f)) { - return f(data, this); - } - return false; -}; - -AutoCompleter.prototype.activate = function() { - var self = this; - var activateNow = function() { - self.activateNow(); - }; - var delay = parseInt(this.options.delay, 10); - if (isNaN(delay) || delay <= 0) { - delay = 250; - } - if (this.keyTimeout_) { - clearTimeout(this.keyTimeout_); - } - this.keyTimeout_ = setTimeout(activateNow, delay); -}; - -AutoCompleter.prototype.activateNow = function() { - var value = this.getValue(); - if (value !== this.lastProcessedValue_ && value !== this.lastSelectedValue_) { - if (value.length >= this.options.minChars) { - this.active_ = true; - this.lastProcessedValue_ = value; - this.fetchData(value); - } - } -}; - -AutoCompleter.prototype.fetchData = function(value) { - if (this.options.data) { - this.filterAndShowResults(this.options.data, value); - } else { - var self = this; - this.fetchRemoteData(value, function(remoteData) { - self.filterAndShowResults(remoteData, value); - }); - } -}; - -AutoCompleter.prototype.fetchRemoteData = function(filter, callback) { - var data = this.cacheRead(filter); - if (data) { - callback(data); - } else { - var self = this; - if (this._element){ - this._element.addClass(this.options.loadingClass); - } - var ajaxCallback = function(data) { - var parsed = false; - if (data !== false) { - parsed = self.parseRemoteData(data); - self.options.data = parsed;//cache data forever - E.F. - self.cacheWrite(filter, parsed); - } - if (self._element){ - self._element.removeClass(self.options.loadingClass); - } - callback(parsed); - }; - $.ajax({ - url: this.makeUrl(filter), - success: ajaxCallback, - error: function() { - ajaxCallback(false); - } - }); - } -}; - -AutoCompleter.prototype.setOption = function(name, value){ - this.options[name] = value; -}; - -AutoCompleter.prototype.setExtraParam = function(name, value) { - var index = $.trim(String(name)); - if (index) { - if (!this.options.extraParams) { - this.options.extraParams = {}; - } - if (this.options.extraParams[index] !== value) { - this.options.extraParams[index] = value; - this.cacheFlush(); - } - } -}; - -AutoCompleter.prototype.makeUrl = function(param) { - var self = this; - var url = this.options.url; - var params = $.extend({}, this.options.extraParams); - // If options.queryParamName === false, append query to url - // instead of using a GET parameter - if (this.options.queryParamName === false) { - url += encodeURIComponent(param); - } else { - params[this.options.queryParamName] = param; - } - - if (this.options.limitParamName && this.options.maxItemsToShow) { - params[this.options.limitParamName] = this.options.maxItemsToShow; - } - - var urlAppend = []; - $.each(params, function(index, value) { - urlAppend.push(self.makeUrlParam(index, value)); - }); - if (urlAppend.length) { - url += url.indexOf('?') == -1 ? '?' : '&'; - url += urlAppend.join('&'); - } - return url; -}; - -AutoCompleter.prototype.makeUrlParam = function(name, value) { - return String(name) + '=' + encodeURIComponent(value); -}; - -/** - * Sanitize CR and LF, then split into lines - */ -AutoCompleter.prototype.splitText = function(text) { - return String(text).replace(/(\r\n|\r|\n)/g, '\n').split(this.options.lineSeparator); -}; - -AutoCompleter.prototype.parseRemoteData = function(remoteData) { - var value, lines, i, j, data; - var results = []; - var lines = this.splitText(remoteData); - for (i = 0; i < lines.length; i++) { - var line = lines[i].split(this.options.cellSeparator); - data = []; - for (j = 0; j < line.length; j++) { - data.push(unescape(line[j])); - } - value = data.shift(); - results.push({ value: unescape(value), data: data }); - } - return results; -}; - -AutoCompleter.prototype.filterAndShowResults = function(results, filter) { - this.showResults(this.filterResults(results, filter), filter); -}; - -AutoCompleter.prototype.filterResults = function(results, filter) { - - var filtered = []; - var value, data, i, result, type, include; - var regex, pattern, testValue; - - for (i = 0; i < results.length; i++) { - result = results[i]; - type = typeof result; - if (type === 'string') { - value = result; - data = {}; - } else if ($.isArray(result)) { - value = result[0]; - data = result.slice(1); - } else if (type === 'object') { - value = result.value; - data = result.data; - } - value = String(value); - if (value > '') { - if (typeof data !== 'object') { - data = {}; - } - if (this.options.filterResults) { - pattern = String(filter); - testValue = String(value); - if (!this.options.matchCase) { - pattern = pattern.toLowerCase(); - testValue = testValue.toLowerCase(); - } - include = testValue.indexOf(pattern); - if (this.options.matchInside) { - include = include > -1; - } else { - include = include === 0; - } - } else { - include = true; - } - if (include) { - filtered.push({ value: value, data: data }); - } - } - } - - if (this.options.sortResults) { - filtered = this.sortResults(filtered, filter); - } - - if (this.options.maxItemsToShow > 0 && this.options.maxItemsToShow < filtered.length) { - filtered.length = this.options.maxItemsToShow; - } - - return filtered; - -}; - -AutoCompleter.prototype.sortResults = function(results, filter) { - var self = this; - var sortFunction = this.options.sortFunction; - if (!$.isFunction(sortFunction)) { - sortFunction = function(a, b, f) { - return self.sortValueAlpha(a, b, f); - }; - } - results.sort(function(a, b) { - return sortFunction(a, b, filter); - }); - return results; -}; - -AutoCompleter.prototype.sortValueAlpha = function(a, b, filter) { - a = String(a.value); - b = String(b.value); - if (!this.options.matchCase) { - a = a.toLowerCase(); - b = b.toLowerCase(); - } - if (a > b) { - return 1; - } - if (a < b) { - return -1; - } - return 0; -}; - -AutoCompleter.prototype.showResults = function(results, filter) { - var self = this; - var $ul = $(''); - var i, result, $li, extraWidth, first = false, $first = false; - var numResults = results.length; - for (i = 0; i < numResults; i++) { - result = results[i]; - $li = $('
  • ' + this.showResult(result.value, result.data) + '
  • '); - $li.data('value', result.value); - $li.data('data', result.data); - $li.click(function() { - var $this = $(this); - self.selectItem($this); - }).mousedown(function() { - self.finishOnBlur_ = false; - }).mouseup(function() { - self.finishOnBlur_ = true; - }); - $ul.append($li); - if (first === false) { - first = String(result.value); - $first = $li; - $li.addClass(this.options.firstItemClass); - } - if (i == numResults - 1) { - $li.addClass(this.options.lastItemClass); - } - } - - // Alway recalculate position before showing since window size or - // input element location may have changed. This fixes #14 - this.position(); - - this._results.html($ul).show(); - extraWidth = this._results.outerWidth() - this._results.width(); - this._results.width(this._element.outerWidth() - extraWidth); - $('li', this._results).hover( - function() { self.focusItem(this); }, - function() { /* void */ } - ); - if (this.autoFill(first, filter)) { - this.focusItem($first); - } -}; - -AutoCompleter.prototype.showResult = function(value, data) { - if ($.isFunction(this.options.showResult)) { - return this.options.showResult(value, data); - } else { - return value; - } -}; - -AutoCompleter.prototype.autoFill = function(value, filter) { - var lcValue, lcFilter, valueLength, filterLength; - if (this.options.autoFill && this.lastKeyPressed_ != 8) { - lcValue = String(value).toLowerCase(); - lcFilter = String(filter).toLowerCase(); - valueLength = value.length; - filterLength = filter.length; - if (lcValue.substr(0, filterLength) === lcFilter) { - this._element.val(value); - this.selectRange(filterLength, valueLength); - return true; - } - } - return false; -}; - -AutoCompleter.prototype.focusNext = function() { - this.focusMove(+1); -}; - -AutoCompleter.prototype.focusPrev = function() { - this.focusMove(-1); -}; - -AutoCompleter.prototype.focusMove = function(modifier) { - var i, $items = $('li', this._results); - modifier = parseInt(modifier, 10); - for (var i = 0; i < $items.length; i++) { - if ($($items[i]).hasClass(this.selectClass_)) { - this.focusItem(i + modifier); - return; - } - } - this.focusItem(0); -}; - -AutoCompleter.prototype.focusItem = function(item) { - var $item, $items = $('li', this._results); - if ($items.length) { - $items.removeClass(this.selectClass_).removeClass(this.options.selectClass); - if (typeof item === 'number') { - item = parseInt(item, 10); - if (item < 0) { - item = 0; - } else if (item >= $items.length) { - item = $items.length - 1; - } - $item = $($items[item]); - } else { - $item = $(item); - } - if ($item) { - $item.addClass(this.selectClass_).addClass(this.options.selectClass); - } - } -}; - -AutoCompleter.prototype.selectCurrent = function() { - var $item = $('li.' + this.selectClass_, this._results); - if ($item.length == 1) { - this.selectItem($item); - } else { - this.finish(); - } -}; - -AutoCompleter.prototype.selectItem = function($li) { - var value = $li.data('value'); - var data = $li.data('data'); - var displayValue = this.displayValue(value, data); - this.lastProcessedValue_ = displayValue; - this.lastSelectedValue_ = displayValue; - - this.setValue(displayValue); - - this.setCaret(displayValue.length); - this.callHook('onItemSelect', { value: value, data: data }); - this.finish(); -}; - -/** - * @return {boolean} true if the symbol matches something that is - * considered content and false otherwise - * @param {string} symbol - a single char string - */ -AutoCompleter.prototype.isContentChar = function(symbol){ - if (symbol.match(this.options['stopCharRegex'])){ - return false; - } else if (symbol === this.options['multipleSeparator']){ - return false; - } else { - return true; - } -}; - -/** - * takes value from the input box - * and saves _selection_start and _selection_end coordinates - * respects settings autocompleteMultiple and - * multipleSeparator - * @return {string} the current word in the - * autocompletable word - */ -AutoCompleter.prototype.getValue = function(){ - var sel = this._element.getSelection(); - var text = this._element.val(); - var pos = sel.start;//estimated start - //find real start - var start = pos; - for (cpos = pos; cpos >= 0; cpos = cpos - 1){ - if (cpos === text.length){ - continue; - } - var symbol = text.charAt(cpos); - if (!this.isContentChar(symbol)){ - break; - } - start = cpos; - } - //find real end - var end = pos; - for (cpos = pos; cpos < text.length; cpos = cpos + 1){ - if (cpos === 0){ - continue; - } - var symbol = text.charAt(cpos); - if (!this.isContentChar(symbol)){ - break; - } - end = cpos; - } - this._selection_start = start; - this._selection_end = end; - return text.substring(start, end); -} - -/** - * sets value of the input box - * by replacing the previous selection - * with the value from the autocompleter - */ -AutoCompleter.prototype.setValue = function(val){ - var prefix = this._element.val().substring(0, this._selection_start); - var postfix = this._element.val().substring(this._selection_end + 1); - this._element.val(prefix + val + postfix); -}; - -AutoCompleter.prototype.displayValue = function(value, data) { - if ($.isFunction(this.options.displayValue)) { - return this.options.displayValue(value, data); - } else { - return value; - } -}; - -AutoCompleter.prototype.finish = function() { - if (this.keyTimeout_) { - clearTimeout(this.keyTimeout_); - } - if (this._element.val() !== this.lastSelectedValue_) { - if (this.options.mustMatch) { - this._element.val(''); - } - this.callHook('onNoMatch'); - } - this._results.hide(); - this.lastKeyPressed_ = null; - this.lastProcessedValue_ = null; - if (this.active_) { - this.callHook('onFinish'); - } - this.active_ = false; -}; - -AutoCompleter.prototype.selectRange = function(start, end) { - var input = this._element.get(0); - if (input.setSelectionRange) { - input.focus(); - input.setSelectionRange(start, end); - } else if (this.createTextRange) { - var range = this.createTextRange(); - range.collapse(true); - range.moveEnd('character', end); - range.moveStart('character', start); - range.select(); - } -}; - -AutoCompleter.prototype.setCaret = function(pos) { - this.selectRange(pos, pos); -}; - diff --git a/lms/askbot/skins/common/media/js/compress.bat b/lms/askbot/skins/common/media/js/compress.bat deleted file mode 100644 index 53d72588d2..0000000000 --- a/lms/askbot/skins/common/media/js/compress.bat +++ /dev/null @@ -1,5 +0,0 @@ -#java -jar yuicompressor-2.4.2.jar --type js --charset utf-8 wmd\wmd.js -o wmd\wmd-min.js -#java -jar yuicompressor-2.4.2.jar --type js --charset utf-8 wmd\showdown.js -o wmd\showdown-min.js -#java -jar yuicompressor-2.4.2.jar --type js --charset utf-8 post.js -o post.pack.js -java -jar yuicompressor-2.4.2.jar --type js --charset utf-8 se_hilite_src.js -o se_hilite.js -pause diff --git a/lms/askbot/skins/common/media/js/editor.js b/lms/askbot/skins/common/media/js/editor.js deleted file mode 100644 index 2d1f567079..0000000000 --- a/lms/askbot/skins/common/media/js/editor.js +++ /dev/null @@ -1,75 +0,0 @@ -/* - jQuery TextAreaResizer plugin - Created on 17th January 2008 by Ryan O'Dell - Version 1.0.4 -*/(function($){var textarea,staticOffset;var iLastMousePos=0;var iMin=32;var grip;$.fn.TextAreaResizer=function(){return this.each(function(){textarea=$(this).addClass('processed'),staticOffset=null;$(this).wrap('
    ').parent().append($('
    ').bind("mousedown",{el:this},startDrag));var grippie=$('div.grippie',$(this).parent())[0];grippie.style.marginRight=(grippie.offsetWidth-$(this)[0].offsetWidth)+'px'})};function startDrag(e){textarea=$(e.data.el);textarea.blur();iLastMousePos=mousePosition(e).y;staticOffset=textarea.height()-iLastMousePos;textarea.css('opacity',0.25);$(document).mousemove(performDrag).mouseup(endDrag);return false}function performDrag(e){var iThisMousePos=mousePosition(e).y;var iMousePos=staticOffset+iThisMousePos;if(iLastMousePos>=(iThisMousePos)){iMousePos-=5}iLastMousePos=iThisMousePos;iMousePos=Math.max(iMin,iMousePos);textarea.height(iMousePos+'px');if(iMousePosoptions.captureLength&&elTxt.toUpperCase()!=timer.text)||(override&&elTxt.length>options.captureLength)){timer.text=elTxt.toUpperCase();timer.cb(elTxt)}};function watchElement(elem){if(elem.type.toUpperCase()=="TEXT"||elem.nodeName.toUpperCase()=="TEXTAREA"){var timer={timer:null,text:jQuery(elem).val().toUpperCase(),cb:options.callback,el:elem,wait:options.wait};if(options.highlight){jQuery(elem).focus(function(){this.select()})}var startWatch=function(evt){var timerWait=timer.wait;var overrideBool=false;if(evt.keyCode==13&&this.type.toUpperCase()=="TEXT"){timerWait=1;overrideBool=true}var timerCallbackFx=function(){checkElement(timer,overrideBool)};clearTimeout(timer.timer);timer.timer=setTimeout(timerCallbackFx,timerWait)};jQuery(elem).keydown(startWatch)}};return this.each(function(index){watchElement(this)})}})(jQuery); -/* -Ajax upload -*/jQuery.extend({createUploadIframe:function(d,b){var a="jUploadFrame"+d;if(window.ActiveXObject){var c=document.createElement(' + diff --git a/lms/templates/press.json b/lms/templates/press.json index e4aeb48675..24e4028bc7 100644 --- a/lms/templates/press.json +++ b/lms/templates/press.json @@ -1,5 +1,617 @@ [ + { + "title": "The Year of the MOOC", + "url": "http://www.nytimes.com/2012/11/04/education/edlife/massive-open-online-courses-are-multiplying-at-a-rapid-pace.html", + "author": "Laura Pappano", + "image": "nyt_logo_178x138.jpeg", + "deck": null, + "publication": "The New York Times", + "publish_date": "November 2, 2012" + }, + { + "title": "The Most Important Education Technology in 200 Years", + "url": "http://www.technologyreview.com/news/506351/the-most-important-education-technology-in-200-years/", + "author": "Antonio Regalado", + "image": "techreview_logo_178x138.jpg", + "deck": null, + "publication": "Technology Review", + "publish_date": "November 2, 2012" + }, + { + "title": "Classroom in the Cloud", + "url": "http://harvardmagazine.com/2012/11/classroom-in-the-cloud", + "author": null, + "image": "harvardmagazine_logo_178x138.jpeg", + "deck": null, + "publication": "Harvard Magazine", + "publish_date": "November-December 2012" + }, + { + "title": "How do you stop online students cheating?", + "url": "http://www.bbc.co.uk/news/business-19661899", + "author": "Sean Coughlan", + "image": "bbc_logo_178x138.jpeg", + "deck": null, + "publication": "BBC", + "publish_date": "October 31, 2012" + }, + { + "title": "VMware to provide software for HarvardX CS50x", + "url": "http://tech.mit.edu/V132/N48/edxvmware.html", + "author": "Stan Gill", + "image": "thetech_logo_178x138.jpg", + "deck": null, + "publication": "The Tech", + "publish_date": "October 26, 2012" + }, + { + "title": "EdX platform integrates into classes", + "url": "http://tech.mit.edu/V132/N48/801edx.html", + "author": "Leon Lin", + "image": "thetech_logo_178x138.jpg", + "deck": null, + "publication": "The Tech", + "publish_date": "October 26, 2012" + }, + { + "title": "VMware Offers Free Software to edX Learners", + "url": "http://campustechnology.com/articles/2012/10/25/vmware-offers-free-virtualization-software-for-edx-computer-science-students.aspx", + "author": "Joshua Bolkan", + "image": "campustech_logo_178x138.jpg", + "deck": "VMware Offers Free Virtualization Software for EdX Computer Science Students", + "publication": "Campus Technology", + "publish_date": "October 25, 2012" + }, + { + "title": "Lone Star moots charges to make Moocs add up", + "url": "http://www.timeshighereducation.co.uk/story.asp?sectioncode=26&storycode=421577&c=1", + "author": "David Matthews", + "image": "timeshighered_logo_178x138.jpg", + "deck": null, + "publication": "Times Higher Education", + "publish_date": "October 25, 2012" + }, + { + "title": "Free, high-quality and with mass appeal", + "url": "http://www.ft.com/intl/cms/s/2/73030f44-d4dd-11e1-9444-00144feabdc0.html#axzz2A9qvk48A", + "author": "Rebecca Knight", + "image": "ft_logo_178x138.jpg", + "deck": null, + "publication": "Financial Times", + "publish_date": "October 22, 2012" + }, + { + "title": "Getting the most out of an online education", + "url": "http://www.reuters.com/article/2012/10/19/us-education-courses-online-idUSBRE89I17120121019", + "author": "Kathleen Kingsbury", + "image": "reuters_logo_178x138.jpg", + "deck": null, + "publication": "Reuters", + "publish_date": "October 19, 2012" + }, + { + "title": "EdX announces partnership with Cengage", + "url": "http://tech.mit.edu/V132/N46/cengage.html", + "author": "Leon Lin", + "image": "thetech_logo_178x138.jpg", + "deck": null, + "publication": "The Tech", + "publish_date": "October 19, 2012" + }, + { + "title": "U Texas System Joins EdX", + "url": "http://campustechnology.com/articles/2012/10/18/u-texas-system-joins-edx.aspx", + "author": "Joshua Bolkan", + "image": "campustech_logo_178x138.jpg", + "deck": null, + "publication": "Campus Technology", + "publish_date": "October 18, 2012" + }, + { + "title": "San Jose State University Runs Blended Learning Course Using edX ", + "url": "http://chronicle.com/blogs/wiredcampus/san-jose-state-u-says-replacing-live-lectures-with-videos-increased-test-scores/40470", + "author": "Alisha Azevedo", + "image": "chroniclehighered_logo_178x138.jpeg", + "deck": "San Jose State U. Says Replacing Live Lectures With Videos Increased Test Scores", + "publication": "Chronicle of Higher Education", + "publish_date": "October 17, 2012" + }, + { + "title": "Online university to charge tuition fees", + "url": "http://www.bbc.co.uk/news/education-19964787", + "author": "Sean Coughlan", + "image": "bbc_logo_178x138.jpeg", + "deck": null, + "publication": "BBC", + "publish_date": "October 17, 2012" + }, + { + "title": "HarvardX marks the spot", + "url": "http://news.harvard.edu/gazette/story/2012/10/harvardx-marks-the-spot/", + "author": "Tania delLuzuriaga", + "image": "harvardgazette_logo_178x138.jpeg", + "deck": null, + "publication": "Harvard Gazette", + "publish_date": "October 17, 2012" + }, + { + "title": "Harvard EdX Enrolls Near 100000 Students for Free Online Classes", + "url": "http://www.collegeclasses.com/harvard-edx-enrolls-near-100000-students-for-free-online-classes/", + "author": "Keith Koong", + "image": "college_classes_logo_178x138.jpg", + "deck": null, + "publication": "CollegeClasses.com", + "publish_date": "October 17, 2012" + }, + { + "title": "Cengage Learning to Provide Book Content and Pedagogy through edX's Not-for-Profit Interactive Study Via the Web", + "url": "http://www.outsellinc.com/our_industry/headlines/1087978", + "author": null, + "image": "outsell_logo_178x138.jpg", + "deck": null, + "publication": "Outsell.com", + "publish_date": "October 17, 2012" + }, + { + "title": "University of Texas System Embraces MOOCs", + "url": "http://www.usnewsuniversitydirectory.com/articles/university-of-texas-system-embraces-moocs_12713.aspx#.UIBLVq7bNzo", + "author": "Chris Hassan", + "image": "usnews_logo_178x138.jpeg", + "deck": null, + "publication": "US News", + "publish_date": "October 17, 2012" + }, + { + "title": "Texas MOOCs for Credit?", + "url": "http://www.insidehighered.com/news/2012/10/16/u-texas-aims-use-moocs-reduce-costs-increase-completion", + "author": "Steve Kolowich", + "image": "insidehighered_logo_178x138.jpg", + "deck": null, + "publication": "Insider Higher Ed", + "publish_date": "October 16, 2012" + }, + { + "title": "University of Texas Joins Harvard-Founded edX", + "url": "http://www.thecrimson.com/article/2012/10/16/University-of-Texas-edX/", + "author": "Kevin J. Wu", + "image": "harvardcrimson_logo_178x138.jpeg", + "deck": null, + "publication": "The Crimson", + "publish_date": "October 16, 2012" + }, + { + "title": "Entire UT System to join edX", + "url": "http://tech.mit.edu/V132/N45/edx.html", + "author": "Ethan A. Solomon", + "image": "thetech_logo_178x138.jpg", + "deck": null, + "publication": "The Tech", + "publish_date": "October 16, 2012" + }, + { + "title": "First University System Joins edX Platform", + "url": "http://www.govtech.com/education/First-University-System-Joins-edX-platform.html", + "author": "Tanya Roscoria", + "image": "govtech_logo_178x138.jpg", + "deck": null, + "publication": "GovTech.com", + "publish_date": "October 16, 2012" + }, + { + "title": "University of Texas Joining Harvard, MIT Online Venture", + "url": "http://www.bloomberg.com/news/2012-10-15/university-of-texas-joining-harvard-mit-online-venture.html", + "author": "David Mildenberg", + "image": "bloomberg_logo_178x138.jpeg", + "deck": null, + "publication": "Bloomberg", + "publish_date": "October 15, 2012" + }, + { + "title": "University of Texas Joining Harvard, MIT Online Venture", + "url": "http://www.businessweek.com/news/2012-10-15/university-of-texas-joining-harvard-mit-online-venture", + "author": "David Mildenberg", + "image": "busweek_logo_178x138.jpg", + "deck": null, + "publication": "Business Week", + "publish_date": "October 15, 2012" + }, + { + "title": "Univ. of Texas joins online course program edX", + "url": "http://news.yahoo.com/univ-texas-joins-online-course-program-edx-172202035--finance.html", + "author": "Chris Tomlinson", + "image": "ap_logo_178x138.jpg", + "deck": null, + "publication": "Associated Press", + "publish_date": "October 15, 2012" + }, + { + "title": "U. of Texas Plans to Join edX", + "url": "http://www.insidehighered.com/quicktakes/2012/10/15/u-texas-plans-join-edx", + "author": null, + "image": "insidehighered_logo_178x138.jpg", + "deck": null, + "publication": "Inside Higher Ed", + "publish_date": "October 15, 2012" + }, + { + "title": "U. of Texas System Is Latest to Sign Up With edX for Online Courses", + "url": "http://chronicle.com/blogs/wiredcampus/u-of-texas-system-is-latest-to-sign-up-with-edx-for-online-courses/40440", + "author": "Alisha Azevedo", + "image": "chroniclehighered_logo_178x138.jpeg", + "deck": null, + "publication": "Chronicle of Higher Education", + "publish_date": "October 15, 2012" + }, + { + "title": "First University System Joins edX", + "url": "http://www.centerdigitaled.com/news/First-University-System-Joins-edX.html", + "author": "Tanya Roscoria", + "image": "center_digeducation_logo_178x138.jpg", + "deck": null, + "publication": "Center for Digital Education", + "publish_date": "October 15, 2012" + }, + { + "title": "University of Texas Joins Harvard, MIT in edX Online Learning Venture", + "url": "http://harvardmagazine.com/2012/10/university-of-texas-joins-harvard-mit-edx", + "author": null, + "image": "harvardmagazine_logo_178x138.jpeg", + "deck": null, + "publication": "Harvard Magazine", + "publish_date": "October 15, 2012" + }, + { + "title": "University of Texas joins edX", + "url": "http://www.masshightech.com/stories/2012/10/15/daily13-University-of-Texas-joins-edX.html", + "author": "Don Seiffert", + "image": "masshightech_logo_178x138.jpg", + "deck": null, + "publication": "MassHighTech", + "publish_date": "October 15, 2012" + }, + { + "title": "UT System to Forge Partnership with EdX", + "url": "http://www.texastribune.org/texas-education/higher-education/ut-system-announce-partnership-edx/", + "author": "Reeve Hamilton", + "image": "texastribune_logo_178x138.jpg", + "deck": null, + "publication": "Texas Tribune", + "publish_date": "October 15, 2012" + }, + { + "title": "UT System puts $5 million into online learning initiative", + "url": "http://www.statesman.com/news/news/local/ut-system-puts-5-million-into-online-learning-init/nSdd5/", + "author": "Ralph K.M. Haurwitz", + "image": "austin_statesman_logo_178x138.jpg", + "deck": null, + "publication": "The Austin Statesman", + "publish_date": "October 15, 2012" + }, + { + "title": "Harvard’s Online Classes Sound Pretty Popular", + "url": "http://blogs.bostonmagazine.com/boston_daily/2012/10/15/harvards-online-classes-sound-pretty-popular/", + "author": "Eric Randall", + "image": "bostonmag_logo_178x138.jpg", + "deck": null, + "publication": "Boston Magazine", + "publish_date": "October 15, 2012" + }, + { + "title": "Harvard Debuts Free Online Courses", + "url": "http://www.ibtimes.com/harvard-debuts-free-online-courses-846629", + "author": "Eli Epstein", + "image": "ibtimes_logo_178x138.jpg", + "deck": null, + "publication": "International Business Times", + "publish_date": "October 15, 2012" + }, + { + "title": "UT System Joins Online Learning Effort", + "url": "http://www.texastechpulse.com/ut_system_joins_online_learning_effort/s-0045632.html", + "author": null, + "image": "texaspulse_logo_178x138.jpg", + "deck": null, + "publication": "Texas Tech Pulse", + "publish_date": "October 15, 2012" + }, + { + "title": "University of Texas Joins edX", + "url": "http://www.onlinecolleges.net/2012/10/15/university-of-texas-joins-edx/", + "author": "Alex Wukman", + "image": "online_colleges_logo_178x138.jpg", + "deck": null, + "publication": "Online Colleges.net", + "publish_date": "October 15, 2012" + }, + { + "title": "100,000 sign up for first Harvard online courses", + "url": "http://www.masslive.com/news/index.ssf/2012/10/100000_sign_up_for_first_harva.html", + "author": null, + "image": "ap_logo_178x138.jpg", + "deck": null, + "publication": "Associated Press", + "publish_date": "October 15, 2012" + }, + { + "title": "In the new Listener, on sale from 14.10.12", + "url": "http://www.listener.co.nz/commentary/the-internaut/in-the-new-listener-on-sale-from-14-10-12/", + "author": null, + "image": "nz_listener_logo_178x138.jpg", + "deck": null, + "publication": "The Listener", + "publish_date": "October 14, 2012" + }, + { + "title": "HarvardX Classes to Begin Tomorrow", + "url": "http://www.thecrimson.com/article/2012/10/14/harvardx-classes-start-tomorrow/", + "author": "Hana N. Rouse", + "image": "harvardcrimson_logo_178x138.jpeg", + "deck": null, + "publication": "The Crimson", + "publish_date": "October 14, 2012" + }, + { + "title": "Online Harvard University courses draw well", + "url": "http://bostonglobe.com/metro/2012/10/14/harvard-launching-free-online-courses-sign-for-first-two-classes/zBDuHY0zqD4OESrXWfEgML/story.html", + "author": "Brock Parker", + "image": "bostonglobe_logo_178x138.jpeg", + "deck": null, + "publication": "Boston Globe", + "publish_date": "October 14, 2012" + }, + { + "title": "Harvard ready to launch its first free online courses Monday", + "url": "http://www.boston.com/yourtown/news/cambridge/2012/10/harvard_ready_to_launch_its_fi.html", + "author": "Brock Parker", + "image": "bostonglobe_logo_178x138.jpeg", + "deck": null, + "publication": "Boston Globe", + "publish_date": "October 12, 2012" + }, + { + "title": "edX: Harvard's New Domain", + "url": "http://www.thecrimson.com/article/2012/10/4/edx-scrutiny-online-learning/ ", + "author": "Delphine Rodrik and Kevin Su", + "image": "harvardcrimson_logo_178x138.jpeg", + "deck": null, + "publication": "The Crimson", + "publish_date": "October 4, 2012" + }, + { + "title": "New Experiments in the edX Higher Ed Petri Dish", + "url": "http://www.nonprofitquarterly.org/policysocial-context/21116-new-experiments-in-the-edx-higher-ed-petri-dish.html", + "author": "Michelle Shumate", + "image": "npq_logo_178x138.jpg", + "deck": null, + "publication": "Non-Profit Quarterly", + "publish_date": "October 4, 2012" + }, + { + "title": "What Campuses Can Learn From Online Teaching", + "url": "http://online.wsj.com/article/SB10000872396390444620104578012262106378182.html?mod=googlenews_wsj", + "author": "Rafael Reif", + "image": "wsj_logo_178x138.jpg", + "deck": null, + "publication": "Wall Street Journal", + "publish_date": "October 2, 2012" + }, + { + "title": "MongoDB courses to be offered via edX", + "url": "http://tech.mit.edu/V132/N42/edxmongodb.html", + "author": "Jake H. Gunter", + "image": "thetech_logo_178x138.jpg", + "deck": null, + "publication": "The Tech", + "publish_date": "October 2, 2012" + }, + { + "title": "5 Ways That edX Could Change Education", + "url": "http://chronicle.com/article/5-Ways-That-edX-Could-Change/134672/", + "author": "Marc Parry", + "image": "chroniclehighered_logo_178x138.jpeg", + "deck": null, + "publication": "Chronicle of Higher Education", + "publish_date": "October 1, 2012" + }, + { + "title": "MIT profs wait to teach you, for free", + "url": "http://www.dnaindia.com/mumbai/report_mit-profs-wait-to-teach-you-for-free_1747273", + "author": "Kanchan Srivastava", + "image": "dailynews_india_logo_178x138.jpg", + "deck": null, + "publication": "Daily News and Analysis India", + "publish_date": "October 1, 2012" + }, + { + "title": "EdX offers free higher education online", + "url": "http://www.youtube.com/watch?v=yr5Ep7RN4Bs", + "author": "via YouTube", + "image": "cnn_logo_178x138.jpg", + "deck": null, + "publication": "CNN", + "publish_date": "October, 2012" + }, + { + "title": "Students weigh in on value of massive open online classes", + "url": "http://dailycollegian.com/2012/09/27/students-weigh-in-on-value-of-massive-open-online-classes/", + "author": "Sam Hayes", + "image": "dailycollegian_logo_178x138.jpg", + "deck": null, + "publication": "The Daily Collegian", + "publish_date": "September 27, 2012" + }, + { + "title": "The Crisis in Higher Education", + "url": "http://www.technologyreview.com/featured-story/429376/the-crisis-in-higher-education ", + "author": "Nicholas Carr", + "image": "techreview_logo_178x138.jpg", + "deck": null, + "publication": "Technology Review", + "publish_date": "September 27, 2012" + }, + { + "title": "10gen Offering Free MongoDB Training through EdX Platform", + "url": "http://campustechnology.com/articles/2012/09/27/10gen-offering-free-mongodb-training-through-edx-platform.aspx", + "author": "Dian Schaffhauser", + "image": "campustech_logo_178x138.jpg", + "deck": null, + "publication": "Campus Technology", + "publish_date": "September 27, 2012" + }, + { + "title": "edX Students To Use Free Elsevier Online Textbook", + "url": "http://campustechnology.com/articles/2012/09/27/edx-students-to-use-free-elsevier-online-textbook.aspx", + "author": "Tim Sohn", + "image": "campustech_logo_178x138.jpg", + "deck": null, + "publication": "Campus Technology", + "publish_date": "September 27, 2012" + }, + { + "title": "Students weigh in on value of massive open online classes", + "url": "http://dailycollegian.com/2012/09/27/students-weigh-in-on-value-of-massive-open-online-classes/", + "author": "Sam Hayes", + "image": "dailycollegian_logo_178x138.jpg", + "deck": null, + "publication": "The Daily Collegian", + "publish_date": "September 27, 2012" + }, + { + "title": "Elsevier partners with edX offering interactive study via the web", + "url": "http://www.knowledgespeak.com/newsArchieveviewdtl.asp?pickUpBatch=2046", + "author": null, + "image": "cnn_logo_178x138.jpg", + "deck": null, + "publication": "Knowledge Speak", + "publish_date": "September 26, 2012" + }, + { + "title": "Coming back, looking forward", + "url": "http://news.harvard.edu/gazette/story/2012/09/governing_board_reunion/", + "author": "Alvin Powell", + "image": "harvardgazette_logo_178x138.jpeg", + "deck": "Governing boards’ reunion mixes nostalgia, innovation", + "publication": "Harvard Gazette", + "publish_date": "September 26, 2012" + }, + { + "title": "MongoDB developers team with EdX open learning collaboration", + "url": "http://arstechnica.com/information-technology/2012/09/mongodb-developers-team-with-edx-open-learning-collaboration/", + "author": "Sean Gallagher", + "image": "arstechnica_logo_178x138.jpg", + "deck": " To offer free MongoDB developer and DBA training, help open-source EdX platform.", + "publication": "Ars Technica", + "publish_date": "September 26, 2012" + }, + { + "title": "Marketing to the MOOC Masses", + "url": "http://www.insidehighered.com/news/2012/09/26/elsevier-partners-edx-provide-free-versions-textbooks-mooc-students", + "author": "Steve Kolowich", + "image": "insidehighered_logo_178x138.jpg", + "deck": null, + "publication": "Inside Higher Ed", + "publish_date": "September 26, 2012" + }, + { + "title": "Five buzzwords you’re likely to hear in education this school year", + "url": "http://schoolsofthought.blogs.cnn.com/2012/09/26/five-buzzwords-youre-likely-to-hear-in-education-this-school-year/", + "author": "Donna Krache", + "image": "cnn_logo_178x138.jpg", + "deck": null, + "publication": "CNN", + "publish_date": "September 26, 2012" + }, + { + "title": "10gen will provide online MongoDB training", + "url": "http://www.h-online.com/open/news/item/10gen-will-provide-online-MongoDB-training-1716936.html", + "author": null, + "image": "thehopen_logo_178x138.jpg", + "deck": null, + "publication": "The H Open", + "publish_date": "September 25, 2012" + }, + { + "title": "Opinion: MIT should create an education degree", + "url": "http://tech.mit.edu/V132/N40/normandin.html", + "author": "Ryan Normandin", + "image": "thetech_logo_178x138.jpg", + "deck": "For MIT to lead the way in education, it should use its graduates", + "publication": "The Tech", + "publish_date": "September 25, 2012" + }, + { + "title": "Want free MongoDB classes? edX and 10gen are happy to oblige", + "url": "http://gigaom.com/2012/09/25/want-free-mongodb-classes-edx-and-10gen-are-happy-to-oblige/", + "author": "Ki Mae Heussner", + "image": "gigaom_logo_178x138.jpeg", + "deck": null, + "publication": "GIGAOM", + "publish_date": "September 25, 2012" + }, + { + "title": "MOOCs Shift From Curiousity to Employability", + "url": "http://www.huffingtonpost.com/tom-vander-ark/moocs-shift-from-curiousi_b_1912059.html", + "author": "Tom Vander Ark", + "image": "huffpost_logo_178x138.jpeg", + "deck": null, + "publication": "HUFF POST", + "publish_date": "September 25, 2012" + }, + { + "title": "A president next door", + "url": "http://news.harvard.edu/gazette/story/2012/09/a-president-next-door/", + "author": "Katie Koch", + "image": "harvardgazette_logo_178x138.jpeg", + "deck": "Faust lauds Reif at his inauguration as MIT’s leader ", + "publication": "Harvard Gazette", + "publish_date": "September 21, 2012" + }, + { + "title": "Is Everybody Right When it Comes to the Future of Education?", + "url": "http://bostinno.com/2012/09/23/is-everybody-right-when-it-comes-to-the-future-of-education/", + "author": "Lauren Landry", + "image": "bostinno_logo_178x138.jpg", + "deck": null, + "publication": "BostInno", + "publish_date": "September 23, 2012" + }, + { + "title": "Keyboard College: How Technology is Revolutionizing Higher Education", + "url": "http://americanradioworks.publicradio.org/features/tomorrows-college/keyboard-college/", + "author": "Stephen Smith", + "image": "amradiowrks_press_logo_178x138.jpg", + "deck": null, + "publication": "American RadioWorks", + "publish_date": "September, 2012" + }, + { + "title": "Google Releases Open-Source Online-Education Software", + "url": "http://chronicle.com/blogs/wiredcampus/google-releases-open-source-online-education-software/39882", + "author": "Azevedo", + "image": "chroniclehighered_logo_178x138.jpeg", + "deck": null, + "publication": "The Chronicle of Higher Education", + "publish_date": "September 13, 2012" + }, + { + "title": "President Faust’s Beginning-of-2012-2013 Message", + "url": "http://harvardmagazine.com/2012/09/harvards-faust-beginning-of-year-message", + "author": null, + "image": "harvardmagazine_logo_178x138.jpeg", + "deck": null, + "publication": "Harvard Magazine", + "publish_date": "September 13, 2012" + }, + { + "title": "The MOOC Survivors", + "url": "http://www.insidehighered.com/news/2012/09/12/edx-explores-demographics-most-persistent-mooc-students", + "author": "Steve Kolowich", + "image": "insidehighered_logo_178x138.jpg", + "deck": null, + "publication": "Inside Higher Education", + "publish_date": "September 12, 2012" + }, { "title": "College may never be the same", "url": "http://www.usatoday.com/news/nation/story/2012/09/12/college-may-never-be-the-same/57752972/1", @@ -9,6 +621,15 @@ "publication": "USA Today", "publish_date": "September 12, 2012" }, + { + "title": "The first 71 days of office", + "url": "http://tech.mit.edu/V132/N36/reif.html", + "author": "Bruno B.F. Faviero", + "image": "thetech_logo_178x138.jpg", + "deck": null, + "publication": "The Tech", + "publish_date": "September 11, 2012" + }, { "title": "Is MIT Giving Away the Farm?", "url": "http://www.technologyreview.com/mitnews/428698/is-mit-giving-away-the-farm/", @@ -16,27 +637,53 @@ "image": "techreview_logo_178x138.jpg", "deck": "The surprising logic of MIT's free online education program.", "publication": "Technology Review", - "publish_date": "September/October 2012" + "publish_date": "September-October 2012" }, { "title": "School’s Out, Forever", - "url": "http://www.bostonmagazine.com/articles/2012/08/edx-online-classes-schools-ou
t-forever/", + "url": "http://www.bostonmagazine.com/articles/2012/08/edx-online-classes-schools-out-forever/", "author": "Chris Vogel", "image": "bostonmag_logo_178x138.jpg", "deck": "A new online education program from Harvard and MIT is poised to transform what it means to go to college.", "publication": "Boston Magazine", - "publish_date": "September 2012" + "publish_date": "September, 2012" }, { - "title": "Q&A: Anant Agarwal, edX’s president and first professor", - "url": "http://www.bostonmagazine.com/articles/2012/08/edx-online-classes-schools-ou
t-forever/", - "author": " Molly Petrilla ", - "image": "smartplanet_logo_178x138.jpg", - "deck": "", - "publication": "Smart Planet", - "publish_date": "September 3, 2012" + "title": "Pearson partners with online learning provider", + "url": "http://www.educationinvestor.co.uk/%28A%28sJl5vujFzQEkAAAAMWZkZTlhNjktODE0Mi00NjliLThlN2MtZTNhNDYxZDU4NGU3x4PawVukQHrQR1HU1YmDjMvTJNs1%29S%28rfj4z455jgfjljudyovhsyzb%29%29/ShowArticle.aspx?ID=2949", + "author": null, + "image": "eduinvest_logo_178x138.jpg", + "deck": null, + "publication": "EducationInvestor", + "publish_date": "September 10, 2012" + }, + { + "title": "Pearson to provide test centers for edX courses", + "url": "http://edtechtimes.com/2012/09/10/pearson-to-provide-test-centers-for-edx-courses/", + "author": null, + "image": "edtechtimes_logo_178x138.jpg", + "deck": null, + "publication": "The EdTech Times", + "publish_date": "September 10, 2012" + }, + { + "title": "Online education - the future of learning", + "url": "http://www.campdenfb.com/article/sponsored-feature-online-education-future-learning", + "author": null, + "image": "campdenfb_logo_178x138.jpg", + "deck": null, + "publication": "Campden FB", + "publish_date": "September 9, 2012" + }, + { + "title": "Step Forward For New Higher Education Model", + "url": "http://www.forbes.com/sites/susanadams/2012/09/07/step-forward-for-new-higher-education-model/", + "author": "Susan Adams", + "image": "forbes_logo_178x138.jpg", + "deck": null, + "publication": "Forbes", + "publish_date": "September 7, 2012" }, - { "title": "EdX To Offer Proctored Final Exam For One Course", "url": "http://www.thecrimson.com/article/2012/9/7/edx-offer-proctored-exams/", @@ -77,9 +724,9 @@ "title": "Harvard-MIT Online School EdX to Offer Supervised Final Exams", "url": "http://www.businessweek.com/news/2012-09-06/harvard-mit-online-school-edx-to-offer-supervised-final-exams", "author": "Oliver Staley", - "image": "bloomberg_logo_178x138.jpeg", + "image": "busweek_logo_178x138.jpg", "deck": "", - "publication": "Bloomberg Business Week", + "publication": "Business Week", "publish_date": "September 6, 2012" }, { @@ -109,14 +756,13 @@ "publication": "ITBriefing.net", "publish_date": "September 6, 2012" }, - { "title": "Student Loans: Debt for Life", "url": "http://www.businessweek.com/articles/2012-09-06/student-loans-debt-for-life#p3", "author": "Peter Coy", - "image": "bloomberg_logo_178x138.jpeg", + "image": "busweek_logo_178x138.jpg", "deck": "", - "publication": "Bloomberg Business Week", + "publication": "Business Week", "publish_date": "September 6, 2012" }, { @@ -146,15 +792,6 @@ "publication": "Time", "publish_date": "September 4, 2012" }, - { - "title": "Ivy walls lower with free online classes from Coursera and edX ", - "url": "http://www.csmonitor.com/Innovation/Pioneers/2012/0903/Ivy-walls-lower-with-free-online-classes-from-Coursera-and-edX", - "author": "Chris Gaylord", - "image": "csmonitor_logo_178x138.jpg", - "deck": "", - "publication": "Christian Science Monitor", - "publish_date": "September 3, 2012" - }, { "title": "Summer recap. RLADs, new edX partner, Institute files amicus brief", "url": "http://tech.mit.edu/V132/N34/summer.html", @@ -164,6 +801,15 @@ "publication": "The Tech", "publish_date": "September 4, 2012" }, + { + "title": "Ivy walls lower with free online classes from Coursera and edX ", + "url": "http://www.csmonitor.com/Innovation/Pioneers/2012/0903/Ivy-walls-lower-with-free-online-classes-from-Coursera-and-edX", + "author": "Chris Gaylord", + "image": "csmonitor_logo_178x138.jpg", + "deck": "", + "publication": "Christian Science Monitor", + "publish_date": "September 3, 2012" + }, { "title": "Into the Future With MOOC's", "url": "http://chronicle.com/article/Into-the-Future-With-MOOCs/134080/", @@ -182,6 +828,15 @@ "publication": "NPR/Radio Boston", "publish_date": "August 20, 2012" }, + { + "title": "LSU urged to adapt to changes in higher ed", + "url": "http://theadvocate.com/csp/mediapool/sites/Advocate/assets/templates/FullStoryPrint.csp?cid=3462091&preview=y", + "author": "Koran Addo", + "image": "theadvocate_logo_178x138.jpg", + "deck": null, + "publication": "The Advocate", + "publish_date": "August 3, 2012" + }, { "title": "Berkeley Joins edX", "url": "http://www.insidehighered.com/quicktakes/2012/07/24/berkeley-joins-edx", @@ -216,7 +871,7 @@ "image": "latimes_logo_178x138.jpeg", "deck": "EdX, founded by Harvard and MIT, will host two not-for-credit UC Berkeley courses this fall.", "publication": "Los Angeles Times", - "publish_date": "July 2012" + "publish_date": "July, 2012" }, { "title": "Berkeley Joins 'EdX' Effort to Offer Free Open Courses", @@ -236,15 +891,6 @@ "publication": "Bloomberg", "publish_date": "July 24, 2012" }, - { - "title": "Free online courses divide UC professors", - "url": "http://www.mercurynews.com/education/ci_21144592", - "author": "Matt Krupnick", - "image": "mercurynews_logo_178x138.jpeg", - "deck": "", - "publication": "Mercury News", - "publish_date": "July 24, 2012" - }, { "title": "UC Berkeley joins edX", "url": "http://news.harvard.edu/gazette/story/2012/07/uc-berkeley-joins-edx/", @@ -270,7 +916,7 @@ "image": "ieee_logo_178x138.jpeg", "deck": "This latest experiment in remote learning is not for a casual audience.", "publication": "IEEE Spectrum", - "publish_date": "July 2012" + "publish_date": "July, 2012" }, { "title": "More universities sign on to free online course initiative", @@ -279,7 +925,7 @@ "image": "univworldnews_logo_178x138.jpeg", "deck": null, "publication": "University World News", - "publish_date": "July 19, 2012 Issue No:231" + "publish_date": "July 19, 2012" }, { "title": "One Course, 150,000 Students", @@ -297,7 +943,7 @@ "image": "mit_logo_178x138.jpeg", "deck": "As the team behind MIT's ambitious online learning program gears up to introduce new courses in the fall, it takes stock of its initial experiences.", "publication": "MIT News", - "publish_date": "7/16/2012" + "publish_date": "July 16, 2012" }, { "title": "Software \"coding\": not just for programmers anymore", @@ -414,7 +1060,7 @@ "image": "mit_logo_178x138.jpeg", "deck": "Answering common questions about MIT and Harvard's new partnership in online education.", "publication": "MIT News", - "publish_date": "May 02, 2012" + "publish_date": "May 2, 2012" }, { "title": "MIT and Harvard announce edX", @@ -423,7 +1069,7 @@ "image": "mit_logo_178x138.jpeg", "deck": "Joint partnership builds on MITx and Harvard distance learning; aims to benefit campus-based education and beyond.", "publication": "MIT News", - "publish_date": "May 02, 2012" + "publish_date": "May 2, 2012" }, { "title": "MIT and Harvard launch a 'revolution in education'", @@ -432,6 +1078,6 @@ "image": "mit_logo_178x138.jpeg", "deck": "Online edX courses will open both universities' classrooms to the world while enhancing on-campus learning.", "publication": "MIT News", - "publish_date": "May 02, 2012" + "publish_date": "May 2, 2012" } ] diff --git a/lms/templates/static_templates/press_releases/Cengage_to_provide_book_content.html b/lms/templates/static_templates/press_releases/Cengage_to_provide_book_content.html index b9d4e95301..feded1dac3 100644 --- a/lms/templates/static_templates/press_releases/Cengage_to_provide_book_content.html +++ b/lms/templates/static_templates/press_releases/Cengage_to_provide_book_content.html @@ -27,7 +27,7 @@

    Students who enroll in edX's course PHW207x: Health in Numbers , taught by Professor Marcello Pagano of Harvard's School of Public Health, will have access to an online version of the course textbook, Principles of Biostatistics, 2nd Edition, written by Marcello Pagano and Kimberlee Gauvreau and published by Cengage Learning. Cengage Learning’s instructional design services will also work with edX to migrate the print pedagogy from the textbook into the on-line course, creating the best scope and sequence for effective student learning.

    - +

    “edX students worldwide will benefit from both Professor Pagano's in-class lectures and his classic Cengage Learning textbook in biostatics,” said Anant Agarwal, President of edX. “We are very grateful for Cengage's commitment to helping edX learners throughout the world.”

    diff --git a/lms/templates/static_templates/press_releases/Elsevier_collaborates_with_edX.html b/lms/templates/static_templates/press_releases/Elsevier_collaborates_with_edX.html index 66bdc6d97e..58e612fac3 100644 --- a/lms/templates/static_templates/press_releases/Elsevier_collaborates_with_edX.html +++ b/lms/templates/static_templates/press_releases/Elsevier_collaborates_with_edX.html @@ -30,7 +30,7 @@

    The free version of the textbook was also available in the spring offering of MIT’s 6.002x, before the creation of edX.

    - +
    A page view from the online version of Foundations of Analog and Digital Electronic Circuits made available to students taking edX’s course 6.002X: Circuits and Electronics
    diff --git a/lms/templates/static_templates/press_releases/Gates_Foundation_announcement.html b/lms/templates/static_templates/press_releases/Gates_Foundation_announcement.html new file mode 100644 index 0000000000..39483dcc40 --- /dev/null +++ b/lms/templates/static_templates/press_releases/Gates_Foundation_announcement.html @@ -0,0 +1,88 @@ +<%! from django.core.urlresolvers import reverse %> +<%inherit file="../../main.html" /> + +<%namespace name='static' file='../../static_content.html'/> + +<%block name="title">edX and Massachusetts Community Colleges Join in Gates-Funded Educational Initiative +
    + + +
    +
    +

    edX and Massachusetts Community Colleges Join in Gates-Funded Educational Initiative

    +
    +
    +

    First Blended MOOC Course slated for Bunker Hill Community College (BHCC) and MassBay Community College

    + +
    + +
    +

    Massachusetts Governor Deval Patrick and other dignitaries speak at a press conference hosted by edX, the world’s leading online-learning initiative founded by Harvard University and MIT, on Monday, November 19. EdX announced the first-of-its-kind community college partnership with Bunker Hill and MassBay Community Colleges, bringing an innovative blended teaching model to their classrooms.

    +

    Left to Right: Dr. John O’Donnell, president of MassBay Community College; Richard M. Freeland, Massachusetts Commissioner of Higher Education; Anant Agarwal, president of edX; Governor Deval Patrick; Mary L. Fifield, president of Bunker Hill Community College; Paul Reville, Massachusetts Secretary of Education

    +

    Photo by John Mottern / edX
    + High Resolution Image

    +
    +
    + +

    CAMBRIDGE, Mass. – November 19, 2012 – + edX, the world’s leading online-learning initiative founded by Harvard University and the Massachusetts Institute of Technology (MIT), today announced an innovative blended massive open online course (MOOC) offering at Bunker Hill and MassBay Community Colleges, the first community colleges to work with edX to bring a new teaching model to the classroom. Through this public/private initiative, community colleges will benefit from edX’s platform, connecting students with leading MOOC professors from around the world.

    + +

    “Our technology and innovative teaching methods have the potential to transform the way community college students learn, both in and out of the classroom,” said Anant Agarwal, president of edX. “Our work with Bunker Hill and MassBay will enable us to work with other state institutions throughout the country to provide excellent educational opportunities on an ever-tightening budget.”

    + +

    The collaboration between these two innovative community colleges, both of which have a history of offering online and hybrid courses, and edX was made possible through a $1 million grant from the Bill and Melinda Gates Foundation. The grant is part of a $9 million investment announced in June 2012 to support breakthrough learning models in postsecondary education. edX, Massachusetts and the Gates Foundation believe that investing in this initiative will pave the way for further innovations in online and on-campus learning for these and other community colleges around the country.

    + +

    “MOOCs are an exciting innovation. They hold great promise, but are not without challenges– and we are still discovering their full potential,” said Dan Greenstein, Director of Postsecondary Success at the Gates Foundation. “We believe having diverse options for faculty and students that meet a wide array of learning needs and styles can enhance student engagement, improve educational outcomes, and increase college completion rates. We are eager to learn from and share the data that will be generated from these investments in MOOCs.”

    + +

    “I thank the Bill and Melinda Gates Foundation and edX for understanding the importance of innovative thinking in order to better prepare our students for the jobs of the 21st century global economy,” said Governor Deval Patrick. “A stronger community college system fuels our economy by connecting well-prepared students with employers.”

    + +

    Beginning in the spring 2013, Bunker Hill and MassBay Community Colleges will offer an adapted version of the MITx 6.00x Introduction to Computer Science and Programming course at their respective campuses. This unique learning experience will allow students to benefit from virtual courses, enhanced by in-class supporting materials and engaging breakouts. The collaboration aims to build upon edX and community college data-driven research to examine the advantages of a blended classroom model that utilizes edX’s MOOC content, consisting of innovative learning methodologies and game-like educational experiences.

    + +

    “Community college professors are both teachers and mentors to our students. The blended classroom model allows our professors greater one-to-one contact with our students, allowing for greater course content mastery and application,” stated Dr. John O’Donnell, president of MassBay Community College.

    + +

    According to BHCC President Mary L. Fifield, “The invitation to participate in edX comes on the heels of several highly successful classroom-based student success initiatives at our College that have increased student persistence by as much as 32 percent. The timing couldn’t be better.”

    + +

    Through its open source platform, edX enhances teaching and learning by using research on how students learn and transformative technologies that facilitate effective teaching both on-campus and online. EdX’s ultimate goal is to provide access to life-changing knowledge for everyone around the world.

    + +

    For more information or to sign up for a course, please visit www.edx.org.

    + +

    About Governor Patrick’s Community College Priorities

    + +

    Governor Patrick has prioritized strengthening and unifying the Commonwealth of Massachusetts’ community college system in order to be more responsive to employer needs for skilled workers and help get people back to work. This past summer, the Governor signed legislation that set aside $5 million for community colleges to be used for four main purposes: the development of efficiency measures that may include consolidation of IT platforms and services; the creation of innovative methods for delivering quality higher education that increases capacity, reduces costs and promotes student completion; engaging in statewide and regional collaborations with other public higher education institutions that reduce costs, increase efficiency and promote quality in the areas of academic programming and campus management; and improving student learning outcomes assessments set forth by the Board of Higher Education under the Vision Project.

    + +

    About edX

    + +

    edX is a not-for-profit enterprise of its founding partners Harvard University and the Massachusetts Institute of Technology that features learning designed specifically for interactive study via the web. Based on a long history of collaboration and their shared educational missions, the founders are creating a new online-learning experience. Along with offering online courses, the institutions will use edX to research how students learn and how technology can transform learning—both on campus and worldwide. edX is based in Cambridge, Massachusetts.

    + +
    +

    Contact:

    +

    Amanda Keane, Weber Shandwick for edX

    +

    akeane@webershandwick.com

    +

    (617) 520-7260

    +
    + + +
    +
    +
    diff --git a/lms/urls.py b/lms/urls.py index 73579719d4..529396c20e 100644 --- a/lms/urls.py +++ b/lms/urls.py @@ -101,6 +101,8 @@ urlpatterns = ('', {'template': 'press_releases/UT_joins_edX.html'}, name="press/ut-joins-edx"), url(r'^press/cengage-to-provide-book-content$', 'static_template_view.views.render', {'template': 'press_releases/Cengage_to_provide_book_content.html'}, name="press/cengage-to-provide-book-content"), + url(r'^press/gates-foundation-announcement$', 'static_template_view.views.render', + {'template': 'press_releases/Gates_Foundation_announcement.html'}, name="press/gates-foundation-announcement"), # Should this always update to point to the latest press release? (r'^pressrelease$', 'django.views.generic.simple.redirect_to', {'url': '/press/uc-berkeley-joins-edx'}), @@ -249,15 +251,6 @@ if settings.QUICKEDIT: urlpatterns += (url(r'^quickedit/(?P[^/]*)$', 'dogfood.views.quickedit'),) urlpatterns += (url(r'^dogfood/(?P[^/]*)$', 'dogfood.views.df_capa_problem'),) -if settings.ASKBOT_ENABLED: - urlpatterns += (url(r'^%s' % settings.ASKBOT_URL, include('askbot.urls')), \ - url(r'^settings/', include('askbot.deps.livesettings.urls')), \ - url(r'^followit/', include('followit.urls')), \ -# url(r'^robots.txt$', include('robots.urls')), - ) - - - if settings.DEBUG: ## Jasmine and admin urlpatterns=urlpatterns + (url(r'^_jasmine/', include('django_jasmine.urls')), diff --git a/rakefile b/rakefile index f06b9c3633..3828ad036d 100644 --- a/rakefile +++ b/rakefile @@ -35,7 +35,7 @@ end def django_admin(system, env, command, *args) django_admin = ENV['DJANGO_ADMIN_PATH'] || select_executable('django-admin.py', 'django-admin') - return "#{django_admin} #{command} --settings=#{system}.envs.#{env} --pythonpath=. #{args.join(' ')}" + return "#{django_admin} #{command} --traceback --settings=#{system}.envs.#{env} --pythonpath=. #{args.join(' ')}" end def report_dir_path(dir) @@ -53,8 +53,7 @@ default_options = { task :predjango do sh("find . -type f -name *.pyc -delete") - sh('pip install -q --upgrade -r local-requirements.txt') - sh('git submodule update --init') + sh('pip install -q --upgrade --no-deps -r local-requirements.txt') end task :clean_test_files do