Git Product home page Git Product logo

consuldemocracy / consuldemocracy Goto Github PK

View Code? Open in Web Editor NEW
1.4K 76.0 1.1K 105.27 MB

Consul Democracy - Open Government and E-Participation Web Software

Home Page: https://consuldemocracy.org

License: GNU Affero General Public License v3.0

Ruby 75.21% JavaScript 1.97% CSS 0.04% HTML 15.50% Shell 0.02% Dockerfile 0.04% SCSS 5.91% Python 1.32%
ruby agplv3 e-government democracy rails open-government hacktoberfest consuldemocracy

consuldemocracy's Introduction

CONSUL DEMOCRACY logo

CONSUL DEMOCRACY

Citizen Participation and Open Government Application

License: AGPL v3 Accessibility conformance

Build status Code Climate Coverage Status Crowdin Knapsack Pro Parallel CI builds for RSpec tests

Help wanted

This is the opensource code repository of the eParticipation website CONSUL DEMOCRACY, originally developed for the Madrid City government eParticipation website, and currently maintained by the open source software community in collaboration with the CONSUL DEMOCRACY Foundation.

Documentation

Check the ongoing documentation to learn more about how to start your own CONSUL DEMOCRACY fork, install it, customize it and learn to use it as an administrator/maintainer.

CONSUL DEMOCRACY Foundation and project website

You can access the main website of the project at http://consuldemocracy.org where you can find information about the use of the platform, the CONSUL DEMOCRACY Foundation, the global community of users and local partners, news, and ways to get more support or get in touch.

Configuration for development and test environments

NOTE: For more detailed instructions check the docs

Prerequisites: install git, Ruby 3.2.3, CMake, pkg-config, shared-mime-info, Node.js 18.18.2 and PostgreSQL (>=9.5).

git clone https://github.com/consuldemocracy/consuldemocracy.git
cd consuldemocracy
bin/setup
bin/rake db:dev_seed

Run the app locally:

bin/rails s

Run the tests with:

bin/rspec

You can use the default admin user from the seeds file:

user: [email protected] pass: 12345678

But for some actions like voting, you will need a verified user, the seeds file also includes one:

user: [email protected] pass: 12345678

Configuration for production environments

See installer

Current state

Development started on 2015 July 15th. Code was deployed to production on 2015 september 7th to decide.madrid.es. Since then new features are added often. You can take a look at the current features at the project's website and future features at the Roadmap and open issues list.

License

Code published under AFFERO GPL v3 (see LICENSE-AGPLv3.txt)

Contributions

See CONTRIBUTING.md

consuldemocracy's People

Contributors

abelardogilm avatar agileontheweb avatar aitbw avatar amaia avatar amiedes avatar ana06 avatar bertocq avatar decabeza avatar dependabot-preview[bot] avatar dependabot-support avatar dependabot[bot] avatar depfu[bot] avatar dgilperez avatar entantoencuanto avatar javierm avatar jsperezg avatar juandefelix avatar kikito avatar lumaray avatar mariacheca avatar martgnz avatar matisnape avatar microweb10 avatar mlovic avatar nahiasolutions avatar raul-fuentes avatar senen avatar taitus avatar voodoorai2000 avatar xuanxu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

consuldemocracy's Issues

Analytics

Hace falta que metamos algún sistema para hacer "lo que hace google analytics pero sin hacer google analytics".

El objetivo es poder tener métricas tipo: dónde entra la gente y dónde no, cuántos accesos por móvil hay, etc. Para poder hacer tests tipo "hemos perdido usuarios con este cambio"

Opciones:

  • Lo que tenga el IAM (si tiene algo)
  • Algo open-source (yo he usado piwik )
  • Montar algo nosotros desde cero (poco probable que podamos llegar al nivel de piwik o similiares a no ser que ya haya algo para rails hecho)

Idealmente hay que dejar la puerta abierta para que el resto de organismos que lo utilicen puedan usar otra cosa (como google analytics)

