diff --git a/Gemfile b/Gemfile index 811e384..9484a01 100644 --- a/Gemfile +++ b/Gemfile @@ -1,67 +1,68 @@ source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '2.5.5' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '~> 5.2.3' # Use sqlite3 as the database for Active Record gem 'pg' # Use Puma as the app server gem 'puma', '~> 3.11' # Use SCSS for stylesheets gem 'sass-rails', '~> 5.0' # Use Uglifier as compressor for JavaScript assets gem 'uglifier', '>= 1.3.0' # See https://github.com/rails/execjs#readme for more supported runtimes # gem 'mini_racer', platforms: :ruby gem "chartkick" gem 'groupdate' gem "sentry-raven" gem 'telegram-bot' gem 'sidekiq' gem 'sidekiq-cron' +gem 'rails-assets-sweetalert2', '~> 5.1.1', source: 'https://rails-assets.org' # Use CoffeeScript for .coffee assets and views gem 'coffee-rails', '~> 4.2' # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks gem 'turbolinks', '~> 5' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.5' # Use Redis adapter to run Action Cable in production # gem 'redis', '~> 4.0' # Use ActiveModel has_secure_password # gem 'bcrypt', '~> 3.1.7' # Use ActiveStorage variant # gem 'mini_magick', '~> 4.8' # Use Capistrano for deployment # gem 'capistrano-rails', group: :development # Reduces boot times through caching; required in config/boot.rb gem 'bootsnap', '>= 1.1.0', require: false group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] end group :development do # Access an interactive console on exception pages or by calling 'console' anywhere in the code. gem 'web-console', '>= 3.3.0' gem 'listen', '>= 3.0.5', '< 3.2' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' end group :test do # Adds support for Capybara system testing and selenium driver gem 'capybara', '>= 2.15' gem 'selenium-webdriver' # Easy installation and use of chromedriver to run system tests with Chrome gem 'chromedriver-helper' end # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] diff --git a/Gemfile.lock b/Gemfile.lock index 85f4961..6faf973 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,254 +1,259 @@ GEM remote: https://rubygems.org/ + remote: https://rails-assets.org/ specs: actioncable (5.2.3) actionpack (= 5.2.3) nio4r (~> 2.0) websocket-driver (>= 0.6.1) actionmailer (5.2.3) actionpack (= 5.2.3) actionview (= 5.2.3) activejob (= 5.2.3) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 2.0) actionpack (5.2.3) actionview (= 5.2.3) activesupport (= 5.2.3) rack (~> 2.0) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.2) actionview (5.2.3) activesupport (= 5.2.3) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.3) activejob (5.2.3) activesupport (= 5.2.3) globalid (>= 0.3.6) activemodel (5.2.3) activesupport (= 5.2.3) activerecord (5.2.3) activemodel (= 5.2.3) activesupport (= 5.2.3) arel (>= 9.0) activestorage (5.2.3) actionpack (= 5.2.3) activerecord (= 5.2.3) marcel (~> 0.3.1) activesupport (5.2.3) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 0.7, < 2) minitest (~> 5.1) tzinfo (~> 1.1) addressable (2.6.0) public_suffix (>= 2.0.2, < 4.0) archive-zip (0.12.0) io-like (~> 0.3.0) arel (9.0.0) bindex (0.8.1) bootsnap (1.4.4) msgpack (~> 1.0) builder (3.2.3) byebug (11.0.1) capybara (3.28.0) addressable mini_mime (>= 0.1.3) nokogiri (~> 1.8) rack (>= 1.6.0) rack-test (>= 0.6.3) regexp_parser (~> 1.5) xpath (~> 3.2) chartkick (3.2.1) childprocess (1.0.1) rake (< 13.0) chromedriver-helper (2.1.1) archive-zip (~> 0.10) nokogiri (~> 1.8) coffee-rails (4.2.2) coffee-script (>= 2.2.0) railties (>= 4.0.0) coffee-script (2.4.1) coffee-script-source execjs coffee-script-source (1.12.2) concurrent-ruby (1.1.5) connection_pool (2.2.2) crass (1.0.4) erubi (1.8.0) et-orbi (1.2.1) tzinfo execjs (2.7.0) faraday (0.15.4) multipart-post (>= 1.2, < 3) ffi (1.11.1) fugit (1.3.2) et-orbi (~> 1.1, >= 1.1.8) raabro (~> 1.1) globalid (0.4.2) activesupport (>= 4.2.0) groupdate (4.1.2) activesupport (>= 4.2) httpclient (2.8.3) i18n (1.6.0) concurrent-ruby (~> 1.0) io-like (0.3.0) jbuilder (2.9.1) activesupport (>= 4.2.0) listen (3.1.5) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) ruby_dep (~> 1.2) loofah (2.2.3) crass (~> 1.0.2) nokogiri (>= 1.5.9) mail (2.7.1) mini_mime (>= 0.1.1) marcel (0.3.3) mimemagic (~> 0.3.2) method_source (0.9.2) mimemagic (0.3.3) mini_mime (1.0.2) mini_portile2 (2.4.0) minitest (5.11.3) msgpack (1.3.1) multipart-post (2.1.1) nio4r (2.4.0) nokogiri (1.10.3) mini_portile2 (~> 2.4.0) pg (1.1.4) public_suffix (3.1.1) puma (3.12.1) raabro (1.1.6) rack (2.0.7) rack-protection (2.0.5) rack rack-test (1.1.0) rack (>= 1.0, < 3) rails (5.2.3) actioncable (= 5.2.3) actionmailer (= 5.2.3) actionpack (= 5.2.3) actionview (= 5.2.3) activejob (= 5.2.3) activemodel (= 5.2.3) activerecord (= 5.2.3) activestorage (= 5.2.3) activesupport (= 5.2.3) bundler (>= 1.3.0) railties (= 5.2.3) sprockets-rails (>= 2.0.0) + rails-assets-es6-promise (4.2.4) + rails-assets-sweetalert2 (5.1.1) + rails-assets-es6-promise rails-dom-testing (2.0.3) activesupport (>= 4.2.0) nokogiri (>= 1.6) rails-html-sanitizer (1.2.0) loofah (~> 2.2, >= 2.2.2) railties (5.2.3) actionpack (= 5.2.3) activesupport (= 5.2.3) method_source rake (>= 0.8.7) thor (>= 0.19.0, < 2.0) rake (12.3.3) rb-fsevent (0.10.3) rb-inotify (0.10.0) ffi (~> 1.0) redis (4.1.2) regexp_parser (1.6.0) ruby_dep (1.5.0) rubyzip (1.2.3) sass (3.7.4) sass-listen (~> 4.0.0) sass-listen (4.0.0) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) sass-rails (5.0.7) railties (>= 4.0.0, < 6) sass (~> 3.1) sprockets (>= 2.8, < 4.0) sprockets-rails (>= 2.0, < 4.0) tilt (>= 1.1, < 3) selenium-webdriver (3.142.3) childprocess (>= 0.5, < 2.0) rubyzip (~> 1.2, >= 1.2.2) sentry-raven (2.11.0) faraday (>= 0.7.6, < 1.0) sidekiq (5.2.7) connection_pool (~> 2.2, >= 2.2.2) rack (>= 1.5.0) rack-protection (>= 1.5.0) redis (>= 3.3.5, < 5) sidekiq-cron (1.1.0) fugit (~> 1.1) sidekiq (>= 4.2.1) spring (2.1.0) spring-watcher-listen (2.0.1) listen (>= 2.7, < 4.0) spring (>= 1.2, < 3.0) sprockets (3.7.2) concurrent-ruby (~> 1.0) rack (> 1, < 3) sprockets-rails (3.2.1) actionpack (>= 4.0) activesupport (>= 4.0) sprockets (>= 3.0.0) telegram-bot (0.14.2) actionpack (>= 4.0, < 6.0) activesupport (>= 4.0, < 6.0) httpclient (~> 2.7) thor (0.20.3) thread_safe (0.3.6) tilt (2.0.9) turbolinks (5.2.0) turbolinks-source (~> 5.2) turbolinks-source (5.2.0) tzinfo (1.2.5) thread_safe (~> 0.1) uglifier (4.1.20) execjs (>= 0.3.0, < 3) web-console (3.7.0) actionview (>= 5.0) activemodel (>= 5.0) bindex (>= 0.4.0) railties (>= 5.0) websocket-driver (0.7.1) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.4) xpath (3.2.0) nokogiri (~> 1.8) PLATFORMS ruby DEPENDENCIES bootsnap (>= 1.1.0) byebug capybara (>= 2.15) chartkick chromedriver-helper coffee-rails (~> 4.2) groupdate jbuilder (~> 2.5) listen (>= 3.0.5, < 3.2) pg puma (~> 3.11) rails (~> 5.2.3) + rails-assets-sweetalert2 (~> 5.1.1)! sass-rails (~> 5.0) selenium-webdriver sentry-raven sidekiq sidekiq-cron spring spring-watcher-listen (~> 2.0.0) telegram-bot turbolinks (~> 5) tzinfo-data uglifier (>= 1.3.0) web-console (>= 3.3.0) RUBY VERSION ruby 2.5.5p157 BUNDLED WITH 2.0.2 diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 4f7aac4..2d5abb6 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -1,18 +1,83 @@ // This is a manifest file that'll be compiled into application.js, which will include all the files // listed below. // // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, or any plugin's // vendor/assets/javascripts directory can be referenced here using a relative path. // // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the // compiled file. JavaScript code in this file should be added after the last require_* statement. // // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details // about supported directives. // //= require rails-ujs //= require activestorage //= require turbolinks //= require chartkick //= require Chart.bundle //= require_tree . + +function getAllUrlParams(url) { + + // get query string from url (optional) or window + var queryString = url ? url.split('?')[1] : window.location.search.slice(1); + + // we'll store the parameters here + var obj = {}; + + // if query string exists + if (queryString) { + + // stuff after # is not part of query string, so get rid of it + queryString = queryString.split('#')[0]; + + // split our query string into its component parts + var arr = queryString.split('&'); + + for (var i = 0; i < arr.length; i++) { + // separate the keys and the values + var a = arr[i].split('='); + + // set parameter name and value (use 'true' if empty) + var paramName = a[0]; + var paramValue = typeof (a[1]) === 'undefined' ? true : a[1]; + + // (optional) keep case consistent + paramName = paramName.toLowerCase(); + if (typeof paramValue === 'string') paramValue = paramValue.toLowerCase(); + + // if the paramName ends with square brackets, e.g. colors[] or colors[2] + if (paramName.match(/\[(\d+)?\]$/)) { + + // create key if it doesn't exist + var key = paramName.replace(/\[(\d+)?\]/, ''); + if (!obj[key]) obj[key] = []; + + // if it's an indexed array e.g. colors[2] + if (paramName.match(/\[\d+\]$/)) { + // get the index value and add the entry at the appropriate position + var index = /\[(\d+)\]/.exec(paramName)[1]; + obj[key][index] = paramValue; + } else { + // otherwise add the value to the end of the array + obj[key].push(paramValue); + } + } else { + // we're dealing with a string + if (!obj[paramName]) { + // if it doesn't exist, create property + obj[paramName] = paramValue; + } else if (obj[paramName] && typeof obj[paramName] === 'string'){ + // if property does exist and it's a string, convert it to an array + obj[paramName] = [obj[paramName]]; + obj[paramName].push(paramValue); + } else { + // otherwise add the property + obj[paramName].push(paramValue); + } + } + } + } + + return obj; +} \ No newline at end of file diff --git a/app/assets/stylesheets/standardpage.scss b/app/assets/stylesheets/standardpage.scss index f1c3473..3b41528 100644 --- a/app/assets/stylesheets/standardpage.scss +++ b/app/assets/stylesheets/standardpage.scss @@ -1,3 +1,15 @@ // Place all the styles related to the standardpage controller here. // They will automatically be included in application.css. // You can use Sass (SCSS) here: http://sass-lang.com/ +.button { + padding: .9em 2.1875em; + border: 0; + border-radius: .1875em; + background-color: #3085d6; + box-shadow: none; + color: #fff; + font-size: 1.125em; + font-weight: 500; + white-space: nowrap; + cursor: pointer; +} \ No newline at end of file diff --git a/app/controllers/standardpage_controller.rb b/app/controllers/standardpage_controller.rb index 65fb4df..a2d0939 100644 --- a/app/controllers/standardpage_controller.rb +++ b/app/controllers/standardpage_controller.rb @@ -1,17 +1,40 @@ class StandardpageController < ApplicationController def classifica @groups = Group.all.sort_by{|sender| sender.asds.totalcount}.reverse @senders = Sender.all.sort_by{|sender| sender.asds.totalcount}.reverse end + def usernametoid + if params[:username].split('@').count == 2 + params[:username] = params[:username].split('@')[1] + end + if Group.where('lower(username) LIKE lower(?)', "#{params[:username]}").any? + @group = Group.where('lower(username) LIKE lower(?)', "#{params[:username]}").first + respond_to do |format| + format.json { render json: {status: '200', chat_id: @group.chat_id} } + end + elsif Sender.where('lower(username) LIKE lower(?)', "#{params[:username]}").any? + @sender = Sender.where('lower(username) LIKE lower(?)', "#{params[:username]}").first + respond_to do |format| + format.json { render json: {status: '201', chat_id: @sender.chat_id} } + end + else + respond_to do |format| + error = { status: '404' } + format.json { render json: error, status: :not_found} + end + end + end + def grafico if !params[:s].nil? @sender = Sender.find_by(chat_id: params[:s]) elsif !params[:g].nil? @group = Group.find_by(chat_id: params[:g]) end end def home + ENV['DOMAIN'] = "http://0.0.0.0:3000" end end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index e820bae..bb5193e 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -1,20 +1,22 @@ Asdbot <%= csrf_meta_tags %> <%= csp_meta_tag %> <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> + + <%= yield %>
Sviluppato con cuore da Ferdinando Traversa - Blog - Github - Basato su Rails 5
Aggiungilo ai tuoi gruppi --> AsdCounterBot
diff --git a/app/views/standardpage/grafico.html.erb b/app/views/standardpage/grafico.html.erb index fb0ecd6..630474f 100644 --- a/app/views/standardpage/grafico.html.erb +++ b/app/views/standardpage/grafico.html.erb @@ -1,7 +1,19 @@ <% unless @sender.nil? %> <%= line_chart Asd.where(sender: @sender).group_by_day(:created_at).totalcount %> <% end %> <% unless @group.nil? %> <%= line_chart Asd.where(group: @group).group_by_day(:created_at).totalcount %> <% end %> + + diff --git a/app/views/standardpage/home.html.erb b/app/views/standardpage/home.html.erb index 9bdd698..078c892 100644 --- a/app/views/standardpage/home.html.erb +++ b/app/views/standardpage/home.html.erb @@ -1 +1,49 @@

AsdBot

+ diff --git a/config/routes.rb b/config/routes.rb index 3a6aaa3..26e27af 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,7 +1,8 @@ Rails.application.routes.draw do root 'standardpage#home' post 'message_process', to: 'message#message_process' get 'classifica', to: 'standardpage#classifica' get 'grafico', to: 'standardpage#grafico' + get 'usernametoid', to: 'standardpage#usernametoid' # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html end diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..fb57ccd --- /dev/null +++ b/yarn.lock @@ -0,0 +1,4 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + +