def export_into_meeting( request, motion_process, meeting, as_userid="", view_perm=True, clear_ownership=False, states=["endorsed"], ): results = {"prop": 0, "ai": 0} creators = set() for motion in _get_motions(request, motion_process, states): creators.update(set(motion.creator)) results["ai"] += 1 ai = request.content_factories["AgendaItem"]( title=motion.title, description=motion.description, body=_transform_text(motion.body), hashtag=motion.hashtag, motion_uid=motion.uid, ) name = generate_slug(meeting, ai.title) meeting[name] = ai now = utcnow() offset = 0 for prop_text in motion.proposals: results["prop"] += 1 if as_userid: creator = (as_userid, ) else: creator = tuple(motion.creator) created = now + timedelta(seconds=offset) offset += 2 proposal = request.content_factories["Proposal"](text=prop_text, creator=creator, created=created) name = generate_slug(ai, proposal.text) ai[name] = proposal # There might be several subscribers that check for # ownership when an object is added to the resource tree. # Hence do this check afterwards. if clear_ownership: users_to_clear = set( proposal.local_roles.get_any_local_with(ROLE_OWNER)) for userid in users_to_clear: proposal.local_roles.remove(userid, ROLE_OWNER, event=False) if users_to_clear: proposal.local_roles.send_event() if view_perm: for userid in creators: meeting.local_roles.add(userid, ROLE_VIEWER) return results
def save_success(self, appstruct): self.flash_messages.add(self.default_success, type="success") factory = self.get_content_factory(self.type_name) obj = factory(**appstruct) name = generate_slug(self.context, obj.filename) self.context[name] = obj return HTTPFound(location = self.request.resource_url(obj))
def __call__(self, node, value): assert IUsers.providedBy(self.context), "Can only be used on a Users object." if value in self.context: msg = _("Already taken") raise colander.Invalid(node, msg = msg) if generate_slug(self.context, value) != value: raise colander.Invalid(node, msg = _("Use lowercase with only a-z or numbers."))
def add_success(self, appstruct): factory = self.request.content_factories[self.type_name] obj = factory(**appstruct) name = generate_slug(self.context, obj.uid) self.context[name] = obj self.flash_messages.add(_("Added"), type="success") return _redirect_or_remove(self)
def save_success(self, appstruct): self.flash_messages.add(self.default_success, type="success") factory = self.get_content_factory(self.type_name) obj = factory(**appstruct) name = generate_slug(self.context, obj.title) self.context[name] = obj return HTTPFound(location = self.request.resource_url(obj.__parent__))
def copy_ai(new_parent, ai, reset_wf=False, only_copy_prop_states=(), copy_types=()): """ :param new_parent: The new meeting object :param ai: object to be copied :param reset_wf: turn all proposals published? (bool) :param only_copy_prop_states: (list of states) :param copy_types: Copy these types, remove everything else. :return: """ # Note about copy: use zope.copy functions, check arche method 'copy_recursive' for that. new_ai = copy_recursive(ai) new_ai.state = unicode('private') counter = 1 #The current ai name = generate_slug(new_parent, new_ai.title) new_parent[name] = new_ai #Create new keys tuple to avoid changing lazy objects during iteration for key in tuple(new_ai.keys()): obj = new_ai[key] type_name = getattr(obj, 'type_name', '') if type_name not in copy_types: del new_ai[obj.__name__] continue if type_name == 'Proposal' and obj.get_workflow_state() not in only_copy_prop_states: del new_ai[obj.__name__] continue if reset_wf and obj.type_name == 'Proposal' and obj.get_workflow_state() != 'published': unrestricted_wf_transition_to(obj, 'published') # Kill anything else contained for k in obj.keys(): del obj[k] counter += 1 return counter
def save_success(self, appstruct): self.flash_messages.add(_(u"Response submitted"), type="success") factory = self.get_content_factory(u'AssessmentResponse') obj = factory(**appstruct) name = generate_slug(self.context, self.profile.title) obj.user_uid = self.profile.uid self.context[name] = obj return HTTPFound(location = self.request.resource_url(self.context))
def save_success(self, appstruct): self.flash_messages.add(self.default_success, type="success") initial_video_data = appstruct.pop('initial_video_data') file_appstruct = {'file_data': initial_video_data} file_fact = self.get_content_factory('File') file_obj = file_fact(**file_appstruct) #Construct video folder factory = self.get_content_factory(self.type_name) obj = factory(**appstruct) name = generate_slug(self.context, obj.title) self.context[name] = obj #Add initial video file file_name = generate_slug(obj, file_obj.filename) obj[file_name] = file_obj event = NewVideo(file_obj) self.request.registry.notify(event) return HTTPFound(location = self.request.resource_url(obj))
def save_success(self, appstruct): self.flash_messages.add(self.default_success, type="success") factory = self.get_content_factory(self.type_name) obj = factory(**appstruct) naming_attr = getattr(obj, 'naming_attr', 'title') name = generate_slug(self.context, getattr(obj, naming_attr, '')) self.context[name] = obj return HTTPFound(location = self.request.resource_url(obj))
def __call__(self, form, value): root = find_root(self.context) parent = find_resource(root, value['new_parent']) slug = generate_slug(parent, value['new_name']) if slug != value['new_name']: exc = colander.Invalid(form, _("Check name")) exc['new_name'] = _("bad_name_error", default = "Name isn't valid. This would work: '${name}'", mapping = {'name': slug}) raise exc
def save_success(self, appstruct): self.flash_messages.add(self.default_success, type="success") factory = self.request.content_factories[self.type_name] appstruct['text'] = self.staged_data['text'] appstruct['diff_text_leadin'] = self.staged_data['leadin'] appstruct['diff_text_para'] = self.para obj = factory(**appstruct) naming_attr = getattr(obj, 'naming_attr', 'title') name = generate_slug(self.context, getattr(obj, naming_attr, '')) self.context[name] = obj return Response(render("arche:templates/deform/destroy_modal.pt", {}, request = self.request))
def save_success(self, appstruct): factory = self.get_content_factory(self.type_name) obj = factory(**appstruct) name = generate_slug(self.context, obj.uid) self.context[name] = obj if not self.reply_to: return self._response(update_selector=self.update_selector) return Response(self.render_template(self.update_structure_tpl, hide_popover='[data-reply-to="%s"]' % self.reply_to, scroll_to='#ai-discussions .list-group-item:last', load_target="%s [data-load-target]" % self.update_selector))
def batch_file_upload_handler_view(context, request): controls = request.params.items() controls.insert(0, ('__start__', 'file_data:mapping')) controls.append(('__end__', 'file_data:mapping')) schema = AddFileSchema() schema = schema.bind(request = request, context = context) form = deform.Form(schema) appstruct = form.validate(controls) factory = get_content_factories()['File'] obj = factory(**appstruct) name = generate_slug(context, obj.filename) context[name] = obj return Response()
def save_success(self, appstruct): self.flash_messages.add(self.default_success, type="success") factory = self.request.content_factories[self.type_name] appstruct['text'] = self.staged_data['text'] appstruct['diff_text_leadin'] = self.staged_data['leadin'] appstruct['diff_text_para'] = self.para obj = factory(**appstruct) naming_attr = getattr(obj, 'naming_attr', 'title') name = generate_slug(self.context, getattr(obj, naming_attr, '')) self.context[name] = obj return Response( render("arche:templates/deform/destroy_modal.pt", {}, request=self.request))
def save_success(self, appstruct): factory = self.get_content_factory(self.type_name) obj = factory(**appstruct) name = generate_slug(self.context, obj.uid) self.context[name] = obj if not self.reply_to: return self._response(update_selector=self.update_selector) return Response( self.render_template( self.update_structure_tpl, hide_popover='[data-reply-to="%s"]' % self.reply_to, scroll_to='#ai-discussions .list-group-item:last', load_target="%s [data-load-target]" % self.update_selector))
def save_success(self, appstruct): obj = self.request.content_factories[self.type_name](**appstruct) name = generate_slug(self.context, appstruct['title']) self.context[name] = obj #Polls might have a special redirect action if the poll plugin has a settings schema if obj.get_poll_plugin().get_settings_schema() is not None: url = self.request.resource_url(obj, 'poll_config') else: url = self.request.resource_url(obj.__parent__, anchor=obj.uid) msg = _("private_poll_info", default="The poll is created in private state, to show it the " "participants you have to change the state to upcoming.") self.flash_messages.add(msg) return HTTPFound(location=url)
def __call__(self): if not can_paste(self.context, self.request, self): raise HTTPForbidden(_("Can't paste to this context")) paste_data = self.request.session.get('__paste_data__') cut_obj = self.resolve_uid(paste_data['uid']) parent = cut_obj.__parent__ use_name = generate_slug(self.context, cut_obj.__name__) if paste_data.get('move', False): del parent[cut_obj.__name__] self.flash_messages.add(_("Moved here")) else: cut_obj.uid = unicode(uuid4()) cut_obj = deepcopy(cut_obj) self.flash_messages.add(_("New copy added here")) self.context[use_name] = cut_obj del self.request.session['__paste_data__'] return HTTPFound(location = self.request.resource_url(self.context))
def __call__(self): if not can_paste(self.context, self.request, self): raise HTTPForbidden(_("Can't paste to this context")) paste_data = self.request.session.get('__paste_data__') cut_obj = self.resolve_uid(paste_data['uid']) parent = cut_obj.__parent__ use_name = generate_slug(self.context, cut_obj.__name__) if paste_data.get('move', False): del parent[cut_obj.__name__] self.flash_messages.add(_("Moved here")) else: cut_obj.uid = unicode(uuid4()) cut_obj = deepcopy(cut_obj) self.flash_messages.add(_("New copy added here")) self.context[use_name] = cut_obj del self.request.session['__paste_data__'] return HTTPFound(location=self.request.resource_url(self.context))
def __call__(self): if not can_paste(self.context, self.request, self): raise HTTPForbidden(_("Can't paste to this context")) paste_data = self.request.session.get('__paste_data__') action_obj = self.resolve_uid(paste_data['uid']) parent = action_obj.__parent__ use_name = generate_slug(self.context, action_obj.__name__) if paste_data.get('move', False): for obj in find_all_db_objects(action_obj): self.request.reference_guards.moving(obj.uid) del parent[action_obj.__name__] self.flash_messages.add(_("Moved here")) else: action_obj = copy_recursive(action_obj) self.flash_messages.add(_("copy_references_notice", default = "New copy added here. " "References that pointed to the original object won't point to this one.")) self.context[use_name] = action_obj del self.request.session['__paste_data__'] return HTTPFound(location = self.request.resource_url(self.context[use_name]))
def __call__(self): controls = self.request.params.items() controls.insert(0, ('__start__', 'file_data:mapping')) controls.append(('__end__', 'file_data:mapping')) schema = AddFileSchema() schema = schema.bind(request = self.request, context = self.context, view = self) form = deform.Form(schema) try: appstruct = form.validate(controls) except Exception as exc: raise HTTPForbidden("Validation error") addable_factories = dict([(x.type_name, x) for x in self.addable_content(self.context)]) factory = None if appstruct['file_data']['mimetype'] in image_mime_to_title: factory = addable_factories.get('Image', None) else: factory = addable_factories.get('File', None) if not factory: raise HTTPForbidden("You can't upload this type here") obj = factory(**appstruct) name = generate_slug(self.context, obj.filename) self.context[name] = obj return super(BatchFileUploadView, self).__call__()
def addable_context_name(context, request): suggestion = request.params.get('name', None) if suggestion is None: return {'name': ''} return {'name': generate_slug(context, suggestion)}
def save_success(self, appstruct): factory = self.get_content_factory(self.type_name) obj = factory(**appstruct) name = generate_slug(self.context, obj.uid) self.context[name] = obj return self._response(update_selector=self.update_selector)