[], 'address' => [], 'city' => [], 'state' => [], 'postal_code' => [], 'country_id' => ['options' => $this->activeCountryOptions()], 'phone' => [], 'fax' => [], 'website' => [], 'vat_id' => [], 'companyDomain' => [], 'userLimit' => [], 'multiCompany' => [], 's3Storage' => [], 'autoAnswer' => [], 'autoAnswerTimeout' => [], 'whatsAppCountryCode' => ['options' => $this->whatsappCountryOptions()], 'softphoneAutoHold' => [], 'softphonePauseEnableDnd' => [], 'softphoneSurveyTransfer' => [], 'dndEnabledForAll' => [], 'companyServerType' => [], 'smsApiLink' => [], 'smsSender' => [], 'smsUser' => [], 'smsPass' => [], 'pbxWssUrl' => [], 'pbxWssPort' => [], 'externalProfileUrl' => [], 'missedCallsAlertEmail' => [], 'missedCallsAlertMinutes' => [], 'web_hook_link' => [], 'call_throw_did' => [], ]; } /** * Return the company data settings as a flat list of key/value pairs. * * @param mixed $companyId * @return array[] */ public function getSettings($companyId): array { $settings = []; foreach ($this->fieldDefinitions() as $fieldKey => $def) { $entry = [ 'key' => $fieldKey, 'value' => $this->resolveValue($fieldKey, $companyId), ]; if (!empty($def['options'])) { $entry['options'] = $def['options']; } $settings[] = $entry; } return $settings; } /** * Resolve a field value exactly like the web form model does. * * @param string $fieldKey * @param mixed $companyId * @return mixed */ private function resolveValue(string $fieldKey, $companyId) { switch ($fieldKey) { case 'company_name': return CompanySettings::get('S_COMPANY_NAME'); case 'address': return CompanySettings::get('S_COMPANY_ADDRESS_'); case 'city': return CompanySettings::get('S_COMPANY_CITY'); case 'state': return CompanySettings::get('S_COMPANY_STATE'); case 'postal_code': return CompanySettings::get('S_COMPANY_POSTAL_CODE'); case 'country_id': return CompanySettings::get('S_COMPANY_COUNTRY'); case 'phone': return CompanySettings::get('S_COMPANY_PHONE'); case 'fax': return CompanySettings::get('S_COMPANY_FAX'); case 'website': return CompanySettings::get('S_COMPANY_WEBSITE'); case 'vat_id': return CompanySettings::get('S_COMPANY_VAT_ID'); case 'companyDomain': return CompanySettings::get('S_COMPANY_DOMAIN'); case 'userLimit': return CompanySettings::get('S_COMPANY_USERLIMIT'); case 'multiCompany': return $this->toBool(CompanySettings::get('S_COMPANY_MULTI_COMPANY')); case 's3Storage': return $this->toBool(CompanySettings::get('S_COMPANY_S3_STORAGE')); case 'autoAnswer': return $this->toBool(CompanySettings::get('S_COMPANY_SOFTPHONE_AUTO_ANSWER')); case 'autoAnswerTimeout': return SettingsHelper::normalizeSoftphoneAutoAnswerTimeout( CompanySettings::get(SettingsHelper::S_COMPANY_SOFTPHONE_AUTO_ANSWER_TIMEOUT) ); case 'whatsAppCountryCode': return SettingsHelper::normalizeWhatsAppCountryCode( CompanySettings::get(SettingsHelper::S_COMPANY_WHATSAPP_COUNTRY_CODE) ); case 'softphoneAutoHold': return $this->toBool(CompanySettings::get('S_COMPANY_SOFTPHONE_AUTO_HOLD')); case 'softphonePauseEnableDnd': return $this->toBool(CompanySettings::get(SettingsHelper::S_COMPANY_SOFTPHONE_PAUSE_ENABLE_DND)); case 'softphoneSurveyTransfer': return $this->toBool(CompanySettings::get(SettingsHelper::S_COMPANY_SOFTPHONE_SURVEY_TRANSFER)); case 'dndEnabledForAll': return $this->isDndEnabledForAllUsers($companyId); case 'companyServerType': return CompanySettings::get(SettingsHelper::S_COMPANY_SERVERTYPE); case 'smsApiLink': return CompanySettings::get('S_COMPANY_SMSAPI_LINK'); case 'smsSender': return CompanySettings::get('S_COMPANY_SMSSENDER'); case 'smsUser': return CompanySettings::get('S_COMPANY_SMSUSER'); case 'smsPass': return CompanySettings::get('S_COMPANY_SMSPASS'); case 'pbxWssUrl': return CompanySettings::get(SettingsHelper::S_PBX_WSS_URL); case 'pbxWssPort': return CompanySettings::get(SettingsHelper::S_PBX_WSS_PORT); case 'externalProfileUrl': return CompanySettings::get(SettingsHelper::S_EXTERNAL_PROFILE_URL); case 'missedCallsAlertEmail': return CompanySettings::get(SettingsHelper::S_MISSED_CALLS_ALERT_EMAIL); case 'missedCallsAlertMinutes': return (int) CompanySettings::get(SettingsHelper::S_MISSED_CALLS_ALERT_MINUTES, 10); case 'web_hook_link': return CompanySettings::get(SettingsHelper::S_API_WEB_HOOK_LINK); case 'call_throw_did': return CompanySettings::get(SettingsHelper::S_API_CALL_THROW_DID); default: return null; } } private function toBool($value): bool { return in_array((string) $value, ['1', 'true', 'on', 'yes'], true); } private function isDndEnabledForAllUsers($companyId): bool { return User::where('company_id', $companyId) ->where('dnd_enabled', 0) ->count() === 0; } private function activeCountryOptions(): array { $options = []; foreach (Country::whereIsActive(1)->pluck('name', 'id')->toArray() as $id => $name) { $options[] = ['id' => (string) $id, 'name' => $name]; } return $options; } private function whatsappCountryOptions(): array { $options = []; foreach (SettingsHelper::whatsappCountryOptions() as $code => $name) { $options[] = ['id' => (string) $code, 'name' => $name]; } return $options; } }