-
Notifications
You must be signed in to change notification settings - Fork 1
/
addresses_views.py
121 lines (104 loc) · 4.9 KB
/
addresses_views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# -*- coding: UTF-8 -*-
# Copyright (C) 2009 Hervé Cauwelier <herve@itaapy.com>
# Copyright (C) 2009 J. David Ibanez <jdavid@itaapy.com>
# Copyright (C) 2009 Taverne Sylvain <sylvain@itaapy.com>
# Copyright (C) 2009-2010 Henry Obein <henry@itaapy.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Import from itools
from itools.core import merge_dicts
from itools.datatypes import Decimal, Integer, String, Unicode
from itools.gettext import MSG
from itools.stl import set_prefix
from itools.web import STLView
# Import from ikaaro
from ikaaro.forms import SelectWidget, TextWidget
from ikaaro.forms import title_widget, rte_widget, timestamp_widget
from ikaaro.webpage import HTMLEditView
from ikaaro.workflow import get_workflow_preview
# Import from packages
from datatypes import OpenLayerRender
from google_map import GoogleMapWidget, GPSWidget as GoogleGPSWidget
from osm import OpenStreetMapWidget, GPSWidget as OpenStreetMapGPSWidget
class Addresses_View(STLView):
access = True
title = MSG(u'View')
icon = 'view.png'
template = '/ui/addresses/Addresses_view.xml'
styles = ['/ui/addresses/style.css']
def get_namespace(self, resource, context):
from addresses import AddressItem
ac = resource.get_access_control()
user = context.user
is_allowed_to_add = ac.is_allowed_to_add(user, resource)
namespace = {'addresses': [],
'is_allowed_to_add': is_allowed_to_add}
addresses = resource.search_resources(cls=AddressItem)
for index, address in enumerate(addresses):
# Check ACLs
if ac.is_allowed_to_view(user, address) is False:
continue
kw = {}
for key in ['latitude', 'longitude', 'zoom']:
kw[key] = address.get_property(key)
google_map_key = resource.get_property('google_map_key')
height = address.get_property('height')
width = address.get_property('width')
# FIXME To improve, render
render = address.get_property('render')
if render == 'google':
map_widget_cls = GoogleMapWidget
else:
map_widget_cls = OpenStreetMapWidget
map = map_widget_cls('map_%s' % index, width=width, height=height)
is_allowed_to_edit = ac.is_allowed_to_edit(user, address)
html_data = address.get_html_data()
html_data = set_prefix(html_data, prefix='%s/' % address.name)
an_address = {'name': address.name,
'title': address.get_title(),
'html': html_data,
'map': map.to_html(None, kw),
'is_allowed_to_edit': is_allowed_to_edit,
'workflow': get_workflow_preview(address, context),
}
namespace['addresses'].append(an_address)
return namespace
class AddressItem_Edit(HTMLEditView):
access = 'is_allowed_to_edit'
title = MSG(u"Edit address")
submit_value = MSG(u'Edit address')
schema = merge_dicts(HTMLEditView.schema,
render=OpenLayerRender(mandatory=True),
width=Integer, height=Integer, address=Unicode,
latitude=Decimal, longitude=Decimal, zoom=Integer,
# Hack
gps=String)
def get_widgets(self, resource, context):
width = resource.get_property('width')
height = resource.get_property('height')
render = resource.get_property('render')
if render == 'google':
gps_widget_cls = GoogleGPSWidget
else:
gps_widget_cls = OpenStreetMapGPSWidget
return [title_widget, rte_widget, timestamp_widget,
SelectWidget('render', title=MSG(u'Render map with')),
TextWidget('width', title=MSG(u'Map width'), size=6),
TextWidget('height', title=MSG(u'Map height'), size=6),
gps_widget_cls('gps', title=MSG(u'GPS'), width=width, height=height)]
def action(self, resource, context, form):
for key in ['zoom', 'latitude', 'longitude', 'address',
'width', 'height', 'render']:
resource.set_property(key, form[key])
return HTMLEditView.action(self, resource, context, form)