예제 #1
0
    def __call__(self):

        if self.request.get('bookmark'):
            self.ploneintranet_network.bookmark('content', self.context.UID())
            self.msg = _(u'success_bookmark',
                         u'You have bookmarked this item.')
        elif self.request.get('unbookmark'):
            self.ploneintranet_network.unbookmark('content',
                                                  self.context.UID())
            self.msg = _(u'success_unbookmarked',
                         u'You have unbookmarked this item.')

        if self.is_bookmarked:
            self.title = _('Bookmarked')
            self.icon_class = 'icon-bookmark'
            self.description = \
                _(u'Remove this workspace from your bookmarks')
            self.link = addTokenToUrl(self.url + '?unbookmark=1')
        else:
            self.title = _(u'Bookmark')
            self.icon_class = 'icon-bookmark-empty'
            self.description = \
                _(u'Add this workspace to your bookmarks.')
            self.link = addTokenToUrl(self.url + '?bookmark=1')
            self.status = ''
        return self.index()
예제 #2
0
    def getMenuItems(self, context, request):
        """Return menu item entries in a TAL-friendly form."""
        items = []
        sm = getSecurityManager()
        # Bail out if the user can't manage portlets
        if not sm.checkPermission(
                PortletManagerSubMenuItem.MANAGE_SETTINGS_PERMISSION,
                context
        ):
            return items
        blacklist = getUtility(IRegistry).get(
            'plone.app.portlets.PortletManagerBlacklist', [])
        managers = getUtilitiesFor(IPortletManager)
        current_url = context.absolute_url()

        items.append({
            'title': _(u'manage_all_portlets', default=u'All…'),
            'description': 'Manage all portlets',
            'action': addTokenToUrl(
                '{0}/manage-portlets'.format(
                    current_url),
                request),
            'selected': False,
            'icon': None,
            'extra': {
                'id': 'portlet-manager-all',
                'separator': None},
            'submenu': None,
        })

        for manager in managers:
            manager_name = manager[0]
            # Don't show items like 'plone.dashboard1' by default
            if manager_name in blacklist:
                continue
            item = {
                'title': PMF(manager_name,
                           default=u' '.join(manager_name.split(u'.')).title()),
                'description': manager_name,
                'action': addTokenToUrl(
                    '{0}/@@topbar-manage-portlets/{1}'.format(
                        current_url,
                        manager_name),
                    request),
                'selected': False,
                'icon': None,
                'extra': {
                    'id': 'portlet-manager-{0}'.format(manager_name),
                    'separator': None},
                'submenu': None,
            }

            items.append(item)
        items.sort()
        return items
예제 #3
0
    def getMenuItems(self, context, request):
        """Return menu item entries in a TAL-friendly form."""
        items = []
        sm = getSecurityManager()
        # Bail out if the user can't manage portlets
        if not sm.checkPermission(
                PortletManagerSubMenuItem.MANAGE_SETTINGS_PERMISSION,
                context
        ):
            return items
        blacklist = getUtility(IRegistry).get(
            'plone.app.portlets.PortletManagerBlacklist', [])
        managers = getUtilitiesFor(IPortletManager)
        current_url = context.absolute_url()

        items.append({
            'title': _(u'manage_all_portlets', default=u'All…'),
            'description': 'Manage all portlets',
            'action': addTokenToUrl(
                '{0}/manage-portlets'.format(
                    current_url),
                request),
            'selected': False,
            'icon': None,
            'extra': {
                'id': 'portlet-manager-all',
                'separator': None},
            'submenu': None,
        })

        for manager in managers:
            manager_name = manager[0]
            # Don't show items like 'plone.dashboard1' by default
            if manager_name in blacklist:
                continue
            item = {
                'title': PMF(manager_name,
                           default=u' '.join(manager_name.split(u'.')).title()),
                'description': manager_name,
                'action': addTokenToUrl(
                    '{0}/@@topbar-manage-portlets/{1}'.format(
                        current_url,
                        manager_name),
                    request),
                'selected': False,
                'icon': None,
                'extra': {
                    'id': 'portlet-manager-{0}'.format(manager_name),
                    'separator': None},
                'submenu': None,
            }

            items.append(item)
        return sorted(items, key=itemgetter('title'))
예제 #4
0
    def test_revoke_permissions_view_is_only_authorized_when_feature_is_enabled(
            self, browser):
        self.login(self.manager, browser)
        self.set_workflow_state('task-state-tested-and-closed', self.subtask)
        url = '/'.join([self.subtask.absolute_url(), "@@revoke_permissions"])

        browser.open(addTokenToUrl(url))

        self.deactivate_feature('optional-task-permissions-revoking')
        with browser.expect_unauthorized():
            browser.open(addTokenToUrl(url))
예제 #5
0
    def test_revoke_permissions_view_is_only_authorized_for_managers_and_task_issuer(
            self, browser):
        self.login(self.dossier_responsible, browser)
        self.set_workflow_state('task-state-tested-and-closed', self.subtask)
        url = '/'.join([self.subtask.absolute_url(), "@@revoke_permissions"])

        # dossier_responsible is subtask issuer
        browser.open(addTokenToUrl(url))

        self.subtask.issuer = self.regular_user.id
        with browser.expect_unauthorized():
            browser.open(addTokenToUrl(url))

        api.user.grant_roles(user=self.dossier_responsible, roles=['Manager'])
        browser.open(addTokenToUrl(url))
예제 #6
0
    def _serialize_excerpts(self, meeting, item):
        excerpt_data = []

        docs = IContentListing(item.get_excerpt_documents(unrestricted=True))
        source_dossier_excerpt = item.get_source_dossier_excerpt()
        meeting_dossier = self.meeting.get_dossier()

        for doc in docs:
            data = {'link': doc.render_link()}
            if not source_dossier_excerpt and item.has_proposal:
                if self.meeting.is_editable():
                    data['return_link'] = meeting.get_url(
                        view='agenda_items/{}/return_excerpt?document={}'.
                        format(item.agenda_item_id, doc.uuid()))

            elif source_dossier_excerpt and doc == source_dossier_excerpt:
                data['is_excerpt_in_source_dossier'] = True

            if self._can_add_task_to_meeting_dossier():
                data['create_task_url'] = addTokenToUrl(
                    '{}/++add++opengever.task.task?paths:list={}'.format(
                        meeting_dossier.absolute_url(), doc.getPath()))

            excerpt_data.append(data)

        return excerpt_data
