def sources_choices(node, kw):
    request = node.bindings['request']
    values = []
    values = [(str(get_oid(s)), s.title) for s in
              getattr(request.root, 'site_folders', [])]
    values = sorted(values, key=lambda e: e[1])
    values.insert(0, ('self', _('This site')))
    values.insert(0, ('all', _('All sites')))
    return Select2Widget(values=values, multiple=True)
Example #2
0
 def boolean_widget(node, kw):
     request = node.bindings['request']
     localizer = request.localizer
     values = [('True', localizer.translate(_('Yes'))),
               ('False', localizer.translate(_('No')))]
     return RadioChoiceWidget(
         values=values,
         template='lac:views/'
                  'templates/radio_choice.pt',
         inline=True,
         **kwargs)
Example #3
0
    def price_str(self):
        subscription = getattr(self, 'subscription', None)
        if subscription:
            subscription_type = subscription.get('subscription_type')
            price = subscription.get('price')
            if price == 0:
                return _('Free')

            if subscription_type == 'subscription':
                return str(price)+'€/Month'

            return str(price)+'€/Unit'

        return _('Free')
Example #4
0
    def start(self, context, request, appstruct, **kw):
        site = get_site_folder(True)
        url = request.resource_url(context, "")
        deadline_date = context.init_deadline(
            datetime.datetime.now(tz=pytz.UTC))
        localizer = request.localizer
        deadline_str = to_localized_time(
            deadline_date, request,
            format_id='defined_literal', ignore_month=True,
            ignore_year=True, translate=True)
        mail_template = site.get_mail_template('preregistration')
        subject = mail_template['subject']
        deadline_str = to_localized_time(
            deadline_date, request,
            format_id='defined_literal', ignore_month=True,
            ignore_year=True, translate=True)
        message = mail_template['template'].format(
            preregistration=context,
            user_title=localizer.translate(
                _(getattr(context, 'user_title', ''))),
            url=url,
            deadline_date=deadline_str.lower(),
            lac_title=request.root.title)
        alert('email', [site.get_site_sender()], [context.email],
              {'subject': subject, 'body': message})

        request.registry.notify(ActivityExecuted(self, [context], get_current()))
        return {}
Example #5
0
    def contact_invariant(self, appstruct):
        appstruct_copy = appstruct.copy()
        appstruct_copy.pop('surtax')
        if 'title' in appstruct_copy:
            appstruct_copy.pop('title')

        if not any(v != "" and v != colander.null
                   for v in list(appstruct_copy.values())):
            raise colander.Invalid(self,
                                   _('One value must be entered.'))

        if 'phone' in appstruct and appstruct['phone'] and \
            ('surtax' not in appstruct or \
             'surtax' in appstruct and not appstruct['surtax']):
            raise colander.Invalid(self,
                                   _('Surtax field must be filled in.'))
Example #6
0
class SendResult(ElementaryAction):
    style = 'button'  #TODO add style abstract class
    style_descriminator = 'global-action'
    style_picto = 'glyphicon glyphicon-envelope'
    style_order = 7
    submission_title = _('Continue')
    context = IGame
    roles_validation = send_roles_validation
    processsecurity_validation = send_processsecurity_validation
    relation_validation = global_relation_validation
    state_validation = send_state_validation

    def start(self, context, request, appstruct, **kw):
        winners = context.get_participants_by_mail(appstruct.get(
            'winners', []))
        participants = context.get_participants_by_mail(
            appstruct.get('participants', []))
        context.winners = PersistentDict(winners)
        context.participants = PersistentDict(participants)
        subject_template = appstruct.pop('subject')
        mail_template = appstruct.pop('message')
        site = get_site_folder(True)
        for email, winner in winners.items():
            subject = subject_template.format()
            mail = mail_template.format(first_name=winner['first_name'],
                                        last_name=winner['last_name'])
            alert('email', [site.get_site_sender()], [email], {
                'subject': subject,
                'body': mail
            })

        return {}

    def redirect(self, context, request, **kw):
        return HTTPFound(request.resource_url(context, "@@index"))
Example #7
0
class ManageKeywordsFormView(FormView):

    title = _('Manage keywords')
    schema = ManageKeywordsSchema()
    behaviors = [ManageKeywords, Cancel]
    formid = 'formmanagekeywords'
    name = 'formmanagekeywords'
Example #8
0
class FileSchema(VisualisableElementSchema, SearchableEntitySchema):

    text = colander.SchemaNode(
        colander.String(),
        widget=RichTextWidget(),
        title=_("Text")
        )
Example #9
0
def keywords_choice(node, kw):
    root = getSite()
    values = [(k, k) for k in root.keywords_ids]
    values.insert(0, ('', _('- Select -')))
    return Select2Widget(
        values=values,
        create=True)
Example #10
0
class VenueSchema(OriginVenue):

    title = colander.SchemaNode(
        colander.String(),
        widget=TextInputWidget(),
        title=_('Title')
        )
Example #11
0
 def contacts_invariant(self, appstruct):
     if not appstruct['contacts'] and \
        any(not s['venue']['other_conf']['contacts']
            for s in appstruct['schedules']):
         raise colander.Invalid(
             self.get('contacts'),
             _("Event's contact or all venues's contacts must be defined."))
Example #12
0
class Draw(ElementaryAction):
    style = 'button'  #TODO add style abstract class
    style_descriminator = 'global-action'
    style_picto = 'glyphicon glyphicon-trash'
    style_order = 7
    submission_title = _('Continue')
    actionType = ActionType.system
    context = IGame
    roles_validation = draw_roles_validation
    relation_validation = global_relation_validation

    def start(self, context, request, appstruct, **kw):
        context.state = PersistentList(['expired'])
        context.modified_at = datetime.datetime.now(tz=pytz.UTC)
        winner_number = context.winner_number
        participants = list(context.participants.keys())
        winners = []
        if len(participants) <= winner_number:
            winners = participants
        else:
            winners = random.sample(participants, winner_number)

        winners = context.get_participants_by_mail(winners)
        context.winners = PersistentDict(winners)
        context.reindex()
        return {}

    def redirect(self, context, request, **kw):
        root = getSite()
        return HTTPFound(request.resource_url(root, ""))
