Changeset 360

Show
Ignore:
Timestamp:
07/04/06 04:59:15
Author:
piv
Message:

added Map, Overlay functionality

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • qPloneGoogleMaps/trunk/Extensions/Install.py

    r359 r360  
    55from Products.CMFCore.DirectoryView import addDirectoryViews 
    66 
     7from Products.Archetypes.Extensions.utils import installTypes 
     8from Products.Archetypes.public import listTypes 
     9 
    710from Products.qPloneGoogleMaps.config import * 
     11 
     12def installContentTypes(self, out): 
     13    """ Install new portal types and add to the portal_factory """ 
     14 
     15    typesInfo = listTypes(PROJECTNAME) 
     16    installTypes(self, out, typesInfo, PROJECTNAME) 
     17    out.write("Installed types\n") 
     18 
     19    factory_tool = getToolByName(self, 'portal_factory') 
     20    types = factory_tool.getFactoryTypes().keys() 
     21    for item in NEW_PORTAL_TYPES: 
     22        if item not in types: 
     23            types.append(item) 
     24            factory_tool.manage_setPortalFactoryTypes(listOfTypeIds = types) 
     25            out.write('Added %s portal type to portal_factory\n' % item) 
    826 
    927def addTopicMapView(self, out, view): 
     
    1230    portal_types = getToolByName(self, 'portal_types', None) 
    1331    if portal_types is not None: 
    14         fti = getattr(portal_types, 'Topic', None) 
    15         if fti is not None: 
    16             views = list(getattr(fti, 'view_methods')) 
    17             if view not in views: 
    18                 views.append(view) 
    19                 fti.manage_changeProperties(view_methods = tuple(views)) 
    20                 out.write("Added new view template to 'Topic' FTI.\n") 
     32        for tp in ['Folder', 'Large Plone Folder', 'Topic']: 
     33            fti = getattr(portal_types, tp, None) 
     34            if fti is not None: 
     35                views = list(getattr(fti, 'view_methods')) 
     36                if view not in views: 
     37                    views.append(view) 
     38                    fti.manage_changeProperties(view_methods = tuple(views)) 
     39                    out.write("Added new view template to '%s' FTI.\n" % tp) 
    2140 
    2241def removeTopicMapView(self, out, view): 
     
    2544    portal_types = getToolByName(self, 'portal_types', None) 
    2645    if portal_types is not None: 
    27         fti = getattr(portal_types, 'Topic', None) 
    28         if fti is not None: 
    29             views = list(getattr(fti, 'view_methods')) 
    30             if view in views: 
    31                 views.remove(view) 
    32                 fti.manage_changeProperties(view_methods = tuple(views)) 
    33                 out.write("Removed maps view template from 'Topic' FTI.\n") 
     46        for tp in ['Folder', 'Large Plone Folder', 'Topic']: 
     47            fti = getattr(portal_types, tp, None) 
     48            if fti is not None: 
     49                views = list(getattr(fti, 'view_methods')) 
     50                if view in views: 
     51                    views.remove(view) 
     52                    fti.manage_changeProperties(view_methods = tuple(views)) 
     53                    out.write("Removed maps view template from '%s' FTI.\n" % tp) 
    3454 
    3555def addPortlet(self, out, slot): 
     
    94114    out = StringIO() 
    95115 
     116    # installin content types 
     117    installContentTypes(self, out) 
     118 
    96119    # add portlet to right slot 
    97120    addPortlet(self, out, 'here/portlet_maps/macros/portlet') 
     
    102125    # setup skin layer 
    103126    out.write('setupSkin... \n') 
    104     setupSkin(self, out, PROJECT_NAME) 
     127    setupSkin(self, out, PROJECTNAME) 
    105128 
    106129    return out.getvalue() 
     
    118141 
    119142    # remove skin layer 
    120     removeSkin(self, [PROJECT_NAME,]) 
     143    removeSkin(self, [PROJECTNAME,]) 
    121144 
    122145    return out.getvalue() 
  • qPloneGoogleMaps/trunk/TODO.txt

    r359 r360  
    44#  * centering, zooming 
    55   
    6   * folder view 
     6#  * folder view 
     7 
     8   * marker functionality 
  • qPloneGoogleMaps/trunk/__init__.py

    r359 r360  
     1from AccessControl import allow_module 
     2 
    13from Products.CMFCore.DirectoryView import registerDirectory 
     4from Products.CMFCore import utils 
    25 
    3 from Products.qPloneGoogleMaps.config import SKINS_DIR, GLOBALS 
     6from Products.Archetypes.public import process_types 
     7from Products.Archetypes import listTypes 
     8 
     9from Products.qPloneGoogleMaps.config import * 
     10 
     11allow_module('Products.qPloneGoogleMaps.config') 
    412 
    513registerDirectory(SKINS_DIR, GLOBALS) 
     14 
     15def initialize(context): 
     16    from content import Map, Marker, Overlay 
     17 
     18    content_types, constructors, ftis = process_types(listTypes(PROJECTNAME), PROJECTNAME) 
     19 
     20    utils.ContentInit(PROJECTNAME + ' Content', 
     21        content_types      = content_types, 
     22        permission         = DEFAULT_ADD_CONTENT_PERMISSION, 
     23        extra_constructors = constructors, 
     24        fti                = ftis).initialize(context) 
  • qPloneGoogleMaps/trunk/config.py

    r359 r360  
    1 PROJECT_NAME = 'qPloneGoogleMaps' 
     1from Products.CMFCore.CMFCorePermissions import setDefaultRoles 
    22 
     3PROJECTNAME = 'qPloneGoogleMaps' 
     4 
     5DEFAULT_ADD_CONTENT_PERMISSION = "Add portal content" 
    36GLOBALS = globals() 
    47SKINS_DIR = 'skins' 
    58 
    6 MAP_KEY = 'ABQIAAAAPKXXAksH6LF9wD3-iB3Z9hTb-vLQlFZmc2N8bgWI8YDPp5FEVBSikjDVULf3tCyc8gRIqTf-_TRyPw' 
     9NEW_PORTAL_TYPES = ['Map', 'Marker', 'Overlay'] 
     10 
     11#MAP_API_KEY = 'ABQIAAAAPKXXAksH6LF9wD3-iB3Z9hTb-vLQlFZmc2N8bgWI8YDPp5FEVBSikjDVULf3tCyc8gRIqTf-_TRyPw' 
     12 
     13MAP_API_KEY = 'ABQIAAAAPKXXAksH6LF9wD3-iB3Z9hR-_Derz1M-sZYUdeXG3J1uZOMrKxT98efydo7fhYu6kuaFv5ESjlw4mw' 
     14 
     15setDefaultRoles(DEFAULT_ADD_CONTENT_PERMISSION, ('Manager', 'Owner',)) 
  • qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/maps_markers.py

    r359 r360  
    55##bind script=script 
    66##bind subpath=traverse_subpath 
    7 ##parameters= longlat=[], node, controls=False, events=False 
     7##parameters= longlat=[], node, controls='nothing', maptype='G_NORMAL_MAP', overviewControls=None, typeControls=None, events=False, color='default', zoom=6, ln=-122.1419, lt=37.4419 
    88##title= 
    99## 
    1010 
    11 lon = [el.longitude for el in longlat] 
    12 lat = [el.latitude for el in longlat] 
    1311sPortal = context.portal_url() 
    1412sControls = "" 
    1513sEvents = "" 
    1614sDefaults = "" 
    17 if controls: 
    18     sControls = """ 
    19     map.addControl(new GLargeMapControl()); 
    20     map.addControl(new GMapTypeControl()); 
    21     map.addControl(new GOverviewMapControl());\n""" 
     15sMarkers = "" 
     16sInfoWindow = """ 
     17"<div><h2><a href='"+url+"'>"+title+"</a></h2><p>"+content+"</p></div>" 
     18""" 
     19 
     20if maptype == 'satellite': maptype = 'G_SATELLITE_MAP' 
     21 
     22if (not color) and longlat: 
     23    lon = [e.longitude for el in longlat for e in el.values()[0]] 
     24    lat = [e.latitude for el in longlat for e in el.values()[0]] 
     25    if hasattr(longlat[0].values()[0][0], 'getURL'): 
     26        sMarkers = "\n".join(["addMarker(%f, %f, '%s', '%s', '%s', '%s');" % (e.latitude, e.longitude, e.Title, e.getURL(), e.Description, el.keys()[0]) for el in longlat for e in el.values()[0]]) 
     27    else: 
     28        sMarkers = "\n".join(["addMarker(%f, %f, '%s', '%s', '%s', '%s');" % (e.latitude, e.longitude, e.Title(), e.absolute_url(), e.Description(), el.keys()[0]) for el in longlat for e in el.values()[0]]) 
     29elif longlat: 
     30    lon = [el.longitude for el in longlat] 
     31    lat = [el.latitude for el in longlat] 
     32    if hasattr(longlat[0], 'getURL'): 
     33        sMarkers = "\n".join(["addMarker(%f, %f, '%s', '%s', '%s', '%s');" % (el.latitude, el.longitude, el.Title, el.getURL(), el.Description, color) for el in longlat]) 
     34    else: 
     35        sMarkers = "\n".join(["addMarker(%f, %f, '%s', '%s', '%s', '%s');" % (el.latitude, el.longitude, el.Title(), el.absolute_url(), el.Description(), color) for el in longlat]) 
     36 
     37if controls == 'large': sControls += "map.addControl(new GLargeMapControl());" 
     38elif controls == 'small': sControls += "map.addControl(new GSmallMapControl());" 
     39if typeControls: sControls += "map.addControl(new GMapTypeControl());" 
     40if overviewControls: sControls += "map.addControl(new GOverviewMapControl());\n" 
     41 
    2242if events: 
    2343    sEvents = """ 
    24       var f = function(){marker.openInfoWindowHtml("<p>"+html+"</p>");}; 
    25       GEvent.addListener(marker, 'click', f);\n""" 
    26 if longlat: sDefaults = """ 
     44      var f = function(){marker.openInfoWindowHtml(%s);}; 
     45      GEvent.addListener(marker, 'click', f);\n""" % sInfoWindow 
     46if longlat: 
     47    sDefaults = """ 
    2748map.setCenter(new GLatLng(%f, %f), map.getBoundsZoomLevel(new GLatLngBounds(new GLatLng(%f, %f), new GLatLng(%f, %f)))); 
    2849map.savePosition();""" % ((min(lat)+max(lat))/2, (min(lon)+max(lon))/2, min(lat), min(lon), max(lat), max(lon)) 
     
    3758    var map = new GMap2(document.getElementById('%(node)s')); 
    3859    %(controls)s 
    39     map.setCenter(new GLatLng(37.4419, -122.1419), 6
     60    map.setCenter(new GLatLng(%(lt)f, %(ln)f), %(zoom)s
    4061 
    4162    var icon = new GIcon(); 
    42     icon.image = "%(url)s/gmap_marker.png"; 
    43     icon.shadow = "%(url)s/gmap_shadow.png"; 
     63    icon.shadow = "%(url)s/images/map_shadow.png"; 
    4464    icon.iconSize = new GSize(20, 34); 
    4565    icon.shadowSize = new GSize(37, 34); 
     
    4767    icon.infoWindowAnchor = new GPoint(9, 2); 
    4868 
    49     function addMarker(lat, lng, html){ 
     69    function addMarker(lat, lng, title, url, content, col){ 
     70      icon.image = "%(url)s/images/"+col+"/map_marker.png"; 
    5071      var point = new GLatLng(lat, lng); 
    5172      var marker = new GMarker(point, icon) 
     
    6081</script> 
    6182""" % { 
    62    'url': sPortal, 
    63    'node': node, 
    64    'markers': "\n".join(["addMarker(%f, %f, '%s');" % (el.latitude, el.longitude, el.Description) for el in longlat]), 
    65    'defaults': sDefaults, 
    66    'controls': sControls, 
    67    'events': sEvents} 
     83   'url'      : sPortal, 
     84   'node'     : node, 
     85   'markers'  : sMarkers, 
     86   'defaults' : sDefaults, 
     87   'controls' : sControls, 
     88   'events'   : sEvents, 
     89   'zoom'     : zoom, 
     90   'ln'       : float(ln), 
     91   'lt'       : float(lt), 
     92   'maptype'  : maptype} 
  • qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/maps_view.pt

    r359 r360  
    66  <metal:block fill-slot="javascript_head_slot"> 
    77    <script type="text/javascript" src="" 
    8             tal:attributes="src string:http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAPKXXAksH6LF9wD3-iB3Z9hTb-vLQlFZmc2N8bgWI8YDPp5FEVBSikjDVULf3tCyc8gRIqTf-_TRyPw"> 
     8            tal:define="key python:modules['Products.qPloneGoogleMaps.config'].MAP_API_KEY" 
     9            tal:attributes="src string:http://maps.google.com/maps?file=api&amp;v=2&amp;key=${key}"> 
    910    </script> 
    10     <span tal:replace="structure python:here.maps_markers([here,], node='map', controls=True, events=True)" /> 
     11    <span tal:replace="structure python:here.maps_markers([here,], node='map', events=True, controls='large', typeControls=True, overviewControls=True)" /> 
    1112  </metal:block> 
    1213</head> 
  • qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/portlet_maps.pt

    r359 r360  
    44<body> 
    55<div metal:define-macro="portlet" 
    6      tal:define="lon here/longitude|nothing
    7                  lat here/latitude|nothing
     6     tal:define="lon python:here.getProperty('longitude', None)
     7                 lat python:here.getProperty('latitude', None)
    88                 longlat python:[here,]" 
    99     tal:condition="python:lon and lat"> 
    1010 
    1111    <script type="text/javascript" src="" 
    12             tal:attributes="src string:http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAPKXXAksH6LF9wD3-iB3Z9hTb-vLQlFZmc2N8bgWI8YDPp5FEVBSikjDVULf3tCyc8gRIqTf-_TRyPw"> 
     12            tal:define="key python:modules['Products.qPloneGoogleMaps.config'].MAP_API_KEY" 
     13            tal:attributes="src string:http://maps.google.com/maps?file=api&amp;v=2&amp;key=${key}"> 
    1314    </script> 
    1415    <span tal:replace="structure python:here.maps_markers(longlat=longlat, node='portlet_map')" /> 
  • qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/topic_maps_view.pt

    r359 r360  
    66  <metal:block fill-slot="javascript_head_slot"> 
    77    <script type="text/javascript" src="" 
    8             tal:attributes="src string:http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAPKXXAksH6LF9wD3-iB3Z9hTb-vLQlFZmc2N8bgWI8YDPp5FEVBSikjDVULf3tCyc8gRIqTf-_TRyPw"> 
     8            tal:define="key python:modules['Products.qPloneGoogleMaps.config'].MAP_API_KEY" 
     9            tal:attributes="src string:http://maps.google.com/maps?file=api&amp;v=2&amp;key=${key}"> 
    910    </script> 
    10     <span tal:define="longlat python:[el for el in here.queryCatalog() if getattr(el,'latitude') and getattr(el,'longitude')]" 
    11           tal:replace="structure python:here.maps_markers(longlat, node='map', controls=True, events=True)" /> 
     11    <span tal:define="contentsMethod python:test(here.portal_type=='Topic', here.queryCatalog, here.getFolderContents); 
     12                      content folderContents|python:contentsMethod(); 
     13                      longlat python:[el for el in content if getattr(el,'latitude') and getattr(el,'longitude')]" 
     14          tal:replace="structure python:here.maps_markers(longlat, node='map', events=True, controls='large', typeControls=True, overviewControls=True)" /> 
    1215  </metal:block> 
    1316</head>