diff --git a/public/userarea/clone_parts_to_visible.php b/public/userarea/clone_parts_to_visible.php index 6c8eb27..38bf466 100644 --- a/public/userarea/clone_parts_to_visible.php +++ b/public/userarea/clone_parts_to_visible.php @@ -10,6 +10,7 @@ $data = json_decode(file_get_contents('php://input'), true); $sourceIddatadb = isset($data['source_iddatadb']) ? (int)$data['source_iddatadb'] : 0; $targetList = $data['target_iddatadb_list'] ?? []; +$cloneAnalyses = !empty($data['clone_analyses']); $targetIds = array_values(array_unique(array_filter(array_map('intval', (array)$targetList), function ($v) use ($sourceIddatadb) { return $v > 0 && $v !== $sourceIddatadb; @@ -62,6 +63,23 @@ try { ORDER BY id ASC "); + $stmtLoadAnalyses = $pdo->prepare(" + SELECT idmatrice, analysis_recordkey, analysis_name, analysis_method, + analysis_level, is_web_selectable, is_accredited + FROM identification_parts_analyses + WHERE part_id = ? + ORDER BY id ASC + "); + + $stmtInsertAnalysis = $pdo->prepare(" + INSERT INTO identification_parts_analyses + (part_id, iddatadb, idmatrice, analysis_recordkey, analysis_name, analysis_method, + analysis_level, is_web_selectable, is_accredited, created_at, updated_at) + VALUES + (:part_id, :iddatadb, :idmatrice, :analysis_recordkey, :analysis_name, :analysis_method, + :analysis_level, :is_web_selectable, :is_accredited, NOW(), NOW()) + "); + $stmtInsertCF = $pdo->prepare(" INSERT INTO identification_parts_customfields (part_id, field_id, value_id, value_text, created_at, updated_at) @@ -71,6 +89,7 @@ try { $details = []; $totalClonedParts = 0; + $totalClonedAnalyses = 0; // 3. Clone source parts to each target record foreach ($targetIds as $targetIddatadb) { @@ -102,6 +121,27 @@ try { ]); } + // Clone linked analyses, if requested + if ($cloneAnalyses) { + $stmtLoadAnalyses->execute([(int)$part['id']]); + $analyses = $stmtLoadAnalyses->fetchAll(PDO::FETCH_ASSOC); + + foreach ($analyses as $an) { + $stmtInsertAnalysis->execute([ + ':part_id' => $newPartId, + ':iddatadb' => $targetIddatadb, + ':idmatrice' => ($an['idmatrice'] !== null && $an['idmatrice'] !== '') ? (int)$an['idmatrice'] : null, + ':analysis_recordkey' => $an['analysis_recordkey'], + ':analysis_name' => $an['analysis_name'] ?? null, + ':analysis_method' => $an['analysis_method'] ?? null, + ':analysis_level' => ($an['analysis_level'] !== null && $an['analysis_level'] !== '') ? (int)$an['analysis_level'] : null, + ':is_web_selectable' => (int)($an['is_web_selectable'] ?? 0), + ':is_accredited' => (int)($an['is_accredited'] ?? 0), + ]); + $totalClonedAnalyses++; + } + } + $clonedCountForTarget++; $totalClonedParts++; } @@ -119,6 +159,7 @@ try { 'source_iddatadb' => $sourceIddatadb, 'cloned_targets' => count($targetIds), 'total_cloned_parts' => $totalClonedParts, + 'total_cloned_analyses' => $totalClonedAnalyses, 'details' => $details ]); } catch (Throwable $e) { diff --git a/public/userarea/modal_partsTable.php b/public/userarea/modal_partsTable.php index 676bb31..62d735c 100644 --- a/public/userarea/modal_partsTable.php +++ b/public/userarea/modal_partsTable.php @@ -188,6 +188,31 @@ + + +