[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