Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 46 additions & 8 deletions src/Console/Commands/ProEnable.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,7 +17,8 @@ class ProEnable extends Command
* @var string
*/
protected $signature = 'statamic:pro:enable
{ --force : Force the operation to run when in production }';
{ --force : Force the operation to run when in production }
{ --update-config : Also update editions config to reference .env var }';

/**
* The console command description.
Expand All@@ -37,14 +38,21 @@ public function handle()
return;
}

$this->laravel['config']['statamic.editions.pro'] = true;

$this->checkInfo('Statamic Pro successfully enabled in .env file!');

if ($this->configNotReferencingEnv()) {
$this->crossLine('Statamic editions config not currently referencing .env file.');
if ($this->option('update-config') && $this->updateConfig()) {
$this->checkInfo('Statamic editions config successfully updated to reference .env var!');
}

if ($this->option('update-config') && ! $this->isConfigReferencingEnv()) {
$this->crossLine('Could not reliably update editions config to reference .env var!');
$this->comment(PHP_EOL.'For this setting to take effect, please modify your [config/statamic/editions.php] as follows:');
$this->line("'pro' => env('STATAMIC_PRO_ENABLED', false)");
} elseif (! $this->isConfigReferencingEnv()) {
$this->crossLine('Statamic editions config not currently referencing .env var!');
$this->comment('Please re-run this command with the `--update-config` option.');
} else {
$this->laravel['config']['statamic.editions.pro'] = true;
}
}

Expand DownExpand Up@@ -123,16 +131,46 @@ protected function envContents()
}

/**
* Check whether the editions config is referencing the .env var.
* Update editions config to reference the .env var.
*
* @return bool
*/
protected function configNotReferencingEnv()
protected function updateConfig()
{
if (! file_exists($configPath = config_path('statamic/editions.php'))) {
return false;
}

return ! preg_match('/[\'"]pro[\'"]\s*=>\s*env\([\'"]STATAMIC_PRO_ENABLED[\'"]/m', file_get_contents($configPath));
if ($this->isConfigReferencingEnv()) {
return false;
}

$contents = file_get_contents($configPath);

if (str_contains($contents, "'pro' => false,")) {
$contents = str_replace("'pro' => false,", "'pro' => env('STATAMIC_PRO_ENABLED', false),", $contents);
} elseif (str_contains($contents, "'pro' => true,")) {
$contents = str_replace("'pro' => true,", "'pro' => env('STATAMIC_PRO_ENABLED', false),", $contents);
} else {
return false;
}

file_put_contents($configPath, $contents);

return true;
}

/**
* Check whether the editions config is referencing the .env var.
*
* @return bool
*/
protected function isConfigReferencingEnv()
{
if (! file_exists($configPath = config_path('statamic/editions.php'))) {
return true;
}

return (bool) preg_match('/[\'"]pro[\'"]\s*=>\s*env\([\'"]STATAMIC_PRO_ENABLED[\'"]/m', file_get_contents($configPath));
}
}
13 changes: 2 additions & 11 deletions src/Statamic.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,7 @@
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Vite;
use Laravel\Nova\Nova;
Expand DownExpand Up@@ -48,17 +49,7 @@ public static function pro()

public static function enablePro()
{
$path = config_path('statamic/editions.php');

$contents = File::get($path);

if (! Str::contains($contents, "'pro' => false,")) {
throw new \Exception('Could not reliably update the config file.');
}

$contents = str_replace("'pro' => false,", "'pro' => true,", $contents);

File::put($path, $contents);
Artisan::call('statamic:pro:enable', ['--update-config' => true]);
}

public static function availableScripts(Request $request)
Expand Down
209 changes: 209 additions & 0 deletions tests/Console/Commands/ProEnableTest.php
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
<?php

namespace Tests\Console\Commands;

use Illuminate\Filesystem\Filesystem;
use Statamic\Statamic;
use Tests\TestCase;

class ProEnableTest extends TestCase
{
private $files;
private $envPath;
private $editionsPath;
private $defaultEnvContents;
private $defaultEditionsContents;

public function setUp(): void
{
parent::setUp();

$this->files = app(Filesystem::class);

$this->envPath = base_path('.env');
$this->editionsPath = config_path('statamic/editions.php');

$this->defaultEnvContents = <<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=false
STATAMIC_LICENSE_KEY=
ENV;

$this->defaultEditionsContents = $this->files->get(__DIR__.'/../../../config/editions.php');

$this->files->put($this->envPath, $this->defaultEnvContents);

$this->files->makeDirectory(dirname($this->editionsPath), 0777, true, true);
$this->files->put($this->editionsPath, $this->defaultEditionsContents);
}

protected function getEnvironmentSetUp($app)
{
parent::getEnvironmentSetUp($app);

$app['config']->set('statamic.editions.pro', false);
}

public function tearDown(): void
{
$this->files->delete($this->envPath);
$this->files->delete($this->editionsPath);

parent::tearDown();
}

/** @test */
public function it_can_enable_pro_by_updating_existing_var_in_env()
{
$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this->artisan('statamic:pro:enable');

$this->assertTrue(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));
}

/** @test */
public function it_can_enable_pro_by_appending_to_env()
{
$this->files->put($this->envPath, $this->defaultEnvContents = <<<'ENV'
APP_NAME=Statamic
STATAMIC_LICENSE_KEY=
ENV);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));

$this->artisan('statamic:pro:enable');

$this->assertTrue(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_LICENSE_KEY=
STATAMIC_PRO_ENABLED=true
ENV, $this->files->get($this->envPath));
}

/** @test */
public function if_config_is_not_referencing_env_var_it_should_prompt_user_to_run_with_update_config_option()
{
$this->files->put($this->editionsPath, $this->defaultEditionsContents = <<<'EDITIONS'
<?php

return [

'pro' => env('WRONG!!!', false),

'addons' => [
//
],

];
EDITIONS);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this
->artisan('statamic:pro:enable')
->expectsOutput('Please re-run this command with the `--update-config` option.');

// Though it should still update .env
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));

// Pro should not be enabled in the in-memory config, because config is not properly referencing .env var yet
$this->assertFalse(Statamic::pro());
}

public static function hardcodedBooleans()
{
return [
'true' => ['true'],
'false' => ['false'],
];
}

/**
* @test
*
* @dataProvider hardcodedBooleans
*/
public function it_can_update_editions_config_to_reference_env_var($boolean)
{
$this->files->put($this->editionsPath, <<<"EDITIONS"
<?php

return [

'pro' => $boolean,

'addons' => [
//
],

];

EDITIONS);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this->artisan('statamic:pro:enable', ['--update-config' => true]);

$this->assertTrue(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));
}

