Example #1
0
    def bind(self):
        bindings = {}
        bindings['navbars'] = None
        bindings['vote_actions'] = None
        vote_actions = get_vote_actions_body(
            self.context, self.request)
        try:
            navbars = generate_navbars(
                self.request, self.context,
                text_action=vote_actions['activators'])
            bindings['navbars'] = navbars
            bindings['vote_actions'] = vote_actions
        except ObjectRemovedException:
            return

        bindings['user'] = get_current()
        bindings['root'] = getSite()
        bindings['is_participant'] = has_role(
            user=bindings['user'], role=('Participant', self.context))
        bindings['is_censored'] = 'censored' in self.context.state
        bindings['to_hide'] = bindings['is_censored'] and not has_any_roles(
            user=bindings['user'],
            roles=(('Participant', self.context), 'Moderator'))
        bindings['corrections'] = [c for c in self.context.corrections
                                   if 'in process' in c.state]
        bindings['enable_corrections'] = self._enable_corrections(
            bindings['is_participant'], bindings['corrections'])
        bindings['content_data'] = self._get_adapted_text(
            bindings['user'], bindings['is_participant'],
            bindings['corrections'], bindings['enable_corrections'])
        setattr(self, '_bindings', bindings)
Example #2
0
    def update(self):
        self.execute(None)
        root = getSite()
        try:
            navbars = generate_navbars(
                self.request, self.context)
        except ObjectRemovedException:
            return HTTPFound(self.request.resource_url(root, ''))

        user = self.get_binding('user')
        is_censored = 'censored' in self.context.state
        to_hide = is_censored and not has_any_roles(
            user=user,
            roles=(('Owner', self.context), 'Moderator'))
        evaluation_chart = render_object_evaluation_stat(self.context, self.request)
        examination_chart = render_object_examination_stat(self.context, self.request)
        result = {}
        values = {
            'challenge': self.context,
            'to_hide': to_hide,
            'is_censored': is_censored,
            'text': self.context.text,
            'current_user': user,
            'navbar_body': navbars['navbar_body'],
            'footer_body': navbars['footer_body'],
            'evaluation_chart': evaluation_chart,
            'examination_chart': examination_chart
        }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['isactive'] = True
        result['coordinates'] = {self.coordinates: [item]}
        # result.update(resources)
        return result
Example #3
0
    def bind(self):
        bindings = {}
        bindings['navbars'] = None
        bindings['vote_actions'] = None
        vote_actions = get_vote_actions_body(self.context, self.request)
        try:
            navbars = generate_navbars(self.request,
                                       self.context,
                                       text_action=vote_actions['activators'])
            bindings['navbars'] = navbars
            bindings['vote_actions'] = vote_actions
        except ObjectRemovedException:
            return

        bindings['user'] = get_current()
        bindings['root'] = getSite()
        bindings['is_participant'] = has_role(user=bindings['user'],
                                              role=('Participant',
                                                    self.context))
        bindings['is_censored'] = 'censored' in self.context.state
        bindings['to_hide'] = bindings['is_censored'] and not has_any_roles(
            user=bindings['user'],
            roles=(('Participant', self.context), 'Moderator'))
        bindings['corrections'] = [
            c for c in self.context.corrections if 'in process' in c.state
        ]
        bindings['enable_corrections'] = self._enable_corrections(
            bindings['is_participant'], bindings['corrections'])
        bindings['content_data'] = self._get_adapted_text(
            bindings['user'], bindings['is_participant'],
            bindings['corrections'], bindings['enable_corrections'])
        setattr(self, '_bindings', bindings)
