[silva.app.news][Emiliano D'Alterio] Fixed renaming bug. Replace...
[email protected] Fri, 15 Nov 2013 14:04:10 +0100
| Newsgroups | gmane.comp.web.zope.silva.cvs |
|---|---|
| Message-ID | <[email protected]> |
author: Emiliano D'Alterio
date: Fri Nov 15 14:03:55 2013 +0100
revision: 2043:bdc6fa33da6b in silva.app.news
branch: 2.4
details: https://hg.infrae.com/silva.app.news?cmd=changeset;node=bdc6fa33da6b
modified: src/silva/app/news/ServiceNews.py src/silva/app/news/ServiceNews_templates/manageservicenews.pt
added:
removed:
log: Fixed renaming bug. Replaced renaming methods.
diffstat:
src/silva/app/news/ServiceNews.py | 153 ++++++---
src/silva/app/news/ServiceNews_templates/manageservicenews.pt | 8 +-
2 files changed, 100 insertions(+), 61 deletions(-)
diffs (216 lines):
diff -r bd8300f53207 -r bdc6fa33da6b src/silva/app/news/ServiceNews.py
--- a/src/silva/app/news/ServiceNews.py Tue Nov 12 19:36:40 2013 +0100
+++ b/src/silva/app/news/ServiceNews.py Fri Nov 15 14:03:55 2013 +0100
@@ -280,8 +280,8 @@
'manage_add_target_audience',
'manage_remove_target_audience',
'manage_rename_start',
- 'manage_rename_subjects',
- 'manage_rename_target_audiences',
+ 'manage_rename_subject',
+ 'manage_rename_target_audience',
'manage_set_locale']:
if action in self.request:
getattr(self, action)()
@@ -406,63 +406,103 @@
self.status ='Target audiences %s removed' % ', '.join(tas)
- def manage_rename_start(self):
- """Rename one or more items"""
- if (not self.request.has_key('subjects') and not
- self.request.has_key('target_audiences')):
- self.status ='No items selected to rename'
+ def manage_rename_subject(self):
+ """Rename a subject"""
+ if not self.request.has_key('subjects'):
+ self.status ='No subject specified.'
return
- return self.manage_rename_view()
- def manage_rename_subjects(self):
- """Rename subjects"""
- illegal = []
- for name, value in self.request.form.items():
- if name.startswith('title_'):
- continue
- uname = unicode(name, 'UTF-8')
- uvalue = unicode(value, 'UTF-8')
- subject = self.context._subjects.get_element(uname)
- if uvalue != subject.id():
- try:
- subject.set_id(uvalue)
- except Tree.DuplicateIdError:
- illegal.append(uvalue)
- continue
- title = unicode(self.request.form['title_%s' % name], 'UTF-8')
- subject.set_title(title)
- self.context._p_changed = 1
- if illegal:
- self.status = \
- 'Items %s could not be renamed (name already in use).' % (
- ', '.join(illegal))
- else:
- self.status ='Items renamed'
+ items = [unicode(s, 'UTF-8') for s in self.request['subjects']]
+ if len(items) != 1:
+ self.status ='Please select one subject only.'
+ return
- def manage_rename_target_audiences(self):
- """Rename target audiences"""
- illegal = []
- for name, value in self.request.form.items():
- if name.startswith('title_'):
- continue
- uname = unicode(name, 'UTF-8')
- uvalue = unicode(value, 'UTF-8')
- audience = self.context._target_audiences.getElement(uname)
- if uvalue != audience.id():
- try:
- audience.set_id(uvalue)
- except Tree.DuplicateIdError:
- illegal.append(uvalue)
- continue
- title = unicode(self.request.form['title_%s' % name], 'UTF-8')
- audience.set_title(title)
- self.context._p_changed = 1
- if illegal:
- self.status = \
- 'Items %s could not be renamed (name already in use).' % (
- ', '.join(illegal))
- else:
- self.status ='Items renamed'
+ if ('subject' not in self.request.form or
+ 'title' not in self.request.form or
+ self.request['subject'] == '' or self.request['title'] == ''):
+ self.status ='Missing id or title'
+ return
+
+ try:
+ item = self.context._subjects.get_element(items[0])
+ except KeyError:
+ self.status ='Impossible to rename: subject not found.'
+ return
+
+ item_old_id = item.id()
+ item_old_title = item.title()
+
+ item_new_id = unicode(self.request['subject'], 'UTF-8')
+ item_new_title = unicode(self.request['title'], 'UTF-8')
+
+ changed = 0
+ if item_new_id != item_old_id:
+ try:
+ item.set_id(item_new_id)
+ changed = 1
+ except Tree.DuplicateIdError:
+ self.status ='Impossible to rename: ID already in use.'
+ return
+
+ if item_new_title != item_old_title:
+ item.set_title(item_new_title)
+ changed = 1
+
+ if not changed:
+ self.status ='Nothing to rename. Both Id and Title are equal to the old ones.'
+ return
+
+ self.context._p_changed = changed
+ self.status ='Subject renamed.'
+
+ def manage_rename_target_audience(self):
+ """Rename target audience"""
+ if not self.request.has_key('target_audiences'):
+ self.status ='No target audience specified'
+ return
+
+ items = [unicode(t, 'UTF-8') for t in self.request['target_audiences']]
+ if len(items) != 1:
+ self.status ='Please select one target audience only.'
+ return
+
+ if ('target_audience' not in self.request.form or
+ 'title' not in self.request.form or
+ self.request['target_audience'] == '' or self.request['title'] == ''):
+ self.status ='Missing id or title'
+ return
+
+ try:
+ item = self.context._target_audiences.get_element(items[0])
+ except KeyError:
+ self.status ='Impossible to rename: target audience not found.'
+ return
+
+ item_old_id = item.id()
+ item_old_title = item.title()
+
+ item_new_id = unicode(self.request['target_audience'], 'UTF-8')
+ item_new_title = unicode(self.request['title'], 'UTF-8')
+
+ changed = 0
+ if item_new_id != item_old_id:
+ try:
+ item.set_id(item_new_id)
+ changed = 1
+ except Tree.DuplicateIdError:
+ self.status ='Impossible to rename: ID already in use.'
+ return
+
+ if item_new_title != item_old_title:
+ item.set_title(item_new_title)
+ changed = 1
+
+ if not changed:
+ self.status ='Nothing to rename. Both Id and Title are equal to the old ones.'
+ return
+
+ self.context._p_changed = changed
+ self.status ='Target audience renamed.'
# XXX we probably want to move these elsewhere, for now however this seems
# the most logical location
@@ -487,4 +527,3 @@
self.context.set_timezone_name(self.request['timezone_name'])
self.context.set_first_weekday(int(self.request['first_weekday']))
self.status ='Locale set'
-
diff -r bd8300f53207 -r bdc6fa33da6b src/silva/app/news/ServiceNews_templates/manageservicenews.pt
--- a/src/silva/app/news/ServiceNews_templates/manageservicenews.pt Tue Nov 12 19:36:40 2013 +0100
+++ b/src/silva/app/news/ServiceNews_templates/manageservicenews.pt Fri Nov 15 14:03:55 2013 +0100
@@ -31,8 +31,6 @@
<span tal:replace="structure python: depth * 3 * u' '" /><span tal:content="subject" class="form-text"></span> - <span tal:content="title" class="form-text" /><br />
</tal:define>
</tal:repeat>
- <input type="submit" name="manage_rename_start"
- value="Rename subject(s)" class="form-element">
<input type="submit" name="manage_remove_subject"
value="Remove subject(s)" class="form-element">
<br /><br />
@@ -54,6 +52,8 @@
<div class="form-text">or upload tree:</div>
<input type="file" name="subjects_json"><br />
<input type="submit" value="Add" name="manage_add_subject" class="form-element">
+ <input type="submit" name="manage_rename_subject"
+ value="Rename subject" class="form-element">
</form>
<form method="POST" action="#"
tal:attributes="action string:${context/@@absolute_url}/manage_tree">
@@ -74,8 +74,6 @@
<span tal:replace="structure python: depth * 3 * u' '" /><span tal:content="target_audience" class="form-text"></span> - <span tal:content="title" class="form-text" /><br />
</tal:define>
</tal:repeat>
- <input type="submit" name="manage_rename_start"
- value="Rename target audience(s)" class="form-element">
<input type="submit" name="manage_remove_target_audience"
value="Remove target audience(s)" class="form-element">
<br /><br />
@@ -97,6 +95,8 @@
<input type="file" name="target_audiences_json"><br />
<input type="submit" name="manage_add_target_audience"
value="Add" class="form-element">
+ <input type="submit" name="manage_rename_target_audience"
+ value="Rename target audience" class="form-element">
</form>
<form method="POST" action="#"
tal:attributes="action string:${context/@@absolute_url}/manage_tree">