/** @test */
public function if_it_has_trouble_updating_editions_config_it_should_instruct_user()
{
$this->files->put($this->editionsPath, <<<'EDITIONS'
<?php

return [

'pro' => 'wabbajack', // It should fail trying to update this!

'addons' => [
//
],

];
EDITIONS);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this
->artisan('statamic:pro:enable', ['--update-config' => true])
->expectsOutput(PHP_EOL.'For this setting to take effect, please modify your [config/statamic/editions.php] as follows:')
->expectsOutput("'pro' => env('STATAMIC_PRO_ENABLED', false)");

// Though it should still update .env
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));

// Pro should not be enabled in the in-memory config, because config is not properly referencing .env var yet
$this->assertFalse(Statamic::pro());
}
}
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
[4.x] Enable pro fix and improvements by jesseleite · Pull Request #9763 · statamic/cms · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 46 additions & 8 deletions src/Console/Commands/ProEnable.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,7 +17,8 @@ class ProEnable extends Command
* @var string
*/
protected $signature = 'statamic:pro:enable
{ --force : Force the operation to run when in production }';
{ --force : Force the operation to run when in production }
{ --update-config : Also update editions config to reference .env var }';

/**
* The console command description.
Expand All@@ -37,14 +38,21 @@ public function handle()
return;
}

$this->laravel['config']['statamic.editions.pro'] = true;

$this->checkInfo('Statamic Pro successfully enabled in .env file!');

if ($this->configNotReferencingEnv()) {
$this->crossLine('Statamic editions config not currently referencing .env file.');
if ($this->option('update-config') && $this->updateConfig()) {
$this->checkInfo('Statamic editions config successfully updated to reference .env var!');
}

if ($this->option('update-config') && ! $this->isConfigReferencingEnv()) {
$this->crossLine('Could not reliably update editions config to reference .env var!');
$this->comment(PHP_EOL.'For this setting to take effect, please modify your [config/statamic/editions.php] as follows:');
$this->line("'pro' => env('STATAMIC_PRO_ENABLED', false)");
} elseif (! $this->isConfigReferencingEnv()) {
$this->crossLine('Statamic editions config not currently referencing .env var!');
$this->comment('Please re-run this command with the `--update-config` option.');
} else {
$this->laravel['config']['statamic.editions.pro'] = true;
}
}

Expand DownExpand Up@@ -123,16 +131,46 @@ protected function envContents()
}

/**
* Check whether the editions config is referencing the .env var.
* Update editions config to reference the .env var.
*
* @return bool
*/
protected function configNotReferencingEnv()
protected function updateConfig()
{
if (! file_exists($configPath = config_path('statamic/editions.php'))) {
return false;
}

return ! preg_match('/[\'"]pro[\'"]\s*=>\s*env\([\'"]STATAMIC_PRO_ENABLED[\'"]/m', file_get_contents($configPath));
if ($this->isConfigReferencingEnv()) {
return false;
}

$contents = file_get_contents($configPath);

if (str_contains($contents, "'pro' => false,")) {
$contents = str_replace("'pro' => false,", "'pro' => env('STATAMIC_PRO_ENABLED', false),", $contents);
} elseif (str_contains($contents, "'pro' => true,")) {
$contents = str_replace("'pro' => true,", "'pro' => env('STATAMIC_PRO_ENABLED', false),", $contents);
} else {
return false;
}

file_put_contents($configPath, $contents);

return true;
}

/**
* Check whether the editions config is referencing the .env var.
*
* @return bool
*/
protected function isConfigReferencingEnv()
{
if (! file_exists($configPath = config_path('statamic/editions.php'))) {
return true;
}

return (bool) preg_match('/[\'"]pro[\'"]\s*=>\s*env\([\'"]STATAMIC_PRO_ENABLED[\'"]/m', file_get_contents($configPath));
}
}
13 changes: 2 additions & 11 deletions src/Statamic.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,7 @@
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Vite;
use Laravel\Nova\Nova;
Expand DownExpand Up@@ -48,17 +49,7 @@ public static function pro()

public static function enablePro()
{
$path = config_path('statamic/editions.php');

$contents = File::get($path);

if (! Str::contains($contents, "'pro' => false,")) {
throw new \Exception('Could not reliably update the config file.');
}

$contents = str_replace("'pro' => false,", "'pro' => true,", $contents);

File::put($path, $contents);
Artisan::call('statamic:pro:enable', ['--update-config' => true]);
}

public static function availableScripts(Request $request)
Expand Down
209 changes: 209 additions & 0 deletions tests/Console/Commands/ProEnableTest.php
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
<?php

namespace Tests\Console\Commands;

use Illuminate\Filesystem\Filesystem;
use Statamic\Statamic;
use Tests\TestCase;

class ProEnableTest extends TestCase
{
private $files;
private $envPath;
private $editionsPath;
private $defaultEnvContents;
private $defaultEditionsContents;

public function setUp(): void
{
parent::setUp();

$this->files = app(Filesystem::class);

$this->envPath = base_path('.env');
$this->editionsPath = config_path('statamic/editions.php');

$this->defaultEnvContents = <<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=false
STATAMIC_LICENSE_KEY=
ENV;

$this->defaultEditionsContents = $this->files->get(__DIR__.'/../../../config/editions.php');

$this->files->put($this->envPath, $this->defaultEnvContents);

$this->files->makeDirectory(dirname($this->editionsPath), 0777, true, true);
$this->files->put($this->editionsPath, $this->defaultEditionsContents);
}

protected function getEnvironmentSetUp($app)
{
parent::getEnvironmentSetUp($app);

$app['config']->set('statamic.editions.pro', false);
}

public function tearDown(): void
{
$this->files->delete($this->envPath);
$this->files->delete($this->editionsPath);

parent::tearDown();
}

/** @test */
public function it_can_enable_pro_by_updating_existing_var_in_env()
{
$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this->artisan('statamic:pro:enable');

$this->assertTrue(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));
}

/** @test */
public function it_can_enable_pro_by_appending_to_env()
{
$this->files->put($this->envPath, $this->defaultEnvContents = <<<'ENV'
APP_NAME=Statamic
STATAMIC_LICENSE_KEY=
ENV);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));

$this->artisan('statamic:pro:enable');

$this->assertTrue(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_LICENSE_KEY=
STATAMIC_PRO_ENABLED=true
ENV, $this->files->get($this->envPath));
}

