diff --git a/.gitignore b/.gitignore index 06e2d86..119ca25 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,8 @@ /tmp/* !/log/.keep !/tmp/.keep +*~ +._* /node_modules /yarn-error.log @@ -28,13 +30,31 @@ capybara-*.html /vendor/bundle config/config.yml* +config/initializers/smtp_settings.rb config/database.yml* dump.rdb* +config/environment.rb +config/initializers/devise.rb +config/initializers/carrierwave-aws.rb + + public/fontello-demo.html public/javascripts public/assets/ +public/media log nohup.out .ruby-version + +# Ignore encrypted secrets key file. +config/secrets.yml.key +config/secrets.yml + +.DS_STORE +public/uploads +public/concursos_assets/ +yarn.lock + + diff --git a/Gemfile b/Gemfile index 5bd3991..1dc6aad 100644 --- a/Gemfile +++ b/Gemfile @@ -6,7 +6,7 @@ git_source(:github) do |repo_name| end - +gem "annotate" # Use mysql as the database for Active Record gem 'mysql2', '>= 0.3.18', '< 0.6.0' # Use Puma as the app server @@ -54,6 +54,8 @@ gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] gem 'ancestry' gem 'bootstrap', '~> 4.5.0' +gem 'carrierwave' +gem 'carrierwave-aws' gem 'cocoon' gem 'devise' gem 'font-awesome-rails' @@ -61,3 +63,5 @@ gem 'fontello_rails_converter', git: 'https://github.com/railslove/fontello_rail gem 'jquery-rails' gem 'rails', '5.1.6.2' gem 'simple_form' +gem 'aws-sdk-s3', '~> 1' # Necesaria para AWS + diff --git a/Gemfile.lock b/Gemfile.lock index 0742f72..f2ad39a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -52,9 +52,28 @@ GEM public_suffix (>= 2.0.2, < 5.0) ancestry (3.2.1) activerecord (>= 4.2.0) + annotate (3.2.0) + activerecord (>= 3.2, < 8.0) + rake (>= 10.4, < 14.0) arel (8.0.0) autoprefixer-rails (10.2.5.1) execjs (> 0) + aws-eventstream (1.2.0) + aws-partitions (1.535.0) + aws-sdk-core (3.123.0) + aws-eventstream (~> 1, >= 1.0.2) + aws-partitions (~> 1, >= 1.525.0) + aws-sigv4 (~> 1.1) + jmespath (~> 1.0) + aws-sdk-kms (1.51.0) + aws-sdk-core (~> 3, >= 3.122.0) + aws-sigv4 (~> 1.1) + aws-sdk-s3 (1.107.0) + aws-sdk-core (~> 3, >= 3.122.0) + aws-sdk-kms (~> 1) + aws-sigv4 (~> 1.4) + aws-sigv4 (1.4.0) + aws-eventstream (~> 1, >= 1.0.2) bcrypt (3.1.16) bindex (0.8.1) bootstrap (4.5.3) @@ -70,6 +89,17 @@ GEM rack (>= 1.0.0) rack-test (>= 0.5.4) xpath (>= 2.0, < 4.0) + carrierwave (2.2.2) + activemodel (>= 5.0.0) + activesupport (>= 5.0.0) + addressable (~> 2.6) + image_processing (~> 1.1) + marcel (~> 1.0.0) + mini_mime (>= 0.1.3) + ssrf_filter (~> 1.0) + carrierwave-aws (1.5.0) + aws-sdk-s3 (~> 1.0) + carrierwave (~> 2.0) childprocess (3.0.0) cocoon (1.2.15) coffee-rails (4.2.2) @@ -101,8 +131,12 @@ GEM domain_name (~> 0.5) i18n (1.8.10) concurrent-ruby (~> 1.0) + image_processing (1.12.1) + mini_magick (>= 4.9.5, < 5) + ruby-vips (>= 2.0.17, < 3) jbuilder (2.11.2) activesupport (>= 5.0.0) + jmespath (1.4.0) jquery-rails (4.4.0) rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) @@ -118,10 +152,12 @@ GEM nokogiri (>= 1.5.9) mail (2.7.1) mini_mime (>= 0.1.1) + marcel (1.0.2) method_source (1.0.0) mime-types (3.3.1) mime-types-data (~> 3.2015) mime-types-data (3.2021.0225) + mini_magick (4.11.0) mini_mime (1.1.0) mini_portile2 (2.5.3) minitest (5.14.4) @@ -174,6 +210,8 @@ GEM http-cookie (>= 1.0.2, < 2.0) mime-types (>= 1.16, < 4.0) netrc (~> 0.8) + ruby-vips (2.1.3) + ffi (~> 1.12) ruby_dep (1.5.0) rubyzip (1.3.0) sass (3.7.4) @@ -212,6 +250,7 @@ GEM actionpack (>= 4.0) activesupport (>= 4.0) sprockets (>= 3.0.0) + ssrf_filter (1.0.7) thor (1.1.0) thread_safe (0.3.6) tilt (2.0.10) @@ -243,10 +282,14 @@ PLATFORMS DEPENDENCIES ancestry + annotate + aws-sdk-s3 (~> 1) bcrypt (~> 3.1.7) bootstrap (~> 4.5.0) byebug capybara (~> 2.13) + carrierwave + carrierwave-aws cocoon coffee-rails (~> 4.2) devise @@ -269,4 +312,4 @@ DEPENDENCIES web-console (>= 3.3.0) BUNDLED WITH - 2.0.1 + 2.4.1 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..06967a9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 CONABIO + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 7db80e4..a5d74f6 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,8 @@ # README -This README would normally document whatever steps are necessary to get the -application up and running. +Esta aplicación es la base para los concursos de dibujo y de fotografía que realiza anualmente la CONABIO -Things you may want to cover: +TODO: * Ruby version diff --git a/app/assets/fonts/chicken-pie/chicken-pie-height.otf b/app/assets/fonts/chicken-pie/chicken-pie-height.otf new file mode 100644 index 0000000..8bd8ad1 Binary files /dev/null and b/app/assets/fonts/chicken-pie/chicken-pie-height.otf differ diff --git a/app/assets/fonts/chicken-pie/chicken-pie-height.ttf b/app/assets/fonts/chicken-pie/chicken-pie-height.ttf new file mode 100644 index 0000000..c6a0026 Binary files /dev/null and b/app/assets/fonts/chicken-pie/chicken-pie-height.ttf differ diff --git a/app/assets/fonts/chicken-pie/chicken-pie.otf b/app/assets/fonts/chicken-pie/chicken-pie.otf new file mode 100644 index 0000000..b80d9b1 Binary files /dev/null and b/app/assets/fonts/chicken-pie/chicken-pie.otf differ diff --git a/app/assets/fonts/chicken-pie/chicken-pie.ttf b/app/assets/fonts/chicken-pie/chicken-pie.ttf new file mode 100644 index 0000000..c37c33c Binary files /dev/null and b/app/assets/fonts/chicken-pie/chicken-pie.ttf differ diff --git a/app/assets/images/entre_azul_y_verde/AngelicaSanchez.jpg b/app/assets/images/entre_azul_y_verde/AngelicaSanchez.jpg new file mode 100644 index 0000000..fa4b08b Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/AngelicaSanchez.jpg differ diff --git a/app/assets/images/entre_azul_y_verde/AnuncioFB-2021.jpg b/app/assets/images/entre_azul_y_verde/AnuncioFB-2021.jpg new file mode 100755 index 0000000..ec4d8ce Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/AnuncioFB-2021.jpg differ diff --git a/app/assets/images/entre_azul_y_verde/AnuncioFBlogos-2021.jpg b/app/assets/images/entre_azul_y_verde/AnuncioFBlogos-2021.jpg new file mode 100755 index 0000000..e023feb Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/AnuncioFBlogos-2021.jpg differ diff --git a/app/assets/images/entre_azul_y_verde/Convocatoria-Entre_azul_y_verde-2021.pdf b/app/assets/images/entre_azul_y_verde/Convocatoria-Entre_azul_y_verde-2021.pdf new file mode 100755 index 0000000..1e4863c Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/Convocatoria-Entre_azul_y_verde-2021.pdf differ diff --git a/app/assets/images/entre_azul_y_verde/Entre_azul_y_verde_19seg.mp3 b/app/assets/images/entre_azul_y_verde/Entre_azul_y_verde_19seg.mp3 new file mode 100644 index 0000000..f229ae5 Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/Entre_azul_y_verde_19seg.mp3 differ diff --git a/app/assets/images/entre_azul_y_verde/Entre_azul_y_verde_32seg.mp3 b/app/assets/images/entre_azul_y_verde/Entre_azul_y_verde_32seg.mp3 new file mode 100644 index 0000000..c29ec65 Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/Entre_azul_y_verde_32seg.mp3 differ diff --git a/app/assets/images/entre_azul_y_verde/JoelRodriguez.jpg b/app/assets/images/entre_azul_y_verde/JoelRodriguez.jpg new file mode 100644 index 0000000..1a5daf4 Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/JoelRodriguez.jpg differ diff --git a/app/assets/images/entre_azul_y_verde/MontserratGarcia.jpg b/app/assets/images/entre_azul_y_verde/MontserratGarcia.jpg new file mode 100644 index 0000000..b0a5b06 Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/MontserratGarcia.jpg differ diff --git a/app/assets/images/entre_azul_y_verde/SPOT-entreAzulyVerde2021.mp4 b/app/assets/images/entre_azul_y_verde/SPOT-entreAzulyVerde2021.mp4 new file mode 100644 index 0000000..36aacb1 Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/SPOT-entreAzulyVerde2021.mp4 differ diff --git a/app/assets/images/entre_azul_y_verde/SPOT-entreAzulyVerde2022.mp4 b/app/assets/images/entre_azul_y_verde/SPOT-entreAzulyVerde2022.mp4 new file mode 100644 index 0000000..ccab040 Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/SPOT-entreAzulyVerde2022.mp4 differ diff --git a/app/assets/images/entre_azul_y_verde/bases-06.png b/app/assets/images/entre_azul_y_verde/bases-06.png new file mode 100644 index 0000000..1d35654 Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/bases-06.png differ diff --git a/app/assets/images/entre_azul_y_verde/bases-07.png b/app/assets/images/entre_azul_y_verde/bases-07.png new file mode 100644 index 0000000..c3de837 Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/bases-07.png differ diff --git a/app/assets/images/entre_azul_y_verde/bases-08.png b/app/assets/images/entre_azul_y_verde/bases-08.png new file mode 100644 index 0000000..a917a04 Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/bases-08.png differ diff --git a/app/assets/images/entre_azul_y_verde/bases.png b/app/assets/images/entre_azul_y_verde/bases.png index 009a294..3ec0da9 100644 Binary files a/app/assets/images/entre_azul_y_verde/bases.png and b/app/assets/images/entre_azul_y_verde/bases.png differ diff --git a/app/assets/images/entre_azul_y_verde/faq-01.png b/app/assets/images/entre_azul_y_verde/faq-01.png new file mode 100644 index 0000000..d772a3a Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/faq-01.png differ diff --git a/app/assets/images/entre_azul_y_verde/fondo.jpg b/app/assets/images/entre_azul_y_verde/fondo.jpg index f4bcf96..127997d 100644 Binary files a/app/assets/images/entre_azul_y_verde/fondo.jpg and b/app/assets/images/entre_azul_y_verde/fondo.jpg differ diff --git a/app/assets/images/entre_azul_y_verde/ganadores.png b/app/assets/images/entre_azul_y_verde/ganadores.png new file mode 100644 index 0000000..04a3196 Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/ganadores.png differ diff --git a/app/assets/images/entre_azul_y_verde/inscripcion-der.png b/app/assets/images/entre_azul_y_verde/inscripcion-der.png new file mode 100644 index 0000000..e421c7e Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/inscripcion-der.png differ diff --git a/app/assets/images/entre_azul_y_verde/inscripcion-izq.png b/app/assets/images/entre_azul_y_verde/inscripcion-izq.png new file mode 100644 index 0000000..a74c1d6 Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/inscripcion-izq.png differ diff --git a/app/assets/images/entre_azul_y_verde/inscripcion.png b/app/assets/images/entre_azul_y_verde/inscripcion.png deleted file mode 100644 index 6a6cd5f..0000000 Binary files a/app/assets/images/entre_azul_y_verde/inscripcion.png and /dev/null differ diff --git a/app/assets/images/entre_azul_y_verde/intro-logos.png b/app/assets/images/entre_azul_y_verde/intro-logos.png new file mode 100644 index 0000000..3790d28 Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/intro-logos.png differ diff --git a/app/assets/images/entre_azul_y_verde/intro.png b/app/assets/images/entre_azul_y_verde/intro.png index 0b5c3b8..6a7443c 100644 Binary files a/app/assets/images/entre_azul_y_verde/intro.png and b/app/assets/images/entre_azul_y_verde/intro.png differ diff --git a/app/assets/images/entre_azul_y_verde/jurado.png b/app/assets/images/entre_azul_y_verde/jurado.png new file mode 100644 index 0000000..acd25a0 Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/jurado.png differ diff --git a/app/assets/images/entre_azul_y_verde/logotipompm-2.png b/app/assets/images/entre_azul_y_verde/logotipompm-2.png new file mode 100644 index 0000000..29948b5 Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/logotipompm-2.png differ diff --git a/app/assets/images/entre_azul_y_verde/menciones.png b/app/assets/images/entre_azul_y_verde/menciones.png new file mode 100644 index 0000000..14892d0 Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/menciones.png differ diff --git a/app/assets/images/entre_azul_y_verde/pais_maravillas.png b/app/assets/images/entre_azul_y_verde/pais_maravillas.png new file mode 100644 index 0000000..4506856 Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/pais_maravillas.png differ diff --git a/app/assets/images/entre_azul_y_verde/pasos1.png b/app/assets/images/entre_azul_y_verde/pasos1.png new file mode 100644 index 0000000..3049d79 Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/pasos1.png differ diff --git a/app/assets/images/entre_azul_y_verde/pasos2.png b/app/assets/images/entre_azul_y_verde/pasos2.png new file mode 100644 index 0000000..909a2e9 Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/pasos2.png differ diff --git a/app/assets/images/entre_azul_y_verde/pasos3.png b/app/assets/images/entre_azul_y_verde/pasos3.png new file mode 100644 index 0000000..2c1a4b8 Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/pasos3.png differ diff --git a/app/assets/images/entre_azul_y_verde/pasos4.png b/app/assets/images/entre_azul_y_verde/pasos4.png new file mode 100644 index 0000000..c16c509 Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/pasos4.png differ diff --git a/app/assets/images/entre_azul_y_verde/pasos5.png b/app/assets/images/entre_azul_y_verde/pasos5.png new file mode 100644 index 0000000..821282a Binary files /dev/null and b/app/assets/images/entre_azul_y_verde/pasos5.png differ diff --git a/app/assets/images/mosaico_natura/.keep b/app/assets/images/mosaico_natura/.keep new file mode 100644 index 0000000..e69de29 diff --git a/app/assets/images/mosaico_natura/Invitacion1.jpg b/app/assets/images/mosaico_natura/Invitacion1.jpg new file mode 100644 index 0000000..027477c Binary files /dev/null and b/app/assets/images/mosaico_natura/Invitacion1.jpg differ diff --git a/app/assets/images/mosaico_natura/Invitacion2.jpg b/app/assets/images/mosaico_natura/Invitacion2.jpg new file mode 100644 index 0000000..f86efef Binary files /dev/null and b/app/assets/images/mosaico_natura/Invitacion2.jpg differ diff --git a/app/assets/images/mosaico_natura/Invitacion3.jpg b/app/assets/images/mosaico_natura/Invitacion3.jpg new file mode 100644 index 0000000..0f2623a Binary files /dev/null and b/app/assets/images/mosaico_natura/Invitacion3.jpg differ diff --git a/app/assets/images/mosaico_natura/PortadaWeb6to.jpg b/app/assets/images/mosaico_natura/PortadaWeb6to.jpg new file mode 100755 index 0000000..bc101d0 Binary files /dev/null and b/app/assets/images/mosaico_natura/PortadaWeb6to.jpg differ diff --git a/app/assets/images/mosaico_natura/PortadaWeb7to-logos.jpg b/app/assets/images/mosaico_natura/PortadaWeb7to-logos.jpg new file mode 100644 index 0000000..a4316eb Binary files /dev/null and b/app/assets/images/mosaico_natura/PortadaWeb7to-logos.jpg differ diff --git a/app/assets/images/mosaico_natura/PortadaWeb7to-v2.jpg b/app/assets/images/mosaico_natura/PortadaWeb7to-v2.jpg new file mode 100644 index 0000000..7c08097 Binary files /dev/null and b/app/assets/images/mosaico_natura/PortadaWeb7to-v2.jpg differ diff --git a/app/assets/images/mosaico_natura/PortadaWeb7to.jpg b/app/assets/images/mosaico_natura/PortadaWeb7to.jpg new file mode 100644 index 0000000..762d2e3 Binary files /dev/null and b/app/assets/images/mosaico_natura/PortadaWeb7to.jpg differ diff --git a/app/assets/images/mosaico_natura/SpotConcursoMN6.mp3 b/app/assets/images/mosaico_natura/SpotConcursoMN6.mp3 new file mode 100644 index 0000000..78d4154 Binary files /dev/null and b/app/assets/images/mosaico_natura/SpotConcursoMN6.mp3 differ diff --git a/app/assets/images/mosaico_natura/bases_cineminuto.png b/app/assets/images/mosaico_natura/bases_cineminuto.png new file mode 100755 index 0000000..3cdc12c Binary files /dev/null and b/app/assets/images/mosaico_natura/bases_cineminuto.png differ diff --git a/app/assets/images/mosaico_natura/bases_fauna.png b/app/assets/images/mosaico_natura/bases_fauna.png new file mode 100755 index 0000000..4c7a4f8 Binary files /dev/null and b/app/assets/images/mosaico_natura/bases_fauna.png differ diff --git "a/app/assets/images/mosaico_natura/bases_fotograf\303\255a_a\303\251rea.png" "b/app/assets/images/mosaico_natura/bases_fotograf\303\255a_a\303\251rea.png" new file mode 100755 index 0000000..e24aff2 Binary files /dev/null and "b/app/assets/images/mosaico_natura/bases_fotograf\303\255a_a\303\251rea.png" differ diff --git "a/app/assets/images/mosaico_natura/bases_fotograf\303\255a_subacu\303\241tica.png" "b/app/assets/images/mosaico_natura/bases_fotograf\303\255a_subacu\303\241tica.png" new file mode 100755 index 0000000..0b7b14e Binary files /dev/null and "b/app/assets/images/mosaico_natura/bases_fotograf\303\255a_subacu\303\241tica.png" differ diff --git a/app/assets/images/mosaico_natura/bases_naturaleza_y_ser_humano.png b/app/assets/images/mosaico_natura/bases_naturaleza_y_ser_humano.png new file mode 100755 index 0000000..8af9cf0 Binary files /dev/null and b/app/assets/images/mosaico_natura/bases_naturaleza_y_ser_humano.png differ diff --git a/app/assets/images/mosaico_natura/bases_paisajes_con_ecosistemas.png b/app/assets/images/mosaico_natura/bases_paisajes_con_ecosistemas.png new file mode 100755 index 0000000..f441171 Binary files /dev/null and b/app/assets/images/mosaico_natura/bases_paisajes_con_ecosistemas.png differ diff --git "a/app/assets/images/mosaico_natura/bases_peque\303\261os_gigantes.png" "b/app/assets/images/mosaico_natura/bases_peque\303\261os_gigantes.png" new file mode 100755 index 0000000..1fb990c Binary files /dev/null and "b/app/assets/images/mosaico_natura/bases_peque\303\261os_gigantes.png" differ diff --git a/app/assets/images/mosaico_natura/bases_plantas_y_hongos.png b/app/assets/images/mosaico_natura/bases_plantas_y_hongos.png new file mode 100755 index 0000000..44fcb51 Binary files /dev/null and b/app/assets/images/mosaico_natura/bases_plantas_y_hongos.png differ diff --git a/app/assets/images/mosaico_natura/bases_tema_libre.png b/app/assets/images/mosaico_natura/bases_tema_libre.png new file mode 100755 index 0000000..7f8e299 Binary files /dev/null and b/app/assets/images/mosaico_natura/bases_tema_libre.png differ diff --git a/app/assets/images/mosaico_natura/bg-concurso.jpg b/app/assets/images/mosaico_natura/bg-concurso.jpg new file mode 100755 index 0000000..42e62b8 Binary files /dev/null and b/app/assets/images/mosaico_natura/bg-concurso.jpg differ diff --git a/app/assets/images/mosaico_natura/bg-exposiciones.jpg b/app/assets/images/mosaico_natura/bg-exposiciones.jpg new file mode 100755 index 0000000..eb6b7ec Binary files /dev/null and b/app/assets/images/mosaico_natura/bg-exposiciones.jpg differ diff --git a/app/assets/images/mosaico_natura/bg-ganadores.jpg b/app/assets/images/mosaico_natura/bg-ganadores.jpg new file mode 100755 index 0000000..65a47a4 Binary files /dev/null and b/app/assets/images/mosaico_natura/bg-ganadores.jpg differ diff --git a/app/assets/images/mosaico_natura/bg-legales.jpg b/app/assets/images/mosaico_natura/bg-legales.jpg new file mode 100755 index 0000000..f048dde Binary files /dev/null and b/app/assets/images/mosaico_natura/bg-legales.jpg differ diff --git a/app/assets/images/mosaico_natura/bg-medios.jpg b/app/assets/images/mosaico_natura/bg-medios.jpg new file mode 100755 index 0000000..5f6db8f Binary files /dev/null and b/app/assets/images/mosaico_natura/bg-medios.jpg differ diff --git a/app/assets/images/mosaico_natura/bg-quienesSomos.jpg b/app/assets/images/mosaico_natura/bg-quienesSomos.jpg new file mode 100755 index 0000000..420ee00 Binary files /dev/null and b/app/assets/images/mosaico_natura/bg-quienesSomos.jpg differ diff --git a/app/assets/images/mosaico_natura/colaboradoresplecaLogos.jpg b/app/assets/images/mosaico_natura/colaboradoresplecaLogos.jpg new file mode 100755 index 0000000..1376c8d Binary files /dev/null and b/app/assets/images/mosaico_natura/colaboradoresplecaLogos.jpg differ diff --git a/app/assets/images/mosaico_natura/ganadores.jpg b/app/assets/images/mosaico_natura/ganadores.jpg new file mode 100644 index 0000000..3f55676 Binary files /dev/null and b/app/assets/images/mosaico_natura/ganadores.jpg differ diff --git a/app/assets/images/mosaico_natura/logo-mosaiconatura.png b/app/assets/images/mosaico_natura/logo-mosaiconatura.png new file mode 100755 index 0000000..340099e Binary files /dev/null and b/app/assets/images/mosaico_natura/logo-mosaiconatura.png differ diff --git a/app/assets/images/mosaico_natura/logo-mosaiconaturav_gris.png b/app/assets/images/mosaico_natura/logo-mosaiconaturav_gris.png new file mode 100755 index 0000000..7c54052 Binary files /dev/null and b/app/assets/images/mosaico_natura/logo-mosaiconaturav_gris.png differ diff --git a/app/assets/images/mosaico_natura/menciones.jpg b/app/assets/images/mosaico_natura/menciones.jpg new file mode 100644 index 0000000..5fb621d Binary files /dev/null and b/app/assets/images/mosaico_natura/menciones.jpg differ diff --git a/app/assets/images/mosaico_natura/participa-01.png b/app/assets/images/mosaico_natura/participa-01.png new file mode 100755 index 0000000..cb62ae3 Binary files /dev/null and b/app/assets/images/mosaico_natura/participa-01.png differ diff --git a/app/assets/images/mosaico_natura/participa-02.png b/app/assets/images/mosaico_natura/participa-02.png new file mode 100755 index 0000000..4ffcca4 Binary files /dev/null and b/app/assets/images/mosaico_natura/participa-02.png differ diff --git a/app/assets/images/mosaico_natura/participa-03.png b/app/assets/images/mosaico_natura/participa-03.png new file mode 100755 index 0000000..bca01fc Binary files /dev/null and b/app/assets/images/mosaico_natura/participa-03.png differ diff --git a/app/assets/images/mosaico_natura/participa-04.png b/app/assets/images/mosaico_natura/participa-04.png new file mode 100755 index 0000000..1188d47 Binary files /dev/null and b/app/assets/images/mosaico_natura/participa-04.png differ diff --git a/app/assets/images/mosaico_natura/participa-05.png b/app/assets/images/mosaico_natura/participa-05.png new file mode 100755 index 0000000..d2c60e2 Binary files /dev/null and b/app/assets/images/mosaico_natura/participa-05.png differ diff --git a/app/assets/images/mosaico_natura/participa-flecha.png b/app/assets/images/mosaico_natura/participa-flecha.png new file mode 100755 index 0000000..e231223 Binary files /dev/null and b/app/assets/images/mosaico_natura/participa-flecha.png differ diff --git a/app/assets/images/mosaico_natura/premios-1o.png b/app/assets/images/mosaico_natura/premios-1o.png new file mode 100755 index 0000000..2885d91 Binary files /dev/null and b/app/assets/images/mosaico_natura/premios-1o.png differ diff --git a/app/assets/images/mosaico_natura/premios-2o.png b/app/assets/images/mosaico_natura/premios-2o.png new file mode 100755 index 0000000..e981544 Binary files /dev/null and b/app/assets/images/mosaico_natura/premios-2o.png differ diff --git a/app/assets/images/mosaico_natura/tutorial_foto.pdf b/app/assets/images/mosaico_natura/tutorial_foto.pdf new file mode 100755 index 0000000..9d7e633 Binary files /dev/null and b/app/assets/images/mosaico_natura/tutorial_foto.pdf differ diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index b3c9bab..e90d764 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -11,8 +11,9 @@ // about supported directives. // //= require jquery3 +//= require rails-ujs +//= require cocoon //= require popper //= require bootstrap-sprockets -// require rails-ujs //= require turbolinks // require_tree . diff --git a/app/assets/javascripts/entre_azul_y_verde/entre_azul_y_verde.js b/app/assets/javascripts/entre_azul_y_verde/entre_azul_y_verde.js index ea7521b..082ee5a 100644 --- a/app/assets/javascripts/entre_azul_y_verde/entre_azul_y_verde.js +++ b/app/assets/javascripts/entre_azul_y_verde/entre_azul_y_verde.js @@ -11,8 +11,9 @@ // about supported directives. // //= require jquery3 +//= require rails-ujs +//= require cocoon //= require popper //= require bootstrap-sprockets -// require rails-ujs //= require turbolinks //= require entre_azul_y_verde/entre_azul_y_verde_extra diff --git a/app/assets/javascripts/entre_azul_y_verde/entre_azul_y_verde_extra.js b/app/assets/javascripts/entre_azul_y_verde/entre_azul_y_verde_extra.js index b3c9bab..3388210 100644 --- a/app/assets/javascripts/entre_azul_y_verde/entre_azul_y_verde_extra.js +++ b/app/assets/javascripts/entre_azul_y_verde/entre_azul_y_verde_extra.js @@ -1,18 +1,4 @@ -// 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 jquery3 -//= require popper -//= require bootstrap-sprockets -// require rails-ujs -//= require turbolinks -// require_tree . +$(document).ready(function(){ + +}); + diff --git a/app/assets/javascripts/mosaico_natura/inicio.js b/app/assets/javascripts/mosaico_natura/inicio.js deleted file mode 100644 index 24f83d1..0000000 --- a/app/assets/javascripts/mosaico_natura/inicio.js +++ /dev/null @@ -1,3 +0,0 @@ -# Place all the behaviors and hooks related to the matching controller here. -# All this logic will automatically be available in application.js. -# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/javascripts/mosaico_natura/mosaico_natura.js b/app/assets/javascripts/mosaico_natura/mosaico_natura.js new file mode 100644 index 0000000..a601d2d --- /dev/null +++ b/app/assets/javascripts/mosaico_natura/mosaico_natura.js @@ -0,0 +1,19 @@ +// 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 jquery3 +//= require rails-ujs +//= require cocoon +//= require popper +//= require bootstrap-sprockets +//= require turbolinks +//= require mosaico_natura/mosaico_natura_extra diff --git a/app/assets/javascripts/mosaico_natura/mosaico_natura_extra.js b/app/assets/javascripts/mosaico_natura/mosaico_natura_extra.js new file mode 100644 index 0000000..648da5a --- /dev/null +++ b/app/assets/javascripts/mosaico_natura/mosaico_natura_extra.js @@ -0,0 +1,70 @@ +$(document).ready(function(){ + $('[data-toggle="tooltip"]').tooltip(); + $('.toast').toast('show'); + + //Coloca los nested-fields despues de los botones (.links) + $("#medias a.add_fields").data("association-insertion-method", 'after'); + + + // limits the number of categories + check_to_hide_or_show_add_link(); + + $('#medias').on('cocoon:after-insert', function() { + check_to_hide_or_show_add_link(); + }); + + $('#medias').on('cocoon:after-remove', function() { + check_to_hide_or_show_add_link(); + }); + + function check_to_hide_or_show_add_link() { + $("#medias a.add_fields").each(function () { + link = $(this); + nestedClass = $('.nested-fields-for-'+link.data('categoria')+':visible'); + link.attr('data-after',link.data('maximos') - nestedClass.length); + if (nestedClass.length == link.data('maximos')) { + link.removeClass('d-inline-flex').addClass('disabled'); + } else { + link.addClass('d-inline-flex').removeClass('disabled'); + } + }); + } + + $("#medias").on('change', '.file-to-upload', function(e) { + + if(this.files[0].type.indexOf('video') == 0){ + return true; + } + + var reader = new FileReader(); + //Read the contents of Image File. + reader.readAsDataURL(this.files[0]); + reader.onload = function (e) { + + //Initiate the JavaScript Image object. + var image = new Image(); + + //Set the Base64 string return from FileReader as source. + image.src = e.target.result; + + //Validate the File Height and Width. + image.onload = function () { + var h = this.height; + var w = this.width; + console.log(h + " - " + w); + var largerSide = h > w ? h : w; + console.log(largerSide); + if (largerSide > 3500 && largerSide < 4500) { + console.log("Imagen con medidas adecuadas"); + return true; + }else { + alert("Cambia tu foto, no cumple con las medidas mínimas/máximas especificadas en las bases del concurso:\n(Tamaño mínimo: 3,500 pixeles por lado más grande\nTamaño máximo: 4,500 pixeles por lado más grande)\nde subirla sera descalificada."); + return false; + } + + }; + }; + }); + +}); + diff --git a/app/assets/stylesheets/entre_azul_y_verde/bootstrap-variable-overrides.scss b/app/assets/stylesheets/entre_azul_y_verde/bootstrap-variable-overrides.scss index 936bcd8..7af3ed3 100644 --- a/app/assets/stylesheets/entre_azul_y_verde/bootstrap-variable-overrides.scss +++ b/app/assets/stylesheets/entre_azul_y_verde/bootstrap-variable-overrides.scss @@ -3,15 +3,15 @@ $enable-gradients: true !default; /* Font para biomex más las default de Bootstrap */ -$font-size-base: .85rem !default; -$font-family-sans-serif: opensans, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default;; +$font-size-base: 1.25rem !default; +$font-family-sans-serif: 'McLaren', cursive, opensans, -apple-system, BlinkMacSystemFont !default;; -$h1-font-size: $font-size-base * 2 !default; -$h2-font-size: $font-size-base * 1.75 !default; -$h3-font-size: $font-size-base * 1.5 !default; -$h4-font-size: $font-size-base * 1.25 !default; -$h5-font-size: $font-size-base * 1 !default; -$h6-font-size: $font-size-base * 0.9 !default; +/*$h1-font-size: $font-size-base * 2 !default;*/ +/*$h2-font-size: $font-size-base * 1.75 !default;*/ +/*$h3-font-size: $font-size-base * 1.5 !default;*/ +/*$h4-font-size: $font-size-base * 1.25 !default;*/ +/*$h5-font-size: $font-size-base * 1 !default;*/ +/*$h6-font-size: $font-size-base * 0.9 !default;*/ /* Breadcrumbs overrides! */ $breadcrumb-padding-y: .5rem !default; @@ -25,10 +25,12 @@ $breadcrumb-border-radius: 0 !default; $enable-responsive-font-sizes: true !default; //$primary: #bd0016; -$primary: #800000; -$success: #A0C11F; -$info: #104C5B; -$warning: #ea9028; -$danger: #C77878; +$primary: #fc6042; +//$success: #A0C11F; +$info: #ffaa00; +//$warning: #ea9028; +//$danger: #C77878; -$embed-responsive-aspect-ratios: ((21 9), (23 9), (16 9), (11 4), (4 3), (1 1)) !default; \ No newline at end of file +$link-color: #eabd0d !default; + +$embed-responsive-aspect-ratios: ((21 9), (23 9), (16 9), (11 4), (4 3), (1 1)) !default; diff --git a/app/assets/stylesheets/entre_azul_y_verde/entre_azul_y_verde.scss b/app/assets/stylesheets/entre_azul_y_verde/entre_azul_y_verde.scss index 00a9b75..7c7c45f 100644 --- a/app/assets/stylesheets/entre_azul_y_verde/entre_azul_y_verde.scss +++ b/app/assets/stylesheets/entre_azul_y_verde/entre_azul_y_verde.scss @@ -1,4 +1,6 @@ +@import url('https://fonts.googleapis.com/css2?family=McLaren&display=swap'); +@import "font-awesome"; @import 'entre_azul_y_verde/bootstrap-variable-overrides'; @import 'bootstrap'; @import "entre_azul_y_verde/entre_azul_y_verde_extra"; -//@import "font-awesome"; + diff --git a/app/assets/stylesheets/entre_azul_y_verde/entre_azul_y_verde_extra.scss b/app/assets/stylesheets/entre_azul_y_verde/entre_azul_y_verde_extra.scss index a5917fe..6370f41 100644 --- a/app/assets/stylesheets/entre_azul_y_verde/entre_azul_y_verde_extra.scss +++ b/app/assets/stylesheets/entre_azul_y_verde/entre_azul_y_verde_extra.scss @@ -1,31 +1,7 @@ -header{ - background-color: #333333; - color: #fafafa; -} -header img{ - max-width: 3rem; -} -#menu-header{ - list-style-type: none; - overflow: hidden; -} -#menu-header li { - float: left; -} +.dropdown-menu{right: 0; left: unset!important;} -#menu-header li a { - display: block; - // color: white; - // text-align: center; - // padding: 16px; - text-decoration: none; -} - -#menu-header li a:hover { - background-color: #111111; -} -#inscripcion, #intro{ - background-image: url('/assets/entre_azul_y_verde/fondo.jpg'); +#intro{ + background-image: url('/concursos_assets/entre_azul_y_verde/fondo.jpg'); background-attachment: fixed; background-position: center center; background-repeat: no-repeat; @@ -34,3 +10,81 @@ header img{ background-size: cover; -o-background-size: cover; } + +/* ¿Que es?*/ +#queEs{ + background-color: #0c434c; +} +#queEs .sub-header{ + background-color: #39868f; +} + +/* ¿Que es?*/ +#jurado{ + background-color: #4f786a; +} +#jurado .sub-header{ + background-color: #1d4437; +} + +/* Categorías */ +#categorias{ + background-color: #675f00; +} +#categorias .sub-header{ + background-color: #acbf55; +} +.pleca_ama { + font-size: 22px; + vertical-align: top; + line-height: 33px; +} +.tabla-premios-adulto table{ + margin-bottom:5px; + font-size:18px; + line-height:1.2; + text-align:center; + background-color:transparent; + color: #FFCA84; + } +.tabla-premios-adulto img{ + margin-bottom:10px; + } + +/* Bases */ +#bases, .bases{ + background-color: #402400; +} +#bases .sub-header{ + background-color: #b96800; +} + +/* Medios */ +#medios{ + background-color: #51786a; +} +#medios .sub-header{ + background-color: #1f4747; +} +.icono-fa{ + color: #b7d891; +} + +/* Inscripcion */ +#inscripcion{ background-color: #621a5e;} +#inscripcion .sub-header{ background-color: #bf5555; font-family: 'CHICKEN Pie Height'; color: white;} +#inscripcion .sub-header img{ height: 9rem;} +#inscripcion .form-control, #inscripcion .form-check-inline{ + background-color: #3d0c49; + border: none; +} +#inscripcion, #inscripcion .form-control, #inscripcion .form-check-inline{ color: #ffaa00;} +#inscripcion ::placeholder{ color: rgba(255, 170, 0, 0.8); font-size: .8em} + +@font-face { + font-family: 'CHICKEN Pie Height'; + src: url('/concursos_assets/chicken-pie/chicken-pie-height.otf'), + url('/concursos_assets/chicken-pie/chicken-pie-height.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} \ No newline at end of file diff --git a/app/assets/stylesheets/mosaico_natura/bootstrap-variable-overrides.scss b/app/assets/stylesheets/mosaico_natura/bootstrap-variable-overrides.scss new file mode 100644 index 0000000..e685e72 --- /dev/null +++ b/app/assets/stylesheets/mosaico_natura/bootstrap-variable-overrides.scss @@ -0,0 +1,35 @@ +// Options +// Quickly modify global styling by enabling or disabling optional features. +$enable-gradients: true !default; + +/* Font para biomex más las default de Bootstrap */ +$font-size-base: 1rem !default; +$font-family-sans-serif: 'Montserrat', sans-serif, -apple-system, BlinkMacSystemFont !default; + +/*$h1-font-size: $font-size-base * 2 !default;*/ +/*$h2-font-size: $font-size-base * 1.75 !default;*/ +/*$h3-font-size: $font-size-base * 1.5 !default;*/ +/*$h4-font-size: $font-size-base * 1.25 !default;*/ +/*$h5-font-size: $font-size-base * 1 !default;*/ +/*$h6-font-size: $font-size-base * 0.9 !default;*/ + +/* Breadcrumbs overrides! */ +/*$breadcrumb-padding-y: .5rem !default;*/ + +/*$breadcrumb-item-padding: .25rem !default;*/ +/*$breadcrumb-margin-bottom: 1rem !default;*/ +/*$breadcrumb-bg: #d0d0d0 !default;*/ + +$breadcrumb-border-radius: 0 !default; + +$enable-responsive-font-sizes: true !default; + +$primary: #800000; +//$success: #A0C11F; +//$info: #ffaa00; +//$warning: #ea9028; +//$danger: #C77878; + +$link-color: #800000 !default; + +$embed-responsive-aspect-ratios: ((21 9), (23 9), (16 9), (11 4), (4 3), (1 1)) !default; diff --git a/app/assets/stylesheets/mosaico_natura/inicio.scss b/app/assets/stylesheets/mosaico_natura/inicio.scss deleted file mode 100644 index a220724..0000000 --- a/app/assets/stylesheets/mosaico_natura/inicio.scss +++ /dev/null @@ -1,3 +0,0 @@ -// Place all the styles related to the mosaicoNatura/inicio controller here. -// They will automatically be included in application.scss. -// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/mosaico_natura/mosaico_natura.scss b/app/assets/stylesheets/mosaico_natura/mosaico_natura.scss new file mode 100644 index 0000000..c48b419 --- /dev/null +++ b/app/assets/stylesheets/mosaico_natura/mosaico_natura.scss @@ -0,0 +1,6 @@ +//@import url('https://fonts.googleapis.com/css2?family=McLaren&display=swap'); +@import "font-awesome"; +@import 'mosaico_natura/bootstrap-variable-overrides'; +@import 'bootstrap'; +@import "mosaico_natura/mosaico_natura_extra"; +@import url('https://fonts.googleapis.com/css2?family=Montserrat+Alternates:ital,wght@0,100;0,500;0,700;1,100;1,500;1,700&family=Montserrat:ital,wght@0,100;0,500;0,700;1,100;1,500;1,700&display=swap'); \ No newline at end of file diff --git a/app/assets/stylesheets/mosaico_natura/mosaico_natura_extra.scss b/app/assets/stylesheets/mosaico_natura/mosaico_natura_extra.scss new file mode 100755 index 0000000..edaa7fb --- /dev/null +++ b/app/assets/stylesheets/mosaico_natura/mosaico_natura_extra.scss @@ -0,0 +1,112 @@ +body{} +.dropdown-menu{right: 0; left: unset!important;} + +#intro{ + /*background-image: url();*/ + background-attachment: fixed; + background-position: center center; + background-repeat: no-repeat; + -webkit-background-size: cover; + -moz-background-size: cover; + background-size: cover; + -o-background-size: cover; + background-color: #000a1e; +} + +/* ¿Quiénes somos?*/ +#quienesSomos .sub-header{ + background-image: url('/concursos_assets/mosaico_natura/bg-quienesSomos.jpg'); +} + +/* Concurso */ +#concurso .sub-header{ + background-image: url('/concursos_assets/mosaico_natura/bg-concurso.jpg'); +} + +/* Exposiciones */ +#exposiciones .sub-header{ + background-image: url('/concursos_assets/mosaico_natura/bg-exposiciones.jpg'); +} + +/* Medios */ +#medios .sub-header{ + background-image: url('/concursos_assets/mosaico_natura/bg-medios.jpg'); +} + +/* Términos y conidciones */ +#terminos-condiciones .sub-header{ + background-image: url('/concursos_assets/mosaico_natura/bg-legales.jpg'); +} + +/* Galería de ganadores */ +#galeria-ganadores .sub-header{ + background-image: url('/concursos_assets/mosaico_natura/ganadores.jpg'); +} + +/* Galería de menciones honoríficas */ +#galeria-menciones .sub-header{ + background-image: url('/concursos_assets/mosaico_natura/menciones.jpg'); +} + +/* Background de subheaders */ +#quienesSomos .sub-header, #concurso .sub-header, #exposiciones .sub-header, #medios .sub-header, #terminos-condiciones .sub-header, #galeria-ganadores .sub-header, #galeria-menciones .sub-header{ + background-position: center center; + background-repeat: no-repeat; + background-size: cover; + height: 300px; + padding: 60px 0; + margin:0; + text-shadow: 2px 2px 5px #000; +} + +/* Colaboradores */ +#colaboradores{background-color: #2d2c27;} +#colaboradores .sub-header{ + padding: 60px 0; + margin:0; +} + +/* Inscripcion */ +#inscripcion{ + font-family: 'Montserrat Alternates'; +} +#inscripcion div[class*="nested-fields-for-"]{ + min-height: 600px; +} +#inscripcion .bg-gradient-light{ + box-shadow: 0 1rem 3rem rgb(0, 0, 0,)!important; +} +footer #copyright p{ + font-size:12px; + line-height:1; + margin:0; + color: gray; + padding: 15px; +} + +#imgmosaicosomos { + vertical-align: baseline; +} + +.conabio { + font-variant: small-caps; +} + +.bg-dark { + background-color: #2d2c27 !important; +} + +footer ul { + padding: 0; + list-style-type: none; + text-decoration: none; + line-height: 1.15; +} + +footer a { + color: #fff !important; +} + +footer a:hover { + color: #ffc107 !important; +} diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 1c07694..042b973 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,3 +1,40 @@ class ApplicationController < ActionController::Base - protect_from_forgery with: :exception + protect_from_forgery with: :exception + + protected + + # Limita la aplicacion a un usuario y contrasenia general + def authenticate + @juez = nil + if params['calificacion']['concurso'] == '2' + authenticate_mn + else + authenticate_ayv + end + end + + def authenticate_ayv + authorized = false + authenticate_or_request_with_http_basic do |username, password| + Rails.application.secrets.entre_azul_y_verde.each do |k,v| + authorized = (v[:usuario] == username && v[:password] == password) + @juez = v if authorized + return if authorized + end + end + end + + def authenticate_mn + authorized = false + authenticate_or_request_with_http_basic do |username, password| + Rails.application.secrets.mosaico_natura.each do |k,v| + authorized = (v[:usuario] == username && v[:password] == password) + @juez = v if authorized + @juez[:tipo] = k if authorized + return if authorized + end + end + end + end + diff --git a/app/controllers/calificaciones_controller.rb b/app/controllers/calificaciones_controller.rb new file mode 100644 index 0000000..684f3eb --- /dev/null +++ b/app/controllers/calificaciones_controller.rb @@ -0,0 +1,66 @@ +class CalificacionesController < ApplicationController + before_action :set_calificacion, only: %i[ update destroy ] + before_action :authenticate, only: %i[ create update destroy ] + + # POST /calificaciones or /calificaciones.json + def create + @calificacion = Calificacion.new(calificacion_params) + + respond_to do |format| + if @calificacion.save + #format.html { redirect_to @calificacion, notice: "Calificacion was successfully created." } + format.json { render json: {status: :created, location: @calificacion } } + else + #format.html { render :new, status: :unprocessable_entity } + format.json { render json: @calificacion.errors, status: :unprocessable_entity } + end + end + end + + # PATCH/PUT /calificaciones/1 or /calificaciones/1.json + def update + unless(@juez.nil?) + #Jalo la calificacion entera a tres digitos en la base + cal_global = @calificacion.calificacion.to_s + #cambio solo lacalificacion determinada por la posicion del juez + cal_global[@juez[:posicion]] = calificacion_params[:calificacion] + #Como era string, pues la calificacion ya cambada a 3 digitos la sustituyo en los params para q el modelo la reciba peladita + params[:calificacion][:calificacion] = cal_global + end + + respond_to do |format| + if @calificacion.update(calificacion_params) + #format.html { redirect_to @calificacion, notice: "Calificacion was successfully updated." } + format.json { render json: {status: :updated, location: @calificacion } } + else + #format.html { render :edit, status: :unprocessable_entity } + format.json { render json: @calificacion.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /calificaciones/1 or /calificaciones/1.json + def destroy + @calificacion.destroy + respond_to do |format| + format.html { redirect_to calificaciones_url, notice: "Calificacion was successfully destroyed." } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_calificacion + id = params[:id] + if params['calificacion']['concurso'] == '2' + @calificacion = Calificacion.find_by_media_id(id) + else + @calificacion = Calificacion.find_by_usuario_id(id) + end + end + + # Only allow a list of trusted parameters through. + def calificacion_params + params.fetch(:calificacion, {}).permit(:usuario_id, :medias_id, :calificacion ) + end +end diff --git a/app/controllers/entre_azul_y_verde/devise/confirmations_controller.rb b/app/controllers/entre_azul_y_verde/devise/confirmations_controller.rb new file mode 100644 index 0000000..71dd460 --- /dev/null +++ b/app/controllers/entre_azul_y_verde/devise/confirmations_controller.rb @@ -0,0 +1,3 @@ +class EntreAzulYVerde::Devise::ConfirmationsController < ::Devise::ConfirmationsController + layout 'entre_azul_y_verde' +end diff --git a/app/controllers/entre_azul_y_verde/devise/mailer_controller.rb b/app/controllers/entre_azul_y_verde/devise/mailer_controller.rb new file mode 100644 index 0000000..68ef453 --- /dev/null +++ b/app/controllers/entre_azul_y_verde/devise/mailer_controller.rb @@ -0,0 +1,4 @@ +class EntreAzulYVerde::Devise::Mailer < ::Devise::Mailer + default from: 'noreply@conabio.gob.mx' + layout 'entre_azul_y_verde' +end diff --git a/app/controllers/entre_azul_y_verde/devise/passwords_controller.rb b/app/controllers/entre_azul_y_verde/devise/passwords_controller.rb new file mode 100644 index 0000000..9735f9b --- /dev/null +++ b/app/controllers/entre_azul_y_verde/devise/passwords_controller.rb @@ -0,0 +1,3 @@ +class EntreAzulYVerde::Devise::PasswordsController < ::Devise::PasswordsController + layout 'entre_azul_y_verde' +end diff --git a/app/controllers/entre_azul_y_verde/devise/registrations_controller.rb b/app/controllers/entre_azul_y_verde/devise/registrations_controller.rb new file mode 100644 index 0000000..ca1bb0c --- /dev/null +++ b/app/controllers/entre_azul_y_verde/devise/registrations_controller.rb @@ -0,0 +1,33 @@ +class EntreAzulYVerde::Devise::RegistrationsController < ::Devise::RegistrationsController + layout 'entre_azul_y_verde' + + # SALTAR COMPLETAMENTE la verificación de autenticación + skip_before_action :require_no_authentication, only: [:new, :create] + + # Opcional: Cerrar sesión actual antes de registrar nuevo usuario + prepend_before_action :logout_current_user, only: [:new, :create] + + def logout_current_user + if user_signed_in? && current_user.is_a?(User) + sign_out current_user + flash[:notice] = "Sesión anterior cerrada. Puedes crear una nueva cuenta." + end + end + + def resource_class + UserAyv + end + + def resource_name + :user_ayv + end + + def after_sign_up_path_for(resource) + new_entre_azul_y_verde_registro_path + end + + # Asegurar que build_resource use UserAyv + def build_resource(hash = {}) + self.resource = UserAyv.new(hash) + end +end diff --git a/app/controllers/entre_azul_y_verde/devise/sessions_controller.rb b/app/controllers/entre_azul_y_verde/devise/sessions_controller.rb new file mode 100644 index 0000000..c669198 --- /dev/null +++ b/app/controllers/entre_azul_y_verde/devise/sessions_controller.rb @@ -0,0 +1,16 @@ +class EntreAzulYVerde::Devise::SessionsController < ::Devise::SessionsController + layout 'entre_azul_y_verde' + + private + + def after_sign_in_path_for(resource) + @registro = UsuarioAyv.where(user_id: resource.id).first + + if @registro.present? + edit_entre_azul_y_verde_registro_path(@registro) + else # Es nuevo usuario + new_entre_azul_y_verde_registro_path + end + end + +end \ No newline at end of file diff --git a/app/controllers/entre_azul_y_verde/devise/unlocks_controller.rb b/app/controllers/entre_azul_y_verde/devise/unlocks_controller.rb new file mode 100644 index 0000000..491447b --- /dev/null +++ b/app/controllers/entre_azul_y_verde/devise/unlocks_controller.rb @@ -0,0 +1,3 @@ +class EntreAzulYVerde::Devise::UnlocksController < ::Devise::UnlocksController + layout 'entre_azul_y_verde' +end diff --git a/app/controllers/entre_azul_y_verde/entre_azul_y_verde_controller.rb b/app/controllers/entre_azul_y_verde/entre_azul_y_verde_controller.rb new file mode 100644 index 0000000..7ff247d --- /dev/null +++ b/app/controllers/entre_azul_y_verde/entre_azul_y_verde_controller.rb @@ -0,0 +1,10 @@ +class EntreAzulYVerde::EntreAzulYVerdeController < ApplicationController + layout 'entre_azul_y_verde' + + protected + + def authenticate + @juez = nil + authenticate_ayv + end +end \ No newline at end of file diff --git a/app/controllers/entre_azul_y_verde/galerias_controller.rb b/app/controllers/entre_azul_y_verde/galerias_controller.rb index b6c47d3..e691ce3 100644 --- a/app/controllers/entre_azul_y_verde/galerias_controller.rb +++ b/app/controllers/entre_azul_y_verde/galerias_controller.rb @@ -1,71 +1,18 @@ -class EntreAzulYVerde::GaleriasController < ApplicationController - layout 'entre_azul_y_verde' - - before_action :set_entre_azul_y_verde_galeria, only: %i[ show edit update destroy ] +class EntreAzulYVerde::GaleriasController < EntreAzulYVerde::EntreAzulYVerdeController - # GET /entre_azul_y_verde/galerias or /entre_azul_y_verde/galerias.json def index - @entre_azul_y_verde_galerias = EntreAzulYVerde::Galeria.all - end - - # GET /entre_azul_y_verde/galerias/1 or /entre_azul_y_verde/galerias/1.json - def show - end - - # GET /entre_azul_y_verde/galerias/new - def new - @entre_azul_y_verde_galeria = EntreAzulYVerde::Galeria.new - end - - # GET /entre_azul_y_verde/galerias/1/edit - def edit - end - - # POST /entre_azul_y_verde/galerias or /entre_azul_y_verde/galerias.json - def create - @entre_azul_y_verde_galeria = EntreAzulYVerde::Galeria.new(entre_azul_y_verde_galeria_params) - - respond_to do |format| - if @entre_azul_y_verde_galeria.save - format.html { redirect_to @entre_azul_y_verde_galeria, notice: "Galeria was successfully created." } - format.json { render :show, status: :created, location: @entre_azul_y_verde_galeria } - else - format.html { render :new, status: :unprocessable_entity } - format.json { render json: @entre_azul_y_verde_galeria.errors, status: :unprocessable_entity } - end + @ganadores = {} + @ganadores[:de_6_a_8] = UsuarioAyv.dibujos_ganadores.menores_a_9 + @ganadores[:de_9_a_11] = UsuarioAyv.dibujos_ganadores.de_9_a_11 + @ganadores[:de_12_a_14] = UsuarioAyv.dibujos_ganadores.de_12_a_14 + @ganadores[:de_15_a_17] = UsuarioAyv.dibujos_ganadores.mayores_a_14 + + @menciones = {} + Direccion::ESTADOS.each do |x| + mencion = UsuarioAyv.dibujos_para_menciones(x[1]) + next unless mencion.present? + @menciones[x[0]] = mencion end + end - - # PATCH/PUT /entre_azul_y_verde/galerias/1 or /entre_azul_y_verde/galerias/1.json - def update - respond_to do |format| - if @entre_azul_y_verde_galeria.update(entre_azul_y_verde_galeria_params) - format.html { redirect_to @entre_azul_y_verde_galeria, notice: "Galeria was successfully updated." } - format.json { render :show, status: :ok, location: @entre_azul_y_verde_galeria } - else - format.html { render :edit, status: :unprocessable_entity } - format.json { render json: @entre_azul_y_verde_galeria.errors, status: :unprocessable_entity } - end - end - end - - # DELETE /entre_azul_y_verde/galerias/1 or /entre_azul_y_verde/galerias/1.json - def destroy - @entre_azul_y_verde_galeria.destroy - respond_to do |format| - format.html { redirect_to entre_azul_y_verde_galerias_url, notice: "Galeria was successfully destroyed." } - format.json { head :no_content } - end - end - - private - # Use callbacks to share common setup or constraints between actions. - def set_entre_azul_y_verde_galeria - @entre_azul_y_verde_galeria = EntreAzulYVerde::Galeria.find(params[:id]) - end - - # Only allow a list of trusted parameters through. - def entre_azul_y_verde_galeria_params - params.fetch(:entre_azul_y_verde_galeria, {}) - end end diff --git a/app/controllers/entre_azul_y_verde/inicio_controller.rb b/app/controllers/entre_azul_y_verde/inicio_controller.rb index 145926d..1ef07c7 100644 --- a/app/controllers/entre_azul_y_verde/inicio_controller.rb +++ b/app/controllers/entre_azul_y_verde/inicio_controller.rb @@ -1,7 +1,10 @@ -class EntreAzulYVerde::InicioController < ApplicationController - layout 'entre_azul_y_verde' +class EntreAzulYVerde::InicioController < EntreAzulYVerde::EntreAzulYVerdeController def index end + def bases + render partial: 'bases' + end + end diff --git a/app/controllers/entre_azul_y_verde/panel_controller.rb b/app/controllers/entre_azul_y_verde/panel_controller.rb index 64390fc..3b88df9 100644 --- a/app/controllers/entre_azul_y_verde/panel_controller.rb +++ b/app/controllers/entre_azul_y_verde/panel_controller.rb @@ -1,4 +1,29 @@ -class EntreAzulYVerde::PanelController < ApplicationController - layout 'entre_azul_y_verde' +class EntreAzulYVerde::PanelController < EntreAzulYVerde::EntreAzulYVerdeController + before_action :authenticate, only: %i[ precalificacion calificacion desempate] + def precalificacion + @dibujos = {} + @dibujos[:de_6_a_8] = UsuarioAyv.dibujos.de_6_a_8 + @dibujos[:de_9_a_11] = UsuarioAyv.dibujos.de_9_a_11 + @dibujos[:de_12_a_14] = UsuarioAyv.dibujos.de_12_a_14 + @dibujos[:de_15_a_17] = UsuarioAyv.dibujos.de_15_a_17 + @dibujos[:menores_a_6] = UsuarioAyv.dibujos.menores_a_6 + @dibujos[:mayores_a_17] = UsuarioAyv.dibujos.mayores_a_17 + end + + def calificacion + @dibujos = {} + @dibujos[:menores_a_9] = UsuarioAyv.dibujos_finalistas.menores_a_9 + @dibujos[:de_9_a_11] = UsuarioAyv.dibujos_finalistas.de_9_a_11 + @dibujos[:de_12_a_14] = UsuarioAyv.dibujos_finalistas.de_12_a_14 + @dibujos[:mayores_a_14] = UsuarioAyv.dibujos_finalistas.mayores_a_14 + end + + def desempate + @dibujos = {} + @dibujos[:menores_a_9] = UsuarioAyv.dibujos_desempate.menores_a_9 + @dibujos[:de_9_a_11] = UsuarioAyv.dibujos_desempate.de_9_a_11 + @dibujos[:de_12_a_14] = UsuarioAyv.dibujos_desempate.de_12_a_14 + @dibujos[:mayores_a_14] = UsuarioAyv.dibujos_desempate.mayores_a_14 + end end diff --git a/app/controllers/entre_azul_y_verde/registro_controller.rb b/app/controllers/entre_azul_y_verde/registro_controller.rb index b91b85e..7997dfb 100644 --- a/app/controllers/entre_azul_y_verde/registro_controller.rb +++ b/app/controllers/entre_azul_y_verde/registro_controller.rb @@ -1,70 +1,77 @@ -class EntreAzulYVerde::RegistroController < ApplicationController - layout 'entre_azul_y_verde' +class EntreAzulYVerde::RegistroController < EntreAzulYVerde::EntreAzulYVerdeController before_action :set_registro, only: %i[ show edit update destroy ] + before_action :authenticate_user_ayv! - # GET /usuarios or /usuarios.json - def index - end - - # GET /usuarios/1 or /usuarios/1.json - def show - end - - # GET /usuarios/new + # GET /registro/new def new - @registro = EntreAzulYVerde::EayvUsuario.new + @registro = UsuarioAyv.where(user_id: current_user_ayv.id).first + + if @registro.present? + redirect_to edit_entre_azul_y_verde_registro_path(@registro) + else # Es nuevo usuario + @form_params = { url: '/entre_azul_y_verde/registro', method: 'post' } + @registro = UsuarioAyv.new + @registro.build_direccion + @registro.build_tutor + @registro.media.build(posicion: 1) + @registro.media.build(posicion: 2).build_media_metadato # Solo la foto final tiene asociado los metadatos + end end - # GET /usuarios/1/edit + # GET /registro/1/edit def edit + @form_params = { url: entre_azul_y_verde_registro_path(@registro), method: 'put' } end - # POST /usuarios or /usuarios.json + # POST /registro or /registro.json def create - @registro = EntreAzulYVerde::EayvUsuario.new(registro_params) + @registro = UsuarioAyv.new(registro_params) + + # Asigna le concurso + concurso = CatConcurso.where(nombre_concurso: UsuarioAyv::CONCURSO).first + @registro.concurso_id = concurso.id respond_to do |format| if @registro.save - format.html { redirect_to @registro, notice: "Usuario was successfully created." } + format.html { redirect_to edit_entre_azul_y_verde_registro_path(@registro), notice: "Tu registro fue creado exitosamente." } format.json { render :show, status: :created, location: @registro } else - format.html { render :new, status: :unprocessable_entity } + @form_params = { url: '/entre_azul_y_verde/registro', method: 'post' } + format.html { render :new, locals: { notice: "Hubo un problema al guardar tus datos. Por favor verifica los campos en rojo"} } format.json { render json: @registro.errors, status: :unprocessable_entity } end end end - # PATCH/PUT /usuarios/1 or /usuarios/1.json + # PATCH/PUT /registro/1 or /registro/1.json def update respond_to do |format| - if @registro.update(usuario_params) - format.html { redirect_to @registro, notice: "Usuario was successfully updated." } + if @registro.update(registro_params) + @form_params = { url: entre_azul_y_verde_registro_path(@registro), method: 'put' } + format.html { redirect_to edit_entre_azul_y_verde_registro_path(@registro), notice: "Tu registro fue actualizado exitosamente." } format.json { render :show, status: :ok, location: @registro } else - format.html { render :edit, status: :unprocessable_entity } + @form_params = { url: entre_azul_y_verde_registro_path(@registro), method: 'put' } + format.html { render :edit, locals: { notice: "Hubo un problema al guardar tus datos. Por favor verifica los campos en rojo"} } format.json { render json: @registro.errors, status: :unprocessable_entity } end end end - - # DELETE /usuarios/1 or /usuarios/1.json - def destroy - @registro.destroy - respond_to do |format| - format.html { redirect_to usuarios_url, notice: "Usuario was successfully destroyed." } - format.json { head :no_content } - end - end + private # Use callbacks to share common setup or constraints between actions. def set_registro - @registro = EntreAzulYVerde::EayvUsuario.find(params[:id]) + @registro = UsuarioAyv.find(params[:id]) end # Only allow a list of trusted parameters through. def registro_params - params.require(:usuario).permit(:email, :nombre, :apellido_paterno, :apellido_materno, :fecha_nacimiento_nac, :lugar_nacimiento, :curp, :password, :password_confirmation) + params.require(:usuario_ayv).permit(:nombre, :apellido_paterno, :apellido_materno, :fecha_nacimiento, :lugar_nacimiento, :medio, :otro_medio, :user_id, + tutor_attributes: [:id, :nombre, :apellido_paterno, :apellido_materno, :telefono_contacto, :usuario_id, :_destroy], + direccion_attributes: [:id, :calle, :numero, :interior, :colonia, :municipio, :cp, :estado, :usuario_id, :_destroy], + media_attributes: [:id, :original_filename, :posicion, :filename, :titulo, :fecha_subida, :ruta, :size, :usuario_id, :_destroy, media_metadato_attributes: [:id, :titulo, :descripcion, :tecnica, :compromiso, :media_id, :destroy]], + ) end end diff --git a/app/controllers/mosaico_natura/devise/confirmations_controller.rb b/app/controllers/mosaico_natura/devise/confirmations_controller.rb new file mode 100644 index 0000000..5bccb9a --- /dev/null +++ b/app/controllers/mosaico_natura/devise/confirmations_controller.rb @@ -0,0 +1,3 @@ +class MosaicoNatura::Devise::ConfirmationsController < ::Devise::ConfirmationsController + layout 'mosaico_natura' +end diff --git a/app/controllers/mosaico_natura/devise/mailer_controller.rb b/app/controllers/mosaico_natura/devise/mailer_controller.rb new file mode 100644 index 0000000..e7f5082 --- /dev/null +++ b/app/controllers/mosaico_natura/devise/mailer_controller.rb @@ -0,0 +1,4 @@ +class MosaicoNatura::Devise::Mailer < ::Devise::Mailer + default from: 'noreply@conabio.gob.mx' + layout 'mosaico_natura' +end diff --git a/app/controllers/mosaico_natura/devise/passwords_controller.rb b/app/controllers/mosaico_natura/devise/passwords_controller.rb new file mode 100644 index 0000000..1769949 --- /dev/null +++ b/app/controllers/mosaico_natura/devise/passwords_controller.rb @@ -0,0 +1,3 @@ +class MosaicoNatura::Devise::PasswordsController < ::Devise::PasswordsController + layout 'mosaico_natura' +end diff --git a/app/controllers/mosaico_natura/devise/registrations_controller.rb b/app/controllers/mosaico_natura/devise/registrations_controller.rb new file mode 100644 index 0000000..470df98 --- /dev/null +++ b/app/controllers/mosaico_natura/devise/registrations_controller.rb @@ -0,0 +1,19 @@ +class MosaicoNatura::Devise::RegistrationsController < ::Devise::RegistrationsController + layout 'mosaico_natura' + before_action :configure_sign_up_params, only: [:create] + + def after_sign_up_path_for(resource) + new_mosaico_natura_registro_path + end + protected + + def configure_sign_up_params + devise_parameter_sanitizer.permit(:sign_up, keys: [:terms_of_service]) + end + private + + def sign_up_params + params.require(:user_mn).permit(:email, :password, :password_confirmation, :terms) + end + +end diff --git a/app/controllers/mosaico_natura/devise/sessions_controller.rb b/app/controllers/mosaico_natura/devise/sessions_controller.rb new file mode 100644 index 0000000..3b10e37 --- /dev/null +++ b/app/controllers/mosaico_natura/devise/sessions_controller.rb @@ -0,0 +1,16 @@ +class MosaicoNatura::Devise::SessionsController < ::Devise::SessionsController + layout 'mosaico_natura' + + private + + def after_sign_in_path_for(resource) + @registro = MosaicoNatura::UsuarioMn.where(user_id: resource.id).first + + if @registro.present? + edit_user_mn_registration_path(@registro) + else # Es nuevo usuario + new_mosaico_natura_registro_path + end + end + +end \ No newline at end of file diff --git a/app/controllers/mosaico_natura/devise/unlocks_controller.rb b/app/controllers/mosaico_natura/devise/unlocks_controller.rb new file mode 100644 index 0000000..b640aa0 --- /dev/null +++ b/app/controllers/mosaico_natura/devise/unlocks_controller.rb @@ -0,0 +1,3 @@ +class MosaicoNatura::Devise::UnlocksController < ::Devise::UnlocksController + layout 'mosaico_natura' +end diff --git a/app/controllers/mosaico_natura/galerias_controller.rb b/app/controllers/mosaico_natura/galerias_controller.rb new file mode 100644 index 0000000..b3c942c --- /dev/null +++ b/app/controllers/mosaico_natura/galerias_controller.rb @@ -0,0 +1,24 @@ +class MosaicoNatura::GaleriasController < MosaicoNatura::MosaicoNaturaController + + layout "mosaico_natura" + + # GET /mosaico_natura/galerias + def index + ganadores = MosaicoNatura::MediaMn.ganadores + @ganadores = {} + @menciones = {} + + ganadores.each_with_index do |ganador, index| + if ((index + 1) % 3) == 0 # Es modulo 3, i.e. la mencion + # Crear la categoria si aun no existe en el hash + @menciones[ganador.nombre_categoria] = [] if !@menciones[ganador.nombre_categoria] + @menciones[ganador.nombre_categoria] << ganador + else + # Crear la categoria si aun no existe en el hash + @ganadores[ganador.nombre_categoria] = [] if !@ganadores[ganador.nombre_categoria] + @ganadores[ganador.nombre_categoria] << ganador + end + end # end each + end + +end \ No newline at end of file diff --git a/app/controllers/mosaico_natura/inicio_controller.rb b/app/controllers/mosaico_natura/inicio_controller.rb index d6a27c9..b604eed 100644 --- a/app/controllers/mosaico_natura/inicio_controller.rb +++ b/app/controllers/mosaico_natura/inicio_controller.rb @@ -1,2 +1,13 @@ -class MosaicoNatura::InicioController < ApplicationController +class MosaicoNatura::InicioController < MosaicoNatura::MosaicoNaturaController + + def index + @categorias = Categoria::CategoriasMN + end + + def bases + render partial: 'bases' + end + + def terminos_condiciones + end end diff --git a/app/controllers/mosaico_natura/mosaico_natura_controller.rb b/app/controllers/mosaico_natura/mosaico_natura_controller.rb new file mode 100644 index 0000000..2a2ba4a --- /dev/null +++ b/app/controllers/mosaico_natura/mosaico_natura_controller.rb @@ -0,0 +1,10 @@ +class MosaicoNatura::MosaicoNaturaController < ApplicationController + layout 'mosaico_natura' + + protected + + def authenticate + @juez = nil + authenticate_mn + end +end \ No newline at end of file diff --git a/app/controllers/mosaico_natura/panel_controller.rb b/app/controllers/mosaico_natura/panel_controller.rb new file mode 100644 index 0000000..d6101dc --- /dev/null +++ b/app/controllers/mosaico_natura/panel_controller.rb @@ -0,0 +1,58 @@ +class MosaicoNatura::PanelController < MosaicoNatura::MosaicoNaturaController + before_action :authenticate, only: %i[ calificacion desempate todos] + + def calificacion + @fotos = {} + MosaicoNatura::CategoriaMn.all.each do |c| + @fotos[c.nombre_categoria] = MosaicoNatura::MediaMn.finalistas.where(categoria_id: c.id) + end + + end + + def desempate + @medias = {} + if params[:categoria].present? + categoria = params[:categoria] + @medias[categoria] = (categoria == 'cineminuto') ? MosaicoNatura::MediaMn.desempate_video_con_datos : MosaicoNatura::MediaMn.desempate_foto_con_datos.where("nombre_categoria = '#{categoria}'") + else + MosaicoNatura::CategoriaMn.all.each do |c| + unless c.id==8 + @medias[c.nombre_categoria] = MosaicoNatura::MediaMn.desempate_foto_con_datos.where(categoria_id: c.id).limit(10) + else + @medias[c.nombre_categoria] = MosaicoNatura::MediaMn.desempate_video_con_datos + end + end + end + + respond_to do |format| + format.html + format.json { render json: @medias.to_json } + end + end + + def ganadores + @medias = {} + MosaicoNatura::CategoriaMn.all.each do |c| + @medias[c.nombre_categoria] = MosaicoNatura::MediaMn.ganadores.where(categoria_id: c.id) + end + + respond_to do |format| + format.html + format.json { render json: @medias.to_json, status: :ok} + end + end + + def todos + @medias = {} + if params[:categoria].present? + categoria = params[:categoria] + @medias[categoria] = MosaicoNatura::MediaMn.todo_de_todos.where("nombre_categoria = '#{categoria}'") + else + MosaicoNatura::CategoriaMn.all.each do |c| + @medias[c.nombre_categoria] = MosaicoNatura::MediaMn.todo_de_todos.where(categoria_id: c.id) + end + end + render json: @medias.to_json + + end +end diff --git a/app/controllers/mosaico_natura/registro_controller.rb b/app/controllers/mosaico_natura/registro_controller.rb new file mode 100644 index 0000000..44cd02b --- /dev/null +++ b/app/controllers/mosaico_natura/registro_controller.rb @@ -0,0 +1,88 @@ +class MosaicoNatura::RegistroController < MosaicoNatura::MosaicoNaturaController + before_action :set_registro, only: %i[ show edit update destroy ] + before_action :set_categorias, only: %i[ edit update ] + before_action :authenticate_user_mn! + + # GET /registro/new + def new + @registro = MosaicoNatura::UsuarioMn.where(user_id: current_user_mn.id).first + + if @registro.present? + redirect_to edit_mosaico_natura_registro_path(@registro) + else # Es nuevo usuario + @form_params = { url: '/mosaico_natura/registro', method: 'post' } + @registro = MosaicoNatura::UsuarioMn.new + @registro.build_direccion + #@registro.media.build + #@registro.media.build(posicion: 2).build_media_metadato # Solo la foto final tiene asociado los metadatos + end + end + + # GET /registro/1/edit + def edit + @form_params = { url: mosaico_natura_registro_path(@registro), method: 'put' } + end + + # POST /registro or /registro.json + def create + @registro = MosaicoNatura::UsuarioMn.new(registro_params) + + # Asigna le concurso + concurso = CatConcurso.where(nombre_concurso: MosaicoNatura::UsuarioMn::CONCURSO).first + @registro.concurso_id = concurso.id + + respond_to do |format| + if @registro.save + format.html { redirect_to edit_mosaico_natura_registro_path(@registro), notice: "Tu registro fue creado exitosamente." } + format.json { render :show, status: :created, location: @registro } + else + @form_params = { url: '/mosaico_natura/registro', method: 'post' } + format.html { render :new, locals: { notice: "Hubo un problema al guardar tus datos. Verifica que todos los campos esten completos"} } + format.json { render json: @registro.errors, status: :unprocessable_entity } + end + end + end + + # PATCH/PUT /registro/1 or /registro/1.json + def update + respond_to do |format| + if @registro.update(registro_params) + @form_params = { url: mosaico_natura_registro_path(@registro), method: 'put' } + format.html { redirect_to edit_mosaico_natura_registro_path(@registro), notice: "Tu registro fue actualizado exitosamente." } + format.json { render :show, status: :ok, location: @registro } + else + @form_params = { url: mosaico_natura_registro_path(@registro), method: 'put' } + format.html { redirect_to edit_mosaico_natura_registro_path(@registro), notice: "Hubo un problema al guardar tus datos. Verifica haber llenado todos los campos"} + format.json { render json: @registro.errors, status: :unprocessable_entity } + end + end + end + + + private + # Use callbacks to share common setup or constraints between actions. + def set_registro + @registro = MosaicoNatura::UsuarioMn.find(params[:id]) + end + + def set_categorias + if @registro.present? + if @registro.fecha_nacimiento < MosaicoNatura::UsuarioMn::FECHA_NAC_MIN_ADULTOS + @categorias = Categoria.where(cat_concurso_id: 2).where.not(nombre_categoria: ["tema_libre"]).map{|c|[c.nombre_categoria, c.id]} + else + @categorias = Categoria.where(cat_concurso_id: 2).where(nombre_categoria: ["tema_libre"]).map{|c|[c.nombre_categoria, c.id]} + end + end + end + + # Only allow a list of trusted parameters through. + def registro_params + + params.require(:usuario_mn).permit(:nombre, :apellido_paterno, :apellido_materno, :fecha_nacimiento, :lugar_nacimiento, :medio, :otro_medio, :user_id, + direccion_attributes: [:id, :calle, :numero, :interior, :colonia, :municipio, :cp, :estado, :usuario_id, :_destroy], + media_attributes: [:id, :original_filename, :posicion, :filename, :titulo, :fecha_subida, :ruta, :size, :usuario_id, :categoria_id, :_destroy, + media_metadato_attributes: [:id, :titulo, :descripcion, :marca, :otra_marca, :localidad, :media_id, :destroy]], + ) + end +end + diff --git a/app/controllers/usuarios_controller.rb b/app/controllers/usuarios_controller.rb index ecc86db..48d3023 100644 --- a/app/controllers/usuarios_controller.rb +++ b/app/controllers/usuarios_controller.rb @@ -1,5 +1,5 @@ class UsuariosController < ApplicationController - before_action :set_usuario, only: %i[ show edit update destroy ] + before_action :set_usuario, only: %i[ show edit update destroy ] # GET /usuarios or /usuarios.json def index @@ -64,6 +64,10 @@ def set_usuario # Only allow a list of trusted parameters through. def usuario_params - params.require(:usuario).permit(:email, :nombre, :apellido_paterno, :apellido_materno, :fecha_nacimiento_nac, :lugar_nacimiento, :curp, :password, :password_confirmation) + params.require(:usuario).permit(:email, :nombre, :apellido_paterno, :apellido_materno, :fecha_nacimiento, :lugar_nacimiento, :password, :password_confirmation, + direccion_attributes: [:id, :calle, :numero, :interior, :colonia, :municipio, :cp, :estado, :usuario_id, :_destroy], + medias_attributes: [:id, :original_filename, :filename, :titulo, :fecha_subida, :ruta, :size, :usuario_id, :categoria_id, :_destroy], + usuario_metadatos_attributes: [:id, :id_metadato, :id_usuario, :valor_metadato, :_destroy] + ) end end diff --git a/app/models/calificacion.rb b/app/models/calificacion.rb new file mode 100644 index 0000000..ba2a363 --- /dev/null +++ b/app/models/calificacion.rb @@ -0,0 +1,13 @@ +# == Schema Information +# +# Table name: calificaciones +# +# id :bigint not null, primary key +# calificacion :integer +# created_at :datetime not null +# updated_at :datetime not null +# media_id :integer +# usuario_id :integer +# +class Calificacion < ApplicationRecord +end diff --git a/app/models/cat_concurso.rb b/app/models/cat_concurso.rb index 06717b2..ead5a3b 100644 --- a/app/models/cat_concurso.rb +++ b/app/models/cat_concurso.rb @@ -1,2 +1,12 @@ +# == Schema Information +# +# Table name: cat_concursos +# +# id :bigint not null, primary key +# descripcion_concurso :text(65535) +# nombre_concurso :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# class CatConcurso < ApplicationRecord end diff --git a/app/models/cat_metadato.rb b/app/models/cat_metadato.rb index 5b644f3..a335361 100644 --- a/app/models/cat_metadato.rb +++ b/app/models/cat_metadato.rb @@ -1,6 +1,17 @@ +# == Schema Information +# +# Table name: cat_metadatos +# +# id :bigint not null, primary key +# ancestry :string(255) +# descripcion :string(255) +# nombre_metadato :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# class CatMetadato < ApplicationRecord - belongs_to :media_metadato - belongs_to :usuario_metadato + has_many :media_metadatos, foreign_key: :metadato_id + has_many :usuario_metadatos, foreign_key: :metadato_id end diff --git a/app/models/categoria.rb b/app/models/categoria.rb index c7d476b..96430bf 100644 --- a/app/models/categoria.rb +++ b/app/models/categoria.rb @@ -1,5 +1,27 @@ +# == Schema Information +# +# Table name: categorias +# +# id :bigint not null, primary key +# nombre_categoria :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# cat_concurso_id :integer +# class Categoria < ApplicationRecord - belongs_to :media + #belongs_to :media + #Momentaneamente las pondre aquí ya luego las paso a la base con el crud listo + + CategoriasMN = [{pequeños_gigantes: "(Macro) Fotografías macro de especies o detalles que comúnmente no son percibidos a simple vista. Incluyen imágenes tomadas con microscopio.", + fauna: "Incluye animales nativos de México en vida silvestre; desde pequeños insectos hasta grandes mamíferos, siempre que éstos, no estén en cautiverio o sean animales domésticos y/o mascotas.", + plantas_y_hongos: "Incluye toda clase de especies vegetales y hongos nativos de México, en vida silvestre. No se aceptarán fotografías de plantas cultivadas, de maceta o jardín.", + naturaleza_y_ser_humano: "Refiere a usos y costumbres relacionadas con el entorno natural (actividades agrícolas, artesanales, gastronómicas, medicinales, espirituales, recreativas, ceremoniales), manejo sustentable, conservación y/o restauración, también se considera en esta categoría, actividades que impacten de manera negativa, directa o indirectamente la biodiversidad."}, + {paisajes_con_ecosistemas: "Imágenes de ecosistemas no perturbados de México, desde las costas hasta las altas montañas.", + fotografía_aérea: "Imágenes de animales, plantas, ecosistemas o paisajes desde el aire.", + fotografía_subacuática:"Imágenes de animales, plantas o hábitats subacuáticos, ya sea en un entorno marino o dulceacuícola. No se aceptarán fotografías de acuario.", + cineminuto: "(Video) Breves historias de nuestra naturaleza, su uso, conservación o deterioro."}, + {tema_libre: "(Jóvenes) Incluye cualquier fotografía relacionada con la riqueza natural de México, es decir, animales o plantas en su ambiente natural, paisajes naturales, actividades relacionadas con el hombre y la naturaleza. No se aceptarán fotografías de plantas cultivadas, animales en cautiverio o cualquier otro ambiente controlado."}].freeze + end diff --git a/app/models/direccion.rb b/app/models/direccion.rb index dde66f3..b36d3b0 100644 --- a/app/models/direccion.rb +++ b/app/models/direccion.rb @@ -1,5 +1,22 @@ +# == Schema Information +# +# Table name: direcciones +# +# id :bigint not null, primary key +# calle :string(255) +# colonia :string(255) +# cp :string(255) +# estado :string(255) +# interior :string(255) +# municipio :string(255) +# numero :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# usuario_id :integer not null +# class Direccion < ApplicationRecord belongs_to :usuario + ESTADOS = [["Aguascalientes", "aguascalientes"], ["Baja California", "baja-california"], ["Baja California Sur", "baja-california-sur"], ["Campeche", "campeche"], ["Chiapas", "chiapas"], ["Chihuahua", "chihuahua"], ["Ciudad de México", "ciudad-de-mexico"], ["Coahuila", "coahuila"], ["Colima", "colima"], ["Durango", "durango"], ["Estado de México", "estado-de-mexico"], ["Guanajuato", "guanajuato"], ["Guerrero", "guerrero"], ["Hidalgo", "hidalgo"], ["Jalisco", "jalisco"], ["Michoacán", "michoacan"], ["Morelos", "morelos"], ["Nayarit", "nayarit"], ["Nuevo León", "nuevo-leon"], ["Oaxaca", "oaxaca"], ["Puebla", "puebla"], ["Querétaro", "queretaro"], ["Quintana Roo", "quintana-roo"], ["San Luis Potosí", "san-luis-potosi"], ["Sinaloa", "sinaloa"], ["Sonora", "sonora"], ["Tabasco", "tabasco"], ["Tamaulipas", "tamaulipas"], ["Tlaxcala", "tlaxcala"], ["Veracruz", "veracruz"], ["Yucatán", "yucatan"], ["Zacatecas", "zacatecas"]] end diff --git a/app/models/entre_azul_y_verde.rb b/app/models/entre_azul_y_verde.rb index f0635b9..53d0fbb 100644 --- a/app/models/entre_azul_y_verde.rb +++ b/app/models/entre_azul_y_verde.rb @@ -2,4 +2,11 @@ module EntreAzulYVerde #def self.table_name_prefix # 'entre_azul_y_verde_' #end + class Galeria + def self.todos + [1,2,3,4,5] + end + end + end + diff --git a/app/models/entre_azul_y_verde/calificacion_ayv.rb b/app/models/entre_azul_y_verde/calificacion_ayv.rb new file mode 100644 index 0000000..7edf23d --- /dev/null +++ b/app/models/entre_azul_y_verde/calificacion_ayv.rb @@ -0,0 +1,18 @@ +# == Schema Information +# +# Table name: calificaciones +# +# id :bigint not null, primary key +# calificacion :integer +# created_at :datetime not null +# updated_at :datetime not null +# media_id :integer +# usuario_id :integer +# +class CalificacionAyv < Calificacion + + belongs_to :usuario, class_name: "UsuarioAyv" + belongs_to :media, class_name: "MediaAyv" + validates_presence_of :calificacion, :media_id, :usuario_id + +end diff --git a/app/models/entre_azul_y_verde/direccion_ayv.rb b/app/models/entre_azul_y_verde/direccion_ayv.rb new file mode 100644 index 0000000..de863bd --- /dev/null +++ b/app/models/entre_azul_y_verde/direccion_ayv.rb @@ -0,0 +1,22 @@ +# == Schema Information +# +# Table name: direcciones +# +# id :bigint not null, primary key +# calle :string(255) +# colonia :string(255) +# cp :string(255) +# estado :string(255) +# interior :string(255) +# municipio :string(255) +# numero :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# usuario_id :integer not null +# +class DireccionAyv < Direccion + + belongs_to :usuario, class_name: "UsuarioAyv" + validates_presence_of :calle, :numero, :colonia, :municipio, :cp, :estado + +end diff --git a/app/models/entre_azul_y_verde/eayv_cat_concurso.rb b/app/models/entre_azul_y_verde/eayv_cat_concurso.rb deleted file mode 100644 index def9b2a..0000000 --- a/app/models/entre_azul_y_verde/eayv_cat_concurso.rb +++ /dev/null @@ -1,2 +0,0 @@ -class EntreAzulYVerde::EayvCatConcurso < CatConcurso -end diff --git a/app/models/entre_azul_y_verde/eayv_cat_metadato.rb b/app/models/entre_azul_y_verde/eayv_cat_metadato.rb deleted file mode 100644 index 82ab38b..0000000 --- a/app/models/entre_azul_y_verde/eayv_cat_metadato.rb +++ /dev/null @@ -1,2 +0,0 @@ -class EntreAzulYVerde::EayvCatMetadato < CatMetadato -end diff --git a/app/models/entre_azul_y_verde/eayv_categoria.rb b/app/models/entre_azul_y_verde/eayv_categoria.rb deleted file mode 100644 index 74157d3..0000000 --- a/app/models/entre_azul_y_verde/eayv_categoria.rb +++ /dev/null @@ -1,2 +0,0 @@ -class EntreAzulYVerde::EayvCategoria < Categoria -end diff --git a/app/models/entre_azul_y_verde/eayv_direccion.rb b/app/models/entre_azul_y_verde/eayv_direccion.rb deleted file mode 100644 index 98a1b02..0000000 --- a/app/models/entre_azul_y_verde/eayv_direccion.rb +++ /dev/null @@ -1,2 +0,0 @@ -class EntreAzulYVerde::EayvDireccion < Direccion -end diff --git a/app/models/entre_azul_y_verde/eayv_media.rb b/app/models/entre_azul_y_verde/eayv_media.rb deleted file mode 100644 index 55f7fb9..0000000 --- a/app/models/entre_azul_y_verde/eayv_media.rb +++ /dev/null @@ -1,2 +0,0 @@ -class EntreAzulYVerde::EayvMedia < Media -end diff --git a/app/models/entre_azul_y_verde/eayv_media_metadato.rb b/app/models/entre_azul_y_verde/eayv_media_metadato.rb deleted file mode 100644 index b953428..0000000 --- a/app/models/entre_azul_y_verde/eayv_media_metadato.rb +++ /dev/null @@ -1,2 +0,0 @@ -class EntreAzulYVerde::EayvMediaMetadato < MediaMetadato -end diff --git a/app/models/entre_azul_y_verde/eayv_usuario.rb b/app/models/entre_azul_y_verde/eayv_usuario.rb deleted file mode 100644 index db8aeef..0000000 --- a/app/models/entre_azul_y_verde/eayv_usuario.rb +++ /dev/null @@ -1,2 +0,0 @@ -class EntreAzulYVerde::EayvUsuario < Usuario -end diff --git a/app/models/entre_azul_y_verde/eayv_usuario_metadato.rb b/app/models/entre_azul_y_verde/eayv_usuario_metadato.rb deleted file mode 100644 index 517d898..0000000 --- a/app/models/entre_azul_y_verde/eayv_usuario_metadato.rb +++ /dev/null @@ -1,2 +0,0 @@ -class EntreAzulYVerde::EayvUsuarioMetadato < UsuarioMetadato -end diff --git a/app/models/entre_azul_y_verde/media_ayv.rb b/app/models/entre_azul_y_verde/media_ayv.rb new file mode 100644 index 0000000..266034c --- /dev/null +++ b/app/models/entre_azul_y_verde/media_ayv.rb @@ -0,0 +1,34 @@ +# == Schema Information +# +# Table name: medias +# +# id :bigint not null, primary key +# fecha_subida :date +# filename :string(255) +# original_filename :string(255) +# posicion :integer +# ruta :string(255) +# size :integer +# titulo :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# categoria_id :integer +# usuario_id :integer +# +class MediaAyv < Media + + #belongs_to :categoria + belongs_to :usuario, class_name: "UsuarioAyv" + has_one :media_metadato, inverse_of: :media, foreign_key: :media_id, class_name: "MediaMetadatoAyv", dependent: :destroy + accepts_nested_attributes_for :media_metadato, allow_destroy: true + + has_one :calificacion, inverse_of: :media, foreign_key: :media_id, class_name: "CalificacionAyv" + accepts_nested_attributes_for :calificacion, allow_destroy: true + + validates_presence_of :original_filename + + mount_uploader :original_filename, MediaUploader + + scope :where_basico, -> { where('categoria_id is null') } + scope :por_posicion, ->(posicion) { where(posicion: posicion) } +end diff --git a/app/models/entre_azul_y_verde/media_metadato_ayv.rb b/app/models/entre_azul_y_verde/media_metadato_ayv.rb new file mode 100644 index 0000000..e400964 --- /dev/null +++ b/app/models/entre_azul_y_verde/media_metadato_ayv.rb @@ -0,0 +1,23 @@ +# == Schema Information +# +# Table name: media_metadatos +# +# id :bigint not null, primary key +# compromiso :text(65535) +# descripcion :text(65535) +# localidad :string(255) +# marca :string(255) +# otra_marca :string(255) +# tecnica :text(65535) +# titulo :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# media_id :integer not null +# +class MediaMetadatoAyv < MediaMetadato + + belongs_to :media, class_name: "MediaAyv" + belongs_to :usuario + validates_presence_of :titulo, :descripcion, :tecnica, :compromiso + +end diff --git a/app/models/entre_azul_y_verde/tutor_ayv.rb b/app/models/entre_azul_y_verde/tutor_ayv.rb new file mode 100644 index 0000000..dcff953 --- /dev/null +++ b/app/models/entre_azul_y_verde/tutor_ayv.rb @@ -0,0 +1,20 @@ +# == Schema Information +# +# Table name: tutores +# +# id :bigint not null, primary key +# apellido_materno :string(255) +# apellido_paterno :string(255) +# correo :string(255) +# nombre :string(255) +# telefono_contacto :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# usuario_id :integer not null +# +class TutorAyv < Tutor + + belongs_to :usuario, class_name: "UsuarioAyv" + validates_presence_of :nombre, :apellido_paterno, :apellido_materno + +end diff --git a/app/models/entre_azul_y_verde/usuario_ayv.rb b/app/models/entre_azul_y_verde/usuario_ayv.rb new file mode 100644 index 0000000..8d2b0b4 --- /dev/null +++ b/app/models/entre_azul_y_verde/usuario_ayv.rb @@ -0,0 +1,92 @@ +# == Schema Information +# +# Table name: usuarios +# +# id :bigint not null, primary key +# apellido_materno :string(255) +# apellido_paterno :string(255) +# fecha_nacimiento :date +# lugar_nacimiento :string(255) +# medio :string(255) +# nombre :string(255) +# otro_medio :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# concurso_id :integer not null +# user_id :integer not null +# +class UsuarioAyv < Usuario + + CONCURSO = "ayv".freeze + MEDIO = [["Redes sociales", "redes-sociales"], ["Radio", "radio"], ["Televisión", "television"], ["En la escuela", "escuela"], ["Otro", "otro"]] + FECHA_NAC_MIN = "2003-01-01" + FECHA_NAC_MAX = "2016-01-01" + FECHA_TERMINO = Date.new(2025,12,28) + + #alias_attribute :edad, :edad + + validates_presence_of :nombre, :apellido_paterno, :apellido_materno, :fecha_nacimiento, :lugar_nacimiento, :medio + #validates_presence_of :nombre + + has_one :direccion, inverse_of: :usuario, foreign_key: :usuario_id, class_name: "DireccionAyv", dependent: :destroy + accepts_nested_attributes_for :direccion, allow_destroy: true + + has_one :tutor, inverse_of: :usuario, foreign_key: :usuario_id, class_name: "TutorAyv", dependent: :destroy + accepts_nested_attributes_for :tutor, allow_destroy: true + + has_many :media, -> { order("posicion ASC") }, inverse_of: :usuario, foreign_key: :usuario_id, class_name: "MediaAyv", dependent: :destroy + accepts_nested_attributes_for :media, allow_destroy: true + + has_many :media_bis, inverse_of: :usuario, foreign_key: :usuario_id, class_name: "MediaAyv" + + has_many :media_metadato, through: :media_bis, source: :media_metadato + + has_many :calificaciones, inverse_of: :usuario, foreign_key: :usuario_id, class_name: "CalificacionAyv" + + scope :select_dibujo, -> { select(:id, :fecha_nacimiento, "medias.id as media1_id", "medias.original_filename as proceso", "media_bis_usuarios_join.id as media2_id", "media_bis_usuarios_join.original_filename as terminado", "media_metadatos.titulo", :descripcion, :tecnica, :compromiso, :calificacion) } + scope :select_promedio, -> { select("(substr(cast(calificacion as char),1,1) + substr(cast(calificacion as char),2,1) + substr(cast(calificacion as char),3,1))/3 as promedio") } + scope :select_datos_usuario, -> { select_dibujo.select(:nombre, :apellido_paterno, :apellido_materno, :estado) } #must join direcciones + scope :select_lugar, -> { select("(substr(cast(calificacion as char),4,1)) as lugar") } + scope :select_ganadores, -> { select_datos_usuario.select_lugar } + scope :select_menciones, -> { select_datos_usuario.select_promedio } + + scope :joins_dibujos_todos, -> { left_joins(:media, :media_metadato, :calificaciones) } + scope :joins_con_calificacion, -> { left_joins(:media, :media_metadato).joins(:calificaciones) } + scope :joins_con_calificacion_direccion, -> { joins_con_calificacion.joins(:direccion) } + + scope :where_dibujos, -> { where('medias.posicion = 1').where('media_bis_usuarios_join.posicion = 2').where(concurso_id: 1) } + + scope :dibujos, -> { select_dibujo.joins_dibujos_todos.where_dibujos.order('usuarios.id ASC') } # All los dibujos, por eso el left join + scope :dibujos_finalistas, -> { select_dibujo.joins_con_calificacion.where_dibujos.order('usuarios.id ASC') } # Solo los finalistas, por eso el inner join + scope :dibujos_desempate, -> { select_dibujo.select_promedio.joins_con_calificacion.where_dibujos.order('promedio DESC').limit(6) } # Sólo los q se tienen q desempatar + scope :dibujos_ganadores, -> { select_ganadores.joins_con_calificacion_direccion.where_dibujos.where("calificacion not like '%0'").order('lugar ASC') } # Los elegidos por los dioses... (del dibujo :P) + scope :dibujos_para_menciones, -> (estado) { select_menciones.joins_con_calificacion_direccion.where_dibujos.where("calificacion like '%0'").where('direcciones.estado' => estado ).order('estado', 'promedio DESC').limit(1) } # Los "gracias por participar" i.e. las menciones horroríficas (falta escoger los máximos por promedio, no se pudo hacer con sql) + + scope :menores_a_6, -> { where("usuarios.fecha_nacimiento > \"#{Date.new(2016,2,28)}\"") } #estos en teoria no son categoria + scope :de_6_a_8, -> { where("usuarios.fecha_nacimiento <= \"#{Date.new(2016,2,28)}\" and usuarios.fecha_nacimiento > \"#{Date.new(2013,2,28)}\"") } + scope :menores_a_9, -> { where("usuarios.fecha_nacimiento > \"#{Date.new(2013,2,28)}\"") } #Para fusionar ambas "categorias" + + scope :de_9_a_11, -> { where("usuarios.fecha_nacimiento <= \"#{Date.new(2013,2,28)}\" and usuarios.fecha_nacimiento > \"#{Date.new(2010,2,28)}\"") } + + scope :de_12_a_14, -> { where("usuarios.fecha_nacimiento <= \"#{Date.new(2010,2,28)}\" and usuarios.fecha_nacimiento > \"#{Date.new(2007,2,28)}\"") } + + scope :de_15_a_17, -> { where("usuarios.fecha_nacimiento <= \"#{Date.new(2007,2,28)}\" and usuarios.fecha_nacimiento > \"#{Date.new(2004,2,28)}\"") } + scope :mayores_a_17, -> { where("usuarios.fecha_nacimiento <= \"#{Date.new(2004,2,28)}\"") } #estos en teoria no son categoria + scope :mayores_a_14, -> { where("usuarios.fecha_nacimiento <= \"#{Date.new(2007,2,28)}\"") } #Para fusionar ambas "categorias" + + + def age_in_completed_years(bd) + # Difference in years, less one if you have not had a birthday this year. + a = FECHA_TERMINO.year - bd.year + a = a - 1 if ( + bd.month > FECHA_TERMINO.month or + (bd.month >= FECHA_TERMINO.month and bd.day > FECHA_TERMINO.day) + ) + a + end + + def edad + age_in_completed_years(self.fecha_nacimiento) + end + +end diff --git a/app/models/media.rb b/app/models/media.rb index 565075c..2a4a39b 100644 --- a/app/models/media.rb +++ b/app/models/media.rb @@ -1,7 +1,28 @@ +# == Schema Information +# +# Table name: medias +# +# id :bigint not null, primary key +# fecha_subida :date +# filename :string(255) +# original_filename :string(255) +# posicion :integer +# ruta :string(255) +# size :integer +# titulo :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# categoria_id :integer +# usuario_id :integer +# class Media < ApplicationRecord - has_one :media_metadato - has_one :categoria - belongs_to :usuario + def genera_filename_anonimo + [self.usuario_id, self.categoria_id, self.id, self.created_at.strftime('%Y%m%d%H%M%S'),dame_extension(self.original_filename)].join('_') + end + def dame_extension(filename) + "." << filename.split(".")[-1].to_s.downcase.gsub('e','') + end + end diff --git a/app/models/media_metadato.rb b/app/models/media_metadato.rb index 2c94c83..be6105b 100644 --- a/app/models/media_metadato.rb +++ b/app/models/media_metadato.rb @@ -1,6 +1,19 @@ +# == Schema Information +# +# Table name: media_metadatos +# +# id :bigint not null, primary key +# compromiso :text(65535) +# descripcion :text(65535) +# localidad :string(255) +# marca :string(255) +# otra_marca :string(255) +# tecnica :text(65535) +# titulo :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# media_id :integer not null +# class MediaMetadato < ApplicationRecord - belongs_to :media - belongs_to :cat_metadato - end diff --git a/app/models/mosaico_natura.rb b/app/models/mosaico_natura.rb new file mode 100644 index 0000000..4d2d710 --- /dev/null +++ b/app/models/mosaico_natura.rb @@ -0,0 +1,8 @@ +module MosaicoNatura + class Galeria + def self.todos + end + end + +end + diff --git a/app/models/mosaico_natura/calificacion_mn.rb b/app/models/mosaico_natura/calificacion_mn.rb new file mode 100644 index 0000000..b8dde22 --- /dev/null +++ b/app/models/mosaico_natura/calificacion_mn.rb @@ -0,0 +1,18 @@ +# == Schema Information +# +# Table name: calificaciones +# +# id :bigint not null, primary key +# calificacion :integer +# created_at :datetime not null +# updated_at :datetime not null +# media_id :integer +# usuario_id :integer +# +class MosaicoNatura::CalificacionMn < Calificacion + + belongs_to :usuario, class_name: "UsuarioMn" + belongs_to :media, class_name: "MediaMn" + validates_presence_of :calificacion, :media_id, :usuario_id + +end diff --git a/app/models/mosaico_natura/categoria_mn.rb b/app/models/mosaico_natura/categoria_mn.rb new file mode 100644 index 0000000..f909d09 --- /dev/null +++ b/app/models/mosaico_natura/categoria_mn.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: categorias +# +# id :bigint not null, primary key +# nombre_categoria :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# cat_concurso_id :integer +# +class MosaicoNatura::CategoriaMn < Categoria + + has_many :media, inverse_of: :media, foreign_key: :categoria_id, class_name: "MediaMn" + +end diff --git a/app/models/mosaico_natura/direccion_mn.rb b/app/models/mosaico_natura/direccion_mn.rb new file mode 100644 index 0000000..9c8b394 --- /dev/null +++ b/app/models/mosaico_natura/direccion_mn.rb @@ -0,0 +1,22 @@ +# == Schema Information +# +# Table name: direcciones +# +# id :bigint not null, primary key +# calle :string(255) +# colonia :string(255) +# cp :string(255) +# estado :string(255) +# interior :string(255) +# municipio :string(255) +# numero :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# usuario_id :integer not null +# +class MosaicoNatura::DireccionMn < Direccion + + belongs_to :usuario, class_name: "UsuarioMn" + validates_presence_of :calle, :numero, :colonia, :municipio, :cp, :estado + +end diff --git a/app/models/mosaico_natura/media_metadato_mn.rb b/app/models/mosaico_natura/media_metadato_mn.rb new file mode 100644 index 0000000..c64cb2f --- /dev/null +++ b/app/models/mosaico_natura/media_metadato_mn.rb @@ -0,0 +1,24 @@ +# == Schema Information +# +# Table name: media_metadatos +# +# id :bigint not null, primary key +# compromiso :text(65535) +# descripcion :text(65535) +# localidad :string(255) +# marca :string(255) +# otra_marca :string(255) +# tecnica :text(65535) +# titulo :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# media_id :integer not null +# +class MosaicoNatura::MediaMetadatoMn < MediaMetadato + + MARCA = [['Canon','canon'],['Nikon','nikon'],['Olympus','olympus'],['Sony','sony'],['Fuji','fuji'],['Panasonic','panasonic'],['Otro','otro']] + + belongs_to :media, class_name: "MediaMn" + validates_presence_of :titulo, :descripcion, :marca, :localidad + +end diff --git a/app/models/mosaico_natura/media_mn.rb b/app/models/mosaico_natura/media_mn.rb new file mode 100644 index 0000000..8245baa --- /dev/null +++ b/app/models/mosaico_natura/media_mn.rb @@ -0,0 +1,88 @@ +# == Schema Information +# +# Table name: medias +# +# id :bigint not null, primary key +# fecha_subida :date +# filename :string(255) +# original_filename :string(255) +# posicion :integer +# ruta :string(255) +# size :integer +# titulo :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# categoria_id :integer +# usuario_id :integer +# +class MosaicoNatura::MediaMn < Media + + #attr_accessor :filename + FECHA_TERMINO_INICIAL = Date.new(2026, 03, 2) + + belongs_to :usuario, class_name: "UsuarioMn" + has_one :direccion, through: :usuario, source: :direccion + has_one :user, through: :usuario, source: :user + + belongs_to :categoria, class_name: "CategoriaMn" + has_one :media_metadato, inverse_of: :media, foreign_key: :media_id, class_name: "MediaMetadatoMn", dependent: :destroy + accepts_nested_attributes_for :media_metadato, allow_destroy: true + + has_many :calificaciones, inverse_of: :media, foreign_key: :media_id, class_name: "CalificacionMn" + + validates_presence_of :original_filename, :categoria_id + + mount_uploader :original_filename, MediaAwsUploader + + scope :mosaico, -> { where(categoria: (1..9))} + scope :where_fotos, -> { where('posicion IS NULL').where('usuarios.concurso_id' => 2) } + + + scope :select_medias, -> { select(:id, "original_filename as archivo_original", :filename, 'media_metadatos.titulo', :descripcion, :marca, :localidad, :otra_marca, :calificacion, :usuario_id, "usuarios.fecha_nacimiento", :categoria_id, :created_at, :nombre_categoria) } + scope :select_promedio_fotos, -> { select("(substr(cast(calificacion as char),1,1) + substr(cast(calificacion as char),2,1) + substr(cast(calificacion as char),3,1) + substr(cast(calificacion as char),4,1))/4 as promedio") } + scope :select_promedio_videos, -> { select("(substr(cast(calificacion as char),1,1) + substr(cast(calificacion as char),2,1))/2 as promedio") } + scope :select_promedio_comparativo_fotos, -> { select_promedio_fotos.select("(substr(cast(calificacion as char),2,1) + substr(cast(calificacion as char),3,1) + substr(cast(calificacion as char),4,1))/3 as promedio_sin_juez01", "(substr(cast(calificacion as char),1,1) + substr(cast(calificacion as char),3,1) + substr(cast(calificacion as char),4,1))/3 as promedio_sin_juez02", "(substr(cast(calificacion as char),1,1) + substr(cast(calificacion as char),2,1) + substr(cast(calificacion as char),4,1))/3 as promedio_sin_juez03", "(substr(cast(calificacion as char),1,1) + substr(cast(calificacion as char),2,1) + substr(cast(calificacion as char),3,1))/3 as promedio_sin_juez04") } + scope :select_promedio_comparativo_videos, -> { select_promedio_videos.select("substr(cast(calificacion as char),2,1) as promedio_sin_juez01", "substr(cast(calificacion as char),1,1) as promedio_sin_juez02", "'' as promedio_sin_juez03", "'' as promedio_sin_juez04") } + scope :select_datos_usuario, -> { select("usuarios.nombre", "usuarios.apellido_paterno", "usuarios.apellido_materno")} + scope :select_datos_direccion, -> { select(:calle, :numero, :interior, :colonia, :municipio, :cp, :estado) } + + scope :select_ganadores, -> { select_medias.select_datos_usuario.select(:estado, :municipio).select("substr(cast(calificacion as char),5,1) as lugar")} + scope :select_todo, -> { select_medias.select_datos_usuario.select_datos_direccion.select("substr(cast(calificacion as char),5,1) as lugar").select( :email, "usuarios.medio", "usuarios.otro_medio" ) } + + scope :joins_con_calificacion, -> { joins(:media_metadato, :categoria, :usuario).left_joins(:calificaciones) } + scope :joins_con_calificacion_direccion, -> { joins_con_calificacion.joins(:direccion) } + + scope :finalistas, -> { select_medias.joins_con_calificacion.where_fotos } + scope :desempate_foto, -> { select_medias.select_promedio_comparativo_fotos.joins_con_calificacion.where('categoria_id != 8').order('lugar ASC, promedio DESC') } + scope :desempate_video, -> { select_medias.select_promedio_comparativo_videos.joins_con_calificacion.where('categoria_id' => 8).order('lugar ASC, promedio DESC') } + scope :desempate_foto_con_datos, -> { select_ganadores.select_promedio_comparativo_fotos.joins_con_calificacion_direccion.where('categoria_id != 8').order('promedio DESC') } + scope :desempate_video_con_datos, -> { select_ganadores.select_promedio_comparativo_videos.joins_con_calificacion_direccion.where('categoria_id' => 8).order('promedio DESC') } + + scope :ganadores, -> { select_ganadores.joins_con_calificacion_direccion.where_fotos.where("calificacion not like '%0'").order("categoria_id ASC, lugar ASC") } + + scope :todo_de_todos, -> { select_todo.left_joins(:media_metadato, :categoria, :user, :direccion, :calificaciones).where_fotos } + + + def filename + [self.usuario_id, self.categoria_id, self.id, self.created_at.strftime('%Y%m%d%H%M%S'),dame_extension(self.archivo_original)].join('_') + end + + def genera_filename_anonimo + filename + end + + def age_in_completed_years(bd) + # Difference in years, less one if you have not had a birthday this year. + a = FECHA_TERMINO_INICIAL.year - bd.year + a = a - 1 if ( + bd.month > FECHA_TERMINO_INICIAL.month or + (bd.month >= FECHA_TERMINO_INICIAL.month and bd.day > FECHA_TERMINO_INICIAL.day) + ) + a + end + + def edad + age_in_completed_years(self.fecha_nacimiento) + end + +end diff --git a/app/models/mosaico_natura/usuario_mn.rb b/app/models/mosaico_natura/usuario_mn.rb new file mode 100644 index 0000000..0cb57ad --- /dev/null +++ b/app/models/mosaico_natura/usuario_mn.rb @@ -0,0 +1,35 @@ +# == Schema Information +# +# Table name: usuarios +# +# id :bigint not null, primary key +# apellido_materno :string(255) +# apellido_paterno :string(255) +# fecha_nacimiento :date +# lugar_nacimiento :string(255) +# medio :string(255) +# nombre :string(255) +# otro_medio :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# concurso_id :integer not null +# user_id :integer not null +# +class MosaicoNatura::UsuarioMn < Usuario + + CONCURSO = "mn".freeze + MEDIO = [["Redes sociales", "redes-sociales"], ["Radio", "radio"], ["Televisión", "television"], ["En la escuela", "escuela"], ["Otro", "otro"]] + FECHA_NAC_MIN = "2022-16-01" + FECHA_NAC_MIN_ADULTOS = Date.new(2004, 01, 16) + FECHA_NAC_MAX = "1904-16-01" + + validates_presence_of :nombre, :apellido_paterno, :apellido_materno, :fecha_nacimiento, :lugar_nacimiento, :medio + #validates_presence_of :nombre + + has_one :direccion, inverse_of: :usuario, foreign_key: :usuario_id, class_name: "DireccionMn", dependent: :destroy + accepts_nested_attributes_for :direccion, allow_destroy: true + + has_many :media, inverse_of: :usuario, foreign_key: :usuario_id, class_name: "MediaMn", dependent: :destroy + accepts_nested_attributes_for :media, allow_destroy: true + +end diff --git a/app/models/tutor.rb b/app/models/tutor.rb new file mode 100644 index 0000000..770755e --- /dev/null +++ b/app/models/tutor.rb @@ -0,0 +1,19 @@ +# == Schema Information +# +# Table name: tutores +# +# id :bigint not null, primary key +# apellido_materno :string(255) +# apellido_paterno :string(255) +# correo :string(255) +# nombre :string(255) +# telefono_contacto :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# usuario_id :integer not null +# +class Tutor < ApplicationRecord + + self.table_name = :tutores + +end diff --git a/app/models/user.rb b/app/models/user.rb new file mode 100644 index 0000000..657fa30 --- /dev/null +++ b/app/models/user.rb @@ -0,0 +1,28 @@ +# == Schema Information +# +# Table name: users +# +# id :bigint not null, primary key +# email :string(255) default(""), not null +# encrypted_password :string(255) default(""), not null +# remember_created_at :datetime +# reset_password_sent_at :datetime +# reset_password_token :string(255) +# terms :boolean +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_users_on_email (email) UNIQUE +# index_users_on_reset_password_token (reset_password_token) UNIQUE +# +class User < ApplicationRecord + # Include default devise modules. Others available are: + # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable + devise :database_authenticatable, :registerable, + :recoverable, :rememberable, :validatable, :timeoutable + validates :terms,acceptance: { message: 'debes aceptar los términos y condiciones' }, on: :create + + has_many :usuarios, dependent: :destroy +end diff --git a/app/models/user_ayv.rb b/app/models/user_ayv.rb new file mode 100644 index 0000000..ee31215 --- /dev/null +++ b/app/models/user_ayv.rb @@ -0,0 +1,22 @@ +# == Schema Information +# +# Table name: users +# +# id :bigint not null, primary key +# email :string(255) default(""), not null +# encrypted_password :string(255) default(""), not null +# remember_created_at :datetime +# reset_password_sent_at :datetime +# reset_password_token :string(255) +# terms :boolean +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_users_on_email (email) UNIQUE +# index_users_on_reset_password_token (reset_password_token) UNIQUE +# +class UserAyv < User + +end diff --git a/app/models/user_mn.rb b/app/models/user_mn.rb new file mode 100644 index 0000000..ba921a4 --- /dev/null +++ b/app/models/user_mn.rb @@ -0,0 +1,21 @@ +# == Schema Information +# +# Table name: users +# +# id :bigint not null, primary key +# email :string(255) default(""), not null +# encrypted_password :string(255) default(""), not null +# remember_created_at :datetime +# reset_password_sent_at :datetime +# reset_password_token :string(255) +# terms :boolean +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_users_on_email (email) UNIQUE +# index_users_on_reset_password_token (reset_password_token) UNIQUE +# +class UserMn < User +end diff --git a/app/models/usuario.rb b/app/models/usuario.rb index f3e435d..acbf27c 100644 --- a/app/models/usuario.rb +++ b/app/models/usuario.rb @@ -1,9 +1,22 @@ +# == Schema Information +# +# Table name: usuarios +# +# id :bigint not null, primary key +# apellido_materno :string(255) +# apellido_paterno :string(255) +# fecha_nacimiento :date +# lugar_nacimiento :string(255) +# medio :string(255) +# nombre :string(255) +# otro_medio :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# concurso_id :integer not null +# user_id :integer not null +# class Usuario < ApplicationRecord - has_secure_password - has_one :direccion - has_many :media - has_many :usuario_metadatos - + belongs_to :user end diff --git a/app/models/usuario_metadato.rb b/app/models/usuario_metadato.rb index 438b5dd..4203009 100644 --- a/app/models/usuario_metadato.rb +++ b/app/models/usuario_metadato.rb @@ -1,6 +1,17 @@ +# == Schema Information +# +# Table name: usuario_metadatos +# +# id :bigint not null, primary key +# valor_metadato :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# metadato_id :integer +# usuario_id :integer +# class UsuarioMetadato < ApplicationRecord belongs_to :usuario - belongs_to :cat_metadato + belongs_to :cat_metadato, foreign_key: :metadato_id end diff --git a/app/uploaders/media_aws_uploader.rb b/app/uploaders/media_aws_uploader.rb new file mode 100644 index 0000000..5a4e6e7 --- /dev/null +++ b/app/uploaders/media_aws_uploader.rb @@ -0,0 +1,23 @@ +class MediaAwsUploader < CarrierWave::Uploader::Base + # Storage configuration within the uploader supercedes the global CarrierWave + # config, so either comment out `storage :file`, or remove that line, otherwise + # AWS will not be used. + storage :aws + + # You can find a full list of custom headers in AWS SDK documentation on + # AWS::S3::S3Object + def download_url(filename) + url(response_content_disposition: %Q{attachment; filename="#{filename}"}) + end + + # Override the directory where uploaded files will be stored. + # This is a sensible default for uploaders that are meant to be mounted: + def store_dir + concurso = model.class.to_s.underscore.split("_").last + "media/#{concurso}/#{model.usuario.id}" + end + + def extension_allowlist + %w(jpg jpeg png mp4) + end +end \ No newline at end of file diff --git a/app/uploaders/media_uploader.rb b/app/uploaders/media_uploader.rb new file mode 100644 index 0000000..a2cc54b --- /dev/null +++ b/app/uploaders/media_uploader.rb @@ -0,0 +1,48 @@ +class MediaUploader < CarrierWave::Uploader::Base + # Include RMagick or MiniMagick support: + # include CarrierWave::RMagick + # include CarrierWave::MiniMagick + + # Choose what kind of storage to use for this uploader: + storage :file + # storage :fog + + # Override the directory where uploaded files will be stored. + # This is a sensible default for uploaders that are meant to be mounted: + def store_dir + concurso = model.class.to_s.underscore.split("_").last + "media/#{concurso}/#{model.usuario.id}" + end + + # Provide a default URL as a default if there hasn't been a file uploaded: + # def default_url(*args) + # # For Rails 3.1+ asset pipeline compatibility: + # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) + # + # "/images/fallback/" + [version_name, "default.png"].compact.join('_') + # end + + # Process files as they are uploaded: + # process scale: [200, 300] + # + # def scale(width, height) + # # do something + # end + + # Create different versions of your uploaded files: + # version :thumb do + # process resize_to_fit: [50, 50] + # end + + # Add an allowlist of extensions which are allowed to be uploaded. + # For images you might use something like this: + def extension_allowlist + %w(jpg jpeg png) + end + + # Override the filename of the uploaded files: + # Avoid using model.id or version_name here, see uploader/store.rb for details. + # def filename + # "something.jpg" if original_filename + # end +end diff --git a/app/views/direcciones/_form_direccion.html.erb b/app/views/direcciones/_form_direccion.html.erb deleted file mode 100644 index 50a2e8f..0000000 --- a/app/views/direcciones/_form_direccion.html.erb +++ /dev/null @@ -1,10 +0,0 @@ -
- <%= f.input :calle %> - <%= f.input :numero %> - <%= f.input :interior %> - <%= f.input :colonia %> - <%= f.input :municipio %> - <%= f.input :cp %> - <%= f.input :estado %> - <%= f.input :id_usuario %> -
diff --git a/app/views/entre_azul_y_verde/_footer.erb b/app/views/entre_azul_y_verde/_footer.erb new file mode 100755 index 0000000..101c355 --- /dev/null +++ b/app/views/entre_azul_y_verde/_footer.erb @@ -0,0 +1,46 @@ +
+
+