class RemoveSmartFolderViewMultipleView(MultipleView):
    title = _('Remove the smart folder')
    name = 'removesmartfolder'
    viewid = 'removesmartfolder'
    template = 'daceui:templates/simple_mergedmultipleview.pt'
    views = (RemoveSmartFolderViewStudyReport, RemoveSmartFolderView)
    validators = [RemoveSmartFolder.get_validator()]
Example #14
0
def venue_choice(node, kw):
    context = node.bindings['context']
    request = node.bindings['request']
    venues = node.bindings.get('venues', [])
    venues = [(context, context.title)]
    venues.insert(0, ('', _('- Select -')))
    ajax_url = request.resource_url(context,
                                    '@@cinemaapi',
                                    query={'op': 'find_cinema_venue'})
    def title_getter(obj):
        if not isinstance(obj, str):
            return getattr(obj, 'title', obj)
        else:
            try:
                obj = get_obj(int(obj), None)
                if obj:
                    return obj.title
                else:
                    return obj
            except Exception as e:
                log.warning(e)
                return obj

    return AjaxSelect2Widget(values=venues,
                        ajax_url=ajax_url,
                        title_getter=title_getter,
                        ajax_item_template="venue_item_template",
                        css_class="venue-title")
Example #15
0
class ConfigureSiteFolder(InfiniteCardinality):
    style = 'button'  #TODO add style abstract class
    style_descriminator = 'text-action'
    style_picto = 'glyphicon glyphicon-wrench'
    style_order = 2
    submission_title = _('Save')
    context = ISiteFolder
    roles_validation = siteadmin_roles_validation

    def start(self, context, request, appstruct, **kw):
        site_folder = appstruct['_object_data']
        site_folder.modified_at = datetime.datetime.now(tz=pytz.UTC)
        site_folder.filters = PersistentList(
            getattr(site_folder, 'filters', []))
        filters = getattr(site_folder, 'filters', [])
        root = getSite()
        for filter_ in filters:
            sources = filter_.get('other_filter', {}).get('sources', [])
            if sources and 'self' in sources:
                sources_ = list(sources)
                sources_.remove('self')
                sources_.append(str(get_oid(site_folder)))
                filter_['other_filter']['sources'] = list(set(sources_))

            tree = filter_.get('metadata_filter', {}).get('tree', None)
            if tree:
                site_folder.merge_tree(tree)
                root.merge_tree(tree)

        site_folder.reindex()
        return {}

    def redirect(self, context, request, **kw):
        return HTTPFound(request.resource_url(context, "@@index"))
Example #16
0
class FixAccessPerimeter(InfiniteCardinality):
    style = 'button'
    style_descriminator = 'footer-entity-action'
    style_picto = 'glyphicon glyphicon-eye-open'
    style_order = 0
    submission_title = _('Save')
    context = IEntity
    roles_validation = siteadmin_roles_validation

    def start(self, context, request, appstruct, **kw):
        access_control = appstruct['access_control']
        if 'self' in access_control:
            site = get_site_folder(True, request)
            if site:
                access_control = list(access_control)
                access_control.remove('self')
                access_control.append(get_oid(site))

        access_control = [get_oid(obj, obj) for obj in access_control]
        context.access_control = PersistentList(access_control)
        context.reindex()
        return {}

    def redirect(self, context, request, **kw):
        return HTTPFound(request.resource_url(context, "@@index"))
Example #17
0
    def update(self):
        source_oid = self.params('source')
        targets_oid = self.params('targets')
        if targets_oid and source_oid:
            try:
                if not isinstance(targets_oid, (list, tuple)):
                    targets_oid = [targets_oid]

                targets = [get_obj(int(t)) for t in targets_oid]
                source = get_obj(int(source_oid))
                if targets and source:
                    result = self.execute(
                        {'source': source,
                         'targets': targets})
                    if result and result[0].get('error', False):
                        view_error = ViewError()
                        view_error.principalmessage = _("An error has occurred.")
                        return self.failure(view_error)

                    return HTTPFound(
                        self.request.resource_url(source, '@@index'))
            except Exception as error:
                log.warning(error)

        return HTTPFound(self.request.resource_url(self.context, ''))
Example #18
0
class AddSiteFolder(InfiniteCardinality):
    style_descriminator = 'admin-action'
    style_picto = 'glyphicon glyphicon-globe'
    style_order = 0
    submission_title = _('Save')
    context = ICreationCulturelleApplication
    roles_validation = admin_roles_validation

    def start(self, context, request, appstruct, **kw):
        new_site_folder = appstruct['_object_data']
        templates = appstruct.get('mail_templates', [])
        for template in templates:
            template['title'] = DEFAULT_SITE_MAILS[
                template['mail_id']]['title']

        new_site_folder.mail_templates = templates
        context.addtoproperty('site_folders', new_site_folder)
        new_site_folder.state.append('published')
        new_site_folder.setproperty('author', get_current())
        new_site_folder.filters = PersistentList(
            getattr(new_site_folder, 'filters', []))
        new_site_folder.urls_ids = PersistentList(
            getattr(new_site_folder, 'urls_ids', []))
        new_site_folder.reindex()
        return {'newcontext': new_site_folder}

    def redirect(self, context, request, **kw):
        return HTTPFound(
            request.resource_url(kw['newcontext'], "@@configuresitefolder"))
