"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-

  1. Scilab Signal Processing & DSP toolbox
  2. Scilab Computer Vision toolbox
  3. Scilab Image Processing toolbox
  4. Scilab Communication Systems toolbox
  5. 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:

"; $output = array( "quick_links" => array( "#prefix" => "" ), "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 ''; // echo ''; //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++; } //$result as $row 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 NoNamePhoneEmailApplication Date
Sr NoNamePhoneEmailApplication Date
' . $i . '' . ucfirst(strtolower($row->name)) . '' . $row->contact . '' . $row->email . '' . $row->date . '
'; } //$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 = " {$thead}{$tbody}
"; 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; } }