- upgrade service to 1.8.1 from 1.8

- Landing page for Regular Licenses
- Legal pages for Regular Licenses
This commit is contained in:
Peter Papp
2021-01-17 16:21:49 +01:00
parent 973b301a46
commit a0c39bd955
20 changed files with 186 additions and 209 deletions
@@ -466,19 +466,16 @@ class SetupWizardController extends Controller
]); ]);
// Create legal pages and index content // Create legal pages and index content
if ($request->license === 'Extended') { $pages = collect(config('content.pages'));
$content = $request->license === 'Extended' ? collect(config('content.content_extended')) : collect(config('content.content_regular'));
$pages = collect(config('content.pages')); $content->each(function ($content) {
$content = collect(config('content.content')); Setting::updateOrCreate($content);
});
$content->each(function ($content) { $pages->each(function ($page) {
Setting::updateOrCreate($content); Page::updateOrCreate($page);
}); });
$pages->each(function ($page) {
Page::updateOrCreate($page);
});
}
// Retrieve access token // Retrieve access token
$response = Route::dispatch(self::make_login_request($request)); $response = Route::dispatch(self::make_login_request($request));
@@ -11,119 +11,6 @@ use Schema;
class UpgradeAppController extends Controller class UpgradeAppController extends Controller
{ {
/**
* Upgrade account from 1.6 to 1.7
*
* @param Request $request
* @return \Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response
*/
public function upgrade(Request $request)
{
$upgraded = Setting::where('name', 'latest_upgrade')->first();
if ($upgraded && $upgraded->value === '1.7') abort(401);
// Create legal pages and index content
if ($request->license === 'Extended') {
$pages = collect(config('content.pages'));
$content = collect(config('content.content'));
$content->each(function ($content) {
Setting::updateOrCreate($content);
});
$pages->each(function ($page) {
Page::updateOrCreate($page);
});
}
// Store Logo
if ($request->hasFile('logo')) {
$logo = store_system_image($request->file('logo'), 'system');
}
// Store Logo horizontal
if ($request->hasFile('logo_horizontal')) {
$logo_horizontal = store_system_image($request->file('logo_horizontal'), 'system');
}
// Store favicon
if ($request->hasFile('favicon')) {
$favicon = store_system_image($request->file('favicon'), 'system');
}
// Get options
$settings = collect([
[
'name' => 'setup_wizard_database',
'value' => 1,
],
[
'name' => 'setup_wizard_success',
'value' => 1,
],
[
'name' => 'license',
'value' => $request->license,
],
[
'name' => 'purchase_code',
'value' => $request->purchase_code,
],
[
'name' => 'app_title',
'value' => $request->title,
],
[
'name' => 'app_description',
'value' => $request->description,
],
[
'name' => 'app_logo',
'value' => $request->hasFile('logo') ? $logo : null,
],
[
'name' => 'app_logo_horizontal',
'value' => $request->hasFile('logo_horizontal') ? $logo_horizontal : null,
],
[
'name' => 'app_favicon',
'value' => $request->hasFile('favicon') ? $favicon : null,
],
[
'name' => 'google_analytics',
'value' => $request->googleAnalytics,
],
[
'name' => 'contact_email',
'value' => $request->contactMail,
],
[
'name' => 'registration',
'value' => $request->userRegistration,
],
[
'name' => 'storage_limitation',
'value' => $request->storageLimitation,
],
[
'name' => 'storage_default',
'value' => $request->defaultStorage ? $request->defaultStorage : 5,
],
[
'name' => 'latest_upgrade',
'value' => '1.7',
],
]);
// Store options
$settings->each(function ($col) {
Setting::updateOrCreate(['name' => $col['name']], $col);
});
return response('Done', 200);
}
/** /**
* Start maintenance mode * Start maintenance mode
@@ -150,8 +37,33 @@ class UpgradeAppController extends Controller
/** /**
* Upgrade database * Upgrade database
*/ */
public function upgrade_database() public function upgrade()
{ {
/*
* Upgrade user_settings & file_manager_folders table
*
* @since v1.8.1
*/
if (! Schema::hasColumn('user_settings', 'timezone') && ! Schema::hasColumn('file_manager_folders', 'icon_color')) {
$this->upgrade_database();
// Create legal pages and index content for regular license
if (get_setting('license') === 'Regular') {
$pages = collect(config('content.pages'));
$content = collect(config('content.content_regular'));
$content->each(function ($content) {
Setting::updateOrCreate($content);
});
$pages->each(function ($page) {
Page::updateOrCreate($page);
});
}
}
/* /*
* Upgrade expire_in in shares table * Upgrade expire_in in shares table
* *
@@ -159,17 +71,16 @@ class UpgradeAppController extends Controller
*/ */
if (! Schema::hasTable('traffic') && ! Schema::hasTable('zips') && ! Schema::hasTable('jobs')) { if (! Schema::hasTable('traffic') && ! Schema::hasTable('zips') && ! Schema::hasTable('jobs')) {
$command = Artisan::call('migrate', [ $this->upgrade_database();
'--force' => true }
]); /*
* Upgrade expire_in in shares table
*
* @since v1.8
*/
if (! Schema::hasTable('traffic') && ! Schema::hasTable('zips') && ! Schema::hasTable('jobs')) {
if ($command === 0) { $this->upgrade_database();
echo 'Operation was successful.';
}
if ($command === 1) {
echo 'Operation failed.';
}
} }
/* /*
@@ -179,17 +90,7 @@ class UpgradeAppController extends Controller
*/ */
if (! Schema::hasColumn('shares', 'expire_in')) { if (! Schema::hasColumn('shares', 'expire_in')) {
$command = Artisan::call('migrate', [ $this->upgrade_database();
'--force' => true
]);
if ($command === 0) {
echo 'Operation was successful.';
}
if ($command === 1) {
echo 'Operation failed.';
}
} }
/* /*
@@ -199,17 +100,26 @@ class UpgradeAppController extends Controller
*/ */
if (! Schema::hasColumn('file_manager_files', 'metadata')) { if (! Schema::hasColumn('file_manager_files', 'metadata')) {
$command = Artisan::call('migrate', [ $this->upgrade_database();
'--force' => true
]);
if ($command === 0) {
echo 'Operation was successful.';
}
if ($command === 1) {
echo 'Operation failed.';
}
} }
} }
/**
* @return int|mixed
*/
private function upgrade_database()
{
$command = Artisan::call('migrate', [
'--force' => true
]);
if ($command === 0) {
echo 'Operation was successful.';
}
if ($command === 1) {
echo 'Operation failed.';
}
return $command;
}
} }
+4 -4
View File
@@ -44,14 +44,14 @@ class Editor
// If request have emoji set folder icon emoji // If request have emoji set folder icon emoji
if(isset($folder_icon['emoji'])) { if(isset($folder_icon['emoji'])) {
$folder->folder_icon_emoji = $folder_icon['emoji']; $folder->icon_emoji = $folder_icon['emoji'];
$folder->folder_icon_color = null; $folder->icon_color = null;
} }
// If request have color set folder icon color // If request have color set folder icon color
if(isset($folder_icon['color'])) { if(isset($folder_icon['color'])) {
$folder->folder_icon_emoji = null; $folder->icon_emoji = null;
$folder->folder_icon_color = $folder_icon['color']; $folder->icon_color = $folder_icon['color'];
} }
// Save changes // Save changes
+68 -2
View File
@@ -21,7 +21,73 @@ return [
'content' => 'Metus penatibus ligula dolor natoque non habitasse laoreet facilisis, libero vivamus eget semper vulputate interdum integer, phasellus lorem enim blandit consectetur nullam sollicitudin. Hendrerit interdum luctus ut in molestie himenaeos eros cum laoreet parturient est, eu lectus hac et netus viverra dictumst congue elit sem senectus litora, fames scelerisque adipiscing inceptos fringilla montes sociosqu suscipit auctor potenti. Elementum lacus vulputate viverra ac morbi ligula ipsum facilisi, sit eu imperdiet lacinia congue dis vitae.', 'content' => 'Metus penatibus ligula dolor natoque non habitasse laoreet facilisis, libero vivamus eget semper vulputate interdum integer, phasellus lorem enim blandit consectetur nullam sollicitudin. Hendrerit interdum luctus ut in molestie himenaeos eros cum laoreet parturient est, eu lectus hac et netus viverra dictumst congue elit sem senectus litora, fames scelerisque adipiscing inceptos fringilla montes sociosqu suscipit auctor potenti. Elementum lacus vulputate viverra ac morbi ligula ipsum facilisi, sit eu imperdiet lacinia congue dis vitae.',
], ],
], ],
'content' => [ 'content_regular' => [
[
'name' => 'section_features',
'value' => '1',
],
[
'name' => 'section_feature_boxes',
'value' => '1',
],
[
'name' => 'section_get_started',
'value' => '1',
],
[
'name' => 'header_title',
'value' => 'Simple <span style="color: #41B883">&</span> Powerful Personal Cloud Storage',
],
[
'name' => 'header_description',
'value' => 'Your private cloud storage software build on Laravel & Vue.js. No limits & no monthly fees. Truly freedom.',
],
[
'name' => 'features_title',
'value' => 'The Fastest Growing <span style="color: #41B883">File Manager</span> on the CodeCanyon Market',
],
[
'name' => 'features_description',
'value' => 'Your private cloud storage software build on Laravel & Vue.js. No limits & no monthly fees. Truly freedom.',
],
[
'name' => 'feature_title_1',
'value' => 'Truly Freedom',
],
[
'name' => 'feature_description_1',
'value' => 'You have full control over VueFileManager, no third authorities will control your service or usage, only you.',
],
[
'name' => 'feature_title_2',
'value' => 'The Sky is the Limit',
],
[
'name' => 'feature_description_2',
'value' => 'VueFileManager is cloud storage software. You have to install and running application on your own server hosting.',
],
[
'name' => 'feature_title_3',
'value' => 'No Monthly Fees',
],
[
'name' => 'feature_description_3',
'value' => 'When you running VueFileManager on your own server hosting, anybody can\'t control your content or resell your user data. Your data is safe.',
],
[
'name' => 'get_started_title',
'value' => 'Ready to Get <span style="color: #41B883">Started</span><br> With Us?',
],
[
'name' => 'get_started_description',
'value' => 'Your private cloud storage software build on Laravel & Vue.js. No limits & no monthly fees. Truly freedom.',
],
[
'name' => 'footer_content',
'value' => '© 2021 Simple & Powerful Personal Cloud Storage. Developed by <a href="https://hi5ve.digital" target="_blank">Hi5Ve.Digital</a>',
],
],
'content_extended' => [
[ [
'name' => 'section_features', 'name' => 'section_features',
'value' => '1', 'value' => '1',
@@ -96,7 +162,7 @@ return [
], ],
[ [
'name' => 'footer_content', 'name' => 'footer_content',
'value' => '© 2020 Simple & Powerful Personal Cloud Storage. Developed by <a href="https://hi5ve.digital" target="_blank">Hi5Ve.Digital</a>', 'value' => '© 2021 Simple & Powerful Personal Cloud Storage. Developed by <a href="https://hi5ve.digital" target="_blank">Hi5Ve.Digital</a>',
], ],
], ],
]; ];
@@ -14,8 +14,8 @@ class AddFolderIconOptionsToFileManagerFoldersTable extends Migration
public function up() public function up()
{ {
Schema::table('file_manager_folders', function (Blueprint $table) { Schema::table('file_manager_folders', function (Blueprint $table) {
$table->string('folder_icon_color')->after('user_scope')->nullable(); $table->string('icon_color')->after('user_scope')->nullable();
$table->string('folder_icon_emoji')->after('folder_icon_color')->nullable(); $table->string('icon_emoji')->after('icon_color')->nullable();
}); });
} }
@@ -89,16 +89,16 @@ export default {
folderIconHandle(){ folderIconHandle(){
// If folder have set some color // If folder have set some color
if(this.data.folder_icon_color) { if(this.data.icon_color) {
this.$nextTick(() => { this.$nextTick(() => {
this.$refs[`folder${this.data.unique_id}`].firstElementChild.style.fill = `${this.data.folder_icon_color}` this.$refs[`folder${this.data.unique_id}`].firstElementChild.style.fill = `${this.data.icon_color}`
}) })
return false return false
} }
// If folder have set some emoji // If folder have set some emoji
if(this.data.folder_icon_emoji) if(this.data.icon_emoji)
return JSON.parse(this.data.folder_icon_emoji).char return JSON.parse(this.data.icon_emoji).char
}, },
...mapGetters({ allData: 'data' }), ...mapGetters({ allData: 'data' }),
@@ -91,16 +91,16 @@ export default {
folderIconHandle(){ folderIconHandle(){
// If folder have set some icon color // If folder have set some icon color
if(this.data.folder_icon_color) { if(this.data.icon_color) {
this.$nextTick(() => { this.$nextTick(() => {
this.$refs[`folder${this.data.unique_id}`].firstElementChild.style.fill = `${this.data.folder_icon_color}` this.$refs[`folder${this.data.unique_id}`].firstElementChild.style.fill = `${this.data.icon_color}`
}) })
return false return false
} }
// If folder have set some emoji // If folder have set some emoji
if(this.data.folder_icon_emoji) if(this.data.icon_emoji)
return JSON.parse(this.data.folder_icon_emoji).char return JSON.parse(this.data.icon_emoji).char
}, },
isClicked() { isClicked() {
@@ -5,11 +5,17 @@
:description="index.header_description" :description="index.header_description"
></PageTitle> ></PageTitle>
<router-link class="sign-up-button" :to="{name: 'SignUp'}"> <!--User registration button-->
<router-link v-if="config.userRegistration" class="sign-up-button" :to="{name: 'SignUp'}">
<AuthButton class="button" icon="chevron-right" :text="$t('page_index.sign_up_button')" /> <AuthButton class="button" icon="chevron-right" :text="$t('page_index.sign_up_button')" />
</router-link> </router-link>
<div class="features"> <!--User login button-->
<router-link v-if="! config.userRegistration" class="sign-up-button" :to="{name: 'SignIn'}">
<AuthButton class="button" icon="chevron-right" :text="$t('page_index.menu.log_in')" />
</router-link>
<div class="features" v-if="config.isSaaS">
<div class="feature"> <div class="feature">
<credit-card-icon size="19" class="feature-icon"></credit-card-icon> <credit-card-icon size="19" class="feature-icon"></credit-card-icon>
<b class="feature-title">{{ $t('page_index.sign_feature_1') }}</b> <b class="feature-title">{{ $t('page_index.sign_feature_1') }}</b>
@@ -50,6 +50,7 @@
computed: { computed: {
...mapGetters(['currentFolder']), ...mapGetters(['currentFolder']),
// TODO: revision
folderIconHandle(){ folderIconHandle(){
let icon = undefined let icon = undefined
@@ -67,14 +68,14 @@
} }
// If folder have already set some icon // If folder have already set some icon
if(!this.setFolderIcon && (this.item.folder_icon_emoji || this.item.folder_icon_color)){ if(!this.setFolderIcon && (this.item.icon_emoji || this.item.icon_color)){
if(this.item.folder_icon_emoji !== null) if(this.item.icon_emoji !== null)
icon = JSON.parse(this.item.folder_icon_emoji).char icon = JSON.parse(this.item.icon_emoji).char
if(this.item.folder_icon_color !== null){ if(this.item.icon_color !== null){
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.folderIcon.firstElementChild.style.fill = `${this.item.folder_icon_color}` this.$refs.folderIcon.firstElementChild.style.fill = `${this.item.icon_color}`
}) })
icon = false icon = false
} }
+1 -1
View File
@@ -26,7 +26,7 @@
"users": "Users" "users": "Users"
}, },
"admin_page_dashboard": { "admin_page_dashboard": {
"backer_button": "成为支持者", "backer_button": "Help Us Improve",
"license": "执照", "license": "执照",
"version": "版", "version": "版",
"w_latest_users": { "w_latest_users": {
+1 -1
View File
@@ -28,7 +28,7 @@
"users": "Users" "users": "Users"
}, },
"admin_page_dashboard": { "admin_page_dashboard": {
"backer_button": "Become a Backer", "backer_button": "Help Us Improve",
"license": "License", "license": "License",
"version": "Version", "version": "Version",
"w_latest_users": { "w_latest_users": {
+1 -1
View File
@@ -28,7 +28,7 @@
"users": "Uživatelia" "users": "Uživatelia"
}, },
"admin_page_dashboard": { "admin_page_dashboard": {
"backer_button": "Staňte sa podporovateľom", "backer_button": "Pomôžte nám zlepšiť sa",
"license": "Licencia", "license": "Licencia",
"version": "Verzia", "version": "Verzia",
"w_latest_users": { "w_latest_users": {
+2 -2
View File
@@ -236,8 +236,8 @@ const mutations = {
state.data.find(item => { state.data.find(item => {
if (item.unique_id == updatedFile.unique_id) { if (item.unique_id == updatedFile.unique_id) {
item.name = updatedFile.name item.name = updatedFile.name
item.folder_icon_color = updatedFile.folder_icon_color ? updatedFile.folder_icon_color : null item.icon_color = updatedFile.icon_color ? updatedFile.icon_color : null
item.folder_icon_emoji = updatedFile.folder_icon_emoji ? updatedFile.folder_icon_emoji : null item.icon_emoji = updatedFile.icon_emoji ? updatedFile.icon_emoji : null
} }
}) })
}, },
+8 -8
View File
@@ -30,6 +30,14 @@
{{ $t('admin_menu.settings') }} {{ $t('admin_menu.settings') }}
</div> </div>
</router-link> </router-link>
<router-link :to="{name: 'Pages'}" class="menu-list-item link">
<div class="icon">
<monitor-icon size="17"></monitor-icon>
</div>
<div class="label">
{{ $t('admin_menu.pages') }}
</div>
</router-link>
</div> </div>
</ContentGroup> </ContentGroup>
@@ -52,14 +60,6 @@
{{ $t('admin_menu.invoices') }} {{ $t('admin_menu.invoices') }}
</div> </div>
</router-link> </router-link>
<router-link :to="{name: 'Pages'}" class="menu-list-item link">
<div class="icon">
<monitor-icon size="17"></monitor-icon>
</div>
<div class="label">
{{ $t('admin_menu.pages') }}
</div>
</router-link>
</div> </div>
</ContentGroup> </ContentGroup>
</ContentSidebar> </ContentSidebar>
@@ -48,7 +48,7 @@
</div> </div>
</router-link> </router-link>
<router-link v-if="config.isSaaS" replace :to="{name: 'AppIndex'}" class="menu-list-item link"> <router-link replace :to="{name: 'AppIndex'}" class="menu-list-item link">
<div class="icon"> <div class="icon">
<home-icon size="17"></home-icon> <home-icon size="17"></home-icon>
</div> </div>
@@ -162,7 +162,7 @@
</div> </div>
<!--Pricing Content--> <!--Pricing Content-->
<div> <div v-if="config.isSaaS">
<FormLabel class="mt-70">Pricing Content</FormLabel> <FormLabel class="mt-70">Pricing Content</FormLabel>
<div class="block-wrapper"> <div class="block-wrapper">
@@ -183,7 +183,6 @@
</div> </div>
</div> </div>
<div v-if="section_pricing_content"> <div v-if="section_pricing_content">
<div class="block-wrapper"> <div class="block-wrapper">
<img src="/assets/images/admin/pricing-content.jpg" alt="Main Features" class="page-image"> <img src="/assets/images/admin/pricing-content.jpg" alt="Main Features" class="page-image">
@@ -290,6 +289,7 @@
import InfoBox from '@/components/Others/Forms/InfoBox' import InfoBox from '@/components/Others/Forms/InfoBox'
import {required} from 'vee-validate/dist/rules' import {required} from 'vee-validate/dist/rules'
import axios from 'axios' import axios from 'axios'
import { mapGetters } from 'vuex'
export default { export default {
name: 'AppIndex', name: 'AppIndex',
@@ -308,6 +308,9 @@
PageTab, PageTab,
InfoBox, InfoBox,
}, },
computed: {
...mapGetters(['config']),
},
data() { data() {
return { return {
isLoading: true, isLoading: true,
+4 -4
View File
@@ -22,7 +22,7 @@
{{ data.license }} {{ data.license }}
</ColorLabel> </ColorLabel>
</a> </a>
<a v-if="! config.isDemo" href="https://vuefilemanager.com/become-a-backer" target="_blank" class="became-backer"> <a href="https://bit.ly/VueFileManager-survey" target="_blank" class="became-backer">
<div class="icon"> <div class="icon">
<credit-card-icon size="15"></credit-card-icon> <credit-card-icon size="15"></credit-card-icon>
</div> </div>
@@ -177,7 +177,7 @@
} }
.became-backer { .became-backer {
background: rgba($yellow, 0.1); background: rgba($theme, 0.1);
display: inline-block; display: inline-block;
padding: 5px 10px; padding: 5px 10px;
border-radius: 6px; border-radius: 6px;
@@ -194,12 +194,12 @@
line-height: 0; line-height: 0;
rect, line { rect, line {
stroke: $yellow; stroke: $theme;
} }
} }
.content { .content {
color: $yellow; color: $theme;
font-weight: 700; font-weight: 700;
@include font-size(14); @include font-size(14);
} }
+1 -1
View File
@@ -53,7 +53,7 @@
</div> </div>
<div> <div>
<i18n v-if="config.isSaaS" path="page_registration.agreement" tag="p" class="legal-agreement"> <i18n path="page_registration.agreement" tag="p" class="legal-agreement">
<router-link :to="{name: 'DynamicPage', params: {slug: 'terms-of-service'}}" target="_blank">{{ termsOfService.title }}</router-link> <router-link :to="{name: 'DynamicPage', params: {slug: 'terms-of-service'}}" target="_blank">{{ termsOfService.title }}</router-link>
<router-link :to="{name: 'DynamicPage', params: {slug: 'privacy-policy'}}" target="_blank">{{ privacyPolicy.title }}</router-link> <router-link :to="{name: 'DynamicPage', params: {slug: 'privacy-policy'}}" target="_blank">{{ privacyPolicy.title }}</router-link>
</i18n> </i18n>
+1 -7
View File
@@ -14,7 +14,7 @@
<MainFeatures /> <MainFeatures />
<!--Pricing Tables--> <!--Pricing Tables-->
<PricingTables /> <PricingTables v-if="config.isSaaS" />
<!--Get Started Call To Action--> <!--Get Started Call To Action-->
<GetStarted /> <GetStarted />
@@ -60,13 +60,7 @@
isLoading: true, isLoading: true,
} }
}, },
beforeMount() {
if (! this.config.isSaaS) {
this.$router.push({name: 'SignIn'})
}
},
mounted() { mounted() {
if (! this.config.isSaaS) return
// Get page content // Get page content
axios.get('/api/content', { axios.get('/api/content', {
+1 -1
View File
@@ -40,7 +40,7 @@ Route::group(['middleware' => ['auth:api', 'auth.master', 'scope:master']], func
// Admin system tools // Admin system tools
Route::group(['middleware' => ['auth:api', 'auth.master', 'auth.admin', 'scope:master'], 'prefix' => 'service'], function () { Route::group(['middleware' => ['auth:api', 'auth.master', 'auth.admin', 'scope:master'], 'prefix' => 'service'], function () {
Route::get('/upgrade-database', 'General\UpgradeAppController@upgrade_database'); Route::get('/upgrade', 'General\UpgradeAppController@upgrade');
Route::get('/down', 'General\UpgradeAppController@down'); Route::get('/down', 'General\UpgradeAppController@down');
Route::get('/up', 'General\UpgradeAppController@up'); Route::get('/up', 'General\UpgradeAppController@up');
}); });