Giter Site home page Giter Site logo

pytition / pytition Goto Github PK

View Code? Open in Web Editor NEW
96.0 11.0 26.0 5.05 MB

Django app for self-hosted privacy-friendly online petitions

Home Page: https://pytition.org

License: BSD 3-Clause "New" or "Revised" License

Python 72.49% JavaScript 1.63% CSS 0.92% HTML 22.78% Shell 0.97% Dockerfile 0.10% SCSS 1.12%
petition django politics privacy-online privacy-aware python signatories

pytition's Introduction

Build Status Coverage status Documentation Status

Pytition

Why using Pytition?

  • Because it allows you to host petitions without compromising the privacy of your signatories.
  • No tracking, ever: CSS, JS and all resources are self-hosted. Pytition does not use CDN.
  • Nice UI: Bootstrap 4 + JQuery 3.
  • Based on solid backend technology: Django.
  • Responsive UI: works well on phones/tablets/laptops/desktops.
  • If you host an instance of Pytition, you can guarantee your signatories that their informations won't leak to third parties.
  • It is Open Source and Free Software.

Features

  • Multi-lingual UI with i18n: English, French, Italian, Occitan, Spanish.
  • You can pre-visualize petitions before publishing them.
  • Easy to use: petition content is typed-in via TinyMCE editors (like WordPress).
  • You can setup real SMTP account for the confirmation e-mail so that it is less likely considered as SPAM.
  • Supports Open Graph tags to provide description and image to allow nice cards to be shown when people post the petition link on social networks.
  • You can propose your signatories to subscribe to a newsletter/mailinglist (via HTTP GET/POST or EMAIL methods).
  • You can export signatures in CSV format.
  • Support for several organizations on the same Pytition instance v2.0
    • Fine grain per-user per-organization permissions
  • Email retry support through the use of a mail queue middleware
  • Nice (multiple) permlink support for each petition
  • Optional share buttons

Future features

  • Support for multi-lingual petition content: v3.0
  • Support for adding several petition templates: v4.0
  • Add optional Diaspora share icon

Install development environment

See dev/CONTRIBUTE.md

Documentation (Installing in production, configuration, update etc)

See https://pytition.readthedocs.io

Included dependencies

Those are external projects that are needed and used by Pytition, but included in Pytition source tree:

  • Bootstrap 4.2.1
  • JQuery 3.3.1
  • Popper 1.14.6
  • Open Iconic 1.1.1
  • TinyMCE 4.9.2
  • jQuery Smart Wizard 4

Dependencies

  • Python 3.8 up to 3.11
  • Django 4.2.x
  • django-tinymce 3.5.0
  • django-colorfield 0.8.0
  • requests 2.20.x
  • mysqlclient 2.0.1
  • beautifulsoup4 4.6.3
  • django-formtools 2.2
  • bcrypt

Translations

Language Translation %
English État de la traduction
French État de la traduction
Italian État de la traduction
Occitan État de la traduction
Spanish État de la traduction

pytition's People

Contributors

angristan avatar antoine-de avatar bbmt-bbmt avatar benbb96 avatar boffire avatar crackmag avatar dokthar avatar dostoi avatar elegaanz avatar fallen avatar framabot avatar goofy-mdn avatar htgoebel avatar italovignoli avatar jmontane avatar lpoujade avatar martinlehoux avatar nils-van-zuijlen avatar numahell avatar plapa avatar pnu-s avatar quenty31 avatar rsk2 avatar spiderweak avatar tcitworld avatar te-k avatar thimy avatar toshihidetagami avatar vinishor avatar xebax 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pytition's Issues

Pouvoir changer le nom de l'orga dans le texte sur les données personnelles

Actuellement il est géré globalement ce qui donne ça :
"Vos données resteront strictement confidentielles et ne seront ni vendues ni échangées. Des informations sur cette campagne ainsi que d’autres actualités sur RAP vous seront envoyées si vous avez coché la case. Vous pouvez vous désinscrire à tout moment."

Sur la pétition pour la campagne stop pub vidéo alors qu'il faudrait pouvoir dire "d’autres actualités sur la campagne Stop Pub Vidéo vous"

Texte de demande de confirmation dépasse du cadre

La fin de phrase de demande de confirmation de la signature atterris en dessous du cadre de droite sur ma configuration. (il manque la fin du mot signature)
Sur un écran de 1366*768 avec firefox 58.0.1 sous debian.

capture du 2018-02-08 14-03-56

Ajouter un lien vers le dépôt en pied de page

Ça pourrait être bien d'ajouter par défaut un lien vers le dépôt en pied de page pour montrer que c'est un logiciel libre. D'autres gens pourraient peut-être aider ou l'héberger aussi comme ça

logo design

Hello @fallen

I am designing logos to support open source software. Do you want me to design a logo for you? I think this warehouse doesn't have a logo. I will wait for feedback. Have a nice day!

Pouvoir abonner à plusieurs newsletter

