public function prepareUserBookEvents(UserBook $oldUserBook, UserBookForm $newUserBook) { $userEvents = array(); try { if ($oldUserBook->getRating() != $newUserBook->getRating()) { $userEvent = new \Sb\Db\Model\UserEvent(); $userEvent->setItem_id($oldUserBook->getId()); $userEvent->setUser($oldUserBook->getUser()); $userEvent->setNew_value($newUserBook->getRating()); $userEvent->setOld_value($oldUserBook->getRating()); $userEvent->setType_id(\Sb\Entity\EventTypes::USERBOOK_RATING_CHANGE); $userEvents[] = $userEvent; } if ($oldUserBook->getIsBlowOfHeart() != $newUserBook->getIsBlowOfHeart()) { $userEvent = new \Sb\Db\Model\UserEvent(); $userEvent->setItem_id($oldUserBook->getId()); $userEvent->setUser($oldUserBook->getUser()); $userEvent->setNew_value($newUserBook->getIsBlowOfHeart()); $userEvent->setOld_value($oldUserBook->getIsBlowOfHeart()); $userEvent->setType_id(\Sb\Entity\EventTypes::USERBOOK_BLOWOFHEART_CHANGE); $userEvents[] = $userEvent; } if ($oldUserBook->getHyperlink() != $newUserBook->getHyperLink()) { $userEvent = new \Sb\Db\Model\UserEvent(); $userEvent->setItem_id($oldUserBook->getId()); $userEvent->setUser($oldUserBook->getUser()); // Removing http:// or https:// from url $newHyperlink = str_replace("http://", "", $newUserBook->getHyperLink()); $newHyperlink = str_replace("https://", "", $newHyperlink); $userEvent->setNew_value($newHyperlink); $userEvent->setOld_value($oldUserBook->getHyperlink()); $userEvent->setType_id(\Sb\Entity\EventTypes::USERBOOK_HYPERLINK_CHANGE); $userEvents[] = $userEvent; } $oldReadingStateId = $oldUserBook->getReadingState() ? $oldUserBook->getReadingState()->getId() : -1; if ($oldReadingStateId != $newUserBook->getReadingStateId()) { $userEvent = new \Sb\Db\Model\UserEvent(); $userEvent->setItem_id($oldUserBook->getId()); $userEvent->setUser($oldUserBook->getUser()); $userEvent->setNew_value($newUserBook->getReadingStateId()); $userEvent->setOld_value($oldUserBook->getReadingState() ? $oldUserBook->getReadingState()->getId() : null); $userEvent->setType_id(\Sb\Entity\EventTypes::USERBOOK_READINGSTATE_CHANGE); $userEvents[] = $userEvent; } if ($oldUserBook->getReview() != $newUserBook->getReview()) { $userEvent = new \Sb\Db\Model\UserEvent(); $userEvent->setItem_id($oldUserBook->getId()); $userEvent->setUser($oldUserBook->getUser()); $userEvent->setNew_value($newUserBook->getReview()); $userEvent->setOld_value($oldUserBook->getReview()); $userEvent->setType_id(\Sb\Entity\EventTypes::USERBOOK_REVIEW_CHANGE); $userEvents[] = $userEvent; } if ($oldUserBook->getIsWished() != $newUserBook->getIsWished()) { $userEvent = new \Sb\Db\Model\UserEvent(); $userEvent->setItem_id($oldUserBook->getId()); $userEvent->setUser($oldUserBook->getUser()); $userEvent->setNew_value($newUserBook->getIsWished()); $userEvent->setOld_value($oldUserBook->getIsWished()); $userEvent->setType_id(\Sb\Entity\EventTypes::USERBOOK_WISHEDSTATE_CHANGE); $userEvents[] = $userEvent; } } catch (\Exception $exc) { Trace::addItem("Une erreur s'est produite lors de la préparation des événements liés au userbook"); } return $userEvents; }
public function submitAction() { try { /* @var $globalContext \Sb\Context\Model\Context */ $globalContext = new \Sb\Context\Model\Context(); /* @var $user Sb\Db\Model\User */ $user = $globalContext->getConnectedUser(); // getting form data $userBookForm = new UserBookForm($_POST); // getting userbook in DB $userBook = UserBookDao::getInstance()->get($userBookForm->getId()); // Getting the events related to the userbook changes $userEvents = UserEventSvc::getInstance()->prepareUserBookEvents($userBook, $userBookForm); // On vérifit la correspondance du user if ($user->getId() != $userBook->getUser()->getId()) { Flash::addItem(__("Le livre que vous souhaitez éditer ne correspond pas à l'utilisateur connecté.", "share1book")); HTTPHelper::redirectToLibrary(); } // updating userbook members $userBook->setReview($userBookForm->getReview()); $userBook->setIsBlowOfHeart($userBookForm->getIsBlowOfHeart()); $userBook->setIsOwned($userBookForm->getIsOwned()); $userBook->setIsWished($userBookForm->getIsWished()); $userBook->setRating($userBookForm->getRating()); $userBook->setNb_of_pages($userBookForm->getNb_of_pages()); $userBook->setNb_of_pages_read($userBookForm->getNb_of_pages_read()); $readingState = ReadingStateDao::getInstance()->get($userBookForm->getReadingStateId()); if ($userBookForm->getReadingDate()) { $userBook->setReadingDate($userBookForm->getReadingDate()); } $userBook->setReadingState($readingState); $userBook->setHyperlink($userBookForm->getHyperLink()); if ($userBookForm->getTags()) { $tags = new \Doctrine\Common\Collections\ArrayCollection(); foreach ($userBookForm->getTags() as $tagId) { $tag = TagDao::getInstance()->get($tagId); $tags->add($tag); } $userBook->setTags($tags); } // Mise à jour du UserBook if (UserBookDao::getInstance()->update($userBook)) { // persisting the userevent related to the userbook changes UserEventSvc::getInstance()->persistAll($userEvents); // Add review as chronicle if ($this->_reviewIsModified($userEvents) && $user->IsBlogger()) { ChronicleSvc::getInstance()->addOrUpdateFromUserBook($userBook); } Flash::addItem(sprintf(__('Le livre "%s" a été mis à jour.', "s1b"), urldecode($userBook->getBook()->getTitle()))); } else { Flash::addItem(__('Une erreur s\'est produite lors de la mise à jour de votre fiche de lecture', 's1b')); } $referer = ArrayHelper::getSafeFromArray($_POST, "referer", null); if ($referer) { HTTPHelper::redirectToUrl($referer); } else { HTTPHelper::redirectToLibrary(); } } catch (\Exception $e) { Trace::addItem(sprintf("Une erreur s'est produite dans \"%s->%s\", MESSAGE : %s , TRACE : %s\"", get_class(), __FUNCTION__, $e->getMessage(), $e->getTraceAsString())); $this->forward("error", "error", "default"); } }