def setUp(self):
        self.app = self.layer['app']
        self.portal = self.layer['portal']
        setRoles(self.portal, TEST_USER_ID, ['Manager'])

        self.portal.invokeFactory("Document", "doc")
        self.doc = self.portal.doc
        alsoProvides(self.doc, IGeoreferenceable)
        geo = IWriteGeoreferenced(self.doc)
        geo.setGeoInterface('Point', (5.683, 50.643))
        self.doc.reindexObject(idxs=['zgeo_geometry', 'collective_geo_styles'])

        self.portal.invokeFactory("Document", "doc2")
        self.doc2 = self.portal.doc2
        alsoProvides(self.doc2, IGeoreferenceable)
        geo2 = IWriteGeoreferenced(self.doc2)
        geo2.setGeoInterface('Point', (5.583, 50.633))
        self.doc2.reindexObject(idxs=['zgeo_geometry', 'collective_geo_styles'])

        self.portal.invokeFactory("Collection", "collection")
        self.collection = self.portal.collection
        query = [{'i': 'portal_type',
                  'o': 'plone.app.querystring.operation.selection.is',
                  'v': ['Document']}]
        self.collection.setQuery(query)
class TestDocument(unittest.TestCase):

    layer = INTEGRATION

    def setUp(self):
        self.app = self.layer['app']
        self.portal = self.layer['portal']
        setRoles(self.portal, TEST_USER_ID, ['Manager'])
        self.portal.invokeFactory("Document", "doc")
        self.doc = self.portal.doc
        alsoProvides(self.doc, IGeoreferenceable)
        self.geo = IWriteGeoreferenced(self.doc)
        self.geo.setGeoInterface('Point', (5.583, 50.633))
        self.doc.reindexObject(idxs=['zgeo_geometry', 'collective_geo_styles'])

    def test_view(self):
        geojson_view = getMultiAdapter(
            (self.doc, self.doc.REQUEST),
            name='geo-json.json'
        )
        geojson = geojson_view.__of__(self.portal)()
        self.failUnless(geojson)
        self.assertTrue('{"type": "Point", "coordinates": [5.583, 50.633]}' in geojson)

    def test_custom_styles(self):

        registry = getUtility(IRegistry)
        registry['collective.geo.settings.interfaces.IGeoFeatureStyle.linewidth'] = float(3.0)

        manager = IGeoFeatureStyle(self.doc, None)
        manager.set('use_custom_styles', False)
        manager.set('linewidth', float(11.0))
        self.doc.reindexObject(idxs=['zgeo_geometry', 'collective_geo_styles'])
        geojson_view = getMultiAdapter(
            (self.doc, self.doc.REQUEST),
            name='geo-json.json'
        )
        geojson = geojson_view.__of__(self.portal)()
        self.assertTrue('"width": 3.0' in geojson)

        manager.set('use_custom_styles', True)
        self.doc.reindexObject(idxs=['zgeo_geometry', 'collective_geo_styles'])
        geojson_view = getMultiAdapter(
            (self.doc, self.doc.REQUEST),
            name='geo-json.json'
        )
        geojson = geojson_view.__of__(self.portal)()
        self.assertTrue('"width": 11.0' in geojson)

    def test_marker_image(self):
        manager = IGeoFeatureStyle(self.doc, None)
        manager.set('marker_image', 'test.png')
        manager.set('use_custom_styles', True)
        geojson_view = getMultiAdapter(
            (self.doc, self.doc.REQUEST),
            name='geo-json.json'
        )
        geojson = geojson_view.__of__(self.portal)()
        self.assertTrue('"image": "http://nohost/plone/test.png"' in geojson)
Esempio n. 3
0
 def coordinates(self, value):
     if value:
         try:
             from shapely import wkt
             geom = wkt.loads(value)
         except ImportError:
             from pygeoif.geometry import from_wkt
             geom = from_wkt(value)
         coords = geom.__geo_interface__
         geo = IWriteGeoreferenced(self.context)
         geo.setGeoInterface(coords['type'], coords['coordinates'])
