"FOSSEE Job Portal",
"page callback" => "job_portal_page",
"access arguments" => array(
"access job_portal"
),
"type" => MENU_CALLBACK
);
$items["jobs/apply"] = array(
"title" => "FOSSEE Job Portal - Application Form",
"page callback" => "job_portal_application_page",
"access arguments" => array(
"access job_portal"
),
"type" => MENU_CALLBACK
);
$items["jobs/view-applications"] = array(
"title" => "FOSSEE Job Portal - View Applications",
"page callback" => "job_portal_view_application_page",
"access arguments" => array(
"manage job_portal"
),
"type" => MENU_CALLBACK
);
$items["jobs/view-applications-if32ggxV747"] = array(
"title" => "FOSSEE Job Portal - View Applications",
"page callback" => "job_portal_view_application_page",
"access arguments" => array(
"access job_portal"
),
"type" => MENU_CALLBACK
);
$items["jobs/downloads_applications"] = array(
"title" => "Application Download",
"description" => "Applications Download",
"page callback" => "job_portal_downloads_applications_page",
"access arguments" => array(
"access job_portal"
),
"type" => MENU_CALLBACK
);
$items["jobs/downloads_all_applications"] = array(
"title" => "Application Download",
"description" => "Applications Download",
"page callback" => "job_portal_downloads_all_applications_page",
"access arguments" => array(
"access job_portal"
),
"type" => MENU_CALLBACK
);
$items["jobs/downloads_all_applications_spreadsheet"] = array(
"title" => "Application Download",
"description" => "Applications Data Download",
"page callback" => "job_portal_downloads_all_applications_spreadsheet_page",
"access arguments" => array(
"access job_portal"
),
"type" => MENU_CALLBACK
);
$items["jobs/downloads_all_applications_doc"] = array(
"title" => "Application Download",
"description" => "Applications Data Download",
"page callback" => "job_portal_downloads_all_applications_document_page",
"access arguments" => array(
"access job_portal"
),
"type" => MENU_CALLBACK
);
$items["jobs/ajax"] = array(
"title" => "Ajax callbacks",
"page callback" => "job_portal_ajax",
"access arguments" => array(
"access job_portal"
),
"type" => MENU_CALLBACK
);
return $items;
}
/* hook permission */
function job_portal_permission()
{
return array(
"access job_portal" => array(
"title" => t("Access Job Portal"),
"description" => t("Allows users to view job postings.")
),
"manage job_portal" => array(
"title" => t("Manage Job Portal"),
"description" => t("Allows users to manage job postings.")
),
"manage download_application" => array(
"title" => t("Manage Download Portal"),
"description" => t("Allows users to download job applications.")
)
);
}
/* job portal application form */
function job_portal_application_form($form, &$form_state, $position_id = 0)
{
$form = array();
$form["wrapper"] = array(
"#type" => "fieldset",
"#title" => t("Application form"),
"#collapsible" => TRUE
);
$form["wrapper"]["position"] = array(
"#type" => "select",
"#title" => t("Job Position"),
"#description" => t("Select the position for which you are applying."),
"#options" => get_jobs_available("options"),
"#empty_option" => t("--- Select a position ---"),
"#default_value" => $position_id,
'#attributes' => array(
'disabled' => 'disabled'
),
"#required" => TRUE
);
$form["wrapper"]["name"] = array(
"#type" => "textfield",
"#title" => t("Name"),
"#description" => t("Please enter your full name."),
"#required" => TRUE,
"#attributes" => array(
'style' => 'text-transform:uppercase'
)
);
$form["wrapper"]["contact"] = array(
"#type" => "textfield",
"#title" => t("Contact Number"),
"#description" => t("Please enter your contact number."),
"#required" => TRUE
);
$form["wrapper"]["email"] = array(
"#type" => "textfield",
"#title" => t("Email"),
"#description" => t("Please enter your e-mail id."),
"#required" => TRUE
);
$form["wrapper"]["resume"] = array(
"#type" => "file",
"#title" => t("Resume" . required_star()),
"#description" => t("Please upload your resume [pdf].")
);
$form["wrapper"]["submit"] = array(
"#type" => "submit",
"#value" => "Submit Application"
);
return $form;
}
/* job portal application form validate */
function job_portal_application_form_validate($form, &$form_state)
{
$file = file_save_upload('resume', array(
// Validate extensions.
'file_validate_extensions' => array(
'pdf'
)
));
// If the file passed validation:
if ($file)
{
// Move the file into the Drupal file system.
if ($file = file_move($file, 'public://'))
{
// Save the file for use in the submit handler.
$form_state['storage']['resume'] = $file;
} //$file = file_move($file, 'public://')
else
{
form_set_error('resume', t("Failed to write the uploaded file to the site's file folder."));
}
} //$file
else
{
form_set_error('resume', t('No file was uploaded.'));
}
/* validating email field */
if (!valid_email_address($form_state["values"]["email"]))
{
form_set_error('email', t('Please enter an valid email address.'));
} //!valid_email_address($form_state["values"]["email"])
}
/* job portal application form validate */
function job_portal_application_form_submit($form, &$form_state)
{
$v = $form_state["values"];
$resume = $form_state["storage"]["resume"];
$display = 1;
$dt = new DateTime();
$current_date = $dt->format("Y-m-d H:i:s");
$query = "
INSERT INTO job_portal_applications
(name, contact, email, resume, position_id, date, display)
VALUES
(:name, :contact, :email, :resume, :position_id, :current_date, :display)
";
$args = array(
":name" => $v["name"],
":contact" => $v["contact"],
":email" => $v["email"],
":resume" => $resume->filename,
":position_id" => $v["position"],
":current_date" => $current_date,
":display" => $display
);
/* storing the row id in $result */
$result = db_query($query, $args, array(
'return' => Database::RETURN_INSERT_ID
));
/* moving the file to uploads/resumes */
$base_path = $_SERVER['DOCUMENT_ROOT'] . base_path();
$uploads_dir = $base_path . "uploads/resumes";
if (!file_exists($uploads_dir . "/{$result}/"))
{
mkdir($uploads_dir . "/{$result}/", 0755, TRUE);
} //!file_exists($uploads_dir . "/{$result}/")
file_unmanaged_move($resume->uri, $uploads_dir . "/{$result}/{$resume->filename}");
$emails = db_select("job_portal_positions")->fields("job_portal_positions", array(
"notify"
))->condition("id", $v["position"])->execute()->fetchObject();
$emails = $emails->notify;
$position = get_jobs_available("options");
$position = $position[$v["position"]];
/* preparing to send mail to the recruiters */
$from = "jobs@fossee.in";
$to = "jobs@fossee.in";
$cc = $emails;
$bcc = "prashantsinalkar@gmail.com";
$subject = "Job Application - {$position}";
$message = "
{$v['name']} has applied for
the post of {$position} .
Name {$v['name']}
Contact {$v['contact']}
Email {$v['email']}
Please check the resume attached to this mail.
";
$file = $uploads_dir . "/{$result}/" . $resume->filename;
$mail_status = send_mail_attachment($from, $to, $cc, $bcc, $subject, $message, $file);
if (!$mail_status)
{
drupal_set_message("An error occurred while sending mail.", "error");
} //!$mail_status
else
{
drupal_set_message("We have received your application. Thank you!", "status");
}
/* cleaning up temporary storage */
file_delete($resume);
unset($form["storage"]["resume"]);
/* sending notification to the applicant */
$subject = "Application received for {$position}";
$message = "
Dear {$v['name']},
We have received your application for the post of {$position}.
We will get back to you shortly.
Regards,
FOSSEE Team
";
send_mail("jobs@fossee.in", $v["email"], $subject, $message);
}
/* job portal page */
function job_portal_page()
{
$output = "";
$quick_links = "";
$i = 1;
$result = get_jobs_available();
foreach ($result as $row)
{
$collapser_header = "#{$i} - {$row->project} - Job Details";
$collapser_content = "
Position : {$row->position}
Specialization : {$row->specialization}
Salary : {$row->salary}
Qualification : {$row->qualification}
Skills : {$row->skills}
Job Responsibilities : {$row->responsibilities}
Location : {$row->location}
";
$collapser_content .= "";
$collapser_content .= l(" Apply Now", "jobs/apply/{$row->id}", array(
"attributes" => array(
"class" => "btn btn-success btn-large"
),
"html" => TRUE
));
$collapser_content .= " ";
$output .= collapser($collapser_header, $collapser_content, "", $i);
$quick_links .= "{$i} ";
$i++;
} //$result as $row
$output .= "
Semester Internships
FOSSEE group at IIT Bombay aims to improve the quality of education with the use of open source software tools such as Scilab, Python, eSim, and Sandhi amongst others.
We have semester internships available with the following groups-
Scilab Signal Processing & DSP toolbox
Scilab Computer Vision toolbox
Scilab Image Processing toolbox
Scilab Communication Systems toolbox
IoT with RaspberryPi and Arduino
We invite coders/testers from any background to participate and contribute to this project as part of FOSSEE semester internship. To know more about the internship requirements, please read- https://goo.gl/OuHa2H . If you have any doubts, please email toolbox[at]scilab[dot]in .
Projects
Project 1:
Nghdl is a FOSSEE product designed for providing mixed mode simulation. It does so by interfacing Ngspice and ghdl (both open source products themselves). The novelty of Nghdl is that the user can write a digital model in ghdl and put it as a dummy model in ngspice netlist, rather than going through the pain of writing a digital model in ngspice themselves. Whenever ngspice encounters such a model in netlist, it initiates a client-server connection with ghdl as server and ngspice as client, and ghdl will do all the computation for the digital model.
Problem Statement:
There is a problem while trying to use multiple digital models in a single netlist. This is being done by setting up multiple client-server connections, running at different ports. The port numbers are determined by corresponding instance id's of each models which are specified in the netlist.
One of the reasons for this problem could be related to multiplexing, as the select function is returning 0 while trying to run multiple models.
Assignment: Find the root cause of the issue, produce necessary code or make changes to existing code and test the functionality.
Github Link: https://github.com/FOSSEE/nghdl/
Skill Required:
C,Socket programing, good to have ghdl knowledge
Perks: Attractive Honorarium and FOSSEE Certificate shall be provided on successful completion of the task(s).
If you are interested, write to: jobs[at]fossee[dot]in
Jobs
If your interest is to work on any other FOSS such as Python, OpenFOAM, Osdag, Sandhi, OpenModelica, eSim, Scilab, SBHS, DWSIM, FOSSEE-Netbook, etc, you may email your resumes to jobs[at]fossee[dot]in The email subject should contain:Your name Position that you are applying for FOSS that you wish to work on
";
$output = array(
"quick_links" => array(
"#prefix" => "",
"#markup" => $quick_links,
"#suffix" => "
"
),
"job_description" => array(
"#prefix" => "",
"#markup" => $output,
"#suffix" => "
"
)
);
return $output;
}
function job_portal_application_page($position_id = 0)
{
$application_form = "";
$form_job = drupal_get_form("job_portal_application_form", $position_id);
$job_form = drupal_get_form("job_portal_application_form");
if ($position_id)
{
$application_form = drupal_render($form_job);
} //$position_id
else
{
$application_form = drupal_render($job);
}
$output = array(
"application_form" => array(
"#prefix" => "",
"#markup" => $application_form,
"#suffix" => "
"
)
);
return $output;
}
function job_portal_view_application_page($position_id = 0)
{
$markup = "";
if (array_key_exists("saved", $_GET))
{
drupal_set_message("Selections saved successfully.", "success");
} //array_key_exists("saved", $_GET)
if ($position_id)
{
$result = db_select("job_portal_applications")->fields("job_portal_applications")->condition("position_id", $position_id)->condition("display", 1)->execute()->fetchAll();
$headers = array(
"#",
"Name",
"Email",
"Date",
"Download",
"Select"
);
$rows = array();
$i = 1;
foreach ($result as $row)
{
$item = array(
$i,
$row->name,
$row->email,
$row->date,
l(str_replace('.', '_', str_replace(' ', '_', strtolower("{$row->id}_{$row->name}"))) . '.pdf', "uploads/resumes/{$row->id}/{$row->resume}", array(
"attributes" => array(
"target" => "_blank"
)
))
);
if ($row->selected)
{
$check = " ";
} //$row->selected
else
{
$check = " ";
}
array_push($item, $check);
array_push($rows, $item);
$i++;
} //$result as $row
$job = db_select("job_portal_positions")->fields("job_portal_positions")->condition("id", $position_id)->condition("display", 1)->execute()->fetchObject();
$markup .= l("<< Back to the list of open positions", "jobs/view-applications-if32ggxV747");
$markup .= "";
$markup .= l("Download all applications", "jobs/downloads_all_applications/{$position_id}");
$markup .= " ";
$markup .= l("Download selected applications", "jobs/downloads_selected_applications/{$position_id}", array(
"attributes" => array(
"id" => "d_app"
)
));
$markup .= " ";
$markup .= l("Download applications data in document", "jobs/downloads_all_applications_doc/{$position_id}", array(
"attributes" => array(
"id" => "d_aaps"
)
));
$markup .= " ";
$markup .= l("Download applications data in spreadsheet", "jobs/downloads_all_applications_spreadsheet/{$position_id}", array(
"attributes" => array(
"id" => "d_aaps"
)
));
$markup .= "
";
$markup .= "{$job->position} ({$job->specialization}) - List of applications ";
$markup .= bootstrap_table($headers, $rows);
$markup .= l("Save Selections", "jobs/view-applications-if32ggxV747/", array(
"query" => array(
"saved" => "true"
),
"attributes" => array(
"class" => "btn btn-primary"
)
));
} //$position_id
else
{
/* List all the job positions.
* Change the condition later based on end date.
*/
$result = db_select("job_portal_positions")->fields("job_portal_positions")->condition("status", 0, '<>')->condition("display", 1)->execute()->fetchAll();
$headers = array(
"#",
"Position",
"Time",
"Action"
);
$rows = array();
$i = 1;
foreach ($result as $row)
{
$item = array(
$i,
"{$row->position} [ {$row->project} ]",
$row->time,
l("View applications", "jobs/view-applications-if32ggxV747/{$row->id}")
);
array_push($rows, $item);
$i++;
} //$result as $row
$markup .= "List of job openings ";
$markup .= bootstrap_table($headers, $rows);
}
$output = array(
"positions_list" => array(
"#prefix" => "",
"#markup" => $markup,
"#suffix" => "
"
)
);
return $output;
}
/* job portal application download page */
function job_portal_downloads_applications_page($position_id)
{
if ($position_id)
{
$result = db_select("job_portal_applications")->fields("job_portal_applications")->condition("position_id", $position_id)->condition("selected", 1)->condition("display", 1)->execute()->fetchAll();
$i = 1;
$rows = array();
$dt = new DateTime();
$current_date = $dt->format("Y-m-d");
foreach ($result as $row)
{
$job = db_select("job_portal_positions")->fields("job_portal_positions")->condition("id", $position_id)->execute()->fetchObject();
$base_path = $_SERVER['DOCUMENT_ROOT'] . base_path();
$downloads_dir = "uploads/resumes/{$row->id}/{$row->resume}";
$files = $downloads_dir;
$zipname = str_replace(' ', '_', strtolower($job->project . '_' . $job->position . '_' . $current_date . '.zip'));
$zip = new ZipArchive;
$zip->open($zipname, ZipArchive::CREATE);
$zip->addFile($files, str_replace('.', '_', str_replace(' ', '_', strtolower("{$row->id} {$row->name}"))) . ".pdf");
$zip->close();
$i++;
} //$result as $row
$base_path = $_SERVER['DOCUMENT_ROOT'] . base_path();
$zipname = str_replace(' ', '_', strtolower($job->project . '_' . $job->position . '_' . $current_date . '.zip'));
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename= "' . str_replace(' ', '_', strtolower($job->project . '_' . $job->position . '_' . $current_date . '.zip')));
header('Content-Length: ' . filesize($zipname));
readfile($zipname);
unlink($zipname);
} //$position_id
}
/* job portal application download all page */
function job_portal_downloads_all_applications_page($position_id)
{
if ($position_id)
{
$result = db_select("job_portal_applications")->fields("job_portal_applications")->condition("position_id", $position_id)->condition("display", 1)->execute()->fetchAll();
$i = 1;
$rows = array();
$dt = new DateTime();
$current_date = $dt->format("Y-m-d");
foreach ($result as $row)
{
$job = db_select("job_portal_positions")->fields("job_portal_positions")->condition("id", $position_id)->execute()->fetchObject();
$base_path = $_SERVER['DOCUMENT_ROOT'] . base_path();
$downloads_dir = "uploads/resumes/{$row->id}/{$row->resume}";
$files = $downloads_dir;
$zipname = str_replace(' ', '_', strtolower($job->project . '_' . $job->position . '_' . $current_date . '.zip'));
$zip = new ZipArchive;
$zip->open($zipname, ZipArchive::CREATE);
$zip->addFile($files, str_replace('.', '_', str_replace(' ', '_', strtolower("{$row->id} {$row->name}"))) . ".pdf");
$zip->close();
$i++;
} //$result as $row
$base_path = $_SERVER['DOCUMENT_ROOT'] . base_path();
$zipname = str_replace(' ', '_', strtolower($job->project . '_' . $job->position . '_' . $current_date . '.zip'));
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename= "' . str_replace(' ', '_', strtolower($job->project . '_' . $job->position . '_' . $current_date . '.zip')));
header('Content-Length: ' . filesize($zipname));
readfile($zipname);
unlink($zipname);
} //$position_id
}
// Download application data in spreadsheet //
function job_portal_downloads_all_applications_spreadsheet_page($position_id)
{
$dt = new DateTime();
$current_date = $dt->format("Y-m-d");
$job = db_select("job_portal_positions")->fields("job_portal_positions")->condition("id", $position_id)->execute()->fetchObject();
header("Content-Type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=" . str_replace(' ', '_', strtolower($job->project . '_' . $job->position . '_' . $current_date . ".xls")));
echo $job->project . "\t" . $job->position . "\t" . ' ' . "\t" . ' ' . "\t" . ' ' . "\n";
echo 'Sr No' . "\t" . 'Name' . "\t" . 'Phone' . "\t" . 'Email' . "\t" . 'Application Date' . "\n";
if ($position_id)
{
$result = db_select("job_portal_applications")->fields("job_portal_applications")->condition("position_id", $position_id)->condition("display", 1)->execute()->fetchAll();
$i = 1;
foreach ($result as $row)
{
echo $i . "\t" . ucfirst(strtolower($row->name)) . "\t" . $row->contact . "\t" . $row->email . "\t" . $row->date . "\n";
$i++;
} //$result as $row
} //$position_id
}
// Download application data in document //
function job_portal_downloads_all_applications_document_page($position_id)
{
$dt = new DateTime();
$current_date = $dt->format("Y-m-d");
$job = db_select("job_portal_positions")->fields("job_portal_positions")->condition("id", $position_id)->execute()->fetchObject();
header("Content-Type: application/vnd.ms-word");
header("Content-disposition: attachment; filename=" . str_replace(' ', '_', strtolower($job->project . '_' . $job->position . '_' . $current_date . ".doc")));
// echo $job->project . "\t" . $job->position . "\t" . ' ' . "\t" . ' ' . "\t" . ' ' . "\n";
echo 'Advt date: ' . $job->time . ' Position: ' . $job->position . 'Specialization: ' . $job->position . ' Salary: ' . $job->salary . ' Qualification: ' . $job->qualification . ' Skills: ' . $job->skills . ' Job Responsibilities: ' . $job->skills . ' Location: ' . $job->location . ' Sr No Name Phone Email Application Date ';
// echo 'Sr No Name Phone Email Application Date ';
//echo 'Sr No' . "\t" . 'Name' . "\t" . 'Phone' . "\t" . 'Email'. "\t" . 'Application Date' . "\n";
if ($position_id)
{
$result = db_select("job_portal_applications")->fields("job_portal_applications")->condition("position_id", $position_id)->condition("display", 1)->execute()->fetchAll();
$i = 1;
foreach ($result as $row)
{
//$app_date = date("d/m/Y", strtotime($row->date));
echo '' . $i . ' ' . ucfirst(strtolower($row->name)) . ' ' . $row->contact . ' ' . $row->email . ' ' . $row->date . ' ';
$i++;
} //$result as $row
echo '
';
} //$position_id
}
/* job portal ajax fuction */
function job_portal_ajax($item = "", $key = "")
{
$data = "";
if ($item == "shortlist")
{
$query = "
UPDATE job_portal_applications
SET selected = !selected
WHERE id = :aid
";
$args = array(
":aid" => $key
);
db_query($query, $args);
$data = "updated";
} //$item == "shortlist"
echo $data;
exit();
}
/* job portal init fuction */
function job_portal_init()
{
drupal_add_js("misc/form.js");
drupal_add_js("misc/collapse.js");
drupal_add_js(drupal_get_path("module", "job_portal") . '/js/main.js', array(
'group' => JS_THEME,
'weight' => 20,
'every_page' => TRUE,
'cache' => TRUE,
'scope' => 'header'
));
/* drupal_add_js(
drupal_get_path('module', 'job_portal') . '/js/smooth_scroll.js',
array(
'group' => JS_THEME,
'weight' => 20,
'every_page' => TRUE,
'cache' => TRUE,
'scope' => 'header',
)
);*/
}
/* helper functions */
function collapser($title = "", $content = "", $description = "", $key = "")
{
return "
{$title}
{$description}
{$content}
";
}
/* job portal required * in red function */
function required_star()
{
return " * ";
}
/* job portal send mail attachment function */
function send_mail_attachment($from, $to, $cc, $bcc, $subject, $message, $file)
{
// $file should include path and filename
$filename = basename($file);
$file_size = filesize($file);
$content = chunk_split(base64_encode(file_get_contents($file)));
$uid = md5(uniqid(time()));
$from = str_replace(array(
"\r",
"\n"
), '', $from); // to prevent email injection
$header = "From: " . $from . "\r\n" . "Cc: " . $cc . "\r\n" . "Bcc: " . $bcc . "\r\n" . "MIME-Version: 1.0\r\n" . "Content-Type: multipart/mixed; boundary=\"" . $uid . "\"\r\n\r\n" . "This is a multi-part message in MIME format.\r\n" . "--" . $uid . "\r\n" . "Content-type: text/html; charset=UTF-8; format=flowed\r\n" . "Content-Transfer-Encoding: 7bit\r\n\r\n" . $message . "\r\n\r\n" . "--" . $uid . "\r\n" . "Content-Type: application/octet-stream; name=\"" . $filename . "\"\r\n" . "Content-Transfer-Encoding: base64\r\n" . "Content-Disposition: attachment; filename=\"" . $filename . "\"\r\n\r\n" . $content . "\r\n\r\n" . "--" . $uid . "--";
return mail($to, $subject, "", $header);
}
/* job portal send get job availabe function */
function get_jobs_available($key = "")
{
$result = db_select("job_portal_positions")->fields("job_portal_positions")->condition("status", 1)->orderBy("display_order", "ASC")->execute()->fetchAll();
if ($key == "options")
{
$options = array();
foreach ($result as $row)
{
$options[$row->id] = "{$row->position} ({$row->specialization})";
} //$result as $row
return $options;
} //$key == "options"
else
{
return $result;
}
}
/* job portal bootstrap table function */
function bootstrap_table($headers, $rows)
{
$thead = "";
$tbody = "";
foreach ($headers as $header)
{
$thead .= "{$header} ";
} //$headers as $header
foreach ($rows as $row)
{
$tbody .= "";
foreach ($row as $data)
{
$tbody .= "{$data} ";
} //$row as $data
$tbody .= " ";
} //$rows as $row
$table = "
";
return $table;
}
/**
* Simple wrapper function for drupal_mail() to avoid extraneous code.
*/
function send_mail($from, $to, $subject, $message)
{
$my_module = 'job_portal';
$my_mail_token = microtime();
$message = array(
'id' => $my_module . '_' . $my_mail_token,
'to' => $to,
'subject' => $subject,
'body' => array(
$message
),
'headers' => array(
'From' => $from,
'Sender' => $from,
'Return-Path' => $from,
'Bcc' => 'prashantsinalkar@gmail.com'
)
);
$system = drupal_mail_system($my_module, $my_mail_token);
$message = $system->format($message);
if ($system->mail($message))
{
return TRUE;
} //$system->mail($message)
else
{
return FALSE;
}
}