Example #1
0
    def start(self, context, request, appstruct, **kw):
        members = appstruct['members']
        are_managers = appstruct['are_managers']
        for member in members:
            new_member = False
            if member not in context.members:
                context.addtoproperty('members', member)
                member.init_contents_organizations()
                new_member = True

            if are_managers and (new_member or not has_role(
                    user=member,
                    role=('OrganizationResponsible', context),
                    ignore_superiors=True)):
                grant_roles(
                    user=member,
                    roles=(('OrganizationResponsible',
                            context),))
            member.reindex()

        context.reindex()
        context.modified_at = datetime.datetime.now(tz=pytz.UTC)
        request.registry.notify(ActivityExecuted(
            self, [context], get_current()))
        return {}
Example #2
0
    def _add_sub_amendment(self, context, request, group):
        data = self._get_explanation_data(context, group)
        keywords_ref = context.keywords_ref
        amendment = Amendment()
        for k in keywords_ref:
            amendment.addtoproperty('keywords_ref', k)

        amendment.set_data(data)
        context.proposal.addtoproperty('amendments', amendment)
        amendment.state.append('published')
        grant_roles(roles=(('Owner', amendment), ))
        amendment.setproperty('author', get_current())
        #amendment.setproperty('originalentity', context)
        explanations = sorted(group['explanations'], key=lambda e: e['oid'])
        i = 1
        for explanation in explanations:
            explanation['oid'] = i
            amendment.explanations[str(i)] = explanation
            i += 1

        explanations, text_diff = get_text_amendment_diff_submitted(
                                                amendment, request)
        amendment.explanations = PersistentDict(explanations) 
        amendment.text_diff = text_diff
        amendment.reindex()
        self._publish_ideas(amendment)
Example #3
0
    def start(self, context, request, appstruct, **kw):
        root = getSite()
        user = get_current()
        artist = appstruct['_object_data']
        root.addtoproperty('artists', artist)
        artist.state = PersistentList(['editable'])
        grant_roles(user=user, roles=(('Owner', artist), ))
        artist.setproperty('author', user)
        artist.add_contributors(context.contributors)
        artist.add_contributors([user])
        artist.setproperty('original', context)
        artist.set_metadata(appstruct)
        artist.hash_picture_fp()
        artist.hash_artist_data()
        source = request.GET.get('source', '')
        if source:
            source_artist = get_obj(int(source))
            if source_artist:
                replaced = source_artist.replace_by(artist)
                if replaced:
                    request.registry.notify(ObjectReplaced(
                        old_object=source_artist,
                        new_object=artist
                    ))
                    root.delfromproperty('artists',
                                         source_artist)

        artist.reindex()
        request.registry.notify(ActivityExecuted(self, [artist], user))
        return {'newcontext': artist}
Example #4
0
    def start(self, context, request, appstruct, **kw):
        comment = appstruct['_object_data']
        user = get_current(request)
        channel = context.get_channel(user)
        if not channel:
            channel = PrivateChannel()
            context.addtoproperty('channels', channel)
            channel.addtoproperty('members', user)
            channel.addtoproperty('members', context)
            context.set_read_date(channel, comment.created_at)

        if channel:
            channel.addtoproperty('comments', comment)
            channel.add_comment(comment)
            comment.state = PersistentList(['published'])
            comment.reindex()
            comment.format(request)
            comment.setproperty('author', user)
            grant_roles(user=user, roles=(('Owner', comment), ))
            if appstruct.get('associated_contents', []):
                comment.set_associated_contents(
                    appstruct['associated_contents'], user)

            self._alert_users(context, request, user, comment, channel)
            context.reindex()
            user.set_read_date(channel, datetime.datetime.now(tz=pytz.UTC))

        return {}
Example #5
0
    def start(self, context, request, appstruct, **kw):
        user = get_current()
        report = appstruct['_object_data']
        context.addtoproperty('censoring_reason', report)
        grant_roles(user=user, roles=(('Owner', report), ))
        report.setproperty('author', user)
        report.reindex()
        context_oid = get_oid(context)
        dace_index = find_catalog('dace')
        dace_container_oid = dace_index['container_oid']
        query = dace_container_oid.eq(context_oid)
        reports = find_entities(interfaces=[ISReport],
                                metadata_filter={'states': ['pending']},
                                add_query=query)
        for report in reports:
            report.state = PersistentList(['processed'])
            report.reindex()

        context.init_len_current_reports()
        adapter = get_current_registry().queryAdapter(context,
                                                      ISignalableObject)
        if adapter is not None:
            context.state.remove('reported')
            adapter.censor(request)

        return {}
Example #6
0
def update_manager(organization, managers):
    managers_toadd = [u for u in managers
                      if not has_role(
                        user=u,
                        role=('OrganizationResponsible',
                            organization))]
    managers_todel = [u for u in organization.managers
                      if u not in managers]

    for manager in managers_todel:
        revoke_roles(manager, (('OrganizationResponsible',
                                organization),))

    for manager in managers_toadd:
        grant_roles(user=manager,
                    roles=(('OrganizationResponsible',
                           organization),))

    for manager in managers:
        if manager not in organization.members:
            organization.addtoproperty('members', manager)

    for member in organization.members:
        grant_roles(user=member,
                    roles=(('OrganizationMember',
                           organization),))
Example #7
0
    def start(self, context, request, appstruct, **kw):
        user = get_current()
        if not hasattr(user, 'customeraccount') and\
           context.customer:
            user = context.customer.user

        if '_csrf_token_' in appstruct:
            appstruct.pop('_csrf_token_')

        service = self.service(**appstruct)
        service.configure(context, user)
        subscribed = service.subscribe(context, user)
        if subscribed:
            grant_roles(service.delegate, roles=(("Moderator", context), ))
            service.delegate.reindex()
            def_container = find_service('process_definition_container')
            runtime = find_service('runtime')
            for process_id in service.processes_id:
                pd = def_container.get_definition(process_id)
                proc = pd()
                proc.__name__ = proc.id
                runtime.addtoproperty('processes', proc)
                proc.defineGraph(pd)
                proc.execution_context.add_involved_entity('site', context)
                proc.execution_context.add_created_entity('service', service)
                proc.execute()

        context.modified_at = datetime.datetime.now(tz=pytz.UTC)
        service.reindex()
        return {}