Example #4
0
    def update(self):
        self.execute(None)
        try:
            navbars = generate_navbars(self.request, self.context)
        except ObjectRemovedException:
            return HTTPFound(self.request.resource_url(getSite(), ''))

        result = {}
        user = get_current()
        values = {
            'object': self.context,
            'state': get_states_mapping(
                user, self.context, self.context.state[0]),
            'is_portalmanager': has_role(user=user, role=('PortalManager',)),
            'navbar_body': navbars['navbar_body'],
            'actions_bodies': navbars['body_actions'],
            'footer_body': navbars['footer_body']
        }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['messages'] = navbars['messages']
        item['isactive'] = navbars['isactive']
        result.update(navbars['resources'])
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #5
0
    def update(self):
        self.execute(None)
        vote_actions = get_vote_actions_body(self.context, self.request)
        try:
            navbars = generate_navbars(self.request,
                                       self.context,
                                       text_action=vote_actions['activators'])
        except ObjectRemovedException:
            return HTTPFound(self.request.resource_url(getSite(), ''))

        resources = merge_dicts(navbars['resources'],
                                vote_actions['resources'],
                                ('js_links', 'css_links'))
        resources['js_links'] = list(set(resources['js_links']))
        resources['css_links'] = list(set(resources['css_links']))
        messages = vote_actions['messages']
        if not messages:
            messages = navbars['messages']

        values = {
            'registration': self.context,
            'footer_body': navbars['footer_body'],
            'navbar_body': navbars['navbar_body'],
            'vote_actions_body': vote_actions['body']
        }
        result = {}
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['messages'] = messages
        item['isactive'] = vote_actions['isactive'] or navbars['isactive']
        result.update(resources)
        result['coordinates'] = {self.coordinates: [item]}
        result = merge_dicts(self.requirements_copy, result)
        return result
    def update(self):
        self.execute(None)
        try:
            navbars = generate_navbars(self.request, self.context)
        except ObjectRemovedException:
            return HTTPFound(self.request.resource_url(getSite(), ''))

        user = get_current()
        subfolders = [sf for sf in self.context.children
                      if can_access(user, sf)]
        subfolders = sorted(subfolders, key=lambda e: e.get_order())
        result_body, result = render_listing_objs(
            self.request, subfolders, user)
        values = {'object': self.context,
                  'subfolders': result_body,
                  'navbar_body': navbars['navbar_body'],
                  'body_actions': navbars['body_actions']
                  }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['messages'] = navbars['messages']
        item['isactive'] = navbars['isactive']
        result.update(navbars['resources'])
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #7
0
    def update(self):
        self.execute(None)
        try:
            navbars = generate_navbars(self.request, self.context)
        except ObjectRemovedException:
            return HTTPFound(self.request.resource_url(getSite(), ''))

        result = {}
        user = get_current()
        values = {
            'object':
            self.context,
            'current_user':
            user,
            'state':
            get_states_mapping(
                user, self.context,
                getattr(self.context, 'state_or_none', [None])[0]),
            'navbar_body':
            navbars['navbar_body']
        }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['messages'] = navbars['messages']
        item['isactive'] = navbars['isactive']
        result.update(navbars['resources'])
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #8
0
    def update(self):
        self.execute(None)
        try:
            navbars = generate_navbars(self.request, self.context)
        except ObjectRemovedException:
            return HTTPFound(self.request.resource_url(getSite(), ''))

        organization = self.context
        current_user = get_current()
        evaluation_chart = render_object_evaluation_stat(self.context, self.request)
        examination_chart = render_object_examination_stat(self.context, self.request)
        values = {
            'organization': organization,
            'state': get_states_mapping(
                current_user, organization,
                getattr(organization, 'state_or_none', [None])[0]),
            'navbar_body': navbars['navbar_body'],
            'actions_bodies': navbars['body_actions'],
            'footer_body': navbars['footer_body'],
            'is_portal_manager': has_role(role=('PortalManager',)),
            'evaluation_chart': evaluation_chart,
            'examination_chart': examination_chart,
        }
        result = {}
        result = merge_dicts(navbars['resources'], result, ('css_links', 'js_links'))
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['messages'] = navbars['messages']
        item['isactive'] = navbars['isactive']
        result['coordinates'] = {self.coordinates: [item]}
        return result
    def update(self):
        self.execute(None)
        user = get_current()
        folders = find_entities(
            user=user,
            interfaces=[ISmartFolder])
        folders = [sf for sf in folders if not sf.parents]
        folders = sorted(folders, key=lambda e: e.get_order())
        root_navbars = generate_navbars(
            self.request, self.context,
            process_id='smartfoldermanagement',
            descriminators=['body-action'])
        len_result = len(folders)
        index = str(len_result)
        if len_result > 1:
            index = '*'

        self.title = _(CONTENTS_MESSAGES[index],
                       mapping={'number': len_result})
        result_body, result = render_listing_objs(
            self.request, folders, user)
        values = {
            'folders': result_body,
            'body_actions': root_navbars['body_actions']
        }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #10
0
    def update(self):
        self.execute(None)
        try:
            navbars = generate_navbars(self.request, self.context)
        except ObjectRemovedException:
            return HTTPFound(self.request.resource_url(getSite(), ''))

        user = self.context
        current_user = get_current()
        details = {}
        stats = get_object_stat(self.context, self.request)
        stats['nb_other'] = stats.get('nb_other', 0) + len(
            user.evaluated_objs_ids())
        stas_len = sum(stats.values())
        evaluation_chart = render_object_evaluation_stat(
            self.context, self.request)
        examination_chart = render_object_examination_stat(
            self.context, self.request)
        values = {
            'user':
            user,
            'proposals':
            None,
            'state':
            get_states_mapping(current_user, user,
                               getattr(user, 'state_or_none', [None])[0]),
            'navbar_body':
            navbars['navbar_body'],
            'actions_bodies':
            navbars['body_actions'],
            'footer_body':
            navbars['footer_body'],
            'is_portal_manager':
            has_role(role=('PortalManager', )),
            'contributions_len':
            stas_len,
            'details':
            stats,
            'evaluation_chart':
            evaluation_chart,
            'examination_chart':
            examination_chart,
        }
        result = {}
        result = merge_dicts(navbars['resources'], result,
                             ('css_links', 'js_links'))
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['messages'] = navbars['messages']
        item['isactive'] = navbars['isactive']
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #11
0
    def bind(self):
        bindings = {}
        bindings['navbars'] = None
        try:
            navbars = generate_navbars(self.request, self.context)
            bindings['navbars'] = navbars
        except ObjectRemovedException:
            return

        bindings['user'] = get_current()
        bindings['root'] = getSite()
        bindings['is_censored'] = 'censored' in self.context.state
        bindings['to_hide'] = bindings['is_censored'] and not has_any_roles(
            user=bindings['user'],
            roles=(('Owner', self.context), 'Moderator'))
        setattr(self, '_bindings', bindings)
