Compare commits
5 Commits
2a68825926
...
8c03b1c521
Author | SHA1 | Date |
---|---|---|
Tykayn | 8c03b1c521 | |
Tykayn | 7f01e2de60 | |
Tykayn | a034f59a90 | |
Tykayn | 64fd83caa2 | |
Tykayn | f8554d5f7a |
3
.env
3
.env
|
@ -38,7 +38,8 @@ DATABASE_URL=mysql://framadate-admin:framadate-admin-password@127.0.0.1:3306/fra
|
|||
# Delivery is disabled by default via "null://localhost"
|
||||
MAILER_URL=sendmail://YOUR_WEBSITE
|
||||
# set the support email who will answer users in case of emergency
|
||||
SUPPORT_EMAIL=YOUR_EMAIL
|
||||
SUPPORT_EMAIL=support-framadate@YOUR_WEBSITE
|
||||
SPOOL_PATH=/var/www/html/date-poll-api/var/email/spool
|
||||
###< symfony/swiftmailer-bundle ###
|
||||
|
||||
###> nelmio/cors-bundle ###
|
||||
|
|
|
@ -64,7 +64,9 @@
|
|||
"require-dev": {
|
||||
"doctrine/doctrine-fixtures-bundle": "^3.4",
|
||||
"symfony/debug-bundle": "5.2.*",
|
||||
"symfony/maker-bundle": "^1.30"
|
||||
"symfony/maker-bundle": "^1.30",
|
||||
"symfony/stopwatch": "^5.2",
|
||||
"symfony/web-profiler-bundle": "^5.2"
|
||||
},
|
||||
"scripts": {
|
||||
"auto-scripts": {
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -13,4 +13,5 @@ return [
|
|||
Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true],
|
||||
Nelmio\CorsBundle\NelmioCorsBundle::class => ['all' => true],
|
||||
Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true, 'test' => true],
|
||||
Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
|
||||
];
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
web_profiler:
|
||||
toolbar: true
|
||||
intercept_redirects: false
|
||||
|
||||
framework:
|
||||
profiler: { only_exceptions: false }
|
|
@ -0,0 +1,11 @@
|
|||
#SUPPORT_EMAIL: '%env(SUPPORT_EMAIL)%'
|
||||
# config/packages/dev/mailer.yaml
|
||||
framework:
|
||||
mailer:
|
||||
envelope:
|
||||
sender: 'fabien@example.com'
|
||||
recipients: ['foo@example.com', 'bar@example.com']
|
||||
headers:
|
||||
from: '%env(SUPPORT_EMAIL)%'
|
||||
bcc: 'baz@example.com'
|
||||
X-Custom-Header: 'foobar'
|
|
@ -1,3 +1,5 @@
|
|||
swiftmailer:
|
||||
url: '%env(MAILER_URL)%'
|
||||
spool: { type: 'memory' }
|
||||
spool:
|
||||
type: 'file'
|
||||
path: '%env(SPOOL_PATH)%'
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
web_profiler:
|
||||
toolbar: false
|
||||
intercept_redirects: false
|
||||
|
||||
framework:
|
||||
profiler: { collect: false }
|
|
@ -0,0 +1,7 @@
|
|||
web_profiler_wdt:
|
||||
resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml'
|
||||
prefix: /_wdt
|
||||
|
||||
web_profiler_profiler:
|
||||
resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml'
|
||||
prefix: /_profiler
|
|
@ -5,10 +5,13 @@ namespace App\Controller;
|
|||
use App\Entity\Owner;
|
||||
use App\Entity\Poll;
|
||||
use JMS\Serializer\Type\Exception\Exception;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Swift_Mailer;
|
||||
use Swift_Message;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\Mailer\Exception\HttpTransportException;
|
||||
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
|
||||
|
||||
/**
|
||||
* sending emails controller
|
||||
*
|
||||
|
@ -51,7 +54,7 @@ class EmailsController extends AbstractController {
|
|||
*
|
||||
* @throws TransportExceptionInterface
|
||||
*/
|
||||
public function sendMailWithVars( $config ) {
|
||||
public function sendMailWithVars( $config) {
|
||||
|
||||
if ( ! isset( $config[ 'poll' ] ) ) {
|
||||
$config[ 'poll' ] = new Poll();
|
||||
|
@ -82,14 +85,22 @@ class EmailsController extends AbstractController {
|
|||
$message = ( new Swift_Message( $config[ 'title' ] ) )
|
||||
->setContentType( "text/html" )
|
||||
->setCharset( 'UTF-8' )
|
||||
->setFrom( [ 'ne-pas-repondre@framadate-api.cipherbliss.com'] )
|
||||
->setFrom( [ 'ne-pas-repondre@framadate-api.cipherbliss.com' ] )
|
||||
->setTo( [ $config[ 'owner' ]->getEmail() ] )
|
||||
->setBody( $htmlbody, 'text/html' );
|
||||
|
||||
|
||||
// Send the message
|
||||
$numSent = $this->mail_service->send( $message );
|
||||
$this->numSent = $numSent;
|
||||
try {
|
||||
$numSent = $this->mail_service->send( $message );
|
||||
|
||||
$this->numSent = $numSent;
|
||||
} catch ( TransportExceptionInterface $err ) {
|
||||
// some error prevented the email sending; display an
|
||||
// error message or try to resend the message
|
||||
|
||||
throw $err;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@ use FOS\RestBundle\Controller\Annotations\Post;
|
|||
use FOS\RestBundle\Controller\Annotations\Put;
|
||||
use FOS\RestBundle\Controller\Annotations\Route;
|
||||
use JMS\Serializer\SerializerInterface;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Swift_Mailer;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
|
@ -121,6 +122,36 @@ class PollController extends EmailsController {
|
|||
404 );
|
||||
}
|
||||
|
||||
/**
|
||||
* get a poll config by its custom URL, we do not want polls to be reachable by their numeric id
|
||||
* @Get(
|
||||
* path = "/owner/{owner_email}/",
|
||||
* name = "get_owner_poll",
|
||||
* )
|
||||
*
|
||||
* @return JsonResponse|Response
|
||||
*/
|
||||
function getOwnerPolls( $owner_email , LoggerInterface $logger ) {
|
||||
$repository = $this->getDoctrine()->getRepository( Owner::class );
|
||||
$owner = $repository->findOneByEmail( $owner_email );
|
||||
if ( ! $owner ) {
|
||||
return $this->json( [ 'message' => "Owner $owner_email non trouvé" ], 404 );
|
||||
} else {
|
||||
|
||||
$polls = $owner->getPolls();
|
||||
$pollsDisplay = [];
|
||||
|
||||
foreach ( $polls as $p ) {
|
||||
$pollsDisplay[] = $p->displayForAdmin();
|
||||
}
|
||||
$mail_sent = $this->sendOwnerPollsAction( $owner );
|
||||
$logger->info('getOwnerPolls : Email sent : '.$mail_sent);
|
||||
return $this->json( [ 'mail_sent' => $mail_sent ], $mail_sent ? 200 : 404 );
|
||||
// return $this->json(['owner' => $owner->displayForAdmin(), 'polls' => $pollsDisplay], 200);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* get a poll config by its custom URL, we do not want polls to be reachable by their numeric id
|
||||
* @Get(
|
||||
|
@ -412,27 +443,6 @@ class PollController extends EmailsController {
|
|||
return $this->render( 'emails/creation-mail.html.twig',
|
||||
[ 'poll' => $foundPoll, 'owner' => $foundPoll->getOwner() ] );
|
||||
|
||||
|
||||
// if ( $foundOwner ) {
|
||||
// $sent = $this->sendOwnerPollsAction( $foundOwner );
|
||||
// if ( $sent ) {
|
||||
// $config = [
|
||||
// 'owner' => $foundOwner,
|
||||
// 'title' => $this->getParameter( 'WEBSITE_NAME' ) . ' | Mes sondages',
|
||||
// 'email_template' => 'emails/owner-list.html.twig',
|
||||
// ];
|
||||
// return $this->render( 'emails/owner-list.html.twig', $config );
|
||||
|
||||
// }
|
||||
// }
|
||||
|
||||
// return $this->json( [ "message" => "test email sent to " . $foundOwner->getEmail() . "!" ], 200 );
|
||||
|
||||
// $this->sendMailWithVars( $config );
|
||||
|
||||
|
||||
// return $this->json( [ "message" => "user with this email was not found" ], 400 );
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -35,15 +35,15 @@ class PollRepository extends ServiceEntityRepository {
|
|||
return $this->findExpirationPollOfDay( - 30 );
|
||||
}
|
||||
|
||||
public function findExpirationPollOfDay( $count_of_days){
|
||||
public function findExpirationPollOfDay( $count_of_days ) {
|
||||
|
||||
$today = new \DateTime();
|
||||
$today = new \DateTime();
|
||||
|
||||
if($count_of_days > -1){
|
||||
if ( $count_of_days > - 1 ) {
|
||||
|
||||
$date_soon = $today->add( new \DateInterval( 'P' . $count_of_days . 'D' ) );
|
||||
}else{
|
||||
$date_soon = $today->sub( new \DateInterval( 'P' . abs($count_of_days) . 'D' ) );
|
||||
$date_soon = $today->add( new \DateInterval( 'P' . $count_of_days . 'D' ) );
|
||||
} else {
|
||||
$date_soon = $today->sub( new \DateInterval( 'P' . abs( $count_of_days ) . 'D' ) );
|
||||
|
||||
}
|
||||
|
||||
|
@ -55,4 +55,21 @@ class PollRepository extends ServiceEntityRepository {
|
|||
->getResult();
|
||||
}
|
||||
|
||||
/**
|
||||
* find all the polls of an owner
|
||||
*
|
||||
* @param $email
|
||||
*
|
||||
* @return int|mixed|string
|
||||
*/
|
||||
public function findAllByOwnerEmail( $email ) {
|
||||
return $this->createQueryBuilder( 'p' )
|
||||
->andWhere( 'p.owner.email = :email' )
|
||||
->setParameter( 'email', $email )
|
||||
->orderBy( 'p.id', 'DESC' )
|
||||
->getQuery()
|
||||
->getResult();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
17
symfony.lock
17
symfony.lock
|
@ -350,6 +350,9 @@
|
|||
"symfony/polyfill-php80": {
|
||||
"version": "v1.22.1"
|
||||
},
|
||||
"symfony/profiler-pack": {
|
||||
"version": "v1.0.5"
|
||||
},
|
||||
"symfony/property-access": {
|
||||
"version": "v5.2.4"
|
||||
},
|
||||
|
@ -425,6 +428,20 @@
|
|||
"symfony/var-exporter": {
|
||||
"version": "v5.2.4"
|
||||
},
|
||||
"symfony/web-profiler-bundle": {
|
||||
"version": "3.3",
|
||||
"recipe": {
|
||||
"repo": "github.com/symfony/recipes",
|
||||
"branch": "master",
|
||||
"version": "3.3",
|
||||
"ref": "6bdfa1a95f6b2e677ab985cd1af2eae35d62e0f6"
|
||||
},
|
||||
"files": [
|
||||
"config/packages/dev/web_profiler.yaml",
|
||||
"config/packages/test/web_profiler.yaml",
|
||||
"config/routes/dev/web_profiler.yaml"
|
||||
]
|
||||
},
|
||||
"symfony/yaml": {
|
||||
"version": "v5.2.5"
|
||||
},
|
||||
|
|
|
@ -4,16 +4,16 @@
|
|||
<meta charset="UTF-8">
|
||||
<base href="/">
|
||||
<meta content="width=device-width, initial-scale=1" name="viewport"/>
|
||||
<link href="favicon.ico" rel="icon" type="image/x-icon"/>
|
||||
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap" rel="stylesheet"/>
|
||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"/>
|
||||
<link href="img/logo.png" rel="icon" type="image/png"/>
|
||||
{# <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap" rel="stylesheet"/>#}
|
||||
{# <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"/>#}
|
||||
<link rel="stylesheet" href="styles.css" crossorigin="anonymous">
|
||||
|
||||
<title>{% block title %}Framdate{% endblock %}</title>
|
||||
{# {% block stylesheets %}#}
|
||||
{# <link rel="stylesheet" href="{{ asset('build/vendors~app.css') }}">#}
|
||||
{# <link rel="stylesheet" href="{{ asset('build/app.css') }}">#}
|
||||
{# {% endblock %}#}
|
||||
<title>{% block title %}{{ WEBSITE_NAME }}{% endblock %}</title>
|
||||
{# {% block stylesheets %} #}
|
||||
{# <link rel="stylesheet" href="{{ asset('build/vendors~app.css') }}"> #}
|
||||
{# <link rel="stylesheet" href="{{ asset('build/app.css') }}"> #}
|
||||
{# {% endblock %} #}
|
||||
</head>
|
||||
<body>
|
||||
{% include 'split/header.html.twig' %}
|
||||
|
@ -22,7 +22,7 @@
|
|||
<div class="container">
|
||||
|
||||
{% block body %}
|
||||
|
||||
coucou!
|
||||
{% endblock %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
{% if title is defined %}
|
||||
<h1>{{ title }}</h1>
|
||||
{% else %}
|
||||
<h1>Framadate - email</h1>
|
||||
<h1>{{ WEBSITE_NAME }} - email</h1>
|
||||
{% endif %}
|
||||
<hr>
|
||||
{% endblock %}
|
||||
|
|
|
@ -9,9 +9,9 @@
|
|||
<header>
|
||||
{% block title %}
|
||||
{% if title is defined %}
|
||||
<h1 class="text-center">{{ title }}</h1>
|
||||
<h1 class="text-center">{{ title }} - {{ WEBSITE_NAME }}</h1>
|
||||
{% else %}
|
||||
<h1 class="text-center">Framadate</h1>
|
||||
<h1 class="text-center">{{ WEBSITE_NAME }}</h1>
|
||||
{% endif %}
|
||||
<hr>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<div class="footer-content" style="text-align:center; padding: 1em;">
|
||||
Framadate est un logiciel libre, tout le monde peut
|
||||
{{ WEBSITE_NAME }} est un logiciel libre, tout le monde peut
|
||||
<a href="https://framateam.org/ux-framatrucs/channels/framadate">
|
||||
l'améliorer.
|
||||
</a>
|
||||
|
@ -7,7 +7,7 @@
|
|||
Merci de votre confiance.
|
||||
<br>
|
||||
<a href="{{ BASE_URL }}">
|
||||
Framadate {{ BASE_URL }}
|
||||
{{ WEBSITE_NAME }} {{ BASE_URL }}
|
||||
</a>
|
||||
<br>
|
||||
<a href="https://framagit.org/framasoft/framadate/funky-framadate-front">
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
Voici la liste des {{ owner.polls|length }} sondages
|
||||
<a href="{{ BASE_URL }}">
|
||||
Framadate
|
||||
{{ WEBSITE_NAME }}
|
||||
</a>
|
||||
que vous avez créé.
|
||||
</h2>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Framadate</title>
|
||||
<title>{{ WEBSITE_NAME }}</title>
|
||||
<base href="/">
|
||||
<meta
|
||||
content="width=device-width, initial-scale=1"
|
||||
|
@ -12,56 +12,58 @@
|
|||
rel="icon"
|
||||
type="image/x-icon">
|
||||
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="assets/css/bootstrap-reboot-4.3.1.css">
|
||||
{# <link#}
|
||||
{# rel="stylesheet"#}
|
||||
{# href="/assets/css/bootstrap-reboot-4.3.1.css">#}
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="styles.css"
|
||||
crossorigin="anonymous">
|
||||
</head>
|
||||
<body>
|
||||
<app-root></app-root>
|
||||
<app-root>
|
||||
Chargement de l'app, hopla!
|
||||
</app-root>
|
||||
<footer id="main-footer" class="text-center">
|
||||
<a href="https://framagit.org/tykayn/date-poll-api">
|
||||
Sources
|
||||
<i class="fa fa-gitlab"></i>
|
||||
</a>
|
||||
<a href="mailto:contact@cipherbliss.com">
|
||||
<a href="mailto:contact+framadate@cipherbliss.com">
|
||||
Contact
|
||||
<i class="fa fa-envelope"></i>
|
||||
</a>
|
||||
</footer>
|
||||
<script
|
||||
src="runtime-es2018.js"
|
||||
crossorigin="anonymous"
|
||||
type="module"></script>
|
||||
<script
|
||||
src="runtime-es5.js"
|
||||
crossorigin="anonymous"
|
||||
nomodule
|
||||
defer></script>
|
||||
<script
|
||||
src="polyfills-es5.js"
|
||||
crossorigin="anonymous"
|
||||
nomodule
|
||||
defer></script>
|
||||
<script
|
||||
src="polyfills-es2018.js"
|
||||
crossorigin="anonymous"
|
||||
type="module"></script>
|
||||
<script
|
||||
src="scripts.js"
|
||||
crossorigin="anonymous"
|
||||
defer></script>
|
||||
<script
|
||||
src="main-es2018.js"
|
||||
crossorigin="anonymous"
|
||||
type="module"></script>
|
||||
<script
|
||||
src="main-es5.js"
|
||||
crossorigin="anonymous"
|
||||
nomodule
|
||||
defer></script>
|
||||
{#<script#}
|
||||
{# src="/runtime-es2018.js"#}
|
||||
{# crossorigin="anonymous"#}
|
||||
{# type="module"></script>#}
|
||||
{#<script#}
|
||||
{# src="runtime-es5.js"#}
|
||||
{# crossorigin="anonymous"#}
|
||||
{# nomodule#}
|
||||
{# defer></script>#}
|
||||
{#<script#}
|
||||
{# src="polyfills-es5.js"#}
|
||||
{# crossorigin="anonymous"#}
|
||||
{# nomodule#}
|
||||
{# defer></script>#}
|
||||
{#<script#}
|
||||
{# src="polyfills-es2018.js"#}
|
||||
{# crossorigin="anonymous"#}
|
||||
{# type="module"></script>#}
|
||||
{#<script#}
|
||||
{# src="scripts.js"#}
|
||||
{# crossorigin="anonymous"#}
|
||||
{# defer></script>#}
|
||||
{#<script#}
|
||||
{# src="main-es2018.js"#}
|
||||
{# crossorigin="anonymous"#}
|
||||
{# type="module"></script>#}
|
||||
{#<script#}
|
||||
{# src="main-es5.js"#}
|
||||
{# crossorigin="anonymous"#}
|
||||
{# nomodule#}
|
||||
{# defer></script>#}
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{% extends 'base.html.twig' %}
|
||||
{% block title %}migration depuis un Framadate version 1{% endblock %}
|
||||
{% block title %}migration depuis un Framadate version 1 vers {{ WEBSITE_NAME }} version funky{% endblock %}
|
||||
{% block body %}
|
||||
|
||||
<main>
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
<td>{{ poll.title }}</td>
|
||||
<td>{{ poll.customUrl }}</td>
|
||||
<td>{{ poll.description }}</td>
|
||||
<td>{{ poll.creationDate ? poll.creationDate|date('Y-m-d H:i:s') : '' }}</td>
|
||||
<td>{{ poll.createdAt ? poll.createdAt|date('Y-m-d H:i:s') : '' }}</td>
|
||||
<td>{{ poll.expiracyDate ? poll.expiracyDate|date('Y-m-d H:i:s') : '' }}</td>
|
||||
<td>{{ poll.kind }}</td>
|
||||
<td>{{ poll.allowedAnswers ? poll.allowedAnswers|join(', ') : '' }}</td>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<th>CreationDate</th>
|
||||
<td>{{ poll.creationDate ? poll.creationDate|date('Y-m-d H:i:s') : '' }}</td>
|
||||
<td>{{ poll.createdAt ? poll.createdAt|date('Y-m-d H:i:s') : '' }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>ExpiracyDate</th>
|
||||
|
|
|
@ -1,20 +1,6 @@
|
|||
{% block header %}
|
||||
|
||||
<header class="bg-purple-300 p-4 block">
|
||||
<div class="container">
|
||||
{# <img src="{{ WEBSITE_LOGO }}" alt="logo">#}
|
||||
{# {{ WEBSITE_NAME }}#}
|
||||
|
||||
<nav>
|
||||
<ul>
|
||||
<li>
|
||||
<a class="btn button rounded bg-purple-200 p-2" href="/">
|
||||
<i class="fa fa-home"></i>
|
||||
<img src="{{ WEBSITE_LOGO }}" alt="logo">
|
||||
{{ WEBSITE_NAME }}
|
||||
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
{% endblock %}
|
||||
|
|
Loading…
Reference in New Issue