<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

    <title>FixMyStreet Platform</title>
    <link href="https://fixmystreet.org/atom.xml" rel="self"/>
    <link href="https://fixmystreet.org/"/>
    <updated>2026-03-12T07:33:17+00:00</updated>
    <id>https://fixmystreet.org/</id>
    <author>
        <name>mySociety</name>
    </author>

    
    <entry>
        <title>Version 6.0</title>
        <link href="https://fixmystreet.org/2024/11/14/v6.0/"/>
        <updated>2024-11-14T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2024/11/14/v6.0</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/jatimm/16835810036/&quot; title=&quot;the tunnel&quot;&gt;&lt;img src=&quot;https://live.staticflickr.com/7603/16835810036_af8aae92a3.jpg&quot; width=&quot;500&quot; height=&quot;333&quot; alt=&quot;the tunnel&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;I am happy to announce the release of &lt;strong&gt;version 6.0&lt;/strong&gt; of FixMyStreet.&lt;/p&gt;

&lt;p&gt;Some features in this release include:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The ability to add a category filter to the reporting process, letting people search for a particular category. (This involves adding a 
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;category_filter.html&lt;/code&gt; template to your cobrand, similar to the
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/blob/e663749a078/templates/web/fixmystreet.com/report/new/category_filter.html&quot;&gt;one used on fixmystreet.com&lt;/a&gt;.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/v6-category-filter-small.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Improved display of the filters on map pages:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/v6-map-filters-small.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A new geolocation button to centre the map at your location:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/v6-geolocation-small.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Adding the report ID reference to lists of reports in emails:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/v6-reference-email-small.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;We redirect to a confirmation page when creating a report, reducing the risk of Safari creating a duplicate report&lt;/li&gt;
  &lt;li&gt;Cobrands can have different map display times for open/closed/fixed reports&lt;/li&gt;
  &lt;li&gt;All uploaded images are now converted to JPEGs&lt;/li&gt;
  &lt;li&gt;Users can opt out of questionnaires&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;admin-improvements&quot;&gt;Admin improvements&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/v6-admin-sidebar-small.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;We have improved the navigation in the admin, moving the main navigation to a sidebar.
This is accompanied by minor display and performance improvements in various admin pages.&lt;/p&gt;

&lt;p&gt;Extra questions can now be multiple-choice using checkboxes, or a datetime picker, in addition
to the existing options of text field, textarea, and single value. You can also
make a phone number required for a particular category.&lt;/p&gt;

&lt;p&gt;On the dashboard, you can now filter by multiple categories, and we’ve fixed
the CSV export to not ignore reports that had updates that were only
unconfirmed or hidden.&lt;/p&gt;

&lt;p&gt;A long standing bug viewing a category when it has more than 1,000 history entries has been fixed.&lt;/p&gt;

&lt;h3 id=&quot;development-improvement-examples&quot;&gt;Development improvement examples&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;FixMyStreet has been around for a long time, and implemented its own way of sorting extra data
on a per-report or update basis. Since then, PostgreSQL has added JSON support, and we have now
moved the database tables to store data in this standard way.&lt;/li&gt;
  &lt;li&gt;The site can now automatically spot a favicon.ico file present in the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;web/cobrands/&amp;lt;your-cobrand&amp;gt;&lt;/code&gt; directory, rather than having to add your own
header template.&lt;/li&gt;
  &lt;li&gt;Cobrands can provide (optionally per-category) custom distances for duplicate lookups&lt;/li&gt;
  &lt;li&gt;The daemon will deal with waiting reports in a random order&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;upgrading&quot;&gt;Upgrading&lt;/h3&gt;

&lt;p&gt;A full list of changes can be seen in the
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases/tag/v6.0&quot;&gt;v6.0 changelog&lt;/a&gt;
as usual.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 5.0</title>
        <link href="https://fixmystreet.org/2023/05/10/v5.0/"/>
        <updated>2023-05-10T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2023/05/10/v5.0</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/bassbro/44950090234/&quot; title=&quot;This Better Be Good&quot;&gt;&lt;img src=&quot;https://live.staticflickr.com/4852/44950090234_be90a39a9e.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;This Better Be Good&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;I am happy to announce the release of &lt;strong&gt;version 5.0&lt;/strong&gt; of FixMyStreet.&lt;/p&gt;

&lt;h3 id=&quot;mobile-use-and-the-progressive-web-app-pwa&quot;&gt;Mobile use and the Progressive Web App (PWA)&lt;/h3&gt;

&lt;p&gt;Mobile reporting now uses a crosshairs mechanism for locating the report rather
than tapping, matching the old native app and providing an easier experience.
We have added offline report drafting, where even if you do not have signal you
should be able to start the basics of a report to carry on when back online.&lt;/p&gt;

&lt;p&gt;The site is installable as a Progressive Web App (PWA) on Android and iOS, to be
installed to your home screen via your browser, and both the UK and Sweden have
successfully packaged the code as a native app using pwabuilder and submitted
it to the app stores.&lt;/p&gt;

&lt;h3 id=&quot;accessibility&quot;&gt;Accessibility&lt;/h3&gt;

&lt;p&gt;Early last year, we added keyboard navigation of the map for those who may be
unable to use a pointing device. An accessibility audit was then performed on
one installation of the site later in the year, and that has led to a number of
other improvements, including some improved visual contrast, a couple of
missing labels and fieldsets, and better focus states.&lt;/p&gt;

&lt;h3 id=&quot;admin-improvements&quot;&gt;Admin improvements&lt;/h3&gt;

&lt;p&gt;You can now set a message in the admin per-body that will be shown on the
reporting page, as well as one on the front page. We’ve paginated alerts on the
user edit page for cases where a user has a lot of alerts, and now display
photos in report moderation updates rather than just the image hashes.&lt;/p&gt;

&lt;p&gt;If you are using response templates, you can now have a different template
displayed as an update to the report to the text emailed to the user.&lt;/p&gt;

&lt;h3 id=&quot;development-improvements&quot;&gt;Development improvements&lt;/h3&gt;

&lt;p&gt;As our own installation of FixMyStreet spans multiple front end servers, and to
help with stability of URLs for the PWA service worker, we have switched our
static asset cache-busting from using last modified times to using a digest of
the file contents. There is also an option to use the hash in the filename
itself, rather than a query parameter, which again may be useful if you deploy
on multiple servers.&lt;/p&gt;

&lt;h3 id=&quot;upgrading&quot;&gt;Upgrading&lt;/h3&gt;

&lt;p&gt;A full list of changes can be seen in the
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases/tag/v5.0&quot;&gt;v5.0 changelog&lt;/a&gt;
as usual.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 4.0</title>
        <link href="https://fixmystreet.org/2021/12/03/v4.0/"/>
        <updated>2021-12-03T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2021/12/03/v4.0</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/wwarby/1580431681/&quot; title=&quot;Westminster Bridge&quot;&gt;&lt;img src=&quot;https://live.staticflickr.com/2034/1580431681_388dc2671d.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;Westminster Bridge&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;Well, 2021 has certainly been a year, hasn’t it. Apologies for the delay
between releases, but we are now releasing &lt;strong&gt;version 4.0&lt;/strong&gt;, with a number of
new features, outlined below. For those who don’t want to update immediately,
we are also releasing &lt;strong&gt;version 3.1.1&lt;/strong&gt; as an update to 3.1 including a number
of bugfixes and the update necessary to deal with issues caused by the rollover
of the Let’s Encrypt root certificate.&lt;/p&gt;

&lt;h3 id=&quot;multi-page-reporting-form&quot;&gt;Multi-page reporting form&lt;/h3&gt;

&lt;p&gt;The main change in this release is the move to a multi-page reporting form,
where you pick the category first, then the subcategory if relevant, any extra
questions for that category, photos, problem details, and then user details
last. Research shows people find a form easier to fill in this way, and it
makes it clearer what is expected at each step of the process. We have also
switched from a category drop-down to radio buttons, as this is easier to use,
especially on mobile.&lt;/p&gt;

&lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;/assets/posts/v4-category.jpg&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;photo-redaction&quot;&gt;Photo redaction&lt;/h3&gt;

&lt;p&gt;We have added photo redaction support, letting you moderate parts of a photo
that should not be public without removing the whole photo, and photos can also
be moderated individually.&lt;/p&gt;

&lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;/assets/posts/v4-redaction.gif&quot; width=&quot;50%&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;development-docker-environment&quot;&gt;Development Docker environment&lt;/h3&gt;

&lt;p&gt;We now include a development Docker environment, which should hopefully make it
easier for people to spin up a local copy of the code for development. If you
have Docker and Docker Compose installed, a fresh clone and then
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker/compose-dev up&lt;/code&gt; should set everything up for you.&lt;/p&gt;

&lt;h3 id=&quot;other-improvements&quot;&gt;Other improvements&lt;/h3&gt;

&lt;p&gt;You can now specify a radius when signing up for an email alert, the mobile
site has an improved navigation menu, users can set global notification
preferences, and the search box supports Maidenhead Locator references.&lt;/p&gt;

&lt;p&gt;A few admin pages have had their layout improved, and you can now customise
hints on a per-category basis. The CSV export includes device type, staff
can find non-public reports when using the front page ID search, and user login
attempts can be throttled per user.&lt;/p&gt;

&lt;p&gt;The alert script has been split up, so you can e.g. choose to send local alerts
at a different frequency to update alerts.&lt;/p&gt;

&lt;h3 id=&quot;bugfixes&quot;&gt;Bugfixes&lt;/h3&gt;

&lt;p&gt;As always, we have fixed a number of issues that have arisen – for example, if
a category has more than 10 extra questions, they should now be sorted in the
correct order, there was a bug in update text moderation, and categories with
slashes in no longer break the CSV export.&lt;/p&gt;

&lt;h3 id=&quot;upgrading&quot;&gt;Upgrading&lt;/h3&gt;

&lt;p&gt;A full list of changes can be seen in the
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases/tag/v4.0&quot;&gt;v4.0 changelog&lt;/a&gt;
or
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases/tag/v3.1.1&quot;&gt;v3.1.1 changelog&lt;/a&gt;
as usual.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 3.1</title>
        <link href="https://fixmystreet.org/2020/11/16/v3.1/"/>
        <updated>2020-11-16T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2020/11/16/v3.1</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/theknowlesgallery/8015992277/&quot; title=&quot;Palouse Wheat ready for harvest&quot;&gt;&lt;img src=&quot;https://live.staticflickr.com/8300/8015992277_ce32585019.jpg&quot; width=&quot;500&quot; height=&quot;335&quot; alt=&quot;Palouse Wheat ready for harvest&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;I hope you are all okay with the ongoing situations around the world. We are
happy to release &lt;strong&gt;version 3.1&lt;/strong&gt;, with some new features and bugfixes.&lt;/p&gt;

&lt;h3 id=&quot;front-end-improvements&quot;&gt;Front end improvements&lt;/h3&gt;

&lt;p&gt;A random assortment of improvements to the front end, including aerial maps for
Bing and OSM maps, lazy image loading on list items, the ability to check
passwords against Have I Been Pwned, and Open Location Codes support in the
search box.&lt;/p&gt;

&lt;h3 id=&quot;admin-improvements&quot;&gt;Admin improvements&lt;/h3&gt;

&lt;p&gt;We’ve added a full text index so searching reports in the admin should be much
quicker. You can disable updates or reopening on a per-category basis, as well
as enable anonymous reporting. CSV generation is now done asynchronously, with
progress shown, in case it takes a long time. Staff users can use HTML in
updates, and response templates can also include HTML. The site now records
whether a report was made on desktop or mobile, and includes any extra fields
in email submissions to bodies. Staff status can be removed from users in bulk,
and inspectors can update the asset on a report via the inspector form.&lt;/p&gt;

&lt;h3 id=&quot;bugfixes&quot;&gt;Bugfixes&lt;/h3&gt;

&lt;p&gt;As always, a wide variety of issues covered here. We added PostgreSQL 12
compatibility to the schema update script, fixed an issue where the CSV export
returned multiple entries per row, added a fix for photo orientation in modern
browsers, and improved the moderation diff display.&lt;/p&gt;

&lt;h3 id=&quot;upgrading&quot;&gt;Upgrading&lt;/h3&gt;

&lt;p&gt;A full list of changes can be seen in the
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases/tag/v3.1&quot;&gt;changelog&lt;/a&gt; as usual.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 3.0.1</title>
        <link href="https://fixmystreet.org/2020/05/06/v3.0.1/"/>
        <updated>2020-05-06T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2020/05/06/v3.0.1</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;/div&gt;

&lt;p&gt;First of all, I hope you are all safe wherever you may be. We held a couple of
FixMyStreet user groups recently for body users of FixMyStreet in the UK, and
someone from a large body said that their FixMyStreet installation was proving
really useful in these times, as they were making far fewer internal reports
due to the UK lockdown.&lt;/p&gt;

&lt;p&gt;Admist all this, we continue to develop the software, and today are releasing
&lt;strong&gt;version 3.0.1&lt;/strong&gt;, a bugfix release with a couple of new features.&lt;/p&gt;

&lt;h3 id=&quot;admin-improvements&quot;&gt;Admin improvements&lt;/h3&gt;

&lt;p&gt;You can now provide an automatic initial update on reports made in a particular
category to a particular body, perhaps to provide information on timings or
similar. Make sure the body has a user to associate comments with, and then add
a response template in the Open state with auto-response checked, restricted to
a list of categories if you wish. After that, the template will be used to
provide an initial update on new reports made.&lt;/p&gt;

&lt;p&gt;We have also added “staff-only” categories, which are categories that staff
users can see but normal users cannot. One council is using this to provide
emergency categories that their contact centre staff can use to make reports
after manual triage.&lt;/p&gt;

&lt;p&gt;The dashboard export and report search should now be quicker, after some
investigation that area. We’ve also moved the overall stats off the index page
to the stats page, so the index page loads more quickly.&lt;/p&gt;

&lt;h3 id=&quot;bugfixes&quot;&gt;Bugfixes&lt;/h3&gt;

&lt;p&gt;Thanks to those of you letting us know about bugs or problems. Those we have
fixed include an incorrect To header on emails about inactive accounts, a
couple of issues with the front page recent reports list showing different
results depending on whether the cache was used or not, and a double escape in
the Google Maps URL.&lt;/p&gt;

&lt;p&gt;Others we have fixed include maintaining the category group on pin move with
same category in multiple groups, and fixing sorting by most commented on
the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/around&lt;/code&gt; map view.&lt;/p&gt;

&lt;h3 id=&quot;development-improvements&quot;&gt;Development improvements&lt;/h3&gt;

&lt;p&gt;As well as the cron scripts, this release now includes a dæmon that you
can use to send reports and updates. Using the dæmon will mean reports
and updates are sent almost immediately after they are confirmed, but will
require a bit more setup, as you’ll need to set it up as a dæmon running
all the time in your system. We’ve provided an example config file for systemd
to hopefully help with that. If you do run the dæmon, be sure to remove
the lines of your crontab that send reports and updates :)&lt;/p&gt;

&lt;p&gt;Alongside that, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;send-reports&lt;/code&gt; no longer prints out failures in verbose mode,
there is a separate &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;send-reports-failure-summary&lt;/code&gt; script to do that. Also the
fetch-comments and fetch-reports scripts have been consolidated into one
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fetch&lt;/code&gt; script, which can also now parallelize fetching.&lt;/p&gt;

&lt;h3 id=&quot;upgrading&quot;&gt;Upgrading&lt;/h3&gt;

&lt;p&gt;A full list of changes can be seen in the
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases/tag/v3.0.1&quot;&gt;changelog&lt;/a&gt; as usual.&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>Version 3.0</title>
        <link href="https://fixmystreet.org/2020/03/04/v3.0/"/>
        <updated>2020-03-04T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2020/03/04/v3.0</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/iqremix/23232339432/&quot; title=&quot;Follow the Yellow Line&quot;&gt;&lt;img src=&quot;https://live.staticflickr.com/750/23232339432_66b398ac1c.jpg&quot; width=&quot;500&quot; height=&quot;333&quot; alt=&quot;Follow the Yellow Line&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;It has been quite a while since the last release, apologies, but today
we are happy to be releasing &lt;strong&gt;version 3.0&lt;/strong&gt; of the FixMyStreet Platform,
which has a number of improvements.&lt;/p&gt;

&lt;h3 id=&quot;front-end-improvements&quot;&gt;Front end improvements&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;FixMyStreet can now be installed as a progressive web app. This means we’ve
added a web manifest (and an admin UI for managing this) and a basic service
worker that shows a page if you’re offline, and continues the functionality of
allowing staff users to store and view their shortlisted reports offline.&lt;/p&gt;

    &lt;p&gt;If you serve your site over HTTPS, you will be able to add the website to
your homescreen (browsers may prompt the user) and have it work like an app.
This provides us with a solid base on which to continue improving this in
future, including hopefully adding functionality such as offline report drafting
through the web site.&lt;/p&gt;

    &lt;div class=&quot;r&quot; style=&quot;height:217px;overflow:hidden&quot;&gt;
  &lt;a href=&quot;https://user-images.githubusercontent.com/739624/58807589-406d1480-8610-11e9-8208-ca71e3e0424f.png&quot;&gt;
    &lt;img style=&quot;margin-top:-450px&quot; alt=&quot;Screenshot of mobile filters&quot; src=&quot;https://user-images.githubusercontent.com/739624/58807589-406d1480-8610-11e9-8208-ca71e3e0424f.png&quot; /&gt;
  &lt;/a&gt;
&lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Various improvements have been made to the site on mobile – the “try again” process
is clearer, duplicate suggestions show an inline map, the photo upload message is
better, and map filters can now be accessed.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Category groups are now used wherever a category list is shown – admin pages,
map filters, and so on; and you can pass a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;filter_category&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;filter_group&lt;/code&gt;
parameter to the front page or around page to pre-select that option, which
makes it easier to deep link to FixMyStreet from a page or form on another site.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/4776/71002776-e4636c80-20d7-11ea-995b-72cfec673f73.png&quot; align=&quot;right&quot; style=&quot;max-width:25%&quot; hspace=&quot;8&quot; alt=&quot;Screenshot of map geolocation blue dot&quot; /&gt;&lt;/p&gt;

    &lt;p&gt;If you use geolocation, your location will now be displayed on the map, as
shown in the screenshot.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;As asked for a few times on our mailing list, we now use a report’s image as
its OpenGraph image on an individual report page when shared.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;We’ve added XSL to our RSS feeds which means browsers no longer display them
as raw XML but as a nice simple web page that explains its purpose. Before
and after shots below:&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;div style=&quot;height:250px; overflow:hidden; text-align: center&quot;&gt;
&lt;img alt=&quot;RSS feed before changes, raw XML&quot; hspace=&quot;8&quot; align=&quot;top&quot; style=&quot;max-width:40%&quot; src=&quot;https://user-images.githubusercontent.com/154364/68796646-24ec4800-064b-11ea-8c21-607fc8198fb9.png&quot; /&gt;
&lt;img alt=&quot;RSS feed after changes, looks much nicer&quot; hspace=&quot;8&quot; align=&quot;top&quot; style=&quot;max-width:40%&quot; src=&quot;https://user-images.githubusercontent.com/739624/68948832-a9a4a680-07b0-11ea-9e7b-4d53e329a35a.png&quot; /&gt;
&lt;/div&gt;

