source: products/quintagroup.seoptimizer/branches/refactoring2.3.0/quintagroup/seoptimizer/browser/seo_configlet.py @ 1883

Last change on this file since 1883 was 1883, checked in by liebster, 14 years ago

Changing order of the fields in configlet

  • Property svn:eol-style set to native
File size: 5.2 KB
Line 
1import re
2from zope.interface import Interface
3from zope.interface import implements
4from zope.component import adapts
5from zope.schema.vocabulary import SimpleTerm
6from zope.schema.vocabulary import SimpleVocabulary
7from zope.schema import Bool, Text, Choice, Tuple, List
8from zope.app.form.browser import RadioWidget
9
10from zope.formlib.form import FormFields
11from zope.app.component.hooks import getSite
12from zope.app.form.browser import TextAreaWidget
13
14from plone.app.controlpanel.form import ControlPanelForm
15from plone.app.controlpanel.widgets import MultiCheckBoxThreeColumnWidget
16
17from Products.CMFCore.utils import getToolByName
18from Products.CMFDefault.formlib.schema import ProxyFieldProperty
19from Products.CMFDefault.formlib.schema import SchemaAdapterBase
20from Products.CMFPlone.interfaces import IPloneSiteRoot
21
22from quintagroup.seoptimizer import SeoptimizerMessageFactory as _
23
24
25# Configlet schema
26class ISEOConfigletSchema(Interface):
27
28    exposeDCMetaTags = Bool(
29        title=_("label_exposeDCMetaTags",
30                default='Expose <abbr title="Dublin Core">DC</abbr> meta tags'),
31        description=_("description_seo_dc_metatags",
32                default='Controls if <abbr title="Dublin Core">DC</abbr> '
33                    'metatags are exposed to page header. They include '
34                    'DC.description, DC.type, DC.format, DC.creator and '
35                    'others.'),
36        default=True,
37        required=False)
38
39    metatags_order = List(
40        title=_("label_metatags_order",
41                default='Meta tags order in the page.'),
42        description=_("help_metatags_order",
43                default='Fill in meta tags (one per line) in the order in which'
44                    ' they will appear on site source pages. Example: '
45                    '"metaname accessor".'),
46        required=False)
47
48    types_seo_enabled = Tuple(
49        title=_("label_content_type_title", default='Content Types'),
50        description=_("description_seo_content_types",
51            default='Select content types that will have SEO properties '
52                'enabled.'),
53        required=False,
54        missing_value=tuple(),
55        value_type=Choice(
56            vocabulary="plone.app.vocabularies.ReallyUserFriendlyTypes"))
57
58    default_custom_metatags = List(
59        title=_("label_default_custom_metatags", default='Default custom metatags.'),
60        description=_("help_default_custom_metatags",
61                default='Fill in custom metatag names (one per line) which will'
62                    'appear on qseo_properties edit tab. Example: '
63                    '"metaname|metacontent" or "metaname".'),
64        required=False)
65
66
67class SEOConfigletAdapter(SchemaAdapterBase):
68
69    adapts(IPloneSiteRoot)
70    implements(ISEOConfigletSchema)
71
72    def __init__(self, context):
73        super(SEOConfigletAdapter, self).__init__(context)
74        self.portal = getSite()
75        pprop = getToolByName(self.portal, 'portal_properties')
76        self.context = pprop.seo_properties
77        self.siteprops = pprop.site_properties
78        self.ttool = getToolByName(context, 'portal_types')
79
80    def getExposeDC(self):
81        return self.siteprops.getProperty('exposeDCMetaTags')
82
83    def setExposeDC(self, value):
84        return self.siteprops._updateProperty('exposeDCMetaTags', bool(value))
85
86    def getTypesSEOEnabled(self):
87        ct_with_seo = self.context.content_types_with_seoproperties
88        return [t for t in self.ttool.listContentTypes() if t in ct_with_seo]
89
90    def setTypesSEOEnabled(self, value):
91        value = [t for t in self.ttool.listContentTypes() if t in value]
92        self.context._updateProperty('content_types_with_seoproperties', value)
93
94
95    exposeDCMetaTags = property(getExposeDC, setExposeDC)
96    default_custom_metatags = ProxyFieldProperty(ISEOConfigletSchema['default_custom_metatags'])
97    metatags_order = ProxyFieldProperty(ISEOConfigletSchema['metatags_order'])
98    types_seo_enabled = property(getTypesSEOEnabled, setTypesSEOEnabled)
99
100
101class SmallTextAreaWidget(TextAreaWidget):
102    height = 5
103    splitter = re.compile(u'\\r?\\n', re.S|re.U)
104
105    def _toFieldValue(self, input):
106        if input == self._missing:
107            return self.context._type()
108        else:
109            return self.context._type(filter(None, self.splitter.split(input)))
110
111    def _toFormValue(self, value):
112        if value == self.context.missing_value or value == self.context._type():
113            return self._missing
114        else:
115            return u'\r\n'.join(list(value))
116
117
118class SEOConfiglet(ControlPanelForm):
119
120    form_fields = FormFields(ISEOConfigletSchema)
121    form_fields['default_custom_metatags'].custom_widget = SmallTextAreaWidget
122    form_fields['metatags_order'].custom_widget = SmallTextAreaWidget
123    form_fields['types_seo_enabled'].custom_widget = MultiCheckBoxThreeColumnWidget
124    form_fields['types_seo_enabled'].custom_widget.cssClass='label'
125
126    label = _("Search Engine Optimizer configuration")
127    description = _("seo_configlet_description", default="You can select what "
128                    "content types are qSEOptimizer-enabled, and control if "
129                    "Dublin Core metatags are exposed in the header of content "
130                    "pages.")
131    form_name = _("")
Note: See TracBrowser for help on using the repository browser.