Emails

  • Bienvenido (registro)
  • Cambio de contraseña
  • Comentario en tu debate
  • Respuesta a tu comentario

I18n

Hay que meter internacionalización y a partir de entonces no incluir más textos sin i18n en el interfaz

Highlights

Básicamente un highlight es un "Banner" que aparece en algunas views. Lo configura el administrador.

Un highlight pueden ser varias cosas:

  • Una Iniciativa (Aparece su foto si la tiene, texto y si haces click en ella te lleva a la iniciativa)
  • Un enlace externo con un link (por ejemplo a una noticia relacionada con la democracia participativa)

Sugerencia: hacer que siempre sea un combinado link+texto+imagen, y luego permitir a los administradores "crear destacado de esta iniciativa" y que les rellene el texto (así lo pueden cambiar)

Las votaciones no redirigen a hacer login a usuarios anóminos

Pasos para reproducir:

  • Hacer logout
  • Ir a un debate mediante su url (eg /debate/1)
  • Intentar votar

Qué ocurre:
Da un error javascript - unauthorized

Qué debería ocurrir:
Cuando un usuario intenta votar sin abrir una sesión la aplicación le debería mostrar el diálogo de login. No deberían producirse errores de javascript.

Sugerencia: si el usuario no está identificado, los links a votar deberían ser links a identificarse (manteniendo como referer la url actual)

La sanitización de la descripción de los debates escapa html

El atributo debate.description es html. En las vistas hay que acordarse de hacer html_safe. Al hacer un cambio de estilo se ha perdido el html_safe y el html se ha perdido.

Sugerencias:

  • hacer que debate.description devuelva html_safe
  • añadir un test que no solamente chequee la sanitización, sino también que el html no se escapa

Eliminar gemas innecesarias

Jbuilder no parece estar siendo usado, de modo que mejor eliminarlo para evitar tener que mantenerlo.

En la misma línea, nadie parece estar usando sdoc, especialmente porque genera la documentación en /doc, pero el directorio no está en el .gitignore. De ser así el caso, mejor eliminarlo también, pudiendo dejar abierta la alternativa a otras herramientas de documentación si se quisiera.

Mostrar siempre el porcentaje de votos

En el caso de que en un debate no haya votos, se debería mostrar "0% 0% 0 votos", ahora los números sólo se muestran cuando un debate tiene algún voto.

Borrar usuarios

Desde "mi cuenta" debería poder borrar mi cuenta.
El usuario debería dar opcionalmente una razón para borrar su cuenta.
En los debates y comentarios de un usuario borrado, en lugar de su nombre, debería aparecer el texto "usuario eliminado"

Wireframes:

Mi cuenta
delete account 1

Confirmación
delete account 2

Comentario de usuario borrado
user deleted

Sugerencias:
Crear una acción destroy para el controlador account, que utilice la gema Paranoia para marcar al usuario como borrado. Utilizar páginas completas en lugar de lightboxes. Utilizar un helper majo para mostrar que el usuario ha sido eliminado en los debates y comentarios.

Para cumplir la LOPD, aunque no borremos la instancia del usuario, debemos borrar todos los datos del usuario, que de momento son nombre, apellidos, email y nickname.

Los administradores también deberían poder borrar usuarios desde su dashboard.

Añadir HomeController

Necesitamos un controlador y vista distinto de Debates#index para la acción "root" de los ciudadanos normales. La Home presentará la información de una forma distinta a Debates#index.

Notificación de "nuevos comentarios en este debate"

Una feature bastante usual es que cuando hay "cambios" (en nuestro caso, nuevos comentarios) desde la última vez que se abrió un debate, éste se "distinga visualmente" en el listado de debates de alguna manera.

Depende un poco de cómo de "forero" quieren que sea la herramienta.

@decabeza: ¿qué opinas?

Pseudónimo para usuarios

