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()
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
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'))
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))
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))
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
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
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())
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())
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)
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
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
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
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
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
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
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
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))
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
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
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
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)
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
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)
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))
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
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
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''
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)
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)
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))
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 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)
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)
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
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)
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
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)
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)
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())
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)
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)
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
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)
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)
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
def action(self): return addTokenToUrl( '%s/folder_factories' % self._addContext().absolute_url(), self.request)
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
def url_for(cls, context, meeting, transition): url = '{}?transition={}'.format( meeting.get_url(view='meetingtransitioncontroller'), transition) return addTokenToUrl(url)