diff --git a/application/Espo/Controllers/Stream.php b/application/Espo/Controllers/Stream.php index ec9645197d..4d1c136939 100644 --- a/application/Espo/Controllers/Stream.php +++ b/application/Espo/Controllers/Stream.php @@ -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\Controllers; @@ -27,33 +27,33 @@ use \Espo\Core\Exceptions\Error; class Stream extends \Espo\Core\Controllers\Base { const MAX_SIZE_LIMIT = 400; - + public static $defaultAction = 'list'; public function actionList($params, $data, $request) { $scope = $params['scope']; $id = isset($params['id']) ? $params['id'] : null; - + $offset = intval($request->get('offset')); $maxSize = intval($request->get('maxSize')); $after = $request->get('after'); - + $service = $this->getService('Stream'); - + if (empty($maxSize)) { $maxSize = self::MAX_SIZE_LIMIT; } if (!empty($maxSize) && $maxSize > self::MAX_SIZE_LIMIT) { throw new Forbidden(); - } - + } + $result = $service->find($scope, $id, array( 'offset' => $offset, 'maxSize' => $maxSize, 'after' => $after, )); - + return array( 'total' => $result['total'], 'list' => $result['collection']->toArray() diff --git a/application/Espo/Core/Controllers/Record.php b/application/Espo/Core/Controllers/Record.php index 2a7ae09ebb..4601e8b6d9 100644 --- a/application/Espo/Core/Controllers/Record.php +++ b/application/Espo/Core/Controllers/Record.php @@ -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\Core\Controllers; @@ -30,27 +30,27 @@ use \Espo\Core\Utils\Util; class Record extends Base { const MAX_SIZE_LIMIT = 200; - - public static $defaultAction = 'list'; - + + public static $defaultAction = 'list'; + protected function getEntityManager() { return $this->getContainer()->get('entityManager'); } - + protected function getRecordService($name = null) { if (empty($name)) { $name = $this->name; } - + if ($this->getServiceFactory()->checkExists($name)) { $service = $this->getServiceFactory()->create($name); } else { $service = $this->getServiceFactory()->create('Record'); $service->setEntityName($name); - } - + } + return $service; } @@ -58,19 +58,19 @@ class Record extends Base { $id = $params['id']; $entity = $this->getRecordService()->getEntity($id); - + if (empty($entity)) { throw new NotFound(); } return $entity->toArray(); } - + public function actionPatch($params, $data) { return $this->actionUpdate($params, $data); } - + public function actionCreate($params, $data) { if (!$this->getAcl()->check($this->name, 'edit')) { @@ -78,7 +78,7 @@ class Record extends Base } $service = $this->getRecordService(); - + if ($entity = $service->createEntity($data)) { return $entity->toArray(); } @@ -91,9 +91,9 @@ class Record extends Base if (!$this->getAcl()->check($this->name, 'edit')) { throw new Forbidden(); } - - $id = $params['id']; - + + $id = $params['id']; + if ($entity = $this->getRecordService()->updateEntity($id, $data)) { return $entity->toArray(); } @@ -113,7 +113,7 @@ class Record extends Base $asc = $request->get('asc') === 'true'; $sortBy = $request->get('sortBy'); $q = $request->get('q'); - + if (empty($maxSize)) { $maxSize = self::MAX_SIZE_LIMIT; } @@ -129,17 +129,17 @@ class Record extends Base 'sortBy' => $sortBy, 'q' => $q, )); - + return array( 'total' => $result['total'], 'list' => $result['collection']->toArray() ); } - + public function actionListLinked($params, $data, $request) { $id = $params['id']; - $link = $params['link']; + $link = $params['link']; $where = $request->get('where'); $offset = $request->get('offset'); @@ -147,13 +147,13 @@ class Record extends Base $asc = $request->get('asc') === 'true'; $sortBy = $request->get('sortBy'); $q = $request->get('q'); - + if (empty($maxSize)) { $maxSize = self::MAX_SIZE_LIMIT; } if (!empty($maxSize) && $maxSize > self::MAX_SIZE_LIMIT) { throw new Forbidden(); - } + } $result = $this->getRecordService()->findLinkedEntities($id, $link, array( 'where' => $where, @@ -163,8 +163,8 @@ class Record extends Base 'sortBy' => $sortBy, 'q' => $q, )); - - + + return array( 'total' => $result['total'], 'list' => $result['collection']->toArray() @@ -180,30 +180,30 @@ class Record extends Base } throw new Error(); } - + public function actionExport($params, $data, $request) - { + { if ($this->getConfig()->get('disableExport') && !$this->getUser()->isAdmin()) { throw new Forbidden(); } - + if (!$this->getAcl()->check($this->name, 'read')) { throw new Forbidden(); - } - + } + $ids = $request->get('ids'); $where = $request->get('where'); - + return array( 'id' => $this->getRecordService()->export($ids, $where) - ); + ); } public function actionMassUpdate($params, $data, $request) { if (!$this->getAcl()->check($this->name, 'edit')) { throw new Forbidden(); - } + } $ids = $data['ids']; $where = $data['where']; @@ -232,17 +232,17 @@ class Record extends Base { $id = $params['id']; $link = $params['link']; - - $foreignIds = array(); + + $foreignIds = array(); if (isset($data['id'])) { $foreignIds[] = $data['id']; - } + } if (isset($data['ids']) && is_array($data['ids'])) { foreach ($data['ids'] as $foreignId) { $foreignIds[] = $foreignId; } - } - + } + $result = false; foreach ($foreignIds as $foreignId) { if ($this->getRecordService()->linkEntity($id, $link, $foreignId)) { @@ -251,26 +251,26 @@ class Record extends Base } if ($result) { return true; - } - - throw new Error(); + } + + throw new Error(); } - + public function actionRemoveLink($params, $data) { $id = $params['id']; $link = $params['link']; - - $foreignIds = array(); + + $foreignIds = array(); if (isset($data['id'])) { $foreignIds[] = $data['id']; - } + } if (isset($data['ids']) && is_array($data['ids'])) { foreach ($data['ids'] as $foreignId) { $foreignIds[] = $foreignId; } } - + $result = false; foreach ($foreignIds as $foreignId) { if ($this->getRecordService()->unlinkEntity($id, $link, $foreignId)) { @@ -279,27 +279,27 @@ class Record extends Base } if ($result) { return true; - } - - throw new Error(); + } + + throw new Error(); } - + public function actionFollow($params) { if (!$this->getAcl()->check($this->name, 'read')) { throw new Forbidden(); } $id = $params['id']; - return $this->getRecordService()->follow($id); + return $this->getRecordService()->follow($id); } - + public function actionUnfollow($params) { if (!$this->getAcl()->check($this->name, 'read')) { throw new Forbidden(); } $id = $params['id']; - return $this->getRecordService()->unfollow($id); + return $this->getRecordService()->unfollow($id); } } diff --git a/application/Espo/Core/ORM/DB/MysqlMapper.php b/application/Espo/Core/ORM/DB/MysqlMapper.php index b1de6bc5ba..912c28777c 100644 --- a/application/Espo/Core/ORM/DB/MysqlMapper.php +++ b/application/Espo/Core/ORM/DB/MysqlMapper.php @@ -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\Core\ORM\DB; diff --git a/application/Espo/Core/ORM/EntityManager.php b/application/Espo/Core/ORM/EntityManager.php index 3b49cff4c7..7fde769740 100644 --- a/application/Espo/Core/ORM/EntityManager.php +++ b/application/Espo/Core/ORM/EntityManager.php @@ -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\Core\ORM; @@ -27,59 +27,59 @@ use \Espo\Core\Utils\Util; class EntityManager extends \Espo\ORM\EntityManager { protected $espoMetadata; - + private $hookManager; - + protected $user; - + protected $container; - + private $repositoryClassNameHash = array(); - + private $entityClassNameHash = array(); - + public function setContainer(\Espo\Core\Container $container) { - $this->container = $container; + $this->container = $container; } - + public function getContainer() { - return $this->container; + return $this->container; } - + public function setUser($user) { $this->user = $user; } - + public function getUser() { return $this->user; } - + public function getEspoMetadata() { return $this->espoMetadata; - } + } public function setEspoMetadata($espoMetadata) { $this->espoMetadata = $espoMetadata; } - + public function setHookManager(\Espo\Core\HookManager $hookManager) { $this->hookManager = $hookManager; } - + public function getHookManager() { return $this->hookManager; } public function normalizeRepositoryName($name) - { + { if (empty($this->repositoryClassNameHash[$name])) { $className = '\\Espo\\Custom\\Repositories\\' . Util::normilizeClassName($name); if (!class_exists($className)) { @@ -89,9 +89,9 @@ class EntityManager extends \Espo\ORM\EntityManager } return $this->repositoryClassNameHash[$name]; } - + public function normalizeEntityName($name) - { + { if (empty($this->entityClassNameHash[$name])) { $className = '\\Espo\\Custom\\Entities\\' . Util::normilizeClassName($name); if (!class_exists($className)) { diff --git a/application/Espo/Core/ORM/Repositories/RDB.php b/application/Espo/Core/ORM/Repositories/RDB.php index 1f61f88de8..0031d8aa38 100644 --- a/application/Espo/Core/ORM/Repositories/RDB.php +++ b/application/Espo/Core/ORM/Repositories/RDB.php @@ -66,26 +66,26 @@ class RDB extends \Espo\ORM\Repositories\RDB implements Injectable $this->handlePhoneNumberParams($params); $this->handleCurrencyParams($params); } - + protected function handleCurrencyParams(&$params) { $entityName = $this->entityName; - + $metadata = $this->getMetadata(); - + if (!$metadata) { return; } - + $defs = $metadata->get('entityDefs.' . $entityName); foreach ($defs['fields'] as $field => $d) { if (isset($d['type']) && $d['type'] == 'currency') { if (empty($params['customJoin'])) { - $params['customJoin'] = ''; + $params['customJoin'] = ''; } $alias = Util::toUnderScore($field) . "_currency_alias"; - $params['customJoin'] .= " + $params['customJoin'] .= " LEFT JOIN currency AS `{$alias}` ON {$alias}.id = ".Util::toUnderScore($entityName).".".Util::toUnderScore($field)."_currency "; } @@ -114,10 +114,10 @@ class RDB extends \Espo\ORM\Repositories\RDB implements Injectable ); } } - + protected function handlePhoneNumberParams(&$params) { - $entityName = $this->entityName; + $entityName = $this->entityName; $defs = $this->getEntityManager()->getMetadata()->get($entityName); if (!empty($defs['relations']) && array_key_exists('phoneNumbers', $defs['relations'])) { @@ -198,7 +198,7 @@ class RDB extends \Espo\ORM\Repositories\RDB implements Injectable if ($entity->has('modifiedAt')) { $restoreData['modifiedAt'] = $entity->get('modifiedAt'); } - $entity->clear('modifiedById'); + $entity->clear('modifiedById'); } else { if ($entity->hasField('modifiedAt')) { $entity->set('modifiedAt', $nowString); @@ -228,15 +228,15 @@ class RDB extends \Espo\ORM\Repositories\RDB implements Injectable } protected function handleEmailAddressSave(Entity $entity) - { - if ($entity->hasRelation('emailAddresses') && $entity->hasField('emailAddress')) { + { + if ($entity->hasRelation('emailAddresses') && $entity->hasField('emailAddress')) { $emailAddressRepository = $this->getEntityManager()->getRepository('EmailAddress')->storeEntityEmailAddress($entity); } } - + protected function handlePhoneNumberSave(Entity $entity) - { - if ($entity->hasRelation('phoneNumbers') && $entity->hasField('phoneNumber')) { + { + if ($entity->hasRelation('phoneNumbers') && $entity->hasField('phoneNumber')) { $emailAddressRepository = $this->getEntityManager()->getRepository('PhoneNumber')->storeEntityPhoneNumber($entity); } } @@ -254,32 +254,32 @@ class RDB extends \Espo\ORM\Repositories\RDB implements Injectable $existingIds = array(); $toUpdateIds = array(); $existingColumnsData = new \stdClass(); - + $defs = array(); $columns = $this->getMetadata()->get("entityDefs." . $entity->getEntityName() . ".fields.{$name}.columns"); - if (!empty($columns)) { + if (!empty($columns)) { $columnData = $entity->get($name . 'Columns'); $defs['additionalColumns'] = $columns; - } - + } + foreach ($entity->get($name, $defs) as $foreignEntity) { $existingIds[] = $foreignEntity->id; - if (!empty($columns)) { + if (!empty($columns)) { $data = new \stdClass(); foreach ($columns as $columnName => $columnField) { $foreignId = $foreignEntity->id; $data->$columnName = $foreignEntity->get($columnField); - } + } $existingColumnsData->$foreignId = $data; - } - + } + } foreach ($existingIds as $id) { if (!in_array($id, $specifiedIds)) { $toRemoveIds[] = $id; } else { - if (!empty($columns)) { + if (!empty($columns)) { foreach ($columns as $columnName => $columnField) { if ($columnData->$id->$columnName != $existingColumnsData->$id->$columnName) { $toUpdateIds[] = $id; @@ -291,7 +291,7 @@ class RDB extends \Espo\ORM\Repositories\RDB implements Injectable foreach ($specifiedIds as $id) { if (!in_array($id, $existingIds)) { $data = null; - if (!empty($columns)) { + if (!empty($columns)) { $data = $columnData->$id; } $this->relate($entity, $name, $id, $data); @@ -300,7 +300,7 @@ class RDB extends \Espo\ORM\Repositories\RDB implements Injectable foreach ($toRemoveIds as $id) { $this->unrelate($entity, $name, $id); } - if (!empty($columns)) { + if (!empty($columns)) { foreach ($toUpdateIds as $id) { $data = $columnData->$id; $this->updateRelation($entity, $name, $id, $data); diff --git a/application/Espo/Core/ORM/Repository.php b/application/Espo/Core/ORM/Repository.php index 0c54abd89c..f3d4dd23d7 100644 --- a/application/Espo/Core/ORM/Repository.php +++ b/application/Espo/Core/ORM/Repository.php @@ -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\Core\ORM; @@ -27,22 +27,22 @@ use \Espo\Core\Interfaces\Injectable; abstract class Repository extends \Espo\ORM\Repository implements Injectable { protected $dependencies = array(); - + protected $injections = array(); - + public function inject($name, $object) { $this->injections[$name] = $object; - } - + } + protected function getInjection($name) { return $this->injections[$name]; } - + public function getDependencyList() { return $this->dependencies; - } + } } diff --git a/application/Espo/Core/ORM/RepositoryFactory.php b/application/Espo/Core/ORM/RepositoryFactory.php index 6107565483..dfd6a1b406 100644 --- a/application/Espo/Core/ORM/RepositoryFactory.php +++ b/application/Espo/Core/ORM/RepositoryFactory.php @@ -18,18 +18,18 @@ * * 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\Core\ORM; class RepositoryFactory extends \Espo\ORM\RepositoryFactory -{ +{ protected $defaultRepositoryClassName = '\\Espo\\Core\\ORM\\Repositories\\RDB'; public function create($name) { $repository = parent::create($name); - + $dependencies = $repository->getDependencyList(); foreach ($dependencies as $name) { $repository->inject($name, $this->entityManager->getContainer()->get($name)); diff --git a/application/Espo/Core/SelectManagers/Base.php b/application/Espo/Core/SelectManagers/Base.php index a017defb3a..c75d6f25a7 100644 --- a/application/Espo/Core/SelectManagers/Base.php +++ b/application/Espo/Core/SelectManagers/Base.php @@ -174,7 +174,7 @@ class Base if (empty($result['whereClause'])) { $result['whereClause'] = array(); } - + $fieldDefs = $this->entityManager->getEntity($this->entityName)->getFields(); $value = $params['q']; @@ -332,8 +332,8 @@ class Base break; case 'currentQuarter': $dt = new \DateTime(); - $quarter = ceil($dt->format('m') / 3); - $dt->modify('first day of January this year'); + $quarter = ceil($dt->format('m') / 3); + $dt->modify('first day of January this year'); $part['AND'] = array( $item['field'] . '>=' => $dt->add(new \DateInterval('P'.(($quarter - 1) * 3).'M'))->format('Y-m-d'), $item['field'] . '<' => $dt->add(new \DateInterval('P3M'))->format('Y-m-d'), @@ -341,13 +341,13 @@ class Base break; case 'lastQuarter': $dt = new \DateTime(); - $quarter = ceil($dt->format('m') / 3); - $dt->modify('first day of January this year'); + $quarter = ceil($dt->format('m') / 3); + $dt->modify('first day of January this year'); $quarter--; if ($quarter == 0) { $quarter = 4; $dt->sub('P1Y'); - } + } $part['AND'] = array( $item['field'] . '>=' => $dt->add(new \DateInterval('P'.(($quarter - 1) * 3).'M'))->format('Y-m-d'), $item['field'] . '<' => $dt->add(new \DateInterval('P3M'))->format('Y-m-d'), diff --git a/application/Espo/Core/Services/Base.php b/application/Espo/Core/Services/Base.php index 95f11034f2..016cd037aa 100644 --- a/application/Espo/Core/Services/Base.php +++ b/application/Espo/Core/Services/Base.php @@ -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\Core\Services; @@ -31,38 +31,38 @@ abstract class Base implements Injectable 'entityManager', 'user', ); - + protected $injections = array(); - + public function inject($name, $object) { $this->injections[$name] = $object; } - + public function __construct() { $this->init(); } - + protected function init() - { + { } - + protected function getInjection($name) { return $this->injections[$name]; } - + public function getDependencyList() { return $this->dependencies; } - + protected function getEntityManager() { return $this->getInjection('entityManager'); } - + protected function getConfig() { return $this->getInjection('config'); diff --git a/application/Espo/ORM/DB/IMapper.php b/application/Espo/ORM/DB/IMapper.php index 3ef559a279..4a17ea5a7a 100644 --- a/application/Espo/ORM/DB/IMapper.php +++ b/application/Espo/ORM/DB/IMapper.php @@ -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\ORM\DB; @@ -35,7 +35,7 @@ interface IMapper * @return IEntity $entity */ function selectById(IEntity $entity, $id); - + /** * Selects list of beans according to given parameters. * @@ -56,7 +56,7 @@ interface IMapper * @return mixed Result of the aggregation */ function aggregate(IEntity $entity, $params, $aggregation, $aggregationBy, $deleted); - + /** * Returns count of records according to given parameters. * @@ -65,7 +65,7 @@ interface IMapper * @return int Count of record */ function count(IEntity $entity, $params); - + /** * Returns max value of the field in the select according to given parameters. * @@ -76,7 +76,7 @@ interface IMapper * @return mixed Max value */ function max(IEntity $entity, $params, $field, $deleted); - + /** * Returns min value of the field in the select according to given parameters. * @@ -87,7 +87,7 @@ interface IMapper * @return mixed Min value */ function min(IEntity $entity, $params, $field, $deleted); - + /** * Returns sum value of the field in the select according to given parameters. * @@ -98,7 +98,7 @@ interface IMapper * @return mixed Sum value */ function sum(IEntity $entity, $params); - + /** * Selects related bean or list of beans. * @@ -109,7 +109,7 @@ interface IMapper * @return array List of beans or total count if $totalCount was passed as true */ function selectRelated(IEntity $entity, $relName, $params, $totalCount); - + /** * Returns count of related records according to given parameters. * @@ -119,7 +119,7 @@ interface IMapper * @return int Count of records */ function countRelated(IEntity $entity, $relName, $params); - + /** * Links the bean with another one. * @@ -128,8 +128,8 @@ interface IMapper * @param string $id Id of the foreign record. * @return bool True if success */ - function addRelation(IEntity $entity, $relName, $id); - + function addRelation(IEntity $entity, $relName, $id); + /** * Removes relation of bean with certain record. * @@ -139,7 +139,7 @@ interface IMapper * @return bool True if success */ function removeRelation(IEntity $entity, $relName, $id); - + /** * Removes all relations of bean of specified relation name. * @@ -148,7 +148,7 @@ interface IMapper * @return bool True if success */ function removeAllRelations(IEntity $entity, $relName); - + /** * Insert the bean into db. * @@ -156,7 +156,7 @@ interface IMapper * @return bool True if success */ function insert(IEntity $entity); - + /** * Updates the bean in db. * @@ -164,8 +164,8 @@ interface IMapper * @return bool True if success */ function update(IEntity $entity); - - + + /** * Deletes the bean. * (Marks as deleted) @@ -174,7 +174,7 @@ interface IMapper * @return bool True if success */ function delete(IEntity $entity); - + /** * Sets class name of a model collection that will be returned by operations such as select. * diff --git a/application/Espo/ORM/DB/Mapper.php b/application/Espo/ORM/DB/Mapper.php index 1e574d5b81..17c94202e3 100644 --- a/application/Espo/ORM/DB/Mapper.php +++ b/application/Espo/ORM/DB/Mapper.php @@ -37,7 +37,7 @@ abstract class Mapper implements IMapper public $pdo; protected $entityFactroy; - + protected $query; protected $fieldsMapCache = array(); @@ -148,7 +148,7 @@ abstract class Mapper implements IMapper if (empty($aggregation) || !isset($entity->fields[$aggregationBy])) { return false; } - + $params['aggregation'] = $aggregation; $params['aggregationBy'] = $aggregationBy; @@ -178,13 +178,13 @@ abstract class Mapper implements IMapper if (!$relEntity) { return null; } - + if ($totalCount) { $params['aggregation'] = 'COUNT'; $params['aggregationBy'] = 'id'; } - + if (empty($params['whereClause'])) { $params['whereClause'] = array(); } @@ -198,13 +198,13 @@ abstract class Mapper implements IMapper switch ($relType) { - case IEntity::BELONGS_TO: + case IEntity::BELONGS_TO: $params['whereClause'][$foreignKey] = $entity->get($key); $params['offset'] = 0; - $params['limit'] = 1; - + $params['limit'] = 1; + $sql = $this->query->createSelectQuery($relEntity->getEntityName(), $params); - + $ps = $this->pdo->query($sql); if ($ps) { @@ -221,7 +221,7 @@ abstract class Mapper implements IMapper case IEntity::HAS_MANY: case IEntity::HAS_CHILDREN: - + $params['whereClause'][$foreignKey] = $entity->get($key); if ($relType == IEntity::HAS_CHILDREN) { @@ -259,23 +259,23 @@ abstract class Mapper implements IMapper $additionalColumnsConditions = $params['additionalColumnsConditions']; } - $MMJoinPart = $this->getMMJoin($entity, $relationName, $keySet, $additionalColumnsConditions); - + $MMJoinPart = $this->getMMJoin($entity, $relationName, $keySet, $additionalColumnsConditions); + if (empty($params['customJoin'])) { $params['customJoin'] = ''; } else { $params['customJoin'] .= ' '; } $params['customJoin'] .= $MMJoinPart; - - + + $params['relationName'] = $relOpt['relationName']; // TODO total - - + + $sql = $this->query->createSelectQuery($relEntity->getEntityName(), $params); - + $dataArr = array(); @@ -659,12 +659,12 @@ abstract class Mapper implements IMapper if ($type == IEntity::FOREIGN) { continue; - } + } if ($entity->getFetched($field) === $value && $type != IEntity::JSON_ARRAY && $type != IEntity::JSON_OBJECT) { continue; } - + $value = $this->prepareValueForInsert($type, $value); $setArr[] = "`" . $this->toDb($field) . "` = " . $this->quote($value); @@ -684,7 +684,7 @@ abstract class Mapper implements IMapper return false; } - + protected function prepareValueForInsert($type, $value) { if ($type == IEntity::JSON_ARRAY && is_array($value)) { $value = json_encode($value); diff --git a/application/Espo/ORM/EntityCollection.php b/application/Espo/ORM/EntityCollection.php index c7eb29b51d..21a4cf6907 100644 --- a/application/Espo/ORM/EntityCollection.php +++ b/application/Espo/ORM/EntityCollection.php @@ -18,27 +18,27 @@ * * 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\ORM; class EntityCollection implements \Iterator, \Countable, \ArrayAccess, \SeekableIterator { - private $entityFactory = null; - + private $entityFactory = null; + private $entityName; - + private $position = 0; - + protected $container = array(); - + public function __construct($data = array(), $entityName, EntityFactory $entityFactory = null) { - $this->container = $data; + $this->container = $data; $this->entityName = $entityName; $this->entityFactory = $entityFactory; } - + public function rewind() { $this->position = 0; @@ -47,17 +47,17 @@ class EntityCollection implements \Iterator, \Countable, \ArrayAccess, \Seekable $this->position ++; } } - + public function current() - { + { return $this->getEntityByOffset($this->position); } - + public function key() - { + { return $this->position; } - + public function next() { do { @@ -68,17 +68,17 @@ class EntityCollection implements \Iterator, \Countable, \ArrayAccess, \Seekable } } while ($next); } - + public function valid() - { + { return isset($this->container[$this->position]); } - + public function offsetExists($offset) { return isset($this->container[$offset]); } - + public function offsetGet($offset) { if (!isset($this->container[$offset])) { @@ -86,13 +86,13 @@ class EntityCollection implements \Iterator, \Countable, \ArrayAccess, \Seekable } return $this->getEntityByOffset($offset); } - + public function offsetSet($offset, $value) { if (!($value instanceof Entity)) { throw new \InvalidArgumentException('Only Entity is allowed to be added to EntityCollection.'); } - + if (is_null($offset)) { $this->container[] = $value; } else { @@ -101,7 +101,7 @@ class EntityCollection implements \Iterator, \Countable, \ArrayAccess, \Seekable } public function offsetUnset($offset) - { + { unset($this->container[$offset]); } @@ -109,41 +109,41 @@ class EntityCollection implements \Iterator, \Countable, \ArrayAccess, \Seekable { return count($this->container); } - + public function seek($offset) { $this->position = $offset; if (!$this->valid()) { throw new \OutOfBoundsException("Invalid seek offset ($offset)."); } - } + } public function append(Entity $entity) { $this->container[] = $entity; } - + private function getEntityByOffset($offset) { $value = $this->container[$offset]; if ($value instanceof Entity) { return $value; - } else if (is_array($value)) { - $this->container[$offset] = $this->buildEntityFromArray($value); + } else if (is_array($value)) { + $this->container[$offset] = $this->buildEntityFromArray($value); } else { return null; } - + return $this->container[$offset]; } - + protected function buildEntityFromArray(array $dataArray) { $entity = $this->entityFactory->create($this->entityName); if ($entity) { $entity->set($dataArray); - $entity->setAsFetched(); + $entity->setAsFetched(); return $entity; } } @@ -151,25 +151,25 @@ class EntityCollection implements \Iterator, \Countable, \ArrayAccess, \Seekable public function getEntityName() { return $this->entityName; - } + } public function getInnerContainer() { return $this->container; } - + public function merge(EntityCollection $collection) { - $newData = $this->container; + $newData = $this->container; $incomingData = $collection->getInnerContainer(); - + foreach ($incomingData as $v) { if (!$this->contains($v)) { $this->container[] = $v; } } } - + public function contains($value) { if ($this->indexOf($value) !== false) { @@ -177,12 +177,12 @@ class EntityCollection implements \Iterator, \Countable, \ArrayAccess, \Seekable } return false; } - + public function indexOf($value) { $index = 0; if (is_array($value)) { - foreach ($this->container as $v) { + foreach ($this->container as $v) { if (is_array($v)) { if ($value['id'] == $v['id']) { return $index; @@ -194,7 +194,7 @@ class EntityCollection implements \Iterator, \Countable, \ArrayAccess, \Seekable } $index ++; } - } else if ($value instanceof Entity) { + } else if ($value instanceof Entity) { foreach ($this->container as $v) { if (is_array($v)) { if ($value->id == $v['id']) { @@ -210,7 +210,7 @@ class EntityCollection implements \Iterator, \Countable, \ArrayAccess, \Seekable } return false; } - + public function toArray() { $arr = array(); diff --git a/application/Espo/ORM/EntityFactory.php b/application/Espo/ORM/EntityFactory.php index 423ae82b00..da72e67ac0 100644 --- a/application/Espo/ORM/EntityFactory.php +++ b/application/Espo/ORM/EntityFactory.php @@ -18,16 +18,16 @@ * * 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\ORM; class EntityFactory -{ +{ protected $metadata; - + protected $entityManager; - + public function __construct(EntityManager $entityManager, Metadata $metadata) { $this->entityManager = $entityManager; @@ -35,12 +35,12 @@ class EntityFactory } public function create($name) { - $className = $this->entityManager->normalizeEntityName($name); + $className = $this->entityManager->normalizeEntityName($name); $defs = $this->metadata->get($name); if (!class_exists($className)) { return null; } - $entity = new $className($defs, $this->entityManager); + $entity = new $className($defs, $this->entityManager); return $entity; } diff --git a/application/Espo/ORM/EntityManager.php b/application/Espo/ORM/EntityManager.php index 4433690917..310b57aeba 100644 --- a/application/Espo/ORM/EntityManager.php +++ b/application/Espo/ORM/EntityManager.php @@ -38,7 +38,7 @@ class EntityManager protected $repositoryHash = array(); protected $params = array(); - + protected $query; public function __construct($params) @@ -65,7 +65,7 @@ class EntityManager $this->init(); } - + public function getQuery() { if (empty($this->query)) { @@ -78,7 +78,7 @@ class EntityManager { if (empty($this->mappers[$className])) { // TODO use factory - + $this->mappers[$className] = new $className($this->getPDO(), $this->entityFactory, $this->getQuery()); } return $this->mappers[$className]; diff --git a/application/Espo/ORM/IEntity.php b/application/Espo/ORM/IEntity.php index 2e14d552d6..b6403b01c3 100644 --- a/application/Espo/ORM/IEntity.php +++ b/application/Espo/ORM/IEntity.php @@ -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\ORM; @@ -40,46 +40,46 @@ interface IEntity const DATETIME = 'datetime'; const JSON_ARRAY = 'jsonArray'; const JSON_OBJECT = 'jsonObject'; - + const MANY_MANY = 'manyMany'; const HAS_MANY = 'hasMany'; const BELONGS_TO = 'belongsTo'; const HAS_ONE = 'hasOne'; const BELONGS_TO_PARENT = 'belongsToParent'; const HAS_CHILDREN = 'hasChildren'; - + /** * Push values from the array. * E.g. insert values into the bean from a request data. * @param array $arr Array of field - value pairs */ function populateFromArray(array $arr); - + /** * Resets all fields in the current model. */ function reset(); - + /** * Set field. */ function set($name, $value); - + /** * Get field. */ function get($name); - + /** * Check field is set. */ function has($name); - + /** * Clear field. */ function clear($name); - + } diff --git a/application/Espo/ORM/Metadata.php b/application/Espo/ORM/Metadata.php index a97920544d..222e7390bf 100644 --- a/application/Espo/ORM/Metadata.php +++ b/application/Espo/ORM/Metadata.php @@ -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\ORM; class Metadata { protected $data = array(); - + public function setData($data) { $this->data = $data; } - + public function get($entityName) { return $this->data[$entityName]; diff --git a/application/Espo/ORM/Repository.php b/application/Espo/ORM/Repository.php index b20f469106..504f5c2aee 100644 --- a/application/Espo/ORM/Repository.php +++ b/application/Espo/ORM/Repository.php @@ -18,69 +18,69 @@ * * 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\ORM; abstract class Repository -{ +{ /** * @var EntityFactory EntityFactory object. */ protected $entityFactory; - + /** * @var EntityManager EntityManager object. */ protected $entityManager; - - + + /** * @var iModel Seed entity. - */ + */ protected $seed; - + /** * @var string Class Name of aggregate root. - */ + */ protected $entityClassName; - + /** * @var string Model Name of aggregate root. - */ + */ protected $entityName; - + public function __construct($entityName, EntityManager $entityManager, EntityFactory $entityFactory) { - $this->entityName = $entityName; - $this->entityFactory = $entityFactory; - $this->seed = $this->entityFactory->create($entityName); + $this->entityName = $entityName; + $this->entityFactory = $entityFactory; + $this->seed = $this->entityFactory->create($entityName); $this->entityClassName = get_class($this->seed); - $this->entityManager = $entityManager; + $this->entityManager = $entityManager; } - + protected function getEntityFactory() { return $this->entityFactory; } - + protected function getEntityManager() { return $this->entityManager; } - - abstract public function get($id = null); - - abstract public function save(Entity $entity); - + + abstract public function get($id = null); + + abstract public function save(Entity $entity); + abstract public function remove(Entity $entity); abstract public function find(array $params); - - abstract public function findOne(array $params); + + abstract public function findOne(array $params); abstract public function getAll(); - + abstract public function count(array $params); } diff --git a/application/Espo/ORM/RepositoryFactory.php b/application/Espo/ORM/RepositoryFactory.php index b703d974c4..c4350c2c90 100644 --- a/application/Espo/ORM/RepositoryFactory.php +++ b/application/Espo/ORM/RepositoryFactory.php @@ -18,41 +18,41 @@ * * 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\ORM; class RepositoryFactory { protected $entityFactroy; - + protected $entityManager; - - protected $defaultRepositoryClassName = '\\Espo\\ORM\\Repository'; + + protected $defaultRepositoryClassName = '\\Espo\\ORM\\Repository'; public function __construct(EntityManager $entityManager, EntityFactory $entityFactroy) { $this->entityManager = $entityManager; $this->entityFactroy = $entityFactroy; } - + public function create($name) { $className = $this->entityManager->normalizeRepositoryName($name); - + if (!class_exists($className)) { $className = $this->defaultRepositoryClassName; } - - $repository = new $className($name, $this->entityManager, $this->entityFactroy); + + $repository = new $className($name, $this->entityManager, $this->entityFactroy); return $repository; } - + protected function normalizeName($name) { return $name; } - + public function setDefaultRepositoryClassName($defaultRepositoryClassName) { $this->defaultRepositoryClassName = $defaultRepositoryClassName; diff --git a/application/Espo/Services/Attachment.php b/application/Espo/Services/Attachment.php index 7b29928f8f..9e7b96eb37 100644 --- a/application/Espo/Services/Attachment.php +++ b/application/Espo/Services/Attachment.php @@ -18,25 +18,25 @@ * * 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\Services; class Attachment extends Record { - - protected $notFilteringFields = array('contents'); - + + protected $notFilteringFields = array('contents'); + public function createEntity($data) - { + { if (!empty($data['file'])) { - list($prefix, $contents) = explode(',', $data['file']); + list($prefix, $contents) = explode(',', $data['file']); $contents = base64_decode($contents); $data['contents'] = $contents; } - + $entity = parent::createEntity($data); - + return $entity; } } diff --git a/application/Espo/Services/AuthToken.php b/application/Espo/Services/AuthToken.php index 247cb456c3..f359daf71c 100644 --- a/application/Espo/Services/AuthToken.php +++ b/application/Espo/Services/AuthToken.php @@ -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\Services; @@ -27,7 +27,7 @@ use \Espo\Core\Exceptions\Error; use \Espo\Core\Exceptions\NotFound; class AuthToken extends Record -{ +{ protected $internalFields = array('hash', 'token'); } diff --git a/application/Espo/Services/EmailAddress.php b/application/Espo/Services/EmailAddress.php index 47db95277d..f03ae7cfea 100644 --- a/application/Espo/Services/EmailAddress.php +++ b/application/Espo/Services/EmailAddress.php @@ -31,24 +31,24 @@ class EmailAddress extends Record private function findInAddressBookByEntityType($where, $limit, $entityType, &$result) { $service = $this->getServiceFactory()->create($entityType); - + $r = $service->findEntities(array( 'where' => $where, 'maxSize' => $limit, 'sortBy' => 'name' - )); - + )); + foreach ($r['collection'] as $entity) { $entity->loadLinkMultipleField('emailAddress'); - + $emailAddress = $entity->get('emailAddress'); - + $result[] = array( 'emailAddress' => $emailAddress, 'name' => $entity->get('name'), 'entityType' => $entityType ); - + $c = $service->getEntity($entity->id); $emailAddressData = $c->get('emailAddressData'); @@ -63,14 +63,14 @@ class EmailAddress extends Record break; } } - } + } } - - + + public function searchInAddressBook($query, $limit) { - $result = array(); - + $result = array(); + $where = array( array( 'type' => 'or', @@ -93,13 +93,13 @@ class EmailAddress extends Record 'value' => null ) ); - + $this->findInAddressBookByEntityType($where, $limit, 'Contact', $result); $this->findInAddressBookByEntityType($where, $limit, 'Lead', $result); - $this->findInAddressBookByEntityType($where, $limit, 'User', $result); - + $this->findInAddressBookByEntityType($where, $limit, 'User', $result); + $final = array(); - + foreach ($result as $r) { foreach ($final as $f) { if ($f['emailAddress'] == $r['emailAddress'] && $f['name'] == $r['name']) { @@ -108,9 +108,9 @@ class EmailAddress extends Record } $final[] = $r; } - + return $final; } - + } diff --git a/application/Espo/Services/EmailNotification.php b/application/Espo/Services/EmailNotification.php index c6c7678e6c..ef8fdac606 100644 --- a/application/Espo/Services/EmailNotification.php +++ b/application/Espo/Services/EmailNotification.php @@ -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\Services; @@ -28,90 +28,90 @@ use \Espo\Core\Exceptions\NotFound; use Espo\ORM\Entity; class EmailNotification extends \Espo\Core\Services\Base -{ +{ protected function init() { $this->dependencies[] = 'metadata'; $this->dependencies[] = 'mailSender'; $this->dependencies[] = 'language'; } - + protected function getMailSender() { return $this->getInjection('mailSender'); - } - + } + protected function getMetadata() { return $this->getInjection('metadata'); } - + protected function getLanguage() { return $this->getInjection('language'); } - + protected function replaceMessageVariables($text, $entity, $user, $assignerUser) - { + { $recordUrl = $this->getConfig()->get('siteUrl') . '#' . $entity->getEntityName() . '/view/' . $entity->id; - + $text = str_replace('{userName}', $user->get('name'), $text); $text = str_replace('{assignerUserName}', $assignerUser->get('name'), $text); - $text = str_replace('{recordUrl}', $recordUrl, $text); + $text = str_replace('{recordUrl}', $recordUrl, $text); $text = str_replace('{entityType}', $this->getLanguage()->translate($entity->getEntityName(), 'scopeNames'), $text); - + $fields = $entity->getFields(); foreach ($fields as $field => $d) { - $text = str_replace('{Entity.' . $field . '}', $entity->get($field), $text); + $text = str_replace('{Entity.' . $field . '}', $entity->get($field), $text); } - + return $text; } - + public function notifyAboutAssignmentJob($data) { $userId = $data['userId']; $assignerUserId = $data['assignerUserId']; $entityId = $data['entityId']; - $entityType = $data['entityType']; - + $entityType = $data['entityType']; + $user = $this->getEntityManager()->getEntity('User', $userId); - + $prefs = $this->getEntityManager()->getEntity('Preferences', $userId); - + if (!$prefs) { return true; } - + if (!$prefs->get('receiveAssignmentEmailNotifications')) { return true; - } - - $assignerUser = $this->getEntityManager()->getEntity('User', $assignerUserId); - $entity = $this->getEntityManager()->getEntity($entityType, $entityId); - + } + + $assignerUser = $this->getEntityManager()->getEntity('User', $assignerUserId); + $entity = $this->getEntityManager()->getEntity($entityType, $entityId); + if ($user && $entity && $assignerUser && $entity->get('assignedUserId') == $userId) { $emailAddress = $user->get('emailAddress'); if (!empty($emailAddress)) { - $email = $this->getEntityManager()->getEntity('Email'); - + $email = $this->getEntityManager()->getEntity('Email'); + $subject = $this->getLanguage()->translate('assignmentEmailNotificationSubject', 'messages', $entity->getEntityName()); $body = $this->getLanguage()->translate('assignmentEmailNotificationBody', 'messages', $entity->getEntityName()); - + $subject = $this->replaceMessageVariables($subject, $entity, $user, $assignerUser); $body = $this->replaceMessageVariables($body, $entity, $user, $assignerUser); - + $email->set(array( 'subject' => $subject, 'body' => $body, 'isHtml' => false, 'to' => $emailAddress )); - + $this->getMailSender()->send($email); } } - + return true; } } diff --git a/application/Espo/Services/ExternalAccount.php b/application/Espo/Services/ExternalAccount.php index a8609a2b6d..cefa91a2af 100644 --- a/application/Espo/Services/ExternalAccount.php +++ b/application/Espo/Services/ExternalAccount.php @@ -29,29 +29,29 @@ use \Espo\Core\Exceptions\Forbidden; use \Espo\Core\Exceptions\NotFound; class ExternalAccount extends Record -{ +{ protected function getClient($integration, $id) - { + { $integrationEntity = $this->getEntityManager()->getEntity('Integration', $integration); - + if (!$integrationEntity) { throw new NotFound(); } $d = $integrationEntity->toArray(); - + if (!$integrationEntity->get('enabled')) { throw new Error("{$integration} is disabled."); } - - $factory = new \Espo\Core\ExternalAccount\ClientManager($this->getEntityManager(), $this->getMetadata(), $this->getConfig()); + + $factory = new \Espo\Core\ExternalAccount\ClientManager($this->getEntityManager(), $this->getMetadata(), $this->getConfig()); return $factory->create($integration, $id); } - + public function getExternalAccountEntity($integration, $userId) { return $this->getEntityManager()->getEntity('ExternalAccount', $integration . '__' . $userId); } - + public function ping($integration, $userId) { $entity = $this->getExternalAccountEntity($integration, $userId); @@ -62,7 +62,7 @@ class ExternalAccount extends Record } } catch (\Exception $e) {} } - + public function authorizationCode($integration, $userId, $code) { $entity = $this->getExternalAccountEntity($integration, $userId); @@ -71,14 +71,14 @@ class ExternalAccount extends Record } $entity->set('enabled', true); $this->getEntityManager()->saveEntity($entity); - + $client = $this->getClient($integration, $userId); - if ($client instanceof \Espo\Core\ExternalAccount\Clients\OAuth2Abstract) { + if ($client instanceof \Espo\Core\ExternalAccount\Clients\OAuth2Abstract) { $result = $client->getAccessTokenFromAuthorizationCode($code); - if (!empty($result) && !empty($result['accessToken'])) { + if (!empty($result) && !empty($result['accessToken'])) { $entity->clear('accessToken'); $entity->clear('refreshToken'); - $entity->clear('tokenType'); + $entity->clear('tokenType'); foreach ($result as $name => $value) { $entity->set($name, $value); } diff --git a/application/Espo/Services/GlobalSearch.php b/application/Espo/Services/GlobalSearch.php index 4629a3476a..10e0f21d84 100644 --- a/application/Espo/Services/GlobalSearch.php +++ b/application/Espo/Services/GlobalSearch.php @@ -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\Services; @@ -28,7 +28,7 @@ use \Espo\Core\Exceptions\NotFound; use Espo\ORM\Entity; class GlobalSearch extends \Espo\Core\Services\Base -{ +{ protected $dependencies = array( 'entityManager', 'user', @@ -37,7 +37,7 @@ class GlobalSearch extends \Espo\Core\Services\Base 'selectManagerFactory', 'config', ); - + protected function getSelectManagerFactory() { return $this->injections['selectManagerFactory']; @@ -47,33 +47,33 @@ class GlobalSearch extends \Espo\Core\Services\Base { return $this->injections['entityManager']; } - + protected function getAcl() { return $this->injections['acl']; } - + protected function getMetadata() { return $this->injections['metadata']; - } - + } + public function find($query, $offset, $maxSize) { $entityNameList = $this->getConfig()->get('globalSearchEntityList'); - + $entityTypeCount = count($entityNameList); - + $list = array(); $count = 0; $total = 0; - foreach ($entityNameList as $entityName) { - + foreach ($entityNameList as $entityName) { + if (!$this->getAcl()->check($entityName, 'read')) { continue; } - $selectManager = $this->getSelectManagerFactory()->create($entityName); - + $selectManager = $this->getSelectManagerFactory()->create($entityName); + $searchParams = array( 'whereClause' => array( 'OR' => array( @@ -86,7 +86,7 @@ class GlobalSearch extends \Espo\Core\Services\Base 'order' => 'DESC', ); $selectParams = array_merge_recursive($searchParams, $selectManager->getAclParams()); - + $collection = $this->getEntityManager()->getRepository($entityName)->find($selectParams); $count += count($collection); $total += $this->getEntityManager()->getRepository($entityName)->count($selectParams); @@ -96,7 +96,7 @@ class GlobalSearch extends \Espo\Core\Services\Base $list[] = $data; } } - + return array( 'total' => $total, 'list' => $list, diff --git a/application/Espo/Services/Import.php b/application/Espo/Services/Import.php index 3bca7e2606..7805a1bac0 100644 --- a/application/Espo/Services/Import.php +++ b/application/Espo/Services/Import.php @@ -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\Services; @@ -29,7 +29,7 @@ use \Espo\Core\Exceptions\Error; use Espo\ORM\Entity; class Import extends \Espo\Core\Services\Base -{ +{ protected $dependencies = array( 'entityManager', 'user', @@ -40,7 +40,7 @@ class Import extends \Espo\Core\Services\Base 'serviceFactory', 'fileManager', ); - + protected $dateFormatsMap = array( 'YYYY-MM-DD' => 'Y-m-d', 'DD-MM-YYYY' => 'd-m-Y', @@ -49,43 +49,43 @@ class Import extends \Espo\Core\Services\Base 'DD/MM/YYYY' => 'd/m/Y', 'DD.MM.YYYY' => 'd.m.Y', 'MM.DD.YYYY' => 'm.d.Y', - 'YYYY.MM.DD' => 'Y.m.d', + 'YYYY.MM.DD' => 'Y.m.d', ); - + protected $timeFormatsMap = array( 'HH:mm' => 'H:i', 'hh:mm a' => 'h:i a', 'hh:mma' => 'h:ia', 'hh:mm A' => 'h:iA', - 'hh:mmA' => 'h:iA', + 'hh:mmA' => 'h:iA', ); - + protected function getSelectManagerFactory() { return $this->injections['selectManagerFactory']; } - + protected function getFileManager() { return $this->injections['fileManager']; } - + protected function getAcl() { return $this->injections['acl']; } - + protected function getMetadata() { return $this->injections['metadata']; } - + protected function getServiceFactory() { return $this->injections['serviceFactory']; } - - + + protected function readCsvString(&$string, $CSV_SEPARATOR = ';', $CSV_ENCLOSURE = '"', $CSV_LINEBREAK = "\n") { $o = array(); @@ -144,24 +144,24 @@ class Import extends \Espo\Core\Services\Base $string = substr($string, $i); return $o; } - + public function revert($scope, array $idsToRemove) { $ids = array(); if (!empty($scope) && !empty($idsToRemove)) { - foreach ($idsToRemove as $id) { + foreach ($idsToRemove as $id) { $entity = $this->getEntityManager()->getEntity($scope, $id); - if ($entity) { + if ($entity) { if ($this->getEntityManager()->removeEntity($entity)) { - $ids[] = $id; + $ids[] = $id; } } $this->getEntityManager()->getRepository($scope)->deleteFromDb($id); } } - return $ids; + return $ids; } - + public function import($scope, array $fields, $attachmentId, array $params = array()) { $delimiter = ','; @@ -171,22 +171,22 @@ class Import extends \Espo\Core\Services\Base $enclosure = '"'; if (!empty($params['textQualifier'])) { $enclosure = $params['textQualifier']; - } - + } + $contents = $this->getFileManager()->getContents('data/upload/' . $attachmentId); - + if (empty($contents)) { throw new Error('Import error'); - } - + } + $result = array( 'importedIds' => array(), 'updatedIds' => array(), - 'duplicateIds' => array(), - ); + 'duplicateIds' => array(), + ); $i = -1; while ($arr = $this->readCsvString($contents, $delimiter, $enclosure)) { - $i++; + $i++; if ($i == 0 && !empty($params['headerRow'])) { continue; } @@ -203,21 +203,21 @@ class Import extends \Espo\Core\Services\Base if (!empty($r['duplicate'])) { $result['duplicateIds'][] = $r['id']; } - + } return array( 'countCreated' => count($result['importedIds']), 'countUpdated' => count($result['updatedIds']), 'importedIds' => $result['importedIds'], 'duplicateIds' => $result['duplicateIds'], - ); + ); } - + public function importRow($scope, array $fields, array $row, array $params = array()) { // TODO create related records or related if exists, e.g. Account from accountName (skip users) // Duplicate check - + $id = null; if (!empty($params['action'])) { if ($params['action'] == 'createAndUpdate' && in_array('id', $fields)) { @@ -225,19 +225,19 @@ class Import extends \Espo\Core\Services\Base $id = $row[$i]; if (empty($id)) { $id = null; - } + } } } - - + + $entity = $this->getEntityManager()->getEntity($scope, $id); - + $entity->set('assignedUserId', $this->getUser()->id); - + if (!empty($params['defaultValues'])) { $entity->set(get_object_vars($params['defaultValues'])); } - + $fieldsDefs = $entity->getFields(); $relDefs = $entity->getRelations(); @@ -249,14 +249,14 @@ class Import extends \Espo\Core\Services\Base $entity->id = $value; } continue; - } + } if (array_key_exists($field, $fieldsDefs)) { if ($value !== '') { $type = $this->getMetadata()->get("entityDefs.{$scope}.fields.{$field}.type"); if ($type == 'personName') { $lastNameField = 'last' . ucfirst($field); $firstNameField = 'first' . ucfirst($field); - + $firstName = ''; $lastName = $value; switch ($params['personNameFormat']) { @@ -283,7 +283,7 @@ class Import extends \Espo\Core\Services\Base } break; } - + if (!$entity->get($firstNameField)) { $entity->set($firstNameField, $firstName); } @@ -291,44 +291,44 @@ class Import extends \Espo\Core\Services\Base $entity->set($lastNameField, $lastName); } continue; - } + } $entity->set($field, $this->parseValue($entity, $field, $value, $params)); - } - } - } - } - - - - foreach ($fields as $i => $field) { - if (array_key_exists($field, $fieldsDefs) && $fieldsDefs[$field]['type'] == Entity::FOREIGN) { - if ($entity->has($field)) { - $relation = $fieldsDefs[$field]['relation']; - if ($field == $relation . 'Name' && !$entity->has($relation . 'Id') && array_key_exists($relation, $relDefs)) { - if ($relDefs[$relation]['type'] == Entity::BELONGS_TO) { - $name = $entity->get($field); - $scope = $relDefs[$relation]['entity']; - $found = $this->getEntityManager()->getRepository($scope)->where(array('name' => $name))->findOne(); - - if ($found) { - $entity->set($relation . 'Id', $found->id); - } else { - if (!in_array($scope, 'User', 'Team')) { - - // TODO create related record with name $name and relate - } - } - } } } } - + } + + + + foreach ($fields as $i => $field) { + if (array_key_exists($field, $fieldsDefs) && $fieldsDefs[$field]['type'] == Entity::FOREIGN) { + if ($entity->has($field)) { + $relation = $fieldsDefs[$field]['relation']; + if ($field == $relation . 'Name' && !$entity->has($relation . 'Id') && array_key_exists($relation, $relDefs)) { + if ($relDefs[$relation]['type'] == Entity::BELONGS_TO) { + $name = $entity->get($field); + $scope = $relDefs[$relation]['entity']; + $found = $this->getEntityManager()->getRepository($scope)->where(array('name' => $name))->findOne(); + + if ($found) { + $entity->set($relation . 'Id', $found->id); + } else { + if (!in_array($scope, 'User', 'Team')) { + + // TODO create related record with name $name and relate + } + } + } + } + } + } + } $result = array(); - + $a = $entity->toArray(); - + try { if ($this->getEntityManager()->saveEntity($entity)) { $result['id'] = $entity->id; @@ -339,37 +339,37 @@ class Import extends \Espo\Core\Services\Base } } } catch (\Exception $e) {} - + return $result; } - + protected function parseValue(Entity $entity, $field, $value, $params = array()) { $decimalMark = '.'; if (!empty($params['decimalMark'])) { $decimalMark = $params['decimalMark']; } - + $defaultCurrency = 'USD'; if (!empty($params['defaultCurrency'])) { $dateFormat = $params['defaultCurrency']; } - + $dateFormat = 'Y-m-d'; if (!empty($params['dateFormat'])) { $dateFormat = $params['dateFormat']; } - + $timeFormat = 'H:i'; if (!empty($params['timeFormat'])) { $timeFormat = $params['timeFormat']; } - + $fieldDefs = $entity->getFields(); - + if (!empty($fieldDefs[$field])) { $type = $fieldDefs[$field]['type']; - + switch ($type) { case Entity::DATE: $dt = \DateTime::createFromFormat($dateFormat, $value); @@ -383,17 +383,17 @@ class Import extends \Espo\Core\Services\Base return $dt->format('Y-m-d H:i'); } break; - case Entity::FLOAT: + case Entity::FLOAT: $currencyField = $field . 'Currency'; if ($entity->hasField($currencyField)) { if (!$entity->has($currencyField)) { $entity->set($currencyField, $defaultCurrency); } } - + $a = explode($decimalMark, $value); $a[0] = preg_replace('/[^A-Za-z0-9\-]/', '', $a[0]); - + if (count($a) > 1) { return $a[0] . '.' . $a[1]; } else { @@ -401,9 +401,9 @@ class Import extends \Espo\Core\Services\Base } break; } - + } - return $value; + return $value; } } diff --git a/application/Espo/Services/Notification.php b/application/Espo/Services/Notification.php index 07bde19f4e..73b86ddc64 100644 --- a/application/Espo/Services/Notification.php +++ b/application/Espo/Services/Notification.php @@ -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\Services; @@ -28,7 +28,7 @@ use \Espo\Core\Exceptions\NotFound; use Espo\ORM\Entity; class Notification extends \Espo\Core\Services\Base -{ +{ protected $dependencies = array( 'entityManager', 'user', @@ -43,68 +43,68 @@ class Notification extends \Espo\Core\Services\Base protected function getUser() { return $this->injections['user']; - } - + } + protected function getMetadata() { return $this->injections['metadata']; } - + public function notifyAboutMentionInPost($userId, $noteId) { - $notification = $this->getEntityManager()->getEntity('Notification'); + $notification = $this->getEntityManager()->getEntity('Notification'); $notification->set(array( 'type' => 'MentionInPost', 'data' => array('noteId' => $noteId), 'userId' => $userId )); - $this->getEntityManager()->saveEntity($notification); + $this->getEntityManager()->saveEntity($notification); } - + public function notifyAboutNote($userId, $noteId) { - $notification = $this->getEntityManager()->getEntity('Notification'); + $notification = $this->getEntityManager()->getEntity('Notification'); $notification->set(array( 'type' => 'Note', 'data' => array('noteId' => $noteId), 'userId' => $userId )); - $this->getEntityManager()->saveEntity($notification); + $this->getEntityManager()->saveEntity($notification); } - + public function notifyAboutNoteFromJob($data) { $userIdList = $data['userIdList']; $noteId = $data['noteId']; - + foreach ($userIdList as $userId) { $this->notifyAboutNote($userId, $noteId); } return true; } - + public function getNotReadCount($userId) { $searchParams = array(); $searchParams['whereClause'] = array( 'userId' => $userId - ); + ); return $this->getEntityManager()->getRepository('Notification')->where(array( 'userId' => $userId, 'read' => 0, ))->count(); } - + public function markAllRead($userId) - { + { $pdo = $this->getEntityManager()->getPDO(); $sql = "UPDATE notification SET `read` = 1 WHERE user_id = ".$pdo->quote($userId)." AND `read` = 0"; $pdo->prepare($sql)->execute(); return true; } - + public function getList($userId, array $params = array()) - { + { $searchParams = array(); $searchParams['whereClause'] = array( 'userId' => $userId @@ -117,10 +117,10 @@ class Notification extends \Espo\Core\Services\Base } $searchParams['orderBy'] = 'createdAt'; $searchParams['order'] = 'DESC'; - + $collection = $this->getEntityManager()->getRepository('Notification')->find($searchParams); $count = $this->getEntityManager()->getRepository('Notification')->count($searchParams); - + $ids = array(); foreach ($collection as $k => $entity) { $ids[] = $entity->id; @@ -130,7 +130,7 @@ class Notification extends \Espo\Core\Services\Base } switch ($entity->get('type')) { case 'Note': - case 'MentionInPost': + case 'MentionInPost': $note = $this->getEntityManager()->getEntity('Note', $data->noteId); if ($note) { if ($note->get('parentId') && $note->get('parentType')) { @@ -147,8 +147,8 @@ class Notification extends \Espo\Core\Services\Base } break; } - } - + } + if (!empty($ids)) { $pdo = $this->getEntityManager()->getPDO(); $sql = "UPDATE notification SET `read` = 1 WHERE id IN ('" . implode("', '", $ids) ."')"; @@ -156,8 +156,8 @@ class Notification extends \Espo\Core\Services\Base $s = $pdo->prepare($sql); $s->execute(); } - - + + return array( 'total' => $count, 'collection' => $collection diff --git a/application/Espo/Services/Record.php b/application/Espo/Services/Record.php index bcdb38c7a8..a4bf4c3ee4 100644 --- a/application/Espo/Services/Record.php +++ b/application/Espo/Services/Record.php @@ -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\Services; @@ -44,19 +44,19 @@ class Record extends \Espo\Core\Services\Base 'selectManagerFactory', 'preferences' ); - + protected $entityName; - + private $streamService; - + protected $notFilteringFields = array(); // TODO maybe remove it - + protected $internalFields = array(); - + protected $readOnlyFields = array(); - + protected $linkSelectParams = array(); - + public function __construct() { parent::__construct(); @@ -75,69 +75,69 @@ class Record extends \Espo\Core\Services\Base { $this->entityName = $entityName; } - + protected function getServiceFactory() { return $this->injections['serviceFactory']; } - + protected function getSelectManagerFactory() { return $this->injections['selectManagerFactory']; } - + protected function getAcl() { return $this->injections['acl']; } - + protected function getFileManager() { return $this->injections['fileManager']; - } - + } + protected function getPreferences() { return $this->injections['preferences']; } - + protected function getMetadata() { return $this->injections['metadata']; } - + protected function getRepository() - { + { return $this->getEntityManager()->getRepository($this->entityName); } - + protected function getRecordService($name) - { + { if ($this->getServiceFactory()->checkExists($name)) { $service = $this->getServiceFactory()->create($name); } else { $service = $this->getServiceFactory()->create('Record'); $service->setEntityName($name); - } - + } + return $service; } - + protected function prepareEntity($entity) { - + } public function getEntity($id = null) { - $entity = $this->getRepository()->get($id); + $entity = $this->getRepository()->get($id); if (!empty($entity) && !empty($id)) { - $this->loadAdditionalFields($entity); - + $this->loadAdditionalFields($entity); + if ($entity->getEntityName() == 'Opportunity') { $contactsColumns = $entity->get('contactsColumns'); } - + if (!$this->getAcl()->check($entity, 'read')) { throw new Forbidden(); } @@ -147,7 +147,7 @@ class Record extends \Espo\Core\Services\Base } return $entity; } - + protected function getStreamService() { if (empty($this->streamService)) { @@ -155,16 +155,16 @@ class Record extends \Espo\Core\Services\Base } return $this->streamService; } - + protected function loadIsFollowed(Entity $entity) - { + { if ($this->getStreamService()->checkIsFollowed($entity)) { $entity->set('isFollowed', true); } else { $entity->set('isFollowed', false); } } - + protected function loadLinkMultipleFields(Entity $entity) { $fieldDefs = $this->getMetadata()->get('entityDefs.' . $entity->getEntityName() . '.fields', array()); @@ -173,12 +173,12 @@ class Record extends \Espo\Core\Services\Base $columns = null; if (!empty($defs['columns'])) { $columns = $defs['columns']; - } - $entity->loadLinkMultipleField($field, $columns); + } + $entity->loadLinkMultipleField($field, $columns); } } } - + protected function loadParentNameFields(Entity $entity) { $fieldDefs = $this->getMetadata()->get('entityDefs.' . $entity->getEntityName() . '.fields', array()); @@ -186,8 +186,8 @@ class Record extends \Espo\Core\Services\Base if (isset($defs['type']) && $defs['type'] == 'linkParent') { $id = $entity->get($field . 'Id'); $scope = $entity->get($field . 'Type'); - - if ($scope) { + + if ($scope) { if ($foreignEntity = $this->getEntityManager()->getEntity($scope, $id)) { $entity->set($field . 'Name', $foreignEntity->get('name')); } @@ -195,44 +195,44 @@ class Record extends \Espo\Core\Services\Base } } } - + protected function loadAdditionalFields($entity) { - $this->loadLinkMultipleFields($entity); + $this->loadLinkMultipleFields($entity); $this->loadParentNameFields($entity); $this->loadIsFollowed($entity); $this->loadEmailAddressField($entity); $this->loadPhoneNumberField($entity); } - + protected function loadEmailAddressField(Entity $entity) { - $fieldDefs = $this->getMetadata()->get('entityDefs.' . $entity->getEntityName() . '.fields', array()); + $fieldDefs = $this->getMetadata()->get('entityDefs.' . $entity->getEntityName() . '.fields', array()); if (!empty($fieldDefs['emailAddress']) && $fieldDefs['emailAddress']['type'] == 'email') { $dataFieldName = 'emailAddressData'; $entity->set($dataFieldName, $this->getEntityManager()->getRepository('EmailAddress')->getEmailAddressData($entity)); } } - + protected function loadPhoneNumberField(Entity $entity) { - $fieldDefs = $this->getMetadata()->get('entityDefs.' . $entity->getEntityName() . '.fields', array()); + $fieldDefs = $this->getMetadata()->get('entityDefs.' . $entity->getEntityName() . '.fields', array()); if (!empty($fieldDefs['phoneNumber']) && $fieldDefs['phoneNumber']['type'] == 'phone') { $dataFieldName = 'phoneNumberData'; $entity->set($dataFieldName, $this->getEntityManager()->getRepository('PhoneNumber')->getPhoneNumberData($entity)); } } - + protected function getSelectManager($entityName) { return $this->getSelectManagerFactory()->create($entityName); } - + protected function storeEntity(Entity $entity) { return $this->getRepository()->save($entity); } - + protected function isValid($entity) { $fieldDefs = $entity->getFields(); @@ -243,14 +243,14 @@ class Record extends \Espo\Core\Services\Base } return true; } - + protected function stripTags($string) { return strip_tags($string, '