Пример #1
0
    def setUpZope(self, app, configurationContext):

        # Patch effectiveDate, so our FtwCalendarwidget is used
        from ftw.calendarwidget.browser.widgets import FtwCalendarWidget
        from Products.ATContentTypes.content.base import registerATCT
        from Products.ATContentTypes.content.document import ATDocument
        from Products.ATContentTypes.content.document import PROJECTNAME

        ATDocument.schema['effectiveDate'].widget = FtwCalendarWidget(
                label='MyDate'
            )

        registerATCT(ATDocument, PROJECTNAME)

        # Load ZCML

        xmlconfig.file('configure.zcml',
            ftw.calendarwidget,
            context=configurationContext)
        xmlconfig.file('configure.zcml',
            collective.js.jqueryui,
            context=configurationContext)

        # installProduct() is *only* necessary for packages outside
        # the Products.* namespace which are also declared as Zope 2 products,
        # using <five:registerPackage /> in ZCML.
        z2.installProduct(app, 'ftw.calendarwidget')
        z2.installProduct(app, 'collective.js.jqueryui')
Пример #2
0
def registerATCTLogged(klass):
    klassName = str(klass)
    for c in ["<class 'Products.%s." % config.PROJECTNAME, "'>"]:
        klassName = klassName.replace(c, '')
    try:
        registerATCT(klass, config.PROJECTNAME)
        log('Done: registerATCT(%s)' %klassName)
    except Exception, e:
        log('Failed: registerATCT(%s): %s' %(klassName, str(e)))
        raise e
Пример #3
0
def registerATCTLogged(klass):
    klassName = str(klass)
    for c in ["<class 'Products.%s." % PROJECTNAME, "'>"]:
        klassName = klassName.replace(c, "")
    try:
        registerATCT(klass, PROJECTNAME)
        log("Worked: registerType(%s)\n" % klassName)
    except Exception, e:
        log("Failed: registerType(%s): %s\n" % (klassName, str(e)))
        raise e
Пример #4
0
def registerATCTLogged(klass):
    klassName = str(klass)
    for c in ["<class 'Products.%s." % config.PROJECTNAME, "'>"]:
        klassName = klassName.replace(c, '')
    try:
        registerATCT(klass, config.PROJECTNAME)
        log('Done: registerATCT(%s)' %klassName)
    except Exception, e:
        log('Failed: registerATCT(%s): %s' %(klassName, str(e)))
        raise e
Пример #5
0
def registerATCTLogged(klass):
    klassName = str(klass)
    for c in ["<class 'Products.%s." % PROJECTNAME, "'>"]:
        klassName = klassName.replace(c, '')
    try:
        registerATCT(klass, PROJECTNAME)
        log('Worked: registerType(%s)\n' % klassName)
    except Exception, e:
        log('Failed: registerType(%s): %s\n' % (klassName, str(e)))
        raise e
Пример #6
0
    def test_checkinObjectLinkedInParentsRichTextField(self):
        """Checnking-in an object that is linked in it's
        parent's rich text field. See: https://dev.plone.org/ticket/13462
        """
        # register a folderish content type with a rich text field
        from plone.app.folder.folder import ATFolder, ATFolderSchema
        from Products.ATContentTypes.content.base import registerATCT
        from Products.Archetypes import atapi

        rich_text_folder_type = type('RichFolder', (ATFolder,), {})
        rich_text_folder_type.schema = ATFolderSchema.copy() + atapi.Schema((
            atapi.TextField('text',
                default_output_type = 'text/x-html-safe',
                widget = atapi.RichWidget(),
                ),
            ),
        )
        registerATCT(rich_text_folder_type, 'plone.app.iterate')

        # create a folderish object with a rich text field
        self.portal.invokeFactory('Folder', 'rich_text_folder')
        rich_text_folder = self.portal.rich_text_folder

        # create the subobject
        rich_text_folder.invokeFactory('Document', 'subobject')
        subobject = rich_text_folder.subobject
        subobject_uid = subobject.UID()
        
        # link (by uid) the subobject in it's parent's rich text field
        link_html = '<a class="internal-link" href="resolveuid/%s">Link to subobject</a>'
        rich_text_folder.setText(link_html % subobject_uid)

        # try to checkout and checkin the subobject
        wc = ICheckinCheckoutPolicy(subobject).checkout(rich_text_folder)
        ICheckinCheckoutPolicy(wc).checkin("updated")

        # everything went right and the working copy is checked in
        self.assertEqual(subobject_uid, wc.UID())
Пример #7
0
        # find the right question
        # TODO: this assumes that no questions exist with a duplicate id
        if required_question in parent.objectIds():
            question = parent[required_question]
        else:
            pages = parent.getFolderContents(contentFilter={'portal_type':'SubSurvey',}, full_objects=True)
            for page in pages:
                if required_question in page.objectIds():
                    question = page[required_question]
                    break
        # TODO: this assumes the question actually exists
        required_answer = self.getRequiredAnswer()
        required_positive = self.getRequiredAnswerYesNo()
        answer = question.getAnswerFor(userid)
        if hasattr(answer, 'lower'):
            if required_positive and answer == required_answer:
                return True
            elif answer != required_answer and not required_positive:
                return True
            return False
        elif hasattr(answer, 'append'): # it's a list
            if required_positive and required_answer in answer :
                return True
            elif required_answer not in answer and not required_positive:
                return True
            return False
        else: # question not answered, so don't display
            return False

registerATCT(SubSurvey, PROJECTNAME)
Пример #8
0
        if 'title' not in kwargs:
            kwargs['title'] = self.getImageCaption()
        return self.getField('image').tag(self, **kwargs)

    security.declarePrivate('cmf_edit')
    def cmf_edit(self, text, description=None, text_format=None, **kwargs):
        if description is not None:
            self.setDescription(description)
        self.setText(text, mimetype=translateMimetypeAlias(text_format))
        self.update(**kwargs)

    def __bobo_traverse__(self, REQUEST, name):
        """Transparent access to image scales
        """
        if name.startswith('image'):
            field = self.getField('image')
            image = None
            if name == 'image':
                image = field.getScale(self)
            else:
                scalename = name[len('image_'):]
                if scalename in field.getAvailableSizes(self):
                    image = field.getScale(self, scale=scalename)
            if image is not None and not isinstance(image, basestring):
                # image might be None or '' for empty images
                return image

        return ATDocumentBase.__bobo_traverse__(self, REQUEST, name)

