getParameter( 'UNIQ_INSTALL_KEY' ) ) { return new JsonResponse( [ 'error' => 'NOPE! veuillez vérifier votre fichier .env', ] ); }; // fetch old Database $debug = ''; $em = $this->getDoctrine()->getManager(); $pollsBySlug = []; $pdo_options[ \PDO::ATTR_ERRMODE ] = \PDO::ERRMODE_EXCEPTION; $bdd = new \PDO( 'mysql:host=localhost;dbname=' . $this->getParameter( 'OLD_DATABASE_NAME' ), $this->getParameter( 'OLD_DATABASE_USER' ), $this->getParameter( 'OLD_DATABASE_PASS' ), $pdo_options ); $res_polls = $bdd->query( 'SELECT * FROM fd_poll' ); while ( $d = $res_polls->fetch( \PDO::FETCH_OBJ ) ) { $debug .= "
ajout de sondage : ".$d->title .' - '. $d->id ; $newPoll = new Poll(); $owner = new Owner(); $owner->setEmail( $d->admin_mail ) ->setPseudo( $d->admin_name ) ->addPoll($newPoll); $newPoll ->setOwner( $owner ) ->setCustomURL( $d->id ) ->setKind( $d->id === 'D' ? 'date' : 'text' ) ->setHideResults( ! $d->results_publicly_visible ) ->setAdminKey( $d->admin_id ) ->setTitle( $d->title ) ->setVotesAllowed( $d->receiveNewVotes ) ->setCommentsAllowed( $d->receiveNewComments ) ->setChoicesMax( $d->ValueMax ) ->setPassword( $d->password_hash ) ->setDescription( $d->description ) ->setCreationDate( date_create( $d->creation_date ) ); $pollsBySlug[ $d->id ] = $newPoll; $em->persist( $owner ); $em->persist( $newPoll ); } // get choices, slots and link them with poll by their slug $res_slots = $bdd->query( 'SELECT * FROM fd_slot' ); $pollChoicesOrderedBySlug = []; $choicesCreated = []; while ( $d = $res_slots->fetch( \PDO::FETCH_OBJ ) ) { $debug .= "
ajout de slot, converti en choix de réponse : ".$d->poll_id. ' : '. $d->moments; $pollSlug = $d->poll_id; $poll = $pollsBySlug[$pollSlug]; $moments = explode(',' , $d->moments); foreach ( $moments as $moment ) { $newChoice = new Choice(); $newChoice ->setPoll($poll) ->setDateTime(date_create( strtotime( $d->title))) ->setName($moment); $pollChoicesOrderedBySlug[$pollSlug][] = $newChoice; $poll->addChoice($newChoice); $em->persist( $newChoice ); $em->persist( $newPoll ); $choicesCreated[] = $newChoice; } } // get votes $stacksOfVote = []; $res_votes = $bdd->query( 'SELECT * FROM fd_vote' ); while ( $d = $res_votes->fetch( \PDO::FETCH_OBJ ) ) { $debug .= "
ajout de stack de vote : ".$d->name; $pollSlug = $d->poll_id; $poll = $pollsBySlug[ $pollSlug ]; $newStack = new StackOfVotes(); $newOwner = new Owner(); $newOwner ->setPseudo($d->name) ->setEmail('the_anonymous_email_from_@_migration_offramadate.org') ->setModifierToken($d->uniqId) ; $newStack->setPoll($poll) ->setOwner($newOwner) ->setPseudo($d->name) ; // each choice answer is encoded in a value : $voteCodes = str_split($d->choices); // get choices of the poll and answer accordingly $ii=0; foreach ( $voteCodes as $vote_code ) { if($vote_code !== ' '){ $choice = $pollChoicesOrderedBySlug[$pollSlug][$ii]; $newVote = new Vote(); $newVote ->setChoice($choice) ->setStacksOfVotes($newStack) ->setPoll($poll) ->setValue( $this->mapAnswerNumberToWord($vote_code)) ; $newStack->addVote($newVote); $em->persist( $newVote ); $votes[] = $newVote; } $ii++; } $poll->addStackOfVote($newStack); $em->persist( $newStack ); $stacksOfVote[] = $newStack; } $comments = []; $res_comments = $bdd->query( 'SELECT * FROM fd_comment' ); while ( $d = $res_comments->fetch( \PDO::FETCH_OBJ ) ) { $debug .= "
ajout de commentaire : ".$d->name. ' '. $d->comment; $pollSlug = $d->poll_id; $poll = $pollsBySlug[ $pollSlug ]; $newComment = new Comment(); $poll->addComment($newComment); $newComment->setPoll($poll) ->setCreatedAt( date_create($d->date)) ->setText( $d->comment) // TODO update entities ->setPseudo( $d->name); $em->persist( $newComment ); $comments[] = $newComment; } // gather objects // create new polls $em->flush(); // success // failure notice $debug .= "

ça c'est fait. "; return $this->render('pages/migration.html.twig' , [ "message" => "welcome to the framadate migration endpoint, it has yet to be done", "debug" => $debug, "OLD_DATABASE_NAME" => $this->getParameter( 'OLD_DATABASE_NAME' ), "OLD_DATABASE_USER" => $this->getParameter( 'OLD_DATABASE_USER' ), "counters" =>[ 'polls' => count($pollsBySlug), 'comments' => count($comments), 'choices' => count($choicesCreated), 'stacks_of_votes' => count($stacksOfVote), 'votes' => count($votes), ] ]); } /** * @param $numberToConvert * conversion of answer: * space character : no answer, 0 : no , 1 : maybe , 2 : yes * @return string */ public function mapAnswerNumberToWord($numberToConvert){ $word = ''; switch ($numberToConvert){ case 0: $word = 'no'; break; case 1: $word = 'maybe'; break; case 2: $word = 'yes'; break; default: $word = 'no'; } return $word; } }