Example #19
0
class SeeFilesView(BasicView):
    title = _('Files')
    name = 'seefiles'
    behaviors = [SeeFiles]
    template = 'lac:views/lac_view_manager/templates/search_result.pt'
    viewid = 'seefiles'

    def update(self):
        self.execute(None)
        objects = self.context.files
        default = datetime.datetime.now(tz=pytz.UTC)
        objects = sorted(objects,
                         key=lambda e: getattr(e, 'modified_at', default),
                         reverse=True)
        batch = Batch(objects, self.request, default_size=BATCH_DEFAULT_SIZE)
        batch.target = "#results_files"
        len_result = batch.seqlen
        result_body = []
        for obj in batch:
            object_values = {'object': obj}
            body = self.content(args=object_values,
                                template=obj.templates['default'])['body']
            result_body.append(body)

        result = {}
        values = {'bodies': result_body,
                  'length': len_result,
                  'batch': batch}
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #20
0
class PublishAdvertising(InfiniteCardinality):
    style = 'button'  #TODO add style abstract class
    style_descriminator = 'global-action'
    style_interaction = 'modal-action'
    style_picto = 'glyphicon glyphicon-ok'
    style_order = 5
    submission_title = _('Continue')
    context = IAdvertising
    roles_validation = publish_roles_validation
    state_validation = publish_state_validation
    processsecurity_validation = publish_processsecurity_validation

    def start(self, context, request, appstruct, **kw):
        context.state = PersistentList(['published'])
        context.modified_at = datetime.datetime.now(tz=pytz.UTC)
        context.reindex()
        if getattr(context, '_tree', None):
            tree = getattr(context, '_tree')
            request.get_site_folder.merge_tree(tree)
            getSite().merge_tree(tree)

        return {}

    def redirect(self, context, request, **kw):
        return HTTPFound(request.resource_url(context, "@@index"))
Example #21
0
class PayCulturalEvent(InfiniteCardinality):
    style = 'button'  #TODO add style abstract class
    style_descriminator = 'text-action'
    style_picto = 'glyphicon glyphicon-credit-card'
    style_order = 3
    submission_title = _('Continue')
    context = ICulturalEvent
    roles_validation = pay_roles_validation
    state_validation = pay_state_validation
    processsecurity_validation = pay_processsecurity_validation

    def start(self, context, request, appstruct, **kw):
        if appstruct.get('paid', True):
            context.state = PersistentList(['submitted'])
            submit_artists(context.artists)
            submit_venues([s.venue for s in context.schedules if s.venue])
            submit_cultural_event(context)
            context.modified_at = datetime.datetime.now(tz=pytz.UTC)
            context.reindex()
            request.registry.notify(
                ActivityExecuted(self, [context], get_current()))

        return {}

    def redirect(self, context, request, **kw):
        return HTTPFound(request.resource_url(context, "@@index"))
Example #22
0
class RemoveReviewViewMultipleView(MultipleView):
    title = _('Remove')
    name = 'removereview'
    viewid = 'removereview'
    template = 'daceui:templates/simple_mergedmultipleview.pt'
    views = (RemoveReviewViewStudyReport, RemoveReviewView)
    validators = [RemoveReview.get_validator()]
class PeriodicAdvertising(Advertising):
    """PeriodicAdvertising class"""

    type_title = _('Periodical advertisement')
    icon = 'lac-icon icon-periodic-advertising'
    templates = {
        'default': 'lac:views/templates/periodic_advertisting_result.pt',
        'bloc': 'lac:views/templates/periodic_advertisting_result.pt'
    }
    name = renamer()

    def get_content_data(self, request=None):
        if request is None:
            request = get_current_request()

        result = {'url': '', 'type': 'none'}
        if self.picture:
            result = {
                'url': self.picture.url,
                'filename': self.picture.filename
            }
            if self.picture.mimetype.startswith('application/pdf'):
                result['type'] = 'pdf'
            else:
                #application/quarkxpress, application/x-quark-express
                result['type'] = 'xpress'

        return result
    def update(self):
        self.execute(None)
        objects = find_entities(
            user=get_current(),
            interfaces=[IOrganization],
            sort_on='modified_at', reverse=True)
        batch = Batch(objects, self.request, default_size=BATCH_DEFAULT_SIZE)
        batch.target = "#results_organizations"
        len_result = batch.seqlen
        index = str(len_result)
        if len_result > 1:
            index = '*'

        self.title = _(CONTENTS_MESSAGES[index],
                       mapping={'nember': len_result})
        result_body = []
        for obj in batch:
            object_values = {'object': obj}
            body = self.content(args=object_values,
                                template=obj.templates['default'])['body']
            result_body.append(body)

        result = {}
        values = {
                'bodies': result_body,
                'length': len_result,
                'batch': batch,
               }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #25
0
class PublishFilmSynopsesViewMultipleView(MultipleView):
    title = _('Publish the film synopsis')
    name = 'publishfilmsynopses'
    viewid = 'publishfilmsynopses'
    template = 'daceui:templates/simple_mergedmultipleview.pt'
    views = (PublishFilmSynopsesViewStudyReport, PublishFilmSynopsesView)
    validators = [PublishFilmSynopses.get_validator()]
    def update(self):
        self.execute(None)
        root = getSite()
        objects = root.preregistrations
        objects.reverse()
        batch = Batch(objects, self.request, default_size=BATCH_DEFAULT_SIZE)
        batch.target = "#results_registrations"
        len_result = batch.seqlen
        index = str(len_result)
        if len_result > 1:
            index = '*'

        self.title = _(CONTENTS_MESSAGES[index],
                       mapping={'nember': len_result})
        result_body = []
        for obj in batch:
            object_values = {'object': obj}
            body = self.content(args=object_values,
                                template=obj.templates['default'])['body']
            result_body.append(body)

        result = {}
        values = {
            'bodies': result_body,
            'length': len_result,
            'batch': batch,
        }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #27
