Changeset 404
- Timestamp:
- 07/18/06 04:01:35
- Files:
-
- qPloneGoogleMaps/trunk/Extensions/Install.py (modified) (10 diffs)
- qPloneGoogleMaps/trunk/TODO.txt (modified) (1 diff)
- qPloneGoogleMaps/trunk/config.py (modified) (1 diff)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/edit_js.py (modified) (3 diffs)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/getCenterZoom.py (modified) (2 diffs)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/getMapKey.py (added)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/map_view.pt (modified) (2 diffs)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/maps_markers.py (modified) (6 diffs)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/maps_view.pt (modified) (1 diff)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/marker_view.pt (modified) (1 diff)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/overlay_view.pt (modified) (1 diff)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/portlet_maps.pt (modified) (1 diff)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/portlet_overlays.pt (modified) (3 diffs)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/prefs_mapkeys_form.cpt (added)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/prefs_mapkeys_form.cpt.metadata (added)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/prefs_mapkeys_set.cpy (added)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/prefs_mapkeys_set.cpy.metadata (added)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/switchOverlays.py (modified) (2 diffs)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/topic_maps_view.pt (modified) (1 diff)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/validate_mapkeys.vpy (added)
- qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/view_js.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
qPloneGoogleMaps/trunk/Extensions/Install.py
r403 r404 5 5 from Products.CMFCore.DirectoryView import addDirectoryViews 6 6 7 try: 8 from Products.CMFCore.permissions import ManagePortal 9 except ImportError: 10 from Products.CMFCore.CMFCorePermissions import ManagePortal 11 12 from Products.CMFPlone.migrations.migration_util import safeEditProperty 13 7 14 from Products.Archetypes.Extensions.utils import installTypes 8 15 from Products.Archetypes.public import listTypes … … 10 17 from Products.qPloneGoogleMaps.config import * 11 18 19 configlets = \ 20 ({'id':PROJECTNAME, 21 'name':'Google Map Api Keys', 22 'action':'string:${portal_url}/prefs_mapkeys_form', 23 'condition':'', 24 'category':'Products', 25 'visible':1, 26 'appId':PROJECTNAME, 27 'permission':ManagePortal},) 28 #'imageUrl':'niimportablefooter.gif'},) 29 30 def addProperty(self, out): 31 """ Add property sheet to portal_properties """ 32 33 portal_props = getToolByName(self, 'portal_properties') 34 if not hasattr(portal_props, PROPERTY_SHEET): 35 portal_props.addPropertySheet(PROPERTY_SHEET, 'Maps Properties') 36 out.write('Added %s property sheet...\n' % PROPERTY_SHEET) 37 ap = getattr(portal_props, PROPERTY_SHEET) 38 if not hasattr(ap, PROPERTY_FIELD): 39 safeEditProperty(ap, PROPERTY_FIELD, MAP_API_KEYS, 'lines') 40 out.write('Added %s property field to %s property sheet...\n' % (PROPERTY_FIELD, PROPERTY_SHEET)) 41 else: out.write('Skipped adding property...\n') 42 43 def removeProperty(self, out): 44 """ Remove property sheet from portal_properties """ 45 46 portal_props = getToolByName(self, 'portal_properties') 47 if hasattr(portal_props, PROPERTY_SHEET): 48 portal_props.manage_delObjects(PROPERTY_SHEET) 49 out.write('Deleted %s property sheet...\n' % PROPERTY_SHEET) 50 51 def addConfiglets(self, out): 52 """ Add configlets to portal control panel """ 53 54 configTool = getToolByName(self, 'portal_controlpanel', None) 55 if configTool: 56 for conf in configlets: 57 out.write('Added configlet %s\n' % conf['id']) 58 configTool.registerConfiglet(**conf) 59 60 def removeConfiglets(self, out): 61 """ Remove the configlet from the portal control panel """ 62 63 configTool = getToolByName(self, 'portal_controlpanel', None) 64 if configTool: 65 for conf in configlets: 66 out.write('Removed configlet %s\n' % conf['id']) 67 configTool.unregisterConfiglet('%s' % conf['id']) 68 12 69 def addCatalogIndex(self, name, out): 13 70 """ Add to portal catalog given index """ 71 14 72 portal_catalog = getToolByName(self, 'portal_catalog') 15 73 if name not in portal_catalog.indexes(): … … 19 77 def removeCatalogIndex(self, name, out): 20 78 """ Remove from portal catalog given index """ 79 21 80 portal_catalog = getToolByName(self, 'portal_catalog') 22 81 if name in portal_catalog.indexes(): … … 26 85 def addCatalogColumn(self, name, out): 27 86 """ Add to portal catalog given metadata column """ 87 28 88 portal_catalog = getToolByName(self, 'portal_catalog') 29 89 if name not in portal_catalog.schema(): … … 34 94 def removeCatalogColumn(self, name, out): 35 95 """ Remove from portal catalog given metadata column """ 96 36 97 portal_catalog = getToolByName(self, 'portal_catalog') 37 98 if name in portal_catalog.schema(): … … 45 106 installTypes(self, out, typesInfo, PROJECTNAME) 46 107 out.write("Installed types\n") 47 48 108 factory_tool = getToolByName(self, 'portal_factory') 49 109 types = factory_tool.getFactoryTypes().keys() … … 82 142 out.write("Removed maps view template from '%s' FTI.\n" % tp) 83 143 84 def addPortlet (self, out, slot):144 def addPortlets(self, out, slots=[]): 85 145 """ Add portlet to right slot """ 86 146 87 147 right_slots = getattr(self, 'right_slots', None) 88 148 if right_slots != None: 89 if slot not in right_slots: 90 right_slots = list(right_slots) + [slot,] 149 for slot in slots: 150 if slot not in right_slots: 151 right_slots = list(right_slots) + [slot,] 152 self.right_slots = right_slots 153 out.write('Added %s portlet to right_slots property.\n' % slot) 154 155 def removePortlets(self, out, slots=[]): 156 """ Remove portlet from right slot """ 157 158 right_slots = list(getattr(self, 'right_slots', ())) 159 for slot in slots: 160 if slot in right_slots: 161 right_slots.remove(slot) 91 162 self.right_slots = right_slots 92 out.write('Added %s portlet to right_slots property.\n' % slot) 93 94 def removePortlet(self, out, slot): 95 """ Remove portlet from right slot """ 96 97 right_slots = list(getattr(self, 'right_slots', ())) 98 if slot in right_slots: 99 right_slots.remove(slot) 100 self.right_slots = right_slots 101 out.write('Removed %s portlet from right slots property.\n' % slot) 163 out.write('Removed %s portlet from right slots property.\n' % slot) 102 164 103 165 def setupSkin(self, out, skinFolder): … … 143 205 out = StringIO() 144 206 207 # add property field to 'maps_properties' sheet 208 addProperty(self, out) 209 210 # installing configlet 211 addConfiglets(self, out) 212 145 213 # adding indexes and metadata columns to portal_catalog 146 addCatalogIndex(self, 'geoLocation', out)147 addCatalogColumn(self, 'geoLocation', out)214 addCatalogIndex(self, GEO_INDEX, out) 215 addCatalogColumn(self, GEO_INDEX, out) 148 216 149 217 out.write('Update catalog...\n') … … 154 222 155 223 # add portlets to right slot 156 addPortlet(self, out, 'here/portlet_maps/macros/portlet') 157 addPortlet(self, out, 'here/portlet_overlays/macros/portlet') 224 addPortlets(self, out, MAP_PORTLETS) 158 225 159 226 # add map view template to the topic portal type … … 171 238 out = StringIO() 172 239 240 # remove property sheet 'maps_properties' from portal_properties 241 removeProperty(self, out) 242 243 # removing configlet 244 removeConfiglets(self, out) 245 173 246 # removing indexes and metadata columns from portal_catalog 174 removeCatalogIndex(self, 'geoLocation', out)175 removeCatalogColumn(self, 'geoLocation', out)247 removeCatalogIndex(self, GEO_INDEX, out) 248 removeCatalogColumn(self, GEO_INDEX, out) 176 249 177 250 # remove portlets from right slot 178 removePortlet(self, out, 'here/portlet_maps/macros/portlet') 179 removePortlet(self, out, 'here/portlet_overlays/macros/portlet') 251 removePortlets(self, out, MAP_PORTLETS) 180 252 181 253 # remove map view template from the topic portal type qPloneGoogleMaps/trunk/TODO.txt
r403 r404 11 11 12 12 # * navigation portlet view (turn on/off overlay functionality) 13 14 # * automatic selecting map api key 15 16 * google maps adaptor for edit_location form 17 18 * IE compatibility qPloneGoogleMaps/trunk/config.py
r403 r404 8 8 9 9 NEW_PORTAL_TYPES = ['Map', 'Marker', 'Overlay'] 10 MAP_API_KEYS = ["http://gewgaw.office.quintagroup.com:8888/map|ABQIAAAAPKXXAksH6LF9wD3-iB3Z9hR-_Derz1M-sZYUdeXG3J1uZOMrKxT98efydo7fhYu6kuaFv5ESjlw4mw", ] 10 11 11 #MAP_API_KEY = 'ABQIAAAAPKXXAksH6LF9wD3-iB3Z9hTb-vLQlFZmc2N8bgWI8YDPp5FEVBSikjDVULf3tCyc8gRIqTf-_TRyPw' 12 13 MAP_API_KEY = 'ABQIAAAAPKXXAksH6LF9wD3-iB3Z9hR-_Derz1M-sZYUdeXG3J1uZOMrKxT98efydo7fhYu6kuaFv5ESjlw4mw'14 #MAP_API_KEY=ABQIAAAAYYyEmQ6EGtXuqElDoueMKBQD6ra-3WW7G3Dx0BPiIwGBloz-IhRd7rSu5fzEEX_rrGcbuQTBDjeYjw 12 MAP_PORTLETS = ['here/portlet_maps/macros/portlet', 'here/portlet_overlays/macros/portlet',] 13 PROPERTY_SHEET = 'maps_properties' 14 PROPERTY_FIELD = 'map_api_keys' 15 GEO_INDEX = 'geoLocation' 15 16 16 17 setDefaultRoles(DEFAULT_ADD_CONTENT_PERMISSION, ('Manager', 'Owner',)) qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/edit_js.py
r403 r404 8 8 ##title= 9 9 ## 10 11 from Products.qPloneGoogleMaps.config import MAP_API_KEY12 10 13 11 lat = [] … … 37 35 <script type="text/javascript"> 38 36 //<![CDATA[ 39 40 function registerUnloadFunction(func){41 if (window.addEventListener) window.addEventListener("unload", func, false);42 else if (window.attachEvent) window.attachEvent("onunload", func);43 };44 37 45 38 function onMapLoad() { … … 80 73 var globMap = onMapLoad(); 81 74 82 register UnloadFunction(GUnload);75 registerEventListener(window, 'unload', GUnload); 83 76 84 77 //]]> 85 78 </script> """ % { 86 'key' : MAP_API_KEY,79 'key' : context.getMapKey(), 87 80 'lat' : map_center[0], 88 81 'lng' : map_center[1], qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/getCenterZoom.py
r403 r404 12 12 <script type="text/javascript"> 13 13 //<![CDATA[ 14 15 function registerUnloadFunction(func) {16 if (window.addEventListener) window.addEventListener("unload", func, false);17 else if (window.attachEvent) window.attachEvent("onunload", func);18 };19 14 20 15 var node = document.getElementById('autozoom'); … … 36 31 }}; 37 32 38 register UnloadFunction(GUnload);33 registerEventListener(window, 'unload', GUnload); 39 34 40 35 //]]> qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/map_view.pt
r403 r404 6 6 <metal:block fill-slot="javascript_head_slot"> 7 7 <script type="text/javascript" src="" 8 tal:define="key python:modules['Products.qPloneGoogleMaps.config'].MAP_API_KEY"9 tal:attributes="src string:http://maps.google.com/maps?file=api&v=2&key=${ key}">8 tal:define="key here/getMapKey" 9 tal:attributes="src string:http://maps.google.com/maps?file=api&v=2&key=${here/getMapKey}"> 10 10 </script> 11 11 <span tal:replace="structure python:here.maps_markers(longlat=here.getOverlayMarkers(), node='map', controls=here.getMapControl(), loc=here.geoLocation(), typeControls=here.getTypeControl(), overviewControls=here.getOverviewControl(), events=True, maptype=here.getMapType(), color=False, zoom=here.getZoom(), mapevents=True, auto=here.getAuto())" /> … … 36 36 </p> 37 37 38 <div id="map" style="position: relative; height: 480px;" 39 tal:define="height here/getHeight"40 tal:attributes="style string:height:${height}px"></div> 38 <div id="map" style="position: relative; height: 480px;"></div> 39 <!-- tal:define="height here/getHeight" 40 tal:attributes="style string:height:${height}px"></div>--> 41 41 42 42 </tal:main-macro> qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/maps_markers.py
r403 r404 33 33 lat = [float(e.geoLocation[0]) for el in longlat.values() for e in el] 34 34 lon = [float(e.geoLocation[1]) for el in longlat.values() for e in el] 35 #raise str(longlat.items()[0][1].items()[0][1])36 #{id:{color:[markers]}}37 35 sMarkers = "\n".join([""" 38 36 addMarker(%(lt)f, %(lg)f, "%(title)s", "%(url)s/view", "%(desc)s", "%(c)s"); … … 101 99 //<![CDATA[ 102 100 103 function addEvent(el, evt, func){104 if (el.addEventListener) el.addEventListener(evt, func, false);105 else if (el.attachEvent) el.attachEvent("on"+evt, func);106 };107 108 101 function onLoadMap(){ 109 102 if (GBrowserIsCompatible()) { … … 129 122 %(event)s 130 123 }; 124 131 125 %(mapevents)s 132 126 %(markers)s … … 136 130 var over_obj = getData(); 137 131 if (over_obj) { 138 for (var i=0; i < over_obj['boxes'].length; i++) addEvent(over_obj['boxes'][i], 'click',132 for (var i=0; i < over_obj['boxes'].length; i++) registerEventListener(over_obj['boxes'][i], 'click', 139 133 function (){ 140 134 map.clearOverlays(); … … 144 138 for (var j=0; j < overLays[id].length; j++) { 145 139 var opts = overLays[id][j]; 146 //alert(opts);147 140 addMarker(opts[0], opts[1], opts[2], opts[3], opts[4], opts[5]); 148 141 }; … … 154 147 155 148 } 156 else window.alert("Google maps aren't compatible with current Browser.");149 else window.alert("Google maps aren't compatible with current browser or your map api key doesn't match your portal root."); 157 150 }; 158 151 159 addEvent(window, 'load', onLoadMap);160 addEvent(window, 'unload', GUnload);152 registerEventListener(window, 'load', onLoadMap); 153 registerEventListener(window, 'unload', GUnload); 161 154 162 155 //]]> qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/maps_view.pt
r403 r404 6 6 <metal:block fill-slot="javascript_head_slot"> 7 7 <script type="text/javascript" src="" 8 tal:define="key python:modules['Products.qPloneGoogleMaps.config'].MAP_API_KEY" 9 tal:attributes="src string:http://maps.google.com/maps?file=api&v=2&key=${key}"> 8 tal:attributes="src string:http://maps.google.com/maps?file=api&v=2&key=${here/getMapKey}"> 10 9 </script> 11 10 <span tal:define="brain python:here.portal_catalog(path='/'.join(here.getPhysicalPath())); 12 11 longlat python:test(len(brain)==1 and brain[0].portal_type != 'Map' and brain[0].geoLocation, brain, [])" 13 tal:replace="structure python:here.maps_markers(longlat, node='map', events=True, controls='large', typeControls=True, overviewControls=True, zoom=6, loc=longlat[0].geoLocation )" />12 tal:replace="structure python:here.maps_markers(longlat, node='map', events=True, controls='large', typeControls=True, overviewControls=True, zoom=6, loc=longlat[0].geoLocation, auto=None)" /> 14 13 </metal:block> 15 14 </head> qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/marker_view.pt
r403 r404 6 6 <metal:block fill-slot="javascript_head_slot"> 7 7 <script type="text/javascript" src="" 8 tal:define="key python:modules['Products.qPloneGoogleMaps.config'].MAP_API_KEY" 9 tal:attributes="src string:http://maps.google.com/maps?file=api&v=2&key=${key}"> 8 tal:attributes="src string:http://maps.google.com/maps?file=api&v=2&key=${here/getMapKey}"> 10 9 </script> 11 10 <span tal:replace="structure python:here.maps_markers(here.portal_catalog(path='/'.join(here.getPhysicalPath())), node='map', events=True, loc=here.geoLocation(), controls='large', typeControls=True, overviewControls=True, color=here.getColor(), zoom=6, auto='None')" /> qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/overlay_view.pt
r403 r404 6 6 <metal:block fill-slot="javascript_head_slot"> 7 7 <script type="text/javascript" src="" 8 tal:define="key python:modules['Products.qPloneGoogleMaps.config'].MAP_API_KEY" 9 tal:attributes="src string:http://maps.google.com/maps?file=api&v=2&key=${key}"> 8 tal:attributes="src string:http://maps.google.com/maps?file=api&v=2&key=${here/getMapKey}"> 10 9 </script> 11 10 <span tal:replace="structure python:here.maps_markers(here.getMarkers(), node='map', events=True, color=here.getMarkersColor(), loc=here.geoLocation(), controls=here.getMapControl(), typeControls=here.getTypeControl(), overviewControls=here.getOverviewControl(), maptype=here.getMapType(),)" /> qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/portlet_maps.pt
r403 r404 9 9 10 10 <script type="text/javascript" src="" 11 tal:define="key python:modules['Products.qPloneGoogleMaps.config'].MAP_API_KEY" 12 tal:attributes="src string:http://maps.google.com/maps?file=api&v=2&key=${key}"> 11 tal:attributes="src string:http://maps.google.com/maps?file=api&v=2&key=${here/getMapKey}"> 13 12 </script> 14 13 <span tal:replace="structure python:here.maps_markers(longlat, loc=longlat[0].geoLocation, zoom=5, node='portlet_map', controls='small', auto='None')" /> qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/portlet_overlays.pt
r403 r404 9 9 tal:define="mapContent python:context.folderlistingFolderContents(contentFilter={'portal_type':'Overlay',})"> 10 10 11 <dl class="portlet" id="portlet-navigation-tree" 12 tal:condition="python:context.portal_type == 'Map'"> 11 <dl class="portlet" id="portlet-overlays"> 13 12 <dt class="portletHeader"> 14 13 <span class="portletTopLeft"></span> … … 16 15 class="tile" 17 16 tal:attributes="href string:${context/absolute_url}" 18 tal:content="string:${context/getId} Overlays"></a>17 tal:content="string:${context/getId}'s Overlays"></a> 19 18 <span class="portletTopRight"></span> 20 19 </dt> … … 23 22 <ul class="portletNavigationTree" id="listOverlays"> 24 23 <tal:navitem repeat="item mapContent"> 25 <li class="navTreeItem visualNoMarker" 26 tal:define="wf_tool nocall:context/portal_workflow; 27 viewActions here/portal_properties/site_properties/typesUseViewActionInListings|python:(); 28 useView python:item.portal_type in viewActions; 29 itemUrl python:test(useView, item.absolute_url() + '/view', item.absolute_url()); 30 r_state python:wf_tool.getInfoFor(context, 'review_state'); 31 item_wf_state_class python: 'state-' + normalizeString(r_state)"> 24 <li class="visualNoMarker"> 32 25 <input type="checkbox" id="overlayId" value="1" style="float: left" checked 33 26 tal:attributes="id string:${item/getId}Box; 34 27 value string:${item/getMarkersColor}" /> 35 <div tal:define="itemClass string:$item_wf_state_class visualIconPadding"> 36 <a tal:attributes="href itemUrl; 37 title item/Description; 38 class string:$itemClass" 39 tal:content="item/Title">Item Title</a> 40 </div> 28 <div class="visualIconPadding" 29 tal:content="item/Title">Item Title</div> 41 30 </li> 42 31 </tal:navitem> qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/switchOverlays.py
r403 r404 13 13 //<![CDATA[ 14 14 15 function registerUnloadFunction(func) {16 if (window.addEventListener) window.addEventListener("unload", func, false);17 else if (window.attachEvent) window.attachEvent("onunload", func);18 };19 20 15 function getData(){ 21 16 var ul = document.getElementById('listOverlays'), result = {}; … … 29 24 }; 30 25 31 register UnloadFunction(GUnload);26 registerEventListener(window, 'unload', GUnload); 32 27 33 28 //]]> qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/topic_maps_view.pt
r403 r404 6 6 <metal:block fill-slot="javascript_head_slot"> 7 7 <script type="text/javascript" src="" 8 tal:define="key python:modules['Products.qPloneGoogleMaps.config'].MAP_API_KEY" 9 tal:attributes="src string:http://maps.google.com/maps?file=api&v=2&key=${key}"> 8 tal:attributes="src string:http://maps.google.com/maps?file=api&v=2&key=${here/getMapKey}"> 10 9 </script> 11 10 <span tal:define="contentsMethod python:test(here.portal_type=='Topic', here.queryCatalog, here.getFolderContents); qPloneGoogleMaps/trunk/skins/qPloneGoogleMaps/view_js.py
r403 r404 8 8 ##title= 9 9 ## 10 11 from Products.qPloneGoogleMaps.config import MAP_API_KEY12 10 13 11 map_center = (0,0) … … 25 23 //<![CDATA[ 26 24 27 function registerUnloadFunction(func){28 if (window.addEventListener) window.addEventListener("unload", func, false);29 else if (window.attachEvent) window.attachEvent("onunload", func);30 };31 32 25 function onMapLoad() { 33 26 if (GBrowserIsCompatible()) { … … 42 35 } 43 36 44 register PloneFunction(onMapLoad)45 register UnloadFunction(GUnload);37 registerEventListener(window, 'load', onMapLoad) 38 registerEventListener(window, 'unload', GUnload); 46 39 47 40 //]]> 48 41 </script> """ % { 49 'key' : MAP_API_KEY,42 'key' : context.getMapKey(), 50 43 'lat' : map_center[0], 51 44 'lng' : map_center[1],
