Example #1
0
    def update(self):
        super(RecentPortlet, self).update()

        self.site = getSite()
        catalog = queryUtility(ICatalog)
        ids = queryUtility(IIntIds)

        if catalog is not None:
            query = dict(searchContext=(self.site,),
                     isDraft={'any_of': (False,)},
                     sort_order='reverse', sort_on=self.index,
                     )

            if '__all__' in self.types:
                query['typeType']={'any_of': ('Portal type',)}
            else:
                query['type']={'any_of': self.types}
            
            try:
                context = self.manager.view.maincontext
            except AttributeError:
                context = self.context
                
            if self.spaceMode == 2:
                query['contentSpace'] = {'any_of': [ids.queryId(getSpace(context))]}
            elif self.spaceMode == 3:
                query['traversablePath'] = {'any_of':(getSpace(context),)}

            results = catalog.searchResults(**query)
            
            if results:
                self.items = results
Example #2
0
    def listContents(self):
        context = self.context
        request = self.request
        catalog = getUtility(ICatalog)
        ids = getUtility(IIntIds)
        formatter = getFormatter(request, 'humanDatetime', 'medium')

        query = {'traversablePath': {'any_of':(context,)},
                 'sort_order': 'reverse',
                 'sort_on': 'modified',
                 'isDraft': {'any_of': (False,)}}

        if '__all__' in self.types:
            query['typeType']={'any_of': ('Portal type',)}
        else:
            query['type']={'any_of': self.types}

        try:
            local_context = self.manager.view.maincontext
        except AttributeError:
            local_context = context

        if self.spaceMode == 2:
            query['contentSpace'] = {'any_of': [ids.queryId(removeSecurityProxy(getSpace(local_context)))] }
            del query['traversablePath']
        elif self.spaceMode == 3:
            query['traversablePath'] = {'any_of':(getSpace(local_context),)}

        query.update(self.extraParameters())

        docs = []
        for document in catalog.searchResults(**query)[:self.number]:
            view = queryMultiAdapter((document, request), IContentViewView)
            if view is not None:
                url = '%s/%s'%(absoluteURL(document, request), view.name)
            else:
                url = '%s/'%absoluteURL(document, request)

            space = getSpace(document, context)
            item = IItem(document, None)

            docs.append({'url': url,
                         'title': getattr(item, 'title', document.__name__),
                         'description': getattr(item, 'description', u''),
                         'date': formatter.format(IDCTimes(document).modified),
                         'icon': queryMultiAdapter(
                                   (document, request), name='zmi_icon'),
                         'space': space.title,
                         'spacedescription': space.description,
                         'spaceurl': '%s/'%absoluteURL(space, request),
                         'content': document,
                         })
        return docs
Example #3
0
    def items(self):
        request = self.request
        catalog = getUtility(ICatalog)

        results = getUtility(ICatalog).searchResults(
            traversablePath={'any_of':(self.context,)},
            type={'any_of': ('project.task',)},
            sort_order='reverse', sort_on='effective',
            isDraft={'any_of': (False,)})

        for item in results:
            url = absoluteURL(item, request)

            info = {
                'title': u'%s in %s'%(item.title, getSpace(item).title),
                'description': item.text.cooked,
                'guid': '%s/'%url,
                'pubDate': rfc822.formatdate(time.mktime(item.date.timetuple())),
                'isPermaLink': True}

            principal = IOwnership(item).owner
            if principal is not None:
                profile = IPersonalProfile(principal)
                info['author'] = u'%s (%s)'%(profile.email, profile.title)

            yield info
Example #4
0
    def update(self):
        includeInplaceSource(jssource)
        request = self.request
        context = self.context

        context = IMembersAware(getSpace(context), None)
        if context is None:
            return

        notifications = []
        for name, notification in getAdapters((self.context,), IContentNotification):
            notifications.append((notification.title, name, notification))

        notifications.sort()
        self.notifications = [notification for title, name, notification
                              in notifications]
        members = []
        spaces = list(getUtility(ICatalog).searchResults(
            type={'any_of': ('content.space',)},
            traversablePath={'any_of': [context]}))

        spaces.append(context)
        for space in spaces:
            for member in space.members.values():
                principal = member.principal
                if principal is None or principal.id=='unknown':
                    continue
                title = member.title
                position = -1
                for pos, memb in enumerate(members):
                    if member.title in memb:
                        position = pos
                if position != -1:
                    members[position][1]['spaces'].append(space.title)
                else:
                    members.append((title, {'id': principal.id,
                                            'title': title,
                                            'spaces': [space.title]
                                            }))
        self.renderDict = self.createRenderDict(sorted(spaces, key=lambda sp: sp.title), members)
        self.members = [val[1] for val in members]
        if 'notifications.save' in request:
            checked = {}
            for id in request.get('notifications', ()):
                pid, nid = id.split(':', 1)
                data = checked.setdefault(nid, [])
                data.append(pid)

            for notification in self.notifications:
                data = checked.get(notification.type, [])
                for member in self.members:
                    if member['id'] in data:
                        notification.subscribe(member['id'])
                    else:
                        notification.unsubscribe(member['id'])

            IStatusMessage(request).add(
                _('Email notification subscriptions have been updated.'))
