示例#1
0
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
示例#2
0
文件: file.py 项目: Jickelsen/Arche
 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))
示例#3
0
 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."))
示例#4
0
 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)
示例#5
0
文件: video.py 项目: FikaProject/fika
 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__))
示例#6
0
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
示例#7
0
 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))
示例#8
0
 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))
示例#9
0
 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))
示例#10
0
 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
示例#11
0
 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))
示例#12
0
 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))
示例#13
0
文件: file.py 项目: Jickelsen/Arche
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()
示例#14
0
 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))
示例#15
0
 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))
示例#16
0
 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)
示例#17
0
 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))
示例#18
0
 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))
示例#19
0
 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]))
示例#20
0
 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__()
示例#21
0
def addable_context_name(context, request):
    suggestion = request.params.get('name', None)
    if suggestion is None:
        return {'name': ''}
    return {'name': generate_slug(context, suggestion)}
示例#22
0
 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)
示例#23
0
 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)