NUESTROS COLABORADORES

+ +
+
+

SÍGUENOS

+ + +
+
+

CONOCE

+ +
+
+ +
+
diff --git a/app/views/entre_azul_y_verde/_header.erb b/app/views/entre_azul_y_verde/_header.erb new file mode 100644 index 0000000..0eeb0a4 --- /dev/null +++ b/app/views/entre_azul_y_verde/_header.erb @@ -0,0 +1,66 @@ + \ No newline at end of file diff --git a/app/views/entre_azul_y_verde/devise/confirmations/new.html.erb b/app/views/entre_azul_y_verde/devise/confirmations/new.html.erb new file mode 100644 index 0000000..a9a4d65 --- /dev/null +++ b/app/views/entre_azul_y_verde/devise/confirmations/new.html.erb @@ -0,0 +1,20 @@ +

Resend confirmation instructions

+ +<%= simple_form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { method: :post }) do |f| %> + <%= f.error_notification %> + <%= f.full_error :confirmation_token %> + +
+ <%= f.input :email, + required: true, + autofocus: true, + value: (resource.pending_reconfirmation? ? resource.unconfirmed_email : resource.email), + input_html: { autocomplete: "email" } %> +
+ +
+ <%= f.button :submit, "Resend confirmation instructions" %> +
+<% end %> + +<%= render "entre_azul_y_verde/devise/shared/links" %> diff --git a/app/views/entre_azul_y_verde/devise/mailer/confirmation_instructions.html.erb b/app/views/entre_azul_y_verde/devise/mailer/confirmation_instructions.html.erb new file mode 100644 index 0000000..dc55f64 --- /dev/null +++ b/app/views/entre_azul_y_verde/devise/mailer/confirmation_instructions.html.erb @@ -0,0 +1,5 @@ +