예제 #7
0
파일: landingpage.py 프로젝트: a25kk/stv
 def send_inquiry(self, data):
     context = aq_inner(self.context)
     subject = _(u"Inquiry from website visitor")  # noqa
     email_subject = api.portal.translate(
         "Inquiry from website visitor",
         'stv.sitecontent',
         api.portal.get_current_language())
     data['subject'] = email_subject
     mail_tpl = self._compose_message(data)
     mail_plain = create_plaintext_message(mail_tpl)
     msg = prepare_email_message(mail_tpl, mail_plain)
     recipients = [
         '*****@*****.**', 
         '*****@*****.**', 
     ]
     send_mail(
         msg,
         recipients,
         email_subject
     )
     next_url = '{0}/@@inquiry-form-dispatched/'.format(
         context.absolute_url()
     )
     url = addTokenToUrl(next_url)
     return self.request.response.redirect(url)
 def move_to_slot_links(self, day, slot, gate):
     """
     Returns the url to move the booking in this slot
     """
     if not self.prenotazioni_view.is_valid_day(day):
         return []
     if self.prenotazioni_view.maximum_bookable_date:
         if day > self.prenotazioni_view.maximum_bookable_date.date():
             return []
     date = day.strftime("%Y-%m-%d")
     params = {
         "form.buttons.action_move": "Move",
         "data": self.request.form.get("data", ""),
         "form.widgets.gate": gate,
     }
     times = slot.get_values_hr_every(300)
     urls = []
     base_url = "/".join((self.context.absolute_url(), "prenotazione_move"))
     now_str = tznow().strftime("%Y-%m-%d %H:%M")
     for t in times:
         form_booking_date = " ".join((date, t))
         params["form.widgets.booking_date"] = form_booking_date
         urls.append(
             {
                 "title": t,
                 "url": addTokenToUrl(urlify(base_url, params=params)),
                 "class": t.endswith(":00") and "oclock" or None,
                 "future": (now_str <= form_booking_date),
             }
         )
     return urls
예제 #9
0
    def delete_url(self, field):

        if field.__name__ in self.context.fieldsWhichCannotBeDeleted:
            return
        url = '%s/%s/@@delete' % (self.context.absolute_url(), field.__name__)
        url = addTokenToUrl(url, self.request)
        return url
    def test_can_return_excerpts_to_proposer(self, browser):
        self.login(self.committee_responsible, browser)
        agenda_item = self.schedule_proposal(self.meeting,
                                             self.submitted_word_proposal)
        agenda_item.decide()
        excerpt = agenda_item.generate_excerpt(title='Excerpt \xc3\x84nderungen')

        self.assertIsNone(agenda_item.proposal.excerpt_document)
        self.assertIsNone(agenda_item.proposal.submitted_excerpt_document)

        # temporarily block access to dossier
        self.dossier.__ac_local_roles_block__ = True
        with browser.expect_unauthorized():
            browser.open(self.dossier)

        return_excerpt_url = addTokenToUrl(self.meeting.model.get_url(
            view='agenda_items/{}/return_excerpt?document={}'.format(
                agenda_item.agenda_item_id, IUUID(excerpt))))

        browser.open(return_excerpt_url)
        self.assertEqual(
            u'Excerpt was returned to proposer.',
            browser.json['messages'][0]['message'])

        self.assertIsNotNone(agenda_item.proposal.excerpt_document)
        self.assertIsNotNone(agenda_item.proposal.submitted_excerpt_document)
        self.assertEqual(
            excerpt,
            agenda_item.proposal.submitted_excerpt_document.resolve_document())
예제 #11
0
    def __call__(self, documentType):
        fileName = fileUtils.getDefaultNameByType(documentType)
        fileExt = fileUtils.getDefaultExtByType(documentType)

        if fileName is None or fileExt is None:
            raise NotFound(self, documentType, self.request)

        template = 'new.' + fileExt

        state = portal_state(self)
        language = state.language()

        localePath = fileUtils.localePath.get(language)
        if localePath is None:
            language = language.split('-')[0]
            localePath = fileUtils.localePath.get(language)
            if localePath is None:
                localePath = fileUtils.localePath.get('en')

        file = open(
            os.path.join(os.path.abspath(os.path.dirname(__file__)),
                         'app_data', localePath, template), 'rb')

        try:
            data = file.read()
        finally:
            file.close()

        factory = IDXFileFactory(self.context)
        contentType = mimetypes.guess_type(template)[0] or ''

        file = factory(fileName + '.' + fileExt, contentType, data)

        self.request.response.redirect(
            addTokenToUrl('{0}/onlyoffice-edit'.format(file.absolute_url())))
    def test_can_return_excerpts_to_proposer(self, browser):
        self.login(self.committee_responsible, browser)
        agenda_item = self.schedule_proposal(self.meeting,
                                             self.submitted_word_proposal)
        agenda_item.decide()
        excerpt = agenda_item.generate_excerpt(
            title='Excerpt \xc3\x84nderungen')

        self.assertIsNone(agenda_item.proposal.excerpt_document)
        self.assertIsNone(agenda_item.proposal.submitted_excerpt_document)

        # temporarily block access to dossier
        self.dossier.__ac_local_roles_block__ = True
        with browser.expect_unauthorized():
            browser.open(self.dossier)

        return_excerpt_url = addTokenToUrl(
            self.meeting.model.get_url(
                view='agenda_items/{}/return_excerpt?document={}'.format(
                    agenda_item.agenda_item_id, IUUID(excerpt))))

        browser.open(return_excerpt_url)
        self.assertEqual(u'Excerpt was returned to proposer.',
                         browser.json['messages'][0]['message'])

        self.assertIsNotNone(agenda_item.proposal.excerpt_document)
        self.assertIsNotNone(agenda_item.proposal.submitted_excerpt_document)
        self.assertEqual(
            excerpt,
            agenda_item.proposal.submitted_excerpt_document.resolve_document())