Example #12
0
    def bind(self):
        bindings = {}
        bindings['navbars'] = None
        try:
            navbars = generate_navbars(
                self.request, self.context)
            bindings['navbars'] = navbars
        except ObjectRemovedException:
            return

        bindings['user'] = get_current()
        bindings['root'] = getSite()
        bindings['is_censored'] = 'censored' in self.context.state
        bindings['to_hide'] = bindings['is_censored'] and not has_any_roles(
            user=bindings['user'],
            roles=(('Owner', self.context), 'Moderator'))
        setattr(self, '_bindings', bindings)
Example #13
0
    def update(self):
        self.execute(None)
        try:
            navbars = generate_navbars(self.request, self.context)
        except ObjectRemovedException:
            return HTTPFound(self.request.resource_url(getSite(), ''))

        values = {'registration': self.context,
                  'footer_body': navbars['footer_body'],
                  'navbar_body': navbars['navbar_body']}
        result = {}
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['messages'] = navbars['messages']
        item['isactive'] = navbars['isactive']
        result.update(navbars['resources'])
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #14
0
    def update(self):
        self.execute(None)
        try:
            navbars = generate_navbars(self.request, self.context)
        except ObjectRemovedException:
            return HTTPFound(self.request.resource_url(getSite(), ''))

        values = {
            'registration': self.context,
            'footer_body': navbars['footer_body'],
            'navbar_body': navbars['navbar_body']
        }
        result = {}
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['messages'] = navbars['messages']
        item['isactive'] = navbars['isactive']
        result.update(navbars['resources'])
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #15
0
    def update(self):
        self.execute(None)
        try:
            navbars = generate_navbars(self.request,
                                       self.context,
                                       process_id=CONNECTOR_PROCESSES,
                                       node_id='create',
                                       descriminators=['body-action'])
        except ObjectRemovedException:
            return HTTPFound(
                self.request.resource_url(self.context, '@@seeconnectors'))

        result = {}
        values = {'bodies': navbars['body_actions']}
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['messages'] = navbars['messages']
        item['isactive'] = navbars['isactive']
        result.update(navbars['resources'])
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #16
0
    def update(self):
        self.execute(None)
        result = {}
        try:
            navbars = generate_navbars(
                self.request, self.context)
        except ObjectRemovedException:
            return HTTPFound(self.request.resource_url(getSite(), ''))

        history = getattr(self.context, 'annotations', {}).get(
            'newsletter_history', [])
        values = {'object': self.context,
                  'len_subscribed': len(self.context.subscribed),
                  'footer_body': navbars['footer_body'],
                  'navbar_body': navbars['navbar_body']}
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['messages'] = navbars['messages']
        item['isactive'] = navbars['isactive']
        result.update(navbars['resources'])
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #17
0
    def update(self):
        self.execute(None)
        try:
            navbars = generate_navbars(self.request, self.context)
        except ObjectRemovedException:
            return HTTPFound(self.request.resource_url(getSite(), ''))

        user = self.context
        current_user = get_current()
        details = {}
        stats = get_object_stat(self.context, self.request)
        stats['nb_other'] = stats.get('nb_other', 0) + len(user.evaluated_objs_ids())
        stas_len = sum(stats.values())
        evaluation_chart = render_object_evaluation_stat(self.context, self.request)
        examination_chart = render_object_examination_stat(self.context, self.request)
        values = {
            'user': user,
            'proposals': None,
            'state': get_states_mapping(
                current_user, user,
                getattr(user, 'state_or_none', [None])[0]),
            'navbar_body': navbars['navbar_body'],
            'actions_bodies': navbars['body_actions'],
            'footer_body': navbars['footer_body'],
            'is_portal_manager': has_role(role=('PortalManager',)),
            'contributions_len': stas_len,
            'details': stats,
            'evaluation_chart': evaluation_chart,
            'examination_chart': examination_chart,
        }
        result = {}
        result = merge_dicts(navbars['resources'], result, ('css_links', 'js_links'))
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['messages'] = navbars['messages']
        item['isactive'] = navbars['isactive']
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #18
0
    def update(self):
        self.execute(None)
        try:
            navbars = generate_navbars(self.request,
                                       self.context,
                                       process_id='reportsmanagement',
                                       descriminators=['plus-action'],
                                       flatten=True)
        except ObjectRemovedException:
            return HTTPFound(self.request.resource_url(getSite(), ''))

        result = {}
        values = {
            'navbar_body': navbars['navbar_body'],
            'object': self.context
        }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['messages'] = navbars['messages']
        item['isactive'] = navbars['isactive']
        result.update(navbars['resources'])
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #19
0
    def update(self):
        self.execute(None)
        try:
            navbars = generate_navbars(self.request, self.context)
        except ObjectRemovedException:
            return HTTPFound(self.request.resource_url(getSite(), ''))

        result = {}
        user = get_current()
        values = {
            'object': self.context,
            'state': get_states_mapping(
                user, self.context,
                getattr(self.context, 'state_or_none', [None])[0]),
            'navbar_body': navbars['navbar_body']
        }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['messages'] = navbars['messages']
        item['isactive'] = navbars['isactive']
        result.update(navbars['resources'])
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #20
0
    def update(self):
        self.execute(None)
        try:
            navbars = generate_navbars(
                self.request, self.context,
                process_id='reportsmanagement',
                descriminators=['plus-action'],
                flatten=True)
        except ObjectRemovedException:
            return HTTPFound(self.request.resource_url(getSite(), ''))

        result = {}
        values = {
            'navbar_body': navbars['navbar_body'],
            'object': self.context
        }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['messages'] = navbars['messages']
        item['isactive'] = navbars['isactive']
        result.update(navbars['resources'])
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #21
0
    def update(self):
        self.execute(None)
        vote_actions = get_vote_actions_body(self.context,
                                             self.request,
                                             ballot_ids=['vote_moderation'])
        try:
            navbars = generate_navbars(self.request,
                                       self.context,
                                       process_id='reportsmanagement',
                                       descriminators=['plus-action'],
                                       flatten=True,
                                       text_action=vote_actions['activators'])
        except ObjectRemovedException:
            return HTTPFound(self.request.resource_url(getSite(), ''))

        resources = merge_dicts(navbars['resources'],
                                vote_actions['resources'],
                                ('js_links', 'css_links'))
        resources['js_links'] = list(set(resources['js_links']))
        resources['css_links'] = list(set(resources['css_links']))
        messages = vote_actions['messages']
        if not messages:
            messages = navbars['messages']

        result = {}
        values = {
            'navbar_body': navbars['navbar_body'],
            'object': self.context,
            'vote_actions_body': vote_actions['body']
        }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['messages'] = messages
        item['isactive'] = vote_actions['isactive'] or navbars['isactive']
        result.update(resources)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #22