def create_base_content(portal):
    setRoles(portal, TEST_USER_ID, ['Manager'])
    _id = portal.invokeFactory(
        'Folder', 'folder',
        title='Folder',
        description="Collective geo test container"
    )
    folder = portal.get(_id)

    # set default view for folder
    folder.setLayout('kml-openlayers')

    behavior = 'collective.geo.behaviour.interfaces.ICoordinates'
    fti = portal.portal_types.get('Document')
    behaviors = list(fti.behaviors)
    behaviors.append(behavior)
    behaviors = tuple(behaviors)
    fti._updateProperty('behaviors', behaviors)

    # create topic
    # topic_id = folder.invokeFactory('Topic', 'topic', title="Test Topic")
    # topic = folder[topic_id]

    # c = topic.addCriterion('getId', 'ATSimpleStringCriterion')
    # c.setValue('doc')

    # create collection
    collection_id = folder.invokeFactory(
        'Collection',
        'collection',
        title="Test Collection")
    collection = folder[collection_id]
    query = [{
        'i': 'getId',
        'o': 'plone.app.querystring.operation.string.is',
        'v': 'doc'
    }]
    collection.setQuery(query)

    # create document and georeference it
    doc_id = folder.invokeFactory(
        'Document',
        'doc',
        title='Test document',
        description='A test document')

    doc = folder[doc_id]
    # alsoProvides(doc, IGeoreferenceable)

    geo = IWriteGeoreferenced(doc)
    geo.setGeoInterface('Point', (-105, 40))
    doc.reindexObject(idxs=['zgeo_geometry'])

    setRoles(portal, TEST_USER_ID, ['Member'])
Esempio n. 5
0
def make_contents(container):
    directories = {
        'Sports': {
            'Football': {
                'FC Mornimont': {'lat': 4.7143225, 'lon': 50.45635089999998},
                'RFC Mornimont': {'lat': 4.7243225, 'lon': 50.45635089999998},
            },
            'Hockey': {
                'Mornimont HC': {'lat': 4.7343225, 'lon': 50.45635089999998},
            },
        },
        'Assosiations': {
            'Divers': {
                'Scouts': {'lat': 4.7443225, 'lon': 50.45635089999998},
                'Patro': {'lat': 4.7543225, 'lon': 50.45635089999998},
            }
        },
    }
    for directory_title in directories.keys():
        directory_folder = api.content.create(
            container=container,
            type="collective.directory.directory",
            title=directory_title,
        )
        api.content.transition(obj=directory_folder, transition='publish')
        categories = directories[directory_title]
        for category_title in categories.keys():
            category_folder = api.content.create(
                container=directory_folder,
                type="collective.directory.category",
                title=category_title,
            )
            api.content.transition(obj=category_folder, transition='publish')
            cards = categories[category_title]
            for card_title in cards.keys():
                card = cards[card_title]
                card_container = api.content.create(
                    container=category_folder,
                    type="collective.directory.card",
                    title=card_title,
                )
                api.content.transition(
                    obj=card_container,
                    transition='publish'
                )
                geo = IWriteGeoreferenced(card_container)
                geo.setGeoInterface('Point', (card['lat'], card['lon']))
                card_container.reindexObject(idxs=['zgeo_geometry', 'collective_geo_styles'])
Esempio n. 6
0
def create_base_content(portal):
    setRoles(portal, TEST_USER_ID, ['Manager'])
    _id = portal.invokeFactory('Folder',
                               'folder',
                               title='Folder',
                               description="Collective geo test container")
    folder = portal.get(_id)

    # set default view for folder
    folder.setLayout('kml-openlayers')

    # create topic
    topic_id = folder.invokeFactory('Topic', 'topic', title="Test Topic")
    topic = folder[topic_id]

    c = topic.addCriterion('getId', 'ATSimpleStringCriterion')
    c.setValue('doc')

    # create collection
    collection_id = folder.invokeFactory('Collection',
                                         'collection',
                                         title="Test Collection")
    collection = folder[collection_id]
    query = [{
        'i': 'getId',
        'o': 'plone.app.querystring.operation.string.is',
        'v': 'doc'
    }]
    collection.setQuery(query)

    # create document and georeference it
    doc_id = folder.invokeFactory('Document',
                                  'doc',
                                  title='Test document',
                                  description='A test document')

    doc = folder[doc_id]
    # alsoProvides(doc, IGeoreferenceable)

    geo = IWriteGeoreferenced(doc)
    geo.setGeoInterface('Point', (-105, 40))
    doc.reindexObject(idxs=['zgeo_geometry'])

    setRoles(portal, TEST_USER_ID, ['Member'])
    def setUp(self):
        self.app = self.layer['app']
        self.portal = self.layer['portal']
        setRoles(self.portal, TEST_USER_ID, ['Manager'])

        self.portal.invokeFactory("Folder", "folder")
        self.folder = self.portal.folder

        self.folder.invokeFactory("Document", "doc")
        self.doc = self.folder.doc
        alsoProvides(self.doc, IGeoreferenceable)
        geo = IWriteGeoreferenced(self.doc)
        geo.setGeoInterface('Point', (5.683, 50.643))
        self.doc.reindexObject(idxs=['zgeo_geometry', 'collective_geo_styles'])

        self.folder.invokeFactory("Document", "doc2")
        self.doc2 = self.folder.doc2
        alsoProvides(self.doc2, IGeoreferenceable)
        geo2 = IWriteGeoreferenced(self.doc2)
        geo2.setGeoInterface('Point', (5.583, 50.633))
        self.doc2.reindexObject(idxs=['zgeo_geometry', 'collective_geo_styles'])