0
class RenewModerationServiceViewMultipleView(MultipleView):
    title = _('Renew the moderation service')
    name = 'renewmoderationservice'
    viewid = 'renewmoderationservice'
    template = 'daceui:templates/simple_mergedmultipleview.pt'
    views = (RenewModerationServiceViewStudyReport, RenewModerationServiceView)
    validators = [RenewModerationService.get_validator()]
Example #28
0
class EditInterviewView(FormView):

    title = _('Edit the interview')
    schema = select(InterviewSchema(factory=Interview,
                                    editable=True,
                                    omit=('artists_ids', 'artists', 'metadata')),
               ['title', 'review', 'tree', 'artists_ids', 'artists',
                'picture', 'article',
                'signature', 'informations',
                'showcase_review',
                ('metadata', ['accessibility', 'object_labels', 'connections_to'])])
    behaviors = [EditInterview, Cancel]
    formid = 'formmoderationeditinterview'
    name = 'moderationeditinterview'
    requirements = {'css_links': [],
                    'js_links': ['lac:static/js/artist_management.js']}

    def default_data(self):
        result = self.context.get_data(self.schema)
        result['artists'] = get_artist_data(
            result['artists'], self.schema.get('artists').children[0])
        picture = get_file_data(result['picture'])
        result.update(picture)
        result[OBJECT_OID] = get_oid(self.context)
        return result
Example #29
0
    def start(self, context, request, appstruct, **kw):
        login = appstruct['email']
        adapter = request.registry.queryMultiAdapter(
            (context, request),
            IUserLocator
            )
        if adapter is None:
            adapter = DefaultUserLocator(context, request)

        user = adapter.get_user_by_email(login)
        if user is not None:
            principals = find_service(user, 'principals')
            reset = principals.add_reset(user)
            reseturl = request.resource_url(reset)
            email = user.email
            site = get_site_folder(True)
            localizer = request.localizer
            mail_template = site.get_mail_template('reset_password')
            subject = mail_template['subject']
            message = mail_template['template'].format(
                person=user,
                user_title=localizer.translate(
                    _(getattr(user, 'user_title', ''))),
                reseturl=reseturl,
                lac_title=request.root.title)
            alert('email', [site.get_site_sender()], [email],
                  {'subject': subject, 'body': message})

        return {}
Example #30
0
class ManageKeywordsView(MultipleView):
    title = _('Manage keywords')
    name = 'managekeywords'
    viewid = 'managekeywords'
    template = 'daceui:templates/mergedmultipleview.pt'
    views = (ManageKeywordsViewStudyReport, ManageKeywordsFormView)
    validators = [ManageKeywords.get_validator()]
Example #31
0
class RejectGameViewMultipleView(MultipleView):
    title = _('Reject the advertisement')
    name = 'rejectgame'
    viewid = 'rejectgame'
    template = 'daceui:templates/simple_mergedmultipleview.pt'
    views = (RejectGameViewStudyReport, RejectGameView)
    validators = [RejectGame.get_validator()]
Example #32
0
class FindEntitiesJson(FormView):
    """Find entities form."""

    title = _('Find entities')
    name = 'find'
    schema = FindFilterSchema()
    behaviors = [Send]

    def calculate_posted_filter(self):
        form, reqts = self._build_form()
        form.formid = self.viewid + '_' + form.formid
        posted_formid = None
        if '__formid__' in self.request.POST:
            posted_formid = self.request.POST['__formid__']

        if posted_formid is not None and posted_formid == form.formid:
            controls = self.request.POST.items()
            validated = form.validate(controls)
            return validated

        return None

    def before_update(self):
        root = getSite()
        self.action = self.request.resource_url(root,
                                                '@@webservices_finder',
                                                query={'op': 'find_entities'})
class RemoveFilmsynopsesViewMultipleView(MultipleView):
    title = _('Remove the film synopsis')
    name = 'removefilmsynopses'
    viewid = 'removefilmsynopses'
    template = 'daceui:templates/simple_mergedmultipleview.pt'
    views = (RemoveFilmsynopsesViewStudyReport, RemoveFilmsynopsesView)
    validators = [RemoveFilmSynopses.get_validator()]
class CreatOrganizationsView(FormView):

    title = _('Creat organizations')
    schema = CreatOrganizationsSchema()
    behaviors = [CreatOrganizations, Cancel]
    formid = 'formcreatorganizations'
    name = 'creatorganizations'
class PayCulturalEventViewMultipleView(MultipleView):
    title = _('Pay the cultural event')
    name = 'payculturalevent'
    viewid = 'payculturalevent'
    template = 'daceui:templates/mergedmultipleview.pt'
    views = (PayCulturalEventViewStudyReport, PayCulturalEventView)
    validators = [PayCulturalEvent.get_validator()]
Example #36
0
class LabelSchema(VisualisableElementSchema):

    picture = colander.SchemaNode(
        ObjectDataOrigin(Image),
        widget=get_file_widget(file_type=['image']),
        title=_('Picture'),
        )
class PayCulturalEventView(FormView):
    title = _('Submit')
    name = 'payculturaleventform'
    formid = 'formpayculturalevent'
    schema = omit(PaySchema(), ['_csrf_token_'])
    behaviors = [PayCulturalEvent]
    validate_behaviors = False
    action = 'https://paiement.systempay.fr/vads-payment/'

    def update(self):
        payment_confirmation = self.params('payment_confirmation')
        if payment_confirmation:
            #@TODO traitement du paiment
            pass
        else:
            return super(PayCulturalEventView, self).update()

    def before_update(self):
        formwidget = deform.widget.FormWidget(css_class='compareform')
        formwidget.template = 'lac:views/templates/pay_form.pt'
        cancel_url = self.request.resource_url(self.context, '@@index')
        formwidget.cancel_url = cancel_url
        self.schema.widget = formwidget

    def default_data(self):
        #@TODO calcul de la signature et des valeur du formulaire
        return {'signature': 'testsignature'}