0
    def update(self):
        self.execute(None)
        try:
            navbars = generate_navbars(
                self.request, self.context,
                process_id=CONNECTOR_PROCESSES,
                node_id='create',
                descriminators=['body-action'])
        except ObjectRemovedException:
            return HTTPFound(
                self.request.resource_url(
                    self.context, '@@seeconnectors'))

        result = {}
        values = {
            'bodies': navbars['body_actions']
        }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['messages'] = navbars['messages']
        item['isactive'] = navbars['isactive']
        result.update(navbars['resources'])
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #23
0
    def update(self):
        request = self.request
        context = self.context
        login_url = request.resource_url(request.context, 'login')
        login_url2 = request.resource_url(request.context, '@@login')
        referrer = self.params('came_from')
        if not referrer:
            referrer = request.path_url

        if '/auditstream-sse' in referrer:
            # If we're being invoked as the result of a failed request to the
            # auditstream sse view, bail.  Otherwise the came_from will be set to
            # the auditstream URL, and the user who this happens to will eventually
            # be redirected to it and they'll be left scratching their head when
            # they see e.g. "id: 0-10\ndata: " when they log in successfully.
            return HTTPForbidden()

        if login_url in referrer or login_url2 in referrer:
            # never use the login form itself as came_from
            referrer = request.resource_url(request.virtual_root)

        came_from = request.session.setdefault('novaideo.came_from', referrer)
        login = ''
        password = ''
        message = None
        messages = {}
        if 'form.submitted' in request.params:

            try:
                check_csrf_token(request)
            except:
                request.sdiapi.flash(_('Failed login (CSRF)'), 'danger')
            else:
                self.execute(None)
                login = request.params['email'].strip()
                password = request.params['password']
                novaideo_catalog = find_catalog('novaideo')
                dace_catalog = find_catalog('dace')
                identifier_index = novaideo_catalog['identifier']
                object_provides_index = dace_catalog['object_provides']
                query = object_provides_index.any([IPerson.__identifier__]) &\
                        identifier_index.any([login])
                users = list(query.execute().all())
                user = users[0] if users else None
                valid_check = user and user.check_password(password)
                if valid_check and \
                   (has_role(user=user, role=('SiteAdmin', )) or \
                   'active' in getattr(user, 'state', [])):
                    request.session.pop('novaideo.came_from', None)
                    headers = remember(request, get_oid(user))
                    request.registry.notify(LoggedIn(login, user,
                                               context, request))
                    user.last_connection = datetime.datetime.now(tz=pytz.UTC)
                    if hasattr(user, 'reindex'):
                        user.reindex()

                    return HTTPFound(location=came_from, headers=headers)
                elif valid_check and 'deactivated' in getattr(user, 'state', []):
                    error = ViewError()
                    error.principalmessage = _("Disabled account! Contact the site administrator to activate your account.")
                    message = error.render_message(request)
                    messages.update({error.type: [message]})
                else:
                    error = ViewError()
                    error.principalmessage = _("Failed login")
                    message = error.render_message(request)
                    messages.update({error.type: [message]})

        # Pass this through FBO views (e.g., forbidden) which use its macros.
        template = get_renderer('novaideo:views/user_management/templates/login.pt').implementation()
        login_bodies = []
        try:
            login_navbars = generate_navbars(
                request, request.root,
                process_id=CONNECTOR_PROCESSES,
                node_id='login',
                descriminators=['body-action'])
            login_bodies = login_navbars['body_actions']
        except Exception as e:
            log.warning(e)

        values = dict(
            url=request.resource_url(request.virtual_root, 'login'),
            came_from=came_from,
            login=login,
            password=password,
            login_template=template,
            logins=login_bodies
            )
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['messages'] = messages
        result = {}
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #24
0
    def update(self):
        code = self.params('code')
        error = self.params('error')
        message = None
        messages = {}
        request = self.request
        root = getSite()
        yammer_connectors = list(root.get_connectors(YAMMER_CONNECTOR_ID))
        yammer_connector = yammer_connectors[0] if yammer_connectors else None
        login_url = request.resource_url(request.context, 'login')
        login_url2 = request.resource_url(request.context, '@@login')
        referrer = self.params('came_from')
        if not referrer:
            referrer = request.path_url

        if '/auditstream-sse' in referrer:
            return HTTPForbidden()

        if login_url in referrer or login_url2 in referrer:
            # never use the login form itself as came_from
            referrer = request.resource_url(root)

        came_from = request.session.setdefault('novaideo.came_from', referrer)
        error_message = _("Failed login")
        if yammer_connector and code:
            trusted_networks = getattr(yammer_connector, 'networks', [])
            source_data, user_data = yammer_connector.extract_data(code)
            if not trusted_networks or \
               any(n in trusted_networks for n in source_data['network_domains']):
                result = self.execute({
                    'source_data': source_data,
                    'user_data': user_data,
                    'came_from': came_from
                })
                if result[0].get('logged', False):
                    return result[0].get('redirect')

            elif trusted_networks:
                error_message = _(
                    "You don't have the right to login with this account.")

            error = True

        if error:
            error = ViewError()
            error.principalmessage = error_message
            message = error.render_message(request)
            messages.update({error.type: [message]})
            self.finished_successfully = False

        # Pass this through FBO views (e.g., forbidden) which use its macros.
        template = get_renderer(
            'novaideo:views/user_management/templates/login.pt'
        ).implementation()
        login_bodies = []
        try:
            login_navbars = generate_navbars(request,
                                             request.root,
                                             process_id=CONNECTOR_PROCESSES,
                                             node_id='login',
                                             descriminators=['body-action'])
            login_bodies = login_navbars['body_actions']
        except Exception:
            pass

        values = dict(url=request.resource_url(request.virtual_root, 'login'),
                      came_from=came_from,
                      login='',
                      password='',
                      login_template=template,
                      logins=login_bodies)
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['messages'] = messages
        result = {}
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #25
0
    def update(self):
        self.execute(None)
        try:
            navbars = generate_navbars(self.request, self.context)
        except ObjectRemovedException:
            return HTTPFound(self.request.resource_url(getSite(), ''))

        user = get_current()
        result = {}
        textdiff = ''
        # descriptiondiff = ''
        # keywordsdiff = []
        # proposal = self.context.proposal
        textdiff = self.context.text_diff
        # soup, descriptiondiff = html_diff_wrapper.render_html_diff(
        #     '<div>'+getattr(proposal, 'description', '')+'</div>',
        #     '<div>'+getattr(self.context, 'description', '')+'</div>')
        # for k in proposal.keywords:
        #     if k in self.context.keywords:
        #         keywordsdiff.append({'title': k, 'state': 'nothing'})
        #     else:
        #         keywordsdiff.append({'title': k, 'state': 'del'})

        # [keywordsdiff.append({'title': k, 'state': 'ins'})
        #  for k in self.context.keywords if k not in proposal.keywords]

        related_ideas = list(self.context.get_used_ideas())
        not_published_ideas = [i for i in related_ideas
                               if 'published' not in i.state]
        not_favorable_ideas = []
        idea_to_examine = 'idea' in self.request.content_to_examine
        if idea_to_examine:
            not_favorable_ideas = [i for i in related_ideas
                                   if 'favorable' not in i.state and
                                   'published' in i.state]
            if not self.request.moderate_ideas:
                not_favorable_ideas.extend(not_published_ideas)

        values = {
            'amendment': self.context,
            'state': get_states_mapping(
                user, self.context, self.context.state[0]),
            'textdiff': textdiff,
            # 'descriptiondiff': descriptiondiff,
            # 'keywordsdiff': keywordsdiff,
            'current_user': user,
            'navbar_body': navbars['navbar_body'],
            'actions_bodies': navbars['body_actions'],
            'footer_body': navbars['footer_body'],
            'to_submit': self._end_explanation(navbars['all_actions']),
            'idea_to_examine': idea_to_examine,
            'not_published_ideas': not_published_ideas,
            'not_favorable_ideas': not_favorable_ideas
        }
        self._add_requirements(user)
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['messages'] = navbars['messages']
        item['isactive'] = navbars['isactive']
        result.update(navbars['resources'])
        result['coordinates'] = {self.coordinates: [item]}
        result = merge_dicts(self.requirements_copy, result)
        return result