Es deseable que los usuarios puedan participar de forma anónima en algunos procesos de la página.

  • Además de los campos de nombre y apellidos, necesitamos un campo "pseudónimo" (o nickname)
  • También necesitamos un flag de "usar pseudónimo en lugar de nombre y apellidos". Si está activado, y el pseudónimo está relleno, se utilizará en lugar del nombre y los apellidos.
  • El usuario debe ser capaz de cambiar de "usar nombre real" a "usar pseudónimo" y viceversa editando su perfil, además de cuando se da de alta en la aplicación.
  • La validación de un usuario pasa a ser: con el flag desactivado, nombre y apellidos son obligatorios. Con el flag activado, el pseudónimo es obligatorio (pero no nombres y apellidos).
  • Nótese que el nombre y los apellidos tendrán un papel importante a la hora de aumentar el nivel de seguridad de un usuario, incluso si éste actúa bajo un pseudónimo. No se debe "desactivar la opción de introducir nombre y apellidos" si se activa el flag de pseudónimo.

Asociaciones

Deberá ser posible introducir asociaciones en la aplicación.

Las asociaciones son un tipo de usuario que únicamente puede comentar y proponer iniciativas, pero no apoyar iniciativas ni comentarios.

Las asociaciones tienen su propio formulario de alta (accesible desde el formulario de alta por defecto mediante un enlace). Solamente requieren el nombre de la asociación, un email de contacto y un teléfono.

Las asociaciones no se dan de alta inmediatamente, sino que deben ser aprobadas por un administrador.

Los administradores necesitan una página de administración para aprobar/rechazar este tipo de usuario. Cuando se apruebe una petición de creación de un usuario de tipo Asociación, se le debe enviar un email de confirmación.

Si el administrador rechaza la petición de la asociación, se les deberá enviar un email informando del rechazo.

Sugerencias: Podemos utilizar dos campos booleanos en la tabla de usuarios, is_organization y organization_verifed_at

Mostrar mensajes de error en formularios de forma consistente

Actualmente estamos utilizando devise_error_messages! en los formularios de devise, y otras cosas, o nada (ej. formulario de account/show) en los demás.

Tenemos que dar una solución coherente a esto, y usar lo mismo en todos sitios.

Sugerencia: crear un helper que pinte un mensaje genérico de que ha habido errores de validación y pintar divs debajo del los inputs con errores.

Autorización para editar debates

Un debate solo puede ser editado por el autor y únicamente si todavía no ha sido votado por nadie.
La idea es impedir que cuando el debate ya haya conseguido apoyos, el autor no pueda modificar el texto inicial.

Añadir Pry al Gemfile

Pry es una conocida herramienta de debugging que complementa a byebug y puede sustituir a irb. Con ella puedes hacer cd en objectos, edit sus métodos, play líneas individuales, y todo esto mientras el código se ejecuta.

Personalmente es una herramienta indispensable, profesionalmente lo recomiendo siempre a todo aquel que no lo haya probado. Sería genial poder tenerlo entre las herramientas de desarrollo en este repositorio.

Conectarse con Ciudadano360 para hacer login de usuarios

Primer email mandado al responsable de Ciudadano360

Buenas,
[...]
Uno de los retos a los que nos enfrentamos es: queremos que el login entre las dos webs sea lo más transparente posible; que cuando alguien tenga una cuenta en la página de democracia participativa pueda entrar con sus datos de Ciudadano 360, y viceversa.

Esto es un primer email para ir abriendo el camino y barajando opciones. Te explico cómo lo veo yo:

Para hacer la primera parte, necesitaríamos un endpoint de Ciudadano360 al que poder decir "este usuario y passwords (o esta cuenta de Google o Facebook), son correctos? Si sí, qué nivel de seguridad tienen?". Con una respuesta positiva, podríamos crear una cuenta en la web y marcarla como "autenticada".