Example #38
0
def venue_choice(node, kw):
    context = node.bindings['context']
    request = node.bindings['request']
    venues = node.bindings.get('venues', [])
    venues = [(context, context.title)]
    venues.insert(0, ('', _('- Select -')))
    ajax_url = request.resource_url(context,
                                    '@@cinemaapi',
                                    query={'op': 'find_cinema_venue'})

    def title_getter(obj):
        if not isinstance(obj, str):
            return getattr(obj, 'title', obj)
        else:
            try:
                obj = get_obj(int(obj), None)
                if obj:
                    return obj.title
                else:
                    return obj
            except Exception as e:
                log.warning(e)
                return obj

    return AjaxSelect2Widget(values=venues,
                             ajax_url=ajax_url,
                             title_getter=title_getter,
                             ajax_item_template="venue_item_template",
                             css_class="venue-title")
Example #39
0
class RemoveBriefViewMultipleView(MultipleView):
    title = _('Remove the news flash')
    name = 'removebrief'
    viewid = 'removebrief'
    template = 'daceui:templates/simple_mergedmultipleview.pt'
    views = (RemoveBriefViewStudyReport, RemoveBriefView)
    validators = [RemoveBrief.get_validator()]
Example #40
0
    def update(self):
        self.execute(None)
        user = get_current()
        site = str(get_oid(get_site_folder(True)))
        games = find_entities(interfaces=[IGame],
                              metadata_filter={'states': ['published']},
                              other_filter={'sources': [site]},
                              force_publication_date=True)

        batch = Batch(games, self.request, default_size=BATCH_DEFAULT_SIZE)
        batch.target = "#results_contents"
        len_result = batch.seqlen
        index = str(len_result)
        if len_result > 1:
            index = '*'

        self.title = _(CONTENTS_MESSAGES[index],
                       mapping={'nember': len_result})
        result_body = []
        for obj in batch:
            render_dict = {'object': obj, 'current_user': user, 'state': None}
            body = self.content(args=render_dict,
                                template=obj.templates['default'])['body']
            result_body.append(body)

        result = {}
        values = {'bodies': result_body, 'batch': batch}
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #41
0
class ArchiveVenueViewMultipleView(MultipleView):
    title = _('Archive the venue')
    name = 'archivevenue'
    viewid = 'archivevenue'
    template = 'daceui:templates/simple_mergedmultipleview.pt'
    views = (ArchiveVenueViewStudyReport, ArchiveVenueView)
    validators = [ArchiveVenue.get_validator()]
Example #42
0
 def _init_definition(self):
     self.defineNodes(
             start = StartEventDefinition(),
             pg = ParallelGatewayDefinition(),
             #First loop
             pgblock1 = ParallelGatewayDefinition(),
             pgblock1sync = ParallelGatewayDefinition(),
             egblock1 = ExclusiveGatewayDefinition(),
             archiveculturalevent = ActivityDefinition(contexts=[ArchiveCulturalEvent],
                                    description=_("Archive cultural events"),
                                    title=_("Archive cultural events"),
                                    groups=[]),
             send_newsletters = ActivityDefinition(contexts=[SendNewsletters],
                                    description=_("Send newsletters"),
                                    title=_("Send newsletters"),
                                    groups=[]),
             alert_users = ActivityDefinition(contexts=[AlertUsers],
                                    description=_("Alert users"),
                                    title=_("Alert users"),
                                    groups=[]),
             timerblock1 = IntermediateCatchEventDefinition(
                              TimerEventDefinition(
                                time_date=calculate_next_date_block1)),
             #Second loop
             pgblock2 = ParallelGatewayDefinition(),
             pgblock2sync = ParallelGatewayDefinition(),
             egblock2 = ExclusiveGatewayDefinition(),
             synchronizepublishsettings = ActivityDefinition(contexts=[SynchronizePublishSettings],
                                    description=_("Synchronize publish settings"),
                                    title=_("Synchronize publish settings"),
                                    groups=[]),
             timerblock2 = IntermediateCatchEventDefinition(
                              TimerEventDefinition(
                                time_date=calculate_next_date_block2)),
             end = EndEventDefinition(),
     )
     self.defineTransitions(
             TransitionDefinition('start', 'pg'),
             #First loop
             TransitionDefinition('pg', 'egblock1'),
             TransitionDefinition('egblock1', 'pgblock1'),
             TransitionDefinition('pgblock1', 'archiveculturalevent'),
             TransitionDefinition('archiveculturalevent', 'pgblock1sync'),
             TransitionDefinition('pgblock1', 'send_newsletters'),
             TransitionDefinition('send_newsletters', 'pgblock1sync'),
             TransitionDefinition('pgblock1', 'alert_users'),
             TransitionDefinition('alert_users', 'pgblock1sync'),
             TransitionDefinition('pgblock1sync', 'timerblock1'),
             TransitionDefinition('timerblock1', 'egblock1'),
             #Second loop
             TransitionDefinition('pg', 'egblock2'),
             TransitionDefinition('egblock2', 'pgblock2'),
             TransitionDefinition('pgblock2', 'synchronizepublishsettings'),
             TransitionDefinition('synchronizepublishsettings', 'pgblock2sync'),
             TransitionDefinition('pgblock2sync', 'timerblock2'),
             TransitionDefinition('timerblock2', 'egblock2'),
     )