Example #5
0
    def query(self, default=None):
        space = getSpace(self.content)
        if space is None:
            return

        return {'url': '%s/'%absoluteURL(space, self.request),
                'title': cgi.escape(space.title),
                'description': cgi.escape(space.description),
                'space': space}
 def update(self):
     space = getSpace(self.context)
     if IPersonalSpace.providedBy(space):
         principal = space.principal
     else:
         principal = self.request.principal
     try:
         self.engine = IPersonalFriendConnect(principal).engine
     except (TypeError, AttributeError):
         return
     self.siteUrl = absoluteURL(getSite(), self.request)
     super(PersonalFriendConnectPortlet, self).update()
Example #7
0
    def update(self):
        queryObject = getUtility(IIntIds).queryObject
        self.categories = categories = []
        for uid in self.context.category:
            category = queryObject(uid)
            if category is not None:
                categories.append(category)
        categories.sort(key=attrgetter('title'))
        self.date = IZopeDublinCore(self.context).created
        self.autoplay = str(self.context.autoplay).lower()

        if self.context.mediaSource:
            self.mediaURL = None
        else:
            self.mediaURL = (self.context.mediaData is not None \
                             and self.context.mediaData.data) \
                            and '%s/view.html' % absoluteURL(self.context, self.request) \
                            or (self.context.mediaURL or '')
            if self.context.mediaURLList:
                self.mediaURL = self.context.mediaURLList[0]
                mediaURLList = self.context.mediaURLList
            else:
                mediaURLList = [self.mediaURL]
            urls = map(lambda x: r"""{\'url\':\'%s\', \'autoPlay\': %s}""" % (urllib.quote(x[1]), \
                                                                                 x[0]==0 and self.autoplay or 'true'), \
                                            enumerate(mediaURLList))
            self.mediaURLListEncoded = r"\'playlist\': [%s]" % ','.join(urls)
        discussion = IContentDiscussion(self.context, None)
        self.comments = discussion is not None and len(discussion)
        self.discussible = discussion is not None and discussion.status != 3
        self.addcomment = self.discussible and discussion.status != 2
        self.tags = IContentTags(self.context, None)
        self.tags = self.tags is not None and self.tags.tags or []
        self.url = absoluteURL(self.context, self.request)
        self.space = getSpace(self.context)
        self.container_url = absoluteURL(self.space, self.request)
        self.site_url = absoluteURL(getSite(), self.request)
        owner = IOwnership(self.context).owner
        space = IPersonalSpace(owner, None)
        profile = IPersonalProfile(owner, None)
        # author
        try:
            self.author = '%s %s'%(profile.firstname, profile.lastname)
            self.avatar_url = profile.avatarUrl(self.request)
        except AttributeError:
            self.author = getattr(owner,'title','')
            self.avatar_url = '#'

        if space is not None:
            self.profile_url = '%s/profile/'%absoluteURL(space, self.request)
        self.container_title = self.space.title
        include('jquery-plugins')
Example #8
0
    def update(self):
        super(EventsPortlet, self).update()

        context, request = self.context, self.request

        ids = queryUtility(IIntIds)
        principal = request.principal

        now = datetime.now(utc)
        endDay = now+timedelta(3650)

        # set timezone from user profile
        user_tz = getPrincipalTimezone(principal)
        if user_tz:
            now = now.astimezone(user_tz)
            endDay = endDay.astimezone(user_tz)

        query = dict(searchContext=(getSite(),),
                     sort_on='calendarEventStart',
                     typeType = {'any_of': ('Event type',)},
                     )

        if self.spaceMode == 2:
            query['contentSpace'] = {'any_of': [ids.queryId(getSpace(context))]}
        elif self.spaceMode == 3:
            query['traversablePath'] = {'any_of':(getSpace(context),)}

        if self.onlyToday:
            tz = user_tz and user_tz or utc
            endDay = datetime(now.year, now.month, now.day, 23, 59, 59, 0)
            endDay = tz.localize(endDay)

        query['calendarEventDuration']={'between': (now, endDay, True, True)}
        results = getUtility(ICatalog).searchResults(**query)

        if results:
            self.events = results[:self.count]
    def getProjectInfo(self, project):
        """ returns project info """

        context = project

        info = {
            'title': context.title,
            'description': context.description,
            'icon': queryMultiAdapter((context, self.request), name='zmi_icon'),
            'url': '%s/'%absoluteURL(context, self.request),
            'space': getSpace(context.__parent__),
            'tasks': self.getTasks(context)
            }

        return info
Example #10
0
    def update(self):
        self.date = IZopeDublinCore(self.context).created
        self.site_url = absoluteURL(getSite(), self.request)
        self.space = getSpace(self.context)
        owner = IOwnership(self.context).owner
        space = IPersonalSpace(owner, None)
        profile = IPersonalProfile(owner, None)
        self.container_url = absoluteURL(self.space, self.request)
        # author
        try:
            self.author = '%s %s'%(profile.firstname, profile.lastname)
            self.avatar_url = profile.avatarUrl(self.request)
        except AttributeError:
            self.author = getattr(owner,'title','')
            self.avatar_url = '#'

        if space is not None:
            self.profile_url = '%s/profile/'%absoluteURL(space, self.request)
        self.container_title = self.space.title
Example #11
0
    def __init__(self, context, request, view, manager):
        context = getSpace(context, getSite())

        super(RecentContentPortlet, self).__init__(context,request,view,manager)
Example #12
0
 def isAvailable(self):
     cur_space = getSpace(self.parentForm)
     if cur_space.get('blog'):
         return True
     else:
         return False