&lt;h3 id=&quot;security&quot;&gt;Security&lt;/h3&gt;

&lt;p&gt;All template variables are now automatically escaped by default, to help
protect against any future XSS vulnerabilities. We also rotate the user’s
session ID after successful login, and scrub the admin description fields.&lt;/p&gt;

&lt;p&gt;If any of your own templates outputs a variable that contains HTML that you
wish to continue to allow to display as HTML, you will need to alter your
template to escape the variable with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;safe&lt;/code&gt; filter, e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[% some_html |
safe %]&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&quot;admin-improvements&quot;&gt;Admin improvements&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;FixMyStreet now has a new roles system, allowing you to create groups of
permissions and apply those roles to users.&lt;/p&gt;

    &lt;div class=&quot;r&quot; style=&quot;height:280px;overflow:auto&quot;&gt;&lt;a href=&quot;https://user-images.githubusercontent.com/739624/65964516-0e03e480-e455-11e9-8c56-f4bb78096918.png&quot;&gt;&lt;img alt=&quot;Category edit form screenshot&quot; src=&quot;https://user-images.githubusercontent.com/739624/65964516-0e03e480-e455-11e9-8c56-f4bb78096918.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The category edit form has been drastically improved; category names can now be
edited, categories can be listed under more than one group, and categories or
particular extra questions can disable the reporting form (for e.g. emergency
“please call” categories or questions).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Two-factor authentication can be used by any staff member, and you can choose
to optionally enforce it for all staff.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The admin report edit page now stores moderation history, like the front end,
and you can now view a user’s admin log history.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;img alt=&quot;Heatmap web page&quot; src=&quot;/assets/img/pro-user-guide/heatmap.jpeg&quot; align=&quot;right&quot; style=&quot;max-width:50%&quot; hspace=&quot;8&quot; /&gt;&lt;/p&gt;

    &lt;p&gt;We’ve added a heatmap dashboard for staff users, which can show hotspots.
To enable this, you will need to add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;heatmap: { yourcobrand: 1 }&lt;/code&gt; to your
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;COBRAND_FEATURES&lt;/code&gt; configuration.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;There’s a new “staff only” contact state, for categories that can only be
used by staff.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Staff users can report as other users even if they only have a name,
and can sign other people up to alerts.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;bugfixes&quot;&gt;Bugfixes&lt;/h3&gt;

&lt;p&gt;Of course there have been a lot of bugfixes as well. One I remember is
when going back to the initial state with popstate, a change event was
being triggered on every single option of the filter selects. This led
to a lot of change events running on the category/status multi-selects
which then needlessly repeated the same activities over and over. This
locked up the browser for seconds in locations with many categories.
Below is a chart showing browser performance before and after:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/154364/73260403-bcc8ef00-41c1-11ea-87be-96a135f89453.png&quot; alt=&quot;Performance chart before bugfix, 12 seconds locked browser&quot; /&gt;
&lt;img src=&quot;https://user-images.githubusercontent.com/154364/73260623-32cd5600-41c2-11ea-9fa4-8122e9710440.png&quot; alt=&quot;Performance chart after bugfix, 0.2 seconds&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;development-improvements&quot;&gt;Development improvements&lt;/h3&gt;

&lt;p&gt;We’ve upgraded the underlying framework and other packages, added a banner to
the staging website/emails to make it obvious when you’re in development, added
configuration for admin resending, a Content-Security-Policy header, and
stopped hard coding the site name in the database fixture.&lt;/p&gt;

&lt;h3 id=&quot;open311-improvements&quot;&gt;Open311 improvements&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;It is now possible for an external Open311 service to POST updates on a report
to FixMyStreet, rather than have FixMyStreet poll an external service for updates.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Email templates can include a placeholder to include the description fetched
from the Open311 server in the update.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Private reports are supported, in that an Open311 server can mark a category
as private which will then automatically mark all reports sent and received
in that category as private.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Meta questions added in the admin can be marked as protected so that they
won’t be overridden by data fetched from an Open311 server. This is useful
for e.g. an “emergency” question that the Open311 server does not care about.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;upgrading&quot;&gt;Upgrading&lt;/h3&gt;

&lt;p&gt;As mentioned above, but it is worth repeating, if any of your own templates
outputs a variable that contains HTML that you wish to continue to allow to
display as HTML, you will need to alter your template to escape the variable
with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;safe&lt;/code&gt; filter, e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[% some_html | safe %]&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A full list of changes can be seen in the
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases/tag/v3.0&quot;&gt;changelog&lt;/a&gt; as usual.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 2.6</title>
        <link href="https://fixmystreet.org/2019/04/29/v2.6/"/>
        <updated>2019-04-29T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2019/04/29/v2.6</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;img src=&quot;/assets/posts/v2.6-image.jpeg&quot; alt=&quot;&quot; /&gt;
Image &amp;copy; &lt;a href=&quot;https://twitter.com/StillWalkers&quot;&gt;Ben Waddington&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;Today we have released &lt;strong&gt;version 2.6&lt;/strong&gt; of FixMyStreet.&lt;/p&gt;

&lt;p&gt;This release fixes a cross-site scripting security issue where someone could
create a report through the site with a specially constructed query parameter,
and then viewing that report on the admin report edit page would allow the
report creator to run their own JavaScript. We have also released version 2.5.1
which is identical to 2.5 including this fix.&lt;/p&gt;

&lt;p&gt;There’s a new, optional, feature to auto-suggest similar nearby problems while
reporting, to discourage duplicate reports; and the map state is now updated in
the URL to make sharing links easier. A bit more work has been done on
moderation, spotting conflicts and showing moderation history to staff on
report pages, as well as in the admin.&lt;/p&gt;

&lt;p&gt;Mostly this release is bugfixes, please see the
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases/tag/v2.6&quot;&gt;changelog&lt;/a&gt; for
full details.&lt;/p&gt;

&lt;h2 id=&quot;upgrading&quot;&gt;Upgrading&lt;/h2&gt;

&lt;p&gt;The admin body and user sections have been refactored – if you have custom
templates/code, you may need to update links to those.&lt;/p&gt;

&lt;p&gt;If you wish the default for the showname checkbox to be checked, you can add
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sub default_show_name { 1 }&lt;/code&gt; to your cobrand file.&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>Version 2.5</title>
        <link href="https://fixmystreet.org/2018/12/21/v2.5/"/>
        <updated>2018-12-21T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2018/12/21/v2.5</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/catinatree/8299877655/&quot; title=&quot;White christmas!!! &amp;#x3D;D&quot;&gt;&lt;img src=&quot;https://farm9.staticflickr.com/8501/8299877655_ea1faf5bb3.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;White christmas!!! &amp;#x3D;D&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;Today we have released &lt;strong&gt;version 2.5&lt;/strong&gt; of FixMyStreet; happy solstice!&lt;/p&gt;

&lt;p&gt;This release contains a number of front end improvements, especially to the
sign in flow. This was the result of a lot of work to simplify the whole
process, and we’ve written more about it on the
&lt;a href=&quot;https://www.mysociety.org/2018/12/20/open-sesame-simpler-log-in-forms-on-fixmystreet/&quot;&gt;mySociety blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Other front end improvements range from a more prominent display of “state” on
report page, making sure you don’t need two taps on a report list entry on a
touchscreen, and clearer relocation options while you’re reporting a problem.&lt;/p&gt;

&lt;p&gt;Moderation has had some work done – it can now potentially edit a report’s
category, should you wish it to do so; it stores more of a report’s original
data upon moderation, and also now stores all moderation history, making that
visible in the report/update admin interface.&lt;/p&gt;

&lt;p&gt;Bugfixes include one reported by FixaMinGata (back in early 2017!) about better
map zoom behaviour when clicking on pins and going back; not escaping HTML
entities in report titles pulled in by Ajax; and show missing reopening/fixed
questionnaire responses when tey lacked their own separate update. We also
fixed some issues with our Open311 contact group handling, and improved the
validation of fetched reports timestamps.&lt;/p&gt;

&lt;p&gt;We now strip Exif data on uploaded photos, and have added a new config
variable, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SYMLINK_FULL_SIZE&lt;/code&gt;, that can be used to symlink your full size
photos out of the photo cache rather than copy them, if your static files are
being served by your web server.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases/tag/v2.5&quot;&gt;Full changelog&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;upgrading&quot;&gt;Upgrading&lt;/h2&gt;

&lt;p&gt;Due to the sign-in and banner changes, this release changes a number of the
base templates. If you have overridden any related templates in your cobrand
and not fed those changes upstream, you may need to make adjustments to match;
please use our &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bin/cobrand-checks&lt;/code&gt; script to help make comparisons between
your changes.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 2.4.2</title>
        <link href="https://fixmystreet.org/2018/11/06/v2.4.2/"/>
        <updated>2018-11-06T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2018/11/06/v2.4.2</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/eperales/2588601813/&quot; title=&quot;Water &amp;amp; Oil&quot;&gt;&lt;img src=&quot;https://farm4.staticflickr.com/3070/2588601813_eb5e97557f.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;Water &amp;amp; Oil&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;Today we have released &lt;strong&gt;version 2.4.2&lt;/strong&gt; of FixMyStreet.&lt;/p&gt;

&lt;p&gt;This is mainly a bugfix release, but does contain a couple of new features -
the admin lets you see and manage a user’s alerts, and the dashboard has update
CSV export.&lt;/p&gt;

&lt;p&gt;Bugfixes include an issue when setting up a new Vagrant-based installation,
updating the areas column when a report is moved by a staff user, giving
superusers access to update staff dropdown, and an issue with subcategories
when visiting /report/new directly.&lt;/p&gt;

&lt;p&gt;We have renamed a few SCSS variables for clarity; the old names still work, but
if you wish to update your cobrand, then change &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$map_nav_bg&lt;/code&gt; to
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$nav_background_colour&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$nav_fg&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$nav_colour&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$nav_fg_hover&lt;/code&gt; to
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$nav_hover_background_colour&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases/tag/v2.4.2&quot;&gt;Full changelog&lt;/a&gt;&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Migrating to S3 photo storage</title>
        <link href="https://fixmystreet.org/2018/10/08/s3-photo-migration/"/>
        <updated>2018-10-08T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2018/10/08/s3-photo-migration</id>
        <content type="html">&lt;p&gt;The &lt;a href=&quot;/2018/10/01/v2.4.1/&quot;&gt;recent release of FixMyStreet v2.4.1&lt;/a&gt; brought with
it the ability to store photos for reports &amp;amp; updates in a bucket on Amazon’s
S3 instead of locally on disk.&lt;/p&gt;

&lt;p&gt;Getting a new site configured to store newly uploaded photos in S3 is explained
in the &lt;a href=&quot;/customising/config/#photo_storage_backend&quot;&gt;configuration pages&lt;/a&gt;, and
is a matter of tweaking a few keys in your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;general.yml&lt;/code&gt; file. But what about
if you have an existing FixMyStreet installation that you would like to
migrate to storing all photos in S3? This post outlines a process for
achieving just that - without any downtime.&lt;/p&gt;

&lt;h2 id=&quot;prerequisites&quot;&gt;Prerequisites&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;A running FixMyStreet site with at least one report or update with a photo&lt;/li&gt;
  &lt;li&gt;An account on Amazon AWS, and access/secret keys for a role that can create/manage S3 buckets&lt;/li&gt;
  &lt;li&gt;The &lt;a href=&quot;https://aws.amazon.com/cli/&quot;&gt;AWS CLI&lt;/a&gt; tool installed on your FixMyStreet server, and &lt;a href=&quot;https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html&quot;&gt;configured&lt;/a&gt; with access credentials&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;creating-the-bucket&quot;&gt;Creating the bucket&lt;/h2&gt;

&lt;p&gt;First off, we need to create a bucket to hold all the photos. If you’ve already done this, skip ahead to the &lt;strong&gt;&lt;a href=&quot;#migrating-photos&quot;&gt;Migrating photos&lt;/a&gt;&lt;/strong&gt; section.&lt;/p&gt;

&lt;p&gt;We’ll show two ways to create a bucket: via the S3 web console and using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;aws&lt;/code&gt; command line tool.&lt;/p&gt;

&lt;h3 id=&quot;using-the-s3-web-console&quot;&gt;Using the S3 web console&lt;/h3&gt;

&lt;p&gt;Log in to &lt;a href=&quot;https://s3.console.aws.amazon.com/s3/home&quot;&gt;S3 web console&lt;/a&gt;, and click the ‘Create Bucket’ button&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/s3-migration-create-bucket.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Enter a name for the bucket, e.g., &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;my-fixmystreet-photos&lt;/code&gt;, and choose the region closest to your FixMyStreet server (&lt;a href=&quot;https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html&quot;&gt;more about buckets and regions&lt;/a&gt;):&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/s3-migration-bucket-details.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Your newly created bucket should then appear in the list of buckets. Make sure public access isn’t allowed (photos are served to users via your FixMyStreet server, not directly from S3):&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/s3-migration-bucket-private.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;If everything looks OK, skip to the &lt;strong&gt;&lt;a href=&quot;#migrating-photos&quot;&gt;Migrating photos&lt;/a&gt;&lt;/strong&gt; section.&lt;/p&gt;

&lt;h3 id=&quot;using-the-aws-cli-tool&quot;&gt;Using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;aws&lt;/code&gt; CLI tool&lt;/h3&gt;

&lt;p&gt;You can also create buckets from the command line using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;aws&lt;/code&gt; tool.&lt;/p&gt;

&lt;p&gt;If you’ve not already done so, now is the time to &lt;a href=&quot;https://aws.amazon.com/cli/&quot;&gt;install&lt;/a&gt; and &lt;a href=&quot;https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html&quot;&gt;configure&lt;/a&gt; the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;aws&lt;/code&gt; CLI tool.&lt;/p&gt;

&lt;p&gt;To create a bucket named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;my-fixmystreet-photos&lt;/code&gt; in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;eu-west-1&lt;/code&gt; region, run the following:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;aws s3 mb s3://my-fixmystreet-photos &lt;span class=&quot;nt&quot;&gt;--region&lt;/span&gt; eu-west-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The following success message should be shown:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;make_bucket: my-fixmystreet-photos
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The bucket’s region can be inspected:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;aws s3api get-bucket-location &lt;span class=&quot;nt&quot;&gt;--bucket&lt;/span&gt; my-fixmystreet-photos
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;LocationConstraint&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;eu-west-1&quot;&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The bucket should be created as private by default, but you may wish to check its access policy
on the &lt;a href=&quot;https://s3.console.aws.amazon.com/s3/home&quot;&gt;S3 web console&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;migrating-photos&quot;&gt;Migrating photos&lt;/h2&gt;

&lt;p&gt;Now that the bucket has been created, the next step is to fill it with all the photos
from your existing FixMyStreet installation. For this we’ll need the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;aws&lt;/code&gt; CLI tool,
so make sure you’ve &lt;a href=&quot;https://aws.amazon.com/cli/&quot;&gt;installed&lt;/a&gt; and &lt;a href=&quot;https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html&quot;&gt;configured&lt;/a&gt; it.&lt;/p&gt;

&lt;p&gt;Existing photos are stored on disk in the directory specified by the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UPLOAD_DIR&lt;/code&gt;
(or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PHOTO_STORAGE_OPTIONS.UPLOAD_DIR&lt;/code&gt;) configuration key in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;conf/general.yml&lt;/code&gt;.
For this example, let’s assume that’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/home/fixmystreet/photos&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Running the following (with the path and bucket name altered to suit your configuration)
will make copy-pasting the subsequent commands a little easier:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;UPLOAD_DIR&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/home/fixmystreet/photos
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;S3_BUCKET&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;my-fixmystreet-photos
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;We’ll use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;aws s3 sync&lt;/code&gt; to copy all photos to the new S3 bucket. To get a preview of
the operations it will perform without actually copying anything, run:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;aws s3 &lt;span class=&quot;nb&quot;&gt;sync&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$UPLOAD_DIR&lt;/span&gt; s3://&lt;span class=&quot;nv&quot;&gt;$S3_BUCKET&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--dryrun&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You should see output similar to the following, one line for each file:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;(dryrun) upload: /home/fixmystreet/photos/069a5d216321061757fe30a6d7f862669eb46d7d.jpeg to s3://my-fixmystreet-photos/069a5d216321061757fe30a6d7f862669eb46d7d.jpeg
(dryrun) upload: /home/fixmystreet/photos/0d7db3b2cd615e27c50345c8144b6b9782d7ff4a.jpeg to s3://my-fixmystreet-photos/0d7db3b2cd615e27c50345c8144b6b9782d7ff4a.jpeg
(dryrun) upload: /home/fixmystreet/photos/137dfb5fe88c0207e2a339b02fcbc5e812b4e68b.jpeg to s3://my-fixmystreet-photos/137dfb5fe88c0207e2a339b02fcbc5e812b4e68b.jpeg
[...]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If the output looks correct, re-run without the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--dryrun&lt;/code&gt; flag to actually copy
everything to the S3 bucket:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;aws s3 &lt;span class=&quot;nb&quot;&gt;sync&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$UPLOAD_DIR&lt;/span&gt; s3://&lt;span class=&quot;nv&quot;&gt;$S3_BUCKET&lt;/span&gt;
upload: /home/fixmystreet/photos/069a5d216321061757fe30a6d7f862669eb46d7d.jpeg to s3://my-fixmystreet-photos/069a5d216321061757fe30a6d7f862669eb46d7d.jpeg
upload: /home/fixmystreet/photos/0d7db3b2cd615e27c50345c8144b6b9782d7ff4a.jpeg to s3://my-fixmystreet-photos/0d7db3b2cd615e27c50345c8144b6b9782d7ff4a.jpeg
upload: /home/fixmystreet/photos/137dfb5fe88c0207e2a339b02fcbc5e812b4e68b.jpeg to s3://my-fixmystreet-photos/137dfb5fe88c0207e2a339b02fcbc5e812b4e68b.jpeg
&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;...]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;All your photos are now in S3, so the next step is to tell FixMyStreet about the new bucket.
(See the note in &lt;strong&gt;&lt;a href=&quot;#final-steps--tidying-up&quot;&gt;the final section&lt;/a&gt;&lt;/strong&gt; for reports made between now
and when the FixMyStreet config has been updated to use S3.)&lt;/p&gt;

&lt;h2 id=&quot;configuring-fixmystreet-to-use-s3&quot;&gt;Configuring FixMyStreet to use S3&lt;/h2&gt;

&lt;p&gt;We need to make a few changes to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;conf/general.yml&lt;/code&gt; to configure FixMyStreet to
use the new S3 bucket for photo storage.&lt;/p&gt;

