aboutsummaryrefslogtreecommitdiffstats
path: root/templates/web/zurich
diff options
context:
space:
mode:
Diffstat (limited to 'templates/web/zurich')
-rw-r--r--templates/web/zurich/admin/body-form.html54
-rw-r--r--templates/web/zurich/admin/body.html67
-rw-r--r--templates/web/zurich/admin/edit-league.html0
-rw-r--r--templates/web/zurich/admin/header.html34
-rw-r--r--templates/web/zurich/admin/index-dm.html37
-rw-r--r--templates/web/zurich/admin/index-sdm.html34
-rw-r--r--templates/web/zurich/admin/index.html17
-rw-r--r--templates/web/zurich/admin/list_updates.html45
-rw-r--r--templates/web/zurich/admin/problem_row.html45
-rw-r--r--templates/web/zurich/admin/report_edit-sdm.html74
-rw-r--r--templates/web/zurich/admin/report_edit.html231
-rw-r--r--templates/web/zurich/admin/reports.html28
-rw-r--r--templates/web/zurich/admin/stats.html54
-rw-r--r--templates/web/zurich/admin/update_edit.html40
-rw-r--r--templates/web/zurich/around/_updates.html0
-rw-r--r--templates/web/zurich/around/intro.html12
-rw-r--r--templates/web/zurich/auth/general.html73
-rw-r--r--templates/web/zurich/auth/sign_out.html7
-rw-r--r--templates/web/zurich/faq/faq-de-ch.html88
-rwxr-xr-xtemplates/web/zurich/faq/faq-de.html192
-rw-r--r--templates/web/zurich/footer.html40
-rw-r--r--templates/web/zurich/header.html79
-rw-r--r--templates/web/zurich/js/validation_rules.html8
-rw-r--r--templates/web/zurich/maps/zurich.html14
-rw-r--r--templates/web/zurich/nav_over_content.html10
-rw-r--r--templates/web/zurich/report/_item.html24
-rw-r--r--templates/web/zurich/report/_main.html17
-rw-r--r--templates/web/zurich/report/banner.html17
-rw-r--r--templates/web/zurich/report/new/councils_text_all.html0
-rw-r--r--templates/web/zurich/report/new/fill_in_details_form.html125
-rw-r--r--templates/web/zurich/report/photo-js.html6
-rw-r--r--templates/web/zurich/report/update-form.html0
-rw-r--r--templates/web/zurich/report/updates.html17
-rwxr-xr-xtemplates/web/zurich/reports/index.html33
-rw-r--r--templates/web/zurich/tokens/confirm_problem.html15
-rw-r--r--templates/web/zurich/tracking_code.html18
36 files changed, 1340 insertions, 215 deletions
diff --git a/templates/web/zurich/admin/body-form.html b/templates/web/zurich/admin/body-form.html
new file mode 100644
index 000000000..a31dffe7c
--- /dev/null
+++ b/templates/web/zurich/admin/body-form.html
@@ -0,0 +1,54 @@
+ <form method="post" action="[% body ? c.uri_for('body', body.id) : c.uri_for('bodies') %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">
+
+ <p>
+ <label for="name">[% loc('Name') %]</label>
+ <input type="text" name="name" id="name" value="[% body.name %]" size="50">
+ </p>
+
+ <p>
+ <label for="email">[% loc('Email') %]</label>
+ <input type="text" name="endpoint" id="email" value="[% body.endpoint %]" size="50">
+ </p>
+
+ <p>
+ <label for="parent">[% loc('Parent') %]</label>
+ <select name="parent" id="parent">
+ <option value=""> -- [% loc('Select a body') %] -- </option>
+ [% FOR b IN bodies %]
+ <option value="[% b.id %]"[% ' selected' IF body.parent.id == b.id %]>[% b.name %]</option>
+ [% END %]
+ </select>
+ </p>
+
+ <p>
+ <label for="area_ids">[% loc('Area covered') %]</label>
+ <select name="area_ids" id="area_ids" multiple>
+ <option value=""> -- [% loc('Select an area') %] -- </option>
+ [% SET body_areas = body.areas %]
+ [% FOR area IN areas %]
+ [% SET aid = area.id %]
+ <option value="[% area.id %]"[% ' selected' IF body_areas.$aid %]>[% area.name %]</option>
+ [% END %]
+ </select>
+ </p>
+
+ <p>
+ <label for="deleted">[% loc('Flag as deleted') %]</label>
+ <input type="checkbox" name="deleted" id="deleted" value="1"[% ' checked' IF body.deleted %] />
+ </p>
+
+ <input type="hidden" name="send_method" value="Email">
+ <input type="hidden" name="jurisdiction" id="jurisdiction" value="[% body.jurisdiction %]">
+ <input type="hidden" name="api_key" id="api_key" value="[% body.api_key %]">
+ <input type="hidden" id="send_comments" name="send_comments" value="[% body.send_comments %]">
+ <input type="hidden" name="comment_user_id" value="[% body.comment_user_id %]">
+ <input type="hidden" id="suppress_alerts" name="suppress_alerts" value="[% body.suppress_alerts %]">
+ <input type="hidden" id="can_be_devolved" name="can_be_devolved" value="[% body.can_be_devolved %]">
+
+ <p>
+ <input type="hidden" name="posted" value="body">
+ <input type="hidden" name="token" value="[% token %]">
+ <input type="submit" value="[% body ? loc('Update body') : loc('Add body') %]">
+ </p>
+ </form>
+
diff --git a/templates/web/zurich/admin/body.html b/templates/web/zurich/admin/body.html
new file mode 100644
index 000000000..764ad9bd8
--- /dev/null
+++ b/templates/web/zurich/admin/body.html
@@ -0,0 +1,67 @@
+[% INCLUDE 'admin/header.html' title=tprintf(loc('Council contacts for %s'), body.name) -%]
+[% PROCESS 'admin/report_blocks.html' %]
+
+[% IF updated %]
+<p>
+<em>[% updated %]</em>
+</p>
+[% END %]
+
+[% IF admin_type == 'super' AND body.parent AND NOT body.parent.parent # A division %]
+ <table cellspacing="0" cellpadding="2" border="1">
+ <tr>
+ <th>[% loc('Category') %]</th>
+ <th>[% loc('Email') %]</th>
+ <th>[% loc('Last editor') %]</th>
+ <th>[% loc('Note') %]</th>
+ <th>[% loc('When edited') %]</th>
+ </tr>
+ [% WHILE ( contact = contacts.next ) %]
+ <tr>
+ <td><a href="[% c.uri_for( 'body_edit', body_id, contact.category ) %]">[% contact.category %]</a></td>
+ <td>[% contact.email | html %]</td>
+ <td>[% contact.editor %]</td>
+ <td>[% contact.note | html %]</td>
+ <td>[% PROCESS format_date this_date=contact.whenedited %]</td>
+ </tr>
+ [% END %]
+ </table>
+
+ <h2>[% loc('Add new category') %]</h2>
+
+ <form method="post" action="[% c.uri_for('body', body_id ) %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">
+
+ [% IF c.cobrand.moniker != 'emptyhomes' %]
+ <p>
+ <strong>[% loc('Category:') %] </strong><input type="text" name="category" size="30">
+ </p>
+ [% END %]
+
+ <p>
+ <strong>[% loc('Email:') %] </strong><input type="text" name="email" size="30">
+ </p>
+
+ <input type="hidden" name="confirmed" value="1" id="confirmed">
+
+ <p>
+ <strong>[% loc('Note:') %] </strong> <textarea name="note" rows="3" cols="40"></textarea>
+ </p>
+
+ <p>
+ <input type="hidden" name="posted" value="new" >
+ <input type="hidden" name="token" value="[% token %]" >
+ <input type="submit" name="Create category" value="[% loc('Create category') %]" >
+ </p>
+
+ <div>
+ <input type="hidden" name=".cgifields" value="confirmed" >
+ <input type="hidden" name=".cgifields" value="deleted" >
+ </div>
+ </form>
+
+[% END %]
+
+ <h2>[% loc('Edit body details') %]</h2>
+ [% INCLUDE 'admin/body-form.html' %]
+
+[% INCLUDE 'admin/footer.html' %]
diff --git a/templates/web/zurich/admin/edit-league.html b/templates/web/zurich/admin/edit-league.html
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/templates/web/zurich/admin/edit-league.html
diff --git a/templates/web/zurich/admin/header.html b/templates/web/zurich/admin/header.html
new file mode 100644
index 000000000..281b1de23
--- /dev/null
+++ b/templates/web/zurich/admin/header.html
@@ -0,0 +1,34 @@
+[%
+ SET bodyclass = bodyclass || 'fullwidthpage';
+ INCLUDE 'header.html' admin = 1, bodyclass = bodyclass _ ' admin';
+
+ states = {
+ 'unconfirmed' = loc('Submitted'),
+ 'confirmed' = loc('Open'),
+ 'in progress' = loc('In progress'),
+ 'planned' = loc('Planned'),
+ 'fixed - council' = loc('Closed'),
+ 'hidden' = loc('Hidden'),
+ 'closed' = loc('Closed'),
+ }
+%]
+<style type="text/css">
+ .adminhidden { color: #666666; }
+ .admininternal { background-color: #eeeeff; }
+ .active { background-color: #ffffee; cursor: pointer; }
+ .error { color: red; }
+ .overdue { background-color: #ffcccc; }
+ select { width: auto; }
+ #fms_pan_zoom { top: 13em !important; }
+</style>
+<script>
+$(function(){
+ $('.row-link').hover(function(){
+ $(this).toggleClass("active");
+ }).click(function(){
+ window.location = this.getElementsByTagName('a')[0];
+ }).find('td:last').hide();
+ $('th.edit').hide();
+});
+</script>
+
diff --git a/templates/web/zurich/admin/index-dm.html b/templates/web/zurich/admin/index-dm.html
new file mode 100644
index 000000000..e0b62d5d2
--- /dev/null
+++ b/templates/web/zurich/admin/index-dm.html
@@ -0,0 +1,37 @@
+[% PROCESS 'admin/header.html' title=loc('Summary') -%]
+[% PROCESS 'admin/report_blocks.html' %]
+
+[% status_message %]
+
+<h2 id="submitted">[% loc('Submitted') %]</h2>
+[% INCLUDE list, problems = unconfirmed.all, hash = 'submitted' %]
+
+<h2 id="planned">[% loc('Planned') %]</h2>
+[% INCLUDE list, problems = approval.all, hash = 'planned' %]
+
+<h2 id="alle">[% loc('All reports') %]</h2>
+[% INCLUDE list, problems = other.all, include_subdiv = 1, hash = 'alle' %]
+[% INCLUDE 'pagination.html', admin = 1, param = 'p', hash = 'alle' %]
+
+[% INCLUDE 'admin/footer.html' %]
+
+[% BLOCK list %]
+<table cellspacing="0" cellpadding="2" border="1">
+ <tr>
+ <th>[% loc('ID') %]</th>
+ <th>[% loc('Description') %]</th>
+ [% FOREACH col IN [ [ 'category', loc('Category') ], [ 'created', loc('Submitted') ], [ 'lastupdate', loc('Updated') ], [ 'state', loc('Status') ] ] %]
+ <th><a href="[% INCLUDE sort_link choice = col.0 %]#[% hash %]">[% col.1 %] [% INCLUDE sort_arrow choice = col.0 %]</a></th>
+ [% END %]
+ [% IF include_subdiv %]
+ <th>[% loc('Subdivision/Body') %]</th>
+ [% END %]
+ <th>[% loc('Photo') %]</th>
+ <th class='edit'>*</th>
+ </tr>
+ <tr class="filter-row">
+ <td colspan="8"><input type="text" placeholder="[%= loc('Filter report list') %]" /></td>
+ </tr>
+[% INCLUDE 'admin/problem_row.html' %]
+</table>
+[% END %]
diff --git a/templates/web/zurich/admin/index-sdm.html b/templates/web/zurich/admin/index-sdm.html
new file mode 100644
index 000000000..707bb2d9d
--- /dev/null
+++ b/templates/web/zurich/admin/index-sdm.html
@@ -0,0 +1,34 @@
+[% PROCESS 'admin/header.html' title=loc('Summary') -%]
+[% PROCESS 'admin/report_blocks.html' %]
+
+<h2 id="new">[% loc('New reports') %]</h2>
+[% INCLUDE list, problems = reports_new.all, hash = 'new' %]
+
+<h2 id="wait">[% loc('Reports awaiting approval') %]</h2>
+[% INCLUDE list, problems = reports_unpublished.all, no_edit = 1, hash = 'wait' %]
+
+<h2 id="alle">[% loc('Reports published') %]</h2>
+[% INCLUDE list, problems = reports_published.all, no_edit = 1, hash = 'alle' %]
+[% INCLUDE 'pagination.html', admin = 1, param = 'p', hash = 'alle' %]
+
+[% INCLUDE 'admin/footer.html' %]
+
+[% BLOCK list %]
+<table cellspacing="0" cellpadding="2" border="1">
+ <tr>
+ <th>[% loc('ID') %]</th>
+ <th>[% loc('Description') %]</th>
+ [% FOREACH col IN [ [ 'category', loc('Category') ], [ 'created', loc('Submitted') ], [ 'lastupdate', loc('Updated') ], [ 'state', loc('Status') ] ] %]
+ <th><a href="[% INCLUDE sort_link choice = col.0 %]#[% hash %]">[% col.1 %] [% INCLUDE sort_arrow choice = col.0 %]</a></th>
+ [% END %]
+ <th>[% loc('Photo') %]</th>
+ [% IF NOT no_edit %]
+ <th class='edit'>*</th>
+ [% END %]
+ </tr>
+ <tr class="filter-row">
+ <td colspan="8"><input type="text" placeholder="[%= loc('Filter report list') %]" /></td>
+ </tr>
+[% INCLUDE 'admin/problem_row.html' %]
+</table>
+[% END %]
diff --git a/templates/web/zurich/admin/index.html b/templates/web/zurich/admin/index.html
new file mode 100644
index 000000000..a51c7f6fe
--- /dev/null
+++ b/templates/web/zurich/admin/index.html
@@ -0,0 +1,17 @@
+[% PROCESS 'admin/header.html' title=loc('Summary') -%]
+
+<ul>
+ <li>[% tprintf( loc('<strong>%d</strong> live problems'), total_problems_live ) %];
+ [% tprintf( loc('from %d different users'), total_problems_users ) %]</li>
+ <li>[% tprintf( loc('%d council contacts &ndash; %d confirmed, %d unconfirmed'), contacts.total, contacts.1, contacts.0) %]</li>
+</ul>
+
+<h2>[% loc('Problem breakdown by state') %]</h2>
+<ul>
+ [% FOREACH state IN problems.keys.sort %]
+ [% NEXT IF NOT states.$state %]
+ <li>[% problems.$state %] [% states.$state %]</li>
+ [% END %]
+</ul>
+
+[% INCLUDE 'admin/footer.html' %]
diff --git a/templates/web/zurich/admin/list_updates.html b/templates/web/zurich/admin/list_updates.html
new file mode 100644
index 000000000..2b575f27e
--- /dev/null
+++ b/templates/web/zurich/admin/list_updates.html
@@ -0,0 +1,45 @@
+[% IF updates.size %]
+
+<h2>[% loc('Internal notes') %]</h3>
+
+<table cellspacing="0" cellpadding="2" border="1">
+ <tr>
+ <th>[% loc('ID') %]</th>
+ <th>[% loc('Created') %]</th>
+ <th>[% loc('User') %]</th>
+ <th>[% loc('Text') %]</th>
+ </tr>
+[% FOREACH update IN updates -%]
+ [% IF update.extra.is_internal_note %]
+ <tr class="[% 'admininternal' IF update.extra.is_internal_note %]">
+ <td>[% update.id %]</td>
+ <td>[% PROCESS format_date this_date=update.created %] [% update.created.hms %]</td>
+ <td><a href="mailto:[% update.user.email %]">[% update.user.name || update.user.email %]</a></td>
+ <td>[% update.text | html %]</td>
+ </tr>
+ [% END %]
+[% END -%]
+</table>
+
+<h2>[% loc('Updates') %]</h2>
+
+<table cellspacing="0" cellpadding="2" border="1">
+ <tr>
+ <th>[% loc('ID') %]</th>
+ <th>[% loc('Created') %]</th>
+ <th>[% loc('User') %]</th>
+ <th>[% loc('Text') %]</th>
+ </tr>
+[% FOREACH update IN updates -%]
+ [% IF ! update.extra.is_internal_note %]
+ <tr class="[% 'adminhidden' IF update.state == 'hidden' || update.problem.state == 'hidden' %]">
+ <td>[% update.id %]</td>
+ <td>[% PROCESS format_date this_date=update.created %] [% update.created.hms %]</td>
+ <td><a href="mailto:[% update.user.email %]">[% update.user.name || update.user.email %]</a></td>
+ <td>[% update.text | html %]</td>
+ </tr>
+ [% END %]
+[% END -%]
+</table>
+
+[% END %]
diff --git a/templates/web/zurich/admin/problem_row.html b/templates/web/zurich/admin/problem_row.html
new file mode 100644
index 000000000..9b395a1ac
--- /dev/null
+++ b/templates/web/zurich/admin/problem_row.html
@@ -0,0 +1,45 @@
+[%- FOR problem IN problems %]
+ [% SET p_body = problem.bodies.values.0 %]
+ <tr[%
+ SET classes = [];
+ classes.push('adminhidden') IF problem.state == 'hidden';
+ classes.push('overdue') IF c.cobrand.get_or_check_overdue( problem );
+ classes.push('row-link') IF NOT no_edit;
+ ' class="' _ classes.join(' ') _ '"' IF classes.size;
+ %]>
+ <td class="record-id">
+ [% IF no_edit AND problem.is_visible %]
+ <a href="[% c.uri_for_email( '/report', problem.id ) %]">[% problem.id %]</a>
+ [% ELSE %]
+ [% problem.id %]
+ [% END %]
+ </td>
+ <td>[% PROCESS value_or_nbsp value=problem.title %]</td>
+ <td>[% PROCESS value_or_nbsp value=problem.category %]</td>
+ <td>[% PROCESS format_date this_date=problem.created %]</td>
+ <td>[% PROCESS format_date this_date=problem.lastupdate %]</td>
+ <td>[% states.${problem.state} %]</td>
+
+ [% IF include_subdiv %]
+ <td>
+ [%- IF p_body.parent.parent.id -%][%# ...it's a subdivision %]
+ [% PROCESS value_or_nbsp value=p_body.name %]
+ [%- ELSIF problem.external_body %]
+ [% PROCESS value_or_nbsp value=problem.body(c).name %]
+ [%- ELSE -%]
+ &nbsp;
+ [%- END -%]
+ </td>
+ [% END %]
+
+ <td>
+ [% IF problem.photo %]
+ <img class="img" height="60" width="90" src="[% c.cobrand.base_url %]/photo/[% problem.photo %].temp.jpeg" alt="">
+ [% END %]
+ </td>
+
+ [% IF NOT no_edit %]
+ <td><a href="[% c.uri_for( 'report_edit', problem.id ) %]">[% loc('Edit') %]</a></td>
+ [% END %]
+ </tr>
+[%- END -%]
diff --git a/templates/web/zurich/admin/report_edit-sdm.html b/templates/web/zurich/admin/report_edit-sdm.html
new file mode 100644
index 000000000..5ff031ce2
--- /dev/null
+++ b/templates/web/zurich/admin/report_edit-sdm.html
@@ -0,0 +1,74 @@
+[%
+ PROCESS "maps/zurich.html";
+ PROCESS 'admin/header.html'
+ title = tprintf(loc('Editing problem %d'), problem.id ),
+ bodyclass = 'mappage';
+ PROCESS 'admin/report_blocks.html'
+-%]
+
+[% map_html %]
+ <p id='sub_map_links'>
+ <a class="hidden-nojs" id="map_layer_toggle" href="">Stadtplan</a>
+ </p>
+</div>
+
+[% status_message %]
+
+<form method="post" action="[% c.uri_for( 'report_edit', problem.id ) %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">
+ <input type="hidden" name="token" value="[% token %]" >
+ <input type="hidden" name="submit" value="1" >
+
+<p align="right"><input type="submit" name="send_back" value="[% loc('Not for my subdivision') %]"></p>
+
+<ul class="no-bullets">
+<li><a href="[% c.uri_for_email( '/report', problem.id ) %]">[% loc('View report on site' )%]</a></li>
+
+<li><a href="http://webgis.intra.stzh.ch/AV_Online/Direct.asp?Map=AV&Search=Koord&West=[% problem.local_coords.0 %]&Nord=[% problem.local_coords.1 %]&B=300" target="_blank">Standort in AV-Online anzeigen</a></li>
+
+<li><span class="mock-label">[% loc('Details:') %]</span> [% problem.detail | html %]
+[% IF problem.extra.original_detail %]
+<br>[%
+ SET safe = problem.extra.original_detail | html;
+ tprintf( loc('originally entered: &ldquo;%s&rdquo;'), safe )
+%]
+[% END %]
+</li>
+<li><span class="mock-label">[% loc('Co-ordinates:') %]</span> [% problem.local_coords.join(',') %]
+ <input type="hidden" name="latitude" id="fixmystreet.latitude" value="[% problem.latitude %]">
+ <input type="hidden" name="longitude" id="fixmystreet.longitude" value="[% problem.longitude %]">
+([%
+ SET safe = problem.postcode | html;
+ tprintf( loc('originally entered: &ldquo;%s&rdquo;'), safe )
+%],
+[% IF problem.used_map %][% loc('used map') %][% ELSE %][% loc("didn't use map") %][% END %])</li>
+
+<li><span class="mock-label">[% loc('Category:') %]</span> [% problem.category | html %] </li>
+<li><span class="mock-label">[% loc('Name:') %]</span> [% problem.name | html %]
+<li><span class="mock-label">[% loc('Email:') %]</span> [% problem.user.email | html %]
+[% IF NOT problem.extra.email_confirmed %]<span class="error">[% loc('Unconfirmed') %]</span>[% END %]
+<li><span class="mock-label">[% loc('Phone:') %]</span> [% IF problem.user.phone %][% problem.user.phone | html %][% ELSE %]<em>[% loc('None') %]</em>[% END %]</li>
+<li><span class="mock-label">[% loc('Created:') %]</span> [% PROCESS format_date this_date=problem.created %] [% problem.created.hms %]</li>
+
+[% IF problem.photo %]
+<li><img alt="" src="[% c.cobrand.base_url %]/photo/[% problem.photo %].temp.jpeg"></li>
+[% END %]
+
+<li><span class="mock-label">[% loc('State:') %]</span> [% states.${problem.state} %]</li>
+
+<li><label for="new_internal_note">[% loc('New internal note:') %]</label>
+<textarea name='new_internal_note' id='new_internal_note' cols=60 rows=5></textarea></li>
+
+<li><label for="status_update">[% loc('New update:') %]</label>
+<textarea name='status_update' id='status_update' cols=60 rows=5></textarea></li>
+
+</ul>
+
+<p class="cf">
+ <input style="float:left" type="submit" name="Submit changes" value="[% loc('Submit changes') %]" >
+ <input style="float:right" type="submit" name="no_more_updates" value="[% loc('No further updates') %]">
+</p>
+</form>
+
+[% INCLUDE 'admin/list_updates.html' %]
+
+[% INCLUDE 'admin/footer.html' %]
diff --git a/templates/web/zurich/admin/report_edit.html b/templates/web/zurich/admin/report_edit.html
new file mode 100644
index 000000000..66a51f162
--- /dev/null
+++ b/templates/web/zurich/admin/report_edit.html
@@ -0,0 +1,231 @@
+[%
+ PROCESS "report/photo-js.html";
+ PROCESS "maps/zurich.html";
+ INCLUDE 'admin/header.html'
+ title = tprintf(loc('Editing problem %d'), problem.id ),
+ bodyclass = 'mappage';
+ PROCESS 'admin/report_blocks.html'
+-%]
+
+[% map_html %]
+ <p id='sub_map_links'>
+ <a class="hidden-nojs" id="map_layer_toggle" href="">Stadtplan</a>
+ </p>
+</div>
+
+[% status_message %]
+
+<form method="post" action="[% c.uri_for( 'report_edit', problem.id ) %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">
+ <input type="hidden" name="token" value="[% token %]" >
+ <input type="hidden" name="submit" value="1" >
+
+<ul class="no-bullets">
+<li><a href="[% c.uri_for_email( '/report', problem.id ) %]">[% loc('View report on site' )%]</a></li>
+
+<li><a href="http://webgis.intra.stzh.ch/AV_Online/Direct.asp?Map=AV&Search=Koord&West=[% problem.local_coords.0 %]&Nord=[% problem.local_coords.1 %]&B=300" target="_blank">Standort in AV-Online anzeigen</a></li>
+
+[% IF problem.state == 'fixed - council' OR problem.state == 'closed' %]
+ <li><span class="mock-label">[% loc('Details:') %]</span> [% problem.detail | html %]
+ [% IF problem.extra.original_detail %]
+ <br>[%
+ SET detail_safe = problem.extra.original_detail | html;
+ tprintf( loc('originally entered: &ldquo;%s&rdquo;'), detail_safe )
+ %]
+ [% END %]
+ </li>
+[% ELSE %]
+ <li><label for='title'>[% loc('Subject:') %]</label> <input size=60 type='text' id='title' name='title' value='[% problem.title | html %]'></li>
+ <li><label for='detail'>[% loc('Details:') %]</label>
+ <textarea name='detail' id='detail' cols=60 rows=5>[% problem.detail | html %]</textarea>
+ [% IF problem.extra.original_detail %]
+ [%
+ SET detail_safe = problem.extra.original_detail | html;
+ tprintf( loc('originally entered: &ldquo;%s&rdquo;'), detail_safe )
+ %]
+ [% END %]
+ </li>
+[% END %]
+
+<li><span class="mock-label">[% loc('Co-ordinates:') %]</span> [% problem.local_coords.join(',') %]
+ <input type="hidden" name="latitude" id="fixmystreet.latitude" value="[% problem.latitude %]">
+ <input type="hidden" name="longitude" id="fixmystreet.longitude" value="[% problem.longitude %]">
+
+([%
+ SET safe = problem.postcode | html;
+ tprintf( loc('originally entered: &ldquo;%s&rdquo;'), safe )
+%],
+[% IF problem.used_map %][% loc('used map') %][% ELSE %][% loc("didn't use map") %][% END %])</li>
+
+<li><span class="mock-label">[% loc('Name:') %]</span> [% problem.name | html %] <input type='hidden' name='name' id='name' value='[% problem.name | html %]'></li>
+<li><span class="mock-label">[% loc('Email:') %]</span> [% problem.user.email | html %] <input type='hidden' id='email' name='email' value='[% problem.user.email | html %]'>
+[% IF NOT problem.extra.email_confirmed %]<span class="error">[% loc('Unconfirmed') %]</span>[% END %]
+</li>
+<li><span class="mock-label">[% loc('Phone:') %]</span> [% IF problem.user.phone %][% problem.user.phone | html %][% ELSE %]<em>[% loc('None') %]</em>[% END %]</li>
+<li><span class="mock-label">[% loc('Created:') %]</span> [% PROCESS format_date this_date=problem.created %] [% problem.created.hms %]</li>
+
+
+[% IF problem.photo %]
+<li>
+[% photo = problem.get_photo_params %]
+<div class="update-img">
+ <a href="[% c.cobrand.base_url %]/photo/[% problem.photo %].fulltemp.jpeg" rel="fancy">
+ <img alt="Photo of this report" src="[% c.cobrand.base_url %]/photo/[% problem.photo %].temp.jpeg">
+ <span>zoom</span></a>
+</div>
+<br>
+<input type="submit" name="rotate_photo" value="[% loc('Rotate Left') %]">
+<input type="submit" name="rotate_photo" value="[% loc('Rotate Right') %]">
+<br>
+<input type="checkbox" id="publish_photo" name="publish_photo" value="1"[% ' checked' IF problem.extra.publish_photo %]>
+<label class="inline" for="publish_photo">[% loc("Publish photo") %]</label></li>
+[% END %]
+</ul>
+
+<p><label for="new_internal_note">[% loc('New internal note:') %]</label>
+<textarea name='new_internal_note' id='new_internal_note' cols=60 rows=5>[% new_internal_note | html %]</textarea></p>
+
+<p><span class="mock-label">[% loc('State:') %]</span> <select name="state" id="state">
+ <option value="">--</option>
+ [% FOREACH s IN [
+ ['unconfirmed', loc('Submitted')]
+ ['confirmed', loc('Open')],
+ ['planned', loc('Planned')],
+ ['hidden', loc('Hidden')],
+ ] %]
+ <option [% 'selected ' IF s.0 == problem.state %] value="[% s.0 %]">[% s.1 %]</option>
+ [% END %]
+ [% IF problem.state == 'closed' %]
+ <option selected value="closed">[% loc('Closed') %]</option>
+ [% ELSIF problem.state == 'fixed - council' %]
+ <option selected value="fixed - council">[% loc('Closed') %]</option>
+ [% ELSIF problem.state == 'in progress' %]
+ <option selected value="in progress">[% loc('In progress') %]</option>
+ [% END %]
+</select></p>
+
+<p id="automatic-reply">
+ <span class="mock-label">Automatische Antwort</span>
+ <input type="checkbox" name="send_rejected_email" id="send_rejected_email" value="1" />
+</p>
+
+<script type="text/javascript">
+$(function(){
+ // Show or hide the automatic reply field
+ $('#state').change(function(){
+ if ($(this).val() === 'hidden') {
+ $('#automatic-reply').show();
+ } else {
+ $('#automatic-reply').hide();
+ }
+ }).change();
+});
+</script>
+
+[% IF problem.state == 'unconfirmed' OR problem.state == 'confirmed' %]
+
+<ul class="no-bullets">
+[% list = FOR body IN bodies %]
+ [%- NEXT UNLESS body.parent.id == c.user.from_body.id %]
+ <option value="[% body.id %]"[% IF body.id == problem.bodies_str %] selected[% END %]>[% body.name %]</option>
+[% END %]
+ [% IF admin_type != 'super' AND list %]
+ <li class="assignation">
+ <label for="body_subdivision">[% loc('Assign to subdivision:') %]</label>
+ <select name="body_subdivision" id="body_subdivision">
+ <option value="">--</option>
+ [% list %]
+ </select>
+ </li>
+ [% END %]
+
+<li class="assignation">
+<label for="category">
+[% loc('Category:') %] [% problem.category %]<br>
+[% loc('Assign to different category:') %]</label>
+ <select name="category" id="category">
+ <option value="">--</option>
+ [% FOREACH cat IN categories %]
+ <option value="[% cat %]">[% cat %]</option>
+ [% END %]
+ </select></li>
+
+<li class="assignation">
+<label for="body_external">[% loc('Assign to external body:') %]</label>
+ <select name="body_external" id="body_external">
+ <option value="">--</option>
+ [% FOR body IN bodies %]
+ [% NEXT IF body.parent OR body.bodies OR body.deleted %]
+ <option value="[% body.id %]"[% IF body.id == problem.bodies_str %] selected[% END %]>[% body.name %]</option>
+ [% END %]
+ </select>
+ <br>
+ <input type="checkbox" name="third_personal" id="third_personal" value="1"[% ' checked' IF problem.extra.third_personal %]>
+ <label for="third_personal" class="inline">[% loc('Include reporter personal details') %]</label>
+
+</ul>
+
+<script type="text/javascript">
+$(function(){
+ $('.assignation select').change(function(){
+ if (this.value == "") {
+ $('.assignation').css('color', '#000');
+ } else {
+ var a = $(this).closest('li').css('color', '#000');
+ $('.assignation select').not(this).val("");
+ $('.assignation').not(a).css('color', '#999');
+ }
+ });
+});
+</script>
+
+[% ELSIF problem.state == 'planned' %]
+
+<ul class="no-bullets">
+[% list = FOR body IN bodies %]
+ [%- NEXT UNLESS body.parent.id == c.user.from_body.id %]
+ <option value="[% body.id %]">[% body.name %]</option>
+[% END %]
+ [% IF admin_type != 'super' AND list %]
+ <li class="assignation">
+ <label for="body_subdivision">[% loc('Assign to subdivision:') %]</label>
+ <select name="body_subdivision" id="body_subdivision">
+ <option value="" selected>--</option>
+ [% list %]
+ </select>
+ </li>
+ [% END %]
+
+ <li><label for="status_update">[% loc('Public response:') %]</label>
+
+ <textarea name='status_update' id='status_update' cols=60 rows=5>
+ [%- IF problem.extra.public_response -%]
+ [%- problem.extra.public_response | html -%]
+ [%- ELSE -%]
+
+Freundliche Grüsse
+
+Ihre Stadt Zürich
+ [%- END %]</textarea>
+ </li>
+</ul>
+
+[% ELSIF problem.state == 'fixed - council' %]
+
+<p><span class="mock-label">[% loc('Public response:') %]</span>
+[% problem.extra.public_response | html %]
+</p>
+
+[% END %]
+
+<p align="right">
+[% IF problem.state == 'planned' %]
+<input type="submit" name="publish_response" value="[% loc('Publish the response') %]">
+[% END %]
+<input type="submit" name="Submit changes" value="[% loc('Submit changes') %]" >
+</p>
+
+</form>
+
+[% INCLUDE 'admin/list_updates.html' %]
+
+[% INCLUDE 'admin/footer.html' %]
diff --git a/templates/web/zurich/admin/reports.html b/templates/web/zurich/admin/reports.html
new file mode 100644
index 000000000..68f98c44a
--- /dev/null
+++ b/templates/web/zurich/admin/reports.html
@@ -0,0 +1,28 @@
+[% PROCESS 'admin/header.html' title=loc('Search Reports') %]
+[% PROCESS 'admin/report_blocks.html' %]
+
+<form method="get" action="[% c.uri_for('reports') %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">
+ <p><label for="search">[% loc('Search:') %]</label> <input type="text" name="search" size="30" id="search" value="[% searched | html %]">
+</form>
+
+[% IF problems.size %]
+<table cellspacing="0" cellpadding="2" border="1">
+ <tr>
+ <th>[% loc('ID') %]</th>
+ <th>[% loc('Description') %]</th>
+ [% FOREACH col IN [ [ 'category', loc('Category') ], [ 'created', loc('Submitted') ], [ 'lastupdate', loc('Updated') ], [ 'state', loc('Status') ] ] %]
+ <th><a href="[% INCLUDE sort_link choice = col.0 %]">[% col.1 %] [% INCLUDE sort_arrow choice = col.0 %]</a></th>
+ [% END %]
+ <th>[% loc('Photo') %]</th>
+ <th class='edit'>*</th>
+ </tr>
+ [% INCLUDE 'admin/problem_row.html' %]
+</table>
+
+[% INCLUDE 'pagination.html', admin = 1, param = 'p' IF pager %]
+
+[% END %]
+
+[% INCLUDE 'admin/list_updates.html' %]
+
+[% INCLUDE 'admin/footer.html' %]
diff --git a/templates/web/zurich/admin/stats.html b/templates/web/zurich/admin/stats.html
new file mode 100644
index 000000000..52b33ebc4
--- /dev/null
+++ b/templates/web/zurich/admin/stats.html
@@ -0,0 +1,54 @@
+[% INCLUDE 'admin/header.html' title=loc('Stats') %]
+[% PROCESS 'admin/report_blocks.html' %]
+[% USE date %]
+
+<p style="float:right"><a href="[% c.uri_with( { export=1 } ) %]">[% loc('All Reports') %]</a></p>
+
+[% IF start_date AND end_date %]
+<p><strong>[% tprintf( loc( 'All reports between %s and %s' ), start_date.ymd, end_date.ymd ) | html %]</strong></p>
+[% END %]
+
+<form method="get" action="[% c.uri_for('stats') %]">
+<p><select name="ym">
+ <option value="">[% loc('All reports') %]</option>
+ [% FOR y IN [ 2013 .. date.format(date.now, '%Y') ];
+ SET max = 12;
+ SET max = date.format(date.now, '%m') IF y == date.format(date.now, '%Y');
+ FOR m IN [ 1 .. max ];
+ m = m | format('%02d');
+ SET v = m _ '.' _ y;
+ %]
+ <option[% ' selected' IF v == ym %]>[% v %]</option>
+ [% END %]
+ [% END %]
+</select>
+
+<input type="submit" value="[% loc('Go') %]">
+</form>
+
+<ul>
+<li>[% loc('Total') %]: [% reports_total || 0 %]
+<li>[% loc('Closed') %]: [% reports_solved || 0 %]
+<li>[% loc('Hidden') %]: [% reports_spam || 0 %]
+<li>Externe Adressen: [% reports_assigned || 0 %]
+<li>[% loc('Moderated by division within one working day') %]: [% reports_moderated || 0 %]
+<li>[% loc('Dealt with by subdivision within 5 working days') %]: [% reports_dealtwith || 0 %]
+<li>[% loc('Assign to different category:') %] [% reports_category_changed || 0 %]
+<li>[% loc('Photo') %]: [% pictures_taken || 0 %]
+<li>[% loc('Publish photo') %]: [% pictures_published || 0 %]
+<!-- <li>[% loc('Phone:') %] [% users_phone || 0 %] -->
+<li>[% loc('Confirmed') %]: [% email_confirmed || 0 %]
+<li>[% loc('Name:') %] [% name_provided || 0 %]
+</ul>
+
+<table>
+<tr><th>[% loc('Service:') %]</th><th>[% loc('Count') %]</th></tr>
+[% WHILE ( s = per_service.next ) %]<tr><td>[% s.service || 'Web' %]</td><td>[% s.get_column('c') %]</td></tr>[% END %]
+</table>
+
+<table>
+<tr><th>[% loc('Category') %]</th><th>[% loc('Count') %]</th></tr>
+[% WHILE ( c = per_category.next ) %]<tr><td>[% c.category %]</td><td>[% c.get_column('c') %]</td></tr>[% END %]
+</table>
+
+[% INCLUDE 'admin/footer.html' %]
diff --git a/templates/web/zurich/admin/update_edit.html b/templates/web/zurich/admin/update_edit.html
new file mode 100644
index 000000000..ab40981a5
--- /dev/null
+++ b/templates/web/zurich/admin/update_edit.html
@@ -0,0 +1,40 @@
+[% INCLUDE 'admin/header.html' title=tprintf(loc('Editing update %d'), update.id ) -%]
+[% PROCESS 'admin/report_blocks.html' %]
+
+[% status_message %]
+
+<form method="post" action="[% c.uri_for( 'update_edit', update.id ) %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">
+ <input type="hidden" name="token" value="[% token %]" >
+ <input type="hidden" name="submit" value="1" >
+<ul>
+<li><a href="[% c.uri_for_email( '/report', update.problem_id ) %]#update_[% update.id %]">[% loc('View report on site' )%]</a></li>
+
+<li><label for='detail'>[% loc('Text:') %]</label>
+<textarea name='text' id='text' cols=60 rows=5>[% update.text | html %]</textarea></li>
+
+<input type="hidden" name="anonymous" value="[% update.anonymous %]">
+
+<li>[% loc('State:') %] <select name="state" id="state">
+ [% FOREACH state IN [ ['confirmed', loc('Open')], ['hidden', loc('Hidden')], ['unconfirmed',loc('Unconfirmed')] ] %]
+ <option [% 'selected ' IF state.0 == update.state %] value="[% state.0 %]">[% state.1 %]</option>
+ [% END %]
+</select></li>
+<input type='hidden' name='name' id='name' value='[% update.name | html %]'>
+<input type='hidden' id='email' name='email' value='[% update.user.email | html %]'>
+[% IF update.problem_state %]
+<li>[% tprintf(loc('Update changed problem state to %s'), update.problem_state) %]</li>
+[% END %]
+</li>
+
+<li>[% loc('Created:') %] [% PROCESS format_date this_date=update.created %] [% update.created.hms %]</li>
+
+[% IF update.photo %]
+[% photo = update.get_photo_params %]
+<li><img alt="" height="[% photo.height %]" width="[% photo.width %]" src="[% photo.url %]">
+<input type="checkbox" id="remove_photo" name="remove_photo" value="1">
+<label for="remove_photo" class="inline">[% loc("Remove photo (can't be undone!)") %]</label></li>
+[% END %]
+</ul>
+<input type="submit" name="Submit changes" value="[% loc('Submit changes') %]" ></form>
+
+[% INCLUDE 'admin/footer.html' %]
diff --git a/templates/web/zurich/around/_updates.html b/templates/web/zurich/around/_updates.html
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/templates/web/zurich/around/_updates.html
diff --git a/templates/web/zurich/around/intro.html b/templates/web/zurich/around/intro.html
new file mode 100644
index 000000000..04edcd3a7
--- /dev/null
+++ b/templates/web/zurich/around/intro.html
@@ -0,0 +1,12 @@
+ <h1>[% loc('Report, view, or discuss local problems') %]</h1>
+ <h2>(Pilot bis M&auml;rz 2014)</h2>
+
+<!-- FIXME Better place for this -->
+<script>
+ $(function() {
+ $( "#pc" ).autocomplete({
+ minLength: 3,
+ source: "/ajax/geocode"
+ });
+ });
+</script>
diff --git a/templates/web/zurich/auth/general.html b/templates/web/zurich/auth/general.html
new file mode 100644
index 000000000..11c729fde
--- /dev/null
+++ b/templates/web/zurich/auth/general.html
@@ -0,0 +1,73 @@
+[% INCLUDE 'header.html', title = loc('Sign in or create an account') %]
+
+[% IF email_error;
+
+ # other keys include fqdn, mxcheck if you'd like to write a custom error message
+
+ errors = {
+ missing => loc('Please enter your email'),
+ other => loc('Please check your email address is correct')
+ };
+
+ loc_email_error = errors.$email_error || errors.other;
+END %]
+
+<form action="[% c.uri_for() %]" method="post" name="general_auth_login" class="validate">
+ <fieldset>
+
+ <h1>[% loc('Sign in') %]</h1>
+
+ <input type="hidden" name="r" value="[% c.req.params.r | html %]">
+
+ <div id="form_sign_in_yes" class="form-box">
+
+ <label class="n" for="email">[% loc('Email') %]</label>
+ [% IF loc_email_error %]
+ <div class="form-error">[% loc_email_error %]</div>
+ [% ELSIF sign_in_error %]
+ <div class="form-error">[% loc('There was a problem with your email/password combination. If you cannot remember your password, or do not have one, please fill in the &lsquo;sign in by email&rsquo; section of the form.') %]</div>
+ [% END %]
+ <input type="email" class="required email" id="email" name="email" value="[% email | html %]" placeholder="[% loc('Your email address') %]">
+
+ <label for="password_sign_in">[% loc('Password (optional)') %]</label>
+ <div class="form-txt-submit-box">
+ <input type="password" class="required" name="password_sign_in" id="password_sign_in" value="" placeholder="[% loc('Your password') %]">
+ <input class="green-btn" type="submit" name="sign_in" value="[% loc('Sign in') %]">
+ </div>
+
+ <div class="form-txt-submit-box">
+ <input type="checkbox" id="remember_me" name="remember_me" value='1'[% ' checked' IF remember_me %]>
+ <label class="inline n" for="remember_me">[% loc('Keep me signed in on this computer') %]</label>
+ </div>
+
+ </div>
+ </fieldset>
+</form>
+
+<form action="[% c.uri_for() %]" method="post" name="general_auth_register" class="validate">
+ <fieldset>
+ <input type="hidden" name="r" value="[% c.req.params.r | html %]">
+
+ <h1>[% loc('<strong>No</strong> let me sign in by email') %]</h1>
+ <div id="form_sign_in_no" class="form-box">
+
+ <label class="n" for="email2">[% loc('Email') %]</label>
+ [% IF loc_email_error %]
+ <div class="form-error">[% loc_email_error %]</div>
+ [% END %]
+ <input type="email" class="required email" id="email2" name="email" value="[% email | html %]" placeholder="[% loc('Your email address') %]">
+
+ <label for="name">[% loc('Name') %]</label>
+ <input type="text" class="required" name="name" value="" placeholder="[% loc('Your name') %]">
+
+ <label for="password_register">[% loc('Password (optional)') %]</label>
+ <div class="form-txt-submit-box">
+ <input type="password" class="required" name="password_register" id="password_register" value="" placeholder="[% loc('Enter a password') %]">
+ <input class="green-btn" type="submit" name="email_sign_in" value="Registrieren">
+ </div>
+
+ </div>
+ </fieldset>
+</form>
+
+[% INCLUDE 'footer.html' %]
diff --git a/templates/web/zurich/auth/sign_out.html b/templates/web/zurich/auth/sign_out.html
new file mode 100644
index 000000000..644118f63
--- /dev/null
+++ b/templates/web/zurich/auth/sign_out.html
@@ -0,0 +1,7 @@
+[% INCLUDE 'header.html', title = loc('Sign out'), bodyclass = 'fullwidthpage' %]
+
+<h1>[% loc('You have been signed out') %]</h1>
+
+<p>[% tprintf( loc('Please feel free to <a href="%s">sign in again</a>, or go back to the <a href="/">front page</a>.'), c.uri_for('/admin') ) %]</p>
+
+[% INCLUDE 'footer.html' %]
diff --git a/templates/web/zurich/faq/faq-de-ch.html b/templates/web/zurich/faq/faq-de-ch.html
new file mode 100644
index 000000000..c7e284194
--- /dev/null
+++ b/templates/web/zurich/faq/faq-de-ch.html
@@ -0,0 +1,88 @@
+[% INCLUDE 'header.html', title => loc('Help'), bodyclass => 'fullwidthpage' %]
+
+<h1><a name="faq"></a>Hilfe</h1>
+
+ <dl>
+
+<dt>Was ist «Züri wie neu»</dt>
+<dd>
+«Züri wie neu» ist eine Online-Plattform, über die die Einwohnerinnen und
+Einwohner der Stadt Zürich auf Mängel und Schäden der städtischen Infrastruktur
+hinweisen können. «Züri wie neu» wird von der Stadtverwaltung moderiert und
+transparent geführt. Die Meldungen werden innerhalb von einem Arbeitstag den zuständigen Fachstellen
+zugewiesen und innert fünf Arbeitstagen abschliessend beantwortet. Fällt eine
+Meldung nicht in den Zuständigkeitsbereich der Stadtverwaltung, wird die
+Meldung anonymisiert der zuständigen dritten Stelle per E-Mail zugestellt.
+</dd>
+
+<dt>Welche Probleme kann ich über «Züri wie neu» melden?</dt>
+<dd>
+<p>Gemeldet werden können sämtliche Schäden an der Infrastruktur der Stadt Zürich.
+Dabei kann es sich um ein Loch im Strassenbelag, ein Graffiti am Stadthaus oder
+eine durch Vandalen beschädigte Parkbank handeln.
+
+<p>Es können Probleme zu folgenden Kategorien gemeldet werden:
+
+<ul>
+<li>Abfall / Sammelstellen</li>
+<li>Beleuchtung</li>
+<li>Graffiti</li>
+<li>Spielplatz / Sitzbank</li>
+<li>Strasse / Trottoir / Platz</li>
+<li>Tiere / Grünflächen</li>
+</ul>
+
+</dd>
+
+<dt>Was kann ich nicht über «Züri wie neu» melden?</dt>
+<dd>
+<ul>
+<li>Mängel die nicht auf Stadtgebiet liegen.</li>
+<li>Melden Sie «Züri wie neu» KEINE Notfälle. Die Notrufnummern lauten:
+ <br>Medizinisch - 144 Polizei - 117 Feuer - 118 Allgemein - 112</li>
+<li>Allgemeine Verschönerungs- und Verbesserungsvorschläge</li>
+</ul>
+</dd>
+
+<dt>Wie verwende ich die Webseite?</dt>
+<dd>
+<p>
+Geben Sie zuerst eine Adresse an oder lassen Sie Ihren Standort automatisch
+über den entsprechenden Link lokalisieren. Mittels Mausklick in die danach
+angezeigte Karte können Sie den exakten Ort des Mangels angeben. Als letzten
+Schritt füllen Sie die Felder des Formulars aus und schicken die Meldung ab.
+</p>
+<p>
+Weiter können Sie bestehende Meldungen sowie auch die Rückmeldungen der
+Verwaltung betrachten.
+</p>
+</dd>
+
+<dt>Wie werden die Probleme gelöst?</dt>
+<dd>
+Die Meldungen werden innerhalb von einem Arbeitstag den zuständigen Fachstellen
+zugewiesen und innert fünf Arbeitstagen von den dafür zuständigen
+Fachstellen bearbeitet sowie mit einer entsprechenden Rückmeldung versehen.
+</dd>
+
+<dt>Kann ich «Züri wie neu» auf meinem Smartphone nutzen?</dt>
+<dd>
+Ja, sowohl über die für mobile Geräte optimierte Webseite, als auch über die
+<a href="https://itunes.apple.com/ch/app/zuri-wie-neu/id631302236">iOS</a>- und <a href="https://play.google.com/store/apps/details?id=ch.zueriwieneu.zueriwieneu">Android-App</a>.
+</dd>
+
+<dt>Kann ich auch Probleme ausserhalb von Zürich melden?</dt>
+<dd>Nein.</dd>
+
+<dt>Werden meine E-Mail-Adresse, mein Name und meine Telefonnummer vertraulich behandelt?</dt>
+<dd>
+Die Kontaktinformationen werden nur stadtintern für Rückfragen verwendet. Sie
+werden weder im Internet publiziert noch an Dritte weitergegeben.
+</dd>
+
+<dt>Wer hat «Züri wie neu» programmiert?</dt>
+<dd>«Züri wie neu» wurde von <a href="http://www.mysociety.org/">mySociety</a> entwickelt.</dd>
+
+</dl>
+
+[% INCLUDE 'footer.html' pagefooter = 'yes' %]
diff --git a/templates/web/zurich/faq/faq-de.html b/templates/web/zurich/faq/faq-de.html
deleted file mode 100755
index a739f1b74..000000000
--- a/templates/web/zurich/faq/faq-de.html
+++ /dev/null
@@ -1,192 +0,0 @@
-[% INCLUDE 'header.html', title => loc('Frequently Asked Questions'), bodyclass => 'twothirdswidthpage' %]
-
-<div class="sticky-sidebar">
- <aside>
- <ul class="plain-list">
- <li><a href="#faq">Frequently Asked Questions</a></li>
- <li><a href="#practical">Practical Questions</a></li>
- <li><a href="#organisation">Organisation Questions</a></li>
- <li><a href="/privacy">Privacy and cookies</a></li>
- </ul>
- </aside>
-</div>
-
-<h1><a name="faq"></a>Frequently Asked Questions</h1>
- <dl>
- <dt>What is FixMyStreet?</dt>
- <dd>FixMyStreet is a site to help people report, view,
-or discuss local problems they&rsquo;ve found to their local council by
-simply locating them on a map. It launched in early February
-2007.</dd>
- <dt>What sort of problems should I report with FixMyStreet?</dt>
- <dd>FixMyStreet is primarily for reporting things which are
-<strong>broken or dirty or damaged or dumped, and need fixing, cleaning
-or clearing</strong>, such as:
-
- <ul><li>Abandoned vehicles
- <li>Dog Fouling
- <li>Flyposting or graffiti
- <li>Flytipping or litter
- <li>Streetcleaning, such as broken glass in a cycle lane
- [% IF c.cobrand.moniker != 'southampton' %]
- <li>Unlit lamposts
- [% END %]
- <li>Potholes
- </ul>
- </dd>
-
- <dt>What isn&rsquo;t FixMyStreet for?</dt>
- <dd>FixMyStreet is not a way of getting in touch with [% c.cobrand.is_council ? 'the' : 'your' %] council for all
- issues &ndash; please use FixMyStreet only for problems such as the above. We
- often route problem reports via cleansing services or highways and so using
- FixMyStreet for other matters may result in a delay in your report getting
- to the right department. <strong>You will need to contact [% c.cobrand.is_council ? 'the' : 'your' %] council
- directly for problems such as</strong>:
-
- <ul><li>Anti-social behaviour
- <li>Any urgent or emergency problems
- <li>Noise pollution or barking dogs
- <li>Fires and smoke/smell pollution
- <li>Missing wheelie bins or recycling boxes or missed rubbish collections
- <li>Proposals for speed bumps/ CCTV/ pedestrian crossings/ new road layouts/ etc.
- <li>Complaining about your neighbours
- <li>Complaining about the council
- <li>Joy riding, drug taking, animal cruelty, or other criminal activity
- </ul>
- <p>Councils often have direct hotlines for these sorts of issues.</p>
- </dd>
-
- <dt>How do I use the site?</dt>
- <dd>After entering a postcode or location, you are presented
-with a map of that area. You can view problems already reported in that area,
-or report ones of your own simply by clicking on the map at the location of
-the problem.</dd>
- <dt>How are the problems solved?</dt>
- <dd>They are reported to the [% IF !c.cobrand.is_council %]relevant[% END %] council by email. The
-council can then resolve the problem the way they normally would.
-Alternatively, you can discuss the problem on the website with others[% IF c.cobrand.moniker != 'southampton' %], and
-then together lobby the council to fix it, or fix it directly yourselves[% END %].</dd>
- <dt>Is it free?</dt>
- <dd>The site is free to use, yes. FixMyStreet is run
-by a registered charity, though, so if you want to make a contribution, <a
-href="https://secure.mysociety.org/donate/">please do</a>.</dd>
-
- <dt>Can I use FixMyStreet on my mobile?</dt>
- <dd>
- <p>The FixMyStreet website should work on your mobile phone, adapting to
- the size of your screen automatically. We plan to release updated native
- apps in the near future.
- <ul>
- <li><em>iPhone:</em> Our basic app from 2008 is available for download
- on the App Store:
- <a href="http://itunes.apple.com/gb/app/fixmystreet/id297456545">FixMyStreet</a>,
- <li><em>Android:</em> A volunteer, Anna Powell-Smith, has written an app
- available from the
- <a href="https://market.android.com/details?id=com.android.fixmystreet">Android Market</a>.
- <li><em>Nokia:</em> A volunteer, Thomas Forth, has written an app available from the
- <a href="http://store.ovi.com/content/107557">Ovi Store</a>.
- </ul>
- </dd>
-
- </dl>
-
- <h2><a name="practical"></a>Practical Questions</h2>
- <dl>
- <dt>I&rsquo;m from a council, where do you send the reports?</dt>
- <dd>You can either leave a test report or <a href="/contact">contact us</a>
-to find out where reports go at the moment. Also <a href="/contact">contact us</a>
-to update the address or addresses we use.</dd>
- <dt>I&rsquo;m from a council, can we have FixMyStreet on our website?</dt>
- <dd>Yes you can! We offer branded, hosted versions of FixMyStreet for local council websites. <a href="http://www.mysociety.org/for-councils/fixmystreet/">Full details</a>.</dd>
- <dt>Do you remove silly or illegal content?</dt>
- <dd>FixMyStreet is not responsible for the content and accuracy
-of material submitted by its users. We reserve the right to edit or remove any
-problems or updates which we consider to be inappropriate upon being informed
-by a user of the site.</dd>
- <dt>Why does the site use kilometres for measurements?</dt>
- <dd>Thanks for asking politely &ndash; we never quite understand why some of the rudest
- emails we receive are on this topic. The British national
- grid reference system, devised by Ordnance Survey (the British national
- mapping agency) around the time of the second world war, uses eastings and
- northings measured in metres and kilometres; the maps we use are from
- Ordnance Survey and so this is what we use to display distances.
- There you have it: not everything British is in miles!</dd>
-
- <dt>Why can&rsquo;t I zoom out more on the reporting map?</dt>
- <dd>We want to keep FixMyStreet locally focused, so restrict the ability to
- move radically between areas. The map on Your Reports will let you see all
- the reports you&rsquo;ve made, wherever they are. If you&rsquo;re from the
- council then the emailed version of the problem report also contains the
- closest road and postcode to the pin on the map.</dd>
-
- <dt>This site is great – why aren&rsquo;t you better publicised?</dt>
- <dd>As a tiny charity we simply don&rsquo;t have a publicity budget, and we
- rely on word of mouth to advertise the site. We have a whole <a
- href="posters/">array of posters, flyers and badges</a> if you&rsquo;d like
- to publicise us on the web or in your local area, and why not write to your
- local paper to let them know about us?</dd> </dl>
-
- <h2><a name="organisation"></a>Organisation Questions</h2>
- <dl>
- <dt>Who built FixMyStreet?</dt>
- <dd>This site was built by <a href="http://www.mysociety.org/">mySociety</a>,
- in conjunction with the <a href="http://www.youngfoundation.org.uk/">Young Foundation</a>.
-mySociety is the project of a registered charity which has grown out of the community of
-volunteers who built sites like <a href="http://www.theyworkforyou.com/">TheyWorkForYou.com</a>.
-mySociety&rsquo;s primary mission is to build Internet projects which give people simple, tangible
-benefits in the civic and community aspects of their lives. Our first project
-was <a href="http://www.writetothem.com/">WriteToThem</a>, where you can write to any of your
-elected representatives, for free. The charity is called UK Citizens Online Democracy and is charity number 1076346. mySociety
-can be contacted by email at <a href="mailto:hello&#64;mysociety.org">hello&#64;mysociety.org</a>,
-or by post at mySociety, 483 Green Lanes, London, N13 4BS, UK.</dd>
- <dt><img src="/i/moj.png" align="right" alt="Ministry of Justice" hspace="10">Who pays for it?</dt>
- <dd>FixMyStreet was originally paid for via the Department for
- Constitutional Affairs Innovations Fund. It is now funded by a variety of means, from commercial
- work to <a href="http://www.mysociety.org/donate/">donations</a>.</dd>
- <dt><a name="nfi"></a>Wasn&rsquo;t this site called Neighbourhood Fix-It?</dt>
- <dd>Yes, we changed the name mid June 2007. We decided
-Neighbourhood Fix-It was a bit of a mouthful, hard to spell, and hard to publicise (does the URL have a dash in it or not?). The domain FixMyStreet became available, and everyone liked the name.</dd>
- <dt>Do you need any help with the project?</dt>
- <dd>Yes, we can use help in all sorts of ways, technical or
-non-technical. Please see our <a
-href="http://www.mysociety.org/helpus/">Get Involved page</a>.</dd>
- <dt>I&rsquo;d like a site like this for my own location/ where&rsquo;s the "source code" to this site?</dt>
- <dd>
-The software behind this site is open source, and available
-to you mainly under the GNU Affero GPL software license. You can <a
-href="http://github.com/mysociety/fixmystreet">download the
-source code</a> and help us develop it.
-You&rsquo;re welcome to use it in your own projects, although you must also
-make available the source code to any such projects.
-<a href="http://www.fiksgatami.no/">Fiksgatami</a> is an example of our code
-being used in a Norwegian version of this site.
-</dd>
-<dt>I&rsquo;d prefer code in a different language?</dt>
-<dd>
-VisibleGovernment.ca wrote their own code for
-<a href="http://www.fixmystreet.ca/">http://www.fixmystreet.ca/</a>, which is
-written in GeoDjango and available under an MIT licence at <a
-href="http://github.com/visiblegovernment/django-fixmystreet/tree/master">github</a>.
-Or <a href="http://www.fixmystreet.org.nz/">FixMyStreet.org.nz</a> is written in
-Drupal.
-</p>
-</dd>
- <dt>People build things, not organisations. Who <em>actually</em> built it?</dt>
- <dd>Matthew Somerville and Francis Irving wrote the site,
-Chris Lightfoot wrote the tileserver and map cutter, Richard Pope created
-our pins, Deborah Kerr keeps things up-to-date and does user support,
-Ayesha Garrett designed our posters, and Tom Steinberg managed it all.
-
-Thanks also to
-<a href="http://www.ordnancesurvey.co.uk">Ordnance Survey</a> (for the maps,
-UK postcodes, and UK addresses &ndash; data &copy; Crown copyright, all
-rights reserved, Ministry of Justice 100037819&nbsp;2008),
-Yahoo! for their BSD-licensed JavaScript libraries, the entire free software
-community (this particular project was brought to you by Perl, PostgreSQL,
-and the number 161.290) and <a
-href="http://www.bytemark.co.uk/">Bytemark</a> (who kindly host all
-our servers).
-
-Let us know if we&rsquo;ve missed anyone.</dd>
- </dl>
-[% INCLUDE 'footer.html' pagefooter = 'yes' %]
diff --git a/templates/web/zurich/footer.html b/templates/web/zurich/footer.html
new file mode 100644
index 000000000..2304c048e
--- /dev/null
+++ b/templates/web/zurich/footer.html
@@ -0,0 +1,40 @@
+ </div><!-- .content role=main -->
+ </div><!-- .container -->
+ </div><!-- .table-cell -->
+
+ <div class="nav-wrapper">
+ <div class="nav-wrapper-2">
+ <div class="nav-wrapper-3">
+ <div id="main-nav" role="navigation">
+ [% IF c.user_exists %]
+ <p>
+ [% tprintf(loc('Hi %s'), c.user.name || c.user.email) %]
+ </p><p><a href="/admin">[% loc('Summary') %]</a> | <a href="/auth/sign_out">[% loc('sign out') %]</a>
+ </p>
+ [% END %]
+ <ul id="main-menu" class="mob-only">
+ <li><[% IF c.req.uri.path == '/' %]a onclick="$('html, body').animate({scrollTop:0}, 500); return false;" href="#site-header"[% ELSE %]a href="/"[% END %]
+ >[% loc("Report a problem") %]</[% c.req.uri.path == '/' ? 'a' : 'a' %]></li>[%
+ %]<li><[% IF c.req.uri.path == '/reports' %]span[% ELSE %]a href="/reports"[% END
+ %]>[% loc("All reports") %]</[% c.req.uri.path == '/reports' ? 'span' : 'a' %]></li>[%
+ %]<li><[% IF c.req.uri.path == '/faq' %]span[% ELSE %]a href="/faq"[% END
+ %]>[% loc("Help") %]</[% c.req.uri.path == '/faq' ? 'span' : 'a' %]></li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+<!-- [% INCLUDE 'debug_footer.html' %] -->
+ </div> <!-- .wrapper -->
+
+ <div id="zurich-footer-wrapper" class="desk-only">
+ <div id="zurich-footer">
+ &copy; 2013 Stadt Z&uuml;rich
+ <span class="hidden">|</span> <a href="http://www.stadt-zuerich.ch/content/portal/de/index/footer/rechtliche_hinweise.html">Rechtliche Hinweise</a>
+ <span class="hidden">|</span> <a href="http://www.stadt-zuerich.ch/content/portal/de/index/footer/impressum.html">Impressum</a>
+ </div>
+ </div>
+
+</body>
+</html>
diff --git a/templates/web/zurich/header.html b/templates/web/zurich/header.html
index 9fa43f3fa..891c6f1d3 100644
--- a/templates/web/zurich/header.html
+++ b/templates/web/zurich/header.html
@@ -11,21 +11,23 @@
<meta name="HandHeldFriendly" content="true">
<meta name="mobileoptimized" content="0">
- <link rel="stylesheet" href="[% version('/cobrands/' _ c.cobrand.moniker _ '/base.css') %]">
- <link rel="stylesheet" href="[% version('/cobrands/' _ c.cobrand.moniker _ '/layout.css') %]" media="(min-width:48em)">
+[% SET start = c.config.ADMIN_BASE_URL IF admin %]
+
+ <link rel="stylesheet" href="[% start %][% version('/cobrands/' _ c.cobrand.moniker _ '/base.css') %]">
+ <link rel="stylesheet" href="[% start %][% version('/cobrands/' _ c.cobrand.moniker _ '/layout.css') %]" media="(min-width:48em)">
[% extra_css %]
<!--[if (lt IE 9) & (!IEMobile)]>
- <link rel="stylesheet" href="[% version('/cobrands/' _ c.cobrand.moniker _ '/layout.css') %]">
+ <link rel="stylesheet" href="[% start %][% version('/cobrands/' _ c.cobrand.moniker _ '/layout.css') %]">
<![endif]-->
- <script src="[% version('/js/modernizr.custom.js') %]" charset="utf-8"></script>
- <script src="[% version('/cobrands/fixmystreet/position_map.js') %]" charset="utf-8"></script>
- [% INCLUDE 'common_header_tags.html', js_override = '/cobrands/fixmystreet/fixmystreet.js', site_title = 'FixMyZ&uuml;rich' %]
+ <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/themes/redmond/jquery-ui.css">
+
+ <script src="[% start %][% version('/js/modernizr.custom.js') %]" charset="utf-8"></script>
+ <script src="[% start %][% version('/cobrands/fixmystreet/position_map.js') %]" charset="utf-8"></script>
+ [% INCLUDE 'common_header_tags.html', js_override = '/cobrands/fixmystreet/fixmystreet.js', site_title = 'Züri wie neu' %]
[% extra_js %]
-
- [% IF c.req.uri.host == 'osm.fixmystreet.com' %]
- <link rel="canonical" href="http://www.fixmystreet.com[% c.req.uri.path_query %]">
- [% END %]
+
+ <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js" charset="utf-8"></script>
[% INCLUDE 'tracking_code.html' %]
@@ -36,25 +38,56 @@
<div class="table-cell">
<header id="site-header" role="banner">
<div class="container">
- <a href="/" id="site-logo">FixMyStreet</a>
+ <a href="/" id="site-logo-text">Züri wie neu</a>
+ <a href="http://www.stadt-zuerich.ch/" id="site-logo">Stadt Zürich</a>
<a href="#main-nav" id="nav-link">Main Navigation</a>
</div>
</header>
- <div id="user-meta">
- [% IF c.user_exists %]
- <p>
- [% tprintf(loc('Hi %s'), c.user.name || c.user.email) %]
- <a href="/auth/sign_out">[% loc('sign out') %]</a>
- </p>
- [% ELSE %]
- <!-- <a href="/auth">[% loc('Sign in') %]</a> -->
- [% END %]
- </div>
+ <div class="container">
- [% pre_container_extra %]
+[% IF admin %]
+ <div class="admin-nav-wrapper">
+ <div class="admin-nav">
+ <ul>
+ [% pagename = c.req.uri.path %]
+ [% pagename = pagename.replace('/admin/?(\w*).*', '$1') %]
+
+ <li [% IF pagename == 'summary' OR pagename == '' %]class="current"[% END %]>
+ <a href="/admin/summary">[% loc('Summary') %]</a>
+ </li>
+ <li [% IF pagename == 'reports' OR pagename == 'report_edit' %]class="current"[% END %]>
+ <a href="/admin/reports">[% loc('Reports') %]</a>
+ </li>
+ [% IF admin_type == 'dm' OR admin_type == 'super' %]
+ <li [% IF pagename == 'bodies' OR pagename == 'body' %]class="current"[% END %]>
+ <a href="/admin/bodies">[% loc('Bodies') %]</a>
+ </li>
+ [% END %]
+ [% IF admin_type == 'super' %]
+ <li [% IF pagename == 'users' OR pagename == 'user_edit' %]class="current"[% END %]>
+ <a href="/admin/users">[% loc('Users') %]</a>
+ </li>
+ <li [% IF pagename == 'stats' %]class="current"[% END %]>
+ <a href="/admin/stats">[% loc('Stats') %]</a>
+ </li>
+ [% END %]
+ <li class="search-box">
+ <form method="get" action="[% c.uri_for('reports') %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">
+ <input type="text" name="search" size="20" id="search" placeholder="[% loc('Search reports') %]">
+ </form>
+
+ </li>
+ </ul>
+ </div>
+ </div>
+[% END %]
- <div class="container">
<div class="content[% " $mainclass" | html IF mainclass %]" role="main">
+ [% IF NOT admin %]
+ [% INCLUDE 'nav_over_content.html' %]
+ [% END %]
+
+ [% pre_container_extra %]
<!-- [% INCLUDE 'debug_header.html' %] -->
diff --git a/templates/web/zurich/js/validation_rules.html b/templates/web/zurich/js/validation_rules.html
new file mode 100644
index 000000000..d98bc1118
--- /dev/null
+++ b/templates/web/zurich/js/validation_rules.html
@@ -0,0 +1,8 @@
+ validation_rules = {
+ title: { required: true },
+ detail: { required: true },
+ email: { required: true },
+ update: { required: true },
+ phone: { required: true },
+ rznvy: { required: true }
+ };
diff --git a/templates/web/zurich/maps/zurich.html b/templates/web/zurich/maps/zurich.html
new file mode 100644
index 000000000..492ccc556
--- /dev/null
+++ b/templates/web/zurich/maps/zurich.html
@@ -0,0 +1,14 @@
+[% map_js = BLOCK %]
+<script type="text/javascript" src="[% version('/js/OpenLayers.2.11.zurich.js') %]"></script>
+<script type="text/javascript" src="[% version('/js/OpenLayers.Projection.CH1903.js') %]"></script>
+<script type="text/javascript" src="[% version('/js/map-OpenLayers.js') %]"></script>
+<script type="text/javascript" src="[% version('/js/map-wmts-zurich.js') %]"></script>
+<script type="text/javascript" src="[% version('/js/jquery.ba-hashchange.min.js') %]"></script>
+<!--[if lte IE 6]>
+ <link rel="stylesheet" href="/jslib/OpenLayers-2.10/theme/default/ie6-style.css" type="text/css" />
+<![endif]-->
+[% END %]
+
+[% map_html = BLOCK %]
+[% INCLUDE maps/openlayers.html %]
+[% END %]
diff --git a/templates/web/zurich/nav_over_content.html b/templates/web/zurich/nav_over_content.html
new file mode 100644
index 000000000..4dbe87652
--- /dev/null
+++ b/templates/web/zurich/nav_over_content.html
@@ -0,0 +1,10 @@
+ <div id="zurich-main-nav" class="desk-only">
+ <ul>
+ <li><[% IF c.req.uri.path == '/around' || c.req.uri.path == '/' %]span[% ELSE %]a href="/"[% END %]
+ >[% loc("Report a problem") %]</[% c.req.uri.path == '/around' ? 'span' : 'a' %]></li>[%
+ %]<li><[% IF c.req.uri.path == '/reports' %]span[% ELSE %]a href="/reports"[% END
+ %]>[% loc("All reports") %]</[% c.req.uri.path == '/reports' ? 'span' : 'a' %]></li>[%
+ %]<li><[% IF c.req.uri.path == '/faq' %]span[% ELSE %]a href="/faq"[% END
+ %]>[% loc("Help") %]</[% c.req.uri.path == '/faq' ? 'span' : 'a' %]></li>
+ </ul>
+ </div>
diff --git a/templates/web/zurich/report/_item.html b/templates/web/zurich/report/_item.html
new file mode 100644
index 000000000..22b39a2c8
--- /dev/null
+++ b/templates/web/zurich/report/_item.html
@@ -0,0 +1,24 @@
+<li>
+<a class="text" href="[% c.uri_for('/report', problem.id ) %]">
+ [% IF problem.state != 'unconfirmed' AND problem.photo AND c.cobrand.allow_photo_display(problem);
+ photo = problem.get_photo_params
+ %]
+ <img class="img" height="60" width="90" src="[% photo.url_fp %]" alt="">
+ [% END %]
+ [% IF problem.state != 'unconfirmed' %]
+ <h4>[% problem.title | html %]</h4>
+ [% ELSE %]
+ <h4><em>[% loc('Awaiting moderation') %]</em></h4>
+ [% END %]
+ <small>[% prettify_dt( problem.created, 'zurich' ) %]
+ [%- IF dist %], [% dist %]km[% END %]
+ [%- IF include_lastupdate AND problem.created != problem.lastupdate AND problem.whensent != problem.lastupdate %],
+ [% tprintf(loc('last updated %s'), prettify_dt( problem.lastupdate, 'zurich' ) ) %]
+ [%- END %]
+ [% IF NOT no_fixed AND problem.is_fixed %]
+ [% loc('(fixed)') %]
+ [% ELSIF NOT no_fixed AND problem.is_closed %]
+ [% loc('(closed)') %]
+ [% END %]</small>
+</a>
+</li>
diff --git a/templates/web/zurich/report/_main.html b/templates/web/zurich/report/_main.html
new file mode 100644
index 000000000..d80eeb9a4
--- /dev/null
+++ b/templates/web/zurich/report/_main.html
@@ -0,0 +1,17 @@
+<div class="problem-header cf">
+ <h1>[% tprintf( loc('Reported in the %s category'), problem.category ) %]</h1>
+ <p class="sub">
+ [% prettify_dt( problem.created, 'zurich' ) %]
+ [%- IF !problem.used_map %]<br>[% loc('there is no pin shown as the user did not use the map') %][% END %]
+ </p>
+
+ [% IF problem.state != 'unconfirmed' %]
+ [% IF c.cobrand.allow_photo_display(problem) %]
+ [% INCLUDE 'report/photo.html' object=problem %]
+ [% END %]
+ [% add_links( problem.detail ) | html_para %]
+ [% ELSE %]
+ [% loc('This report is awaiting moderation.') %]
+ [% END %]
+
+</div>
diff --git a/templates/web/zurich/report/banner.html b/templates/web/zurich/report/banner.html
new file mode 100644
index 000000000..eda70a0de
--- /dev/null
+++ b/templates/web/zurich/report/banner.html
@@ -0,0 +1,17 @@
+[% USE date %]
+[% BLOCK banner %]
+ <div class="banner">
+ <p id="[% id %]">[% text %]</p>
+ </div>
+[% END %]
+
+[% IF problem.state == 'unconfirmed' %]
+ [% INCLUDE banner, id = 'closed', text = loc('Submitted') %]
+[% ELSIF problem.state == 'confirmed' %]
+ [% INCLUDE banner, id = 'closed', text = loc('Open') %]
+[% ELSIF problem.is_fixed OR problem.is_closed %]
+ [% INCLUDE banner, id = 'fixed', text = loc('Closed') %]
+[% ELSIF problem.state == 'in progress' OR problem.state == 'planned' %]
+ [% INCLUDE banner, id = 'progress', text = loc('In progress') %]
+[% END %]
+
diff --git a/templates/web/zurich/report/new/councils_text_all.html b/templates/web/zurich/report/new/councils_text_all.html
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/templates/web/zurich/report/new/councils_text_all.html
diff --git a/templates/web/zurich/report/new/fill_in_details_form.html b/templates/web/zurich/report/new/fill_in_details_form.html
new file mode 100644
index 000000000..076536601
--- /dev/null
+++ b/templates/web/zurich/report/new/fill_in_details_form.html
@@ -0,0 +1,125 @@
+<div id="report-a-problem-main">
+ <h1>[% loc('Reporting a problem') %]</h1>
+
+ <div id="report-a-problem-sidebar">
+ <!--
+ The text for this section needs checking, but I can't work out which bit comes from where
+ -->
+ <div class="sidebar-tips">
+ [% IF report.used_map %]
+ [% IF partial_token %]
+ <p id="unknown">[% loc('Please note your report has <strong>not yet been sent</strong>. Choose a category and add further information below, then submit.') %]</p>
+ [% END %]
+ <p>[% loc('You have located the problem at the point marked with a green pin on the map. If this is not the correct location, simply click on the map again. ') %]</p>
+ [% END %]
+
+ <p>
+ [% IF report.used_map %]
+ [% INCLUDE 'report/new/fill_in_details_text.html' %]
+ [% ELSE %]
+ [% loc('Please fill in the form below with details of the problem, and describe the location as precisely as possible in the details box.') %]
+ [% END %]
+ </p>
+ </div>
+
+ <div class="sidebar-notes">
+ [% INCLUDE 'report/new/notes.html' %]
+ </div>
+
+ </div>
+
+ [% INCLUDE 'errors.html' %]
+ <fieldset>
+ <div id="problem_form">
+
+ [% INCLUDE 'report/new/form_heading.html' %]
+
+
+ [% IF field_errors.bodies %]
+ <p class='form-error'>[% field_errors.bodies %]</p>
+ [% END %]
+
+ <label for="form_detail">[% loc('Details') %]</label>
+ [% IF field_errors.detail %]
+ <p class='form-error'>[% field_errors.detail %]</p>
+ [% END %]
+ <textarea rows="7" cols="26" name="detail" id="form_detail" placeholder="[% loc('Please fill in details of the problem.') %]" required>[% report.detail | html %]</textarea>
+
+ [% IF js %]
+ <div id="form_category_row">
+ <label for="form_category">[% loc('Category') %]</label>
+ <select name="category" id="form_category" required><option>[% loc('Loading...') %]</option></select>
+ </div>
+ [% ELSE %]
+ [% IF category_options.size %]
+ [% IF field_errors.category %]
+ <p class='form-error'>[% field_errors.category %]</p>
+ [% END %]
+
+ [% PROCESS "report/new/category.html" %]
+ [% END %]
+ [% END %]
+
+ [%- IF category_extras %]
+ [% PROCESS "report/new/category_extras.html" %]
+ [%- END %]
+
+ [% IF c.cobrand.allow_photo_upload %]
+ <label for="form_photo">[% loc('Photo') %]</label>
+ [% IF upload_fileid || report.photo %]
+ [% IF upload_fileid %]
+ <img align="right" src="/photo/[% upload_fileid %].temp.jpeg" alt="">
+ <input type="hidden" name="upload_fileid" value="[% upload_fileid %]">
+ [% END %]
+
+ <p>[% loc('You have already attached a photo to this report, attaching another one will replace it.') %]</p>
+
+ [% IF report.photo %]
+ <img align="right" src="/photo/[% report.id %].jpeg">
+ [% END %]
+ [% END %]
+
+ [% IF field_errors.photo %]
+ <p class='form-error'>[% field_errors.photo %]</p>
+ [% END %]
+ <input type="file" name="photo" id="form_photo">
+ [% END %]
+
+ <label for="form_email">[% loc('Your email') %]</label>
+ [% IF field_errors.email %]
+ <p class='form-error'>[% field_errors.email %]</p>
+ [% END %]
+ <input type="email" value="[% report.user.email | html %]" name="email" id="form_email" placeholder="[% loc('Please enter your email address') %]" required>
+
+ <!--
+ <div class="general-sidebar-notes">
+ <p class="dark">[% loc('We never show your email address or phone number.') %]</p>
+ </div>
+ -->
+
+ <label for="form_name">[% loc('Name') %] [% loc('(optional)') %]</label>
+ [% IF field_errors.name %]
+ <p class='form-error'>[% field_errors.name %]</p>
+ [% END %]
+ <input type="text" value="[% report.name | html %]" name="name" id="form_name" placeholder="[% loc('Your name') %]">
+
+ <label for="form_phone">[% loc('Phone number') %]</label>
+ [% IF field_errors.phone %]
+ <p class='form-error'>[% field_errors.phone %]</p>
+ [% END %]
+ <input type="text" value="[% report.user.phone | html %]" name="phone" id="form_phone" placeholder="[% loc('Your phone number') %]">
+
+ <div class="form-txt-submit-box">
+ [%# ID of submit_sign_in so name can be option, name of submit_register so it doesn't try and sign us in %]
+ <p><input class="green-btn" type="submit" id="submit_sign_in" name="submit_register" value="[% loc('Submit') %]">
+ </div>
+
+ </div>
+ </fieldset>
+
+ [% IF partial_token %]
+ <input type="hidden" name="partial" value="[% partial_token.token %]">
+ [% END %]
+
+ <input type="hidden" name="submit_problem" value="1">
+</div>
diff --git a/templates/web/zurich/report/photo-js.html b/templates/web/zurich/report/photo-js.html
new file mode 100644
index 000000000..05588d085
--- /dev/null
+++ b/templates/web/zurich/report/photo-js.html
@@ -0,0 +1,6 @@
+[% extra_css = BLOCK %]
+ <link rel="stylesheet" href="[% version('/js/fancybox/jquery.fancybox-1.3.4.css') %]">
+[% END %]
+[% extra_js = BLOCK %]
+ <script src="[% version('/js/fancybox/jquery.fancybox-1.3.4.pack.js') %]" charset="utf-8"></script>
+[% END %]
diff --git a/templates/web/zurich/report/update-form.html b/templates/web/zurich/report/update-form.html
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/templates/web/zurich/report/update-form.html
diff --git a/templates/web/zurich/report/updates.html b/templates/web/zurich/report/updates.html
new file mode 100644
index 000000000..786ecd582
--- /dev/null
+++ b/templates/web/zurich/report/updates.html
@@ -0,0 +1,17 @@
+[% IF problem.state == 'fixed - council' OR problem.state == 'closed' %]
+ <h4 class="static-with-rule">[% loc('Updates') %]</h4>
+ <ul class="issue-list">
+ <li>
+ <div class="update-wrap">
+ <div class="update-text">
+ <p class="meta-2">[% prettify_dt( problem.lastupdate, 'zurich' ) %]</p>
+ [% IF problem.state == 'fixed - council' %]
+ [% add_links( problem.extra.public_response ) | html_para %]
+ [% ELSIF problem.state == 'closed' AND problem.external_body %]
+ <p>[% tprintf( loc('Assigned to %s'), problem.body(c).name ) %]</p>
+ [% END %]
+ </div>
+ </div>
+ </li>
+ </ul>
+[% END %]
diff --git a/templates/web/zurich/reports/index.html b/templates/web/zurich/reports/index.html
new file mode 100755
index 000000000..670746753
--- /dev/null
+++ b/templates/web/zurich/reports/index.html
@@ -0,0 +1,33 @@
+[%
+ PROCESS "maps/${map.type}.html";
+ INCLUDE 'header.html',
+ title = loc('Summary reports'),
+ bodyclass = 'mappage';
+%]
+[% map_html %]
+ <p id='sub_map_links'>
+ <a class="hidden-nojs" id="map_layer_toggle" href="">Stadtplan</a>
+ </p>
+</div>
+
+<div id="side">
+
+<h1>[% loc('All Reports') %]</h1>
+
+[% INCLUDE 'pagination.html', param = 'p' %]
+
+<section class="full-width">
+ [% IF problems.0 %]
+ <ul class="issue-list-a">
+ [% FOREACH problem IN problems.0 %]
+ [% INCLUDE 'reports/_list-entry.html' %]
+ [% END %]
+ </ul>
+ [% END %]
+</section>
+
+[% INCLUDE 'pagination.html', param = 'p' %]
+
+</div>
+[% INCLUDE 'footer.html' %]
+
diff --git a/templates/web/zurich/tokens/confirm_problem.html b/templates/web/zurich/tokens/confirm_problem.html
new file mode 100644
index 000000000..d61cf3ffa
--- /dev/null
+++ b/templates/web/zurich/tokens/confirm_problem.html
@@ -0,0 +1,15 @@
+[% INCLUDE 'header.html', title = loc('Confirmation') %]
+
+<h1>[% loc('Confirmation') %]</h1>
+
+[%
+ loc('You have successfully confirmed your email address.');
+ tprintf(
+ loc( 'You can <a href="%s%s">view the problem on this site</a>.' ),
+ c.cobrand.base_url_for_report( problem ),
+ problem.url
+ );
+%]
+</p>
+
+[% INCLUDE 'footer.html' %]
diff --git a/templates/web/zurich/tracking_code.html b/templates/web/zurich/tracking_code.html
new file mode 100644
index 000000000..bffd0fd6f
--- /dev/null
+++ b/templates/web/zurich/tracking_code.html
@@ -0,0 +1,18 @@
+[%
+ SET ga_code = 'UA-38427437-1';
+ SET ga_code = 'UA-39223200-1' IF c.config.BASE_URL == "https://www.zueriwieneu.ch";
+%]
+<script type="text/javascript">
+
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', '[% ga_code %]']);
+ _gaq.push (['_gat._anonymizeIp']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+
+</script>