Skip to content

Commit 3b0973e

Browse files
author
Gordon B. McMillan
committed
Fixes to the search form and saving queries.
Fixes to sorting in back_metakit.py.
1 parent 8683017 commit 3b0973e

File tree

3 files changed

+51
-22
lines changed

3 files changed

+51
-22
lines changed

roundup/backends/back_metakit.py

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ def __getattr__(self, classname):
4646
except KeyError:
4747
x = 0
4848
return x
49+
elif classname == 'transactions':
50+
return self.dirty
4951
return self.getclass(classname)
5052
def getclass(self, classname):
5153
return self.classes[classname]
@@ -479,10 +481,11 @@ def retire(self, nodeid):
479481
row._isdel = 1
480482
if self.do_journal:
481483
self.db.addjournal(self.classname, nodeid, _RETIRE, {})
482-
iv = self.getindexview(1)
483-
ndx = iv.find(k=getattr(row, self.keyname),i=row.id)
484-
if ndx > -1:
485-
iv.delete(ndx)
484+
if self.keyname:
485+
iv = self.getindexview(1)
486+
ndx = iv.find(k=getattr(row, self.keyname),i=row.id)
487+
if ndx > -1:
488+
iv.delete(ndx)
486489
self.db.dirty = 1
487490
self.fireReactors('retire', nodeid, None)
488491
def history(self, nodeid):
@@ -732,7 +735,24 @@ def ff(row, r=regexes):
732735
try:
733736
prop = getattr(v, propname)
734737
except AttributeError:
738+
print "MK has no property %s" % propname
735739
continue
740+
propclass = self.ruprops.get(propname, None)
741+
if propclass is None:
742+
propclass = self.privateprops.get(propname, None)
743+
if propclass is None:
744+
print "Schema has no property %s" % propname
745+
continue
746+
if isinstance(propclass, hyperdb.Link):
747+
linkclass = self.db.getclass(propclass.classname)
748+
lv = linkclass.getview()
749+
lv = lv.rename('id', propname)
750+
v = v.join(lv, prop, 1)
751+
if linkclass.getprops().has_key('order'):
752+
propname = 'order'
753+
else:
754+
propname = linkclass.labelprop()
755+
prop = getattr(v, propname)
736756
if isreversed:
737757
rev.append(prop)
738758
sortspec.append(prop)

roundup/cgi_client.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
1616
# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
1717
#
18-
# $Id: cgi_client.py,v 1.152 2002-07-31 22:04:14 richard Exp $
18+
# $Id: cgi_client.py,v 1.153 2002-07-31 22:40:50 gmcm Exp $
1919

