Exemple #1
0
class View(core.View):
    """A numer of macros for use with seantis.dir.base"""

    grok.context(Interface)
    grok.require('zope2.View')
    grok.name('seantis-dir-macros')

    template = grok.PageTemplateFile('templates/macros.pt')
    directory_template = grok.PageTemplateFile('templates/directory.pt')

    def __getitem__(self, key):
        if key == 'directory':
            return self.directory_template._template.macros['directory']
        return self.template._template.macros[key]
Exemple #2
0
class ReservationList(BaseView, ReservationListView, ReservationUrls):

    permission = "seantis.reservation.ViewReservations"

    grok.name('reservations')
    grok.require(permission)

    grok.context(IResourceBase)

    template = grok.PageTemplateFile('templates/reservations.pt')

    @property
    def group(self):
        if 'group' in self.request:
            return six.text_type(self.request['group'].decode('utf-8'))
        else:
            return u''

    @property
    def token(self):
        """ Limits the list to the given reservation. """
        return self.request.get('token', None)

    @property
    def print_site(self):
        """ Returns true if the document should be printed when opening it. """
        return self.request.get('print', None) is not None

    @property
    def body_classes(self):
        if utils.is_uuid(self.reservation):
            return ['single-reservation-view']
class YourReservations(ResourceBaseForm, YourReservationsData):

    permission = "seantis.reservation.SubmitReservation"

    grok.name('your-reservations')
    grok.require(permission)

    context_buttons = ('finish', )

    grok.context(Interface)

    css_class = 'seantis-reservation-form'

    template = grok.PageTemplateFile('templates/your_reservations.pt')

    @button.buttonAndHandler(_(u'Submit Reservations'), name="finish")
    def finish(self, data):
        def on_success():
            self.request.response.redirect(self.context.absolute_url())
            self.flash(_(u'Reservations Successfully Submitted'))

        utils.handle_action(self.confirm_reservations, success=on_success)

    @button.buttonAndHandler(_(u'Reserve More'), name="proceed")
    def proceed(self, data):
        # Don't do anything, reservations stay in the session.
        self.request.response.redirect(self.context.absolute_url())

    def update(self):
        if 'remove' in self.request and utils.is_uuid(self.request['remove']):
            self.remove_reservation(self.request['remove'])

            self.request.response.redirect(self.context.absolute_url())

        super(YourReservations, self).update()
Exemple #4
0
class GroupView(grok.View, AllocationGroupView):
    permission = 'zope2.View'

    grok.context(IResourceBase)
    grok.require(permission)
    grok.name('group')

    group = None
    template = grok.PageTemplateFile('templates/group.pt')

    def update(self, **kwargs):
        self.group = self.request.get('name', u'').decode('utf-8')
        self.recurrence_id = utils.request_id_as_int(
                                             self.request.get('recurrence_id'))

    def title(self):
        return self.group

    @property
    def timespan_start(self):
        return None

    @property
    def timespan_end(self):
        return None
Exemple #5
0
 def render(self):
     self.subject = 'Application to the Healthy Workplaces campaign'
     self.template = grok.PageTemplateFile(
         'templates/mail_organisation_created_siteowner.pt')
     if not self.from_addr:
         raise KeyError('email_from_address')
     return self.template.render(self)
Exemple #6
0
 def render(self):
     self.subject = 'Profile submitted'
     self.template = grok.PageTemplateFile(
         'templates/mail_organisation_submitted_siteowner.pt')
     if not self.from_addr:
         raise KeyError('email_from_address')
     return self.template.render(self)
Exemple #7
0
 def render(self):
     self.subject = 'Profile rejected'
     self.template = grok.PageTemplateFile(
         'templates/mail_mediapartner_rejected.pt')
     if not self.from_addr:
         raise KeyError('email_from_address')
     return self.template.render(self)