Example #26
0
    def update(self):
        request = self.request
        context = self.context
        login_url = request.resource_url(request.context, 'login')
        login_url2 = request.resource_url(request.context, '@@login')
        referrer = self.params('came_from')
        if not referrer:
            referrer = request.path_url

        if '/auditstream-sse' in referrer:
            # If we're being invoked as the result of a failed request to the
            # auditstream sse view, bail.  Otherwise the came_from will be set to
            # the auditstream URL, and the user who this happens to will eventually
            # be redirected to it and they'll be left scratching their head when
            # they see e.g. "id: 0-10\ndata: " when they log in successfully.
            return HTTPForbidden()

        if login_url in referrer or login_url2 in referrer:
            # never use the login form itself as came_from
            referrer = request.resource_url(request.virtual_root)

        came_from = request.session.setdefault('novaideo.came_from', referrer)
        login = ''
        password = ''
        message = None
        messages = {}
        if 'form.submitted' in request.params:

            try:
                check_csrf_token(request)
            except:
                request.sdiapi.flash(_('Failed login (CSRF)'), 'danger')
            else:
                self.execute(None)
                login = request.params['email'].strip()
                password = request.params['password']
                novaideo_catalog = find_catalog('novaideo')
                dace_catalog = find_catalog('dace')
                identifier_index = novaideo_catalog['identifier']
                object_provides_index = dace_catalog['object_provides']
                query = object_provides_index.any([IPerson.__identifier__]) &\
                    identifier_index.any([login])
                users = list(query.execute().all())
                user = users[0] if users else None
                valid_check = user and user.check_password(password)
                if valid_check and \
                   (has_role(user=user, role=('SiteAdmin', )) or
                        'active' in getattr(user, 'state', [])):
                    request.session.pop('novaideo.came_from', None)
                    headers = remember(request, get_oid(user))
                    request.registry.notify(
                        LoggedIn(login, user, context, request))
                    user.last_connection = datetime.datetime.now(tz=pytz.UTC)
                    if hasattr(user, 'reindex'):
                        user.reindex()

                    return HTTPFound(location=came_from, headers=headers)
                elif valid_check and 'deactivated' in getattr(
                        user, 'state', []):
                    error = ViewError()
                    error.principalmessage = _(
                        "Disabled account! Contact the site administrator to activate your account."
                    )
                    message = error.render_message(request)
                    messages.update({error.type: [message]})
                else:
                    error = ViewError()
                    error.principalmessage = _("Failed login")
                    message = error.render_message(request)
                    messages.update({error.type: [message]})

        # Pass this through FBO views (e.g., forbidden) which use its macros.
        template = get_renderer(
            'novaideo:views/user_management/templates/login.pt'
        ).implementation()
        login_bodies = []
        try:
            login_navbars = generate_navbars(request,
                                             request.root,
                                             process_id=CONNECTOR_PROCESSES,
                                             node_id='login',
                                             descriminators=['body-action'])
            login_bodies = login_navbars['body_actions']
        except Exception as e:
            log.warning(e)

        values = dict(url=request.resource_url(request.virtual_root, 'login'),
                      came_from=came_from,
                      login=login,
                      password=password,
                      login_template=template,
                      logins=login_bodies)
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['messages'] = messages
        result = {}
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #27
0
    def update(self):
        code = self.params('code')
        error = self.params('error')
        message = None
        messages = {}
        request = self.request
        root = getSite()
        yammer_connectors = list(root.get_connectors(YAMMER_CONNECTOR_ID))
        yammer_connector = yammer_connectors[0] if yammer_connectors else None
        login_url = request.resource_url(request.context, 'login')
        login_url2 = request.resource_url(request.context, '@@login')
        referrer = self.params('came_from')
        if not referrer:
            referrer = request.path_url

        if '/auditstream-sse' in referrer:
            return HTTPForbidden()

        if login_url in referrer or login_url2 in referrer:
            # never use the login form itself as came_from
            referrer = request.resource_url(root)

        came_from = request.session.setdefault(
            'novaideo.came_from', referrer)
        error_message = _("Failed login")
        if yammer_connector and code:
            trusted_networks = getattr(yammer_connector, 'networks', [])
            source_data, user_data = yammer_connector.extract_data(code)
            if not trusted_networks or \
               any(n in trusted_networks for n in source_data['network_domains']):
                result = self.execute({
                    'source_data': source_data,
                    'user_data': user_data,
                    'came_from': came_from
                })
                if result[0].get('logged', False):
                    return result[0].get('redirect')

            elif trusted_networks:
                error_message = _("You don't have the right to login with this account.")

            error = True

        if error:
            error = ViewError()
            error.principalmessage = error_message
            message = error.render_message(request)
            messages.update({error.type: [message]})
            self.finished_successfully = False

        # Pass this through FBO views (e.g., forbidden) which use its macros.
        template = get_renderer(
            'novaideo:views/user_management/templates/login.pt').implementation()
        login_bodies = []
        try:
            login_navbars = generate_navbars(
                request, request.root,
                process_id=CONNECTOR_PROCESSES,
                node_id='login',
                descriminators=['body-action'])
            login_bodies = login_navbars['body_actions']
        except Exception:
            pass

        values = dict(
            url=request.resource_url(request.virtual_root, 'login'),
            came_from=came_from,
            login='',
            password='',
            login_template=template,
            logins=login_bodies
            )
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['messages'] = messages
        result = {}
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #28
0
    def update(self):
        self.execute(None)
        vote_actions = get_vote_actions_body(self.context, self.request)
        try:
            navbars = generate_navbars(self.request,
                                       self.context,
                                       text_action=vote_actions['activators'])
        except ObjectRemovedException:
            return HTTPFound(self.request.resource_url(getSite(), ''))

        resources = merge_dicts(navbars['resources'],
                                vote_actions['resources'],
                                ('js_links', 'css_links'))
        resources['js_links'] = list(set(resources['js_links']))
        resources['css_links'] = list(set(resources['css_links']))
        messages = vote_actions['messages']
        if not messages:
            messages = navbars['messages']

        user = get_current()
        is_censored = 'censored' in self.context.state
        dace_catalog = find_catalog('dace')
        container_oid = dace_catalog['containers_oids']
        answers = find_entities(interfaces=[IAnswer],
                                user=user,
                                add_query=container_oid.any(
                                    [get_oid(self.context)]))
        len_answers = len(answers.ids)
        index = str(len_answers)
        if len_answers > 1:
            index = '*'

        answers_title = _(CONTENTS_MESSAGES[index],
                          mapping={'number': len_answers})
        answer_body = None
        if self.context.answer:
            answer_body = render_listing_obj(self.request, self.context.answer,
                                             user)

        result = {}
        values = {
            'object':
            self.context,
            'state':
            get_states_mapping(user, self.context, self.context.state[0]),
            'current_user':
            user,
            'answers_title':
            answers_title,
            'navbar_body':
            navbars['navbar_body'],
            'actions_bodies':
            navbars['body_actions'],
            'footer_body':
            navbars['footer_body'],
            'support_actions_body':
            navbars['support_actions_body'],
            'vote_actions_body':
            vote_actions['body'],
            'answer_body':
            answer_body,
            'is_censored':
            is_censored,
            'to_hide':
            is_censored
            and not has_any_roles(user=user,
                                  roles=(('Owner', self.context), 'Moderator'))
        }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['messages'] = messages
        item['isactive'] = vote_actions['isactive'] or navbars['isactive']
        result.update(resources)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #29
