18 lines
2.4 KiB
PHP
18 lines
2.4 KiB
PHP
<?php
|
|
// Exact isolated QA, read-only inventory for candidate scope and documentary authorization.
|
|
$root=dirname(__DIR__);$dir=$root.'/storage/app/private/investmoz-v2/portal-audit';
|
|
$plan=json_decode(file_get_contents($dir.'/portal-stability-latest.json'),true,512,JSON_THROW_ON_ERROR);
|
|
putenv('STABILITY_QA_MODE=consumers');$app=(static fn($p)=>require $p)($plan['source'].'/tools/portal-stability-runtime.php');
|
|
$identity=Illuminate\Support\Facades\DB::selectOne('SELECT current_database() AS database,inet_server_port() AS port');
|
|
throw_unless($identity->database==='stability_consumers_20261011_084534_test'&&(int)$identity->port===55441,RuntimeException::class,'Exact QA required');
|
|
$proof=Illuminate\Support\Facades\DB::transaction(function(){
|
|
Illuminate\Support\Facades\DB::statement('SET TRANSACTION READ ONLY');$cases=[];
|
|
foreach([15,30,31,32,33,34,35,54] as $id){$o=App\Models\Opportunity::findOrFail($id);$cases[$id]=['type'=>$o->opportunity_category,'canonical'=>app(App\Services\OpportunityManagement::class)->values($o)['canonical']??[]];}
|
|
$links=Illuminate\Support\Facades\DB::table('opportunity_documents as r')->join('documents as d','d.id','=','r.document_id')->whereIn('r.opportunity_id',[15,54])->whereNull('r.deleted_at')->get(['r.id','r.opportunity_id','r.document_id','d.sha256']);
|
|
$actors=[];foreach([17,21,22,23,24,25,26] as $id){$u=App\Models\User::findOrFail($id);$actors[$id]=['can_manage'=>$u->can('manage-portal'),'can_view_54'=>app(App\Services\PortalProfileAccess::class)->canView($u,App\Models\Opportunity::findOrFail(54))];}
|
|
$images=[];foreach(Illuminate\Support\Facades\DB::table('opportunity_images')->whereNull('deleted_at')->get()as$image){$payload=json_decode($image->payload,true,512,JSON_THROW_ON_ERROR);$ids=[$image->document_id,...array_column($payload['derivatives']??[],'document_id')];$images[]=['resource_id'=>$image->id,'opportunity_id'=>$image->opportunity_id,'documents'=>Illuminate\Support\Facades\DB::table('documents')->whereIn('id',$ids)->get(['id','sha256','source_system','malware_scan_status'])];}
|
|
return ['cases'=>$cases,'links'=>$links,'actors'=>$actors,'images'=>$images];
|
|
});
|
|
file_put_contents($dir.'/functional-scope-inspection-qa-20261011.json',json_encode(['identity'=>$identity]+$proof,JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_THROW_ON_ERROR));
|
|
echo json_encode(['identity'=>$identity,'actors'=>$proof['actors'],'image_bindings'=>$proof['images']],JSON_UNESCAPED_UNICODE|JSON_THROW_ON_ERROR).PHP_EOL;
|