eggification
[Portfolio.git] / Products / Portfolio / lightbox.py
diff --git a/Products/Portfolio/lightbox.py b/Products/Portfolio/lightbox.py
new file mode 100755 (executable)
index 0000000..98adde2
--- /dev/null
@@ -0,0 +1,86 @@
+# -*- 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/           #
+############################################################
+""" Lightboxes contains references to images.
+    References are made with CMFUid stuff.
+"""
+
+from Globals import InitializeClass
+from AccessControl import ClassSecurityInfo
+from Products.CMFCore.permissions import View, ModifyPortalContent
+from Products.CMFCore.PortalContent import PortalContent
+from Products.CMFDefault.DublinCore import DefaultDublinCoreImpl
+from zope.component.factory import Factory
+
+class Lightbox( PortalContent, DefaultDublinCoreImpl):
+       "lightbox holds references to photos"
+       
+       security = ClassSecurityInfo()
+       
+       def __init__( self, id, title='', uids=[], description=''):
+               DefaultDublinCoreImpl.__init__(self)
+               self.id=id
+               self.uids = tuple(uids)
+               self._editMetadata(title=title, description=description)
+       
+       security.declareProtected(View, 'getUidList')
+       def getUidList(self):
+               return list(self.uids)
+       
+       security.declareProtected(ModifyPortalContent, 'append')
+       def append(self, uid):
+               if uid not in self.uids :
+                       self.uids = self.uids  + (uid,)
+                       self.notifyModified()
+                       self.reindexObject(idxs=['modified'])
+                       return True
+               else :
+                       return False
+       
+       security.declareProtected(ModifyPortalContent, 'extend')
+       def extend(self, uids):
+               already = 0
+               new = []
+               for uid in uids :
+                       if uid not in self.uids :
+                               new.append(uid)
+                       else :
+                               already = already + 1
+               self.uids = self.uids + tuple(new)
+               if len(already < uids) :
+                       self.notifyModified()
+                       self.reindexObject(idxs=['modified'])
+               return already
+       
+       security.declareProtected(ModifyPortalContent, 'pop')
+       def pop(self, index=None):
+               i = index
+               if i is None :
+                       i = len(self.uids) -1
+
+               self.uids = self.uids[:i] + self.uids[i+1:]
+
+               self.notifyModified()
+               self.reindexObject(idxs=['modified'])
+       
+       security.declareProtected(ModifyPortalContent, 'remove')
+       def remove(self, value):
+               for i, v in enumerate(self.uids) :
+                       if value == v :
+                               self.pop(i)
+                               break
+               else :
+                       return
+               self.notifyModified()
+               self.reindexObject(idxs=['modified'])
+
+InitializeClass(Lightbox)
+
+LightboxFactory = Factory(Lightbox)    
\ No newline at end of file