- 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

View File

@@ -466,19 +466,16 @@ class SetupWizardController extends Controller
]);
// 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 = collect(config('content.content'));
$content->each(function ($content) {
Setting::updateOrCreate($content);
});
$content->each(function ($content) {
Setting::updateOrCreate($content);
});
$pages->each(function ($page) {
Page::updateOrCreate($page);
});
}
$pages->each(function ($page) {
Page::updateOrCreate($page);
});
// Retrieve access token
$response = Route::dispatch(self::make_login_request($request));

View File

@@ -11,119 +11,6 @@ use Schema;
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
@@ -150,8 +37,33 @@ class UpgradeAppController extends Controller
/**
* 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
*
@@ -159,17 +71,16 @@ class UpgradeAppController extends Controller
*/
if (! Schema::hasTable('traffic') && ! Schema::hasTable('zips') && ! Schema::hasTable('jobs')) {
$command = Artisan::call('migrate', [
'--force' => true
]);
$this->upgrade_database();
}
/*
* Upgrade expire_in in shares table
*
* @since v1.8
*/
if (! Schema::hasTable('traffic') && ! Schema::hasTable('zips') && ! Schema::hasTable('jobs')) {
if ($command === 0) {
echo 'Operation was successful.';
}
if ($command === 1) {
echo 'Operation failed.';
}
$this->upgrade_database();
}
/*
@@ -179,17 +90,7 @@ class UpgradeAppController extends Controller
*/
if (! Schema::hasColumn('shares', 'expire_in')) {
$command = Artisan::call('migrate', [
'--force' => true
]);
if ($command === 0) {
echo 'Operation was successful.';
}
if ($command === 1) {
echo 'Operation failed.';
}
$this->upgrade_database();
}
/*
@@ -199,17 +100,26 @@ class UpgradeAppController extends Controller
*/
if (! Schema::hasColumn('file_manager_files', 'metadata')) {
$command = Artisan::call('migrate', [
'--force' => true
]);
if ($command === 0) {
echo 'Operation was successful.';
}
if ($command === 1) {
echo 'Operation failed.';
}
$this->upgrade_database();
}
}
/**
* @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;
}
}

View File

@@ -44,14 +44,14 @@ class Editor
// If request have emoji set folder icon emoji
if(isset($folder_icon['emoji'])) {
$folder->folder_icon_emoji = $folder_icon['emoji'];
$folder->folder_icon_color = null;
$folder->icon_emoji = $folder_icon['emoji'];
$folder->icon_color = null;
}
// If request have color set folder icon color
if(isset($folder_icon['color'])) {
$folder->folder_icon_emoji = null;
$folder->folder_icon_color = $folder_icon['color'];
$folder->icon_emoji = null;
$folder->icon_color = $folder_icon['color'];
}
// Save changes

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' => [
'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',
'value' => '1',
@@ -96,7 +162,7 @@ return [
],
[
'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>',
],
],
];

View File

@@ -14,8 +14,8 @@ class AddFolderIconOptionsToFileManagerFoldersTable extends Migration
public function up()
{
Schema::table('file_manager_folders', function (Blueprint $table) {
$table->string('folder_icon_color')->after('user_scope')->nullable();
$table->string('folder_icon_emoji')->after('folder_icon_color')->nullable();
$table->string('icon_color')->after('user_scope')->nullable();
$table->string('icon_emoji')->after('icon_color')->nullable();
});
}

View File

@@ -89,16 +89,16 @@ export default {
folderIconHandle(){
// If folder have set some color
if(this.data.folder_icon_color) {
if(this.data.icon_color) {
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
}
// If folder have set some emoji
if(this.data.folder_icon_emoji)
return JSON.parse(this.data.folder_icon_emoji).char
if(this.data.icon_emoji)
return JSON.parse(this.data.icon_emoji).char
},
...mapGetters({ allData: 'data' }),

View File

@@ -91,16 +91,16 @@ export default {
folderIconHandle(){
// If folder have set some icon color
if(this.data.folder_icon_color) {
if(this.data.icon_color) {
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
}
// If folder have set some emoji
if(this.data.folder_icon_emoji)
return JSON.parse(this.data.folder_icon_emoji).char
if(this.data.icon_emoji)
return JSON.parse(this.data.icon_emoji).char
},
isClicked() {

View File

@@ -5,11 +5,17 @@
:description="index.header_description"
></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')" />
</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">
<credit-card-icon size="19" class="feature-icon"></credit-card-icon>
<b class="feature-title">{{ $t('page_index.sign_feature_1') }}</b>

View File

@@ -50,6 +50,7 @@
computed: {
...mapGetters(['currentFolder']),
// TODO: revision
folderIconHandle(){
let icon = undefined
@@ -67,14 +68,14 @@
}
// 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)
icon = JSON.parse(this.item.folder_icon_emoji).char
if(this.item.icon_emoji !== null)
icon = JSON.parse(this.item.icon_emoji).char
if(this.item.folder_icon_color !== null){
if(this.item.icon_color !== null){
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
}

View File

@@ -26,7 +26,7 @@
"users": "Users"
},
"admin_page_dashboard": {
"backer_button": "成为支持者",
"backer_button": "Help Us Improve",
"license": "执照",
"version": "版",
"w_latest_users": {

View File

@@ -28,7 +28,7 @@
"users": "Users"
},
"admin_page_dashboard": {
"backer_button": "Become a Backer",
"backer_button": "Help Us Improve",
"license": "License",
"version": "Version",
"w_latest_users": {

View File

@@ -28,7 +28,7 @@
"users": "Uživatelia"
},
"admin_page_dashboard": {
"backer_button": "Staňte sa podporovateľom",
"backer_button": "Pomôžte nám zlepšiť sa",
"license": "Licencia",
"version": "Verzia",
"w_latest_users": {

View File

@@ -236,8 +236,8 @@ const mutations = {
state.data.find(item => {
if (item.unique_id == updatedFile.unique_id) {
item.name = updatedFile.name
item.folder_icon_color = updatedFile.folder_icon_color ? updatedFile.folder_icon_color : null
item.folder_icon_emoji = updatedFile.folder_icon_emoji ? updatedFile.folder_icon_emoji : null
item.icon_color = updatedFile.icon_color ? updatedFile.icon_color : null
item.icon_emoji = updatedFile.icon_emoji ? updatedFile.icon_emoji : null
}
})
},

View File

@@ -30,6 +30,14 @@
{{ $t('admin_menu.settings') }}
</div>
</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>
</ContentGroup>
@@ -52,14 +60,6 @@
{{ $t('admin_menu.invoices') }}
</div>
</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>
</ContentGroup>
</ContentSidebar>

View File

@@ -48,7 +48,7 @@
</div>
</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">
<home-icon size="17"></home-icon>
</div>

View File

@@ -162,7 +162,7 @@
</div>
<!--Pricing Content-->
<div>
<div v-if="config.isSaaS">
<FormLabel class="mt-70">Pricing Content</FormLabel>
<div class="block-wrapper">
@@ -183,7 +183,6 @@
</div>
</div>
<div v-if="section_pricing_content">
<div class="block-wrapper">
<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 {required} from 'vee-validate/dist/rules'
import axios from 'axios'
import { mapGetters } from 'vuex'
export default {
name: 'AppIndex',
@@ -308,6 +308,9 @@
PageTab,
InfoBox,
},
computed: {
...mapGetters(['config']),
},
data() {
return {
isLoading: true,

View File

@@ -22,7 +22,7 @@
{{ data.license }}
</ColorLabel>
</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">
<credit-card-icon size="15"></credit-card-icon>
</div>
@@ -177,7 +177,7 @@
}
.became-backer {
background: rgba($yellow, 0.1);
background: rgba($theme, 0.1);
display: inline-block;
padding: 5px 10px;
border-radius: 6px;
@@ -194,12 +194,12 @@
line-height: 0;
rect, line {
stroke: $yellow;
stroke: $theme;
}
}
.content {
color: $yellow;
color: $theme;
font-weight: 700;
@include font-size(14);
}

View File

@@ -53,7 +53,7 @@
</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: 'privacy-policy'}}" target="_blank">{{ privacyPolicy.title }}</router-link>
</i18n>

View File

@@ -14,7 +14,7 @@
<MainFeatures />
<!--Pricing Tables-->
<PricingTables />
<PricingTables v-if="config.isSaaS" />
<!--Get Started Call To Action-->
<GetStarted />
@@ -60,13 +60,7 @@
isLoading: true,
}
},
beforeMount() {
if (! this.config.isSaaS) {
this.$router.push({name: 'SignIn'})
}
},
mounted() {
if (! this.config.isSaaS) return
// Get page content
axios.get('/api/content', {

View File

@@ -40,7 +40,7 @@ Route::group(['middleware' => ['auth:api', 'auth.master', 'scope:master']], func
// Admin system tools
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('/up', 'General\UpgradeAppController@up');
});