aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Florisson2013-05-17 18:55:58 +0200
committerMarc Florisson2013-05-17 18:55:58 +0200
commita80e3496452341b0dab50716eb95137553814bcf (patch)
tree2051bb884f172bc412cf55cef43e312dbe17445b
parenta9dee8d289c9c27471f00a86e307d0bbed210d93 (diff)
parentf3b470270bcfa7c1a8e0f29ba6dbe95c75605385 (diff)
downloadchouette-core-a80e3496452341b0dab50716eb95137553814bcf.tar.bz2
Merge branch 'geoportail'
-rw-r--r--app/assets/stylesheets/openlayers_style.css2
-rw-r--r--app/controllers/organisations_controller.rb6
-rw-r--r--app/maps/application_map.rb31
-rw-r--r--app/maps/connection_link_map.rb22
-rw-r--r--app/maps/journey_pattern_map.rb29
-rw-r--r--app/maps/line_map.rb24
-rw-r--r--app/maps/network_map.rb20
-rw-r--r--app/maps/route_map.rb29
-rw-r--r--app/maps/stop_area_map.rb14
-rw-r--r--app/views/organisations/edit.html.erb14
-rw-r--r--app/views/organisations/show.html.erb10
-rw-r--r--config/environments/development.rb1
-rw-r--r--config/locales/maps.yml8
-rw-r--r--config/locales/organisations.yml27
-rw-r--r--db/migrate/20130517090647_add_geoportail_key_to_organisation.rb5
-rw-r--r--db/schema.rb42
16 files changed, 166 insertions, 118 deletions
diff --git a/app/assets/stylesheets/openlayers_style.css b/app/assets/stylesheets/openlayers_style.css
index aa088e537..0e3a67108 100644
--- a/app/assets/stylesheets/openlayers_style.css
+++ b/app/assets/stylesheets/openlayers_style.css
@@ -31,7 +31,7 @@ div.olLayerDiv {
.olControlAttribution {
font-size: smaller;
right: 3px;
- bottom: 4.5em;
+ bottom: 0.5em;
position: absolute;
display: block;
}
diff --git a/app/controllers/organisations_controller.rb b/app/controllers/organisations_controller.rb
index daeb41837..7e2edb220 100644
--- a/app/controllers/organisations_controller.rb
+++ b/app/controllers/organisations_controller.rb
@@ -1,6 +1,12 @@
class OrganisationsController < InheritedResources::Base
respond_to :html
+ def update
+ update! do |success, failure|
+ success.html { redirect_to organisation_path }
+ end
+ end
+
private
def resource
diff --git a/app/maps/application_map.rb b/app/maps/application_map.rb
index 5efd6da84..e068a8950 100644
--- a/app/maps/application_map.rb
+++ b/app/maps/application_map.rb
@@ -4,6 +4,7 @@ class ApplicationMap
include MapLayers::ViewHelpers
attr_accessor :helpers
+ cattr_accessor :ign_api_key
def helpers
@helpers ||= Helpers.new
@@ -18,6 +19,15 @@ class ApplicationMap
self
end
+ def geoportail_key
+ if ( self.helpers && self.helpers.current_user &&
+ self.helpers.current_user.organisation &&
+ self.helpers.current_user.organisation.geoportail_key)
+ return self.helpers.current_user.organisation.geoportail_key
+ end
+ return nil
+ end
+
class Helpers
include ActionDispatch::Routing::UrlFor
include Rails.application.routes.url_helpers
@@ -40,7 +50,16 @@ class ApplicationMap
end
def map
- @map ||= MapLayers::Map.new(id, :projection => projection("EPSG:900913"), :controls => controls)
+ @map ||= MapLayers::Map.new(id, :projection => projection("EPSG:900913"), :controls => controls) do |map, page|
+ page << map.add_layer(MapLayers::OSM_MAPNIK)
+ page << map.add_layer(geoportail_wmts) if self.geoportail_key
+ page << map.add_layer(google_physical)
+ page << map.add_layer(google_streets)
+ page << map.add_layer(google_hybrid)
+ page << map.add_layer(google_satellite)
+
+ customize_map(map,page) if respond_to?( :customize_map)
+ end
end
def name
@@ -58,6 +77,16 @@ class ApplicationMap
OpenLayers::Format::KML.new :extractStyles => true, :extractAttributes => true, :maxDepth => 2
end
+ def geoportail_wmts
+ OpenLayers::Layer::WMTS.new :name => I18n.t("maps.ign_map"),
+ :url => "http://gpp3-wxs.ign.fr/#{self.geoportail_key}/wmts",
+ :layer => "GEOGRAPHICALGRIDSYSTEMS.MAPS",
+ :matrixSet => "PM",
+ :style => "normal",
+ :numZoomLevels => 19,
+ :attribution => 'Map base: &copy;IGN <a href="http://www.geoportail.fr/" target="_blank"><img src="http://api.ign.fr/geoportail/api/js/2.0.0beta/theme/geoportal/img/logo_gp.gif"></a> <a href="http://www.geoportail.gouv.fr/depot/api/cgu/licAPI_CGUF.pdf" alt="TOS" title="TOS" target="_blank">Terms of Service</a>'
+ end
+
def strategy_fixed
OpenLayers::Strategy::Fixed.new :preload => true
end
diff --git a/app/maps/connection_link_map.rb b/app/maps/connection_link_map.rb
index fe83efe40..9318ec90f 100644
--- a/app/maps/connection_link_map.rb
+++ b/app/maps/connection_link_map.rb
@@ -8,22 +8,12 @@ class ConnectionLinkMap < ApplicationMap
@connection_link_style = connection_link_style
end
- def map
- @map ||= MapLayers::Map.new(id, :projection => projection("EPSG:900913"), :controls => controls) do |map, page|
- page << map.add_layer(MapLayers::OSM_MAPNIK)
- page << map.add_layer(google_physical)
- page << map.add_layer(google_streets)
- page << map.add_layer(google_hybrid)
- page << map.add_layer(google_satellite)
-
- page.assign "stop_areas_layer", kml_layer([connection_link.referential, connection_link, :stop_areas], :styleMap => StyleMap::StopAreasStyleMap.new(helpers).style_map)
- page << map.add_layer(:stop_areas_layer)
- page << map.add_layer( kml_layer([connection_link.referential, connection_link], :styleMap => StyleMap::ConnectionLinkStyleMap.new(helpers).style_map))
- page << map.add_control( hover_control_display_name(:stop_areas_layer) )
- #page << map.add_layer(kml_layer(connection_link, :styleMap => StyleMap::ConnectionLinkStyleMap.new( :style => connection_link_style).style_map))
- #page << map.add_layer(kml_layer(polymorphic_path([referential, connection_link, :stop_areas], :format => :kml), :styleMap => StyleMap::StopAreasStyleMap.new.style_map))
- page << map.zoom_to_extent(bounds.to_google.to_openlayers) if bounds
- end
+ def customize_map(map, page)
+ page.assign "stop_areas_layer", kml_layer([connection_link.referential, connection_link, :stop_areas], :styleMap => StyleMap::StopAreasStyleMap.new(helpers).style_map)
+ page << map.add_layer(:stop_areas_layer)
+ page << map.add_layer( kml_layer([connection_link.referential, connection_link], :styleMap => StyleMap::ConnectionLinkStyleMap.new(helpers).style_map))
+ page << map.add_control( hover_control_display_name(:stop_areas_layer) )
+ page << map.zoom_to_extent(bounds.to_google.to_openlayers) if bounds
end
def ready?
diff --git a/app/maps/journey_pattern_map.rb b/app/maps/journey_pattern_map.rb
index b88c31208..075019c79 100644
--- a/app/maps/journey_pattern_map.rb
+++ b/app/maps/journey_pattern_map.rb
@@ -7,25 +7,16 @@ class JourneyPatternMap < ApplicationMap
@style = style
end
- def map
- @map ||= MapLayers::Map.new(id, :projection => projection("EPSG:900913"), :controls => controls) do |map, page|
- page << map.add_layer(MapLayers::OSM_MAPNIK)
- page << map.add_layer(google_physical)
- page << map.add_layer(google_streets)
- page << map.add_layer(google_hybrid)
- page << map.add_layer(google_satellite)
-
- #page << map.add_layer(kml_layer(line, :styleMap => StyleMap::LineStyleMap.new( :style => line_style).style_map))
- layer = kml_layer([journey_pattern.referential, journey_pattern.route.line, journey_pattern.route, journey_pattern], :styleMap => StyleMap::JourneyPatternStyleMap.new(helpers).style_map)
- page.assign "journeyPatternLayer", layer
-
- selectFeature = OpenLayers::Control::SelectFeature.new( :journeyPatternLayer)
- page.assign "selectFeature", selectFeature
-
- page << map.add_layer( :journeyPatternLayer)
- page << map.add_control( hover_control_display_name(:journeyPatternLayer) )
- page << map.zoom_to_extent(bounds.to_google.to_openlayers) if bounds
- end
+ def customize_map(map, page)
+ layer = kml_layer([journey_pattern.referential, journey_pattern.route.line, journey_pattern.route, journey_pattern], :styleMap => StyleMap::JourneyPatternStyleMap.new(helpers).style_map)
+ page.assign "journeyPatternLayer", layer
+
+ selectFeature = OpenLayers::Control::SelectFeature.new( :journeyPatternLayer)
+ page.assign "selectFeature", selectFeature
+
+ page << map.add_layer( :journeyPatternLayer)
+ page << map.add_control( hover_control_display_name(:journeyPatternLayer) )
+ page << map.zoom_to_extent(bounds.to_google.to_openlayers) if bounds
end
def ready?
diff --git a/app/maps/line_map.rb b/app/maps/line_map.rb
index e7b5611e6..3bc229555 100644
--- a/app/maps/line_map.rb
+++ b/app/maps/line_map.rb
@@ -8,22 +8,14 @@ class LineMap < ApplicationMap
@line_style = line_style
end
- def map
- @map ||= MapLayers::Map.new(id, :projection => projection("EPSG:900913"), :controls => controls) do |map, page|
- page << map.add_layer(MapLayers::OSM_MAPNIK)
- page << map.add_layer(google_physical)
- page << map.add_layer(google_streets)
- page << map.add_layer(google_hybrid)
- page << map.add_layer(google_satellite)
-
- #page << map.add_layer(kml_layer(line, :styleMap => StyleMap::LineStyleMap.new( :style => line_style).style_map))
- page.assign "stop_areas_layer", kml_layer([line.referential, line], :styleMap => StyleMap::StopAreasStyleMap.new(helpers).style_map)
-
- page << map.add_layer(:stop_areas_layer)
- page << map.add_control( hover_control_display_name(:stop_areas_layer) )
-
- page << map.zoom_to_extent(bounds.to_google.to_openlayers) if bounds
- end
+ def customize_map(map, page)
+ page << map.add_layer(kml_layer(line, :styleMap => StyleMap::LineStyleMap.new( :style => line_style).style_map))
+ page.assign "stop_areas_layer", kml_layer([line.referential, line], :styleMap => StyleMap::StopAreasStyleMap.new(helpers).style_map)
+
+
+ page << map.add_layer(:stop_areas_layer)
+ page << map.add_control( hover_control_display_name(:stop_areas_layer) )
+ page << map.zoom_to_extent(bounds.to_google.to_openlayers) if bounds
end
def bounds
diff --git a/app/maps/network_map.rb b/app/maps/network_map.rb
index 106c4f055..ec23f62c9 100644
--- a/app/maps/network_map.rb
+++ b/app/maps/network_map.rb
@@ -7,22 +7,12 @@ class NetworkMap < ApplicationMap
@network_style = network_style
end
- def map
- @map ||= MapLayers::Map.new(id, :projection => projection("EPSG:900913"), :controls => controls) do |map, page|
- page << map.add_layer(MapLayers::OSM_MAPNIK)
- page << map.add_layer(google_physical)
- page << map.add_layer(google_streets)
- page << map.add_layer(google_hybrid)
- page << map.add_layer(google_satellite)
-
- page.assign "stop_areas_layer", kml_layer([network.referential, network], :styleMap => StyleMap::StopAreasStyleMap.new(helpers).style_map)
+ def customize_map(map, page)
+ page.assign "stop_areas_layer", kml_layer([network.referential, network], :styleMap => StyleMap::StopAreasStyleMap.new(helpers).style_map)
- page << map.add_layer(:stop_areas_layer)
- page << map.add_control( hover_control_display_name(:stop_areas_layer) )
-
- #page << map.add_layer(kml_layer(network, :styleMap => StyleMap::NetworkStyleMap.new( :style => network_style).style_map))
- page << map.zoom_to_extent(bounds.to_google.to_openlayers) if bounds
- end
+ page << map.add_layer(:stop_areas_layer)
+ page << map.add_control( hover_control_display_name(:stop_areas_layer) )
+ page << map.zoom_to_extent(bounds.to_google.to_openlayers) if bounds
end
def bounds
diff --git a/app/maps/route_map.rb b/app/maps/route_map.rb
index e7b6e63c1..fc1a7d93e 100644
--- a/app/maps/route_map.rb
+++ b/app/maps/route_map.rb
@@ -7,25 +7,16 @@ class RouteMap < ApplicationMap
@style = style
end
- def map
- @map ||= MapLayers::Map.new(id, :projection => projection("EPSG:900913"), :controls => controls) do |map, page|
- page << map.add_layer(MapLayers::OSM_MAPNIK)
- page << map.add_layer(google_physical)
- page << map.add_layer(google_streets)
- page << map.add_layer(google_hybrid)
- page << map.add_layer(google_satellite)
-
- #page << map.add_layer(kml_layer(line, :styleMap => StyleMap::LineStyleMap.new( :style => line_style).style_map))
- layer = kml_layer([route.referential, route.line, route], :styleMap => StyleMap::RouteStyleMap.new(helpers).style_map)
- page.assign "routeLayer", layer
- selectFeature = OpenLayers::Control::SelectFeature.new( :routeLayer)
-
- page << map.add_layer( :routeLayer)
- page << map.add_control( hover_control_display_name(:routeLayer) )
- page << map.zoom_to_extent(bounds.to_google.to_openlayers) if bounds
-
- page.assign "selectFeature", selectFeature
- end
+ def customize_map(map, page)
+ layer = kml_layer([route.referential, route.line, route], :styleMap => StyleMap::RouteStyleMap.new(helpers).style_map)
+ page.assign "routeLayer", layer
+ selectFeature = OpenLayers::Control::SelectFeature.new( :routeLayer)
+
+ page << map.add_layer( :routeLayer)
+ page << map.add_control( hover_control_display_name(:routeLayer) )
+
+ page.assign "selectFeature", selectFeature
+ page << map.zoom_to_extent(bounds.to_google.to_openlayers) if bounds
end
def ready?
diff --git a/app/maps/stop_area_map.rb b/app/maps/stop_area_map.rb
index 2fc329dce..ab254bf73 100644
--- a/app/maps/stop_area_map.rb
+++ b/app/maps/stop_area_map.rb
@@ -9,13 +9,9 @@ class StopAreaMap < ApplicationMap
@stop_area = stop_area
end
- def map
- @map ||= MapLayers::Map.new(id, :projection => projection("EPSG:900913"), :controls => controls) do |map, page|
- page << map.add_layer(MapLayers::OSM_MAPNIK)
- page << map.add_layer(google_physical)
- page << map.add_layer(google_streets)
- page << map.add_layer(google_hybrid)
- page << map.add_layer(google_satellite)
+ def customize_map(map, page)
+ page.assign "edit_stop_area_layer", kml_layer(stop_area, { :default => editable? }, :style_map => StyleMap::EditStopAreaStyleMap.new(helpers).style_map)
+ page << map.add_layer(:edit_stop_area_layer)
if stop_area.children.present?
page.assign "children_layer", kml_layer(stop_area, { :children => true }, :style_map => StyleMap::StopAreasStyleMap.new(helpers).style_map)
@@ -31,7 +27,6 @@ class StopAreaMap < ApplicationMap
page.assign "edit_stop_area_layer", kml_layer(stop_area, { :default => editable? }, :style_map => StyleMap::EditStopAreaStyleMap.new(helpers).style_map)
page << map.add_layer(:edit_stop_area_layer)
-
if editable?
page.assign "referential_projection", projection_type.present? ? projection("EPSG:" + projection_type) : JsVar.new("undefined")
# TODO virer ce code inline
@@ -56,9 +51,8 @@ EOF
end
- page << map.set_center(center.to_google.to_openlayers, 16, false, true)
+ page << map.set_center(center.to_google.to_openlayers, 16, false, true)
end
- end
end
def projection_type
diff --git a/app/views/organisations/edit.html.erb b/app/views/organisations/edit.html.erb
new file mode 100644
index 000000000..0e55a1562
--- /dev/null
+++ b/app/views/organisations/edit.html.erb
@@ -0,0 +1,14 @@
+<%= title_tag t(".title") %>
+
+<%= semantic_form_for @organisation, :url => organisation_path do |form| %>
+ <%= form.inputs do %>
+ <%= form.input :name %>
+ <%= form.input :geoportail_key %>
+ <% end %>
+
+ <%= form.actions do %>
+ <%= form.action :submit, :as => :button %>
+ <%= form.action :cancel, :as => :link %>
+ <% end %>
+<% end %>
+
diff --git a/app/views/organisations/show.html.erb b/app/views/organisations/show.html.erb
index c407f56f9..753efc2c3 100644
--- a/app/views/organisations/show.html.erb
+++ b/app/views/organisations/show.html.erb
@@ -1,5 +1,12 @@
<%= title_tag @organisation.name %>
+<div class="summary">
+ <p>
+ <label><%= Organisation.human_attribute_name(:geoportail_key) %>: </label>
+ <%= @organisation.geoportail_key ? t('.key_registered') : t('.key_not_registered') %>
+ </p>
+</div>
+
<div class="users">
<% @organisation.users.each do |user| %>
<%= div_for user do %>
@@ -12,7 +19,8 @@
<% content_for :sidebar do %>
<ul class="actions">
- <%= link_to t('users.actions.new'), new_organisation_user_path, :class => "add" %>
+ <li><%= link_to t('organisations.actions.edit'), edit_organisation_path, :class => "edit" %></li>
+ <li><%= link_to t('users.actions.new'), new_organisation_user_path, :class => "add" %></li>
</ul>
<% end %>
diff --git a/config/environments/development.rb b/config/environments/development.rb
index e92b9246e..b619645d3 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -45,6 +45,7 @@ ChouetteIhm::Application.configure do
config.to_prepare do
Devise::Mailer.layout "mailer"
+ #ApplicationMap.ign_api_key = "i2aqyge3x3iovnuhz7z06flp"
chouette_command_script = "tmp/chouette-command/chouette"
if File.exists? chouette_command_script
Chouette::Command.command = "tmp/chouette-command/chouette"
diff --git a/config/locales/maps.yml b/config/locales/maps.yml
new file mode 100644
index 000000000..339ad206d
--- /dev/null
+++ b/config/locales/maps.yml
@@ -0,0 +1,8 @@
+en:
+ maps:
+ ign_map: "IGN maps"
+fr:
+ maps:
+ ign_map: "Cartes IGN"
+
+
diff --git a/config/locales/organisations.yml b/config/locales/organisations.yml
new file mode 100644
index 000000000..011e87966
--- /dev/null
+++ b/config/locales/organisations.yml
@@ -0,0 +1,27 @@
+en:
+ organisations:
+ actions:
+ edit: "Edit your organisation"
+ edit:
+ title: "Update your organisation"
+ key_registered: "Key registered"
+ key_not_registered: "No key registered"
+ activerecord:
+ attributes:
+ organisation:
+ name: "Name"
+ geoportail_key: "IGN Geoportail Key"
+
+fr:
+ organisations:
+ actions:
+ edit: "Mofifier votre organisation"
+ edit:
+ title: "Modifier votre organisation"
+ key_registered: "Clé enregistrée"
+ key_not_registered: "Pas de clé"
+ activerecord:
+ attributes:
+ organisation:
+ name: "Nom"
+ geoportail_key: "Clé de l'API du Geoportail IGN"
diff --git a/db/migrate/20130517090647_add_geoportail_key_to_organisation.rb b/db/migrate/20130517090647_add_geoportail_key_to_organisation.rb
new file mode 100644
index 000000000..8d44809ca
--- /dev/null
+++ b/db/migrate/20130517090647_add_geoportail_key_to_organisation.rb
@@ -0,0 +1,5 @@
+class AddGeoportailKeyToOrganisation < ActiveRecord::Migration
+ def change
+ add_column "organisations", "geoportail_key", "string"
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index abb811eb1..6afe49f71 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 20130412094550) do
+ActiveRecord::Schema.define(:version => 20130517090647) do
create_table "access_links", :force => true do |t|
t.integer "access_point_id", :limit => 8
@@ -63,12 +63,13 @@ ActiveRecord::Schema.define(:version => 20130412094550) do
add_index "access_points", ["objectid"], :name => "access_points_objectid_key", :unique => true
- create_table "api_keys", :force => true do |t|
+ create_table "api_keys", :id => false, :force => true do |t|
+ t.integer "id", :limit => 8
t.integer "referential_id"
t.string "token"
t.string "name"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
+ t.datetime "created_at"
+ t.datetime "updated_at"
end
create_table "companies", :force => true do |t|
@@ -123,8 +124,8 @@ ActiveRecord::Schema.define(:version => 20130412094550) do
t.datetime "failed_at"
t.string "locked_by"
t.string "queue"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
+ t.datetime "created_at"
+ t.datetime "updated_at"
end
add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority"
@@ -135,8 +136,8 @@ ActiveRecord::Schema.define(:version => 20130412094550) do
t.string "arguments", :limit => 1000
t.integer "position"
t.string "severity"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
+ t.datetime "created_at"
+ t.datetime "updated_at"
end
add_index "export_log_messages", ["export_id"], :name => "index_export_log_messages_on_export_id"
@@ -146,8 +147,8 @@ ActiveRecord::Schema.define(:version => 20130412094550) do
t.string "status"
t.string "type"
t.string "options"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
+ t.datetime "created_at"
+ t.datetime "updated_at"
t.string "references_type"
t.string "reference_ids"
end
@@ -229,8 +230,8 @@ ActiveRecord::Schema.define(:version => 20130412094550) do
t.string "arguments", :limit => 1000
t.integer "position"
t.string "severity"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
+ t.datetime "created_at"
+ t.datetime "updated_at"
end
add_index "import_log_messages", ["import_id"], :name => "index_import_log_messages_on_import_id"
@@ -238,8 +239,8 @@ ActiveRecord::Schema.define(:version => 20130412094550) do
create_table "imports", :force => true do |t|
t.integer "referential_id", :limit => 8
t.string "status"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
+ t.datetime "created_at"
+ t.datetime "updated_at"
t.string "type"
t.string "options"
t.string "file_type"
@@ -310,8 +311,9 @@ ActiveRecord::Schema.define(:version => 20130412094550) do
create_table "organisations", :force => true do |t|
t.string "name"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.string "geoportail_key"
end
create_table "pt_links", :force => true do |t|
@@ -332,8 +334,8 @@ ActiveRecord::Schema.define(:version => 20130412094550) do
create_table "referentials", :force => true do |t|
t.string "name"
t.string "slug"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
+ t.datetime "created_at"
+ t.datetime "updated_at"
t.string "prefix"
t.string "projection_type"
t.string "time_zone"
@@ -469,8 +471,8 @@ ActiveRecord::Schema.define(:version => 20130412094550) do
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
+ t.datetime "created_at"
+ t.datetime "updated_at"
t.integer "organisation_id"
t.string "name"
t.string "confirmation_token"