Example #8
0
    def start(self, context, request, appstruct, **kw):
        root = getSite()
        user = get_current()
        venue = appstruct['_object_data']
        root.addtoproperty('venues', venue)
        venue.state = PersistentList(['editable'])
        grant_roles(user=user, roles=(('Owner', venue), ))
        venue.setproperty('author', user)
        venue.add_contributors(context.contributors)
        venue.add_contributors([user])
        venue.setproperty('original', context)
        venue.set_metadata(appstruct)
        venue.hash_venue_data()
        source = request.GET.get('source', '')
        if source:
            source_venue = get_obj(int(source))
            if source_venue:
                replaced = source_venue.replace_by(venue)
                if replaced:
                    request.registry.notify(
                        ObjectReplaced(old_object=source_venue,
                                       new_object=venue))
                    root.delfromproperty('venues', source_venue)

        venue.reindex()
        request.registry.notify(ActivityExecuted(self, [venue], user))
        return {'newcontext': venue}
Example #9
0
    def start(self, context, request, appstruct, **kw):
        comment = appstruct['_object_data']
        user = get_current(request)
        channel = context.get_channel(user)
        if not channel:
            channel = PrivateChannel()
            context.addtoproperty('channels', channel)
            channel.addtoproperty('members', user)
            channel.addtoproperty('members', context)
            context.set_read_date(channel, comment.created_at)

        if channel:
            channel.addtoproperty('comments', comment)
            channel.add_comment(comment)
            comment.state = PersistentList(['published'])
            comment.reindex()
            comment.format(request)
            comment.setproperty('author', user)
            grant_roles(user=user, roles=(('Owner', comment), ))
            if appstruct.get('associated_contents', []):
                comment.set_associated_contents(
                    appstruct['associated_contents'], user)

            self._alert_users(context, request, user, comment, channel)
            context.reindex()
            user.set_read_date(channel, datetime.datetime.now(tz=pytz.UTC))

        return {}
Example #10
0
 def start(self, context, request, appstruct, **kw):
     root = getSite()
     user = get_current()
     mask = user.get_mask(root) if hasattr(user, 'get_mask') else user
     author = mask if appstruct.pop('anonymous', False) and mask else user
     files = [f['_object_data'] for f in appstruct.pop('attached_files')]
     appstruct['attached_files'] = files
     copy_of_idea = copy(
         context, (root, 'ideas'),
         omit=('created_at', 'modified_at',
               'opinion', 'examined_at', 'published_at',
               'len_selections', 'graph'))
     copy_of_idea.opinion = PersistentDict({})
     copy_of_idea.init_graph()
     copy_of_idea.setproperty('originalentity', context)
     copy_of_idea.state = PersistentList(['to work'])
     copy_of_idea.setproperty('author', author)
     grant_roles(user=author, roles=(('Owner', copy_of_idea), ))
     copy_of_idea.set_data(appstruct)
     copy_of_idea.modified_at = datetime.datetime.now(tz=pytz.UTC)
     copy_of_idea.subscribe_to_channel(user)
     copy_of_idea.format(request)
     copy_of_idea.reindex()
     context.reindex()
     request.registry.notify(ActivityExecuted(
         self, [context, copy_of_idea], author))
     return {'newcontext': copy_of_idea}
Example #11
0
    def start(self, context, request, appstruct, **kw):
        comment = appstruct['_object_data']
        channel = context.channel
        if channel:
            channel.addtoproperty('comments', comment)
            channel.add_comment(comment)
            comment.format(request)
            comment.state = PersistentList(['published'])
            comment.reindex()
            user = appstruct.get('user', get_current())
            mask = user.get_mask(getSite()) if hasattr(user, 'get_mask') else user
            author = mask if appstruct.get('anonymous', False) and mask else user
            grant_roles(user=author, roles=(('Owner', comment), ))
            if getattr(self, 'subscribe_to_channel', True):
                context.subscribe_to_channel(user)

            comment.setproperty('author', author)
            if appstruct.get('associated_contents', []):
                comment.set_associated_contents(
                    appstruct['associated_contents'], author)

            if appstruct.get('alert', True):
                self._alert_users(context, request, author, comment)

            context.reindex()
            user.set_read_date(channel, datetime.datetime.now(tz=pytz.UTC))

        return {}
Example #12
0
    def start(self, context, request, appstruct, **kw):
        root = getSite()
        user = get_current(request)
        mask = user.get_mask(root) if hasattr(user, 'get_mask') else user
        author = mask if appstruct.get('anonymous', False) and mask else user
        answer = appstruct['_object_data']
        context.addtoproperty('answers', answer)
        answer.init_title()
        answer.format(request)
        answer.state = PersistentList(['published'])
        answer.reindex()
        if getattr(answer, 'option', None) is not None:
            answer.question.add_selected_option(user, answer.option)

        transaction.commit()
        grant_roles(user=author, roles=(('Owner', answer), ))
        answer.setproperty('author', author)
        if appstruct.get('associated_contents', []):
            answer.set_associated_contents(
                appstruct['associated_contents'], author)

        self._alert_users(context, request, author, answer)
        context.reindex()
        user.set_read_date(answer.channel, datetime.datetime.now(tz=pytz.UTC))
        return {}
