Select Managers changes and Email changes
This commit is contained in:
@@ -52,6 +52,11 @@ class Base
|
||||
$this->metadata = $metadata;
|
||||
}
|
||||
|
||||
protected function getUser()
|
||||
{
|
||||
return $this->user;
|
||||
}
|
||||
|
||||
public function setEntityName($entityName)
|
||||
{
|
||||
$this->entityName = $entityName;
|
||||
@@ -112,12 +117,10 @@ class Base
|
||||
if (!empty($p)) {
|
||||
$params['where'][] = $p;
|
||||
}
|
||||
$this->boolFilter($filter, $result);
|
||||
}
|
||||
} else if ($item['type'] == 'textFilter' && !empty($item['value'])) {
|
||||
if (!empty($item['value'])) {
|
||||
if (empty($result['whereClause'])) {
|
||||
$result['whereClause'] = array();
|
||||
}
|
||||
$fieldDefs = $this->getSeed()->getFields();
|
||||
$fieldList = $this->getTextFilterFields();
|
||||
$d = array();
|
||||
@@ -191,17 +194,13 @@ class Base
|
||||
|
||||
}
|
||||
|
||||
$result['whereClause'] = $where;
|
||||
$result['whereClause'] = array_merge($result['whereClause'], $where);
|
||||
}
|
||||
}
|
||||
|
||||
protected function q($params, &$result)
|
||||
{
|
||||
if (!empty($params['q'])) {
|
||||
if (empty($result['whereClause'])) {
|
||||
$result['whereClause'] = array();
|
||||
}
|
||||
|
||||
$fieldDefs = $this->getSeed()->getFields();
|
||||
|
||||
$value = $params['q'];
|
||||
@@ -229,33 +228,34 @@ class Base
|
||||
protected function access(&$result)
|
||||
{
|
||||
if ($this->acl->checkReadOnlyOwn($this->entityName)) {
|
||||
|
||||
if (!array_key_exists('whereClause', $result)) {
|
||||
$result['whereClause'] = array();
|
||||
}
|
||||
$result['whereClause']['assignedUserId'] = $this->user->id;
|
||||
$this->accessOnlyOwn($result);
|
||||
}
|
||||
if (!$this->user->isAdmin() && $this->acl->checkReadOnlyTeam($this->entityName)) {
|
||||
if (!array_key_exists('whereClause', $result)) {
|
||||
$result['whereClause'] = array();
|
||||
}
|
||||
$result['distinct'] = true;
|
||||
if (!array_key_exists('joins', $result)) {
|
||||
$result['joins'] = array();
|
||||
}
|
||||
if (!in_array('teams', $result['joins'])) {
|
||||
$result['leftJoins'][] = 'teams';
|
||||
}
|
||||
|
||||
$result['whereClause'][] = array(
|
||||
'OR' => array(
|
||||
'Team.id' => $this->user->get('teamsIds'),
|
||||
'assignedUserId' => $this->user->id
|
||||
)
|
||||
);
|
||||
$this->accessOnlyTeam($result);
|
||||
}
|
||||
}
|
||||
|
||||
protected function accessOnlyOwn(&$result)
|
||||
{
|
||||
$result['whereClause'][] = array(
|
||||
'assignedUserId' => $this->getUser()->id
|
||||
);
|
||||
}
|
||||
|
||||
protected function accessOnlyTeam(&$result)
|
||||
{
|
||||
$result['distinct'] = true;
|
||||
if (!in_array('teams', $result['joins'])) {
|
||||
$result['leftJoins'][] = 'teams';
|
||||
}
|
||||
$result['whereClause'][] = array(
|
||||
'OR' => array(
|
||||
'Team.id' => $this->user->get('teamsIds'),
|
||||
'assignedUserId' => $this->getUser()->id
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public function getAclParams()
|
||||
{
|
||||
$result = array();
|
||||
@@ -265,7 +265,11 @@ class Base
|
||||
|
||||
public function getSelectParams(array $params, $withAcl = false)
|
||||
{
|
||||
$result = array();
|
||||
$result = array(
|
||||
'joins' => array(),
|
||||
'leftJoins' => array(),
|
||||
'whereClause' => array()
|
||||
);
|
||||
|
||||
$this->order($params, $result);
|
||||
$this->limit($params, $result);
|
||||
@@ -411,6 +415,14 @@ class Base
|
||||
return $part;
|
||||
}
|
||||
|
||||
protected function boolFilter($filterName, &$result)
|
||||
{
|
||||
$method = 'boolFilter' . ucfirst($filterName);
|
||||
if (method_exists($this, $method)) {
|
||||
$this->$method($result);
|
||||
}
|
||||
}
|
||||
|
||||
protected function getBoolFilterWhere($filterName)
|
||||
{
|
||||
$method = 'getBoolFilterWhere' . ucfirst($filterName);
|
||||
@@ -419,12 +431,10 @@ class Base
|
||||
}
|
||||
}
|
||||
|
||||
protected function getBoolFilterWhereOnlyMy()
|
||||
protected function boolFilterOnlyMy(&$result)
|
||||
{
|
||||
return array(
|
||||
'type' => 'equals',
|
||||
'field' => 'assignedUserId',
|
||||
'value' => $this->user->id,
|
||||
$result['whereClause'][] = array(
|
||||
'assignedUserId' => $this->getUser()->id
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,19 +18,19 @@
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
|
||||
************************************************************************/
|
||||
************************************************************************/
|
||||
|
||||
namespace Espo\Modules\Crm\SelectManagers;
|
||||
|
||||
class Call extends \Espo\Core\SelectManagers\Base
|
||||
{
|
||||
|
||||
protected function getBoolFilterWhereOnlyMy()
|
||||
{
|
||||
return array(
|
||||
'type' => 'linkedWith',
|
||||
'field' => 'users',
|
||||
'value' => array($this->user->id)
|
||||
protected function boolFilterOnlyMy(&$result)
|
||||
{
|
||||
if (!in_array('users', $result['joins'])) {
|
||||
$result['joins'][] = 'users';
|
||||
}
|
||||
$result['whereClause'][] = array(
|
||||
'user.id' => $this->getUser()->id
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,19 +18,19 @@
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
|
||||
************************************************************************/
|
||||
************************************************************************/
|
||||
|
||||
namespace Espo\Modules\Crm\SelectManagers;
|
||||
|
||||
class Meeting extends \Espo\Core\SelectManagers\Base
|
||||
{
|
||||
|
||||
protected function getBoolFilterWhereOnlyMy()
|
||||
{
|
||||
return array(
|
||||
'type' => 'linkedWith',
|
||||
'field' => 'users',
|
||||
'value' => array($this->user->id)
|
||||
protected function boolFilterOnlyMy(&$result)
|
||||
{
|
||||
if (!in_array('users', $result['joins'])) {
|
||||
$result['joins'][] = 'users';
|
||||
}
|
||||
$result['whereClause'][] = array(
|
||||
'user.id' => $this->getUser()->id
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,22 +24,17 @@ namespace Espo\Modules\Crm\SelectManagers;
|
||||
|
||||
class Task extends \Espo\Core\SelectManagers\Base
|
||||
{
|
||||
|
||||
protected function getBoolFilterWhereActive()
|
||||
{
|
||||
return array(
|
||||
'type' => 'notIn',
|
||||
'field' => 'status',
|
||||
'value' => array('Completed', 'Canceled')
|
||||
protected function boolFilterActive(&$result)
|
||||
{
|
||||
$result['whereClause'][] = array(
|
||||
'status!=' => array('Completed', 'Canceled')
|
||||
);
|
||||
}
|
||||
|
||||
protected function getBoolFilterWhereInactive()
|
||||
{
|
||||
return array(
|
||||
'type' => 'in',
|
||||
'field' => 'status',
|
||||
'value' => array('Completed', 'Canceled')
|
||||
|
||||
protected function boolFilterInative(&$result)
|
||||
{
|
||||
$result['whereClause'][] = array(
|
||||
'status' => array('Completed', 'Canceled')
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -173,10 +173,12 @@ class Base
|
||||
}
|
||||
|
||||
if (empty($params['aggregation'])) {
|
||||
return $this->composeSelectQuery($this->toDb($entity->getEntityName()), $selectPart, $joinsPart, $wherePart, $orderPart, $params['offset'], $params['limit'], $params['distinct'], null, $groupByPart);
|
||||
$sql = $this->composeSelectQuery($this->toDb($entity->getEntityName()), $selectPart, $joinsPart, $wherePart, $orderPart, $params['offset'], $params['limit'], $params['distinct'], null, $groupByPart);
|
||||
} else {
|
||||
return $this->composeSelectQuery($this->toDb($entity->getEntityName()), $selectPart, $joinsPart, $wherePart, null, null, null, false, $params['aggregation']);
|
||||
$sql = $this->composeSelectQuery($this->toDb($entity->getEntityName()), $selectPart, $joinsPart, $wherePart, null, null, null, false, $params['aggregation']);
|
||||
}
|
||||
|
||||
return $sql;
|
||||
}
|
||||
|
||||
protected function getFunctionPart($function, $part, $entityName, $distinct = false)
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
|
||||
************************************************************************/
|
||||
************************************************************************/
|
||||
|
||||
namespace Espo\Repositories;
|
||||
|
||||
@@ -29,39 +29,69 @@ class Email extends \Espo\Core\ORM\Repositories\RDB
|
||||
protected function prepareAddressess(Entity $entity, $type)
|
||||
{
|
||||
$eaRepositoty = $this->getEntityManager()->getRepository('EmailAddress');
|
||||
|
||||
|
||||
$address = $entity->get($type);
|
||||
$ids = array();
|
||||
if (!empty($address) || !filter_var($address, FILTER_VALIDATE_EMAIL)) {
|
||||
$arr = array_map(function ($e) {
|
||||
return trim($e);
|
||||
}, explode(';', $address));
|
||||
|
||||
|
||||
$ids = $eaRepositoty->getIds($arr);
|
||||
foreach ($ids as $id) {
|
||||
$this->setUsersIdsByEmailAddressId($entity, $id);
|
||||
}
|
||||
}
|
||||
$entity->set($type . 'EmailAddressesIds', $ids);
|
||||
}
|
||||
|
||||
|
||||
protected function setUsersIdsByEmailAddressId(Entity $entity, $emailAddressId)
|
||||
{
|
||||
$user = $this->getEntityManager()->getRepository('EmailAddress')->getEntityByAddressId($emailAddressId, 'User');
|
||||
if ($user) {
|
||||
$usersIds = $entity->get('usersIds');
|
||||
if (empty($usersIds)) {
|
||||
$usersIds = array();
|
||||
}
|
||||
if (!in_array($user->id, $usersIds)) {
|
||||
$usersIds[] = $user->id;
|
||||
}
|
||||
$entity->set('usersIds', $usersIds);
|
||||
}
|
||||
}
|
||||
|
||||
protected function beforeSave(Entity $entity)
|
||||
{
|
||||
$eaRepositoty = $this->getEntityManager()->getRepository('EmailAddress');
|
||||
|
||||
|
||||
$entity->set('usersIds', array());
|
||||
|
||||
$from = trim($entity->get('from'));
|
||||
if (!empty($from)) {
|
||||
$ids = $eaRepositoty->getIds(array($from));
|
||||
if (!empty($ids)) {
|
||||
$entity->set('fromEmailAddressId', $ids[0]);
|
||||
$this->setUsersIdsByEmailAddressId($entity, $ids[0]);
|
||||
}
|
||||
} else {
|
||||
$entity->set('fromEmailAddressId', null);
|
||||
}
|
||||
|
||||
|
||||
$this->prepareAddressess($entity, 'to');
|
||||
$this->prepareAddressess($entity, 'cc');
|
||||
$this->prepareAddressess($entity, 'bcc');
|
||||
|
||||
|
||||
$usersIds = $entity->get('usersIds');
|
||||
$assignedUserId = $entity->get('assignedUserId');
|
||||
|
||||
if (!empty($assignedUserId) && !in_array($assignedUserId, $usersIds)) {
|
||||
$usersIds[] = $assignedUserId;
|
||||
}
|
||||
$entity->set('usersIds', $usersIds);
|
||||
|
||||
parent::beforeSave($entity);
|
||||
|
||||
|
||||
|
||||
$parentId = $entity->get('parentId');
|
||||
$parentType = $entity->get('parentType');
|
||||
if (!empty($parentId) || !empty($parentType)) {
|
||||
@@ -80,7 +110,7 @@ class Email extends \Espo\Core\ORM\Repositories\RDB
|
||||
// TODO find account by from address
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected function beforeRemove(Entity $entity)
|
||||
{
|
||||
parent::beforeRemove($entity);
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
|
||||
************************************************************************/
|
||||
************************************************************************/
|
||||
|
||||
namespace Espo\Repositories;
|
||||
|
||||
@@ -27,8 +27,8 @@ use Espo\ORM\Entity;
|
||||
class EmailAddress extends \Espo\Core\ORM\Repositories\RDB
|
||||
{
|
||||
public function getIds($arr = array())
|
||||
{
|
||||
$ids = array();
|
||||
{
|
||||
$ids = array();
|
||||
if (!empty($arr)) {
|
||||
$a = array_map(function ($item) {
|
||||
return strtolower($item);
|
||||
@@ -58,20 +58,20 @@ class EmailAddress extends \Espo\Core\ORM\Repositories\RDB
|
||||
}
|
||||
return $ids;
|
||||
}
|
||||
|
||||
|
||||
public function getEmailAddressData(Entity $entity)
|
||||
{
|
||||
$data = array();
|
||||
|
||||
$pdo = $this->getEntityManager()->getPDO();
|
||||
|
||||
$pdo = $this->getEntityManager()->getPDO();
|
||||
$sql = "
|
||||
SELECT email_address.name, email_address.invalid, email_address.opt_out AS optOut, entity_email_address.primary
|
||||
SELECT email_address.name, email_address.invalid, email_address.opt_out AS optOut, entity_email_address.primary
|
||||
FROM entity_email_address
|
||||
JOIN email_address ON email_address.id = entity_email_address.email_address_id AND email_address.deleted = 0
|
||||
WHERE
|
||||
entity_email_address.entity_id = ".$pdo->quote($entity->id)." AND
|
||||
entity_email_address.entity_type = ".$pdo->quote($entity->getEntityName())." AND
|
||||
entity_email_address.deleted = 0
|
||||
WHERE
|
||||
entity_email_address.entity_id = ".$pdo->quote($entity->id)." AND
|
||||
entity_email_address.entity_type = ".$pdo->quote($entity->getEntityName())." AND
|
||||
entity_email_address.deleted = 0
|
||||
ORDER BY entity_email_address.primary DESC
|
||||
";
|
||||
$sth = $pdo->prepare($sql);
|
||||
@@ -82,27 +82,56 @@ class EmailAddress extends \Espo\Core\ORM\Repositories\RDB
|
||||
$obj->emailAddress = $row['name'];
|
||||
$obj->primary = ($row['primary'] == '1') ? true : false;
|
||||
$obj->optOut = ($row['optOut'] == '1') ? true : false;
|
||||
$obj->invalid = ($row['invalid'] == '1') ? true : false;
|
||||
$obj->invalid = ($row['invalid'] == '1') ? true : false;
|
||||
$data[] = $obj;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
public function getByAddress($address)
|
||||
{
|
||||
return $this->where(array('lower' => strtolower($address)))->findOne();
|
||||
}
|
||||
|
||||
public function getEntityByAddress($address)
|
||||
|
||||
public function getEntityByAddressId($emailAddressId, $entityType = null)
|
||||
{
|
||||
$pdo = $this->getEntityManager()->getPDO();
|
||||
$pdo = $this->getEntityManager()->getPDO();
|
||||
$sql = "
|
||||
SELECT entity_email_address.entity_type AS 'entityType', entity_email_address.entity_id AS 'entityId'
|
||||
FROM entity_email_address
|
||||
WHERE
|
||||
entity_email_address.email_address_id = ".$pdo->quote($emailAddressId)." AND
|
||||
entity_email_address.deleted = 0
|
||||
ORDER BY entity_email_address.primary DESC, FIELD(entity_email_address.entity_type, 'User', 'Contact', 'Lead', 'Account')
|
||||
";
|
||||
|
||||
$sth = $pdo->prepare($sql);
|
||||
$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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function getEntityByAddress($address, $entityType = null)
|
||||
{
|
||||
$pdo = $this->getEntityManager()->getPDO();
|
||||
$sql = "
|
||||
SELECT entity_email_address.entity_type AS 'entityType', entity_email_address.entity_id AS 'entityId'
|
||||
FROM entity_email_address
|
||||
JOIN email_address ON email_address.id = entity_email_address.email_address_id AND email_address.deleted = 0
|
||||
WHERE
|
||||
WHERE
|
||||
email_address.lower = ".$pdo->quote(strtolower($address))." AND
|
||||
entity_email_address.deleted = 0
|
||||
ORDER BY entity_email_address.primary DESC, FIELD(entity_email_address.entity_type, 'User', 'Contact', 'Lead', 'Account')
|
||||
@@ -112,6 +141,11 @@ 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;
|
||||
@@ -119,24 +153,24 @@ class EmailAddress extends \Espo\Core\ORM\Repositories\RDB
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function storeEntityEmailAddress(Entity $entity)
|
||||
{
|
||||
$email = trim($entity->get('emailAddress'));
|
||||
$emailAddressData = null;
|
||||
|
||||
|
||||
if ($entity->has('emailAddressData')) {
|
||||
$emailAddressData = $entity->get('emailAddressData');
|
||||
}
|
||||
|
||||
$pdo = $this->getEntityManager()->getPDO();
|
||||
|
||||
|
||||
$pdo = $this->getEntityManager()->getPDO();
|
||||
|
||||
if ($emailAddressData !== null && is_array($emailAddressData)) {
|
||||
$previousEmailAddressData = array();
|
||||
if (!$entity->isNew()) {
|
||||
$previousEmailAddressData = $this->getEmailAddressData($entity);
|
||||
}
|
||||
|
||||
|
||||
$hash = array();
|
||||
foreach ($emailAddressData as $row) {
|
||||
$key = $row->emailAddress;
|
||||
@@ -144,11 +178,11 @@ class EmailAddress extends \Espo\Core\ORM\Repositories\RDB
|
||||
$hash[$key] = array(
|
||||
'primary' => $row->primary ? true : false,
|
||||
'optOut' => $row->optOut ? true : false,
|
||||
'invalid' => $row->invalid ? true : false,
|
||||
'invalid' => $row->invalid ? true : false,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$hashPrev = array();
|
||||
foreach ($previousEmailAddressData as $row) {
|
||||
$key = $row->emailAddress;
|
||||
@@ -156,25 +190,25 @@ class EmailAddress extends \Espo\Core\ORM\Repositories\RDB
|
||||
$hashPrev[$key] = array(
|
||||
'primary' => $row->primary ? true : false,
|
||||
'optOut' => $row->optOut ? true : false,
|
||||
'invalid' => $row->invalid ? true : false,
|
||||
'invalid' => $row->invalid ? true : false,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$primary = false;
|
||||
}
|
||||
|
||||
$primary = false;
|
||||
$toCreate = array();
|
||||
$toUpdate = array();
|
||||
$toUpdate = array();
|
||||
$toRemove = array();
|
||||
|
||||
|
||||
|
||||
foreach ($hash as $key => $data) {
|
||||
$new = true;
|
||||
$changed = false;
|
||||
|
||||
|
||||
if ($hash[$key]['primary']) {
|
||||
$primary = $key;
|
||||
}
|
||||
|
||||
|
||||
if (array_key_exists($key, $hashPrev)) {
|
||||
$new = false;
|
||||
$changed = $hash[$key]['optOut'] != $hashPrev[$key]['optOut'] || $hash[$key]['invalid'] != $hashPrev[$key]['invalid'];
|
||||
@@ -182,23 +216,23 @@ class EmailAddress extends \Espo\Core\ORM\Repositories\RDB
|
||||
if ($hash[$key]['primary'] == $hashPrev[$key]['primary']) {
|
||||
$primary = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ($new) {
|
||||
$toCreate[] = $key;
|
||||
}
|
||||
}
|
||||
if ($changed) {
|
||||
$toUpdate[] = $key;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($hashPrev as $key => $data) {
|
||||
|
||||
foreach ($hashPrev as $key => $data) {
|
||||
if (!array_key_exists($key, $hash)) {
|
||||
$toRemove[] = $key;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
foreach ($toRemove as $address) {
|
||||
$emailAddress = $this->getByAddress($address);
|
||||
if ($emailAddress) {
|
||||
@@ -211,10 +245,10 @@ class EmailAddress extends \Espo\Core\ORM\Repositories\RDB
|
||||
email_address_id = ".$pdo->quote($emailAddress->id)."
|
||||
";
|
||||
$sth = $pdo->prepare($query);
|
||||
$sth->execute();
|
||||
$sth->execute();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
foreach ($toUpdate as $address) {
|
||||
$emailAddress = $this->getByAddress($address);
|
||||
if ($emailAddress) {
|
||||
@@ -225,17 +259,17 @@ class EmailAddress extends \Espo\Core\ORM\Repositories\RDB
|
||||
$this->save($emailAddress);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
foreach ($toCreate as $address) {
|
||||
$emailAddress = $this->getByAddress($address);
|
||||
if (!$emailAddress) {
|
||||
$emailAddress = $this->get();
|
||||
|
||||
|
||||
$emailAddress->set(array(
|
||||
'name' => $address,
|
||||
'optOut' => $hash[$address]['optOut'],
|
||||
'invalid' => $hash[$address]['invalid'],
|
||||
));
|
||||
));
|
||||
$this->save($emailAddress);
|
||||
} else {
|
||||
if ($emailAddress->get('optOut') != $hash[$address]['optOut'] || $emailAddress->get('invalid') != $hash[$address]['invalid']) {
|
||||
@@ -246,9 +280,9 @@ class EmailAddress extends \Espo\Core\ORM\Repositories\RDB
|
||||
$this->save($emailAddress);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$query = "
|
||||
INSERT entity_email_address
|
||||
INSERT entity_email_address
|
||||
(entity_id, entity_type, email_address_id, `primary`)
|
||||
VALUES
|
||||
(
|
||||
@@ -261,7 +295,7 @@ class EmailAddress extends \Espo\Core\ORM\Repositories\RDB
|
||||
$sth = $pdo->prepare($query);
|
||||
$sth->execute();
|
||||
}
|
||||
|
||||
|
||||
if ($primary) {
|
||||
$emailAddress = $this->getByAddress($primary);
|
||||
if ($emailAddress) {
|
||||
@@ -271,27 +305,26 @@ class EmailAddress extends \Espo\Core\ORM\Repositories\RDB
|
||||
WHERE
|
||||
entity_id = ".$pdo->quote($entity->id)." AND
|
||||
entity_type = ".$pdo->quote($entity->getEntityName())." AND
|
||||
`primary` = 1 AND
|
||||
`primary` = 1 AND
|
||||
deleted = 0
|
||||
";
|
||||
$sth = $pdo->prepare($query);
|
||||
$sth->execute();
|
||||
|
||||
|
||||
$query = "
|
||||
UPDATE entity_email_address
|
||||
SET `primary` = 1
|
||||
WHERE
|
||||
entity_id = ".$pdo->quote($entity->id)." AND
|
||||
entity_type = ".$pdo->quote($entity->getEntityName())." AND
|
||||
email_address_id = ".$pdo->quote($emailAddress->id)." AND
|
||||
email_address_id = ".$pdo->quote($emailAddress->id)." AND
|
||||
deleted = 0
|
||||
";
|
||||
$sth = $pdo->prepare($query);
|
||||
$sth->execute();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
$entityRepository = $this->getEntityManager()->getRepository($entity->getEntityName());
|
||||
if (!empty($email)) {
|
||||
|
||||
@@ -131,6 +131,9 @@
|
||||
},
|
||||
"teams": {
|
||||
"type": "linkMultiple"
|
||||
},
|
||||
"users": {
|
||||
"type": "linkMultiple"
|
||||
}
|
||||
},
|
||||
"links": {
|
||||
@@ -151,6 +154,11 @@
|
||||
"entity": "Team",
|
||||
"relationName": "EntityTeam"
|
||||
},
|
||||
"users": {
|
||||
"type": "hasMany",
|
||||
"entity": "User",
|
||||
"foreign": "emails"
|
||||
},
|
||||
"attachments": {
|
||||
"type": "hasChildren",
|
||||
"entity": "Attachment",
|
||||
@@ -176,7 +184,7 @@
|
||||
"additionalColumns": {
|
||||
"addressType": {
|
||||
"type": "varchar",
|
||||
"len": "4"
|
||||
"len": "4"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -190,7 +198,7 @@
|
||||
"additionalColumns": {
|
||||
"addressType": {
|
||||
"type": "varchar",
|
||||
"len": "4"
|
||||
"len": "4"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -119,6 +119,11 @@
|
||||
"type": "hasMany",
|
||||
"entity": "Call",
|
||||
"foreign": "users"
|
||||
},
|
||||
"emails": {
|
||||
"type": "hasMany",
|
||||
"entity": "Email",
|
||||
"foreign": "users"
|
||||
}
|
||||
},
|
||||
"collection": {
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
/************************************************************************
|
||||
* This file is part of EspoCRM.
|
||||
*
|
||||
* EspoCRM - Open Source CRM application.
|
||||
* Copyright (C) 2014-2015 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
|
||||
* Website: http://www.espocrm.com
|
||||
*
|
||||
* EspoCRM is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* EspoCRM is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
|
||||
************************************************************************/
|
||||
|
||||
namespace Espo\SelectManagers;
|
||||
|
||||
class Email extends \Espo\Core\SelectManagers\Base
|
||||
{
|
||||
protected function boolFilterOnlyMy(&$result)
|
||||
{
|
||||
if (!in_array('users', $result['joins'])) {
|
||||
$result['joins'][] = 'users';
|
||||
}
|
||||
$result['whereClause'][] = array(
|
||||
'emailUser.userId' => $this->getUser()->id
|
||||
);
|
||||
}
|
||||
|
||||
protected function accessOnlyOwn(&$result)
|
||||
{
|
||||
$this->boolFilterOnlyMy($result);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,11 +26,10 @@ class EmailAccount extends \Espo\Core\SelectManagers\Base
|
||||
{
|
||||
protected function access(&$result)
|
||||
{
|
||||
if (!array_key_exists('whereClause', $result)) {
|
||||
$result['whereClause'] = array();
|
||||
}
|
||||
if (!$this->user->isAdmin()) {
|
||||
$result['whereClause']['assignedUserId'] = $this->user->id;
|
||||
$result['whereClause'][] = array(
|
||||
'assignedUserId' => $this->user->id
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,6 @@ use \Espo\Core\Exceptions\Error;
|
||||
|
||||
class Email extends Record
|
||||
{
|
||||
|
||||
protected function init()
|
||||
{
|
||||
$this->dependencies[] = 'mailSender';
|
||||
@@ -36,7 +35,9 @@ class Email extends Record
|
||||
$this->dependencies[] = 'fileManager';
|
||||
$this->dependencies[] = 'crypt';
|
||||
}
|
||||
|
||||
|
||||
protected $fetchEntityBeforeUpdate = true;
|
||||
|
||||
protected function getFileManager()
|
||||
{
|
||||
return $this->getInjection('fileManager');
|
||||
@@ -50,7 +51,7 @@ class Email extends Record
|
||||
protected function getPreferences()
|
||||
{
|
||||
return $this->injections['preferences'];
|
||||
}
|
||||
}
|
||||
|
||||
protected function getCrypt()
|
||||
{
|
||||
@@ -69,7 +70,7 @@ class Email extends Record
|
||||
if (array_key_exists('password', $smtpParams)) {
|
||||
$smtpParams['password'] = $this->getCrypt()->decrypt($smtpParams['password']);
|
||||
}
|
||||
|
||||
|
||||
if ($smtpParams) {
|
||||
$smtpParams['fromName'] = $this->getUser()->get('name');
|
||||
$emailSender->useSmtp($smtpParams);
|
||||
@@ -130,7 +131,7 @@ class Email extends Record
|
||||
}
|
||||
$entity->set('bcc', implode(';', $arr));
|
||||
}
|
||||
|
||||
|
||||
$this->loadNameHash($entity);
|
||||
|
||||
$this->loadAttachmentsTypes($entity);
|
||||
@@ -155,28 +156,28 @@ class Email extends Record
|
||||
|
||||
$entity->set('attachmentsTypes', $types);
|
||||
}
|
||||
|
||||
|
||||
public function loadNameHash(Entity $entity)
|
||||
{
|
||||
$addressList = array();
|
||||
if ($entity->get('from')) {
|
||||
$addressList[] = $entity->get('from');
|
||||
}
|
||||
|
||||
|
||||
$arr = explode(';', $entity->get('to'));
|
||||
foreach ($arr as $address) {
|
||||
if (!in_array($address, $addressList)) {
|
||||
$addressList[] = $address;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$arr = explode(';', $entity->get('cc'));
|
||||
foreach ($arr as $address) {
|
||||
if (!in_array($address, $addressList)) {
|
||||
$addressList[] = $address;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$nameHash = array();
|
||||
$typeHash = array();
|
||||
$idHash = array();
|
||||
@@ -188,65 +189,65 @@ class Email extends Record
|
||||
$idHash[$address] = $p->id;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$entity->set('nameHash', $nameHash);
|
||||
$entity->set('typeHash', $typeHash);
|
||||
$entity->set('idHash', $idHash);
|
||||
}
|
||||
|
||||
|
||||
public function findEntities($params)
|
||||
{
|
||||
$searchByEmailAddress = false;
|
||||
if (!empty($params['where']) && is_array($params['where'])) {
|
||||
foreach ($params['where'] as $i => $p) {
|
||||
if (!empty($p['field']) && $p['field'] == 'emailAddress') {
|
||||
$searchByEmailAddress = true;
|
||||
$searchByEmailAddress = true;
|
||||
$emailAddress = $this->getEntityManager()->getRepository('EmailAddress')->where(array(
|
||||
'lower' => strtolower($p['value'])
|
||||
))->findOne();
|
||||
unset($params['where'][$i]);
|
||||
unset($params['where'][$i]);
|
||||
$emailAddressId = null;
|
||||
if ($emailAddress) {
|
||||
$emailAddressId = $emailAddress->id;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$selectParams = $this->getSelectManager($this->entityName)->getSelectParams($params, true);
|
||||
|
||||
|
||||
if ($searchByEmailAddress) {
|
||||
if ($emailAddressId) {
|
||||
$pdo = $this->getEntityManager()->getPDO();
|
||||
|
||||
|
||||
$selectParams['distinct'] = true;
|
||||
|
||||
|
||||
$selectParams['customJoin'] = "
|
||||
LEFT JOIN email_email_address
|
||||
ON
|
||||
email_email_address.email_id = email.id AND
|
||||
LEFT JOIN email_email_address
|
||||
ON
|
||||
email_email_address.email_id = email.id AND
|
||||
email_email_address.deleted = 0
|
||||
";
|
||||
$selectParams['customWhere'] = "
|
||||
$selectParams['customWhere'] = "
|
||||
AND
|
||||
(
|
||||
email.from_email_address_id = ".$pdo->quote($emailAddressId)." OR
|
||||
email.from_email_address_id = ".$pdo->quote($emailAddressId)." OR
|
||||
email_email_address.email_address_id = ".$pdo->quote($emailAddressId)."
|
||||
)
|
||||
";
|
||||
} else {
|
||||
$selectParams['customWhere'] = ' AND 0';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$collection = $this->getRepository()->find($selectParams);
|
||||
|
||||
|
||||
}
|
||||
|
||||
$collection = $this->getRepository()->find($selectParams);
|
||||
|
||||
foreach ($collection as $e) {
|
||||
$this->loadParentNameFields($e);
|
||||
}
|
||||
|
||||
|
||||
return array(
|
||||
'total' => $this->getRepository()->count($selectParams),
|
||||
'collection' => $collection,
|
||||
@@ -257,21 +258,21 @@ class Email extends Record
|
||||
{
|
||||
return $this->getCopiedAttachments($emailId, $parentType, $parentId);
|
||||
}
|
||||
|
||||
|
||||
public function getCopiedAttachments($id, $parentType = null, $parentId = null)
|
||||
{
|
||||
$ids = array();
|
||||
$ids = array();
|
||||
$names = new \stdClass();
|
||||
|
||||
|
||||
if (!empty($id)) {
|
||||
$email = $this->getEntityManager()->getEntity('Email', $id);
|
||||
if ($email && $this->getAcl()->check($email, 'read')) {
|
||||
$email->loadLinkMultipleField('attachments');
|
||||
$attachmentsIds = $email->get('attachmentsIds');
|
||||
|
||||
|
||||
foreach ($attachmentsIds as $attachmentId) {
|
||||
$source = $this->getEntityManager()->getEntity('Attachment', $attachmentId);
|
||||
if ($source) {
|
||||
if ($source) {
|
||||
$attachment = $this->getEntityManager()->getEntity('Attachment');
|
||||
$attachment->set('role', 'Attachment');
|
||||
$attachment->set('type', $source->get('type'));
|
||||
@@ -283,9 +284,9 @@ class Email extends Record
|
||||
$attachment->set('parentType', $parentType);
|
||||
$attachment->set('parentId', $parentId);
|
||||
}
|
||||
|
||||
|
||||
$this->getEntityManager()->saveEntity($attachment);
|
||||
|
||||
|
||||
$contents = $this->getFileManager()->getContents('data/upload/' . $source->id);
|
||||
if (!empty($contents)) {
|
||||
$this->getFileManager()->putContents('data/upload/' . $attachment->id, $contents);
|
||||
@@ -293,29 +294,29 @@ class Email extends Record
|
||||
$names->{$attachment->id} = $attachment->get('name');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return array(
|
||||
'ids' => $ids,
|
||||
'names' => $names
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
public function sendTestEmail($data)
|
||||
{
|
||||
$email = $this->getEntityManager()->getEntity('Email');
|
||||
|
||||
|
||||
$email->set(array(
|
||||
'subject' => 'EspoCRM: Test Email',
|
||||
'isHtml' => false,
|
||||
'to' => $data['emailAddress']
|
||||
));
|
||||
|
||||
'to' => $data['emailAddress']
|
||||
));
|
||||
|
||||
$emailSender = $this->getMailSender();
|
||||
$emailSender->useSmtp($data)->send($email);
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,6 +47,8 @@ class Record extends \Espo\Core\Services\Base
|
||||
'preferences'
|
||||
);
|
||||
|
||||
protected $fetchEntityBeforeUpdate = false;
|
||||
|
||||
protected $entityName;
|
||||
|
||||
private $streamService;
|
||||
@@ -330,7 +332,11 @@ class Record extends \Espo\Core\Services\Base
|
||||
$this->filterInput($data);
|
||||
$this->handleInput($data);
|
||||
|
||||
$entity = $this->getRepository()->get($id);
|
||||
if ($this->fetchEntityBeforeUpdate) {
|
||||
$entity = $this->getEntity($id);
|
||||
} else {
|
||||
$entity = $this->getRepository()->get($id);
|
||||
}
|
||||
|
||||
if (!$entity) {
|
||||
throw new NotFound();
|
||||
|
||||
Reference in New Issue
Block a user