Para hacer la segunda parte (el "viceversa") necesitaríamos que la web de participación ciudadana pudiera crear usuarios en Ciudadano360. Haría falta un endpoint tipo "Crea este usuario nuevo con este login+password/facebook/google").

No tienen por qué ser dos endpoints distintos: podría ser uno único en plan "crea o valida este usuario en Ciudadano360, y devuélveme su nivel".

Como es una petición muy concreta me imagino que no tendréis algo así ya hecho. De todas formas esto es la idea que yo tengo, sin saber cómo funciona Ciudadano360. A lo mejor hay alguna otra cosa que ya tengáis que podamos utilizar (por ejemplo, si Ciudadano360 ya tiene un servicio existente de importación/exportación de usuarios)

[...]

Formulario de comentar siempre visible

Para usuarios logueados, siempre visible:

  • Formulario para dejar un comentario dentro de un debate.
  • Botón de "Deja un comentario".

Para usuarios no logueados:

  • Formulario para dejar un comentario dentro de un debate: oculto.
  • Botón de "Deja un comentario" sustituirlo por un texto tipo: "Debes entrar en tu cuenta para comentar este debate"

Añadir capistrano

Necesitamos preparar un script básico para empezar las pruebas de despliegue a los entornos de staging y preproducción.

Actualizar readme

Actualizar el readme del proyecto indicando de que va, en vez de usar el generico de Ruby

Usuarios con cargos públicos

Un cargo público no tiene ningún permiso adicional ni ninguna restricción comparado con los de cualquier otro ciudadano: podrán hacer propuestas, comentar, apoyar iniciativas, etc.

La única diferencia será visual: deberá ser evidente para el resto de los ciudadanos que se trata de cargos públicos.

En la parte de la administración de la página, los administradores deberán poder añadir, editar, y borrar usuarios con cargos públicos. Hay que añadir a la tabla usuarios un campo 'official_position' que representa el cargo de este usuario. Además se definirán 5 niveles de tipo de usuario cargo público.

Hace falta poder administrar también qué nombre poner a esos cinco niveles. En nuestra aplicación inicialmente serán:
"Alcaldes", "Concejales", "Directores generales", "Funcionariado", "Organización Municipal".

Añadir clase CSS al votar

Ahora, los botones de apoyar (like/unlike) aparecen siempre de color gris, hay que añadirle una clase CSS (.active-vote, .voted, active..) para poner en color verde o rojo aquellas que ya ha votado el usuario.

Página de notificaciones

¿Queremos que la gente sepa que les han respondido a un comentario de forma visual? Y de ser así, ¿cómo lo mostramos? Ejemplos: Con un "inbox arriba", tipo facebook ("5 respuestas a tus comentarios", pulsa aquí para desplegar y verlos), o con un numerito en cada debate ("2 respuestas en este debate").

@decabeza, te invoco.

Dockerización

Dado que configurar ruby + rails es complicado, y requiere modificaciones significativas en el entorno de desarrollo. Es deseable utilizar un entorno de virtualización que:

  • Sea lo más parecido posible al entorno de producción
  • Instale todas las dependencias y configuraciones necesarias para el desarrollo en una máquina virtual
  • Permita ejecutar una versión de desarrollo de la aplicación
  • Permita ejecutar los tests de la aplicación

Aunque Vagrant permite realizar esta tarea, hemos decidido utilizar Docker (ver #69)

En estos momentos el entorno de producción que se está barajando es RHEL+Apache+Passenger con una base de datos PostgreSQL. Se recomienda utilizar CentOS como imagen base en Docker, ya que RHEL es problemático en este sentido por temas de licencia y disponibilidad.

Tipos de usuarios en comentarios

Mostrar tipo de usuario en los comentarios. (¿Mostrar también en la zona de perfil de usuario?)

Tipos:

  • Ciudadano
  • Asociación #99
  • Cargo público #100
  • Creador del debate
  • Usuario eliminado #103

type of user in comments

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.