Merge pull request #5849 from turbo124/v5-develop

Remove strict dependencies for MySQL
This commit is contained in:
David Bomba 2021-05-28 18:47:20 +10:00 committed by GitHub
commit 28fc672a26
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 218 additions and 65 deletions

View File

@ -58,7 +58,7 @@ class AttachableUser implements Rule
if(!$user)
return true;
$user_already_attached = CompanyUser::query()
$user_already_attached = CompanyUser::query()
->where('user_id', $user->id)
->where('account_id',$user->account_id)
->where('company_id', auth()->user()->company()->id)

View File

@ -121,7 +121,7 @@ class CompanyExport implements ShouldQueue
$user->account_id = $this->encodePrimaryKey($user->account_id);
// $user->id = $this->encodePrimaryKey($user->id);
return $user;
return $user->makeVisible(['id']);
})->all();
@ -205,7 +205,7 @@ class CompanyExport implements ShouldQueue
$credit = $this->transformBasicEntities($credit);
$credit = $this->transformArrayOfKeys($credit, ['recurring_id','client_id', 'vendor_id', 'project_id', 'design_id', 'subscription_id','invoice_id']);
return $credit;
return $credit->makeVisible(['id']);
})->all();
@ -214,7 +214,7 @@ class CompanyExport implements ShouldQueue
$credit = $this->transformArrayOfKeys($credit, ['company_id', 'user_id', 'client_contact_id', 'recurring_invoice_id']);
return $credit;
return $credit->makeVisible(['id']);
})->all();
@ -224,7 +224,7 @@ class CompanyExport implements ShouldQueue
$document = $this->transformArrayOfKeys($document, ['user_id', 'assigned_user_id', 'company_id', 'project_id', 'vendor_id']);
return $document;
return $document->makeVisible(['id']);
})->all();
@ -232,7 +232,7 @@ class CompanyExport implements ShouldQueue
$expense_category = $this->transformArrayOfKeys($expense_category, ['user_id', 'company_id']);
return $expense_category;
return $expense_category->makeVisible(['id']);
})->all();
@ -242,7 +242,7 @@ class CompanyExport implements ShouldQueue
$expense = $this->transformBasicEntities($expense);
$expense = $this->transformArrayOfKeys($expense, ['vendor_id', 'invoice_id', 'client_id', 'category_id', 'recurring_expense_id','project_id']);
return $expense;
return $expense->makeVisible(['id']);
})->all();
@ -250,7 +250,7 @@ class CompanyExport implements ShouldQueue
$gs = $this->transformArrayOfKeys($gs, ['user_id', 'company_id']);
return $gs;
return $gs->makeVisible(['id']);
})->all();
@ -260,7 +260,7 @@ class CompanyExport implements ShouldQueue
$invoice = $this->transformBasicEntities($invoice);
$invoice = $this->transformArrayOfKeys($invoice, ['recurring_id','client_id', 'vendor_id', 'project_id', 'design_id', 'subscription_id']);
return $invoice;
return $invoice->makeVisible(['id']);
})->all();
@ -269,7 +269,7 @@ class CompanyExport implements ShouldQueue
$invoice = $this->transformArrayOfKeys($invoice, ['company_id', 'user_id', 'client_contact_id', 'recurring_invoice_id']);
return $invoice;
return $invoice->makeVisible(['id']);
})->all();
@ -312,7 +312,7 @@ class CompanyExport implements ShouldQueue
$project = $this->transformBasicEntities($project);
$project = $this->transformArrayOfKeys($project, ['client_id']);
return $project;
return $project->makeVisible(['id']);
})->all();
@ -321,7 +321,7 @@ class CompanyExport implements ShouldQueue
$quote = $this->transformBasicEntities($quote);
$quote = $this->transformArrayOfKeys($quote, ['invoice_id','recurring_id','client_id', 'vendor_id', 'project_id', 'design_id', 'subscription_id']);
return $quote;
return $quote->makeVisible(['id']);
})->all();
@ -339,7 +339,8 @@ class CompanyExport implements ShouldQueue
$ri = $this->transformBasicEntities($ri);
$ri = $this->transformArrayOfKeys($ri, ['client_id', 'vendor_id', 'project_id', 'design_id', 'subscription_id']);
return $ri;
return $ri->makeVisible(['id']);
})->all();
@ -357,7 +358,13 @@ class CompanyExport implements ShouldQueue
$subscription = $this->transformBasicEntities($subscription);
$subscription->group_id = $this->encodePrimaryKey($subscription->group_id);
return $subscription;
return $subscription->makeVisible([ 'id',
'user_id',
'assigned_user_id',
'company_id',
'product_ids',
'recurring_product_ids',
'group_id']);
})->all();
@ -376,7 +383,7 @@ class CompanyExport implements ShouldQueue
$task = $this->transformBasicEntities($task);
$task = $this->transformArrayOfKeys($task, ['client_id', 'invoice_id', 'project_id', 'status_id']);
return $task;
return $task->makeVisible(['id']);
})->all();
@ -401,7 +408,7 @@ class CompanyExport implements ShouldQueue
$this->export_data['vendors'] = $this->company->vendors->map(function ($vendor){
return $this->transformBasicEntities($vendor);
return $this->transformBasicEntities($vendor)->makeVisible(['id']);
})->all();
@ -411,7 +418,7 @@ class CompanyExport implements ShouldQueue
$vendor = $this->transformBasicEntities($vendor);
$vendor->vendor_id = $this->encodePrimaryKey($vendor->vendor_id);
return $vendor;
return $vendor->makeVisible(['id']);
})->all();