Welcome <%= @email %>!

+ +

You can confirm your account email through the link below:

+ +

<%= link_to 'Confirm my account', confirmation_url(@resource, confirmation_token: @token) %>

diff --git a/app/views/entre_azul_y_verde/devise/mailer/email_changed.html.erb b/app/views/entre_azul_y_verde/devise/mailer/email_changed.html.erb new file mode 100644 index 0000000..32f4ba8 --- /dev/null +++ b/app/views/entre_azul_y_verde/devise/mailer/email_changed.html.erb @@ -0,0 +1,7 @@ +

Hello <%= @email %>!

+ +<% if @resource.try(:unconfirmed_email?) %> +

We're contacting you to notify you that your email is being changed to <%= @resource.unconfirmed_email %>.

+<% else %> +

We're contacting you to notify you that your email has been changed to <%= @resource.email %>.

+<% end %> diff --git a/app/views/entre_azul_y_verde/devise/mailer/password_change.html.erb b/app/views/entre_azul_y_verde/devise/mailer/password_change.html.erb new file mode 100644 index 0000000..b41daf4 --- /dev/null +++ b/app/views/entre_azul_y_verde/devise/mailer/password_change.html.erb @@ -0,0 +1,3 @@ +

Hello <%= @resource.email %>!

+ +

