예제 #1
0
    def test_inviting_playtester_to_exploration(self):
        exp = exp_domain.Exploration.create_default_exploration(self.EXP_ID)
        exp_services.save_new_exploration(self.user_id_a, exp)
        exp_rights = rights_manager.get_exploration_rights(self.EXP_ID)

        self.assertFalse(rights_manager.check_can_access_activity(
            self.user_b, exp_rights))
        self.assertFalse(rights_manager.check_can_edit_activity(
            self.user_b, exp_rights))
        self.assertFalse(rights_manager.check_can_voiceover_activity(
            self.user_b, exp_rights))
        self.assertFalse(rights_manager.check_can_delete_activity(
            self.user_b, exp_rights))

        rights_manager.assign_role_for_exploration(
            self.user_a, self.EXP_ID, self.user_id_b,
            rights_manager.ROLE_VIEWER)
        exp_rights = rights_manager.get_exploration_rights(self.EXP_ID)

        self.assertTrue(rights_manager.check_can_access_activity(
            self.user_b, exp_rights))
        self.assertFalse(rights_manager.check_can_edit_activity(
            self.user_b, exp_rights))
        self.assertFalse(rights_manager.check_can_voiceover_activity(
            self.user_b, exp_rights))
        self.assertFalse(rights_manager.check_can_delete_activity(
            self.user_b, exp_rights))
예제 #2
0
    def test_non_splash_page_demo_exploration(self):
        # Note: there is no difference between permissions for demo
        # explorations, whether or not they are on the splash page.
        exp_services.load_demo('3')
        rights_manager.release_ownership_of_exploration(
            self.system_user, '3')
        exp_rights = rights_manager.get_exploration_rights('3')

        self.assertTrue(rights_manager.check_can_access_activity(
            self.user_a, exp_rights))
        self.assertTrue(rights_manager.check_can_edit_activity(
            self.user_a, exp_rights))
        self.assertTrue(rights_manager.check_can_voiceover_activity(
            self.user_a, exp_rights))
        self.assertFalse(rights_manager.check_can_delete_activity(
            self.user_a, exp_rights))

        self.assertTrue(rights_manager.check_can_access_activity(
            self.user_admin, exp_rights))
        self.assertTrue(rights_manager.check_can_edit_activity(
            self.user_admin, exp_rights))
        self.assertTrue(rights_manager.check_can_voiceover_activity(
            self.user_admin, exp_rights))
        self.assertTrue(rights_manager.check_can_delete_activity(
            self.user_admin, exp_rights))

        self.assertTrue(rights_manager.check_can_access_activity(
            self.user_moderator, exp_rights))
        self.assertTrue(rights_manager.check_can_edit_activity(
            self.user_moderator, exp_rights))
        self.assertTrue(rights_manager.check_can_voiceover_activity(
            self.user_moderator, exp_rights))
        self.assertTrue(rights_manager.check_can_delete_activity(
            self.user_moderator, exp_rights))
예제 #3
0
    def test_demo_exploration(self):
        exp_services.load_demo('1')
        rights_manager.release_ownership_of_exploration(
            self.system_user, '1')
        exp_rights = rights_manager.get_exploration_rights('1')

        self.assertTrue(rights_manager.check_can_access_activity(
            self.user_a, exp_rights))
        self.assertTrue(rights_manager.check_can_edit_activity(
            self.user_a, exp_rights))
        self.assertTrue(rights_manager.check_can_voiceover_activity(
            self.user_a, exp_rights))
        self.assertFalse(rights_manager.check_can_delete_activity(
            self.user_a, exp_rights))

        self.assertTrue(rights_manager.check_can_access_activity(
            self.user_admin, exp_rights))
        self.assertTrue(rights_manager.check_can_edit_activity(
            self.user_admin, exp_rights))
        self.assertTrue(rights_manager.check_can_voiceover_activity(
            self.user_admin, exp_rights))
        self.assertTrue(rights_manager.check_can_delete_activity(
            self.user_admin, exp_rights))

        self.assertTrue(rights_manager.check_can_access_activity(
            self.user_moderator, exp_rights))
        self.assertTrue(rights_manager.check_can_edit_activity(
            self.user_moderator, exp_rights))
        self.assertTrue(rights_manager.check_can_voiceover_activity(
            self.user_moderator, exp_rights))
        self.assertTrue(rights_manager.check_can_delete_activity(
            self.user_moderator, exp_rights))