&lt;p&gt;Your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;conf/general.yml&lt;/code&gt; probably has a section similar to the following:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;PHOTO_STORAGE_BACKEND&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;FileSystem&apos;&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;PHOTO_STORAGE_OPTIONS&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;UPLOAD_DIR&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;../photos&apos;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Or, if you set the site up before v2.4.1:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;UPLOAD_DIR&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;../photos&apos;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Either way, you need to replace that section with the following:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;PHOTO_STORAGE_BACKEND&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;S3&apos;&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;PHOTO_STORAGE_OPTIONS&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;BUCKET&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;my-fixmystreet-photos&apos;&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;ACCESS_KEY&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;AKIA12345&apos;&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;SECRET_KEY&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;1234/1234&apos;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Make sure you set &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BUCKET&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ACCESS_KEY&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SECRET_KEY&lt;/code&gt; to the same values
as when you configured the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;aws&lt;/code&gt; CLI tool and created the bucket.&lt;/p&gt;

&lt;p&gt;These changes are all that’s needed to switch your FixMyStreet installation to using
S3 for photos. Once you’re happy with the changes you’ve made to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;conf/general.yml&lt;/code&gt;,
restart the FixMyStreet app server (&lt;a href=&quot;/updating/#restart-the-server&quot;&gt;example&lt;/a&gt;) and
check the output for any errors.&lt;/p&gt;

&lt;p&gt;Once the server has restarted, try making a new report and uploading a couple of photos.
You should see new files appear in the S3 bucket (you can view them via the S3 web console)
as soon as you’ve drag-dropped them into the new report (or update) form. Check that report
photos appear on the site for newly-created reports too. &lt;strong&gt;NB&lt;/strong&gt; photos for existing reports
are likely already cached on disk by FixMyStreet, so do check a new report.&lt;/p&gt;

&lt;h2 id=&quot;final-steps--tidying-up&quot;&gt;Final steps &amp;amp; tidying up&lt;/h2&gt;

&lt;p&gt;Because there was a small window of time between syncing existing photos to the S3 bucket
and switching over the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;conf/general.yml&lt;/code&gt; config, there’s a chance that a report with
photos was made whose photos weren’t synced to S3.
Now that FixMyStreet is using S3, you may wish to re-run the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;aws s3 sync&lt;/code&gt; command from above
in order to make sure any such photos have been transferred to S3.&lt;/p&gt;

&lt;p&gt;The old directory containing photos on disk isn’t needed any more, so once you’re happy
the S3 storage is working as expected, you can delete this.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 2.4.1</title>
        <link href="https://fixmystreet.org/2018/10/01/v2.4.1/"/>
        <updated>2018-10-01T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2018/10/01/v2.4.1</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/bradhoc/6341956589/&quot; title=&quot;Docks&quot;&gt;&lt;img src=&quot;https://farm7.staticflickr.com/6097/6341956589_97f39d3f3b.jpg&quot; width=&quot;500&quot; height=&quot;304&quot; alt=&quot;Docks&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;Today we have released &lt;strong&gt;version 2.4.1&lt;/strong&gt; of FixMyStreet.&lt;/p&gt;

&lt;p&gt;This release contains a wide variety of new features for use by reusers of our software,
funded by &lt;a href=&quot;https://www.ndi.org/&quot;&gt;NDI&lt;/a&gt; as part of their FixMyCommunity project; thanks
very much to them. It also includes a number of smaller features and bugfixes.&lt;/p&gt;

&lt;p&gt;FixMyStreet now comes with a Dockerfile and example Docker Compose setup for
use by those tools, and we provide a hosted Vagrant box that can be used also.
You can choose to store photos in Amazon S3 rather then the local filesystem,
use an external memcache server,&lt;/p&gt;

&lt;p&gt;We’ve added a script, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cobrand-checks&lt;/code&gt;, that will list/diff template changes in core
that might need applying to a cobrand, to help with upgrading, and added more checks
to our Pull Requests on GitHub to spot included cobrands that need checking with each
PR made.&lt;/p&gt;

&lt;p&gt;We have sped up fetching full lists of bodies to help installs that have
thousands of bodies, sped up the display of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/_dev&lt;/code&gt; pages, fixed the display of
pins on a body page when using Bing or TonerLite maps, and fixed an issue where the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;from_body&lt;/code&gt; field was lost on a user when edited by a non-superuser admin.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases/tag/v2.4.1&quot;&gt;Full changelog&lt;/a&gt;&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 2.4</title>
        <link href="https://fixmystreet.org/2018/09/06/v2.4/"/>
        <updated>2018-09-06T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2018/09/06/v2.4</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/matthamm/896309437/&quot; title=&quot;Fattoria Palazetta, Field of Sunflowers, Cecina, Tuscany, Italy&quot;&gt;&lt;img src=&quot;https://farm2.staticflickr.com/1199/896309437_33a2c84a4e.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;Fattoria Palazetta, Field of Sunflowers, Cecina, Tuscany, Italy&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;Today we have released &lt;strong&gt;version 2.4&lt;/strong&gt; of FixMyStreet.&lt;/p&gt;

&lt;p&gt;This release contains a security fix to prevent the potential leak of a user
account’s phone number, if you knew their email address; please upgrade your
installation as soon as you can, or if that is not possible, please apply
commit &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;abcb1f86&lt;/code&gt; to your installation in the meantime. We have also released
version 2.3.5 which is identical to 2.3.4 except with this fix applied.&lt;/p&gt;

&lt;p&gt;The front end has removed its input placeholders, for better accessibility;
improved the report button in the navigation bar to be more context-aware and
allow for easier reporting in the same location; will only show 6 months of
reports on the around page by default, to hopefully deal with the issues of too
many or too few reports being shown; and removes the need for a separate
per-category ajax call by returning all category data up front.&lt;/p&gt;

&lt;p&gt;The admin now trims spaces from search input (at last!), lets you edit a
category group, and has a ‘send login email’ button on a user’s edit page, so
you don’t have to ask them to do it themselves.&lt;/p&gt;

&lt;p&gt;Bugfixes include an issue with the category filter if a category contained a
comma, fixing duplicate category display on Your Account page, and making sure
the Home link on mobile is always clickable. Staff workflows had various fixes
as well, such as inspectors being able to unset priority, seeing all fixed
issues with the map page filter, and fixing the pin dragging.&lt;/p&gt;

&lt;p&gt;For developers, there are new hooks for e.g. custom search results, extra login
conditions, and changing the details placeholder; a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/_dev/&lt;/code&gt; URL
(accessible to superusers) for previewing confirmation/submission pages; and
the client can set bodis a repot must not be sent to (e.g. if asset selection
means it has that knowledge).&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases/tag/v2.4&quot;&gt;Full changelog&lt;/a&gt;&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 2.3.4</title>
        <link href="https://fixmystreet.org/2018/06/07/v2.3.4/"/>
        <updated>2018-06-07T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2018/06/07/v2.3.4</id>
        <content type="html">&lt;p&gt;A very quick release, only a day after 2.3.3, but &lt;strong&gt;version 2.3.4&lt;/strong&gt; fixes a bug
introduced in 2.3.3 as part of the fix for selecting pins on mobile; whilst
that was fixed, the fix then prevented pins being selected on non-&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/around&lt;/code&gt;
pages, whoops.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases/tag/v2.3.4&quot;&gt;Full changelog&lt;/a&gt;&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 2.3.3</title>
        <link href="https://fixmystreet.org/2018/06/06/v2.3.3/"/>
        <updated>2018-06-06T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2018/06/06/v2.3.3</id>
        <content type="html">&lt;p&gt;Today we have released &lt;strong&gt;version 2.3.3&lt;/strong&gt; of FixMyStreet.&lt;/p&gt;

&lt;p&gt;This fixes a few bugs found in the past week of the last release, including one
potential data leak. It was possible to obtain from a crafted URL the textual
content of an update, and the name of the user who left that update (only if
they had made the update non-anonymously), even if that update was unconfirmed
or hidden. No other details of the update or user were made available.&lt;/p&gt;

&lt;p&gt;Other fixes include incorrect behaviour when selecting report pins on mobile,
bad admin navigation links in multi-language installs, and an issue with the
map display when an inspector clicked back from a report page on mobile.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases/tag/v2.3.3&quot;&gt;Full changelog&lt;/a&gt;&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 2.3.2</title>
        <link href="https://fixmystreet.org/2018/05/31/v2.3.2/"/>
        <updated>2018-05-31T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2018/05/31/v2.3.2</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/photosak/6214596375&quot; title=&quot;London Loop Section 3&quot;&gt;&lt;img src=&quot;https://farm7.staticflickr.com/6041/6214596375_ca94e02b93.jpg&quot; width=&quot;500&quot; height=&quot;333&quot; alt=&quot;London Loop Section 3&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;Today we have released &lt;strong&gt;version 2.3.2&lt;/strong&gt; of FixMyStreet.&lt;/p&gt;

&lt;p&gt;This is a minor release, but one with quite a number of bug fixes and other
smaller front end and admin improvements.&lt;/p&gt;

&lt;p&gt;The questionnaire process has been improved, with “Don’t know” now an option in
the email, and recording the answer as soon as the link is clicked. Smaller
front end fixes include increasing the size of “sub map links” (hide pins,
permalink, etc), clicking the “Click map” instruction banner now begins a new
report, and improved cursor/display of the new report pin.&lt;/p&gt;

&lt;p&gt;Front end bug fixes include improving chart display in old IE versions, a CSS
padding bug in the sidebar “drawer”, a race condition when making a new report
quickly, some small RTL text display issues, and making sure the loading
spinner is always shown when it should be.&lt;/p&gt;

&lt;p&gt;We now store a user’s creation and last active times, and have provided scripts
so you can use tis new information to anonymize inactive users or reports,
email inactive users, and/or close reports to new updates.&lt;/p&gt;

&lt;p&gt;At long last, the contents of a report’s extra field is now fully displayed in
the admin.&lt;/p&gt;

&lt;p&gt;Open311 has had a number of improvements and bug fixes – we can now fetch
problems over Open311, send multiple photos via an Open311 extension, and have
the ability to have automated attributes that can be filled in but not shown to
the user (e.g.  asset IDs).&lt;/p&gt;

&lt;p&gt;For development, we’ve added an HTML email previewer at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/dev/_email/&lt;/code&gt; which
our designers love, added some Cypress browser-based testing so that some of
our JavaScript is also tested, and upgraded our Vagrantfile to use Ubuntu Xenial.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases/tag/v2.3.2&quot;&gt;Full changelog&lt;/a&gt;&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 2.3.1</title>
        <link href="https://fixmystreet.org/2018/02/12/v2.3.1/"/>
        <updated>2018-02-12T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2018/02/12/v2.3.1</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/luiscolas/9347625116/in/photolist-ff22hh-822Qzz-hUT-6XAG2R-Aj9tco-4AMCjJ-5JAudk-eRiDAZ-5gSMZS-9aCTMh-8tNEZa-hcWs5g-4HvS9p-aUjRov-LvqZbz-rDivP3-dRRVqb-bxrZTr-gBoCym-bP6HSF-85bACu-sAqHa1-o51A6W-8mVQtB-p4G8w1-GLHRtK-hcV8fg-3yn56F-apTU2w-86dnyQ-8mF2JJ-a5A1P6-xb9Ahd-adJTdh-86dny7-hCEwQ1-A4NHwV-eCvr5q-8Whq3z-81QKHC-bQTwSK-DrizbF-8V6js5-5KScte-fvZGqs-6G8mPr-5zyJXC-fJcHcV-M6HqY9-8V3dTs&quot; title=&quot;Keep Behind This Line&quot;&gt;&lt;img src=&quot;https://farm6.staticflickr.com/5451/9347625116_8f3c8bf5e7.jpg&quot; width=&quot;500&quot; height=&quot;333&quot; alt=&quot;Keep Behind This Line&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;Today we have released &lt;strong&gt;version 2.3.1&lt;/strong&gt; of FixMyStreet.&lt;/p&gt;

&lt;p&gt;This is a minor release, with a number of bug fixes but also a number of
smaller front end and admin improvements.&lt;/p&gt;

&lt;p&gt;The site should be clearer when things are loading now, be that on initial page
load or when an asset layer is incoming. Our phone number library has been
updated, so national phone numbers should be displayed in a nicer format as
long as you’ve set the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PHONE_COUNTRY&lt;/code&gt; variable.&lt;/p&gt;

&lt;p&gt;FixMyStreet now asks for the current password (or sends an email) on password
change, sets a minimum password length and checks against a list of commons
passwords. Superusers can have optional two-factor authentication to protect
their accounts.&lt;/p&gt;

&lt;p&gt;We fixed an error in sending &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;requires_inspection&lt;/code&gt; reports, issues with
multiple select-multiples on a page, a questionnaire CSS snafu, showing deleted
bodies in the dashboard list, alongside other minor bugfixes.&lt;/p&gt;

&lt;p&gt;For staff users, ‘report as another user’ now allows phone number without
email, and the inspector form shows any extra fields again.&lt;/p&gt;

&lt;p&gt;Admins can now anonymize/hide all a user’s reports, log a user out, or remove a
user’s account details. We’ve provided a script to expire old sessions in the
database (plus this script can be run with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--init&lt;/code&gt; to set up the database for
the new “log a user out” feature).&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases/tag/v2.3.1&quot;&gt;Full changelog&lt;/a&gt;&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>Version 2.3</title>
        <link href="https://fixmystreet.org/2017/12/18/v2.3/"/>
        <updated>2017-12-18T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2017/12/18/v2.3</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/ursonate/9072504686&quot; title=&quot;IMG_20130617_072808.jpg&quot;&gt;&lt;img src=&quot;https://farm6.staticflickr.com/5491/9072504686_8f948925c4.jpg&quot; width=&quot;375&quot; height=&quot;500&quot; alt=&quot;IMG_20130617_072808.jpg&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;Today we have released &lt;strong&gt;version 2.3&lt;/strong&gt; of FixMyStreet.&lt;/p&gt;

&lt;p&gt;The major new feature in this release is adding &lt;strong&gt;confirmation by phone
text&lt;/strong&gt; instead of email, via Twilio, to allow optional verification of
reports and updates, and logging in.&lt;/p&gt;

&lt;p&gt;Alongside that, there have been numerous front end improvements and bugfixes.
Front end improvements include &lt;strong&gt;paginating reports&lt;/strong&gt; everywhere,
making sure all maps can be expanded on mobile, the pin loading indicator no
longer covering the whole map whilst pins are loading, and improved location
disambiguation on small screens.&lt;/p&gt;

&lt;p&gt;Some effort has gone into &lt;strong&gt;improving performance&lt;/strong&gt; of various
pages, especially the front page, reducing the amount of JavaScript loaded,
replacing our image sprite with more SVG assets, and switching to modern
prefetch. &lt;a href=&quot;https://www.fixmystreet.com/&quot;&gt;fixmystreet.com&lt;/a&gt; goes a
step further by inlining critical CSS on the front page so no external requests
are needed to show the start of the site. You can read more about this process
&lt;a href=&quot;https://www.mysociety.org/2017/11/24/peak-performance/&quot;&gt;on the
mySociety blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We now support &lt;strong&gt;Open311 category groups&lt;/strong&gt;, and if we fetch
updates via Open311, we can use auto-response templates to fill in updates
without their own description.&lt;/p&gt;

&lt;p&gt;Lastly, the &lt;strong&gt;dashboard and statistics&lt;/strong&gt; have been streamlined and
improved, and are all now available under &lt;code&gt;/dashboard&lt;/code&gt;. This now
includes lookup by date range, ward, category or state, and the CSV export uses
machine-readable dates and is accessible via token-based authentication.&lt;/p&gt;

&lt;h3 id=&quot;bugfixes&quot;&gt;Bugfixes&lt;/h3&gt;

&lt;p&gt;The number of updates on &lt;a href=&quot;https://www.fixmystreet.com/&quot;&gt;fixmystreet.com&lt;/a&gt; hit a million! So we
made sure large numbers don’t overflow on the homepage. Also, multiple ‘Expand
map’ links should no longer trouble your maps on mobile; with JavaScript off,
the pins should no longer be double the size they’re meant to be; and also some
bad interaction between the list filters and the back button has been fixed.&lt;/p&gt;

&lt;p&gt;Staff users got a number of bugfixes to their interfaces, including making sure
reports could always be removed from your shortlist (even if they’ve switched
body), only creating one update when changing category, and making sure the
text-only contacts output was indeed text, not HTML.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases/tag/v2.3&quot;&gt;Full changelog&lt;/a&gt;&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>Version 2.2</title>
        <link href="https://fixmystreet.org/2017/09/14/v2.2/"/>
        <updated>2017-09-14T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2017/09/14/v2.2</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/_chrisuk/6621444233/&quot; title=&quot;Pothole&quot;&gt;&lt;img src=&quot;https://farm8.staticflickr.com/7155/6621444233_d109d69b26_z.jpg&quot; width=&quot;640&quot; height=&quot;360&quot; alt=&quot;Pothole&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;Today we have released &lt;strong&gt;version 2.2&lt;/strong&gt; of FixMyStreet, with some new features,
some bugfixes, and other improvements.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;At long last, &lt;strong&gt;body and category names can be translated&lt;/strong&gt; in the admin
interface, letting you easily run sites in multiple languages without having to
perform various amounts of custom work;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Report states can now be edited&lt;/strong&gt; (and translated) in the admin interface, if
you wish to have different options for the specific workflow of your site. If
you want to have a closed state of “object removed”, now you can;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Also through the admin interface you can now &lt;strong&gt;add extra fields&lt;/strong&gt; to be
shown in the reporting form, letting you ask custom questions for your
installation without needing to edit any code or templates.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All the above improvements were funded by &lt;a href=&quot;https://www.ndi.org/&quot;&gt;NDI&lt;/a&gt; as part
of their FixMyCommunity project; thanks very much to them.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Staff users can now create reports on behalf of people anonymously, and have
more filters on report list pages; new configuration options allow you to limit
your site to logged-in users only, or prevent new users from using the site.&lt;/p&gt;

&lt;p&gt;The email alerts page has had some work to improve its clarity, and some work
has gone into improving the performance of various pages. Some deep diving into
SQL queries led to some notable cases where things could be sped up, and we
also found one place (listing nearby duplicate reports for staff users) where
the database was being queried at a radius of 1000km, rather than 1km :)&lt;/p&gt;

&lt;p&gt;One notable bugfix is if you logged in during the reporting process, or had a
server side error, your photo thumbnails weren’t being redisplayed correctly
(though the photo itself was stored fine) due to change in the image library
we use – everything should now be okay.&lt;/p&gt;

&lt;p&gt;Lastly, if you’re developing on the code, we have added a debug toolbar
(similar to the Django Debug Toolbar, if you’re familiar with that) which lets
you see which templates have been used, what SQL queries have been made, what
external requests, and so on. This is automatically enabled when you run the
development server.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases/tag/v2.2&quot;&gt;Full changelog&lt;/a&gt;&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>Version 2.1.1</title>
        <link href="https://fixmystreet.org/2017/08/03/v2.1.1/"/>
        <updated>2017-08-03T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2017/08/03/v2.1.1</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/drinksmachine/435344339/&quot; title=&quot;Untitled&quot;&gt;&lt;img src=&quot;https://farm1.staticflickr.com/176/435344339_84fd7e4705_z_d.jpg&quot; width=&quot;640&quot; height=&quot;480&quot; alt=&quot;Untitled&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;Today we have released &lt;strong&gt;version 2.1.1&lt;/strong&gt; of FixMyStreet, a bugfix release with