registerATCT(ATNewsItem, PROJECTNAME)
Пример #9
0
                ('dt',
                    self.translate( msgid='vocabulary_postingdt_text',
                    domain='ploneformgen',
                    default='Posting Date/Time')
                    ),
                ('HTTP_X_FORWARDED_FOR','HTTP_X_FORWARDED_FOR',),
                ('REMOTE_ADDR','REMOTE_ADDR',),
                ('HTTP_USER_AGENT','HTTP_USER_AGENT',),
                ) )


    def vocabFormatDL(self):
        """ returns vocabulary for format """

        return DisplayList( (
                ('tsv',
                    self.translate( msgid='vocabulary_tsv_text',
                    domain='ploneformgen',
                    default='Tab-Separated Values')
                    ),
                ('csv',
                    self.translate( msgid='vocabulary_csv_text',
                    domain='ploneformgen',
                    default='Comma-Separated Values')
                    ),
            ) )



registerATCT(FormSaveDataAdapter, PROJECTNAME)
Пример #10
0
        super(BaseFormField, self).__init__(oid, **kwargs)

        # set a preconfigured field as an instance attribute
        self.fgField = MyLocationField('fg_location_field',
            languageIndependent = 1,
            default_method="getDefaultLocation",
            required=True,
            write_permission = View,
            validators=('isGeoLocation',),
            tmp_value = None,
            widget=LocationWidget(
               label='Location',
            ),
        )

    def fgPrimeDefaults(self, request, contextObject=None):
        """ primes request with default value"""

        BaseFormField.fgPrimeDefaults(self, request, contextObject)

        form_val = request.get(self.fgField.__name__, None)
        if form_val:
            self.fgField.tmp_value = form_val
        else:
            config = getMultiAdapter((self, request), name="maps_configuration")
            self.fgField.tmp_value = config.default_location
            request.form.setdefault(self.fgField.__name__, self.fgField.tmp_value)

registerATCT(FGLocationField, PROJECTNAME)
Пример #11
0
            'form',
            'form_submit',
            'fieldset',
            'last_referer',
            'add_reference',
        )

        if value in badIds:
            raise BadRequest, 'The id "%s" is reserved.' % value

        ATFolder.setId(self, value)
        self.fsStartField.__name__ = self.getId()

    def manage_afterAdd(self, item, container):
        # XXX TODO: when we're done with 2.1.x, implement this via event subscription

        ATFolder.manage_afterAdd(self, item, container)

        id = self.getId()
        if self.fsStartField.__name__ != id:
            self.fsStartField.__name__ = id

    # security is inherited
    def checkIdAvailable(self, id):
        """ Checks for good id by asking form folder """

        return self.formFolderObject().checkIdAvailable(id)


registerATCT(FieldsetFolder, PROJECTNAME)
                ))


    def vocabFormatDL(self):
        # """ returns vocabulary for format """
        formats = [
            ('tsv',
                self.translate(msgid='vocabulary_tsv_text',
                domain='ploneformgen',
                default='Tab-Separated Values')
                ),
            ('csv',
                self.translate(msgid='vocabulary_csv_text',
                domain='ploneformgen',
                default='Comma-Separated Values')
                ),
        ]
        if has_xls:
            formats.append(
                ('xls',
                    self.translate(msgid='vocabulary_xls_doc',
                    domain='ploneformgen',
                    default='Excel document')
                    ),
            )
        return DisplayList(formats)



registerATCT(FormSaveDataAdapter, PROJECTNAME)
Пример #13
0
def register():
    """ Register custom content-types
    """
    registerATCT(Fiche, PROJECTNAME)
        aggregate_answers = self.getAggregateAnswers()
        for k, v in aggregate_answers.items():
            if v > max:
                max = v
        pct_aggregate_answers = {}
        for k, v in aggregate_answers.items():
            if v == 0:
                value = 0
            else:
                value = v / float(max)
            pct_aggregate_answers[k] = int(value * 100)
        return pct_aggregate_answers

    @security.protected(View)
    def getPercentages(self):
        """Return a mapping of percentages for each answer"""
        total = 0
        aggregate_answers = self.getAggregateAnswers()
        for k, v in aggregate_answers.items():
            total = v + total
        pct_answers = {}
        for k, v in aggregate_answers.items():
            if v == 0:
                value = 0
            else:
                value = v / float(total)
            pct_answers[k] = int(value * 100)
        return pct_answers

registerATCT(SurveyMatrixQuestion, PROJECTNAME)
Пример #15
0
                raise NotImplementedError('FileField Not Yet Done')
            value = REQUEST.form.get(field_name, '')
            if iid:
                if data.attrs.get(field_name, None) == value:
                    continue
                modified_fields.append(field_name)
            data.attrs[field_name] = value
        sm = getSecurityManager()
        if iid:
            if modified_fields:
                data.attrs['_auto_last_modified'] = now
                log = {}
                log['user'] = sm.getUser().getId()
                log['date'] = now
                log['fields'] = modified_fields
                if '_auto_log' not in data.attrs:
                    data.attrs['_auto_log'] = PersistentList()
                data.attrs['_auto_log'].append(log)
            self.REQUEST.response.expireCookie('PFGSOUP_POST', path='/')
            # XXX redirect to table
            # self.REQUEST.response.redirect(...)
            return
        data.attrs['_auto_created'] = now
        data.attrs['_auto_last_modified'] = now
        data.attrs['_auto_userid'] = sm.getUser().getId()
        data.attrs['_auto_log'] = PersistentList()
        soup.add(data)


registerATCT(SoupAdapter, PROJECTNAME)
Пример #16
0
                    #item.setInfos_element(dico)
                    item.setInfosElement(dico)

    def majCatalogueBU(self, recordid):
        portal_primo = getToolByName(self, "portal_primo")
        resultat = portal_primo.rechercherRecordById(recordid)
        dico = {
            "Title": resultat["title"],
            "TypeRessourceExterne": "Catalogue BU",
            "SousTitre": "",
            "Description": "",
            "Auteurs": (resultat["creator"]),
            "Volume": resultat["format"],
            "Lieu": "Lieu",
            "Editeur": resultat["publisher"],
            "Annee": 0,
            "Pagination": "Pagination",
            "Collection": resultat["creationdate"],
            "Isbn": recordid,
            "Urlbiblio": "Urlbiblio",
            "Lecteur": ""
        }
        try:
            dico["Lecteur"] = "\n".join(resultat["image"])
        except:
            pass
        self.setProperties(dico)


