diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php
index dca795945620..c0e7f1d096fd 100644
--- a/app/Http/Controllers/AccountController.php
+++ b/app/Http/Controllers/AccountController.php
@@ -174,6 +174,8 @@ class AccountController extends BaseController
return self::showProducts();
} elseif ($section === ACCOUNT_TAX_RATES) {
return self::showTaxRates();
+ } elseif ($section === ACCOUNT_SYSTEM_SETTINGS) {
+ return self::showSystemSettings();
} else {
$data = [
'account' => Account::with('users')->findOrFail(Auth::user()->account_id),
@@ -184,6 +186,21 @@ class AccountController extends BaseController
}
}
+ private function showSystemSettings()
+ {
+ if (Utils::isNinjaProd()) {
+ return Redirect::to('/');
+ }
+
+ $data = [
+ 'account' => Account::with('users')->findOrFail(Auth::user()->account_id),
+ 'title' => trans("texts.system_settings"),
+ 'section' => ACCOUNT_SYSTEM_SETTINGS,
+ ];
+
+ return View::make("accounts.system_settings", $data);
+ }
+
private function showInvoiceSettings()
{
$account = Auth::user()->account;
diff --git a/app/Http/Controllers/AppController.php b/app/Http/Controllers/AppController.php
index 8c3b9b5fe59f..ce029ac15070 100644
--- a/app/Http/Controllers/AppController.php
+++ b/app/Http/Controllers/AppController.php
@@ -48,7 +48,7 @@ class AppController extends BaseController
public function doSetup()
{
- if (Utils::isNinjaProd() || (Utils::isDatabaseSetup() && Account::count() > 0)) {
+ if (Utils::isNinjaProd()) {
return Redirect::to('/');
}
@@ -57,9 +57,10 @@ class AppController extends BaseController
$app = Input::get('app');
$app['key'] = env('APP_KEY') ?: str_random(RANDOM_KEY_LENGTH);
+ $app['debug'] = Input::get('debug') ? 'true' : 'false';
$database = Input::get('database');
- $dbType = $database['default'];
+ $dbType = 'mysql'; // $database['default'];
$database['connections'] = [$dbType => $database['type']];
$mail = Input::get('mail');
@@ -78,8 +79,12 @@ class AppController extends BaseController
return Redirect::to('/setup')->withInput();
}
+ if (Utils::isDatabaseSetup() && Account::count() > 0) {
+ return Redirect::to('/');
+ }
+
$config = "APP_ENV=production\n".
- "APP_DEBUG=false\n".
+ "APP_DEBUG={$app['debug']}\n".
"APP_URL={$app['url']}\n".
"APP_KEY={$app['key']}\n\n".
"DB_TYPE={$dbType}\n".
@@ -120,17 +125,68 @@ class AppController extends BaseController
return Redirect::to('/login');
}
+ public function updateSetup()
+ {
+ if (Utils::isNinjaProd()) {
+ return Redirect::to('/');
+ }
+
+ if (!Auth::check() && Utils::isDatabaseSetup() && Account::count() > 0) {
+ return Redirect::to('/');
+ }
+
+ if ( ! $canUpdateEnv = @fopen(base_path()."/.env", 'w')) {
+ Session::flash('error', 'Warning: Permission denied to write to .env config file, try running sudo chown www-data:www-data /path/to/ninja/.env
');
+ return Redirect::to('/settings/system_settings');
+ }
+
+ $app = Input::get('app');
+ $db = Input::get('database');
+ $mail = Input::get('mail');
+
+ $_ENV['APP_URL'] = $app['url'];
+ $_ENV['APP_DEBUG'] = Input::get('debug') ? 'true' : 'false';
+
+ $_ENV['DB_TYPE'] = 'mysql'; // $db['default'];
+ $_ENV['DB_HOST'] = $db['type']['host'];
+ $_ENV['DB_DATABASE'] = $db['type']['database'];
+ $_ENV['DB_USERNAME'] = $db['type']['username'];
+ $_ENV['DB_PASSWORD'] = $db['type']['password'];
+
+ if ($mail) {
+ $_ENV['MAIL_DRIVER'] = $mail['driver'];
+ $_ENV['MAIL_PORT'] = $mail['port'];
+ $_ENV['MAIL_ENCRYPTION'] = $mail['encryption'];
+ $_ENV['MAIL_HOST'] = $mail['host'];
+ $_ENV['MAIL_USERNAME'] = $mail['username'];
+ $_ENV['MAIL_FROM_NAME'] = $mail['from']['name'];
+ $_ENV['MAIL_PASSWORD'] = $mail['password'];
+ $_ENV['MAIL_FROM_ADDRESS'] = $mail['username'];
+ }
+
+ $config = '';
+ foreach ($_ENV as $key => $val) {
+ $config .= "{$key}={$val}\n";
+ }
+
+ $fp = fopen(base_path()."/.env", 'w');
+ fwrite($fp, $config);
+ fclose($fp);
+
+ Session::flash('message', trans('texts.updated_settings'));
+ return Redirect::to('/settings/system_settings');
+ }
+
private function testDatabase($database)
{
- $dbType = $database['default'];
-
+ $dbType = 'mysql'; // $database['default'];
Config::set('database.default', $dbType);
-
foreach ($database['connections'][$dbType] as $key => $val) {
Config::set("database.connections.{$dbType}.{$key}", $val);
}
-
+
try {
+ DB::reconnect();
$valid = DB::connection()->getDatabaseName() ? true : false;
} catch (Exception $e) {
return $e->getMessage();
diff --git a/app/Http/routes.php b/app/Http/routes.php
index 81bbea787e0f..95213fb93966 100644
--- a/app/Http/routes.php
+++ b/app/Http/routes.php
@@ -184,6 +184,7 @@ Route::group(['middleware' => 'auth'], function() {
Route::post('credits/bulk', 'CreditController@bulk');
get('/resend_confirmation', 'AccountController@resendConfirmation');
+ post('/update_setup', 'AppController@updateSetup');
});
// Route groups for API
@@ -278,6 +279,7 @@ if (!defined('CONTACT_EMAIL')) {
define('ACCOUNT_TEMPLATES_AND_REMINDERS', 'templates_and_reminders');
define('ACCOUNT_API_TOKENS', 'api_tokens');
define('ACCOUNT_CUSTOMIZE_DESIGN', 'customize_design');
+ define('ACCOUNT_SYSTEM_SETTINGS', 'system_settings');
define('ACTION_RESTORE', 'restore');
define('ACTION_ARCHIVE', 'archive');
diff --git a/public/js/built.js b/public/js/built.js
index 986575dbb9b2..4127db4eafd4 100644
--- a/public/js/built.js
+++ b/public/js/built.js
@@ -32231,7 +32231,7 @@ NINJA.parseRegExpLine = function(line, regExp, formatter, groupText)
var parts = [];
var lastIndex = 0;
- while (match = regExp.exec(line)) {
+ while (match = regExp.exec(line + '\n')) {
if (match.index > lastIndex) {
parts.push(line.substring(lastIndex, match.index));
}
diff --git a/resources/lang/en/texts.php b/resources/lang/en/texts.php
index a6ddecf599f6..3c62d26bf244 100644
--- a/resources/lang/en/texts.php
+++ b/resources/lang/en/texts.php
@@ -893,5 +893,7 @@ return array(
'quote_is_approved' => 'This quote is approved',
'apply_credit' => 'Apply Credit',
+ 'system_settings' => 'System Settings',
+
);
diff --git a/resources/views/accounts/nav.blade.php b/resources/views/accounts/nav.blade.php
index b0df2e5e4643..ae7f38c2fa8b 100644
--- a/resources/views/accounts/nav.blade.php
+++ b/resources/views/accounts/nav.blade.php
@@ -16,7 +16,7 @@
sudo chown yourname:www-data /path/to/ninja+
sudo chown www-data:www-data /path/to/ninja/.env