Esempio n. 8
0
def create_base_content(portal):
    setRoles(portal, TEST_USER_ID, ['Manager'])
    _id = portal.invokeFactory('Folder', 'folder', title='Folder')
    folder = portal.get(_id)

    # create topic
    topic_id = folder.invokeFactory('Topic', 'topic', title="Test Topic")
    topic = folder[topic_id]

    c = topic.addCriterion('getId', 'ATSimpleStringCriterion')
    c.setValue('doc')

    # create collection
    collection_id = folder.invokeFactory(
        'Collection',
        'collection',
        title="Test Collection")
    collection = folder[collection_id]
    query = [{
        'i': 'getId',
        'o': 'plone.app.querystring.operation.string.is',
        'v': 'doc'
    }]
    collection.setQuery(query)

    # create document and georeference it
    doc_id = folder.invokeFactory(
        'Document',
        'doc',
        title='Test document',
        description='A test document')

    doc = folder[doc_id]
    # alsoProvides(doc, IGeoreferenceable)

    geo = IWriteGeoreferenced(doc)
    geo.setGeoInterface('Point', (-105, 40))
    doc.reindexObject(idxs=['zgeo_geometry'])

    setRoles(portal, TEST_USER_ID, ['Member'])
    def test_jsonview_card_in_card(self):
        self.folder.invokeFactory('collective.directory.directory', 'directory1')
        directory1 = self.folder.get('directory1')
        directory1.invokeFactory('collective.directory.category', 'category1')
        category1 = directory1.get('category1')
        category1.invokeFactory('collective.directory.card', 'card1')
        card1 = category1.get('card1')
        card1.invokeFactory('collective.directory.card', 'card2')
        card2 = card1.get('card2')

        alsoProvides(card1, IGeoreferenceable)
        alsoProvides(card2, IGeoreferenceable)
        geo1 = IWriteGeoreferenced(card1)
        geo2 = IWriteGeoreferenced(card2)

        geo1.setGeoInterface('Point', (5.583, 50.633))
        geo2.setGeoInterface('Point', (5.593, 50.643))
        card1.reindexObject(idxs=['zgeo_geometry', 'collective_geo_styles'])
        card2.reindexObject(idxs=['zgeo_geometry', 'collective_geo_styles'])

        d1 = self.folder['directory1']
        view = d1.restrictedTraverse('@@json.js')
        js = view.get_categories()
        self.assertIn('"coordinates": [5.593, 50.643]', js)
    def test_bounds_widget_adapter(self):
        # data = Criterion()
        form = {
            'north': '51.00000',
            'east': '6.000',
            'south': '49.000',
            'west': '5.000'
        }
        widget = WidgetFilterBrains(self.folder)
        # document and event have ICoordinates behavior
        event = api.content.create(container=self.portal,
                                   id='event',
                                   type='Event')
        doc = api.content.create(container=self.portal,
                                 id='doc',
                                 type='Document')
        geo_doc = IWriteGeoreferenced(doc)
        geo_event = IWriteGeoreferenced(event)
        geo_doc.setGeoInterface('Point', (5.583, 50.633))
        geo_event.setGeoInterface('Point', (5.73, 50.933))
        doc.reindexObject(idxs=['zgeo_geometry', 'collective_geo_styles'])
        event.reindexObject(idxs=['zgeo_geometry', 'collective_geo_styles'])
        # import ipdb; ipdb.set_trace()
        portal_catalog = api.portal.get_tool('portal_catalog')
        query = {}
        query['portal_type'] = ['Event', 'Document']
        brains = portal_catalog(query)
        gen = widget(brains, form)
        geo_brains = [g for g in gen]
        self.assertEqual(len(geo_brains), 2)

        geo_event.setGeoInterface('Point', (6.73, 50.933))
        event.reindexObject(idxs=['zgeo_geometry', 'collective_geo_styles'])
        brains = portal_catalog(query)
        gen = widget(brains, form)
        geo_brains = [g for g in gen]
        self.assertEqual(len(geo_brains), 1)

        geo_doc.setGeoInterface('Point', (5.583, 52.633))
        doc.reindexObject(idxs=['zgeo_geometry', 'collective_geo_styles'])
        brains = portal_catalog(query)
        gen = widget(brains, form)
        geo_brains = [g for g in gen]
        self.assertEqual(len(geo_brains), 0)