a few small improvements.&lt;/p&gt;

&lt;p&gt;The map in HTML emails is now a link through to the report page, and we’ve
fixed a bug causing the wrong pin size to be shown there. We’ve also fixed a
bug that could cause a different language from the requested one to be shown on
about pages.&lt;/p&gt;

&lt;p&gt;Admin improvements include resending reports if changing the category
has changed the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;send_method&lt;/code&gt; and displaying the reporter’s phone number
on the inspector form. Text deleted during moderation is no longer
replaced with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[...]&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases/tag/v2.1.1&quot;&gt;Full changelog&lt;/a&gt;&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 2.1</title>
        <link href="https://fixmystreet.org/2017/07/18/v2.1/"/>
        <updated>2017-07-18T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2017/07/18/v2.1</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/winnie_quan/2295947472/&quot; title=&quot;Untitled&quot;&gt;&lt;img src=&quot;https://farm4.staticflickr.com/3048/2295947472_ed1a3fe0e1.jpg&quot; width=&quot;500&quot; height=&quot;281&quot; alt=&quot;Untitled&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;Today we have released &lt;strong&gt;version 2.1&lt;/strong&gt; of FixMyStreet, with some new features
and a variety of improvements for users and reusers.&lt;/p&gt;

&lt;p&gt;New features include allowing users to hide their own name on reports/updates,
and a new graph-based /reports page, which you can see in operation on our
&lt;a href=&quot;https://www.fixmystreet.com/reports&quot;&gt;main UK site&lt;/a&gt;. We also now resize photos
client-side before uploading, given the increase in very large images these
days.&lt;/p&gt;

&lt;p&gt;Admin improvements include adding an ‘inactive’ state to categories, so you can
prevent a category being used for new reports but still have it available in
filters, various improvements to the inspect form and the new report process
for inspectors, and an easier way for inspectors to shortlist all reports in
their view.&lt;/p&gt;

&lt;p&gt;Geolocation is back on the alert page, lost sometime last year, and some random
blank spaces are no longer clickable, hooray!&lt;/p&gt;

&lt;p&gt;Development-wise, FixMyStreet now supports Debian stretch and perl 5.24, badly
configured SMTP options should now be spotted, and we have refactored and
simplified the CSS used for header/content/navigation. This may mean you can
simplify overrides in your cobrand. If you wish to have a static front page
rather than the normal report page, that’s now possible by creating an
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;about/homepage.html&lt;/code&gt; template in your cobrand, and cobrands can now easily
change the new report pin colour.&lt;/p&gt;

&lt;p&gt;The test suite now runs each file in a transaction which means it can be run in
parallel and sped up dramatically; on the other hand, on Travis we added code
coverage which slowed it down again.&lt;/p&gt;

&lt;p&gt;Two &lt;strong&gt;backwards incompatible&lt;/strong&gt; changes that may require changes to your own
templates if you have customised them:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nav-wrapper-2&lt;/code&gt; class has been removed. If you have a custom footer
template, replace that class with ‘container’.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/reports&lt;/code&gt; page now uses different generated data. If you have a custom
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reports/index.html&lt;/code&gt; template and wish to keep it, you may need to call
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;update-all-reports&lt;/code&gt; with a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--table&lt;/code&gt; argument to generate the old style
data.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases/tag/v2.1&quot;&gt;Full changelog&lt;/a&gt;&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 2.0.4</title>
        <link href="https://fixmystreet.org/2017/04/13/v2.0.4/"/>
        <updated>2017-04-13T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2017/04/13/v2.0.4</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/pieczonysnieg/8635754135/&quot; title=&quot;11&quot;&gt;&lt;img src=&quot;https://c1.staticflickr.com/9/8537/8635754135_4aa39ac521.jpg&quot; width=&quot;338&quot; height=&quot;500&quot; alt=&quot;11&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;Today we have released &lt;strong&gt;version 2.0.4&lt;/strong&gt; of FixMyStreet, a bugfix release along
with a couple of other improvements.&lt;/p&gt;

&lt;p&gt;The bugfixes are updating our Facebook library so that Facebook login works
again, stopping an error if you had a devolved body and its contact both
lacking a send method, and an issue in the multi-select front end if you had
characters such as brackets in your category name.&lt;/p&gt;

&lt;p&gt;Strangely, while the backend has always allowed multiple email addresses for a
contact, separated by commas, the admin interface hasn’t allowed them to be
entered - this has now been corrected.&lt;/p&gt;

&lt;p&gt;Lastly, body pages under &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/reports&lt;/code&gt; will now limit the reports shown to those
within the visible map, which should make moving and zooming around much more
intuitive.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases/tag/v2.0.4&quot;&gt;Full changelog&lt;/a&gt;&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 2.0.3</title>
        <link href="https://fixmystreet.org/2017/03/31/v2.0.3/"/>
        <updated>2017-03-31T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2017/03/31/v2.0.3</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/mssuziecue/2637008185/&quot; title=&quot;Untitled&quot;&gt;&lt;img src=&quot;https://c1.staticflickr.com/4/3071/2637008185_6c4bd4d6a0.jpg&quot; width=&quot;440&quot; height=&quot;500&quot; alt=&quot;Untitled&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;Today we have released &lt;strong&gt;version 2.0.3&lt;/strong&gt; of FixMyStreet,
a bugfix release along with some other improvements.&lt;/p&gt;

&lt;p&gt;The map on a mobile report page can now be made full screen, and if you are
using Google Maps you can supply a custom map styling. There’s also now a
loading indicator whilst data is being fetched for the map.&lt;/p&gt;

&lt;p&gt;Various missing translations have been added, for moderation, social login,
and offline usage.&lt;/p&gt;

&lt;p&gt;We’ve upgraded our email sending to deal with issues sending with SSL, dealt
with IE11 caching report Ajax calls too aggressively, and with Safari 5/
Android 4 not showing our questionnaire answer buttons.&lt;/p&gt;

&lt;p&gt;Performance improvements include moving admin-related JavaScript to its own
file (so normal users don’t need to download it), and reducing the amount of
disk stats the code performs.&lt;/p&gt;

&lt;p&gt;Lastly, all the test suite can now run offline, and amusingly I found a bug in
a test that only happened if the test was run c. 55 hours before daylight
savings time began :)&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases/tag/v2.0.3&quot;&gt;Full changelog&lt;/a&gt;&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 2.0.2</title>
        <link href="https://fixmystreet.org/2017/02/03/v2.0.2/"/>
        <updated>2017-02-03T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2017/02/03/v2.0.2</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/amyeanderson/29212751225/&quot; title=&quot;Lake Annecy&quot;&gt;&lt;img src=&quot;https://c1.staticflickr.com/9/8503/29212751225_67b5579e60.jpg&quot; width=&quot;500&quot; height=&quot;453&quot; alt=&quot;Lake Annecy&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;Today we have released &lt;strong&gt;version 2.0.2&lt;/strong&gt; of FixMyStreet, a bugfix release along
with some new admin improvements.&lt;/p&gt;

&lt;p&gt;The main bugfixes are to mark two missing strings for translation, to make sure
email is lowercase when signing in via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/auth&lt;/code&gt;, and to make sure a language
subdomain can be included in calls to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;base_url_for_report&lt;/code&gt;. There are also
some CSS fixes to the homepage and an improved print layout for report list
pages. Fixes to the admin interface include fixing filtering on the shortlist
page, and fixing the ‘save with public update’ toggle.&lt;/p&gt;

&lt;p&gt;For international users, there have been a few string renames, but we have
maintained translations as the concept remains unchanged, so please only feel
free to update if you consider it necessary:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;‘unable to fix’ has been renamed to ‘no further action’&lt;/li&gt;
  &lt;li&gt;‘marked as a duplicate report’ has been changed to ‘closed as a duplicate report’&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An offline fallback page has been added using appcache, which inspectors can
use for offline updating of reports in their shortlist.&lt;/p&gt;

&lt;p&gt;Admin improvements include allowing response templates to be associated with a
state (so that template is used by default when the state is changed), allowing
shortlist addition/removal from report lists, and shortlist reordering. Users
with a new permission can see the body user who left a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;contribute_as_body&lt;/code&gt;
report or update.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases/tag/v2.0.2&quot;&gt;Full changelog&lt;/a&gt;&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 2.0.1</title>
        <link href="https://fixmystreet.org/2016/12/16/v2.0.1/"/>
        <updated>2016-12-16T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2016/12/16/v2.0.1</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/s2art/189574055/&quot; title=&quot;drowning&quot;&gt;&lt;img src=&quot;https://c8.staticflickr.com/1/67/189574055_37e836feaa.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;drowning&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;Today we have released &lt;strong&gt;version 2.0.1&lt;/strong&gt; of FixMyStreet, a bugfix release.
The issues fixed are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Chrome 55 changes the way it handles mouse/touch events, &lt;a href=&quot;https://developers.google.com/web/updates/2016/10/pointer-events&quot;&gt;unifying them as
pointer events&lt;/a&gt;,
and OpenLayers, the JavaScript mapping library we use, needed patching to
deal with this. Thanks to the Chrome team for helping debug this.&lt;/li&gt;
  &lt;li&gt;strftime output (e.g. used to display dates) was sometimes being double
decoded, giving incorrect output in some languages.&lt;/li&gt;
  &lt;li&gt;If a category was filtered, it was not being properly carried through to the
new report form.&lt;/li&gt;
  &lt;li&gt;The body/area inputs in the admin were being fixed to a too-small height.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some bugfixes and improvements have also been made to the admin inspector
report view, along with a couple of development improvements – the tests coping
better if run on a network that intercepts NXDOMAINs, and a better way of
showing the git version in the admin config.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 2.0 – JavaScript performance</title>
        <link href="https://fixmystreet.org/2016/12/16/v2.0-javascript-improvements/"/>
        <updated>2016-12-16T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2016/12/16/v2.0-javascript-improvements</id>
        <content type="html">&lt;p&gt;The JavaScript on FixMyStreet has gradually evolved over many years (we
launched in 2007, remember!), and while we were working on other features in
this area (such as HTML5 History) it was a good opportunity to tidy up the
JavaScript, making it clearer and simpler. Below I’m going to go through most
of the steps I took, not necessarily in the order I took them, which hopefully
might prove useful to your own websites. And there are exciting pictures at the
end, I promise!&lt;/p&gt;

&lt;p&gt;It also let us add the Content-Security-Policy header to FixMyStreet, which is
a method in browsers to prevent cross-site scripting (XSS), clickjacking and
other code injection attacks by specifying the valid sources for script
execution.&lt;/p&gt;

&lt;h2 id=&quot;separate-scripting-and-styling&quot;&gt;Separate scripting and styling&lt;/h2&gt;

&lt;p&gt;When you report an issue on FixMyStreet on mobile, the map &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/around&lt;/code&gt; page is
full-screen to make reporting easier. This was being done in JavaScript using
some jQuery &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;css()&lt;/code&gt; calls when setting up (or ending) the mobile view. It was
straightforward to move this CSS to a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mobile-reporting-map&lt;/code&gt; class and have the
JavaScript do no more than add or remove this class, making both parts clearer.
(Later during this process, I also added an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;only-map&lt;/code&gt; class to prevent the map
being scrolled until it is clicked, when the rest of the form can then be
shown.)&lt;/p&gt;

&lt;p&gt;Similarly, the JavaScript was requisitioning the desktop-width green banner to
provide a different mobile banner; updating this to use a separate mobile
banner made the code clearer and shorter.&lt;/p&gt;

&lt;h2 id=&quot;tidy-up-the-javascript-set-up&quot;&gt;Tidy up the JavaScript set up&lt;/h2&gt;

&lt;p&gt;The main setting up of our JavaScript was taking place, for historical reasons,
in two files, both confusingly called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fixmystreet.js&lt;/code&gt;. Whilst in the future we
may want to split this up into separate files more tailored to the particular
pages where the code is used (though our main use of JavaScript is our map
page, which already has its JavaScript separate), for now it made most sense to
combine these in one file, and tidy up all the setup functions into a list of
feature-based functions each called in turn on page load.&lt;/p&gt;

&lt;p&gt;We were bundling a copy of Modernizr (for media query detection) that contained
html5shiv and yepnope. But html5shiv is only needed in old versions of Internet
Explorer, and yepnope is only used on FixMyStreet’s front page (to try and
preload the map page JavaScript mentioned above), so I could move html5shiv
into an IE conditional comment, and included yepnope.js only on the front page,
reducing Modernizr to only Modernizr itself.&lt;/p&gt;

&lt;h2 id=&quot;move-vital-javascript-as-early-as-possible&quot;&gt;Move vital JavaScript as early as possible&lt;/h2&gt;

&lt;p&gt;Now that I had a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mobile-reporting-map&lt;/code&gt; class, I wanted this class activated
as soon as possible as the page is loading, not only when the document had been
parsed. There were also a couple of site-wide variables, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;page&lt;/code&gt; (the type of
page, e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;around&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;new&lt;/code&gt;), and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cobrand&lt;/code&gt; (the branding of the site you’re
on). Lastly, I wanted to be able to set a class on the document if JavaScript
was activated, so that CSS using that class would be instantly active,
preventing a flash of style change or content.&lt;/p&gt;

&lt;p&gt;To achieve all this, I created a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;header.js&lt;/code&gt; file that performed the above
three tasks, setting a class on &amp;lt;html&amp;gt;, setting two variables on our
global &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fixmystreet&lt;/code&gt; variable, and if we’re on a small width (using Modernizr)
and perhaps a map page, setting the appropriate classes. I then minimized and
inlined this script in the header of each page, so that we don’t have to wait
for any external script to load.&lt;/p&gt;

&lt;h2 id=&quot;move-javascript-to-the-end-of-the-html-remove-inline-javascript&quot;&gt;Move JavaScript to the end of the HTML, remove inline JavaScript&lt;/h2&gt;

&lt;p&gt;As &lt;a href=&quot;https://www.html5rocks.com/en/tutorials/speed/script-loading/&quot;&gt;recommended by Jake Archibald
here&lt;/a&gt;, I moved
all the JavaScript to the end of the HTML. To make this easier, and also to
make adding a Content-Security-Policy header easier, I removed all the inline
JavaScript from FixMyStreet (I didn’t think FixMyStreet had that much inline
JavaScript, and it didn’t, but it still had more than I had remembered!). This
was most commonly being used to set up some JavaScript variables with
server-side data, so the easiest way to replace this was to place this data as
attributes on HTML elements (preferably semantically related elements), and set
up the JavaScript variables in an external script.&lt;/p&gt;

&lt;h2 id=&quot;minify-javascript&quot;&gt;Minify JavaScript&lt;/h2&gt;

&lt;p&gt;I didn’t want to make this mandatory, as we have done with SCSS/CSS, but I
wanted the option available, so I added an option to our templating code that
means it will prefer an .auto.min.js file in preference to a .js file of the
same basename. This lets you compile your JavaScript in a deploy process, for
example, should you wish to. We do this with the standard Closure Compiler from
Google; I haven’t yet been brave enough to try and check/get the JavaScript
working with the advanced option of the Closure Compiler :)&lt;/p&gt;

&lt;h2 id=&quot;activate-content-security-policy&quot;&gt;Activate Content-Security-Policy&lt;/h2&gt;

&lt;p&gt;The Content-Security-Policy header lets you specify domains from which
JavaScript will run, plus lets you choose to run inline JavaScript either en
masse or only if you provide a specific unique nonce ID in the &amp;lt;script&amp;gt;
tag that matches the same ID in the CSP header. That latter option is how we
kept our inline header JavaScript running without having to externalise it
again.&lt;/p&gt;

&lt;p&gt;“nonce” was only added in the second version of the CSP spec, so you may note
our header also specifies &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unsafe-inline&lt;/code&gt;. Any browser that supports version 2
will ignore this when it sees the nonce header, but it is needed in order for
the inline script to still run in any browser only supporting version 1.&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;In Google Page Speed Insights, with manual minification of the main JS files,
this moves the front page from 68/84 to 85/92ish (filmstrip from
webpagetest.org, top is live site, bottom is my dev site):&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://cloud.githubusercontent.com/assets/154364/17670115/58b741f6-6308-11e6-9510-82c23fbd5c35.png&quot;&gt;&lt;img src=&quot;https://cloud.githubusercontent.com/assets/154364/17670115/58b741f6-6308-11e6-9510-82c23fbd5c35.png&quot; alt=&quot;filmstrip&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These are requests from the US: most of the initial delay is in that initial
download. Now here’s a report page going from 58/77 to 85/86ish (“ish” because
e.g. live site will have analytics that my dev site doesn’t):&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://cloud.githubusercontent.com/assets/154364/17670122/680c9a16-6308-11e6-9bfb-721272ff1f71.png&quot;&gt;&lt;img src=&quot;https://cloud.githubusercontent.com/assets/154364/17670122/680c9a16-6308-11e6-9bfb-721272ff1f71.png&quot; alt=&quot;Site visible a second quicker&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Due to page elements displaying more quickly than might previously have been
expected, there are still a few things to tidy up. For example, when an element
displays before a bit of JavaScript kicks in and makes it look slightly
different… but hopefully nothing major.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 2.0 – testing improvements</title>
        <link href="https://fixmystreet.org/2016/12/15/v2.0-faster-tests/"/>
        <updated>2016-12-15T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2016/12/15/v2.0-faster-tests</id>
        <content type="html">&lt;p&gt;FixMyStreet has a large and hopefully comprehensive test suite that runs
through all aspects of the codebase, checking everything is working. This
makes it easier to change code and add new features, safe in the knowledge
that any breakages will be quickly highlighted.&lt;/p&gt;

&lt;h2 id=&quot;speeding-up-the-tests&quot;&gt;Speeding up the tests&lt;/h2&gt;

&lt;p&gt;Every time someone commits code to our GitHub repository, or opens a pull
request, the tests are automatically run for us by Travis CI. We’re alerted to
success or failure with little green ticks or red crosses on GitHub, and by
notice in IRC.&lt;/p&gt;

&lt;p&gt;The tests seemed to have slowed down considerably in recent times, but we
couldn’t identify any changes at the FixMyStreet side which might have caused
this.&lt;/p&gt;

&lt;p&gt;However, there had recently been some spam scraping of
&lt;a href=&quot;https://gaze.mysociety.org/&quot;&gt;Gaze&lt;/a&gt;, our web service that provides population
density information to FixMyStreet (so that e.g. the &lt;a href=&quot;https://www.mysociety.org/2012/08/14/mysociety-design-tips-how-we-choose-the-best-map-zoom-level/&quot;&gt;maps can try and guess an
appropriate zoom
level&lt;/a&gt;,
and so alerts can try and guess an appropriate radius), and rate limiting had
been added to try and help combat it.&lt;/p&gt;

