# w.c.s. - web application for online forms # Copyright (C) 2005-2010 Entr'ouvert # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . from quixote import redirect from quixote.directory import Directory from quixote.html import TemplateIO, htmltext from wcs.qommon import _, N_ from wcs.qommon import misc from wcs.categories import Category from wcs.qommon.form import * from wcs.qommon.backoffice.menu import html_top from wcs.qommon.admin.menu import command_icon, error_page import wcs.admin.categories class CategoryUI: def __init__(self, category): self.category = category if self.category is None: self.category = Category() def get_form(self): form = Form(enctype='multipart/form-data') form.add(StringWidget, 'name', title = _('Category Name'), required = True, size=30, value = self.category.name) form.add(TextWidget, 'description', title = _('Description'), cols = 80, rows = 10, value = self.category.description) homepage_redirect_url = get_cfg('misc', {}).get('homepage-redirect-url') if not homepage_redirect_url: form.add(SingleSelectWidget, 'homepage_position', title=_('Position on homepage'), value=self.category.get_homepage_position(), options = [('1st', _('First Column')), ('2nd', _('Second Column')), ('side', _('Sidebar')), ('none', _('None'))]) form.add(IntWidget, 'limit', title=_('Limit number of items displayed on homepage'), value=self.category.get_limit()) form.add(StringWidget, 'redirect_url', size=32, title=_('URL Redirection'), hint=_('If set, redirect the site category page to the given URL.'), value=self.category.redirect_url) form.add_submit('submit', _('Submit')) form.add_submit('cancel', _('Cancel')) return form def submit_form(self, form): if self.category.id: self.category.name = form.get_widget('name').parse() category = self.category else: category = Category(name = form.get_widget('name').parse()) name = form.get_widget('name').parse() category_names = [x.name for x in Category.select() if x.id != category.id] if name in category_names: form.get_widget('name').set_error(_('This name is already used')) raise ValueError() category.description = form.get_widget('description').parse() category.redirect_url = form.get_widget('redirect_url').parse() homepage_redirect_url = get_cfg('misc', {}).get('homepage-redirect-url') if not homepage_redirect_url: category.homepage_position = form.get_widget('homepage_position').parse() category.limit = form.get_widget('limit').parse() category.store() class CategoryPage(wcs.admin.categories.CategoryPage): def __init__(self, component): self.category = Category.get(component) self.category_ui = CategoryUI(self.category) get_response().breadcrumb.append((component + '/', self.category.name)) class CategoriesDirectory(wcs.admin.categories.CategoriesDirectory): label = N_('Categories') def new(self): get_response().breadcrumb.append( ('new', _('New')) ) category_ui = CategoryUI(None) form = category_ui.get_form() if form.get_widget('cancel').parse(): return redirect('.') if form.is_submitted() and not form.has_errors(): try: category_ui.submit_form(form) except ValueError: pass else: return redirect('.') html_top('categories', title = _('New Category')) r = TemplateIO(html=True) r += htmltext('

%s

') % _('New Category') r += form.render() return r.getvalue() def _q_lookup(self, component): return CategoryPage(component)