loops/organize/personal/browser/favorite.py

75 lines
2.3 KiB
Python

# loops.organize.personal.browser
"""A view (to be used by listings, portlets, ...) for favorites.
"""
from zope import component
from zope.app.pagetemplate import ViewPageTemplateFile
from zope.cachedescriptors.property import Lazy
from cybertools.browser.configurator import ViewConfigurator, MacroViewProperty
from loops.browser.node import NodeView
from loops.common import adapted
from loops.organize.party import getPersonForUser
from loops.organize.personal.favorite import Favorites as FavAdapter
from loops.organize.personal.interfaces import IFavorites
from loops.organize.personal.storage.favorite import Favorites
from loops import util
personal_macros = ViewPageTemplateFile('personal_macros.pt')
class FavoriteView(NodeView):
@Lazy
def item(self):
return self
@Lazy
def person(self):
return getPersonForUser(self.context, self.request)
@Lazy
def favorites(self):
return FavAdapter(util.records(self.context, 'favorites', Favorites))
def listFavorites(self):
if self.favorites is None:
return
self.registerDojoDnd()
form = self.request.form
if 'favorites_change_order' in form:
uids = form.get('favorite_uids')
if uids:
self.favorites.reorder(uids)
for trackUid, uid in self.favorites.listWithTracks(self.person):
obj = util.getObjectForUid(uid)
if obj is not None:
adobj = adapted(obj)
yield dict(url=self.getUrlForTarget(obj),
uid=uid,
title=adobj.favTitle,
description=adobj.description,
object=obj,
trackUid=trackUid)
def add(self):
if self.favorites is None:
return
uid = self.request.get('id')
if not uid:
return
obj = util.getObjectForUid(uid)
self.favorites.add(obj, self.person)
self.request.response.redirect(self.virtualTargetUrl)
def remove(self):
if self.favorites is None:
return
uid = self.request.get('id')
if not uid:
return
obj = util.getObjectForUid(uid)
self.favorites.remove(obj, self.person)
self.request.response.redirect(self.virtualTargetUrl)