Ça serait pratique de pouvoir proposer de s'abonner à plusieurs newsletter, notamment pour les pétitions concernant une situation locale.
On pourrait comme ça par exemple proposer de s'abonner à la newsletter de R.A.P. Lille et du national en plus si les gens veulent.

Option pour renvoyer l'email de vérification

Pouvoir renvoyer l'email de vérification à ceux qui ne l'ont pas eu serait pratique.

Pouvoir le faire depuis la page d'édition de l'objet signature, depuis les actions groupées de la liste des signatures et avec un bouton global pour le faire à toutes les signatures non validées.

Class-based views

https://github.com/fallen/Pytition/blob/6ac19522df7faab4c9e8b45ef8bca4df3ea4c44e/pytition/petition/views.py#L23

Vu que la validation des données ne parait pas spécialement triviale en survolant le code, et aussi parce que ça semble la manière standard de faire ça depuis pas mal de versions de Django, je te conseillerai de basculer sur les class-based views, qui ont toutes les méthodes qu'il faut pour gérer toutes les étapes entre la requete initiale et la sauvegarde du modèle

https://docs.djangoproject.com/fr/1.11/topics/class-based-views/

T'as du coup juste besoin de surcharger qqes petites fonctions qui sont bien plus lisibles et debuggables ..

Implement a petition "quality" score algorithm

Implement a "score" to help organizations and people produce the best petition content possible.
That score should be able to give a mark to rate how well the petition is configured.
It should be able to give advice on how to improve the petition.
Ideas of points to check with this algorithm:

  • has non-empty title
  • non-empty text
  • "twitter image" (og:image) present (important for OpenGraph cards when posting to social networks)
  • OpenGraph description present
  • usage of TLS or STARTTLS for newsletter settings
  • not too low or too high number of signature target (so that progress bar looks nice)
  • Petition content contains links to (or images from) URL in HTTPS and not HTTP
  • other SEO/quality ideas?

Ajout d'un fonction de recherche pour les pétitions et les signatures

Ça pourrait être pratique d'avoir une fonction de recherche pour les pétitions (pour un site qui en héberge plein) mais surtout (dans l'immédiat) pour les signatures.

Certaines personnes nous font remonter des soucis avec leurs signatures et c'est compliqué de vérifier si elles ont bien été enregistré dans l'état.

Faire descendre le texte et le compteur aussi

Quand on scroll vers le bas de page, le texte (ici "Signez la pétition !") et le compteur du nombre de signature ne descend pas avec le reste de la zone de droite mais disparaît.
Ça ne serait pas mieux de le garder en fixe aussi et de le faire descendre avec le reste ?

En haut de page :
capture du 2018-02-08 16-56-12

Et en descendant :
capture du 2018-02-08 16-56-16

Remove dependency to Pillow

Pillow might be necessary in the future to handle image uploads from users to insert them in TinyMCE editor.
But for now it is out of scope, there are too many things to do.
So for now I propose to remove the Petition model fields which need Pillow and to remove Pillow from requirements.txt

Allow a user to create an organization

Also think about the logic to allow someone to delete an organization.
Will this only be allowed when organization is almost empty and you are the only user left?
Do we implement the notion of "organization founder/owner"?
What happens when founder/owner drops his/her account or leave the organization?

Installation issues and dev environment

Hi,

Few problems during the installation :

  • mysql_client : you need to install additional libraries, on ubuntu/debian : sudo apt-get install python-dev default-libmysqlclient-dev (doc is there)
  • Pillow : I had some trouble installing Pillow==5.1.0 because it was compiling the package, I am not really sure which dependency was needed. But I installed the last Pillow version 5.4.1 that does not require any compilation, so I suggest to migrate to this one. (doc is there )

Regarding dev environment, the default database today is MySQL, I would suggest to have sqlite by default and to separate instructions for dev and prod installation in the README (maybe two separated readmes ?)

Pas de migrations ?!

Tu devrais avoir au moins une migration 0001_initial.py, t'as oublié de la pusher ?!

Avoir des stats sur les pétitions

Ça pourrait être bien de pouvoir voir des stats basiques sur les pétitions comme le nombre de signatures confirmées et le nombre de signatures non confirmées.

Ça pourrait être visible dans deux endroits :

  • la liste des pétitions en ajoutant des colonnes en plus du titre
  • le menu d'édition de la pétition (genre dans le haut).

Limite d'envoie de message atteint

En voulant renvoyer un message de confirmation pour les gens n'ayant pas confirmé leur signature (87 personnes sélectionnées), j'ai eu le message suivant :

SMTPDataError at /admin/petition/signature/

(554, b'5.7.0 Your message could not be sent. The limit on the number of allowed outgoing messages was exceeded. Try again later.')

Request Method: POST
Request URL: https://petition.antipub.org/admin/petition/signature/?petition__id__exact=5&confirmed__exact=0
Django Version: 1.11.10
Exception Type: SMTPDataError
Exception Value:

(554, b'5.7.0 Your message could not be sent. The limit on the number of allowed outgoing messages was exceeded. Try again later.')