/** @test */
public function if_config_is_not_referencing_env_var_it_should_prompt_user_to_run_with_update_config_option()
{
$this->files->put($this->editionsPath, $this->defaultEditionsContents = <<<'EDITIONS'
<?php

return [

'pro' => env('WRONG!!!', false),

'addons' => [
//
],

];
EDITIONS);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this
->artisan('statamic:pro:enable')
->expectsOutput('Please re-run this command with the `--update-config` option.');

// Though it should still update .env
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));

// Pro should not be enabled in the in-memory config, because config is not properly referencing .env var yet
$this->assertFalse(Statamic::pro());
}

public static function hardcodedBooleans()
{
return [
'true' => ['true'],
'false' => ['false'],
];
}

/**
* @test
*
* @dataProvider hardcodedBooleans
*/
public function it_can_update_editions_config_to_reference_env_var($boolean)
{
$this->files->put($this->editionsPath, <<<"EDITIONS"
<?php

return [

'pro' => $boolean,

'addons' => [
//
],

];

EDITIONS);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this->artisan('statamic:pro:enable', ['--update-config' => true]);

$this->assertTrue(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));
}

/** @test */
public function if_it_has_trouble_updating_editions_config_it_should_instruct_user()
{
$this->files->put($this->editionsPath, <<<'EDITIONS'
<?php

return [

'pro' => 'wabbajack', // It should fail trying to update this!

'addons' => [
//
],

];
EDITIONS);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this
->artisan('statamic:pro:enable', ['--update-config' => true])
->expectsOutput(PHP_EOL.'For this setting to take effect, please modify your [config/statamic/editions.php] as follows:')
->expectsOutput("'pro' => env('STATAMIC_PRO_ENABLED', false)");

// Though it should still update .env
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));

// Pro should not be enabled in the in-memory config, because config is not properly referencing .env var yet
$this->assertFalse(Statamic::pro());
}
}
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [4.x] Enable pro fix and improvements by jesseleite · Pull Request #9763 · statamic/cms · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 46 additions & 8 deletions src/Console/Commands/ProEnable.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,7 +17,8 @@ class ProEnable extends Command
* @var string
*/
protected $signature = 'statamic:pro:enable
{ --force : Force the operation to run when in production }';
{ --force : Force the operation to run when in production }
{ --update-config : Also update editions config to reference .env var }';

/**
* The console command description.
Expand All@@ -37,14 +38,21 @@ public function handle()
return;
}

$this->laravel['config']['statamic.editions.pro'] = true;

$this->checkInfo('Statamic Pro successfully enabled in .env file!');

if ($this->configNotReferencingEnv()) {
$this->crossLine('Statamic editions config not currently referencing .env file.');
if ($this->option('update-config') && $this->updateConfig()) {
$this->checkInfo('Statamic editions config successfully updated to reference .env var!');
}

if ($this->option('update-config') && ! $this->isConfigReferencingEnv()) {
$this->crossLine('Could not reliably update editions config to reference .env var!');
$this->comment(PHP_EOL.'For this setting to take effect, please modify your [config/statamic/editions.php] as follows:');
$this->line("'pro' => env('STATAMIC_PRO_ENABLED', false)");
} elseif (! $this->isConfigReferencingEnv()) {
$this->crossLine('Statamic editions config not currently referencing .env var!');
$this->comment('Please re-run this command with the `--update-config` option.');
} else {
$this->laravel['config']['statamic.editions.pro'] = true;
}
}

Expand DownExpand Up@@ -123,16 +131,46 @@ protected function envContents()
}

/**
* Check whether the editions config is referencing the .env var.
* Update editions config to reference the .env var.
*
* @return bool
*/
protected function configNotReferencingEnv()
protected function updateConfig()
{
if (! file_exists($configPath = config_path('statamic/editions.php'))) {
return false;
}

return ! preg_match('/[\'"]pro[\'"]\s*=>\s*env\([\'"]STATAMIC_PRO_ENABLED[\'"]/m', file_get_contents($configPath));
if ($this->isConfigReferencingEnv()) {
return false;
}

$contents = file_get_contents($configPath);

if (str_contains($contents, "'pro' => false,")) {
$contents = str_replace("'pro' => false,", "'pro' => env('STATAMIC_PRO_ENABLED', false),", $contents);
} elseif (str_contains($contents, "'pro' => true,")) {
$contents = str_replace("'pro' => true,", "'pro' => env('STATAMIC_PRO_ENABLED', false),", $contents);
} else {
return false;
}

file_put_contents($configPath, $contents);

return true;
}

/**
* Check whether the editions config is referencing the .env var.
*
* @return bool
*/
protected function isConfigReferencingEnv()
{
if (! file_exists($configPath = config_path('statamic/editions.php'))) {
return true;
}

return (bool) preg_match('/[\'"]pro[\'"]\s*=>\s*env\([\'"]STATAMIC_PRO_ENABLED[\'"]/m', file_get_contents($configPath));
}
}
13 changes: 2 additions & 11 deletions src/Statamic.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,7 @@
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Vite;
use Laravel\Nova\Nova;
Expand DownExpand Up@@ -48,17 +49,7 @@ public static function pro()

public static function enablePro()
{
$path = config_path('statamic/editions.php');

$contents = File::get($path);

if (! Str::contains($contents, "'pro' => false,")) {
throw new \Exception('Could not reliably update the config file.');
}

$contents = str_replace("'pro' => false,", "'pro' => true,", $contents);

File::put($path, $contents);
Artisan::call('statamic:pro:enable', ['--update-config' => true]);
}

public static function availableScripts(Request $request)
Expand Down
209 changes: 209 additions & 0 deletions tests/Console/Commands/ProEnableTest.php
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
<?php

namespace Tests\Console\Commands;

use Illuminate\Filesystem\Filesystem;
use Statamic\Statamic;
use Tests\TestCase;

class ProEnableTest extends TestCase
{
private $files;
private $envPath;
private $editionsPath;
private $defaultEnvContents;
private $defaultEditionsContents;

public function setUp(): void
{
parent::setUp();

$this->files = app(Filesystem::class);

$this->envPath = base_path('.env');
$this->editionsPath = config_path('statamic/editions.php');

$this->defaultEnvContents = <<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=false
STATAMIC_LICENSE_KEY=
ENV;

$this->defaultEditionsContents = $this->files->get(__DIR__.'/../../../config/editions.php');

$this->files->put($this->envPath, $this->defaultEnvContents);

$this->files->makeDirectory(dirname($this->editionsPath), 0777, true, true);
$this->files->put($this->editionsPath, $this->defaultEditionsContents);
}

protected function getEnvironmentSetUp($app)
{
parent::getEnvironmentSetUp($app);

$app['config']->set('statamic.editions.pro', false);
}

public function tearDown(): void
{
$this->files->delete($this->envPath);
$this->files->delete($this->editionsPath);

parent::tearDown();
}

/** @test */
public function it_can_enable_pro_by_updating_existing_var_in_env()
{
$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this->artisan('statamic:pro:enable');

$this->assertTrue(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));
}

