diff --git a/deploy/db_setup.py b/deploy/db_setup.py index 04f424ad8..717d62eef 100644 --- a/deploy/db_setup.py +++ b/deploy/db_setup.py @@ -42,9 +42,10 @@ def try_mongodb_opts(host="localhost", database_name='INGInious'): database = try_mongodb_opts('db') database.users.insert_one({"username": username, - "realname": realname, - "email": email, - "password": UserManager.hash_password(password), - "bindings": {}, - "language": "en"}) + "realname": realname, + "email": email, + "password": UserManager.hash_password(password), + "bindings": {}, + "language": "en", + "code_indentation": "4"}) print('Superadmin user added!') diff --git a/inginious/frontend/app.py b/inginious/frontend/app.py index 7418f6f2f..433363125 100644 --- a/inginious/frontend/app.py +++ b/inginious/frontend/app.py @@ -176,6 +176,14 @@ def get_app(config): available_languages = {"en": "English"} available_languages.update(available_translations) + # available indentation types + available_indentation_types = { + "2": {"text": "2 spaces", "indent": 2, "indentWithTabs": False}, + "3": {"text": "3 spaces", "indent": 3, "indentWithTabs": False}, + "4": {"text": "4 spaces", "indent": 4, "indentWithTabs": False}, + "tabs": {"text": "tabs", "indent": 4, "indentWithTabs": True}, + } + l10n_manager = L10nManager() l10n_manager.translations["en"] = gettext.NullTranslations() # English does not need translation ;-) @@ -242,6 +250,7 @@ def get_app(config): template_helper.add_to_template_globals("_", _) template_helper.add_to_template_globals("str", str) template_helper.add_to_template_globals("available_languages", available_languages) + template_helper.add_to_template_globals("available_indentation_types", available_indentation_types) template_helper.add_to_template_globals("get_homepath", get_homepath) template_helper.add_to_template_globals("pkg_version", __version__) template_helper.add_to_template_globals("allow_registration", config.get("allow_registration", True)) @@ -302,6 +311,7 @@ def flask_internalerror(e): flask_app.allow_registration = config.get("allow_registration", True) flask_app.allow_deletion = config.get("allow_deletion", True) flask_app.available_languages = available_languages + flask_app.available_indentation_types = available_indentation_types flask_app.welcome_page = config.get("welcome_page", None) flask_app.terms_page = config.get("terms_page", None) flask_app.privacy_page = config.get("privacy_page", None) diff --git a/inginious/frontend/installer.py b/inginious/frontend/installer.py index e08bad756..98a9a0074 100644 --- a/inginious/frontend/installer.py +++ b/inginious/frontend/installer.py @@ -568,6 +568,7 @@ def configure_authentication(self, database): "email": email, "password": UserManager.hash_password(password), "bindings": {}, + "code_indentation": "4", "language": "en"}) options["superadmins"].append(username) diff --git a/inginious/frontend/pages/admin/admin.py b/inginious/frontend/pages/admin/admin.py index 10a0bd025..b9537f5fa 100644 --- a/inginious/frontend/pages/admin/admin.py +++ b/inginious/frontend/pages/admin/admin.py @@ -64,7 +64,8 @@ def POST_AUTH(self, *args, **kwargs): "email": email, "password": password, "bindings": {}, - "language": "en"}) + "language": "en", + "code_indentation": "4"}) else: feedback = _("Unknown action.") if feedback: diff --git a/inginious/frontend/pages/lti.py b/inginious/frontend/pages/lti.py index 02d953ab6..332919dce 100644 --- a/inginious/frontend/pages/lti.py +++ b/inginious/frontend/pages/lti.py @@ -146,8 +146,7 @@ def GET(self): user_profile = self.database.users.find_one({"ltibindings." + data["task"][0] + "." + data["consumer_key"]: data["username"]}) if user_profile: - self.user_manager.connect_user(user_profile["username"], user_profile["realname"], user_profile["email"], - user_profile["language"], user_profile.get("tos_accepted", False)) + self.user_manager.connect_user(user_profile) if self.user_manager.session_logged_in(): return redirect(self.app.get_homepath() + "/lti/task") diff --git a/inginious/frontend/pages/preferences/profile.py b/inginious/frontend/pages/preferences/profile.py index 316c53ae0..1f4cb1317 100644 --- a/inginious/frontend/pages/preferences/profile.py +++ b/inginious/frontend/pages/preferences/profile.py @@ -43,8 +43,9 @@ def save_profile(self, userdata, data): msg = _("Incorrect email.") return result, msg, error else: - self.user_manager.connect_user(result["username"], result["realname"], result["email"], - result["language"], result.get("tos_accepted", False)) + self.user_manager.set_session_username(data["username"]) + + profile_data_to_be_updated = {} # Check if updating the password. if self.app.allow_registration and len(data["passwd"]) in range(1, 6): @@ -68,38 +69,44 @@ def save_profile(self, userdata, data): return result, msg, error else: passwd_hash = UserManager.hash_password(data["passwd"]) - result = self.database.users.find_one_and_update({"username": self.user_manager.session_username()}, - {"$set": {"password": passwd_hash}}, - return_document=ReturnDocument.AFTER) + profile_data_to_be_updated["password"] = passwd_hash # Check if updating language - if data["language"] != userdata["language"]: + if data["language"] != userdata.get("language", "en"): language = data["language"] if data["language"] in self.app.available_languages else "en" - result = self.database.users.find_one_and_update({"username": self.user_manager.session_username()}, - {"$set": {"language": language}}, - return_document=ReturnDocument.AFTER) - if not result: + profile_data_to_be_updated["language"] = language + + # check if updating code indentation + if data["code_indentation"] != userdata.get("code_indentation", "4"): + code_indentation = data["code_indentation"] if data["code_indentation"] in self.app.available_indentation_types.keys() else "4" + profile_data_to_be_updated["code_indentation"] = code_indentation + + # Checks if updating name + if data["realname"] != userdata.get("realname", ""): + if len(data["realname"]) > 0: + profile_data_to_be_updated["realname"] = data["realname"] + else: error = True - msg = _("Incorrect username.") + msg = _("Name is too short.") return result, msg, error - else: - self.user_manager.set_session_language(language) - # Checks if updating name - if len(data["realname"]) > 0: - result = self.database.users.find_one_and_update({"username": self.user_manager.session_username()}, - {"$set": {"realname": data["realname"]}}, - return_document=ReturnDocument.AFTER) + # updating profile in DB + if profile_data_to_be_updated: + self.database.users.find_one_and_update({"username": self.user_manager.session_username()}, + {"$set": profile_data_to_be_updated}, + return_document=ReturnDocument.AFTER) if not result: error = True msg = _("Incorrect username.") return result, msg, error else: - self.user_manager.set_session_realname(data["realname"]) - else: - error = True - msg = _("Name is too short.") - return result, msg, error + # updating session + if "language" in profile_data_to_be_updated: + self.user_manager.set_session_language(profile_data_to_be_updated["language"]) + if "code_indentation" in profile_data_to_be_updated: + self.user_manager.set_session_code_indentation(profile_data_to_be_updated["code_indentation"]) + if "realname" in profile_data_to_be_updated: + self.user_manager.set_session_realname(profile_data_to_be_updated["realname"]) msg = _("Profile updated.") diff --git a/inginious/frontend/pages/register.py b/inginious/frontend/pages/register.py index e1189764b..7e2f751af 100644 --- a/inginious/frontend/pages/register.py +++ b/inginious/frontend/pages/register.py @@ -100,6 +100,7 @@ def register_user(self, data): "activate": activate_hash, "bindings": {}, "language": self.user_manager._session.get("language", "en"), + "code_indentation": "4", "tos_accepted": True }) try: diff --git a/inginious/frontend/static/js/codemirror/mode/cobol/index.html b/inginious/frontend/static/js/codemirror/mode/cobol/index.html index 4352419a0..5db06fbff 100644 --- a/inginious/frontend/static/js/codemirror/mode/cobol/index.html +++ b/inginious/frontend/static/js/codemirror/mode/cobol/index.html @@ -29,7 +29,6 @@ -