&lt;p&gt;Dave spotted that this was being triggered by FixMyStreet test runs, leading to
pauses as the suite waited for the rate limiting to ease. Thankfully, all Gaze
calls were being routed through one function (that had been created in order to
cope gracefully with a Gaze failure) and so it was a simple matter for this
function to be stubbed out if being run as part of a test.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://travis-ci.org/mysociety/fixmystreet/builds/143317849&quot;&gt;Before&lt;/a&gt;:
&lt;img src=&quot;/assets/posts/testing-before.png&quot; alt=&quot;The test suite took about 18 minutes to run.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://travis-ci.org/mysociety/fixmystreet/builds/143325800&quot;&gt;After&lt;/a&gt;:
&lt;img src=&quot;/assets/posts/testing-after.png&quot; alt=&quot;The test suite took under 6 minutes to run.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;There are many tests that still rely on the internet (e.g. for some MapIt
lookups) and eventually it would be good to get to the point where they are all
stubbed out and the test suite can run completely offline, probably even more
quickly.&lt;/p&gt;

&lt;h2 id=&quot;multiple-test-running&quot;&gt;Multiple test running&lt;/h2&gt;

&lt;p&gt;When running the tests, the suite creates a test database (in PostgreSQL terms,
it actually creates a temporary cluster) so that anything it does won’t affect
your development database. Theoretically, this means you should be able to run
the test suite multiple times simultaneously – perhaps it’s doing a full run,
but you want to try and fix (and retest) the first error while it carries on.
However, this was not working, and after some investigation it turned out that
each run was creating (and overwriting) a test configuration &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.yml&lt;/code&gt; file, which
meant the existing runs got all confused. Adding a process ID to the test
configuration file meant that each run is independent and can successfully
coexist with each other.&lt;/p&gt;

&lt;h2 id=&quot;keystroke-saving&quot;&gt;Keystroke saving&lt;/h2&gt;

&lt;p&gt;Lastly, you used to have to run the full suite with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bin/run-tests t&lt;/code&gt;, but now
if you run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bin/run-tests&lt;/code&gt;, it will assume you meant &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;t&lt;/code&gt;. A small thing, but it
might save a few seconds over the years. ;-)&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 2.0 – EXIF rotation in JavaScript</title>
        <link href="https://fixmystreet.org/2016/12/14/v2.0-exif-rotation-preview/"/>
        <updated>2016-12-14T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2016/12/14/v2.0-exif-rotation-preview</id>
        <content type="html">&lt;p&gt;FixMyStreet has had a nice multiple image uploader since version 1.8. This uses
multiple &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;input type=file&lt;/code&gt; fields, progressively enhanced to add
drag’n’drop, image preview, and uploading in the background whilst you fill in
the rest of the form.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cloud.githubusercontent.com/assets/739624/11398421/76c7c856-9378-11e5-9c25-971de271bd0c.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;In version 1.8.4, we
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/commit/4023ee86708f825b64e5f10bef31519ebfb0c5f8&quot;&gt;patched&lt;/a&gt;
the third party library we use, &lt;a href=&quot;http://www.dropzonejs.com&quot;&gt;dropzone&lt;/a&gt;, to
correctly orient photos in the image preview. We did this by including a
cut-down version of &lt;a href=&quot;https://github.com/exif-js/exif-js&quot;&gt;exif-js&lt;/a&gt; to read in
the EXIF orientation data, and then make sure we rotated the image as
instructed in JavaScript before drawing the thumbnail preview. The rotation was
accomplished by moving the image so its centre was over (0,0), rotating the
appropriate amount, and then re-translating it back.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cloud.githubusercontent.com/assets/8081877/16151581/b808b924-3495-11e6-8573-5e9828b3fa49.png&quot; alt=&quot;&quot; align=&quot;right&quot; hspace=&quot;8&quot; /&gt;&lt;/p&gt;

&lt;p&gt;For this new version, we had a different bug to fix. If the user had uploaded a
picture, submitted the form, and was shown the form again due to a server side
error of some sort (some validation not caught by client-side validation, for
example, or because you were logging in during the reporting process), the
image for the preview was then being loaded from the server (where it had
already been uploaded), not the client, and not displaying. We
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/commit/7684ee064c717722003e920baed08d0230eb0d9e&quot;&gt;patched the exif-js library&lt;/a&gt;.,
Now, if it is given a URL rather than a data: string, it will go off and fetch
the image so that it can read out the orientation data.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 2.0 – Improved forms</title>
        <link href="https://fixmystreet.org/2016/12/13/v2.0-improved-forms/"/>
        <updated>2016-12-13T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2016/12/13/v2.0-improved-forms</id>
        <content type="html">&lt;p&gt;The new release of FixMyStreet includes a number of improvements to various
forms on the site. In this post, we will take a brief look at the notable
changes.&lt;/p&gt;

&lt;h2 id=&quot;public-reporting-form&quot;&gt;Public reporting form&lt;/h2&gt;

&lt;p&gt;&lt;img class=&quot;r&quot; src=&quot;/assets/posts/new-reporting-form.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This form has been rejigged, in order to more obviously split out details that
will be public (e.g. photos, details) from those that will not be published on
the site (e.g. the user’s email address and phone number). The category
selector has also moved to the top, and if the category chosen requires the
display of extra questions or information (e.g. through Open311 attributes or a
custom built asset layer), they will be shown immediately.&lt;/p&gt;

&lt;p&gt;If a report is made in an area that is covered by more than one body, the
category the user selects will normally dictate which one the report is sent
to. Now, when the category is selected, we update the list of bodies given at
the top of the report page, if we know that the report will be sent there.&lt;/p&gt;

&lt;p&gt;Talking about custom built asset layers, this is a good place to show how the
FixMyStreet codebase can be put to other uses, with a bit of development.&lt;/p&gt;

&lt;p&gt;Angus Council in Scotland provide a WFS layer (that is, vector format geographic
information) containing the locations of all their streetlights, which
we display if the street lighting category is selected within Angus on FixMyStreet.&lt;/p&gt;

&lt;p&gt;Importantly, it can display which lights Angus already knows are broken. If the
user is able to identify precisely which street light is affected, they can
click on it. But picking a street light isn’t mandatory: we don’t want to put
people off who aren’t certain, or who are unable to select an individual light.
You can see an example of what this looks like on the Angus cobrand of
FixMyStreet.com below.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/angus-streetlights.png&quot; alt=&quot;fix.angus.gov.uk shows individual street lights when the Street lighting category is selected.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;br style=&quot;clear:both&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;admin-report-editing&quot;&gt;Admin report editing&lt;/h2&gt;

&lt;p&gt;&lt;img class=&quot;r&quot; src=&quot;/assets/posts/admin-report-form-before.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Previously, the form for administrators to edit a report was functional, but
certainly nothing more than that! Due to the work we’ve done on the new user
system, more admin users may well be accessing this form in future, and so
we’ve taken the opportunity to make it much tidier.&lt;/p&gt;

&lt;p&gt;It now looks much more like the front end of the site. We’ve added a map that
lets you move the location of the report, tidied up the various functions an
admin can perform, and so on. If a category change means the report should have
been sent to a different body, it will be re-sent.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/admin-report-form-after.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;admin-category-editing&quot;&gt;Admin category editing&lt;/h2&gt;

&lt;p&gt;This was a historical oddity, in that the Add category form and the Edit
category form were completely separate creatures, though both contained the
same fields, and were used for basically the same purpose:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/admin-category-add-before.png&quot; alt=&quot;&quot; class=&quot;l&quot; style=&quot;max-width:45%&quot; /&gt;
&lt;img src=&quot;/assets/posts/admin-category-edit-before.png&quot; alt=&quot;&quot; class=&quot;r&quot; style=&quot;max-width:45%&quot; /&gt;
&lt;br style=&quot;clear:both&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/admin-category-edit-after.png&quot; alt=&quot;&quot; class=&quot;r&quot; /&gt;
You can see how they looked different in the screenshots above. They now share
an HTML template, which also makes it easier for us to update should it need
changing in future.&lt;/p&gt;

&lt;p&gt;&lt;br style=&quot;clear:both&quot; /&gt;&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>Version 2.0 – HTML5 History</title>
        <link href="https://fixmystreet.org/2016/12/09/v2.0-html5-history/"/>
        <updated>2016-12-09T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2016/12/09/v2.0-html5-history</id>
        <content type="html">&lt;p&gt;We’ve &lt;a href=&quot;https://www.mysociety.org/2015/12/18/photo-upload-and-progressive-enhancement-for-fixmystreet/&quot;&gt;mentioned
before&lt;/a&gt;
that FixMyStreet is built on a progressively-enhanced base, a concept explained
neatly &lt;a href=&quot;https://gdstechnology.blog.gov.uk/2016/09/19/why-we-use-progressive-enhancement-to-build-gov-uk/&quot;&gt;in a nice blog post from the UK
government&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This means that e.g. the slippy map is, underneath it all, an old-style
server-side image map that works out where you click; URLs are all shareable
and pages are functional even if JavaScript is not available; the front page
loads quickly and doesn’t need to preload an entire application.&lt;/p&gt;

&lt;p&gt;None of this means that we don’t use or like JavaScript, however. This post is
about adding JavaScript to FixMyStreet to provide a quicker experience to users
looking at reports on our map.&lt;/p&gt;

&lt;p&gt;When viewing a &lt;a href=&quot;https://www.fixmystreet.com/reports/Oxfordshire&quot;&gt;list of
reports&lt;/a&gt; on FixMyStreet, you
might want to look at a few reports one after the other, much as you can on a
Google Maps or OpenStreetMap results screen.&lt;/p&gt;

&lt;p&gt;So now, when you click a report in the list or a pin on the map, the report
page is pulled in via JavaScript. This updates the page, pin and URL in situ,
rather than loading a new page. Other pins remain visible, plus the page feels
(and probably is) a bit quicker as the page header doesn’t reload, and it is
easy to switch back to the list view.&lt;/p&gt;

&lt;p&gt;This feature uses HTML5’s History API, ie. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pushState&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;popState&lt;/code&gt;, to
update the URL as the page changes. That means that when you share it,
the page that loads will always be the one that the user intended it to be.&lt;/p&gt;

&lt;p&gt;This improvement did not come without problems, however. Overriding the
browser’s own behaviour when it comes to history and navigation means you have
to think carefully, and I’m sure we’ll need to make further refinements to
ensure that everything works as the user would expect.&lt;/p&gt;

&lt;p&gt;There were small issues: for example, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pushState&lt;/code&gt; stores the document title at
the point when it’s called, for the ‘Back’ button list, meaning we had to make
sure any title change happened after that. Some browsers have a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;popstate&lt;/code&gt; on
page load, which can cause an issue if you assume it’s only fired due to
history events.&lt;/p&gt;

&lt;p&gt;There was the complication of needing to tell the difference between someone
clicking back to the ‘initial state’ of the page, and an internal hashchange or
other less crucial event – as well as using a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;replaceState&lt;/code&gt; on page
load, we store the original URL and title for use in such a situation.&lt;/p&gt;

&lt;p&gt;Then we forgot that the code would be running on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/reports&lt;/code&gt; lists as well as
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/around&lt;/code&gt; which led to some confusion until we realised what was happening! And
of course, you have to make sure everything JavaScript-wise is set up
appropriately for content brought in via JavaScript.&lt;/p&gt;

&lt;p&gt;We also used &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pushState&lt;/code&gt; in the new report process, to update the URL as you
select the report’s location, and on list pages when you select one of the
filters or sort. This has worked well, and is certainly much more preferable to
the ‘hash-bang’ technique used by some sites in previous years (and still now),
which is reliant on JavaScript functioning.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 2.0 – area highlighting</title>
        <link href="https://fixmystreet.org/2016/12/08/v2.0-area-highlighting/"/>
        <updated>2016-12-08T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2016/12/08/v2.0-area-highlighting</id>
        <content type="html">&lt;p&gt;FixMyStreet’s report pages for a particular body have always highlighted the
area of the body covered, by fetching the KML shape from the associated MapIt
and plotting it on a map. In version two we have made it look much nicer:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/area-highlighting-before.jpeg&quot; align=&quot;left&quot; style=&quot;max-width:49%&quot; /&gt; 
&lt;img src=&quot;/assets/posts/area-highlighting-after.jpeg&quot; align=&quot;right&quot; style=&quot;max-width:49%&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Until now we have coloured in the shape in a light orange, as pictured above
left. This is fine for an overall view of a body, but if you want to zoom in to
a particular area, it makes it quite hard to see the underlying map.&lt;/p&gt;

&lt;p&gt;It would be preferable if every part of the map &lt;em&gt;except&lt;/em&gt; the body’s area could
be shaded, highlighting the correct area without losing any clarity from the
part you’re interested in, as in the new image above right.&lt;/p&gt;

&lt;h2 id=&quot;polygon-make-up&quot;&gt;Polygon make-up&lt;/h2&gt;

&lt;p&gt;Polygons in KML and other similar formats are made up of multiple linear rings
– the first ring is the polygon’s outline, and any subsequent entries are holes
within the polygon. You can therefore ‘invert’ a polygon by having the outer
ring be something surrounding the polygon, then having the polygon be a hole
within that.&lt;/p&gt;

&lt;p&gt;So the way we have implemented this in our new version is to fetch the area
from &lt;a href=&quot;https://mapit.mysociety.org/&quot;&gt;MapIt&lt;/a&gt;, but before plotting it preface it
with a giant rectangle covering the whole world. (Thankfully, any holes within
the original shape are inverted too, though that is implementation dependent
and it would have been a lot harder if they weren’t!).&lt;/p&gt;

&lt;p&gt;There were a couple of issues along the way. MapIt may return either a polygon
or multiple polygons, so we needed to deal with each differently (we turn
multiple polygons into one polygon, which also thankfully Just Works). And
OpenLayers has a hardcoded maximum pixel co-ordinate for SVG rendering, dating
from &lt;a href=&quot;https://github.com/openlayers/ol2/commit/ba5b664a2f34691574e149c8d48ab4deb33c532b&quot;&gt;2007 and an issue in Firefox 2&lt;/a&gt;.
We hope that any such issues have been fixed by now. We haven’t had any reports
of crashes yet, anyway…&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 2.0 – New user system</title>
        <link href="https://fixmystreet.org/2016/12/07/v2.0-new-user-system/"/>
        <updated>2016-12-07T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2016/12/07/v2.0-new-user-system</id>
        <content type="html">&lt;p&gt;Version 2 launches a new user system for admins, including more granular
permissions and a variety of new features.&lt;/p&gt;

&lt;h2 id=&quot;logging-in&quot;&gt;Logging in&lt;/h2&gt;

&lt;p&gt;Admins can now use the same login system as the main front end. We highly
recommend running your site over HTTPS in order to keep credentials secure;
&lt;a href=&quot;https://letsencrypt.org/&quot;&gt;LetsEncrypt&lt;/a&gt; can supply free 3-month certificates.&lt;/p&gt;

&lt;p&gt;The main admin user type is the ‘superuser’; a user with this flag set (which
can be done in the database, or by running the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;createsuperuser&lt;/code&gt; command) has
full access to all areas of the admin, just like admins under the old system.
By default, these are the only types of user allowed to log in to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/admin&lt;/code&gt;. (It
is possible to change this, e.g. in the UK, non-superuser admin users
associated with a body can log in to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/admin&lt;/code&gt; on their own cobrand.)&lt;/p&gt;

&lt;h2 id=&quot;user-permissions&quot;&gt;User permissions&lt;/h2&gt;

&lt;p&gt;&lt;img class=&quot;r&quot; src=&quot;/assets/posts/admin-user-permissions.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Users associated with a body (called ‘body users’) can be given a variety
of different feature-based permissions; the screenshot here shows the list
of different options.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Categories:&lt;/strong&gt; You can associate a user with a list of categories, which
e.g. pre-selects those categories when the user visits the All Reports page.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Response priorities:&lt;/strong&gt; This allows you to set a list of different
priorities for a body, or again for a particular category in a body,
letting you note different priorities for different reports.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Response templates:&lt;/strong&gt; You can create and edit templates associated with
your body, or with a particular category in that body, and then when leaving an
update you can select one of these templates to allow easy updating of reports.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;You can give a user access to a front-end &lt;strong&gt;report ‘inspect’ view&lt;/strong&gt;, which
lets a user edit a report’s category, state, or location. If the category
change moves the report to a different body, it will be re-sent. Alternatively,
a user can be given &lt;em&gt;only&lt;/em&gt; category edit or priority edit permission.
Here is a screenshot of the top of an inspect form view:&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/report-inspect.png&quot; alt=&quot;The inspect form lets you change category, state, report location, and so on.&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;create-as-anotherbody&quot;&gt;Create as another/body&lt;/h2&gt;

&lt;p&gt;This permission gives a user the ability to create a report or update on behalf
of a body, or as another user. We envisage this being useful in a body’s
contact centre, where they receive a report over a phone and enter it into
FixMyStreet as that user. Below is a short animation showing this in action on
the Oxfordshire cobrand of FixMyStreet.com:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cloud.githubusercontent.com/assets/739624/17371098/9a55c806-5996-11e6-9602-cf1cf58f8cdb.gif&quot; alt=&quot;Show an example of the create as another in action&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;shortlists&quot;&gt;Shortlists&lt;/h2&gt;

&lt;p&gt;&lt;img class=&quot;l&quot; src=&quot;https://cloud.githubusercontent.com/assets/739624/19122469/7fa927ba-8b22-11e6-8193-ef20d9ce496e.png&quot; alt=&quot;&quot; /&gt;
A user with the shortlist permission gains a shortlist button on each report;
clicking this adds the report to your own personal shortlist of reports, which
you can view in a section of Your Account. This may be useful for an
‘inspector’ type of admin user, who wishes to compile the day’s list of
reports before going out and investigating them. You can also see if a report
is on someone else’s shortlist, and take it off them if you need to.
&lt;br style=&quot;clear:both&quot; /&gt;&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 2.0 – Multi-select dropdown jQuery plugin</title>
        <link href="https://fixmystreet.org/2016/12/06/v2.0-multi-select/"/>
        <updated>2016-12-06T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2016/12/06/v2.0-multi-select</id>
        <content type="html">&lt;p&gt;There are several types of ‘list page’ on FixMyStreet: for example, when you
view all reports from a specific body, or when you log into your account to see
reports you have made.&lt;/p&gt;

&lt;p&gt;For quite a while now, users have been able to filter these by state (eg
‘fixed’ or ‘in progress’) or category (eg ‘pothole’, ‘streetlight’, etc), but a
recent suggestion from Oxfordshire County Council prompted us to look again at
this functionality and improve it.&lt;/p&gt;

&lt;p&gt;So now it’s simple to filter by multiple states or categories: want to see all
unfixed potholes? All streetlights or flytipping reports that are fixed? No
problem.&lt;/p&gt;

&lt;p&gt;HTML’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;select multiple&amp;gt;&lt;/code&gt; is not the nicest tool in the box, especially when
it comes to actually selecting multiple options. It usually involves holding
down a key, but that key is different depending upon your operating system.&lt;/p&gt;

