Пример #1
0
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))
Пример #2
0
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"))
Пример #3
0
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()
Пример #4
0
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)
Пример #5
0
    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)
Пример #6
0
    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
Пример #7
0
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,
    )
Пример #8
0
 def title(self):
     return _(u"Tunes listing")
Пример #9
0
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
Пример #11
0
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.")
Пример #12
0
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")
 def title(self):
     return _(u"Tunes listing")
Пример #14
0
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
Пример #16
0
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,
                          )
Пример #17
0
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')
Пример #18
0
class FinderSelectTuneWidget(FinderSelectWidget):
    finderlabel = _(u'Browse for files')
    types = ['abctune']
    allowupload = 0
    allowaddfolder = 0
Пример #19
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,
    )