def getRaw(self, instance, aslist=False, **kwargs):
     """Return the list of UIDs referenced under this fields
     relationship.
     
     During creation look for a default value. This will only work for
     user edited forms, not programmatically generated content.
     """
     if instance._at_creation_flag:
         return self.getDefault(instance)
     else:
         return ReferenceField.getRaw(self, instance, aslist, **kwargs)
Exemple #2
0
def update_item_schema(baseSchema):
    specificSchema = Schema((
        TextField(
            name='internalCommunication',
            widget=RichWidget(
                condition="python: here.portal_plonemeeting.isManager(here)",
                description="InternalCommunication",
                description_msgid="item_internalCommunication_descr",
                label='InternalCommunication',
                label_msgid='PloneMeeting_label_internalCommunication',
                i18n_domain='PloneMeeting',
            ),
            optional=True,
            default_content_type="text/html",
            allowable_content_types=('text/html', ),
            default_output_type="text/x-html-safe",
        ),
        ReferenceField(
            name='strategicAxis',
            keepReferencesOnCopy=True,
            widget=ReferenceBrowserWidget(
                description="StrategicAxis",
                description_msgid="item_strategicAxis_descr",
                condition="python: here.attributeIsUsed('strategicAxis')",
                allow_search=True,
                allow_browse=False,
                startup_directory_method="classifierStartupDirectory",
                force_close_on_insert=False,
                restrict_browsing_to_startup_directory=True,
                base_query="classifierBaseQuery",
                show_results_without_query=True,
                label='StrategicAxis',
                label_msgid='PloneMeeting_label_strategicAxis',
                i18n_domain='PloneMeeting',
            ),
            multiValued=True,
            relationship="ItemStrategicAxis",
            allowed_types=('MeetingCategory', ),
            optional=True,
        ),
    ))

    baseSchema[
        'detailedDescription'].widget.description = "DetailedDescriptionMethode"
    baseSchema[
        'detailedDescription'].widget.description_msgid = "detailedDescription_item_descr"
    completeItemSchema = baseSchema + specificSchema.copy()
    completeItemSchema.moveField('strategicAxis', after='detailedDescription')
    return completeItemSchema
Exemple #3
0
class ATRefnode(BaseContent):
    """A simple archetype for testing references. It can point to itself"""

    schema = BaseSchema.copy() + Schema((
        ReferenceField('relatedItems',
                       relationship='relatesTo',
                       multiValued=True,
                       isMetadata=True,
                       languageIndependent=False,
                       index='KeywordIndex',
                       referencesSortable=True,
                       keepReferencesOnCopy=True,
                       write_permission=ModifyPortalContent,
                       widget=ReferenceWidget(label=u'label_related_items',
                                              description='',
                                              visible={
                                                  'edit': 'visible',
                                                  'view': 'invisible'
                                              })),  # make it a list
    ))
Exemple #4
0
from bika.lims.browser.widgets import DateTimeWidget

