[Checkins] SVN: Sandbox/luciano/kirbi/src/kirbi/ ownership display and buttons in pac/index

Luciano Ramalho luciano at ramalho.org
Mon Aug 20 21:39:24 EDT 2007


Log message for revision 79058:
  ownership display and buttons in pac/index
  

Changed:
  U   Sandbox/luciano/kirbi/src/kirbi/app.py
  U   Sandbox/luciano/kirbi/src/kirbi/book.py
  U   Sandbox/luciano/kirbi/src/kirbi/collection.py
  U   Sandbox/luciano/kirbi/src/kirbi/interfaces.py
  U   Sandbox/luciano/kirbi/src/kirbi/item.py
  U   Sandbox/luciano/kirbi/src/kirbi/pac.py
  U   Sandbox/luciano/kirbi/src/kirbi/pac_templates/index.pt
  U   Sandbox/luciano/kirbi/src/kirbi/static/master.css

-=-
Modified: Sandbox/luciano/kirbi/src/kirbi/app.py
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/app.py	2007-08-20 23:07:47 UTC (rev 79057)
+++ Sandbox/luciano/kirbi/src/kirbi/app.py	2007-08-21 01:39:23 UTC (rev 79058)
@@ -19,7 +19,7 @@
 from kirbi.pac import Pac
 from kirbi.book import Book
 from kirbi.collection import Collection
-from kirbi.interfaces import IUser
+from kirbi.interfaces import IItem, IUser
 from zope.interface import Interface, implements
 from zope.component import getSiteManager
 from zope.traversing import browser
@@ -94,7 +94,14 @@
     isbn13 = index.Field()
     searchableText = index.Text()
 
-    creatorsSet = grok.index.Set()
+    creatorsSet = index.Set()
+    
+class ItemIndexes(grok.Indexes):
+    grok.site(Kirbi)
+    grok.context(IItem)
+    
+    manifestation_id = index.Field()
+    owner_login = index.Field()
 
 class Master(grok.View):
     """The master page template macro."""

Modified: Sandbox/luciano/kirbi/src/kirbi/book.py
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/book.py	2007-08-20 23:07:47 UTC (rev 79057)
+++ Sandbox/luciano/kirbi/src/kirbi/book.py	2007-08-21 01:39:23 UTC (rev 79058)
@@ -20,7 +20,10 @@
 from zope import schema
 from isbn import isValidISBN, isValidISBN10, isValidISBN13, filterDigits
 from isbn import convertISBN10toISBN13, convertISBN13toLang
+from zope.component import getUtility
+from zope.app.catalog.interfaces import ICatalog
 
+
 import os
 
 STATIC_PATH = os.path.join(os.path.dirname(__file__), 'static')
@@ -261,6 +264,23 @@
             
     def getCoverId(self):
         return self.__name__
+    
+    def getItems(self):
+        catalog = getUtility(ICatalog)
+        res = catalog.searchResults(
+                    manifestation_id=(self.__name__,self.__name__))
+        return [{'owner':item.__parent__.__name__, 'item_id':item.__name__}
+                    for item in res]
+    
+    def itemOwnedBy(self, login):
+        catalog = getUtility(ICatalog)
+        res = catalog.searchResults(
+                    manifestation_id=(self.__name__,self.__name__),
+                    owner_login=(login,login))
+        if res:
+            return list(res)[0].manifestation_id
+        else:
+            return None
 
 class Edit(grok.EditForm):
     grok.require('kirbi.ManageBook')
@@ -278,8 +298,8 @@
     def __init__(self, context, request):
         super(Index, self).__init__(context, request)
 
-        # Note: this method was created because calling context properties
-        # from the template raises a traversal error
+        # XXX: this method was created because calling context properties
+        # from the template raises a traversal error. Is that to be expected?
         self.main_title = self.context.main_title
         self.sub_title = self.context.sub_title
         self.isbn13 = self.context.isbn13

Modified: Sandbox/luciano/kirbi/src/kirbi/collection.py
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/collection.py	2007-08-20 23:07:47 UTC (rev 79057)
+++ Sandbox/luciano/kirbi/src/kirbi/collection.py	2007-08-21 01:39:23 UTC (rev 79058)
@@ -65,7 +65,7 @@
     def render(self,manifestation_id,camefrom):
         pac = grok.getSite()['pac']
         book = pac[manifestation_id]
-        item = Item(book.__name__)
+        item = Item(book.__name__,self.context.__name__)
         self.context.addItem(item)
         self.redirect(camefrom)    
 
@@ -90,7 +90,7 @@
                 else:
                     book = Book(isbn13=isbn13)
                     self.pac.addBook(book)
-                item = Item(book.__name__)
+                item = Item(book.__name__, self.context.__name__)
                 self.context.addItem(item)
             if len(isbns) > len(self.invalid_isbns):
                 added = True

Modified: Sandbox/luciano/kirbi/src/kirbi/interfaces.py
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/interfaces.py	2007-08-20 23:07:47 UTC (rev 79057)
+++ Sandbox/luciano/kirbi/src/kirbi/interfaces.py	2007-08-21 01:39:23 UTC (rev 79058)
@@ -123,6 +123,7 @@
                     description=u"Id of the book of which this item is a copy.",
                     required=True)
     manifestation = Attribute(u"Hard reference to the manifestation instance.")