0
    def update(self):
        current_user = get_current()
        self.is_moderator = has_role(user=current_user, role=('Moderator', ))
        result = {}
        channel = self._get_channel(current_user)
        is_selected = hasattr(self, 'comments')
        text_to_search = self.params('text')
        filtered = False
        if not is_selected:
            filters = self.params('filters')
            filters = filters if filters else []
            if not isinstance(filters, (list, tuple)):
                filters = [filters]

            filtered = text_to_search or\
                any(f in filters for f in ['associations', 'file', 'pinned'])

            objects = get_comments(channel, filters, text_to_search, filtered)
        else:
            objects = sorted(getattr(self, 'comments', []),
                             key=lambda e: e.created_at,
                             reverse=True)

        unread_comments = []
        if channel:
            now = datetime.datetime.now(tz=pytz.UTC)
            unread_comments = channel.get_comments_between(
                current_user.get_read_date(channel), now)
            current_user.set_read_date(channel, now)

        url = self.request.resource_url(self.context, self.action_id)
        batch = Batch(objects,
                      self.request,
                      url=url,
                      default_size=BATCH_DEFAULT_SIZE)
        batch.target = "#" + self.action_id + "_results"
        batch.origin_url = url
        body, resources = self._rendre_comments(batch, current_user, True,
                                                batch, unread_comments,
                                                filtered)
        item = self.adapt_item(body, self.viewid)
        try:
            filter_actions = [
                {
                    'title': _('Associations'),
                    'class_css': 'comment-filter-action',
                    'name': 'associations',
                    'style_picto': 'glyphicon glyphicon-link'
                },
                {
                    'title': _('Attached files'),
                    'class_css': 'comment-filter-action',
                    'name': 'file',
                    'style_picto': 'glyphicon glyphicon-paperclip'
                },
                {
                    'title': _('Pinned'),
                    'class_css': 'comment-filter-action',
                    'name': 'pinned',
                    'style_picto': 'typcn typcn-pin'
                },
            ]
            navbars = generate_navbars(self.request,
                                       channel,
                                       template=self.channel_navbar_template,
                                       global_action=filter_actions)
            item['channel_navbar_body'] = navbars['navbar_body']
        except Exception as error:
            log.warning(error)

        result['coordinates'] = {self.coordinates: [item]}
        result.update(resources)
        result = merge_dicts(self.requirements_copy, result)
        return result