registerATCT(JalonRessourceExterne, PROJECTNAME)
Пример #17
0
        # Hook into mxTidy and replace the value with the tidied value.
        field = self.getField('text')

        # When an object is initialized the first time we have to
        # set the filename and mimetype.
        if not value and not field.getRaw(self):
            if 'mimetype' in kwargs and kwargs['mimetype']:
                field.setContentType(self, kwargs['mimetype'])
            if 'filename' in kwargs and kwargs['filename']:
                field.setFilename(self, kwargs['filename'])

        # hook for mxTidy / isTidyHtmlWithCleanup validator
        tidyOutput = self.getTidyOutput(field)
        if tidyOutput:
            value = tidyOutput

        field.set(self, value, **kwargs)  # set is ok

    security.declarePrivate('getTidyOutput')

    def getTidyOutput(self, field):
        # Get the tidied output for a specific field from the request
        # if available.
        request = getattr(self, 'REQUEST', None)
        if request is not None and isinstance(request, HTTPRequest):
            tidyAttribute = '%s_tidier_data' % field.getName()
            return request.get(tidyAttribute, None)


registerATCT(ATTopic, PROJECTNAME)
Пример #18
0
        for k, v in aggregate_answers.items():
            if v > max:
                max = v
        pct_aggregate_answers = {}
        for k, v in aggregate_answers.items():
            if v == 0:
                value = 0
            else:
                value = v / float(max)
            pct_aggregate_answers[k] = int(value * 100)
        return pct_aggregate_answers

    @security.protected(View)
    def getPercentages(self):
        """Return a mapping of percentages for each answer"""
        total = 0
        aggregate_answers = self.getAggregateAnswers()
        for k, v in aggregate_answers.items():
            total = v + total
        pct_answers = {}
        for k, v in aggregate_answers.items():
            if v == 0:
                value = 0
            else:
                value = v / float(total)
            pct_answers[k] = int(value * 100)
        return pct_answers


registerATCT(SurveySelectQuestion, PROJECTNAME)
Пример #19
0
    schema = JalonTermeGlossaireSchema
    schema['description'].required = True
    schema['description'].widget.label = "Définition"
    schema['text'].required = False
    schema['text'].mode = "r"

    def ajouterTag(self, tag):
        return jalon_utils.setTag(self, tag)

    def getAttributsType(self):
        return ["title", "description"]

    def getAttributsTypeMod(self):
        return {"title": "Title", "description": "Description"}

    def setProperties(self, dico):
        for key in dico.keys():
            self.__getattribute__("set%s" % key)(dico[key])
        self.reindexObject()
        items = self.getRelatedItems()
        #modification dans le cours
        for item in items:
            if item.portal_type in ["JalonCours"]:
                #modification du titre dans le cours
                element_cours = copy.deepcopy(item.getElementCours())
                if self.getId() in element_cours:
                    element_cours[self.getId()]["titreElement"] = self.Title()
                    item.setElementsCours(element_cours)

registerATCT(JalonTermeGlossaire, PROJECTNAME)
#Dheeraj Sagar, Malad(W)
#Mumbai-400064, India
###############################################################################
from Products.Archetypes.atapi import *

from Products.ATContentTypes.content.folder \
     import ATFolder as BaseClass
from Products.ATContentTypes.content.folder \
     import ATFolderSchema as DefaultSchema

from Products.ATContentTypes.content.base import registerATCT

from ubify.coretypes.config import PROJECTNAME

schema = DefaultSchema.copy()


class GenericContainer(BaseClass):

    __doc__ = BaseClass.__doc__ + "(customizable version)"
    #    portal_type = BaseClass.portal_type
    #    archetype_name = BaseClass.archetype_name

    schema = schema
    _at_rename_after_creation = True
    # enable FTP/WebDAV and friends
    PUT = BaseClass.PUT


registerATCT(GenericContainer, PROJECTNAME)
Пример #21
0
            name='fg_selection_field',
            searchable=0,
            required=0,
            widget=SelectionStringWidget(),
            vocabulary='_get_selection_vocab',
            enforceVocabulary=1,
            write_permission=View)

    def htmlValue(self, REQUEST):
        """ Return value instead of key """
        utils = getToolByName(self, 'plone_utils')
        charset = utils.getSiteEncoding()
        value = REQUEST.form.get(self.__name__, '')
        vu = value.decode(charset)
        vocabulary = self.fgField.Vocabulary(self)
        item = dict(vocabulary).get(vu)
        if self.fgFormat == 'radio' or (self.fgFormat == 'flex' and len(vocabulary) <= 4):
            name = '{}_{}'.format(self.__name__, vu)
        else:
            name = '{}_SELECT'.format(self.__name__)
        desc = REQUEST.form.get(name, None)
        if item is None:
            return vu
        elif desc is None:
            return safe_unicode(cgi.escape(item[0].encode(charset)))
        else:
            return '{}<br />{}'.format(safe_unicode(cgi.escape(item[0].encode(charset))), safe_unicode(cgi.escape(desc.decode(charset))))


registerATCT(PFGSelectionStringField, PROJECTNAME)
Пример #22
0
            answertoolong = self.translate(
                default='Answer too long, must have less characters than: ',
                msgid='answer-too-long',
                domain='plonesurvey')

            state.setError(self.getId(),
                           answertoolong + str(self.getMaxLength()))
        else:
            self.addAnswer(value)

    security.declareProtected(permissions.View, 'getValidators')

    def getValidators(self):
        """Return a list of validators"""
        validator_list = [
            'None',
        ]
        validator_list.extend(TEXT_VALIDATORS)
        return validator_list

    security.declareProtected(permissions.View, 'validateQuestion')

    def validateQuestion(self, value):
        """Return a list of validators"""
        validator = self.getValidation()
        v = validation.validatorFor(validator)
        return v(value)


registerATCT(SurveyTextQuestion, PROJECTNAME)
Пример #23
0
            'variable', 'variableLabel', 'fixedPrice', 'stripePublishableKey',
            'stripePanelLabel', 'stripeLabel', 'stripeCurrency'
    ]:
        upper = fieldName[0].upper() + fieldName[1:]
        exec('''
security.declareProtected(View, 'get%(upper)s')
def get%(upper)s(self):
    return getattr(self.fgField, '%(name)s', '')

security.declareProtected(ModifyPortalContent, 'set%(upper)s')
def set%(upper)s(self, value, **kw):
    self.fgField.%(name)s = value
''' % {
            'name': fieldName,
            'upper': upper
        })

    def htmlValue(self, REQUEST):
        value = REQUEST.form.get(self.__name__, 'No Input')
        if type(value) != dict:
            return 'Invalid'
        if 'error' in value:
            return 'Error charging'
        if 'charge_data' not in value:
            return 'Card not charged for some reason'
        return 'Charged to %s for $%s' % (value['charge_data']['email'],
                                          value['original-amount'])