Exemple #8
0
class Utilsviewlet(BaseViewlet):
    grok.context(Interface)
    grok.name('seantis.reservation.utilslet')
    grok.require('zope2.View')
    grok.viewletmanager(OverviewletManager)

    grok.order(10)

    template = grok.PageTemplateFile('templates/utils.pt')

    @property
    def compare_link(self):
        return utils.compare_link(self.manager.resource_uuids)

    @property
    def monthly_report_link(self):
        return utils.monthly_report_link(self.context, self.request,
                                         self.manager.resource_uuids)

    @property
    def latest_reservations_link(self):
        return utils.latest_reservations_link(self.context, self.request,
                                              self.manager.resource_uuids)

    @property
    def export_link(self):
        return utils.export_link(self.context, self.request,
                                 self.manager.resource_uuids)
Exemple #9
0
class OrganizationView(BaseView):

    grok.require('zope2.View')
    grok.context(IOrganization)
    grok.name('view')

    template = grok.PageTemplateFile('templates/organization.pt')
    event_fired = False

    def suborganizations(self):
        return [
            (brain["Title"] if "Title" in brain else "", brain.getURL())
            for brain in self.context.suborganizations()
        ]

    def memberships(self):
        memberships = []
        for brain in self.context.memberships():
            obj = brain.getObject()
            person = obj.person.to_object
            name = person.title if person else u''
            memberships.append((obj.role, name, obj.prefix, brain.getURL()))

        if self.context.display_alphabetically:
            sortkey = lambda m: tools.unicode_collate_sortkey()(m[1])
            memberships = sorted(memberships, key=sortkey)

        return memberships

    def update(self, **kwargs):
        super(OrganizationView, self).update(**kwargs)

        if not self.event_fired:
            notify(ResourceViewedEvent())
            self.event_fired = True
class TermsView(grok.View):

    grok.name('terms')
    grok.context(IEventsDirectory)
    grok.require('zope2.View')

    label = _(u'Terms and Conditions')
    template = grok.PageTemplateFile('templates/terms.pt')
Exemple #11
0
 def render(self, parent):
     self.subject = 'Content submitted'
     self.content_type = self.context.Type()
     self.parent_type = parent.Type()
     self.parent_name = parent.Title()
     self.template = grok.PageTemplateFile(
         'templates/mail_content_submitted.pt')
     return self.template.render(self)
Exemple #12
0
class View(core.View):
    """A numer of macros for use with seantis.dir.base"""

    grok.context(Interface)
    grok.require('zope2.View')
    grok.name('seantis-dir-macros')

    template = grok.PageTemplateFile('templates/macros.pt')
Exemple #13
0
class View(grok.View):
    grok.context(Interface)
    grok.require('zope2.View')
    grok.name('meeting-macros')

    template = grok.PageTemplateFile('templates/macros.pt')

    def __getitem__(self, key):
        return self.template._template.macros[key]
class ExtendedDirectoryViewlet(grok.Viewlet):
    grok.context(IEventsDirectory)
    grok.name('seantis.dir.events.directory.detail')
    grok.require('zope2.View')
    grok.viewletmanager(directory.DirectoryViewletManager)

    template = grok.PageTemplateFile('templates/directorydetail.pt')

    def __init__(self, *args, **kwargs):
        super(ExtendedDirectoryViewlet, self).__init__(*args, **kwargs)
Exemple #15
0
 def render(self, username, created):
     self.username = username
     self.subject = 'Profile approved'
     self.template = grok.PageTemplateFile(
         'templates/mail_approve_media_partner.pt')
     self.created = created
     reset_tool = getToolByName(self, 'portal_password_reset')
     membership = getToolByName(self, 'portal_membership')
     member = membership.getMemberById(username)
     self.reset = reset_tool.requestReset(member.getId())
     return self.template.render(self)
