1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-09-20 00:11:35 +02:00
invoiceninja/app/Console/Commands/ExportMigrations.php

145 lines
4.0 KiB
PHP
Raw Normal View History

<?php
namespace App\Console\Commands;
use App\Libraries\Utils;
use App\Models\User;
use App\Traits\GenerateMigrationResources;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Auth;
class ExportMigrations extends Command
{
use GenerateMigrationResources;
/**
* The name and signature of the console command.
*
* @var string
*/
2021-07-23 00:24:00 +02:00
protected $signature = 'migrations:export {--user=} {--email=} {--random=}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Export account migrations to folder.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$this->info('Note: Migrations will be stored inside of (storage/migrations) folder.');
if($this->option('user')) {
2021-07-23 00:24:00 +02:00
$record = User::on(DB_NINJA_1)->find($this->option('user'));
if($record)
return $this->export($record);
$record = User::on(DB_NINJA_2)->find($this->option('user'));
if($record)
return $this->export($record);
$this->info('I could not find that user - sorry');
return;
}
if($this->option('email')) {
$record = User::on(DB_NINJA_1)->where('email', $this->option('user'))->first();
if($record)
return $this->export($record);
$record = User::on(DB_NINJA_2)->where('email', $this->option('user'))->first();
if($record)
return $this->export($record);
$this->info('I could not find that user by email - sorry');
return;
}
2020-11-25 01:23:51 +01:00
if($this->option('random')){
2020-11-25 10:06:37 +01:00
User::all()->random(200)->each(function ($user){
2020-11-25 01:23:51 +01:00
$this->export($user);
});
return;
}
$users = User::all();
foreach($users as $user) {
2021-02-09 23:40:55 +01:00
Auth::login($user);
$this->export($user);
}
}
private function export($user)
{
$this->account = $user->account;
$date = date('Y-m-d');
$accountKey = $this->account->account_key;
$output = fopen('php://output', 'w') or Utils::fatalError();
$fileName = "{$accountKey}-{$date}-invoiceninja";
2020-11-23 12:04:58 +01:00
$data['data'] = [
2021-02-09 23:40:55 +01:00
'account' => $this->getAccount(),
'company' => $this->getCompany(),
'users' => $this->getUsers(),
'tax_rates' => $this->getTaxRates(),
2021-02-09 23:40:55 +01:00
'payment_terms' => $this->getPaymentTerms(),
'clients' => $this->getClients(),
2021-02-09 23:40:55 +01:00
'company_gateways' => $this->getCompanyGateways(),
'client_gateway_tokens' => $this->getClientGatewayTokens(),
'vendors' => $this->getVendors(),
'projects' => $this->getProjects(),
'products' => $this->getProducts(),
2021-02-09 23:40:55 +01:00
'credits' => $this->getCreditsNotes(),
'invoices' => $this->getInvoices(),
2021-02-09 23:40:55 +01:00
'recurring_invoices' => $this->getRecurringInvoices(),
'quotes' => $this->getQuotes(),
'payments' => array_merge($this->getPayments(), $this->getCredits()),
'documents' => $this->getDocuments(),
2021-02-09 23:40:55 +01:00
'expense_categories' => $this->getExpenseCategories(),
'task_statuses' => $this->getTaskStatuses(),
'expenses' => $this->getExpenses(),
'tasks' => $this->getTasks(),
'documents' => $this->getDocuments(),
2021-06-28 07:15:02 +02:00
'ninja_tokens' => $this->getNinjaToken(),
];
$file = storage_path("migrations/{$fileName}.zip");
$zip = new \ZipArchive();
$zip->open($file, \ZipArchive::CREATE | \ZipArchive::OVERWRITE);
$zip->addFromString('migration.json', json_encode($data, JSON_PRETTY_PRINT));
$zip->close();
$this->info('User with id #' . $user->id . ' exported.');
}
}