/** @test */
public function it_can_enable_pro_by_appending_to_env()
{
$this->files->put($this->envPath, $this->defaultEnvContents = <<<'ENV'
APP_NAME=Statamic
STATAMIC_LICENSE_KEY=
ENV);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));

$this->artisan('statamic:pro:enable');

$this->assertTrue(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_LICENSE_KEY=
STATAMIC_PRO_ENABLED=true
ENV, $this->files->get($this->envPath));
}

/** @test */
public function if_config_is_not_referencing_env_var_it_should_prompt_user_to_run_with_update_config_option()
{
$this->files->put($this->editionsPath, $this->defaultEditionsContents = <<<'EDITIONS'
<?php

return [

'pro' => env('WRONG!!!', false),

'addons' => [
//
],

];
EDITIONS);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this
->artisan('statamic:pro:enable')
->expectsOutput('Please re-run this command with the `--update-config` option.');

// Though it should still update .env
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));

// Pro should not be enabled in the in-memory config, because config is not properly referencing .env var yet
$this->assertFalse(Statamic::pro());
}

public static function hardcodedBooleans()
{
return [
'true' => ['true'],
'false' => ['false'],
];
}

/**
* @test
*
* @dataProvider hardcodedBooleans
*/
public function it_can_update_editions_config_to_reference_env_var($boolean)
{
$this->files->put($this->editionsPath, <<<"EDITIONS"
<?php

return [

'pro' => $boolean,

'addons' => [
//
],

];

EDITIONS);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this->artisan('statamic:pro:enable', ['--update-config' => true]);

$this->assertTrue(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));
}

/** @test */
public function if_it_has_trouble_updating_editions_config_it_should_instruct_user()
{
$this->files->put($this->editionsPath, <<<'EDITIONS'
<?php

return [

'pro' => 'wabbajack', // It should fail trying to update this!

'addons' => [
//
],

];
EDITIONS);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this
->artisan('statamic:pro:enable', ['--update-config' => true])
->expectsOutput(PHP_EOL.'For this setting to take effect, please modify your [config/statamic/editions.php] as follows:')
->expectsOutput("'pro' => env('STATAMIC_PRO_ENABLED', false)");

// Though it should still update .env
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));

// Pro should not be enabled in the in-memory config, because config is not properly referencing .env var yet
$this->assertFalse(Statamic::pro());
}
}
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [4.x] Enable pro fix and improvements by jesseleite · Pull Request #9763 · statamic/cms · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 46 additions & 8 deletions src/Console/Commands/ProEnable.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,7 +17,8 @@ class ProEnable extends Command
* @var string
*/
protected $signature = 'statamic:pro:enable
{ --force : Force the operation to run when in production }';
{ --force : Force the operation to run when in production }
{ --update-config : Also update editions config to reference .env var }';

/**
* The console command description.
Expand All@@ -37,14 +38,21 @@ public function handle()
return;
}

$this->laravel['config']['statamic.editions.pro'] = true;

$this->checkInfo('Statamic Pro successfully enabled in .env file!');

if ($this->configNotReferencingEnv()) {
$this->crossLine('Statamic editions config not currently referencing .env file.');
if ($this->option('update-config') && $this->updateConfig()) {
$this->checkInfo('Statamic editions config successfully updated to reference .env var!');
}

if ($this->option('update-config') && ! $this->isConfigReferencingEnv()) {
$this->crossLine('Could not reliably update editions config to reference .env var!');
$this->comment(PHP_EOL.'For this setting to take effect, please modify your [config/statamic/editions.php] as follows:');
$this->line("'pro' => env('STATAMIC_PRO_ENABLED', false)");
} elseif (! $this->isConfigReferencingEnv()) {
$this->crossLine('Statamic editions config not currently referencing .env var!');
$this->comment('Please re-run this command with the `--update-config` option.');
} else {
$this->laravel['config']['statamic.editions.pro'] = true;
}
}

Expand DownExpand Up@@ -123,16 +131,46 @@ protected function envContents()
}

/**
* Check whether the editions config is referencing the .env var.
* Update editions config to reference the .env var.
*
* @return bool
*/
protected function configNotReferencingEnv()
protected function updateConfig()
{
if (! file_exists($configPath = config_path('statamic/editions.php'))) {
return false;
}

return ! preg_match('/[\'"]pro[\'"]\s*=>\s*env\([\'"]STATAMIC_PRO_ENABLED[\'"]/m', file_get_contents($configPath));
if ($this->isConfigReferencingEnv()) {
return false;
}

$contents = file_get_contents($configPath);

if (str_contains($contents, "'pro' => false,")) {
$contents = str_replace("'pro' => false,", "'pro' => env('STATAMIC_PRO_ENABLED', false),", $contents);
} elseif (str_contains($contents, "'pro' => true,")) {
$contents = str_replace("'pro' => true,", "'pro' => env('STATAMIC_PRO_ENABLED', false),", $contents);
} else {
return false;
}

file_put_contents($configPath, $contents);

return true;
}

/**
* Check whether the editions config is referencing the .env var.
*
* @return bool
*/
protected function isConfigReferencingEnv()
{
if (! file_exists($configPath = config_path('statamic/editions.php'))) {
return true;
}

return (bool) preg_match('/[\'"]pro[\'"]\s*=>\s*env\([\'"]STATAMIC_PRO_ENABLED[\'"]/m', file_get_contents($configPath));
}
}
13 changes: 2 additions & 11 deletions src/Statamic.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,7 @@
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Vite;
use Laravel\Nova\Nova;
Expand DownExpand Up@@ -48,17 +49,7 @@ public static function pro()

public static function enablePro()
{
$path = config_path('statamic/editions.php');

$contents = File::get($path);

if (! Str::contains($contents, "'pro' => false,")) {
throw new \Exception('Could not reliably update the config file.');
}

$contents = str_replace("'pro' => false,", "'pro' => true,", $contents);

File::put($path, $contents);
Artisan::call('statamic:pro:enable', ['--update-config' => true]);
}

public static function availableScripts(Request $request)
Expand Down
209 changes: 209 additions & 0 deletions tests/Console/Commands/ProEnableTest.php
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
<?php

namespace Tests\Console\Commands;

use Illuminate\Filesystem\Filesystem;
use Statamic\Statamic;
use Tests\TestCase;