Example #13
0
    def start(self, context, request, appstruct, **kw):
        root = getSite()
        user = get_current()
        venue = appstruct['_object_data']
        root.addtoproperty('venues', venue)
        venue.state = PersistentList(['editable'])
        grant_roles(user=user, roles=(('Owner', venue), ))
        venue.setproperty('author', user)
        venue.add_contributors(context.contributors)
        venue.add_contributors([user])
        venue.setproperty('original', context)
        venue.set_metadata(appstruct)
        venue.hash_venue_data()
        source = request.GET.get('source', '')
        if source:
            source_venue = get_obj(int(source))
            if source_venue:
                replaced = source_venue.replace_by(venue)
                if replaced:
                    request.registry.notify(ObjectReplaced(
                        old_object=source_venue,
                        new_object=venue
                    ))
                    root.delfromproperty('venues',
                                         source_venue)

        venue.reindex()
        request.registry.notify(ActivityExecuted(self, [venue], user))
        return {'newcontext': venue}
Example #14
0
    def add(self):
        user = get_current()
        path = self.params('path')
        dir_ = None
        if path is not None:
            #dir_ = traversal.traverse(self.context, path).get('context', None)
            dir_ = get_file(path)

        if dir_ is None:
            dir_ = user

        field_storage = self.params('newfile')
        new_img = Image(fp=field_storage.file, title=field_storage.filename)
        new_img.mimetype = field_storage.type
        new_img.fp.seek(0)
        if hasattr(dir_, 'files'):
            dir_.addtoproperty('files', new_img)
        else:
            root = getSite()
            root.addtoproperty('files', new_img)

        grant_roles(user=user, roles=(('Owner', new_img), ))
        result = {
            'Path': get_file_url(new_img, self.request),
            'Name': new_img.title,
            'Code': 0
        }
        return '<textarea>' + json.dumps(result) + '</textarea>'
Example #15
0
    def add(self):
        user = get_current()
        path = self.params('path')
        dir_ = None
        if path is not None:
            #dir_ = traversal.traverse(self.context, path).get('context', None)
            dir_ = get_file(path)

        if dir_ is None:
            dir_ = user

        field_storage = self.params('newfile')
        new_img = Image(
            fp=field_storage.file,
            title=field_storage.filename)
        new_img.mimetype = field_storage.type
        new_img.fp.seek(0)
        if hasattr(dir_, 'files'):
            dir_.addtoproperty('files', new_img)
        else:
            root = getSite()
            root.addtoproperty('files', new_img)

        grant_roles(user=user, roles=(('Owner', new_img), ))
        result = {
            'Path': get_file_url(new_img, self.request),
            'Name': new_img.title,
            'Code': 0
            }
        return '<textarea>'+json.dumps(result)+'</textarea>'
Example #16
0
    def start(self, context, request, appstruct, **kw):
        root = getSite()
        copy_of_amendment = copy(context, 
                                 (context.proposal, 'amendments'),
                                 omit=('created_at',
                                       'modified_at',
                                       'explanations'))
        keywords_ids = appstruct.pop('keywords')
        result, newkeywords = root.get_keywords(keywords_ids)
        for nkw in newkeywords:
            root.addtoproperty('keywords', nkw)

        result.extend(newkeywords)
        appstruct['keywords_ref'] = result
        copy_of_amendment.set_data(appstruct)
        copy_of_amendment.text = normalize_text(copy_of_amendment.text)
        copy_of_amendment.setproperty('originalentity', context)
        copy_of_amendment.state = PersistentList(['draft'])
        copy_of_amendment.setproperty('author', get_current())
        localizer = request.localizer
        # copy_of_amendment.title = context.proposal.title + \
        #                         localizer.translate(_('_Amended version ')) + \
        #                         str(getattr(context.proposal,
        #                                    '_amendments_counter', 1)) 
        copy_of_amendment.title = localizer.translate(_('Amended version ')) + \
                                str(getattr(context.proposal,
                                           '_amendments_counter', 1)) 
        grant_roles(roles=(('Owner', copy_of_amendment), ))
        copy_of_amendment.text_diff = get_text_amendment_diff(
                                           context.proposal, copy_of_amendment)
        copy_of_amendment.reindex()
        context.proposal._amendments_counter = getattr(context.proposal, 
                                                 '_amendments_counter', 1) + 1
        context.reindex()
        return {'newcontext': copy_of_amendment}
Example #17
0
def create_user(request, appstruct):
    if appstruct and 'user_data' in appstruct:
        source_data = appstruct.get('source_data', {})
        data = appstruct.get('user_data', {})
        root = getSite()
        locale = my_locale_negotiator(request)
        data['locale'] = locale
        person = Person(**data)
        person.set_source_data(source_data)
        principals = find_service(root, 'principals')
        name = person.first_name + ' ' + person.last_name
        users = principals['users']
        name = name_chooser(users, name=name)
        users[name] = person
        grant_roles(person, roles=('Member',))
        grant_roles(person, (('Owner', person),))
        person.state.append('active')
        person.init_annotations()
        person.annotations.setdefault(
            PROCESS_HISTORY_KEY, PersistentList())
        person.reindex()
        root.addtoproperty('news_letter_members', person)
        newsletters = root.get_newsletters_automatic_registration()
        email = getattr(person, 'email', '')
        if newsletters and email:
            for newsletter in newsletters:
                newsletter.subscribe(
                    person.first_name, person.last_name, email)

        transaction.commit()
        return person

    return None
Example #18
0
    def start(self, context, request, appstruct, **kw):
        root = getSite()
        user = get_current()
        artist = appstruct['_object_data']
        root.addtoproperty('artists', artist)
        artist.state = PersistentList(['editable'])
        grant_roles(user=user, roles=(('Owner', artist), ))
        artist.setproperty('author', user)
        artist.add_contributors(context.contributors)
        artist.add_contributors([user])
        artist.setproperty('original', context)
        artist.set_metadata(appstruct)
        artist.hash_picture_fp()
        artist.hash_artist_data()
        source = request.GET.get('source', '')
        if source:
            source_artist = get_obj(int(source))
            if source_artist:
                replaced = source_artist.replace_by(artist)
                if replaced:
                    request.registry.notify(
                        ObjectReplaced(old_object=source_artist,
                                       new_object=artist))
                    root.delfromproperty('artists', source_artist)

        artist.reindex()
        request.registry.notify(ActivityExecuted(self, [artist], user))
        return {'newcontext': artist}