Example #30
0
    def update(self):
        current_user = get_current()
        self.is_moderator = has_role(
            user=current_user, role=('Moderator',))
        result = {}
        channel = self._get_channel(current_user)
        is_selected = hasattr(self, 'comments')
        text_to_search = self.params('text')
        filtered = False
        if not is_selected:
            filters = self.params('filters')
            filters = filters if filters else []
            if not isinstance(filters, (list, tuple)):
                filters = [filters]

            filtered = text_to_search or\
                any(f in filters for f in ['associations', 'file', 'pinned'])

            objects = get_comments(
                channel, filters, text_to_search, filtered)
        else:
            objects = sorted(
                getattr(self, 'comments', []),
                key=lambda e: e.created_at, reverse=True)

        unread_comments = []
        if channel:
            now = datetime.datetime.now(tz=pytz.UTC)
            unread_comments = channel.get_comments_between(
                current_user.get_read_date(channel),
                now)
            current_user.set_read_date(
                channel, now)

        url = self.request.resource_url(self.context, self.action_id)
        batch = Batch(objects,
                      self.request,
                      url=url,
                      default_size=BATCH_DEFAULT_SIZE)
        batch.target = "#" + self.action_id + "_results"
        batch.origin_url = url
        body, resources = self._rendre_comments(
            batch, current_user, True, batch,
            unread_comments, filtered)
        item = self.adapt_item(body, self.viewid)
        try:
            filter_actions = [
                {'title': _('Associations'),
                 'class_css': 'comment-filter-action',
                 'name': 'associations',
                 'style_picto': 'glyphicon glyphicon-link'},
                {'title': _('Attached files'),
                 'class_css': 'comment-filter-action',
                 'name': 'file',
                 'style_picto': 'glyphicon glyphicon-paperclip'},
                {'title': _('Pinned'),
                 'class_css': 'comment-filter-action',
                 'name': 'pinned',
                 'style_picto': 'typcn typcn-pin'},
            ]
            navbars = generate_navbars(
                self.request, channel,
                template=self.channel_navbar_template,
                global_action=filter_actions)
            item['channel_navbar_body'] = navbars['navbar_body']
        except Exception as error:
            log.warning(error)

        result['coordinates'] = {self.coordinates: [item]}
        result.update(resources)
        result = merge_dicts(self.requirements_copy, result)
        return result