Exemple #16
0
class XlsExportsView(grok.View):
    """Shows a list of possible exports."""

    grok.context(IDirectoryBase)
    grok.require('cmf.ModifyPortalContent')
    grok.name('exports')

    _template = grok.PageTemplateFile('templates/exports.pt')

    def title(self):
        return ' '.join((_(u'Exports for'), self.context.title))

    @cached_property
    def providers(self):
        providers = []
        for provider in subscribers([self.context], IExportProvider):
            if provider.layer:
                if not provider.layer.providedBy(self.request):
                    continue

            providers.append(provider)

        return providers

    def exports(self):

        ExportDefinition = namedtuple('ExportDefinition',
                                      ('url', 'title', 'description'))

        exports = []
        for provider in self.providers:

            url = provider.url or ''.join(
                (self.url(), '?export-id=', provider.id))

            exports.append(
                ExportDefinition(
                    url=url,
                    title=utils.translate(self.context, self.request,
                                          provider.title),
                    description=utils.translate(self.context, self.request,
                                                provider.description)))

        return exports

    def render(self):
        id = self.request.get('export-id', None)

        for provider in self.providers:
            if provider.id == id:
                return provider.export(self.request)

        return self._template.render(self)
class OrganizationView(BaseView):

    grok.require('zope2.View')
    grok.context(IMembership)
    grok.name('view')

    template = grok.PageTemplateFile('templates/membership.pt')

    def person(self):
        person = self.context.person.to_object
        if person:
            return [person.title, person.absolute_url()]
        return [u'', u'']
Exemple #18
0
class ExportListView(grok.View, form.ResourceParameterView):
    """Shows the available exports for the resource. """

    permission = 'seantis.reservation.ViewReservations'
    grok.require(permission)
    grok.context(Interface)
    grok.name('reservation-exports')

    template = grok.PageTemplateFile('templates/reservation_exports.pt')

    title = _(u'Export Reservations')

    def exports(self):
        return get_exports(self.context, self.request, self.uuids)
Exemple #19
0
class GroupView(BaseView, AllocationGroupView):
    permission = 'zope2.View'

    grok.context(IResourceBase)
    grok.require(permission)
    grok.name('group')

    group = None
    template = grok.PageTemplateFile('templates/group.pt')

    def update(self, **kwargs):
        self.group = self.request.get('name', u'').decode('utf-8')

    def title(self):
        return self.group
class View(grok.View, ReservationUrls, ReservationDataView):
    """A numer of macros for use with seantis.dir.base"""

    grok.context(Interface)
    grok.require('zope2.View')
    grok.name('seantis-reservation-macros')

    template = grok.PageTemplateFile('templates/macros.pt')

    def __getitem__(self, key):
        return self.template._template.macros[key]

    @property
    def utils(self):
        return utils
class YourReservationsViewlet(grok.Viewlet, YourReservationsData):
    grok.context(Interface)
    grok.name('seantis.reservation.YourReservationsviewlet')
    grok.require('zope2.View')
    grok.viewletmanager(OverviewletManager)

    grok.order(0)

    template = grok.PageTemplateFile('templates/your_reservations_viewlet.pt')

    def available(self):
        return self.has_reservations

    def finish_url(self):
        return self.context.absolute_url() + '/your-reservations'
Exemple #22
0
class Listing(BaseView):
    permission = 'zope2.View'
    implements(IOverview)

    grok.context(IATFolder)
    grok.require(permission)
    grok.name('resource_listing')

    template = grok.PageTemplateFile('templates/listing.pt')

    def list_item(self, item):
        return item.portal_type == 'seantis.reservation.resource'

    def resource_map(self):
        return (r.UID for r in utils.portal_type_in_context(
            self.context, 'seantis.reservation.resource'))