예제 #4
0
    def test_newly_created_exploration(self):
        exp = exp_domain.Exploration.create_default_exploration(self.EXP_ID)
        exp_services.save_new_exploration(self.user_id_a, exp)
        exp_rights = rights_manager.get_exploration_rights(self.EXP_ID)

        self.assertTrue(
            rights_manager.check_can_access_activity(self.user_a, exp_rights))
        self.assertTrue(
            rights_manager.check_can_edit_activity(self.user_a, exp_rights))
        self.assertTrue(
            rights_manager.check_can_voiceover_activity(
                self.user_a, exp_rights))
        self.assertTrue(
            rights_manager.check_can_delete_activity(self.user_a, exp_rights))

        self.assertTrue(
            rights_manager.check_can_access_activity(self.user_admin,
                                                     exp_rights))
        self.assertTrue(
            rights_manager.check_can_edit_activity(self.user_admin,
                                                   exp_rights))
        self.assertTrue(
            rights_manager.check_can_voiceover_activity(
                self.user_admin, exp_rights))
        self.assertTrue(
            rights_manager.check_can_delete_activity(self.user_admin,
                                                     exp_rights))

        self.assertTrue(
            rights_manager.check_can_access_activity(self.user_moderator,
                                                     exp_rights))
        self.assertFalse(
            rights_manager.check_can_edit_activity(self.user_moderator,
                                                   exp_rights))
        self.assertFalse(
            rights_manager.check_can_voiceover_activity(
                self.user_moderator, exp_rights))
        self.assertFalse(
            rights_manager.check_can_delete_activity(self.user_moderator,
                                                     exp_rights))

        self.assertFalse(
            rights_manager.check_can_access_activity(self.user_b, exp_rights))
        self.assertFalse(
            rights_manager.check_can_edit_activity(self.user_b, exp_rights))
        self.assertFalse(
            rights_manager.check_can_voiceover_activity(
                self.user_b, exp_rights))
        self.assertFalse(
            rights_manager.check_can_delete_activity(self.user_b, exp_rights))
예제 #5
0
    def test_accept_application_assigns_role_to_entity(self):
        voiceover_services.create_new_voiceover_application(
            suggestion_models.TARGET_TYPE_EXPLORATION, '0', 'en', '',
            'audio_file.mp3', self.applicant_id)

        user_voiceover_applications = (
            voiceover_services.get_user_submitted_voiceover_applications(
                self.applicant_id))
        self.assertEqual(len(user_voiceover_applications), 1)
        self.assertEqual(user_voiceover_applications[0].status,
                         suggestion_models.STATUS_IN_REVIEW)

        voiceover_services.accept_voiceover_application(
            user_voiceover_applications[0].voiceover_application_id,
            self.admin_id)

        user_voiceover_applications = (
            voiceover_services.get_user_submitted_voiceover_applications(
                self.applicant_id, status=suggestion_models.STATUS_ACCEPTED))
        self.assertEqual(len(user_voiceover_applications), 1)
        self.assertEqual(user_voiceover_applications[0].status,
                         suggestion_models.STATUS_ACCEPTED)

        exploration_rights = rights_manager.get_exploration_rights('0')
        can_voiceover = rights_manager.check_can_voiceover_activity(
            self.applicant, exploration_rights)

        self.assertTrue(can_voiceover)
예제 #6
0
 def get(self, exploration_id):
     """Gets the user permissions for an exploration."""
     exploration_rights = rights_manager.get_exploration_rights(
         exploration_id)
     self.values.update({
         'can_delete':
         rights_manager.check_can_delete_activity(self.user,
                                                  exploration_rights),
         'can_edit':
         rights_manager.check_can_edit_activity(self.user,
                                                exploration_rights),
         'can_modify_roles':
         (rights_manager.check_can_modify_core_activity_roles(
             self.user, exploration_rights)),
         'can_publish':
         rights_manager.check_can_publish_activity(self.user,
                                                   exploration_rights),
         'can_release_ownership':
         (rights_manager.check_can_release_ownership(
             self.user, exploration_rights)),
         'can_voiceover': (rights_manager.check_can_voiceover_activity(
             self.user, exploration_rights)),
         'can_unpublish':
         rights_manager.check_can_unpublish_activity(
             self.user, exploration_rights),
         'can_manage_voice_artist':
         rights_manager.check_can_manage_voice_artist_in_activity(
             self.user, exploration_rights),
     })
     self.render_json(self.values)