&lt;p&gt;So I looked at existing JavaScript plugins and finding nothing suitable created
a very simple jQuery plugin which is available at
&lt;a href=&quot;https://github.com/mysociety/jquery-multi-select&quot;&gt;https://github.com/mysociety/jquery-multi-select&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;By default, it converts a multiple select into a dropdown with checkboxes:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/multi-select-people.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The options can be wrapped within a container to stop the dropdown overlapping other content:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/multi-select-line-wrap.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;With options in the constructor, you can specify text for when all/no options
are selected, and specify groups of options as presets that will be listed at
the top of the dropdown:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/multi-select-groups.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;On FixMyStreet, we have used this for both the state and category filters on list pages:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/multi-select.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Let us know if you find the plugin useful!&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 2.0 – email validation</title>
        <link href="https://fixmystreet.org/2016/12/05/v2.0-email-domain-name-validation/"/>
        <updated>2016-12-05T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2016/12/05/v2.0-email-domain-name-validation</id>
        <content type="html">&lt;p&gt;When someone enters an email address on FixMyStreet, we try and do some simple
validation before sending a confirmation email, to catch typos and the like. We
do the following:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Check the address is correctly formed (e.g. that it contains an @ sign and a
domain, and doesn’t include irregular characters, etc);&lt;/li&gt;
  &lt;li&gt;Check that the email address’s domain is a valid top-level domain (TLD) (it’s
not going to be delivered anywhere if it’s not); and&lt;/li&gt;
  &lt;li&gt;Check that the email address’s domain has a valid DNS entry (so we’ll be
able to try and deliver an email there).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The middle point means using a Perl module,
&lt;a href=&quot;https://metacpan.org/pod/Net::Domain::TLD&quot;&gt;Net::Domain::TLD&lt;/a&gt;, that contains a
list of all valid TLDs. This list has grown since we last updated it, and we
found ourselves incorrectly rejecting an email address that was perfectly valid
(a @domain.cymru address). It was at least easy to update our version of
Net::Domain::TLD to ensure that our list of top-level domains is current.&lt;/p&gt;

&lt;h2 id=&quot;changing-your-email-address&quot;&gt;Changing your email address&lt;/h2&gt;

&lt;p&gt;The confirmation email is itself another form of validation, and the only one
that can actually confirm that the user entering the email address has access
to that email inbox.&lt;/p&gt;

&lt;p&gt;Version 2 of FixMyStreet now allows users to change their own email address,
which threw up a complication – we can’t update the user’s table to their new
email address until it’s been confirmed.&lt;/p&gt;

&lt;p&gt;So we have to store their old email address with the token that is sent to the
new one. When the new address has been confirmed, we deal with it differently
depending on whether or not that address already exists in the database. If it
does, it’s a matter of merging the two accounts.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 2.0 – HTML emails</title>
        <link href="https://fixmystreet.org/2016/11/29/v2.0-html-emails/"/>
        <updated>2016-11-29T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2016/11/29/v2.0-html-emails</id>
        <content type="html">&lt;p&gt;FixMyStreet sends a number of automated emails, both to users (confirmation
emails, follow-up questionnaires) and to bodies (the reports themselves).
Previously these were plain text, but we have now introduced HTML emails, with
all the design possibilities that this implies.&lt;/p&gt;

&lt;p&gt;One reason for this is to make the site’s communications look more
professional; another is an attempt to minimise one of the most time-consuming
admin tasks - dealing with users who reply to our automated emails.&lt;/p&gt;

&lt;h2 id=&quot;designing-better-emails&quot;&gt;Designing better emails&lt;/h2&gt;

&lt;p&gt;In Version 2.0 we wanted to afford FixMyStreet emails the same design and
usability attention that we normally spend on the FixMyStreet website.&lt;/p&gt;

&lt;p&gt;Incorporating feedback from our users, our support team, and our council
partners, we quickly identified a few key places that HTML (graphical) emails
could improve the FixMyStreet experience for everyone:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Attaching a map and photo&lt;/strong&gt; of each problem to our “Has your problem been
 fixed?” questionnaire email, to help people remember the report we’re
 asking about.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Styling calls to action as attractive, clickable buttons&lt;/strong&gt;, to make the
 emails easier to quickly scan and comprehend, and to reduce user support
 queries.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Using photos and a clearer typographical hierarchy&lt;/strong&gt; to make the area
 alert emails easier to scan, especially when there are multiple new
 problems in your chosen area.&lt;/li&gt;
  &lt;li&gt;Letting our council partners and international reusers maintain their brand
 image across the website and emails, by &lt;strong&gt;easily customising the logo and
 colour scheme&lt;/strong&gt; of emails sent to their users.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The best way to see how we’ve improved FixMyStreet’s emails is to give
FixMyStreet a try, and receive the emails yourself! Try
&lt;a href=&quot;https://www.fixmystreet.com&quot;&gt;reporting a new problem near you&lt;/a&gt;, or
&lt;a href=&quot;https://www.fixmystreet.com/alert&quot;&gt;subscribing to email alerts about new reports in your area&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you’d like to know &lt;em&gt;how&lt;/em&gt; we implemented some of our more technical changes,
read on…&lt;/p&gt;

&lt;h2 id=&quot;attaching-the-static-map-image&quot;&gt;Attaching the static map image&lt;/h2&gt;

&lt;p&gt;One thing that we wanted to include in the email was a map showing the location
of the report (be that the one you’ve just made, or the one you’re receiving an
alert or questionnaire for). The map that you see on the website is made up of
many 256x256px tiles stitched together in HTML/CSS to appear as one smooth map,
with separate pin images superimposed in the correct location; for the email,
we needed just one image covering whatever portion of the map was necessary,
plus the pin.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/posts/html-email-map-centre.png&quot; alt=&quot;&quot; class=&quot;r&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This is the point at which FixMyStreet’s
&lt;a href=&quot;https://gdstechnology.blog.gov.uk/2016/09/19/why-we-use-progressive-enhancement-to-build-gov-uk/&quot;&gt;progressively-enhanced&lt;/a&gt;
base came in very useful. If JavaScript does not work for whatever reason, the
site has always displayed an alternative: a small map made up of four tiles in
a square, with the pin located appropriately on top. It also makes sure that
the pin location (the point at the bottom middle of the pin) is contained
within the central half of the tiled map (the red dashed area in our image
here), so that there’s no chance the pin overlaps the edge of the map.&lt;/p&gt;

&lt;p&gt;This was perfect for the image to be used in an HTML email. The new static map
function fetches the same data used by the front end, requests the tile data
for those four tiles, stitches them together in one 512x512px image, composites the
pin on top in the correct location, and then cuts off the bottom 128 and top 64
pixels – as the pin’s central location means those will always be pin-less. The
image is then shrunk to 310px in width, providing output that looks like this,
appearing in the top right hand corner of the email:&lt;/p&gt;

&lt;div style=&quot;text-align:center&quot;&gt;
&lt;img src=&quot;/assets/posts/html-email-map.png&quot; alt=&quot;&quot; /&gt;
&lt;/div&gt;

&lt;h2 id=&quot;inline-images&quot;&gt;Inline images&lt;/h2&gt;

&lt;p&gt;The new HTML email - whether they’re reports, alerts, confirmations or
questionnaires - normally have upwards of three images: the static map image,
an image of the report (or repots for alert emails), and a site logo. We wanted
to include all these images within the email itself, rather than use remote
images, as due to spam many people have remote images switched off.&lt;/p&gt;

&lt;p&gt;We also wanted to keep things as simple as possible when including images in
the email templates. Inline images in HTML emails use an image source of
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cid:UNIQUE_ID&lt;/code&gt; within the HTML (or CSS), and then give a particular attachment
of the email the same &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UNIQUE_ID&lt;/code&gt; in its Content-ID header. Lastly, we may
potentially also have normal attachments.&lt;/p&gt;

&lt;p&gt;We settled on an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;inline_image&lt;/code&gt; function in the template, which can be
provided with either a path to an image file (for the static logo), or a
function that returns image data and a content type (for the static map or
report image). As the email template is processed, each call to this function
generates a unique ID for the image and stores the information in a list to be
added after the plain text/HTML email parts.&lt;/p&gt;

&lt;p&gt;There are a variety of ways to attach images to an email. Content types
are used to identify what is contained by each part of the email. As well as
the various types of image, and text/plain and text/html for the text and HTML
parts, there are various containers: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;multipart/alternative&lt;/code&gt; as a container for
parts containing the same information in different formats, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;multipart/related&lt;/code&gt;
as a container for parts that are linked in some way, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;multipart/mixed&lt;/code&gt; as
a general container.&lt;/p&gt;

&lt;p&gt;The setups we decided on were as follows:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;If the HTML email has no inline images or other attachments, then we create
a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;multipart/alternative&lt;/code&gt; email, containing the two textual parts.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If the HTML email has inline images but no other attachments (the most common
case), we create a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;multipart/related&lt;/code&gt; email, its first part being the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;multipart/alternative&lt;/code&gt; as above, the subsequent parts the inline images.&lt;/p&gt;

    &lt;p&gt;An alternative here would be to create a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;multipart/alternative&lt;/code&gt; email, with its
first part being text, and its second part being &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;multipart/related&lt;/code&gt; containing
the HTML part and the inline images. This would mean that an email client
that didn’t support HTML email might only see the textual part and not any of
the images. If your inline images were not ‘important’ to the email (e.g. an
email footer signature) then this might be a way to go; we thought that the
map and image should be visible to all users if possible.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If the HTML email has attachments but no inline images,
we create a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;multipart/mixed&lt;/code&gt; email, its first part being the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;multipart/alternative&lt;/code&gt; as above, the subsequent parts the attachments.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If the HTML email has both inline images and other attachments, then
we create a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;multipart/mixed&lt;/code&gt; email. Its first part is a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;multipart/related&lt;/code&gt;
email (that again contains &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;multipart/alternative&lt;/code&gt; and the inline images),
and then its other attachments form the later parts of the mixed email. If
you imagine the parts as envelopes with brackets, it would look like this:&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;multipart/mixed (
  multipart/related (
    multipart/alternative (
      text/plain
      text/html
    )
    image/jpeg
    image/png
  )
  application/pdf
)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As part of this work, I discovered that the &lt;a href=&quot;https://github.com/rails/rails/issues/2686&quot;&gt;oldest open
GitHub&lt;/a&gt; issue of the Rails
framework was related to this topic – if you used Rails to create an email
containing both inline images and normal attachments, the normal attachments
were not accessible to most email clients (that support HTML email) as they had
embedded all the normal attachments inside a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;multipart/related&lt;/code&gt; part. I have
submitted a &lt;a href=&quot;https://github.com/rails/rails/pull/26445&quot;&gt;pull request&lt;/a&gt; to fix
this structure, which I hope will be accepted in some way.&lt;/p&gt;

&lt;h2 id=&quot;templating&quot;&gt;Templating&lt;/h2&gt;

&lt;p&gt;This work was also a good opportunity to move some text generation out of
some code into the templates (necessary because the text being generated
now needed some HTML around each entry), for all the alert emails.&lt;/p&gt;

&lt;h2 id=&quot;testing&quot;&gt;Testing&lt;/h2&gt;

&lt;p&gt;Finally, this post wouldn’t be complete without a few words about
email testing.&lt;/p&gt;

&lt;p&gt;Any of you who have built HTML emails in the past will agree that they are like
taking a time machine back to web development in the mid 1990s. Email clients
like Outlook, Gmail, and iOS Mail have dramatically different capabilities and
ways of rendering the same email code.&lt;/p&gt;

&lt;p&gt;One way of avoiding cross-client complications is to keep your HTML layout as
simple as possible; maybe add an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;img&amp;gt;&lt;/code&gt; tag in for your site logo, some
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;strong&amp;gt;&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;em&amp;gt;&lt;/code&gt; tags for emphasis, and call it a day.&lt;/p&gt;

&lt;p&gt;But our plans for FixMyStreet required much more complex email layouts than
this. It was a hard requirement that the details of the report (the map, the
name, the photo) in our questionnaire emails, were given equal priority to the
introductory text and the call to action buttons. The requirements led us to a
two-column layout, which, inevitably, required two or three layers of nested
table cells. (Remember, we’re in our 1990s time machine!)&lt;/p&gt;

&lt;p&gt;To help us test these layout changes in all the required email clients,
we used &lt;a href=&quot;https://litmus.com&quot;&gt;Litmus&lt;/a&gt;, which is like
&lt;a href=&quot;https://browserstack.com&quot;&gt;Browserstack&lt;/a&gt; but for emails.
You send a single email to Litmus, and it renders that email in
dozens of different email clients, grabbing screenshots of each one, and
presenting them to you in a handy dashboard. Building HTML emails this way
still requires a good deal of trial and error, and obscure CSS knowledge, but
at least with Litmus, the process of iterating on your design is made as short
and fast as possible. It’s an expensive service, but well worth the cost for
the peace of mind that your new layout works in even the most uncooperative
email clients.&lt;/p&gt;

&lt;div style=&quot;text-align:center&quot;&gt;
&lt;img src=&quot;/assets/posts/html-email-litmus.png&quot; alt=&quot;&quot; /&gt;
&lt;/div&gt;

&lt;p&gt;With the help of our Litmus checklists, we made a bunch of unintuitive
discoveries, including:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;th&amp;gt;&lt;/code&gt; rather than &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;td&amp;gt;&lt;/code&gt; elements, so that the Android 4.x mail client
can give them &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;block&lt;/code&gt; styling in the small screen media query.&lt;/li&gt;
  &lt;li&gt;Defining our font settings on every table cell, rather than simply inheriting
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;font-family&lt;/code&gt; from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;body&lt;/code&gt;, so that sans-serif fonts are used in Outlook,
rather than Times New Roman.&lt;/li&gt;
  &lt;li&gt;Using a three-column wrapper table to create a 620px centred content area
that also shrinks down on narrow screens. (Outlook doesn’t like
max-width, so this is the simplest alternative.)&lt;/li&gt;
  &lt;li&gt;Enforcing a sensible (500px) min-width for the main content area,
on clients that don’t support media queries.&lt;/li&gt;
  &lt;li&gt;Using giant borders on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;a&amp;gt;&lt;/code&gt; elements, to make them into Outlook-friendly
buttons without resorting to less accessible alternatives like images.&lt;/li&gt;
  &lt;li&gt;Aligning images with the deprecated &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;align&lt;/code&gt; attribute, rather than CSS floats.&lt;/li&gt;
  &lt;li&gt;Applying the email background colour to a wrapper element inside the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;body&lt;/code&gt;,
and thus leaving the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;body&lt;/code&gt; to keep its default white background, so that
replies sent from Outlook (which inserts the reply message &lt;em&gt;inside&lt;/em&gt; the body
of the original message) will have a white background.&lt;/li&gt;
&lt;/ul&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 2.0</title>
        <link href="https://fixmystreet.org/2016/11/15/v2.0/"/>
        <updated>2016-11-15T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2016/11/15/v2.0</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/nauright/4676220337/&quot; title=&quot;bureau of street traffic&quot;&gt;&lt;img src=&quot;https://c2.staticflickr.com/5/4057/4676220337_fd38770a98.jpg&quot; width=&quot;500&quot; height=&quot;313&quot; alt=&quot;bureau of street traffic&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;We’re proud to announce the release of &lt;strong&gt;version 2.0&lt;/strong&gt; of FixMyStreet.&lt;/p&gt;

&lt;p&gt;This version contains a wide array of new features, including HTML email and
multiple state/category filtering, a new admin user system with graduated
permissions, and various bugfixes and development improvements.&lt;/p&gt;

&lt;p&gt;Over the next few days and weeks, we will be writing a series of blog posts,
going into details about a number of the changes, which I hope will be of
interest. But before then, do &lt;a href=&quot;/overview/&quot;&gt;set up the code&lt;/a&gt; or update your
installation, and &lt;a href=&quot;/community/&quot;&gt;ask us questions&lt;/a&gt; :)&lt;/p&gt;

&lt;h2 id=&quot;new-front-end-features&quot;&gt;New front end features&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;img src=&quot;/assets/posts/html-email-example.png&quot; alt=&quot;&quot; class=&quot;r&quot; /&gt;
&lt;strong&gt;HTML email:&lt;/strong&gt;
There is now the option for all emails sent by FixMyStreet to be HTML formatted
where previously they were plain text only. This includes confirmation and
questionnaire emails to the user, and report emails to the public body. These
emails include any image added to the report, plus a small static map of the
problem’s location.
&lt;br style=&quot;clear:both&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;img src=&quot;/assets/posts/multi-select.png&quot; alt=&quot;&quot; class=&quot;r&quot; /&gt;
&lt;strong&gt;State/category filtering and sorting of list pages:&lt;/strong&gt;
When viewing a list of reports, you can now filter and sort them in pretty
much any way you choose, including sorting by most- or least-recently updated,
newest or oldest, or most commented. You can also select multiple categories
or states (e.g. “fixed”).
&lt;br style=&quot;clear:both&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;img src=&quot;/assets/posts/area-highlighting-after.jpeg&quot; alt=&quot;&quot; class=&quot;r&quot; /&gt;
&lt;strong&gt;Pretty area highlighting on body pages:&lt;/strong&gt;
The highlighting of areas on a body page has been inverted, so that the
unimportant parts of the map are shaded and you can interact more easily with
reports on the page.
&lt;br style=&quot;clear:both&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Users can now update their own email address&lt;/strong&gt;
This was a frequent request from users and we’re glad to report that they can
now do it themselves on their account page.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;img src=&quot;/assets/posts/report-selected.png&quot; alt=&quot;&quot; class=&quot;r&quot; /&gt;
&lt;strong&gt;Performance improvements:&lt;/strong&gt;
When looking at reports from a list page, the other report pins stay visible so
that it is easier to switch between them. The report itself is being pulled in
behind the scenes, meaning the whole page does not need to reload. The map no
longer extends underneath the sidebar and header, which makes things easier,
and a scroll wheel can now zoom the map in and out.
&lt;br style=&quot;clear:both&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;div class=&quot;r&quot; style=&quot;height:280px;overflow:auto&quot;&gt;&lt;img src=&quot;/assets/posts/new-reporting-form.png&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;
    &lt;p&gt;&lt;strong&gt;Making privacy options clearer:&lt;/strong&gt;
The reporting form has been separated into public and private sections, to make
it clearer which parts of what you provide will be made visible on the site.&lt;/p&gt;

    &lt;p&gt;&lt;strong&gt;Showing the relevant recipient:&lt;/strong&gt; If you live in an area where there’s
more than one body, the category you pick normally dictates which body we send
your report to. Now, when you select the category we update the name of the
body given at the top of the report page, if we know that the report will be
sent there.
&lt;br style=&quot;clear:both&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;new-admin-user-system&quot;&gt;New admin user system&lt;/h2&gt;

&lt;p&gt;Admin users can now use the same log-in right across the site - whether they’re
making a report like a standard user, or logging in to make edits and moderate
the site.&lt;/p&gt;

&lt;p&gt;In the past, the distinction between admin and other users was black and white.
As an admin user, you had access to every part of the site, but users can now be
given individual permissions for various layers of access. These include:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Proxy users&lt;/strong&gt; This layer grants the ability to create a report or update on
behalf of a body, or as another user. We envisage this being useful in a
body’s contact centre, where they receive a report over a phone and enter it
into FixMyStreet as that user;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Report editors&lt;/strong&gt; Giving the power to edit a report’s category, state, or
location. If the admin user changes the category, and that change means that
a different body is now responsible for the report, it will be re-sent;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;List makers&lt;/strong&gt;, who can compile their own shortlist of reports they wish to
go and inspect. This may be useful for a contractor or team who wishes to
compile the day’s tasks;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Quick responders&lt;/strong&gt; These users have access to response templates, allowing them
to edit and publish templated updates;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Prioritisers&lt;/strong&gt; These users may set different priorities on reports;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Trusted users&lt;/strong&gt; A simple reputation system, which e.g. potentially lets
reports from trusted users be actioned more quickly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The admin report edit form has also been greatly improved, including a map
to update a report’s location (and re-sending the report if the body changes),
and much tidier layout.&lt;/p&gt;

