public function getFieldsConfig() {
		$cachePath = 'local_fields_fields_schema';
		$cached = Cache::read($cachePath, CAKE_LDAP_CACHE_KEY_LDAP_SYNC_DB);
		if ($cached !== false) {
			return $cached;
		}

		$result = [];
		$schema = $this->schema();
		$ldapFieldsInfo = $this->_modelConfigSync->getLdapFieldsInfo();
		$bindModelFields = $this->_getListBindModelFields();
		foreach ($schema as $fieldName => $fieldInfo) {
			switch ($fieldName) {
				case CAKE_LDAP_LDAP_ATTRIBUTE_OBJECT_GUID:
					$type = 'guid';
					break;
				case CAKE_LDAP_LDAP_ATTRIBUTE_BIRTHDAY:
					$type = 'date';
					break;
				case CAKE_LDAP_LDAP_ATTRIBUTE_PHOTO:
					$type = 'photo';
					break;
				case CAKE_LDAP_LDAP_ATTRIBUTE_MAIL:
					$type = 'mail';
					break;
				default:
					$type = $fieldInfo['type'];
			}
			$truncate = (bool)Hash::get($ldapFieldsInfo, $fieldName . '.truncate');
			$result[$this->alias . '.' . $fieldName] = compact('type', 'truncate');
		}

		foreach ($bindModelFields as $fieldName => $bindFieldName) {
			switch ($fieldName) {
				case CAKE_LDAP_LDAP_ATTRIBUTE_DEPARTMENT:
					//$type = 'department';
					$type = 'string';
					break;
				case CAKE_LDAP_LDAP_ATTRIBUTE_MANAGER:
					$type = 'manager';
					break;
				case CAKE_LDAP_LDAP_ATTRIBUTE_OTHER_TELEPHONE_NUMBER:
				case CAKE_LDAP_LDAP_ATTRIBUTE_OTHER_MOBILE_TELEPHONE_NUMBER:
					$type = 'string';
					break;
			}
			$truncate = (bool)Hash::get($ldapFieldsInfo, $fieldName . '.truncate');
			$result[$bindFieldName] = compact('type', 'truncate');
		}

		$extendFieldsConfig = $this->getExtendFieldsConfig();
		if (!empty($extendFieldsConfig) && is_array($extendFieldsConfig)) {
			$result += $extendFieldsConfig;
		}
		Cache::write($cachePath, $result, CAKE_LDAP_CACHE_KEY_LDAP_SYNC_DB);

		return $result;
	}