예제 #13
0
    def get_html_tag(self,
                     additional_classes=[],
                     url_extension='',
                     viewname='download',
                     include_token=False):
        file_url = self.context.absolute_url()

        # Do not display a download confirmation for mail items
        if self.is_active() and not IOGMailMarker.providedBy(self.context):
            viewname = 'file_download_confirmation'
            clazz = (('link-overlay '
                      'modal '
                      '{0}').format(' '.join(additional_classes)))
        else:
            clazz = ' '.join(additional_classes)

        url = '{0}/{1}{2}'.format(file_url, viewname, url_extension)
        if include_token:
            url = addTokenToUrl(url)

        label = translate(_(u'label_download_copy', default='Download copy'),
                          context=self.request).encode('utf-8')

        return ('<a href="{0}" '
                'id="action-download" '
                'class="{1}">{2}</a>').format(url, clazz, label)
예제 #14
0
    def getMenuItems(self, context, request):
        """Return menu item entries in a TAL-friendly form."""
        results = []

        context_state = getMultiAdapter((context, request),
                                        name='plone_context_state')
        editActions = context_state.actions('object_buttons')
        if not editActions:
            return results

        for action in editActions:
            if action['allowed']:
                aid = action['id']
                cssClass = 'actionicon-object_buttons-%s' % aid
                icon = action.get('icon', None)
                modal = action.get('modal', None)
                if modal:
                    cssClass += ' pat-plone-modal'

                results.append({
                    'title': action['title'],
                    'description': '',
                    'action': addTokenToUrl(action['url'], request),
                    'selected': False,
                    'icon': icon,
                    'extra': {'id': 'plone-contentmenu-actions-' + aid,
                              'separator': None,
                              'class': cssClass,
                              'modal': modal},
                    'submenu': None,
                })
        return results
예제 #15
0
 def listing(self):
     # XXX: discount
     can_cancel_booking = self.can_cancel_booking
     ret = list()
     for booking in self.order_data.bookings:
         obj = get_object_by_uid(self.context, booking.attrs['buyable_uid'])
         state = vocabs.state_vocab()[booking.attrs.get('state')]
         salaried = vocabs.salaried_vocab()[booking.attrs.get('salaried')]
         cancel_target = None
         if can_cancel_booking and state != ifaces.STATE_CANCELLED:
             cancel_target = addTokenToUrl('{}?uid={}'.format(
                 self.context.absolute_url(),
                 booking.attrs['uid'])
             )
         ret.append({
             'uid': booking.attrs['uid'],
             'title': booking.attrs['title'],
             'url': obj.absolute_url() if obj else None,
             'cancel_target': cancel_target,
             'count': booking.attrs['buyable_count'],
             'net': ascur(booking.attrs.get('net', 0.0)),
             'discount_net': ascur(float(booking.attrs['discount_net'])),
             'vat': booking.attrs.get('vat', 0.0),
             'comment': booking.attrs['buyable_comment'],
             'quantity_unit': booking.attrs.get('quantity_unit'),
             'currency': booking.attrs.get('currency'),
             'state': state,
             'salaried': salaried,
         })
     return ret
예제 #16
0
 def move_to_slot_links(self, day, slot, gate):
     '''
     Returns the url to move the booking in this slot
     '''
     if not self.prenotazioni_view.is_valid_day(day):
         return []
     if self.prenotazioni_view.maximum_bookable_date:
         if day > self.prenotazioni_view.maximum_bookable_date.date():
             return []
     date = day.strftime("%Y-%m-%d")
     params = {
         'form.buttons.action_move': 'Move',
         'data': self.request.form.get('data', ''),
         'form.widgets.gate': gate
     }
     times = slot.get_values_hr_every(300)
     urls = []
     base_url = "/".join((self.context.absolute_url(), 'prenotazione_move'))
     now_str = tznow().strftime("%Y-%m-%d %H:%M")
     for t in times:
         form_booking_date = " ".join((date, t))
         params['form.widgets.booking_date'] = form_booking_date
         urls.append({
             'title': t,
             'url': addTokenToUrl(urlify(base_url, params=params)),
             'class': t.endswith(':00') and 'oclock' or None,
             'future': (now_str <= form_booking_date),
         })
     return urls
    def getMenuItems(self, context, request):  # flack8: noqa
        """Return menu item entries in a TAL-friendly form."""
        results = []

        context_state = getMultiAdapter((context, request),
                                        name='plone_context_state')
        edit_actions = context_state.actions('easynewsletter')
        if not edit_actions:
            return results

        for action in edit_actions:
            if action['allowed']:
                aid = action['id']
                css_class = 'actionicon-object_buttons-%s' % aid
                icon = action.get('icon', None)
                modal = action.get('modal', None)
                if modal:
                    css_class += ' pat-plone-modal'

                results.append({
                    'title': action['title'],
                    'description': '',
                    'action': addTokenToUrl(action['url'], request),
                    'selected': False,
                    'icon': icon,
                    'extra': {
                        'id': 'plone-contentmenu-actions-' + aid,
                        'separator': None,
                        'class': css_class,
                        'modal': modal
                    },
                    'submenu': None,
                })
        return results
 def move_to_slot_links(self, day, slot, gate):
     '''
     Returns the url to move the booking in this slot
     '''
     if not self.prenotazioni_view.is_valid_day(day):
         return []
     if self.prenotazioni_view.maximum_bookable_date:
         if day > self.prenotazioni_view.maximum_bookable_date.date():
             return []
     date = day.strftime("%Y-%m-%d")
     params = {'form.buttons.action_move': 'Move',
               'data': self.request.form.get('data', ''),
               'form.widgets.gate': gate}
     times = slot.get_values_hr_every(300)
     urls = []
     base_url = "/".join((self.context.absolute_url(),
                          'prenotazione_move'))
     now_str = tznow().strftime("%Y-%m-%d %H:%M")
     for t in times:
         form_booking_date = " ".join((date, t))
         params['form.widgets.booking_date'] = form_booking_date
         urls.append(
             {
                 'title': t,
                 'url': addTokenToUrl(urlify(base_url, params=params)),
                 'class': t.endswith(':00') and 'oclock' or None,
                 'future': (now_str <= form_booking_date),
             }
         )
     return urls
