diff options
37 files changed, 516 insertions, 105 deletions
| diff --git a/CHANGELOG.md b/CHANGELOG.md index 490d9fae9..b5941b139 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 fonctionnalités    * Reprise des imports/exports GTFS @@ -105,9 +105,10 @@ gem 'google-analytics-rails'  gem 'will_paginate', '~> 3.0', :git => "https://github.com/mislav/will_paginate.git"  gem 'ransack'  gem 'squeel' +  gem 'ninoxe', :git => 'https://github.com/afimb/ninoxe.git', :branch => "rails4" +#gem 'ninoxe', :git => 'https://github.com/afimb/ninoxe.git'  #gem 'ninoxe',:path => '~/workspace/chouette/ninoxe' -#gem 'ninoxe', '~> 1.1.3'  gem 'acts_as_list', '~> 0.6.0'  gem "acts_as_tree", '~> 2.1.0', :require => "acts_as_tree" @@ -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 0cc0b1c31..673f52436 100644 --- a/app/controllers/registrations_controller.rb +++ b/app/controllers/registrations_controller.rb @@ -23,7 +23,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 b8c5a2f8f..227e2cddf 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/new.html.erb b/app/views/devise/passwords/new.html.erb index 8f9e6dd47..9ca4842e6 100644 --- a/app/views/devise/passwords/new.html.erb +++ b/app/views/devise/passwords/new.html.erb @@ -5,7 +5,7 @@        <%= simple_form_for(resource, :as => resource_name, :url => password_path(resource_name), html: {class: 'form-horizontal' } ) do |form| %>        <%= form.input :email, :as => :email, placeholder: 'user@domain.com'  %>  -      <div class="submit"> +      <div class="form-actions">          <%= link_to t("cancel"), unauthenticated_root_path, :class => "btn btn-default" %>              <%= form.button :submit, :value => t("devise.passwords.new.commit"), :class => "btn-info" %>        </div> 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/mailer.html.erb b/app/views/layouts/mailer.html.erb index b8dea72e8..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 unauthenticated_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 f46e07c83..8398242e6 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -72,10 +72,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 24f3d3318..fbc3b3330 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -176,7 +176,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 05eb1c4cb..ba60fee9b 100644 --- a/config/locales/vehicle_journeys.yml +++ b/config/locales/vehicle_journeys.yml @@ -158,9 +158,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 788b92bf6..a69b2792c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -148,6 +148,7 @@ ChouetteIhm::Application.routes.draw do      resources :clean_ups    end +  root :to => "referentials#index"    get '/help/(*slug)' => 'help#show' diff --git a/spec/features/journey_pattern_spec.rb b/spec/features/journey_pattern_spec.rb index 1e50b47c7..9bddcf3bc 100644 --- a/spec/features/journey_pattern_spec.rb +++ b/spec/features/journey_pattern_spec.rb @@ -33,7 +33,7 @@ describe "JourneyPatterns", :type => :feature do        click_link "Ajouter une mission"        fill_in "Nom", :with => "A to B"        fill_in "Comment", :with => "AB" -      click_button("Créer Mission") +      click_button("Créer mission")        expect(page).to have_content("A to B")      end    end diff --git a/spec/features/routes_spec.rb b/spec/features/routes_spec.rb index 669d99ff2..538c6a969 100644 --- a/spec/features/routes_spec.rb +++ b/spec/features/routes_spec.rb @@ -34,7 +34,7 @@ describe "Routes", :type => :feature do        fill_in "Indice", :with => "AB"        select 'aller', :from => "route_direction_code"        select 'aller', :from => "route_wayback_code"  -      click_button("Créer Séquence d'arrêts") +      click_button("Créer séquence d'arrêts")        expect(page).to have_content("A to B")      end    end @@ -45,7 +45,7 @@ describe "Routes", :type => :feature do        click_link "#{route.name}"        click_link "Modifier cette séquence d'arrêts"        fill_in "route_name", :with => "#{route.name}-changed" -      click_button("Modifier Séquence d'arrêts") +      click_button("Modifier séquence d'arrêts")        expect(page).to have_content("#{route.name}-changed")      end    end diff --git a/spec/features/time_tables_spec.rb b/spec/features/time_tables_spec.rb index d9304c5ba..9b99ad8a3 100644 --- a/spec/features/time_tables_spec.rb +++ b/spec/features/time_tables_spec.rb @@ -31,7 +31,7 @@ describe "TimeTables", :type => :feature 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")        expect(page).to have_content("TimeTable 1")      end    end @@ -41,7 +41,7 @@ describe "TimeTables", :type => :feature 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")        expect(page).to have_content("TimeTable Modified")      end    end diff --git a/spec/features/users/user_show_spec.rb b/spec/features/users/user_show_spec.rb index fdc48a279..a4db51497 100644 --- a/spec/features/users/user_show_spec.rb +++ b/spec/features/users/user_show_spec.rb @@ -38,7 +38,7 @@ feature 'User profile page', :devise do      login_as(me, :scope => :user)      Capybara.current_session.driver.header 'Referer', authenticated_root_path      visit organisation_user_path(other) -    expect(page).to have_content 'Access denied.' +    expect(page).to have_content other.email    end  end | 