Example #43
0
 def _init_definition(self):
     self.defineNodes(
             start = StartEventDefinition(),
             pg = ParallelGatewayDefinition(),
             create_service = ActivityDefinition(contexts=[CreateModerationService, CreateSellingTicketsService,
               CreateImportService, CreateExtractionService, CreatePromotionService, CreateNewsletterService],
                                    description=_("Add a moderation service"),
                                    title=_("Add a moderation service"),
                                    groups=[]),
             see_service = ActivityDefinition(contexts=[SeeModerationService, SeeSellingTicketsService,
               SeeImportService, SeeExtractionService, SeePromotionService, SeeNewsletterService,
               SeeModerationUnitService],
                                    description=_("Details"),
                                    title=_("Details"),
                                    groups=[]),
             renew_service = ActivityDefinition(contexts=[RenewModerationService, RenewSellingTicketsService,
               RenewImportService, RenewExtractionService, RenewPromotionService, RenewNewsletterService],
                                    description=_("Renew the service"),
                                    title=_("Renew"),
                                    groups=[]),
             edit = ActivityDefinition(contexts=[EditModerationService, EditSellingTicketsService,
               EditImportService, EditExtractionService, EditPromotionService, EditNewsletterService],
                                    description=_("Edit the service"),
                                    title=_("Edit"),
                                    groups=[]),
             remove = ActivityDefinition(contexts=[RemoveModerationService, RemoveSellingTicketsService,
               RemoveImportService, RemoveExtractionService, RemovePromotionService, RemoveNewsletterService],
                                    description=_("Remove the service"),
                                    title=_("Remove"),
                                    groups=[]),
             eg = ExclusiveGatewayDefinition(),
             end = EndEventDefinition(),
     )
     self.defineTransitions(
             TransitionDefinition('start', 'pg'),
             TransitionDefinition('pg', 'create_service'),
             TransitionDefinition('create_service', 'eg'),
             TransitionDefinition('pg', 'renew_service'),
             TransitionDefinition('renew_service', 'eg'),
             TransitionDefinition('pg', 'edit'),
             TransitionDefinition('edit', 'eg'),
             TransitionDefinition('pg', 'remove'),
             TransitionDefinition('remove', 'eg'),
             TransitionDefinition('pg', 'see_service'),
             TransitionDefinition('see_service', 'eg'),
             TransitionDefinition('eg', 'end'),
     )
Example #44
0
 def _init_definition(self):
     self.defineNodes(
             start = StartEventDefinition(),
             pg = ParallelGatewayDefinition(),
             add_promotions = ActivityDefinition(contexts=[AddPromotions],
                                    description=_("Add promotions"),
                                    title=_("Add promotions"),
                                    groups=[]),
             eg = ExclusiveGatewayDefinition(),
             end = EndEventDefinition(),
     )
     self.defineTransitions(
             TransitionDefinition('start', 'pg'),
             TransitionDefinition('pg', 'add_promotions'),
             TransitionDefinition('add_promotions', 'eg'),
             TransitionDefinition('eg', 'end'),
     )
    def update(self):
        self.execute(None)
        user = get_current()
        filter_form, filter_data = self._add_filter(user)
        content_types = ['cultural_event', 'venue', 'artist']
        args = {'metadata_filter': {'content_types': content_types}}
        args = merge_with_filter_view(self, args)
        args['request'] = self.request
        if not args.get('metadata_filter', {}).get('content_types', []):
            metadata_filter = args.get('metadata_filter', {})
            metadata_filter['content_types'] = content_types
            args['metadata_filter'] = metadata_filter

        args['metadata_filter']['states'] = ['published']
        objects = find_entities(user=user,
                                sort_on='object_title', reverse=False,
                                include_site=True,
                                **args)
        url = self.request.resource_url(self.context, 'allduplicates')

        def condition(obj):
            """Batch condition"""
            return obj.get_duplicates()

        batch = ConditionalBatch(
            condition, objects, self.request,
            url=url,
            default_size=15)
        batch.target = "#results_contents"
        len_result = batch.seqlen
        index = str(len_result)
        if len_result > 1:
            index = '*'

        self.title = _(CONTENTS_MESSAGES[index],
                       mapping={'nember': len_result})
        filter_data['filter_message'] = self.title
        filter_body = self.filter_instance.get_body(filter_data)
        result_body = []
        for obj in batch:
            render_dict = {'object': obj,
                           'current_user': user,
                           'state': get_states_mapping(user, obj,
                                   getattr(obj, 'state_or_none', [None])[0])}
            body = self.content(args=render_dict,
                                template=obj.templates['duplicates'])['body']
            result_body.append(body)

        result = {}
        values = {'bodies': result_body,
                  'batch': batch,
                  'filter_body': filter_body}
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        result['css_links'] = filter_form['css_links']
        result['js_links'] = filter_form['js_links']
        return result
Example #46
0
 def _init_definition(self):
     self.defineNodes(
             start = StartEventDefinition(),
             pg = ParallelGatewayDefinition(),
             see_service = ActivityDefinition(contexts=[SeeServiceDefinition],
                                    description=_("Details"),
                                    title=_("Details"),
                                    groups=[]),
             edit = ActivityDefinition(contexts=[EditServiceDefinition],
                                    description=_("Edit the service definition"),
                                    title=_("Edit"),
                                    groups=[]),
             sees = ActivityDefinition(contexts=[SeeServicesDefinition],
                                    description=_("See definitions"),
                                    title=_("Service definitions"),
                                    groups=[_('See')]),
             eg = ExclusiveGatewayDefinition(),
             end = EndEventDefinition(),
     )
     self.defineTransitions(
             TransitionDefinition('start', 'pg'),
             TransitionDefinition('pg', 'edit'),
             TransitionDefinition('edit', 'eg'),
             TransitionDefinition('pg', 'see_service'),
             TransitionDefinition('see_service', 'eg'),
             TransitionDefinition('pg', 'sees'),
             TransitionDefinition('sees', 'eg'),
             TransitionDefinition('eg', 'end'),
     )
