<?php
session_start();
error_reporting(0);
header('Content-Type: application/json');
if (empty($_SESSION['user_id'])) {
header("location: ../index.php");
exit();
}
require_once("../includes/configuration.php");
// Constants
define('MIN_BALANCE', 30);
define('RANDOM_STRING_LENGTH', 4);
// Helper Functions
function base64_encode_post($key) {
return isset($_POST[$key]) ? base64_encode($_POST[$key]) : null;
}
function generateRandomString($length = 60) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ///';
return substr(str_shuffle(str_repeat($characters, ceil($length / strlen($characters)))), 0, $length);
}
function generateRandomLink($customLink = null) {
return $customLink ? $customLink : "https://bdris.gov.bd/certificate/verify?key=" . generateRandomString();
}
function fetchSingleValue($conn, $sql, $paramType = '', $params = []) {
$stmt = $conn->prepare($sql);
if ($paramType && $params) {
$stmt->bind_param($paramType, ...$params);
}
$stmt->execute();
$result = $stmt->get_result();
return $result->fetch_row()[0] ?? null;
}
function updateBalance($conn, $email, $amount) {
$stmt = $conn->prepare("UPDATE users SET balance = balance - ? WHERE email = ?");
$stmt->bind_param("is", $amount, $email);
return $stmt->execute();
}
// Retrieve User Info
$email_session = base64_decode($_SESSION['user_id']);
$userBalance = fetchSingleValue($conn, "SELECT balance FROM users WHERE email = ?", 's', [$email_session]);
$priceOfNibondon = file_get_contents('../api_key/nibondon_make.txt');
// Fetch Price for Nibondon
if ($priceOfNibondon > $userBalance) {
echo json_encode(['status' => 'error', 'message' => 'আপনার পর্যাপ্ত ব্যাল্যন্স নাই। কাজ করতে প্রথমে রির্চাজ করুন।']);
exit();
}
// Deduct Balance
if (!updateBalance($conn, $email_session, $priceOfNibondon)) {
echo json_encode(['status' => 'error', 'message' => 'Error deducting balance. Please try again.']);
exit();
}
// Calculate balance after deduction
$balanceAfterCut = $userBalance - $priceOfNibondon;
// Process Form Inputs
$data = [
'union' => base64_encode_post("union"),
'union_address' => base64_encode_post("UnionAdr"),
'registration_date' => base64_encode_post("DateOfReg"),
'issue_date' => base64_encode_post("DataOfIssue"),
'birth_number' => base64_encode_post("BrNumber"),
'birth_date' => base64_encode_post("dateOfBirth"),
'birth_date_in_words' => base64_encode_post("dateOfBirthInWord"),
'gender' => base64_encode_post("Sex"),
'name_bn' => base64_encode_post("nameBn"),
'name_en' => base64_encode_post("nameEn"),
'father_name_bn' => base64_encode_post("fnameBn"),
'father_name_en' => base64_encode_post("fnameEn"),
'father_nationality_bn' => base64_encode_post("fNationBn"),
'mother_nationality_bn' => base64_encode_post("mNationBn"),
'father_nationality_en' => base64_encode_post("fNationEn"),
'mother_name_en' => base64_encode_post("mNameEn"),
'mother_name_bn' => base64_encode_post("mNameBn"),
'mother_nationality_en' => base64_encode_post("mNationEn"),
'place_of_birth_en' => base64_encode_post("placeOfBirdth"),
'place_of_birth_bn' => base64_encode_post("placeOfBirdthBn"),
'address_bn' => base64_encode_post("AddressBn"),
'address_en' => base64_encode_post("AddressEn"),
'link' => base64_encode(generateRandomLink($_POST['link'] ?? null)),
'random_char' => $_POST['randomChar'] ?? generateRandomString(RANDOM_STRING_LENGTH)
];
// Insert Log
$stmt = $conn->prepare("
INSERT INTO logsn (
user, nameEnglish, nameBangla, brn, regOffice, officeAddr, link, letterQR,
gender, dateOfReg, DateOfIssu, Birth, BirthInWord, fnameBangla, fnameEnglish,
placeOfBirthBn, placeOfBirthEn, fullAdrrBn, fullAdrrEn, fNation, mNation,
fNationBn, mNationBn, mNameBn, mNameEn, specify
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'new')
");
$stmt->bind_param(
"sssssssssssssssssssssssss",
$email_session,
$data['name_en'],
$data['name_bn'],
$data['birth_number'],
$data['union'],
$data['union_address'],
$data['link'],
$data['random_char'],
$data['gender'],
$data['registration_date'],
$data['issue_date'],
$data['birth_date'],
$data['birth_date_in_words'],
$data['father_name_bn'],
$data['father_name_en'],
$data['place_of_birth_bn'],
$data['place_of_birth_en'],
$data['address_bn'],
$data['address_en'],
$data['father_nationality_en'],
$data['mother_nationality_en'],
$data['father_nationality_bn'],
$data['mother_nationality_bn'],
$data['mother_name_bn'],
$data['mother_name_en']
);
if ($stmt->execute()) {
// Insert Work History
$orderTime = date('Y-m-d H:i:s');
$stmtHistory = $conn->prepare("
INSERT INTO history_work (email, order_type, price, current_balance, balance_after_cut, about_order, order_time)
VALUES (?, 'নিবন্ধন মেইক', ?, ?, ?, 'server', ?)
");
$stmtHistory->bind_param("sddds", $email_session, $priceOfNibondon, $userBalance, $balanceAfterCut, $orderTime);
if ($stmtHistory->execute()) {
echo json_encode(['status' => 'success', 'message' => 'সফলভাবে তৈরি হয়েছে। এখন ফাইল লিষ্ট থেকে ডাউনলোড করে নেন।']);
} else {
echo json_encode(['status' => 'error', 'message' => 'Work history insertion failed.']);
}
} else {
echo json_encode(['status' => 'error', 'message' => 'অভ্যন্তরীণ ত্রুটির জন্য এই মূর্হুতে ফাইলটি সাবমিট করা যায় নি।']);
}
$conn->close();