&lt;h2 id=&quot;bugfixes-and-development-changes&quot;&gt;Bugfixes and development changes&lt;/h2&gt;

&lt;p&gt;Bugfixes include updating the top-level domain (TLD) list for email validation,
hiding authorities which don’t exist any more on the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/reports&lt;/code&gt; page, and
fixing the previously-broken photo preview display after form submission. We
have dropped support for Internet Explorer 6.&lt;/p&gt;

&lt;p&gt;If you’re a re-user of the codebase, there are a number of changes that will
hopefully help you out. Geocoder results won’t be cached in development, the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UPLOAD_DIR&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GEO_CACHE&lt;/code&gt; variables are now relative to the project root,
we’ve added a server-side MapIt proxy, and you can add your own fields to the
contact form. Open311 support has been tidied up and improved. If you run the
tests, you can now run the test suite multiple times simultaneously, and the
tests have been sped up quite a bit.&lt;/p&gt;

&lt;p&gt;Plus quite a few other things; as always, see the full list of changes
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases&quot;&gt;over on GitHub&lt;/a&gt;.&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>Version 1.8.4</title>
        <link href="https://fixmystreet.org/2016/07/06/v1.8.4/"/>
        <updated>2016-07-06T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2016/07/06/v1.8.4</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/ennid/5999264663/&quot; title=&quot;Yellow Line (Mumbai)&quot;&gt;&lt;img src=&quot;https://c8.staticflickr.com/7/6002/5999264663_9384176094.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;Yellow Line (Mumbai)&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;We’ve released &lt;strong&gt;version 1.8.4&lt;/strong&gt; of FixMyStreet, along with versions 1.7.2 and 1.6.3.&lt;/p&gt;

&lt;p&gt;These releases include a security fix, closing two
cross-site scripting (XSS) vulnerabilities. Please update
your installation as soon as possible.&lt;/p&gt;

&lt;p&gt;Version 1.8.4 also contains other minor bug fixes, such as correctly
orientating preview images, wrapping emails better for differing screen sizes,
a bug with filter redirect when JavaScript wasn’t available, a race condition
when starting a new report, and a couple of display bugs in IE7.&lt;/p&gt;

&lt;p&gt;See the full list of changes
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases&quot;&gt;over on GitHub&lt;/a&gt;.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 1.8.3</title>
        <link href="https://fixmystreet.org/2016/06/03/v1.8.3/"/>
        <updated>2016-06-03T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2016/06/03/v1.8.3</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/freedomiiphotography/5987366229/&quot; title=&quot;Passing Light&quot;&gt;&lt;img src=&quot;https://c6.staticflickr.com/7/6121/5987366229_ecd877f4d8.jpg&quot; width=&quot;500&quot; height=&quot;333&quot; alt=&quot;Passing Light&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;We’ve released &lt;strong&gt;version 1.8.3&lt;/strong&gt; of FixMyStreet.&lt;/p&gt;

&lt;p&gt;For developers, the main improvement in this version is the great speed up to
CSS compilation by moving from sass to libsass.&lt;/p&gt;

&lt;p&gt;We’ve fixed some map issues, getting the Google Maps layer working again and
dealing with tap sensitivity on some devices.&lt;/p&gt;

&lt;p&gt;The admin interface gets a bit of love, adding common search boxes to the index
page, allowing change of email to an existing address, and speeding up photo
removal.&lt;/p&gt;

&lt;h3 id=&quot;upgrading-notes&quot;&gt;Upgrading notes&lt;/h3&gt;

&lt;p&gt;If your templates aren’t kept in the main repository, there are a couple of
things to be aware of with this release:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If you’ve used the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cf&lt;/code&gt; class, you’ll need to rename it to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clearfix&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;If you have customised any of the email templates that use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;?=...?&amp;gt;&lt;/code&gt; style
variables (e.g. alert emails, questionnaire, submit), you’ll need to
rewrite them to use the standard &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[%...%]&lt;/code&gt; variables.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See the full list of changes
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases&quot;&gt;over on GitHub&lt;/a&gt;.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 1.8.2</title>
        <link href="https://fixmystreet.org/2016/05/03/v1.8.2/"/>
        <updated>2016-05-03T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2016/05/03/v1.8.2</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/m0php/4001836593/&quot; title=&quot;Security barrier&quot;&gt;&lt;img src=&quot;https://farm3.staticflickr.com/2553/4001836593_492263c6cd.jpg&quot; width=&quot;500&quot; height=&quot;332&quot; alt=&quot;Security barrier&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;We’ve released &lt;strong&gt;version 1.8.2&lt;/strong&gt; of FixMyStreet, along with versions 1.7.1 and 1.6.2.&lt;/p&gt;

&lt;p&gt;These releases include an important security fix, whereby a malicious user
could craft an image upload to the server that allowed them to run external
commands as the user running the site. Please update your installation as soon
as possible.&lt;/p&gt;

&lt;p&gt;Version 1.8.2 also contains other improvements and additions to existing
features:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Twitter social login, alongside the existing Facebook login;&lt;/li&gt;
  &lt;li&gt;PNG and GIF image upload support;&lt;/li&gt;
  &lt;li&gt;Some development improvements, including the final merging of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;base&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fixmystreet&lt;/code&gt; templates, storing any Open311 error in the database, and tidying
up some unused cobrands;&lt;/li&gt;
  &lt;li&gt;A few bug fixes, such as showing the right body user form value for fixed
reports (thanks Jon Kristensen).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See the full list of changes
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases&quot;&gt;over on GitHub&lt;/a&gt;.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 1.8.1</title>
        <link href="https://fixmystreet.org/2016/03/23/v1.8.1/"/>
        <updated>2016-03-23T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2016/03/23/v1.8.1</id>
        <content type="html">&lt;p&gt;We’ve released &lt;strong&gt;version 1.8.1&lt;/strong&gt; of FixMyStreet, which fixes some bugs and
makes some improvements to the 1.8 release.&lt;/p&gt;

&lt;p&gt;Now there is multiple photo support, the display of those photos on a report
page is now a bit nicer, and if there’s an error message on photo upload it
should now always be visible. Auto-scrolling of the sidebar when you hover over
a pin has been removed as it was confusing, and the site now remembers a user’s
last anonymous state. Fixes have been made for running on more recent versions
of Perl, one of which was causing the geocoder to break.&lt;/p&gt;

&lt;p&gt;For developers, an easier way of adding cobrand-specific custom reporting
fields has been added.&lt;/p&gt;

&lt;p&gt;There are a couple of other minor changes; see the full list of changes
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases&quot;&gt;over on GitHub&lt;/a&gt;.&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>Version 1.8</title>
        <link href="https://fixmystreet.org/2016/03/02/v1.8/"/>
        <updated>2016-03-02T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2016/03/02/v1.8</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/danbri/2520508005/&quot; title=&quot;Thin yellow line&quot;&gt;&lt;img src=&quot;https://farm4.staticflickr.com/3078/2520508005_4d388294fc.jpg&quot; width=&quot;500&quot; height=&quot;334&quot; alt=&quot;Thin yellow line&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;We’ve released &lt;strong&gt;version 1.8&lt;/strong&gt; of FixMyStreet.&lt;/p&gt;

&lt;p&gt;The two main new features in this release are &lt;em&gt;Facebook login&lt;/em&gt; – provide a
Facebook app ID and secret in your configuration and it will smoothly fit into
the creation and login flow – and &lt;em&gt;multiple photo support&lt;/em&gt;, along with a modern
interface for previewing and uploading photos whilst you create your report.&lt;/p&gt;

&lt;p&gt;Smaller improvements include &lt;em&gt;highlighting the pin&lt;/em&gt; when you hover over an item
in the sidebar, and vice-versa; fixing some small display bugs such as how
updates were displayed in Your Reports and preventing a chevron being stretched
in Firefox; improving the look of the 404 page, and making sure you can see an
update if you got to it via an in-page link.&lt;/p&gt;

&lt;p&gt;Memory &lt;em&gt;performance&lt;/em&gt; has been improved, meaning cron jobs can take up to half
as much memory, and this release also fixes a number of small bugs, including
an embarrassing swap of latitude and longitude in the Google geocoder, making
sure you’re signed up for updates if you used the app and were logged in, and
better internationalisation and display of numbers.&lt;/p&gt;

&lt;p&gt;For &lt;em&gt;developers&lt;/em&gt;, we’ve added a generic static route handler, so that adding
new static HTML pages to your installation involves only creating a new file in
your template directory and nothing more; improved bounce handling; and fixed
the cobrand restriction handling on Your Reports and list pages.&lt;/p&gt;

&lt;p&gt;Plus quite a few other things; as always, see the full list of changes
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases&quot;&gt;over on GitHub&lt;/a&gt;.&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>Version 1.7</title>
        <link href="https://fixmystreet.org/2015/10/23/v1.7/"/>
        <updated>2015-10-23T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2015/10/23/v1.7</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/flyingturtle/837938254/&quot; title=&quot;yellow lines&quot;&gt;&lt;img src=&quot;https://farm2.staticflickr.com/1074/837938254_c4ecb36323.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;yellow lines&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;We’ve released &lt;strong&gt;version 1.7&lt;/strong&gt; of FixMyStreet.&lt;/p&gt;

&lt;p&gt;This version adds some new features. First off is that the FixMyStreet design
is now &lt;em&gt;bi-directional&lt;/em&gt;, providing an easy switch to flip the design to either
left-to-right or right-to-left. This was done with the kind support of the
National Democratic Institute.&lt;/p&gt;

&lt;p&gt;We have added &lt;em&gt;state and category filters&lt;/em&gt; to the list pages, letting users
view only e.g. open reports in the potholes category, or all reports in the
graffiti category. Various design improvements have been made, including the
showing of the report on a questionnaire page and the email confirmation pages,
and we’ve added a nicer default OpenGraph image.&lt;/p&gt;

&lt;p&gt;Database &lt;em&gt;performance&lt;/em&gt; has been improved in a number of areas, and the
accessibility of the map pages has been improved.&lt;/p&gt;

&lt;p&gt;This release also fixes a number of small &lt;em&gt;bugs&lt;/em&gt;, including translating report
states in the admin index, dealing with DMARC email issues, and fixes for
Google Maps API users.&lt;/p&gt;

&lt;p&gt;For &lt;em&gt;developers&lt;/em&gt;, we’ve made it easier to run gettext-extract if you’re
performing your own translations, removed some confusing warnings, finally
removed the final few hardcoded “FixMyStreet” strings so it’s easy to rename
your site, streamlined the navigation menu and list item CSS using a BEM style
naming scheme so it is easy to change and override, and lastly fixed a long
standing issue where errors were not always logged correctly.&lt;/p&gt;

&lt;p&gt;Plus quite a few other things; as always, see the full list of changes
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases&quot;&gt;over on GitHub&lt;/a&gt;.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 1.6.1</title>
        <link href="https://fixmystreet.org/2015/07/31/v1.6.1/"/>
        <updated>2015-07-31T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2015/07/31/v1.6.1</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/bmiphone/5488751401/&quot; title=&quot;Copenhagen trip&quot;&gt;&lt;img src=&quot;https://farm6.staticflickr.com/5052/5488751401_fe5bc84a49.jpg&quot; width=&quot;500&quot; height=&quot;333&quot; alt=&quot;Copenhagen trip&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;We’ve released &lt;strong&gt;version 1.6.1&lt;/strong&gt; of FixMyStreet.&lt;/p&gt;

&lt;p&gt;This release fixes a bug introduced in the previous release when setting
multiple areas for a body in the administration interface.&lt;/p&gt;

&lt;p&gt;It also includes improvements to the All Reports page, adding a fixed header
and tooltips, and stops the sidebar running over the footer on alerts pages.
The admin gets a variety of minor improvements, with better internal linking
and a mark as sent button. Plus a Danish translation :)&lt;/p&gt;

&lt;p&gt;As ever, see the full list of changes
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases&quot;&gt;over on GitHub&lt;/a&gt;.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 1.6</title>
        <link href="https://fixmystreet.org/2015/07/10/v1.5.5/"/>
        <updated>2015-07-10T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2015/07/10/v1.5.5</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a data-flickr-embed=&quot;true&quot; href=&quot;https://www.flickr.com/photos/caffeina/2079673826/&quot; title=&quot;security&quot;&gt;&lt;img src=&quot;https://farm3.staticflickr.com/2065/2079673826_c4edb07e4d.jpg&quot; width=&quot;500&quot; height=&quot;333&quot; alt=&quot;security&quot; /&gt;&lt;/a&gt;&lt;script async=&quot;&quot; src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;We’ve released &lt;strong&gt;version 1.6&lt;/strong&gt; of FixMyStreet (previously numbered 1.5.5).&lt;/p&gt;

&lt;p&gt;This release includes important security fixes:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A vulnerability in login email sending that could allow an account to
be hijacked by a third party;&lt;/li&gt;
  &lt;li&gt;Alterations to token logging in and timeout behaviour;&lt;/li&gt;
  &lt;li&gt;A dependency update to fix an issue with Unicode characters in passwords.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More details on those items below. Other items in this release include a
Chinese translation, a bug fix with shrunken update photos, and some front end
improvements, such as a ‘hamburger’ menu icon and an easier Report button on
mobile, and resized map pins based on zoom level.&lt;/p&gt;

&lt;p&gt;See the full list of changes
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases&quot;&gt;over on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;security-fixes&quot;&gt;Security fixes&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Login email account hijacking:&lt;/strong&gt;
Due to the way parameters were passed into the token table in the database, it
was possible for someone to request a login email for one email address, but
have the login email sent to different address. This would allow a third party
to log in as someone else, letting them make reports or updates as that person.&lt;/p&gt;

&lt;p&gt;The code has been rewritten so all user parameter passing goes through central
functions that return only one parameter even if the user has passed multiple
parameters. &lt;a href=&quot;http://blog.gerv.net/2014/10/new-class-of-vulnerability-in-perl-web-applications/&quot;&gt;More details of this class of vulnerability&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Email authentication tokens:&lt;/strong&gt;
Problem confirmation tokens had to be used within a month; this now applies to
all confirmation tokens, and email sign in tokens are valid for a day. Using
those tokens after confirmation will redirect correctly, but no longer log you
in; links in alert emails will no longer log you in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unicode characters in passwords:&lt;/strong&gt;
The package our code uses to encode database columns,
DBIx::Class::EncodedColumn, could have issues with Unicode characters provided
to it. This was fixed by upgrading the version we use.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 1.5.4</title>
        <link href="https://fixmystreet.org/2015/03/18/v1.5.4/"/>
        <updated>2015-03-18T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2015/03/18/v1.5.4</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a href=&quot;https://www.flickr.com/photos/alanvernon/6131124997&quot; title=&quot;Female Yellow Warbler by Alan Vernon, on Flickr&quot;&gt;&lt;img src=&quot;https://farm7.staticflickr.com/6061/6131124997_f9e893b37c.jpg&quot; width=&quot;500&quot; height=&quot;333&quot; alt=&quot;Female Yellow Warbler&quot; /&gt;&lt;br /&gt;Female Yellow Warbler by Alan Vernon on Flickr&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;We’ve released &lt;strong&gt;version 1.5.4&lt;/strong&gt; of FixMyStreet.&lt;/p&gt;

&lt;p&gt;This includes a couple of new map layers, Bing Maps and Stamen’s
&lt;a href=&quot;http://maps.stamen.com/toner-lite/&quot;&gt;toner-lite&lt;/a&gt;, and nicer confirmation pages
for after you’ve made a report or update, along with other smaller improvements
and bug fixes. See the full list of changes
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases&quot;&gt;over on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For developers, it includes a few small improvements, to do with Mac
installation, making some things optional, and including a new configuration
variable for if you’re running behind an SSL proxy. We’ve also added some test
URLs so that you can view confirmation pages without having to leave a new
report or update, e.g. see it in action on fixmystreet.com:
&lt;a href=&quot;https://www.fixmystreet.com/P/_test_&quot;&gt;https://www.fixmystreet.com/P/_test_&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As always, do &lt;a href=&quot;/community/&quot;&gt;ask on the mailing list&lt;/a&gt; if you’d like more
information on any of the above, or submit an issue or pull request on GitHub.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 1.5</title>
        <link href="https://fixmystreet.org/2014/11/20/v1.5/"/>
        <updated>2014-11-20T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2014/11/20/v1.5</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;
&lt;a href=&quot;https://www.flickr.com/photos/shutupyourface/5545353603&quot; title=&quot;Resting Tahr 2 by Jason Armstrong, on Flickr&quot;&gt;&lt;img src=&quot;https://farm6.staticflickr.com/5091/5545353603_71e3822ce9.jpg&quot; width=&quot;500&quot; height=&quot;303&quot; alt=&quot;Resting Tahr 2&quot; /&gt;&lt;br /&gt;Resting Tahr by Jason Armstrong on Flickr&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;We’ve released &lt;strong&gt;version 1.5&lt;/strong&gt; of FixMyStreet. This version fully supports the
new Long Term Support (LTS) version of Ubuntu, Trusty Tahr 14.04 (the code did
already run fine on Ubuntu Trusty if you set it up manually, but now the
install script will work and a few other bits have been tidied).&lt;/p&gt;

&lt;p&gt;This release comes with a few improvements to the admin interface, including
pagination of search results, validation of new categories, and some display
enhancements.&lt;/p&gt;

&lt;p&gt;We’ve moved the map sidebar to be flush with the window edge, which we think is
simpler and easier on the eye, and we’ve continued making the template
structure easier to change and override.&lt;/p&gt;

&lt;p&gt;We’ve also fixed some bugs, such as map submission not working with JavaScript
disabled or unavailable. As another example, we had a report of the Android
browser crashing when showing a map page, which we tracked down to the slightly
transparent map navigation controls – crashing wasn’t worth this, so now on
mobile they’re fully opaque.&lt;/p&gt;

&lt;p&gt;From &lt;a href=&quot;https://www.transifex.com/projects/p/fixmystreet/&quot;&gt;Transifex&lt;/a&gt; we’ve added
four new languages (as well as updating the existing ones):
Albanian, Bulgarian, Hebrew, and Ukranian.&lt;/p&gt;

&lt;p&gt;See the full changes
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases&quot;&gt;over on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As always, do &lt;a href=&quot;/community/&quot;&gt;ask on the mailing list&lt;/a&gt; if you’d like more
information on any of the above, or submit an issue or pull request on GitHub.&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>Version 1.4.2</title>
        <link href="https://fixmystreet.org/2014/07/15/v1.4.2/"/>
        <updated>2014-07-15T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2014/07/15/v1.4.2</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;&lt;a href=&quot;https://www.flickr.com/photos/theenmoy/8372727576/&quot; title=&quot;Bicycle Rack by Theen Moy on Flickr&quot;&gt;&lt;img src=&quot;https://farm9.staticflickr.com/8083/8372727576_75d392409c.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;Bicycle Rack&quot; /&gt;&lt;br /&gt;Bicycle Rack by Theen Moy on Flickr&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;We’ve released &lt;strong&gt;version 1.4.2&lt;/strong&gt;, a maintenance release, but also with a couple
