class FocusGroup(grok.GlobalUtility): grok.name('wcc.programmeplanner.focus_group') grok.implements(IVocabularyFactory) _terms = [{ 'value': 'inter-religious', 'title': _('Inter-religious'), }, { 'value': 'gender', 'title': _('Gender'), }, { 'value': 'indigenous-people', 'title': _('Indigenous People'), }, { 'value': 'youth', 'title': _('Youth'), }, { 'value': 'edan', 'title': _('EDAN'), }] def __call__(self, context): terms = [] for i in self._terms: terms.append(SimpleTerm(**i)) return SimpleVocabulary(terms)
class AddForm(base.AddForm): form_fields = form.Fields(IUpcomingProgrammes) form_fields['target_programmeplanner'].custom_widget = UberSelectionWidget label = _(u"Add Upcoming Programmes") description = _(u"") def create(self, data): return Assignment(**data)
class IProgrammeHighlight(IPortletDataProvider): """ Define your portlet schema here """ target_programmeplanner = schema.Choice( title=_(u"Target programmeplanner"), description=_( u"Find the programmeplanner which provides the items to list"), required=True, source=SearchableTextSourceBinder( {'portal_type': ('wcc.programmeplanner.programmeplanner', )}, default_query='path:'))
class IProgrammePlanner(form.Schema, IImageScaleTraversable): """ """ startDate = schema.Datetime( title=_(u"Start Date"), description=u'', required=True, ) endDate = schema.Datetime( title=_(u"End Date"), description=u'', required=True, )
class EventType(grok.GlobalUtility): grok.name('wcc.programmeplanner.event_type') grok.implements(IVocabularyFactory) _terms = [{ 'value': 'madang-workshop', 'title': _('Madang workshop'), },{ 'value': 'madang-performance', 'title': _('Madang performance'), },{ 'value': 'bible-study', 'title': _('Bible Study'), },{ 'value': 'ecumenical-conversation', 'title': _('Ecumenical Conversation'), },{ 'value': 'prayer', 'title': _('Prayer') },{ 'value': 'plenary', 'title': _('Plenary') },{ 'value': 'other', 'title': _('Other') }] def __call__(self, context): terms = [] for i in self._terms: terms.append(SimpleTerm(**i)) return SimpleVocabulary(terms)
class IProgrammeFocusPortlet(IPortletDataProvider): """ Define your portlet schema here """ header = schema.TextLine( title=_(u'Heading'), default=u'Related activities in the assembly programme' ) target_programmeplanner = schema.Choice( title=_(u"Target programmeplanner"), description=_(u"Find the programmeplanner which provides the items to list"), required=True, source=SearchableTextSourceBinder( {'portal_type': ('wcc.programmeplanner.programmeplanner',)}, default_query='path:')) focus_group = schema.Choice( title=_(u"Focus group"), required=True, vocabulary="wcc.programmeplanner.focus_group" )
class IProgramme(form.Schema, IImageScaleTraversable, IFeatureImageViewletDisabled): """ """ languageindependent('code') code = schema.TextLine(title=_(u'Code'), required=False) languageindependent('date') date = schema.Date(title=_(u'Date')) languageindependent('startTime') startTime = schema.Choice( title=_(u'Start Time'), vocabulary='wcc.programmeplanner.programme_times') languageindependent('endTime') endTime = schema.Choice(title=_(u'End Time'), vocabulary='wcc.programmeplanner.programme_times') languageindependent('event_type') event_type = schema.Choice(title=_(u'Event Type'), vocabulary='wcc.programmeplanner.event_type') languageindependent('focus_group') focus_group = schema.List( title=_(u'Focus Group'), value_type=schema.Choice( vocabulary='wcc.programmeplanner.focus_group')) dexteritytextindexer.searchable('text') form.widget(text="plone.app.z3cform.wysiwyg.WysiwygFieldWidget") text = schema.Text( title=_(u"Body Text"), description=u'', required=False, )
def title(self): return _('Programme Focus : %s' % self.focus_group)
class EditForm(base.EditForm): form_fields = form.Fields(IUpcomingProgrammes) form_fields['target_programmeplanner'].custom_widget = UberSelectionWidget label = _(u"Edit Upcoming Programmes") description = _(u"")
class UploadForm(form.SchemaForm): name = _("Import Programmes from CSV") schema = IUploadFormSchema ignoreContext = True grok.layer(IProductSpecific) grok.context(IProgrammePlanner) grok.name('import_programmes') grok.require('cmf.AddPortalContent') @z3c.form.button.buttonAndHandler(_("Import"), name='import') def import_content(self, action): formdata, errors = self.extractData() if errors: self.status = self.formErrorsMessage return f = formdata['import_file'].data.decode('utf-8') for l in unicode_csv_reader(StringIO(f)): if l[0].lower().strip() == 'title': continue if len(l) > 8: code = l[8] else: code = '' self.create(title=l[0].strip(), description=l[1].strip(), text=l[2].strip(), startTime=l[3].strip(), endTime=l[4].strip(), date=parse_date(l[5]).date(), event_type=l[6], focus_group=l[7], code=code) def create(self, **params): dest = self.context match = re.match(r'.*\((.*?)\)$', params['title'].strip().replace('\n', ' ')) if match: code = match.groups()[0].upper().strip() else: if params['code'].strip().upper(): code = params['code'].strip().upper() else: code = None item = createContentInContainer(dest, 'wcc.programmeplanner.programme', title=params['title']) item.code = code item.setTitle(params['title']) item.setDescription(params['description']) item.text = params['text'].replace('\n', '<br/>') item.startTime = params['startTime'] item.endTime = params['endTime'] item.date = params['date'] item.event_type = self.parse_event_type(params['event_type']) item.focus_group = self.parse_focus_group(params['focus_group']) item.reindexObject() def parse_event_type(self, event_type_title): mapping = { 'ecumenical conversation': 'ecumenical-conversation', 'madang workshop': 'madang-workshop', 'madang performance': 'madang-performance', 'bible study': 'bible-study', 'prayer': 'prayer', 'plenary': 'plenary', 'other': 'other' } if not event_type_title.lower().strip(): return None val = mapping[event_type_title.lower().strip()] return val def parse_focus_group(self, focus_groups): mapping = { 'inter-religious': 'inter-religious', 'gender': 'gender', 'indigenous people': 'indigenous-people', 'indigenous peoples': 'indigenous-people', 'edan': 'edan', 'youth': 'youth' } items = [i.strip() for i in focus_groups.split(',')] result = [] for i in items: if not i.lower().strip(): continue val = mapping[i.lower().strip()] result.append(val) return result
class IUploadFormSchema(form.Schema): import_file = NamedFile(title=_('Upload CSV'))
def title(self): return _('Programme Highlight')
class EditForm(base.EditForm): form_fields = form.Fields(IProgrammeHighlight) form_fields['target_programmeplanner'].custom_widget = UberSelectionWidget label = _(u"Edit Programme Highlight") description = _(u"")
from collective.grok import gs from wcc.programmeplanner import MessageFactory as _ @gs.importstep( name=u'wcc.programmeplanner', title=_('wcc.programmeplanner import handler'), description=_('')) def setupVarious(context): if context.readDataFile('wcc.programmeplanner.marker.txt') is None: return portal = context.getSite() portal.portal_catalog.reindexIndex('event_type', portal.REQUEST) portal.portal_catalog.reindexIndex('focus_group', portal.REQUEST) # do anything here