# 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
%s
' % text return htmltext(text) def has_permission(self, permission_name, user): if user.is_admin: return True permission_roles = getattr(self, '%s_roles' % permission_name, None) or [] if not permission_roles: return True user_roles = set(user.get_roles()) if user else set() return bool(user_roles.intersection([x.id for x in permission_roles])) @classmethod def object_category_xml_export(cls, obj, root, include_id): if obj.category: elem = ET.SubElement(root, 'category') elem.attrib['slug'] = str(obj.category.slug) elem.text = obj.category.name if include_id: elem.attrib['category_id'] = str(obj.category.id) @classmethod def object_category_xml_import(cls, obj, tree, include_id): if tree.find('category') is None: return category_node = tree.find('category') if include_id and category_node.attrib.get('category_id'): category_id = str(category_node.attrib.get('category_id')) if cls.has_key(category_id): obj.category_id = category_id elif category_node.attrib.get('slug'): category = cls.get_by_slug(category_node.attrib.get('slug'), ignore_errors=True) if category: obj.category_id = category.id else: # legacy fallback to name lookup category = xml_node_text(category_node) for c in cls.select(): if c.name == category: obj.category_id = c.id break @property def export_roles(self): return self._export_roles() if callable(self._export_roles) else self._export_roles @export_roles.setter def export_roles(self, value): self._export_roles = value @property def statistics_roles(self): return self._statistics_roles() if callable(self._statistics_roles) else self._statistics_roles @statistics_roles.setter def statistics_roles(self, value): self._statistics_roles = value @property def management_roles(self): return self._management_roles() if callable(self._management_roles) else self._management_roles @management_roles.setter def management_roles(self, value): self._management_roles = value def i18n_scan(self): location = '%s:%s' % (self.xml_root_node, self.id) yield location, None, self.name yield location, None, self.description class CardDefCategory(Category): _names = 'carddef_categories' xml_root_node = 'carddef_category' backoffice_class = 'wcs.admin.categories.CardDefCategoryPage' backoffice_base_url = 'cards/categories/' verbose_name_plural = _('Categories') # declarations for serialization XML_NODES = [ ('name', 'str'), ('url_name', 'str'), ('description', 'str'), ('position', 'int'), ('export_roles', 'roles'), ('management_roles', 'roles'), ] @classmethod def get_object_class(cls): from .carddef import CardDef return CardDef class WorkflowCategory(Category): _names = 'workflow_categories' xml_root_node = 'workflow_category' backoffice_class = 'wcs.admin.categories.WorkflowCategoryPage' backoffice_base_url = 'workflows/categories/' # declarations for serialization XML_NODES = [ ('name', 'str'), ('url_name', 'str'), ('description', 'str'), ('position', 'int'), ('management_roles', 'roles'), ] @classmethod def get_object_class(cls): from .workflows import Workflow return Workflow class BlockCategory(Category): _names = 'block_categories' xml_root_node = 'block_category' backoffice_class = 'wcs.admin.categories.BlockCategoryPage' backoffice_base_url = 'forms/blocks/categories/' verbose_name_plural = _('Categories') # declarations for serialization XML_NODES = [ ('name', 'str'), ('url_name', 'str'), ('description', 'str'), ('position', 'int'), ] @classmethod def get_object_class(cls): from .blocks import BlockDef return BlockDef class MailTemplateCategory(Category): _names = 'mail_template_categories' xml_root_node = 'mail_template_category' backoffice_class = 'wcs.admin.categories.MailTemplateCategoryPage' backoffice_base_url = 'workflows/mail-templates/categories/' # declarations for serialization XML_NODES = [ ('name', 'str'), ('url_name', 'str'), ('description', 'str'), ('position', 'int'), ] @classmethod def get_object_class(cls): from .mail_templates import MailTemplate return MailTemplate class CommentTemplateCategory(Category): _names = 'comment_template_categories' xml_root_node = 'comment_template_category' backoffice_class = 'wcs.admin.categories.CommentTemplateCategoryPage' backoffice_base_url = 'workflows/comment-templates/categories/' verbose_name_plural = _('Categories') # declarations for serialization XML_NODES = [ ('name', 'str'), ('url_name', 'str'), ('description', 'str'), ('position', 'int'), ] @classmethod def get_object_class(cls): from .comment_templates import CommentTemplate return CommentTemplate class DataSourceCategory(Category): _names = 'data_source_categories' xml_root_node = 'data_source_category' backoffice_class = 'wcs.admin.categories.DataSourceCategoryPage' backoffice_base_url = 'forms/data-sources/categories/' verbose_name_plural = _('Categories') # declarations for serialization XML_NODES = [ ('name', 'str'), ('url_name', 'str'), ('description', 'str'), ('position', 'int'), ] @classmethod def get_object_class(cls): from .data_sources import NamedDataSource return NamedDataSource Substitutions.register('category_name', category=_('General'), comment=_('Category Name')) Substitutions.register('category_description', category=_('General'), comment=_('Category Description')) Substitutions.register('category_id', category=_('General'), comment=_('Category Identifier'))