Example #19
0
def start_ballot(
        context, author, request,
        root, electors, process_id,
        role='LocalModerator',
        before_start=None,
        initiator=None,
        subjects=[]):
    if role:
        for elector in electors:
            grant_roles(
                user=elector,
                roles=((role, context),))

    # start a moderation process
    ballot_proc = start_ballot_proc(
        context, process_id)
    if ballot_proc:
        ballot_proc.execution_context.add_involved_collection(
            'electors', electors)
        context.addtoproperty('ballot_processes', ballot_proc)
        if before_start:
            before_start(ballot_proc)

        ballot_proc.initiator = initiator
        ballot_proc.subjects = subjects
        ballot_proc.execute_action(
            context, request, 'start_ballot', {})

    return ballot_proc
Example #20
0
    def start(self, context, request, appstruct, **kw):
        user = get_current()
        if not hasattr(user, 'customeraccount') and\
           context.customer:
            user = context.customer.user

        if '_csrf_token_' in appstruct:
            appstruct.pop('_csrf_token_')

        service = self.service(**appstruct)
        service.configure(context, user)
        subscribed = service.subscribe(context, user)
        if subscribed:
            grant_roles(
                service.delegate,
                roles=(("Moderator", context),))
            service.delegate.reindex()
            def_container = find_service('process_definition_container')
            runtime = find_service('runtime')
            for process_id in service.processes_id:
                pd = def_container.get_definition(process_id)
                proc = pd()
                proc.__name__ = proc.id
                runtime.addtoproperty('processes', proc)
                proc.defineGraph(pd)
                proc.execution_context.add_involved_entity('site', context)
                proc.execution_context.add_created_entity('service', service)
                proc.execute()

        context.modified_at = datetime.datetime.now(tz=pytz.UTC)
        service.reindex()
        return {}
Example #21
0
    def start(self, context, request, appstruct, **kw):
        root = getSite()
        comment = appstruct['_object_data']
        user = get_current(request)
        mask = user.get_mask(root)
        author = mask if appstruct.get('anonymous', False) and mask else user
        channel = root.channel
        #TODO get
        if channel:
            channel.addtoproperty('comments', comment)
            channel.add_comment(comment)
            comment.state = PersistentList(['published'])
            comment.reindex()
            comment.format(request)
            comment.setproperty('author', author)
            grant_roles(user=author, roles=(('Owner', comment), ))
            if appstruct.get('associated_contents', []):
                comment.set_associated_contents(
                    appstruct['associated_contents'], user)

            self._alert_users(context, request, author, comment, channel)
            context.reindex()
            user.set_read_date(channel, datetime.datetime.now(tz=pytz.UTC))

        return {}
Example #22
0
 def start(self, context, request, appstruct, **kw):
     root = getSite()
     user = get_current()
     proposal = context.proposal
     working_group = proposal.working_group
     author = working_group.get_member(user)
     copy_of_amendment = copy(context, (proposal, 'amendments'),
                              omit=('created_at', 'modified_at',
                                    'explanations'))
     copy_of_amendment.set_data(appstruct)
     copy_of_amendment.text = html_diff_wrapper.normalize_text(
         copy_of_amendment.text)
     copy_of_amendment.setproperty('originalentity', context)
     copy_of_amendment.state = PersistentList(['draft'])
     copy_of_amendment.setproperty('author', author)
     localizer = request.localizer
     copy_of_amendment.title = localizer.translate(
         _('Amended version ')) + str(
             getattr(proposal, '_amendments_counter', 1))
     grant_roles(user=author, roles=(('Owner', copy_of_amendment), ))
     copy_of_amendment.text_diff = get_text_amendment_diff(
         proposal, copy_of_amendment)
     copy_of_amendment.reindex()
     proposal._amendments_counter = getattr(proposal, '_amendments_counter',
                                            1) + 1
     context.reindex()
     request.registry.notify(ActivityExecuted(self, [context], author))
     return {'newcontext': copy_of_amendment}
Example #23
0
    def start(self, context, request, appstruct, **kw):
        person = appstruct['_object_data']
        root = context
        principals = find_service(root, 'principals')
        name = person.first_name + ' ' +person.last_name
        name = name_chooser(name=name)
        principals['users'][name] = person
        grant_roles(person, roles=('Member',))
        grant_roles(person, (('Owner', person),))
        person.state.append('active')
        localizer = request.localizer
        for i in range(root.tokens_mini):
            token = Token(title='Token_'+str(i))
            person.addtoproperty('tokens_ref', token)
            person.addtoproperty('tokens', token)
            token.setproperty('owner', person)

        subject = CONFIRMATION_SUBJECT.format(novaideo_title=request.root.title)
        message = CONFIRMATION_MESSAGE.format(
                    person=person,
                    user_title=localizer.translate(
                                   _(getattr(person, 'user_title', ''))),
                    login_url=request.resource_url(root, '@@login'),
                    novaideo_title=request.root.title)
        mailer_send(subject=subject,
                recipients=[person.email], body=message)

        person.reindex()
        return {'person': person}
Example #24
0
    def start(self, context, request, appstruct, **kw):
        user = get_current()
        report = appstruct['_object_data']
        context.addtoproperty('censoring_reason', report)
        grant_roles(user=user, roles=(('Owner', report), ))
        report.setproperty('author', user)
        report.reindex()
        context_oid = get_oid(context)
        dace_index = find_catalog('dace')
        dace_container_oid = dace_index['container_oid']
        query = dace_container_oid.eq(context_oid)
        reports = find_entities(
            interfaces=[ISReport],
            metadata_filter={
                'states': ['pending']},
            add_query=query)
        for report in reports:
            report.state = PersistentList(['processed'])
            report.reindex()

        context.init_len_current_reports()
        adapter = get_current_registry().queryAdapter(
            context, ISignalableObject)
        if adapter is not None:
            context.state.remove('reported')
            adapter.censor(request)

        return {}