schema = BikaSchema.copy() + Schema((
    ComputedField(
        'RequestID',
        expression='here.getRequestID()',
        widget=ComputedWidget(visible=True, ),
    ),
    FileField(
        'AttachmentFile',
        widget=FileWidget(label=_("Attachment"), ),
    ),
    ReferenceField(
        'AttachmentType',
        required=0,
        allowed_types=('AttachmentType', ),
        relationship='AttachmentAttachmentType',
        widget=ReferenceWidget(label=_("Attachment Type"), ),
    ),
    StringField(
        'ReportOption',
        searchable=True,
        vocabulary="ATTACHMENT_REPORT_OPTIONS",
        widget=SelectionWidget(
            label=_("Report Options"),
            checkbox_bound=0,
            format='select',
            visible=True,
            default='a',
        ),
    ),
Exemple #5
0
from bika.lims import logger
from bika.lims.config import PROJECTNAME
from bika.lims.content.bikaschema import BikaSchema
from bika.lims.interfaces import IInstrumentCertification
from plone.app.blob.field import FileField as BlobFileField
from zope.interface import implements

schema = BikaSchema.copy() + Schema((
    StringField(
        'TaskID',
        widget=StringWidget(
            label=_("Task ID"),
            description=_("The instrument's ID in the lab's asset register"),
        )),
    ReferenceField('Instrument',
                   allowed_types=('Instrument', ),
                   relationship='InstrumentCertificationInstrument',
                   widget=StringWidget(visible=False, )),
    ComputedField(
        'InstrumentUID',
        expression=
        'context.getInstrument() and context.getInstrument().UID() or None',
        widget=ComputedWidget(visible=False, ),
    ),

    # Set the Certificate as Internal
    # When selected, the 'Agency' field is hidden
    BooleanField('Internal',
                 default=False,
                 widget=BooleanWidget(
                     label=_("Internal Certificate"),
                     description=_(
from bika.lims.utils import to_utf8
from bika.lims.config import PROJECTNAME
from bika.lims.interfaces import IInstrument
from bika.lims.config import QCANALYSIS_TYPES
from bika.lims.content.bikaschema import BikaSchema
from bika.lims.content.bikaschema import BikaFolderSchema
from bika.lims import bikaMessageFactory as _

schema = BikaFolderSchema.copy() + BikaSchema.copy() + Schema((
    ReferenceField(
        'InstrumentType',
        vocabulary='getInstrumentTypes',
        allowed_types=('InstrumentType', ),
        relationship='InstrumentInstrumentType',
        required=1,
        widget=SelectionWidget(format='select',
                               label=_("Instrument type"),
                               visible={
                                   'view': 'invisible',
                                   'edit': 'visible'
                               }),
    ),
    ReferenceField(
        'Manufacturer',
        vocabulary='getManufacturers',
        allowed_types=('Manufacturer', ),
        relationship='InstrumentManufacturer',
        required=1,
        widget=SelectionWidget(format='select',
                               label=_("Manufacturer"),
                               visible={
Exemple #7
0
     default=True,
     widget=BooleanWidget(
         label=_("Use Dashboard as default front page"),
         description=_("Select this to activate the dashboard as a default front page.")
     ),
 ),
 ReferenceField(
     'LandingPage',
     schemata="Appearance",
     multiValued=0,
     allowed_types=('Document', ),
     relationship='SetupLandingPage',
     widget=ReferenceBrowserWidget(
         label=_("Landing Page"),
         description=_("The selected landing page is displayed for non-authenticated users "
                       "and if the Dashboard is not selected as the default front page. "
                       "If no landing page is selected, the default Bika frontpage is displayed."),
         allow_search=1,
         allow_browse=1,
         startup_directory='/',
         force_close_on_insert=1,
         default_search_index='SearchableText',
         base_query={'review_state': 'published'},
     ),
 ),
 BooleanField(
     'PrintingWorkflowEnabled',
     schemata="Sampling and COC",
     default=False,
     widget=BooleanWidget(
         label=_("Enable the Results Report Printing workflow"),
Exemple #8
0
    def test_multiple_widgets(self):
        from zope.event import notify
        from Products.Archetypes.Widget import RelatedItemsWidget
        from zope.interface import implementer
        from zope.lifecycleevent import ObjectCreatedEvent
        from plone.uuid.interfaces import IUUID
        from plone.uuid.interfaces import IAttributeUUID

        @implementer(IAttributeUUID)
        class ExampleContent(object):
            pass

        obj1 = ExampleContent()
        obj2 = ExampleContent()
        notify(ObjectCreatedEvent(obj1))
        notify(ObjectCreatedEvent(obj2))

        self.context.fieldvalue = lambda: obj1

        field1 = ReferenceField(
            'fieldname1',
            relationship="A",
            multiValued=False,
            widget=RelatedItemsWidget(),
        )
        field1.accessor = "fieldvalue"
        base_args1 = field1.widget._base_args(self.context, field1,
                                              self.request)  # noqa

        self.assertDictContainsSubset(
            {
                'name': 'fieldname1',
                'value': '{}'.format(IUUID(obj1)),
                'pattern': 'relateditems',
            }, base_args1)
        self.assertDictContainsSubset(
            {
                'separator':
                ';',
                'orderable':
                True,
                'maximumSelectionSize':
                1,
                'vocabularyUrl':
                '/@@getVocabulary?name='
                'plone.app.vocabularies.Catalog'
                '&field=fieldname1',
                'basePath':
                '/Plone/doc',
                'contextPath':
                '/Plone/doc',
                'rootPath':
                '/',
                'rootUrl':
                '',
            }, base_args1.get('pattern_options', {}))

        field2 = ReferenceField(
            'fieldname2',
            relationship="A",
            multiValued=True,
            widget=RelatedItemsWidget(),
        )
        field2.accessor = "fieldvalue"
        self.context.fieldvalue = lambda: [obj1, obj2]
        base_args2 = field2.widget._base_args(self.context, field2,
                                              self.request)  # noqa

        self.assertDictContainsSubset(
            {
                'name': 'fieldname2',
                'value': '{};{}'.format(IUUID(obj1), IUUID(obj2)),
                'pattern': 'relateditems',
            }, base_args2)

        self.assertDictContainsSubset(
            {
                'separator':
                ';',
                'orderable':
                True,
                'maximumSelectionSize':
                -1,
                'vocabularyUrl':
                '/@@getVocabulary?name='
                'plone.app.vocabularies.Catalog'
                '&field=fieldname2',
                'basePath':
                '/Plone/doc',
                'contextPath':
                '/Plone/doc',
                'rootPath':
                '/',
                'rootUrl':
                '',
            }, base_args2.get('pattern_options', {}))
Exemple #9
0
ATContentTypeSchema['description'].schemata = 'default'

# BBB
ATContentTypeBaseSchema = ATContentTypeSchema

relatedItemsField = ReferenceField('relatedItems',
        relationship = 'relatesTo',
        multiValued = True,
        isMetadata = True,
        languageIndependent = False,
        index = 'KeywordIndex',
        referencesSortable = True,
        write_permission = ModifyPortalContent,
        widget = ReferenceBrowserWidget(
            allow_search = True,
            allow_browse = True,
            allow_sorting = True,
            show_indexes = False,
            force_close_on_insert = True,
            label = _(u'label_related_items', default=u'Related Items'),
            description = '',
            visible = {'edit' : 'visible', 'view' : 'invisible' }
            )
        )
ATContentTypeSchema.addField(relatedItemsField.copy())

#Enabling next / previous navigation

NextPreviousAwareSchema = MetadataSchema((
    BooleanField('nextPreviousEnabled',
Exemple #10
0
    #        #description = "Select the file to be added by clicking the 'Browse' button.",
    #        #description_msgid = "help_file",
    #        description = "",
    #        label= "PDF File",
    #        label_msgid = "label_pdf_file",
    #        i18n_domain = "plone",
    #        show_content_type = False,
    #        ),
    #    ),
    ReferenceField('bibref',
        relationship = "isBibReference",
        multiValued = False,
        allowed_types = REFERENCE_TYPES,
        searchable = False,
        widget = ReferenceBrowserWidget(label="Bibliography Reference",
            label_msgid="label_bibreference",
            description_msgid="help__bibreference",
            description="Select the corresponding bibliography reference.",
            i18n_domain="plone",
            startup_directory='/litterature/',
            ),
        ),
    ))

finalizeATCTSchema(PDFFileSchema)
PDFFileSchema['file'].label= "Mars PDF File",
PDFFileSchema['file'].label_msgid = "label_pdf_file",

class MarsPDFFile(ATFile):
    security = ClassSecurityInfo()
    #__implements__ = (getattr(ATFile,'__implements__',()),)
Exemple #11
0
            label_msgid='Poi_label_issueType',
            description_msgid='Poi_help_issueType',
            i18n_domain='Poi',
        ),
        enforceVocabulary=True,
        default_method='getDefaultIssueType',
        vocabulary='getIssueTypesVocab',
        required=True
    ),

    ReferenceField(
        name='references',
        index="FieldIndex:schema",
        relationship='preceedes',
        allowed_types='PoiIssue',
        multiValued=True,
        widget=ReferenceBrowserWidget( 
                label="subsequent issues",
                allow_browse=False,
                allow_search=True,
            )
    ),

    StringField(
        name='severity',
        index="FieldIndex:schema",
        widget=SelectionWidget(
            label="Severity",
            description="Select the severity of this issue.",
            format="radio",
            label_msgid='Poi_label_severity',
            description_msgid='Poi_help_severity',
ATContentTypeSchema['description'].schemata = 'default'

# BBB
ATContentTypeBaseSchema = ATContentTypeSchema

relatedItemsField = ReferenceField('relatedItems',
                                   relationship='relatesTo',
                                   multiValued=True,
                                   isMetadata=True,
                                   languageIndependent=False,
                                   index='KeywordIndex',
                                   referencesSortable=True,
                                   write_permission=ModifyPortalContent,
                                   widget=ReferenceBrowserWidget(
                                       allow_search=True,
                                       allow_browse=True,
                                       allow_sorting=True,
                                       show_indexes=False,
                                       force_close_on_insert=True,
                                       label=_(u'label_related_items',
                                               default=u'Related Items'),
                                       description='',
                                       visible={
                                           'edit': 'visible',
                                           'view': 'invisible'
                                       }))
ATContentTypeSchema.addField(relatedItemsField.copy())

#Enabling next / previous navigation

NextPreviousAwareSchema = MetadataSchema(
Exemple #13
0
from Products.Archetypes.atapi import ReferenceField
from Products.Archetypes.atapi import BaseSchema
from Products.Archetypes.atapi import Schema
from Products.Archetypes.atapi import BaseContent
from Products.Archetypes.atapi import registerType
from DateTime import DateTime

from archetypes.referencebrowserwidget.config import PROJECTNAME
from archetypes.referencebrowserwidget.widget import ReferenceBrowserWidget

schema = BaseSchema.copy() + Schema(
    (ReferenceField(
        'singleRef',
        multiValued=0,
        allowed_types=('Document', 'File', 'RefBrowserDemo'),
        relationship='Rel1',
        widget=ReferenceBrowserWidget(
            default_search_index='SearchableText',
            description=
            'This is the first field. Pick an object. Restricted to Document, File and RefBrowserDemo.'
        )),
     ReferenceField(
         'multiRef',
         multiValued=1,
         relationship='Rel2',
         referencesSortable=1,
         widget=ReferenceBrowserWidget(
             hide_inaccessible=1,
             show_indexes=1,
             allow_sorting=1,
             description=
             ('And here is another field with a longer '
Exemple #14
0
             'sample_due': {'view': 'visible', 'edit': 'visible'},
             'sample_received': {'view': 'visible', 'edit': 'visible'},
             'expired': {'view': 'visible', 'edit': 'invisible'},
             'disposed': {'view': 'visible', 'edit': 'invisible'},
             'rejected': {'view': 'visible', 'edit': 'invisible'},
         },
         render_own_label=True,
     ),
 ),
 ReferenceField(
     'LinkedSample',
     vocabulary_display_path_bound=sys.maxsize,
     multiValue=1,
     allowed_types=('Sample',),
     relationship='SampleSample',
     referenceClass=HoldingReference,
     mode="rw",
     read_permission=permissions.View,
     write_permission=permissions.ModifyPortalContent,
     widget=ReferenceWidget(
         label=_("Linked Sample"),
     ),
 ),
 ReferenceField(
     'SampleType',
     required=1,
     vocabulary_display_path_bound=sys.maxsize,
     allowed_types=('SampleType',),
     relationship='SampleSampleType',
     referenceClass=HoldingReference,
     mode="rw",
     read_permission=permissions.View,
Exemple #15
0
ATContentTypeSchema['description'].schemata = 'default'

# BBB
ATContentTypeBaseSchema = ATContentTypeSchema

relatedItemsField = ReferenceField('relatedItems',
                                   relationship='relatesTo',
                                   multiValued=True,
                                   isMetadata=True,
                                   languageIndependent=False,
                                   index='KeywordIndex',
                                   referencesSortable=True,
                                   keepReferencesOnCopy=True,
                                   write_permission=ModifyPortalContent,
                                   widget=RelatedItemsWidget(label=_(
                                       u'label_related_items',
                                       default=u'Related Items'),
                                                             description='',
                                                             visible={
                                                                 'edit':
                                                                 'visible',
                                                                 'view':
                                                                 'invisible'
                                                             }))
ATContentTypeSchema.addField(relatedItemsField.copy())

#Enabling next / previous navigation

NextPreviousAwareSchema = MetadataSchema(
    (
Exemple #16
0
from Products.ATContentTypes.interfaces import IATTopicSearchCriterion
from Products.ATContentTypes.permission import ChangeTopics
from Products.CMFCore.permissions import View
from zope.interface import implements

ATPathCriterionSchema = ATBaseCriterionSchema + Schema((
    ReferenceField('value',
                   required=1,
                   mode="rw",
                   write_permission=ChangeTopics,
                   accessor="Value",
                   mutator="setValue",
                   allowed_types_method="getNavTypes",
                   multiValued=True,
                   keepReferencesOnCopy=True,
                   relationship="paths",
                   widget=RelatedItemsWidget(
                       allow_search=1,
                       label=_(u'label_path_criteria_value',
                               default=u'Folders'),
                       description=_(u'help_path_criteria_value',
                                     default=u'Folders to search in.'),
                       base_query={'is_folderish': True},
                       restrict_browse=True,
                       startup_directory='../')),
    BooleanField(
        'recurse',
        mode="rw",
        write_permission=ChangeTopics,
        accessor="Recurse",
        default=False,
Exemple #17
0
        'description',
        searchable=True,
        default='',
        accessor="Description",
        widget=TextAreaWidget(label='Description',
                              description="A short summary of the content",
                              label_msgid="label_description",
                              description_msgid="help_description",
                              i18n_domain="plone"),
    ),
    ReferenceField(
        'referencedContent',
        relationship='article_proxy',
        allowed_types_method='getReferenceablePortalTypes',
        keepReferencesOnCopy=True,
        widget=ReferenceBrowserWidget(
            label='Referenced content',
            label_msgid='label_referenced_content',
            i18n_domain='plonearticle',
        ),
    ),
))


class BaseInnerContentProxy(BaseContentMixin):
    """This is a proxy between article and a referenced content.

    A referenced content can be defined outside the article and a proxy is just
    a placeholder for this external object or internal object.

    A proxy is a traversable content so it can be accessed from its url.
Exemple #18
0
from Products.ECAssignmentBox.content import validators 
from Products.ECAssignmentBox import config
#from Products.ECAssignmentBox import LOG


ECAssignmentBox_schema = ATFolderSchema.copy() + Schema((
    ReferenceField(
        'assignment_reference',
        allowed_types = ('ECAssignmentTask',),
        required = False,
        accessor = 'getReference',
        index = "FieldIndex:schema", # Adds "getRawAssignment_reference"
                                     # to catalog
        multiValued = False,
        relationship = 'alter_ego',
        widget = ReferenceBrowserWidget(
			description = 'Select an assignment task.  A reference to an assignment task supersedes the assignment text and answer template below.',
            description_msgid = 'help_assignment_reference',
            i18n_domain = config.I18N_DOMAIN,
            label = 'Reference to assignment',
            label_msgid = 'label_assignment_reference',
            allow_search = True,
            show_indexes = False,
        ),
    ),
    TextField(
        'assignment_text',
        required = False,
        searchable = True,
        allowable_content_types = config.ALLOWED_CONTENT_TYPES, 
        default_content_type = config.DEFAULT_CONTENT_TYPE, 
Exemple #19
0
from Products.ATContentTypes import ATCTMessageFactory as _

from pcp.contenttypes.interfaces import IActionList
from pcp.contenttypes.config import PROJECTNAME

ActionListSchema = ATContentTypeSchema.copy() + atapi.Schema(
    (ReferenceField('service',
                    relationship='forService',
                    multiValued=False,
                    languageIndependent=True,
                    write_permission=ModifyPortalContent,
                    widget=ReferenceBrowserWidget(
                        allow_search=True,
                        allow_browse=True,
                        show_indexes=False,
                        show_path=1,
                        force_close_on_insert=True,
                        startup_directory='/catalog',
                        base_query={'portal_type': 'Service'},
                        label=_(u'label_service', default=u'Related service'),
                        description='',
                        visible={
                            'edit': 'visible',
                            'view': 'invisible'
                        })),
     ReferenceField('actionItems',
                    relationship='hasActionItem',
                    multiValued=True,
                    isMetadata=True,
                    languageIndependent=False,
                    index='KeywordIndex',
Exemple #20
0
from Products.Archetypes.atapi import (Schema, ReferenceField, ReferenceWidget,
                                       BaseFolderSchema, BaseFolder,
                                       registerType)
import zope.interface

from Products.EEAContentTypes.config import PROJECTNAME
from Products.EEAContentTypes.content.CallForInterest import CallForInterest
from Products.EEAContentTypes.content.interfaces import ICallForTender

schema = Schema((ReferenceField(name='awardNotice',
                                widget=ReferenceWidget(
                                    label='Award notice',
                                    label_msgid='EEAContentTypes_award_notice',
                                    i18n_domain='EEAContentTypes',
                                    helper_js=("callfortender_widget.js", )),
                                allowed_types="('Document','File')",
                                multiValued=0,
                                relationship="awardNotice",
                                vocabulary="getPossibleAwardNotice",
                                accessor="getAwardNoticeObject"), ), )

CallForTender_schema = BaseFolderSchema.copy() + \
                       getattr(CallForInterest, 'schema', Schema(())).copy() + \
                       schema.copy()


class CallForTender(CallForInterest, BaseFolder):
    """ Call for tenders
    """
    security = ClassSecurityInfo()
Exemple #21
0
class MapLayer(BaseFolder):#(BaseFolder): 
    '''Map Layer for CoGIS'''    
    #schema = extra_schema#BaseFolderSchema
    #schema = BaseFolderSchema
    
    actions = ({'id': 'details',
              'name': 'Details',
              'action': 'string:${object_url}/MapLayer_Details',
              'permissions': (permissions.ViewManagementScreens,)},   
              {'id': 'security',
              'name': 'Security',
              'action': 'string:${object_url}/Map_Layer_Security',
              'permissions': (permissions.ViewManagementScreens,)}, 
              {'id': 'pingLayer',
              'name': 'Ping Layer',
              'action': 'string:${object_url}/Map_Layer_Ping',
              'permissions': (permissions.ViewManagementScreens,)}, 
                                          
                )

    schema = BaseSchema + Schema([
        StringField('description',
                     required=False,                            
                     searchable = 1,                     
                     widget=StringWidget(label='Description',description="Enter project description")),
        ReferenceField(
                        'relatedItems', 
                        relationship = 'relatesTo', 
                        multiValued = True, 
                        isMetadata = True, 
                        languageIndependent = False, 
                        index = 'KeywordIndex', 
                        write_permission = ModifyPortalContent, 
                        widget = ReferenceBrowserWidget( allow_search = True, 
                                                         allow_browse = True, 
                                                         show_indexes = False, 
                                                         force_close_on_insert = True, 
                                                         label = _(u'label_related_items', default=u'Related Items'), 
                                                         description = '', 
                                                         visible = {'edit' : 'visible', 'view' : 'invisible' } 
                                                         ) 
                        )
      
                      ]) 

    #schema = schema + extra_schema 
    security = ClassSecurityInfo()      
    
    archetype_name             = 'MapLayer'
    meta_type                  = 'MapLayer'
    portal_type                = 'MapLayer'
    allowed_content_types      = [] #['LayerField'] 
    filter_content_types       = 1
    global_allow               = 0
    allow_discussion           = 0
    content_icon = "mapService_icon.gif"     

    def __init__(self, id,title=''):
        '''Initialize an instance of the class'''            
        self.id=id            
        self.sampleImage = ''
        self.abstract = ''
        self.keywords = ''        
        self.uniqueName = ''
        self.geometryField = ''
        self.geometryType = ''
        self.title = id
        self.wfsSRS = ''
        self.wmsStyleName = ''
        self.wfsBoundingBox = ''
        self.fields = ''
        self.source = ''
        self.error = ''
        self.wmsQueryable = ''
        self.wmsName = ''
        self.wfsName = ''
        self.wmsSRS = ''
        self.wmsTitle = ''
        self.hasWFSLayer = False
        self.wmsBoundingBox = ''
        self.describeFeatureResponse = ''
        self.availablePermissions = ['Render','Extract']
        self.security = PersistentMapping() # e.g {'Manager':{'Render':0,'Extract':1}}        
        self.wmsXML = ""
        self.wfsXML = ""
        self.organization = ""
        self.reindexObject()
        self._p_changed = 1
        
          
        
##    def manage_afterAdd(self,item, container):
##        """
##        """      
##        self.manage_permission("View", roles=["Owner"], acquire=False)  
##        self.manage_permission("List folder contents", roles=["Owner"], acquire=False)  

    security.declarePublic('userIsOwner')
    def userIsOwner(self):
        """
        @summary: this is a zope specific method to get logged in user name
        @return: boolean, true if logged in user is the owner
        """        
        try:            
            ownerName = self.owner_info()['id']
            member =  self.portal_membership.getAuthenticatedMember()  
            userName = member.getUserName()            
            if userName == ownerName:
                return True
            else:
                return False            
            
        except:
            logger.exception('error')
            return False    
    
    def getSecurity(self):
        """
        @summary: returns the current security definitions dict
        @return: dict containing security info for roles defined in plone
        """            
        return dict(self.security)
    
    def getMetadata(self):
        """
        @summary: gets the metadata template for the layer
        @return: an html interface with metadata information
        """        
        return self.Map_Layer_Details_Stripped(self)
    
    def setSecurityVarOnly(self,securityDict):
        """
        """
        try:
            tmpDict = {}           
            for k in securityDict.keys():
                if k == 'fields':
                    continue
                
                cDict = {}
                if securityDict[k]['Render'] in ['false',0]:
                    cDict['Render'] = 0                
                if securityDict[k]['Render'] in ['true',1]:
                    cDict['Render'] = 1                
                if securityDict[k]['Extract'] in ['false',0]:
                    cDict['Extract'] = 0 
                if securityDict[k]['Extract'] in ['true',1]:
                    cDict['Extract'] = 1
                tmpDict[k] = cDict                
            
            # get a diff between current security settings and the passed security settings
            changed = {}
            for k in tmpDict.keys():
                if not k in self.security.keys():
                    changed[k] = tmpDict[k]   # its a new key
                if k in self.security.keys():
                    if self.security[k]['Render'] != tmpDict[k]['Render']:
                        changed[k] = tmpDict[k]        
            
            self.security = tmpDict        
            # only let the changes be propagated to children 
            
            # get all fields
            fields = []
            items =  self.objectItems()        
            for i in items:
                if i[1].meta_type == 'LayerField':                                
                    fields.append(i[1])                        
            
            for field in fields:
                tmpSec = field.getSecurity()             
                for k in changed.keys():
                    if not tmpSec.has_key(k):
                        tmpSec[k] = {'Render':0}  # add the key if it does not exist
                    tmpSec[k]['Render'] = changed[k]['Render']              
                field.setSecurityVarOnly(tmpSec)          
            return 1
        except:
            logger.exception('error')
    
    def setSecurity(self,securityDict):
        """
        @summary:
        @param securityDict: a dictionary containing permissions defined for certain roles defined in plone 
        """         
        try:
            tmpDict = {}           
            for k in securityDict.keys():
                if k == 'fields':
                    continue
                
                cDict = {}
                if securityDict[k]['Render'] in ['false',0]:
                    cDict['Render'] = 0                
                if securityDict[k]['Render'] in ['true',1]:
                    cDict['Render'] = 1                
                if securityDict[k]['Extract'] in ['false',0]:
                    cDict['Extract'] = 0 
                if securityDict[k]['Extract'] in ['true',1]:
                    cDict['Extract'] = 1
                tmpDict[k] = cDict                
            
            # get a diff between current security settings and the passed security settings
            changed = {}
            for k in tmpDict.keys():
                if not k in self.security.keys():
                    changed[k] = tmpDict[k]   # its a new key
                if k in self.security.keys():
                    if self.security[k]['Render'] != tmpDict[k]['Render']:
                        changed[k] = tmpDict[k]        
            
            self.security = tmpDict        
            # only let the changes be propagated to children 
            
            # get all fields
            fields = []
            items =  self.objectItems()        
            for i in items:
                if i[1].meta_type == 'LayerField':                                
                    fields.append(i[1])                        
            
            for field in fields:
                tmpSec = field.getSecurity()             
                for k in changed.keys():
                    if not tmpSec.has_key(k):
                        tmpSec[k] = {'Render':0}  # add the key if it does not exist
                    tmpSec[k]['Render'] = changed[k]['Render']              
                field.setSecurity(tmpSec)        
            
            self.aq_parent.updateSecurityForSingleLayer(self.uniqueName)        
            return 1        
        except:
            logger.exception('error')
    
    def getSampleImage(self,REQUEST=None):
        """
        @summary: converts the hex encoded image to binary
        @return: sample image in binary format
        """
        try:
            data = binascii.a2b_hex(self.sampleImage) 
            REQUEST.RESPONSE.setHeader("Content-type","image/png")
    
            return data      
        except:
            logger.exception('error')
    
    def pingWMSLayer(self,extent=['23.00','23.00','23.01','23.01']):
        """ 
        """        
        try:
            startTime = time.time()
            layerName = self.wmsName
            source = self.source[1]
            
            layerName = layerName.replace(" ","%20")
            strEnv = "%s,%s,%s,%s" %(extent[0],extent[1],extent[2],extent[3])
            theURL = source + WMS_GETMAP_EXTENSION + "&bbox=%s&styles=&Format=image/png&width=2&height=2&srs=EPSG:4326&layers=%s" %(strEnv,layerName) #"&request=GetLegendGraphic&version=1.0.0&format=%s&width=%s&height=%s&layer=%s" %(format,width,height,layer['wmsName'])        
            data = self._getURLContent(theURL,{})           
            
            if data.find("ServiceExceptionReport") != -1:
                return "Layer Unavailable"
            endTime = time.time()
            return str(endTime - startTime)
        except:
            import traceback
            sio = cStringIO.StringIO()
            traceback.print_exc(file=sio)
            sio.seek(0)
            trace = sio.read()            
            logger.exception('error')
            return MapServerTemplates.ogcServiceException %("Exception occured with _getSampleImage request, check log for details %s" %trace)                            

    def pingWFSLayer(self):
        """
        """        
        if self.hasWFSLayer:
            try:
                startTime = time.time()
                layerName = self.wfsName
                source = self.source[0]                 
                baseURL = source + WFS_DESCRIBEFEATURETYPE_EXTENSION   
                baseURL += "&typename=" + layerName.replace(" ","%20")                 
                data = self._getURLContent(baseURL)    
                
                if (data.find("ServiceException") != -1) or (data.find("ServiceExceptionReport") != -1) or (data.strip() == ""):     
                    return  "Layer Unavailable"  
                
                endTime = time.time()
                return str(endTime - startTime)
            
            except:
                import traceback
                sio = cStringIO.StringIO()
                traceback.print_exc(file=sio)
                sio.seek(0)
                trace = sio.read()
                logger.exception('error')
                return MapServerTemplates.ogcServiceException %("Exception occured with pingWFSLayer request, check log for details %s" %trace)                                   
            
        else:
            return "No WFS Source given."
        
##        if self.hasWFSLayer:
##            try:
##                startTime = time.time()
##                layerName = self.wfsName
##                source = self.source[0]                
##                data = ''
##                baseURL = source + WFS_DESCRIBEFEATURETYPE_EXTENSION
##                baseURL += "&typename=" + layerName.replace(" ","%20") 
##                data = self._getURLContent(baseURL)  
##                if data.find("ServiceExceptionReport") != -1:
##                    return "Layer Unavailable"
##                
##                endTime = time.time()
##                return str(endTime - startTime)
##            except:
##                import traceback
##                sio = cStringIO.StringIO()
##                traceback.print_exc(file=sio)
##                sio.seek(0)
##                trace = sio.read()
##                
##                return MapServerTemplates.ogcServiceException %("Exception occured with pingWFSLayer request, check log for details %s" %trace)                            
##                    
##        else:
##            return "No WFS Source given."
##        
##        return 1
    
    
    def _getURLContent(self,url,data={}):
        """        
        """        
        try:             
            if data:
                if type(data) == unicode:                    
                    data = str(urllib.unquote(data))                                
                if type(data) == str:                    
                    f = urllib.urlopen(url,data)  
                else:
                    params = urllib.urlencode(data)
                    f = urllib.urlopen(url,params) 
            else:
                f = urllib.urlopen(url)        
            data = f.read()
            f.close()        
            return data
        except:
            import traceback
            sio = cStringIO.StringIO()
            traceback.print_exc(file=sio)
            sio.seek(0)
            trace = sio.read()
            logger.exception('error')             
            return MapServerTemplates.ogcServiceException %("Exception occured getURLContent request, check log for details %s" %trace) 
Exemple #22
0
class MapServer(BaseFolder):
    '''Map Server for CoGIS'''
    schema = BaseFolderSchema

    schema = BaseSchema + Schema([
        StringField('description',
                    required=False,
                    searchable=1,
                    widget=StringWidget(
                        label='Description',
                        description="Enter project description")),
        ReferenceField('relatedItems',
                       relationship='relatesTo',
                       multiValued=True,
                       isMetadata=True,
                       languageIndependent=False,
                       index='KeywordIndex',
                       write_permission=ModifyPortalContent,
                       widget=ReferenceBrowserWidget(
                           allow_search=True,
                           allow_browse=True,
                           show_indexes=False,
                           force_close_on_insert=True,
                           label=_(u'label_related_items',
                                   default=u'Related Items'),
                           description='',
                           visible={
                               'edit': 'visible',
                               'view': 'invisible'
                           }))
    ], )

    actions = (
        {
            'id': 'publish',
            'name': 'Publish',
            'action': 'string:${object_url}/Map_Server_PublishAll',
            'permissions': (permissions.ViewManagementScreens, )
        },
        {
            'id': 'pingServer',
            'name': 'Ping Server',
            'action': 'string:${object_url}/Map_Server_PingServer',
            'permissions': (permissions.ViewManagementScreens, )
        },
        {
            'id': 'licenseAgreement',
            'name': 'License Agreement',
            'action': 'string:${object_url}/Map_Server_LicenseAgreement_Edit',
            'permissions': (permissions.ViewManagementScreens, )
        },
    )

    #schema = schema + extra_schema
    content_icon = "mapServer.gif"
    security = ClassSecurityInfo()

    archetype_name = 'MapServer'
    meta_type = 'MapServer'
    portal_type = 'MapServer'
    allowed_content_types = []  #['MapLayer']
    filter_content_types = 1
    global_allow = 0
    allow_discussion = 0
    content_icon = "mapServer.gif"

    def __init__(self, id, title=''):
        '''Initialize an instance of the class'''
        self.id = id
        if title == '':
            self.title = id
        else:
            self.title = title

        self.organization = ""
        self.wmsSource = ""
        self.wfsSource = ""
        self.enableLicenseAgreement = False
        # licenseAgreent is the text to display in the tbx
        self.licenseAgreement = "Put the license text here \nPlease read license before publishing"
        # its a list of usernames that have accepted the license agreement
        self.acceptedUserNames = []

    def dummyTest(self):
        """
        """
        return dir(self)

    def updateLicenseAgreement(self, REQUEST=None):
        """
        @summary: udpate the server license agreement and disables/enables the agreement
        """
        try:
            self.acceptedUserNames = []

            if REQUEST.has_key('enableIt'):
                enable = True
            else:
                enable = False

            licenseText = REQUEST.form['licenseText']

            self.enableLicenseAgreement = enable
            self.licenseAgreement = licenseText

            self._p_changed = 1
            transaction.savepoint(True)

            status_message = "License Agreement Updated"

            REQUEST.RESPONSE.redirect(
                "%s/Map_Server_LicenseAgreement_Edit?portal_status_message=%s"
                % (self.absolute_url(), status_message))
        except:
            logger.exception('failed updateLicenseAgreement')

    security.declarePublic('userIsOwner')

    def userIsOwner(self):
        """
        @summary: this is a zope specific method to get logged in user name
        @return: boolean, true if logged in user is the owner
        """
        try:
            ownerName = self.owner_info()['id']
            member = self.portal_membership.getAuthenticatedMember()
            userName = member.getUserName()
            if userName == ownerName:
                return True
            else:
                return False
        except:
            logger.exception('failed user is owner')

    def publishLayersForRoles(self, rolesToPublish):
        """
        @summary : publishes layer for the given roles passed
        @param   : a list of roles to publish layers for
        """

        try:
            items = self.objectItems()
            for i in items:
                if i[1].meta_type == 'MapLayer':
                    l = i[1]
                    secStruct = l.setSecurity(
                        self.getPublishedStructureForRoles(rolesToPublish))
            return 1
        except:
            logger.exception('failed publishLayersForRoles')

    def publishAllLayers(self):
        """
        @summary: this will publish all the layers in the server
        @return: 1
        """

        try:
            items = self.objectItems()
            for i in items:
                if i[1].meta_type == 'MapLayer':
                    l = i[1]
                    secStruct = l.setSecurity(
                        self.getPublishedSecurityStructure())
            return 1
        except:
            logger.exception('failed publishAllLayers')

    def retractAllLayers(self):
        """
        @summary: this will retract all the layers in the server
        @return: 1
        """

        try:
            items = self.objectItems()
            for i in items:
                if i[1].meta_type == 'MapLayer':
                    l = i[1]
                    secStruct = l.setSecurity(
                        self.getRetractedSecurityStructure())
            return 1
        except:
            logger.exception('failed retractAllLayers')

    def pingServer(self):
        """
        """
        try:
            startTime = time.time()
            wmsPingRes = self._getURLContent(self.wmsSource)
            endTime = time.time()
            wmsTime = endTime - startTime
            if wmsPingRes.find("Exception occured") != -1:
                wmsTime = "Server Unavailable"

            startTime = time.time()
            wfsPingRes = self._getURLContent(self.wfsSource)
            endTime = time.time()
            wfsTime = endTime - startTime
            if wfsPingRes.find("Exception occured") != -1:
                wfsTime = "Server Unavailable"

            return [str(wfsTime), str(wmsTime)]
        except:
            logger.exception('failed pingServer')

    def pingAllLayers(self):
        """
        """
        try:
            results = {}
            items = self.objectItems()
            for i in items:
                layer = i[1]
                pingResWMS = layer.pingWMSLayer()
                pingResWFS = layer.pingWFSLayer()
                results[layer.uniqueName] = [pingResWFS, pingResWMS]
            return results
        except:
            logger.exception('error')

    def getPublishedSecurityStructure(self):
        """
        @summary: builds a security structure that will expose all layers
        @return: a dictionary with all the roles as keys and another dict as value
        """
        try:
            roles = self.validRoles()
            tmpDict = {}
            for role in roles:
                tmpDict[role] = {'Render': 1, 'Extract': 1}
            return tmpDict
        except:
            logger.exception('failed getPublishedSercurityStructure')

    def getPublishedStructureForRoles(self, theRoles):
        """
        """
        try:
            roles = self.validRoles()
            tmpDict = {}
            for role in roles:
                if role in theRoles:
                    tmpDict[role] = {'Render': 1, 'Extract': 1}
                else:
                    tmpDict[role] = {'Render': 0, 'Extract': 0}
            return tmpDict
        except:
            logger.exception('Error')

    def getRetractedSecurityStructure(self):
        """
        @summary: builds a security structure that will expose all layers
        @return: a dictionary with all the roles as keys and another dict as value
        """
        try:
            roles = self.validRoles()
            tmpDict = {}
            for role in roles:
                tmpDict[role] = {'Render': 0, 'Extract': 0}
            return tmpDict
        except:
            logger.exception('Error')

    def _getURLContent(self, url, data={}):
        """        
        """
        try:
            if data:
                if type(data) == unicode:
                    data = str(urllib.unquote(data))
                if type(data) == str:
                    f = urllib.urlopen(url, data)
                else:
                    params = urllib.urlencode(data)
                    f = urllib.urlopen(url, params)
            else:
                f = urllib.urlopen(url)
            data = f.read()
            f.close()
            return data
        except:
            import traceback
            sio = StringIO.StringIO()
            traceback.print_exc(file=sio)
            sio.seek(0)
            trace = sio.read()
            logger.exception('Error')
            return MapServerTemplates.ogcServiceException % (
                "Exception occured getURLContent request, check log for details %s"
                % trace)
Exemple #23
0
from bika.lims.exportimport import instruments
from bika.lims.interfaces import IInstrument, IDeactivable
from bika.lims.content.bikaschema import BikaSchema
from bika.lims.content.bikaschema import BikaFolderSchema
from bika.lims import bikaMessageFactory as _

schema = BikaFolderSchema.copy() + BikaSchema.copy() + Schema((
    ReferenceField(
        'InstrumentType',
        vocabulary='getInstrumentTypes',
        allowed_types=('InstrumentType', ),
        relationship='InstrumentInstrumentType',
        required=1,
        widget=ReferenceWidget(
            label=_("Instrument type"),
            showOn=True,
            catalog_name='bika_setup_catalog',
            base_query={
                "is_active": True,
                "sort_on": "sortable_title",
                "sort_order": "ascending",
            },
        ),
    ),
    ReferenceField(
        'Manufacturer',
        allowed_types=('Manufacturer', ),
        relationship='InstrumentManufacturer',
        required=1,
        widget=ReferenceWidget(
            label=_("Manufacturer"),
Exemple #24
0
     widget = SelectionWidget(
         label=_("Multi Verification type"),
         description = _(
             "Choose type of multiple verification for the same user."
             "This setting can enable/disable verifying/consecutively verifying"
             "more than once for the same user."),
         format='select',
     )
 ),
 ReferenceField(
     'DryMatterService',
     schemata="Analyses",
     required=0,
     vocabulary_display_path_bound=sys.maxint,
     allowed_types=('AnalysisService',),
     relationship='SetupDryAnalysisService',
     vocabulary='getAnalysisServices',
     referenceClass=HoldingReference,
     widget=ReferenceWidget(
         label=_("Dry matter analysis"),
         description=_("The analysis to be used for determining dry matter."),
     )
 ),
 LinesField(
     'ARImportOption',
     schemata="Analyses",
     vocabulary=ARIMPORT_OPTIONS,
     widget=MultiSelectionWidget(
         visible=False,
         label=_("AR Import options"),
         description=_(
             "'Classic' indicates importing analysis requests per sample and "
Exemple #25
0
    def test_multiple_widgets(self):
        from zope.event import notify
        from Products.Archetypes.Widget import RelatedItemsWidget
        from zope.interface import implements
        from zope.lifecycleevent import ObjectCreatedEvent
        from plone.uuid.interfaces import IUUID
        from plone.uuid.interfaces import IAttributeUUID

        class ExampleContent(object):
            implements(IAttributeUUID)

        obj1 = ExampleContent()
        obj2 = ExampleContent()
        notify(ObjectCreatedEvent(obj1))
        notify(ObjectCreatedEvent(obj2))

        with mock.patch('plone.app.widgets.utils.getUtility') as mock_method:
            self.context.fieldvalue = lambda: obj1

            field1 = ReferenceField(
                'fieldname1',
                relationship="A",
                multiValued=False,
                widget=RelatedItemsWidget(),
            )
            field1.accessor = "fieldvalue"

            self.assertEqual(
                {
                    'name': 'fieldname1',
                    'value': '{}'.format(IUUID(obj1)),
                    'pattern': 'relateditems',
                    'pattern_options': {
                        'folderTypes': ['Folder'],
                        'homeText': u'Home',
                        'separator': ';',
                        'orderable': True,
                        'searchAllText': u'Entire site',
                        'searchText': u'Search',
                        'maximumSelectionSize': 1,
                        'vocabularyUrl': '/@@getVocabulary?name='
                                         'plone.app.vocabularies.Catalog'
                                         '&field=fieldname1',
                    },
                },
                field1.widget._base_args(self.context, field1, self.request),
            )

            field2 = ReferenceField(
                'fieldname2',
                relationship="A",
                multiValued=True,
                widget=RelatedItemsWidget(),
            )
            field2.accessor = "fieldvalue"
            self.context.fieldvalue = lambda: [obj1, obj2]

            self.assertEqual(
                {
                    'name': 'fieldname2',
                    'value': '{};{}'.format(IUUID(obj1), IUUID(obj2)),
                    'pattern': 'relateditems',
                    'pattern_options': {
                        'folderTypes': ['Folder'],
                        'homeText': u'Home',
                        'separator': ';',
                        'orderable': True,
                        'searchAllText': u'Entire site',
                        'searchText': u'Search',
                        'maximumSelectionSize': -1,
                        'vocabularyUrl': '/@@getVocabulary?name='
                                         'plone.app.vocabularies.Catalog'
                                         '&field=fieldname2',
                    },
                },
                field2.widget._base_args(self.context, field2, self.request),
            )
Exemple #26
0
              ),
              required=True,
              accessor="Description"),
    StringField(name='email',
                widget=StringWidget(
                    label="Email address",
                    label_msgid='EEAEnquiry_label_email',
                    i18n_domain='EEAEnquiry',
                ),
                required=1,
                validators=('isEmail', )),
    ReferenceField(name='enquiryRequestor',
                   widget=ReferenceWidget(
                       label='Enquiryrequestor',
                       label_msgid='EEAEnquiry_label_enquiryRequestor',
                       i18n_domain='EEAEnquiry',
                   ),
                   allowed_types=('EnquiryRequestor', ),
                   multiValued=0,
                   relationship='enquriyRequestor'),
), )

schema['enquiryRequestor'].widget.visible = {'edit': 'invisible'}

Enquiry_schema = BaseSchema.copy() + \
    schema.copy()


class Enquiry(BaseContent):
    """ Enquiry
    """
from Products.Archetypes.atapi import Schema
from Products.Archetypes.atapi import ReferenceField
from Products.Archetypes.atapi import StringField
from Products.Archetypes.atapi import SelectionWidget
from Products.ATReferenceBrowserWidget.ATReferenceBrowserWidget import ReferenceBrowserWidget
from Products.CMFCore.permissions import ManagePortal
from Products.PloneTemplates.config import TEMPLATE_INHERIT_MODE

PloneTemplatesMixinSchema = Schema(
    (ReferenceField('templates',
                    multiValued=True,
                    write_permission=ManagePortal,
                    allowed_types=('Template', ),
                    schemata='Templates',
                    relationship='EnablesTemplate',
                    widget=ReferenceBrowserWidget(
                        label_msgid="label_templates",
                        description_msgid="help_templates",
                        i18n_domain="PloneTemplates",
                        force_close_on_insert=True,
                        label="",
                        populate=1,
                        description="")),
     StringField('inheritTemplates',
                 vocabulary=TEMPLATE_INHERIT_MODE,
                 default='1',
                 write_permission=ManagePortal,
                 enforceVocabulary=True,
                 schemata='Templates',
                 widget=SelectionWidget(
                     label_msgid="label_inheritTemplates",
                     description_msgid="help_inheritTemplates",
Exemple #28
0
             "Description of the actions made during the validation"),
     ),
 ),
 ReferenceField(
     'Worker',
     vocabulary='getLabContacts',
     allowed_types=('LabContact', ),
     relationship='LabContactInstrumentValidation',
     widget=ReferenceWidget(
         checkbox_bound=0,
         label=_("Performed by"),
         description=_("The person at the supplier who performed the task"),
         size=30,
         base_query={'inactive_state': 'active'},
         showOn=True,
         colModel=[{
             'columnName': 'UID',
             'hidden': True
         }, {
             'columnName': 'JobTitle',
             'width': '20',
             'label': _('Job Title')
         }, {
             'columnName': 'Title',
             'width': '80',
             'label': _('Name')
         }],
     ),
 ),
 StringField('ReportID',
             widget=StringWidget(
                 label=_("Report ID"),
Exemple #29
0
from bika.lims.utils import to_utf8
from bika.lims.config import PROJECTNAME
from bika.lims.interfaces import IInstrument
from bika.lims.config import QCANALYSIS_TYPES
from bika.lims import bikaMessageFactory as _
from bika.lims.content.bikaschema import BikaSchema
from bika.lims.content.bikaschema import BikaFolderSchema

schema = BikaFolderSchema.copy() + BikaSchema.copy() + Schema((
    ReferenceField(
        'InstrumentType',
        vocabulary='getInstrumentTypes',
        allowed_types=('InstrumentType', ),
        relationship='InstrumentInstrumentType',
        required=1,
        widget=SelectionWidget(format='select',
                               label=_("Instrument type"),
                               visible={
                                   'view': 'invisible',
                                   'edit': 'visible'
                               }),
    ),
    ReferenceField(
        'Manufacturer',
        vocabulary='getManufacturers',
        allowed_types=('Manufacturer', ),
        relationship='InstrumentManufacturer',
        required=1,
        widget=SelectionWidget(format='select',
                               label=_("Manufacturer"),
                               visible={