public function checkMotion(Motion $motion) { if (!$motion->getIsActive() || $motion->getEndedAt() > new \DateTime()) { return false; } $this->beginTransaction(); $votes = $this->getVotes($motion); $isApproved = $votes['positive'] > $votes['negative']; $score = round(100 - $votes[$isApproved ? 'negative' : 'positive'] / ($votes['negative'] + $votes['positive']) * 100, 2); $motion->setIsActive(false)->setIsApproved($isApproved)->setScore($score); $nbAffectedRows = $this->connection->prepareStatement('UPDATE motions SET is_active = 0, is_approved = :is_approved, score = :score WHERE id = :id', ['is_approved' => $isApproved, 'score' => $score, 'id' => $motion->getId()])->rowCount(); if ($nbAffectedRows === 0) { $this->rollback(true); } $this->commit(); return true; }