예제 #19
0
파일: usermanager.py 프로젝트: a25kk/hfph
 def _get_user_details(self, user_id, user):
     context = aq_inner(self.context)
     has_workspace = False
     if self.has_workspace(user_id):
         has_workspace = True
     groups = api.group.get_groups(username=user_id)
     user_groups = list()
     for group in groups:
         gid = group.getId()
         if gid != 'AuthenticatedUsers':
             user_groups.append(gid)
     details_url = '{0}/@@user-management-details?user-id={1}'.format(
         context.absolute_url(), user_id
     )
     user_details_url = addTokenToUrl(details_url)
     user_info = {
         'email': user.getProperty('email'),
         'user_id': user_id,
         'name': user.getProperty('fullname', user.getId()),
         'enabled': user.getProperty('enabled'),
         'confirmed': user.getProperty('confirmed'),
         'has_workspace': has_workspace,
         'workspace': user.getProperty('workspace'),
         'workspace_url': '{}/{}'.format(
             context.absolute_url(),
             user.getProperty('workspace')
         ),
         'groups': user_groups,
         'details_link': user_details_url
     }
     return user_info
예제 #20
0
    def getMenuItems(self, context, request):
        """Return menu item entries in a TAL-friendly form."""
        results = []

        context_state = getMultiAdapter((context, request),
                                        name="plone_context_state")
        edit_actions = context_state.actions("folder_easynewsletter")
        if not edit_actions:
            return results

        for action in edit_actions:
            if action["allowed"]:
                aid = action["id"]
                css_class = "actionicon-object_buttons-%s" % aid
                icon = action.get("icon", None)
                modal = action.get("modal", None)
                if modal:
                    css_class += " pat-plone-modal"

                results.append({
                    "title": action["title"],
                    "description": "",
                    "action": addTokenToUrl(action["url"], request),
                    "selected": False,
                    "icon": icon,
                    "extra": {
                        "id": "plone-contentmenu-actions-" + aid,
                        "separator": None,
                        "class": css_class,
                        "modal": modal,
                    },
                    "submenu": None,
                })
        return results
예제 #21
0
    def output(self, start, size, totalnum, braindata):
        "根据参数total,braindata,返回jason 输出"
        outhtml = ""
        k = 0
        for i in braindata:
            out = """<tr class="text-left">
                                <td class="col-md-1 text-center">%(num)s</td>
                                <td class="col-md-3 text-left"><a href="%(objurl)s">%(title)s</a></td>
                                <td class="col-md-7">%(description)s</td>
                                <td class="col-md-1 text-center">%(date)s</td>
                            </tr> """ % dict(
                objurl=addTokenToUrl(i.getURL()),
                num=str(k + 1),
                title=i.Title,
                description=i.Description,
                date=i.created.strftime('%Y-%m-%d'))
            outhtml = "%s%s" % (outhtml, out)
            k = k + 1

        data = {
            'searchresult': outhtml,
            'start': start,
            'size': size,
            'total': totalnum
        }
        return data
예제 #22
0
    def getItemURL(self, brain=None):
        if brain:
            url = super(AtlasInvalidOwner, self).getItemURL(brain)
            url = addTokenToUrl('%s/edit' % url)
            return '%s#fieldsetlegend-ownership' % url

        return None
예제 #23
0
 def url_for(cls, meeting):
     generated_document = meeting.agendaitem_list_document
     document = generated_document.resolve_document()
     url = '{}/@@update_agendaitem_list?document-id={}&meeting-id={}'.format(
         document.absolute_url(), generated_document.document_id,
         meeting.meeting_id)
     return addTokenToUrl(url)
    def __call__(self):
        transition = self.request.get('transition')
        if not self.is_transition_possible(transition):
            raise NotFound

        url = self.get_transition_action(transition)
        return self.request.RESPONSE.redirect(addTokenToUrl(url))
예제 #25
0
    def getMenuItems(self, context, request):
        """Return menu item entries in a TAL-friendly form."""
        results = []

        locking_info = queryMultiAdapter((context, request),
                                         name='plone_lock_info')
        if locking_info and locking_info.is_locked_for_current_user():
            return []

        wf_tool = api.portal.get_tool('portal_workflow')

        workflowActions = wf_tool.listActionInfos(object=context)

        for action in workflowActions:
            if action['category'] != 'pkan_workflow':
                continue

            cssClass = ''
            actionUrl = action['url']
            if actionUrl == '':
                actionUrl = '{0}/content_status_modify?workflow_action={1}'
                actionUrl = actionUrl.format(
                    context.absolute_url(),
                    action['id'],
                )
                cssClass = ''

            description = ''

            transition = action.get('transition', None)
            if transition is not None:
                description = transition.description

            baseUrl = '{0}/content_status_modify?workflow_action={1}'
            for bogus in self.BOGUS_WORKFLOW_ACTIONS:
                if actionUrl.endswith(bogus):
                    if getattr(context, bogus, None) is None:
                        actionUrl = baseUrl.format(
                            context.absolute_url(),
                            action['id'],
                        )
                        cssClass = ''
                    break

            if action['allowed']:
                results.append({
                    'title': action['title'],
                    'description': description,
                    'action': addTokenToUrl(actionUrl, request),
                    'selected': False,
                    'icon': None,
                    'extra': {
                        'id': 'workflow-transition-{0}'.format(action['id']),
                        'separator': None,
                        'class': cssClass
                    },
                    'submenu': None,
                })

        return results