Exception Location: /usr/lib/python3.5/smtplib.py in sendmail, line 883
Python Executable: /usr/bin/python3
Python Version: 3.5.3
Python Path:

['/home/petition/www/Pytition/pytition',
'/home/petition/pytition/lib/python35.zip',
'/home/petition/pytition/lib/python3.5',
'/home/petition/pytition/lib/python3.5/plat-x86_64-linux-gnu',
'/home/petition/pytition/lib/python3.5/lib-dynload',
'/usr/lib/python3.5',
'/usr/lib/python3.5/plat-x86_64-linux-gnu',
'/home/petition/pytition/lib/python3.5/site-packages']

Server time: sam, 10 Mar 2018 11:16:50 +0100

Je peux voir avec ouvaton pour augmenter la limite mais il faudrait trouver un moyen pour prendre ça en charge du côté du serveur de la pétition.
Pour ouvaton (je sais pas si c'est un comportement par défaut), les messages qui dépassent la limite sont mis en queue d'envoi pour être envoyé plus tard. Donc ce n'est pas "trop" problématique.

Create notion of organizations

For now all admin users can see all petitions.
I would like to add support for "organizations".
I see it this way:

  • You can create an organization
  • Handle organization deletion when no member
  • You can leave an organization
  • You can invite people to organization
  • You can create a user account.
  • You can attach one or more users to one or more organizations
  • Petitions can be attached to users or to organizations
  • If a petition is owned by an organization, all users attached to this organization can modify it (if they have correct permissions)
  • Implement permission system for add/modify/delete petitions within an organization

Create a page to display petition(s) data (signatories)

Create a page that shows data on a petition:

  • Number of confirmed signatures
  • Number of unconfirmed signatures
  • Table with First name / Last name / phone number / e-mail / confirmed / newsletter checkbox status / date of signature for all signatures
  • Buttons to export only-confirmed and all signatures to CSV and JSON

Add a new button in petition_list template, on the petition cards, to display those data.

Create a Dockerfile for developers

This should allow developers to quickly fire up a Docker container with all build and runtime dependencies as well as database setup.

re-synchronize user profile/dashboard pages

At least make those page work again.
URL should be like this:

  • /petition/user/[username]/dashboard <= this should show the currently logged-in used's dashboard (if username == currently logged in, else fail and bail out)
  • /petition/user/[username]/profile <= this should show username's profile page (which should be visibly by anybody, apart maybe with a future "private" switch

user dashboard:

user profile:

For user dashboard I would advice to take example from the current org dashboard.
For profile pages ... I think both user and org profile are in very draft/Work-In-Progress/mess situation.

Valider sa nouvelle signature supprime ses signatures validées des autres pétitions

Chaque personne ne peut avoir qu'une seule signature validée pour toutes les pétitions hébergées sur le même serveur.
Le fait de valider une nouvelle pétition va supprimer celle de l'ancienne.

Par exemple, je signe et valide une 1ere signature sur la pétition A.
Ensuite je signe la pétition B sans valider. Le logiciel va avoir 2 signatures m'appartenant, une validée, une non.
Lorsque je valide la signature de la pétition B, le logiciel supprime la signature de la pétition A et garde uniquement la signature de la pétition B.

Application-wide setting to chose index page content

Administrator of the Pytition instance should be able to chose whether the index page will be:

  • A list of all last petitions (regardless of organization or user creating it)
  • A list of last petitions from a particular organization
  • A list of last petitions from a particular user
  • The profile page of some organization
  • The profile page of some user
  • A Login/Register page?
  • other ideas?

Découpage des tâches entre models/views/forms

https://github.com/fallen/Pytition/blob/6ac19522df7faab4c9e8b45ef8bca4df3ea4c44e/pytition/petition/views.py#L35

Je mets cette ligne un peu au pif mais dans l'ensemble tu fais un peu tout au même endroit et ça complexifie bcp les choses (tout en compliquant aussi le debug ...)

Il y a :

  • des trucs qui relèvent de la validation du modèle (genre le début de la fonction "confirm"), qui devraient plutot être dans une surcharge des fonctions "save" ou "clean" de ton modele "Signature"
  • des trucs qui relèvent de la validation du formulaire (qui devrait d'ailleurs plutot être un objet Django que du HTML écrit à la main)
  • le calcul de la page de redirection (là aussi avec les class based views c'est vachement plus simple)
  • des trucs comportementaux (l'envoi de mail) qui devraient plutot être déclenchés en réaction à un signal (y a une nouvelle signature qu'a été ajoutée ? paf j'envoie le mail)
  • etc, etc.

(j'arrive pas à tout lister mais ce code fait vraiment bcp bcp bcp bcp trop de choses et respecte pas trop le découpage fonctionnel que t'es censé avoir entre model et view)

rework nav bar

rethink the top nav bar to include correct actions/info:

  • Connexion link if not logged-in
  • Logout link if logged-in
  • Identity selector? To show if you are viewing a page as yourself or as an organization you are a member of
  • Search field: is this working? Is this relevant on all pages?
  • other ideas?

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.