mirror of
https://framagit.org/tykayn/date-poll-api
synced 2023-08-25 08:23:11 +02:00
handle creation of mixed subset of datechoice
This commit is contained in:
parent
e488b76a2d
commit
9cfb974c27
90
README.md
90
README.md
@ -8,50 +8,52 @@ https://framagit.org/framasoft/framadate/funky-framadate-front
|
|||||||
------------------------------------ --------------- -------- ------ --------------------------------------------------
|
------------------------------------ --------------- -------- ------ --------------------------------------------------
|
||||||
Name Method Scheme Host Path
|
Name Method Scheme Host Path
|
||||||
------------------------------------ --------------- -------- ------ --------------------------------------------------
|
------------------------------------ --------------- -------- ------ --------------------------------------------------
|
||||||
_preview_error ANY ANY ANY /_error/{code}.{_format}
|
_preview_error ANY ANY ANY /_error/{code}.{_format}
|
||||||
_wdt ANY ANY ANY /_wdt/{token}
|
_wdt ANY ANY ANY /_wdt/{token}
|
||||||
_profiler_home ANY ANY ANY /_profiler/
|
_profiler_home ANY ANY ANY /_profiler/
|
||||||
_profiler_search ANY ANY ANY /_profiler/search
|
_profiler_search ANY ANY ANY /_profiler/search
|
||||||
_profiler_search_bar ANY ANY ANY /_profiler/search_bar
|
_profiler_search_bar ANY ANY ANY /_profiler/search_bar
|
||||||
_profiler_phpinfo ANY ANY ANY /_profiler/phpinfo
|
_profiler_phpinfo ANY ANY ANY /_profiler/phpinfo
|
||||||
_profiler_search_results ANY ANY ANY /_profiler/{token}/search/results
|
_profiler_search_results ANY ANY ANY /_profiler/{token}/search/results
|
||||||
_profiler_open_file ANY ANY ANY /_profiler/open
|
_profiler_open_file ANY ANY ANY /_profiler/open
|
||||||
_profiler ANY ANY ANY /_profiler/{token}
|
_profiler ANY ANY ANY /_profiler/{token}
|
||||||
_profiler_router ANY ANY ANY /_profiler/{token}/router
|
_profiler_router ANY ANY ANY /_profiler/{token}/router
|
||||||
_profiler_exception ANY ANY ANY /_profiler/{token}/exception
|
_profiler_exception ANY ANY ANY /_profiler/{token}/exception
|
||||||
_profiler_exception_css ANY ANY ANY /_profiler/{token}/exception.css
|
_profiler_exception_css ANY ANY ANY /_profiler/{token}/exception.css
|
||||||
admin_homepage_get_default GET ANY ANY /admin/
|
admin_homepage_get_default GET ANY ANY /admin/
|
||||||
admin_homepage_clean_expired_polls GET ANY ANY /admin/polls/clean/{token}
|
admin_homepage_clean_expired_polls GET ANY ANY /admin/polls/clean/{token}
|
||||||
admin_homepage_migrate_framadate GET ANY ANY /admin/polls/migrate
|
admin_homepage_migrate_framadate GET ANY ANY /admin/polls/migrate
|
||||||
home_sweet_home GET ANY ANY /
|
home_sweet_home GET ANY ANY /
|
||||||
admin_homepage_migrate_from_v1 GET ANY ANY /migration-from-v1/{unique_key}
|
admin_homepage_migrate_from_v1 GET ANY ANY /migration-from-v1/{unique_key}
|
||||||
user_homepageget_default GET ANY ANY /user/
|
user_homepageget_default GET ANY ANY /user/
|
||||||
user_homepage_polls_send_by_email GET ANY ANY /user/{email}/polls/send-by-email
|
user_homepage_polls_send_by_email GET ANY ANY /user/{email}/polls/send-by-email
|
||||||
poll_index GET ANY ANY /poll/
|
poll_index GET ANY ANY /poll/
|
||||||
poll_new GET|POST ANY ANY /poll/new
|
poll_new POST ANY ANY /poll/new
|
||||||
poll_show GET ANY ANY /poll/{id}
|
poll_show GET ANY ANY /poll/id/{id}
|
||||||
poll_edit GET|POST ANY ANY /poll/{id}/edit
|
poll_edit GET|POST ANY ANY /poll/{id}/edit
|
||||||
poll_delete DELETE ANY ANY /poll/{id}
|
poll_delete DELETE ANY ANY /poll/{id}
|
||||||
api_get_poll_comment GET ANY ANY /api/v1/comment/poll/{id}/comments
|
api_get_poll_comment GET ANY ANY /api/v1/comment/poll/{id}/comments
|
||||||
api_new_comment POST ANY ANY /api/v1/comment/poll/{id}/comment
|
api_new_comment POST ANY ANY /api/v1/comment/poll/{id}/comment
|
||||||
api_poll_comments_delete DELETE ANY ANY /api/v1/comment/poll/{id}/comments
|
api_poll_comments_delete DELETE ANY ANY /api/v1/comment/poll/{id}/comments
|
||||||
api_get_all_polls GET ANY ANY /api/v1/poll/
|
api_essai GET ANY ANY /api/v1/poll/essai
|
||||||
api_get_poll GET ANY ANY /api/v1/poll/{customUrl}
|
api_get_all_polls GET ANY ANY /api/v1/poll/
|
||||||
api_get_owner_poll GET ANY ANY /api/v1/poll/owner/{owner_email}/
|
api_get_poll GET ANY ANY /api/v1/poll/{customUrl}
|
||||||
api_get_protected_poll GET ANY ANY /api/v1/poll/{customUrl}/pass/{md5}
|
api_get_owner_poll GET ANY ANY /api/v1/poll/owner/{owner_email}/
|
||||||
api_get_admin_poll GET ANY ANY /api/v1/polladmin/{admin_key}
|
api_get_protected_poll GET ANY ANY /api/v1/poll/{customUrl}/pass/{md5}
|
||||||
api_update_poll PUT ANY ANY /api/v1/poll/{customUrl}/update/{token}
|
api_get_admin_poll GET ANY ANY /api/v1/polladmin/{admin_key}
|
||||||
api_new_poll POST ANY ANY /api/v1/poll/
|
api_update_poll PUT ANY ANY /api/v1/poll/{customUrl}/update/{token}
|
||||||
api_test-mail-poll GET ANY ANY /api/v1/poll/mail/test-mail-poll/{emailChoice}
|
api_app_api_v1_poll_newpoll POST ANY ANY /api/v1/poll/
|
||||||
api_poll_delete DELETE ANY ANY /api/v1/poll/{admin_key}
|
api_app_api_v1_poll_newpoll.1 POST ANY ANY /api/v1/poll_new_poll
|
||||||
api_check_slug_is_unique GET ANY ANY /api/v1/poll/slug/{customUrl}
|
api_test-mail-poll GET ANY ANY /api/v1/poll/mail/test-mail-poll/{emailChoice}
|
||||||
api_get_admin_config GET ANY ANY /api/v1/poll/admin/{token}
|
api_poll_delete DELETE ANY ANY /api/v1/poll/{admin_key}
|
||||||
api_clean_expired_polls GET ANY ANY /api/v1/poll/admin/clean_expired_polls/{token}
|
api_check_slug_is_unique GET ANY ANY /api/v1/poll/slug/{customUrl}
|
||||||
api_new_vote_stack POST|OPTIONS ANY ANY /api/v1/vote-stack/
|
api_get_admin_config GET ANY ANY /api/v1/poll/admin/{token}
|
||||||
api_update_vote_stack PATCH|OPTIONS ANY ANY /api/v1/vote-stack/{id}/token/{modifierToken}
|
api_clean_expired_polls GET ANY ANY /api/v1/poll/admin/clean_expired_polls/{token}
|
||||||
api_delete_vote_stack DELETE ANY ANY /api/v1/vote-stack/{id}/token/{modifierToken}
|
api_new_vote_stack POST|OPTIONS ANY ANY /api/v1/vote-stack/
|
||||||
api_poll_votes_delete DELETE ANY ANY /api/v1/vote-stack/poll/{id}/votes/{accessToken}
|
api_update_vote_stack PATCH|OPTIONS ANY ANY /api/v1/vote-stack/{id}/token/{modifierToken}
|
||||||
app.swagger GET ANY ANY /api/doc.json
|
api_delete_vote_stack DELETE ANY ANY /api/v1/vote-stack/{id}/token/{modifierToken}
|
||||||
|
api_poll_votes_delete DELETE ANY ANY /api/v1/vote-stack/poll/{id}/votes/{accessToken}
|
||||||
|
app.swagger GET ANY ANY /api/doc.json
|
||||||
------------------------------------ --------------- -------- ------ --------------------------------------------------
|
------------------------------------ --------------- -------- ------ --------------------------------------------------
|
||||||
|
|
||||||
## TODO:
|
## TODO:
|
||||||
|
@ -15,24 +15,6 @@ use Symfony\Component\Routing\Annotation\Route;
|
|||||||
* @Route("/poll")
|
* @Route("/poll")
|
||||||
*/
|
*/
|
||||||
class PollController extends AbstractController {
|
class PollController extends AbstractController {
|
||||||
|
|
||||||
/**
|
|
||||||
* @Route(
|
|
||||||
* "/essai",
|
|
||||||
* name = "essai",
|
|
||||||
* methods={"GET"}
|
|
||||||
* )
|
|
||||||
* @param Request $request
|
|
||||||
* essai poll
|
|
||||||
* @return JsonResponse
|
|
||||||
*/
|
|
||||||
public function essai(Request $request): JsonResponse
|
|
||||||
{
|
|
||||||
$data = $request->getContent();
|
|
||||||
$data = json_decode($data, true);
|
|
||||||
return $this->json(["message"=> 'essai', 'data'=>$data], 400 );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Route("/", name="poll_index", methods={"GET"})
|
* @Route("/", name="poll_index", methods={"GET"})
|
||||||
*/
|
*/
|
||||||
@ -53,7 +35,7 @@ class PollController extends AbstractController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Route("/new", name="poll_new", methods={"GET","POST"})
|
* @Route("/new", name="poll_new", methods={"POST"})
|
||||||
*/
|
*/
|
||||||
public function new( Request $request ): Response {
|
public function new( Request $request ): Response {
|
||||||
$poll = new Poll();
|
$poll = new Poll();
|
||||||
|
@ -10,7 +10,6 @@ use App\Repository\PollRepository;
|
|||||||
use DateTime;
|
use DateTime;
|
||||||
use FOS\RestBundle\Controller\Annotations\Delete;
|
use FOS\RestBundle\Controller\Annotations\Delete;
|
||||||
use FOS\RestBundle\Controller\Annotations\Get;
|
use FOS\RestBundle\Controller\Annotations\Get;
|
||||||
use FOS\RestBundle\Controller\Annotations\Post;
|
|
||||||
use FOS\RestBundle\Controller\Annotations\Put;
|
use FOS\RestBundle\Controller\Annotations\Put;
|
||||||
use FOS\RestBundle\Controller\Annotations\Route;
|
use FOS\RestBundle\Controller\Annotations\Route;
|
||||||
use JMS\Serializer\SerializerInterface;
|
use JMS\Serializer\SerializerInterface;
|
||||||
@ -27,6 +26,23 @@ use Symfony\Component\HttpFoundation\Response;
|
|||||||
*/
|
*/
|
||||||
class PollController extends EmailsController
|
class PollController extends EmailsController
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @Route(
|
||||||
|
* "/essai",
|
||||||
|
* name = "essai",
|
||||||
|
* methods={"GET"}
|
||||||
|
* )
|
||||||
|
* @param Request $request
|
||||||
|
* essai poll
|
||||||
|
* @return JsonResponse
|
||||||
|
*/
|
||||||
|
public function essai(Request $request): JsonResponse
|
||||||
|
{
|
||||||
|
$data = $request->getContent();
|
||||||
|
$data = json_decode($data, true);
|
||||||
|
return $this->json(["message" => 'essai', 'data' => $data], 400);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Get(
|
* @Get(
|
||||||
* path = "/",
|
* path = "/",
|
||||||
@ -277,30 +293,31 @@ class PollController extends EmailsController
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Post(
|
* @Route(
|
||||||
* path = "/",
|
* "/",
|
||||||
* name = "new_poll"
|
* "_new_poll",
|
||||||
|
* methods={"POST"}
|
||||||
* )
|
* )
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
* create a new poll
|
* create a new poll
|
||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function newPollAction(Request $request): JsonResponse
|
public function newPoll(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
|
|
||||||
$data = $request->getContent();
|
$data = $request->getContent();
|
||||||
$data = json_decode($data, true);
|
$data = json_decode($data, true);
|
||||||
|
|
||||||
// search for existing custom url, which must be unique
|
// search for existing custom url, which must be unique
|
||||||
if(! isset($data) || !isset($data['custom_url'])){
|
if (!isset($data) || !isset($data['custom_url'])) {
|
||||||
return $this->json(["message"=> 'NOPE, pas de data ou de custom url'], 403 );
|
return $this->json(["message" => 'NOPE, pas de data ou de custom url'], 403);
|
||||||
}
|
}
|
||||||
$custom_url = $data['custom_url'];
|
$custom_url = $data['custom_url'];
|
||||||
|
|
||||||
$repository = $this->getDoctrine()->getRepository(Poll::class);
|
$repository = $this->getDoctrine()->getRepository(Poll::class);
|
||||||
$poll = $repository->findOneByCustomUrl($custom_url);
|
$poll = $repository->findOneByCustomUrl($custom_url);
|
||||||
if ($poll) {
|
if ($poll) {
|
||||||
return $this->json(["message"=> 'NOPE, ce sondage existe déjà: ' . $custom_url], 403 );
|
return $this->json(["message" => 'NOPE, ce sondage existe déjà: ' . $custom_url], 403);
|
||||||
}
|
}
|
||||||
|
|
||||||
$newpoll = new Poll();
|
$newpoll = new Poll();
|
||||||
@ -379,21 +396,33 @@ class PollController extends EmailsController
|
|||||||
elseif ($data['kind'] == 'date') {
|
elseif ($data['kind'] == 'date') {
|
||||||
|
|
||||||
$choices = $data['dateChoices'];
|
$choices = $data['dateChoices'];
|
||||||
$choices_debug .= 'debug count recieved' . count($choices);
|
$choices_debug .= '\n debug count recieved' . count($choices);
|
||||||
if (isset($data['hasSeveralHours']) && $data['hasSeveralHours'] == true) {
|
if (isset($data['hasSeveralHours']) && $data['hasSeveralHours'] == true) {
|
||||||
// different hours spans make more choices
|
// different hours spans make more choices
|
||||||
|
|
||||||
foreach ($choices as $c) {
|
foreach ($choices as $c) {
|
||||||
|
$choices_debug .= '\n c ' . $c['literal'];
|
||||||
$currentDate = $c['literal'];
|
$currentDate = $c['literal'];
|
||||||
$timeSlicesOfThisChoice = $c['timeSlices'];
|
$timeSlicesOfThisChoice = $c['timeSlices'];
|
||||||
foreach ($timeSlicesOfThisChoice as $t) {
|
if (count($timeSlicesOfThisChoice)) {
|
||||||
|
|
||||||
|
foreach ($timeSlicesOfThisChoice as $t) {
|
||||||
|
$choices_debug .= '\n timeSlicesOfThisChoice ' . $t['literal'];
|
||||||
$newChoice = new Choice();
|
$newChoice = new Choice();
|
||||||
$newChoice
|
$newChoice
|
||||||
->setPoll($newpoll)
|
->setPoll($newpoll)
|
||||||
->setName($currentDate . ' >>> ' . $t['literal']);
|
->setName($currentDate . ' >>> ' . $t['literal']);
|
||||||
$em->persist($newChoice);
|
|
||||||
$newpoll->addChoice($newChoice);
|
$newpoll->addChoice($newChoice);
|
||||||
|
$em->persist($newChoice);
|
||||||
|
$em->persist($newpoll);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$newChoice = new Choice();
|
||||||
|
$newChoice
|
||||||
|
->setPoll($newpoll)
|
||||||
|
->setName($currentDate);
|
||||||
|
$newpoll->addChoice($newChoice);
|
||||||
|
$em->persist($newChoice);
|
||||||
|
$em->persist($newpoll);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user