def search(self, q="", limit=10): """.""" # I don't know why permission="cmf.ManagePortal" doesn't works # in configure.zcml for this browser view. portal_membership = getToolByName(self.context, 'portal_membership') hasPermission = portal_membership.checkPermission if hasPermission(ModifyPortalContent, self.context): book = IAddressBook(self.context) return book.search(q=q, limit=limit) else: raise Unauthorized
def update(self): self.request.response.setHeader('X-Theme-Disabled', '1') if self.book is None: self.book = IAddressBook(self.context) if not self.contact_info: uniq_id = self.context.contact_id self.contact_info = self.book.getContactInfos(uniq_id)
class ContactView(BrowserView): """Contact view""" def __init__(self, context, request): self.context = context # portlet assignement self.request = request self.contact_info = {} self.book = None def __call__(self): self.update() return self.index() def update(self): self.request.response.setHeader('X-Theme-Disabled', '1') if self.book is None: self.book = IAddressBook(self.context) if not self.contact_info: uniq_id = self.context.contact_id self.contact_info = self.book.getContactInfos(uniq_id)
def update(self): if self.addressbook is None: self.addressbook = IAddressBook(self.context) self.addressbook.update() if self.settings is None: self.settings = self.addressbook.settings
class Renderer(base.Renderer): """Portlet renderer. This is registered in configure.zcml. The referenced page template is rendered, and the implicit variable 'view' will refer to an instance of this class. Other methods can be added and referenced in the template. """ index = ViewPageTemplateFile('contact.pt') def __init__(self, context, request, view, manager, data): super(Renderer, self).__init__(context, request, view, manager, data) self.addressbook = None self.settings = None def update(self): if self.addressbook is None: self.addressbook = IAddressBook(self.context) self.addressbook.update() if self.settings is None: self.settings = self.addressbook.settings def render(self): self.update() return self.index() @memoize def getContactInfo(self): """ get the contact informations the portlet is pointing to""" if self.load_ajax(): return "ajax" # not None uniq_id = self.data.contact_id return self.addressbook.getContactInfos(uniq_id) def portlet_url(self): portlet_url = "" portal_state = component.getMultiAdapter( (self.context, self.request), name="plone_portal_state" ) portal_url = portal_state.portal_url() portal = portal_state.portal() portal_path = '/'.join(portal.getPhysicalPath()) retriever = component.getMultiAdapter( (self.context, self.manager), IPortletRetriever ) category = None for info in retriever.getPortlets(): if info['assignment'] is self.data.aq_base: category = info['category'] key = info['key'] break if category is not None: path = key[len(portal_path) + 1:] info = {'category': category, 'id': '%s' % self.data.id, 'manager': self.manager.__name__, 'context_path': path} portlet_url = '%s/%s' % (portal_url, PORTLET_PATH % info) return portlet_url def load_ajax(self): """return True if the portlet should be load in ajax""" if hasattr(self.settings, 'ajax'): return self.settings.ajax return False