PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; try { $pdo = new PDO($dsn, $dbUser, $dbPass, $options); } catch (PDOException $e) { if ($_SERVER['REQUEST_METHOD'] === 'POST') { header('Content-Type: application/json'); echo json_encode(['success' => false, 'error' => 'Database connection failed']); exit; } die('Service temporarily unavailable. Please try again later.'); } // ─── HANDLE AJAX POST REQUESTS ──────────────────────────── if ($_SERVER['REQUEST_METHOD'] === 'POST') { header('Content-Type: application/json'); header('Access-Control-Allow-Origin: *'); $action = $_POST['action'] ?? ''; try { switch ($action) { case 'validate_code': $code = trim($_POST['code'] ?? ''); if (strlen($code) !== 10) { echo json_encode(['success' => false, 'error' => 'Invalid code']); exit; } $stmt = $pdo->prepare(" SELECT fl.id, fl.group_id, g.group_name FROM `360_por_com_form_links` fl JOIN `360_por_com_groups` g ON g.id = fl.group_id WHERE fl.link_code = ? AND fl.is_active = 1 "); $stmt->execute([$code]); $link = $stmt->fetch(); if (!$link) { echo json_encode(['success' => false, 'error' => 'Invalid or expired link']); exit; } echo json_encode(['success' => true, 'group_name' => $link['group_name']]); break; case 'submit': $code = trim($_POST['code'] ?? ''); $participantCount = (int)($_POST['participant_count'] ?? 0); if (strlen($code) !== 10 || $participantCount < 1) { echo json_encode(['success' => false, 'error' => 'Invalid data']); exit; } // Validate link $stmt = $pdo->prepare("SELECT id, group_id FROM `360_por_com_form_links` WHERE link_code = ? AND is_active = 1"); $stmt->execute([$code]); $link = $stmt->fetch(); if (!$link) { echo json_encode(['success' => false, 'error' => 'Invalid or expired link']); exit; } $pdo->beginTransaction(); // Update group company details if submitted $compName1 = trim($_POST['company_proposed_name_1'] ?? ''); $compName2 = trim($_POST['company_proposed_name_2'] ?? ''); $compName3 = trim($_POST['company_proposed_name_3'] ?? ''); $bizAct = trim($_POST['company_business_activity'] ?? ''); $addr1 = trim($_POST['company_address_line_1'] ?? ''); $addr2 = trim($_POST['company_address_line_2'] ?? ''); $compPhone = trim($_POST['company_phone'] ?? ''); $compEmail = trim($_POST['company_email'] ?? ''); $prov = trim($_POST['company_province'] ?? ''); $dist = trim($_POST['company_district'] ?? ''); $ds = trim($_POST['company_ds'] ?? ''); $gn = trim($_POST['company_gn'] ?? ''); $capital = (float)($_POST['company_stated_capital'] ?? 0); $shares = (int)($_POST['company_total_shares'] ?? 0); if ($compName1 || $bizAct || $addr1 || $compPhone || $compEmail) { $stmtUpdGroup = $pdo->prepare("UPDATE `360_por_com_groups` SET proposed_name_1 = COALESCE(NULLIF(?, ''), proposed_name_1), proposed_name_2 = COALESCE(NULLIF(?, ''), proposed_name_2), proposed_name_3 = COALESCE(NULLIF(?, ''), proposed_name_3), business_activity = COALESCE(NULLIF(?, ''), business_activity), address_line_1 = COALESCE(NULLIF(?, ''), address_line_1), address_line_2 = COALESCE(NULLIF(?, ''), address_line_2), province = COALESCE(NULLIF(?, ''), province), district = COALESCE(NULLIF(?, ''), district), ds_division = COALESCE(NULLIF(?, ''), ds_division), gn_division = COALESCE(NULLIF(?, ''), gn_division), company_phone = COALESCE(NULLIF(?, ''), company_phone), company_email = COALESCE(NULLIF(?, ''), company_email), stated_capital = COALESCE(NULLIF(?, 0), stated_capital), total_shares = COALESCE(NULLIF(?, 0), total_shares) WHERE id = ?"); $stmtUpdGroup->execute([$compName1, $compName2, $compName3, $bizAct, $addr1, $addr2, $prov, $dist, $ds, $gn, $compPhone, $compEmail, $capital, $shares, $link['group_id']]); } // Create submission $stmt = $pdo->prepare("INSERT INTO `360_por_com_submissions` (form_link_id, group_id) VALUES (?, ?)"); $stmt->execute([$link['id'], $link['group_id']]); $submissionId = $pdo->lastInsertId(); // Insert participants $stmt = $pdo->prepare("INSERT INTO `360_por_com_participants` (submission_id, title, full_name, occupation, nic_no, phone, email, postal_address, province, district, ds_division, gn_division) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); for ($i = 1; $i <= $participantCount; $i++) { $stmt->execute([ $submissionId, $_POST["title_{$i}"] ?? '', $_POST["name_{$i}"] ?? '', $_POST["occupation_{$i}"] ?? '', $_POST["nic_{$i}"] ?? '', $_POST["phone_{$i}"] ?? '', $_POST["email_{$i}"] ?? '', $_POST["address_{$i}"] ?? '', $_POST["province_{$i}"] ?? '', $_POST["district_{$i}"] ?? '', $_POST["ds_division_{$i}"] ?? '', $_POST["gn_division_{$i}"] ?? '' ]); } $pdo->commit(); echo json_encode(['success' => true, 'submission_id' => $submissionId]); break; default: echo json_encode(['success' => false, 'error' => 'Invalid action']); } } catch (PDOException $e) { if ($pdo->inTransaction()) $pdo->rollBack(); echo json_encode(['success' => false, 'error' => 'Server error']); } exit; } // ─── HANDLE CORS PREFLIGHT ──────────────────────────────── if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: POST, GET, OPTIONS'); header('Access-Control-Allow-Headers: Content-Type'); http_response_code(200); exit; } // ─── GET REQUEST: RENDER THE FORM ───────────────────────── $grpid = trim($_GET['grpid'] ?? ''); $code = trim($_GET['code'] ?? ''); // Server-side code/group validation for initial page load $groupName = ''; $codeValid = false; $errorMsg = ''; if (!empty($grpid)) { $stmt = $pdo->prepare(" SELECT fl.id, fl.group_id, fl.link_code, g.group_name FROM `360_por_com_groups` g JOIN `360_por_com_form_links` fl ON fl.group_id = g.id WHERE g.group_name LIKE ? AND fl.is_active = 1 ORDER BY fl.id DESC LIMIT 1 "); $stmt->execute([$grpid . '%']); $link = $stmt->fetch(); if ($link) { $codeValid = true; $code = $link['link_code']; $groupName = htmlspecialchars($link['group_name']); } else { $errorMsg = 'This group ID link (' . htmlspecialchars($grpid) . ') is invalid or not yet configured.'; } } else if (strlen($code) === 10) { $stmt = $pdo->prepare(" SELECT fl.id, fl.group_id, g.group_name FROM `360_por_com_form_links` fl JOIN `360_por_com_groups` g ON g.id = fl.group_id WHERE fl.link_code = ? AND fl.is_active = 1 "); $stmt->execute([$code]); $link = $stmt->fetch(); if ($link) { $codeValid = true; $groupName = htmlspecialchars($link['group_name']); } else { $errorMsg = 'This form link is invalid or has expired. Please contact 360 Accountants for a new link.'; } } else { $errorMsg = 'No valid group ID or form code found in the URL.'; } ?> Register Your Company with 360 Accountants

Invalid Link

Register Your Company with 360 Accountants

1
2
3

Your Company Details

Fill Company Profile & Registered Address

How many Participant(s) will take part in your Business?

1

Participants Bio Details