class ProEnableTest extends TestCase
{
private $files;
private $envPath;
private $editionsPath;
private $defaultEnvContents;
private $defaultEditionsContents;

public function setUp(): void
{
parent::setUp();

$this->files = app(Filesystem::class);

$this->envPath = base_path('.env');
$this->editionsPath = config_path('statamic/editions.php');

$this->defaultEnvContents = <<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=false
STATAMIC_LICENSE_KEY=
ENV;

$this->defaultEditionsContents = $this->files->get(__DIR__.'/../../../config/editions.php');

$this->files->put($this->envPath, $this->defaultEnvContents);

$this->files->makeDirectory(dirname($this->editionsPath), 0777, true, true);
$this->files->put($this->editionsPath, $this->defaultEditionsContents);
}

protected function getEnvironmentSetUp($app)
{
parent::getEnvironmentSetUp($app);

$app['config']->set('statamic.editions.pro', false);
}

public function tearDown(): void
{
$this->files->delete($this->envPath);
$this->files->delete($this->editionsPath);

parent::tearDown();
}

/** @test */
public function it_can_enable_pro_by_updating_existing_var_in_env()
{
$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this->artisan('statamic:pro:enable');

$this->assertTrue(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));
}

/** @test */
public function it_can_enable_pro_by_appending_to_env()
{
$this->files->put($this->envPath, $this->defaultEnvContents = <<<'ENV'
APP_NAME=Statamic
STATAMIC_LICENSE_KEY=
ENV);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));

$this->artisan('statamic:pro:enable');

$this->assertTrue(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_LICENSE_KEY=
STATAMIC_PRO_ENABLED=true
ENV, $this->files->get($this->envPath));
}

/** @test */
public function if_config_is_not_referencing_env_var_it_should_prompt_user_to_run_with_update_config_option()
{
$this->files->put($this->editionsPath, $this->defaultEditionsContents = <<<'EDITIONS'
<?php

return [

'pro' => env('WRONG!!!', false),

'addons' => [
//
],

];
EDITIONS);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this
->artisan('statamic:pro:enable')
->expectsOutput('Please re-run this command with the `--update-config` option.');

// Though it should still update .env
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));

// Pro should not be enabled in the in-memory config, because config is not properly referencing .env var yet
$this->assertFalse(Statamic::pro());
}

public static function hardcodedBooleans()
{
return [
'true' => ['true'],
'false' => ['false'],
];
}

/**
* @test
*
* @dataProvider hardcodedBooleans
*/
public function it_can_update_editions_config_to_reference_env_var($boolean)
{
$this->files->put($this->editionsPath, <<<"EDITIONS"
<?php

return [

'pro' => $boolean,

'addons' => [
//
],

];

EDITIONS);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this->artisan('statamic:pro:enable', ['--update-config' => true]);

$this->assertTrue(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));
}

/** @test */
public function if_it_has_trouble_updating_editions_config_it_should_instruct_user()
{
$this->files->put($this->editionsPath, <<<'EDITIONS'
<?php

return [

'pro' => 'wabbajack', // It should fail trying to update this!

'addons' => [
//
],

];
EDITIONS);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this
->artisan('statamic:pro:enable', ['--update-config' => true])
->expectsOutput(PHP_EOL.'For this setting to take effect, please modify your [config/statamic/editions.php] as follows:')
->expectsOutput("'pro' => env('STATAMIC_PRO_ENABLED', false)");

// Though it should still update .env
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));

// Pro should not be enabled in the in-memory config, because config is not properly referencing .env var yet
$this->assertFalse(Statamic::pro());
}
}
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' [4.x] Enable pro fix and improvements by jesseleite · Pull Request #9763 · statamic/cms · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 46 additions & 8 deletions src/Console/Commands/ProEnable.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,7 +17,8 @@ class ProEnable extends Command
* @var string
*/
protected $signature = 'statamic:pro:enable
{ --force : Force the operation to run when in production }';
{ --force : Force the operation to run when in production }
{ --update-config : Also update editions config to reference .env var }';

/**
* The console command description.
Expand All@@ -37,14 +38,21 @@ public function handle()
return;
}

$this->laravel['config']['statamic.editions.pro'] = true;

$this->checkInfo('Statamic Pro successfully enabled in .env file!');

if ($this->configNotReferencingEnv()) {
$this->crossLine('Statamic editions config not currently referencing .env file.');
if ($this->option('update-config') && $this->updateConfig()) {
$this->checkInfo('Statamic editions config successfully updated to reference .env var!');
}

if ($this->option('update-config') && ! $this->isConfigReferencingEnv()) {
$this->crossLine('Could not reliably update editions config to reference .env var!');
$this->comment(PHP_EOL.'For this setting to take effect, please modify your [config/statamic/editions.php] as follows:');
$this->line("'pro' => env('STATAMIC_PRO_ENABLED', false)");
} elseif (! $this->isConfigReferencingEnv()) {
$this->crossLine('Statamic editions config not currently referencing .env var!');
$this->comment('Please re-run this command with the `--update-config` option.');
} else {
$this->laravel['config']['statamic.editions.pro'] = true;
}
}

Expand DownExpand Up@@ -123,16 +131,46 @@ protected function envContents()
}

/**
* Check whether the editions config is referencing the .env var.
* Update editions config to reference the .env var.
*
* @return bool
*/
protected function configNotReferencingEnv()
protected function updateConfig()
{
if (! file_exists($configPath = config_path('statamic/editions.php'))) {
return false;
}

return ! preg_match('/[\'"]pro[\'"]\s*=>\s*env\([\'"]STATAMIC_PRO_ENABLED[\'"]/m', file_get_contents($configPath));
if ($this->isConfigReferencingEnv()) {
return false;
}

$contents = file_get_contents($configPath);

if (str_contains($contents, "'pro' => false,")) {
$contents = str_replace("'pro' => false,", "'pro' => env('STATAMIC_PRO_ENABLED', false),", $contents);
} elseif (str_contains($contents, "'pro' => true,")) {
$contents = str_replace("'pro' => true,", "'pro' => env('STATAMIC_PRO_ENABLED', false),", $contents);
} else {
return false;
}

file_put_contents($configPath, $contents);

return true;
}

/**
* Check whether the editions config is referencing the .env var.
*
* @return bool
*/
protected function isConfigReferencingEnv()
{
if (! file_exists($configPath = config_path('statamic/editions.php'))) {
return true;
}

return (bool) preg_match('/[\'"]pro[\'"]\s*=>\s*env\([\'"]STATAMIC_PRO_ENABLED[\'"]/m', file_get_contents($configPath));
}
}
13 changes: 2 additions & 11 deletions src/Statamic.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,7 @@
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Vite;
use Laravel\Nova\Nova;
Expand DownExpand Up@@ -48,17 +49,7 @@ public static function pro()

