<?php namespace App\Repositories\Eloquent; use App\Models\AppConfig; use App\Repositories\Contracts\SettingsRepository; use Exception; class EloquentSettingsRepository extends EloquentBaseRepository implements SettingsRepository { /** * EloquentSettingsRepository constructor. * * @param AppConfig $app_config */ public function __construct(AppConfig $app_config) { parent::__construct($app_config); } /** * update general settings * * @param array $input * * @return bool */ public function general(array $input): bool { foreach ($input as $key => $value) { AppConfig::where('setting', $key)->update([ 'value' => $value, ]); } return true; } /** * update system email settings * * @param array $input * * @return bool */ public function systemEmail(array $input): bool { if ($input['driver'] == 'sendmail') { AppConfig::setEnv('MAIL_DRIVER', 'sendmail'); } else { $smtpSetting = 'MAIL_DRIVER=smtp'.' MAIL_HOST='.$input['host'].' MAIL_PORT='.$input['port'].' MAIL_USERNAME='.$input['username'].' MAIL_PASSWORD='.$input['password'].' MAIL_ENCRYPTION='.$input['encryption'].' '; // @ignoreCodingStandard $env = file_get_contents(base_path('.env')); $rows = explode("\n", $env); $unwanted = "MAIL_DRIVER|MAIL_HOST|MAIL_PORT|MAIL_USERNAME|MAIL_PASSWORD|MAIL_ENCRYPTION"; $cleanArray = preg_grep("/$unwanted/i", $rows, PREG_GREP_INVERT); $cleanString = implode("\n", $cleanArray); $env = $cleanString.$smtpSetting; file_put_contents(base_path('.env'), $env); } AppConfig::setEnv('MAIL_FROM_ADDRESS', $input['from_email']); AppConfig::setEnv('MAIL_FROM_NAME', $input['from_name']); foreach ($input as $key => $value) { AppConfig::where('setting', $key)->update([ 'value' => $value, ]); } return true; } /** * update authentication settings * * @param array $input * * @return bool */ public function authentication(array $input): bool { $captcha_login = "true"; $captcha_registration = "true"; $login_with_facebook = "false"; $login_with_twitter = "false"; $login_with_google = "false"; $login_with_github = "false"; $client_registration = "true"; $registration_verification = "true"; $two_factor = "false"; if ($input['two_factor'] == 1) { $two_factor = "true"; } AppConfig::setEnv('TWO_FACTOR', $two_factor); if ($input['captcha_site_key'] != null) { AppConfig::setEnv('NOCAPTCHA_SITEKEY', $input['captcha_site_key']); } if ($input['captcha_secret_key'] != null) { AppConfig::setEnv('NOCAPTCHA_SECRET', $input['captcha_secret_key']); } if ($input['two_factor_send_by'] != null) { AppConfig::setEnv('AUTH_CODE_SEND_BY', $input['two_factor_send_by']); } if ($input['captcha_in_login'] == 0) { $captcha_login = "false"; } if ($input['captcha_in_client_registration'] == 0) { $captcha_registration = "false"; } if ($input['client_registration'] == 0) { $client_registration = "false"; } if ($input['registration_verification'] == 0) { $registration_verification = "false"; } if ($input['login_with_facebook'] == 1) { $login_with_facebook = "true"; $facebook_redirect = config('app.url').'/login/facebook/callback'; AppConfig::setEnv('FACEBOOK_CLIENT_ID', $input['facebook_client_id']); AppConfig::setEnv('FACEBOOK_CLIENT_SECRET', $input['facebook_client_secret']); AppConfig::setEnv('FACEBOOK_REDIRECT', $facebook_redirect); } if ($input['login_with_twitter'] == 1) { $login_with_twitter = "true"; $twitter_redirect = config('app.url').'/login/twitter/callback'; AppConfig::setEnv('TWITTER_CLIENT_ID', $input['twitter_client_id']); AppConfig::setEnv('TWITTER_CLIENT_SECRET', $input['twitter_client_secret']); AppConfig::setEnv('TWITTER_REDIRECT', $twitter_redirect); } if ($input['login_with_google'] == 1) { $login_with_google = "true"; $google_redirect = config('app.url').'/login/google/callback'; AppConfig::setEnv('GOOGLE_CLIENT_ID', $input['google_client_id']); AppConfig::setEnv('GOOGLE_CLIENT_SECRET', $input['google_client_secret']); AppConfig::setEnv('GOOGLE_REDIRECT', $google_redirect); } if ($input['login_with_github'] == 1) { $login_with_github = "true"; $github_redirect = config('app.url').'/login/github/callback'; AppConfig::setEnv('GITHUB_CLIENT_ID', $input['github_client_id']); AppConfig::setEnv('GITHUB_CLIENT_SECRET', $input['github_client_secret']); AppConfig::setEnv('GITHUB_REDIRECT', $github_redirect); } AppConfig::setEnv('NOCAPTCHA_IN_LOGIN', $captcha_login); AppConfig::setEnv('NOCAPTCHA_IN_REGISTRATION', $captcha_registration); AppConfig::setEnv('SOCIALITE_FACEBOOK', $login_with_facebook); AppConfig::setEnv('SOCIALITE_TWITTER', $login_with_twitter); AppConfig::setEnv('SOCIALITE_GOOGLE', $login_with_google); AppConfig::setEnv('SOCIALITE_GITHUB', $login_with_github); AppConfig::setEnv('ACCOUNT_CAN_REGISTER', $client_registration); AppConfig::setEnv('ACCOUNT_VERIFICATION', $registration_verification); foreach ($input as $key => $value) { AppConfig::where('setting', $key)->update([ 'value' => $value, ]); } return true; } /** * update notification settings * * @param array $input * * @return bool */ public function notifications(array $input): bool { foreach (AppConfig::notificationsValues() as $value) { AppConfig::where('setting', $value)->update(['value' => false]); } foreach ($input as $key => $value) { AppConfig::where('setting', $key)->update([ 'value' => $value, ]); } return true; } /** * update pusher settings * * @param array $input * * @return bool */ public function pusherSettings(array $input): bool { $app_id = $input['app_id']; $app_key = $input['app_key']; $app_secret = $input['app_secret']; $app_cluster = $input['app_cluster']; $driver = $input['broadcast_driver']; $pusher_setting = 'PUSHER_APP_ID='.$app_id.' PUSHER_APP_KEY='.$app_key.' PUSHER_APP_SECRET='.$app_secret.' PUSHER_APP_CLUSTER='.$app_cluster.' BROADCAST_DRIVER='.$driver.' '; // @ignoreCodingStandard $env = file_get_contents(base_path('.env')); $rows = explode("\n", $env); $unwanted = "PUSHER_APP_ID|PUSHER_APP_KEY|PUSHER_APP_SECRET|PUSHER_APP_CLUSTER|BROADCAST_DRIVER"; $cleanArray = preg_grep("/$unwanted/i", $rows, PREG_GREP_INVERT); $cleanString = implode("\n", $cleanArray); $env = $cleanString.$pusher_setting; try { file_put_contents(base_path('.env'), $env); return true; } catch (Exception $e) { return false; } } public function localization(array $input) { // TODO: Implement localization() method. } public function backgroundJob(array $input) { // TODO: Implement backgroundJob() method. } public function license(array $input) { // TODO: Implement license() method. } public function upgradeApplication(array $input) { // TODO: Implement upgradeApplication() method. } }