registerATCT(FGStripeField, PROJECTNAME)
Пример #24
0
        # edit accessor uses getToolByName, which ends up in
        # five.localsitemanager looking for a parent using a comparison
        # on this object -> infinite recursion.
        if IATEvent.providedBy(other):
            return cmp((self.start_date, self.duration, self.title),
                       (other.start_date, other.duration, other.title))
        elif isinstance(other, DateTime):
            return cmp(self.start(), other)
        else:
            # TODO come up with a nice cmp for types
            return cmp(self.title, other)

    def __hash__(self):
        return hash((self.start_date, self.duration, self.title))

    security.declareProtected(ModifyPortalContent, 'update')

    def update(self, event=None, **kwargs):
        # Clashes with BaseObject.update, so
        # we handle gracefully
        info = {}
        if event is not None:
            for field in event.Schema().fields():
                info[field.getName()] = event[field.getName()]
        elif kwargs:
            info = kwargs
        ATCTContent.update(self, **info)


registerATCT(ATEvent, PROJECTNAME)
Пример #25
0
    """ a folder suitable for holding a very large number of items """
    implements(IATUnifiedFolder, IATBTreeFolder, IArchivable, IPhotoAlbumAble)

    __implements__ = folder_implements

    schema = ATFolderSchema
    security = ClassSecurityInfo()

    portal_type = 'Folder'
    archetype_name = 'Folder'
    assocMimetypes = ()
    assocFileExt = ()
    cmf_edit_kws = ()

    # Enable marshalling via WebDAV/FTP/ExternalEditor.
    __dav_marshall__ = True

    security.declareProtected(View, 'getNextPreviousParentValue')
    def getNextPreviousParentValue(self):
        """ If the parent node is also an IATFolder and has next/previous
            navigation enabled, then let this folder have it enabled by
            default as well """
        parent = self.getParentNode()
        if IATFolder.providedBy(parent):
            return parent.getNextPreviousEnabled()
        else:
            return False


registerATCT(ATFolder, packageName)
Пример #26
0
#You can also contact Cynapse at:
#802, Building No. 1,
#Dheeraj Sagar, Malad(W)
#Mumbai-400064, India
###############################################################################
from Products.Archetypes.atapi import *

from Products.ATContentTypes.content.newsitem \
     import ATNewsItem as BaseClass
from Products.ATContentTypes.content.newsitem \
     import ATNewsItemSchema as DefaultSchema

from Products.ATContentTypes.content.base import registerATCT

from ubify.coretypes.config import PROJECTNAME

schema = DefaultSchema.copy()


class ATNewsItem(BaseClass):

    __doc__ = BaseClass.__doc__ + "(customizable version)"

    portal_type = BaseClass.portal_type
    archetype_name = BaseClass.archetype_name

    schema = schema


registerATCT(ATNewsItem, PROJECTNAME)
Пример #27
0
        """ set simple validator """

        fgt = getToolByName(self, 'formgen_tool')

        if value and (value != 'vocabulary_none_text'):
            fgtid = fgt.stringValidators[value].get('id')
            if fgtid:
                self.fgField.validators = ('isNotTooLong', fgtid)
        else:
            self.fgField.validators = ('isNotTooLong',)
        self.fgField._validationLayer()

        self.fgStringValidator = value


registerATCT(FGStringField, PROJECTNAME)


class FGPasswordField(FGStringField):
    """ Password entry field (input is masked) """

    schema = BaseFieldSchemaStringDefault.copy() + Schema((
        maxlengthField,
        sizeField,
    ))

    # attributes that are not really useful for Password field.
    del schema['hidden']
    del schema['serverSide']
    del schema['placeholder']
Пример #28
0
        # five.localsitemanager looking for a parent using a comparison
        # on this object -> infinite recursion.
        if IATEvent.providedBy(other):
            return cmp((self.start_date, self.duration, self.title),
                       (other.start_date, other.duration, other.title))
        elif isinstance(other, DateTime):
            return cmp(self.start(), other)
        else:
            # TODO come up with a nice cmp for types
            return cmp(self.title, other)

    def __hash__(self):
        return hash((self.start_date, self.duration, self.title))


registerATCT(ATEvent, packageName)


class StartEndDateValidator(object):
    """Checks whether startDate is before endDate. In case the event is
    openEnded this check is skipped.
    """
    implements(IObjectPostValidation)
    adapts(IATEvent)

    def __init__(self, context):
        self.context = context

    def __call__(self, request):
        rstartDate = request.form.get('startDate', None)
        rendDate = request.form.get('endDate', None)
Пример #29
0
    """ sample ordered btree-based folder (needing the interface) """


@implementer(IATFolder, IOrderedContainer)
class NonBTreeFolder(ATCTOrderedFolder):
    """ an old-style folder much like `ATFolder` before Plone 4;  this is
        a reduced version of `ATContentTypes.content.folder.ATFolder` """

    schema = ATFolderSchema
    portal_type = 'NonBTreeFolder'
    archetype_name = 'NonBTreeFolder'
    security = ClassSecurityInfo()


permissions['NonBTreeFolder'] = PROJECTNAME + ': ATFolder'
registerATCT(NonBTreeFolder, PROJECTNAME)


def addNonBTreeFolder(container, id, **kwargs):
    """ at-constructor copied from ClassGen.py """
    obj = NonBTreeFolder(id)
    notify(ObjectCreatedEvent(obj))
    container._setObject(id, obj)
    obj = container._getOb(id)
    obj.initializeArchetype(**kwargs)
    notify(ObjectModifiedEvent(obj))
    return obj