예제 #26
0
    def delete_url(self, field):

        if field.__name__ in self.context.fieldsWhichCannotBeDeleted:
            return
        url = '%s/%s/@@delete' % (self.context.absolute_url(), field.__name__)
        url = addTokenToUrl(url, self.request)
        return url
예제 #27
0
    def _serialize_excerpts(self, meeting, item):
        excerpt_data = []

        docs = IContentListing(item.get_excerpt_documents(unrestricted=True, include_trashed=False))
        source_dossier_excerpt = item.get_source_dossier_excerpt()
        meeting_dossier = self.meeting.get_dossier()

        for doc in docs:
            data = {'link': doc.render_link()}
            if not source_dossier_excerpt and item.has_proposal:
                if self.meeting.is_editable():
                    data['return_link'] = meeting.get_url(
                        view='agenda_items/{}/return_excerpt?document={}'.format(
                            item.agenda_item_id, doc.uuid()))

            elif source_dossier_excerpt and doc == source_dossier_excerpt:
                data['is_excerpt_in_source_dossier'] = True

            if self._can_add_task_to_meeting_dossier():
                data['create_task_url'] = addTokenToUrl(
                    '{}/++add++opengever.task.task?paths:list={}'.format(
                        meeting_dossier.absolute_url(),
                        doc.getPath()))

            excerpt_data.append(data)

        return excerpt_data
예제 #28
0
    def read_transfer_info(self, trans):

        path = trans.absolute_url()

        data = {
            'path': path,
            'title': trans.title,
            'source_url': addTokenToUrl(trans.url),
            'real_run': addTokenToUrl(path + '/real_run_transfer'),
            'edit': addTokenToUrl(path + '/edit'),
            'target_namespace': trans.target_namespace,
            'source_namespace': trans.source_namespace,
            'is_enabled': trans.is_enabled,
        }

        return data
예제 #29
0
 def panel_editor_close(self):
     context = aq_inner(self.context)
     editor_data = self.panel_editor()[context.UID()]
     next_url = '{url}/@@panel-edit?section={section}&panel={panel}'.format(
         url=context.absolute_url(),
         section=editor_data["content_section"],
         panel=editor_data["content_section_panel"])
     return addTokenToUrl(next_url)
예제 #30
0
 def update_terms_action(self):
     context = aq_inner(self.context)
     context_url = context.absolute_url()
     update_url = '{0}/@@update-taxonomy-terms'.format(
         context_url
     )
     url = addTokenToUrl(update_url)
     return url
예제 #31
0
    def _get_revert_link(self):
        url = u"{}/revert-file-to-version?version_id={}".format(self.context.absolute_url(), self.version_id)

        url = addTokenToUrl(url)

        return translate_link(
            url, _(u"label_revert", default=u"Revert document"), css_class="standalone function-revert"
        )
    def createOwnersURL(self):
        request = self.request
        context = self.context
        context_url = context.absolute_url()

        address_update_url = "%s/@@create-home-owners" % context_url

        return addTokenToUrl(address_update_url)
    def addressUpdateURL(self):
        request = self.request
        context = self.context
        context_url = context.absolute_url()

        address_update_url = "%s/@@update-home-addresses" % context_url

        return addTokenToUrl(address_update_url)
예제 #34
0
 def handleCancel(self, action):
     context = aq_inner(self.context)
     editor_data = self.panel_editor[context.UID()]
     next_url = '{url}/@@panel-edit?section={section}&panel={panel}'.format(
         url=context.absolute_url(),
         section=editor_data["content_section"],
         panel=editor_data["content_section_panel"])
     return self.request.response.redirect(addTokenToUrl(next_url))
예제 #35
0
    def read_harvester_info(self, harv):

        path = harv.absolute_url()

        data = {
            'title': harv.title,
            'path': path,
            'source_url': addTokenToUrl(harv.url),
            'dry_run': addTokenToUrl(path + '/dry_run'),
            'real_run': addTokenToUrl(path + '/real_run'),
            'edit': addTokenToUrl(path + '/edit'),
            'clean_namespace': harv.target_namespace,
            'complete_namespace': harv.target_namespace + '_temp',
            'reharvesting_period': harv.reharvesting_period,
        }

        return data
예제 #36
0
    def delete_url(self, field):

        if field.__name__ in self.context.fieldsWhichCannotBeDeleted:
            return
        url = "{0}/{1}/@@delete".format(self.context.absolute_url(), field.__name__)
        if addTokenToUrl:
            url = addTokenToUrl(url, self.request)
        return url
예제 #37
0
 def handle_import_dct_licensedocument(self, action):
     url = '/'.join([
         api.portal.get().absolute_url(),
         constants.FOLDER_LICENSES,
         '@@update_licenses',
     ])
     self.request.response.redirect(addTokenToUrl(url))
     return u''
예제 #38
0
    def _get_checkin_url(self, with_comment=False):
        if with_comment:
            checkin_view = u'@@checkin_document'
        else:
            checkin_view = u'@@checkin_without_comment'

        url = u"{}/{}".format(self.context.absolute_url(), checkin_view)
        return addTokenToUrl(url)
예제 #39
0
    def redirect_to_content_status_modify(self, context, transition):
        target_url = '{}/content_status_modify?workflow_action={}'.format(
            context.absolute_url(), transition)

        if HAS_MODERN_PLONE_PROTECT:
            target_url = addTokenToUrl(target_url)

        return self.request.response.redirect(target_url)
예제 #40
0
 def url_for(cls, meeting):
     generated_document = meeting.agendaitem_list_document
     document = generated_document.resolve_document()
     url = '{}/@@update_agendaitem_list?document-id={}&meeting-id={}'.format(
         document.absolute_url(),
         generated_document.document_id,
         meeting.meeting_id)
     return addTokenToUrl(url)
예제 #41
0
 def handle_import_skos_concept(self, action):
     url = '/'.join([
         api.portal.get().absolute_url(),
         constants.FOLDER_CONCEPTS,
         '@@update_themes',
     ])
     self.request.response.redirect(addTokenToUrl(url))
     return u''
    def __call__(self):
        transition = self.request.get('transition')
        if not self.is_transition_possible(transition):
            raise NotFound

        else:
            url = self.get_transition_action(transition)
            return self.request.RESPONSE.redirect(addTokenToUrl(url))
