diff --git a/application/Espo/Core/Acl/Table.php b/application/Espo/Core/Acl/Table.php index c99e1d5025..b46fd5a457 100644 --- a/application/Espo/Core/Acl/Table.php +++ b/application/Espo/Core/Acl/Table.php @@ -36,7 +36,7 @@ use \Espo\Entities\User; use \Espo\Core\Utils\Config; use \Espo\Core\Utils\Metadata; -use \Espo\Core\Utils\FieldManager; +use \Espo\Core\Utils\FieldManagerUtil; use \Espo\Core\Utils\File\Manager as FileManager; class Table @@ -77,7 +77,7 @@ class Table protected $forbiddenFieldsCache = array(); - public function __construct(User $user, Config $config = null, FileManager $fileManager = null, Metadata $metadata = null, FieldManager $fieldManager = null) + public function __construct(User $user, Config $config = null, FileManager $fileManager = null, Metadata $metadata = null, FieldManagerUtil $fieldManager = null) { $this->data = (object) [ 'table' => (object) [], diff --git a/application/Espo/Core/AclManager.php b/application/Espo/Core/AclManager.php index d1a7a28f6f..25e91a22ae 100644 --- a/application/Espo/Core/AclManager.php +++ b/application/Espo/Core/AclManager.php @@ -107,7 +107,7 @@ class AclManager $config = $this->getContainer()->get('config'); $fileManager = $this->getContainer()->get('fileManager'); $metadata = $this->getContainer()->get('metadata'); - $fieldManager = $this->getContainer()->get('fieldManager'); + $fieldManager = $this->getContainer()->get('fieldManagerUtil'); $this->tableHashMap[$key] = new $this->tableClassName($user, $config, $fileManager, $metadata, $fieldManager); } diff --git a/application/Espo/Core/AclPortal/Table.php b/application/Espo/Core/AclPortal/Table.php index faa21058c0..04c850246a 100644 --- a/application/Espo/Core/AclPortal/Table.php +++ b/application/Espo/Core/AclPortal/Table.php @@ -37,7 +37,7 @@ use \Espo\Entities\Portal; use \Espo\Core\Utils\Config; use \Espo\Core\Utils\Metadata; -use \Espo\Core\Utils\FieldManager; +use \Espo\Core\Utils\FieldManagerUtil; use \Espo\Core\Utils\File\Manager as FileManager; class Table extends \Espo\Core\Acl\Table @@ -52,7 +52,7 @@ class Table extends \Espo\Core\Acl\Table protected $valuePermissionList = []; - public function __construct(User $user, Portal $portal, Config $config = null, FileManager $fileManager = null, Metadata $metadata = null, FieldManager $fieldManager = null) + public function __construct(User $user, Portal $portal, Config $config = null, FileManager $fileManager = null, Metadata $metadata = null, FieldManagerUtil $fieldManager = null) { if (empty($portal)) { throw new Error("No portal was passed to AclPortal\\Table constructor."); diff --git a/application/Espo/Core/Container.php b/application/Espo/Core/Container.php index dd0c4fcd3a..4fabf97e1c 100644 --- a/application/Espo/Core/Container.php +++ b/application/Espo/Core/Container.php @@ -335,6 +335,13 @@ class Container ); } + protected function loadFieldManagerUtil() + { + return new \Espo\Core\Utils\FieldManagerUtil( + $this->get('metadata') + ); + } + protected function loadThemeManager() { return new \Espo\Core\Utils\ThemeManager( diff --git a/application/Espo/Core/Portal/AclManager.php b/application/Espo/Core/Portal/AclManager.php index 3ca70e91e8..0c7b29370e 100644 --- a/application/Espo/Core/Portal/AclManager.php +++ b/application/Espo/Core/Portal/AclManager.php @@ -108,7 +108,7 @@ class AclManager extends \Espo\Core\AclManager $config = $this->getContainer()->get('config'); $fileManager = $this->getContainer()->get('fileManager'); $metadata = $this->getContainer()->get('metadata'); - $fieldManager = $this->getContainer()->get('fieldManager'); + $fieldManager = $this->getContainer()->get('fieldManagerUtil'); $portal = $this->getPortal(); $this->tableHashMap[$key] = new $this->tableClassName($user, $portal, $config, $fileManager, $metadata, $fieldManager); diff --git a/application/Espo/Core/Utils/FieldManagerUtil.php b/application/Espo/Core/Utils/FieldManagerUtil.php new file mode 100644 index 0000000000..dabcf0cd54 --- /dev/null +++ b/application/Espo/Core/Utils/FieldManagerUtil.php @@ -0,0 +1,102 @@ +metadata = $metadata; + } + + protected function getMetadata() + { + return $this->metadata; + } + + private function getAttributeListByType($scope, $name, $type) + { + $fieldType = $this->getMetadata()->get('entityDefs.' . $scope . '.fields.' . $name . '.type'); + if (!$fieldType) return []; + + $defs = $this->getMetadata()->get('fields.' . $fieldType); + if (!$defs) return []; + if (is_object($defs)) { + $defs = get_object_vars($defs); + } + + $fieldList = []; + + if (isset($defs[$type . 'Fields'])) { + $list = $defs[$type . 'Fields']; + $naming = 'suffix'; + if (isset($defs['naming'])) { + $naming = $defs['naming']; + } + if ($naming == 'prefix') { + foreach ($list as $f) { + $fieldList[] = $f . ucfirst($name); + } + } else { + foreach ($list as $f) { + $fieldList[] = $name . ucfirst($f); + } + } + } else { + if ($type == 'actual') { + $fieldList[] = $name; + } + } + + return $fieldList; + } + + public function getActualAttributeList($scope, $name) + { + return $this->getAttributeListByType($scope, $name, 'actual'); + } + + public function getNotActualAttributeList($scope, $name) + { + return $this->getAttributeListByType($scope, $name, 'notActual'); + } + + public function getAttributeList($scope, $name) + { + return array_merge($this->getActualAttributeList($scope, $name), $this->getNotActualAttributeList($scope, $name)); + } + +} \ No newline at end of file diff --git a/application/Espo/Services/Record.php b/application/Espo/Services/Record.php index db5c0b7fe2..81219686e2 100644 --- a/application/Espo/Services/Record.php +++ b/application/Espo/Services/Record.php @@ -52,7 +52,6 @@ class Record extends \Espo\Core\Services\Base 'serviceFactory', 'fileManager', 'selectManagerFactory', - 'preferences', 'fileStorageManager', 'injectableFactory' ); @@ -146,11 +145,6 @@ class Record extends \Espo\Core\Services\Base return $this->injections['fileManager']; } - protected function getPreferences() - { - return $this->injections['preferences']; - } - protected function getMetadata() { return $this->injections['metadata'];