View File

@ -70,10 +70,11 @@ class CompanyImport implements ShouldQueue
// 'clients',
// 'client_contacts',
// 'products',
// 'company_gateways',
// 'client_gateway_tokens',
// 'vendors',
// 'projects',
// 'company_gateways',
// 'client_gateway_tokens',
// 'group_settings',
// 'credits',
// 'invoices',
// 'recurring_invoices',

View File

@ -25,7 +25,7 @@ use Illuminate\Support\Facades\Queue;
class SystemHealth
{
private static $extensions = [
'mysqli',
// 'mysqli',
'gd',
'curl',
'zip',
@ -34,7 +34,7 @@ class SystemHealth
'mbstring',
'xml',
'bcmath',
'mysqlnd',
// 'mysqlnd',
//'intl', //todo double check whether we need this for email dns validation
];

View File

@ -14,21 +14,27 @@ use App\Jobs\Import\CSVImport;
use App\Models\Account;
use App\Models\Client;
use App\Models\ClientContact;
use App\Models\ClientGatewayToken;
use App\Models\Company;
use App\Models\CompanyGateway;
use App\Models\CompanyToken;
use App\Models\CompanyUser;
use App\Models\Expense;
use App\Models\ExpenseCategory;
use App\Models\GroupSetting;
use App\Models\Invoice;
use App\Models\Payment;
use App\Models\PaymentTerm;
use App\Models\Product;
use App\Models\Vendor;
use App\Models\VendorContact;
use App\Models\Project;
use App\Models\RecurringInvoice;
use App\Models\RecurringInvoiceInvitation;
use App\Models\Subscription;
use App\Models\TaskStatus;
use App\Models\TaxRate;
use App\Models\User;
use App\Models\Vendor;
use App\Models\VendorContact;
use App\Utils\Traits\MakesHash;
use Illuminate\Routing\Middleware\ThrottleRequests;
use Illuminate\Support\Facades\Cache;
@ -416,73 +422,198 @@ class ImportCompanyTest extends TestCase
$this->assertEquals(1, ClientContact::count());
/***************************** Client Contacts *****************************/
/* Generic */
/* Generic */
//vendors!
/* Generic */
$this->assertEquals(1, count($this->backup_json_object->vendors));
$this->genericImport(Vendor::class,
['user_id', 'assigned_user_id', 'company_id', 'id', 'hashed_id'],
[['users' => 'user_id'], ['users' =>'assigned_user_id']],
'vendors',
'number');
$this->assertEquals(1, Vendor::count());
/* Generic */
$this->assertEquals(1, count($this->backup_json_object->projects));
//$class, $unset, $transforms, $object_property, $match_key
$this->genericImport(Project::class,
['user_id', 'assigned_user_id', 'company_id', 'id', 'hashed_id','client_id'],
[['users' => 'user_id'], ['users' =>'assigned_user_id'], ['clients' => 'client_id']],
'projects',
'number');
$this->assertEquals(1, Project::count());
//projects!
/***************************** Products *****************************/
// Product::unguard();
//products!
// $this->assertEquals(1, count($this->backup_json_object->products));
$this->assertEquals(1, count($this->backup_json_object->products));
// foreach($this->backup_json_object->products as $obj)
// {
$this->genericNewClassImport(Product::class,
['user_id', 'company_id', 'hashed_id', 'id'],
[['users' => 'user_id'], ['users' =>'assigned_user_id'], ['vendors' => 'vendor_id'], ['projects' => 'project_id']],
'products'
);
$this->assertEquals(1, Product::count());
// $user_id = $this->transformId('users', $obj->user_id);
// $assigned_user_id = $this->transformId('users', $obj->assigned_user_id);
// $vendor_id = $this->transformId('vendors', $obj->vendor_id);
// $project_id = $this->transformId('projects', $obj->project_id);
//company gateways
// $obj_array = (array)$obj;
// unset($obj_array['user_id']);
// unset($obj_array['company_id']);
// unset($obj_array['account_id']);
// unset($obj_array['hashed_id']);
// unset($obj_array['id']);
$this->assertEquals(1, count($this->backup_json_object->company_gateways));
$this->genericNewClassImport(CompanyGateway::class,
['user_id', 'company_id', 'hashed_id', 'id'],
[['users' => 'user_id']],
'company_gateways'
);
$this->assertEquals(1, CompanyGateway::count());
//company gateways
// $new_obj = new Product();
// $new_obj->company_id = $this->company->id;
// $new_obj->user_id = $user_id;
// $new_obj->assigned_user_id = $assigned_user_id;
// $new_obj->vendor_id = $vendor_id;
// $new_obj->project_id = $project_id;
// $new_obj->fill($obj_array);
//client gateway tokens
// $new_obj->save(['timestamps' => false]);
$this->genericNewClassImport(ClientGatewayToken::class,
['company_id', 'id', 'hashed_id','client_id'],
[['clients' => 'client_id']],
'client_gateway_tokens');
// $this->ids['products']["{$obj->hashed_id}"] = $new_obj->id;
//client gateway tokens
// }
//Group Settings
$this->genericImport(GroupSetting::class,
['user_id', 'company_id', 'id', 'hashed_id',],
[['users' => 'user_id']],
'group_settings',
'name');
//Group Settings
// Product::reguard();
//Subscriptions
$this->assertEquals(1, count($this->backup_json_object->subscriptions));
// $this->assertEquals(1, Product::count());
/***************************** Products *****************************/
$this->genericImport(Subscription::class,
['user_id', 'assigned_user_id', 'company_id', 'id', 'hashed_id',],
[['group_settings' => 'group_id'], ['users' => 'user_id'], ['users' => 'assigned_user_id']],
'subscriptions',
'name');
$this->assertEquals(1, Subscription::count());
//Subscriptions
// Recurring Invoices
$this->assertEquals(2, count($this->backup_json_object->recurring_invoices));
$this->genericImport(RecurringInvoice::class,
['user_id', 'assigned_user_id', 'company_id', 'id', 'hashed_id', 'client_id','subscription_id','project_id','vendor_id','status'],
[
['subscriptions' => 'subscription_id'],
['users' => 'user_id'],
['users' => 'assigned_user_id'],
['clients' => 'client_id'],
['projects' => 'project_id'],
['vendors' => 'vendor_id'],
['clients' => 'client_id'],
],
'recurring_invoices',
'number');
$this->assertEquals(2, RecurringInvoice::count());
// Recurring Invoices
// Recurring Invoice Invitations
$this->assertEquals(2, count($this->backup_json_object->recurring_invoice_invitations));
nlog($this->backup_json_object->recurring_invoice_invitations);
$this->genericImport(RecurringInvoiceInvitation::class,
['user_id', 'client_contact_id', 'company_id', 'id', 'hashed_id'],
[
['users' => 'user_id'],
['recurring_invoices' => 'recurring_invoice_id'],
['client_contacts' => 'client_contact_id'],
],
'recurring_invoice_invitations',
'key');
$this->assertEquals(2, RecurringInvoiceInvitation::count());
// Recurring Invoice Invitations
}
private function genericImport($class, $unset, $transform, $object_property, $match_key)
private function genericNewClassImport($class, $unset, $transforms, $object_property)
{
$class::unguard();
foreach($this->backup_json_object->{$object_property} as $obj)
{
/* Remove unwanted keys*/
$obj_array = (array)$obj;
foreach($unset as $un){
unset($obj_array[$un]);
}
foreach($trans as $key => $value)
/* Transform old keys to new keys */
foreach($transforms as $transform)
{
$obj_array["{$value}"] = $this->transformId($object_property, $obj->{$value});
foreach($transform as $key => $value)
{
$obj_array["{$value}"] = $this->transformId($key, $obj->{$value});
}
}
if($class instanceof CompanyGateway) {
$obj_array['config'] = encrypt($obj_array['config']);
}
$new_obj = new $class();
$new_obj->company_id = $this->company->id;
$new_obj->fill($obj_array);
$new_obj->save(['timestamps' => false]);
$this->ids["{$object_property}"]["{$obj->hashed_id}"] = $new_obj->id;
}
$class::reguard();
}
private function genericImport($class, $unset, $transforms, $object_property, $match_key)
{
$class::unguard();
foreach($this->backup_json_object->{$object_property} as $obj)
{
/* Remove unwanted keys*/
$obj_array = (array)$obj;
foreach($unset as $un){
unset($obj_array[$un]);
}
/* Transform old keys to new keys */
foreach($transforms as $transform)
{
foreach($transform as $key => $value)
{
$obj_array["{$value}"] = $this->transformId($key, $obj->{$value});
}
}
/* New to convert product ids from old hashes to new hashes*/
if($class instanceof Subscription){
$obj_array['product_ids'] = $this->recordProductIds($obj_array['product_ids']);
$obj_array['recurring_product_ids'] = $this->recordProductIds($obj_array['recurring_product_ids']);
}
$new_obj = $class::firstOrNew(
@ -498,7 +629,21 @@ class ImportCompanyTest extends TestCase
$class::reguard();
}
private function recordProductIds($ids)
{
$id_array = explode(",", $ids);
$tmp_arr = [];
foreach($id_array as $id) {
$tmp_arr[] = $this->encodePrimaryKey($this->transformId('products', $id));
}
return implode(",", $tmp_arr);
}
private function transformId(string $resource, ?string $old): ?int

Binary file not shown.