2020
__doc__ = """
2121
WWW request handler (also used in the stand-alone server).
@@ -764,6 +764,7 @@ def showquery(self):
764764
filterspec = self.index_filterspec(filter, queries.get(self.nodeid, 'klass'))
765765
if self.form.has_key('search_text'):
766766
search_text = self.form['search_text'].value
767+
search_text = urllib.quote(search_text)
767768
else:
768769
search_text = ''
769770
if self.form.has_key(':pagesize'):
@@ -782,15 +783,9 @@ def showquery(self):
782783
url += '&:pagesize=%s' % pagesize
783784
if search_text:
784785
url += '&search_text=%s' % search_text
785-
qname = self.form['name'].value
786-
chgd = []
787-
if qname != queries.get(self.nodeid, 'name'):
788-
chgd.append('name')
789786
if url != queries.get(self.nodeid, 'url'):
790-
chgd.append('url')
791-
if chgd:
792-
queries.set(self.nodeid, name=qname, url=url)
793-
message = _('%(changes)s edited ok')%{'changes': ', '.join(chgd)}
787+
queries.set(self.nodeid, url=url)
788+
message = _('url edited ok')
794789
else:
795790
message = _('nothing changed')
796791
else:
@@ -1357,7 +1352,7 @@ def newuser_action(self, message=None):
13571352
# re-open the database for real, using the user
13581353
self.opendb(self.user)
13591354
password = cl.get(uid, 'password')
1360-
self.set_cookie(self.user, self.form['password'].value)
1355+
self.set_cookie(self.user, password)
13611356
return 1
13621357

13631358
def set_cookie(self, user, password):
@@ -1696,6 +1691,9 @@ def parsePropsFromForm(db, cl, form, nodeid=0, num_re=re.compile('^\d+$')):
16961691

16971692
#
16981693
# $Log: not supported by cvs2svn $
1694+
# Revision 1.152 2002/07/31 22:04:14 richard
1695+
# cleanup
1696+
#
16991697
# Revision 1.151 2002/07/30 21:37:43 richard
17001698
# oops, thanks Duncan Booth for spotting this one
17011699
#

roundup/htmltemplate.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
1616
# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
1717
#
18-
# $Id: htmltemplate.py,v 1.107 2002-07-30 05:27:30 richard Exp $
18+
# $Id: htmltemplate.py,v 1.108 2002-07-31 22:40:50 gmcm Exp $
1919

2020
__doc__ = """
2121
Template engine.
@@ -832,13 +832,15 @@ def do_filterspec(self, classprop, urlprop):
832832
for k,v in query.items():
833833
query[k] = v[0].split(',')
834834
pagesize = query.get(':pagesize',['25'])[0]
835+
search_text = query.get('search_text', [''])[0]
836+
search_text = urllib.unquote(search_text)
835837
for k,v in query.items():
836838
if k[0] != ':':
837839
filterspec[k] = v
838840
ixtmplt = IndexTemplate(self.client, self.templates, classname)
839841
qform = '<form onSubmit="return submit_once()" action="%s%s">\n'%(
840842
self.classname,self.nodeid)
841-
qform += ixtmplt.filter_form(query.get('search_text', ''),
843+
qform += ixtmplt.filter_form(search_text,
842844
query.get(':filter', []),
843845
query.get(':columns', []),
844846
query.get(':group', []),
@@ -931,6 +933,10 @@ def clear(self):
931933

932934
def buildurl(self, filterspec, search_text, filter, columns, sort, group, pagesize):
933935
d = {'pagesize':pagesize, 'pagesize':pagesize, 'classname':self.classname}
936+
if search_text:
937+
d['searchtext'] = 'search_text=%s&' % search_text
938+
else:
939+
d['searchtext'] = ''
934940
d['filter'] = ','.join(map(urllib.quote,filter))
935941
d['columns'] = ','.join(map(urllib.quote,columns))
936942
d['sort'] = ','.join(map(urllib.quote,sort))
@@ -940,7 +946,7 @@ def buildurl(self, filterspec, search_text, filter, columns, sort, group, pagesi
940946
vals = ','.join(map(urllib.quote,vals))
941947
tmp.append('%s=%s' % (col, vals))
942948
d['filters'] = '&'.join(tmp)
943-
return '%(classname)s?%(filters)s&:sort=%(sort)s&:filter=%(filter)s&:group=%(group)s&:columns=%(columns)s&:pagesize=%(pagesize)s' % d
949+
return '%(classname)s?%(searchtext)s%(filters)s&:sort=%(sort)s&:filter=%(filter)s&:group=%(group)s&:columns=%(columns)s&:pagesize=%(pagesize)s' % d
944950

945951
col_re=re.compile(r'<property\s+name="([^>]+)">')
946952
def render(self, filterspec={}, search_text='', filter=[], columns=[],
@@ -989,8 +995,8 @@ def render(self, filterspec={}, search_text='', filter=[], columns=[],
989995
for name in columns:
990996
cname = name.capitalize()
991997
if show_display_form:
992-
sb = self.sortby(name, filterspec, columns, filter, group,
993-
sort, pagesize, startwith)
998+
sb = self.sortby(name, search_text, filterspec, columns, filter,
999+
group, sort, pagesize)
9941000
anchor = "%s?%s"%(self.classname, sb)
9951001
w('<td><span class="list-header"><a href="%s">%s</a>'
9961002
'</span></td>\n'%(anchor, cname))
@@ -1286,13 +1292,15 @@ def filter_section(self, search_text, filter, columns, group, all_columns,
12861292
w(' </tr>\n')
12871293
w('</table>\n')
12881294

1289-
def sortby(self, sort_name, filterspec, columns, filter, group, sort,
1290-
pagesize, startwith):
1295+
def sortby(self, sort_name, search_text, filterspec, columns, filter, group, sort,
1296+
pagesize):
12911297
''' Figure the link for a column heading so we can sort by that
12921298
column
12931299
'''
12941300
l = []
12951301
w = l.append
1302+
if search_text:
1303+
w('search_text=%s' % search_text)
12961304
for k, v in filterspec.items():
12971305
k = urllib.quote(k)
12981306
if type(v) == type([]):
@@ -1306,7 +1314,7 @@ def sortby(self, sort_name, filterspec, columns, filter, group, sort,
13061314
if group:
13071315
w(':group=%s'%','.join(map(urllib.quote, group)))
13081316
w(':pagesize=%s' % pagesize)
1309-
w(':startwith=%s' % startwith)
1317+
w(':startwith=0')
13101318

13111319
# handle the sorting - if we're already sorting by this column,
13121320
# then reverse the sorting, otherwise set the sorting to be this
@@ -1433,6 +1441,9 @@ def render(self, form):
14331441

14341442
#
14351443
# $Log: not supported by cvs2svn $
1444+
# Revision 1.107 2002/07/30 05:27:30 richard
1445+
# nicer error messages, and a bugfix
1446+
#
14361447
# Revision 1.106 2002/07/30 02:41:04 richard
14371448
# Removed the confusing, ugly two-column sorting stuff. Column heading clicks
14381449
# now only sort on one column. Nice and simple and obvious.

0 commit comments

Comments
 (0)