Example #25
0
    def start(self, context, request, appstruct, **kw):
        root = getSite()
        comment = appstruct['_object_data']
        user = get_current(request)
        mask = user.get_mask(root)
        author = mask if appstruct.get('anonymous', False) and mask else user
        channel = root.channel
        #TODO get
        if channel:
            channel.addtoproperty('comments', comment)
            channel.add_comment(comment)
            comment.state = PersistentList(['published'])
            comment.reindex()
            comment.format(request)
            comment.setproperty('author', author)
            grant_roles(user=author, roles=(('Owner', comment), ))
            if appstruct.get('associated_contents', []):
                comment.set_associated_contents(
                    appstruct['associated_contents'], user)

            self._alert_users(context, request, author, comment, channel)
            context.reindex()
            user.set_read_date(channel, datetime.datetime.now(tz=pytz.UTC))

        return {}
Example #26
0
 def start(self, context, request, appstruct, **kw):
     root = getSite()
     user = get_current()
     proposal = context.proposal
     working_group = proposal.working_group
     author = working_group.get_member(user)
     copy_of_amendment = copy(context,
                              (proposal, 'amendments'),
                              omit=('created_at',
                                    'modified_at',
                                    'explanations'))
     copy_of_amendment.set_data(appstruct)
     copy_of_amendment.text = html_diff_wrapper.normalize_text(
         copy_of_amendment.text)
     copy_of_amendment.setproperty('originalentity', context)
     copy_of_amendment.state = PersistentList(['draft'])
     copy_of_amendment.setproperty('author', author)
     localizer = request.localizer
     copy_of_amendment.title = localizer.translate(
         _('Amended version ')) + str(getattr(proposal,
                                      '_amendments_counter', 1))
     grant_roles(user=author, roles=(('Owner', copy_of_amendment), ))
     copy_of_amendment.text_diff = get_text_amendment_diff(
         proposal, copy_of_amendment)
     copy_of_amendment.reindex()
     proposal._amendments_counter = getattr(
         proposal, '_amendments_counter', 1) + 1
     context.reindex()
     request.registry.notify(ActivityExecuted(self, [context], author))
     return {'newcontext': copy_of_amendment}
Example #27
0
    def start(self, context, request, appstruct, **kw):
        root = getSite()
        user = get_current(request)
        mask = user.get_mask(root) if hasattr(user, 'get_mask') else user
        author = mask if appstruct.get('anonymous', False) and mask else user
        answer = appstruct['_object_data']
        context.addtoproperty('answers', answer)
        answer.init_title()
        answer.format(request)
        answer.state = PersistentList(['published'])
        answer.reindex()
        if getattr(answer, 'option', None) is not None:
            answer.question.add_selected_option(user, answer.option)

        transaction.commit()
        grant_roles(user=author, roles=(('Owner', answer), ))
        answer.setproperty('author', author)
        if appstruct.get('associated_contents', []):
            answer.set_associated_contents(appstruct['associated_contents'],
                                           author)

        self._alert_users(context, request, author, answer)
        context.reindex()
        user.set_read_date(answer.channel, datetime.datetime.now(tz=pytz.UTC))
        return {}
Example #28
0
 def start(self, context, request, appstruct, **kw):
     new_smart_folder = appstruct['_object_data']
     context.addtoproperty('smart_folders', new_smart_folder)
     grant_roles(roles=(('Owner', new_smart_folder), ))
     new_smart_folder.setproperty('author', get_current())
     new_smart_folder.state = PersistentList(['private'])
     new_smart_folder.reindex()
     return {'newcontext': new_smart_folder}
Example #29
0
 def start(self, context, request, appstruct, **kw):
     new_smart_folder = appstruct['_object_data']
     context.addtoproperty('smart_folders', new_smart_folder)
     grant_roles(roles=(('Owner', new_smart_folder), ))
     new_smart_folder.setproperty('author', get_current())
     new_smart_folder.state = PersistentList(['private'])
     new_smart_folder.reindex()
     return {'newcontext': new_smart_folder}
Example #30
0
    def start(self, context, request, appstruct, **kw):
        data = context.get_data(PersonSchema())
        annotations = getattr(context, 'annotations',
                              {}).get(PROCESS_HISTORY_KEY, [])
        data.update({'password': appstruct['password']})
        data = {
            key: value
            for key, value in data.items() if value is not colander.null
        }
        data.pop('title')
        root = getSite()
        locale = my_locale_negotiator(request)
        data['locale'] = locale
        person = Person(**data)
        principals = find_service(root, 'principals')
        name = person.first_name + ' ' + person.last_name
        users = principals['users']
        name = name_chooser(users, name=name)
        users[name] = person
        grant_roles(person, roles=('Member', ))
        grant_roles(person, (('Owner', person), ))
        person.state.append('active')
        oid = str(get_oid(context))
        get_socket().send_pyobj(('stop', 'persistent_' + oid))
        organization = context.organization
        if organization:
            person.setproperty('organization', organization)

        root.delfromproperty('preregistrations', context)
        person.init_annotations()
        person.annotations.setdefault(PROCESS_HISTORY_KEY,
                                      PersistentList()).extend(annotations)
        person.reindex()
        request.registry.notify(ActivityExecuted(self, [person], person))
        root.addtoproperty('news_letter_members', person)
        newsletters = root.get_newsletters_automatic_registration()
        email = getattr(person, 'email', '')
        if newsletters and email:
            for newsletter in newsletters:
                newsletter.subscribe(person.first_name, person.last_name,
                                     email)

        transaction.commit()
        if email:
            mail_template = root.get_mail_template('registration_confiramtion',
                                                   person.user_locale)
            subject = mail_template['subject'].format(
                novaideo_title=root.title)
            recipientdata = get_user_data(person, 'recipient', request)
            message = mail_template['template'].format(
                login_url=request.resource_url(root, '@@login'),
                novaideo_title=root.title,
                **recipientdata)
            alert('email', [root.get_site_sender()], [email],
                  subject=subject,
                  body=message)

        return {'person': person}