public static function enablePro()
{
$path = config_path('statamic/editions.php');

$contents = File::get($path);

if (! Str::contains($contents, "'pro' => false,")) {
throw new \Exception('Could not reliably update the config file.');
}

$contents = str_replace("'pro' => false,", "'pro' => true,", $contents);

File::put($path, $contents);
Artisan::call('statamic:pro:enable', ['--update-config' => true]);
}

public static function availableScripts(Request $request)
Expand Down
209 changes: 209 additions & 0 deletions tests/Console/Commands/ProEnableTest.php
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
<?php

namespace Tests\Console\Commands;

use Illuminate\Filesystem\Filesystem;
use Statamic\Statamic;
use Tests\TestCase;

class ProEnableTest extends TestCase
{
private $files;
private $envPath;
private $editionsPath;
private $defaultEnvContents;
private $defaultEditionsContents;

public function setUp(): void
{
parent::setUp();

$this->files = app(Filesystem::class);

$this->envPath = base_path('.env');
$this->editionsPath = config_path('statamic/editions.php');

$this->defaultEnvContents = <<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=false
STATAMIC_LICENSE_KEY=
ENV;

$this->defaultEditionsContents = $this->files->get(__DIR__.'/../../../config/editions.php');

$this->files->put($this->envPath, $this->defaultEnvContents);

$this->files->makeDirectory(dirname($this->editionsPath), 0777, true, true);
$this->files->put($this->editionsPath, $this->defaultEditionsContents);
}

protected function getEnvironmentSetUp($app)
{
parent::getEnvironmentSetUp($app);

$app['config']->set('statamic.editions.pro', false);
}

public function tearDown(): void
{
$this->files->delete($this->envPath);
$this->files->delete($this->editionsPath);

parent::tearDown();
}

/** @test */
public function it_can_enable_pro_by_updating_existing_var_in_env()
{
$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this->artisan('statamic:pro:enable');

$this->assertTrue(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));
}

/** @test */
public function it_can_enable_pro_by_appending_to_env()
{
$this->files->put($this->envPath, $this->defaultEnvContents = <<<'ENV'
APP_NAME=Statamic
STATAMIC_LICENSE_KEY=
ENV);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));

$this->artisan('statamic:pro:enable');

$this->assertTrue(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_LICENSE_KEY=
STATAMIC_PRO_ENABLED=true
ENV, $this->files->get($this->envPath));
}

/** @test */
public function if_config_is_not_referencing_env_var_it_should_prompt_user_to_run_with_update_config_option()
{
$this->files->put($this->editionsPath, $this->defaultEditionsContents = <<<'EDITIONS'
<?php

return [

'pro' => env('WRONG!!!', false),

'addons' => [
//
],

];
EDITIONS);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this
->artisan('statamic:pro:enable')
->expectsOutput('Please re-run this command with the `--update-config` option.');

// Though it should still update .env
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));

// Pro should not be enabled in the in-memory config, because config is not properly referencing .env var yet
$this->assertFalse(Statamic::pro());
}

public static function hardcodedBooleans()
{
return [
'true' => ['true'],
'false' => ['false'],
];
}

/**
* @test
*
* @dataProvider hardcodedBooleans
*/
public function it_can_update_editions_config_to_reference_env_var($boolean)
{
$this->files->put($this->editionsPath, <<<"EDITIONS"
<?php

return [

'pro' => $boolean,

'addons' => [
//
],

];

EDITIONS);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this->artisan('statamic:pro:enable', ['--update-config' => true]);

$this->assertTrue(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));
}

/** @test */
public function if_it_has_trouble_updating_editions_config_it_should_instruct_user()
{
$this->files->put($this->editionsPath, <<<'EDITIONS'
<?php

return [

'pro' => 'wabbajack', // It should fail trying to update this!

'addons' => [
//
],

];
EDITIONS);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this
->artisan('statamic:pro:enable', ['--update-config' => true])
->expectsOutput(PHP_EOL.'For this setting to take effect, please modify your [config/statamic/editions.php] as follows:')
->expectsOutput("'pro' => env('STATAMIC_PRO_ENABLED', false)");

// Though it should still update .env
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));

// Pro should not be enabled in the in-memory config, because config is not properly referencing .env var yet
$this->assertFalse(Statamic::pro());
}
}
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [4.x] Enable pro fix and improvements by jesseleite · Pull Request #9763 · statamic/cms · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 46 additions & 8 deletions src/Console/Commands/ProEnable.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,7 +17,8 @@ class ProEnable extends Command
* @var string
*/
protected $signature = 'statamic:pro:enable
{ --force : Force the operation to run when in production }';
{ --force : Force the operation to run when in production }
{ --update-config : Also update editions config to reference .env var }';

/**
* The console command description.
Expand All@@ -37,14 +38,21 @@ public function handle()
return;
}

$this->laravel['config']['statamic.editions.pro'] = true;

$this->checkInfo('Statamic Pro successfully enabled in .env file!');

if ($this->configNotReferencingEnv()) {
$this->crossLine('Statamic editions config not currently referencing .env file.');
if ($this->option('update-config') && $this->updateConfig()) {
$this->checkInfo('Statamic editions config successfully updated to reference .env var!');
}

if ($this->option('update-config') && ! $this->isConfigReferencingEnv()) {
$this->crossLine('Could not reliably update editions config to reference .env var!');
$this->comment(PHP_EOL.'For this setting to take effect, please modify your [config/statamic/editions.php] as follows:');
$this->line("'pro' => env('STATAMIC_PRO_ENABLED', false)");
} elseif (! $this->isConfigReferencingEnv()) {
$this->crossLine('Statamic editions config not currently referencing .env var!');
$this->comment('Please re-run this command with the `--update-config` option.');
} else {
$this->laravel['config']['statamic.editions.pro'] = true;
}
}

Expand DownExpand Up@@ -123,16 +131,46 @@ protected function envContents()
}

/**
* Check whether the editions config is referencing the .env var.
* Update editions config to reference the .env var.
*
* @return bool
*/
protected function configNotReferencingEnv()
protected function updateConfig()
{
if (! file_exists($configPath = config_path('statamic/editions.php'))) {
return false;
}

return ! preg_match('/[\'"]pro[\'"]\s*=>\s*env\([\'"]STATAMIC_PRO_ENABLED[\'"]/m', file_get_contents($configPath));
if ($this->isConfigReferencingEnv()) {
return false;
}

$contents = file_get_contents($configPath);

if (str_contains($contents, "'pro' => false,")) {
$contents = str_replace("'pro' => false,", "'pro' => env('STATAMIC_PRO_ENABLED', false),", $contents);
} elseif (str_contains($contents, "'pro' => true,")) {
$contents = str_replace("'pro' => true,", "'pro' => env('STATAMIC_PRO_ENABLED', false),", $contents);
} else {
return false;
}

file_put_contents($configPath, $contents);

return true;
}

