aboutsummaryrefslogtreecommitdiffstats
path: root/app/controllers
diff options
context:
space:
mode:
Diffstat (limited to 'app/controllers')
-rw-r--r--app/controllers/application_controller.rb4
-rw-r--r--app/controllers/errors_controller.rb11
-rw-r--r--app/controllers/journey_patterns_collections_controller.rb9
-rw-r--r--app/controllers/line_footnotes_controller.rb2
-rw-r--r--app/controllers/referential_companies_controller.rb7
-rw-r--r--app/controllers/referentials_controller.rb2
-rw-r--r--app/controllers/route_stop_points_controller.rb18
-rw-r--r--app/controllers/routing_constraint_zones_controller.rb7
-rw-r--r--app/controllers/time_tables_controller.rb55
-rw-r--r--app/controllers/vehicle_journeys_controller.rb53
-rw-r--r--app/controllers/workbenches_controller.rb7
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