diff options
Diffstat (limited to 'app/controllers')
| -rw-r--r-- | app/controllers/application_controller.rb | 4 | ||||
| -rw-r--r-- | app/controllers/errors_controller.rb | 11 | ||||
| -rw-r--r-- | app/controllers/journey_patterns_collections_controller.rb | 9 | ||||
| -rw-r--r-- | app/controllers/line_footnotes_controller.rb | 2 | ||||
| -rw-r--r-- | app/controllers/referential_companies_controller.rb | 7 | ||||
| -rw-r--r-- | app/controllers/referentials_controller.rb | 2 | ||||
| -rw-r--r-- | app/controllers/route_stop_points_controller.rb | 18 | ||||
| -rw-r--r-- | app/controllers/routing_constraint_zones_controller.rb | 7 | ||||
| -rw-r--r-- | app/controllers/time_tables_controller.rb | 55 | ||||
| -rw-r--r-- | app/controllers/vehicle_journeys_controller.rb | 53 | ||||
| -rw-r--r-- | app/controllers/workbenches_controller.rb | 7 |
11 files changed, 132 insertions, 43 deletions
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index c2414f5bb..2bdf8078a 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -15,6 +15,10 @@ class ApplicationController < ActionController::Base I18n.locale = session[:language] || I18n.default_locale end + def pundit_user + UserContext.new(current_user, referential: self.try(:current_referential)) + end + protected def user_not_authorized diff --git a/app/controllers/errors_controller.rb b/app/controllers/errors_controller.rb index c68a60804..accf119a3 100644 --- a/app/controllers/errors_controller.rb +++ b/app/controllers/errors_controller.rb @@ -1,9 +1,14 @@ class ErrorsController < ApplicationController def not_found - render :status => 404, :formats => [:html] + render template: 'errors/not_found', status: 404, formats: [:html] end def server_error - render :status => 500, :formats => [:html] + render template: 'errors/server_error', status: 500, formats: [:html] end -end
\ No newline at end of file + + def not_allowed + render template: 'errors/not_found', status: 403, formats: [:html] + end +end + diff --git a/app/controllers/journey_patterns_collections_controller.rb b/app/controllers/journey_patterns_collections_controller.rb index 51cc48c2a..ba54ddf26 100644 --- a/app/controllers/journey_patterns_collections_controller.rb +++ b/app/controllers/journey_patterns_collections_controller.rb @@ -1,6 +1,7 @@ class JourneyPatternsCollectionsController < ChouetteController respond_to :html respond_to :json + before_action :user_permissions, only: :show belongs_to :referential do belongs_to :line, :parent_class => Chouette::Line do @@ -41,6 +42,14 @@ class JourneyPatternsCollectionsController < ChouetteController @stop_points_list = @stop_points_list.sort_by {|a| a[:position] } end + def user_permissions + @perms = {}.tap do |perm| + ['journey_patterns.create', 'journey_patterns.edit', 'journey_patterns.destroy'].each do |name| + perm[name] = policy(:journey_pattern).send("#{name.split('.').last}?") + end + end.to_json + end + def update state = JSON.parse request.raw_post Chouette::JourneyPattern.state_update route, state diff --git a/app/controllers/line_footnotes_controller.rb b/app/controllers/line_footnotes_controller.rb index 7bc048731..c42aa785b 100644 --- a/app/controllers/line_footnotes_controller.rb +++ b/app/controllers/line_footnotes_controller.rb @@ -1,7 +1,6 @@ class LineFootnotesController < BreadcrumbController defaults :resource_class => Chouette::Line include PolicyChecker - before_action :check_policy, only: [:edit, :update, :destroy] respond_to :json, :only => :show belongs_to :referential @@ -27,7 +26,6 @@ class LineFootnotesController < BreadcrumbController end protected - # overrides default def check_policy authorize resource, "#{action_name}_footnote?".to_sym diff --git a/app/controllers/referential_companies_controller.rb b/app/controllers/referential_companies_controller.rb index 0966389b4..e8b104d14 100644 --- a/app/controllers/referential_companies_controller.rb +++ b/app/controllers/referential_companies_controller.rb @@ -27,7 +27,12 @@ class ReferentialCompaniesController < ChouetteController end def collection - @q = referential.workbench.companies.search(params[:q]) + scope = referential.line_referential.companies + if params[:line_id] + scope = referential.line_referential.lines.find(params[:line_id]).companies + end + + @q = scope.search(params[:q]) if sort_column && sort_direction @companies ||= @q.result(:distinct => true).order(sort_column + ' ' + sort_direction).paginate(:page => params[:page]) diff --git a/app/controllers/referentials_controller.rb b/app/controllers/referentials_controller.rb index ce875b6ba..f46cd188d 100644 --- a/app/controllers/referentials_controller.rb +++ b/app/controllers/referentials_controller.rb @@ -1,7 +1,7 @@ class ReferentialsController < BreadcrumbController defaults :resource_class => Referential include PolicyChecker - before_action :check_policy, :only => [:edit, :update, :archive, :unarchive] # overrides default + before_action :check_policy, :only => [:edit, :update, :destroy, :archive, :unarchive] # overrides default respond_to :html respond_to :json, :only => :show diff --git a/app/controllers/route_stop_points_controller.rb b/app/controllers/route_stop_points_controller.rb new file mode 100644 index 000000000..e12acb33b --- /dev/null +++ b/app/controllers/route_stop_points_controller.rb @@ -0,0 +1,18 @@ +class RouteStopPointsController < ChouetteController + defaults resource_class: Chouette::StopPoint + actions :index + respond_to :json, only: :index + + belongs_to :referential do + belongs_to :line, :parent_class => Chouette::Line do + belongs_to :route, :parent_class => Chouette::Route + end + end + + def index + respond_to do |format| + format.json { render json: referential.lines.find(params[:line_id]).routes.find(params[:route_id]).stop_points.map { |sp| { id: sp.id, name: sp.name } } } + end + end +end + diff --git a/app/controllers/routing_constraint_zones_controller.rb b/app/controllers/routing_constraint_zones_controller.rb index c39c50326..f2f74e801 100644 --- a/app/controllers/routing_constraint_zones_controller.rb +++ b/app/controllers/routing_constraint_zones_controller.rb @@ -3,6 +3,8 @@ class RoutingConstraintZonesController < ChouetteController respond_to :html, :xml, :json + before_action :remove_empty_stop_point, only: [:create, :update] + belongs_to :referential do belongs_to :line, parent_class: Chouette::Line end @@ -11,7 +13,10 @@ class RoutingConstraintZonesController < ChouetteController private def routing_constraint_zone_params - params.require(:routing_constraint_zone).permit(:name, { stop_area_ids: [] }, :line_id, :objectid, :object_version, :creator_id) + params.require(:routing_constraint_zone).permit(:name, { stop_point_ids: [] }, :line_id, :route_id, :objectid, :object_version, :creator_id) end + def remove_empty_stop_point + params.require(:routing_constraint_zone)[:stop_point_ids].delete('') + end end diff --git a/app/controllers/time_tables_controller.rb b/app/controllers/time_tables_controller.rb index bdde5d3ab..eedfef07c 100644 --- a/app/controllers/time_tables_controller.rb +++ b/app/controllers/time_tables_controller.rb @@ -18,6 +18,11 @@ class TimeTablesController < ChouetteController end end + def month + @date = params['date'] ? Date.parse(params['date']) : Date.today + @time_table = resource + end + def new @autocomplete_items = ActsAsTaggableOn::Tag.all new! do @@ -88,19 +93,25 @@ class TimeTablesController < ChouetteController protected def collection - ransack_params = params[:q] - # Hack to delete params can't be used by ransack - tag_search = ransack_params["tag_search"].split(",").collect(&:strip) if ransack_params.present? && ransack_params["tag_search"].present? - ransack_params.delete("tag_search") if ransack_params.present? + scope = select_time_tables + if params[:q] && params[:q]["tag_search"] + tags = params[:q]["tag_search"].reject {|c| c.empty?} + params[:q].delete("tag_search") + scope = select_time_tables.tagged_with(tags, :wild => true, :any => true) if tags.any? + end - selected_time_tables = tag_search ? select_time_tables.tagged_with(tag_search, :wild => true, :any => true) : select_time_tables - @q = selected_time_tables.search(ransack_params) - @time_tables ||= @q.result(:distinct => true).order(:comment).paginate(:page => params[:page]) + @q = scope.search(params[:q]) + if sort_column && sort_direction + @time_tables ||= @q.result(:distinct => true).order("#{sort_column} #{sort_direction}") + else + @time_tables ||= @q.result(:distinct => true).order(:comment) + end + @time_tables = @time_tables.paginate(page: params[:page], per_page: 10) end def select_time_tables if params[:route_id] - referential.time_tables.joins( vehicle_journeys: :route).where( "routes.id IN (#{params[:route_id]})") + referential.time_tables.joins(vehicle_journeys: :route).where( "routes.id IN (#{params[:route_id]})") else referential.time_tables end @@ -115,8 +126,34 @@ class TimeTablesController < ChouetteController end private + def sort_column + referential.time_tables.column_names.include?(params[:sort]) ? params[:sort] : 'comment' + end + def sort_direction + %w[asc desc].include?(params[:direction]) ? params[:direction] : 'asc' + end def time_table_params - params.require(:time_table).permit( :objectid, :object_version, :creator_id, :calendar_id, :version, :comment, :int_day_types, :monday, :tuesday, :wednesday, :thursday, :friday, :saturday, :sunday, :start_date, :end_date, { :dates_attributes => [:date, :in_out, :id, :_destroy] }, { :periods_attributes => [:period_start, :period_end, :_destroy, :id] }, :tag_list, :tag_search ) + params.require(:time_table).permit( + :objectid, + :object_version, + :creator_id, + :calendar_id, + :version, :comment, :color, + :int_day_types, + :monday, + :tuesday, + :wednesday, + :thursday, + :friday, + :saturday, + :sunday, + :start_date, + :end_date, + { :dates_attributes => [:date, :in_out, :id, :_destroy] }, + { :periods_attributes => [:period_start, :period_end, :_destroy, :id] }, + {tag_list: []}, + :tag_search + ) end end diff --git a/app/controllers/vehicle_journeys_controller.rb b/app/controllers/vehicle_journeys_controller.rb index 5199d8632..c084b592a 100644 --- a/app/controllers/vehicle_journeys_controller.rb +++ b/app/controllers/vehicle_journeys_controller.rb @@ -1,8 +1,6 @@ class VehicleJourneysController < ChouetteController defaults :resource_class => Chouette::VehicleJourney - before_action :check_policy, only: [:edit, :update, :destroy] before_action :user_permissions, only: :index - before_action :ransack_params, only: :index respond_to :json, :only => :index respond_to :js, :only => [:select_journey_pattern, :edit, :new, :index] @@ -61,8 +59,7 @@ class VehicleJourneysController < ChouetteController } end - @jp_origin = Chouette::JourneyPattern.find_by(objectid: params[:jp]) - + @jp_origin = Chouette::JourneyPattern.find_by(objectid: params[:jp]) index! do if collection.out_of_bounds? @@ -80,14 +77,39 @@ class VehicleJourneysController < ChouetteController protected def collection + scope = route.vehicle_journeys.joins(:journey_pattern).joins('LEFT JOIN "vehicle_journey_at_stops" ON "vehicle_journey_at_stops"."vehicle_journey_id" = "vehicle_journeys"."id"') + + @q = scope.search filtered_ransack_params + grouping = ransack_periode_filter + @q.build_grouping(grouping) if grouping + @ppage = 20 - @q = route.sorted_vehicle_journeys('vehicle_journeys').search params[:q] - @vehicle_journeys = @q.result.paginate(:page => params[:page], :per_page => @ppage) + @vehicle_journeys = @q.result(distinct: true).paginate(:page => params[:page], :per_page => @ppage) @footnotes = route.line.footnotes.to_json @matrix = resource_class.matrix(@vehicle_journeys) @vehicle_journeys end + def ransack_periode_filter + if params[:q] && params[:q][:vehicle_journey_at_stops_departure_time_gteq] + params[:q] = params[:q].reject{|k| params[:q][k] == 'undefined'} + between = [:departure_time_gteq, :departure_time_lteq].map do |filter| + "2000-01-01 #{params[:q]["vehicle_journey_at_stops_#{filter}"]}:00 UTC" + end + { + :m => 'or', + :vehicle_journey_at_stops_departure_time_between => between.join(' to '), + :vehicle_journey_at_stops_id_null => params[:q][:vehicle_journey_without_departure_time] + } + end + end + + def filtered_ransack_params + if params[:q] + params[:q].except(:vehicle_journey_at_stops_departure_time_gteq, :vehicle_journey_at_stops_departure_time_lteq) + end + end + def adapted_params params.tap do |adapted_params| adapted_params.merge!( :route => parent) @@ -107,30 +129,15 @@ class VehicleJourneysController < ChouetteController @matrix = resource_class.matrix(@vehicle_journeys) end - def check_policy - authorize resource - end - def user_permissions @perms = {}.tap do |perm| ['vehicle_journeys.create', 'vehicle_journeys.edit', 'vehicle_journeys.destroy'].each do |name| - perm[name] = current_user.permissions.include?(name) + perm[name] = policy(:vehicle_journey).send("#{name.split('.').last}?") end - end - @perms = @perms.to_json + end.to_json end private - def ransack_params - if params[:q] - params[:q] = params[:q].reject{|k| params[:q][k] == 'undefined'} - [:departure_time_gteq, :departure_time_lteq].each do |filter| - time = params[:q]["vehicle_journey_at_stops_#{filter}"] - params[:q]["vehicle_journey_at_stops_#{filter}"] = "2000-01-01 #{time}:00 UTC" - end - end - end - def vehicle_journey_params params.require(:vehicle_journey).permit( { footnote_ids: [] } , :journey_pattern_id, :number, :published_journey_name, :published_journey_identifier, :comment, :transport_mode, diff --git a/app/controllers/workbenches_controller.rb b/app/controllers/workbenches_controller.rb index 1424fe03c..d621a28d7 100644 --- a/app/controllers/workbenches_controller.rb +++ b/app/controllers/workbenches_controller.rb @@ -37,10 +37,11 @@ class WorkbenchesController < BreadcrumbController end def sort_result collection - col = (Workbench.find(params[:id]).referentials.column_names + %w{lines}).include?(params[:sort]) ? params[:sort] : 'name' + col = (Workbench.find(params[:id]).referentials.column_names + %w{lines validity_period}).include?(params[:sort]) ? params[:sort] : 'name' dir = %w[asc desc].include?(params[:direction]) ? params[:direction] : 'asc' - if col == "lines" - collection.joins(:metadatas).group("referentials.id").order("sum(array_length(referential_metadata.line_ids,1)) #{dir}") + + if ['lines', 'validity_period'].include?(col) + collection.send("order_by_#{col}", dir) else collection.order("#{col} #{dir}") end |
