array( "title" => t("Access proposal Portal"), "description" => t("Allows users to view proposal postings.") ), "manage conference_proposal" => array( "title" => t("Manage proposal Portal"), "description" => t("Allows users to manage proposal postings.") ), "manage download_application" => array( "title" => t("Manage Download Portal"), "description" => t("Allows users to download proposal applications.") ), ); } function conference_proposal_menu() { $items = array(); $items["conference_proposal"] = array( "title" => "Abstracts", "page callback" => "conference_proposal_page", "access arguments" => array("access conference_proposal"), "type" => MENU_NORMAL_ITEM, ); $items["conference_proposal/apply"] = array( "title" => "Abstract Submission Form", "page callback" => "conference_proposal_application_page", "access arguments" => array("access conference_proposal"), "type" => MENU_CALLBACK, ); // $items["conference_proposal/edit"] = array( // "title" => "Edit Proposals form", // "page callback" => "conference_proposal_application_edit_page", // "access arguments" => array("access conference_proposal"), // "type" => MENU_CALLBACK, // ); $items["conference_proposal/view-applications"] = array( "title" => "View Applications", "page callback" => "conference_proposal_view_application_page", "access arguments" => array("manage conference_proposal"), "type" => MENU_CALLBACK, ); // $items["conference_proposal/Edit-proposals"] = array( // "title" => "Edit Proposals", // "page callback" => "edit_conference_proposal_page", // "access arguments" => array("access conference_proposal"), // "type" => MENU_CALLBACK // ); // $items["conference_proposal/downloads_proposals"] = array( // "title" => "Application Download", // "description" => "Applications Download", // "page callback" => "proposals_downloads_page", // "access arguments" => array("access proposal_portal"), // "type" => MENU_CALLBACK // ); $items["conference_proposal/ajax"] = array( "title" => "Ajax callbacks", "page callback" => "conference_proposal_ajax", "access arguments" => array("access conference_proposal"), "type" => MENU_CALLBACK ); return $items; } function conference_proposal_application_form($form, &$form_state, $proposal_id = 0) { global $user; $form = array(); $form["wrapper"] = array( "#type" => "lable", "#title" => t("Form"), ); $form["wrapper"]["fname"] = array( "#type" => "textfield", "#title" => t("First Name"), "#required" => TRUE, '#attributes' => array( "placeholder" => "Please enter your first name" ) ); $form["wrapper"]["lname"] = array( "#type" => "textfield", "#title" => t("Last Name"), "#required" => TRUE, '#attributes' => array( "placeholder" => "Please enter your last name" ) ); $form["wrapper"]["contributer"] = array( "#type" => "textfield", "#title" => t("Any Contributer"), '#attributes' => array( "placeholder" => "Please enter contributers name" ) ); $form["wrapper"]["contact"] = array( "#type" => "textfield", "#title" => t("Contact"), "#required" => TRUE, '#attributes' => array( "placeholder" => "Please enter your contact number" ) ); $form["wrapper"]["email"] = array( "#type" => "textfield", "#title" => t("Email"), "#required" => TRUE, '#default_value' => $user->mail, '#attributes' => array( "placeholder" => "Please enter your email" ) ); $form["wrapper"]["proposal_id"] = array( '#type' => 'select', '#title' => t('Proposal Type'), '#options' => get_conference_proposal_available("options"), //'#description' => t(' you like to do'), '#attributes' => array('disabled' => 'disabled'), '#default_value' => $proposal_id, ); $form["wrapper"]["title"] = array( "#type" => "textfield", "#title" => t("Title"), "#required" => TRUE, '#attributes' => array( "placeholder" => "Please enter the title of your abstract" ) ); // $form["wrapper"]["abstract"] = array( // "#type" => "textarea", // "#title" => t("Abstract"), // "#required" => TRUE, // '#attributes' => array( // "placeholder" => "Please enter your abstract" // ) // ); $form["wrapper"]["bio"] = array( "#type" => "textarea", "#title" => t("Bio"), "#required" => TRUE, '#attributes' => array( "placeholder" => "Please enter your bio" ) ); $form["wrapper"]["link"] = array( "#type" => "textfield", "#title" => t("Link"), '#attributes' => array( "placeholder" => "Please enter proposal related link" ) ); $form["wrapper"]["abstract_file"] = array( "#type" => "file", "#title" => t("Abstract File" . required_star()), "#description" => t("Please upload your abstract file in [.pdf] format"), ); $form["wrapper"]["supported_file"] = array( "#type" => "file", "#title" => t("Supporting File"), "#description" => t("Please upload your suporting file in [.zip] format"), ); $form["wrapper"]["user_id"] = array( "#type" => "hidden", "#default_value" => $user->uid, ); $form["wrapper"]["submit"] = array( "#type" => "submit", "#value" => "Submit Abstract" ); return $form; } function conference_proposal_application_form_validate($form, &$form_state) { if (!preg_match('/^[0-9\ \+]{0,15}$/', $form_state['values']['contact'])) form_set_error('contact', t('Invalid concat number')); $abstractfile = file_save_upload('abstract_file', array( // Validate extensions. 'file_validate_extensions' => array('pdf'), )); // If the file passed validation: if (!empty($abstractfile->filename)) { // Move the file into the Drupal file system. if ($abstractfile = file_move($abstractfile, 'public://')) { // Save the file for use in the submit handler. $form_state['storage']['abstract_file'] = $abstractfile; } else { form_set_error('abstract_file', t("Failed to uploaded file to the site's file folder.")); } } else { form_set_error('abstract_file', 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.')); } $supportedfile = file_save_upload('supported_file', array( // Validate extensions. 'file_validate_extensions' => array('zip'), )); // If the file passed validation: if (!empty($supportedfile->filename)) { // Move the file into the Drupal file system. if ($supportedfile = file_move($supportedfile, 'public://')) { // Save the file for use in the submit handler. $form_state['storage']['supported_file'] = $supportedfile; } else { form_set_error('supported_file', t("Failed to uploaded file to the site's file folder.")); } } else { // form_set_error('supported_file', t('No file was uploaded.')); } } function conference_proposal_application_form_submit($form, &$form_state) { $v = $form_state["values"]; $abstract_file = $form_state["storage"]["abstract_file"]; if(isset($supported_file)) { $supported_file = $form_state["storage"]["supported_file"]; } $query = " INSERT INTO proposal_applications (first_name, last_name, contributer, contact, email, title, bio, link, proposal_file, supported_file, proposal_id, uid) VALUES (:fname, :lname, :contributer, :contact, :email, :title, :bio, :link, :abstract_file, :supported_file, :proposal_id, :user_id) "; $args = array( ":fname" => $v["fname"], ":lname" => $v["lname"], ":contact" => $v["contact"], ":contributer" => $v["contributer"], ":email" => $v["email"], ":title" => $v["title"], //":abstract" => $v["abstract"], ":bio" => $v["bio"], ":link" => $v["link"], ":abstract_file" => $abstract_file->filename, ":supported_file" => isset($supported_file) ? $supported_file->filename : 'None', ":proposal_id" => $v["proposal_id"], ":user_id" => $v["user_id"], ); /* storing the row id in $result */ $result = db_query($query, $args, array('return' => Database::RETURN_INSERT_ID)); /* moving the file to uploads */ $base_path = $_SERVER['DOCUMENT_ROOT'] . base_path(); $uploads_dir = $base_path . "uploads/proposal_file"; if(!file_exists($uploads_dir . "/{$result}/")) { mkdir($uploads_dir . "/{$result}/", 0755, TRUE); } if($abstract_file->filename){ file_unmanaged_move($abstract_file->uri, $uploads_dir . "/{$result}/{$abstract_file->filename}"); file_delete($abstract_file); drupal_set_message("Abstract Uploaded Succesfully"); } if(isset($supported_file)) { file_unmanaged_move($supported_file->uri, $uploads_dir . "/{$result}/{$supported_file->filename}"); file_delete($supported_file); drupal_set_message("Supported files Uploaded Succesfully"); } /* cleaning up temporary storage */ unset($form["storage"]["abstract_file"]); unset($form["storage"]["supported_file"]); drupal_set_message("Thank you for submitting your abstract"); /* sending notification to the applicant */ $subject = " {$v['title']} - Abstract received"; $message = " Dear {$v['fname']}, We have received your abstract We will get back to you shortly. Regards, Scilab Team "; send_mail("conference@scilab.in", $v["email"], $subject, $message); } function conference_proposal_page(){ $output = ""; $i = 1; $result = get_conference_proposal_available(); foreach($result as $row) { $output .= " Proposal: {$row->proposal_name}
Subbmission Guidelines:
{$row->proposal_requirement}
"; $output .= "
"; $output .= l("Submit Now ", "conference_proposal/apply/{$row->id}" , array( "attributes" => array("class" => "btn btn-primary"), "html" => TRUE, )); $output .= "

"; $i++; } return $output; } function conference_proposal_view_application_page($proposal_id=0) { $markup = ""; if(array_key_exists("saved", $_GET)){ drupal_set_message("Selections saved successfully.", "success"); } if($proposal_id) { $result = db_select("proposal_applications") ->fields("proposal_applications") ->condition("proposal_id",$proposal_id) ->execute()->fetchAll(); if(!$result){ $markup .= "

No abstract uploaded

"; }else{ $headers = array( "#", "Name", "Bio" , "View abstract", "Download abstract", "Selected", ); $rows = array(); $i = 1; foreach($result as $row) { $item = array( $i, $row->first_name.' '.$row->last_name, $row->bio, l(str_replace('.', '_',str_replace(' ', '_',strtolower("{$row->id}_{$row->first_name}_{$row->last_name}"))) . '.pdf', "uploads/proposal_file/{$row->id}/{$row->proposal_file}", array("attributes" => array("target" => "_blank",))), l("{$row->proposal_file}", "uploads/proposal_file/{$row->id}/{$row->supported_file}", array("attributes" => array("target" => "_blank",))), ); if($row->selected) { $check = ""; } else { $check = ""; } array_push($item, $check); // $proposal = db_select("proposal_type") // ->fields("proposal_type") // ->condition("id", $proposal_id) // ->execute()->fetchObject(); // $base_path= $_SERVER['DOCUMENT_ROOT'] . base_path(); // $downloads_dir = "uploads/proposal_file/{$row->id}/{$row->proposal_file}"; // $files = $downloads_dir; // $zipname = str_replace(' ','_',strtolower($proposal->proposal_name.'_'.'.zip')); // $zip = new ZipArchive; // $zip->open($zipname, ZipArchive::CREATE); // $zip->addFile($files, str_replace('.','_',str_replace(' ','_',strtolower("{$row->id} {$row->first_name} {$row->last_name}" ))) . ".pdf"); // $zip->close(); array_push($rows, $item); $i++; } $proposal = db_select("proposal_type") ->fields("proposal_type") ->condition("id", $proposal_id) ->execute()->fetchObject(); $markup .= l("<< Back to the list of Proposals", "conference_proposal/view-applications"); $markup .= "
"; // $markup .= l("Download all applications", "conference_proposal/downloads_applications/{$row->proposal_id}/{$row->id}"); $markup .= "
"; $markup .= "
{$proposal->proposal_name} - List of applications
"; $markup .= bootstrap_table($headers, $rows); $markup .= l("Save Selections", "conference_proposal/view-applications/", array( "query" => array( "saved" => "true" ), "attributes" => array( "class" => "btn btn-primary" ) ) ); } }else { /* List all the job positions. * Change the condition later based on end date. */ $result = db_select("proposal_type") ->fields("proposal_type") ->condition("status", 0, '<>') ->execute()->fetchAll(); $headers = array( "#", "Proposal", "Time", "Action", ); $rows = array(); foreach($result as $row) { $item = array( $row->id, "{$row->proposal_name}", $row->time, l("View applications", "conference_proposal/view-applications/{$row->id}") ); array_push($rows, $item); } $markup .= "
List of Proposals
"; $markup .= bootstrap_table($headers, $rows); } $output = array( "positions_list" => array( "#prefix" => "
", "#markup" => $markup, "#suffix" => "
", ), ); return $output; } function conference_proposal_application_page($proposal_id=0){ $application_form = ""; if($proposal_id) { $application_form = drupal_get_form("conference_proposal_application_form", $proposal_id); $application_form = drupal_render($application_form); } else { $application_form = drupal_get_form("conference_proposal_application_form"); $application_form = drupal_render($application_form); } $output = array( "application_form" => array( "#prefix" => "", "#markup" => $application_form, "#suffix" => "", ) ); return $output; } function get_conference_proposal_available($key="") { $result = db_select("proposal_type") ->fields("proposal_type") ->condition("status", 1) ->execute()->fetchAll(); if($key == "options") { $options = array(); foreach($result as $row) { $options[$row->id] = "{$row->proposal_name}"; } return $options; } else { return $result; } } function conference_proposal_ajax($item="", $key="") { $data = ""; if($item == "shortlist") { $query = " UPDATE proposal_applications SET selected = !selected WHERE id = :aid "; $args = array( ":aid" => $key ); db_query($query, $args); $data = "updated"; } echo $data; exit(); } function conference_proposal_init() { drupal_add_js("misc/form.js"); drupal_add_js("misc/collapse.js"); drupal_add_js( drupal_get_path('module', 'conference_proposal') . '/js/main.js', array( 'group' => JS_THEME, 'weight' => 20, 'every_page' => TRUE, 'cache' => TRUE, //'scope' => 'header', ) ); } function required_star() { return " *"; } function bootstrap_table($headers, $rows) { $thead = ""; $tbody = ""; foreach($headers as $header) { $thead .= "{$header}"; } foreach($rows as $row) { $tbody .= ""; foreach($row as $data) { $tbody .= "{$data}"; } $tbody .= ""; } $table = " {$thead}{$tbody}
"; return $table; } /** * Simple wrapper function for drupal_mail() to avoid extraneous code. */ function send_mail($from, $to, $subject, $message) { $my_module = 'conference_proposal'; $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, 'cc' =>'conference@scilab.in', 'Bcc' => 'prashantsinalkar@gmail.com , priyankabhagwat085@gmail.com', ), ); $system = drupal_mail_system($my_module, $my_mail_token); $message = $system->format($message); if ($system->mail($message)) { return TRUE; } else { return FALSE; } } 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); } ?>