Ejemplo n.º 1
0
    def __get_choose_array_for_pgroup(self, is_argument: bool, is_supportive: bool, conclusion_uid: int,
                                      argument_uid: int, db_user: User, group_id: int, _um: UrlManager):
        db_premises = DBDiscussionSession.query(Premise).filter_by(premisegroup_uid=group_id).all()
        premise_array = []
        for premise in db_premises:
            text = premise.get_text()
            premise_array.append({'title': text, 'id': premise.statement_uid})
            if db_user and db_user.nickname != nick_of_anonymous_user:  # add seen by if the statement is visible
                add_seen_statement(premise.statement_uid, db_user)

        # get attack for each premise, so the urls will be unique
        db_argument = DBDiscussionSession.query(Argument).filter(Argument.premisegroup_uid == group_id,
                                                                 Argument.is_supportive == is_supportive)
        if conclusion_uid and not is_argument:
            db_argument = db_argument.filter_by(conclusion_uid=conclusion_uid).first()
        else:
            db_argument = db_argument.filter_by(argument_uid=argument_uid).first()

        if not db_argument:
            return None

        attacking_arg_uids = get_all_attacking_arg_uids_from_history(self.path)
        arg_id_sys, attack = attacks.get_attack_for_argument(db_argument.uid,
                                                             restrictive_arg_uids=attacking_arg_uids)
        url = _um.get_url_for_reaction_on_argument(db_argument.uid, attack, arg_id_sys)

        if is_argument:
            is_author = is_author_of_argument(db_user, argument_uid)
        else:
            is_author = is_author_of_statement(db_user, conclusion_uid)
        return self.__create_answer_dict(str(db_argument.uid), premise_array, 'choose', url,
                                         is_markable=True, is_editable=True, is_author=is_author)
Ejemplo n.º 2
0
    def test_add_seen_statement_anonymous_user_is_not_tracked(self):
        self.clear_every_vote()
        self.check_tables_of_user_for_n_rows(self.user, 0, 0, 0, 0)

        db_anon = DBDiscussionSession.query(User).get(1)

        val = add_seen_statement(1, db_anon)
        self.assertFalse(val)
Ejemplo n.º 3
0
    def test_add_seen_statement(self):
        self.clear_every_vote()
        self.check_tables_of_user_for_n_rows(self.user, 0, 0, 0, 0)

        val = add_seen_statement(1, self.user)
        self.assertTrue(val)
        self.check_tables_of_user_for_n_rows(self.user, 0, 0, 1, 0)

        val = add_seen_statement(2, self.user)
        self.assertTrue(val)
        self.check_tables_of_user_for_n_rows(self.user, 0, 0, 2, 0)

        val = add_seen_statement(2, self.user)
        self.assertFalse(val)
        self.check_tables_of_user_for_n_rows(self.user, 0, 0, 2, 0)

        self.clear_every_vote()
        self.check_tables_of_user_for_n_rows(self.user, 0, 0, 0, 0)
Ejemplo n.º 4
0
def set_seen_statements(uids, path, db_user) -> dict:
    """
    Marks several statements as already seen.

    :param uids: Uids of statements which should be marked as seen
    :param path: Current path of the user
    :param db_user: User
    :rtype: dict
    :return: Dictionary with an error field
    """
    # are the statements connected to an argument?
    if 'justify' in path:
        url = path[path.index('justify/') + len('justify/'):]
        additional_argument = int(url[:url.index('/')])
        add_seen_argument(additional_argument, db_user)

    for uid in uids:
        # we get the premise group id's only
        if is_integer(uid):
            add_seen_statement(uid, db_user)
    return {'status': 'success'}