+    owner_login = Attribute(u"Login of the owner.")
     description = schema.Text(title=u"Description",
                     description=(u"Details of this copy, such as autographs,"
                                  u"marks, damage etc."),

Modified: Sandbox/luciano/kirbi/src/kirbi/item.py
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/item.py	2007-08-20 23:07:47 UTC (rev 79057)
+++ Sandbox/luciano/kirbi/src/kirbi/item.py	2007-08-21 01:39:23 UTC (rev 79058)
@@ -25,7 +25,7 @@
 
     See note at interfaces.IItem.
 
-    >>> it = Item('')
+    >>> it = Item('','Nobody')
     >>> IItem.providedBy(it)
     True
 
@@ -42,12 +42,14 @@
 
     implements(IItem, IBook)
 
-    def __init__(self, manifestation_id, description=u'', catalog_datetime=None):
+    def __init__(self, manifestation_id, owner_id, description=u'',
+                 catalog_datetime=None):
         super(Item, self).__init__()
         self.manifestation_id = manifestation_id
         if manifestation_id:
             self.manifestation = grok.getSite()['pac'].get(manifestation_id)
         self.description = description
+        self.owner_id = owner_id
         if catalog_datetime is None:
             self.catalog_datetime = datetime.now()
 
@@ -55,5 +57,7 @@
         return self.manifestation.__name__
 
     def __getattr__(self,name):
-        # XXX: this looks too easy... feels like cheating. Is it sane?
+        # XXX: Martijn Faassen sugests a refactoring here, implementing
+        # the Item->Manifestation relationship not using this sort of
+        # dynamically hacked inheritance but in as an association
         return getattr(self.manifestation, name)

Modified: Sandbox/luciano/kirbi/src/kirbi/pac.py
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/pac.py	2007-08-20 23:07:47 UTC (rev 79057)
+++ Sandbox/luciano/kirbi/src/kirbi/pac.py	2007-08-21 01:39:23 UTC (rev 79058)
@@ -132,7 +132,7 @@
                     # this error message means that there is a stop words list
                     # somewhere that is used by zope/index/text/queryparser.py
                     # Stop words are considered harmful, we need to weed
-                    # them out - LR
+                    # them out, but where are they in Zope 3? - LR
                     self.results_title = u'"%s" is not a valid query' % query
                     self.results = []
                     return

Modified: Sandbox/luciano/kirbi/src/kirbi/pac_templates/index.pt
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/pac_templates/index.pt	2007-08-20 23:07:47 UTC (rev 79057)
+++ Sandbox/luciano/kirbi/src/kirbi/pac_templates/index.pt	2007-08-21 01:39:23 UTC (rev 79058)
@@ -10,22 +10,18 @@
   <div metal:fill-slot="content">
 
     <h3 tal:content="view/results_title">999 items matched the query</h3>
-    <table tal:condition="view/results">
-        <tr tal:repeat="manif view/results">
+    <table class="listing" tal:condition="view/results">
+        <tr>
+            <th></th> <th></th> <th></th> 
+            <tal:auth condition="not:anonymous">
+                <th>owned<br />by</th>
+                <th>my<br />collection</th>
+            </tal:auth>
+        </tr>
+        <tr tal:repeat="manif view/results"
+            tal:attributes="class python:repeat['manif'].odd() and 'odd' or 'even'">
             <th align="right" tal:content="repeat/manif/number" />
             <td align="center">
-                <a tal:attributes="name manif/__name__">
-                <form method="post" tal:attributes="action
-                    string:${view/application_url}/u/${request/principal/id}/addfrompac">
-                    <input type="hidden" name="manifestation_id"
-                        tal:attributes="value manif/__name__">
-                    <input type="hidden" name="camefrom"
-                        tal:attributes="value string:${view/url}#${manif/__name__}">
-                    <input type="submit" value="+" title="add to my collection" >
-                </form>
-                </a>
-            </td>
-            <td align="center">
                 <img class="cover"
                      tal:attributes="src python:view.coverUrl(manif)"
                      height="53" />
@@ -39,6 +35,31 @@
                     </dd>
                 </dl>
             </td>
+            <tal:auth condition="not:anonymous">
+                <td>
+                    <tal:owner repeat="item manif/getItems">
+                        <a tal:attributes="href
+                            string:${view/application_url}/u/${item/owner}/${item/item_id}"
+                            tal:content="item/owner" />
+                    </tal:owner>
+                </td>
+                <td align="center" tal:define="ownedItem python:manif.itemOwnedBy(request.principal.id)">
+                    <a tal:attributes="name manif/__name__">
+                    <form tal:condition="not:ownedItem"
+                        method="post" tal:attributes="action
+                        string:${view/application_url}/u/${request/principal/id}/addfrompac">
+                        <input type="hidden" name="manifestation_id"
+                            tal:attributes="value manif/__name__">
+                        <input type="hidden" name="camefrom"
+                            tal:attributes="value string:${view/url}#${manif/__name__}">
+                        <input type="submit" value="+" title="add to my collection" >
+                    </form>
+                    <a tal:condition="ownedItem" tal:attributes="href 
+                            string:${view/application_url}/u/${request/principal/id}/$ownedItem"
+                            >view</a>
+                    </a>
+                </td>
+            </tal:auth>
         </tr>
     </table>
 

Modified: Sandbox/luciano/kirbi/src/kirbi/static/master.css
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/static/master.css	2007-08-20 23:07:47 UTC (rev 79057)
+++ Sandbox/luciano/kirbi/src/kirbi/static/master.css	2007-08-21 01:39:23 UTC (rev 79058)
@@ -78,8 +78,8 @@
     font-size: 12pt;
     color: gray;
 }
-dt { font-size: 12pt; }
-dd { font-size: 11pt; }
+dt { font-size: 11pt; }
+dd { font-size: 10pt; }
 
 div.content_menu {
     background-color: lightgray;
@@ -165,4 +165,12 @@
     width: 40em;
     float: left;
     padding: 7px;
+}
+
+.listing tr.odd {
+    background-color: #ddd;
+}
+ 
+.listing th {
+    text-align: center;
 }
\ No newline at end of file



More information about the Checkins mailing list