def _createObjectByType(type_name, container, cid, *args, **kw):
    """Create an object without performing security checks
Пример #30
0
#    portal_type = BaseClass.portal_type
#    archetype_name = BaseClass.archetype_name

    schema = schema
    _at_rename_after_creation = True
    # enable FTP/WebDAV and friends
    PUT = BaseClass.PUT
    
    def manage_afterAdd(self, item, container):
        
        if container.portal_type <> 'TempFolder' and item.portal_type == 'Wiki':
            new_id = wikiid
            new_title = wikititle
            new_desc = wikidescription
            try:
                sattr = getattr(item,new_id)
            except AttributeError:
                sattr = item.invokeFactory(id=new_id,type_name="Document",title=new_title,description=new_desc,text=wikibody)
            
            if type(sattr) == type("str"):
                obj = getattr(item,sattr)
            else:
                obj = sattr
            
            if obj <> None and obj.portal_type == "Document":                                
                if obj.id in item.objectIds():                    
                    item.setDefaultPage(obj.id)

registerATCT(Wiki, PROJECTNAME)

Пример #31
0
    @security.protected(ModifyPortalContent)
    def setRemoteUrl(self, value, **kwargs):
        # Remute url mutator.
        # Use urlparse to sanify the url
        # Also see http://dev.plone.org/plone/ticket/3296
        if value:
            value = urlparse.urlunparse(urlparse.urlparse(value))
        self.getField('remoteUrl').set(self, value, **kwargs)

    @security.protected(View)
    def remote_url(self):
        # CMF compatibility method.
        return self.getRemoteUrl()

    @security.private
    def cmf_edit(self, remote_url=None, **kwargs):
        if not remote_url:
            remote_url = kwargs.get('remote_url', None)
        self.update(remoteUrl=remote_url, **kwargs)

    @security.protected(View)
    def getRemoteUrl(self):
        # Sanitize output.
        value = self.Schema()['remoteUrl'].get(self)
        if not value:
            value = ''  # ensure we have a string
        return quote(value, safe='?$#@/:=+;$,&%')


registerATCT(ATLink, PROJECTNAME)
Пример #32
0
Файл: Material.py Проект: vwc/fv
from Products.CMFPlone import PloneMessageFactory as _
from Products.CMFCore.permissions import View

from Products.validation import V_REQUIRED

from interfaces import IMaterial
from ..config import PROJECTNAME

MaterialSchema = ATCTContent.schema.copy() + Schema((
    FloatField('price',
        required = True,
        searchable = True,
        default = 0.0,
        validators = ('isDecimal',),
        widget = DecimalWidget(
            description = '',
            label = _(u'', default=u'Price'),
            size = 40)
    ),
    ), marshall=RFC822Marshaller()
)

class Material(ATCTContent):
    implements(IMaterial)
    portal_type = "Material"
    archetype_name = ATCTContent.archetype_name
    schema = MaterialSchema


registerATCT(Material, PROJECTNAME)
Пример #33
0
        return self.fgFieldsDisplayList()


    def fieldsDisplayList(self):
        """ returns display list of fields with simple values """

        return self.fgFieldsDisplayList(
            withNone=True,
            noneValue='#NONE#',
            objTypes=(
                'FormSelectionField',
                'FormStringField',
                )
            )


    security.declareProtected(ModifyPortalContent, 'setShowFields')
    def setShowFields(self, value, **kw):
        """ Reorder form input to match field order """
        # This wouldn't be desirable if the PickWidget
        # retained order.

        self.showFields = []
        for field in self.fgFields(excludeServerSide=False):
            id = field.getName()
            if id in value:
                self.showFields.append(id)


registerATCT(FormMailerAdapter, PROJECTNAME)
Пример #34
0
# -*- coding: utf-8 -*-
from plone.app.folder.folder import ATFolder, ATFolderSchema
from Products.ATContentTypes.content.base import registerATCT
from Products.Archetypes import atapi

RichFolderSchema = ATFolderSchema.copy() + atapi.Schema((
    atapi.TextField('text',
                    default_output_type='text/x-html-safe',
                    widget=atapi.RichWidget(),
                    ),
))


class RichFolder(ATFolder):
    """ sample content type for testing purposes """

    schema = RichFolderSchema
    portal_type = 'RichFolder'

registerATCT(RichFolder, 'plone.app.iterate')


def addRichFolder(container, id, **kwargs):
    """ at-constructor copied from ClassGen.py """
    obj = RichFolder(id)
    container._setObject(id, obj, suppress_events=True)
    obj = container._getOb(id)
    obj.manage_afterAdd(obj, container)
    obj.initializeArchetype(**kwargs)
    return obj.getId()
Пример #35
0
    
    def defaultWidth(self):
        return self.getConfig().default_map_size[1]
    
    def defaultHeight(self):
        return self.getConfig().default_map_size[0]
    
    def defaultCatBoxHeight(self):
        mapHeight = int(self.defaultHeight())
        return (mapHeight * 35 / 100) # 35% total map height
    
    def defaultMarkerBoxHeight(self):
        mapHeight = int(self.defaultHeight())
        return (mapHeight * 55 / 100) # 55% total map height
    
    def getMarkersVocabulary(self):
        vocabulary = atapi.DisplayList()
        vocabulary.add('','-')

        for cat in self.getFolderContents(contentFilter={'portal_type':('TTGoogleMapCategory','TTGoogleMapCategoryCT'),'path':{'depth':3, 'query':'/'.join(self.getPhysicalPath()) }}):
            category = cat.getObject()
            markers = category.getMarkers()
            for item in markers:
                marker = item.getObject()
                if not marker.isDisabled():
                    vocabulary.add( str(item.UID), item.pretty_title_or_id())
        
        return vocabulary

base.registerATCT(TTGoogleMap, PROJECTNAME)
            if int(startingYear) > int(endingYear):
                errors['endingYear'] = u'End year can not be before start year.'
        if futureYears:
            try:
                futureYears = int(futureYears)
            except ValueError:
                errors['futureYears'] = u'Future years must be an integer.'
        return errors

    security.declareProtected(permissions.View, 'getInputType')
    def getInputType(self):
        """Return a hard coded input type"""
        return 'date'

    security.declareProtected(permissions.View, 'validateAnswer')
    def validateAnswer(self, form, question_id, state):
        """Validate the question"""
        """Construct the deadline from the form"""
        year = form.get(question_id + '_year', '0')
        month = form.get(question_id + '_month', '0')
        day = form.get(question_id + '_day', '0')
        hour = form.get(question_id + '_hour', '0')
        minute = form.get(question_id + '_minute', '00')
        minute = form.get(question_id + '_minute', '00')
        # TODO this is not going to work outside GMT
        # XXX could do with some validation as well
        value = year + '/' + month + '/' + day + ' ' + hour + ':' + minute + ':00 GMT'
        self.addAnswer(value)

registerATCT(SurveyDateQuestion, PROJECTNAME)
Пример #37
0
      field = self[item_id].fgField
      field.required = not field.required
        
      return "<done />"

    security.declareProtected(ModifyPortalContent, 'toggleRequired')

    def removeFieldFromForm(self, item_id, **kw):
      """ remove field on the fly from the form"""
      
      self.manage_delObjects([item_id])
    
      return "<done />"

    security.declareProtected(ModifyPortalContent, 'lastFieldIdFromForm')
    def lastFieldIdFromForm(self, **kw):
        """ Retrieve the last field id in the current form"""

        lastField = ''
        myFields = []        
        for field in self.objectValues():
            if shasattr(field, 'fgField') or shasattr(field, 'fieldsetFields'):
                myFields.append(field)

        if myFields:
            lastField = myFields[-1].id
        return lastField      
    
        
registerATCT(FormFolder, PROJECTNAME)
Пример #38
0
        # set a preconfigured field as an instance attribute
        self.fgField = MyLocationField(
            'fg_location_field',
            languageIndependent=1,
            default_method="getDefaultLocation",
            required=True,
            write_permission=View,
            validators=('isGeoLocation', ),
            tmp_value=None,
            widget=LocationWidget(label='Location', ),
        )

    def fgPrimeDefaults(self, request, contextObject=None):
        """ primes request with default value"""

        BaseFormField.fgPrimeDefaults(self, request, contextObject)

        form_val = request.get(self.fgField.__name__, None)
        if form_val:
            self.fgField.tmp_value = form_val
        else:
            config = getMultiAdapter((self, request),
                                     name="maps_configuration")
            self.fgField.tmp_value = config.default_location
            request.form.setdefault(self.fgField.__name__,
                                    self.fgField.tmp_value)


registerATCT(FGLocationField, PROJECTNAME)
Пример #39
0
    width = ComputedAttribute(getWidth, 1)
    height = ComputedAttribute(getHeight, 1)

    security.declarePrivate('cmf_edit')
    def cmf_edit(self, precondition='', file=None, title=None):
        if file is not None:
            self.setImage(file)
        if title is not None:
            self.setTitle(title)
        self.reindexObject()

    def __bobo_traverse__(self, REQUEST, name):
        """Transparent access to image scales
        """
        if name.startswith('image'):
            field = self.getField('image')
            image = None
            if name == 'image':
                image = field.getScale(self)
            else:
                scalename = name[len('image_'):]
                if scalename in field.getAvailableSizes(self):
                    image = field.getScale(self, scale=scalename)
            if image is not None and not isinstance(image, basestring):
                # image might be None or '' for empty images
                return image

        return ATCTFileContent.__bobo_traverse__(self, REQUEST, name)

registerATCT(ATImage, PROJECTNAME)
Пример #40
0
        field.required = not field.required

        return "<done />"

    security.declareProtected(ModifyPortalContent, 'toggleRequired')

    def removeFieldFromForm(self, item_id, **kw):
        """ remove field on the fly from the form"""

        self.manage_delObjects([item_id])

        return "<done />"

    security.declareProtected(ModifyPortalContent, 'lastFieldIdFromForm')

    def lastFieldIdFromForm(self, **kw):
        """ Retrieve the last field id in the current form"""

        lastField = ''
        myFields = []
        for field in self.objectValues():
            if shasattr(field, 'fgField') or shasattr(field, 'fieldsetFields'):
                myFields.append(field)

        if myFields:
            lastField = myFields[-1].id
        return lastField


registerATCT(FormFolder, PROJECTNAME)
Пример #41
0
#802, Building No. 1,
#Dheeraj Sagar, Malad(W)
#Mumbai-400064, India
###############################################################################
from Products.Archetypes.atapi import *

from Products.ATContentTypes.content.folder \
     import ATFolder as BaseClass
from Products.ATContentTypes.content.folder \
     import ATFolderSchema as DefaultSchema

from Products.ATContentTypes.content.base import registerATCT

from ubify.coretypes.config import PROJECTNAME
schema = DefaultSchema.copy()


class Gallery(BaseClass):

    __doc__ = BaseClass.__doc__ + "(customizable version)"
    #    portal_type = BaseClass.portal_type
    #    archetype_name = BaseClass.archetype_name

    schema = schema
    _at_rename_after_creation = True
    # enable FTP/WebDAV and friends
    PUT = BaseClass.PUT


registerATCT(Gallery, PROJECTNAME)
Пример #42
0
                    else:
                        form_value = x.htmlValue(REQUEST)
                    if form_value:
                        cols[sharepoint_column.name] = form_value
            response = target_list.createItem(fields=cols)
            if not response.ok:
                logger.error("Error submitting sharepoint form: %s", response.text)
                return {FORM_ERROR_MARKER: 'An error occured while trying to submit your form. Please try to submit again..'}
            if response.ok and upload_field:
                form_value = form.get(upload_field)
                drive = Drive(id=drive, client=sharepoint.client)
                for f in form_value:
                    upload_instance = f.get('file')
                    body = upload_instance.read()
                    if (not body) or (not upload_instance.filename):
                        continue
                    now = datetime.now().strftime('%y-%m-%d-%H-%M-%S-%f')
                    filename = upload_instance.filename
                    # IE has the entire path instead of just the filename
                    # This should get just the filename
                    filename = filename[filename.rfind('\\')+1:].strip()
                    filename = response.json().get('id') + '-' + filename
                    ct = upload_instance.headers.getheader('Content-Type')
                    upload_response = drive.upload(filename, body, ct)
                    if not upload_response.ok:
                        logger.error("Error uploading attachments: %s", upload_response.text)
                        return {FORM_ERROR_MARKER: 'Something went wrong with the file upload. You will need to try to submit again or correct any errors below.'}


registerATCT(SharePointAdapter, PROJECTNAME)
Пример #43
0
    height = ComputedAttribute(getHeight, 1)

    @security.private
    def cmf_edit(self, precondition='', file=None, title=None):
        if file is not None:
            self.setImage(file)
        if title is not None:
            self.setTitle(title)
        self.reindexObject()

    def __bobo_traverse__(self, REQUEST, name):
        """Transparent access to image scales
        """
        if name.startswith('image'):
            field = self.getField('image')
            image = None
            if name == 'image':
                image = field.getScale(self)
            else:
                scalename = name[len('image_'):]
                if scalename in field.getAvailableSizes(self):
                    image = field.getScale(self, scale=scalename)
            if image is not None and not isinstance(image, basestring):
                # image might be None or '' for empty images
                return image

        return ATCTFileContent.__bobo_traverse__(self, REQUEST, name)


registerATCT(ATImage, PROJECTNAME)
Пример #44
0
            file.seek(0)
            content = file.read(65536)
        else:
            content = data

        if -1 != content.lower().find("<html"):
            parser = etree.HTMLParser()
            tree = etree.fromstring(content, parser=parser)
            titletag = tree.xpath("//title")
            if titletag:
                self.setTitle(titletag[0].text)
            return

        ATCTContent.manage_afterPUT(self, data, marshall_data, file, context, mimetype, filename, REQUEST, RESPONSE)


@implementer(IATDocument, IDAVAware)
class ATDocument(ATDocumentBase):
    """A page in the site. Can contain rich text."""

    schema = ATDocumentSchema

    portal_type = "Document"
    archetype_name = "Page"
    _atct_newTypeFor = {"portal_type": "CMF Document", "meta_type": "Document"}
    assocMimetypes = ("application/xhtml+xml", "message/rfc822", "text/*")
    assocFileExt = ("txt", "stx", "rst", "rest", "py")


registerATCT(ATDocument, PROJECTNAME)
                
    def getEntries(self,num_of_entries):
        """Getter for syndacation support
        """
        syn_tool = getToolByName(self, 'portal_syndication')
        if num_of_entries is None:
            num_of_entries = int(syn_tool.getMaxItems(self))
        
        portal = self.portal_url.getPortalObject()
        portal_path = "/".join(portal.getPhysicalPath())
        mid = self.getId()
        return self.queryfolderbytype(currentpath= portal_path,modifiers = (mid,))[0][:num_of_entries]
    
    def synContentValues(self):
        """Getter for syndacation support
        """        
        syn_tool = getToolByName(self, 'portal_syndication')
        
        num_of_entries = int(syn_tool.getMaxItems(self))
        brains = self.getEntries(num_of_entries)
        objs = [brain.getObject() for brain in brains]
        return [obj for obj in objs if obj is not None]
    
    def listApplications(self):
        apps = []
        apps.extend(applications)
        apps.remove(apps[1])        
        return apps        
    
registerATCT(MemberSpace, PROJECTNAME)
Пример #46
0
        ATCTContent.manage_afterPUT(self, data, marshall_data, file, context,
                                    mimetype, filename, REQUEST, RESPONSE)


class ATDocument(ATDocumentBase):
    """A page in the site. Can contain rich text."""

    schema = ATDocumentSchema

    portal_type = 'Document'
    archetype_name = 'Page'
    _atct_newTypeFor = {'portal_type': 'CMF Document', 'meta_type': 'Document'}
    assocMimetypes = (
        'application/xhtml+xml',
        'message/rfc822',
        'text/*',
    )
    assocFileExt = (
        'txt',
        'stx',
        'rst',
        'rest',
        'py',
    )

    implements(IATDocument, IDAVAware)


registerATCT(ATDocument, PROJECTNAME)
#Dheeraj Sagar, Malad(W)
#Mumbai-400064, India
###############################################################################
from Products.Archetypes.atapi import *

from Products.ATContentTypes.content.folder \
     import ATFolder as BaseClass
from Products.ATContentTypes.content.folder \
     import ATFolderSchema as DefaultSchema

from Products.ATContentTypes.content.base import registerATCT

from ubify.coretypes.config import PROJECTNAME
schema = DefaultSchema.copy()


class LinkDirectory(BaseClass):

    __doc__ = BaseClass.__doc__ + "(customizable version)"
#    portal_type = BaseClass.portal_type
#    archetype_name = BaseClass.archetype_name

    schema = schema
    _at_rename_after_creation = True
    # enable FTP/WebDAV and friends
    PUT = BaseClass.PUT


registerATCT(LinkDirectory, PROJECTNAME)

Пример #48
0
            items = []
            for i in range(len(value)):
                label = field.fgField.questionSet[i]
                items.append('%s: %s' % (label, value.get(str(i + 1), '')))
            value = items

        # Convert list values
        if isinstance(value, list):
            # Store lines newline-separated?
            value = DELIMITER.join(value)
        return value

    def _unmassageValue(self, value, field):
        """ Reverse the storage massaging
        """
        if field.meta_type in [
                'FormMultiSelectionField',
        ]:
            value = value and value.split(DELIMITER)
        elif field.meta_type == 'FormLikertField':
            # convert back to likert-style dict
            items = value.split(DELIMITER)
            value_dict = {}
            for i, item in enumerate(items):
                question, answer = item.split(': ', 1)
                value_dict[str(i + 1)] = answer
            value = value_dict
        return value

registerATCT(SQLPFGAdapter, PROJECTNAME)
Пример #49
0
    security.declareProtected(View, 'getProjectRoom')

    def getProjectRoom(self):
        """Return the closest project room"""
        return self

    security.declareProtected(View, 'getProjectRoomState')

    def getProjectRoomState(self):
        """Return if the project room is private or public"""
        wftool = getToolByName(self, 'portal_workflow')
        return wftool.getInfoFor(self, "review_state")


registerATCT(ProjectRoom, PROJECTNAME)


@indexer(IProjectRoom)
def participants(context):
    return context.participants


class ProjectRoomParticipantRoles(object):
    """Gives participants of a ProjectRoom appropriate roles in context"""
    implements(ILocalRoleProvider)
    adapts(IProjectRoom)

    def __init__(self, context):
        self.context = context
Пример #50
0
        # five.localsitemanager looking for a parent using a comparison
        # on this object -> infinite recursion.
        if IATEvent.providedBy(other):
            return cmp((self.start_date, self.duration, self.title),
                       (other.start_date, other.duration, other.title))
        elif isinstance(other, DateTime):
            return cmp(self.start(), other)
        else:
            # TODO come up with a nice cmp for types
            return cmp(self.title, other)

    def __hash__(self):
        return hash((self.start_date, self.duration, self.title))


registerATCT(ATEvent, packageName)


class StartEndDateValidator(object):
    """Checks whether startDate is before endDate. In case the event is
    openEnded this check is skipped.
    """
    implements(IObjectPostValidation)
    adapts(IATEvent)

    def __init__(self, context):
        self.context = context

    def __call__(self, request):
        rstartDate = request.form.get('startDate', None)
        rendDate = request.form.get('endDate', None)
Пример #51
0
    schema = FormNorobotsFieldSchema

    def __init__(self, oid, **kwargs):
        """ initialize class """
        BaseFormField.__init__(self, oid, **kwargs)

        # set a preconfigured field as an instance attribute
        self.fgField = StringField('fg_string_field',
            searchable=0,
            required=1,
            write_permission=View,
            #validators=('isNorobotsCorrect',),
            widget=NorobotsWidget(),
            )

    def specialValidator(self, value, field, REQUEST, errors):
        """ validate our answer using the collective.z3cform.norobots validator
        """    
        field_name = field.getName()
        
        question_id = REQUEST.get('%s_question_id' % field_name)
        id_check = REQUEST.get('%s_id_check' % field_name)
        
        norobots = getMultiAdapter((self, REQUEST), name='norobots')
        if not norobots.verify(value, question_id, id_check):
            return str('Wrong answer')
        
        return 0
    
registerATCT(FormNorobotsField, PROJECTNAME)
Пример #52
0
                LOG.error('MimeTypeException for %s. Error is: %s' %
                          (self.absolute_url(), str(msg)))
            if not mimetypeitem:
                return BaseContent.getIcon(self, relative_to_portal)
            icon = mimetypeitem[0].icon_path

        if relative_to_portal:
            return icon
        else:
            # Relative to REQUEST['BASEPATH1']
            res = utool(relative=1) + '/' + icon
            while res[:1] == '/':
                res = res[1:]
            return res

    security.declareProtected(View, 'icon')

    def icon(self):
        """for ZMI
        """
        return self.getIcon()

    security.declarePrivate('cmf_edit')

    def cmf_edit(self, precondition='', file=None):
        if file is not None:
            self.setFile(file)


registerATCT(ATFile, PROJECTNAME)
Пример #53
0
            mimetypeitem = None
            try:
                mimetypeitem = mtr.lookup(contenttype)
            except MimeTypeException, msg:
                LOG.error('MimeTypeException for %s. Error is: %s' % (self.absolute_url(), str(msg)))
            if not mimetypeitem:
                return BaseContent.getIcon(self, relative_to_portal)
            icon = mimetypeitem[0].icon_path

        if relative_to_portal:
            return icon
        else:
            # Relative to REQUEST['BASEPATH1']
            res = utool(relative=1) + '/' + icon
            while res[:1] == '/':
                res = res[1:]
            return res

    security.declareProtected(View, 'icon')
    def icon(self):
        """for ZMI
        """
        return self.getIcon()

    security.declarePrivate('cmf_edit')
    def cmf_edit(self, precondition='', file=None):
        if file is not None:
            self.setFile(file)

registerATCT(ATFile, PROJECTNAME)
Пример #54
0
        """ set simple validator """

        fgt = getToolByName(self, 'formgen_tool')

        if value and (value != 'vocabulary_none_text'):
            fgtid = fgt.stringValidators[value].get('id')
            if fgtid:
                self.fgField.validators = ('isNotTooLong', fgtid)
        else:
            self.fgField.validators = ('isNotTooLong',)
        self.fgField._validationLayer()

        self.fgStringValidator = value


registerATCT(FGStringField, PROJECTNAME)


class FGPasswordField(FGStringField):
    """ Password entry field (input is masked) """

    schema = BaseFieldSchemaStringDefault.copy() + Schema((
        maxlengthField,
        sizeField,
    ))

    # 'hidden' isn't really useful for this field.
    del schema['hidden']
    # 'serverSide' is not really useful for this field.
    del schema['serverSide']
Пример #55
0

class Audio(BaseClass):
    implements(IAudio)

    __doc__ = BaseClass.__doc__ + "(customizable version)"

    portal_type = "Audio"
    archetype_name = BaseClass.archetype_name
    
    assocFileExt   = ('mp3', 'wav', )
    if schema['file'] <> None:
        schema['file'].widget.label = 'Audio'
        schema['file'].widget.description = 'Select a .mp3 or .wav audio file.'
        
    schema = schema
    
    def manage_afterPUT(self, data, marshall_data, file, context, mimetype,filename, REQUEST, RESPONSE):
        is_new = False
        title = self.Title()
        if not title:
            is_new = True
        BaseClass.manage_afterPUT(self, data, marshall_data, file, context, mimetype, filename, REQUEST, RESPONSE)
        if is_new:
            notify(ObjectInitializedEvent(self))
        else:
            notify(ObjectEditedEvent(self))

registerATCT(Audio, PROJECTNAME)

Пример #56
0
        """remute url mutator

        Use urlparse to sanify the url
        Also see http://dev.plone.org/plone/ticket/3296
        """
        if value:
            value = urlparse.urlunparse(urlparse.urlparse(value))
        self.getField('remoteUrl').set(self, value, **kwargs)

    security.declareProtected(View, 'remote_url')
    def remote_url(self):
        """CMF compatibility method
        """
        return self.getRemoteUrl()

    security.declarePrivate('cmf_edit')
    def cmf_edit(self, remote_url=None, **kwargs):
        if not remote_url:
            remote_url = kwargs.get('remote_url', None)
        self.update(remoteUrl=remote_url, **kwargs)

    security.declareProtected(View, 'getRemoteUrl')
    def getRemoteUrl(self):
        """Sanitize output
        """
        value = self.Schema()['remoteUrl'].get(self)
        if not value: value = ''  # ensure we have a string
        return quote(value, safe='?$#@/:=+;$,&%')

registerATCT(ATLink, PROJECTNAME)
Пример #57
0
    def getThanksPrologue(self):
        """ get expanded prologue """

        return self._dreplace( self.getRawThanksPrologue() )


    security.declarePublic('getThanksEpilogue')
    def getThanksEpilogue(self):
        """ get expanded epilogue """

        return self._dreplace( self.getRawThanksEpilogue() )



    def processForm(self, data=1, metadata=0, REQUEST=None, values=None):
        # override base so that we can selectively redirect back to the form
        # rather than to the thanks page view.

        # base processing
        ATCTContent.processForm(self, data, metadata, REQUEST, values)

        # if the referer is the item itself, let nature take its course;
        # if not, redirect to form after a commit.
        referer = self.REQUEST.form.get('last_referer', None)
        if referer is not None and referer.split('/')[-1] != self.getId():
            transaction.commit()
            raise zExceptions.Redirect, "%s#qedit" % self.formFolderObject().absolute_url()


registerATCT(FormThanksPage, PROJECTNAME)
    
    ClustererIcon = atapi.ATFieldProperty('ClustererIcon')

    CategoryIcon = atapi.ATFieldProperty('CategoryIcon')

    DefaultActive = atapi.ATFieldProperty('DefaultActive')
    
    def markerIconVocab(self):
        config = getMultiAdapter((self, self.REQUEST), name="ttgooglemap_config")
        return config.marker_icons
    
    def getParentMap(self, context = None):
        if not context:
            context = self.aq_inner
        if ITTGoogleMap.providedBy(context):
            return context
        elif ISiteRoot.providedBy(context):
            return None
        else:
            return self.getParentMap(context.aq_parent)
    
    @ram.cache(markers_cachekey)
    def getMarkers(self, **args):
        log('Query the catalog to get markers for TTGoogleMapCategory. Category: "%s"' % self.Title())
        filter={'portal_type':'TTGoogleMapMarker', 'review_state':'published'}
        if args:
            filter = dict(filter.items() + args.items())            
        return self.getFolderContents(contentFilter=filter);

base.registerATCT(TTGoogleMapCategory, PROJECTNAME)
Пример #59
0
    atapi.StringField('testReadonlyField', mode='r'),
    atapi.StringField('testWriteonlyField', mode='w'),
    atapi.StringField('testReadPermissionField',
                      read_permission=permissions.ManagePortal),
    atapi.StringField('testWritePermissionField',
                      write_permission=permissions.ManagePortal),
    atapi.StringField('testURLField', validators=('isURL',)),
))


class ATTestDocument(ATDocumentBase):
    """A test type containing a set of standard Archetypes fields."""

    schema = ATTestDocumentSchema

    portal_type = 'ATTestDocument'


registerATCT(ATTestDocument, PROJECTNAME)


class ATTestFolder(ATFolder):
    """A test folderish Archetypes test type."""

    schema = ATFolderSchema

    portal_type = 'ATTestFolder'


registerATCT(ATTestFolder, PROJECTNAME)