<?php <<<<<<< HEAD /* hook menu */ function job_portal_menu() { $items = array(); $items["jobs"] = array( "title" => "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 = " <p><strong>{$v['name']}</strong> has applied for the post of <strong>{$position}</strong>.</p> <table border='1' width='740px'> <tr><td>Name</td><td>{$v['name']}</td></tr> <tr><td>Contact</td><td>{$v['contact']}</td></tr> <tr><td>Email</td><td>{$v['email']}</td></tr> </table> <p><em>Please check the resume attached to this mail.</em></p> "; $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 = " <strong>Position</strong>: {$row->position}<br> <strong>Specialization</strong>: {$row->specialization}<br> <strong>Salary</strong>: {$row->salary}<br> <strong>Qualification</strong>: {$row->qualification} <strong>Skills</strong>: {$row->skills} <strong>Job Responsibilities</strong>: {$row->responsibilities} <strong>Location</strong>: {$row->location}<br><br> "; $collapser_content .= "<center>"; $collapser_content .= l("<i class='icon icon-white icon-briefcase'></i> Apply Now", "jobs/apply/{$row->id}", array( "attributes" => array( "class" => "btn btn-success btn-large" ), "html" => TRUE )); $collapser_content .= "</center>"; $output .= collapser($collapser_header, $collapser_content, "", $i); $quick_links .= "<a class='badge quick' data-toggle='tooltip' data-placement='right' title='{$row->project}' href='#fieldset-id-{$i}'>{$i}</a><br>"; $i++; } //$result as $row $output .= "<p style='color:#000'></br> 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 <a href='mailto:jobs@fossee.in'>jobs[at]fossee[dot]in</a></p>The email subject should contain:</p><ul><li>Your name</li><li>Position that you are applying for</li><li>FOSS that you wish to work on</li></ul> <p style='color:#000'> <h3 class='page-title'>Semester Internships</h3> 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. <br><br> We have semester internships available with the following groups- <p style='color:#000'> <ol> <li> Scilab Signal Processing & DSP toolbox </li> <li> Scilab Computer Vision toolbox </li> <li> Scilab Image Processing toolbox </li> <li> Scilab Communication Systems toolbox </li> <li> IoT with RaspberryPi and Arduino </li> </ol> </p> 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- <a href='https://goo.gl/OuHa2H' target='_blank'>https://goo.gl/OuHa2H</a>. If you have any doubts, please email <a href='mailto:toolbox@scilab.in'>toolbox[at]scilab[dot]in</a>. </p> "; $output = array( "quick_links" => array( "#prefix" => "<div id='quick-links'>", "#markup" => $quick_links, "#suffix" => "</div>" ), "job_description" => array( "#prefix" => "<div id='job-description'>", "#markup" => $output, "#suffix" => "</div>" ) ); 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" => "<div id='job-application'>", "#markup" => $application_form, "#suffix" => "</div>" ) ); 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 = "<input class='shortlist' type='checkbox' data-aid='{$row->id}' checked>"; } //$row->selected else { $check = "<input class='shortlist' type='checkbox' data-aid='{$row->id}'>"; } 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 .= "<div style='float:right'>"; $markup .= l("Download all applications", "jobs/downloads_all_applications/{$position_id}"); $markup .= "<br>"; $markup .= l("Download selected applications", "jobs/downloads_selected_applications/{$position_id}", array( "attributes" => array( "id" => "d_app" ) )); $markup .= "<br>"; $markup .= l("Download applications data in document", "jobs/downloads_all_applications_doc/{$position_id}", array( "attributes" => array( "id" => "d_aaps" ) )); $markup .= "<br>"; $markup .= l("Download applications data in spreadsheet", "jobs/downloads_all_applications_spreadsheet/{$position_id}", array( "attributes" => array( "id" => "d_aaps" ) )); $markup .= "</div>"; $markup .= "<h5><u>{$job->position} ({$job->specialization}) - List of applications</u></h5>"; $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} [ <strong>{$row->project}</strong> ]", $row->time, l("View applications", "jobs/view-applications-if32ggxV747/{$row->id}") ); array_push($rows, $item); $i++; } //$result as $row $markup .= "<h5><u>List of job openings</u></h5>"; $markup .= bootstrap_table($headers, $rows); } $output = array( "positions_list" => array( "#prefix" => "<div id='positions-list'>", "#markup" => $markup, "#suffix" => "</div>" ) ); 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 '<table width=650 align="center"><tr><th colspan="5" align="left">Advt date: ' . $job->time . '</span></th></tr><tr><th colspan="5" align ="left">Position: ' . $job->position . '</br>Specialization: ' . $job->position . '<br>Salary: ' . $job->salary . '<br>Qualification: ' . $job->qualification . '<br>Skills: ' . $job->skills . '<br>Job Responsibilities: ' . $job->skills . '<br>Location: ' . $job->location . '</span></th></tr><tr><td>Sr No</td><td>Name</td><td>Phone</td><td>Email</td><td>Application Date</td></tr>'; // echo '<tr><td>Sr No</td><td>Name</td><td>Phone</td><td>Email</td><td>Application Date</td></tr>'; //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 '<tr><td>' . $i . '</td><td>' . ucfirst(strtolower($row->name)) . '</td><td>' . $row->contact . '</td><td>' . $row->email . '</td><td>' . $row->date . '</td></tr>'; $i++; } //$result as $row echo '</table>'; } //$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 " <fieldset id='fieldset-id-{$key}' class='collapsible'> <legend> <a class='fieldset-title' href='#'> <span class='fieldset-legend'>{$title}</span> </a> <span class='summary'></span> </legend> <div class='fieldset-wrapper'> <div class='fieldset-description'>{$description}</div> {$content} </div> </fieldset> "; } /* job portal required * in red function */ function required_star() { return "<span class='form-required' title='This field is required.'> *</span>"; } /* 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 .= "<th>{$header}</th>"; } //$headers as $header foreach ($rows as $row) { $tbody .= "<tr>"; foreach ($row as $data) { $tbody .= "<td>{$data}</td>"; } //$row as $data $tbody .= "</tr>"; } //$rows as $row $table = " <table class='table table-bordered table-hover' style='margin-left:-140px'> <thead>{$thead}</thead> <tbody>{$tbody}</tbody> </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; } }