class TestGeomap(unittest.TestCase):
    layer = INTEGRATION

    def setUp(self):
        self.portal = self.layer['portal']
        setRoles(self.portal, TEST_USER_ID, ['Manager'])
        self.portal.invokeFactory("Document", "doc")
        self.doc = self.portal.doc
        alsoProvides(self.doc, IGeoreferenceable)
        self.geo = IWriteGeoreferenced(self.doc)
        self.geo.setGeoInterface('Point', (5.583, 50.633))
        self.doc.reindexObject(idxs=['zgeo_geometry', 'collective_geo_styles'])

    def test_init_geomap(self):
        geomap = GeoMap(self.portal, self.portal.REQUEST)
        self.assertFalse(geomap.has_map)

        geomap = GeoMap(self.doc, self.doc.REQUEST)
        self.assertTrue(geomap.has_map)

    def test_geo_feature_style(self):
        geomap = GeoMap(self.doc, self.doc.REQUEST)

        geo_feature_style = geomap.geo_feature_style
        self.assertEqual(
            geo_feature_style['marker_image'],
            "http://nohost/plone/++resource++collective.js.leaflet/images/marker-icon.png",
            'Incorect default marker image url')

        registry = getUtility(IRegistry)
        registry['collective.geo.settings.interfaces.IGeoFeatureStyle.linewidth'] = float(3.0)

        manager = IGeoFeatureStyle(self.doc, None)
        manager.set('use_custom_styles', False)
        manager.set('linewidth', float(11.0))
        self.doc.reindexObject(idxs=['zgeo_geometry', 'collective_geo_styles'])

        geomap = GeoMap(self.doc, self.doc.REQUEST)
        geo_feature_style = geomap.geo_feature_style

        self.assertEqual(geo_feature_style["linewidth"], 3.0)

        manager.set('use_custom_styles', True)
        self.doc.reindexObject(idxs=['zgeo_geometry', 'collective_geo_styles'])

        geomap = GeoMap(self.doc, self.doc.REQUEST)
        geo_feature_style = geomap.geo_feature_style

        self.assertEqual(geo_feature_style["linewidth"], 11.0)

    def test_geo_settings(self):
        geomap = GeoMap(self.doc, self.doc.REQUEST)
        geo_settings = geomap.geo_settings
        self.assertIn(u'osm', geo_settings['default_layers'])

    def test_default_layers(self):
        geomap = GeoMap(self.doc, self.doc.REQUEST)
        baselayers = json.loads(geomap.default_layers()['baselayers'])
        keys = [key['name'] for key in baselayers]
        self.assertIn('osm', keys)

    def test_inline_style(self):
        geomap = GeoMap(self.doc, self.doc.REQUEST)
        self.assertEqual(geomap.inline_style(), 'width: 100%;height: 600px')

    def test_coordinates(self):
        geomap = GeoMap(self.doc, self.doc.REQUEST)
        self.assertEqual(geomap.coordinates[0], 'Point')
        self.assertEqual(geomap.coordinates[1], (5.583, 50.633))
 def setCoordinates(self, type, coords):
     if (self.isGeoreferenceable()):
         geo = IWriteGeoreferenced(self.context)
         geo.setGeoInterface(type, coords)
 def setCoordinates(self, type, coords):
     if(self.isGeoreferenceable()):
         geo = IWriteGeoreferenced(self.context)
         geo.setGeoInterface(type, coords)