envEditor = $envEditor; } public function behaviors() { return [ 'access' => [ 'class' => AccessControl::class, 'rules' => [ [ 'allow' => true, 'roles' => ['administrator'] ], ], ], ]; } public function actionIndex() { return $this->render('index', [ 'smsDeliverers' => $this->getSmsSenders(), 'integration_settings' => $this->getIntegrationSettings(), 'telegram_settings' => $this->getTelegramConfig(), ]); } public function actionSaveSettings() { Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; $integration_settings = Yii::$app->request->post('integration_settings'); try { foreach ($integration_settings as $name => $value) { $setting = IntegrationSetting::find()->where(['name' => $name])->one(); if ($setting) { $setting->value = $value; if (!$setting->save()) { throw new RecordNotValid($setting); } } } $this->setEnvVariables(Yii::$app->request->post('environment_settings')); return ['status' => true]; } catch (\Throwable $e) { return [ 'status' => false, 'error' => $e->getMessage(), ]; } } private function setEnvVariables(array $settings) { if ($settings) { $env = $this->envEditor->load( FileHelper::normalizePath( Yii::getAlias('@base') . EnvSettingsController::ENV_FILE_PATH ) ); foreach ($settings as $key => $value) { if ($value) { $env->setKey($key, $value); } } $env->save(); } } private function getSmsSenders(): array { return [ 'SMS Aero' => [ SmsAeroSmsDeliverer::SMSAERO_EMAIL_ENV => ['Email пользователя', getenv(SmsAeroSmsDeliverer::SMSAERO_EMAIL_ENV)], SmsAeroSmsDeliverer::SMSAERO_API_KEY_ENV => ['API key', getenv(SmsAeroSmsDeliverer::SMSAERO_API_KEY_ENV)], ], 'Smsc.ru' => [ SmscSmsDeliverer::SMSC_LOGIN_ENV => ['Логин', getenv(SmscSmsDeliverer::SMSC_LOGIN_ENV)], SmscSmsDeliverer::SMSC_PASSWORD_ENV => ['Пароль', getenv(SmscSmsDeliverer::SMSC_PASSWORD_ENV)], ], 'SMS.RU' => [ SmsRuSmsDeliverer::SMSRU_API_KEY_ENV => ['API key', getenv(SmsRuSmsDeliverer::SMSRU_API_KEY_ENV)], ], 'Ssms.su' => [ SsmsSmsDeliverer::SMSS_API_KEY_ENV => ['API key', getenv(SsmsSmsDeliverer::SMSS_API_KEY_ENV)], ], ]; } private function getTelegramConfig(): array { return [ 'Telegram Bot' => [ TelegramMessageDeliverer::BOT_TOKEN_ENV => ['API Токен бота', getenv(TelegramMessageDeliverer::BOT_TOKEN_ENV)], ] ]; } private function getIntegrationSettings(): array { $settings = IntegrationSetting::find()->all(); $result = []; foreach ($settings as $setting) { $result[$setting->name] = $setting->value; } return $result; } }