We're contacting you to notify you that your password has been changed.

diff --git a/app/views/entre_azul_y_verde/devise/mailer/reset_password_instructions.html.erb b/app/views/entre_azul_y_verde/devise/mailer/reset_password_instructions.html.erb new file mode 100644 index 0000000..0db0fe8 --- /dev/null +++ b/app/views/entre_azul_y_verde/devise/mailer/reset_password_instructions.html.erb @@ -0,0 +1,8 @@ +

¡Hola <%= @resource.email %>!

+ +

Has solicitado cambiar tu contraseña. Puedes hacerlo en el siguiente enlace.

+ +

<%= link_to 'Cambiar mi contraseña', edit_password_url(@resource, reset_password_token: @token) %>

+ +

Si no solicitaste cambiar tu contraseña, por favor ignora este correo.

+

Tu contraseña no cambiará hasta que accedas al enlace y asignes una nueva.

diff --git a/app/views/entre_azul_y_verde/devise/mailer/unlock_instructions.html.erb b/app/views/entre_azul_y_verde/devise/mailer/unlock_instructions.html.erb new file mode 100644 index 0000000..41e148b --- /dev/null +++ b/app/views/entre_azul_y_verde/devise/mailer/unlock_instructions.html.erb @@ -0,0 +1,7 @@ +

Hello <%= @resource.email %>!

+ +

Your account has been locked due to an excessive number of unsuccessful sign in attempts.

+ +

Click the link below to unlock your account:

+ +

<%= link_to 'Unlock my account', unlock_url(@resource, unlock_token: @token) %>

diff --git a/app/views/entre_azul_y_verde/devise/passwords/edit.html.erb b/app/views/entre_azul_y_verde/devise/passwords/edit.html.erb new file mode 100644 index 0000000..b1a9a37 --- /dev/null +++ b/app/views/entre_azul_y_verde/devise/passwords/edit.html.erb @@ -0,0 +1,36 @@ +
+ <%= render partial: "entre_azul_y_verde/shared/sub-header", locals: { title: "CAMBIA TU CONTRASEÑA" } %> + +

<%= notice %>

+ +
+ + <%= simple_form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f| %> + <%= f.error_notification %> + + <%= f.input :reset_password_token, as: :hidden %> + <%= f.full_error :reset_password_token %> + +
+ <%= f.input :password, + label: "Nueva contraseña", + required: true, + autofocus: true, + hint: ("#{@minimum_password_length} caracteres minimo" if @minimum_password_length), + input_html: { autocomplete: "new-password" } %> + <%= f.input :password_confirmation, + label: "Confirma la nueva contraseña", + required: true, + input_html: { autocomplete: "new-password" } %> +
+ +
+ <%= f.button :submit, "Cambiar mi contraseña", class: "btn btn-success mb-4" %> +
+ <% end %> + + <%= render "entre_azul_y_verde/devise/shared/links" %> + +
+ +
\ No newline at end of file diff --git a/app/views/entre_azul_y_verde/devise/passwords/new.html.erb b/app/views/entre_azul_y_verde/devise/passwords/new.html.erb new file mode 100644 index 0000000..30b376a --- /dev/null +++ b/app/views/entre_azul_y_verde/devise/passwords/new.html.erb @@ -0,0 +1,28 @@ +
+ <%= render partial: "entre_azul_y_verde/shared/sub-header", locals: { title: "RECUPERAR CONTRASEÑA" } %> + +

<%= notice %>

+ +
+ + <%= simple_form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :post }) do |f| %> + <%= f.error_notification %> + +
+ <%= f.input :email, + required: true, + autofocus: true, + label: "Correo", + input_html: { autocomplete: "email" } %> +
+ +
+ <%= f.button :submit, "Enviarme instruciones", class: "btn btn-success mb-4" %> +
+ <% end %> + + <%= render "entre_azul_y_verde/devise/shared/links" %> + +
+ +
\ No newline at end of file diff --git a/app/views/entre_azul_y_verde/devise/registrations/edit.html.erb b/app/views/entre_azul_y_verde/devise/registrations/edit.html.erb new file mode 100644 index 0000000..2a6ffd6 --- /dev/null +++ b/app/views/entre_azul_y_verde/devise/registrations/edit.html.erb @@ -0,0 +1,46 @@ +
+ <%= render partial: "entre_azul_y_verde/shared/sub-header", locals: { title: "MODIFICAR CUENTA" } %> + +

<%= notice %>

+ +
+ + <%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %> + <%= f.error_notification %> + +
+ <%= f.input :email, required: true, autofocus: true, label: "Correo" %> + + <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %> +

Currently waiting confirmation for: <%= resource.unconfirmed_email %>

+ <% end %> + + <%= f.input :password, + hint: "Dejar vacío si no se desea cambiar la contraseña", + required: false, + label: "Nueva contraseña", + input_html: { autocomplete: "new-password" } %> + <%= f.input :password_confirmation, + hint: "Dejar vacío si no se desea cambiar la contraseña", + required: false, + label: "Confrima la nueva contraseña", + input_html: { autocomplete: "new-password" } %> + <%= f.input :current_password, + hint: "Es necesaria tu contraseña actual para confirmar los cambios", + required: true, + label: "Contraseña actual", + input_html: { autocomplete: "current-password" } %> +
+ +
+ <%= f.button :submit, "Actualizar", class: "btn btn-success mb-4" %> +
+ <% end %> + +
+ +

¿No estás a gusto? <%= link_to "Cancelar mi cuenta", registration_path(resource_name), data: { confirm: "Una vez que se cancele la cuenta se borrarán tus datos personales, así como las fotos que hayas subido. Este proceso no se puede revertir, ¿estás seguro?" }, method: :delete %>

+ +
+ +
\ No newline at end of file diff --git a/app/views/entre_azul_y_verde/devise/registrations/new.html.erb b/app/views/entre_azul_y_verde/devise/registrations/new.html.erb new file mode 100644 index 0000000..b117f40 --- /dev/null +++ b/app/views/entre_azul_y_verde/devise/registrations/new.html.erb @@ -0,0 +1,37 @@ +
+ <%= render partial: "entre_azul_y_verde/shared/sub-header", locals: { title: "CREAR CUENTA" } %> + +

<%= notice %>

+ +
+ + <%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> + <%= f.error_notification %> + +
+ <%= f.input :email, + required: true, + autofocus: true, + label: "Correo", + input_html: { autocomplete: "email" }%> + <%= f.input :password, + required: true, + label: "Contraseña", + hint: ("#{@minimum_password_length} caracteres mínimo" if @minimum_password_length), + input_html: { autocomplete: "new-password" } %> + <%= f.input :password_confirmation, + required: true, + label: "Confirma la contraseña", + input_html: { autocomplete: "new-password" } %> +
+ +
+ <%= f.button :submit, "Crear cuenta", class: "btn btn-success mb-4" %> +
+ <% end %> + + <%= render "entre_azul_y_verde/devise/shared/links" %> + +
+ +
\ No newline at end of file diff --git a/app/views/entre_azul_y_verde/devise/sessions/new.html.erb b/app/views/entre_azul_y_verde/devise/sessions/new.html.erb new file mode 100644 index 0000000..7abe3a2 --- /dev/null +++ b/app/views/entre_azul_y_verde/devise/sessions/new.html.erb @@ -0,0 +1,32 @@ +
+ <%= render partial: "entre_azul_y_verde/shared/sub-header", locals: { title: "INICIA SESIÓN" } %> + +

<%= notice %>

+ +
+ + <%= simple_form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %> +
+ <%= f.input :email, + required: false, + autofocus: true, + label: "Correo", + input_html: { autocomplete: "email"} %> + <%= f.input :password, + required: false, + label: "Contraseña", + input_html: { autocomplete: "current-password" } %> + <%= f.input :remember_me, as: :boolean, label: "Recordarme" if devise_mapping.rememberable? %> +
+ +
+ <%= f.button :submit, "Inicia sesión", class: "btn btn-md btn-success mb-4" %> +
+ <% end %> + + <%= render "entre_azul_y_verde/devise/shared/links" %> +
+ +
+ + diff --git a/app/views/entre_azul_y_verde/devise/shared/_error_messages.html.erb b/app/views/entre_azul_y_verde/devise/shared/_error_messages.html.erb new file mode 100644 index 0000000..ba7ab88 --- /dev/null +++ b/app/views/entre_azul_y_verde/devise/shared/_error_messages.html.erb @@ -0,0 +1,15 @@ +<% if resource.errors.any? %> +
+

+ <%= I18n.t("errors.messages.not_saved", + count: resource.errors.count, + resource: resource.class.model_name.human.downcase) + %> +

+ +
+<% end %> diff --git a/app/views/entre_azul_y_verde/devise/shared/_links.html.erb b/app/views/entre_azul_y_verde/devise/shared/_links.html.erb new file mode 100644 index 0000000..98d32c4 --- /dev/null +++ b/app/views/entre_azul_y_verde/devise/shared/_links.html.erb @@ -0,0 +1,25 @@ +<%- if controller_name != 'sessions' %> + <%= link_to "¿Ya tienes cuenta? Inicia sesión", new_session_path(resource_name) %>
+<% end %> + +<%- if devise_mapping.registerable? && controller_name != 'registrations' %> + <%= link_to "¿Aún no tienes cuenta? Regístrate", new_registration_path(resource_name) %>
+<% end %> + +<%- if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations' %> + <%= link_to "¿Olvidaste tu contraseña?", new_password_path(resource_name), class: "h6" %>
+<% end %> + +<%- if devise_mapping.confirmable? && controller_name != 'confirmations' %> + <%= link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name) %>
+<% end %> + +<%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %> + <%= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name) %>
+<% end %> + +<%- if devise_mapping.omniauthable? %> + <%- resource_class.omniauth_providers.each do |provider| %> + <%= link_to "Sign in with #{OmniAuth::Utils.camelize(provider)}", omniauth_authorize_path(resource_name, provider), method: :post %>
+ <% end %> +<% end %> diff --git a/app/views/entre_azul_y_verde/devise/unlocks/new.html.erb b/app/views/entre_azul_y_verde/devise/unlocks/new.html.erb new file mode 100644 index 0000000..c42de17 --- /dev/null +++ b/app/views/entre_azul_y_verde/devise/unlocks/new.html.erb @@ -0,0 +1,19 @@ +

Resend unlock instructions

+ +<%= simple_form_for(resource, as: resource_name, url: unlock_path(resource_name), html: { method: :post }) do |f| %> + <%= f.error_notification %> + <%= f.full_error :unlock_token %> + +
+ <%= f.input :email, + required: true, + autofocus: true, + input_html: { autocomplete: "email" } %> +
+ +
+ <%= f.button :submit, "Resend unlock instructions" %> +
+<% end %> + +<%= render "devise/shared/links" %> diff --git a/app/views/entre_azul_y_verde/galerias/2022/_ganadores.erb b/app/views/entre_azul_y_verde/galerias/2022/_ganadores.erb new file mode 100644 index 0000000..0736861 --- /dev/null +++ b/app/views/entre_azul_y_verde/galerias/2022/_ganadores.erb @@ -0,0 +1,41 @@ +
+ +
+
+ <% @ganadores.each do |categorias, dibujos| %> +
+

<%= categorias.to_s.humanize %>

+
+ +
+ <% dibujos.each_with_index do |d, i| %> + <% nombre_completo, estado = [d.nombre, d.apellido_paterno, d.apellido_materno].join(' ').titleize, d.estado.titleize %> + +
+
+ <%= nombre_completo %> > +
"> + <%= d.lugar %> +
"<%= d.titulo %>"
+

+ <%= nombre_completo %> +

+

<%= d.edad %> años

+

<%= estado%>

+
+
+
+ + <% end %> +
+ <% end %> +
diff --git a/app/views/entre_azul_y_verde/galerias/2022/_menciones_honorificas.erb b/app/views/entre_azul_y_verde/galerias/2022/_menciones_honorificas.erb new file mode 100644 index 0000000..9c3b9be --- /dev/null +++ b/app/views/entre_azul_y_verde/galerias/2022/_menciones_honorificas.erb @@ -0,0 +1,37 @@ +
+ +
+<% @menciones.each do |categorias, dibujos| %> +
+
+

<%= categorias.to_s.humanize %>

+
+ +
+ <% dibujos.each_with_index do |d, i| %> + <% nombre_completo, estado = [d.nombre, d.apellido_paterno, d.apellido_materno].join(' ').titleize, d.estado.titleize %> + +
+ <%= nombre_completo %> > +
+
"<%= d.titulo %>"
+

+ <%= nombre_completo %> +

+

<%= d.edad %> años

+

<%= estado%>

+
+
+ <% end %> +
+
+<% end %> \ No newline at end of file diff --git a/app/views/entre_azul_y_verde/galerias/_form.html.erb b/app/views/entre_azul_y_verde/galerias/_form.html.erb deleted file mode 100644 index 6b8a0d6..0000000 --- a/app/views/entre_azul_y_verde/galerias/_form.html.erb +++ /dev/null @@ -1,12 +0,0 @@ - -<%= simple_form_for(@entre_azul_y_verde_galeria) do |f| %> - <%= f.error_notification %> - <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %> - -
-
- -
- <%= f.button :submit %> -
-<% end %> diff --git a/app/views/entre_azul_y_verde/galerias/edit.html.erb b/app/views/entre_azul_y_verde/galerias/edit.html.erb deleted file mode 100644 index 7bb269b..0000000 --- a/app/views/entre_azul_y_verde/galerias/edit.html.erb +++ /dev/null @@ -1,6 +0,0 @@ -

Editing Entre Azul Y Verde Galeria

- -<%= render 'form', entre_azul_y_verde_galeria: @entre_azul_y_verde_galeria %> - -<%= link_to 'Show', @entre_azul_y_verde_galeria %> | -<%= link_to 'Back', entre_azul_y_verde_galerias_path %> diff --git a/app/views/entre_azul_y_verde/galerias/index.erb b/app/views/entre_azul_y_verde/galerias/index.erb new file mode 100644 index 0000000..a72d7db --- /dev/null +++ b/app/views/entre_azul_y_verde/galerias/index.erb @@ -0,0 +1,70 @@ +<% content_for(:delayedjs) do %> + +<% end %> + +<% content_for(:delayedcss) do %> + +<% end %> + + +
+ <%= render partial: 'entre_azul_y_verde/galerias/2022/ganadores' %> +
+
+ <%= render partial: 'entre_azul_y_verde/galerias/2022/menciones_honorificas' %> +
+ +<%= render :partial => "entre_azul_y_verde/shared/modal" %> diff --git a/app/views/entre_azul_y_verde/galerias/index.html.erb b/app/views/entre_azul_y_verde/galerias/index.html.erb deleted file mode 100644 index 2ab8cec..0000000 --- a/app/views/entre_azul_y_verde/galerias/index.html.erb +++ /dev/null @@ -1,25 +0,0 @@ -

<%= notice %>

- -

Entre Azul Y Verde Galerias

- - - - - - - - - - <% @entre_azul_y_verde_galerias.each do |entre_azul_y_verde_galeria| %> - - - - - - <% end %> - -
<%= link_to 'Show', entre_azul_y_verde_galeria %><%= link_to 'Edit', edit_entre_azul_y_verde_galeria_path(entre_azul_y_verde_galeria) %><%= link_to 'Destroy', entre_azul_y_verde_galeria, method: :delete, data: { confirm: 'Are you sure?' } %>
- -
- -<%= link_to 'New Entre Azul Y Verde Galeria', new_entre_azul_y_verde_galeria_path %> diff --git a/app/views/entre_azul_y_verde/galerias/new.html.erb b/app/views/entre_azul_y_verde/galerias/new.html.erb deleted file mode 100644 index 847cfcf..0000000 --- a/app/views/entre_azul_y_verde/galerias/new.html.erb +++ /dev/null @@ -1,5 +0,0 @@ -

New Entre Azul Y Verde Galeria

- -<%= render 'form', entre_azul_y_verde_galeria: @entre_azul_y_verde_galeria %> - -<%= link_to 'Back', entre_azul_y_verde_galerias_path %> diff --git a/app/views/entre_azul_y_verde/galerias/show.html.erb b/app/views/entre_azul_y_verde/galerias/show.html.erb deleted file mode 100644 index af15b31..0000000 --- a/app/views/entre_azul_y_verde/galerias/show.html.erb +++ /dev/null @@ -1,4 +0,0 @@ -

<%= notice %>

- -<%= link_to 'Edit', edit_entre_azul_y_verde_galeria_path(@entre_azul_y_verde_galeria) %> | -<%= link_to 'Back', entre_azul_y_verde_galerias_path %> diff --git a/app/views/entre_azul_y_verde/inicio/_bases.erb b/app/views/entre_azul_y_verde/inicio/_bases.erb index cdb9bf5..30096ca 100644 --- a/app/views/entre_azul_y_verde/inicio/_bases.erb +++ b/app/views/entre_azul_y_verde/inicio/_bases.erb @@ -1,8 +1,42 @@ -
-
- Bases del concurso -
-
- -
-
\ No newline at end of file +

Podrán participar todos los dibujos y pinturas realizados por niños y jóvenes mexicanos de 6 a 17 años, que vivan en México o en el extranjero (que acrediten la nacionalidad mexicana).

+

Serán candidatos a participar todos los dibujos y pinturas enviados que cumplan estrictamente con los siguientes requisitos:

+ +

Condiciones legales

+ +
Asuntos no contemplados en esta Convocatoria
+

Cualquier asunto o base no establecido en el presente documento, será resuelto por la CONABIO, quien será la máxima autoridad en relación con la presente convocatoria.

+
Aviso de datos personales
+
Datos personales que se recaban y su finalidad
+

Cuando usted se registra en el 3erº Concurso Nacional Infantil y Juvenil de Dibujo y Pintura de la Naturaleza de la Conabio, se requiere que nos proporcione el nombre y apellidos del padre, madre o tutor legal del menor de edad participante, así como el nombre, apellidos y nacionalidad del menor participante, un correo electrónico, domicilio y teléfono.

+

Los datos personales de nombre y apellidos del padre, madre o tutor legal del menor de edad participante, así como el nombre, apellidos y nacionalidad del menor participante, el correo electrónico, domicilio y teléfono, que se solicitan tienen como finalidad el registro de los participantes del concurso.

+

De igual forma, los datos personales de nombre y apellidos del padre, madre o tutor legal, el correo electrónico, domicilio y teléfono, se usarán para ponernos en contacto para cualquier tema relacionado con el concurso o bien para informarle que el menor de edad ha sido ganador de alguna categoría del concurso, según corresponda.

+

Asimismo, el nombre y apellidos del menor de edad participante son usados para el registro de la categoría en que participará el menor de edad dentro del concurso y en caso de resultar ganador, se utilizará su nombre para dar el reconocimiento correspondiente y para dar el crédito autoral, en términos de la Ley Federal del Derecho de Autor.

+

No recabamos datos personales sensibles* y en caso de recibirlos no se usarán para ningún fin ni se conservarán en nuestros archivos.

+
Fundamento para el tratamiento de datos personales
+

El fundamento para el tratamiento de los datos personales son los artículos 121, 123, 124, 125, 128 de la Ley General de Transparencia y Acceso a la Información Pública; 121, 123, 124, 125, 129, del 130 al 144, 146, 151, 152 de la Ley Federal de Transparencia y Acceso a la Información Pública; 25, 26, 27 y 28 de la Ley General de Protección de Datos Personales en posesión de Sujetos Obligados, según aplique.

+
Transferencia de datos personales
+

Se podrá realizar transferencia de sus datos en caso de resultar ganador y solo para dar el debido reconocimiento y crédito autoral en términos de la Ley Federal del Derecho de autor.

+

Fuera de los fines mencionados en el párrafo anterior no se realizará transferencia de sus datos a terceros, salvo aquéllas que sean necesarias para atender requerimientos de información de una autoridad competente, en ejercicio de sus atribuciones cuando estén debidamente fundadas y motivadas.

diff --git a/app/views/entre_azul_y_verde/inicio/_categorias.erb b/app/views/entre_azul_y_verde/inicio/_categorias.erb old mode 100644 new mode 100755 index 6434efa..65a661b --- a/app/views/entre_azul_y_verde/inicio/_categorias.erb +++ b/app/views/entre_azul_y_verde/inicio/_categorias.erb @@ -1,8 +1,92 @@ -
-
- Categorías del concurso -
-
+
+

ATENCIÓN si vives en México y tienes entre 6 y 17 años, o si eres mexicano, pero vives en otro país, puedes participar en las siguientes categorías:

+

Niños de 6 a 8 años

+

Niños de 9 a 11 años

+

Niños de 12 a 14 años

+

Niños de 15 a 17 años

+

Premios

+

Para cada categoría de edad

+ + + + + + +
+ + + + +
Materiales para artista de naturaleza, (colores, pinturas y 2 colecciones de 6 libros.)
+
+ + + + +
Materiales para artista de naturaleza (colores, pinturas y 3 series de 6 libros)
+
+ + + + +
Materiales para artista de naturaleza (colores, pinturas y 1 serie de 6 libros)
+
+

Además, será seleccionada la mejor ilustración de cada estado. Las 12 ilustraciones ganadoras más las 32 seleccionadas de los estados formarán parte de la exposición digital “Entre azul y verde: Somos parte de la solución”, que podrás ver en las páginas de internet: México, país de las maravillas. Así como en el Museo de Historia Natural y Cultura Ambiental de la Ciudad de México que se inaugurará en Julio del 2022.

-
-
\ No newline at end of file +

¿Quieres participar? Es muy sencillo, sigue estos 5 pasos:

+
+
+ +

¿Qué puedo hacer?

+

Muchas personas consideran que no tienen responsabilidad sobre el deterioro del ambiente (contaminación, pérdida de ecosistemas y de especies). Sin embargo, todos contribuimos y todos podemos contribuir a su restauración.

+

Piensa en tus actividades diarias y cómo puedes reducir tu impacto o “huella ecológica”. Millones de mexicanos podemos hacer la diferencia si cada uno somos conscientes de nuestras decisiones y acciones para vivir en armonía con la naturaleza. Por ejemplo, puedes empezar ahorrando agua cuando te bañas, alimentándote de productos sanos para ti y para el ambiente. La comida chatarra además de que no es buena para tu salud tiene un impacto muy grande por su proceso, empaque, transporte, refrigeración, etc.

+
+
+ +

¿Cómo ser un consumidor responsable?

+

Los consumidores podemos reducir nuestro impacto en el ambiente seleccionando responsablemente los productos alimenticios que compramos. La producción de alimentos, verduras, frutas, derivados de animales (carne, leche, huevos) y la pesca de productos marinos tiene serias consecuencias ambientales. El uso desmedido de agroquímicos e insecticidas en la agricultura, la producción confinada, el uso de anabólicos en el ganado, la sobrepesca y contaminación en el mar son algunas de las amenazas a nuestra salud y a la de los ecosistemas naturales.

+

Existen alternativas de producción que resultan en alimentos sanos y sustentables. Conócelas y apoya a los productores que hacen un esfuerzo por reducir su impacto en la naturaleza y proteger nuestra salud.

+

Estos 10 videos te pueden dar algunas ideas.

+

¿Por qué es importante conservar y cuidar nuestra naturaleza?

+

Hay muchas razones. Revisa algunas. ¿Cuál te convence más?

+
+
+ +

¿Qué propones?

+

Cuéntanos en un dibujo o pintura tu propuesta:

+ +

¡Recuerda! Todos Somos parte de la solución para reducir el impacto ambiental y vivir en armonía con la naturaleza.

+
+
+ +

Requisitos del dibujo o pintura

+

Debes elaborar tu dibujo o pintura de los siguientes tamaños:

+ +
+
+ +

Envía las fotos (2) y tus datos

+

Toma dos fotos

+
    +
  1. Primera foto: Foto al iniciar con los primeros trazos.
  2. +
  3. Segunda foto: Foto al finalizar tu obra de arte.
  4. +
+

Las fotos no deben incluir marcas de agua, ni alteraciones digitales.

+

Envía las dos fotos digitalmente. ¡Es muy sencillo! <%= link_to 'Regístrate aquí', new_user_ayv_registration_path, class: 'btn btn-info' %>

+

Recepción de trabajos del 5 de noviembre del 2021 al 28 de febrero de 2022, después de esta fecha no se recibirán más trabajos y la plataforma quedará cerrada. La plataforma a donde puedes enviar tu dibujo es Entre Azul y Verde www.entreazulyverde.mx

+
+1 diff --git a/app/views/entre_azul_y_verde/inicio/_jurado.erb b/app/views/entre_azul_y_verde/inicio/_jurado.erb new file mode 100755 index 0000000..8215364 --- /dev/null +++ b/app/views/entre_azul_y_verde/inicio/_jurado.erb @@ -0,0 +1,31 @@ +
+
+
+
Angélica Sánchez

+

Angélica Sánchez

+