Example #47
0
    def _init_definition(self):
        self.defineNodes(
                start = StartEventDefinition(),
                pg = ParallelGatewayDefinition(),
                update = ActivityDefinition(contexts=[Update],
                                       description=_("Update processes"),
                                       title=_("update processes"),
                                       groups=[_('More')]),
                eg = ExclusiveGatewayDefinition(),
                end = EndEventDefinition(),
        )
        self.defineTransitions(
                TransitionDefinition('start', 'pg'),
                TransitionDefinition('pg', 'update'),
                TransitionDefinition('update', 'eg'),
                TransitionDefinition('eg', 'end'),

        )
Example #48
0
 def __init__(self, context, request):
     site = get_site_folder(True)
     site_id = get_oid(site)
     self.context = context
     self.request = request
     self.default_folder = SmartFolder(title=_('My private folders'),
                                       style=DEFAULT_FOLDER_COLORS,
                                       )
     self.default_folder.folder_order[site_id] = 1000
Example #49
0
    def update(self):
        self.execute(None)
        user = get_current()
        validated = getattr(self, 'validated', {})
        posted = self.request.POST or self.request.GET or {}
        posted = posted.copy()
        clear_posted = False
        if not validated:
            if posted:
                clear_posted = True
                searcinstance = SearchView(self.context, self.request,
                                           filter_result=True)
                if searcinstance.validated:
                    validated = searcinstance.validated

        objects = find_entities(
            user=user,
            sort_on='release_date', reverse=True,
            include_site=True,
            **validated)
        url = self.request.resource_url(
            self.context, self.request.view_name, query=posted)
        batch = Batch(objects, self.request,
                      default_size=core.BATCH_DEFAULT_SIZE,
                      url=url)
        #clear posted values: See usermenu panel
        if clear_posted:
            if self.request.POST:
                self.request.POST.clear()
            elif self.request.GET:
                self.request.GET.clear()

        batch.target = "#results_contents"
        len_result = batch.seqlen
        index = str(len_result)
        if len_result > 1:
            index = '*'

        self.title = _(CONTENTS_MESSAGES[index],
                       mapping={'nember': len_result})
        result_body = []
        for obj in batch:
            render_dict = {'object': obj,
                           'current_user': user,
                           'state': get_states_mapping(user, obj,
                                   getattr(obj, 'state_or_none', [None])[0])}
            body = self.content(args=render_dict,
                                template=obj.templates['default'])['body']
            result_body.append(body)

        result = {}
        values = {'bodies': result_body,
                  'batch': batch}
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #50
0
    def validate(cls, context, request, **kw):
        from pyramid.security import authenticated_userid
        if has_role(role=('Admin',)) or \
           authenticated_userid(request) == 'admin':
            if not request.user:
                request.user = request.root['principals']['users']['admin']

            return True

        raise ValidationError(msg=_("Permission denied"))
Example #51
0
 def __call__(self, node, value):
     country = value.get('country', 'fr')
     number = value.get('number', '')
     pattern_data = PHONE_PATTERNS.get(country, None)
     if pattern_data:
         pattern = pattern_data[1]
         if not pattern.match(number):
             raise colander.Invalid(
                 node,
                 _(self.msg,
                   mapping={'phone': number,
                            'country': pattern_data[0]}))
Example #52
0
    def __call__(self, node, value):
        """ Returns a ``colander.Function`` validator that uses the context (user)
        to validate the password."""
        user = get_current()
        if value['changepassword'] and \
           not user.check_password(value['currentuserpassword']):
            raise colander.Invalid(node.get('currentuserpassword'),
                        _(' Invalid current password'))

        if value['changepassword']:
            colander.Length(min=3, max=100)(node.get('password'),
                                            value['password'])
Example #53
0
 def _init_definition(self):
     self.defineNodes(
             start = StartEventDefinition(),
             pg = ParallelGatewayDefinition(),
             edit = ActivityDefinition(contexts=[EditCulturalEvent],
                                    description=_("Edit the cultural event"),
                                    title=_("Edit"),
                                    groups=[]),
             reject = ActivityDefinition(contexts=[RejectCulturalEvent],
                                    description=_("Reject the cultural event"),
                                    title=_("Reject"),
                                    groups=[]),
             publish = ActivityDefinition(contexts=[PublishCulturalEvent],
                                    description=_("Publish the cultural event"),
                                    title=_("Publish"),
                                    groups=[]),
             eg = ExclusiveGatewayDefinition(),
             end = EndEventDefinition(),
     )
     self.defineTransitions(
             TransitionDefinition('start', 'pg'),
             TransitionDefinition('pg', 'reject'),
             TransitionDefinition('reject', 'eg'),
             TransitionDefinition('pg', 'publish'),
             TransitionDefinition('publish', 'eg'),
             TransitionDefinition('pg', 'edit'),
             TransitionDefinition('edit', 'eg'),
             TransitionDefinition('eg', 'end'),
     )
Example #54
0
def text_to_search_widget(node, kw):
    context = node.bindings['context']
    request = node.bindings['request']
    root = getSite()
    ajax_url = request.resource_url(context,
                                    '@@creationculturelapi',
                                    query={'op': 'find_entities'})
    advanced_search_url = request.resource_url(
        root, '@@advanced_search')
    return SearchTextInputWidget(
        url=ajax_url,
        advanced_search_url=advanced_search_url,
        placeholder=_('Ex. théâtre le 13 juillet'))
