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)
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
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)
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
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
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
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
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
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)
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)
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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