예제 #7
0
    def put(self, exploration_id):
        """Updates properties of the given exploration."""
        exploration = exp_fetchers.get_exploration_by_id(exploration_id)
        version = self.payload.get('version')
        _require_valid_version(version, exploration.version)

        commit_message = self.payload.get('commit_message')
        change_list_dict = self.payload.get('change_list')
        change_list = [
            exp_domain.ExplorationChange(change) for change in change_list_dict]
        try:
            exploration_rights = rights_manager.get_exploration_rights(
                exploration_id)
            can_edit = rights_manager.check_can_edit_activity(
                self.user, exploration_rights)
            can_voiceover = rights_manager.check_can_voiceover_activity(
                self.user, exploration_rights)
            if can_edit:
                exp_services.update_exploration(
                    self.user_id, exploration_id, change_list, commit_message)
            elif can_voiceover:
                exp_services.update_exploration(
                    self.user_id, exploration_id, change_list, commit_message,
                    is_by_voice_artist=True)
        except utils.ValidationError as e:
            raise self.InvalidInputException(e)

        exploration_data = exp_services.get_user_exploration_data(
            self.user_id, exploration_id)

        self.values.update(exploration_data)
        self.render_json(self.values)
예제 #8
0
파일: editor.py 프로젝트: ReshuKumari/oppia
    def put(self, exploration_id):
        """Updates properties of the given exploration."""
        exploration = exp_fetchers.get_exploration_by_id(exploration_id)
        version = self.payload.get('version')
        if version is None:
            raise base.BaseHandler.InvalidInputException(
                'Invalid POST request: a version must be specified.')
        if version > exploration.version:
            raise base.BaseHandler.InvalidInputException(
                'Trying to update version %s of exploration from version %s, '
                'which is not possible. Please reload the page and try again.'
                % (exploration.version, version))

        commit_message = self.payload.get('commit_message')

        if (commit_message is not None and
                len(commit_message) > constants.MAX_COMMIT_MESSAGE_LENGTH):
            raise self.InvalidInputException(
                'Commit messages must be at most %s characters long.'
                % constants.MAX_COMMIT_MESSAGE_LENGTH)

        change_list_dict = self.payload.get('change_list')

        try:
            change_list = [
                exp_domain.ExplorationChange(change)
                for change in change_list_dict
            ]
        except utils.ValidationError as e:
            raise self.InvalidInputException(e)

        changes_are_mergeable = exp_services.are_changes_mergeable(
            exploration_id, version, change_list)
        exploration_rights = rights_manager.get_exploration_rights(
            exploration_id)
        can_edit = rights_manager.check_can_edit_activity(
            self.user, exploration_rights)
        can_voiceover = rights_manager.check_can_voiceover_activity(
            self.user, exploration_rights)

        try:
            if can_edit and changes_are_mergeable:
                exp_services.update_exploration(
                    self.user_id, exploration_id, change_list, commit_message)
            elif can_voiceover and changes_are_mergeable:
                exp_services.update_exploration(
                    self.user_id, exploration_id, change_list, commit_message,
                    is_by_voice_artist=True)
        except utils.ValidationError as e:
            raise self.InvalidInputException(e)

        exploration_data = exp_services.get_user_exploration_data(
            self.user_id, exploration_id)

        self.values.update(exploration_data)
        self.render_json(self.values)
예제 #9
0
    def get(self, exploration_id):
        """Handles GET requests."""
        exploration_rights = rights_manager.get_exploration_rights(
            exploration_id)

        interaction_ids = (
            interaction_registry.Registry.get_all_interaction_ids())

        interaction_dependency_ids = (
            interaction_registry.Registry.get_deduplicated_dependency_ids(
                interaction_ids))
        dependencies_html, additional_angular_modules = (
            dependency_registry.Registry.get_deps_html_and_angular_modules(
                interaction_dependency_ids + self.EDITOR_PAGE_DEPENDENCY_IDS))

        interaction_templates = (interaction_registry.Registry.
                                 get_interaction_html(interaction_ids))

        self.values.update({
            'INTERACTION_SPECS':
            interaction_registry.Registry.get_all_specs(),
            'additional_angular_modules':
            additional_angular_modules,
            'can_delete':
            rights_manager.check_can_delete_activity(self.user,
                                                     exploration_rights),
            'can_edit':
            rights_manager.check_can_edit_activity(self.user,
                                                   exploration_rights),
            'can_modify_roles':
            (rights_manager.check_can_modify_activity_roles(
                self.user, exploration_rights)),
            'can_publish':
            rights_manager.check_can_publish_activity(self.user,
                                                      exploration_rights),
            'can_release_ownership':
            (rights_manager.check_can_release_ownership(
                self.user, exploration_rights)),
            'can_voiceover': (rights_manager.check_can_voiceover_activity(
                self.user, exploration_rights)),
            'can_unpublish':
            rights_manager.check_can_unpublish_activity(
                self.user, exploration_rights),
            'dependencies_html':
            jinja2.utils.Markup(dependencies_html),
            'interaction_templates':
            jinja2.utils.Markup(interaction_templates),
            'meta_description':
            feconf.CREATE_PAGE_DESCRIPTION,
        })

        self.render_template('dist/exploration-editor-page.mainpage.html')