Example #31
0
 def start(self, context, request, appstruct, **kw):
     root = getSite()
     newfile = appstruct['_object_data']
     root.addtoproperty('files', newfile)
     newfile.state.append('published')
     grant_roles(roles=(('Owner', newfile), ))
     newfile.setproperty('author', get_current())
     newfile.reindex()
     return {'newcontext': newfile}
Example #32
0
 def start(self, context, request, appstruct, **kw):
     root = getSite()
     newadvertising = appstruct['_object_data']
     root.addtoproperty('advertisings', newadvertising)
     newadvertising.state.append('editable')
     grant_roles(roles=(('Owner', newadvertising), ))
     newadvertising.setproperty('author', get_current())
     newadvertising.reindex()
     return {'newcontext': newadvertising}
Example #33
0
 def start(self, context, request, appstruct, **kw):
     root = getSite()
     newadvertising = appstruct['_object_data']
     root.addtoproperty('advertisings', newadvertising)
     newadvertising.state.append('editable')
     grant_roles(roles=(('Owner', newadvertising), ))
     newadvertising.setproperty('author', get_current())
     newadvertising.reindex()
     return {'newcontext': newadvertising}
Example #34
0
    def start(self, context, request, appstruct, **kw):
        root = getSite()
        author = get_current()
        artists, new_artists = extract_artists(appstruct.pop('artists', []),
                                               request)
        appstruct.pop('artists_ids')
        schedules = []
        new_venues = []
        for schedule_data in appstruct['schedules']:
            schedule = schedule_data[OBJECT_DATA]
            venue_data = schedule_data.get('venue', None)
            if venue_data:
                venue, is_new = extract_venue(venue_data, request)
                if is_new:
                    new_venues.append(venue)

                schedule.setproperty('venue', venue)

            schedules.append(schedule)

        cultural_event = appstruct[OBJECT_DATA]
        cultural_event.setproperty('schedules', [])
        root.addtoproperty('cultural_events', cultural_event)
        for schedule in schedules:
            schedule.state = PersistentList(['created'])
            root.addtoproperty('schedules', schedule)
            cultural_event.addtoproperty('schedules', schedule)
            schedule.reindex_dates()
            if schedule_expired(schedule):
                schedule.state.append('archived')
                schedule.reindex()

        group_venues(new_venues, request)
        cultural_event.state.append('editable')
        grant_roles(roles=(('Owner', cultural_event), ))
        cultural_event.setproperty('original', context)
        cultural_event.setproperty('author', author)
        cultural_event.addtoproperty('contributors', author)
        cultural_event.add_contributors(context.contributors)
        cultural_event.addtoproperty('contributors', author)
        remove_addresses_coordinates(new_venues)
        cultural_event.setproperty('artists', artists)
        cultural_event.set_metadata(appstruct)
        cultural_event.reindex()
        send_creation_mails(cultural_event, request, author)
        source = request.GET.get('source', '')
        if source:
            source_culturalevent = get_obj(int(source))
            if source_culturalevent:
                root.delfromproperty('cultural_events', source_culturalevent)

        new_objects = new_venues
        new_objects.extend(new_artists)
        new_objects.append(cultural_event)
        request.registry.notify(ActivityExecuted(self, new_objects, author))
        return {'newcontext': cultural_event}
Example #35
0
 def start(self, context, request, appstruct, **kw):
     root = getSite()
     newfile = appstruct['_object_data']
     root.addtoproperty('files', newfile)
     newfile.state.append('published')
     grant_roles(roles=(('Owner', newfile), ))
     newfile.setproperty('author', get_current())
     newfile.reindex()
     self.newcontext = newfile
     return {}
Example #36
0
 def start(self, context, request, appstruct, **kw):
     root = getSite()
     user = get_current()
     newfile = appstruct['_object_data']
     root.addtoproperty('files', newfile)
     newfile.state = PersistentList(['draft'])
     grant_roles(user=user, roles=(('Owner', newfile), ))
     newfile.setproperty('author', user)
     newfile.reindex()
     request.registry.notify(ActivityExecuted(self, [newfile], user))
     return {'newcontext': newfile}
Example #37
0
 def start(self, context, request, appstruct, **kw):
     root = getSite()
     user = get_current()
     newfile = appstruct['_object_data']
     root.addtoproperty('files', newfile)
     newfile.state = PersistentList(['draft'])
     grant_roles(user=user, roles=(('Owner', newfile), ))
     newfile.setproperty('author', user)
     newfile.reindex()
     request.registry.notify(ActivityExecuted(self, [newfile], user))
     return {'newcontext': newfile}
Example #38
0
    def start(self, context, request, appstruct, **kw):
        data = context.get_data(PersonSchema())
        annotations = getattr(context, 'annotations', {}).get(PROCESS_HISTORY_KEY, [])
        data.update({'password': appstruct['password']})
        data = {key: value for key, value in data.items()
                if value is not colander.null}
        data.pop('title')
        root = getSite()
        locale = my_locale_negotiator(request)
        data['locale'] = locale
        person = Person(**data)
        principals = find_service(root, 'principals')
        name = person.first_name + ' ' + person.last_name
        users = principals['users']
        name = name_chooser(users, name=name)
        users[name] = person
        grant_roles(person, roles=('Member',))
        grant_roles(person, (('Owner', person),))
        person.state.append('active')
        oid = str(get_oid(context))
        get_socket().send_pyobj(('stop', 'persistent_' + oid))
        organization = context.organization
        if organization:
            person.setproperty('organization', organization)

        root.delfromproperty('preregistrations', context)
        person.init_annotations()
        person.annotations.setdefault(
            PROCESS_HISTORY_KEY, PersistentList()).extend(annotations)
        person.reindex()
        request.registry.notify(ActivityExecuted(self, [person], person))
        root.addtoproperty('news_letter_members', person)
        newsletters = root.get_newsletters_automatic_registration()
        email = getattr(person, 'email', '')
        if newsletters and email:
            for newsletter in newsletters:
                newsletter.subscribe(
                    person.first_name, person.last_name, email)

        transaction.commit()
        if email:
            mail_template = root.get_mail_template(
                'registration_confiramtion', person.user_locale)
            subject = mail_template['subject'].format(
                novaideo_title=root.title)
            recipientdata = get_user_data(person, 'recipient', request)
            message = mail_template['template'].format(
                login_url=request.resource_url(root, '@@login'),
                novaideo_title=root.title,
                **recipientdata)
            alert('email', [root.get_site_sender()], [email],
                  subject=subject, body=message)

        return {'person': person}
