aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichel Etienne2015-01-26 13:12:24 +0100
committerMichel Etienne2015-01-26 13:12:24 +0100
commit34dcd6afff1fc8581649cb1b400a66969b0f65ae (patch)
tree59132309c796770ce2275e0317e8bb283ab8612f
parent657966f57ab15234effcc56d58ff49dace885576 (diff)
parentc3ed60be997734921c8305f24b78e997e52a9cd3 (diff)
downloadchouette-core-34dcd6afff1fc8581649cb1b400a66969b0f65ae.tar.bz2
merge branch V2_5
-rw-r--r--CHANGELOG.md6
-rw-r--r--Gemfile5
-rw-r--r--README.md6
-rw-r--r--app/controllers/registrations_controller.rb2
-rw-r--r--app/controllers/stop_area_copies_controller.rb2
-rw-r--r--app/helpers/routes_helper.rb1
-rw-r--r--app/helpers/rule_parameter_sets_helper.rb23
-rw-r--r--app/helpers/users_helper.rb8
-rw-r--r--app/models/rule_parameter_set.rb120
-rw-r--r--app/models/stop_area_copy.rb16
-rw-r--r--app/views/devise/mailer/invitation_instructions.fr.html.erb2
-rw-r--r--app/views/devise/passwords/edit.html.erb4
-rw-r--r--app/views/devise/passwords/new.html.erb4
-rw-r--r--app/views/help/group_of_lines.textile1
-rw-r--r--app/views/help/index.textile2
-rw-r--r--app/views/help/routes.textile16
-rw-r--r--app/views/layouts/_user_links.erb2
-rw-r--r--app/views/layouts/mailer.html.erb2
-rw-r--r--app/views/rule_parameter_sets/_column_fields.html.erb11
-rw-r--r--app/views/rule_parameter_sets/_form.html.erb34
-rw-r--r--app/views/rule_parameter_sets/show.html.erb73
-rw-r--r--config/deploy/private.rb2
-rw-r--r--config/deploy/production.rb2
-rw-r--r--config/deploy/unstable.rb2
-rw-r--r--config/environments/development.rb9
-rw-r--r--config/environments/production.rb2
-rw-r--r--config/locales/access_links.yml6
-rw-r--r--config/locales/compliance_check_results.yml167
-rw-r--r--config/locales/devise_invitable.fr.yml6
-rw-r--r--config/locales/journey_patterns.yml12
-rw-r--r--config/locales/routes.yml6
-rw-r--r--config/locales/rule_parameter_sets.yml46
-rw-r--r--config/locales/time_tables.yml12
-rw-r--r--config/locales/vehicle_journeys.yml6
-rw-r--r--config/routes.rb5
-rw-r--r--spec/requests/time_tables_spec.rb4
36 files changed, 519 insertions, 108 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a854ae4b9..b0fee73b9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+# Version 2.5.2 (20/01/15)
+* Nouvelles foctionnalités
+ * Amélioration de l'export Hub
+ * Ajout de points de contrôle pour la validation
+ * Ajouts de champs pour les échanges Hub
+
# Version 2.5.1 (14/11/14)
* Nouvelles foctionnalités
* Reprise des imports/exports GTFS
diff --git a/Gemfile b/Gemfile
index 3b858f618..041232d1d 100644
--- a/Gemfile
+++ b/Gemfile
@@ -77,8 +77,9 @@ gem 'will_paginate', '~> 3.0'
gem 'ransack'
gem 'squeel'
gem 'ninoxe', :git => 'https://github.com/afimb/ninoxe.git', :branch => 'footnotes'
-#gem 'ninoxe',:path => '~/dev/ninoxe_footnotes'
-#gem 'ninoxe', '~> 1.1.3'
+#gem 'ninoxe', :git => 'https://github.com/afimb/ninoxe.git'
+#gem 'ninoxe',:path => '~/workspace/chouette/ninoxe'
+#gem 'ninoxe', '1.1.5'
gem 'acts_as_list', '0.1.6'
gem "acts_as_tree-1.8", '1.1.0', :require => "acts_as_tree"
diff --git a/README.md b/README.md
index 278c3aa09..d8f4046e0 100644
--- a/README.md
+++ b/README.md
@@ -65,9 +65,9 @@ Assume Linux user is myuser and its group mygroup (that user is the one who star
sudo mkdir -p /usr/local/opt/chouette-command/
sudo chown -R myuser:mygroup /usr/local/opt/chouette-command/
cd /usr/local/opt/chouette-command/
-wget http://maven.chouette.cityway.fr/fr/certu/chouette/chouette-gui-command/2.5.1/chouette-gui-command-2.5.1.zip
-unzip chouette-gui-command-2.5.1.zip
-cd chouette-cmd_2.5.1
+wget http://maven.chouette.cityway.fr/fr/certu/chouette/chouette-gui-command/2.5.2/chouette-gui-command-2.5.2.zip
+unzip chouette-gui-command-2.5.2.zip
+cd chouette-cmd_2.5.2
sudo chmod a+w .
```
diff --git a/app/controllers/registrations_controller.rb b/app/controllers/registrations_controller.rb
index b02d3217a..f563fbb03 100644
--- a/app/controllers/registrations_controller.rb
+++ b/app/controllers/registrations_controller.rb
@@ -6,7 +6,7 @@
def accept_user_creation
if !Rails.application.config.accept_user_creation
- redirect_to root_path
+ redirect_to unauthenticated_root_path
return false
else
return true
diff --git a/app/controllers/stop_area_copies_controller.rb b/app/controllers/stop_area_copies_controller.rb
index 7c1fac8d9..fb429595e 100644
--- a/app/controllers/stop_area_copies_controller.rb
+++ b/app/controllers/stop_area_copies_controller.rb
@@ -18,7 +18,7 @@ class StopAreaCopiesController < ChouetteController
@stop_area_copy = StopAreaCopy.new(params[:stop_area_copy])
@stop_area = parent
if @stop_area_copy.save
- redirect_to referential_stop_area_path( @referential,parent ), notice: I18n.t("stop_area_copies.new.success")
+ redirect_to referential_stop_area_path( @referential,@stop_area_copy.copy ), notice: I18n.t("stop_area_copies.new.success")
else
flash[:error] = I18n.t("stop_area_copies.errors.copy_aborted") + "<br>" + @stop_area_copy.errors.full_messages.join("<br>")
render :action => :new
diff --git a/app/helpers/routes_helper.rb b/app/helpers/routes_helper.rb
index bbb611506..b3d79262e 100644
--- a/app/helpers/routes_helper.rb
+++ b/app/helpers/routes_helper.rb
@@ -14,4 +14,3 @@ module RoutesHelper
end
end
-
diff --git a/app/helpers/rule_parameter_sets_helper.rb b/app/helpers/rule_parameter_sets_helper.rb
new file mode 100644
index 000000000..538a5cddd
--- /dev/null
+++ b/app/helpers/rule_parameter_sets_helper.rb
@@ -0,0 +1,23 @@
+module RuleParameterSetsHelper
+
+ def unique( value)
+ return t("true") if value == "1"
+ t "false"
+ end
+
+ def pattern(value)
+ return t("rule_parameter_sets.labels.free_char") if value == "0"
+ return t("rule_parameter_sets.labels.num_char") if value == "1"
+ return t("rule_parameter_sets.labels.alpha_char") if value == "2"
+ return t("rule_parameter_sets.labels.upper_char") if value == "3"
+ return t("rule_parameter_sets.labels.lower_char") if value == "4"
+ end
+
+ def boolean_value(value)
+ return t("true") if value == "1"
+ t "false"
+ end
+
+end
+
+
diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb
index 0dfc1552f..11fd7af34 100644
--- a/app/helpers/users_helper.rb
+++ b/app/helpers/users_helper.rb
@@ -4,6 +4,14 @@ module UsersHelper
image_tag user_image(user), :alt => "", :class => "preview", :width => size, :height => size
end
+# def user_default_avatar
+# return "#{authenticated_root_url}#{image_path('icons/user.png')}" if Rails.application.config.relative_url_root.blank?
+# relative_url_root = Rails.application.config.relative_url_root.gsub( /\//, '')
+# "#{authenticated_root_url}#{image_path('icons/user.png')}".
+# sub( Regexp.new("/#{relative_url_root}/#{relative_url_root}/"), "/#{relative_url_root}/").
+# sub( Regexp.new("/#{relative_url_root}//#{relative_url_root}/"), "/#{relative_url_root}/")
+# end
+
def gravatar_hash(user)
Digest::MD5.hexdigest( user.email)
end
diff --git a/app/models/rule_parameter_set.rb b/app/models/rule_parameter_set.rb
index 0c7a98300..01c2e48a6 100644
--- a/app/models/rule_parameter_set.rb
+++ b/app/models/rule_parameter_set.rb
@@ -16,8 +16,43 @@ class RuleParameterSet < ActiveRecord::Base
inter_connection_link_distance_max walk_default_speed_max
walk_occasional_traveller_speed_max walk_frequent_traveller_speed_max walk_mobility_restricted_traveller_speed_max
inter_access_link_distance_max inter_stop_duration_max facility_stop_area_distance_max
- vehicle_journey_number_max vehicle_journey_number_min check_allowed_transport_modes)
+ check_allowed_transport_modes check_lines_in_groups check_line_routes
+ check_stop_parent check_connection_link_on_physical)
end
+
+ def self.validable_objects
+ [Chouette::Network,Chouette::Company,Chouette::GroupOfLine,
+ Chouette::StopArea,Chouette::AccessPoint,Chouette::AccessLink,Chouette::ConnectionLink,
+ Chouette::TimeTable,Chouette::Line,Chouette::Route,
+ Chouette::JourneyPattern,Chouette::VehicleJourney]
+ end
+
+ def self.validable_object_names
+ ["network","company","group_of_line",
+ "stop_area","access_point","access_link","connection_link",
+ "time_table","line","route",
+ "journey_pattern","vehicle_journey"]
+ end
+
+ def self.validable_columns
+ {"network" => ['objectid','name','registration_number'],
+ "company" => ['objectid','name','registration_number'],
+ "group_of_line" => ['objectid','name','registration_number'],
+ "stop_area" => ['objectid','name','registration_number','city_name','country_code','zip_code'],
+ "access_point" => ['objectid','name','city_name','country_code','zip_code'],
+ "access_link" => ['objectid','name','link_distance','default_duration'],
+ "connection_link" => ['objectid','name','link_distance','default_duration'],
+ "time_table" => ['objectid','comment','version'],
+ "line" => ['objectid','name','registration_number','number','published_name'],
+ "route" => ['objectid','name','number','published_name'],
+ "journey_pattern" => ['objectid','name','registration_number','published_name'],
+ "vehicle_journey" => ['objectid','published_journey_name','published_journey_identifier','number'] }
+ end
+
+ def self.column_attribute_prefixes
+ %w( unique pattern min_size max_size )
+ end
+
def self.all_modes
Chouette::TransportMode.all.map { |m| m.to_s}
end
@@ -28,6 +63,14 @@ class RuleParameterSet < ActiveRecord::Base
mode_attribute_prefixes.include?( $1) && self.class.all_modes.include?( $2)
end
+
+ def self.column_attribute?( method_name )
+ pattern = /(\w+)_column_(\w+)_object_(\w+)/
+ return false unless method_name.match( pattern)
+ return false unless validable_object_names.include?($3)
+ column_attribute_prefixes.include?( $1) && validable_columns[$3].include?( $2)
+ end
+
def self.mode_of_mode_attribute( method_name )
method_name.match( /(\w+)_mode_(\w+)/)
$2
@@ -37,6 +80,20 @@ class RuleParameterSet < ActiveRecord::Base
$1
end
+ def self.object_of_column_attribute( method_name )
+ method_name.match( /(\w+)_column_(\w+)_object_(\w+)/)
+ $3
+ end
+ def self.column_of_column_attribute( method_name )
+ method_name.match( /(\w+)_column_(\w+)_object_(\w+)/)
+ $2
+ end
+ def self.attribute_of_column_attribute( method_name )
+ method_name.match( /(\w+)_column_(\w+)_object_(\w+)/)
+ $1
+ end
+
+
def self.mode_parameter(name)
name = name.to_s
attr_accessible name
@@ -52,6 +109,37 @@ class RuleParameterSet < ActiveRecord::Base
((self.parameters ||= {})["mode_#{mode}"] ||= {})[attribute_name] = prefix
end
end
+
+ def self.column_parameter(obj,column,prefix)
+ name = "#{prefix}_column_#{column}_object_#{obj}"
+ attr_accessible name
+ define_method(name) do
+ attribute_name, column, obj = prefix, column, obj
+ self.parameters and self.parameters[obj] and
+ self.parameters[obj][column] and self.parameters[obj][column][attribute_name]
+ end
+
+ define_method("#{name}=") do |key|
+ attribute_name, column, obj = prefix, column, obj
+ (((self.parameters ||= {})[obj] ||= {})[column]||= {})[attribute_name] = key
+ end
+
+ end
+
+ def self.object_parameter(clazz)
+ name = clazz.table_name.singularize
+ attr_accessible name
+
+ parameter "check_#{clazz.table_name.singularize}"
+ validable_columns[name].each do |column|
+ column_attribute_prefixes.each do |prefix|
+ column_parameter name,column,prefix
+ end
+
+ end
+
+ end
+
def self.parameter(name)
name = name.to_s
attr_accessible name
@@ -77,7 +165,11 @@ class RuleParameterSet < ActiveRecord::Base
:inter_access_link_distance_max => 300,
:inter_stop_duration_max => 40,
:facility_stop_area_distance_max => 300,
- :check_allowed_transport_modes => false
+ :check_allowed_transport_modes => false,
+ :check_lines_in_groups => false,
+ :check_line_routes => false,
+ :check_stop_parent => false,
+ :check_connection_link_on_physical => false
}
if mode && self.mode_default_params[ mode.to_sym]
base.merge!( self.mode_default_params[ mode.to_sym])
@@ -231,21 +323,41 @@ class RuleParameterSet < ActiveRecord::Base
def allowed(mode)
return true unless self.check_allowed_transport_modes
- puts "#{mode} = "+self.send("allowed_transport_mode_#{mode}").to_s
+ # puts "#{mode} = "+self.send("allowed_transport_mode_#{mode}").to_s
return self.send("allowed_transport_mode_#{mode}") == "1"
end
+
+ def selected(object)
+ # puts "#{mode} = "+self.send("allowed_transport_mode_#{mode}").to_s
+ return self.send("check_#{object}") == "1"
+ end
+
+ def selected_column(object,column)
+ # puts "#{mode} = "+self.send("allowed_transport_mode_#{mode}").to_s
+ return self.send("unique_column_#{column}_object_#{object}") == "1" ||
+ self.send("pattern_column_#{column}_object_#{object}") != "0" ||
+ !self.send("min_size_column_#{column}_object_#{object}").empty? ||
+ !self.send("max_size_column_#{column}_object_#{object}").empty?
+ end
+
all_modes.each do |mode|
mode_attribute_prefixes.each do |prefix|
mode_parameter "#{prefix}_mode_#{mode}".to_sym
end
end
-
+
general_attributes.each do |attribute|
parameter attribute.to_sym
unless attribute == "stop_areas_area" || attribute == "check_allowed_transport_modes"
validates attribute.to_sym, :numericality => true, :allow_nil => true, :allow_blank => true
end
end
+
+
+ validable_objects.each do |obj|
+ object_parameter obj
+ end
+
end
diff --git a/app/models/stop_area_copy.rb b/app/models/stop_area_copy.rb
index 796aba567..041d30eb9 100644
--- a/app/models/stop_area_copy.rb
+++ b/app/models/stop_area_copy.rb
@@ -5,7 +5,7 @@ class StopAreaCopy
include ActiveModel::Conversion
extend ActiveModel::Naming
- attr_accessor :source_id, :hierarchy, :area_type, :source
+ attr_accessor :source_id, :hierarchy, :area_type, :source, :copy
validates_presence_of :source_id, :hierarchy, :area_type
@@ -40,17 +40,17 @@ class StopAreaCopy
begin
if self.valid?
self.source ||= Chouette::StopArea.find self.source_id
- copy = source.duplicate
- copy.name = source.name
- copy.area_type = self.area_type.camelcase
+ self.copy = source.duplicate
+ self.copy.name = source.name
+ self.copy.area_type = self.area_type.camelcase
Chouette::StopArea.transaction do
if self.hierarchy == "child"
- copy.parent_id = source.id
+ self.copy.parent_id = source.id
end
- copy.save!
+ self.copy.save!
if self.hierarchy == "parent"
- source.parent_id = copy.id
- source.save!
+ self.source.parent_id = copy.id
+ self.source.save!
end
end
true
diff --git a/app/views/devise/mailer/invitation_instructions.fr.html.erb b/app/views/devise/mailer/invitation_instructions.fr.html.erb
index 7ef4e6c99..c932763f2 100644
--- a/app/views/devise/mailer/invitation_instructions.fr.html.erb
+++ b/app/views/devise/mailer/invitation_instructions.fr.html.erb
@@ -1,6 +1,6 @@
<p>Bonjour <%= @resource.email %>,</p>
-<p>Ce message est une invitation pour accéder à <%= link_to nil, root_url %>, vous pouvez l'accepter en cliquant sur le lien suivant :</p>
+<p>Ce message est une invitation pour accéder à <%= link_to nil, unauthenticated_root_url %>, vous pouvez l'accepter en cliquant sur le lien suivant :</p>
<p><%= link_to "Accepter l'invitation", accept_invitation_url(@resource, :invitation_token => @resource.invitation_token) %></p>
diff --git a/app/views/devise/passwords/edit.html.erb b/app/views/devise/passwords/edit.html.erb
index e0cad44a2..0c5ba77cf 100644
--- a/app/views/devise/passwords/edit.html.erb
+++ b/app/views/devise/passwords/edit.html.erb
@@ -8,8 +8,8 @@
<%= f.input :password, :as => :password %>
<%= f.input :password_confirmation, :as => :password %>
- <div class="submit">
- <%= link_to t("cancel"), root_path, :class => "btn btn-default" %>
+ <div class="col-md-offset-2">
+ <%= link_to t("cancel"), unauthenticated_root_path, :class => "btn btn-default" %>
<%= f.button :submit, :value => t("devise.passwords.edit.commit"), :class => "btn-info" %>
</div>
<% end %>
diff --git a/app/views/devise/passwords/new.html.erb b/app/views/devise/passwords/new.html.erb
index 8f5ec0f10..498e24c4c 100644
--- a/app/views/devise/passwords/new.html.erb
+++ b/app/views/devise/passwords/new.html.erb
@@ -5,8 +5,8 @@
<%= simple_form_for(resource, :as => resource_name, :url => password_path(resource_name)) do |form| %>
<%= form.input :email, :as => :email, placeholder: 'user@domain.com' %>
- <div class="submit">
- <%= link_to t("cancel"), root_path, :class => "btn btn-default" %>
+ <div class="col-md-offset-2">
+ <%= link_to t("cancel"), unauthenticated_root_path, :class => "btn btn-default" %>
<%= form.button :submit, :value => t("devise.passwords.new.commit"), :class => "btn-info" %>
</div>
<% end %>
diff --git a/app/views/help/group_of_lines.textile b/app/views/help/group_of_lines.textile
index 9ab7d440a..8fd05c7ea 100644
--- a/app/views/help/group_of_lines.textile
+++ b/app/views/help/group_of_lines.textile
@@ -46,6 +46,7 @@ h3. Attributs d'un groupe de lignes
* Nom : nom du groupe de lignes
* Commentaire : Champs de saisie libre pour identifier l'usage du groupe de lignes.
+* Numéro d'enregistrement : Le numéro d'enregistrement est unique. Aucune règle de nommage ne s'applique sur ce numéro. Celui-ci doit être unique sur l'ensemble des groupes de lignes.
diff --git a/app/views/help/index.textile b/app/views/help/index.textile
index 19eeb63e2..b0d2fddcf 100644
--- a/app/views/help/index.textile
+++ b/app/views/help/index.textile
@@ -28,7 +28,7 @@ h4. Version 2.5.2
* Nouvelles foctionnalités :
** Ajout des particularités de monté/descente aux arrêts d'une séquence
-** Ajout de tests sur les données pour l'export
+** Ajout de points de contrôle sur les données pour l'export
h4. Version 2.5.1
diff --git a/app/views/help/routes.textile b/app/views/help/routes.textile
index eb1093340..0396898ae 100644
--- a/app/views/help/routes.textile
+++ b/app/views/help/routes.textile
@@ -47,6 +47,22 @@ On peut modifier une séquence d'arrêts en cliquant sur le bouton de modificati
!2014-10-31_112543.png!
Modification des arrêts d'une séquence
+h3. Contraintes de montée - descente
+
+On peut ajouter des règles de montée ou de descente aux arrêts de la séquence d'arrêt (interdit ou à la demande); ces règles s'appliquent à toutes les courses de la séquence d'arrêt
+
+Les règles sont :
+
+* Non défini (par défaut)
+* Montée autorisée
+* Montée interdite
+* Montée sur réservation
+* Montée sur demande au conducteur
+* Descente autorisée
+* Descente interdite
+* Descente sur réservation
+* Descente sur demande au conducteur
+
h3. Supprimer une séquence d'arrêts
Il est possible de supprimer une séquence d'arrêts depuis la page de la ligne. Chaque élément de la liste des séquences d'arrêts en bas de la page est dotée d'un pictogramme de suppression. Il est à noter que la suppression de la séquence d'arrêts ne supprime par les arrêts qu'elle contient.
diff --git a/app/views/layouts/_user_links.erb b/app/views/layouts/_user_links.erb
index 404f52172..bd9196b3f 100644
--- a/app/views/layouts/_user_links.erb
+++ b/app/views/layouts/_user_links.erb
@@ -1,5 +1,5 @@
<ul class="user">
- <li class="home"><%= link_to t('layouts.home'), root_path %></li>
+ <li class="home"><%= link_to t('layouts.home'), authenticated_root_path %></li>
<% if user_signed_in? %>
<li> | </li>
diff --git a/app/views/layouts/mailer.html.erb b/app/views/layouts/mailer.html.erb
index 387221103..ac00bdfea 100644
--- a/app/views/layouts/mailer.html.erb
+++ b/app/views/layouts/mailer.html.erb
@@ -18,7 +18,7 @@
</div>
<div style="color: #333333; text-align:center; font-size: 10px;">
- Envoyé par <%= link_to root_url, "Chouette" %>
+ Envoyé par <%= link_to "Chouette", unauthenticated_root_url %>
</div>
</body>
</html>
diff --git a/app/views/rule_parameter_sets/_column_fields.html.erb b/app/views/rule_parameter_sets/_column_fields.html.erb
new file mode 100644
index 000000000..abb2af4a8
--- /dev/null
+++ b/app/views/rule_parameter_sets/_column_fields.html.erb
@@ -0,0 +1,11 @@
+ <td></td>
+ <td><%= t("activerecord.attributes.#{obj.table_name.singularize}.#{column}") %></td>
+ <% suffix = "column_#{column}_object_#{obj.table_name.singularize}"%>
+ <td> <%= f.check_box "unique_#{suffix}".to_sym, :class => "special" %></td>
+ <% if obj.columns_hash[column].type == :string %>
+ <td><%= f.select "pattern_#{suffix}".to_sym, options_for_select([[t("rule_parameter_sets.labels.free_char"), "0"], [t("rule_parameter_sets.labels.num_char"), "1"], [t("rule_parameter_sets.labels.alpha_char"), "2"], [t("rule_parameter_sets.labels.upper_char"), "3"], [t("rule_parameter_sets.labels.lower_char"), "4"]]) %></td>
+ <% else %>
+ <td><%= t "rule_parameter_sets.labels.num_char" %></td>
+ <% end %>
+ <td><%= f.number_field "min_size_#{suffix}".to_sym, :class => "special" %></td>
+ <td><%= f.number_field "max_size_#{suffix}".to_sym, :class => "special" %></td>
diff --git a/app/views/rule_parameter_sets/_form.html.erb b/app/views/rule_parameter_sets/_form.html.erb
index 90d6850fb..abe4b0c96 100644
--- a/app/views/rule_parameter_sets/_form.html.erb
+++ b/app/views/rule_parameter_sets/_form.html.erb
@@ -15,11 +15,14 @@
<%= form.input :inter_stop_duration_max, :as => :number %>
<%= form.input :facility_stop_area_distance_max, :as => :number %>
- <%= form.input :vehicle_journey_number_min, :as => :number %>
- <%= form.input :vehicle_journey_number_max, :as => :number %>
+ <%= form.input :check_lines_in_groups, :as => :boolean %>
+ <%= form.input :check_line_routes, :as => :boolean %>
+ <%= form.input :check_stop_parent, :as => :boolean %>
+ <%= form.input :check_connection_link_on_physical, :as => :boolean %>
<%= form.input :check_allowed_transport_modes, :as => :boolean %>
<table class="table table-striped table-condensed">
+ <thead>
<tr>
<th><%= t("transport_modes.name") %></th>
<% RuleParameterSet.mode_attribute_prefixes.each do |prefix| %>
@@ -31,12 +34,39 @@
<% end %>
<% end %>
</tr>
+ </thead>
+ <tbody>
<% Chouette::Line.transport_modes.map(&:to_s).each do |mode| %>
<tr>
<%= render :partial => "mode_fields", :locals => { :f => form, :mode => mode} %>
</tr>
<% end %>
+ </tbody>
</table>
+
+ <%= t("rule_parameter_sets.labels.columns_restrictions") %>
+ <table class="table table-bordered table-condensed">
+ <% RuleParameterSet.validable_objects.each do |obj| %>
+ <thead>
+ <tr>
+ <th> <%= form.check_box "check_#{obj.table_name.singularize}".to_sym, :class => "special" %> <%= t("activerecord.models.#{obj.table_name.singularize}.one") %></th>
+ <th><%= RuleParameterSet.human_attribute_name("attribute") %></th>
+ <th><%= RuleParameterSet.human_attribute_name("unique") %></th>
+ <th><%= RuleParameterSet.human_attribute_name("string_type") %></th>
+ <th><%= RuleParameterSet.human_attribute_name("min_size") %></th>
+ <th><%= RuleParameterSet.human_attribute_name("max_size") %></th>
+ </tr>
+ </thead>
+ <tbody>
+ <% RuleParameterSet.validable_columns[obj.table_name.singularize].each do |col| %>
+ <tr class="<%= "columns_for_#{obj.table_name}" %>">
+ <%= render :partial => "column_fields", :locals => { :f => form, :obj => obj, :column => col} %>
+ </tr>
+ <% end %>
+ </tbody>
+ <% end %>
+ </table>
+
<% end %>
<%= form.actions do %>
diff --git a/app/views/rule_parameter_sets/show.html.erb b/app/views/rule_parameter_sets/show.html.erb
index 66e002b94..e86aa47ac 100644
--- a/app/views/rule_parameter_sets/show.html.erb
+++ b/app/views/rule_parameter_sets/show.html.erb
@@ -68,26 +68,33 @@
<label><%= t(".inter_stop_duration_max") %>: </label>
<%= @rule_parameter_set.inter_stop_duration_max %>
</p>
- <% if @rule_parameter_set.vehicle_journey_number_min.present? && @rule_parameter_set.vehicle_journey_number_max.present? %>
- <div class="attributes_group" >
- <span class="title"><%= t(".vehicle_journey_number_bounds") %></span>
- <div class="columns">
- <div class="two_columns">
- <label><%= t(".min_value") %> : </label>
- <span class="value"><%= @rule_parameter_set.vehicle_journey_number_min %></span>
- </div>
- <div class="two_columns">
- <label><%= t(".max_value") %> : </label>
- <span class="value"><%= @rule_parameter_set.vehicle_journey_number_max %></span>
- </div>
- </div>
- </div>
- <% end %>
+
<p>
+ <label><%= RuleParameterSet.human_attribute_name("check_lines_in_groups") %>: </label>
+ <%= boolean_value(@rule_parameter_set.check_lines_in_groups)%>
+ </p>
+
+ <p>
+ <label><%= RuleParameterSet.human_attribute_name("check_line_routes") %>: </label>
+ <%= boolean_value(@rule_parameter_set.check_line_routes) %>
+ </p>
+
+ <p>
+ <label><%= RuleParameterSet.human_attribute_name("check_stop_parent") %>: </label>
+ <%= boolean_value(@rule_parameter_set.check_stop_parent) %>
+ </p>
+
+ <p>
+ <label><%= RuleParameterSet.human_attribute_name("check_connection_link_on_physical") %>: </label>
+ <%= boolean_value(@rule_parameter_set.check_connection_link_on_physical) %>
+ </p>
+
+ </p>
<label><%= RuleParameterSet.human_attribute_name("check_allowed_transport_modes") %>: </label>
- <%= @rule_parameter_set.check_allowed_transport_modes ? t("true") : t("false") %>
+ <%= boolean_value(@rule_parameter_set.check_allowed_transport_modes) %>
</p>
+
<div class="rule_parameter_by_mode">
<label><%= t(".rule_parameter_by_mode") %>
<%= t(".modes_allowed") if @rule_parameter_set.check_allowed_transport_modes %>
@@ -116,6 +123,40 @@
<% end %>
</table>
</div>
+ <div class="rule_parameter_by_object">
+ <label><%= t("rule_parameter_sets.labels.columns_restrictions") %> </label>
+ <table class="table table-bordered table-condensed">
+ <% RuleParameterSet.validable_objects.each do |obj| %>
+ <% if @rule_parameter_set.selected(obj.table_name.singularize) %>
+ <thead>
+ <tr>
+ <th> <%= t("activerecord.models.#{obj.table_name.singularize}.one") %></th>
+ <th><%= RuleParameterSet.human_attribute_name("attribute") %></th>
+ <th><%= RuleParameterSet.human_attribute_name("unique") %></th>
+ <th><%= RuleParameterSet.human_attribute_name("string_type") %></th>
+ <th><%= RuleParameterSet.human_attribute_name("min_size") %></th>
+ <th><%= RuleParameterSet.human_attribute_name("max_size") %></th>
+ </tr>
+ </thead>
+ <tbody>
+ <% RuleParameterSet.validable_columns[obj.table_name.singularize].each do |col| %>
+ <% if @rule_parameter_set.selected_column(obj.table_name.singularize,col)%>
+ <tr>
+ <td></td>
+ <td><%= t("activerecord.attributes.#{obj.table_name.singularize}.#{col}") %></td>
+ <% suffix = "column_#{col}_object_#{obj.table_name.singularize}"%>
+ <td><%= unique(@rule_parameter_set.send "unique_#{suffix}".to_sym) %></td>
+ <td><%= pattern(@rule_parameter_set.send "pattern_#{suffix}".to_sym) %></td>
+ <td><%= @rule_parameter_set.send "min_size_#{suffix}".to_sym %></td>
+ <td><%= @rule_parameter_set.send "max_size_#{suffix}".to_sym %></td>
+ </tr>
+ <% end %>
+ <% end %>
+ </tbody>
+ <% end %>
+ <% end %>
+ </table>
+ </div>
</div>
</div>
diff --git a/config/deploy/private.rb b/config/deploy/private.rb
index 58301b4fe..0a9cb5e0c 100644
--- a/config/deploy/private.rb
+++ b/config/deploy/private.rb
@@ -1,3 +1,3 @@
server "chouette-private.marseille.cityway.fr", :app, :web, :db, :primary => true
set :branch, "V2_5"
-set :gui_cmd, "2.5.1"
+set :gui_cmd, "2.5.2"
diff --git a/config/deploy/production.rb b/config/deploy/production.rb
index 3baa258d0..c24f29894 100644
--- a/config/deploy/production.rb
+++ b/config/deploy/production.rb
@@ -1,3 +1,3 @@
server "chouette.marseille.cityway.fr", :app, :web, :db, :primary => true
set :branch, "V2_5"
-set :gui_cmd, "2.5.1" \ No newline at end of file
+set :gui_cmd, "2.5.1"
diff --git a/config/deploy/unstable.rb b/config/deploy/unstable.rb
index e8fe08e75..38317bad3 100644
--- a/config/deploy/unstable.rb
+++ b/config/deploy/unstable.rb
@@ -1,3 +1,3 @@
server "chouette-p.aix.cityway.fr", :app, :web, :db, :primary => true
set :branch, "V2_5"
-set :gui_cmd, "2.5.1" \ No newline at end of file
+set :gui_cmd, "2.5.2"
diff --git a/config/environments/development.rb b/config/environments/development.rb
index 0d33ac03c..3d7819639 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -69,10 +69,11 @@ ChouetteIhm::Application.configure do
# Configure the e-mail address which will be shown in Devise::Maile
config.mailer_sender = "appli@chouette.mobi"
- ActionMailer::Base.smtp_settings = {
- :address => "smtp.samle.com",
- :domain => "sample.com"
- }
+ config.action_mailer.delivery_method = :sendmail
+ # change to true to allow email to be sent during development
+ config.action_mailer.perform_deliveries = true
+ config.action_mailer.raise_delivery_errors = true
+ config.action_mailer.default :charset => "utf-8"
# api key to geoportail IGN (development key 3 month validity)
# config.geoportail_api_key = "f1t6wihbh98njlbaf5cuzxy4"
diff --git a/config/environments/production.rb b/config/environments/production.rb
index a320dc448..d81fa354c 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -152,7 +152,7 @@ ChouetteIhm::Application.configure do
# paths for external resources
config.to_prepare do
Devise::Mailer.layout "mailer"
- Chouette::Command.command = ENV['CHOUETTE_GUI_COMMAND'].nil? ? "/usr/local/opt/chouette-command/chouette-cmd_2.5.1/chouette" : ENV['CHOUETTE_GUI_COMMAND']
+ Chouette::Command.command = ENV['CHOUETTE_GUI_COMMAND'].nil? ? "/usr/local/opt/chouette-command/chouette-cmd_2.5.2/chouette" : ENV['CHOUETTE_GUI_COMMAND']
ImportTask.root = "/var/lib/chouette/imports"
Export.root = "/var/lib/chouette/exports"
end
diff --git a/config/locales/access_links.yml b/config/locales/access_links.yml
index 0a0aeedbb..1f72e5285 100644
--- a/config/locales/access_links.yml
+++ b/config/locales/access_links.yml
@@ -63,9 +63,9 @@ fr:
activerecord:
models:
access_link:
- zero: "lien"
- one: "lien"
- other: "liens"
+ zero: "lien d'accès"
+ one: "lien d'accès"
+ other: "liens d'accès"
attributes:
access_link:
access_point: "Accès"
diff --git a/config/locales/compliance_check_results.yml b/config/locales/compliance_check_results.yml
index 9684c49a7..dd8c5ed5d 100644
--- a/config/locales/compliance_check_results.yml
+++ b/config/locales/compliance_check_results.yml
@@ -141,7 +141,65 @@ en:
detail_3_vehiclejourney_6: "La course %{objectId} a un mode de transport interdit %{transportMode}"
detail_3_facility_1: "L'équipement %{name} (%{objectId}) n'est pas géolocalisé"
detail_3_facility_2: "L'équipement %{name} (%{objectId}) est localisé trop loin de son parent %{areaName} (%{areaId}) : distance %{distance} > %{distanceLimit}"
- activerecord:
+
+ detail_4_network_1_min_size: "L'attribut %{column} du réseau %{objectId} (%{value}) n'est pas renseigné ou plus petit que %{minimum}"
+ detail_4_network_1_max_size: "L'attribut %{column} du réseau %{objectId} (%{value}) est plus grand que %{maximum}"
+ detail_4_network_1_pattern: "L'attribut %{column} du réseau %{objectId} (%{value}) n'est pas au bon format "
+ detail_4_network_1_unique: "L'attribut %{column} du réseau %{objectId} a une valeur partagée avec le réseau %{alternateId}"
+ detail_4_company_1_min_size: "L'attribut %{column} du transporteur %{objectId} (%{value}) n'est pas renseigné ou plus petit que %{minimum}"
+ detail_4_company_1_max_size: "L'attribut %{column} du transporteur %{objectId} (%{value}) est plus grand que %{maximum}"
+ detail_4_company_1_pattern: "L'attribut %{column} du transporteur %{objectId} (%{value}) n'est pas au bon format "
+ detail_4_company_1_unique: "L'attribut %{column} du transporteur %{objectId} a une valeur partagée avec le transporteur %{alternateId}"
+ detail_4_groupofline_1_min_size: "L'attribut %{column} du groupe de lignes %{objectId} (%{value}) n'est pas renseigné ou plus petit que %{minimum}"
+ detail_4_groupofline_1_max_size: "L'attribut %{column} du groupe de lignes %{objectId} (%{value}) est plus grand que %{maximum}"
+ detail_4_groupofline_1_pattern: "L'attribut %{column} du groupe de lignes %{objectId} (%{value}) n'est pas au bon format "
+ detail_4_groupofline_1_unique: "L'attribut %{column} du groupe de lignes %{objectId} a une valeur partagée avec le groupe de lignes %{alternateId}"
+ detail_4_stoparea_1_min_size: "L'attribut %{column} de l'arrêt %{objectId} (%{value}) n'est pas renseigné ou plus petit que %{minimum}"
+ detail_4_stoparea_1_max_size: "L'attribut %{column} de l'arrêt %{objectId} (%{value}) est plus grand que %{maximum}"
+ detail_4_stoparea_1_pattern: "L'attribut %{column} de l'arrêt %{objectId} (%{value}) n'est pas au bon format "
+ detail_4_stoparea_1_unique: "L'attribut %{column} de l'arrêt %{objectId} a une valeur partagée avec l'arrêt %{alternateId}"
+ detail_4_stoparea_2: "L'arrêt physique %{name} (%{objectId}) n'a pas de parent"
+ detail_4_accesspoint_1_min_size: "L'attribut %{column} du point d'accès %{objectId} (%{value}) n'est pas renseigné ou plus petit que %{minimum}"
+ detail_4_accesspoint_1_max_size: "L'attribut %{column} du point d'accès %{objectId} (%{value}) est plus grand que %{maximum}"
+ detail_4_accesspoint_1_pattern: "L'attribut %{column} du point d'accès %{objectId} (%{value}) n'est pas au bon format "
+ detail_4_accesspoint_1_unique: "L'attribut %{column} du point d'accès %{objectId} a une valeur partagée avec le point d'accès %{alternateId}"
+ detail_4_accesslink_1_min_size: "L'attribut %{column} du lien d'accès %{objectId} (%{value}) n'est pas renseigné ou plus petit que %{minimum}"
+ detail_4_accesslink_1_max_size: "L'attribut %{column} du lien d'accès %{objectId} (%{value}) est plus grand que %{maximum}"
+ detail_4_accesslink_1_pattern: "L'attribut %{column} du lien d'accès %{objectId} (%{value}) n'est pas au bon format "
+ detail_4_accesslink_1_unique: "L'attribut %{column} du lien d'accès %{objectId} a une valeur partagée avec le lien d'accès %{alternateId}"
+ detail_4_connectionlink_1_min_size: "L'attribut %{column} de la correspondance %{objectId} (%{value}) n'est pas renseigné ou plus petit que %{minimum}"
+ detail_4_connectionlink_1_max_size: "L'attribut %{column} de la correspondance %{objectId} (%{value}) est plus grand que %{maximum}"
+ detail_4_connectionlink_1_pattern: "L'attribut %{column} de la correspondance %{objectId} (%{value}) n'est pas au bon format "
+ detail_4_connectionlink_1_unique: "L'attribut %{column} de la correspondance %{objectId} a une valeur partagée avec la correspondance %{alternateId}"
+ detail_4_connectionlink_2: "Sur la correspondance %{name} (%{objectId}) au moins l'un des arrêts %{startName} (%{startId}) et %{endName} (%{endId}) n'est pas un arrêt physique"
+ detail_4_timetable_1_min_size: "L'attribut %{column} du calendrier %{objectId} (%{value}) n'est pas renseigné ou plus petit que %{minimum}"
+ detail_4_timetable_1_max_size: "L'attribut %{column} du calendrier %{objectId} (%{value}) est plus grand que %{maximum}"
+ detail_4_timetable_1_pattern: "L'attribut %{column} du calendrier %{objectId} (%{value}) n'est pas au bon format "
+ detail_4_timetable_1_unique: "L'attribut %{column} du calendrier %{objectId} a une valeur partagée avec le calendrier %{alternateId}"
+ detail_4_line_1_min_size: "L'attribut %{column} de la ligne %{objectId} (%{value}) n'est pas renseigné ou plus petit que %{minimum}"
+ detail_4_line_1_max_size: "L'attribut %{column} de la ligne %{objectId} (%{value}) est plus grand que %{maximum}"
+ detail_4_line_1_pattern: "L'attribut %{column} de la ligne %{objectId} (%{value}) n'est pas au bon format "
+ detail_4_line_1_unique: "L'attribut %{column} de la ligne %{objectId} a une valeur partagée avec la ligne %{alternateId}"
+ detail_4_line_2: "La ligne %{number} : %{name} ( %{objectId}) a un mode de transport interdit %{transportMode}"
+ detail_4_line_3_1: "La ligne %{number} : %{name} ( %{objectId}) n'a pas de groupe de lignes"
+ detail_4_line_3_2: "La ligne %{number} : %{name} ( %{objectId}) a plusieurs groupes de lignes"
+ detail_4_line_4_1: "La ligne %{number} : %{name} ( %{objectId}) n'a pas de séquence d'arrêts"
+ detail_4_line_4_2: "La ligne %{number} : %{name} ( %{objectId}) a trop de séquences d'arrêts non associées (%{routeCount})"
+ detail_4_route_1_min_size: "L'attribut %{column} de la séquence d'arrêts %{objectId} (%{value}) n'est pas renseigné ou plus petit que %{minimum}"
+ detail_4_route_1_max_size: "L'attribut %{column} de la séquence d'arrêts %{objectId} (%{value}) est plus grand que %{maximum}"
+ detail_4_route_1_pattern: "L'attribut %{column} de la séquence d'arrêts %{objectId} (%{value}) n'est pas au bon format "
+ detail_4_route_1_unique: "L'attribut %{column} de la séquence d'arrêts %{objectId} a une valeur partagée avec la séquence d'arrêts %{alternateId}"
+ detail_4_journeypattern_1_min_size: "L'attribut %{column} de la mission %{objectId} (%{value}) n'est pas renseigné ou plus petit que %{minimum}"
+ detail_4_journeypattern_1_max_size: "L'attribut %{column} de la mission %{objectId} (%{value}) est plus grand que %{maximum}"
+ detail_4_journeypattern_1_pattern: "L'attribut %{column} de la mission %{objectId} (%{value}) n'est pas au bon format "
+ detail_4_journeypattern_1_unique: "L'attribut %{column} de la mission %{objectId} a une valeur partagée avec la mission %{alternateId}"
+ detail_4_vehiclejourney_1_min_size: "L'attribut %{column} de la course %{objectId} (%{value}) n'est pas renseigné ou plus petit que %{minimum}"
+ detail_4_vehiclejourney_1_max_size: "L'attribut %{column} de la course %{objectId} (%{value}) est plus grand que %{maximum}"
+ detail_4_vehiclejourney_1_pattern: "L'attribut %{column} de la course %{objectId} (%{value}) n'est pas au bon format "
+ detail_4_vehiclejourney_1_unique: "L'attribut %{column} de la course %{objectId} a une valeur partagée avec la course %{alternateId}"
+ detail_4_vehiclejourney_2: "La course %{objectId} a un mode de transport interdit %{transportMode}"
+
+ activerecord:
models:
compliance_check_result:
zero: "Validation"
@@ -227,7 +285,6 @@ en:
3-StopArea-3: "Vérification de l'unicité des arrêts"
3-StopArea-4: "Vérification de la géolocalisation des arrêts"
3-StopArea-5: "Vérification de la position relative des arrêts et de leur parent"
- 3-StopArea-6: "Vérification de l'information de commune des arrêts"
3-AccessPoint-1: "Vérification de la géolocalisation de tous les accès"
3-AccessPoint-2: "Vérification que deux accès de nom différents ne sont pas trop proches"
3-AccessPoint-3: "Vérification de la proximité entre les accès et leur arrêt de rattachement"
@@ -239,7 +296,6 @@ en:
3-AccessLink-3: "Vérification de la vitesse de parcours entre les deux extrémités d'un lien d'accès"
3-Line-1: "Vérification de la non homonymie des lignes"
3-Line-2: "Vérification de la présence de séquences d'arrêts sur la ligne"
- 3-Line-3: "Vérification des modes de transport"
3-Route-1: "Vérification de la succession des arrêts de la séquence"
3-Route-2: "Vérification de la séquence inverse"
3-Route-3: "Vérification de la distance entre deux arrêts successifs de la séquence"
@@ -254,10 +310,26 @@ en:
3-VehicleJourney-2: "Vérification de la vitesse de transfert entre deux arrêts"
3-VehicleJourney-3: "Vérification de la cohérence des courses successives desservant deux mêmes arrêts"
3-VehicleJourney-4: "Vérification de l'affectation des courses à un calendrier"
- 3-VehicleJourney-5: "Vérification des numéros de course"
- 3-VehicleJourney-6: "Vérification des modes de transport"
3-Facility-1: "Vérification de la géolocalisation de tous les accès"
3-Facility-2: "Vérification de la proximité entre les équipements et leur arrêt de rattachement"
+ 4-Network-1: "Vérification de contraintes sur les attributs des réseaux"
+ 4-Company-1: "Vérification de contraintes sur les attributs des transporteurs"
+ 4-GroupOfLine-1: "Vérification de contraintes sur les attributs des groupes de lignes"
+ 4-StopArea-1: "Vérification de contraintes sur les attributs des arrêts"
+ 4-StopArea-2: "Vérification de l'existance d'un arrêt commercial pour les arrêts physiques"
+ 4-AccessPoint-1: "Vérification de contraintes sur les attributs des accès"
+ 4-AccessLink-1: "Vérification de contraintes sur les attributs des liens d'accès"
+ 4-ConnectionLink-1: "Vérification de contraintes sur les attributs des correspondances"
+ 4-ConnectionLink-2: "Vérification des type d'arrêts en correspondance"
+ 4-Timetable-1: "Vérification de contraintes sur les attributs des calendiers"
+ 4-Line-1: "Vérification de contraintes sur les attributs des lignes"
+ 4-Line-2: "Vérification des modes de transport des lignes"
+ 4-Line-3: "Vérification des groupes de lignes d'une ligne"
+ 4-Line-4: "Vérification des séquences d'arrêts d'une ligne"
+ 4-Route-1: "Vérification de contraintes sur les attributs des séquences d'arrêt"
+ 4-JourneyPattern-1: "Vérification de contraintes sur les attributs des missions"
+ 4-VehicleJourney-1: "Vérification de contraintes sur les attributs des courses"
+ 4-VehicleJourney-2: "Vérification des modes de transport des courses"
severity: "Severity"
status: "Status"
rule_level: "Level"
@@ -373,7 +445,6 @@ fr:
detail_3_stoparea_3: "Les arrêts %{name} (%{objectId} et %{areaId}) sont desservis par les mêmes lignes"
detail_3_stoparea_4: "L'arrêt %{name} (%{objectId}) est en dehors du périmètre de contrôle"
detail_3_stoparea_5: "L'arrêt %{name} (%{objectId}) est localisé trop loin de son parent %{parentName} (%{parentId}) : distance %{distance} > %{distanceLimit}"
- detail_3_stoparea_6: "L'arrêt %{name} (%{objectId}) n'a pas de code commune"
detail_3_accesspoint_1: "L'accès %{name} (%{objectId}) de l'arrêt %{areaName} (%{areaId}) n'est pas géolocalisé"
detail_3_accesspoint_2: "L'accès %{name} (%{objectId}) est localisé trop près de l'accès %{accessName} (%{accessId}) : distance %{distance} < %{distanceLimit}"
detail_3_accesspoint_3: "L'accès %{name} (%{objectId}) est localisé trop loin de son parent %{parentName} (%{parentId}) : distance %{distance} > %{distanceLimit}"
@@ -391,7 +462,6 @@ fr:
detail_3_accesslink_3_4: "Sur le lien d'accès %{name} (%{objectId}), la vitesse pour un voyageur à mobilité réduite %{speed} est supérieure à %{speedLimit} km/h"
detail_3_line_1: "La ligne %{number} : %{name} ( %{objectId}) a une ligne homonyme sur le même réseau %{networkName} (%{networkId})"
detail_3_line_2: "La ligne %{number} : %{name} ( %{objectId}) n'a pas de séquence d'arrêts"
- detail_3_line_3: "La ligne %{number} : %{name} ( %{objectId}) a un mode de transport interdit %{transportMode}"
detail_3_route_1: "Sur la séquence d'arrêt %{objectId}, l'arrêt %{areaName} (%{areaId}) est desservi 2 fois consécutivement"
detail_3_route_2: "Les terminus de la séquence d'arrêt %{objectId} ne sont pas cohérent avec ceux de la séquence opposée %{routeId} : l'une part de %{firstName} (%firstId}) et l'autre arrive à %{lastName} (%lastId})"
detail_3_route_3: "Sur la séquence d'arrêt %{objectId}, entre les arrêts de rang %{firstStopRank} (%{firstStop} et %{nextStopRank} (%{nextStop}, distance %{distance} %{orientation} %{distanceLimit} "
@@ -408,12 +478,65 @@ fr:
detail_3_vehiclejourney_2_3: "La course %{objectId} a une vitesse %{speed} > %{speedLimit} km/h entre les arrêts n° %{firstStopRank} (%{firstStopName}) et n° %{lastStopRank} (%{lastStopName})"
detail_3_vehiclejourney_3: "La course %{objectId} a une variation de progression entre les arrêts n° %{firstStopRank} (%{firstStopName}) et n° %{lastStopRank} (%{lastStopName}) %{variation} > %{maxVariation} avec la course %{vehicleJourneyId}"
detail_3_vehiclejourney_4: "La course %{objectId} n'a pas de calendrier d'application"
- detail_3_vehiclejourney_5_1: "La course %{objectId} n'a pas de numéro"
- detail_3_vehiclejourney_5_2: "La course %{objectId} a un numéro hors plage (%{number})"
- detail_3_vehiclejourney_5_3: "La course %{objectId} a un numéro partagé avec la course %{vehicleJourneyId}"
- detail_3_vehiclejourney_6: "La course %{objectId} a un mode de transport interdit %{transportMode}"
detail_3_facility_1: "L'équipement %{name} (%{objectId}) n'est pas géolocalisé"
detail_3_facility_2: "L'équipement %{name} (%{objectId}) est localisé trop loin de son parent %{areaName} (%{areaId}) : distance %{distance} > %{distanceLimit}"
+
+ detail_4_network_1_min_size: "L'attribut %{column} du réseau %{objectId} (%{value}) n'est pas renseigné ou plus petit que %{minimum}"
+ detail_4_network_1_max_size: "L'attribut %{column} du réseau %{objectId} (%{value}) est plus grand que %{maximum}"
+ detail_4_network_1_pattern: "L'attribut %{column} du réseau %{objectId} (%{value}) n'est pas au bon format "
+ detail_4_network_1_unique: "L'attribut %{column} du réseau %{objectId} a une valeur partagée avec le réseau %{alternateId}"
+ detail_4_company_1_min_size: "L'attribut %{column} du transporteur %{objectId} (%{value}) n'est pas renseigné ou plus petit que %{minimum}"
+ detail_4_company_1_max_size: "L'attribut %{column} du transporteur %{objectId} (%{value}) est plus grand que %{maximum}"
+ detail_4_company_1_pattern: "L'attribut %{column} du transporteur %{objectId} (%{value}) n'est pas au bon format "
+ detail_4_company_1_unique: "L'attribut %{column} du transporteur %{objectId} a une valeur partagée avec le transporteur %{alternateId}"
+ detail_4_groupofline_1_min_size: "L'attribut %{column} du groupe de lignes %{objectId} (%{value}) n'est pas renseigné ou plus petit que %{minimum}"
+ detail_4_groupofline_1_max_size: "L'attribut %{column} du groupe de lignes %{objectId} (%{value}) est plus grand que %{maximum}"
+ detail_4_groupofline_1_pattern: "L'attribut %{column} du groupe de lignes %{objectId} (%{value}) n'est pas au bon format "
+ detail_4_groupofline_1_unique: "L'attribut %{column} du groupe de lignes %{objectId} a une valeur partagée avec le groupe de lignes %{alternateId}"
+ detail_4_stoparea_1_min_size: "L'attribut %{column} de l'arrêt %{objectId} (%{value}) n'est pas renseigné ou plus petit que %{minimum}"
+ detail_4_stoparea_1_max_size: "L'attribut %{column} de l'arrêt %{objectId} (%{value}) est plus grand que %{maximum}"
+ detail_4_stoparea_1_pattern: "L'attribut %{column} de l'arrêt %{objectId} (%{value}) n'est pas au bon format "
+ detail_4_stoparea_1_unique: "L'attribut %{column} de l'arrêt %{objectId} a une valeur partagée avec l'arrêt %{alternateId}"
+ detail_4_stoparea_2: "L'arrêt physique %{name} (%{objectId}) n'a pas de parent"
+ detail_4_accesspoint_1_min_size: "L'attribut %{column} du point d'accès %{objectId} (%{value}) n'est pas renseigné ou plus petit que %{minimum}"
+ detail_4_accesspoint_1_max_size: "L'attribut %{column} du point d'accès %{objectId} (%{value}) est plus grand que %{maximum}"
+ detail_4_accesspoint_1_pattern: "L'attribut %{column} du point d'accès %{objectId} (%{value}) n'est pas au bon format "
+ detail_4_accesspoint_1_unique: "L'attribut %{column} du point d'accès %{objectId} a une valeur partagée avec le point d'accès %{alternateId}"
+ detail_4_accesslink_1_min_size: "L'attribut %{column} du lien d'accès %{objectId} (%{value}) n'est pas renseigné ou plus petit que %{minimum}"
+ detail_4_accesslink_1_max_size: "L'attribut %{column} du lien d'accès %{objectId} (%{value}) est plus grand que %{maximum}"
+ detail_4_accesslink_1_pattern: "L'attribut %{column} du lien d'accès %{objectId} (%{value}) n'est pas au bon format "
+ detail_4_accesslink_1_unique: "L'attribut %{column} du lien d'accès %{objectId} a une valeur partagée avec le lien d'accès %{alternateId}"
+ detail_4_connectionlink_1_min_size: "L'attribut %{column} de la correspondance %{objectId} (%{value}) n'est pas renseigné ou plus petit que %{minimum}"
+ detail_4_connectionlink_1_max_size: "L'attribut %{column} de la correspondance %{objectId} (%{value}) est plus grand que %{maximum}"
+ detail_4_connectionlink_1_pattern: "L'attribut %{column} de la correspondance %{objectId} (%{value}) n'est pas au bon format "
+ detail_4_connectionlink_1_unique: "L'attribut %{column} de la correspondance %{objectId} a une valeur partagée avec la correspondance %{alternateId}"
+ detail_4_connectionlink_2: "Sur la correspondance %{name} (%{objectId}) au moins l'un des arrêts %{startName} (%{startId}) et %{endName} (%{endId}) n'est pas un arrêt physique"
+ detail_4_timetable_1_min_size: "L'attribut %{column} du calendrier %{objectId} (%{value}) n'est pas renseigné ou plus petit que %{minimum}"
+ detail_4_timetable_1_max_size: "L'attribut %{column} du calendrier %{objectId} (%{value}) est plus grand que %{maximum}"
+ detail_4_timetable_1_pattern: "L'attribut %{column} du calendrier %{objectId} (%{value}) n'est pas au bon format "
+ detail_4_timetable_1_unique: "L'attribut %{column} du calendrier %{objectId} a une valeur partagée avec le calendrier %{alternateId}"
+ detail_4_line_1_min_size: "L'attribut %{column} de la ligne %{objectId} (%{value}) n'est pas renseigné ou plus petit que %{minimum}"
+ detail_4_line_1_max_size: "L'attribut %{column} de la ligne %{objectId} (%{value}) est plus grand que %{maximum}"
+ detail_4_line_1_pattern: "L'attribut %{column} de la ligne %{objectId} (%{value}) n'est pas au bon format "
+ detail_4_line_1_unique: "L'attribut %{column} de la ligne %{objectId} a une valeur partagée avec la ligne %{alternateId}"
+ detail_4_line_2: "La ligne %{number} : %{name} ( %{objectId}) a un mode de transport interdit %{transportMode}"
+ detail_4_line_3_1: "La ligne %{number} : %{name} ( %{objectId}) n'a pas de groupe de lignes"
+ detail_4_line_3_2: "La ligne %{number} : %{name} ( %{objectId}) a plusieurs groupes de lignes"
+ detail_4_line_4_1: "La ligne %{number} : %{name} ( %{objectId}) n'a pas de séquence d'arrêts"
+ detail_4_line_4_2: "La ligne %{number} : %{name} ( %{objectId}) a trop de séquences d'arrêts non associées (%{routeCount})"
+ detail_4_route_1_min_size: "L'attribut %{column} de la séquence d'arrêts %{objectId} (%{value}) n'est pas renseigné ou plus petit que %{minimum}"
+ detail_4_route_1_max_size: "L'attribut %{column} de la séquence d'arrêts %{objectId} (%{value}) est plus grand que %{maximum}"
+ detail_4_route_1_pattern: "L'attribut %{column} de la séquence d'arrêts %{objectId} (%{value}) n'est pas au bon format "
+ detail_4_route_1_unique: "L'attribut %{column} de la séquence d'arrêts %{objectId} a une valeur partagée avec la séquence d'arrêts %{alternateId}"
+ detail_4_journeypattern_1_min_size: "L'attribut %{column} de la mission %{objectId} (%{value}) n'est pas renseigné ou plus petit que %{minimum}"
+ detail_4_journeypattern_1_max_size: "L'attribut %{column} de la mission %{objectId} (%{value}) est plus grand que %{maximum}"
+ detail_4_journeypattern_1_pattern: "L'attribut %{column} de la mission %{objectId} (%{value}) n'est pas au bon format "
+ detail_4_journeypattern_1_unique: "L'attribut %{column} de la mission %{objectId} a une valeur partagée avec la mission %{alternateId}"
+ detail_4_vehiclejourney_1_min_size: "L'attribut %{column} de la course %{objectId} (%{value}) n'est pas renseigné ou plus petit que %{minimum}"
+ detail_4_vehiclejourney_1_max_size: "L'attribut %{column} de la course %{objectId} (%{value}) est plus grand que %{maximum}"
+ detail_4_vehiclejourney_1_pattern: "L'attribut %{column} de la course %{objectId} (%{value}) n'est pas au bon format "
+ detail_4_vehiclejourney_1_unique: "L'attribut %{column} de la course %{objectId} a une valeur partagée avec la course %{alternateId}"
+ detail_4_vehiclejourney_2: "La course %{objectId} a un mode de transport interdit %{transportMode}"
activerecord:
models:
compliance_check_result:
@@ -500,7 +623,6 @@ fr:
3-StopArea-3: "Vérification de l'unicité des arrêts"
3-StopArea-4: "Vérification de la géolocalisation des arrêts"
3-StopArea-5: "Vérification de la position relative des arrêts et de leur parent"
- 3-StopArea-6: "Vérification de l'information de commune des arrêts"
3-AccessPoint-1: "Vérification de la géolocalisation de tous les accès"
3-AccessPoint-2: "Vérification que deux accès de nom différents ne sont pas trop proches"
3-AccessPoint-3: "Vérification de la proximité entre les accès et leur arrêt de rattachement"
@@ -512,7 +634,6 @@ fr:
3-AccessLink-3: "Vérification de la vitesse de parcours entre les deux extrémités d'un lien d'accès"
3-Line-1: "Vérification de la non homonymie des lignes"
3-Line-2: "Vérification de la présence de séquences d'arrêts sur la ligne"
- 3-Line-3: "Vérification des modes de transport"
3-Route-1: "Vérification de la succession des arrêts de la séquence"
3-Route-2: "Vérification de la séquence inverse"
3-Route-3: "Vérification de la distance entre deux arrêts successifs de la séquence"
@@ -525,10 +646,26 @@ fr:
3-VehicleJourney-2: "Vérification de la vitesse de transfert entre deux arrêts"
3-VehicleJourney-3: "Vérification de la cohérence des courses successives desservant deux mêmes arrêts"
3-VehicleJourney-4: "Vérification de l'affectation des courses à un calendrier"
- 3-VehicleJourney-5: "Vérification des numéros de course"
- 3-VehicleJourney-6: "Vérification des modes de transport"
3-Facility-1: "Vérification de la géolocalisation de tous les accès"
3-Facility-2: "Vérification de la proximité entre les équipements et leur arrêt de rattachement"
+ 4-Network-1: "Vérification de contraintes sur les attributs des réseaux"
+ 4-Company-1: "Vérification de contraintes sur les attributs des transporteurs"
+ 4-GroupOfLine-1: "Vérification de contraintes sur les attributs des groupes de lignes"
+ 4-StopArea-1: "Vérification de contraintes sur les attributs des arrêts"
+ 4-StopArea-2: "Vérification de l'existance d'un arrêt commercial pour les arrêts physiques"
+ 4-AccessPoint-1: "Vérification de contraintes sur les attributs des accès"
+ 4-AccessLink-1: "Vérification de contraintes sur les attributs des liens d'accès"
+ 4-ConnectionLink-1: "Vérification de contraintes sur les attributs des correspondances"
+ 4-ConnectionLink-2: "Vérification des type d'arrêts en correspondance"
+ 4-Timetable-1: "Vérification de contraintes sur les attributs des calendiers"
+ 4-Line-1: "Vérification de contraintes sur les attributs des lignes"
+ 4-Line-2: "Vérification des modes de transport des lignes"
+ 4-Line-3: "Vérification des groupes de lignes d'une ligne"
+ 4-Line-4: "Vérification des séquences d'arrêts d'une ligne"
+ 4-Route-1: "Vérification de contraintes sur les attributs des séquences d'arrêt"
+ 4-JourneyPattern-1: "Vérification de contraintes sur les attributs des missions"
+ 4-VehicleJourney-1: "Vérification de contraintes sur les attributs des courses"
+ 4-VehicleJourney-2: "Vérification des modes de transport des courses"
severity: "Sévérité"
status: "Statut"
rule_level: "Niveau"
diff --git a/config/locales/devise_invitable.fr.yml b/config/locales/devise_invitable.fr.yml
index 23a88aa16..692625f9c 100644
--- a/config/locales/devise_invitable.fr.yml
+++ b/config/locales/devise_invitable.fr.yml
@@ -2,10 +2,10 @@ fr:
devise:
invitations:
send_instructions: "Un email d'invitation a été envoyé à %{email}."
- invitation_token_invalid: "L'invitation fourni n'est pas valide!"
+ invitation_token_invalid: "L'invitation fournie n'est pas valide!"
updated: 'Votre mot de passe a été enregistré avec succés. Vous êtes maintenant connecté.'
no_invitations_remaining: "Pas d'invitations restantes."
- invitation_removed: 'Votre invitation a été supprimé.'
+ invitation_removed: 'Votre invitation a été supprimée.'
new:
header: "Envoyer une invitation"
submit_button: "Envoyer une invitation"
@@ -14,7 +14,7 @@ fr:
submit_button: "Valider mon mot de passe"
mailer:
invitation_instructions:
- subject: "Invitation sur l'appication Chouette"
+ subject: "Invitation sur l'application Chouette"
hello: 'Bonjour %{email}'
someone_invited_you: "Ce message est une invitation pour accéder à %{url}, , vous pouvez l'accepter en cliquant sur le lien suivant :"
accept: "Accepter l'invitation"
diff --git a/config/locales/journey_patterns.yml b/config/locales/journey_patterns.yml
index b16985c2c..2bf072df0 100644
--- a/config/locales/journey_patterns.yml
+++ b/config/locales/journey_patterns.yml
@@ -24,9 +24,9 @@ en:
activerecord:
models:
journey_pattern:
- zero: "Journey pattern"
- one: "Journey pattern"
- other: "Journey patterns"
+ zero: "journey pattern"
+ one: "journey pattern"
+ other: "journey patterns"
attributes:
journey_pattern:
route: "Route"
@@ -70,9 +70,9 @@ fr:
activerecord:
models:
journey_pattern:
- zero: "Mission"
- one: "Mission"
- other: "Missions"
+ zero: "mission"
+ one: "mission"
+ other: "missions"
attributes:
journey_pattern:
route: "Séquence d'arrêts"
diff --git a/config/locales/routes.yml b/config/locales/routes.yml
index 1807ef30d..45b82076c 100644
--- a/config/locales/routes.yml
+++ b/config/locales/routes.yml
@@ -113,9 +113,9 @@ fr:
activerecord:
models:
route:
- zero: "Séquence d'arrêts"
- one: "Séquence d'arrêts"
- other: "Séquences d'arrêts"
+ zero: "séquence d'arrêts"
+ one: "séquence d'arrêts"
+ other: "séquences d'arrêts"
attributes:
route:
wayback:
diff --git a/config/locales/rule_parameter_sets.yml b/config/locales/rule_parameter_sets.yml
index b1f45c4f4..c1f1edceb 100644
--- a/config/locales/rule_parameter_sets.yml
+++ b/config/locales/rule_parameter_sets.yml
@@ -30,11 +30,16 @@ en:
facility_stop_area_distance_max: "a stop area and a facility"
rule_parameter_by_mode: "Parameters by mode"
modes_allowed: " (only for allowed ones)"
- vehicle_journey_number_bounds: "Vehicle journey number limits (0,0 to disable check-point))"
- min_value: "minimal value"
- max_value: "maximal value"
index:
title: "Parameter sets"
+ labels:
+ columns_restrictions: "Check model objects atributes"
+ attribute: "attribute"
+ free_char: "free"
+ num_char: "number only"
+ alpha_char: "character only"
+ lower_char: "lowercase only"
+ upper_char: "uppercase only"
activerecord:
models:
rule_parameter_set: "Parameter Set for Conformity Rules"
@@ -58,10 +63,17 @@ en:
speed_min: "Minimum speed"
speed_max: "Maximum speed"
inter_stop_duration_variation_max: "Maximum duration gap between 2 vehicle journeys and between 2 following stops"
- vehicle_journey_number_min: "Minimal value for vehicle journey numbers (empty to disable check-point)"
- vehicle_journey_number_min: "Maximal value for vehicle journey numbers (empty to disable check-point)"
+ check_lines_in_groups: "check if each line belongs scrictly to one group of line"
+ check_line_routes: "check if each line have 1 route or 2 routes coupled"
+ check_stop_parent: "check if all physical stop areas are owned by a commercial stop point"
+ check_connection_link_on_physical: "check if connection links connect only physical stops"
check_allowed_transport_modes: "Check transport modes"
allowed_transport: "Allowed"
+ attribute: "attribute"
+ unique: "uniqness"
+ string_type: "allowed characters"
+ min_size: "minimal size or value"
+ max_size: "maximal size or value"
fr:
rule_parameter_sets:
@@ -95,11 +107,16 @@ fr:
inter_stop_duration_max: "Durée maximum de stationnement à un arrêt"
rule_parameter_by_mode: "Jeu de paramètres pour un mode de transport"
modes_allowed: " (uniquement pour les modes autorisés)"
- vehicle_journey_number_bounds: "Fouchette de valeurs pour le numéro de courses"
- min_value: "valeur minimale"
- max_value: "valeur maximale"
index:
title: "Jeux de paramètres"
+ labels:
+ columns_restrictions: "Contôles sur les attributs des objets du modèle"
+ attribute: "attribut"
+ free_char: "libre"
+ num_char: "numérique"
+ alpha_char: "alphabétique"
+ lower_char: "minuscule"
+ upper_char: "majuscule"
activerecord:
models:
rule_parameter_set: "Jeu de paramètres pour le contrôle de qualité des données"
@@ -123,8 +140,15 @@ fr:
speed_min: "Vitesse minimum"
speed_max: "Vitesse maximum"
inter_stop_duration_variation_max: "Ecart maximum de durée entre 2 arrêts successifs pour les différentes courses"
- vehicle_journey_number_min: "Borne inférieur pour les numéros de course (vide pour désactiver le contrôle)"
- vehicle_journey_number_min: "Borne supérieure pour les numéros de course (vide pour désactiver le contrôle)"
- check_allowed_transport_modes: "Contrôler les modes de transport"
+ check_lines_in_groups: "Contrôler que chaque ligne appartient à un et un seul groupe de lignes"
+ check_line_routes: "Contrôler que chaque ligne a une séquence d'arrêt ou un couple A/R de séquences d'arrêts"
+ check_stop_parent: "Contrôler que chaque arrêt physique est rattaché à un arrêt commercial"
+ check_connection_link_on_physical: "Contrôler que les correspondances ne relient que des arrêts physiques"
+ check_allowed_transport_modes: "Contrôler les modes de transport des lignes et des courses"
allowed_transport: "Autorisé"
+ attribute: "attribut"
+ unique: "unicité"
+ string_type: "caractères autorisés"
+ min_size: "taille ou valeur minimale"
+ max_size: "taille ou valeur maximale"
diff --git a/config/locales/time_tables.yml b/config/locales/time_tables.yml
index 8f83cb530..dd9845138 100644
--- a/config/locales/time_tables.yml
+++ b/config/locales/time_tables.yml
@@ -53,9 +53,9 @@ en:
activerecord:
models:
time_table:
- zero: "Timetable"
- one: "Timetable"
- other: "Timetables"
+ zero: "timetable"
+ one: "timetable"
+ other: "timetables"
attributes:
time_table:
comment: "Name"
@@ -146,9 +146,9 @@ fr:
activerecord:
models:
time_table:
- zero: "Calendrier"
- one: "Calendrier"
- other: "Calendriers"
+ zero: "calendrier"
+ one: "calendrier"
+ other: "calendriers"
attributes:
time_table:
comment: "Nom"
diff --git a/config/locales/vehicle_journeys.yml b/config/locales/vehicle_journeys.yml
index 4ff947321..4ebbeb7f7 100644
--- a/config/locales/vehicle_journeys.yml
+++ b/config/locales/vehicle_journeys.yml
@@ -159,9 +159,9 @@ fr:
activerecord:
models:
vehicle_journey:
- zero: "Course"
- one: "Course"
- other: "Courses"
+ zero: "course"
+ one: "course"
+ other: "courses"
attributes:
vehicle_journey:
line: "Ligne"
diff --git a/config/routes.rb b/config/routes.rb
index 3e4e31250..a2da2b071 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -7,11 +7,11 @@ ChouetteIhm::Application.routes.draw do
devise_scope :user do
authenticated :user do
- root :to => 'referentials#index'
+ root :to => 'referentials#index', as: :authenticated_root
end
unauthenticated do
- root :to => 'devise/sessions#new'
+ root :to => 'devise/sessions#new', as: :unauthenticated_root
end
end
@@ -166,6 +166,7 @@ ChouetteIhm::Application.routes.draw do
resources :clean_ups
end
+ root :to => "referentials#index"
match '/help/(*slug)' => 'help#show'
diff --git a/spec/requests/time_tables_spec.rb b/spec/requests/time_tables_spec.rb
index fbe03db2b..a560eeec8 100644
--- a/spec/requests/time_tables_spec.rb
+++ b/spec/requests/time_tables_spec.rb
@@ -31,7 +31,7 @@ describe "TimeTables" do
click_link "Ajouter un calendrier"
fill_in "Nom", :with => "TimeTable 1"
fill_in "Identifiant Neptune", :with => "test:Timetable:1"
- click_button("Créer Calendrier")
+ click_button("Créer calendrier")
page.should have_content("TimeTable 1")
end
end
@@ -41,7 +41,7 @@ describe "TimeTables" do
visit referential_time_table_path(referential, subject)
click_link "Modifier ce calendrier"
fill_in "Nom", :with => "TimeTable Modified"
- click_button("Modifier Calendrier")
+ click_button("Modifier calendrier")
page.should have_content("TimeTable Modified")
end
end