/**
* Check whether the editions config is referencing the .env var.
*
* @return bool
*/
protected function isConfigReferencingEnv()
{
if (! file_exists($configPath = config_path('statamic/editions.php'))) {
return true;
}

return (bool) preg_match('/[\'"]pro[\'"]\s*=>\s*env\([\'"]STATAMIC_PRO_ENABLED[\'"]/m', file_get_contents($configPath));
}
}
13 changes: 2 additions & 11 deletions src/Statamic.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,7 @@
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Vite;
use Laravel\Nova\Nova;
Expand DownExpand Up@@ -48,17 +49,7 @@ public static function pro()

public static function enablePro()
{
$path = config_path('statamic/editions.php');

$contents = File::get($path);

if (! Str::contains($contents, "'pro' => false,")) {
throw new \Exception('Could not reliably update the config file.');
}

$contents = str_replace("'pro' => false,", "'pro' => true,", $contents);

File::put($path, $contents);
Artisan::call('statamic:pro:enable', ['--update-config' => true]);
}

public static function availableScripts(Request $request)
Expand Down
209 changes: 209 additions & 0 deletions tests/Console/Commands/ProEnableTest.php
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
<?php

namespace Tests\Console\Commands;

use Illuminate\Filesystem\Filesystem;
use Statamic\Statamic;
use Tests\TestCase;

class ProEnableTest extends TestCase
{
private $files;
private $envPath;
private $editionsPath;
private $defaultEnvContents;
private $defaultEditionsContents;

public function setUp(): void
{
parent::setUp();

$this->files = app(Filesystem::class);

$this->envPath = base_path('.env');
$this->editionsPath = config_path('statamic/editions.php');

$this->defaultEnvContents = <<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=false
STATAMIC_LICENSE_KEY=
ENV;

$this->defaultEditionsContents = $this->files->get(__DIR__.'/../../../config/editions.php');

$this->files->put($this->envPath, $this->defaultEnvContents);

$this->files->makeDirectory(dirname($this->editionsPath), 0777, true, true);
$this->files->put($this->editionsPath, $this->defaultEditionsContents);
}

protected function getEnvironmentSetUp($app)
{
parent::getEnvironmentSetUp($app);

$app['config']->set('statamic.editions.pro', false);
}

public function tearDown(): void
{
$this->files->delete($this->envPath);
$this->files->delete($this->editionsPath);

parent::tearDown();
}

/** @test */
public function it_can_enable_pro_by_updating_existing_var_in_env()
{
$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this->artisan('statamic:pro:enable');

$this->assertTrue(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));
}

/** @test */
public function it_can_enable_pro_by_appending_to_env()
{
$this->files->put($this->envPath, $this->defaultEnvContents = <<<'ENV'
APP_NAME=Statamic
STATAMIC_LICENSE_KEY=
ENV);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));

$this->artisan('statamic:pro:enable');

$this->assertTrue(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_LICENSE_KEY=
STATAMIC_PRO_ENABLED=true
ENV, $this->files->get($this->envPath));
}

/** @test */
public function if_config_is_not_referencing_env_var_it_should_prompt_user_to_run_with_update_config_option()
{
$this->files->put($this->editionsPath, $this->defaultEditionsContents = <<<'EDITIONS'
<?php

return [

'pro' => env('WRONG!!!', false),

'addons' => [
//
],

];
EDITIONS);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this
->artisan('statamic:pro:enable')
->expectsOutput('Please re-run this command with the `--update-config` option.');

// Though it should still update .env
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));

// Pro should not be enabled in the in-memory config, because config is not properly referencing .env var yet
$this->assertFalse(Statamic::pro());
}

public static function hardcodedBooleans()
{
return [
'true' => ['true'],
'false' => ['false'],
];
}

/**
* @test
*
* @dataProvider hardcodedBooleans
*/
public function it_can_update_editions_config_to_reference_env_var($boolean)
{
$this->files->put($this->editionsPath, <<<"EDITIONS"
<?php

return [

'pro' => $boolean,

'addons' => [
//
],

];

EDITIONS);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this->artisan('statamic:pro:enable', ['--update-config' => true]);

$this->assertTrue(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));
}

/** @test */
public function if_it_has_trouble_updating_editions_config_it_should_instruct_user()
{
$this->files->put($this->editionsPath, <<<'EDITIONS'
<?php

return [

'pro' => 'wabbajack', // It should fail trying to update this!

'addons' => [
//
],

];
EDITIONS);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this
->artisan('statamic:pro:enable', ['--update-config' => true])
->expectsOutput(PHP_EOL.'For this setting to take effect, please modify your [config/statamic/editions.php] as follows:')
->expectsOutput("'pro' => env('STATAMIC_PRO_ENABLED', false)");

// Though it should still update .env
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));

// Pro should not be enabled in the in-memory config, because config is not properly referencing .env var yet
$this->assertFalse(Statamic::pro());
}
}
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); [4.x] Enable pro fix and improvements by jesseleite · Pull Request #9763 · statamic/cms · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 46 additions & 8 deletions src/Console/Commands/ProEnable.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,7 +17,8 @@ class ProEnable extends Command
* @var string
*/
protected $signature = 'statamic:pro:enable
{ --force : Force the operation to run when in production }';
{ --force : Force the operation to run when in production }
{ --update-config : Also update editions config to reference .env var }';