예제 #10
0
    def put(self, exploration_id):
        """Handles PUT requests for draft updation."""
        # Raise an Exception if the draft change list fails non-strict
        # validation.
        try:
            change_list_dict = self.payload.get('change_list')
            change_list = [
                exp_domain.ExplorationChange(change)
                for change in change_list_dict
            ]
        except utils.ValidationError as e:
            # We leave any pre-existing draft changes in the datastore.
            raise self.InvalidInputException(e)

        version = self.payload.get('version')
        exploration_rights = rights_manager.get_exploration_rights(
            exploration_id)
        can_edit = rights_manager.check_can_edit_activity(
            self.user, exploration_rights)
        can_voiceover = rights_manager.check_can_voiceover_activity(
            self.user, exploration_rights)

        try:
            if can_edit:
                exp_services.create_or_update_draft(exploration_id,
                                                    self.user_id, change_list,
                                                    version,
                                                    datetime.datetime.utcnow())
            elif can_voiceover:
                exp_services.create_or_update_draft(exploration_id,
                                                    self.user_id,
                                                    change_list,
                                                    version,
                                                    datetime.datetime.utcnow(),
                                                    is_by_voice_artist=True)
        except utils.ValidationError as e:
            # We leave any pre-existing draft changes in the datastore.
            raise self.InvalidInputException(e)

        exp_user_data = exp_services.get_user_exploration_data(
            self.user_id, exploration_id)
        # If the draft_change_list_id is False, have the user discard the draft
        # changes. We save the draft to the datastore even if the version is
        # invalid, so that it is available for recovery later.
        self.render_json({
            'draft_change_list_id':
            exp_user_data['draft_change_list_id'],
            'is_version_of_draft_valid':
            exp_services.is_version_of_draft_valid(exploration_id, version)
        })
예제 #11
0
    def put(self, exploration_id):
        """Updates properties of the given exploration."""
        exploration = exp_fetchers.get_exploration_by_id(exploration_id)
        version = self.payload.get('version')
        _require_valid_version(version, exploration.version)

        commit_message = self.payload.get('commit_message')

        if (commit_message is not None
                and len(commit_message) > constants.MAX_COMMIT_MESSAGE_LENGTH):
            raise self.InvalidInputException(
                'Commit messages must be at most %s characters long.' %
                constants.MAX_COMMIT_MESSAGE_LENGTH)

        change_list_dict = self.payload.get('change_list')

        try:
            change_list = [
                exp_domain.ExplorationChange(change)
                for change in change_list_dict
            ]
        except utils.ValidationError as e:
            raise self.InvalidInputException(e)

        exploration_rights = rights_manager.get_exploration_rights(
            exploration_id)
        can_edit = rights_manager.check_can_edit_activity(
            self.user, exploration_rights)
        can_voiceover = rights_manager.check_can_voiceover_activity(
            self.user, exploration_rights)

        try:
            if can_edit:
                exp_services.update_exploration(self.user_id, exploration_id,
                                                change_list, commit_message)
            elif can_voiceover:
                exp_services.update_exploration(self.user_id,
                                                exploration_id,
                                                change_list,
                                                commit_message,
                                                is_by_voice_artist=True)
        except utils.ValidationError as e:
            raise self.InvalidInputException(e)

        exploration_data = exp_services.get_user_exploration_data(
            self.user_id, exploration_id)

        self.values.update(exploration_data)
        self.render_json(self.values)