Ejemplo n.º 5
0
    def get_array_for_choosing(self, argument_or_statement_id, pgroup_ids,
                               is_argument, is_supportive, nickname):
        """
        Prepares the dict with all items for the choosing an premise, when the user inserted more than one new premise.

        :param argument_or_statement_id: Argument.uid or Statement.uid
        :param pgroup_ids: PremiseGroups.uid
        :param is_argument: Boolean
        :param is_supportive: Boolean
        :param nickname:
        :return: dict()
        """
        logger('ItemDictHelper', 'def')
        statements_array = []
        slug = self.db_issue.slug
        _um = UrlManager(slug, history=self.path)
        conclusion_uid = argument_or_statement_id if not is_argument else None
        argument_uid = argument_or_statement_id if is_argument else None
        db_user = DBDiscussionSession.query(User).filter_by(
            nickname=nickname).first()

        for group_id in pgroup_ids:
            db_premises = DBDiscussionSession.query(Premise).filter_by(
                premisegroup_uid=group_id).all()
            premise_array = []
            for premise in db_premises:
                text = premise.get_text()
                premise_array.append({
                    'title': text,
                    'id': premise.statement_uid
                })
                if db_user and db_user.nickname != nick_of_anonymous_user:  # add seen by if the statement is visible
                    add_seen_statement(premise.statement_uid, db_user)

            # get attack for each premise, so the urls will be unique
            db_argument = DBDiscussionSession.query(Argument).filter(
                Argument.premisegroup_uid == group_id,
                Argument.is_supportive == is_supportive)
            if conclusion_uid and not is_argument:
                db_argument = db_argument.filter_by(
                    conclusion_uid=conclusion_uid).first()
            else:
                db_argument = db_argument.filter_by(
                    argument_uid=argument_uid).first()

            if not db_argument:
                print(group_id)
                return {
                    'elements': statements_array,
                    'extras': {
                        'cropped_list': False
                    }
                }

            attacking_arg_uids = get_all_attacking_arg_uids_from_history(
                self.path)
            arg_id_sys, attack = attacks.get_attack_for_argument(
                db_argument.uid, restrictive_arg_uids=attacking_arg_uids)
            url = _um.get_url_for_reaction_on_argument(db_argument.uid, attack,
                                                       arg_id_sys)

            if is_argument:
                is_author = is_author_of_argument(db_user, argument_uid)
            else:
                is_author = is_author_of_statement(db_user, conclusion_uid)
            statements_array.append(
                self.__create_answer_dict(str(db_argument.uid),
                                          premise_array,
                                          'choose',
                                          url,
                                          is_markable=True,
                                          is_editable=True,
                                          is_author=is_author))

        return {
            'elements': statements_array,
            'extras': {
                'cropped_list': False
            }
        }
Ejemplo n.º 6
0
    def get_array_for_start(self, db_user: User) -> dict():
        """
        Prepares the dict with all items for the first step in discussion, where the user chooses a position.

        :param db_user: User
        :return:
        """
        logger('ItemDictHelper', 'def user: {}'.format(db_user.nickname))
        db_statements = DBDiscussionSession.query(Statement) \
            .filter(Statement.is_disabled == False,
                    Statement.is_position == True,
                    Statement.issue_uid == self.db_issue.uid).all()

        uids = [element.uid for element in db_statements if db_statements]
        slug = self.db_issue.slug

        statements_array = []
        _um = UrlManager(slug, history=self.path)

        for statement in db_statements:
            if statement.uid in uids:  # add seen by if the statement is visible
                add_seen_statement(statement.uid, db_user)
            statements_array.append(
                self.__create_answer_dict(
                    statement.uid, [{
                        'title': statement.get_text(),
                        'id': statement.uid
                    }],
                    'start',
                    _um.get_url_for_statement_attitude(statement.uid),
                    is_editable=not is_statement_in_edit_queue(statement.uid),
                    is_markable=True,
                    is_author=is_author_of_statement(db_user, statement.uid),
                    is_visible=statement.uid in uids))

        _tn = Translator(self.lang)

        shuffle_list_by_user(db_user, statements_array)

        if not self.issue_read_only:
            if db_user.nickname == nick_of_anonymous_user:
                statements_array.append(
                    self.__create_answer_dict(
                        'login', [{
                            'id': '0',
                            'title': _tn.get(_.wantToStateNewPosition)
                        }], 'justify', 'login'))
            else:
                title = _tn.get(_.newConclusionRadioButtonText
                                ) if len(db_statements) > 0 else _tn.get(
                                    _.newConclusionRadioButtonTextNewIdea)
                statements_array.append(
                    self.__create_answer_dict('start_statement', [{
                        'title': title,
                        'id': 0
                    }], 'start', 'add'))

        return {
            'elements': statements_array,
            'extras': {
                'cropped_list': len(uids) < len(db_statements)
            }
        }