diff --git a/.gitignore b/.gitignore index 06e2d86..41c1d7d 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,8 @@ /tmp/* !/log/.keep !/tmp/.keep +*~ +._* /node_modules /yarn-error.log @@ -28,13 +30,28 @@ 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 + + diff --git a/Gemfile b/Gemfile index 5bd3991..f5b4239 100644 --- a/Gemfile +++ b/Gemfile @@ -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,4 @@ gem 'fontello_rails_converter', git: 'https://github.com/railslove/fontello_rail gem 'jquery-rails' gem 'rails', '5.1.6.2' gem 'simple_form' + diff --git a/Gemfile.lock b/Gemfile.lock index 0742f72..e132192 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -55,6 +55,22 @@ GEM 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 +86,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 +128,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 +149,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 +207,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 +247,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) @@ -247,6 +283,8 @@ DEPENDENCIES bootstrap (~> 4.5.0) byebug capybara (~> 2.13) + carrierwave + carrierwave-aws cocoon coffee-rails (~> 4.2) devise @@ -269,4 +307,4 @@ DEPENDENCIES web-console (>= 3.3.0) BUNDLED WITH - 2.0.1 + 2.2.9 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/AVISO-DE-PRIVACIDAD-7oConcursoMosaicoNatura.pdf b/app/assets/images/mosaico_natura/AVISO-DE-PRIVACIDAD-7oConcursoMosaicoNatura.pdf new file mode 100755 index 0000000..d7bb719 Binary files /dev/null and b/app/assets/images/mosaico_natura/AVISO-DE-PRIVACIDAD-7oConcursoMosaicoNatura.pdf differ 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/Licencia-de-uso-7oConcursoMosaicoNatura.pdf b/app/assets/images/mosaico_natura/Licencia-de-uso-7oConcursoMosaicoNatura.pdf new file mode 100755 index 0000000..398327b Binary files /dev/null and b/app/assets/images/mosaico_natura/Licencia-de-uso-7oConcursoMosaicoNatura.pdf 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..7e810fb Binary files /dev/null and b/app/assets/images/mosaico_natura/PortadaWeb7to-v2.jpg differ diff --git a/app/assets/images/mosaico_natura/PortadaWeb7to-v3.jpg b/app/assets/images/mosaico_natura/PortadaWeb7to-v3.jpg new file mode 100644 index 0000000..e53fb33 Binary files /dev/null and b/app/assets/images/mosaico_natura/PortadaWeb7to-v3.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/Termino-y-Condiciones-7oConcursoMosaicoNatura.pdf b/app/assets/images/mosaico_natura/Termino-y-Condiciones-7oConcursoMosaicoNatura.pdf new file mode 100755 index 0000000..6e927d0 Binary files /dev/null and b/app/assets/images/mosaico_natura/Termino-y-Condiciones-7oConcursoMosaicoNatura.pdf differ diff --git a/app/assets/images/mosaico_natura/bases_CoSMoS.png b/app/assets/images/mosaico_natura/bases_CoSMoS.png new file mode 100755 index 0000000..0c87be0 Binary files /dev/null and b/app/assets/images/mosaico_natura/bases_CoSMoS.png 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_al_alcance_de_tu_mano.png b/app/assets/images/mosaico_natura/bases_naturaleza_al_alcance_de_tu_mano.png new file mode 100755 index 0000000..9996961 Binary files /dev/null and b/app/assets/images/mosaico_natura/bases_naturaleza_al_alcance_de_tu_mano.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-v2.jpg b/app/assets/images/mosaico_natura/colaboradoresplecaLogos-v2.jpg new file mode 100644 index 0000000..12612bb Binary files /dev/null and b/app/assets/images/mosaico_natura/colaboradoresplecaLogos-v2.jpg differ diff --git a/app/assets/images/mosaico_natura/colaboradoresplecaLogos-v3.jpg b/app/assets/images/mosaico_natura/colaboradoresplecaLogos-v3.jpg new file mode 100644 index 0000000..8dd436b Binary files /dev/null and b/app/assets/images/mosaico_natura/colaboradoresplecaLogos-v3.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..dd890c5 --- /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 > 3000 && 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,000 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..24ef553 --- /dev/null +++ b/app/controllers/entre_azul_y_verde/devise/registrations_controller.rb @@ -0,0 +1,7 @@ +class EntreAzulYVerde::Devise::RegistrationsController < ::Devise::RegistrationsController + layout 'entre_azul_y_verde' + + def after_sign_up_path_for(resource) + new_entre_azul_y_verde_registro_path + 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..951cb4f --- /dev/null +++ b/app/controllers/mosaico_natura/devise/registrations_controller.rb @@ -0,0 +1,21 @@ +class MosaicoNatura::Devise::RegistrationsController < ::Devise::RegistrationsController + layout 'mosaico_natura' + + def after_sign_up_path_for(resource) + new_mosaico_natura_registro_path + end + + 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]) + 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..ba8bddc --- /dev/null +++ b/app/controllers/mosaico_natura/registro_controller.rb @@ -0,0 +1,87 @@ +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: "mn").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(:mosaico_natura_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..ae86669 --- /dev/null +++ b/app/models/calificacion.rb @@ -0,0 +1,2 @@ +class Calificacion < ApplicationRecord +end diff --git a/app/models/cat_metadato.rb b/app/models/cat_metadato.rb index 5b644f3..f893fca 100644 --- a/app/models/cat_metadato.rb +++ b/app/models/cat_metadato.rb @@ -1,6 +1,6 @@ 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..8dbf4f1 100644 --- a/app/models/categoria.rb +++ b/app/models/categoria.rb @@ -1,5 +1,19 @@ 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: "La naturaleza en detalle (Fotografía Macro). Imágenes que resalten la belleza de los detalles diminutos de la naturaleza: Texturas, colores, formas y patrones (insectos, flores, líquenes, semillas, gotas de agua, entre otros) pueden ser tu fuente de inspiración.", + fauna: "Latidos de la vida silvestre (Fauna). Animales nativos de México en vida silvestre, desde ambientes marinos hasta las altas montañas. No se aceptan animales en cautiverio, domésticos y/o mascotas.", + plantas_y_hongos: "El mundo secreto de 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 u hongos cultivados, de maceta o jardín."}, + {naturaleza_y_ser_humano: "Ecosistemas y su gente. Imágenes aéreas o terrestres de ecosistemas que destaquen su belleza paisajística o los cambios e impactos que experimentan. También se aceptan fotografías que muestren la interacción entre las personas y la naturaleza, incluyendo los usos tradicionales, expresiones culturales, prácticas sustentables, impactos al entorno y formas de vida vinculadas con la biodiversidad. +*En el caso de que fotos que tengan imágenes en donde se pueda distinguir a la persona o personas, se deberá contar con la autorización de uso de imagen y en caso de menores de edad deberá contar con la autorización por escrito de los padres o tutores.", + paisajes_con_ecosistemas: "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."}, + {tema_libre: "(Jóvenes) Cualquier fotografía relacionada con la riqueza natural de México, en condiciones silvestres: es decir, animales o plantas en su ambiente natural, paisajes naturales, actividades relacionadas con el hombre y la naturaleza, impactos y expresiones bioculturales. No se aceptarán fotografías de plantas cultivadas, animales en cautiverio o cualquier otro ambiente controlado. +En el caso de que la(s) foto(s) tenga(n) imágenes en donde se pueda distinguir a la persona o personas, se deberá contar con la autorización de uso de imagen y en caso de menores de edad deberá contar con la autorización por escrito de los padres o tutores.", +CoSMoS: "CoSMoS. Montañas y Sierras del centro de México. Fotografías de biodiversidad (animales, plantas, hongos y paisajes representativa del lugar), paisajes, actividades productivas sostenibles, cultura local y problemáticas ambientales que enfrentan las comunidades cercanas a Áreas Naturales Protegidas del centro del país", +naturaleza_al_alcance_de_tu_mano: "La naturaleza al alcance de tu mano. Con el objetivo de fomentar la creatividad y accesibilidad en la fotografía, el concurso incluye la Categoría Especial: Fotografía con dispositivo móvil (celular, tableta electrónica u otro dispositivo), que refleje la riqueza natural de México, particularmente en las cercanías de las ANPs del proyecto CoSMoS arriba mencionadas. Las imágenes pueden incluir: animales, plantas, hongos en su entorno natural, paisajes y escenas que muestren la relación entre el ser humano y la naturaleza. No se aceptarán fotografías de organismos en cautiverio ni ambientes controlados, fotografías de plantas cultivadas, animales en cautiverio o cualquier otro ambiente controlado."}].freeze + end + \ No newline at end of file diff --git a/app/models/direccion.rb b/app/models/direccion.rb index dde66f3..2083bda 100644 --- a/app/models/direccion.rb +++ b/app/models/direccion.rb @@ -1,5 +1,6 @@ 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..711d022 --- /dev/null +++ b/app/models/entre_azul_y_verde/calificacion_ayv.rb @@ -0,0 +1,7 @@ +class CalificacionAyv < Calificacion + + belongs_to :usuario, class_name: "UsuarioAyv" + belongs_to :media, class_name: "MediaAyv" + validates_presence_of :calificacion, :media_id, :usuario_id + +end \ No newline at end of file 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..bc37182 --- /dev/null +++ b/app/models/entre_azul_y_verde/direccion_ayv.rb @@ -0,0 +1,6 @@ +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..5839b38 --- /dev/null +++ b/app/models/entre_azul_y_verde/media_ayv.rb @@ -0,0 +1,17 @@ +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..4cde2cc --- /dev/null +++ b/app/models/entre_azul_y_verde/media_metadato_ayv.rb @@ -0,0 +1,7 @@ +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..24cd87d --- /dev/null +++ b/app/models/entre_azul_y_verde/tutor_ayv.rb @@ -0,0 +1,6 @@ +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..3c61e98 --- /dev/null +++ b/app/models/entre_azul_y_verde/usuario_ayv.rb @@ -0,0 +1,75 @@ +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(2022,02,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..a644076 100644 --- a/app/models/media.rb +++ b/app/models/media.rb @@ -1,7 +1,11 @@ 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..8bd6ed1 100644 --- a/app/models/media_metadato.rb +++ b/app/models/media_metadato.rb @@ -1,6 +1,3 @@ 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..bbedcc6 --- /dev/null +++ b/app/models/mosaico_natura/calificacion_mn.rb @@ -0,0 +1,7 @@ +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 \ No newline at end of file diff --git a/app/models/mosaico_natura/categoria_mn.rb b/app/models/mosaico_natura/categoria_mn.rb new file mode 100644 index 0000000..1411a20 --- /dev/null +++ b/app/models/mosaico_natura/categoria_mn.rb @@ -0,0 +1,5 @@ +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..271023a --- /dev/null +++ b/app/models/mosaico_natura/direccion_mn.rb @@ -0,0 +1,6 @@ +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..318b9f3 --- /dev/null +++ b/app/models/mosaico_natura/media_metadato_mn.rb @@ -0,0 +1,8 @@ +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..7640b2d --- /dev/null +++ b/app/models/mosaico_natura/media_mn.rb @@ -0,0 +1,71 @@ +class MosaicoNatura::MediaMn < Media + + #attr_accessor :filename + FECHA_TERMINO_INICIAL = Date.new(2022, 01, 16) + + 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..272ccf6 --- /dev/null +++ b/app/models/mosaico_natura/usuario_mn.rb @@ -0,0 +1,18 @@ +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 = "2012-12-31" + 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..15d2235 --- /dev/null +++ b/app/models/tutor.rb @@ -0,0 +1,5 @@ +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..0e19c4e --- /dev/null +++ b/app/models/user.rb @@ -0,0 +1,8 @@ +class User < ApplicationRecord + # Include default devise modules. Others available are: + # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable + devise :database_authenticatable, :registerable, + :recoverable, :rememberable, :validatable + + 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..113f35c --- /dev/null +++ b/app/models/user_ayv.rb @@ -0,0 +1,2 @@ +class UserAyv < User +end diff --git a/app/models/user_mn.rb b/app/models/user_mn.rb new file mode 100644 index 0000000..6587ac9 --- /dev/null +++ b/app/models/user_mn.rb @@ -0,0 +1,2 @@ +class UserMn < User +end diff --git a/app/models/usuario.rb b/app/models/usuario.rb index f3e435d..5b3756b 100644 --- a/app/models/usuario.rb +++ b/app/models/usuario.rb @@ -1,9 +1,5 @@ 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..6d093c5 100644 --- a/app/models/usuario_metadato.rb +++ b/app/models/usuario_metadato.rb @@ -1,6 +1,6 @@ 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 @@ -
NUESTROS COLABORADORES
+SÍGUENOS
+CONOCE
+ +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 @@ +<%= notice %>
+ +<%= notice %>
+ +<%= notice %>
+ +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" } %> +¿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 %>
+ +<%= notice %>
+ +<%= notice %>
+ +
+
+<%= notice %>
- -| - | ||
|---|---|---|
| <%= 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?' } %> | -
<%= 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 @@ -
- 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:
+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.
+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.
+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.
+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..76dc31d --- a/app/views/entre_azul_y_verde/inicio/_categorias.erb +++ b/app/views/entre_azul_y_verde/inicio/_categorias.erb @@ -1,8 +1,92 @@ -
- 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:
+Para cada categoría de edad
+
+
|
+
+
|
+
+
|
+
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.
-
+ 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.
+
+ 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.
+Hay muchas razones. Revisa algunas. ¿Cuál te convence más?
+
+ 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.
+
+ Debes elaborar tu dibujo o pintura de los siguientes tamaños:
+
+ Toma dos fotos
+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
+
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.
+
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.
+
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.
+
+
- 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?
-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.
-Convocatoria abierta a partir del 1 de julio
-Cierre 31 de agosto
-Premiación segunda quincena de septiembre
-+ 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? +
+ +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.
+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' %> +<%= notice %>
+ +
+
+
+
+
+
+ + +
+ <%#= render :partial => 'bases' %> +
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Ó
+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Ó
+Descripción: <%= d.descripcion %>
+Compromiso: <%= d.compromiso %>
+<%= d.titulo %>
+Promedio: <%= d.promedio.round(2) %>
+ +Lugar asignado: <%= d.calificacion.to_s[@juez[:posicion]].to_i %>
+<%= 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" } %> + +En la plataforma deberás completar la siguiente información:
+<%= notice %>
-<%= render 'form', usuario: @usuario %> + <%= render partial: "entre_azul_y_verde/shared/sub-header", locals: { title: "COMPLETA LOS DATOS DEL REGISTRO" } %> + +<%= 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 @@ +
+ <%= title %>
+ 
-
+ <%= render :partial => 'entre_azul_y_verde/header' %>