Example #39
0
 def start(self, context, request, appstruct, **kw):
     root = getSite()
     user = get_current()
     newbrief = appstruct['_object_data']
     root.addtoproperty('reviews', newbrief)
     newbrief.state.append('draft')
     grant_roles(user=user, roles=(('Owner', newbrief), ))
     newbrief.setproperty('author', user)
     newbrief.set_metadata(appstruct)
     newbrief.reindex()
     request.registry.notify(ActivityExecuted(self, [newbrief], user))
     return {'newcontext': newbrief}
Example #40
0
 def start(self, context, request, appstruct, **kw):
     root = getSite()
     newgame = appstruct['_object_data']
     root.addtoproperty('games', newgame)
     newgame.state.append('editable')
     grant_roles(roles=(('Owner', newgame), ))
     newgame.setproperty('author', get_current())
     newgame.start_date = newgame.start_date.replace(tzinfo=None)
     newgame.end_date = newgame.end_date.replace(tzinfo=None)
     self.process.execution_context.add_created_entity('game', newgame)
     newgame.reindex()
     return {'newcontext': newgame}
Example #41
0
 def start(self, context, request, appstruct, **kw):
     root = getSite()
     new_smart_folder = appstruct['_object_data']
     root.addtoproperty('smart_folders', new_smart_folder)
     context.addtoproperty('children', new_smart_folder)
     grant_roles(roles=(('Owner', new_smart_folder), ))
     new_smart_folder.setproperty('author', get_current())
     new_smart_folder.state = PersistentList(['private'])
     new_smart_folder.filters = PersistentList(
         getattr(new_smart_folder, 'filters', []))
     new_smart_folder.reindex()
     return {'newcontext': new_smart_folder}
Example #42
0
 def start(self, context, request, appstruct, **kw):
     root = getSite()
     new_smart_folder = appstruct['_object_data']
     root.addtoproperty('smart_folders', new_smart_folder)
     context.addtoproperty('children', new_smart_folder)
     grant_roles(roles=(('Owner', new_smart_folder), ))
     new_smart_folder.setproperty('author', get_current())
     new_smart_folder.state = PersistentList(['private'])
     new_smart_folder.filters = PersistentList(
         getattr(new_smart_folder, 'filters', []))
     new_smart_folder.reindex()
     return {'newcontext': new_smart_folder}
Example #43
0
 def start(self, context, request, appstruct, **kw):
     root = getSite()
     user = get_current()
     newbrief = appstruct['_object_data']
     root.addtoproperty('reviews', newbrief)
     newbrief.state.append('draft')
     grant_roles(user=user, roles=(('Owner', newbrief), ))
     newbrief.setproperty('author', user)
     newbrief.set_metadata(appstruct)
     newbrief.reindex()
     request.registry.notify(ActivityExecuted(self, [newbrief], user))
     return {'newcontext': newbrief}
Example #44
0
 def start(self, context, request, appstruct, **kw):
     root = getSite()
     newgame = appstruct['_object_data']
     root.addtoproperty('games', newgame)
     newgame.state.append('editable')
     grant_roles(roles=(('Owner', newgame), ))
     newgame.setproperty('author', get_current())
     newgame.start_date = newgame.start_date.replace(tzinfo=None)
     newgame.end_date = newgame.end_date.replace(tzinfo=None)
     self.process.execution_context.add_created_entity('game', newgame)
     newgame.reindex()
     return {'newcontext': newgame}
Example #45
0
def evolve_roles_comments(root, registry):
    from novaideo.views.filter import find_entities
    from novaideo.content.interface import IComment
    from dace.objectofcollaboration.principal.util import grant_roles
    contents = find_entities(interfaces=[IComment])
    for comment in contents:
        author = comment.author
        comment.edited = False
        comment.pinned = False
        grant_roles(user=author, roles=(('Owner', comment), ))
        comment.reindex()

    log.info('Comments evolved.')
Example #46
0
    def start(self, context, request, appstruct, **kw):
        site = get_site_folder(True)
        group = appstruct['_object_data']
        root = context
        root.addtoproperty('groups', group)
        new_roles = [(r, site) for r in list(appstruct['roles'])]
        grant_roles(group, new_roles)
        if 'Member' in new_roles:
            grant_roles(group, ('Member', ))

        group.state.append('private')
        group.reindex()
        return {}
Example #47
0
    def start(self, context, request, appstruct, **kw):
        site = get_site_folder(True)
        group = appstruct['_object_data']
        root = context
        root.addtoproperty('groups', group)
        new_roles = [(r, site) for r in list(appstruct['roles'])]
        grant_roles(group, new_roles)
        if 'Member' in new_roles:
            grant_roles(group, ('Member',))

        group.state.append('private')
        group.reindex()
        return {}
Example #48
0
def add_nia_bot(root):
    nia_picture = os.path.join(os.path.dirname(__file__), 'static', 'images',
                               'nia.png')
    picture = None
    if os.path.exists(nia_picture):
        buf = open(nia_picture, mode='rb')
        picture = File(fp=buf, filename='nia', mimetype='image/png')

    nia = root['principals']['users'].get('nia', None)
    if nia is None:
        nia = Bot(title='Nia', picture=picture)
        root['principals']['users']['nia'] = nia
        grant_roles(nia, ('Bot', ), root=root)
