diff --git a/Gemfile b/Gemfile index 869e687a0..2d6e73e38 100644 --- a/Gemfile +++ b/Gemfile @@ -24,7 +24,7 @@ gem 'devise' gem 'omniauth' gem 'omniauth-twitter' gem 'omniauth-facebook' -gem 'omniauth-google-oauth2' +gem 'omniauth-google-oauth2', '~> 0.2.7' gem 'kaminari' gem 'ancestry' @@ -44,10 +44,10 @@ gem 'rinku', require: 'rails_rinku' gem 'savon' gem 'dalli' gem 'rollbar', '~> 2.3.0' -gem 'delayed_job_active_record' +gem 'delayed_job_active_record', '~> 4.1.0' gem 'daemons' gem 'devise-async' -gem 'newrelic_rpm' +gem 'newrelic_rpm', '~> 3.13.1' gem 'whenever', require: false gem 'ahoy_matey', '~> 1.2.1' diff --git a/Gemfile.lock b/Gemfile.lock index 28149a401..97163cea6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -123,11 +123,11 @@ GEM dalli (2.7.4) database_cleaner (1.5.0) debug_inspector (0.0.2) - delayed_job (4.0.6) + delayed_job (4.1.1) activesupport (>= 3.0, < 5.0) - delayed_job_active_record (4.0.3) - activerecord (>= 3.0, < 5.0) - delayed_job (>= 3.0, < 4.1) + delayed_job_active_record (4.1.0) + activerecord (>= 3.0, < 5) + delayed_job (>= 3.0, < 5) devise (3.5.2) bcrypt (~> 3.0) orm_adapter (~> 0.1) @@ -228,7 +228,7 @@ GEM net-ssh (>= 2.6.5) net-ssh (2.9.2) netrc (0.10.3) - newrelic_rpm (3.13.0.299) + newrelic_rpm (3.13.1.300) nokogiri (1.6.6.2) mini_portile (~> 0.6.0) nori (2.6.0) @@ -245,9 +245,12 @@ GEM rack (~> 1.0) omniauth-facebook (2.0.1) omniauth-oauth2 (~> 1.2) - omniauth-google-oauth2 (0.2.6) - omniauth (> 1.0) - omniauth-oauth2 (~> 1.1) + omniauth-google-oauth2 (0.2.7) + addressable (~> 2.3) + jwt (~> 1.0) + multi_json (~> 1.3) + omniauth (>= 1.1.1) + omniauth-oauth2 (>= 1.1.1) omniauth-oauth (1.1.0) oauth omniauth (~> 1.0) @@ -430,7 +433,7 @@ DEPENDENCIES daemons dalli database_cleaner - delayed_job_active_record + delayed_job_active_record (~> 4.1.0) devise devise-async email_spec @@ -446,10 +449,10 @@ DEPENDENCIES kaminari launchy letter_opener_web (~> 1.3.0) - newrelic_rpm + newrelic_rpm (~> 3.13.1) omniauth omniauth-facebook - omniauth-google-oauth2 + omniauth-google-oauth2 (~> 0.2.7) omniauth-twitter paranoia pg diff --git a/app/assets/stylesheets/admin.scss b/app/assets/stylesheets/admin.scss index b14b265ed..ffabd35a8 100644 --- a/app/assets/stylesheets/admin.scss +++ b/app/assets/stylesheets/admin.scss @@ -29,7 +29,22 @@ body.admin { } .dashboard { - text-align: justify; + margin-bottom: rem-calc(48); + + ul, ol { + margin-left: rem-calc(12); + + li { + font-size: rem-calc(15); + line-height: rem-calc(30); + margin-bottom: rem-calc(12); + } + } + + p { + font-size: rem-calc(15); + line-height: rem-calc(30); + } h3 { font-weight: bold; diff --git a/app/controllers/admin/comments_controller.rb b/app/controllers/admin/comments_controller.rb index 3a9c360f5..a0272f367 100644 --- a/app/controllers/admin/comments_controller.rb +++ b/app/controllers/admin/comments_controller.rb @@ -14,6 +14,7 @@ class Admin::CommentsController < Admin::BaseController def restore @comment.restore + @comment.ignore_flag Activity.log(current_user, :restore, @comment) redirect_to request.query_parameters.merge(action: :index) end diff --git a/app/controllers/admin/debates_controller.rb b/app/controllers/admin/debates_controller.rb index 41e5af848..2bb0cb8fd 100644 --- a/app/controllers/admin/debates_controller.rb +++ b/app/controllers/admin/debates_controller.rb @@ -14,6 +14,7 @@ class Admin::DebatesController < Admin::BaseController def restore @debate.restore + @debate.ignore_flag Activity.log(current_user, :restore, @debate) redirect_to request.query_parameters.merge(action: :index) end diff --git a/app/controllers/admin/proposals_controller.rb b/app/controllers/admin/proposals_controller.rb index 57e8809e2..e7c4934fa 100644 --- a/app/controllers/admin/proposals_controller.rb +++ b/app/controllers/admin/proposals_controller.rb @@ -14,6 +14,7 @@ class Admin::ProposalsController < Admin::BaseController def restore @proposal.restore + @proposal.ignore_flag Activity.log(current_user, :restore, @proposal) redirect_to request.query_parameters.merge(action: :index) end diff --git a/app/mailers/mailer.rb b/app/mailers/mailer.rb index 844f61a87..8ce28060c 100644 --- a/app/mailers/mailer.rb +++ b/app/mailers/mailer.rb @@ -5,7 +5,7 @@ class Mailer < ApplicationMailer def comment(comment) @comment = comment @commentable = comment.commentable - mail(to: @commentable.author.email, subject: t('mailers.comment.subject', commentable: t("activerecord.models.#{@commentable.class.name.downcase}").downcase)) if @commentable.present? && @commentable.author.present? + mail(to: @commentable.author.email, subject: t('mailers.comment.subject', commentable: t("activerecord.models.#{@commentable.class.name.downcase}", count: 1).downcase)) if @commentable.present? && @commentable.author.present? end def reply(reply) diff --git a/app/views/admin/dashboard/index.html.erb b/app/views/admin/dashboard/index.html.erb index 70f8f435b..da64cba15 100644 --- a/app/views/admin/dashboard/index.html.erb +++ b/app/views/admin/dashboard/index.html.erb @@ -4,22 +4,44 @@

Desde aquí puedes administrar el sistema, a través de las siguientes acciones:

Temas de debate

-

Los temas (también llamadas tags, o etiquetas) de debate son palabras que definen los usuarios al crear debates, para catalogarlos (ej: sanidad, movilidad, arganzuela, ...). Aquí se pueden eliminar temas inapropiados, o marcarlos para ser propuestos al crear debates (cada usuario puede definir los que quiera, pero se le sugieren algunos que nos parecen útiles como catalogación por defecto; aquí se puede cambiar cuáles se sugieren)

+

Los temas (también llamadas tags, o etiquetas) de debate son palabras que definen los usuarios al crear debates, para catalogarlos (ej: sanidad, movilidad, arganzuela, ...). Aquí se pueden eliminar temas inapropiados, o marcarlos para ser propuestos al crear debates (cada usuario puede definir los que quiera, pero se le sugieren algunos que nos parecen útiles como catalogación por defecto; aquí se puede cambiar cuáles se sugieren)

-

Debates ocultos

-

Cuando un moderador o un administrador oculta un debate aparecerá en esta lista. De esta forma los administradores pueden revisar que se ha ocultado el debate adecuado. Al pulsar "Confirmar" se acepta el que se haya ocultado, se considera que se ha hecho correctamente. Al pulsar "Volver a mostrar" se revierte la acción de ocultar y vuelve a ser un debate visible, en el caso de que se considere que ha sido una acción errónea el haberlo ocultado. Para facilitar la gestión, arriba encontramos un filtro con las secciones "pendientes" (los debates sobre los que todavía no se ha pulsado "confirmar" o "volver a mostrar", que deberían ser revisados todavía), "confirmados" y "todos". Es recomendable revisar regularmente la sección "pendientes".

+

Propuestas/Debates/Comentarios ocultos

+

Cuando un moderador o un administrador oculta una Propuesta/Debate/Comentario aparecerá en esta lista. De esta forma los administradores pueden revisar que se ha ocultado el elemento adecuado.

-

Comentarios ocultos

-

Cuando un moderador o un administrador oculta un comentario aparecerá en esta lista. De esta forma los administradores pueden revisar que se ha ocultado el comentario adecuado. Al pulsar "Confirmar" se acepta el que se haya ocultado, se considera que se ha hecho correctamente. Al pulsar "Volver a mostrar" se revierte la acción de ocultar y vuelve a ser un comentario visible, en el caso de que se considere que ha sido una acción errónea el haberlo ocultado. Para facilitar la gestión, arriba encontramos un filtro con las secciones "pendientes" (los comentarios sobre los que todavía no se ha pulsado "confirmar" o "volver a mostrar", que deberían ser revisados todavía), "confirmados" y "todos". Es recomendable revisar regularmente la sección "pendientes".

+ + +

Para facilitar la gestión, arriba encontramos un filtro con las secciones: "pendientes" (los elementos sobre los que todavía no se ha pulsado "confirmar" o "volver a mostrar", que deberían ser revisados todavía), "confirmados" y "todos".

+ +

Es recomendable revisar regularmente la sección "pendientes".

Usuarios bloqueados

-

Cuando un moderador o un administrador bloquea a un usuario aparecerá en esta lista. Al bloquear a un usuario, éste deja de poder utilizarlo para ninguna acción de la web. Los administradores pueden desbloquearlos pulsando el botón al lado del nombre del usuario en la lista.

+

Cuando un moderador o un administrador bloquea a un usuario aparecerá en esta lista. Al bloquear a un usuario, éste deja de poder utilizarlo para ninguna acción de la web. Los administradores pueden desbloquearlos pulsando el botón al lado del nombre del usuario en la lista.

Organizaciones

-

En la web hay dos tipos de usuarios: individuales y organizaciones. Cualquier persona puede crear usuarios de un tipo o de otro en la propia web. Los usuarios de organizaciones pueden ser verificados por parte de los administradores, confirmando que quien gestiona el usuario efectivamente representa a esa organización. Una vez se haya realizado el proceso de verificación, por el proceso externo a la web que se haya definido para ello, se pulsa el botón "verificar" para confimarlo; lo que hará que al lado del nombre de la organización aparezca una etiqueta señalando que es una organización verificada. En caso de que el proceso de verificación haya sido negativo, se pulsa el botón "rechazar". Para editar alguno de los datos de la organización, se pulsa el botón "editar". Las organizaciones que no aparecen en la lista pueden ser encontradas para actuar sobre ellas por medio del buscador en la parte superior. Para facilitar la gestión, arriba encontramos un filtro con las secciones "pendientes" (las organizaciones que todavía no han sido verificadas o rechazadas), "verificadas", "rechazadas" y "todas". Es recomendable revisar regularmente la sección "pendientes".

+

En la web hay dos tipos de usuarios: individuales y organizaciones. Cualquier persona puede crear usuarios de un tipo o de otro en la propia web. Los usuarios de organizaciones pueden ser verificados por parte de los administradores, confirmando que quien gestiona el usuario efectivamente representa a esa organización. Una vez se haya realizado el proceso de verificación, por el proceso externo a la web que se haya definido para ello, se pulsa el botón "Verificar" para confimarlo; lo que hará que al lado del nombre de la organización aparezca una etiqueta señalando que es una organización verificada.

+ +

En caso de que el proceso de verificación haya sido negativo, se pulsa el botón "Rechazar". Para editar alguno de los datos de la organización, se pulsa el botón "Editar".

+ +

Las organizaciones que no aparecen en la lista pueden ser encontradas para actuar sobre ellas por medio del buscador en la parte superior. Para facilitar la gestión, arriba + encontramos un filtro con las secciones: "pendientes" (las organizaciones que todavía no han sido verificadas o rechazadas), "verificadas", "rechazadas" y "todas".

+

Es recomendable revisar regularmente la sección "pendientes".

Cargos Públicos

-

En la web, los usuarios individuales pueden ser usuarios normales, o cargos públicos. Estos últimos se diferencian de los primeros únicamente en que al lado de sus nombres aparece una etiqueta que les identifica, y cambia ligeramente el estilo de sus comentarios. Esto permite que los usuarios les identifiquen más fácilmente. Al lado de cada usuario vemos la identificación que aparece en su etiqueta, y su nivel (la manera que internamente usa la web para diferenciar entre un tipo de cargos y otros). Pulsando el botón "editar" al lado del usuario, se puede modificar su información. Los cargos públicos que no aparecen en la lista pueden ser encontrados para actuar sobre ellos por medio del buscador en la parte superior.

+

En la web, los usuarios individuales pueden ser usuarios normales, o cargos públicos. Estos últimos se diferencian de los primeros únicamente en que al lado de sus nombres aparece una etiqueta que les identifica, y cambia ligeramente el estilo de sus comentarios. Esto permite que los usuarios les identifiquen más fácilmente. Al lado de cada usuario vemos la identificación que aparece en su etiqueta, y su nivel (la manera que internamente usa la web para diferenciar entre un tipo de cargos y otros). Pulsando el botón "Editar" al lado del usuario, se puede modificar su información. Los cargos públicos que no aparecen en la lista pueden ser encontrados para actuar sobre ellos por medio del buscador en la parte superior.

+ +

Moderadores

+ +

Mediante el buscador de la parte superior se pueden buscar usuarios, para activarlos o desactivarlos como moderadores de la web. Los moderadores al acceder a la web con su usuario ven en la parte + superior una nueva sección llamada "Moderar"

+ +

Actividad de moderadores

+ +

En esta sección se va guardando todas las acciones que realizan los moderadores o los administradores respecto a la moderación: ocultar/mostrar Propuestas/Debates/Comentarios y bloquear usuarios. En la columna "Acción" comprobamos si la acción corresponde con ocultar o con volver a mostrar (restaurar) elementos o con bloquear usuarios. En las demás columnas tenemos el tipo de elemento, el contenido del elemento y el moderador o administrador que ha realizado la acción. Esta sección permite que los administradores detecten comportamientos irregulares por parte de moderadores específicos y que por lo tanto puedan corregirlos.

Configuración Global

Opciones generales de configuración del sistema.

@@ -27,4 +49,3 @@

Estadísticas

Estadísticas generales del sistema.

- diff --git a/app/views/moderation/dashboard/index.html.erb b/app/views/moderation/dashboard/index.html.erb index 6b3aaadf6..abb3bb905 100644 --- a/app/views/moderation/dashboard/index.html.erb +++ b/app/views/moderation/dashboard/index.html.erb @@ -1,11 +1,33 @@

<%= t("moderation.dashboard.index.title") %>

-

Desde aquí puedes moderar el sistema, a través de las siguientes acciones:

+

Desde aquí puedes moderar el sistema, a través de las siguientes acciones:

-

Debates

-

Cuando un usuario marca en un debate la opción de "denunciar como inapropiado", aparecerá en esta lista. Respecto a cada uno aparecerá el título, fecha y el texto del debate. A la derecha aparece el número de denuncias (cuántos usuarios diferentes han marcado la opción de denuncia), y las posibles acciones para el moderador: "Ocultar" (lo que hará que ese debate deje de mostrarse para los demás usuarios) e "Ignorar" (que implica que el moderador considera que no debe ser ocultado). Para facilitar la gestión, arriba encontramos un filtro con las secciones "pendientes" (los debates sobre los que todavía no se ha pulsado "ocultar" o "ignorar", que deberían ser revisados todavía), "ignorados" y "todos". Es recomendable revisar regularmente la sección "pendientes".

+

Propuestas / Debates / Comentarios

+ +

Cuando un usuario marca en una Propuesta/Debate/Comentario la opción de "denunciar como inapropiado", aparecerá en esta lista. Respecto a cada uno aparecerá el título, fecha, número de denuncias (cuántos usuarios diferentes han marcado la opción de denuncia) y el texto de la Propuesta/Debate/Comentario.

+ +

A la derecha de cada elemento aparece una caja que podemos marcar para seleccionar todos los que queramos de la lista. Una vez seleccionados uno o varios, encontramos al final de la página tres botones para realizar acciones sobre ellos:

+ + + +

Para facilitar la gestión, arriba encontramos un filtro con las secciones:

+ + + +

Es recomendable revisar regularmente la sección "pendientes".

+ +

Bloquear usuarios

+ +

Un buscador nos permite encontrar cualquier usuario introduciendo su nombre de usuario o correo electrónico, y bloquearlo una vez encontrado. Al bloquearlo, el usuario no podrá volver a + acceder a la web, y todas sus Propuestas/Debates/Comentarios serán ocultados y dejarán de ser visibles en la web.

-

Comentarios

-

Cuando un usuario marca en un comentario la opción de "denunciar como inapropiado", aparecerá en esta lista. Respecto a cada uno aparecerá el debate al que pertenece, la fecha y el texto del comentario. A la derecha aparece el número de denuncias (cuántos usuarios diferentes han marcado la opción de denuncia), y las posibles acciones para el moderador: "Ocultar" (lo que hará que ese comentario deje de mostrarse para los demás usuarios) e "Ignorar" (que implica que el moderador considera que no debe ser ocultado). Para facilitar la gestión, arriba encontramos un filtro con las secciones "pendientes" (los comentarios sobre los que todavía no se ha pulsado "ocultar" o "ignorar", que deberían ser revisados todavía), "ignorados" y "todos". Es recomendable revisar regularmente la sección "pendientes".

diff --git a/config/locales/verification.es.yml b/config/locales/verification.es.yml index b8d84fda2..776a44001 100644 --- a/config/locales/verification.es.yml +++ b/config/locales/verification.es.yml @@ -21,7 +21,7 @@ es: terms: "los términos de acceso" verify_residence: "Verificar residencia" form_errors: "evitaron verificar tu residencia" - error_verifying_census: "El Padrón de Madrid no pudo verificar tu información. Revisa la información ó ponte en contacto con nosotros." + error_verifying_census: "El Padrón de Madrid no pudo verificar tu información. Por favor, confirma que tus datos de empadronamiento sean correctos llamando al 010 o ponte en contacto con nosotros." error_not_allowed_age: "Hay que tener al menos 16 años" error_not_allowed_postal_code: "Para verificarte debes estar empadronado en el municipio de Madrid." create: diff --git a/db/migrate/20150926115929_adds_resilient_locked_until_default.rb b/db/migrate/20150926115929_adds_resilient_locked_until_default.rb new file mode 100644 index 000000000..8043110cd --- /dev/null +++ b/db/migrate/20150926115929_adds_resilient_locked_until_default.rb @@ -0,0 +1,11 @@ +class AddsResilientLockedUntilDefault < ActiveRecord::Migration + + def up + change_column_default :locks, :locked_until, Time.new(2000, 1, 1, 1, 1, 1) + end + + def down + change_column_default :locks, :locked_until, Time.now + end + +end diff --git a/db/schema.rb b/db/schema.rb index c5b57096b..2533697ac 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20150924112929) do +ActiveRecord::Schema.define(version: 20150926115929) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -181,7 +181,7 @@ ActiveRecord::Schema.define(version: 20150924112929) do create_table "locks", force: :cascade do |t| t.integer "user_id" t.integer "tries", default: 0 - t.datetime "locked_until", default: '2015-09-10 13:46:11', null: false + t.datetime "locked_until", default: '2000-01-01 00:01:01', null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false end diff --git a/spec/features/admin/comments_spec.rb b/spec/features/admin/comments_spec.rb index ffb8122d2..d6369272a 100644 --- a/spec/features/admin/comments_spec.rb +++ b/spec/features/admin/comments_spec.rb @@ -35,6 +35,7 @@ feature 'Admin comments' do expect(page).to_not have_content(comment.body) expect(comment.reload).to_not be_hidden + expect(comment).to be_ignored_flag end scenario "Confirm hide" do diff --git a/spec/features/admin/debates_spec.rb b/spec/features/admin/debates_spec.rb index bccd3429c..f529b4a8f 100644 --- a/spec/features/admin/debates_spec.rb +++ b/spec/features/admin/debates_spec.rb @@ -16,6 +16,7 @@ feature 'Admin debates' do expect(page).to_not have_content(debate.title) expect(debate.reload).to_not be_hidden + expect(debate).to be_ignored_flag end scenario 'Confirm hide' do diff --git a/spec/features/admin/proposals_spec.rb b/spec/features/admin/proposals_spec.rb index a2ac86de7..be859c3e6 100644 --- a/spec/features/admin/proposals_spec.rb +++ b/spec/features/admin/proposals_spec.rb @@ -28,6 +28,7 @@ feature 'Admin proposals' do expect(page).to_not have_content(proposal.title) expect(proposal.reload).to_not be_hidden + expect(proposal).to be_ignored_flag end scenario 'Confirm hide' do