+++ /dev/null
-# -*- coding: utf-8 -*-
-############################################################
-# Copyright © 2005-2008 Benoît PIN <benoit.pin@ensmp.fr> #
-# Plinn - http://plinn.org #
-# #
-# This program is free software; you can redistribute it #
-# and/or modify it under the terms of the Creative Commons #
-# "Attribution-Noncommercial 2.0 Generic" #
-# http://creativecommons.org/licenses/by-nc/2.0/ #
-############################################################
-""" container classes for photo storage.
-"""
-
-from AccessControl import ClassSecurityInfo, Unauthorized
-from Globals import InitializeClass
-from zExceptions import NotFound
-from zope.component.factory import Factory
-from BTrees.OOBTree import OOSet
-from Products.CMFCore.permissions import ModifyPortalContent, View
-from Products.CMFCore.utils import getToolByName
-from Products.Plinn.HugePlinnFolder import HugePlinnFolder
-from random import randrange
-
-
-class Portfolio(HugePlinnFolder) :
- """ Container for photos """
-
- security = ClassSecurityInfo()
-
- def __init__( self, id, title='' ) :
- super__init__ = super(Portfolio, self).__init__
- super__init__(id, title=title)
- self.samplePhotoPath = None
- self.presentation_page = None
-
-
- security.declareProtected(View, 'randomPhoto')
- def randomPhoto(self):
- " return a ramdom photo or None "
- ctool = getToolByName(self, 'portal_catalog')
- res = ctool(path = '/'.join(self.getPhysicalPath()),
- portal_type='Photo')
- length = len(res)
- if length :
- brain = res[randrange(length)]
- infos = { 'src' : '%s/getThumbnail' % brain.getURL()
- , 'alt' : brain.Title}
- size = brain.getThumbnailSize
- infos.update(size)
- return infos
- else :
- return None
-
- security.declareProtected(ModifyPortalContent, 'setSamplePhoto')
- def setSamplePhoto(self, photoPath):
- """ set photo used to represents portfolio content.
- """
- self.samplePhotoPath = photoPath
- return True
-
- security.declareProtected(View, 'samplePhoto')
- def samplePhoto(self):
- """ returns sample photo or random photo if not found.
- """
- if self.samplePhotoPath is None :
- return self.randomPhoto()
- else :
- try :
- sample = self.restrictedTraverse(self.samplePhotoPath)
- infos = { 'src' : '%s/getThumbnail' % sample.absolute_url()
- , 'alt' : sample.Title()}
- size = sample.getThumbnailSize()
- infos.update(size)
- return infos
-
- except (KeyError, NotFound) :
- self.samplePhotoPath = None
- return self.randomPhoto()
- except Unauthorized :
- return self.randomPhoto()
-
- security.declareProtected(View, 'hasPresentationPage')
- def hasPresentationPage(self):
- return self.presentation_page is not None
-
-
- security.declareProtected(ModifyPortalContent, 'createPresentationPage')
- def createPresentationPage(self):
- #create a presentation page
- self.presentation_page = ''
- return True
-
- security.declareProtected(ModifyPortalContent, 'deletePresentationPage')
- def deletePresentationPage(self):
- self.presentation_page = None
- return True
-
-
- security.declareProtected(ModifyPortalContent, 'editPresentationPage')
- def editPresentationPage(self, text):
- """editPresentationPage documentation
- """
- self.presentation_page = text
- self.reindexObject()
- return True
-
- security.declareProtected(View, 'SearchableText')
- def SearchableText(self):
- base = super(Portfolio, self).SearchableText()
- if self.hasPresentationPage() :
- return '%s %s' % (base, self.presentation_page)
- else :
- return base
-
-
-
-InitializeClass(Portfolio)
-
-PortfolioFactory = Factory(Portfolio)
\ No newline at end of file