Angélica ha participado en más de 25 muestras colectivas a nivel estatal, nacional e internacional. Tras titularse de la Escuela Nacional de Pintura, Escultura y Grabado, La Esmeralda, CDMX; hoy radica en la ciudad de Puebla. Ha sido becaria en Artes visuales por el Fondo Estatal para la Cultura y las Artes, Puebla, así como también ha sido galardonada por el XXI Encuentro Nacional de Arte Joven, Aguascalientes, Ags. México.

+

Su obra multimedia ha sido seleccionada en el 8e Festival des Arts Multi-média: Rencontres Internationales des étudiants & des artistes independents. Bourges, France.

+

Su obra pictórica adquirió el 3er lugar en la convocatoria para la Campaña Nacional Anticautiverio de Mamíferos Acuáticos en México por Empty the Tanks México.

+

Angélica forma parte del catálogo digital de IMACP, Instituto Municipal de Arte y Cultura Puebla, su ciudad natal. +Sus piezas han sido adquiridas por compradores y coleccionistas tanto en México como en lo internacional.

+
+ +
+
Joel Rodríguez

+

Joel Rodríguez Palomares

+

Biólogo egresado de la Universidad de Guadalajara del Centro Universitario de Ciencias Biológico-Agropecuarias (CUCBA), apasionado por la ilustración científica a través de esta disciplina busco contribuir a que la sociedad conozca más sobre la naturaleza, la biología y el medio ambiente.

+

Desde el 2019 tengo un proyecto llamado JRP BIO-ILUSTRACIÓN el cual tiene como objetivo hacer divulgación de ciencia a través de ilustraciones científicas y naturalistas plasmadas en playeras, pretende dar a conocer la biodiversidad local y regional, esto para crear conciencia sobre la conservación de especies y hacer educación ambiental.

+

He tenido algunas colaboraciones de ilustraciones con diversas instituciones como REDTOX, CONAFOR, Colegio de Biólogos de Jalisco, ALUXES-PALENQUE Refugio de Animales, entre otras.

+

He tenido exposición de mi proyecto en diferentes ferias ambientales, exposiciones, talleres, coloquios, congresos y simposios en materia de educación ambiental y biología.

+
+ +
+
Montserrat García

+

Alejandra Montserrat García Díaz

+

Bióloga egresada de la Universidad Autónoma del Estado de Hidalgo (UAEH), quien en 2018 comenzó un proyecto de divulgación científica a través del arte, que lleva como nombre Explorando con Ale Montse, en donde con ayuda de ilustraciones científicas y naturalistas, vídeos informativos, y entrevistas a personas con proyectos en pro de la conservación, tiene como objetivo dar a conocer la importancia que tienen los organismos que nos rodean, principalmente algunos artrópodos como insectos y arácnidos; además de dar a conocer la biodiversidad y tradiciones de los lugares que visita.

+

Desde 2018 ha estudiado diversos cursos de ilustración científica con expertos en la materia, como Cecilia Santamaría Mandujano y los profesores del Colectivo de Ilustradores Científicos y de la Naturaleza de México (CICYNM). Actualmente es miembro fundador del Colectivo Arte Naturaleza, en donde se tiene como objetivo, dar a conocer la importancia de la ilustración como herramienta de la ciencia y la conservación de la biodiversidad.

+

Además, es miembro del nodo hidalgo de la Red Mexicana de Periodistas de Ciencia (REDMPC); de la Red Nacional de Divulgadores de Ciencia y Tecnología México (Renadicyt MX); y colabora con Ecoydes A. C. en proyectos de divulgación científica y educación ambiental; así como en TV Cable Hidalguense Canal 6, con cápsulas de divulgación científica.

+

Junto con otros colectivos del estado de Hidalgo, está llevando a cabo un proyecto sobre “Comunidades ecológicas” en El Bordo, Pachuca, el cual forma parte de los grupos Roots & Shoots por parte del Instituto Jane Goodall Argentina.

+
+
+
\ No newline at end of file diff --git a/app/views/entre_azul_y_verde/inicio/_medios.erb b/app/views/entre_azul_y_verde/inicio/_medios.erb old mode 100644 new mode 100755 index cca870a..53d5449 --- a/app/views/entre_azul_y_verde/inicio/_medios.erb +++ b/app/views/entre_azul_y_verde/inicio/_medios.erb @@ -1,8 +1,37 @@ -
-
- Información para medios +
+
+
+ +

Convocatoria

+
+ PDF +
+
+
+ +

Video

+ +
+
+ +

Audio

+
+
+
+
+
+
+ +

Anuncios

+ +
-
- -
-
\ No newline at end of file +
diff --git a/app/views/entre_azul_y_verde/inicio/_queEs.erb b/app/views/entre_azul_y_verde/inicio/_queEs.erb old mode 100644 new mode 100755 index 8b77db7..809d590 --- a/app/views/entre_azul_y_verde/inicio/_queEs.erb +++ b/app/views/entre_azul_y_verde/inicio/_queEs.erb @@ -1,23 +1,18 @@ -
-
- ¿Qué es? -
-
-

La salud de los seres humanos depende de la salud del planeta. Muchas personas consideran que no tienen responsabilidad sobre el impacto a la naturaleza, sin embargo, todos contribuimos pero también todos podemos ser parte de la solución. - Llevamos más de un año sufriendo las consecuencias de la pandemia, encerrados, sin socializar con la familia, los amigos y con la naturaleza. Nosotros mismos causamos el deterioro del ambiente mediante nuestro consumo y desperdicio. Piensa en tus actividades diarias ¿qué podemos hacer para mejorar el ambiente?

-
-
- -
-
-

¿Has imaginado cómo sería el lugar donde vives si convivieras más con las plantas y animales silvestres?

-

¿Conoces a las plantas y animales de nuestro país?

-

¿Qué debemos hacer para que todos vivamos en armonía?

-

OBJETIVO

-

Que los niños y jóvenes, mediante una pintura o dibujo, expresen sus ideas sobre cómo todos podemos contribuir a vivir en armonía con la naturaleza.

-

FECHA

-

Convocatoria abierta a partir del 1 de julio

-

Cierre 31 de agosto

-

Premiación segunda quincena de septiembre

-
-
\ No newline at end of file +
+

+ La salud de los seres humanos depende de la salud del planeta. Muchas personas consideran que no tienen responsabilidad sobre el impacto a la naturaleza, sin embargo, todos contribuimos pero también todos podemos ser parte de la solución. +

+

+ Llevamos más de un año sufriendo las consecuencias de la pandemia, encerrados, sin socializar con la familia, los amigos y con la naturaleza. Nosotros mismos causamos el deterioro del ambiente mediante nuestro consumo y desperdicio. Piensa en tus actividades diarias ¿qué podemos hacer para mejorar el ambiente? +

+
+
+

OBJETIVO

+

Que los niños y jóvenes, mediante una pintura o dibujo, expresen sus ideas sobre cómo todos podemos contribuir a vivir en armonía con la naturaleza.

+

FECHA

+

Convocatoria abierta a partir del 5 de noviembre del 2021

+

Cierre 28 de febrero de 2022

+

Anuncio de ganadores y menciones honoríficas 30 de abril de 2022

+

Premiación segunda quincena de mayo del 2022

+ <%# link_to 'Regístrate aquí', new_user_ayv_registration_path, class: 'btn btn-info' %> +
diff --git a/app/views/entre_azul_y_verde/inicio/index.erb b/app/views/entre_azul_y_verde/inicio/index.erb index 807d56d..0f90d7a 100644 --- a/app/views/entre_azul_y_verde/inicio/index.erb +++ b/app/views/entre_azul_y_verde/inicio/index.erb @@ -1,14 +1,67 @@ -
-
- +<% content_for(:delayedjs) do %> + +<% end %> + +

<%= notice %>

+ +
+
+ Entre Azul y Verde + Entre Azul y Verde
-
-
- Entre Azul y Verde +
+ +
+
+ ¿Qué es? +
+ <%= render :partial => 'queEs' %> +
+ +
+
+ Jurado +
+ <%= render :partial => 'jurado' %> +
+ +
+
+ Categorías del concurso +
+ <%= render :partial => 'categorias' %> +
+ +
+
+ Bases del concurso +
+
+

+ +

+ <%#= render :partial => 'bases' %> +
+
+ +
+
+ Información para medios
-
+ <%= render :partial => 'medios' %>
-<%= render :partial => 'queEs' %> -<%= render :partial => 'categorias' %> -<%= render :partial => 'bases' %> -<%= render :partial => 'medios' %> \ No newline at end of file + + +<%= render :partial => 'entre_azul_y_verde/shared/modal' %> diff --git a/app/views/entre_azul_y_verde/panel/_extemporaneos.erb b/app/views/entre_azul_y_verde/panel/_extemporaneos.erb new file mode 100644 index 0000000..722c86d --- /dev/null +++ b/app/views/entre_azul_y_verde/panel/_extemporaneos.erb @@ -0,0 +1,54 @@ +
+ +
+
+
+
ID
+
Primeros trazos
Dibujo finalizado
+
Descripción del dibujo
Compromiso del participante
+
¿Pasa a finalista?
+
+
+
+ 99999 +
+
+ + +
+
+
Capto y Aprovecho La Lluvia (DE 6 A 8 AÑOS)
+

Descripción: LO MANDÓ COMO TEMA(?):
es necesario que aprovechemos la lluvia captando a través de nuestros techos y usándola para llegar nuestras plantas

+

Compromiso: NO MANDÓ

+
+
+ > + +
+
+
+
+ 99998 +
+
+ + +
+
+
Sembrando y Cuidando Vamos Avanzando (DE 12 A 14 AÑOS)
+

Descripción: LO MANDÓ COMO TEMA(?):
las grandes ciudades acaban con el medio ambiente y es necesario hacer un esfuerzo para mantener verde nuestro planeta.

+

Compromiso: NO MANDÓ

+
+
+ > + +
+
+
\ No newline at end of file diff --git a/app/views/entre_azul_y_verde/panel/_extemporaneos_finalistas.erb b/app/views/entre_azul_y_verde/panel/_extemporaneos_finalistas.erb new file mode 100644 index 0000000..23d0f3d --- /dev/null +++ b/app/views/entre_azul_y_verde/panel/_extemporaneos_finalistas.erb @@ -0,0 +1,13 @@ +<% calificacion = CalificacionAyv.find_by_usuario_id(99998).calificacion %> +
+ +
diff --git a/app/views/entre_azul_y_verde/panel/_tabla_categoria.erb b/app/views/entre_azul_y_verde/panel/_tabla_categoria.erb new file mode 100644 index 0000000..716244c --- /dev/null +++ b/app/views/entre_azul_y_verde/panel/_tabla_categoria.erb @@ -0,0 +1,50 @@ +
+ <% @dibujos.each do |categorias, dibujos| %> +
+ +
+ +
+
+
ID
+
Primeros trazos
Dibujo finalizado
+
Descripción del dibujo
Compromiso del participante
+
¿Pasa a finalista?
+
+ <% dibujos.each do |d| %> +
+
+ <%= d.id %> +
+
+ + +
+
+
<%=d.titulo %>
+

Descripción: <%= d.descripcion %>

+

Compromiso: <%= d.compromiso %>

+
+
+ > + +
+
+ <% end %> +
+ <% end %> + <%= render partial: 'entre_azul_y_verde/panel/extemporaneos' %> +
\ No newline at end of file diff --git a/app/views/entre_azul_y_verde/panel/_tabla_desempate.erb b/app/views/entre_azul_y_verde/panel/_tabla_desempate.erb new file mode 100644 index 0000000..00d1c71 --- /dev/null +++ b/app/views/entre_azul_y_verde/panel/_tabla_desempate.erb @@ -0,0 +1,37 @@ +
+ <% @dibujos.each do |categorias, dibujos| %> +
+ +
+ +
+
+ <% dibujos.each_with_index do |d, i| %> +
+

<%= d.titulo %>

+

Promedio: <%= d.promedio.round(2) %>

+ +

Lugar asignado: <%= d.calificacion.to_s[@juez[:posicion]].to_i %>

+
+
+ > +
+ <% end %> +
+
+ <% end %> +
\ No newline at end of file diff --git a/app/views/entre_azul_y_verde/panel/_tabla_finalistas.erb b/app/views/entre_azul_y_verde/panel/_tabla_finalistas.erb new file mode 100644 index 0000000..7e2751b --- /dev/null +++ b/app/views/entre_azul_y_verde/panel/_tabla_finalistas.erb @@ -0,0 +1,33 @@ +
+ <% @dibujos.each do |categorias, dibujos| %> +
+ +
+ +
+
+ <% dibujos.each_with_index do |d, i| %> +
+ +
+ <% end %> + <%= render partial: 'entre_azul_y_verde/panel/extemporaneos_finalistas', locals: {dgcc: dgcc} if categorias == :de_12_a_14 %> +
+
+ <% end %> +
\ No newline at end of file diff --git a/app/views/entre_azul_y_verde/panel/calificacion.erb b/app/views/entre_azul_y_verde/panel/calificacion.erb new file mode 100644 index 0000000..4591df3 --- /dev/null +++ b/app/views/entre_azul_y_verde/panel/calificacion.erb @@ -0,0 +1,177 @@ +<% dgcc = (@juez.nil? || @juez[:posicion] == 3) %> +<% content_for(:delayedjs) do %> + +<% end %> + +<% content_for(:delayedcss) do %> + +<% end %> + +
+
+
    +
  • Instrucciones: (Actualizadas al 27-04-2022) Bienvenido:<%= @juez[:posicion] %> - <%= @juez[:usuario] %>
  • +
  • Dar click en la categoría deseada para mostrar los dibujos finalistass.
  • +
  • Pasar el mouse encima (hover) de los botones (el número es el id del concursante) para ver un preview de la foto del dibujo.
  • +
  • Dar click sobre cualquier botón para ver el registro del concursante en un modal (dibujos, proceso, compromiso, título, técnica, etc.)
  • +
  • Si se desea ver cualquier imagen en otra ventana, al dar click sobre cualquier imagen dentro del modal se abrirá dicha imagen en una nueva ventana.
  • +
  • Una vez inspeccionadas las imagenes con los criterios a considerar, hay que realizar la calificacion en el slider qeu se muestra en la parte inferior del modal.
  • +
  • La calificación va del '1' al '9', siendo '1' la peor calificación y '9' el máximo puntaje posible.
  • +
  • Es necesario GUARDAR los cambios, esto se realiza dando click en el botón verde que dice CONFIRMAR, al realizarse la calificación el botón cambiara de color y se mostrara la leyenda "Confirmado" junto con la califiación dada.
  • +
  • Al entrar y salir del modal de un dibujo ya calificado, se puede volver a cambiar la calificación.
  • +
  • A manera de ayuda visual, existe un contador que va cambiando conforme al número de calificaciones distintas a "1".
  • +
  • Así mismo, los botones cuyos dibujos ya se hayan calificado (cuya calificación sea distinta de "1") se veran de color verde con una palomita, esto servira para identificar si falta algún dibujo por calificar.
  • +
  • Es importante recalcar que TODOS los dibujos deben ser calificados sin excepción, esto es debido a que con ello tambien se obtienen los mejores por estado (el cual no esta mostrado en los datos para preservar el anonimato).
  • +
  • Cualquier duda que tengan, favor de remitirla a ggonzalez@conabio.gob.mx o con Ivette Mota.
  • +
  • Es todo.
  • +
+
+ <%= render partial: "entre_azul_y_verde/panel/tabla_finalistas", locals: {dgcc: dgcc} %> +
+ +<%= render :partial => "entre_azul_y_verde/shared/modal" %> diff --git a/app/views/entre_azul_y_verde/panel/desempate.erb b/app/views/entre_azul_y_verde/panel/desempate.erb new file mode 100644 index 0000000..38a3eb9 --- /dev/null +++ b/app/views/entre_azul_y_verde/panel/desempate.erb @@ -0,0 +1,168 @@ +<% dgcc = (@juez.nil? || @juez[:posicion] == 3) %> +<% content_for(:delayedjs) do %> + +<% end %> + +<% content_for(:delayedcss) do %> + +<% end %> + +
+
+
    +
  • Instrucciones: (Actualizadas al 30-04-2022)
  • +
  • El listado de dibujos por categoría esta ordenado de mayor a menor de acuerdo al promedio.
  • +
  • Se muestran los primeros 6 lugares apra poder decidir en caso de multiple empate
  • +
  • Dar click en el botón de datos para ver el resto de información, técnica, compromiso, etc.
  • +
  • Dentro del modal, anotar EL LUGAR que se desea establecer como definitivo.
  • +
  • Es todo.
  • +
+
+ <%= render partial: "entre_azul_y_verde/panel/tabla_desempate", locals: {dgcc: dgcc} %> +
+ +<%= render :partial => "entre_azul_y_verde/shared/modal" %> diff --git a/app/views/entre_azul_y_verde/panel/precalificacion.erb b/app/views/entre_azul_y_verde/panel/precalificacion.erb new file mode 100644 index 0000000..6f5c3ed --- /dev/null +++ b/app/views/entre_azul_y_verde/panel/precalificacion.erb @@ -0,0 +1,107 @@ +<% content_for(:delayedjs) do %> + +<% end %> + +<% content_for(:delayedcss) do %> + +<% end %> + +
+
+
    +
  • Instrucciones: (Actualizadas al 16-03-2022)
  • +
  • Dar click en la categoría deseada para mostrar los dibujos concursantes.
  • +
  • Pasar el mouse encima (hover) de los botones (Proceso/Terminado) para ver un preview de la foto del dibujo.
  • +
  • Dar click sobre cualquier botón para ver AMBAS imagenes en grande en un modal.
  • +
  • Si se desea ver cualquier imagen en otra ventana, dar click sobre la imagen dentro del modal abrira dicha imagen en una nueva ventana.
  • +
  • Una vez inspeccionada las imagenes, SÓLO si se desea que dicho dibujo NO pase a ser finalista (i.e. ser calificado por jueces) se debe desactivar el switch de la cuarta columna.
  • +
  • No es necesario guardar los cambios, al momento de interactuar con cada switch se guarda el estado del mismo.
  • +
  • Es todo.
  • +
+
+ <%= render partial: "entre_azul_y_verde/panel/tabla_categoria" %> +
+ +<%= render :partial => "entre_azul_y_verde/shared/modal" %> diff --git a/app/views/entre_azul_y_verde/registro/_form.html.erb b/app/views/entre_azul_y_verde/registro/_form.html.erb index 7141b9e..174b087 100644 --- a/app/views/entre_azul_y_verde/registro/_form.html.erb +++ b/app/views/entre_azul_y_verde/registro/_form.html.erb @@ -1,6 +1,45 @@ -<%= simple_form_for @registro do |f| %> - <%= f.input :nombre %> - <%= f.association :direccion %> - <%= f.association :media %> - <%= f.button :submit %> +<%= simple_form_for @registro, **@form_params, :html => {:multipart => true} do |f| %> +
+
+

Datos del concursante

+
+ <%= f.input_field :nombre, class: 'form-control my-2', placeholder: 'Nombre(s)'%> + <%= f.input_field :apellido_paterno, class: 'form-control my-2', placeholder: 'Apellido Paterno' %> + <%= f.input_field :apellido_materno, class: 'form-control my-2', placeholder: 'Apellido Materno' %> + + <%= f.date_field :fecha_nacimiento, min: UsuarioAyv::FECHA_NAC_MIN, max: UsuarioAyv::FECHA_NAC_MAX, class: 'form-check-inline my-2' %> + <%= f.input_field :lugar_nacimiento, class: 'form-control my-2', placeholder: 'Lugar de nacimiento' %> + + <%= f.select :medio, options_for_select(UsuarioAyv::MEDIO, f.object.medio), { prompt: "--- Selecciona ---" }, { class: 'form-check-inline my-2' } %> + <%= f.input_field :otro_medio, class: 'form-control my-2', placeholder: 'Otro medio (opcional)' %> + <%= f.hidden_field :user_id, value: current_user_ayv.id %> +
+ +

Datos del tutor

+
+ <%= f.fields_for :tutor do |tutor_form| %> + <%= render "entre_azul_y_verde/registro/form_tutor", f: tutor_form %> + <% end %> +
+ +

Dirección

+
+ <%= f.fields_for :direccion do |direccion_form| %> + <%= render "entre_azul_y_verde/registro/form_direccion", f: direccion_form %> + <% end %> +
+
+ +
+

Dibujos

+
+ <%= f.simple_fields_for :media do |media_form| %> + <%= render "entre_azul_y_verde/registro/form_media", f: media_form %> + <% end %> +
+
+ +
+ + <%= f.button :submit, @registro.new_record? ? 'Guardar registro' : 'Actualizar registro', class: 'btn btn-success btn-sm mb-4' %> <% end %> \ No newline at end of file diff --git a/app/views/entre_azul_y_verde/registro/_form_direccion.html.erb b/app/views/entre_azul_y_verde/registro/_form_direccion.html.erb new file mode 100644 index 0000000..5fb654f --- /dev/null +++ b/app/views/entre_azul_y_verde/registro/_form_direccion.html.erb @@ -0,0 +1,10 @@ +
+ <%= f.input_field :calle, class: 'form-control my-2', placeholder: 'Calle' %> + <%= f.input_field :numero, class: 'form-control my-2', placeholder: 'Número' %> + <%#= f.input_field :interior, class: 'form-control my-2', placeholder: 'Interior' %> + <%= f.input_field :colonia, class: 'form-control my-2', placeholder: 'Colonia' %> + <%= f.input_field :municipio, class: 'form-control my-2', placeholder: 'Municipio/Alcaldía' %> + <%= f.input_field :cp, class: 'form-control my-2', placeholder: 'Código postal' %> + + <%= f.select :estado, options_for_select(Direccion::ESTADOS, f.object.estado), { prompt: "--- Selecciona ---" }, { class: 'form-control my-2' } %> +
diff --git a/app/views/entre_azul_y_verde/registro/_form_media.html.erb b/app/views/entre_azul_y_verde/registro/_form_media.html.erb new file mode 100644 index 0000000..32b9794 --- /dev/null +++ b/app/views/entre_azul_y_verde/registro/_form_media.html.erb @@ -0,0 +1,24 @@ +
+ + <% if f.object.posicion == 1 %> + + <% else %> + + <% end %> + + <% if !@registro.new_record? %> + + <% end %> + + <%= f.file_field :original_filename, accept: 'image/png,image/jpeg', class: 'form-check-inline' %> + <%= f.hidden_field :posicion %> + +
+ +
+
+ <%= f.simple_fields_for :media_metadato do |media_metadato_form| %> + <%= render "entre_azul_y_verde/registro/form_media_metadato", f: media_metadato_form %> + <% end %> +
+
diff --git a/app/views/entre_azul_y_verde/registro/_form_media_metadato.erb b/app/views/entre_azul_y_verde/registro/_form_media_metadato.erb new file mode 100644 index 0000000..78863a5 --- /dev/null +++ b/app/views/entre_azul_y_verde/registro/_form_media_metadato.erb @@ -0,0 +1,6 @@ +
+ <%= f.input_field :titulo, class: 'form-control my-2', placeholder: 'Título del dibujo' %> + <%= f.input_field :descripcion, class: 'form-control my-2', placeholder: 'Descripción del dibujo', rows: 5 %> + <%= f.input_field :tecnica, class: 'form-control my-2', placeholder: 'Técnica del dibujo', rows: 5 %> + <%= f.input_field :compromiso, class: 'form-control my-2', placeholder: 'Menciona que puedes hacer para cuidar tu salud y la del planeta', rows: 5 %> +
\ No newline at end of file diff --git a/app/views/entre_azul_y_verde/registro/_form_tutor.erb b/app/views/entre_azul_y_verde/registro/_form_tutor.erb new file mode 100644 index 0000000..40801c9 --- /dev/null +++ b/app/views/entre_azul_y_verde/registro/_form_tutor.erb @@ -0,0 +1,6 @@ +
+ <%= f.input_field :nombre, class: 'form-control my-2', placeholder: 'Nombre(s)'%> + <%= f.input_field :apellido_paterno, class: 'form-control my-2', placeholder: 'Apellido Paterno' %> + <%= f.input_field :apellido_materno, class: 'form-control my-2', placeholder: 'Apellido Materno' %> + <%= f.input_field :telefono_contacto, class: 'form-control my-2', placeholder: 'Teléfono de contacto (opcional)' %> +
diff --git a/app/views/usuario_metadatos/_form_usuario_metadatos.html.erb b/app/views/entre_azul_y_verde/registro/_form_usuario_metadatos.erb similarity index 54% rename from app/views/usuario_metadatos/_form_usuario_metadatos.html.erb rename to app/views/entre_azul_y_verde/registro/_form_usuario_metadatos.erb index 10c1dfa..cca8aec 100644 --- a/app/views/usuario_metadatos/_form_usuario_metadatos.html.erb +++ b/app/views/entre_azul_y_verde/registro/_form_usuario_metadatos.erb @@ -1,5 +1,4 @@
- <%= f.input :id_metadato %> - <%= f.input :id_usuario %> + <%= f.input :metadato_id %> <%= f.input :valor_metadato %>
diff --git a/app/views/entre_azul_y_verde/registro/edit.html.erb b/app/views/entre_azul_y_verde/registro/edit.html.erb index 9c91f09..27e1c08 100644 --- a/app/views/entre_azul_y_verde/registro/edit.html.erb +++ b/app/views/entre_azul_y_verde/registro/edit.html.erb @@ -1,6 +1,10 @@ -

Editing Usuario

+
+

<%= notice %>

-<%= render 'form', usuario: @usuario %> - -<%= link_to 'Show', @usuario %> | -<%= link_to 'Back', usuarios_path %> + <%= render partial: "entre_azul_y_verde/shared/sub-header", locals: { title: "EDITA LOS DATOS DEL REGISTRO" } %> + +
+ <%= render 'form', usuario: @registro %> + <%= link_to 'Regresar', entre_azul_y_verde_root_path, class: "mt-4" %> +
+
\ No newline at end of file diff --git a/app/views/entre_azul_y_verde/registro/index.erb b/app/views/entre_azul_y_verde/registro/index.erb deleted file mode 100644 index 52af49e..0000000 --- a/app/views/entre_azul_y_verde/registro/index.erb +++ /dev/null @@ -1,4 +0,0 @@ -Favor de registrarte -
-What is Lorem Ipsum? -Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. \ No newline at end of file diff --git a/app/views/entre_azul_y_verde/registro/index.html.erb b/app/views/entre_azul_y_verde/registro/index.html.erb index 5c839bb..e4af7df 100644 --- a/app/views/entre_azul_y_verde/registro/index.html.erb +++ b/app/views/entre_azul_y_verde/registro/index.html.erb @@ -9,9 +9,8 @@ Nombre Apellido paterno Apellido materno - Fecha nacimiento nac + Fecha nacimiento Lugar nacimiento - Curp @@ -23,9 +22,8 @@ <%= usuario.nombre %> <%= usuario.apellido_paterno %> <%= usuario.apellido_materno %> - <%= usuario.fecha_nacimiento_nac %> + <%= usuario.fecha_nacimiento %> <%= usuario.lugar_nacimiento %> - <%= usuario.curp %> <%= link_to 'Show', usuario %> <%= link_to 'Edit', edit_usuario_path(usuario) %> <%= link_to 'Destroy', usuario, method: :delete, data: { confirm: 'Are you sure?' } %> diff --git a/app/views/entre_azul_y_verde/registro/instrucciones.erb b/app/views/entre_azul_y_verde/registro/instrucciones.erb new file mode 100644 index 0000000..81abc95 --- /dev/null +++ b/app/views/entre_azul_y_verde/registro/instrucciones.erb @@ -0,0 +1,11 @@ +

En la plataforma deberás completar la siguiente información:

+
    +
  • Título de la obra.
  • +
  • Nombre completo y edad.
  • +
  • Correo electrónico.
  • +
  • Domicilio (calle, número, colonia, alcaldía o municipio, código postal, estado).
  • +
  • Teléfono.
  • +
  • Medio por el cual te enteraste del concurso.
  • +
  • Descripción de tu dibujo incluyendo lo que tú puedes hacer para cuidar tu salud y la del planeta.
  • +
  • La madre, padre o tutor debe de incluir su nombre acompañado de la siguiente leyenda: “Autorizo la participación de mi hijo/a al concurso "Entre azul y verde", acepto las bases y otorgo mi conformidad a lo expuesto en ellas.
  • +
\ No newline at end of file diff --git a/app/views/entre_azul_y_verde/registro/new.html.erb b/app/views/entre_azul_y_verde/registro/new.html.erb index 639aba7..64ca4a3 100644 --- a/app/views/entre_azul_y_verde/registro/new.html.erb +++ b/app/views/entre_azul_y_verde/registro/new.html.erb @@ -1,6 +1,10 @@ -

Hola, bienvenido al registro de participantes

-

A continuación te solicitaremos la sigueinte información

+
+

<%= notice %>

-<%= render 'form', usuario: @usuario %> + <%= render partial: "entre_azul_y_verde/shared/sub-header", locals: { title: "COMPLETA LOS DATOS DEL REGISTRO" } %> + +
+ <%= render 'form', usuario: @registro %> +
-<%= link_to 'Back', usuarios_path %> +
diff --git a/app/views/entre_azul_y_verde/registro/show.html.erb b/app/views/entre_azul_y_verde/registro/show.html.erb index 34cfe77..bc13cf3 100644 --- a/app/views/entre_azul_y_verde/registro/show.html.erb +++ b/app/views/entre_azul_y_verde/registro/show.html.erb @@ -1,39 +1,28 @@

<%= notice %>

-

- Email: - <%= @usuario.email %> -

-

Nombre: - <%= @usuario.nombre %> + <%= @registro.nombre %>

Apellido paterno: - <%= @usuario.apellido_paterno %> + <%= @registro.apellido_paterno %>

Apellido materno: - <%= @usuario.apellido_materno %> + <%= @registro.apellido_materno %>

Fecha nacimiento nac: - <%= @usuario.fecha_nacimiento_nac %> + <%= @registro.fecha_nacimiento %>

Lugar nacimiento: - <%= @usuario.lugar_nacimiento %> -

- -

- Curp: - <%= @usuario.curp %> + <%= @registro.lugar_nacimiento %>

-<%= link_to 'Edit', edit_usuario_path(@usuario) %> | -<%= link_to 'Back', usuarios_path %> +<%= link_to 'Edit', edit_entre_azul_y_verde_registro_path(@registro) %> | diff --git a/app/views/entre_azul_y_verde/shared/_modal.erb b/app/views/entre_azul_y_verde/shared/_modal.erb new file mode 100644 index 0000000..374e3ce --- /dev/null +++ b/app/views/entre_azul_y_verde/shared/_modal.erb @@ -0,0 +1,18 @@ + + \ No newline at end of file diff --git a/app/views/entre_azul_y_verde/shared/_sub-header.erb b/app/views/entre_azul_y_verde/shared/_sub-header.erb new file mode 100644 index 0000000..d3d71ff --- /dev/null +++ b/app/views/entre_azul_y_verde/shared/_sub-header.erb @@ -0,0 +1,5 @@ +
+

Inscripción + <%= title %> + Inscripción

+
\ No newline at end of file diff --git a/app/views/layouts/entre_azul_y_verde.erb b/app/views/layouts/entre_azul_y_verde.erb index dd4d1db..984e1a7 100644 --- a/app/views/layouts/entre_azul_y_verde.erb +++ b/app/views/layouts/entre_azul_y_verde.erb @@ -10,23 +10,27 @@ <%= javascript_include_tag 'entre_azul_y_verde/entre_azul_y_verde', 'data-turbolinks-track': 'reload' %> + + + + +
- Entre Azul y Verde - + <%= render :partial => 'entre_azul_y_verde/header' %>
<%= yield %>
-
- +
+ <%= render :partial => 'entre_azul_y_verde/footer' %>
+<%= yield :delayedcss %> +<%= yield :delayedjs %> \ No newline at end of file diff --git a/app/views/layouts/mosaico_natura.erb b/app/views/layouts/mosaico_natura.erb new file mode 100755 index 0000000..55d94b6 --- /dev/null +++ b/app/views/layouts/mosaico_natura.erb @@ -0,0 +1,37 @@ + + + + + + Mosaico Natura + <%= csrf_meta_tags %> + + <%= stylesheet_link_tag 'mosaico_natura/mosaico_natura', media: 'all', 'data-turbolinks-track': 'reload' %> + <%= javascript_include_tag 'mosaico_natura/mosaico_natura', 'data-turbolinks-track': 'reload' %> + + + + + + + +
+ <% render :partial => 'mosaico_natura/header' %> +
+
+ <%= render :partial => 'mosaico_natura/shared/notice', locals: {notice: notice} if notice.present? %> + <%= yield %> +
+
+ <%render :partial => 'mosaico_natura/footer' %> +
+<%= yield :delayedcss %> +<%= yield :delayedjs %> + + diff --git a/app/views/medias/_form_media.html.erb b/app/views/medias/_form_media.html.erb deleted file mode 100644 index 44c1b6f..0000000 --- a/app/views/medias/_form_media.html.erb +++ /dev/null @@ -1,10 +0,0 @@ -
- <%= f.input :original_filename %> - <%#= f.input :filename %> - <%= f.input :titulo %> - <%#= f.input :fecha_subida %> - <%#= f.input :ruta %> - <%#= f.number :size %> - <%= f.input :id_usuario %> - <%= f.input :id_categoria %> -
diff --git a/app/views/mosaico_natura/_footer.erb b/app/views/mosaico_natura/_footer.erb new file mode 100755 index 0000000..e91471c --- /dev/null +++ b/app/views/mosaico_natura/_footer.erb @@ -0,0 +1,53 @@ +
+
+

NUESTROS COLABORADORES

+ +
+
+

SÍGUENOS

+ + +
+ +
+

LEGAL

+
    +
  • <%= link_to "Términos y condiciones", mosaico_natura_root_path.to_s + '/terminos_condiciones' %>
  • +
+
+
+ \ No newline at end of file diff --git a/app/views/mosaico_natura/_header.erb b/app/views/mosaico_natura/_header.erb new file mode 100755 index 0000000..8ee7b03 --- /dev/null +++ b/app/views/mosaico_natura/_header.erb @@ -0,0 +1,65 @@ + \ No newline at end of file diff --git a/app/views/mosaico_natura/devise/confirmations/new.html.erb b/app/views/mosaico_natura/devise/confirmations/new.html.erb new file mode 100644 index 0000000..58f806a --- /dev/null +++ b/app/views/mosaico_natura/devise/confirmations/new.html.erb @@ -0,0 +1,20 @@ +

Resend confirmation instructions

+ +<%= simple_form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { method: :post }) do |f| %> + <%= f.error_notification %> + <%= f.full_error :confirmation_token %> + +
+ <%= f.input :email, + required: true, + autofocus: true, + value: (resource.pending_reconfirmation? ? resource.unconfirmed_email : resource.email), + input_html: { autocomplete: "email" } %> +
+ +
+ <%= f.button :submit, "Resend confirmation instructions" %> +
+<% end %> + +<%= render "mosaico_natura/devise/shared/links" %> diff --git a/app/views/mosaico_natura/devise/mailer/confirmation_instructions.html.erb b/app/views/mosaico_natura/devise/mailer/confirmation_instructions.html.erb new file mode 100644 index 0000000..dc55f64 --- /dev/null +++ b/app/views/mosaico_natura/devise/mailer/confirmation_instructions.html.erb @@ -0,0 +1,5 @@ +

Welcome <%= @email %>!

+ +

You can confirm your account email through the link below:

+ +

<%= link_to 'Confirm my account', confirmation_url(@resource, confirmation_token: @token) %>

diff --git a/app/views/mosaico_natura/devise/mailer/email_changed.html.erb b/app/views/mosaico_natura/devise/mailer/email_changed.html.erb new file mode 100644 index 0000000..32f4ba8 --- /dev/null +++ b/app/views/mosaico_natura/devise/mailer/email_changed.html.erb @@ -0,0 +1,7 @@ +

Hello <%= @email %>!

+ +<% if @resource.try(:unconfirmed_email?) %> +