Example #55
0
    def find_entities_by_artist(self):
        user = get_current()
        artist_id = self.params('artist')
        if not artist_id:
            objects = []
        else:
            artist = get_obj(int(artist_id), None)
            if not artist:
                objects = []
            else:
                objects = find_entities(
                    user=user,
                    metadata_filter={'states': ['published']},
                    contribution_filter={'artists_ids': [artist]},
                    sort_on='release_date', reverse=True,
                    include_site=True)

        batch = Batch(objects,
                      self.request,
                      url=self.request.url,
                      default_size=core.BATCH_DEFAULT_SIZE)
        batch.target = "#results"
        len_result = batch.seqlen
        result_body = []
        for obj in batch:
            object_values = {'object': obj,
                             'current_user': user,
                             'state': None}
            body = self.content(args=object_values,
                                template=obj.templates['default'])['body']
            result_body.append(body)

        values = {
                'bodies': result_body,
                'batch': batch,
                 }
        body = self.content(args=values, template=self.template)['body']
        len_result = len(objects)
        index = str(len_result)
        if len_result > 1:
            index = '*'

        title = _(CONTENTS_MESSAGES[index],
                  mapping={'nember': len_result})
        values = {
                'body': body,
                'title': title
                 }
        body = self.content(args=values,
                            template=self.wrapper_template)['body']
        return {'body': body}
    def before_update(self):
        site = get_site_folder(True)
        services = site.get_all_services(
            kinds=['sellingtickets', 'extractionservice'], delegation=False)
        if 'sellingtickets' not in services:
            self.schema = omit(self.schema,
                               ['selling_tickets',
                                ('schedules', ['ticketing_url'])])

        if 'extractionservice' in services:
            self.schema.get('description').description = _(
                'Describe succinctly the event.'
                ' Only this part of the description will '
                'be included in the paper version of the magazine.')
Example #57
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')
        structure = data.pop('structure')
        site = get_site_folder(True)
        root = getSite()
        person = Person(**data)
        principals = find_service(root, 'principals')
        name = getattr(person, 'first_name', '') + ' '\
            + getattr(person, 'last_name', '')
        users = principals['users']
        name = name_chooser(users, name=name)
        users[name] = person
        if structure:
            grant_roles(person, roles=(('CulturalAnimator', site),))
            person.setproperty('structure', structure)
        else:
            grant_roles(person, roles=(('Member', site),))

        grant_roles(person, roles=('Member',))
        grant_roles(person, (('Owner', person),))
        person.state.append('active')
        person.reindex()
        get_socket().send_pyobj(
            ('stop',
             'persistent_' + str(get_oid(context))))
        root.delfromproperty('preregistrations', context)
        person.add_customeraccount()
        person.init_annotations()
        person.annotations.setdefault(
            PROCESS_HISTORY_KEY, PersistentList()).extend(annotations)
        request.registry.notify(ActivityExecuted(self, [person], person))
        transaction.commit()
        localizer = request.localizer
        mail_template = site.get_mail_template('subscription_statement')
        subject = mail_template['subject']
        message = mail_template['template'].format(
            person=person,
            user_title=localizer.translate(
                _(getattr(person, 'user_title', ''))),
            login_url=request.resource_url(root, '@@login'),
            lac_title=request.root.title)
        alert('email', [site.get_site_sender()], [person.email],
              {'subject': subject, 'body': message})
        return {'person': person}
Example #58
0
    def _init_definition(self):
        self.defineNodes(
                start = StartEventDefinition(),
                pg = ParallelGatewayDefinition(),
                creat = ActivityDefinition(contexts=[CreateFile],
                                       description=_("Create a file"),
                                       title=_("Create a file"),
                                       groups=[_('Add')]),
                editfile = ActivityDefinition(contexts=[EditFile],
                                       description=_("Edit the file"),
                                       title=_("Edit"),
                                       groups=[]),
                seefile = ActivityDefinition(contexts=[SeeFile],
                                       description=_("Details"),
                                       title=_("Details"),
                                       groups=[]),
                seefiles = ActivityDefinition(contexts=[SeeFiles],
                                       description=_("Files"),
                                       title=_("Files"),
                                       groups=[_('See')]),
                eg = ExclusiveGatewayDefinition(),
                end = EndEventDefinition(),
        )
        self.defineTransitions(
                TransitionDefinition('start', 'pg'),
                TransitionDefinition('pg', 'creat'),
                TransitionDefinition('creat', 'eg'),
                TransitionDefinition('pg', 'seefile'),
                TransitionDefinition('seefile', 'eg'),
                TransitionDefinition('pg', 'editfile'),
                TransitionDefinition('editfile', 'eg'),
                TransitionDefinition('pg', 'seefiles'),
                TransitionDefinition('seefiles', 'eg'),
                TransitionDefinition('eg', 'end'),

        )
def validate_file_content(node, appstruct, width, height):
    if appstruct['picture']:
        mimetype = appstruct['picture']['mimetype']
        file_value = getattr(appstruct['picture']['fp'], 'raw',
                             appstruct['picture']['fp'])
        if mimetype.startswith('image'):
            try:
                file_value.seek(0)
            except Exception as e:
                log.warning(e)

            img = Image.open(file_value)
            img_width = img.size[0]
            img_height = img.size[1]
            file_value.seek(0)
            if img_width > width or img_height > height:
                raise colander.Invalid(node, _
                    (_('The image size is not valid: the allowed size is ${width} x ${height} px.',
                         mapping={'width': width,
                                   'height': height})))

        if mimetype.startswith('application/x-shockwave-flash'):
            try:
                file_value.seek(0)
            except Exception as e:
                log.warning(e)

            header = parse(file_value)
            file_value.seek(0)
            flash_width = header['width']
            flash_height = header['height']
            if flash_width > width or flash_height > height:
                raise colander.Invalid(node, _
                    (_('The flash animation size is not valid: the allowed size is ${width} x ${height} px.',
                         mapping={'width': width,
                                   'height': height})))