예제 #43
0
    def _get_revert_link(self):
        url = u'{}/revert-file-to-version?version_id={}'.format(
            self.context.absolute_url(), self.version_id)

        url = addTokenToUrl(url)

        return translate_link(url,
                              _(u'label_revert', default=u'Revert document'),
                              css_class='standalone function-revert')
예제 #44
0
def to_link(obj, key, value, **kw):
    """to link
    """
    value = to_string(obj, key, value)
    if not value:
        return ""
    if api.get_portal_type(obj) in LINK_TO_PARENT_TYPES:
        obj = api.get_parent(obj)
    url = addTokenToUrl(api.get_url(obj))
    return get_link(url, value)
예제 #45
0
 def get_edit_url(self):
     """
     If the user can edit the video, returns the edit url.
     """
     if not api.user.has_permission('Modify portal content',
                                    obj=self.context):
         return ""
     from plone.protect.utils import addTokenToUrl
     url = "%s/@@edit" % self.context.absolute_url()
     return addTokenToUrl(url)
예제 #46
0
 def pdf_preview_link(self):
     """Returns a formatted link to download the PDF preview for this
     version (only rendered if opengever.pdfconverter is available).
     """
     url = '{}/download_pdf_version?version_id={}'
     url = url.format(self.url, self.version_id)
     url = addTokenToUrl(url)
     link = translate_link(
         url, _(u'button_pdf', default=u'PDF'),
         css_class='standalone function-download-pdf')
     return link
예제 #47
0
 def get_edit_url(self):
     """
     If the user can edit the video, returns the edit url.
     """
     if not api.user.has_permission(
         'Modify portal content',
         obj=self.context):
         return ""
     from plone.protect.utils import addTokenToUrl
     url = "%s/@@edit" % self.context.absolute_url()
     return addTokenToUrl(url)
예제 #48
0
 def save_pdf_under_link(self):
     """Returns a formatted link to save this particular version as
     PDF.
     """
     url = '{}/save_pdf_under?version_id={}'
     url = url.format(self.url, self.version)
     url = addTokenToUrl(url)
     link = translate_link(
         url, _(u'label_save_pdf', default=u'Save PDF'),
         css_class='standalone function-save-pdf')
     return link
예제 #49
0
 def handleAdd(self, action):
     data, errors = self.extractData()
     if errors:
         self.status = self.formErrorsMessage
         return
     mgr_name = 'plone.app.standardtiles.portletManager'
     add_portlet_url = '/'.join([
         self.context.absolute_url(),
         '++contextportlets++{0}/+'.format(mgr_name),
         data['portlet_type']
     ])
     add_portlet_url = addTokenToUrl(add_portlet_url, self.request)
     self.request.response.redirect(add_portlet_url)
예제 #50
0
파일: pagesection.py 프로젝트: a25kk/aha
 def send_inquiry(self, data):
     context = aq_inner(self.context)
     subject = _(u"Inquiry from website visitor")
     email_subject = api.portal.translate(
         "Inquiry from website visitor", "aha.sitecontent", api.portal.get_current_language()
     )
     data["subject"] = email_subject
     mail_tpl = self._compose_message(data)
     mail_plain = create_plaintext_message(mail_tpl)
     msg = prepare_email_message(mail_tpl, mail_plain)
     recipients = ["*****@*****.**"]
     send_mail(msg, recipients, email_subject)
     context_parent = aq_parent(context)
     next_url = "{0}/@@inquiry-form-dispatched/".format(context_parent.absolute_url())
     url = addTokenToUrl(next_url)
     return self.request.response.redirect(url)
예제 #51
0
    def __call__(self):
        transition = self.request.get('transition')
        if not transition:
            raise ValueError('No transition passed.')

        if self.is_transition_allowed(transition):
            target_url = self.get_transition_action(transition)

            if HAS_MODERN_PLONE_PROTECT:
                target_url = addTokenToUrl(target_url)

            self.request.RESPONSE.redirect(target_url)

        else:
            self.request.RESPONSE.redirect(
                self.context.absolute_url())
예제 #52
0
    def revert_link(self):
        """Returns a formatted link to revert to this particular version if
        reverting is allowed, an inactive label otherwise.
        """

        if self.is_revert_allowed:
            url = '{}/revert-file-to-version?version_id={}'
            url = url.format(self.url, self.version_id)
            url = addTokenToUrl(url)
            link = translate_link(
                url, _(u'label_revert', default=u'Revert'),
                css_class='standalone function-revert')
            return link
        else:
            label = translate_text(_(u'label_revert', default=u'Revert'))
            return u'<span class="discreet">{}</span>'.format(label)
예제 #53
0
    def get_html_tag(self, file_url, additional_classes=[], url_extension='',
                     viewname='download', include_token=False):
        if self.is_active():
            viewname = 'file_download_confirmation'
            clazz = 'link-overlay modal {0}'.format(' '.join(additional_classes))
        else:
            clazz = ' '.join(additional_classes)

        url = '{0}/{1}{2}'.format(file_url, viewname, url_extension)
        if include_token:
            url = addTokenToUrl(url)

        label = translate(_(u'label_download_copy', default='Download copy'),
                          context=self.request).encode('utf-8')

        return '<a href="{0}" class="{1}">{2}</a>'.format(url, clazz, label)
