mirror of
https://github.com/publiclab/mapknitter.git
synced 2025-12-05 16:00:00 +01:00
* Configurations update for rails 4.0 * ActiveSupport::Testing::Performance extracted to a gem * ruby prof required as a dependency * disable rubocop on bin folder * http patch * Comment out to allow testing * no longer supports plugin loading * lock to sprockets 2.12 * Active record patches * remove deprecated test syntax * fix failing tests * change new super class * replace right_aws with right_aws_api right_aws is no longer maintained, was throwing an error * lock to rails 4.2.11.1 * change rails version in install script * remove deprecation warnings * Change test lib to minitest, add minitest reporters * make app work * active record find patches * root_in_json include defaulted to false * confirm option removed in link helper * cookies serializer changed to hybrid * Change render :text to :plain render :text will be deprecated and poses a security risk * console for dev web * Check and fix interface functionality * fix export functionality * add protected attributes for the warpable model * fix image upload * Fix comments and images failing tests * include mass assignment security in annotations * render html for update images * clear mail array before every test * Fix codeclimate issues * skip failing test The test is failing because of different names in model(warpable) and controller(images) skipping this for now until we decide if we want to standardize the names * replace unprotected redirects * Fix codeclimate issues * Autofixing rubocop offenses and Problematic test for #578 (#667) * Autofixing rubocop offenses * Adding Rubocop to Travis pipelines and development branch * Fixing maps controller test * Fixing remaining offenses * change post test to create since action new is a get action * remove unprotected redirects * Fix codeclimate issues * Add yarn * Remove error log * Fix oauth icons * Modify package.json * Add yarn install to start.sh * Add leaflet google * Remove leaflet-google from package json * remove passenger error logs * Fix install script * Remove flag * Fix gemfile.lock * Fix gemfile.lock * Fix login * Upgrade Gemfile to Rails 5.0 * require rake' * Change config files * Add application record * Bump mysql * Local builds for Travis runners (#672) * Using local mysql for travis * Fix codeclimate issues * Refactoring yamls * Autofixing rubocop offenses and Problematic test for #578 (#667) * Autofixing rubocop offenses * Adding Rubocop to Travis pipelines and development branch * Fixing maps controller test * Fixing remaining offenses * Fixing unit tests * Adding docker build to travis pipelines * Adding docker build to travis pipelines * Staging builds in travis * fix travis.yml * Upgrading sintax of assets and using required gems * Using updated version of GDAL and installing required dependencies * Enabling cache in between builds * Test yarn for travis * Conditionalize rake db:setup for travis * Add semicolon * Remove comment * modify database.yml * Migrate seperately * Run create only for production * Locking newer Rails v * Running update task * Adding missing bootsnap gem * Fixing missing database * Adding missing listen gem * Fixing schema example version * Fixing migration versions * Updating dependencies for Rails 5 * Adding ApplicationMailer abstraction * Adding required initializers * Prefer require_relative instead of full path * Making associations not required by default * Regenerating schema file * Hotfixing MassAssigment * Upgrade web-console, remove mysql adapter override * Remove attr_accessible * Add rails-controller-testing gem * Follow new syntax for tests * Remove extra web-console from gemfile * Regenerating lock file * Fixing rubocop offenses and bundler version * Using correct Paperclip class as in https://github.com/rails/rails/issues/26404#issuecomment-502129936 * Fix images functional tests * images controller test typecast to string * Fix rails logger * Fix map tests * Bumping rubocop version * Autofixing rubocop offenses * Including performance cop to rubocop * Refactoring deprecated routing and secret_token * Fixing routes for feed controller * Using correct routes for RSS builder * Fixing missing routes * Fixing travis bundler and yarn cache * Fixing bundle path * Splitting bundle and yarn verifications * Autofixing rubocop offenses * Fixing prod host for travis, private class usage and rubocop offenses * Upgrade to Rails 5.2 (#685) * Upgrade Gemfile to Rails 5.0 * require rake' * Change config files * Add application record * Bump mysql * Locking newer Rails v * Running update task * Adding missing bootsnap gem * Fixing missing database * Adding missing listen gem * Fixing schema example version * Fixing migration versions * Updating dependencies for Rails 5 * Adding ApplicationMailer abstraction * Adding required initializers * Prefer require_relative instead of full path * Making associations not required by default * Regenerating schema file * Hotfixing MassAssigment * Upgrade web-console, remove mysql adapter override * Remove attr_accessible * Add rails-controller-testing gem * Follow new syntax for tests * Remove extra web-console from gemfile * Regenerating lock file * Fixing rubocop offenses and bundler version * Using correct Paperclip class as in https://github.com/rails/rails/issues/26404#issuecomment-502129936 * Fix images functional tests * images controller test typecast to string * Fix rails logger * Fix map tests * Bumping rubocop version * Autofixing rubocop offenses * Including performance cop to rubocop * Refactoring deprecated routing and secret_token * Fixing routes for feed controller * Using correct routes for RSS builder * Fixing missing routes * Fixing travis bundler and yarn cache * Fixing bundle path * Splitting bundle and yarn verifications * Fixing prod host for travis, private class usage and rubocop offenses * Enforcing params usage on get method * Using correct folder names to Rails >5 conventions * Enforcing params wrapping and adding missing front_ui route * Precompiling assets before serving * Improving Jenkins startup script * WIP action cable setup * basic action cable setup complete * minor change * minor changes * few changes * Using supported docker yaml version by Jenkins * Adding task to check database existance * Improving start script * Improving Makefile's recipes and target * Adding task to check database existance * Improving start script * Improving Makefile's recipes and target * Improving Makefile's recipes and target * Patching https://github.com/publiclab/mapknitter/pull/803 * Improving Jenkins setup * initial working functionality complete * Fix map loading * h * Fixing Leaflet-Environmental-Layers map loading * h * leaflet * fix * change * updates * stop precompiling assets * precompile * Using correct Yarn, NPM and Node version, avoiding mismatch * Removing unwanted tags.js invocation * Improving Makefile recipe * Using node_modules/ as dependencies folder, since https://github.com/sass/node-sass/issues/2050#issuecomment-317233552 * Upgrading Yarn dependencies * Removing duplicate rubocop directive * Removing test/ from codeclimate checks * Removing fixed FIXME comments * Removing fixed FIXME comments * Updating docs in README * Refactoring code * Bumping recaptcha and include methods * Adding Foreman gem * Scheduling Puma and Passenger servers * WIP action cable setup * basic action cable setup complete * minor change * minor changes * few changes * initial working functionality complete * Refactoring code * Adding Foreman gem * Scheduling Puma and Passenger servers * few minor fix * added a few tests * Refactoring connection module * Fixing migration version * Using strong params in requests * Using strong params in requests * Use Rack::Test::UploadedFile instead of ActionDispatch::Http::UploadedFile * added documentation * added more docs * added tests * Fix minor asset issue * Remove manual asset references and add them to application js * Fix asset ordering in application.js * Configure System tests (#936) * Add new system tests and fix minor asset loading * modify test * Add chromedriver to travis * Add sudo * Add dependencies to dockerfile * Properly installing chrome and chromedriver * Using puma as dependency and correct image controller * added a few tests * a few changes * remove unnecessary render * few test fixes * action cable setup (#805) * WIP action cable setup * basic action cable setup complete * minor change * minor changes * few changes * initial working functionality complete * Refactoring code * Adding Foreman gem * Scheduling Puma and Passenger servers * WIP action cable setup * basic action cable setup complete * minor change * minor changes * few changes * initial working functionality complete * Refactoring code * Adding Foreman gem * Scheduling Puma and Passenger servers * few minor fix * added a few tests * Refactoring connection module * Using strong params in requests * added documentation * added more docs * added tests * Using puma as dependency and correct image controller * added a few tests * a few changes * remove unnecessary render * few test fixes * Fixing CodeClimate issues * Synch editing add ons (#957) * few bug fixes * separate editing channels for different maps * test fixes * rubocop fixes * Undoing unwanted pattern set by Rubocop
126 lines
3.9 KiB
Ruby
126 lines
3.9 KiB
Ruby
require 'open-uri'
|
|
class ImagesController < ApplicationController
|
|
rescue_from Errno::ENOENT, Errno::ETIMEDOUT,
|
|
OpenURI::HTTPError, Timeout::Error,
|
|
with: :url_upload_not_found
|
|
protect_from_forgery except: %i(update delete)
|
|
# Convert model to json without including root name. Eg. 'warpable'
|
|
ActiveRecord::Base.include_root_in_json = false
|
|
|
|
# proxy, used if MapKnitter is being backed by Amazon S3 file storage,
|
|
# to enable client-side distortion using webgl-distort, which requires same-origin
|
|
def fetch
|
|
if Rails.env.production?
|
|
if params[:url][0..42] == 'https://s3.amazonaws.com/grassrootsmapping/'
|
|
url = URI.parse(params[:url])
|
|
result = Net::HTTP.get_response(url)
|
|
send_data result.body, type: result.content_type, disposition: 'inline'
|
|
end
|
|
else
|
|
redirect_to params[:url]
|
|
end
|
|
end
|
|
|
|
# assign attributes directly after rails update
|
|
def create
|
|
@warpable = Warpable.new
|
|
@warpable.history = 'None'
|
|
@warpable.image = params[:uploaded_data]
|
|
map = Map.find_by(slug: params[:map_id])
|
|
@warpable.map_id = map.id
|
|
map.updated_at = Time.now
|
|
map.save
|
|
respond_to do |format|
|
|
if @warpable.save
|
|
format.html { render json: [@warpable.fup_json].to_json, content_type: 'text/html' }
|
|
format.json { render json: { files: [@warpable.fup_json] }, status: :created, location: @warpable.image.url }
|
|
else
|
|
format.html { render action: 'new' }
|
|
format.json { render json: { files: [@warpable.fup_error_json] }, layout: false }
|
|
end
|
|
end
|
|
end
|
|
|
|
# mapknitter.org/import/<map-name>/?url=http://myurl.com/image.jpg
|
|
def import
|
|
map = Map.find_by_name params[:name]
|
|
@warpable = Warpable.new
|
|
@warpable.map_id = map.id
|
|
@warpable.url = params[:url]
|
|
map.updated_at = Time.now
|
|
map.save
|
|
if @warpable.save
|
|
redirect_to '/maps/' + params[:name]
|
|
else
|
|
flash[:notice] = 'Sorry, the image failed to import.'
|
|
redirect_to '/map/edit/' + params[:name]
|
|
end
|
|
end
|
|
|
|
def url_upload_not_found
|
|
flash[:notice] = 'Sorry, the URL you provided was not valid.'
|
|
redirect_to '/map/edit/' + params[:id]
|
|
end
|
|
|
|
def show
|
|
@image = Warpable.find params[:id]
|
|
respond_to do |format|
|
|
format.html
|
|
format.json { render json: @image.map(&:fup_json) }
|
|
end
|
|
end
|
|
|
|
def update
|
|
@warpable = Warpable.find params[:warpable_id]
|
|
|
|
if Map.find(@warpable.map_id).anonymous? || logged_in?
|
|
nodes = []
|
|
author = @warpable.map.author
|
|
# is it really necessary to make new points each time?
|
|
params[:points].split(':').each do |point|
|
|
lon = point.split(',')[0]
|
|
lat = point.split(',')[1]
|
|
node = Node.new(color: 'black',
|
|
lat: lat,
|
|
lon: lon,
|
|
author: author,
|
|
name: '')
|
|
node.save
|
|
nodes << node
|
|
end
|
|
@warpable.nodes = nodes.collect(&:id).join(',')
|
|
@warpable.locked = params[:locked]
|
|
@warpable.cm_per_pixel = @warpable.get_cm_per_pixel
|
|
@warpable.save
|
|
|
|
respond_to do |format|
|
|
format.html { render html: 'success' }
|
|
format.json { render json: @warpable.map.fetch_map_data }
|
|
end
|
|
else
|
|
render plain: 'You must be logged in to update the image, unless the map is anonymous.'
|
|
end
|
|
end
|
|
|
|
def revert
|
|
@warpable = Warpable.find params[:id]
|
|
version = @warpable.versions.find(params[:version])
|
|
version.reify&.save
|
|
redirect_to @warpable.map
|
|
end
|
|
|
|
def destroy
|
|
@warpable = Warpable.find params[:id]
|
|
if logged_in? && current_user.can_delete?(@warpable)
|
|
@warpable.destroy
|
|
respond_to do |format|
|
|
format.html { redirect_to @warpable.map }
|
|
format.json { render json: @warpable.map.fetch_map_data }
|
|
end
|
|
else
|
|
flash[:error] = 'You must be logged in to delete images.'
|
|
redirect_to '/login'
|
|
end
|
|
end
|
|
end
|