prevent changing users email address and phone numbers for non admins

This commit is contained in:
yuri
2016-07-21 13:07:13 +03:00
parent 35cfb1a480
commit eca6408415
2 changed files with 86 additions and 20 deletions
+35 -16
View File
@@ -33,6 +33,12 @@ use Espo\ORM\Entity;
class EmailAddress extends \Espo\Core\ORM\Repositories\RDB
{
protected function init()
{
parent::init();
$this->addDependency('user');
}
public function getIdListFormAddressList(array $arr = [])
{
return $this->getIds($arr);
@@ -117,6 +123,15 @@ class EmailAddress extends \Espo\Core\ORM\Repositories\RDB
WHERE
entity_email_address.email_address_id = ".$pdo->quote($emailAddressId)." AND
entity_email_address.deleted = 0
";
if ($entityType) {
$sql .= "
AND entity_email_address.entity_type = " . $pdo->quote($entityType) . "
";
}
$sql .= "
ORDER BY entity_email_address.primary DESC, FIELD(entity_email_address.entity_type, 'User', 'Contact', 'Lead', 'Account')
";
@@ -124,11 +139,6 @@ class EmailAddress extends \Espo\Core\ORM\Repositories\RDB
$sth->execute();
while ($row = $sth->fetch()) {
if (!empty($row['entityType']) && !empty($row['entityId'])) {
if (!empty($entityType)) {
if ($entityType != $row['entityType']) {
continue;
}
}
$entity = $this->getEntityManager()->getEntity($row['entityType'], $row['entityId']);
if ($entity) {
return $entity;
@@ -154,6 +164,12 @@ class EmailAddress extends \Espo\Core\ORM\Repositories\RDB
entity_email_address.deleted = 0
";
if ($entityType) {
$sql .= "
AND entity_email_address.entity_type = " . $pdo->quote($entityType) . "
";
}
$sql .= "
ORDER BY FIELD(entity_email_address.entity_type, ".join(',', array_reverse($a)).") DESC, entity_email_address.primary DESC
";
@@ -162,11 +178,6 @@ class EmailAddress extends \Espo\Core\ORM\Repositories\RDB
$sth->execute();
while ($row = $sth->fetch()) {
if (!empty($row['entityType']) && !empty($row['entityId'])) {
if (!empty($entityType)) {
if ($entityType != $row['entityType']) {
continue;
}
}
$entity = $this->getEntityManager()->getEntity($row['entityType'], $row['entityId']);
if ($entity) {
return $entity;
@@ -278,12 +289,20 @@ class EmailAddress extends \Espo\Core\ORM\Repositories\RDB
foreach ($toUpdate as $address) {
$emailAddress = $this->getByAddress($address);
if ($emailAddress) {
$emailAddress->set(array(
'optOut' => $hash[$address]['optOut'],
'invalid' => $hash[$address]['invalid'],
'name' => $hash[$address]['emailAddress']
));
$this->save($emailAddress);
$skipSave = false;
if (!$this->getInjection('user')->isAdmin()) {
if ($this->getEntityByAddressId($emailAddress->id, 'User')) {
$skipSave = true;
}
}
if (!$skipSave) {
$emailAddress->set(array(
'optOut' => $hash[$address]['optOut'],
'invalid' => $hash[$address]['invalid'],
'name' => $hash[$address]['emailAddress']
));
$this->save($emailAddress);
}
}
}
+51 -4
View File
@@ -33,6 +33,12 @@ use Espo\ORM\Entity;
class PhoneNumber extends \Espo\Core\ORM\Repositories\RDB
{
protected function init()
{
parent::init();
$this->addDependency('user');
}
public function getIds($arr = array())
{
$ids = array();
@@ -102,6 +108,39 @@ class PhoneNumber extends \Espo\Core\ORM\Repositories\RDB
return $this->where(array('name' => $number))->findOne();
}
public function getEntityByPhoneNumberId($phoneNumberId, $entityType = null)
{
$pdo = $this->getEntityManager()->getPDO();
$sql = "
SELECT entity_phone_number.entity_type AS 'entityType', entity_phone_number.entity_id AS 'entityId'
FROM entity_phone_number
WHERE
entity_phone_number.phone_number_id = ".$pdo->quote($phoneNumberId)." AND
entity_phone_number.deleted = 0
";
if ($entityType) {
$sql .= "
AND entity_phone_number.entity_type = " . $pdo->quote($entityType) . "
";
}
$sql .= "
ORDER BY entity_phone_number.primary DESC, FIELD(entity_phone_number.entity_type, 'User', 'Contact', 'Lead', 'Account')
";
$sth = $pdo->prepare($sql);
$sth->execute();
while ($row = $sth->fetch()) {
if (!empty($row['entityType']) && !empty($row['entityId'])) {
$entity = $this->getEntityManager()->getEntity($row['entityType'], $row['entityId']);
if ($entity) {
return $entity;
}
}
}
}
public function storeEntityPhoneNumber(Entity $entity)
{
$phoneNumberValue = trim($entity->get('phoneNumber'));
@@ -197,10 +236,18 @@ class PhoneNumber extends \Espo\Core\ORM\Repositories\RDB
foreach ($toUpdate as $number) {
$phoneNumber = $this->getByNumber($number);
if ($phoneNumber) {
$phoneNumber->set(array(
'type' => $hash[$number]['type'],
));
$this->save($phoneNumber);
$skipSave = false;
if (!$this->getInjection('user')->isAdmin()) {
if ($this->getEntityByPhoneNumberId($phoneNumber->id, 'User')) {
$skipSave = true;
}
}
if (!$skipSave) {
$phoneNumber->set(array(
'type' => $hash[$number]['type'],
));
$this->save($phoneNumber);
}
}
}