File: //srv/www/rectt-csmcri.res.in/public_html/scientist_form.php
<?php
session_start();
include_once 'sites/config/config.php';
if (!isset($_SESSION['registered']) || $_SESSION['registered'] !== "registered") {
header("location: login.php");
exit;
}
if (!isset($_SESSION['primary_saved']) || $_SESSION['primary_saved'] !== 'Yes') {
header("Location: primary.php");
exit();
}
if (!isset($_SESSION['user_id'], $_SESSION['ad_id'], $_SESSION['category'], $_SESSION['disability'])) {
header("location: login.php");
exit;
}
if (!isset($_SESSION['user_id'], $_SESSION['session_token'])) {
session_destroy();
header("Location: logout.php");
exit;
}
$user_id = $_SESSION['user_id'];
$token = $_SESSION['session_token'];
$stmt = $conn->prepare("SELECT session_token FROM users WHERE id = ?");
$stmt->bind_param("i", $user_id);
$stmt->execute();
$stmt->bind_result($db_token);
$stmt->fetch();
$stmt->close();
if ($token !== $db_token) {
session_destroy();
die("You have been logged out because your account was logged in elsewhere.");
}
// $user_id = $_SESSION['user_id'];
$ad_id = $_SESSION['ad_id'];
$category = $_SESSION['category'];
$disability = $_SESSION['disability'];
$post_id = $_GET['post_id'] ?? null;
if (!$post_id) {
die("Invalid access - post ID missing.");
}
// Only allow access if this post_id matches the one the user picked in dashboard
if (!isset($_SESSION['active_post_id']) || $_SESSION['active_post_id'] != $post_id) {
echo '<div class="alert alert-danger text-center mt-5">
You have not started this application from the dashboard, or you have canceled your application.<br>
<a href="dashboard.php" class="btn btn-primary btn-sm mt-3">Back to Dashboard</a>
</div>';
exit;
}
// Fetch Advertisement details
$ad_stmt = $conn->prepare("SELECT Ad_id, title FROM Advertisement WHERE id = ? LIMIT 1");
$ad_stmt->bind_param("i", $ad_id);
$ad_stmt->execute();
$ad_data = $ad_stmt->get_result()->fetch_assoc();
$ad_stmt->close();
$ad_id_val = $ad_data['Ad_id'] ?? '-';
$ad_title = $ad_data['title'] ?? '-';
// Fetch Post details
$post_stmt = $conn->prepare("SELECT post_title FROM posts WHERE id = ? LIMIT 1");
$post_stmt->bind_param("i", $post_id);
$post_stmt->execute();
$post_data = $post_stmt->get_result()->fetch_assoc();
$post_stmt->close();
$post_title = $post_data['post_title'] ?? '-';
?>
<?php
if (!empty($_SESSION['flash'])) {
if (is_array($_SESSION['flash'])) {
foreach ($_SESSION['flash'] as $msg) {
echo "<div class='alert alert-danger text-center'>" . htmlspecialchars($msg) . "</div>";
}
} else {
echo "<div class='alert alert-danger text-center'>" . htmlspecialchars($_SESSION['flash']) . "</div>";
}
unset($_SESSION['flash']);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Scientist Application Form</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
select.form-select.form-select-sm.form-select-a {
width: auto;
}
</style>
</head>
<body class="bg-light">
<div class="container mt-5 mb-5">
<center>
<h2 class="mb-2">
Scientist Application Form
</h2>
<div class="mb-2" style="font-size: 1.05rem;">
<b>Advertisement ID:</b> <?= htmlspecialchars($ad_id_val) ?>
|
<b>Advertisement Title:</b> <?= htmlspecialchars($ad_title) ?>
|
<b>Post ID:</b> <?= htmlspecialchars($post_id) ?>
|
<b>Post Title:</b> <?= htmlspecialchars($post_title) ?>
</div>
<div class="mb-3">
<a href="dashboard.php" class="btn btn-primary">
← Back to Dashboard
</a>
</div>
</center>
<form method="POST" action="process_scientist.php" enctype="multipart/form-data" id="scientistForm">
<input type="hidden" name="post_id" value="<?= htmlspecialchars($post_id) ?>">
<input type="hidden" name="ad_id" value="<?= htmlspecialchars($ad_id) ?>">
<hr class="my-4">
<!-- Qualifications Section -->
<h4 class="mt-4">Educational Qualifications</h4>
<div class="table-responsive">
<table class="table table-bordered align-middle">
<thead class="table-light">
<tr>
<th>Qualification</th>
<th>School/College</th>
<th>Board/University</th>
<th>Subjects Studies/ Thesis Topic</th>
<th>Marks</th>
<th>Scale</th>
<th>Passing Date</th>
<th>Mode of Study</th>
<th>Remarks (1st Class, 2nd Class, 1st Class with Distinction, University top etc)</th>
</tr>
</thead>
<tbody>
<?php
$levels = [
'ssc' => '10th/SSC<span class="text-danger">*</span>',
'hsc' => '12th/Intermediate<span class="text-danger">*</span>',
'be_btech' => 'B.E./B.Tech.',
'me_mtech' => 'M.E./M.Tech./Equal',
'bsc' => 'BSc',
'msc' => 'MSc'
];
foreach ($levels as $key => $label): ?>
<tr>
<td><strong><?= $label ?></strong></td>
<td><input type="text" name="<?= $key ?>_school" class="form-control" <?= ($key === 'ssc' || $key === 'hsc') ? 'required' : '' ?>></td>
<td><input type="text" name="<?= $key ?>_board" class="form-control" <?= $key == 'ssc' ? 'required' : '' ?>></td>
<td><input type="text" name="<?= $key ?>_subjects" class="form-control" <?= $key == 'ssc' ? 'required' : '' ?>></td>
<td><input type="number" step="0.01" name="<?= $key ?>_marks" class="form-control" <?= $key == 'ssc' ? 'required' : '' ?>></td>
<td class="p">
<select name="<?= $key ?>_scale" class="form-select form-select-sm form-select-a" <?= $key == 'ssc' ? 'required' : '' ?>>
<option value="">Select Scale</option>
<option value="percentage">Percentage</option>
<option value="cgpa10">CGPA (Out of 10)</option>
<option value="cgpa5">CGPA (Out of 5)</option>
</select>
</td>
<td><input type="date" name="<?= $key ?>_pass_date" class="form-control" <?= $key == 'ssc' ? 'required' : '' ?>></td>
<td>
<select name="<?= $key ?>_mode" class="form-select-a" <?= $key == 'ssc' ? 'required' : '' ?>>
<option value="">Select</option>
<option value="Regular">Regular</option>
<option value="Distance">Distance</option>
<option value="Online">Online</option>
</select>
</td>
<td><input type="text" name="<?= $key ?>_remarks" class="form-control"></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<hr class="my-4">
<!-- Ph.D. Section -->
<h4 class="mt-4">Ph.D. Details</h4>
<div class="row">
<div class="col-md-4">
<label>Status</label>
<select name="phd_status" class="form-select form-select-a">
<option value="">Select</option>
<option value="Awarded">Awarded</option>
<option value="Submitted">Submitted</option>
</select>
</div>
<div class="col-md-4">
<label>Guide Name</label>
<input type="text" name="phd_guide_name" class="form-control">
</div>
<div class="col-md-4">
<label>Guide Email</label>
<input type="email" name="phd_guide_email" class="form-control">
</div>
<div class="col-md-4 mt-3">
<label>Date of Submission/Award of Ph.D.</label>
<input type="date" name="phd_date" class="form-control">
</div>
<div class="col-md-8 mt-3">
<label>Title of the thesis</label>
<input type="text" name="phd_title" class="form-control">
</div>
<div class="col-md-4 mt-3">
<label for="phd_area">Relevant Area</label>
<select name="phd_area" id="phd_area" class="form-control custom-select" required>
<option value="">Choose Subject Panel</option>
<optgroup label="1. Biological Sciences">
<option value="Agricultural Science & Technology">Agricultural Science & Technology</option>
<option value="Biochemistry">Biochemistry</option>
<option value="Biotechnology">Biotechnology</option>
<option value="Food Science & Technology including Nutrition">Food Science & Technology including Nutrition</option>
<option value="Life Sciences">Life Sciences</option>
<option value="Microbiology">Microbiology</option>
</optgroup>
<optgroup label="2. Engineering Sciences">
<option value="Chemical Engineering">Chemical Engineering</option>
<option value="Electronics/Electrical/Instrumentation Engineering">Electronics/Electrical/Instrumentation Engineering</option>
<option value="Environmental engineering">Environmental engineering</option>
<option value="Food Engineering & Agricultural Engg.">Food Engineering & Agricultural Engg.</option>
<option value="Mechanical / Production Engineering">Mechanical / Production Engineering</option>
</optgroup>
<optgroup label="3. Physical & Chemical Sciences">
<option value="Chemistry">Chemistry</option>
<option value="Environmental science">Environmental science</option>
<option value="Mathematical Sciences">Mathematical Sciences</option>
<option value="Nano Science & Technology">Nano Science & Technology</option>
<option value="Physics">Physics</option>
</optgroup>
<optgroup label="4. Management Science & IT">
<option value="Bioinformatics">Bioinformatics</option>
<option value="Business Administration">Business Administration</option>
<option value="Computer Science & Application">Computer Science & Application</option>
</optgroup>
<optgroup label="5. Other Miscellaneous">
<option value="Other Miscellaneous">Other Miscellaneous</option>
</optgroup>
</select>
</div>
<div class="col-md-4 mt-3">
<label>Department</label>
<input type="text" name="phd_department" class="form-control">
</div>
<div class="col-md-4 mt-3">
<label>University</label>
<input type="text" name="phd_university" class="form-control">
</div>
</div>
<!-- Work Experience Section -->
<h4 class="mt-4">Work Experience</h4>
<div id="experienceContainer"></div>
<button type="button" class="btn btn-secondary mt-2" onclick="addExperience()">Add Experience</button>
<div class="mt-3">
<label>Total Experience (auto-calculated)</label>
<input type="text" id="total_experience" name="total_experience" class="form-control" readonly>
</div>
<hr class="my-4">
<!-- Scientific Details -->
<h4 class="mt-4">Scientific Details</h4>
<?php
$sciSections = ['Product Development', 'Technology Innovation', 'Applied Technology', 'Translational Research'];
foreach ($sciSections as $type):
$slug = strtolower(str_replace(' ', '_', $type));
?>
<div class="row border p-3 mb-3">
<h5><?= $type ?><span class="text-danger">*</span></h5>
<div class="col-auto"> <label>Have you contributed to <?= $type ?>?</label></div>
<div class="col-auto"> <select class="form-select form-select-sm form-select-a sci-toggle" name="<?= $slug ?>_contributed" data-target="#<?= $slug ?>_patent_section" required>
<option value="">Select</option>
<option value="Yes">Yes</option>
<option value="No">No</option>
</select></div>
<div id="<?= $slug ?>_patent_section" style="display: none;" class="mt-2">
<div class="col-auto"><label>Is it patented?</label></div>
<div class="col-auto">
<select name="<?= $slug ?>_patented" class="form-select form-select-sm form-select-a">
<option value="">Select</option>
<option value="Yes">Yes</option>
<option value="No">No</option>
</select>
</div>
<label class="mt-2">Patent Details</label>
<textarea name="<?= $slug ?>_patent_details" class="form-control" rows="3"></textarea>
</div>
</div>
<?php endforeach; ?>
<hr class="my-4">
<!-- Research Sections -->
<h4 class="mt-4">Research Details</h4>
<!-- Publications -->
<h5>Publication Details</h5>
<div id="publicationsContainer"></div>
<button type="button" class="btn btn-secondary mb-3" onclick="addPublication()">Add Publication</button>
<hr class="my-4">
<!-- Patents -->
<h5>Patent Filed/Granted</h5>
<div id="patentsContainer"></div>
<button type="button" class="btn btn-secondary mb-3" onclick="addPatent()">Add Patent</button>
<hr class="my-4">
<!-- Book Chapters -->
<h5>Book/Book Chapter Details</h5>
<div id="booksContainer"></div>
<button type="button" class="btn btn-secondary mb-3" onclick="addBook()">Add Book</button>
<hr class="my-4">
<!-- Seminars -->
<h5>Papers Read/Presented in Seminar/Symposium/Conference</h5>
<div id="seminarsContainer"></div>
<button type="button" class="btn btn-secondary mb-3" onclick="addSeminar()">Add Entry</button>
<hr class="my-4">
<!-- Awards -->
<h5>Awards/Honours</h5>
<div id="awardsContainer"></div>
<button type="button" class="btn btn-secondary mb-3" onclick="addAward()">Add Award</button>
<hr class="my-4">
<!-- Country Visited -->
<h5>Countries Visited</h5>
<div id="visitsContainer"></div>
<button type="button" class="btn btn-secondary mb-3" onclick="addVisit()">Add Visit</button>
<hr class="my-4">
<!-- R&D & SOP -->
<h5>Briefly explain your R & D Experience (max 250 words)</h5>
<textarea name="rd_experience" id="rd_experience" class="form-control mb-2" rows="6"
oninput="limitWords(this, 'rd_experience_count', 250)"
placeholder="Max 250 words"></textarea>
<div class="text-end mb-4"><small id="rd_experience_count">0/250 words</small></div>
<hr class="my-4">
<h5>Statement of Purpose (max 250 words)</h5>
<textarea name="statement_of_purpose" id="statement_of_purpose" class="form-control mb-2" rows="6"
oninput="limitWords(this, 'sop_count', 250)"
placeholder="Max 250 words"></textarea>
<div class="text-end mb-4"><small id="sop_count">0/250 words</small></div>
<hr class="my-4">
<!-- Salary and Joining -->
<div class="row border p-3 mb-3">
<h5>Pay and Joining Details</h5>
<div class="col-auto"><label>Are you willing to accept the minimum initial pay offered?<span class="text-danger">*</span></label></div>
<div class="col-auto"><select name="min_initial_pay" class="form-select form-select-a mb-2" required>
<option value="">Select</option>
<option value="Yes">Yes</option>
<option value="No">No</option>
</select></div>
<div class="row">
<div class="col-auto"><label>If not, please state the initial lowest pay that you would accept in the prescribed scale</label></div>
<div class="col-auto"><input type="text" name="expected_pay" class="form-control mb-2"></div>
</div>
<div class="row">
<div class="col-auto"><label>If selected, minimum time to join<span class="text-danger">*</span></label></div>
<div class="col-auto"> <input type="text" name="joining_time" class="form-control mb-4" required></div>
</div>
</div>
<hr class="my-4">
<!-- Referees -->
<h5>Professional Referees</h5>
<div id="refereesContainer"></div>
<button type="button" class="btn btn-secondary mb-3" onclick="addReferee()">Add Referee</button>
<hr class="my-4">
<!-- Payment -->
<div class="row">
<div class="col-auto">
<h5>Payment Reference No.<span class="text-danger">*</span></h5>
</div>
<div class="col-auto">
<?php
$is_exempt = in_array($category, ['SC', 'ST']) || $_SESSION['gender'] === 'Female' || $_SESSION['ex_servicemen'] === 'Yes' || $_SESSION['csir_employee'] === 'Yes' || $disability === 'Yes';
?>
<input type="text" name="paymentReferenceNo" class="form-control mb-4" required <?= $is_exempt ? 'readonly value="Fee Exempted"' : '' ?>>
</div>
<?php if (!$is_exempt): ?>
<div class="col-auto">
<label class="form-label">Payment Date<span class="text-danger">*</span></label>
</div>
<div class="col-auto">
<input type="date" name="payment_date"
class="form-control form-control-sm"
required>
</div>
<?php endif; ?>
</div>
<hr class="my-4">
<!-- Uploads -->
<h5>Document Uploads</h5>
<div class="row">
<?php
function uploadField($label, $name, $required, $extra = '', $maxSizeKB = 1024)
{
$req = $required ? 'required' : '';
echo "<div class='col-auto mb-3'>";
echo "<label class='form-label'><strong>{$label}</strong></label>";
echo "<input type='file' name='{$name}' class='form-control upload-check' accept='.pdf,.jpg,.jpeg,.png' data-max='{$maxSizeKB}' {$req}> {$extra}";
echo "</div>";
}
// Reserved Category and Disability Certificates
if ($category !== 'General') {
uploadField('Category Certificate in Central Government format from competent authority need to be attached<span class="text-danger">*</span><small><a href="sites/formats/Anenxure_II_IV_Caste_Certificate.pdf" target="_blank">click here for format</a></small>', 'category_certificate', true, "<small class='text-muted'>Max 1MB</small>", 1024);
}
if ($disability === 'Yes') {
uploadField('Disability Certificate from competent authority need to be attached in case of PWD (Divyang) &
whose disability not less than 40%]<span class="text-danger">*</span><small><a href="sites/formats/Annexure_VI_Disability_Certificate.pdf" target="_blank">click here for format</a></small>', 'disability_certificate', true, "<small class='text-muted'>Max 1MB</small>", 1024);
}
// Core Education Documents
uploadField('10th/SSC Marksheet<span class="text-danger">*</span>', 'ssc_marksheet', true, "<small class='text-muted'>Max 1MB</small>", 1024);
uploadField('12th/Intermediate Marksheet<span class="text-danger">*</span>', 'hsc_marksheet', true, "<small class='text-muted'>Max 1MB</small>", 1024);
uploadField('B.E./B.Tech. Marksheet/Certificate', 'be_btech_marksheet', false, "<small class='text-muted'>Max 1MB</small>", 1024);
uploadField('M.E./M.Tech. Marksheet/Certificate', 'me_mtech_marksheet', false, "<small class='text-muted'>Max 1MB</small>", 1024);
uploadField('BSc Marksheet/Certificate', 'bsc_marksheet', false, "<small class='text-muted'>Max 1MB</small>", 1024);
uploadField('MSc Marksheet/Certificate', 'msc_marksheet', false, "<small class='text-muted'>Max 1MB</small>", 1024);
uploadField('Ph.D. Certificate', 'phd_certificate', false, "<small class='text-muted'>If awarded. Max 1MB</small>", 1024);
// Photograph & Signature
uploadField('Photograph<span class="text-danger">*</span><small><a href="sites/formats/Photograph_Requirements.pdf" target="_blank">click here for format</a></small>', 'photograph', true, "<small class='text-muted'>Max 100KB</small>", 100);
uploadField('Signature<span class="text-danger">*</span><small><a href="sites/formats/Signature_Requirements.pdf" target="_blank">click here for format</a></small>', 'signature', true, "<small class='text-muted'>Max 100KB</small>", 100);
?>
</div>
<hr class="my-4">
<!-- Declaration -->
<h5 class="mt-4">Declaration<span class="text-danger">*</span></h5>
<p>I, hereby declare that the particulars given in the application form are true, complete and appropriate as per my knowledge and belief and if any information given by me is found false or inappropriate or before and after selection if any ineligibility comes to the notice, then my candidature would liable to be cancelled/terminated at any stage of selection & appointment without any notice and action may be taken against me.</p>
<div class="form-check mb-4">
<input class="form-check-input" type="checkbox" name="agree" value="1" required>
<label class="form-check-label">I Agree</label>
</div>
<div class="text-center mb-5">
<button type="submit" class="btn btn-primary btn-lg" onclick="return confirm('Submit this application? This cannot be undone.')">Submit Application</button>
</div>
</form>
</div>
<script>
document.addEventListener('click', function(e) {
if (e.target && e.target.classList.contains('remove-publication')) {
e.target.closest('.pub-row').remove();
}
});
document.addEventListener("DOMContentLoaded", function() {
document.querySelectorAll(".upload-check").forEach(function(input) {
input.addEventListener("change", function() {
const maxKB = parseInt(input.getAttribute("data-max"), 10) || 1024;
const maxBytes = maxKB * 1024;
const file = input.files[0];
// File size check
if (file && file.size > maxBytes) {
alert("File size exceeds maximum allowed: " + maxKB + " KB");
input.value = "";
return;
}
if (!file) return;
// Determine allowed extensions
let allowedTypes;
if (input.name === "photograph" || input.name === "signature") {
allowedTypes = ['jpg', 'jpeg', 'png'];
} else {
allowedTypes = ['pdf', 'jpg', 'jpeg', 'png'];
}
const ext = file.name.split('.').pop().toLowerCase();
if (!allowedTypes.includes(ext)) {
if (input.name === "photograph" || input.name === "signature") {
alert("Only image files (JPG, JPEG, PNG) are allowed for Photograph and Signature.");
} else {
alert("Invalid file type! Only PDF, JPG, JPEG, or PNG allowed.");
}
input.value = "";
return;
}
});
});
});
document.addEventListener("change", function(e) {
// Check for dynamically added publication file inputs
if (e.target && e.target.classList.contains("pub-upload-check")) {
const input = e.target;
const maxKB = parseInt(input.getAttribute("data-max"), 10) || 2048;
const maxBytes = maxKB * 1024;
const file = input.files[0];
if (!file) return;
// Size check
if (file.size > maxBytes) {
alert("Publication file size exceeds 2MB!");
input.value = "";
return;
}
// Type check (PDF only)
const ext = file.name.split('.').pop().toLowerCase();
if (ext !== "pdf") {
alert("Only PDF files are allowed for publication uploads.");
input.value = "";
}
}
});
// === Dynamic JS Injectors ===
// Toggle patent fields
window.onload = function() {
calculateExperience();
};
document.querySelectorAll('.sci-toggle').forEach(select => {
select.addEventListener('change', function() {
const target = document.querySelector(this.dataset.target);
target.style.display = this.value === "Yes" ? 'block' : 'none';
});
});
// Experience block
function addExperience() {
const i = document.querySelectorAll('.experience-block').length;
const html = `
<div class="experience-block mb-3 p-3 border rounded">
<div class="row g-2">
<div class="col-md-3">
<label class="form-label">Type of Organization</label>
<input type="text" name="experience[${i}][org_type]" class="form-control">
</div>
<div class="col-md-3">
<label class="form-label">Name of Organization</label>
<input type="text" name="experience[${i}][organization]" class="form-control">
</div>
<div class="col-md-2">
<label class="form-label">Position Held</label>
<input type="text" name="experience[${i}][position]" class="form-control">
</div>
<div class="col-md-2">
<label class="form-label">From</label>
<input type="date" name="experience[${i}][from]" class="form-control">
</div>
<div class="col-md-2">
<label class="form-label">To</label>
<input type="date" name="experience[${i}][to]" class="form-control" onchange="calculateExperience()">
</div>
<div class="col-md-3">
<label class="form-label">Nature of Work</label>
<input type="text" name="experience[${i}][nature]" class="form-control">
</div>
<div class="col-md-2">
<label class="form-label">Last Pay Drawn</label>
<input type="text" name="experience[${i}][last_pay]" class="form-control">
</div>
<div class="col-md-2">
<label class="form-label">Status of Job</label>
<input type="text" name="experience[${i}][status]" class="form-control">
</div>
<div class="col-md-2 d-flex align-items-end">
<button type="button" class="btn btn-danger" onclick="this.closest('.experience-block').remove(); calculateExperience();">Remove</button>
</div>
</div>
</div>`;
document.getElementById('experienceContainer').insertAdjacentHTML('beforeend', html);
calculateExperience();
}
function calculateExperience() {
let totalMonths = 0;
const blocks = document.querySelectorAll('#experienceContainer .experience-block');
blocks.forEach(block => {
const fromInput = block.querySelector('[name*="[from]"]');
const toInput = block.querySelector('[name*="[to]"]');
if (!fromInput || !toInput) return;
const from = new Date(fromInput.value);
const to = new Date(toInput.value);
if (!isNaN(from) && !isNaN(to) && fromInput.value && toInput.value) {
let months = (to.getFullYear() - from.getFullYear()) * 12 + (to.getMonth() - from.getMonth());
if (to.getDate() >= from.getDate()) months += 1; // Optional: count partial months as full
if (months > 0) totalMonths += months;
}
});
const years = Math.floor(totalMonths / 12);
const months = totalMonths % 12;
document.getElementById('total_experience').value = `${years} years ${months} months`;
}
function addPublication() {
const i = document.querySelectorAll('#publicationsContainer .pub-row').length;
const html = `
<div class="pub-row border rounded p-3 mb-3">
<div class="row g-2">
<div class="col-md-4">
<label class="form-label">Journal Type</label>
<input name="publication[${i}][journal_type]" class="form-control">
</div>
<div class="col-md-4">
<label class="form-label">Title of the Paper</label>
<input name="publication[${i}][paper_title]" class="form-control">
</div>
<div class="col-md-4">
<label class="form-label">Authorship</label>
<input name="publication[${i}][authorship]" class="form-control" placeholder="e.g., First Author, Co-Author">
</div>
<div class="col-md-2">
<label class="form-label">Total No. of Authors</label>
<input name="publication[${i}][total_authors]" type="number" class="form-control">
</div>
<div class="col-md-4">
<label class="form-label">Name of the Journal</label>
<input name="publication[${i}][journal_name]" class="form-control">
</div>
<div class="col-md-2">
<label class="form-label">Year</label>
<input name="publication[${i}][year]" type="number" class="form-control">
</div>
<div class="col-md-2">
<label class="form-label">Volume No.</label>
<input name="publication[${i}][volume]" class="form-control">
</div>
<div class="col-md-2">
<label class="form-label">Page No.</label>
<input name="publication[${i}][page]" class="form-control">
</div>
<div class="col-md-2">
<label class="form-label">No. of Citations</label>
<input name="publication[${i}][citations]" type="number" class="form-control">
<small class="text-muted">as per Google Scholar</small>
</div>
<div class="col-md-2">
<label class="form-label">Impact Factor</label>
<input name="publication[${i}][impact]" type="number" step="0.01" class="form-control">
</div>
<div class="col-md-4">
<label class="form-label">Upload Publication (Max 2MB)</label>
<input name="publication[${i}][file]" type="file" class="form-control pub-upload-check" accept=".pdf" data-max="2048">
<small class="text-muted">PDF only, Max 2MB</small>
</div>
<div class="col-12 mt-2 d-flex justify-content-end">
<button type="button" class="btn btn-danger btn-sm remove-publication">Remove</button>
</div>
</div>
</div>`;
document.getElementById('publicationsContainer').insertAdjacentHTML('beforeend', html);
}
function addPatent() {
const i = document.querySelectorAll('#patentsContainer .patent-row').length;
const html = `
<div class="patent-row border p-3 mb-2">
<div class="row g-2">
<div class="col-md-3">
<label class="form-label">Title</label>
<input name="patent[${i}][title]" class="form-control">
</div>
<div class="col-md-3">
<label class="form-label">Inventor(s)</label>
<input name="patent[${i}][inventors]" class="form-control">
</div>
<div class="col-md-2">
<label class="form-label">Filded/Granted</label>
<select name="patent[${i}][status]" class="form-select form-select-a">
<option value="">Select Status</option>
<option>Filed</option>
<option>Granted</option>
</select>
</div>
<div class="col-md-2">
<label class="form-label">Country of registeration</label>
<input name="patent[${i}][country]" class="form-control">
</div>
<div class="col-md-2">
<label class="form-label">Patent No.</label>
<input name="patent[${i}][number]" class="form-control">
</div>
<div class="col-md-2">
<label class="form-label">Patent Seal & Date</label>
<input name="patent[${i}][date]" type="date" class="form-control">
</div>
<div class="col-md-12 mt-2 d-flex justify-content-end">
<button type="button" class="btn btn-danger btn-sm" onclick="this.closest('.patent-row').remove()">Remove</button>
</div>
</div>
</div>`;
document.getElementById('patentsContainer').insertAdjacentHTML('beforeend', html);
}
function addBook() {
const i = document.querySelectorAll('#booksContainer .book-row').length;
const html = `
<div class="book-row border p-3 mb-2">
<div class="row g-2">
<div class="col-md-4">
<label class="form-label">Book Title</label>
<input name="book[${i}][book_title]" class="form-control">
</div>
<div class="col-md-4">
<label class="form-label">Chapter Title</label>
<input name="book[${i}][chapter_title]" class="form-control">
</div>
<div class="col-md-4">
<label class="form-label">Publication Agency</label>
<input name="book[${i}][agency]" class="form-control">
</div>
<div class="col-md-4">
<label class="form-label">Author or Co-author</label>
<select name="book[${i}][role]" class="form-select form-select-a">
<option value="">Select Role</option>
<option>Author</option>
<option>Co-Author</option>
</select>
</div>
<div class="col-md-12 mt-2 d-flex justify-content-end">
<button type="button" class="btn btn-danger btn-sm" onclick="this.closest('.book-row').remove()">Remove</button>
</div>
</div>
</div>`;
document.getElementById('booksContainer').insertAdjacentHTML('beforeend', html);
}
function addSeminar() {
const i = document.querySelectorAll('#seminarsContainer .seminar-row').length;
const html = `
<div class="seminar-row border p-3 mb-2">
<div class="row g-2">
<div class="col-md-4">
<label class="form-label">Name of the Semilar/Symposium/Conference</label>
<input name="seminar[${i}][event]" class="form-control">
</div>
<div class="col-md-4">
<label class="form-label">Title of the Paper read/presented</label>
<input name="seminar[${i}][paper_title]" class="form-control">
</div>
<div class="col-md-2">
<label class="form-label">Place</label>
<input name="seminar[${i}][place]" class="form-control">
</div>
<div class="col-md-2">
<label class="form-label">Date</label>
<input name="seminar[${i}][date]" type="date" class="form-control">
</div>
<div class="col-md-6 mt-2">
<label class="form-label">Organizer (with address)</label>
<input name="seminar[${i}][organizer]" class="form-control">
</div>
<div class="col-md-12 mt-2 d-flex justify-content-end">
<button type="button" class="btn btn-danger btn-sm" onclick="this.closest('.seminar-row').remove()">Remove</button>
</div>
</div>
</div>`;
document.getElementById('seminarsContainer').insertAdjacentHTML('beforeend', html);
}
function addAward() {
const i = document.querySelectorAll('#awardsContainer .award-row').length;
const html = `
<div class="award-row border p-3 mb-2">
<div class="row g-2">
<div class="col-md-5">
<label class="form-label">Award Name</label>
<input name="award[${i}][name]" class="form-control">
</div>
<div class="col-md-2">
<label class="form-label">Year</label>
<input name="award[${i}][year]" type="number" class="form-control">
</div>
<div class="col-md-5">
<label class="form-label">Sponsoring Organization / Agency (with address)</label>
<input name="award[${i}][sponsor]" class="form-control">
</div>
<div class="col-md-12 mt-2 d-flex justify-content-end">
<button type="button" class="btn btn-danger btn-sm" onclick="this.closest('.award-row').remove()">Remove</button>
</div>
</div>
</div>`;
document.getElementById('awardsContainer').insertAdjacentHTML('beforeend', html);
}
function addVisit() {
const i = document.querySelectorAll('#visitsContainer .visit-row').length;
const html = `
<div class="visit-row border p-3 mb-2">
<div class="row g-2">
<label class="form-label">Name of the country visited</label>
<input name="visit[${i}][country]" class="form-control">
</div>
<div class="col-md-3">
<label class="form-label">From Date</label>
<input name="visit[${i}][from]" type="date" class="form-control">
</div>
<div class="col-md-3">
<label class="form-label">To Date</label>
<input name="visit[${i}][to]" type="date" class="form-control">
</div>
<div class="col-md-6 mt-2">
<label class="form-label">Institution/Organization/Agency Visited (with address)</label>
<input name="visit[${i}][institute]" class="form-control">
</div>
<div class="col-md-6 mt-2">
<label class="form-label">Purpose</label>
<input name="visit[${i}][purpose]" class="form-control">
</div>
<div class="col-md-6 mt-2">
<label class="form-label">Sponsorer (name & address)</label>
<input name="visit[${i}][sponsorer]" class="form-control">
</div>
<div class="col-md-12 mt-2 d-flex justify-content-end">
<button type="button" class="btn btn-danger btn-sm" onclick="this.closest('.visit-row').remove()">Remove</button>
</div>
</div>
</div>`;
document.getElementById('visitsContainer').insertAdjacentHTML('beforeend', html);
}
function addReferee() {
const maxReferees = 2;
const count = document.querySelectorAll('#refereesContainer .referee-row').length;
if (count >= maxReferees) {
alert("You can only add up to 2 professional referees.");
return;
}
const i = count;
const html = `
<div class="referee-row border p-3 mb-2">
<div class="row g-2">
<div class="col-md-4">
<label class="form-label">Name of the Referee</label>
<input name="referee[${i}][name]" class="form-control" required>
</div>
<div class="col-md-4">
<label class="form-label">Occupation or position held</label>
<input name="referee[${i}][occupation]" class="form-control" required>
</div>
<div class="col-md-4">
<label class="form-label">Postal address</label>
<input name="referee[${i}][address]" class="form-control" required>
</div>
<div class="col-md-4">
<label class="form-label">Mobile No.</label>
<input type="tel" name="referee[${i}][mobile]" class="form-control" pattern="^[0-9]{10}$" maxlength="10" required>
</div>
<div class="col-md-4">
<label class="form-label">Email</label>
<input type="email" name="referee[${i}][email]" class="form-control" required>
</div>
<div class="col-md-12 mt-2 d-flex justify-content-end">
<button type="button" class="btn btn-danger btn-sm" onclick="this.closest('.referee-row').remove()">Remove</button>
</div>
</div>
</div>`;
document.getElementById('refereesContainer').insertAdjacentHTML('beforeend', html);
}
function limitWords(textarea, counterId, maxWords) {
let words = textarea.value.trim().split(/\s+/).filter(w => w.length > 0);
if (words.length > maxWords) {
textarea.value = words.slice(0, maxWords).join(" ");
words = textarea.value.trim().split(/\s+/);
alert("Maximum " + maxWords + " words allowed.");
}
document.getElementById(counterId).innerText = words.length + "/" + maxWords + " words";
}
</script>
</body>
</html>