/**
* The console command description.
Expand All@@ -37,14 +38,21 @@ public function handle()
return;
}

$this->laravel['config']['statamic.editions.pro'] = true;

$this->checkInfo('Statamic Pro successfully enabled in .env file!');

if ($this->configNotReferencingEnv()) {
$this->crossLine('Statamic editions config not currently referencing .env file.');
if ($this->option('update-config') && $this->updateConfig()) {
$this->checkInfo('Statamic editions config successfully updated to reference .env var!');
}

if ($this->option('update-config') && ! $this->isConfigReferencingEnv()) {
$this->crossLine('Could not reliably update editions config to reference .env var!');
$this->comment(PHP_EOL.'For this setting to take effect, please modify your [config/statamic/editions.php] as follows:');
$this->line("'pro' => env('STATAMIC_PRO_ENABLED', false)");
} elseif (! $this->isConfigReferencingEnv()) {
$this->crossLine('Statamic editions config not currently referencing .env var!');
$this->comment('Please re-run this command with the `--update-config` option.');
} else {
$this->laravel['config']['statamic.editions.pro'] = true;
}
}

Expand DownExpand Up@@ -123,16 +131,46 @@ protected function envContents()
}

/**
* Check whether the editions config is referencing the .env var.
* Update editions config to reference the .env var.
*
* @return bool
*/
protected function configNotReferencingEnv()
protected function updateConfig()
{
if (! file_exists($configPath = config_path('statamic/editions.php'))) {
return false;
}

return ! preg_match('/[\'"]pro[\'"]\s*=>\s*env\([\'"]STATAMIC_PRO_ENABLED[\'"]/m', file_get_contents($configPath));
if ($this->isConfigReferencingEnv()) {
return false;
}

$contents = file_get_contents($configPath);

if (str_contains($contents, "'pro' => false,")) {
$contents = str_replace("'pro' => false,", "'pro' => env('STATAMIC_PRO_ENABLED', false),", $contents);
} elseif (str_contains($contents, "'pro' => true,")) {
$contents = str_replace("'pro' => true,", "'pro' => env('STATAMIC_PRO_ENABLED', false),", $contents);
} else {
return false;
}

file_put_contents($configPath, $contents);

return true;
}

/**
* Check whether the editions config is referencing the .env var.
*
* @return bool
*/
protected function isConfigReferencingEnv()
{
if (! file_exists($configPath = config_path('statamic/editions.php'))) {
return true;
}

return (bool) preg_match('/[\'"]pro[\'"]\s*=>\s*env\([\'"]STATAMIC_PRO_ENABLED[\'"]/m', file_get_contents($configPath));
}
}
13 changes: 2 additions & 11 deletions src/Statamic.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,7 @@
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Vite;
use Laravel\Nova\Nova;
Expand DownExpand Up@@ -48,17 +49,7 @@ public static function pro()

public static function enablePro()
{
$path = config_path('statamic/editions.php');

$contents = File::get($path);

if (! Str::contains($contents, "'pro' => false,")) {
throw new \Exception('Could not reliably update the config file.');
}

$contents = str_replace("'pro' => false,", "'pro' => true,", $contents);

File::put($path, $contents);
Artisan::call('statamic:pro:enable', ['--update-config' => true]);
}

public static function availableScripts(Request $request)
Expand Down
209 changes: 209 additions & 0 deletions tests/Console/Commands/ProEnableTest.php
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
<?php

namespace Tests\Console\Commands;

use Illuminate\Filesystem\Filesystem;
use Statamic\Statamic;
use Tests\TestCase;

class ProEnableTest extends TestCase
{
private $files;
private $envPath;
private $editionsPath;
private $defaultEnvContents;
private $defaultEditionsContents;

public function setUp(): void
{
parent::setUp();

$this->files = app(Filesystem::class);

$this->envPath = base_path('.env');
$this->editionsPath = config_path('statamic/editions.php');

$this->defaultEnvContents = <<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=false
STATAMIC_LICENSE_KEY=
ENV;

$this->defaultEditionsContents = $this->files->get(__DIR__.'/../../../config/editions.php');

$this->files->put($this->envPath, $this->defaultEnvContents);

$this->files->makeDirectory(dirname($this->editionsPath), 0777, true, true);
$this->files->put($this->editionsPath, $this->defaultEditionsContents);
}

protected function getEnvironmentSetUp($app)
{
parent::getEnvironmentSetUp($app);

$app['config']->set('statamic.editions.pro', false);
}

public function tearDown(): void
{
$this->files->delete($this->envPath);
$this->files->delete($this->editionsPath);

parent::tearDown();
}

/** @test */
public function it_can_enable_pro_by_updating_existing_var_in_env()
{
$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this->artisan('statamic:pro:enable');

$this->assertTrue(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));
}

/** @test */
public function it_can_enable_pro_by_appending_to_env()
{
$this->files->put($this->envPath, $this->defaultEnvContents = <<<'ENV'
APP_NAME=Statamic
STATAMIC_LICENSE_KEY=
ENV);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));

$this->artisan('statamic:pro:enable');

$this->assertTrue(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_LICENSE_KEY=
STATAMIC_PRO_ENABLED=true
ENV, $this->files->get($this->envPath));
}

/** @test */
public function if_config_is_not_referencing_env_var_it_should_prompt_user_to_run_with_update_config_option()
{
$this->files->put($this->editionsPath, $this->defaultEditionsContents = <<<'EDITIONS'
<?php

return [

'pro' => env('WRONG!!!', false),

'addons' => [
//
],

];
EDITIONS);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this
->artisan('statamic:pro:enable')
->expectsOutput('Please re-run this command with the `--update-config` option.');

// Though it should still update .env
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));

// Pro should not be enabled in the in-memory config, because config is not properly referencing .env var yet
$this->assertFalse(Statamic::pro());
}

public static function hardcodedBooleans()
{
return [
'true' => ['true'],
'false' => ['false'],
];
}

/**
* @test
*
* @dataProvider hardcodedBooleans
*/
public function it_can_update_editions_config_to_reference_env_var($boolean)
{
$this->files->put($this->editionsPath, <<<"EDITIONS"
<?php

return [

'pro' => $boolean,

'addons' => [
//
],

];

EDITIONS);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this->artisan('statamic:pro:enable', ['--update-config' => true]);

$this->assertTrue(Statamic::pro());
$this->assertEquals($this->defaultEditionsContents, $this->files->get($this->editionsPath));
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));
}

/** @test */
public function if_it_has_trouble_updating_editions_config_it_should_instruct_user()
{
$this->files->put($this->editionsPath, <<<'EDITIONS'
<?php

return [

'pro' => 'wabbajack', // It should fail trying to update this!

'addons' => [
//
],

];
EDITIONS);

$this->assertFalse(Statamic::pro());
$this->assertEquals($this->defaultEnvContents, $this->files->get($this->envPath));

$this
->artisan('statamic:pro:enable', ['--update-config' => true])
->expectsOutput(PHP_EOL.'For this setting to take effect, please modify your [config/statamic/editions.php] as follows:')
->expectsOutput("'pro' => env('STATAMIC_PRO_ENABLED', false)");

// Though it should still update .env
$this->assertEquals(<<<'ENV'
APP_NAME=Statamic
STATAMIC_PRO_ENABLED=true
STATAMIC_LICENSE_KEY=
ENV, $this->files->get($this->envPath));

// Pro should not be enabled in the in-memory config, because config is not properly referencing .env var yet
$this->assertFalse(Statamic::pro());
}
}