Exemple #23
0
class YourReservations(ResourceBaseForm, YourReservationsData):

    permission = "seantis.reservation.SubmitReservation"

    grok.name('your-reservations')
    grok.require(permission)

    context_buttons = ('finish', )
    standalone_buttons = ('cancel', )

    grok.context(Interface)

    css_class = 'seantis-reservation-form'

    template = grok.PageTemplateFile('templates/your_reservations.pt')

    @button.buttonAndHandler(_(u'Submit Reservations'), name="finish")
    def finish(self, data):

        resources = self.resources()

        def on_success():
            self.request.response.redirect(
                '{context}/thank-you-for-reserving?uuid={uuids}'.format(
                    context=self.context.absolute_url(),
                    uuids='&uuid='.join(resources)))

        utils.handle_action(self.confirm_reservations, success=on_success)

    # the button's name is 'cancel' because it should behave like a cancel
    # button in the browser (namely, it should not refetch the events)
    @button.buttonAndHandler(_(u'Reserve More'), name="cancel")
    def proceed(self, data):
        # Don't do anything, reservations stay in the session.
        self.request.response.redirect(self.context.absolute_url())

    def update(self):
        if 'remove' in self.request and utils.is_uuid(self.request['remove']):
            self.remove_reservation(self.request['remove'])

            self.request.response.redirect(self.context.absolute_url())

        super(YourReservations, self).update()
Exemple #24
0
class TemplatesViewlet(BaseViewlet):

    permission = 'cmf.ModifyPortalContent'

    grok.context(IFolderish)
    grok.require(permission)

    grok.name('seantis.reservation.mailviewlet')
    grok.viewletmanager(OverviewletManager)

    grok.order(4)

    _template = grok.PageTemplateFile('templates/email_templates.pt')

    @view.memoize
    def templates(self):
        templates = [
            t.getObject() for t in utils.portal_type_in_context(
                self.context, portal_type='seantis.reservation.emailtemplate')
        ]
        return sorted(templates, key=lambda t: t.title)

    def links(self, template=None):

        # global links
        if not template:
            baseurl = self.context.absolute_url()
            return [(_(u'Add email template'),
                     baseurl + '/++add++seantis.reservation.emailtemplate')]

        # template specific links
        links = []

        baseurl = template.absolute_url()
        links.append((_(u'Edit'), baseurl + '/edit'))
        links.append((_(u'Delete'), baseurl + '/delete_confirmation'))

        return links

    def render(self, **kwargs):
        return self._template.render(self)
Exemple #25
0
class ThankYouPage(BaseView, ResourceParameterView):
    grok.context(Interface)
    grok.require('zope2.View')
    grok.name('thank-you-for-reserving')

    template = grok.PageTemplateFile('templates/thankyoupage.pt')

    @property
    def current_url(self):
        return self.request.ACTUAL_URL + "?" + self.request.QUERY_STRING

    def infoblocks(self):
        blocks = []

        for resource in self.resources.values():
            text = (getattr(resource, 'thank_you_text', None) or u'').strip()

            if text:
                blocks.append((utils.get_resource_title(resource), text))

        return blocks
class LatestReservationsReportView(grok.View, GeneralReportParametersMixin):

    permission = 'seantis.reservation.ViewReservations'

    grok.require(permission)

    grok.context(Interface)
    grok.name('latest_reservations')

    template = grok.PageTemplateFile('../templates/latest_reservations.pt')

    @property
    def title(self):
        return _(u'Reservations in the last 30 days')

    @property
    def results(self):
        return latest_reservations(self.resources, self.reservations or '*')

    def reservation_title(self, reservation):
        human_date_text = utils.translate(self.context, self.request,
                                          human_date(reservation.created))
        return '{} - {}'.format(human_date_text, reservation.title)
