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();
}
}
}
$commenter = $this->findOneBy(array('email' => $p_values['email'], 'name' => $p_values['name']));
if ($commenter) {
$p_entity = $commenter;
}
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;
}