Esempio n. 1
0
    def costruisci_email(oggetto='Nessun oggetto',
                         modello='email_vuoto.html',
                         corpo=None,
                         mittente=None,
                         destinatari=None,
                         allegati=None,
                         **kwargs):
        """
        :param oggetto: Oggetto del messaggio.
        :param modello: Modello da utilizzare per l'invio.
        :param corpo: Sostituzioni da fare nel modello. Dizionario {nome: valore}
        :param mittente: Mittente del messaggio. None per Notifiche da Gaia.
        :param destinatari: Un elenco di destinatari (oggetti Persona).
        :param allegati: Allegati messaggio
        :return: Un oggetto Messaggio
        """

        destinatari = destinatari or []
        allegati = allegati or []

        corpo = corpo or {}
        corpo.update({
            'mittente': mittente,
        })

        oggetto = Truncator(oggetto).chars(Messaggio.LUNGHEZZA_MASSIMA_OGGETTO)

        with transaction.atomic():
            m = Messaggio(oggetto=oggetto, mittente=mittente, **kwargs)

            allegati_objects = list()
            for a in allegati:
                if isinstance(a, Allegato):
                    a.oggetto = m
                    a.save()
                else:
                    allegato = Allegato(file=a, nome=a.name)
                    allegato.oggetto = m
                    allegato.save()
                    allegati_objects.append(allegato)

            corpo[
                'allegati'] = allegati_objects if allegati_objects else allegati

            m.corpo = get_template(modello).render(corpo)
            m.processa_link()
            m.save()

            for d in destinatari:
                m.oggetti_destinatario.create(persona=d)

            return m
Esempio n. 2
0
 def do(self):
     n = Allegato.pulisci()
     print("Sono stati rimossi %d file scaduti." % n)
Esempio n. 3
0
def posta_scrivi(request, me):

    destinatari = Persona.objects.none()

    # Prova a recuperare destinatari dalla sessione.
    try:
        timestamp = request.session["messaggio_destinatari_timestamp"]
        if (
            timestamp and timestamp > (now() - timedelta(seconds=settings.POSTA_MASSIVA_TIMEOUT))
        ):
            # max POSTA_MASSIVA_TIMEOUT secondi fa
            destinatari = request.session["messaggio_destinatari"]

    except KeyError:
        # Nessun destinatario in sessione.
        pass

    # Svuota eventuale sessione
    request.session["messaggio_destinatari"] = None
    request.session["messaggio_destinatari_timestamp"] = None

    MAX_VISIBILI = 20
    MAX_VISIBILI_STR = "%d destinatari selezionati"

    if destinatari:  # Ho appena scaricato i destinatari

        if destinatari.count() > MAX_VISIBILI:
            modulo = ModuloScriviMessaggioConDestinatariNascosti(initial={
                "destinatari": [x.pk for x in destinatari], "destinatari_selezionati": MAX_VISIBILI_STR % (destinatari.count(),)
            })

        else:
            modulo = ModuloScriviMessaggioConDestinatariVisibili(initial={
                "destinatari": [x.pk for x in destinatari],
            })

    else:  # Normale
        if len(request.POST.getlist('destinatari')) > MAX_VISIBILI:
            modulo = ModuloScriviMessaggioConDestinatariNascosti(request.POST or None, request.FILES or None, initial={
                "destinatari_selezionati": MAX_VISIBILI_STR % (destinatari.count(),)
            })

        else:
            modulo = ModuloScriviMessaggioConDestinatariVisibili(request.POST or None,  request.FILES or None)

    if modulo.is_valid():

        allegati = []
        for a in modulo.cleaned_data['allegati']:
            ai = Allegato(file=a, nome=a.name)
            ai.scadenza = datetime.now() + timedelta(days=15)
            ai.save()
            allegati.append(ai)

        # Invia o accoda il messaggio, a seconda del numero di destinatari.
        if len(modulo.cleaned_data['destinatari']) > MAX_VISIBILI:
            funzione = Messaggio.costruisci_e_accoda
            azione = "accodato"
        else:
            funzione = Messaggio.costruisci_e_invia
            azione = "inviato"

        messaggio = funzione(
            oggetto=modulo.cleaned_data['oggetto'],
            modello='email_utente.html',
            corpo={"testo": modulo.cleaned_data['testo']},
            allegati=allegati,
            mittente=me,
            destinatari=[
                el if isinstance(el, Persona) else Persona.objects.get(pk=int(el))
                for el in modulo.cleaned_data['destinatari']
            ],
        )

        # Porta alla schermata del messaggio.
        return redirect("/posta/in-uscita/1/%d/?%s" % (messaggio.pk, azione,))

    contesto = {
        "modulo": modulo,
    }

    return 'posta_scrivi.html', contesto