of new features. The main reason for this release was to fix a couple of issues
with the installation script, which are hopefully now resolved. It also
upgrades our bundled copy of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cpanm&lt;/code&gt; (to cope better when an external module
website is down), tidies up the template structure, copes with browser autofill
on the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/auth&lt;/code&gt; sign in page, and adds links from the All Reports page to a
body’s open or fixed reports.&lt;/p&gt;

&lt;p&gt;The main new feature is the addition of SMTP username/password and SSL/TLS
options for your setup. You can read about the new options on
&lt;a href=&quot;/customising/config/#smtp_smarthost&quot;&gt;the configuration settings page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;See the full changes over on GitHub at
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases&quot;&gt;https://github.com/mysociety/fixmystreet/releases&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As always, do &lt;a href=&quot;/community/&quot;&gt;ask on the mailing list&lt;/a&gt; if you’d like more
information on any of the above, or submit an issue or pull request on GitHub.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 1.4</title>
        <link href="https://fixmystreet.org/2014/05/23/v1.4/"/>
        <updated>2014-05-23T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2014/05/23/v1.4</id>
        <content type="html">&lt;div class=&quot;r&quot; align=&quot;right&quot;&gt;&lt;a href=&quot;https://www.flickr.com/photos/rozabbotts/6675291613/&quot; title=&quot;Yellow by RozSheffield on Flickr&quot;&gt;&lt;img src=&quot;https://farm8.staticflickr.com/7154/6675291613_3d4764abc5.jpg&quot; width=&quot;379&quot; height=&quot;500&quot; alt=&quot;Yellow&quot; /&gt;&lt;br /&gt;Yellow by RozSheffield on Flickr&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Say hello to &lt;strong&gt;version 1.4&lt;/strong&gt; of FixMyStreet. As usual, the &lt;a href=&quot;/install/install-script/&quot;&gt;install
script&lt;/a&gt; and &lt;a href=&quot;/install/ami/&quot;&gt;AMI&lt;/a&gt; have both been
updated to this version.&lt;/p&gt;

&lt;p&gt;Hopefully this release will run more smoothly on EC2 micro instances, with some
cron rejigging to alleviate memory problems.&lt;/p&gt;

&lt;p&gt;There have been a few minor user-facing improvements, such as automatically
selecting the reporting category if there’s only one choice, and removing the
indenting of emails; some bug fixes, including changes for the new version of
Debian, a problem with language setting in email alerts, and removal of cached
photos; and a number of improvements for people reusing the code, including a
no-op send method, having reports on staging sites be sent to the reporter,
adding an external URL field to bodies, and making it easier to change the pin
icons.&lt;/p&gt;

&lt;p&gt;See the full changes over on GitHub at
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases&quot;&gt;https://github.com/mysociety/fixmystreet/releases&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thanks to Andy Lulham, Chris Mytton, Dave Arter, Dave Whiteland, Gerald, Hakim
Cassimally, Ian Chard, Jon Kristensen, Jonas Oberg, Kindrat, Matthew
Somerville, Rikard, Steven Day, and Struan Donald for contributing to this
release.&lt;/p&gt;

&lt;p&gt;As always, do &lt;a href=&quot;/community/&quot;&gt;ask on the mailing list&lt;/a&gt; if you’d like more
information on any of the above, or submit an issue or pull request on GitHub.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 1.3</title>
        <link href="https://fixmystreet.org/2013/11/25/v1.3/"/>
        <updated>2013-11-25T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2013/11/25/v1.3</id>
        <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/jasonbacon/2281783615/&quot; title=&quot;Yosemite tunnel tonemapped in qtpfsgui by nineball2727, on Flickr&quot;&gt;&lt;img class=&quot;r&quot; src=&quot;http://farm3.staticflickr.com/2252/2281783615_d1cb6f7ccd.jpg&quot; width=&quot;500&quot; height=&quot;339&quot; alt=&quot;Yosemite tunnel tonemapped in qtpfsgui&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Version 1.3&lt;/strong&gt; of FixMyStreet is now out :-) The &lt;a href=&quot;/install/install-script/&quot;&gt;install
script&lt;/a&gt; and &lt;a href=&quot;/install/ami/&quot;&gt;AMI&lt;/a&gt;  are both updated to
this version.&lt;/p&gt;

&lt;p&gt;I realise I haven’t posted here with each point release during version 1.2,
sorry. You can see the changes in each release here on GitHub at
&lt;a href=&quot;https://github.com/mysociety/fixmystreet/releases&quot;&gt;https://github.com/mysociety/fixmystreet/releases&lt;/a&gt; and below is a list of all
the main things that have changed since version 1.2 (* means new since the
last version, 1.2.6, if you were keeping track):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;OpenLayers upgraded to 2.13.1, giving e.g. animated zooming&lt;/li&gt;
  &lt;li&gt;A fully functional Google Maps layer via OpenLayers&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;*&lt;/em&gt; If you only specify one cobrand in the configuration file, the site will
always use it, rather than only if your hostname also matches. This is
probably what you would expect to happen!&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;*&lt;/em&gt; A contact can be given multiple email addresses&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;*&lt;/em&gt; A body can be marked as deleted, and then it will not be used by the
front end at all&lt;/li&gt;
  &lt;li&gt;The admin interface has had a lot of inline documentation, hints and notices
added, along with a page showing the site’s current configuration&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;*&lt;/em&gt; The admin interface has some feature additions from coding volunteers,
such as a date picker on the stats page thanks to Andrew Black, and searching
by external ID thanks to Andy Lulham&lt;/li&gt;
  &lt;li&gt;We’ve added an example Vagrantfile and improved the install scripts&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;*&lt;/em&gt; The test suite should now run regardless of the contents of your
configuration file&lt;/li&gt;
  &lt;li&gt;Translation improvements - some better wording of strings, some missed or
UK-only URLs/translations (thanks Jonas and Rikard), and a fix for the
long-standing issue where multiline strings were not being translated
(hooray)&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;*&lt;/em&gt; Bug fixes, most notably sometimes when changing report state in the admin
interface, and an issue with the bottom navbar in Chrome (which we’ve
reported to the Chromium project)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As always, do &lt;a href=&quot;/community/&quot;&gt;ask on the mailing list&lt;/a&gt; if you’d like more
information on any of the above, or submit an issue or pull request on GitHub.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Version 1.2</title>
        <link href="https://fixmystreet.org/2013/05/03/v1.2/"/>
        <updated>2013-05-03T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2013/05/03/v1.2</id>
        <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/rbm/100165557/&quot; title=&quot;broken lamp post by Rob Mac, on Flickr&quot;&gt;&lt;img class=&quot;r&quot; src=&quot;http://farm1.staticflickr.com/28/100165557_6aff9acd7b.jpg&quot; width=&quot;375&quot; height=&quot;500&quot; alt=&quot;broken lamp post&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Today we’re releasing &lt;strong&gt;version 1.2&lt;/strong&gt; of the FixMyStreet platform. The
&lt;a href=&quot;/install/ami/&quot;&gt;AMI&lt;/a&gt; has been updated and the &lt;a href=&quot;/install/install-script/&quot;&gt;install
script&lt;/a&gt; will automatically now install this version.&lt;/p&gt;

&lt;p&gt;The main items in this release are things prompted by requests on &lt;a href=&quot;/community/&quot;&gt;our mailing
list&lt;/a&gt; :-)&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Postfix is now installed as part of the install script, or in the AMI. This
means email should work out of the box. For anyone already installed, you can
run the commands in &lt;a href=&quot;https://github.com/mysociety/fixmystreet/issues/412&quot;&gt;the GitHub ticket&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;A new configuration option &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MAPIT_ID_WHITELIST&lt;/code&gt; has been added, to restrict
usage to the IDs specified, if given. This means Claudio, who emailed last
week, could have &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[ 239540 ]&lt;/code&gt; as his &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MAPIT_ID_WHITELIST&lt;/code&gt;, and then reports
could only be made within the Marche region of Italy. We already use this new
option ourselves on https://www.zueriwieneu.ch/ where before it was
hard-coded in the code.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Other things include being able to zoom in further on OSM maps, and HTML
pages are now being gzipped.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lastly, as you can see this site has had a redesign to make it more friendly,
and we’ve added some more documentation about e.g. updating an AMI instance to
a newer version. If there’s anything unclear, please do &lt;a href=&quot;/community/&quot;&gt;ask on the mailing
list&lt;/a&gt; or submit an issue or pull request on GitHub.&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>Version 1.1 - Bodies</title>
        <link href="https://fixmystreet.org/2013/02/22/bodies/"/>
        <updated>2013-02-22T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2013/02/22/bodies</id>
        <content type="html">&lt;p&gt;&lt;img class=&quot;r&quot; src=&quot;/assets/posts/big-head-small.jpeg&quot; width=&quot;320&quot; height=&quot;240&quot; alt=&quot;Big Beautiful Face Statue in Tenerife by epSos.de&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Today we’re releasing &lt;strong&gt;version 1.1&lt;/strong&gt; of the FixMyStreet platform. The &lt;a href=&quot;/install/ami/&quot;&gt;AMI&lt;/a&gt; has
been updated and the &lt;a href=&quot;/install/install-script/&quot;&gt;install script&lt;/a&gt; will automatically now install
this version.&lt;/p&gt;

&lt;p&gt;The main change since version 1.0 is the addition of &lt;strong&gt;bodies&lt;/strong&gt;. Historically,
FixMyStreet has assumed that the administrative areas that are returned from
MapIt are the same thing as the bodies to which the reports will be sent. This
has led over time to a number of workarounds when this hasn’t been the case,
either in manual code changes in FixMyStreet or by adding new types to a MapIt
install, and dealing with it in that way.&lt;/p&gt;

&lt;p&gt;We have updated the code so that FixMyStreet holds its own records of bodies to
which reports can be sent, and the MapIt area – or areas – that they cover.
This is conceptually much clearer, as well as making it much easier to have a
body covering multiple areas, an area with multiple bodies, or a combination.&lt;/p&gt;

&lt;p&gt;Smaller functional changes in this release include admin improvements (it now
looks like the front end site, and has add a number of other additions), and a
couple of new configuration variables, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DO_NOT_REPLY_EMAIL&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SEND_REPORTS_ON_STAGING&lt;/code&gt;, to make debugging a little easier, along with a
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--debug&lt;/code&gt; option to send-reports. Also, we found on the &lt;a href=&quot;/community/&quot;&gt;mailing
list&lt;/a&gt; a couple of times that people ran into trouble because their
MapIt had debug turned on, and FixMyStreet didn’t cope well with the debug
output MapIt included in its responses. This has now been fixed.&lt;/p&gt;

&lt;p&gt;Many others of the commits in the past few months have been for various
installations of the codebase, from the forthcoming FixMyBarangay in the
Philippines to local UK council installs such as Oxfordshire or Bromley. These
have in many cases led to small improvements and bugfixes to the central
codebase, which can then be used by any reusers of the code.&lt;/p&gt;

&lt;p&gt;Lastly, all the strings in the JavaScript are now translatable, along with a
few other strings that had previously been missed; do let us know if you
find any other strings that can’t be translated and we’ll look into it.&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>Easy Installation</title>
        <link href="https://fixmystreet.org/2012/10/02/easy-install/"/>
        <updated>2012-10-02T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2012/10/02/easy-install</id>
        <content type="html">&lt;p&gt;Four months ago, someone raised &lt;a href=&quot;https://github.com/mysociety/fixmystreet/issues/302&quot;&gt;a
ticket&lt;/a&gt; on FixMyStreet’s
GitHub account, asking for alternative ways of setting up an installation.
We certainly agreed this was a good idea, as we’re well aware that there
are various different parts to FixMyStreet that might require quite a bit of
knowledge in setting up.&lt;/p&gt;

&lt;p&gt;We’re now pleased to announce that we have created an &lt;a href=&quot;/install/ami/&quot;&gt;AMI&lt;/a&gt;
(Amazon Machine Image) containing an already set-up default installation of
FixMyStreet. You can use this to create a running server on an Amazon EC2
instance. If you haven’t used Amazon Web Services before, then you can get a
Micro instance free for a year.&lt;/p&gt;

&lt;p&gt;If you have your own server, then we have separately released the &lt;a href=&quot;/install/install-script/&quot;&gt;install
script&lt;/a&gt; that is used to create the AMI, which can be
run on any clean Debian or Ubuntu server to set everything up for you, from
the PostgreSQL database to nginx.&lt;/p&gt;

&lt;p&gt;If you prefer to do things manually, and already know how to set up your
database and web server, our &lt;a href=&quot;/install/&quot;&gt;manual documentation&lt;/a&gt; is still
available.&lt;/p&gt;

&lt;p&gt;An AMI and install script is also available for MapIt – see our
&lt;a href=&quot;http://mapit.poplus.org/&quot;&gt;MapIt documentation&lt;/a&gt; for more details.
This should make it very straightforward to get something set up for testing
and development.&lt;/p&gt;

&lt;p&gt;Do let us know how you get on.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Improving Configuration</title>
        <link href="https://fixmystreet.org/2012/08/17/improving-configuration/"/>
        <updated>2012-08-17T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2012/08/17/improving-configuration</id>
        <content type="html">&lt;p&gt;Now that a default install is a bit more straightforward to set up, our
thoughts turn to improving the customistation of that default install.
Currently, apart from the options already present in the main configuration
file, that involves knowing a bit of Perl, in order to create a Cobrand .pm
file containing the various customistations. So to reduce that dependency,
we’ve moved a number of these options into the main configuration file, so that
hopefully a standard customisation might not need a Cobrand .pm file at all.&lt;/p&gt;

&lt;p&gt;These changes range from simple text strings that are now in templates, through
to specifying what areas from MapIt you are interested in, or what languages
the site is available in. The general.yml-example file contains information on
each option, and we’ve updated our &lt;a href=&quot;/customising/&quot;&gt;customisation documentation&lt;/a&gt;
as well.&lt;/p&gt;

&lt;p&gt;Also, thanks to some testing of a current installation by
&lt;a href=&quot;https://github.com/kagee&quot;&gt;Anders&lt;/a&gt; for FiksGataMi, we’ve made more incremental
improvements to the installation, including fixing a couple of tests that
shouldn’t run unless your configuration is set up in a particular way, making
sure inherited cobrands use the best templates, and including the
Catalyst::Devel module so running the development server is easier.&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>Default Workings</title>
        <link href="https://fixmystreet.org/2012/07/27/default-workings/"/>
        <updated>2012-07-27T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2012/07/27/default-workings</id>
        <content type="html">&lt;p&gt;In the past few weeks, a number of improvements have been made to the
FixMyStreet default set up, so that installation should provide you with a
working setup more easily and quickly, before you get on and make all the
necessary customisations you will want to for the service you are setting up.&lt;/p&gt;

&lt;p&gt;Firstly, we’ve tidied and consolidated the documentation on to this site,
putting everything you need in one place. We are using GitHub pages, which means
that the documentation is bundled along with the repository when checking out,
which might be useful. The installation guide now includes help for installing
on Mac OS X, and various other tweaks and improvements.&lt;/p&gt;

&lt;p&gt;Next, the codebase now automatically defaults to
&lt;a href=&quot;http://www.openstreetmap.org/&quot;&gt;OpenStreetMap&lt;/a&gt; maps and geocoding – these are
available, with more or less data, everywhere in the world, so you should be
able to test your installation and see working maps.&lt;/p&gt;

&lt;p&gt;Whilst an installation of &lt;a href=&quot;http://global.mapit.mysociety.org/&quot;&gt;MapIt&lt;/a&gt; may be
necessary for your FixMyStreet to work as you want – mapping locations picked to
the right authority might need some private boundary data, for example – the
code will now default to work as if everywhere is one administrative area.&lt;/p&gt;

&lt;p&gt;The code for sending reports has been refactored and modularised, enabling
proprietary options to be more easily added alongside the standard email,
Open311, and so on.&lt;/p&gt;

&lt;p&gt;We have removed any UK specific code from the default cobrand, moving it to
a UK cobrand (which is then in turn inherited by the various council cobrands
we have made in the UK). This should mean that you find you have less to override,
and more things should work by default.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/img/2012-07-27-screenshot.png&quot; alt=&quot;Default screenshot&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Lastly, the default cobrand now uses the new style that you can see on
&lt;a href=&quot;https://www.fixmystreet.com&quot;&gt;https://www.fixmystreet.com&lt;/a&gt;. By default, we have picked a pretty yet garish
colour scheme, in order to remind you that you almost certainly want to change
the colours being used for your own installation :)&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>An Introduction</title>
        <link href="https://fixmystreet.org/2012/02/06/an-introduction/"/>
        <updated>2012-02-06T00:00:00+00:00</updated>
        <id>https://fixmystreet.org/2012/02/06/an-introduction</id>
        <content type="html">&lt;p&gt;&lt;a href=&quot;https://www.mysociety.org/&quot;&gt;mySociety&lt;/a&gt; wrote
&lt;a href=&quot;https://www.fixmystreet.com/&quot;&gt;FixMyStreet&lt;/a&gt; in 2007 in order to make it easy for
people in the UK to report problems in their area. Since then over
&lt;a href=&quot;https://www.mysociety.org/2012/01/24/fixmystreet-another-big-number/&quot;&gt;200,000 problems&lt;/a&gt;
have been reported to UK councils using the site. As with all our
sites we want people everywhere to be able to benefit so we were delighted to
work with the Norwegian Unix User’s Group (&lt;a href=&quot;http://www.nuug.no&quot;&gt;NUUG&lt;/a&gt;)
last year to set up a &lt;a href=&quot;http://www.fiksgatami.no/&quot;&gt;FixMyStreet in Norway&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We want to build on that and help more people around the world install their
own copy of FixMyStreet. In the months since
&lt;a href=&quot;http://www.fiksgatami.no/&quot;&gt;FiksGataMi&lt;/a&gt; was launched we’ve made a number
of changes to FixMyStreet to make it easier to install and customise for other
countries. We’ve rewritten much of the code to use the
&lt;a href=&quot;http://www.catalystframework.org/&quot;&gt;Catalyst&lt;/a&gt; web framework which has
helped make it easier to customise and we’re now improving the
documentation and ironing out the installation procedure.&lt;/p&gt;

&lt;p&gt;However, we know that easy to install code is only part of the process.
Building a community around the software is far more valuable in encouraging
people to use and improve it. This site and the new
&lt;a href=&quot;https://groups.google.com/a/mysociety.org/forum/#!forum/fixmystreet&quot;&gt;mailing list&lt;/a&gt;
are our first steps along that road.&lt;/p&gt;

&lt;p&gt;So, if you’ve ever wanted to have a FixMyStreet for your town, state or
country then join the mailing list and we’ll help you along the way.&lt;/p&gt;

</content>
    </entry>
    

</feed>