We're contacting you to notify you that your email is being changed to <%= @resource.unconfirmed_email %>.

+<% else %> +

We're contacting you to notify you that your email has been changed to <%= @resource.email %>.

+<% end %> diff --git a/app/views/mosaico_natura/devise/mailer/password_change.html.erb b/app/views/mosaico_natura/devise/mailer/password_change.html.erb new file mode 100644 index 0000000..b41daf4 --- /dev/null +++ b/app/views/mosaico_natura/devise/mailer/password_change.html.erb @@ -0,0 +1,3 @@ +

Hello <%= @resource.email %>!

+ +

We're contacting you to notify you that your password has been changed.

diff --git a/app/views/mosaico_natura/devise/mailer/reset_password_instructions.html.erb b/app/views/mosaico_natura/devise/mailer/reset_password_instructions.html.erb new file mode 100644 index 0000000..0db0fe8 --- /dev/null +++ b/app/views/mosaico_natura/devise/mailer/reset_password_instructions.html.erb @@ -0,0 +1,8 @@ +

¡Hola <%= @resource.email %>!

+ +

Has solicitado cambiar tu contraseña. Puedes hacerlo en el siguiente enlace.

+ +

<%= link_to 'Cambiar mi contraseña', edit_password_url(@resource, reset_password_token: @token) %>

+ +

Si no solicitaste cambiar tu contraseña, por favor ignora este correo.

+

Tu contraseña no cambiará hasta que accedas al enlace y asignes una nueva.

diff --git a/app/views/mosaico_natura/devise/mailer/unlock_instructions.html.erb b/app/views/mosaico_natura/devise/mailer/unlock_instructions.html.erb new file mode 100644 index 0000000..41e148b --- /dev/null +++ b/app/views/mosaico_natura/devise/mailer/unlock_instructions.html.erb @@ -0,0 +1,7 @@ +

Hello <%= @resource.email %>!

+ +

Your account has been locked due to an excessive number of unsuccessful sign in attempts.

+ +

Click the link below to unlock your account:

+ +

<%= link_to 'Unlock my account', unlock_url(@resource, unlock_token: @token) %>

diff --git a/app/views/mosaico_natura/devise/passwords/edit.html.erb b/app/views/mosaico_natura/devise/passwords/edit.html.erb new file mode 100644 index 0000000..de7896d --- /dev/null +++ b/app/views/mosaico_natura/devise/passwords/edit.html.erb @@ -0,0 +1,26 @@ +
+ <%= render partial: "mosaico_natura/shared/sub-header", locals: { title: "CAambia tu contraseña" } %> +
+ <%= simple_form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f| %> + <%= f.error_notification %> + <%= f.input :reset_password_token, as: :hidden %> + <%= f.full_error :reset_password_token %> +
+ <%= f.input :password, + label: "Nueva contraseña", + required: true, + autofocus: true, + hint: ("#{@minimum_password_length} caracteres minimo" if @minimum_password_length), + input_html: { autocomplete: "new-password" } %> + <%= f.input :password_confirmation, + label: "Confirma la nueva contraseña", + required: true, + input_html: { autocomplete: "new-password" } %> +
+
+ <%= f.button :submit, "Cambiar mi contraseña", class: "btn btn-success mb-4" %> +
+ <% end %> + <%= render "mosaico_natura/devise/shared/links" %> +
+
diff --git a/app/views/mosaico_natura/devise/passwords/new.html.erb b/app/views/mosaico_natura/devise/passwords/new.html.erb new file mode 100644 index 0000000..c628c46 --- /dev/null +++ b/app/views/mosaico_natura/devise/passwords/new.html.erb @@ -0,0 +1,19 @@ +
+<%= render partial: "mosaico_natura/shared/sub-header", locals: { title: "Recuperación de contraseña" } %> +
+ <%= simple_form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :post }) do |f| %> + <%= f.error_notification %> +
+ <%= f.input :email, + required: true, + autofocus: true, + label: "Correo", + input_html: { autocomplete: "email" } %> +
+
+ <%= f.button :submit, "Enviarme instruciones", class: "btn btn-success mb-4" %> +
+ <% end %> + <%= render "mosaico_natura/devise/shared/links" %> +
+
diff --git a/app/views/mosaico_natura/devise/registrations/edit.html.erb b/app/views/mosaico_natura/devise/registrations/edit.html.erb new file mode 100644 index 0000000..025a50b --- /dev/null +++ b/app/views/mosaico_natura/devise/registrations/edit.html.erb @@ -0,0 +1,35 @@ +
+<%= render partial: "mosaico_natura/shared/sub-header", locals: { title: "Modificar cuenta" } %> +
+ <%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %> + <%= f.error_notification %> +
+ <%= f.input :email, required: true, autofocus: true, label: "Correo" %> + <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %> +

Currently waiting confirmation for: <%= resource.unconfirmed_email %>

+ <% end %> + <%= f.input :password, + hint: "Dejar vacío si no se desea cambiar la contraseña", + required: false, + label: "Nueva contraseña", + input_html: { autocomplete: "new-password" } %> + <%= f.input :password_confirmation, + hint: "Dejar vacío si no se desea cambiar la contraseña", + required: false, + label: "Confrima la nueva contraseña", + input_html: { autocomplete: "new-password" } %> + <%= f.input :current_password, + hint: "Es necesaria tu contraseña actual para confirmar los cambios", + required: true, + label: "Contraseña actual", + input_html: { autocomplete: "current-password" } %> +
+
+ <%= f.button :submit, "Actualizar", class: "btn btn-block btn-success mb-4" %> +
+ <% end %> +
+ ¿No estás a gusto? <%= link_to "Cancelar mi cuenta", registration_path(resource_name), data: { confirm: "Una vez que se cancele la cuenta se borrarán tus datos personales, así como las fotos que hayas subido. Este proceso no se puede revertir, ¿estás seguro?" }, method: :delete, class: 'btn btn-sm btn-outline-danger my-0 mx-2' %> +
+
+
\ No newline at end of file diff --git a/app/views/mosaico_natura/devise/registrations/new.html.erb b/app/views/mosaico_natura/devise/registrations/new.html.erb new file mode 100644 index 0000000..8efb9c5 --- /dev/null +++ b/app/views/mosaico_natura/devise/registrations/new.html.erb @@ -0,0 +1,42 @@ +
+ <%= render partial: "mosaico_natura/shared/sub-header", locals: { title: "Crear cuenta" } %> +
+

Recuerda, todo concursante debera crear una cuenta nueva sin importar si ha participado en algún otro concurso anterior.

+ <%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> + <%= f.error_notification %> +
+ <%= f.input :email, + required: true, + autofocus: true, + label: "Correo", + input_html: { autocomplete: "email" }%> + <%= f.input :password, + required: true, + label: "Contraseña", + hint: ("#{@minimum_password_length} caracteres mínimo" if @minimum_password_length), + input_html: { autocomplete: "new-password" } %> + <%= f.input :password_confirmation, + required: true, + label: "Confirma la contraseña", + input_html: { autocomplete: "new-password" } %> + +
+
+ <%= f.check_box :terms, class: "form-check-input", required: true %> + <%= f.label :terms, class: "form-check-label" do %> +
+ Acepto los términos y condiciones establecidas en las bases de este concurso (liga al PDF) +
+ Consulta nuestro aviso de privacidad integral para este concurso (liga) +
+ <% end %> + +
+ +
+ <%= f.button :submit, "Crear cuenta", class: "btn btn-block btn-success mb-4" %> +
+ <% end %> + <%= render "mosaico_natura/devise/shared/links" %> +
+
\ No newline at end of file diff --git a/app/views/mosaico_natura/devise/sessions/new.html.erb b/app/views/mosaico_natura/devise/sessions/new.html.erb new file mode 100644 index 0000000..703c73e --- /dev/null +++ b/app/views/mosaico_natura/devise/sessions/new.html.erb @@ -0,0 +1,25 @@ +
+ <%= render partial: "mosaico_natura/shared/sub-header", locals: { title: "Inicia sesión" } %> +
+

Recuerda, todo concursante debera crear una cuenta nueva sin importar si ha participado en algún otro concurso anterior.

+ <%= simple_form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %> +
+ <%= f.input :email, + required: false, + autofocus: true, + label: "Correo", + input_html: { autocomplete: "email"} %> + <%= f.input :password, + required: false, + label: "Contraseña", + input_html: { autocomplete: "current-password" } %> + <%= f.input :remember_me, as: :boolean, label: "Recordarme" if devise_mapping.rememberable? %> +
+ +
+ <%= f.button :submit, "Inicia sesión", class: "btn btn-block btn-success mb-4" %> +
+ <% end %> + <%= render "mosaico_natura/devise/shared/links" %> +
+
diff --git a/app/views/mosaico_natura/devise/shared/_error_messages.html.erb b/app/views/mosaico_natura/devise/shared/_error_messages.html.erb new file mode 100644 index 0000000..ba7ab88 --- /dev/null +++ b/app/views/mosaico_natura/devise/shared/_error_messages.html.erb @@ -0,0 +1,15 @@ +<% if resource.errors.any? %> +
+

+ <%= I18n.t("errors.messages.not_saved", + count: resource.errors.count, + resource: resource.class.model_name.human.downcase) + %> +

+
    + <% resource.errors.full_messages.each do |message| %> +
  • <%= message %>
  • + <% end %> +
+
+<% end %> diff --git a/app/views/mosaico_natura/devise/shared/_links.html.erb b/app/views/mosaico_natura/devise/shared/_links.html.erb new file mode 100644 index 0000000..b325feb --- /dev/null +++ b/app/views/mosaico_natura/devise/shared/_links.html.erb @@ -0,0 +1,28 @@ + + diff --git a/app/views/mosaico_natura/devise/unlocks/new.html.erb b/app/views/mosaico_natura/devise/unlocks/new.html.erb new file mode 100644 index 0000000..c42de17 --- /dev/null +++ b/app/views/mosaico_natura/devise/unlocks/new.html.erb @@ -0,0 +1,19 @@ +

Resend unlock instructions

+ +<%= simple_form_for(resource, as: resource_name, url: unlock_path(resource_name), html: { method: :post }) do |f| %> + <%= f.error_notification %> + <%= f.full_error :unlock_token %> + +
+ <%= f.input :email, + required: true, + autofocus: true, + input_html: { autocomplete: "email" } %> +
+ +
+ <%= f.button :submit, "Resend unlock instructions" %> +
+<% end %> + +<%= render "devise/shared/links" %> diff --git a/app/views/mosaico_natura/galerias/2022/_ganadores.erb b/app/views/mosaico_natura/galerias/2022/_ganadores.erb new file mode 100644 index 0000000..4453d49 --- /dev/null +++ b/app/views/mosaico_natura/galerias/2022/_ganadores.erb @@ -0,0 +1,46 @@ +
+

GANADORES

+
+
+ <% @ganadores.each do |categorias, fotos| %> + <% categoria = categorias.titleize %> +
<%= categoria %>
+
+ + + <% fotos.each_with_index do |d, i| %> + <% nombre_completo, foto = [d.nombre, d.apellido_paterno, d.apellido_materno].join(' ').titleize, "/mn2022/small/#{d.genera_filename_anonimo}" %> + +
+
+
"<%= d.titulo %>"
+ <% if categorias == 'cineminuto' %> + + <% foto = "/mn2022/#{categorias}/#{d.genera_filename_anonimo}" %> + <% else %> + <%= nombre_completo %> > + <% end %> +
"> + <%= d.lugar %> +
+

<%= d.localidad.titleize %>

+
<%= nombre_completo %>
+
+
+ + <% end %> +
+ <% end %> +
diff --git a/app/views/mosaico_natura/galerias/2022/_menciones_honorificas.erb b/app/views/mosaico_natura/galerias/2022/_menciones_honorificas.erb new file mode 100644 index 0000000..5dd7d01 --- /dev/null +++ b/app/views/mosaico_natura/galerias/2022/_menciones_honorificas.erb @@ -0,0 +1,41 @@ +
+

MENCIONES

+
+ +<% @menciones.each do |categorias, fotos| %> +
+ <% categoria = categorias.titleize %> +
<%= categoria %>
+ + <% fotos.each_with_index do |d, i| %> + <% nombre_completo, foto = [d.nombre, d.apellido_paterno, d.apellido_materno].join(' ').titleize, "/mn2022/small/#{d.genera_filename_anonimo}" %> + +
+
"<%= d.titulo %>"
+ <% if categorias == 'cineminuto' %> + + <% foto = "/mn2022/#{categorias}/#{d.genera_filename_anonimo}" %> + <% else %> + <%= nombre_completo %> > + <% end %> +
"> +
+

<%= d.localidad.titleize %>

+
<%= nombre_completo %>
+
+ + <% end %> +
+<% end %> diff --git a/app/views/mosaico_natura/galerias/index.html.erb b/app/views/mosaico_natura/galerias/index.html.erb new file mode 100644 index 0000000..1706c68 --- /dev/null +++ b/app/views/mosaico_natura/galerias/index.html.erb @@ -0,0 +1,71 @@ +<% content_for(:delayedjs) do %> + +<% end %> + +<% content_for(:delayedcss) do %> +<% end %> + +
+ <%= render partial: 'mosaico_natura/galerias/2022/ganadores' %> +
+
+ <%= render partial: 'mosaico_natura/galerias/2022/menciones_honorificas' %> +
+ +<%= render :partial => "mosaico_natura/shared/modal" %> diff --git a/app/views/mosaico_natura/inicio/_concurso.erb b/app/views/mosaico_natura/inicio/_concurso.erb new file mode 100755 index 0000000..1b2f8b7 --- /dev/null +++ b/app/views/mosaico_natura/inicio/_concurso.erb @@ -0,0 +1,160 @@ +
+ +

La Comisión Nacional para el Conocimiento y Uso de la Biodiversidad (Conabio), y el Proyecto Conservación y Uso Sostenible de Montañas y Sierras (CosMos), convocan al “7o. Concurso Nacional de Fotografía de la Naturaleza” en el cual podrán participar participar todas las personas, nacionales o extranjeras radicadas en México.

+

Las fotografías deben representar la riqueza natural en México, es decir, especies de plantas, hongos y animales nativos del país en vida silvestre, así como ecosistemas, usos de la biodiversidad, y/o actividades humanas que tengan un impacto en la naturaleza.

+

QUIÉNES PUEDEN PARTICIPAR

+

El concurso está abierto a aficionados o profesionales de la fotografía, mexicanos y extranjeros que radiquen en México.

+

En este Concurso, queda prohibida la participación tanto del personal (o sus familiares) de la (Conabio), así como de las instituciones aliadas. +

CATEGORÍAS, TEMAS, FORMATO

+ +

Adultos (7 temas) De 18 años en adelante | Cada participante puede enviar 1 fotografía por cada tema

+ +

Temas

+
+
+ <% @categorias[0].each do |k,v| %> +
+ <%= image_tag "/concursos_assets/mosaico_natura/bases_#{k.to_s}.png", class: "align-self-start mr-3", alt: k.to_s.camelize %> +
+
<%= k.to_s.humanize %>
+

<%= v %>

+
+
+ <% end %> +
+ + <% @categorias[1].each do |k,v| %> +
+ <%= image_tag "/concursos_assets/mosaico_natura/bases_#{k.to_s}.png", class: "align-self-start mr-3", alt: k.to_s.camelize %> +
+
<%= k.to_s.humanize %>
+

<%= v %>

+
+
+ <% end %> +
+
+ +

Jóvenes De 10 a 17 años cumplidos al cierre del concurso | Cada participante puede enviar hasta 1 fotografía1 por tema

+ + <% @categorias[2].each do |k,v| %> +
+ <%= image_tag "/concursos_assets/mosaico_natura/bases_#{k.to_s}.png", class: "align-self-start mr-3", alt: k.to_s.camelize %> +
+
<%= k.to_s.humanize %>
+

<%= v %>

+
+
+ <% end %> + +

¿CÓMO PARTICIPAR?

+ + +
+
+ + +

Todos los participantes deben crear una cuenta nueva

+
+
+
+

Realiza el registro de tus datos personales

+
+
+
+ +

Envía tus fotografías y/o video

+

No olvides incluir lugar, título, nombre de la especie y la localidad (estado) donde fue tomada, según sea el caso

+
+
+
+

Espera los resultados.
¡Mucha suerte!

+
+
+ +
+
+ +

Características de las fotografías
+ Resolución 300 DPI
+ Tamaño mínimo: 3500 pixeles por lado más largo
+ Tamaño máximo: 4,500 pixeles por lado más largo
+ Sin marcas de agua
+ Sin alteraciones digitales
+ Sin uso de Inteligencia Artificial

+ +
+
+ +

Características de los videos
+ Formato: .mp4 (H264)
+ Bitrate mínimo de 10mbps
+ Aspecto: pixeles cuadrados
+ Tamaño pixeles: FullHD: 1920 x 1080
+ Cuadros por segundo: 24fps, 29.97fps, 30fps
+ Orden de campos: progresivo
+ Audio: códec: AAC
+ Velocidad de muestreo: 48000Hz
+ Canales: Estéreo
+ Velocidad: 320 Kbps
+ Sin marcas de agua
+ Sin alteraciones digitales

+
+
+

PREMIOS Y RECONOCIMIENTOS

+ +
+
+ primer lugar + tema libre +
Premios por cada tema
+

Fauna, plantas y hongos, paisaje y su gente, CosMos montañas y sierras, Cineminuto

+
Categoría adultos
+
+

$30,000 pesos en efectivo

+
+
+
+ segundo lugar + tema libre +
Premios por cada tema
+

Fauna, plantas y hongos, paisaje y su gente, CosMos montañas y sierras, Cineminuto

+
Categoría adultos
+
+

$25,000 pesos en efectivo

+
+
+
+
+
+ primer lugar + tema libre +
Premio tema libre
+
Categoría jóvenes
+
+

$20,000 pesos en efectivo

+
+
+
+ segundo lugar + tema libre +
Premio tema libre
+
Categoría jóvenes
+
+

$15,000 pesos en efectivo

+
+
+
+ primer lugar + tema libre +
Premio La naturaleza al alcance de tu mano
+ +
+

$10,000 pesos en efectivo

+
+
+
+
diff --git a/app/views/mosaico_natura/inicio/_exposiciones.erb b/app/views/mosaico_natura/inicio/_exposiciones.erb new file mode 100755 index 0000000..f0cf31c --- /dev/null +++ b/app/views/mosaico_natura/inicio/_exposiciones.erb @@ -0,0 +1,37 @@ +
+
+

Las mejores fotografías de la categoría de adultos y jóvenes formarán parte de la exposición "Visiones de nuestra naturaleza VI" a exponerse en la rejas de Av. Reforma en el Bosque de Chapultepec, Ciudad de México del 4 de julio al 22 de septiembre del 2022.

+
+ "Visiones de nuestra naturaleza I" +

Finalistas del primer concurso (2015)

+
+
+ "Visiones de nuestra naturaleza II" +

Finalistas del segundo concurso (2016)

+
+
+ "Visiones de nuestra naturaleza III" +

Finalistas del tercer concurso (2017)

+
+
+ "Visiones de nuestra naturaleza IV" +

Finalistas del cuarto concurso (2018)

+
+
+ "Visiones de nuestra naturaleza V" +

Finalistas del quinto concurso (2019)

+
+
+ "25 Miradas al Bosque" +

ANTERIORES

+
+
+ "Visiones de nuestra naturaleza: 5 años de naturaleza y arte" +

Recopilación de las mejores fotografías que han participado en el concurso durante 2015-2019

+
+
+ "Visiones de nuestra naturaleza VI" +

Finalistas del sexto concurso (2022)

+
+
+
\ No newline at end of file diff --git a/app/views/mosaico_natura/inicio/_ganadores.erb b/app/views/mosaico_natura/inicio/_ganadores.erb new file mode 100755 index 0000000..742ef24 --- /dev/null +++ b/app/views/mosaico_natura/inicio/_ganadores.erb @@ -0,0 +1 @@ +

AQUÍ VAN Los GANADORES

\ No newline at end of file diff --git a/app/views/mosaico_natura/inicio/_jurado.erb b/app/views/mosaico_natura/inicio/_jurado.erb new file mode 100644 index 0000000..2e40a2d --- /dev/null +++ b/app/views/mosaico_natura/inicio/_jurado.erb @@ -0,0 +1,7 @@ +
+
+
+
+
+
+
\ No newline at end of file diff --git a/app/views/mosaico_natura/inicio/_medios.erb b/app/views/mosaico_natura/inicio/_medios.erb new file mode 100755 index 0000000..786c06b --- /dev/null +++ b/app/views/mosaico_natura/inicio/_medios.erb @@ -0,0 +1,38 @@ +
+
+
+ +

Noticias

+

Boletín de prensa

+
+
+
+ +

Spot

+

+ +

+
+
+
+ +

Video

+
+ +
+
+ +
+
+ + +
+
diff --git a/app/views/mosaico_natura/inicio/_quienesSomos.erb b/app/views/mosaico_natura/inicio/_quienesSomos.erb new file mode 100755 index 0000000..2cf65f3 --- /dev/null +++ b/app/views/mosaico_natura/inicio/_quienesSomos.erb @@ -0,0 +1,23 @@ +
+
+
+

Mosaico Natura Tiene como objetivos: ser una ventana para dar a conocer la riqueza natural de México a través de la fotografía y ser un sitio de promoción para fotógrafos de naturaleza mexicana. Esta iniciativa comenzó en 2010.

+

Si te interesa difundir tu trabajo como fotógrafo de naturaleza, inscríbete al concurso y envía tus mejores fotos. Los ganadores participarán en exposiciones fotográficas y publicaciones en diversas plataformas impresas y digitales.

+ +

Adicionalmente y previa selección, las fotografías serán integradas al Banco de Imágenes de la Conabio en donde estarán a disposición del público en general en baja resolución, para uso no comercial, con el requisito de incluir el crédito del autor y de la Conabio. En caso de que se requiera la fotografía en alta resolución, se deberá hacer una solicitud a la Conabio bajo las condiciones establecidas en el Banco de Imágenes.

+ + +
+
+
+ +
+

MNM6_C1 from CONABIO on Vimeo.

+
+ +
+
+
+
+ + diff --git a/app/views/mosaico_natura/inicio/index.erb b/app/views/mosaico_natura/inicio/index.erb new file mode 100755 index 0000000..0052500 --- /dev/null +++ b/app/views/mosaico_natura/inicio/index.erb @@ -0,0 +1,49 @@ +
+
+ <%= render :partial => '/mosaico_natura/header' %> +
+ +
+
+ Mosaico Natura +
+
+ +
+
+

¿QUIÉNES SOMOS?

+
+ <%= render :partial => 'quienesSomos' %> +
+ +
+
+

CONVOCATORIA 2025

+
+ <%= render :partial => 'concurso' %> +
+ +
+
+

EXPOSICIONES Y PUBLICACIONES

+
+ <%= render :partial => 'exposiciones' %> +
+ +
+
+

MEDIOS

+
+ <%= render :partial => 'medios' %> +
+ +
+
+ colaboradores Mosaico Natura +
+
+ +
+ <%= render :partial => '/mosaico_natura/footer' %> +
+
\ No newline at end of file diff --git a/app/views/mosaico_natura/inicio/terminos_condiciones.erb b/app/views/mosaico_natura/inicio/terminos_condiciones.erb new file mode 100755 index 0000000..c46c51f --- /dev/null +++ b/app/views/mosaico_natura/inicio/terminos_condiciones.erb @@ -0,0 +1,203 @@ +
+
+

TÉRMINOS Y CONDICIONES

+
+ +
+
+
+

Bases para el Concurso Nacional de Fotografía de Naturaleza

+

La Comisión Nacional para el Conocimiento y Uso de la Biodiversidad (CONABIO) y el Proyecto Conservación y Uso Sostenible de Montañas y Sierras (CosMos), convocan al “7o. Concurso Nacional de Fotografía de la Naturaleza” en el cual podrán participar todas las personas, nacionales o extranjeras radicadas en México.

+

Las fotografías deben representar la riqueza natural en México, es decir, especies de plantas, hongos y animales nativos del país en vida silvestre, así como ecosistemas, usos de la biodiversidad, y/o actividades humanas que tengan un impacto en la naturaleza.

+

QUIÉNES PUEDEN PARTICIPAR

+

El concurso está abierto a aficionados o profesionales de la fotografía, mexicanos y extranjeros que radiquen en México. En este Concurso, queda prohibida la participación tanto del personal (o sus familiares) de la CONABIO así como de las instituciones aliadas.

+

CATEGORÍAS, TEMAS, FORMATOS

+
Adultos (7 temas)
+

De 18 años en adelante. Cada participante puede enviar 1 fotografía por cada tema.

+

Fauna. Incluye animales nativos de México en vida silvestre, desde el fondo del mar hasta las altas montañas; siempre que éstos, no estén en cautiverio o sean animales domésticos y/o mascotas.

+

Plantas y hongos. Incluye toda clase de especies vegetales y hongos nativos de México en vida silvestre, desde las las profundidades marinas hasta las montañas. No se aceptarán fotografías de plantas u hongos cultivados, de maceta o jardín.

+

Paisajes y su gente. Vistas aéreas y terrestres de ecosistemas perturbados y no pertubados, desde las costas hasta las momtañas y las interacciones del ser humano con la naturaleza.

+

CosMos Montañas y Sierras de México. Fotografías de animales, plantas, hongos y paisajes representatativa del lugar, actividades turísticas que se realizan, cultura de sus habitantes y problemática que enfrentan. Para conocer los lugares que se consideran dentro de CosMos, Montañas y sierras de México, visita: +

+

La naturaleza al alcance de tu mano. Incluye cualquier fotografía tomada con equipos moviles (celulares) relacionada con la riqueza natural de México, es decir, animales o plantas en su ambiente natural, paisajes naturales, actividades relacionadas con el hombre y la naturaleza. No se aceptarán fotografías de plantas cultivadas, animales en cautiverio o cualquier otro ambiente controlado.

+

Cineminuto (Video). Breves historias de nuestra naturaleza, su uso, conservación o deterioro.

+
Jóvenes
+

De 10 a 17 años cumplidos al cierre del concurso. Cada participante puede enviar hasta 1 fotografía.

+

Tema libre: animales en Incluye cualquier fotografía relacionada con la riqueza natural de México, es decir, animales o plantas en su ambiente natural, paisajes naturales, actividades relacionadas con el hombre y la naturaleza, impactos, y expresiones biocultruales. No se aceptarán fotografías de plantas cultivadas, animales en cautiverio o cualquier otro ambiente controlado.

+

CARACTERÍSTICAS DE LAS FOTOGRAFÍAS

+

Las fotografías deben de haber sido tomadas en alta resolución: 3,500 pixeles como mínimo en el lado más largo en formato jpg y una densidad de pixeles de 300 dpi.

+

Los participantes podrán utilizar ajustes generales (exposición, saturación, contraste, etcétera). No se aceptarán fotografías que hayan sido manipuladas digitalmente o uso de Inteligencia Artificial, eliminando partes de la imagen o sustituirlas con otros elementos diferentes a la imagen original así como la utilización de inteligencia artificial.

+

Las fotografías participantes deberán cumplir con lo siguiente y de ser el caso, se tomará en cuenta la secuencia fotográfica donde se ubique la fotografía seleccionada.

+

Ser inéditas y originales:

+
    +
  • No haber participado en concursos similares
  • +
  • No haber ganado en otro concurso
  • +
  • No haber sido expuestas en exposiciones públicas o privadas
  • +
  • No tener una temporalidad mayor a tres años
  • +
  • No haber sido utilizadas con fines comerciales
  • +
  • No tener firma, sello o alguna otra marca de identificación
  • +
+ +

VIGENCIA DEL CONCURSO Y FECHAS IMPORTANTES

+

La participación de este concurso estará disponible a partir del 30 de diciembre de 2025 al 16 de febrero de 2026 a las 23:00 hrs., que será la fecha y hora límite para registrar las fotografías.

+ +
    +
  • Resultados de la selección de finalistas: 16 de abril de 2026
  • +
  • Exposición de finalistas: 1 de junio de 2026
  • +
  • Anuncio de ganadores: 2026 (Fecha por definir)
  • +
+

¿CÓMO PARTICIPAR?

+

Antes de registrarse, el participante deberá de haber leído, entendido y aceptado las Bases del Concurso.

+

El registro oficial de participación y el envío de imágenes se realizará en línea a través del sitio mosaiconatura.net.

+

El registro es personal y los datos para ello, deberán ser verídicos y comprobables.

+

Es muy importante la revisión de datos antes de confirmar. El registro de datos y selección de categoría por participar deberá ser cuidadoso.

+

En caso de contar con un registro previo, el participante podrá ingresar con sus mismas credenciales.

+

Únicamente se aceptará el envío electrónico de fotografías en formato .jpg, con dimensiones mínimas de 3,500 pixeles del lado más largo de la imagen y una resolución de 300 DPI´s (pixeles por pulgada).

+

Las fotografías concursantes únicamente se aceptarán por vía electrónica en www.mosaiconatura.net

+

Se solicita a todos los concursantes conservar el archivo original, ya que en caso de resultar ganador(a) de algún premio o de ser finalistas, el “Comité Organizador” podrá solicitar dichos archivos.

+

Ningún participante podrá obtener más de un premio por concurso por lo que si en la sumatoria de los jueces, un solo participante tiene dos o más premios, solo se tomará en cuenta el mayor de ellos.

+

Al momento de registrarse, el participante da al “Comité Organizador”:

+
    +
  • Su conformidad y aceptación de los términos y condiciones de las Bases.
  • +
  • Su conformidad y aceptación para que el jurado determine y resuelva de forma unilateral e inapelable aquellas disposiciones contempladas y no contempladas en las presentes Bases.
  • +
  • Su aceptación a la decisión del jurado, la cual es inapelable.
  • +
  • Su conformidad y aceptación para recibir por cualquier medio, información relacionada con las actividades del concurso mencionado, pudiendo solicitar libremente el no envío de dicha información en cualquier momento.
  • +
+

RESPONSABILIDADES

+

Los participantes conservarán los derechos sobre sus fotografías, pero al concursar, aceptan que la Comisión Nacional para el Conocimiento y Uso de la Biodiversidad (CONABIO), pueda hacer uso de las mismas de manera ilimitada para su utilización por sí o por terceros en México y otros países, para su reproducción, publicación, edición, comunicación pública, con fines promocionales o de difusión relacionados con el concurso o para fijarlas por medios impresos, digitales, electrónicos u otros, sin límite alguno, sin que se requiera notificar ni tampoco compensar al participante, en la consideración de que cada vez que se usen, deberá darse al suscrito el crédito correspondiente, desde el registro de sus materiales. Además de indicar que toda la información proporcionada será de confidencialidad únicamente para el personal autorizado a acceder a dicha información.

+

Mosaico Natura México y CONABIO, no se hacen responsables por denuncias de derechos de autor, siendo éstos, responsabilidad de cada participante.

+

Categoría de Jóvenes

+

Los menores deberán contar con el consentimiento de sus padres o tutores para poder participar en este concurso. Así mismo, las fotografías en esta categoría se sujetan a la concesión de derechos de uso no exclusivo de sus imágenes, mismas que la categoría de Adultos.

+

MOTIVOS DE DESCALIFICACIÓN

+

Los motivos de descalificación inmediata del participante son los siguientes:

+
    +
  • Fotografías, en lo sucesivo denominado el “material”, que no cumplan con cualquiera de los requisitos de participación.
  • +
  • Incurrir en cualquier conducta que implique maltrato a los sujetos de la fotografía
  • +
  • Incurrir en descrédito, difamación o calumnias en contra del “Comité Organizador” o de los miembros del jurado de este concurso.
  • +
  • Presentación de material ajeno a su autoría y que se demuestre que es creación de un tercero.
  • +
  • No poder ceder los derechos de uso no exclusivo sobre el material.
  • +
  • Fotografías manipuladas digitalmente quitando o añadiendo objetos ajenos a la imagen original por medio de algún programa para edición de imágenes.
  • +
  • Imágenes generadas o manipuladas por inteligencia artificial.
  • +
  • Fotografías que hayan ganado otro concurso; que formen parte de cualquier otra colección pública o privada; o que hayan sido utilizada previamente con fines comerciales, sean fotografías únicas o que formen parte de una secuencia.
  • +
  • Si los datos vertidos en el registro de participantes son erróneos, no verídicos o no comprobables.
  • +
+

El “Comité Organizador” puede solicitar el original de cualquiera de las obras fotográficas si así lo requiere o considera, de forma discrecional. El “Comité Organizador” determinará el plazo para la entrega de dicho original y lo hará del conocimiento del participante. En caso de no entregarlo, esto podrá ser motivo de descalificación.

+

CRITERIOS DE EVALUACIÓN POR PARTE DEL JURADO

+
    +
  • Mérito artístico
  • +
  • Originalidad
  • +
  • Técnica
  • +
  • Dificultad inherente a la especie o ecosistema
  • +
+

De las fotografías recibidas, el jurado seleccionará fotografías de cada tema en la categoría de adultos y jóvenes que formarán parte de la exposición "Visiones de nuestra naturaleza VII" a exponerse en la rejas de Av. Reforma en el Bosque de Chapultepec, Ciudad de México.

+

EL JURADO

+
    +
  • El jurado estará integrado por profesionales en el campo de la fotografía.
  • +
  • “El Comité Organizador” del concurso podrá hacer modificaciones en la selección de los miembros del jurado, sujeto a la disponibilidad de los mismos.
  • +
  • El fallo del jurado será definitivo e inapelable.
  • +
  • Cualquier imprevisto relacionado con las presentes Bases será resuelto a criterio del jurado y comité organizador
  • +
  • El jurado podrá declarar desiertas las categorías y/o los temas del concurso si así lo considera conveniente.
  • +
+

ENTREGA DE LOS PREMIOS Y RECONOCIMIENTOS

+

. La fecha, lugar y hora exacta serán informados oportunamente por el “Comité Organizador” en www.mosaiconatura.net.

+

Requisitos

+

Para la entrega de premios y reconocimientos, los participantes deberán presentar los siguientes documentos:

+
    +
  • Original y copia de una identificación oficial vigente con fotografía y firma.
  • +
+

En la categoría fotografía Jóvenes presentar:

+
  • Original y copia de una credencial que acredite al menor (credencial escolar).
  • +
  • Original y copia de identificación oficial vigente del padre o tutor.
  • + +

    LOS PREMIOS Y RECONOCIMIENTOS

    +
    +
    + primer lugar + tema libre +
    Premios por cada tema
    +

    Fauna, plantas y hongos, paisaje y su gente, CosMos montañas y sierras, Cineminuto

    +
    Categoría adultos
    +
    +

    $30,000 pesos en efectivo

    +
    +
    +
    + segundo lugar + tema libre +
    Premios por cada tema
    +

    Fauna, plantas y hongos, paisaje y su gente, CosMos montañas y sierras, Cineminuto

    +
    Categoría adultos
    +
    +

    $25,000 pesos en efectivo

    +
    +
    +
    +
    +
    + primer lugar + tema libre +
    Premio tema libre
    +
    Categoría jóvenes
    +
    +

    $20,000 pesos en efectivo

    +
    +
    +
    + segundo lugar + tema libre +
    Premio tema libre
    +
    Categoría jóvenes
    +
    +

    $15,000 pesos en efectivo

    +
    +
    +
    + primer lugar + tema libre +
    Premio La naturaleza al alcance de tu mano
    + +
    +

    $10,000 pesos en efectivo

    +
    +
    +
    +

    Total en premios. $335,000

    +
    +

    PRIVACIDAD Y PROTECCIÓN DE INFORMACIÓN

    +

    El “Comité Organizador” manifiesta que cuenta con las medidas necesarias para proteger la información y los datos personales que sean proporcionados por los participantes.

    +

    Este concurso es de carácter público ajeno a cualquier partido político. Queda prohibida su difusión para fines distintos a la divulgación científica y el arte.

    +
    +
    +
    +
    + + + diff --git a/app/views/mosaico_natura/panel/_tabla_desempate.erb b/app/views/mosaico_natura/panel/_tabla_desempate.erb new file mode 100644 index 0000000..db657d3 --- /dev/null +++ b/app/views/mosaico_natura/panel/_tabla_desempate.erb @@ -0,0 +1,50 @@ +
    + <% @medias.each do |categoria, medias| %> +
    + +
    + +
    +
    + <% medias.each_with_index do |d, i| %> +
    +

    <%= d.titulo %>

    + +

    Lugar asignado: <%= d.calificacion.to_s[@juez[:posicion]].to_i %>

    +

    Promedio: <%= d.promedio.round(2) %>

    +

    + Juez01: <%= d.calificacion.to_s[0] %> + Juez02: <%= d.calificacion.to_s[1] %> + <% unless categoria == 'cineminuto' %> + Juez03: <%= d.calificacion.to_s[2] %> + Juez04: <%= d.calificacion.to_s[3] %> + <% end %> +

    +
    +
    + <% if categoria == 'cineminuto' %> + + <% else %> + > + <% end %> +
    + <% end %> +
    +
    + <% end %> +
    \ No newline at end of file diff --git a/app/views/mosaico_natura/panel/_tabla_finalistas.erb b/app/views/mosaico_natura/panel/_tabla_finalistas.erb new file mode 100644 index 0000000..cc99dc4 --- /dev/null +++ b/app/views/mosaico_natura/panel/_tabla_finalistas.erb @@ -0,0 +1,33 @@ +
    + <% @fotos.each do |categorias, fotos| %> + <% next if ((@juez[:tipo].to_s.include? 'foto') && (categorias == 'cineminuto')) || ((@juez[:tipo].to_s.include? 'video') && (categorias != 'cineminuto')) %> +
    + +
    + +
    +
    + <% fotos.each_with_index do |d, i| %> +
    + +
    + <% end %> +
    +
    + <% end %> +
    \ No newline at end of file diff --git a/app/views/mosaico_natura/panel/calificacion.erb b/app/views/mosaico_natura/panel/calificacion.erb new file mode 100644 index 0000000..d62e0fa --- /dev/null +++ b/app/views/mosaico_natura/panel/calificacion.erb @@ -0,0 +1,168 @@ +<% dgcc = (@juez.nil? || @juez[:posicion] == 4) %> +<% content_for(:delayedjs) do %> + +<% end %> + +<% content_for(:delayedcss) do %> + +<% end %> + +
    +
    +
      +
    • Bienvenido <%= @juez[:usuario] %>
      Instrucciones: (Actualizadas al 17-05-2022)<%= '.'*@juez[:posicion] %>
    • +
    • Dar click en la categoría deseada para mostrar los fotos finalistas.
    • +
    • Dar click sobre cualquier botón para ver el registro del concursante en un modal (fotos, título, descrición, localidad, marca de la cámara, etc.)
    • +
    • Si se desea ver cualquier imagen en otra ventana, al dar click sobre la imagen dentro del modal se abrirá dicha imagen en una nueva ventana.
    • +
    • Una vez inspeccionadas las imagenes con los criterios a considerar, hay que realizar la calificacion en el slider qeu se muestra en la parte inferior del modal.
    • +
    • La calificación va del '1' al '9', siendo '1' la peor calificación y '9' el máximo puntaje posible.
    • +
    • Es necesario GUARDAR los cambios, esto se realiza dando click en el botón verde que dice CONFIRMAR, al realizarse la calificación el botón cambiara de color y se mostrara la leyenda "Confirmado" junto con la califiación dada.
    • +
    • Al entrar y salir del modal de una foto o video ya calificado, se puede volver a cambiar la calificación.
    • +
    • A manera de ayuda visual, existe un contador que va cambiando conforme al número de calificaciones distintas a "1".
    • +
    • Así mismo, los botones cuyos fotos ya se hayan calificado (cuya calificación sea distinta de "1") se veran de color verde con una palomita, esto servira para identificar si falta algún dibujo por calificar.
    • +
    • Es importante recalcar que TODOS los fotos deben ser calificados sin excepción.
    • +
    • Cualquier duda que tengan, favor de remitirla a ggonzalez@conabio.gob.mx o con Ivan Montes
    • +
    • Es todo.
    • +
    +
    + <%= render partial: "mosaico_natura/panel/tabla_finalistas", locals: {dgcc: dgcc} %> +
    + +<%= render :partial => "mosaico_natura/shared/modal" %> diff --git a/app/views/mosaico_natura/panel/desempate.erb b/app/views/mosaico_natura/panel/desempate.erb new file mode 100644 index 0000000..2c8deaa --- /dev/null +++ b/app/views/mosaico_natura/panel/desempate.erb @@ -0,0 +1,186 @@ +<% dgcc = (@juez.nil? || @juez[:posicion] == 4) %> +<% content_for(:delayedjs) do %> + +<% end %> + +<% content_for(:delayedcss) do %> + +<% end %> + +
    +
    +
      +
    • Instrucciones: (Actualizadas al 24-05-2022)
    • +
    • El listado de fotos o videos por categoría esta ordenado de mayor a menor de acuerdo al promedio.
    • +
    • Se muestran los primeros 10 lugares para poder decidir en caso de multiple empate (cineminuto y tema libre van todos por ser muy pocos)
    • +
    • En caso de que entres con el parametro de categoría, se meustra TODOS los finalsitas de esa categoria
    • +
    • Dar click en el botón de datos para ver el resto de información, compromiso, localidad, marca, etc.
    • +
    • Dentro del modal, anotar EL LUGAR que se desea establecer como válido.
    • +
    • Si entras y sales del modal puedes reasignar lugares
    • +
    • Es todo.
    • +
    +
    + <%= render partial: "mosaico_natura/panel/tabla_desempate", locals: {dgcc: dgcc} %> +
    + +<%= render :partial => "mosaico_natura/shared/modal" %> diff --git a/app/views/mosaico_natura/panel/index.erb b/app/views/mosaico_natura/panel/index.erb new file mode 100644 index 0000000..0827e1b --- /dev/null +++ b/app/views/mosaico_natura/panel/index.erb @@ -0,0 +1 @@ +Aqui puedes revisar tus datos y archivos subidos diff --git a/app/views/mosaico_natura/registro/_form.html.erb b/app/views/mosaico_natura/registro/_form.html.erb new file mode 100644 index 0000000..ad53a11 --- /dev/null +++ b/app/views/mosaico_natura/registro/_form.html.erb @@ -0,0 +1,64 @@ +<% nuevo = @registro.new_record? %> +<%= simple_form_for @registro, + as: :usuario_mn, + url: @form_params[:url], + method: @form_params[:method], + html: { multipart: true } do |f| %>
    +
    + <% unless nuevo %> + + <% end %> +

    Datos del concursante

    +
    > + <%= f.input_field :nombre, class: 'form-control my-2', placeholder: 'Nombre(s)' %> + <%= f.input_field :apellido_paterno, class: 'form-control my-2', placeholder: 'Apellido Paterno' %> + <%= f.input_field :apellido_materno, class: 'form-control my-2', placeholder: 'Apellido Materno' %> + + <%= f.date_field :fecha_nacimiento, min: MosaicoNatura::UsuarioMn::FECHA_NAC_MIN, max: MosaicoNatura::UsuarioMn::FECHA_NAC_MAX, class: 'form-control', "data-toggle"=>"tooltip", "data-placement"=>"bottom", title: "Recuerda que tu edad determina la categoria en la que concursas" %> + + <%= f.select :lugar_nacimiento, options_for_select(Direccion::ESTADOS, f.object.lugar_nacimiento), { prompt: "--- Seleccionar estado de nacimiento ---" }, { class: 'form-control' } %> + + <%= f.select :medio, options_for_select(MosaicoNatura::UsuarioMn::MEDIO, f.object.medio), { prompt: "--- Selecciona ---" }, { class: 'form-control' } %> + <%= f.input_field :otro_medio, class: 'form-control my-2', placeholder: 'Otro medio (opcional)' %> + <%= f.hidden_field :user_id, value: current_user_mn.id %> +
    + +
    +
    +
    + <% unless nuevo %> + + <% end %> +

    Dirección

    +
    > + <%= f.fields_for :direccion do |direccion_form| %> + <%= render "mosaico_natura/registro/form_direccion", f: direccion_form %> + <% end %> +
    +
    + <% unless nuevo %> +
    +

    ¿Con que tema deseas participar?

    +
    Recuerda que: +
      +
    • Puedes subir hasta dos fotos por cada tema y un único video.
    • +
    • Una vez que des click a alguna categoría tienes que llenar todos los campos solicitados de lo contrario no se te permitira actualizar el registro.
    • +
    • Sí eliminas una foto puedes volver a subir otra volviendo a dar click en la categoría deseada.
    • +
    +
    +
    + + <%= f.simple_fields_for :media do |media_form| %> + <%= render "mosaico_natura/registro/form_media", f: media_form %> + <% end %> +
    +
    + <% end %> +
    + + <%= f.button :submit, nuevo ? 'Guardar registro' : 'Actualizar registro', class: 'btn btn-success btn-lg btn-block my-4' %> +<% end %> \ No newline at end of file diff --git a/app/views/mosaico_natura/registro/_form_direccion.html.erb b/app/views/mosaico_natura/registro/_form_direccion.html.erb new file mode 100644 index 0000000..3f0f647 --- /dev/null +++ b/app/views/mosaico_natura/registro/_form_direccion.html.erb @@ -0,0 +1,10 @@ +
    > + <%= f.input_field :calle, class: 'form-control my-2', placeholder: 'Calle' %> + <%= f.input_field :numero, class: 'form-control my-2', placeholder: 'Número' %> + <%#= f.input_field :interior, class: 'form-control my-2', placeholder: 'Interior' %> + <%= f.input_field :colonia, class: 'form-control my-2', placeholder: 'Colonia' %> + <%= f.input_field :municipio, class: 'form-control my-2', placeholder: 'Municipio/Alcaldía' %> + <%= f.input_field :cp, class: 'form-control my-2', placeholder: 'Código postal' %> + + <%= f.select :estado, options_for_select(Direccion::ESTADOS, f.object.estado), { prompt: "--- Selecciona ---" }, { class: 'form-control' } %> +
    diff --git a/app/views/mosaico_natura/registro/_form_media.html.erb b/app/views/mosaico_natura/registro/_form_media.html.erb new file mode 100644 index 0000000..f20abe8 --- /dev/null +++ b/app/views/mosaico_natura/registro/_form_media.html.erb @@ -0,0 +1,20 @@ +<% categoria = f.object.new_record? ? nombre_categoria : f.object.categoria.nombre_categoria %> +
    +
    <%= categoria.humanize %>
    + <% if categoria == 'cineminuto' %> + <%= video_tag f.object.original_filename.url, controls: true, class: "img-responsive img-fluid mb-3 w-50" unless f.object.new_record? %> + <% else %> + <%= image_tag f.object.original_filename.url, class: "img-responsive img-fluid mb-3 w-50" unless f.object.new_record? %> + <% end %> + <%= f.file_field :original_filename, accept: categoria == 'cineminuto' ? 'video/mp4': 'image/png,image/jpeg', class: 'file-to-upload' %> + <%= f.hidden_field :categoria_id, :value => (f.object.new_record? ? categoria_id : f.object.categoria_id ) %> +
    + <% f.object.build_media_metadato if f.object.new_record? %> + <%= f.simple_fields_for :media_metadato do |media_metadato_form| %> + <%= render "mosaico_natura/registro/form_media_metadato", f: media_metadato_form %> + <% end %> + +
    +
    diff --git a/app/views/mosaico_natura/registro/_form_media_metadato.erb b/app/views/mosaico_natura/registro/_form_media_metadato.erb new file mode 100644 index 0000000..e874a3c --- /dev/null +++ b/app/views/mosaico_natura/registro/_form_media_metadato.erb @@ -0,0 +1,9 @@ +
    + <%= f.input_field :titulo, class: 'form-control my-2', placeholder: 'Título de la foto/video' %> + <%= f.input_field :descripcion, class: 'form-control my-2', placeholder: 'Descripción de la foto/video' %> + + <%= f.select :marca, options_for_select(MosaicoNatura::MediaMetadatoMn::MARCA, f.object.marca), { prompt: "--- Selecciona la marca de la camara ---" }, { class: 'form-control' } %> + <%= f.input_field :otra_marca, class: 'form-control my-2', placeholder: 'Otro marca (opcional)' %> + + <%= f.select :localidad, options_for_select(Direccion::ESTADOS, f.object.localidad), { prompt: "--- Seleccionar localidad de la foto/video ---" }, { class: 'form-control' } %> +
    \ No newline at end of file diff --git a/app/views/mosaico_natura/registro/_form_usuario_metadatos.erb b/app/views/mosaico_natura/registro/_form_usuario_metadatos.erb new file mode 100644 index 0000000..cca8aec --- /dev/null +++ b/app/views/mosaico_natura/registro/_form_usuario_metadatos.erb @@ -0,0 +1,4 @@ +
    + <%= f.input :metadato_id %> + <%= f.input :valor_metadato %> +
    diff --git a/app/views/mosaico_natura/registro/edit.html.erb b/app/views/mosaico_natura/registro/edit.html.erb new file mode 100644 index 0000000..7158dd5 --- /dev/null +++ b/app/views/mosaico_natura/registro/edit.html.erb @@ -0,0 +1,7 @@ +
    + <%= render partial: "mosaico_natura/shared/sub-header", locals: { title: "Edición de los datos de tu registro" } %> +
    + <%= render 'form', usuario: @registro %> + <%= link_to '« Regresar', mosaico_natura_root_path, class: "btn btn-danger btn-sm mt-4" %> +
    +
    diff --git a/app/views/mosaico_natura/registro/index.html.erb b/app/views/mosaico_natura/registro/index.html.erb new file mode 100644 index 0000000..e4af7df --- /dev/null +++ b/app/views/mosaico_natura/registro/index.html.erb @@ -0,0 +1,37 @@ +

    <%= notice %>

    + +

    Usuarios

    + + + + + + + + + + + + + + + + <% @usuarios.each do |usuario| %> + + + + + + + + + + + + <% end %> + +
    EmailNombreApellido paternoApellido maternoFecha nacimientoLugar nacimiento
    <%= usuario.email %><%= usuario.nombre %><%= usuario.apellido_paterno %><%= usuario.apellido_materno %><%= usuario.fecha_nacimiento %><%= usuario.lugar_nacimiento %><%= link_to 'Show', usuario %><%= link_to 'Edit', edit_usuario_path(usuario) %><%= link_to 'Destroy', usuario, method: :delete, data: { confirm: 'Are you sure?' } %>
    + +
    + +<%= link_to 'New Usuario', new_usuario_path %> diff --git a/app/views/mosaico_natura/registro/new.html.erb b/app/views/mosaico_natura/registro/new.html.erb new file mode 100644 index 0000000..0be4c7a --- /dev/null +++ b/app/views/mosaico_natura/registro/new.html.erb @@ -0,0 +1,6 @@ +
    + <%= render partial: "mosaico_natura/shared/sub-header", locals: { title: "Completa los siguientes datos para completar tu registro:" } %> +
    + <%= render 'form', usuario: @registro %> +
    +
    diff --git a/app/views/mosaico_natura/registro/show.html.erb b/app/views/mosaico_natura/registro/show.html.erb new file mode 100644 index 0000000..a1fb841 --- /dev/null +++ b/app/views/mosaico_natura/registro/show.html.erb @@ -0,0 +1,28 @@ +

    <%= notice %>

    + +

    + Nombre: + <%= @registro.nombre %> +

    + +

    + Apellido paterno: + <%= @registro.apellido_paterno %> +

    + +

    + Apellido materno: + <%= @registro.apellido_materno %> +

    + +

    + Fecha nacimiento nac: + <%= @registro.fecha_nacimiento %> +

    + +

    + Lugar nacimiento: + <%= @registro.lugar_nacimiento %> +

    + +<%= link_to 'Edit', edit_mosaico_natura_registro_path(@registro) %> | diff --git a/app/views/mosaico_natura/shared/_modal.erb b/app/views/mosaico_natura/shared/_modal.erb new file mode 100644 index 0000000..e521571 --- /dev/null +++ b/app/views/mosaico_natura/shared/_modal.erb @@ -0,0 +1,18 @@ + + \ No newline at end of file diff --git a/app/views/mosaico_natura/shared/_notice.erb b/app/views/mosaico_natura/shared/_notice.erb new file mode 100644 index 0000000..77ef533 --- /dev/null +++ b/app/views/mosaico_natura/shared/_notice.erb @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/app/views/mosaico_natura/shared/_sub-header.erb b/app/views/mosaico_natura/shared/_sub-header.erb new file mode 100644 index 0000000..c0000ec --- /dev/null +++ b/app/views/mosaico_natura/shared/_sub-header.erb @@ -0,0 +1,3 @@ +

    + <%= title %> +

    diff --git a/app/views/usuarios/_form.html.erb b/app/views/usuarios/_form.html.erb index 106d63b..33e3f73 100644 --- a/app/views/usuarios/_form.html.erb +++ b/app/views/usuarios/_form.html.erb @@ -1,20 +1,39 @@ <%= simple_form_for @usuario do |f| %> <%= f.input :nombre %> - <%#= link_to_add_association('direccion', f, :direccion, partial: 'form_direccion', :class => 'btn btn-info btn-sm', role: 'tab', "data-toggle" => 'tab', - "aria-controls" => :direccion, 'data-association-insertion-node' => '#direccion', 'data-association-insertion-method' => 'append', href: '#direccion', style: 'display: none;') if @usuario.new_record? %> - <%= f.fields_for :direccion do |direccion_form| %> - <%= render "direcciones/form_direccion", f: direccion_form %> - <% end %> - <%= f.fields_for :media do |media_form| %> - <%= render "medias/form_media", f: media_form %> - <% end %> - <%= f.fields_for :categoria do |categoria_form| %> - <%= render "categorias/form_categorias", f: categoria_form %> - <% end %> - <%= f.fields_for :usuario_metadato do |usuario_metadato_form| %> - <%= render "usuario_metadatos/form_usuario_metadatos", f: usuario_metadato_form %> - <% end %> + <%= f.input :apellido_paterno %> + <%= f.input :apellido_materno %> + <%= f.input :fecha_nacimiento %> + <%= f.input :lugar_nacimiento %> + +

    Dirección

    +
    + <%= f.simple_fields_for :direccion do |direccion_form| %> + <%= render "direcciones/form_direccion", f: direccion_form %> + <% end %> +
    + +

    Dibujos

    +
    + <%= f.simple_fields_for :medias do |media_form| %> + <%= render "medias/form_media", f: media_form %> + <% end %> +
    + - <%= f.button :submit %> + + + <%#= f.fields_for :categoria do |categoria_form| %> + <%#= render "categorias/form_categorias", f: categoria_form %> + <%# end %> + <%#= f.fields_for :usuario_metadato do |usuario_metadato_form| %> + <%#= render "usuario_metadatos/form_usuario_metadatos", f: usuario_metadato_form %> + <%# end %> + + + <%= f.button :submit, class: 'btn btn-success btn-sm' %> <% end %> \ No newline at end of file diff --git a/app/views/usuarios/index.html.erb b/app/views/usuarios/index.html.erb index 5c839bb..42850fe 100644 --- a/app/views/usuarios/index.html.erb +++ b/app/views/usuarios/index.html.erb @@ -9,28 +9,26 @@ Nombre Apellido paterno Apellido materno - Fecha nacimiento nac + Fecha nacimiento Lugar nacimiento - Curp - <% @usuarios.each do |usuario| %> + <% @usuarios.each do |usuario| %> - <%= usuario.email %> + <%= usuario.nombre %> <%= usuario.apellido_paterno %> <%= usuario.apellido_materno %> - <%= usuario.fecha_nacimiento_nac %> + <%= usuario.fecha_nacimiento %> <%= usuario.lugar_nacimiento %> - <%= usuario.curp %> <%= link_to 'Show', usuario %> <%= link_to 'Edit', edit_usuario_path(usuario) %> <%= link_to 'Destroy', usuario, method: :delete, data: { confirm: 'Are you sure?' } %> - <% end %> + <% end %> diff --git a/app/views/usuarios/new.html.erb b/app/views/usuarios/new.html.erb index be79b3e..af59754 100644 --- a/app/views/usuarios/new.html.erb +++ b/app/views/usuarios/new.html.erb @@ -1,14 +1,13 @@ -
    -
    - Inscripción +
    +
    + Inscripción
    -
    -
    - +
    +

    <%= notice %>

    + <%= render 'form', usuario: @usuario %> - <%= link_to 'Back', usuarios_path %> + <%#= link_to 'Inicio', entre_azul_y_verde_root_path %>
    -
    diff --git a/app/views/usuarios/show.html.erb b/app/views/usuarios/show.html.erb index 34cfe77..b558e76 100644 --- a/app/views/usuarios/show.html.erb +++ b/app/views/usuarios/show.html.erb @@ -22,7 +22,7 @@

    Fecha nacimiento nac: - <%= @usuario.fecha_nacimiento_nac %> + <%= @usuario.fecha_nacimiento %>

    @@ -30,10 +30,6 @@ <%= @usuario.lugar_nacimiento %>

    -

    - Curp: - <%= @usuario.curp %> -

    <%= link_to 'Edit', edit_usuario_path(@usuario) %> | <%= link_to 'Back', usuarios_path %> diff --git a/config/application.rb b/config/application.rb index 46daf8a..e8850b2 100644 --- a/config/application.rb +++ b/config/application.rb @@ -8,11 +8,19 @@ module Concursos class Application < Rails::Application + require 'carrierwave/orm/activerecord' # Initialize configuration defaults for originally generated Rails version. config.load_defaults 5.1 + config.time_zone = 'Mexico City' + config.i18n.default_locale = :es + + config.autoload_paths += Dir[Rails.root.join('app', 'models', '{*/}')] # Settings in config/environments/* take precedence over those specified here. # Application configuration should go into files in config/initializers # -- all .rb files in that directory are automatically loaded. + + + end end diff --git a/config/environment.rb b/config/environment.rb deleted file mode 100644 index 426333b..0000000 --- a/config/environment.rb +++ /dev/null @@ -1,5 +0,0 @@ -# Load the Rails application. -require_relative 'application' - -# Initialize the Rails application. -Rails.application.initialize! diff --git a/config/environment.rb.example b/config/environment.rb.example new file mode 100644 index 0000000..7cf9256 --- /dev/null +++ b/config/environment.rb.example @@ -0,0 +1,21 @@ +# Load the Rails application. +require_relative 'application' + +# Initialize the Rails application. +Rails.application.configure do + config.action_mailer.delivery_method = :smtp + config.action_mailer.default_url_options = { host: 'localhost', port: 3000 } +end + +Rails.application.initialize! + + +ActionMailer::Base.smtp_settings = { + :domain => "", + :address => "", + :user_name => "", + :password => "", + #:port => "", + :authentication => :plain, + :enable_starttls_auto => true +} diff --git a/config/environments/development.rb b/config/environments/development.rb index 5187e22..bb63c07 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -25,6 +25,8 @@ config.cache_store = :null_store end + + config.read_encrypted_secrets = true # Don't care if the mailer can't send. config.action_mailer.raise_delivery_errors = false @@ -41,6 +43,7 @@ # This option may cause significant delays in view rendering with a large # number of complex assets. config.assets.debug = true + config.read_encrypted_secrets = true # Suppress logger output for asset requests. config.assets.quiet = true diff --git a/config/environments/production.rb b/config/environments/production.rb index 381a28a..7943bc0 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -27,8 +27,8 @@ config.assets.js_compressor = :uglifier # config.assets.css_compressor = :sass - # Do not fallback to assets pipeline if a precompiled asset is missed. - config.assets.compile = false + # Fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = true # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb index b19cc49..66a3bd1 100644 --- a/config/initializers/assets.rb +++ b/config/initializers/assets.rb @@ -13,4 +13,8 @@ # folder are already added. Rails.application.config.assets.precompile += %w( entre_azul_y_verde/entre_azul_y_verde.scss -entre_azul_y_verde/entre_azul_y_verde.js ) +entre_azul_y_verde/entre_azul_y_verde.js +mosaico_natura/mosaico_natura.scss +mosaico_natura/mosaico_natura.js +) +Rails.application.config.assets.prefix = '/concursos_assets' diff --git a/config/initializers/devise.rb.example b/config/initializers/devise.rb.example new file mode 100644 index 0000000..c10943d --- /dev/null +++ b/config/initializers/devise.rb.example @@ -0,0 +1,312 @@ +# frozen_string_literal: true + +# Assuming you have not yet modified this file, each configuration option below +# is set to its default value. Note that some are commented out while others +# are not: uncommented lines are intended to protect your configuration from +# breaking changes in upgrades (i.e., in the event that future versions of +# Devise change the default values for those options). +# +# Use this hook to configure devise mailer, warden hooks and so forth. +# Many of these configuration options can be set straight in your model. +Devise.setup do |config| + # The secret key used by Devise. Devise uses this key to generate + # random tokens. Changing this key will render invalid all existing + # confirmation, reset password and unlock tokens in the database. + # Devise will use the `secret_key_base` as its `secret_key` + # by default. You can change it below and use your own secret key. + config.secret_key = '' + + # ==> Controller configuration + # Configure the parent class to the devise controllers. + # config.parent_controller = 'DeviseController' + + # ==> Mailer Configuration + # Configure the e-mail address which will be shown in Devise::Mailer, + # note that it will be overwritten if you use your own mailer class + # with default "from" parameter. + config.mailer_sender = 'noreply@my-dominio.com' + + # Configure the class responsible to send e-mails. + config.mailer = 'Devise::Mailer' + + # Configure the parent class responsible to send e-mails. + # config.parent_mailer = 'ActionMailer::Base' + + # ==> ORM configuration + # Load and configure the ORM. Supports :active_record (default) and + # :mongoid (bson_ext recommended) by default. Other ORMs may be + # available as additional gems. + require 'devise/orm/active_record' + + # ==> Configuration for any authentication mechanism + # Configure which keys are used when authenticating a user. The default is + # just :email. You can configure it to use [:username, :subdomain], so for + # authenticating a user, both parameters are required. Remember that those + # parameters are used only when authenticating and not when retrieving from + # session. If you need permissions, you should implement that in a before filter. + # You can also supply a hash where the value is a boolean determining whether + # or not authentication should be aborted when the value is not present. + # config.authentication_keys = [:email] + + # Configure parameters from the request object used for authentication. Each entry + # given should be a request method and it will automatically be passed to the + # find_for_authentication method and considered in your model lookup. For instance, + # if you set :request_keys to [:subdomain], :subdomain will be used on authentication. + # The same considerations mentioned for authentication_keys also apply to request_keys. + # config.request_keys = [] + + # Configure which authentication keys should be case-insensitive. + # These keys will be downcased upon creating or modifying a user and when used + # to authenticate or find a user. Default is :email. + config.case_insensitive_keys = [:email] + + # Configure which authentication keys should have whitespace stripped. + # These keys will have whitespace before and after removed upon creating or + # modifying a user and when used to authenticate or find a user. Default is :email. + config.strip_whitespace_keys = [:email] + + # Tell if authentication through request.params is enabled. True by default. + # It can be set to an array that will enable params authentication only for the + # given strategies, for example, `config.params_authenticatable = [:database]` will + # enable it only for database (email + password) authentication. + # config.params_authenticatable = true + + # Tell if authentication through HTTP Auth is enabled. False by default. + # It can be set to an array that will enable http authentication only for the + # given strategies, for example, `config.http_authenticatable = [:database]` will + # enable it only for database authentication. + # For API-only applications to support authentication "out-of-the-box", you will likely want to + # enable this with :database unless you are using a custom strategy. + # The supported strategies are: + # :database = Support basic authentication with authentication key + password + # config.http_authenticatable = false + + # If 401 status code should be returned for AJAX requests. True by default. + # config.http_authenticatable_on_xhr = true + + # The realm used in Http Basic Authentication. 'Application' by default. + # config.http_authentication_realm = 'Application' + + # It will change confirmation, password recovery and other workflows + # to behave the same regardless if the e-mail provided was right or wrong. + # Does not affect registerable. + # config.paranoid = true + + # By default Devise will store the user in session. You can skip storage for + # particular strategies by setting this option. + # Notice that if you are skipping storage for all authentication paths, you + # may want to disable generating routes to Devise's sessions controller by + # passing skip: :sessions to `devise_for` in your config/routes.rb + config.skip_session_storage = [:http_auth] + + # By default, Devise cleans up the CSRF token on authentication to + # avoid CSRF token fixation attacks. This means that, when using AJAX + # requests for sign in and sign up, you need to get a new CSRF token + # from the server. You can disable this option at your own risk. + # config.clean_up_csrf_token_on_authentication = true + + # When false, Devise will not attempt to reload routes on eager load. + # This can reduce the time taken to boot the app but if your application + # requires the Devise mappings to be loaded during boot time the application + # won't boot properly. + # config.reload_routes = true + + # ==> Configuration for :database_authenticatable + # For bcrypt, this is the cost for hashing the password and defaults to 12. If + # using other algorithms, it sets how many times you want the password to be hashed. + # The number of stretches used for generating the hashed password are stored + # with the hashed password. This allows you to change the stretches without + # invalidating existing passwords. + # + # Limiting the stretches to just one in testing will increase the performance of + # your test suite dramatically. However, it is STRONGLY RECOMMENDED to not use + # a value less than 10 in other environments. Note that, for bcrypt (the default + # algorithm), the cost increases exponentially with the number of stretches (e.g. + # a value of 20 is already extremely slow: approx. 60 seconds for 1 calculation). + config.stretches = Rails.env.test? ? 1 : 12 + + # Set up a pepper to generate the hashed password. + # config.pepper = '0087205b01d845decf9eb57d0c1585def43e23b2a4434e5d4447d27e379415cc74fb7f1b2ff690df50fc79df4401f18c37cc9904e3a688fe281fd02e22d1ad69' + + # Send a notification to the original email when the user's email is changed. + # config.send_email_changed_notification = false + + # Send a notification email when the user's password is changed. + # config.send_password_change_notification = false + + # ==> Configuration for :confirmable + # A period that the user is allowed to access the website even without + # confirming their account. For instance, if set to 2.days, the user will be + # able to access the website for two days without confirming their account, + # access will be blocked just in the third day. + # You can also set it to nil, which will allow the user to access the website + # without confirming their account. + # Default is 0.days, meaning the user cannot access the website without + # confirming their account. + # config.allow_unconfirmed_access_for = 2.days + + # A period that the user is allowed to confirm their account before their + # token becomes invalid. For example, if set to 3.days, the user can confirm + # their account within 3 days after the mail was sent, but on the fourth day + # their account can't be confirmed with the token any more. + # Default is nil, meaning there is no restriction on how long a user can take + # before confirming their account. + # config.confirm_within = 3.days + + # If true, requires any email changes to be confirmed (exactly the same way as + # initial account confirmation) to be applied. Requires additional unconfirmed_email + # db field (see migrations). Until confirmed, new email is stored in + # unconfirmed_email column, and copied to email column on successful confirmation. + config.reconfirmable = true + + # Defines which key will be used when confirming an account + # config.confirmation_keys = [:email] + + # ==> Configuration for :rememberable + # The time the user will be remembered without asking for credentials again. + # config.remember_for = 2.weeks + + # Invalidates all the remember me tokens when the user signs out. + config.expire_all_remember_me_on_sign_out = true + + # If true, extends the user's remember period when remembered via cookie. + # config.extend_remember_period = false + + # Options to be passed to the created cookie. For instance, you can set + # secure: true in order to force SSL only cookies. + # config.rememberable_options = {} + + # ==> Configuration for :validatable + # Range for password length. + config.password_length = 6..128 + + # Email regex used to validate email formats. It simply asserts that + # one (and only one) @ exists in the given string. This is mainly + # to give user feedback and not to assert the e-mail validity. + config.email_regexp = /\A[^@\s]+@[^@\s]+\z/ + + # ==> Configuration for :timeoutable + # The time you want to timeout the user session without activity. After this + # time the user will be asked for credentials again. Default is 30 minutes. + # config.timeout_in = 30.minutes + + # ==> Configuration for :lockable + # Defines which strategy will be used to lock an account. + # :failed_attempts = Locks an account after a number of failed attempts to sign in. + # :none = No lock strategy. You should handle locking by yourself. + # config.lock_strategy = :failed_attempts + + # Defines which key will be used when locking and unlocking an account + # config.unlock_keys = [:email] + + # Defines which strategy will be used to unlock an account. + # :email = Sends an unlock link to the user email + # :time = Re-enables login after a certain amount of time (see :unlock_in below) + # :both = Enables both strategies + # :none = No unlock strategy. You should handle unlocking by yourself. + # config.unlock_strategy = :both + + # Number of authentication tries before locking an account if lock_strategy + # is failed attempts. + # config.maximum_attempts = 20 + + # Time interval to unlock the account if :time is enabled as unlock_strategy. + # config.unlock_in = 1.hour + + # Warn on the last attempt before the account is locked. + # config.last_attempt_warning = true + + # ==> Configuration for :recoverable + # + # Defines which key will be used when recovering the password for an account + # config.reset_password_keys = [:email] + + # Time interval you can reset your password with a reset password key. + # Don't put a too small interval or your users won't have the time to + # change their passwords. + config.reset_password_within = 6.hours + + # When set to false, does not sign a user in automatically after their password is + # reset. Defaults to true, so a user is signed in automatically after a reset. + # config.sign_in_after_reset_password = true + + # ==> Configuration for :encryptable + # Allow you to use another hashing or encryption algorithm besides bcrypt (default). + # You can use :sha1, :sha512 or algorithms from others authentication tools as + # :clearance_sha1, :authlogic_sha512 (then you should set stretches above to 20 + # for default behavior) and :restful_authentication_sha1 (then you should set + # stretches to 10, and copy REST_AUTH_SITE_KEY to pepper). + # + # Require the `devise-encryptable` gem when using anything other than bcrypt + # config.encryptor = :sha512 + + # ==> Scopes configuration + # Turn scoped views on. Before rendering "sessions/new", it will first check for + # "users/sessions/new". It's turned off by default because it's slower if you + # are using only default views. + # config.scoped_views = false + + # Configure the default scope given to Warden. By default it's the first + # devise role declared in your routes (usually :user). + # config.default_scope = :user + + # Set this configuration to false if you want /users/sign_out to sign out + # only the current scope. By default, Devise signs out all scopes. + # config.sign_out_all_scopes = true + + # ==> Navigation configuration + # Lists the formats that should be treated as navigational. Formats like + # :html, should redirect to the sign in page when the user does not have + # access, but formats like :xml or :json, should return 401. + # + # If you have any extra navigational formats, like :iphone or :mobile, you + # should add them to the navigational formats lists. + # + # The "*/*" below is required to match Internet Explorer requests. + # config.navigational_formats = ['*/*', :html] + + # The default HTTP method used to sign out a resource. Default is :delete. + config.sign_out_via = :delete + + # ==> OmniAuth + # Add a new OmniAuth provider. Check the wiki for more information on setting + # up on your models and hooks. + # config.omniauth :github, 'APP_ID', 'APP_SECRET', scope: 'user,public_repo' + + # ==> Warden configuration + # If you want to use other strategies, that are not supported by Devise, or + # change the failure app, you can configure them inside the config.warden block. + # + # config.warden do |manager| + # manager.intercept_401 = false + # manager.default_strategies(scope: :user).unshift :some_external_strategy + # end + + # ==> Mountable engine configurations + # When using Devise inside an engine, let's call it `MyEngine`, and this engine + # is mountable, there are some extra configurations to be taken into account. + # The following options are available, assuming the engine is mounted as: + # + # mount MyEngine, at: '/my_engine' + # + # The router that invoked `devise_for`, in the example above, would be: + # config.router_name = :my_engine + # + # When using OmniAuth, Devise cannot automatically set OmniAuth path, + # so you need to do it manually. For the users scope, it would be: + # config.omniauth_path_prefix = '/my_engine/users/auth' + + # ==> Turbolinks configuration + # If your app is using Turbolinks, Turbolinks::Controller needs to be included to make redirection work correctly: + # + # ActiveSupport.on_load(:devise_failure_app) do + # include Turbolinks::Controller + # end + + # ==> Configuration for :registerable + + # When set to false, does not sign a user in automatically after their password is + # changed. Defaults to true, so a user is signed in automatically after changing a password. + # config.sign_in_after_change_password = true + +end diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb index d82d912..775a874 100644 --- a/config/initializers/inflections.rb +++ b/config/initializers/inflections.rb @@ -20,4 +20,5 @@ inflect.irregular 'categoria', 'categorias' inflect.irregular 'direccion', 'direcciones' inflect.irregular 'galeria', 'galerias' + inflect.irregular 'calificacion', 'calificaciones' end \ No newline at end of file diff --git a/config/locales/devise.en.yml b/config/locales/devise.en.yml new file mode 100644 index 0000000..fbce562 --- /dev/null +++ b/config/locales/devise.en.yml @@ -0,0 +1,65 @@ +# Additional translations at https://github.com/heartcombo/devise/wiki/I18n + +en: + devise: + confirmations: + confirmed: "Your email address has been successfully confirmed." + send_instructions: "Recibirás un correo con las instrucciones para activar tu cuenta." + send_paranoid_instructions: "If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes." + failure: + already_authenticated: "You are already signed in." + inactive: "Your account is not activated yet." + invalid: "Invalid %{authentication_keys} or password." + locked: "Your account is locked." + last_attempt: "You have one more attempt before your account is locked." + not_found_in_database: "Invalid %{authentication_keys} or password." + timeout: "Your session expired. Please sign in again to continue." + unauthenticated: "You need to sign in or sign up before continuing." + unconfirmed: "You have to confirm your email address before continuing." + mailer: + confirmation_instructions: + subject: "Confirmation instructions" + reset_password_instructions: + subject: "Reset password instructions" + unlock_instructions: + subject: "Unlock instructions" + email_changed: + subject: "Email Changed" + password_change: + subject: "Password Changed" + omniauth_callbacks: + failure: "Could not authenticate you from %{kind} because \"%{reason}\"." + success: "Successfully authenticated from %{kind} account." + passwords: + no_token: "You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided." + send_instructions: "Recibirás un correo con las instrucciones para restablecer tu contraseña." + send_paranoid_instructions: "If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes." + updated: "Your password has been changed successfully. You are now signed in." + updated_not_active: "Your password has been changed successfully." + registrations: + destroyed: "Tu cuenta ha sido cancelada. Esperamos verte pronto de nuevo." + signed_up: "Bienvenido a Entre Azul y Verde." + signed_up_but_inactive: "You have signed up successfully. However, we could not sign you in because your account is not yet activated." + signed_up_but_locked: "You have signed up successfully. However, we could not sign you in because your account is locked." + signed_up_but_unconfirmed: "A message with a confirmation link has been sent to your email address. Please follow the link to activate your account." + update_needs_confirmation: "You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirmation link to confirm your new email address." + updated: "Tu cuenta se actualizo correctamente." + updated_but_not_signed_in: "Your account has been updated successfully, but since your password was changed, you need to sign in again." + sessions: + signed_in: "Bienvenido a Entre Azul y Verde." + signed_out: "Signed out successfully." + already_signed_out: "Signed out successfully." + unlocks: + send_instructions: "You will receive an email with instructions for how to unlock your account in a few minutes." + send_paranoid_instructions: "If your account exists, you will receive an email with instructions for how to unlock it in a few minutes." + unlocked: "Your account has been unlocked successfully. Please sign in to continue." + errors: + messages: + already_confirmed: "was already confirmed, please try signing in" + confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one" + expired: "has expired, please request a new one" + not_found: "not found" + not_locked: "was not locked" + not_saved: + one: "1 error prohibited this %{resource} from being saved:" + other: "%{count} errors prohibited this %{resource} from being saved:" diff --git a/config/locales/devise.es.yml b/config/locales/devise.es.yml new file mode 100644 index 0000000..d593b10 --- /dev/null +++ b/config/locales/devise.es.yml @@ -0,0 +1,107 @@ +es: + # ==================== + # Devise + # ==================== + devise: + confirmations: + confirmed: "Tu correo electrónico ha sido confirmado exitosamente." + send_instructions: "Recibirás un email con las instrucciones para confirmar tu correo electrónico en unos minutos." + send_paranoid_instructions: "Si tu correo electrónico existe en nuestra base de datos, recibirás un email con las instrucciones para confirmar tu correo electrónico en unos minutos." + failure: + already_authenticated: "Ya iniciaste sesión." + inactive: "Tu cuenta aún no ha sido activada." + invalid: "Email y/o contraseña inválidos." + locked: "Tu cuenta está bloqueada." + last_attempt: "Tienes un intento más antes que tu cuenta sea bloqueada." + not_found_in_database: "%{authentication_keys} o contraseña inválidos." + timeout: "Tu sesión ha expirado. Inicia sesión nuevamente." + unauthenticated: "Tienes que registrarte o iniciar sesión antes de continuar." + unconfirmed: "Tienes que confirmar tu cuenta antes de continuar." + mailer: + confirmation_instructions: + subject: "Instrucciones de confirmación" + reset_password_instructions: + subject: "Instrucciones de cambio de contraseña" + unlock_instructions: + subject: "Instrucciones de desbloqueo" + email_changed: + subject: "Email modificado" + password_change: + subject: "Contraseña modificada" + omniauth_callbacks: + failure: "No pudimos autentificar tu cuenta de %{kind} por la siguiente razón: \"%{reason}\"." + success: "Te autentificaste correctamente con tu cuenta de %{kind}." + passwords: + no_token: "No puedes acceder a esta página sin venir desde el email de reinicio de contraseña. Si vienes desde ahí, por favor asegúrate de usar la url completa que aparece." + send_instructions: "Recibirás un email con instrucciones para reiniciar tu contraseña en unos minutos." + send_paranoid_instructions: "Si tu email existe en el sistema, recibirás un email con instrucciones para reiniciar tu contraseña en unos minutos." + updated: "Tu contraseña fue modificada correctamente. Has iniciado sesión." + updated_not_active: "Tu contraseña fue modificada correctamente." + registrations: + destroyed: "Adiós, tu cuenta ha sido eliminada. Esperamos verte de vuelta pronto!" + user_ayv: + signed_up: "Bienvenido a Entre Azul y Verde! Te has registrado correctamente." + user_mn: + signed_up: "Bienvenido a Mosaico Natura! Te has registrado correctamente." + signed_up: "Bienvenido! Te has registrado correctamente." + signed_up_but_inactive: "Te has registrado correctamente, pero tu cuenta aun no ha sido activada." + signed_up_but_locked: "Te has registrado correctamente, pero tu cuenta está bloqueada." + signed_up_but_unconfirmed: "Te hemos enviado un email con instrucciones para que confirmes tu cuenta." + update_needs_confirmation: "Actualizaste tu cuenta correctamente, pero tenemos que revalidar tu email. Revisa tu correo para confirmar la dirección." + updated: "Actualizaste tu cuenta correctamente." + updated_but_not_signed_in: "Actualizaste tu cuenta correctamente, pero tienes que iniciar sesión nuevamente porque tu contraseña ha cambiado." + sessions: + user_ayv: + signed_in: "¡Bienvenido! iniciaste sesión correctamente a Entre Azul y Verde." + user_mn: + signed_in: "¡Bienvenido! iniciaste sesión correctamente en Mosaico Natura." + signed_in: "Iniciaste sesión correctamente." + signed_out: "Cerraste sesión correctamente." + already_signed_out: "Se cerró sesión correctamente." + unlocks: + send_instructions: "Recibirás un email con instrucciones para desbloquear tu cuenta en unos minutos." + send_paranoid_instructions: "Si tu cuenta existe, recibirás un email con instrucciones para desbloquear tu cuenta en unos minutos." + unlocked: "Tu cuenta ha sido desbloqueada. Inicia sesión para continuar." + + # ==================== + # ActiveRecord / Validations + # ==================== + activerecord: + models: + mosaico_natura/usuario_mn: "Usuario Mosaico Natura" + attributes: + mosaico_natura/usuario_mn: + nombre: "Nombre" + apellido_paterno: "Apellido paterno" + apellido_materno: "Apellido materno" + fecha_nacimiento: "Fecha de nacimiento" + lugar_nacimiento: "Lugar de nacimiento" + medio: "Medio" + errors: + messages: + blank: "no puede estar vacío" + invalid: "no es válido" + taken: "ya está en uso" + too_short: "es demasiado corto" + too_long: "es demasiado largo" + + # Cómo se muestra cada error (formato) + errors: + format: "%{attribute} %{message}" + + # ==================== + # Mensajes adicionales (Devise / General) + # ==================== + errors: + messages: + already_confirmed: "ya fue confirmada. Intenta ingresar." + confirmation_period_expired: "debe confirmarse dentro de %{period}, por favor pide una nueva" + expired: "ha expirado, por favor pide una nueva" + not_found: "no encontrado" + not_locked: "no ha sido bloqueada" + not_saved: + one: "Ha ocurrido 1 error:" + other: "Han ocurrido %{count} errores:" + simple_form: + error_notification: + default_message: "Revisa los siguientes errores:" \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 36b1dfb..b2ac2d4 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,19 +1,108 @@ Rails.application.routes.draw do - resources :cat_concursos - resources :media_metadatos - resources :usuario_metadatos - resources :cat_metadatos - resources :direcciones - resources :categorias - resources :usuarios - resources :medias - # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html - - namespace 'entre_azul_y_verde' do - root 'inicio#index' - resources :galerias - resources :panel - resources :registro - end + devise_for :users + devise_for :user_ayv, :controllers => {:confirmations => "entre_azul_y_verde/devise/confirmations", :passwords => "entre_azul_y_verde/devise/passwords", :registrations => "entre_azul_y_verde/devise/registrations", :unlocks => "entre_azul_y_verde/devise/unlocks", :sessions => "entre_azul_y_verde/devise/sessions"} + devise_for :user_mn, :controllers => {:confirmations => "mosaico_natura/devise/confirmations", :passwords => "mosaico_natura/devise/passwords", :registrations => "mosaico_natura/devise/registrations", :unlocks => "mosaico_natura/devise/unlocks", :sessions => "mosaico_natura/devise/sessions"} + + resources :cat_concursos + resources :media_metadatos + resources :usuario_metadatos + resources :cat_metadatos + resources :direcciones + resources :categorias + resources :usuarios + resources :medias + resources :calificaciones + # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html + + + if Rails.env.development? + namespace 'entre_azul_y_verde' do + root 'inicio#index' + get 'quees' => 'inicio#index' + get 'categorias' => 'inicio#index' + get 'medios' => 'inicio#index' + + get 'bases' => 'inicio#bases' + get '/galerias/index' + get '/galerias/' => 'galerias#index' + get 'panel/precalificacion' => 'panel#precalificacion' + resources :registro + + resources :panel do + collection do + get :precalificacion + get :calificacion + get :desempate + end + end + end + + namespace 'mosaico_natura' do + root 'inicio#index' + get 'quees' => 'inicio#index' + get 'categorias' => 'inicio#index' + get 'medios' => 'inicio#index' + get 'bases' => 'inicio#bases' + get 'terminos_condiciones' => 'inicio#terminos_condiciones' + get '/galerias/index' + get '/galerias/' => 'galerias#index' + + resources :registro + + resources :panel do + collection do + get :calificacion + get :desempate + get :ganadores + get :todos + end + end + end + + else + constraints(lambda { |request| ['entreazulyverde.mx','www.entreazulyverde.mx'].include?(request.host) }) do + root 'entre_azul_y_verde/inicio#index' + namespace 'entre_azul_y_verde' do + root 'inicio#index' + get 'quees' => 'inicio#index' + get 'categorias' => 'inicio#index' + get 'medios' => 'inicio#index' + + get 'bases' => 'inicio#bases' + get '/galerias/index' + get '/galerias/' => 'galerias#index' + resources :panel do + collection do + get :precalificacion + get :calificacion + get :desempate + end + end + end + end + + constraints(lambda { |request| ['mosaiconatura.net','www.mosaiconatura.net'].include?(request.host) }) do + root 'mosaico_natura/inicio#index' + namespace 'mosaico_natura' do + root 'inicio#index' + get 'quees' => 'inicio#index' + get 'categorias' => 'inicio#index' + get 'medios' => 'inicio#index' + get 'bases' => 'inicio#bases' + get 'terminos_condiciones' => 'inicio#terminos_condiciones' + get '/galerias/index' + get '/galerias/' => 'galerias#index' + resources :galerias + resources :panel do + collection do + get :calificacion + get :desempate + get :ganadores + get :todos + end + end + end + end + end end diff --git a/config/secrets.yml b/config/secrets.yml deleted file mode 100644 index a2bdc0d..0000000 --- a/config/secrets.yml +++ /dev/null @@ -1,32 +0,0 @@ -# Be sure to restart your server when you modify this file. - -# Your secret key is used for verifying the integrity of signed cookies. -# If you change this key, all old signed cookies will become invalid! - -# Make sure the secret is at least 30 characters and all random, -# no regular words or you'll be exposed to dictionary attacks. -# You can use `rails secret` to generate a secure secret key. - -# Make sure the secrets in this file are kept private -# if you're sharing your code publicly. - -# Shared secrets are available across all environments. - -# shared: -# api_key: a1B2c3D4e5F6 - -# Environmental secrets are only available for that specific environment. - -development: - secret_key_base: bca2106256c49d9e00516c173c69808bf94fd314acef3f68580011663b99ad24c11e4bf2ddf82366732b31a42ad0a1f148dc3792c2e93fdc08f1f768d153eccf - -test: - secret_key_base: a9bb3f8dfb48f53d6fda59a0c5e18f31276bb1e76d3136d038d2d8896bf049fb54e437fcf72df5318f5e214a3554bd1585e7ad0134dab5afb3a55d65f48c8903 - -# Do not keep production secrets in the unencrypted secrets file. -# Instead, either read values from the environment. -# Or, use `bin/rails secrets:setup` to configure encrypted secrets -# and move the `production:` environment over there. - -production: - secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/config/secrets.yml.enc b/config/secrets.yml.enc new file mode 100644 index 0000000..a9af6a6 --- /dev/null +++ b/config/secrets.yml.enc @@ -0,0 +1 @@ +NcbxavRKyFMNFof4JtZzhZcFixOmaz7tC2sQ1i+2OtQ6ddXgtKXJSASVtv1RS43Jvnsdt0rTb7XwOi4ymY1KdWdSSLDvVEdqaYuUvcRd6WUtMJjPwfLMjMtFUdHBrT2Az/09y8fqLlktFi2mVarEJkEZA9KDslJsVr9o4fHLO2DDZCEOCnXkbVZXjpwl+GzSrNcZW1jPK/ohyDl/srF/bw9+2tXBqiMq33rwsxq815ldZIgl3W5p2PDYBmRJxv/wiJsqIM36wpV4WVZ2pcbNPYPRoDEmC5H16GMZXjE8jrpFd2gzosf/C7kZOc5rSOx92b+mIgQs44XTTbiKGBiTi/caf1lwUgjpr3rOZIajUFIRfoCWxc4gLdqxo6Yn4ZmrSMEtKmhxqUgKprqVJYGQDM6W5EKs0eKqLAJS6mOO0ZxJIP1EHZwzK3vVUnC/kR9hJpTByCEAnMZMws9/0vGUy+IMFWRqEA7ZHSOWGF3QAZQcAL19--4w+dyuw7vqKic0HY--/nne2QEubpclcKYCfBLXHg== \ No newline at end of file diff --git a/config/secrets.yml.example b/config/secrets.yml.example new file mode 100644 index 0000000..4525771 --- /dev/null +++ b/config/secrets.yml.example @@ -0,0 +1,79 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rails secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +# Shared secrets are available across all environments. + +# shared: +# api_key: a1B2c3D4e5F6 + +# Environmental secrets are only available for that specific environment. + +development: + secret_key_base: llaveBienComplicada + entre_azul_y_verde: + dgcc: + usuario: usuarioGenerico + password: passwordBienDificil + posicion: 3 + juez1: + usuario: usuarioGenerico1 + password: passwordBienDificil1 + posicion: 0 + juez2: + usuario: usuarioGenerico2 + password: passwordBienDificil2 + posicion: 1 + juez3: + usuario: usuarioGenerico3 + password: passwordBienDificil3 + posicion: 2 + mosaico_natura: + dgcc: + usuario: usuarioGenericoB + password: passwordBienDificilB + posicion: 4 + juez_foto_1: + usuario: usuarioGenericoB1 + password: passwordBienDificilB1 + posicion: 0 + juez_foto_2: + usuario: usuarioGenericoB2 + password: passwordBienDificilB2 + posicion: 1 + juez_foto_3: + usuario: usuarioGenericoB3 + password: passwordBienDificilB3 + posicion: 2 + juez_foto_4: + usuario: usuarioGenericoB4 + password: passwordBienDificilB4 + posicion: 3 + juez_video_1: + usuario: usuarioGenericoC1 + password: passwordBienDificilC1 + posicion: 0 + juez_video_2: + usuario: usuarioGenericoC2 + password: passwordBienDificilC2 + posicion: 1 +test: + secret_key_base: llaveBienComplicadaPorDos + +# Do not keep production secrets in the unencrypted secrets file. +# Instead, either read values from the environment. +# Or, use `bin/rails secrets:setup` to configure encrypted secrets +# and move the `production:` environment over there. + +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> + usuario_calificacion: usuarioGenerico3 + password_calificacion: passwordBienDificil3 diff --git a/db/migrate/20210525052858_create_medias.rb b/db/migrate/20210525052858_create_medias.rb index f3d6403..e53988a 100644 --- a/db/migrate/20210525052858_create_medias.rb +++ b/db/migrate/20210525052858_create_medias.rb @@ -7,8 +7,8 @@ def change t.date :fecha_subida t.string :ruta t.integer :size - t.integer :id_usuario - t.integer :id_categoria + t.integer :usuario_id + t.integer :categoria_id t.timestamps end diff --git a/db/migrate/20210525053331_create_usuarios.rb b/db/migrate/20210525053331_create_usuarios.rb index ab8d67b..3990e18 100644 --- a/db/migrate/20210525053331_create_usuarios.rb +++ b/db/migrate/20210525053331_create_usuarios.rb @@ -5,9 +5,8 @@ def change t.string :nombre t.string :apellido_paterno t.string :apellido_materno - t.date :fecha_nacimiento_nac + t.date :fecha_nacimiento t.string :lugar_nacimiento - t.string :curp t.string :password_digest t.timestamps diff --git a/db/migrate/20210525054148_create_direcciones.rb b/db/migrate/20210525054148_create_direcciones.rb index 9752887..dc269bb 100644 --- a/db/migrate/20210525054148_create_direcciones.rb +++ b/db/migrate/20210525054148_create_direcciones.rb @@ -8,7 +8,7 @@ def change t.string :municipio t.string :cp t.string :estado - t.integer :id_usuario + t.integer :usuario_id t.timestamps end diff --git a/db/migrate/20210525151321_create_usuario_metadatos.rb b/db/migrate/20210525151321_create_usuario_metadatos.rb index 3d194be..c6dcc99 100644 --- a/db/migrate/20210525151321_create_usuario_metadatos.rb +++ b/db/migrate/20210525151321_create_usuario_metadatos.rb @@ -1,8 +1,8 @@ class CreateUsuarioMetadatos < ActiveRecord::Migration[5.1] def change create_table :usuario_metadatos do |t| - t.integer :id_metadato - t.integer :id_usuario + t.integer :metadato_id + t.integer :usuario_id t.string :valor_metadato t.timestamps diff --git a/db/migrate/20210525151427_create_media_metadatos.rb b/db/migrate/20210525151427_create_media_metadatos.rb index 2ee9508..e0bf7cf 100644 --- a/db/migrate/20210525151427_create_media_metadatos.rb +++ b/db/migrate/20210525151427_create_media_metadatos.rb @@ -1,8 +1,8 @@ class CreateMediaMetadatos < ActiveRecord::Migration[5.1] def change create_table :media_metadatos do |t| - t.integer :id_metadato - t.integer :id_media + t.integer :metadato_id + t.integer :media_id t.string :valor_metadato t.timestamps diff --git a/db/migrate/20211103005559_devise_create_users.rb b/db/migrate/20211103005559_devise_create_users.rb new file mode 100644 index 0000000..b6e5c6e --- /dev/null +++ b/db/migrate/20211103005559_devise_create_users.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +class DeviseCreateUsers < ActiveRecord::Migration[5.1] + def change + create_table :users do |t| + ## Database authenticatable + t.string :email, null: false, default: "" + t.string :encrypted_password, null: false, default: "" + + ## Recoverable + t.string :reset_password_token + t.datetime :reset_password_sent_at + + ## Rememberable + t.datetime :remember_created_at + + ## Trackable + # t.integer :sign_in_count, default: 0, null: false + # t.datetime :current_sign_in_at + # t.datetime :last_sign_in_at + # t.string :current_sign_in_ip + # t.string :last_sign_in_ip + + ## Confirmable + # t.string :confirmation_token + # t.datetime :confirmed_at + # t.datetime :confirmation_sent_at + # t.string :unconfirmed_email # Only if using reconfirmable + + ## Lockable + # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts + # t.string :unlock_token # Only if unlock strategy is :email or :both + # t.datetime :locked_at + + + t.timestamps null: false + end + + add_index :users, :email, unique: true + add_index :users, :reset_password_token, unique: true + # add_index :users, :confirmation_token, unique: true + # add_index :users, :unlock_token, unique: true + end +end diff --git a/db/migrate/20211103105112_delete_credentials_for_usuarios.rb b/db/migrate/20211103105112_delete_credentials_for_usuarios.rb new file mode 100644 index 0000000..d562089 --- /dev/null +++ b/db/migrate/20211103105112_delete_credentials_for_usuarios.rb @@ -0,0 +1,11 @@ +class DeleteCredentialsForUsuarios < ActiveRecord::Migration[5.1] + def up + remove_column :usuarios, :email + remove_column :usuarios, :password_digest + end + + def down + add_column :usuarios, :email, :string + add_column :usuarios, :password_digest, :string + end +end diff --git a/db/migrate/20211103234311_add_user_to_usuario.rb b/db/migrate/20211103234311_add_user_to_usuario.rb new file mode 100644 index 0000000..03929a6 --- /dev/null +++ b/db/migrate/20211103234311_add_user_to_usuario.rb @@ -0,0 +1,9 @@ +class AddUserToUsuario < ActiveRecord::Migration[5.1] + def up + add_column :usuarios, :user_id, :int, :null => false + end + + def down + remove_column :usuarios, :user_id + end +end diff --git a/db/migrate/20211105170750_create_table_tutor.rb b/db/migrate/20211105170750_create_table_tutor.rb new file mode 100644 index 0000000..6bd243f --- /dev/null +++ b/db/migrate/20211105170750_create_table_tutor.rb @@ -0,0 +1,18 @@ +class CreateTableTutor < ActiveRecord::Migration[5.1] + def up + create_table :tutores do |t| + t.string :nombre + t.string :apellido_paterno + t.string :apellido_materno + t.string :telefono_contacto + t.string :correo + t.integer :usuario_id, :null => false + + t.timestamps + end + end + + def down + drop_table :tutores + end +end diff --git a/db/migrate/20211105192739_alter_user_from_direccion.rb b/db/migrate/20211105192739_alter_user_from_direccion.rb new file mode 100644 index 0000000..5eb7c3a --- /dev/null +++ b/db/migrate/20211105192739_alter_user_from_direccion.rb @@ -0,0 +1,13 @@ +class AlterUserFromDireccion < ActiveRecord::Migration[5.1] + def up + change_table :direcciones do |t| + t.change :usuario_id, :integer, :null => false + end + end + + def down + change_table :direcciones do |t| + t.change :usuario_id, :integer, :null => true + end + end +end diff --git a/db/migrate/20211105193451_add_fields_to_usuario.rb b/db/migrate/20211105193451_add_fields_to_usuario.rb new file mode 100644 index 0000000..28a989e --- /dev/null +++ b/db/migrate/20211105193451_add_fields_to_usuario.rb @@ -0,0 +1,13 @@ +class AddFieldsToUsuario < ActiveRecord::Migration[5.1] + def up + change_table :usuarios do |t| + t.string :medio + t.integer :concurso_id, :null => false + end + end + + def down + remove_column :usuarios, :concurso_id + remove_column :usuarios, :medio + end +end diff --git a/db/migrate/20211106000150_add_otro_medio_to_usuario.rb b/db/migrate/20211106000150_add_otro_medio_to_usuario.rb new file mode 100644 index 0000000..239a741 --- /dev/null +++ b/db/migrate/20211106000150_add_otro_medio_to_usuario.rb @@ -0,0 +1,9 @@ +class AddOtroMedioToUsuario < ActiveRecord::Migration[5.1] + def up + add_column :usuarios, :otro_medio, :string + end + + def down + remove_column :usuarios, :otro_medio + end +end diff --git a/db/migrate/20211106002955_change_numero_from_direccion.rb b/db/migrate/20211106002955_change_numero_from_direccion.rb new file mode 100644 index 0000000..1ab8564 --- /dev/null +++ b/db/migrate/20211106002955_change_numero_from_direccion.rb @@ -0,0 +1,13 @@ +class ChangeNumeroFromDireccion < ActiveRecord::Migration[5.1] + def up + change_table :direcciones do |t| + t.change :numero, :string + end + end + + def down + change_table :direcciones do |t| + t.change :numero, :integer + end + end +end diff --git a/db/migrate/20211106031347_add_posicion_to_medias.rb b/db/migrate/20211106031347_add_posicion_to_medias.rb new file mode 100644 index 0000000..2c1461f --- /dev/null +++ b/db/migrate/20211106031347_add_posicion_to_medias.rb @@ -0,0 +1,9 @@ +class AddPosicionToMedias < ActiveRecord::Migration[5.1] + def up + add_column :medias, :posicion, :int + end + + def down + remove_column :medias, :posicion + end +end diff --git a/db/migrate/20211106041332_alter_table_media_metadatos.rb b/db/migrate/20211106041332_alter_table_media_metadatos.rb new file mode 100644 index 0000000..6ad23e3 --- /dev/null +++ b/db/migrate/20211106041332_alter_table_media_metadatos.rb @@ -0,0 +1,25 @@ +class AlterTableMediaMetadatos < ActiveRecord::Migration[5.1] + def up + change_table :media_metadatos do |t| + t.remove :metadato_id + t.remove :valor_metadato + t.string :titulo + t.text :descripcion + t.text :tecnica + t.text :compromiso + t.change :media_id, :integer, :null => false + end + end + + def down + change_table :media_metadatos do |t| + t.integer :metadato_id + t.string :valor_metadato + t.remove :titulo + t.remove :descripcion + t.remove :tecnica + t.remove :compromiso + t.change :media_id, :integer, :null => true + end + end +end diff --git a/db/migrate/20211208083900_add_fields_to_media_metadatos.rb b/db/migrate/20211208083900_add_fields_to_media_metadatos.rb new file mode 100644 index 0000000..578a770 --- /dev/null +++ b/db/migrate/20211208083900_add_fields_to_media_metadatos.rb @@ -0,0 +1,15 @@ +class AddFieldsToMediaMetadatos < ActiveRecord::Migration[5.1] + def up + change_table :media_metadatos do |t| + t.string :marca + t.string :localidad + end + end + + def down + change_table :media_metadatos do |t| + t.remove :marca + t.remove :localidad + end + end +end diff --git a/db/migrate/20211208150155_add_otra_marca_to_media_metadatos.rb b/db/migrate/20211208150155_add_otra_marca_to_media_metadatos.rb new file mode 100644 index 0000000..55e4134 --- /dev/null +++ b/db/migrate/20211208150155_add_otra_marca_to_media_metadatos.rb @@ -0,0 +1,13 @@ +class AddOtraMarcaToMediaMetadatos < ActiveRecord::Migration[5.1] + def change + change_table :media_metadatos do |t| + t.string :otra_marca + end + end + + def down + change_table :media_metadatos do |t| + t.remove :otra_marca + end + end +end diff --git a/db/migrate/20220315082444_create_calificaciones.rb b/db/migrate/20220315082444_create_calificaciones.rb new file mode 100644 index 0000000..22e16e0 --- /dev/null +++ b/db/migrate/20220315082444_create_calificaciones.rb @@ -0,0 +1,11 @@ +class CreateCalificaciones < ActiveRecord::Migration[5.1] + def change + create_table :calificaciones do |t| + t.integer :calificacion + t.integer :media_id, :null => true + t.integer :usuario_id + + t.timestamps + end + end +end diff --git a/db/migrate/20260310170553_add_column.rb b/db/migrate/20260310170553_add_column.rb new file mode 100644 index 0000000..602096c --- /dev/null +++ b/db/migrate/20260310170553_add_column.rb @@ -0,0 +1,6 @@ +class AddColumn < ActiveRecord::Migration[5.1] + def change + add_column :users, :terms_of_service, :boolean + + end +end diff --git a/db/migrate/20260310181444_add_column_to_users.rb b/db/migrate/20260310181444_add_column_to_users.rb new file mode 100644 index 0000000..84d2ad6 --- /dev/null +++ b/db/migrate/20260310181444_add_column_to_users.rb @@ -0,0 +1,5 @@ +class AddColumnToUsers < ActiveRecord::Migration[5.1] + def change + add_column :users, :terms, :boolean + end +end diff --git a/db/schema.rb b/db/schema.rb index 29d8c42..ccdbb9b 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,15 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20210525152541) do +ActiveRecord::Schema.define(version: 20260310181444) do + + create_table "calificaciones", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| + t.integer "calificacion" + t.integer "media_id" + t.integer "usuario_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end create_table "cat_concursos", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| t.string "nombre_concurso" @@ -36,23 +44,28 @@ create_table "direcciones", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| t.string "calle" - t.integer "numero" + t.string "numero" t.string "interior" t.string "colonia" t.string "municipio" t.string "cp" t.string "estado" - t.integer "id_usuario" + t.integer "usuario_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "media_metadatos", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| - t.integer "id_metadato" - t.integer "id_media" - t.string "valor_metadato" + t.integer "media_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.string "titulo" + t.text "descripcion" + t.text "tecnica" + t.text "compromiso" + t.string "marca" + t.string "localidad" + t.string "otra_marca" end create_table "medias", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| @@ -62,31 +75,57 @@ t.date "fecha_subida" t.string "ruta" t.integer "size" - t.integer "id_usuario" - t.integer "id_categoria" + t.integer "usuario_id" + t.integer "categoria_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "posicion" + end + + create_table "tutores", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| + t.string "nombre" + t.string "apellido_paterno" + t.string "apellido_materno" + t.string "telefono_contacto" + t.string "correo" + t.integer "usuario_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "users", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| + t.string "email", default: "", null: false + t.string "encrypted_password", default: "", null: false + t.string "reset_password_token" + t.datetime "reset_password_sent_at" + t.datetime "remember_created_at" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.boolean "terms" + t.index ["email"], name: "index_users_on_email", unique: true + t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true end create_table "usuario_metadatos", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| - t.integer "id_metadato" - t.integer "id_usuario" + t.integer "metadato_id" + t.integer "usuario_id" t.string "valor_metadato" t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "usuarios", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| - t.string "email" t.string "nombre" t.string "apellido_paterno" t.string "apellido_materno" - t.date "fecha_nacimiento_nac" + t.date "fecha_nacimiento" t.string "lugar_nacimiento" - t.string "curp" - t.string "password_digest" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.integer "user_id", null: false + t.string "medio" + t.integer "concurso_id", null: false + t.string "otro_medio" end end diff --git a/lib/tasks/auto_annotate_models.rake b/lib/tasks/auto_annotate_models.rake new file mode 100644 index 0000000..e96283e --- /dev/null +++ b/lib/tasks/auto_annotate_models.rake @@ -0,0 +1,59 @@ +# NOTE: only doing this in development as some production environments (Heroku) +# NOTE: are sensitive to local FS writes, and besides -- it's just not proper +# NOTE: to have a dev-mode tool do its thing in production. +if Rails.env.development? + require 'annotate' + task :set_annotation_options do + # You can override any of these by setting an environment variable of the + # same name. + Annotate.set_defaults( + 'active_admin' => 'false', + 'additional_file_patterns' => [], + 'routes' => 'false', + 'models' => 'true', + 'position_in_routes' => 'before', + 'position_in_class' => 'before', + 'position_in_test' => 'before', + 'position_in_fixture' => 'before', + 'position_in_factory' => 'before', + 'position_in_serializer' => 'before', + 'show_foreign_keys' => 'true', + 'show_complete_foreign_keys' => 'false', + 'show_indexes' => 'true', + 'simple_indexes' => 'false', + 'model_dir' => 'app/models', + 'root_dir' => '', + 'include_version' => 'false', + 'require' => '', + 'exclude_tests' => 'false', + 'exclude_fixtures' => 'false', + 'exclude_factories' => 'false', + 'exclude_serializers' => 'false', + 'exclude_scaffolds' => 'true', + 'exclude_controllers' => 'true', + 'exclude_helpers' => 'true', + 'exclude_sti_subclasses' => 'false', + 'ignore_model_sub_dir' => 'false', + 'ignore_columns' => nil, + 'ignore_routes' => nil, + 'ignore_unknown_models' => 'false', + 'hide_limit_column_types' => 'integer,bigint,boolean', + 'hide_default_column_types' => 'json,jsonb,hstore', + 'skip_on_db_migrate' => 'false', + 'format_bare' => 'true', + 'format_rdoc' => 'false', + 'format_yard' => 'false', + 'format_markdown' => 'false', + 'sort' => 'false', + 'force' => 'false', + 'frozen' => 'false', + 'classified_sort' => 'true', + 'trace' => 'false', + 'wrapper_open' => nil, + 'wrapper_close' => nil, + 'with_comment' => 'true' + ) + end + + Annotate.load_tasks +end diff --git a/test/fixtures/users.yml b/test/fixtures/users.yml new file mode 100644 index 0000000..b08be67 --- /dev/null +++ b/test/fixtures/users.yml @@ -0,0 +1,29 @@ +# == Schema Information +# +# Table name: users +# +# id :bigint not null, primary key +# email :string(255) default(""), not null +# encrypted_password :string(255) default(""), not null +# remember_created_at :datetime +# reset_password_sent_at :datetime +# reset_password_token :string(255) +# terms :boolean +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_users_on_email (email) UNIQUE +# index_users_on_reset_password_token (reset_password_token) UNIQUE +# + +# This model initially had no columns defined. If you add columns to the +# model remove the '{}' from the fixture names and add the columns immediately +# below each fixture, per the syntax in the comments below +# +one: {} +# column: value +# +two: {} +# column: value diff --git a/test/models/user_test.rb b/test/models/user_test.rb new file mode 100644 index 0000000..c94e34f --- /dev/null +++ b/test/models/user_test.rb @@ -0,0 +1,26 @@ +# == Schema Information +# +# Table name: users +# +# id :bigint not null, primary key +# email :string(255) default(""), not null +# encrypted_password :string(255) default(""), not null +# remember_created_at :datetime +# reset_password_sent_at :datetime +# reset_password_token :string(255) +# terms :boolean +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_users_on_email (email) UNIQUE +# index_users_on_reset_password_token (reset_password_token) UNIQUE +# +require 'test_helper' + +class UserTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end