예제 #54
0
파일: menu.py 프로젝트: urska19/Plone-test
    def getMenuItems(self, context, request):
        """Return menu item entries in a TAL-friendly form."""
        items = []
        sm = getSecurityManager()
        # Bail out if the user can't manage portlets
        if not sm.checkPermission(
                PortletManagerSubMenuItem.MANAGE_SETTINGS_PERMISSION, context):
            return items
        blacklist = getUtility(IRegistry).get(
            'plone.app.portlets.PortletManagerBlacklist', [])
        managers = getUtilitiesFor(IPortletManager)
        current_url = context.absolute_url()
        for manager in managers:
            manager_name = manager[0]
            # Don't show items like 'plone.dashboard1' by default
            if manager_name in blacklist:
                continue
            item = {
                'title': ' '.join(manager_name.split('.')).title(),
                'description': ' '.join(manager_name.split('.')).title(),
                'action': addTokenToUrl(utils.ajax_load_url(
                    '%s/@@topbar-manage-portlets/%s' % (
                        current_url,
                        manager_name)
                    ),
                    request),
                'selected': False,
                'icon': None,
                'extra': {
                    'id': 'portlet-manager-%s' % manager_name,
                    'separator': None,
                    'class': 'pat-plone-modal'},
                'submenu': None,
            }

            items.append(item)
        items.sort()
        return items
예제 #55
0
    def get_html_tag(self, additional_classes=[], url_extension='',
                     viewname='download', include_token=False):
        file_url = self.context.absolute_url()

        # Do not display a download confirmation for mail items
        if self.is_active() and not IOGMailMarker.providedBy(self.context):
            viewname = 'file_download_confirmation'
            clazz = (('link-overlay '
                      'modal '
                      '{0}')
                     .format(' '.join(additional_classes)))
        else:
            clazz = ' '.join(additional_classes)

        url = '{0}/{1}{2}'.format(file_url, viewname, url_extension)
        if include_token:
            url = addTokenToUrl(url)

        label = translate(_(u'label_download_copy', default='Download copy'),
                          context=self.request).encode('utf-8')

        return ('<a href="{0}" '
                'id="action-download" '
                'class="{1}">{2}</a>').format(url, clazz, label)
예제 #56
0
 def url_for(cls, meeting):
     dossier = meeting.get_dossier()
     url = '{}/@@generate_agendaitem_list?meeting-id={}'.format(
         dossier.absolute_url(), meeting.meeting_id)
     return addTokenToUrl(url)
예제 #57
0
    def getMenuItems(self, context, request):
        """Return menu item entries in a TAL-friendly form."""
        results = []

        locking_info = queryMultiAdapter((context, request),
                                         name='plone_lock_info')
        if locking_info and locking_info.is_locked_for_current_user():
            return []

        wf_tool = getToolByName(context, 'portal_workflow')
        workflowActions = wf_tool.listActionInfos(object=context)

        for action in workflowActions:
            if action['category'] != 'workflow':
                continue

            cssClass = ''
            actionUrl = action['url']
            if actionUrl == "":
                actionUrl = '%s/content_status_modify?workflow_action=%s' % (
                    context.absolute_url(), action['id'])
                cssClass = ''

            description = ''

            transition = action.get('transition', None)
            if transition is not None:
                description = transition.description

            for bogus in self.BOGUS_WORKFLOW_ACTIONS:
                if actionUrl.endswith(bogus):
                    if getattr(context, bogus, None) is None:
                        baseUrl = '%s/content_status_modify?workflow_action=%s'
                        actionUrl = baseUrl % (context.absolute_url(),
                                               action['id'])
                        cssClass = ''
                    break

            if action['allowed']:
                results.append({
                    'title': action['title'],
                    'description': description,
                    'action': addTokenToUrl(actionUrl, request),
                    'selected': False,
                    'icon': None,
                    'extra': {
                        'id': 'workflow-transition-%s' % action['id'],
                        'separator': None,
                        'class': cssClass},
                    'submenu': None,
                })

        url = context.absolute_url()

        if len(results) > 0:
            results.append({
                'title': _(u'label_advanced', default=u'Advanced...'),
                'description': '',
                'action': url + '/content_status_history',
                'selected': False,
                'icon': None,
                'extra': {
                    'id': 'workflow-transition-advanced',
                    'separator': 'actionSeparator',
                    'class': 'pat-plone-modal'},
                'submenu': None,
            })

        pw = getToolByName(context, 'portal_placeful_workflow', None)
        if pw is not None:
            if _checkPermission(ManageWorkflowPolicies, context):
                results.append({
                    'title': _(u'workflow_policy',
                               default=u'Policy...'),
                    'description': '',
                    'action': url + '/placeful_workflow_configuration',
                    'selected': False,
                    'icon': None,
                    'extra': {'id': 'workflow-transition-policy',
                              'separator': None,
                              'class': ''},
                    'submenu': None,
                })

        return results
예제 #58
0
 def action(self):
     return addTokenToUrl(
         '%s/folder_factories' % self._addContext().absolute_url(),
         self.request)
예제 #59
0
    def getMenuItems(self, obj, request):
        """Return menu item entries in a TAL-friendly form."""
        results = []

        context_state = getMultiAdapter(
            (obj, request), name='plone_context_state'
        )
        isDefaultPage = context_state.is_default_page()

        parent = None
        folder = None
        if isDefaultPage:
            # If this is a default page, also get menu items relative to thr
            # parent
            parent = utils.parent(obj)
            folder = ISelectableBrowserDefault(parent, None)

        folderLayouts = []
        folderCanSetLayout = False
        folderCanSetDefaultPage = False
        if folder is not None:
            folderLayouts = folder.getAvailableLayouts()
            folderCanSetLayout = folder.canSetLayout()
            folderCanSetDefaultPage = folder.canSetDefaultPage()

        contextLayouts = []
        contextCanSetLayout = False
        contextCanSetDefaultPage = False

        context = ISelectableBrowserDefault(obj, None)
        if context is not None:
            contextLayouts = context.getAvailableLayouts()
            contextCanSetLayout = context.canSetLayout()
            contextCanSetDefaultPage = context.canSetDefaultPage()

        # Short circuit if neither folder nor object will provide us with
        # items
        if not (folderCanSetLayout or folderCanSetDefaultPage or
                contextCanSetLayout or contextCanSetDefaultPage):
            return []

        # Only show the block "Folder display" and "Item display" separators if
        # they are necessars
        useSeparators = False
        if folderCanSetLayout or folderCanSetDefaultPage:
            if (contextCanSetLayout and len(contextLayouts) > 1) or \
                    contextCanSetDefaultPage:
                useSeparators = True

        # 1. If this is a default-page, first render folder options
        if folder is not None:
            folderUrl = parent.absolute_url()

            if useSeparators:
                results.append({
                    'title': _(u'label_current_folder_views',
                               default=u'Folder display'),
                    'description': '',
                    'action': None,
                    'selected': False,
                    'icon': None,
                    'extra': {'id': 'folderHeader',
                              'separator': 'actionSeparator',
                              'class': ''},
                    'submenu': None,
                })

            if folderCanSetLayout:
                for id, title in folderLayouts:
                    results.append({
                        'title': title,
                        'description': '',
                        'action': addTokenToUrl(
                            '%s/selectViewTemplate?templateId=%s' % (
                                folderUrl, id,), request),
                        'selected': False,
                        'icon': None,
                        'extra': {
                            'id': 'folder-' + id,
                            'separator': None,
                            'class': ''},
                        'submenu': None,
                    })
            # Display the selected item (i.e. the context)
            results.append({
                'title': _(u'label_item_selected',
                           default=u'Item: ${contentitem}',
                           mapping={'contentitem': escape(
                               utils.safe_unicode(obj.Title()))}),
                'description': '',
                'action': None,
                'selected': True,
                'icon': None,
                'extra': {
                    'id': 'folderDefaultPageDisplay',
                    'separator': 'actionSeparator',
                    'class': 'actionMenuSelected'},
                'submenu': None,
                })
            # Let the user change the selection
            if folderCanSetDefaultPage:
                results.append({
                    'title': _(u'label_change_default_item',
                               default=u'Change content item as default '
                                       u'view...'),
                    'description': _(u'title_change_default_view_item',
                                     default=u'Change the item used as default'
                                             u' view in this folder'),
                    'action': '%s/select_default_page' % (folderUrl,),
                    'selected': False,
                    'icon': None,
                    'extra': {
                        'id': 'folderChangeDefaultPage',
                        'separator': 'actionSeparator',
                        'class': 'pat-plone-modal'},
                    'submenu': None,
                })

        # 2. Render context options
        if context is not None:
            contextUrl = obj.absolute_url()
            selected = context.getLayout()
            defaultPage = context.getDefaultPage()
            layouts = context.getAvailableLayouts()

            if useSeparators:
                results.append({
                    'title': _(u'label_current_item_views',
                               default=u'Item display'),
                    'description': '',
                    'action': None,
                    'selected': False,
                    'icon': None,
                    'extra': {
                        'id': 'contextHeader',
                        'separator': 'actionSeparator',
                        'class': ''},
                    'submenu': None,
                })

            # If context is a default-page in a folder, that folder's views
            # will be shown. Only show context views if there are any to show.

            showLayouts = False
            if not isDefaultPage:
                showLayouts = True
            elif len(layouts) > 1:
                showLayouts = True

            if showLayouts and contextCanSetLayout:
                for id, title in contextLayouts:
                    is_selected = (defaultPage is None and id == selected)
                    results.append({
                        'title': title,
                        'description': '',
                        'action': addTokenToUrl(
                            '%s/selectViewTemplate?templateId=%s' % (
                                contextUrl, id,), request),
                        'selected': is_selected,
                        'icon': None,
                        'extra': {
                            'id': 'plone-contentmenu-display-' + id,
                            'separator': None,
                            'class': is_selected and 'actionMenuSelected' or ''
                            },
                        'submenu': None,
                    })

            # Allow setting / changing the default-page, unless this is a
            # default-page in a parent folder.
            if not INonStructuralFolder.providedBy(obj):
                if defaultPage is None:
                    if contextCanSetDefaultPage:
                        results.append({
                            'title': _(u'label_choose_item',
                                       default=u'Select a content item\n'
                                               u'as default view...'),
                            'description': _(
                                u'title_select_default_view_item',
                                default=u'Select an item to be used as '
                                        u'default view in this folder...'),
                            'action': addTokenToUrl(
                                '%s/select_default_page' % (contextUrl,),
                                request),
                            'selected': False,
                            'icon': None,
                            'extra': {
                                'id': 'contextSetDefaultPage',
                                'separator': 'actionSeparator',
                                'class': 'pat-plone-modal'},
                            'submenu': None,
                            })
                else:
                    defaultPageObj = getattr(obj, defaultPage, None)
                    defaultPageTitle = u""
                    if defaultPageObj is not None:
                        if hasattr(aq_base(defaultPageObj), 'Title'):
                            defaultPageTitle = defaultPageObj.Title()
                        else:
                            defaultPageTitle = getattr(aq_base(defaultPageObj),
                                                       'title', u'')

                    results.append({
                        'title': _(u'label_item_selected',
                                   default=u'Item: ${contentitem}',
                                   mapping={'contentitem': escape(
                                       utils.safe_unicode(defaultPageTitle))}),
                        'description': '',
                        'action': None,
                        'selected': True,
                        'icon': None,
                        'extra': {
                            'id': 'contextDefaultPageDisplay',
                            'separator': 'actionSeparator',
                            'class': ''},
                        'submenu': None,
                    })
                    if contextCanSetDefaultPage:
                        results.append({
                            'title': _(u'label_change_item',
                                       default=u'Change content item\nas '
                                               u'default view...'),
                            'description': _(
                                u'title_change_default_view_item',
                                default=u'Change the item used as default '
                                        u'view in this folder'),
                            'action': '%s/select_default_page' % (contextUrl,),
                            'selected': False,
                            'icon': None,
                            'extra': {
                                'id': 'contextChangeDefaultPage',
                                'separator': 'actionSeparator',
                                'class': 'pat-plone-modal'},
                            'submenu': None,
                            })

        return results
예제 #60
0
 def url_for(cls, context, meeting, transition):
     url = '{}?transition={}'.format(
         meeting.get_url(view='meetingtransitioncontroller'), transition)
     return addTokenToUrl(url)