/** * Method for geting a commenter * * @param Newscoop\Entity\Comment\Commenter $p_entity * @param array $p_values * @return Newscoop\Entity\Comment\Commenter $p_entity */ public function save($p_entity, array $p_values) { $keys = array('user', 'name', 'email'); $set = false; for ($i = 0; $i < count($keys); $i++) { $set = $set || isset($p_values[$keys[$i]]) && !empty($p_values[$keys[$i]]); } if (!$set) { throw new InvalidArgumentException(); } $em = $this->getEntityManager(); if (!empty($p_values['user'])) { if (is_numeric($p_values['user'])) { $userRepository = $em->getRepository('Newscoop\\Entity\\User'); $p_values['user'] = $userRepository->find($p_values['user']); } if ($p_values['user']) { $p_entity->setUser($p_values['user']); if (empty($p_values['name'])) { $p_values['name'] = $p_values['user']->getName(); } if (empty($p_values['email'])) { $p_values['email'] = $p_values['user']->getEmail(); } } } $commenters = $this->findBy(array('email' => $p_values['email'], 'name' => $p_values['name'])); if (count($commenters) == 1) { $p_entity = $commenters[0]; } /* $acceptanceRepository = $em->getRepository('Newscoop\Entity\Comment\Acceptance'); $acceptanceRepository->isBanned($p_entity); */ if (!isset($p_values['url'])) { $p_values['url'] = ''; } $p_entity->setName($p_values['name'])->setEmail($p_values['email'])->setUrl($p_values['url'])->setIp($p_values['ip'])->setTimeCreated($p_values['time_created']); $em->persist($p_entity); return $p_entity; }
/** * Delete a commenter * * @param Newscoop\Entity\Comment\Commenter $p_commenter * @param array $p_values * @return void */ public function delete(Commenter $p_commenter, $p_values) { $em = $this->getEntityManager(); $q = $em->createQueryBuilder(); /** @todo have inverse cascade delete or somethig for this */ $q->select("cc")->from('Newscoop\\Entity\\Comment\\Commenter', 'cc')->where('cc.id = :id')->setParameter('id', $p_commenter->getId()); if (!empty($p_values['name'])) { $q->orWhere('cc.name = :name')->setParameter('name', $p_commenter->getName()); } if (!empty($p_values['ip'])) { $q->orWhere('cc.ip = :ip')->setParameter('ip', $p_commenter->getIp()); } if (!empty($p_values['email'])) { $q->orWhere('cc.email = :email')->setParameter('email', $p_commenter->getEmail()); } $commenters = $q->getQuery()->getResult(); foreach ($commenters as $commenter) { $qq = $em->createQueryBuilder(); $qq->delete()->from('Newscoop\\Entity\\Comment', 'c')->where('c.commenter = :commenter')->setParameter('commenter', $commenter->getId()); $qq->getQuery()->execute(); $em->remove($commenter); } }
/** * Method that save banned for a commenter * * @param Commenter $p_commenter */ public function saveBanned(Commenter $p_commenter, $p_forum, $p_values) { $unban = array(); $ban = array(); if ($p_values['name']) { $ban['name'] = $p_commenter->getName(); } else { $unban['name'] = $p_commenter->getName(); } if ($p_values['email']) { $ban['email'] = $p_commenter->getEmail(); } else { $unban['email'] = $p_commenter->getEmail(); } if ($p_values['ip']) { $ban['ip'] = $p_commenter->getIp(); } else { $unban['ip'] = $p_commenter->getIp(); } $this->ban($p_forum, $ban); $this->unban($p_forum, $unban); }
public function __toString() { $this->__load(); return parent::__toString(); }