Esempio n. 4
0
 def do(self):
     n = Allegato.pulisci()
     print("Sono stati rimossi %d file scaduti." % n)
Esempio n. 5
0
def posta_scrivi(request, me):

    destinatari = Persona.objects.none()

    # Prova a recuperare destinatari dalla sessione.
    try:
        timestamp = request.session["messaggio_destinatari_timestamp"]
        if (timestamp and timestamp >
            (now() - timedelta(seconds=settings.POSTA_MASSIVA_TIMEOUT))):
            # max POSTA_MASSIVA_TIMEOUT secondi fa
            destinatari = request.session["messaggio_destinatari"]

    except KeyError:
        # Nessun destinatario in sessione.
        pass

    # Svuota eventuale sessione
    request.session["messaggio_destinatari"] = None
    request.session["messaggio_destinatari_timestamp"] = None

    MAX_VISIBILI = 20
    MAX_VISIBILI_STR = "%d destinatari selezionati"

    if destinatari:  # Ho appena scaricato i destinatari

        if destinatari.count() > MAX_VISIBILI:
            modulo = ModuloScriviMessaggioConDestinatariNascosti(
                initial={
                    "destinatari": [x.pk for x in destinatari],
                    "destinatari_selezionati":
                    MAX_VISIBILI_STR % (destinatari.count(), )
                })

        else:
            modulo = ModuloScriviMessaggioConDestinatariVisibili(initial={
                "destinatari": [x.pk for x in destinatari],
            })

    else:  # Normale
        if len(request.POST.getlist('destinatari')) > MAX_VISIBILI:
            modulo = ModuloScriviMessaggioConDestinatariNascosti(
                request.POST or None,
                request.FILES or None,
                initial={
                    "destinatari_selezionati":
                    MAX_VISIBILI_STR % (destinatari.count(), )
                })

        else:
            modulo = ModuloScriviMessaggioConDestinatariVisibili(
                request.POST or None, request.FILES or None)

    if modulo.is_valid():

        allegati = []
        for a in modulo.cleaned_data['allegati']:
            ai = Allegato(file=a, nome=a.name)
            ai.scadenza = datetime.now() + timedelta(days=15)
            ai.save()
            allegati.append(ai)

        messaggio = Messaggio.costruisci(
            oggetto=modulo.cleaned_data['oggetto'],
            modello='email_utente.html',
            corpo={"testo": modulo.cleaned_data['testo']},
            allegati=allegati,
            mittente=me,
            destinatari=[
                el if isinstance(el, Persona) else Persona.objects.get(
                    pk=int(el)) for el in modulo.cleaned_data['destinatari']
            ],
        )

        # Invia o accoda il messaggio, a seconda del numero di destinatari.
        if len(modulo.cleaned_data['destinatari']) > MAX_VISIBILI:
            messaggio.accoda()
            azione = "accodato"

        else:
            messaggio.invia()
            azione = "inviato"

        # Porta alla schermata del messaggio.
        return redirect("/posta/in-uscita/1/%d/?%s" % (
            messaggio.pk,
            azione,
        ))

    contesto = {
        "modulo": modulo,
    }

    return 'posta_scrivi.html', contesto