Example #49
0
    def start(self, context, request, appstruct, **kw):
        user = get_current()
        report = appstruct['_object_data']
        context.addtoproperty('reports', report)
        report.state.append('pending')
        context.state.append('reported')
        grant_roles(user=user, roles=(('Owner', report), ))
        report.setproperty('author', user)
        report.reindex()
        context.reindex()
        if hasattr(user, 'add_report'):
            user.add_report(context)

        root = getSite()
        # get random moderators
        ballots = [
            b for b in getattr(context, 'ballot_processes', [])
            if b.id == 'contentreportdecision'
        ]
        if not ballots:
            moderators = get_random_users(ELECTORS_NB, [context.author])
            if not moderators:
                ignore(context, request, root)
            else:
                author = context.author

                def before_start(b_proc):
                    b_proc.content = context

                start_ballot(context,
                             author,
                             request,
                             root,
                             moderators,
                             'contentreportdecision',
                             before_start=before_start,
                             initiator=user,
                             subjects=[context])
                alert_data = get_ballot_alert_data(context, request, root,
                                                   moderators)
                alert_data.update(get_user_data(author, 'recipient', request))
                mail_template = root.get_mail_template('alert_report',
                                                       author.user_locale)
                if mail_template:
                    subject = mail_template['subject'].format(**alert_data)
                    message = mail_template['template'].format(**alert_data)
                    alert('email', [root.get_site_sender()], [author.email],
                          subject=subject,
                          body=message)

        return {}
Example #50
0
 def start(self, context, request, appstruct, **kw):
     root = getSite()
     user = get_current()
     venue = appstruct['_object_data']
     root.addtoproperty('venues', venue)
     venue.state.append('editable')
     grant_roles(user=user, roles=(('Owner', venue), ))
     venue.setproperty('author', user)
     venue.add_contributors([user])
     venue.set_metadata(appstruct)
     venue.hash_venue_data()
     venue.reindex()
     request.registry.notify(ActivityExecuted(self, [venue], user))
     return {'newcontext': venue}
Example #51
0
 def start(self, context, request, appstruct, **kw):
     root = getSite()
     user = get_current()
     venue = appstruct['_object_data']
     root.addtoproperty('venues', venue)
     venue.state.append('editable')
     grant_roles(user=user, roles=(('Owner', venue), ))
     venue.setproperty('author', user)
     venue.add_contributors([user])
     venue.set_metadata(appstruct)
     venue.hash_venue_data()
     venue.reindex()
     request.registry.notify(ActivityExecuted(self, [venue], user))
     return {'newcontext': venue}
Example #52
0
    def start(self, context, request, appstruct, **kw):
        root = getSite()
        user = get_current(request)
        mask = user.get_mask(root) if hasattr(user, 'get_mask') else user
        author = mask if appstruct.get('anonymous', False) and mask else user
        question = appstruct['_object_data']
        root.merge_keywords(question.keywords)
        root.addtoproperty('questions', question)
        question.state.extend(['pending', 'published'])
        grant_roles(user=author, roles=(('Owner', question), ))
        question.setproperty('author', author)
        if isinstance(context, Comment):
            related_contents = [question]
            content = context.subject
            correlations = connect(
                content,
                list(related_contents),
                {'comment': context.comment,
                 'type': context.intention},
                author,
                ['transformation'],
                CorrelationType.solid)
            for correlation in correlations:
                correlation.setproperty('context', context)

            context_type = context.__class__.__name__.lower()
            # Add Nia comment
            alert_comment_nia(
                question, request, root,
                internal_kind=InternalAlertKind.content_alert,
                subject_type='question',
                alert_kind='transformation',
                content=context
                )

            # Add Nia comment
            alert_comment_nia(
                context, request, root,
                internal_kind=InternalAlertKind.content_alert,
                subject_type=context_type,
                alert_kind='transformation_question',
                question=question
                )

        question.format(request)
        question.reindex()
        request.registry.notify(ActivityExecuted(self, [question], author))
        request.registry.notify(ObjectPublished(object=question))
        return {'newcontext': question}
Example #53
0
 def start(self, context, request, appstruct, **kw):
     root = getSite()
     user = get_current()
     artist = appstruct['_object_data']
     root.addtoproperty('artists', artist)
     artist.state.append('editable')
     grant_roles(user=user, roles=(('Owner', artist), ))
     artist.setproperty('author', user)
     artist.add_contributors([user])
     artist.set_metadata(appstruct)
     artist.hash_picture_fp()
     artist.hash_artist_data()
     artist.reindex()
     request.registry.notify(ActivityExecuted(self, [artist], user))
     return {'newcontext': artist}
Example #54
0
 def start(self, context, request, appstruct, **kw):
     user = get_current(request)
     event = appstruct['_object_data']
     context.addtoproperty('events', event)
     event.state.append('published')
     event.tree = getattr(context, 'tree', DEFAULT_TREE)
     event.title = getattr(context, 'title', 'Discussion event')
     grant_roles(user=user, roles=(('Owner', event), ))
     event.setproperty('author', user)
     timezone = pytz.timezone(event.tzname)
     event.date = event.date.replace(tzinfo=timezone)
     event.init_published_at()
     event.format(request)
     event.reindex()
     return {'newcontext': event}
Example #55
0
    def _set(self, new_managers):
        old_managers = self.managers
        managers_toadd = [u for u in new_managers if u not in old_managers]
        managers_todel = [u for u in old_managers if u not in new_managers]

        for manager in managers_todel:
            revoke_roles(manager, (('OrganizationResponsible', self), ))

        for manager in managers_toadd:
            for current_org in manager.managed_organization:
                revoke_roles(manager,
                             (('OrganizationResponsible', current_org), ))

            grant_roles(user=manager,
                        roles=(('OrganizationResponsible', self), ))