예제 #12
0
    def put(self, exploration_id):
        """Updates properties of the given exploration."""
        exploration = exp_fetchers.get_exploration_by_id(exploration_id)
        version = self.normalized_payload.get('version')

        if version > exploration.version:
            raise base.BaseHandler.InvalidInputException(
                'Trying to update version %s of exploration from version %s, '
                'which is not possible. Please reload the page and try again.'
                % (exploration.version, version))

        commit_message = self.normalized_payload.get('commit_message')
        change_list_dict = self.normalized_payload.get('change_list')

        change_list = [
            exp_domain.ExplorationChange(change) for change in change_list_dict
        ]

        changes_are_mergeable = exp_services.are_changes_mergeable(
            exploration_id, version, change_list)
        exploration_rights = rights_manager.get_exploration_rights(
            exploration_id)
        can_edit = rights_manager.check_can_edit_activity(
            self.user, exploration_rights)
        can_voiceover = rights_manager.check_can_voiceover_activity(
            self.user, exploration_rights)

        try:
            if can_edit and changes_are_mergeable:
                exp_services.update_exploration(self.user_id, exploration_id,
                                                change_list, commit_message)
            elif can_voiceover and changes_are_mergeable:
                exp_services.update_exploration(self.user_id,
                                                exploration_id,
                                                change_list,
                                                commit_message,
                                                is_by_voice_artist=True)
        except utils.ValidationError as e:
            raise self.InvalidInputException(e)

        exploration_data = exp_services.get_user_exploration_data(
            self.user_id, exploration_id)

        self.values.update(exploration_data)
        self.render_json(self.values)
예제 #13
0
 def test_check_cannot_voiceover_activity_with_no_activity_rights(self):
     self.assertFalse(
         rights_manager.check_can_voiceover_activity(self.owner, None))
예제 #14
0
파일: editor.py 프로젝트: sophiewu6/oppia
    def get(self, exploration_id):
        """Handles GET requests."""
        if exploration_id in constants.DISABLED_EXPLORATION_IDS:
            self.render_template('pages/error/disabled_exploration.html',
                                 iframe_restriction=None)
            return

        exploration_rights = rights_manager.get_exploration_rights(
            exploration_id)

        visualizations_html = visualization_registry.Registry.get_full_html()

        interaction_ids = (
            interaction_registry.Registry.get_all_interaction_ids())

        interaction_dependency_ids = (
            interaction_registry.Registry.get_deduplicated_dependency_ids(
                interaction_ids))
        dependencies_html, additional_angular_modules = (
            dependency_registry.Registry.get_deps_html_and_angular_modules(
                interaction_dependency_ids + self.EDITOR_PAGE_DEPENDENCY_IDS))

        interaction_templates = (interaction_registry.Registry.
                                 get_interaction_html(interaction_ids))

        self.values.update({
            'INTERACTION_SPECS':
            interaction_registry.Registry.get_all_specs(),
            'DEFAULT_OBJECT_VALUES':
            obj_services.get_default_object_values(),
            'DEFAULT_TWITTER_SHARE_MESSAGE_EDITOR':
            (DEFAULT_TWITTER_SHARE_MESSAGE_EDITOR.value),
            'additional_angular_modules':
            additional_angular_modules,
            'can_delete':
            rights_manager.check_can_delete_activity(self.user,
                                                     exploration_rights),
            'can_edit':
            rights_manager.check_can_edit_activity(self.user,
                                                   exploration_rights),
            'can_modify_roles':
            (rights_manager.check_can_modify_activity_roles(
                self.user, exploration_rights)),
            'can_publish':
            rights_manager.check_can_publish_activity(self.user,
                                                      exploration_rights),
            'can_release_ownership':
            (rights_manager.check_can_release_ownership(
                self.user, exploration_rights)),
            'can_voiceover': (rights_manager.check_can_voiceover_activity(
                self.user, exploration_rights)),
            'can_unpublish':
            rights_manager.check_can_unpublish_activity(
                self.user, exploration_rights),
            'dependencies_html':
            jinja2.utils.Markup(dependencies_html),
            'interaction_templates':
            jinja2.utils.Markup(interaction_templates),
            'meta_description':
            feconf.CREATE_PAGE_DESCRIPTION,
            'value_generators_js':
            jinja2.utils.Markup(get_value_generators_js()),
            'visualizations_html':
            jinja2.utils.Markup(visualizations_html),
            'INVALID_PARAMETER_NAMES':
            feconf.INVALID_PARAMETER_NAMES,
            'SHOW_TRAINABLE_UNRESOLVED_ANSWERS':
            (feconf.SHOW_TRAINABLE_UNRESOLVED_ANSWERS),
            'TAG_REGEX':
            feconf.TAG_REGEX,
        })

        self.render_template('dist/exploration_editor.html')