Add buttons de to edit or create an organism.
[infos-pratiques:etalage.git] / etalage / templates / poi.mako
1 ## -*- coding: utf-8 -*-
2
3
4 ## Etalage -- Open Data POIs portal
5 ## By: Emmanuel Raviart <eraviart@easter-eggs.com>
6 ##
7 ## Copyright (C) 2011, 2012 Easter-eggs
8 ## http://gitorious.org/infos-pratiques/etalage
9 ##
10 ## This file is part of Etalage.
11 ##
12 ## Etalage is free software; you can redistribute it and/or modify
13 ## it under the terms of the GNU Affero General Public License as
14 ## published by the Free Software Foundation, either version 3 of the
15 ## License, or (at your option) any later version.
16 ##
17 ## Etalage is distributed in the hope that it will be useful,
18 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
19 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20 ## GNU Affero General Public License for more details.
21 ##
22 ## You should have received a copy of the GNU Affero General Public License
23 ## along with this program.  If not, see <http://www.gnu.org/licenses/>.
24
25
26 <%!
27 import urlparse
28
29 import markupsafe
30 from biryani import strings
31
32 from etalage import conf, model, ramdb, urls
33 %>\
34
35
36 <%inherit file="/site.mako"/>
37
38
39 <%def name="container_content()" filter="trim">
40         <h2>${poi.name}</h2>
41     % for field in (poi.fields or []):
42 <%
43     if field.id in ('name', 'organism-type'):
44         continue
45 %>\
46         <%self:field field="${field}"/>
47     % endfor
48 <%
49     services = sorted(
50         (
51             service
52             for service in ramdb.pois_by_id.itervalues()
53             if service.parent_id == poi._id
54             ),
55         key = lambda service: service.name,
56         )
57 %>\
58     % if services:
59         <h3>Services</h3>
60         <ul>
61         % for service in services:
62             <li>
63                 <a class="field-value internal" href="${urls.get_url(ctx, 'organismes', service.slug, service._id
64                         )}">${service.name}</a>
65             </li>
66         % endfor
67         </ul>
68     %endif
69 <%
70     field = model.Field(id = 'text-inline', label = u"Dernière mise à jour", value = u' par '.join(
71         unicode(fragment)
72         for fragment in (
73             poi.last_update_datetime.strftime('%Y-%m-%d %H:%M') if poi.last_update_datetime is not None else None,
74             poi.last_update_organization,
75             )
76         if fragment
77         ))
78 %>\
79         <%self:field field="${field}"/>
80 </%def>
81
82
83 <%def name="css()" filter="trim">
84     <%parent:css/>
85     <link rel="stylesheet" href="${conf['leaflet.css']}">
86 <!--[if lte IE 8]>
87     <link rel="stylesheet" href="${conf['leaflet.ie.css']}">
88 <![endif]-->
89 </%def>
90
91
92 <%def name="field(field)" filter="trim">
93 <%
94     if field.value is None:
95         return ''
96 %>\
97         <div class="field">
98             <strong class="field-label">${field.label} :</strong>
99             <%self:field_value field="${field}"/>
100         </div>
101 </%def>
102
103
104 <%def name="field_value(field)" filter="trim">
105 <%
106     if field.value is None:
107         return ''
108 %>\
109     % if field.id == 'adr':
110             <address class="field-value offset1">
111         % for subfield in field.value:
112 <%
113             if subfield.value is None:
114                 continue
115 %>\
116             % if subfield.id == 'street-address':
117                 % for line in subfield.value.split('\n'):
118                 ${line}<br>
119                 % endfor
120             % elif subfield.id == 'commune':
121 <%
122                 continue
123 %>\
124             % elif subfield.id == 'postal-distribution':
125                 ${subfield.value}
126             % endif
127         % endfor
128             </address>
129     % elif field.id == 'autocompleters':
130 <%
131         slug_and_name_couples = []
132         for name in field.value:
133             slug = strings.slugify(name)
134             category = ramdb.categories_by_slug.get(slug)
135             if category is not None:
136                 name = category.name
137             slug_and_name_couples.append((slug, name))
138         slug_and_name_couples.sort()
139         names = [
140             name
141             for slug, name in slug_and_name_couples
142             ]
143 %>\
144             <span class="field-value">${u', '.join(names)}</span>
145     % elif field.id == 'boolean':
146             <span class="field-value">${u'Oui' if field.value and field.value != '0' else u'Non'}</span>
147     % elif field.id == 'date-range':
148 <%
149         begin_field = field.get_first_field('date-range-begin')
150         begin = begin_field.value if field is not None else None
151         end_field = field.get_first_field('date-range-end')
152         end = end_field.value if field is not None else None
153 %>\
154         % if begin is None:
155             <span class="field-value">Jusqu'au ${end.strftime('%d/%m/%Y')}</span>
156         % elif end is None:
157             <span class="field-value">À partir du ${begin.strftime('%d/%m/%Y')}</span>
158         % elif begin == end:
159             <span class="field-value">Le ${begin.strftime('%d/%m/%Y')}</span>
160         % else:
161             <span class="field-value">Du ${begin.strftime('%d/%m/%Y')} au ${end.strftime('%d/%m/%Y')}</span>
162         % endif
163     % elif field.id == 'email':
164             <span class="field-value"><a href="mailto:${field.value}">${field.value}</a></span>
165     % elif field.id == 'feed':
166             <div class="field-value offset1">
167 <%
168         import feedparser
169         d = feedparser.parse(field.value)
170 %>\
171         % if d is None or 'status' not in d \
172             or not d.version and d.status != 304 and d.status != 401 \
173             or d.status >= 400:
174                 <em class="error">Erreur dans le flux d'actualité <a href="${field.value}" rel="external">${field.value}</a></em>
175         % else:
176                 <strong>${d.feed.title}</strong>
177                 <a href="${field.value}" rel="external"><img alt="" src="http://cdn.comarquage.fr/images/misc/feed.png"></a>
178         % endif
179                 <ul>
180         % for entry in d.entries[:10]:
181                     <li class="feed-entry">${entry.title | n}
182             % for content in entry.content:
183                         <div>${content.value | n}</div>
184             % endfor
185                     </li>
186         % endfor
187         % if len(d.entries) > 10:
188                     <li>...</li>
189         % endif
190                 </ul>
191             </div>
192     % elif field.id == 'geo':
193             <div class="field-value offset1">
194         % if field.value[2] <= 6:
195                 <div class="alert-message error">
196                     <p>Cet organisme est positionné <strong>très approximativement</strong>.</p>
197                 </div>
198         % elif field.value[2] <= 6:
199                 <div class="alert-message warning">
200                     <p>Cet organisme est positionné <strong>approximativement dans la rue</strong>.</p>
201                 </div>
202         % endif
203                 <div class="single-marker-map" id="map-poi" style="height: 500px;"></div>
204                 <script>
205 etalage.map.singleMarkerMap("map-poi", ${field.value[0]}, ${field.value[1]});
206                 </script>
207                 <div class="bigger-map-link">
208                     Voir sur une carte plus grande avec
209                     <a href="${u'http://www.openstreetmap.org/?mlat={0}&mlon={1}&zoom=15&layers=M'.format(
210                             field.value[0], field.value[1])}" rel="external">OpenStreetMap</a>
211                     ou
212                     <a href="${u'http://maps.google.com/maps?q={0},{1}'.format(field.value[0], field.value[1]
213                             )}" rel="external">Google Maps</a>
214                 </div>
215             </div>
216     % elif field.id == 'image':
217             <div class="field-value offset1"><img alt="" src="${field.value}"></div>
218     % elif field.id == 'link':
219 <%
220         target = ramdb.pois_by_id.get(field.value)
221 %>\
222         % if target is None:
223             <em class="field-value">Lien manquant</em>
224         % else:
225             <a class="field-value internal" href="${urls.get_url(ctx, 'organismes', target.slug, target._id
226                     )}">${target.name}</a>
227         % endif
228     % elif field.id == 'links':
229         % if len(field.value) == 1:
230 <%
231             single_field = model.Field(id = 'link', value = field.value[0])
232 %>\
233 <%self:field_value field="${single_field}"/>
234         % else:
235             <ul class="field-value">
236             % for target_id in field.value:
237 <%
238                 target = ramdb.pois_by_id.get(target_id)
239                 if target is None:
240                     continue
241 %>\
242                 <li><a class="internal" href="${urls.get_url(ctx, 'organismes', target.slug, target._id
243                         )}">${target.name}</a></li>
244             % endfor
245             </ul>
246         % endif
247     % elif field.id == 'organism-type':
248 <%
249     category_slug = ramdb.categories_slug_by_pivot_code.get(field.value)
250     category = ramdb.categories_by_slug.get(category_slug) if category_slug is not None else None
251     category_name = category.name if category is not None else field.value
252 %>\
253             <span class="field-value">${category_name}</span>
254     % elif field.id == 'source':
255             <div class="field-value offset1">
256         % for subfield in field.value:
257         <%self:field field="${subfield}"/>
258         % endfor
259             </div>
260     % elif field.id == 'tags':
261 <%
262     tags_name = [
263         tag.name
264         for tag in (
265             ramdb.categories_by_slug.get(tag_slug)
266             for tag_slug in sorted(field.value)
267             )
268         if tag is not None
269         ]
270 %>\
271             <span class="field-value">${u', '.join(tags_name)}</span>
272     % elif field.id == 'territories':
273 <%
274         territories_title_markup = [
275             territory.main_postal_distribution_str
276                 if territory.__class__.__name__ in model.communes_kinds
277                 else markupsafe.Markup(u'{0} <em>({1})</em>').format(
278                     territory.main_postal_distribution_str, territory.type_short_name_fr)
279             for territory in (
280                 ramdb.territories_by_id[territory_id]
281                 for territory_id in field.value
282                 )
283             if territory is not None
284             ]
285 %>\
286         % if territories_title_markup:
287             % if len(territories_title_markup) == 1:
288             <span class="field-value">${territories_title_markup[0] | n}</span>
289             % else:
290             <ul class="field-value">
291                 % for territory_title_markup in territories_title_markup:
292                 <li>${territory_title_markup | n}</li>
293                 % endfor
294             </ul>
295             % endif
296         % endif
297     % elif field.id == 'text-block':
298             <div class="field-value offset1">${markupsafe.Markup('<br>').join(field.value.split('\n'))}</div>
299     % elif field.id == 'text-rich':
300             <div class="field-value offset1">${field.value | n}</div>
301     % elif field.id in ('source-url', 'url'):
302             <a class="field-value" href="${field.value}" rel="external">${field.value}</a>
303     % else:
304 <%
305         if field.id not in ('fax', 'name', 'org', 'source-organization', 'tel', 'text-inline'):
306             print 'Unknown ID for field {0}'.format(field)
307 %>\
308             <span class="field-value">${field.value}</span>
309     % endif
310 </%def>
311
312
313 <%def name="footer_data_p_content()" filter="trim">
314 ${parent.footer_data_p_content()}\
315     % if conf.get('petitpois_url'):
316  &mdash; <a class="btn" href="${urlparse.urljoin(conf['petitpois_url'], '/poi/view/{0}'.format(poi._id)
317         )}" rel="external">Modifier la fiche</a>\
318     % endif
319  &mdash; <a class="internal" href="${urls.get_url(
320         ctx, 'minisite', 'organismes', poi.slug, poi._id)}" rel="nofollow">Minisite</a>
321 </%def>
322
323
324 <%def name="scripts()" filter="trim">
325     <%parent:scripts/>
326     <script src="${conf['leaflet.js']}"></script>
327 <!--[if lt IE 10]>
328     <script src="${conf['pie.js']}"></script>
329 <![endif]-->
330     <script src="/js/map.js"></script>
331     <script>
332 var etalage = etalage || {};
333 etalage.map.markersUrl = ${conf['markers_url'].rstrip('/') | n, js};
334 etalage.map.tileUrlTemplate = ${conf['tile_url_template'] | n, js};
335     </script>
336 </%def>
337
338
339 <%def name="title_content()" filter="trim">
340 ${poi.name} - ${parent.title_content()}
341 </%def>
342