class AddForm(base.AddForm): form_fields = form.Fields(ITunesListingPortlet) label = _(u"Add Tunes listing Portlet") description = _(u"This portlet gather the tunes in the current folder.") def create(self, data): return Assignment(count=data.get('count', 20))
class IAddTune(form.Schema): tuneType = schema.Set(title=_(u"Tune Type"), value_type=schema.Choice(values=[_(u'Reel'), _(u'Jig'), _(u'Hornpipe')] ), ) name = schema.TextLine(title=_(u"Your full name"))
class ABCMusicSettingsForm(controlpanel.RegistryEditForm): schema = IABCMusicSettingsForm label = _(u"ABC Music Settings") description = _(u"ABCMusicSettingsDescription") def updateFields(self): super(ABCMusicSettingsForm, self).updateFields() def updateWidgets(self): super(ABCMusicSettingsForm, self).updateWidgets()
class AddTune(add.DefaultAddForm): grok.name('add-tune') grok.require('zope2.View') grok.context(ISiteRoot) # change the schema below for a different addForm schema = IABCTune ignoreContext = True label = _(u"Add a new tune") description = _(u"Form used to add a new tune") def update(self): # disable Plone's editable border self.request.set('disable_border', True) # call the base class version - this is very important! super(add.DefaultAddForm, self).update() @button.buttonAndHandler(_(u'Create the tune')) def handleApply(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return # Redirect back to the front page with a status message IStatusMessage(self.request).addStatusMessage(_(u"Thank you"), "info" ) contextURL = self.context.absolute_url() self.request.response.redirect(contextURL) @button.buttonAndHandler(_(u"Cancel the tune")) def handleCancel(self, action): """User cancelled. Redirect back to the front page. """ contextURL = self.context.absolute_url() self.request.response.redirect(contextURL)
def handleApply(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return # Redirect back to the front page with a status message IStatusMessage(self.request).addStatusMessage(_(u"Thank you"), "info" ) contextURL = self.context.absolute_url() self.request.response.redirect(contextURL)
def javascript(self): auth = self.abcAutorized() authjs = u'true' if not auth: authjs = u'false' js = u"""<script type="text/javascript">\n""" js += u'tuneModified = ' + _(u"'The tune was modified... continue ?'") js += u';\n' js += u'var uuid = "' + api.content.get_uuid(self.context) + '";\n' js += u'var auth = ' + authjs + ';\n' js += u'</script>' # import pdb;pdb.set_trace() return js
class IABCMusicSettingsForm(form.Schema): templates = schema.Text( title=_(u"templates"), description=_(templates_desc), required=False, ) public_tunes = schema.TextLine( title=_(u"Path to the public tune base"), description=_(public_tunes_desc), required=False, ) group_quotas = schema.Text( title=_(u"quota for group members (max items)"), description=_(group_quotas_desc), required=False, )
def title(self): return _(u"Tunes listing")
class importAbc(form.SchemaForm): grok.name('importABC') grok.require('zope2.View') grok.context(ISiteRoot) schema = IImportABC ignoreContext = True label = _(u"import abc file") description = _(u"This will create abctune(s)") def getTuneId(self, tune): """returns an Id from the title tune""" context = self.context normalizer = getUtility(INormalizer) for tuneLine in tune: if tuneLine[:2] == 'T:': title = tuneLine.split(':')[1] tuneId = normalizer.normalize(title, locale='fr') # logger.info("getTuneId:" + tuneLine + ':' + tuneId) idOrigine = tuneId i = 1 while tuneId in context.keys(): tuneId = idOrigine + '-' + str(i).zfill(3) i += 1 return tuneId return 'collective.abcmusic.NoId' def getTuneTitle(self, tune): """returns a title from the title tune""" for tuneLine in tune: if tuneLine[:2] == 'T:': title = tuneLine.split(':')[1] return title return 'collective.abcmusic.NoTitle' def getSubject(self, tune): subjects = [] for line in tune: if line[:12] == '%ABCKeyWord:': subject = line.split(':')[1] subjects.append(subject) return subjects def cleanup(self, tune): returned = [] for line in tune: if line[:12] != '%ABCKeyWord:': returned.append(line) return returned def createTune(self, newtune=None, tuneId=None, tuneTitle=None, tuneSubject=None): self.context.invokeFactory(type_name='abctune', id=tuneId, abc=newtune, title=tuneTitle, subject=tuneSubject) return def processABC(self, data): # tunes = data.split('\n') data = removeNonAscii(data) rawtunes = data.split('X:') for rawtune in rawtunes: tune = rawtune.split('\n')[1:] tune.insert(0, 'X:1') newtune = ('\n').join(self.cleanup(tune)) tuneId = self.getTuneId(tune) tuneTitle = self.getTuneTitle(tune) tuneSubject = self.getSubject(tune) if tuneId != 'collective.abcmusic.NoId': self.createTune(newtune=newtune, tuneId=tuneId, tuneTitle=tuneTitle, tuneSubject=tuneSubject) @button.buttonAndHandler(u'Ok') def handleApply(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return tunes = data["abc_file"].data self.processABC(tunes) self.status = "Thank you very much!" self.request.response.redirect(self.context.absolute_url()) @button.buttonAndHandler(u"Cancel") def handleCancel(self, action): """User cancelled. Redirect back to the front page.
# -*- coding: utf-8 -*- import logging from zope.publisher.browser import BrowserView from AccessControl import getSecurityManager from Products.CMFCore import permissions from collective.abcmusic import _ logger = logging.getLogger('collective.abcmusic') title = _(u'abc_collection_view') class abcCollectionView(BrowserView): def itemEditable(self, item): perms = permissions.ModifyPortalContent editable = getSecurityManager().checkPermission(perms, item.getObject() ) return editable
class EditForm(base.EditForm): form_fields = form.Fields(ITunesListingPortlet) label = _(u"Edit Tunes listing Portlet") description = _(u"This portlet gather the tunes in the current folder.")
import logging from five import grok from plone.directives import form from z3c.form import button from Products.CMFCore.interfaces import ISiteRoot from plone.namedfile.field import NamedFile from zope.component import getUtility from plone.i18n.normalizer.interfaces import INormalizer from collective.abcmusic.utils import removeNonAscii from collective.abcmusic import _ logger = logging.getLogger('collective.abcmusic') msg = _(u"import a file containing one or more abc tunes") class IImportABC(form.Schema): abc_file = NamedFile(title=msg) class importAbc(form.SchemaForm): grok.name('importABC') grok.require('zope2.View') grok.context(ISiteRoot) schema = IImportABC ignoreContext = True label = _(u"import abc file")
class ITunesListingPortlet(IPortletDataProvider): count = schema.Int(title=_(u'size of the box'), description=_(u'Maximum size of the box.'), required=True, default=20)
# -*- coding: utf-8 -*- import logging from zope.publisher.browser import BrowserView from AccessControl import getSecurityManager from Products.CMFCore import permissions from collective.abcmusic import _ logger = logging.getLogger('collective.abcmusic') title = _(u'abc_collection_view') class abcCollectionView(BrowserView): def itemEditable(self, item): perms = permissions.ModifyPortalContent editable = getSecurityManager().checkPermission( perms, item.getObject()) return editable
class IABCTune(form.Schema): dexteritytextindexer.searchable('abc') form.primary('abc') abc = schema.Text(title=_(u"Tune abc"), description=_(u'The tune in abc format'),) dexteritytextindexer.searchable('tunekeys') form.omitted('tunekeys') tunekeys = schema.List(title=u'keys', description=u'set by abc content', required=False, value_type=schema.TextLine(required=False), ) dexteritytextindexer.searchable('tunetype') form.omitted('tunetype') tunetype = schema.TextLine(title=_(u"The type of the tune"), description=_(u"from the field R:"), required=False, ) # NOTE: as specified in the v2.1 standard, A: field is deprecated # so, only O: is used to specified country and areas... separated # by ';' dexteritytextindexer.searchable('tunearea') form.omitted('tunearea') tunearea = schema.TextLine(title=tunearea_title, description=tunearea_desc, required=False, ) dexteritytextindexer.searchable('tunecountry') form.omitted('tunecountry') tunecountry = schema.TextLine(title=tunecountry_title, description=_(u"The country"), required=False, ) form.omitted('score') score = NamedBlobImage(title=_(u"Score"), description=score_desc, required=False,) form.omitted('pdfscore') pdfscore = NamedBlobFile(title=_(u"PDF Score"), description=_(u'The score of the tune as PDF'), required=False, ) form.omitted('midi') midi = NamedBlobFile(title=_(u"Midi"), description=_(u'Midi sound of the tune'), required=False, ) form.omitted('sound') sound = NamedBlobFile(title=_(u"sound"), description=_(u'The mp3 sound of the tune'), required=False, )
from collective.abcmusic.abctuneset import updateTuneSet # END for events handlers # import subprocess as sp # import tempfile as tf # from StringIO import StringIO # from os import unlink # from collective.abcmusic.mp3 import _make_mp3 from collective.abcmusic.score import _make_score from collective.abcmusic.midi import _make_midi from collective.abcmusic.utils import removeNonAscii from collective.abcmusic import _ logger = logging.getLogger('collective.abcmusic') tunearea_title = _(u"The area from which the tune is from") tunearea_desc = _(u"More detailed origin of the tune, from O: field") tunecountry_title = u"The origin country of the tune, " tunecountry_title += u"from first part of O: field" tunecountry_title = _(tunecountry_title) score_desc = _(u'The score of the tune as png image') class IABCTune(form.Schema): dexteritytextindexer.searchable('abc') form.primary('abc') abc = schema.Text(title=_(u"Tune abc"), description=_(u'The tune in abc format'),) dexteritytextindexer.searchable('tunekeys')
class FinderSelectTuneWidget(FinderSelectWidget): finderlabel = _(u'Browse for files') types = ['abctune'] allowupload = 0 allowaddfolder = 0
class IABCTuneSet(form.Schema): form.omitted('combinedTitle') """this combinedTitle depends of the tunes titles """ combinedTitle = schema.TextLine( title=_(u"combined set title"), description=_(u"."), ) form.omitted('abc') abc = schema.Text( title=_(u"Tune Set abc"), description=_(u'The tunes set in abc format'), ) form.omitted('score') """The score of the tunes set as png image """ score = NamedBlobImage( title=_(u"Score"), description=_(u'.'), required=False, ) form.omitted('pdfscore') """The score of the tunes set as PDF """ pdfscore = NamedBlobFile( title=_(u"PDF Score"), description=_(u'.'), required=False, ) form.omitted('midi') """Midi sound of the tunes set """ midi = NamedBlobFile( title=_(u"Midi"), description=_(u'.'), required=False, ) form.omitted('sound') """The mp3 sound of the tunes set """ sound = NamedBlobFile( title=_(u"sound"), description=_(u'.'), required=False, )