pixelfed/app/Http/Controllers/Admin/AdminSettingsController.php

135 lines
4.2 KiB
PHP
Raw Normal View History

2019-02-07 18:59:38 +00:00
<?php
namespace App\Http\Controllers\Admin;
use Artisan, Cache, DB;
use Illuminate\Http\Request;
use Carbon\Carbon;
use App\{Comment, Like, Media, Page, Profile, Report, Status, User};
use App\Http\Controllers\Controller;
use Jackiedo\DotenvEditor\Facades\DotenvEditor;
use App\Util\Lexer\PrettyNumber;
trait AdminSettingsController
{
public function settings(Request $request)
{
return view('admin.settings.home');
}
public function settingsBackups(Request $request)
{
2019-03-01 07:04:14 +00:00
$path = storage_path('app/'.config('app.name'));
$files = is_dir($path) ? new \DirectoryIterator($path) : [];
2019-02-07 18:59:38 +00:00
return view('admin.settings.backups', compact('files'));
}
public function settingsConfig(Request $request, DotenvEditor $editor)
{
return view('admin.settings.config', compact('editor'));
}
public function settingsMaintenance(Request $request)
{
return view('admin.settings.maintenance');
}
public function settingsStorage(Request $request)
{
2019-02-25 18:56:24 +00:00
$databaseSum = Cache::remember('admin:settings:storage:db:storageUsed', now()->addMinutes(360), function() {
2019-02-07 18:59:38 +00:00
$q = 'SELECT sum(ROUND(((data_length + index_length)), 0)) AS size FROM information_schema.TABLES WHERE table_schema = ?';
$db = config('database.default');
$db = config("database.connections.{$db}.database");
return DB::select($q, [$db])[0]->size;
});
2019-02-25 18:56:24 +00:00
$mediaSum = Cache::remember('admin:settings:storage:media:storageUsed', now()->addMinutes(360), function() {
2019-02-07 18:59:38 +00:00
return Media::sum('size');
});
2019-02-25 18:56:24 +00:00
$backupSum = Cache::remember('admin:settings:storage:backups:storageUsed', now()->addMinutes(360), function() {
2019-02-07 18:59:38 +00:00
$dir = storage_path('app/'.config('app.name'));
$size = 0;
foreach (glob(rtrim($dir, '/').'/*', GLOB_NOSORT) as $each) {
$size += is_file($each) ? filesize($each) : folderSize($each);
}
return $size;
});
$storage = new \StdClass;
$storage->total = disk_total_space(base_path());
$storage->free = disk_free_space(base_path());
$storage->prettyTotal = PrettyNumber::size($storage->total, false, false);
$storage->prettyFree = PrettyNumber::size($storage->free, false, false);
$storage->percentFree = ceil($storage->free / $storage->total * 100);
$storage->percentUsed = ceil(100 - $storage->percentFree);
$storage->media = [
'used' => $mediaSum,
'prettyUsed' => PrettyNumber::size($mediaSum),
'percentUsed' => ceil($mediaSum / $storage->total * 100)
];
$storage->backups = [
'used' => $backupSum
];
$storage->database = [
'used' => $databaseSum
];
return view('admin.settings.storage', compact('storage'));
}
public function settingsFeatures(Request $request)
{
return view('admin.settings.features');
}
public function settingsHomeStore(Request $request)
{
$this->validate($request, [
'APP_NAME' => 'required|string',
]);
Artisan::call('config:clear');
DotenvEditor::setKey('APP_NAME', $request->input('APP_NAME'));
DotenvEditor::save();
return redirect()->back();
}
public function settingsPages(Request $request)
{
$pages = Page::orderByDesc('updated_at')->paginate(10);
return view('admin.pages.home', compact('pages'));
}
public function settingsPageEdit(Request $request)
{
return view('admin.pages.edit');
}
public function settingsSystem(Request $request)
{
$sys = [
'pixelfed' => config('pixelfed.version'),
'php' => phpversion(),
2019-03-01 07:16:11 +00:00
'laravel' => app()->version(),
2019-02-07 18:59:38 +00:00
];
2019-02-13 02:48:28 +00:00
switch (config('database.default')) {
case 'pgsql':
$sys['database'] = [
'name' => 'Postgres',
'version' => explode(' ', DB::select(DB::raw('select version();'))[0]->version)[1]
];
break;
case 'mysql':
$sys['database'] = [
'name' => 'MySQL',
'version' => DB::select( DB::raw("select version()") )[0]->{'version()'}
];
break;
default:
$sys['database'] = [
'name' => 'Unknown',
'version' => '?'
];
break;
}
2019-02-07 18:59:38 +00:00
return view('admin.settings.system', compact('sys'));
}
}