Example #31
0
    def update(self):
        self.execute(None)
        try:
            navbars = generate_navbars(self.request, self.context)
        except ObjectRemovedException:
            return HTTPFound(self.request.resource_url(getSite(), ''))

        user = get_current()
        result = {}
        textdiff = ''
        # descriptiondiff = ''
        # keywordsdiff = []
        # proposal = self.context.proposal
        textdiff = self.context.text_diff
        # soup, descriptiondiff = html_diff_wrapper.render_html_diff(
        #     '<div>'+getattr(proposal, 'description', '')+'</div>',
        #     '<div>'+getattr(self.context, 'description', '')+'</div>')
        # for k in proposal.keywords:
        #     if k in self.context.keywords:
        #         keywordsdiff.append({'title': k, 'state': 'nothing'})
        #     else:
        #         keywordsdiff.append({'title': k, 'state': 'del'})

        # [keywordsdiff.append({'title': k, 'state': 'ins'})
        #  for k in self.context.keywords if k not in proposal.keywords]

        related_ideas = list(self.context.get_used_ideas())
        not_published_ideas = [
            i for i in related_ideas if 'published' not in i.state
        ]
        not_favorable_ideas = []
        idea_to_examine = 'idea' in self.request.content_to_examine
        if idea_to_examine:
            not_favorable_ideas = [
                i for i in related_ideas
                if 'favorable' not in i.state and 'published' in i.state
            ]
            if not self.request.moderate_ideas:
                not_favorable_ideas.extend(not_published_ideas)

        values = {
            'amendment': self.context,
            'state': get_states_mapping(user, self.context,
                                        self.context.state[0]),
            'textdiff': textdiff,
            # 'descriptiondiff': descriptiondiff,
            # 'keywordsdiff': keywordsdiff,
            'current_user': user,
            'navbar_body': navbars['navbar_body'],
            'actions_bodies': navbars['body_actions'],
            'footer_body': navbars['footer_body'],
            'to_submit': self._end_explanation(navbars['all_actions']),
            'idea_to_examine': idea_to_examine,
            'not_published_ideas': not_published_ideas,
            'not_favorable_ideas': not_favorable_ideas
        }
        self._add_requirements(user)
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['messages'] = navbars['messages']
        item['isactive'] = navbars['isactive']
        result.update(navbars['resources'])
        result['coordinates'] = {self.coordinates: [item]}
        result = merge_dicts(self.requirements_copy, result)
        return result