Esempio n. 6
0
def posta_scrivi(request, me):
    MAX_VISIBILI = 20
    MAX_VISIBILI_STR = "%d destinatari selezionati"


    # Prova a recuperare destinatari dalla sessione.
    destinatari_in_sessione = request.session.get('messaggio_destinatari')
    destinatari = destinatari_in_sessione if destinatari_in_sessione else Persona.objects.none()

    # Svuota eventuale sessione
    request.session["messaggio_destinatari"] = None
    request.session["messaggio_destinatari_timestamp"] = None

    destinatari_count = destinatari.count()
    max_visibili_count = MAX_VISIBILI_STR % destinatari_count
    if destinatari:  # Ho appena scaricato i destinatari
        destinatari_list = [x.pk for x in destinatari]
        if destinatari_count > MAX_VISIBILI:
            form = ModuloScriviMessaggioConDestinatariNascosti(initial={'destinatari': destinatari_list,
                'destinatari_selezionati': max_visibili_count})
        else:
            form = ModuloScriviMessaggioConDestinatariVisibili(initial={'destinatari': destinatari_list,})

    else:  # Normale
        if len(request.POST.getlist('destinatari')) > MAX_VISIBILI:
            form = ModuloScriviMessaggioConDestinatariNascosti(
                request.POST or None, request.FILES or None, initial={
                "destinatari_selezionati": max_visibili_count})
        else:
            form = ModuloScriviMessaggioConDestinatariVisibili(request.POST or None, request.FILES or None)

    if form.is_valid():
        cd = form.cleaned_data
        allegati = list()

        for a in cd['allegati']:
            allegato = Allegato(file=a, nome=a.name)
            allegato.scadenza = datetime.now() + timedelta(days=15)
            allegato.save()
            allegati.append(allegato)

        # Invia o accoda il messaggio, a seconda del numero di destinatari.
        if len(cd['destinatari']) > MAX_VISIBILI:
            funzione = Messaggio.costruisci_e_accoda
            azione = "accodato"
        else:
            funzione = Messaggio.costruisci_e_invia
            azione = "inviato"

        messaggio = funzione(
            oggetto=cd['oggetto'],
            modello='email_utente.html',
            corpo={"testo": cd['testo']},
            allegati=allegati,
            mittente=me,
            destinatari=[el if isinstance(el, Persona) else Persona.objects.get(pk=int(el))
                for el in cd['destinatari']
            ],
        )

        # Porta alla schermata del messaggio.
        return redirect("/posta/in-uscita/1/%d/?%s" % (messaggio.pk, azione,))
    return 'posta_scrivi.html', {'modulo': form}
Esempio n. 7
0
def posta_scrivi(request, me):
    MAX_VISIBILI = 20
    MAX_VISIBILI_STR = "%d destinatari selezionati"

    # Prova a recuperare destinatari dalla sessione.
    destinatari_in_sessione = request.session.get('messaggio_destinatari')
    destinatari = destinatari_in_sessione if destinatari_in_sessione else Persona.objects.none(
    )

    # Svuota eventuale sessione
    request.session["messaggio_destinatari"] = None
    request.session["messaggio_destinatari_timestamp"] = None

    destinatari_count = destinatari.count()
    max_visibili_count = MAX_VISIBILI_STR % destinatari_count
    if destinatari:  # Ho appena scaricato i destinatari
        destinatari_list = [x.pk for x in destinatari]
        if destinatari_count > MAX_VISIBILI:
            form = ModuloScriviMessaggioConDestinatariNascosti(
                initial={
                    'destinatari': destinatari_list,
                    'destinatari_selezionati': max_visibili_count
                })
        else:
            form = ModuloScriviMessaggioConDestinatariVisibili(
                initial={
                    'destinatari': destinatari_list,
                })

    else:  # Normale
        if len(request.POST.getlist('destinatari')) > MAX_VISIBILI:
            form = ModuloScriviMessaggioConDestinatariNascosti(
                request.POST or None,
                request.FILES or None,
                initial={"destinatari_selezionati": max_visibili_count})
        else:
            form = ModuloScriviMessaggioConDestinatariVisibili(
                request.POST or None, request.FILES or None)

    if form.is_valid():
        cd = form.cleaned_data
        allegati = list()

        for a in cd['allegati']:
            allegato = Allegato(file=a, nome=a.name)
            allegato.scadenza = datetime.now() + timedelta(days=15)
            allegato.save()
            allegati.append(allegato)

        # Invia o accoda il messaggio, a seconda del numero di destinatari.
        if len(cd['destinatari']) > MAX_VISIBILI:
            funzione = Messaggio.costruisci_e_accoda
            azione = "accodato"
        else:
            funzione = Messaggio.costruisci_e_invia
            azione = "inviato"

        messaggio = funzione(
            oggetto=cd['oggetto'],
            modello='email_utente.html',
            corpo={"testo": cd['testo']},
            allegati=allegati,
            mittente=me,
            destinatari=[
                el if isinstance(el, Persona) else Persona.objects.get(
                    pk=int(el)) for el in cd['destinatari']
            ],
        )

        # Porta alla schermata del messaggio.
        return redirect("/posta/in-uscita/1/%d/?%s" % (
            messaggio.pk,
            azione,
        ))
    return 'posta_scrivi.html', {'modulo': form}