class ReservationList(grok.View, ReservationListView, ReservationUrls):

    permission = "seantis.reservation.ViewReservations"

    grok.name('reservations')
    grok.require(permission)

    grok.context(IResourceBase)

    template = grok.PageTemplateFile('templates/reservations.pt')

    #XXX maybe move to ReservationList
    def all_reservations(self):
        query = super(ReservationList, self).all_reservations()
        if query:
            return query

        if self.recurring_allocation_id:
            scheduler = self.context.scheduler()
            return scheduler.reservations_by_recurring_allocation(
                                                  self.recurring_allocation_id)

        return None

    def all_allocations(self):
        query = super(ReservationList, self).all_allocations()
        if query:
            return query

        if self.recurring_allocation_id:
            return Session.query(Allocation).filter_by(
                                               id=self.recurring_allocation_id)

        return None

    def reservations_by_recurring_allocation(self):
        """Find reservations that target a recurring allocation
        """

        allocation_id = self.recurring_allocation_id
        allocation = Session.query(Allocation).get(allocation_id)
        if not allocation:
            return None

        reservation_tokens = [each.reservation_token for each
                              in allocation.reserved_slots]
        return Session.query(Reservation).filter(
                                    Reservation.token.in_(reservation_tokens))

    @property
    def recurring_allocation_id(self):
        allocation_id = self.request.get('recurring_allocation_id')
        return utils.request_id_as_int(allocation_id)

    @property
    def id(self):
        return utils.request_id_as_int(self.request.get('id'))

    @property
    def group(self):
        if 'group' in self.request:
            return unicode(self.request['group'].decode('utf-8'))
        else:
            return u''

    @property
    def reservation(self):
        """ Limits the list to the given reservation. """
        return self.request.get('reservation', None)

    @property
    def print_site(self):
        """ Returns true if the document should be printed when opening it. """
        return self.request.get('print', None) is not None
Exemple #28
0
class TimeframeViewlet(BaseViewlet):

    permission = 'cmf.ModifyPortalContent'

    grok.context(IFolderish)
    grok.require(permission)

    grok.name('seantis.reservation.timeframeviewlet')
    grok.viewletmanager(OverviewletManager)

    grok.order(3)

    _template = grok.PageTemplateFile('templates/timeframes.pt')

    @property
    def workflowTool(self):
        return getToolByName(self.context, "portal_workflow")

    @view.memoize
    def timeframes(self):
        frames = [t.getObject() for t in timeframes_in_context(self.context)]
        return sorted(frames, key=lambda f: f.start)

    @property
    @view.memoize
    def titles(self):
        """Returns a dict with titles keyed by review_state. The workflow-tool
        has a getTitleForStateOnType function which should do that but
        it does not return updated values for me, just some old ones.

        The listWFStatesByTitle function on the other hand contains
        the right information and I will just use that instead.

        Once this breaks I'll read the source of the workflow tool, until this
        happens I'm off to do useful things.

        """

        titles = self.workflowTool.listWFStatesByTitle()
        return dict(((t[1], t[0]) for t in titles))

    def state(self, timeframe):
        state = self.workflowTool.getStatusOf(
            "timeframe_workflow", timeframe
        )['review_state']
        title = self.titles[state]
        return state, utils.translate_workflow(
            self.context, self.request, title
        )

    def render(self, **kwargs):
        if self.context is None:
            return u''

        return self._template.render(self)

    def visible(self, frame):
        state = self.state(frame)[0]
        return state == 'visible'

    def links(self, frame=None):

        # global links
        if not frame:
            baseurl = self.context.absolute_url()
            return [(_(u'Add timeframe'),
                    baseurl + '/++add++seantis.reservation.timeframe')]

        # frame specific links
        links = []

        action_tool = getToolByName(frame, 'portal_actions')
        actions = action_tool.listFilteredActionsFor(frame)['workflow']

        for action in actions:
            if action['visible'] and action['available']:
                action['title'] = utils.translate_workflow(
                    self.context, self.request, action['title']
                )
                links.append((action['title'], action['url']))

        baseurl = frame.absolute_url()
        links.append((_(u'Edit'), baseurl + '/edit'))
        links.append((_(u'Delete'), baseurl + '/delete_confirmation'))

        return links
Exemple #29
0
 def render(self):
     self.subject = 'Profile finalised'
     self.template = grok.PageTemplateFile(
         'templates/mail_organisation_submitted_creator.pt')
     return self.template.render(self)
Exemple #30
0
 def render(self):
     self.subject = 'Application to the Healthy Workplaces campaign'
     self.template = grok.PageTemplateFile(
         'templates/mail_organisation_created_creator.pt')
     return self.template.render(self)