Export report
<?php
/**
* Implement Hook Menu
*/
function plex_test_report_menu(){
$items = array();
$items['test-reports/sendmail'] = array(
'type' => MENU_CALLBACK,
'page callback' => 'plex_test_report_personnel_send_mail',
'file' => 'plex_test_report.inc',
'access callback' => '_plex_check_access_personnel',
'page arguments' => array(1),
);
$items['test-reports/supervior-sendmail'] = array(
'type' => MENU_CALLBACK,
'page callback' => 'plex_test_report_supervior_send_mail',
'file' => 'plex_test_report.inc',
'access callback' => '_plex_check_access_personnel',
'page arguments' => array(1),
);
return $items;
}
/**
* Implements hook_theme().
*/
function plex_test_report_theme($existing, $type, $theme, $path) {
return array(
'test_report_node_form' => array(
'render element' => 'form',
'template' => 'test-report-node-form',
// this will set to module/theme path by default:
'path' => drupal_get_path('module', 'plex_test_report'),
),
'print_form_report' => array(
'type' => 'theme',
'variables' => array('node' => null),
'template' => 'print-form-report',
'path' => drupal_get_path('module', 'plex_test_report'),
),
);
}
/**
* Implements hook_form_FORM_ID_alter().
*/
function plex_test_report_form_alter(&$form, &$form_state, $form_id) {
global $user;
if ($form_id == 'test_report_node_form') {
$form['#attributes']['class'][] = 'form-horizontal';
$form['#attributes']['class'][] = 'clearfix';
$lang = $form['language']['#value'];
$form['title']['#default_value'] = $form['field_patient_name'][$lang][0]['value']['#default_value'];
$form['title']['#value'] = $form['field_patient_name'][$lang][0]['value']['#default_value'];
$nid = $form['nid']['#value'];
//theming button delete
if ($nid != null) {
$form['actions']['delete']['#attributes']['class'][] = 'btn btn-primary';
}
$form['field_donor_induced_cd154_tcm']['#suffix'] = '<div class="suffix">%</div>';
$form['field_third_party_induced_cd154_']['#suffix'] = '<div class="suffix">%</div>';
if (in_array(7,array_keys($user->roles))) {
//if user use roles Lab Personnel
$form['actions']['submit']['#value'] = 'Save Test Report';
$form_state['redirect'] = 'test-reports';
$form['actions']['submit']['#submit'] = array('plex_test_report_personnel_submit');
$form['#attributes']['class'][] = 'lab_personnel';
unset ($form['actions']['delete']);
} elseif (in_array(5,array_keys($user->roles))) {
//if user use roles Lab Supervisor
$form['actions']['submit']['#value'] = 'Save Test Report';
$form_state ['redirect'] = 'test-reports/supervisor';
$form['#attributes']['class'][] = 'lab_supervisor';
$form['actions']['submit']['#submit'] = array('plex_test_report_supervisor_submit');
unset ($form['actions']['delete']);
} elseif (in_array(6,array_keys($user->roles))) { //if user use roles Lab Director
$form['#attributes']['class'][] = 'lab_director';
//check if create new
if ($nid != null) {
$fields = array_keys($form_state['field']);
foreach($fields as $item) {
//$form[$item]['und'][0]['value']['#attributes']['disabled'] = true;
//$form[$item]['und'][0]['#disabled'] = true;
$form[$item]['#disabled'] = true;
}
$form['field_reports_status']['#disabled'] = false;
$form['field_reason']['#disabled'] = false;
unset ($form['actions']['delete']);
}
//$form['actions']['submit']['#submit'][] = 'plex_test_report_altersubmit';
//$form['actions']['submit']['#submit'] = array('plex_test_report_altersubmit','node_form_submit');
$form['actions']['submit']['#submit'] = array('plex_test_report_altersubmit');
$form_state ['redirect'] = 'test-reports/director';
}
/** disable all tab if not admin */
if (in_array('administrator', $user->roles)) {
$form['additional_settings']['#access'] = TRUE;
} else {
$form['additional_settings']['#access'] = FALSE;
}
}
}
/** personel submit */
function plex_test_report_personnel_submit(&$form, &$form_state) {
$lang = $form['language']['#value'];
$node = node_form_submit_build_node($form, $form_state);
$name = $form_state['input']['field_patient_name'][$lang][0]['value'];
$name .= ' - '.$form_state['input']['field_accession_number'][$lang][0]['value'];
$name .= ' - Test Report';
$node->title = $name;
$node->field_reports_status[$lang][0]['value'] = 'pending';
node_save($node);
$form_state['redirect'] = 'test-reports';
}
/** supervisor submit */
function plex_test_report_supervisor_submit(&$form, &$form_state) {
$lang = $form['language']['#value'];
$node = node_form_submit_build_node($form, $form_state);
$name = $form_state['input']['field_patient_name'][$lang][0]['value'];
$name .= ' - '.$form_state['input']['field_accession_number'][$lang][0]['value'];
$name .= ' - Test Report';
$node->title = $name;
$node->field_reports_status[$lang][0]['value'] = 'pending';
$node->field_check_send_mail[$lang][0]['value'] = 0; //e_pending
node_save($node);
$form_state['redirect'] = 'test-reports/supervisor';
}
function plex_test_report_altersubmit(&$form, &$form_state) {
global $user,$base_url;
$uid = $user->uid;
$nid = $form['nid']['#value'];
$lang = $form['language']['#value'];
$node = node_form_submit_build_node($form, $form_state);
//$node = node_load($form['nid']['#value']);
if ($nid == null) {
$name = $form_state['input']['field_patient_name'][$lang][0]['value'];
$name .= ' - '.$form_state['input']['field_accession_number'][$lang][0]['value'];
$name .= ' - Test Report';
$node->title = $name;
}
$node->field_permission_report[$lang][0]['value'] = 2;
$node->field_check_send_mail[$lang][0]['value'] = 4;
$status = $form['field_reports_status'][LANGUAGE_NONE]['#value'];
$node->field_reports_status['und'][0]['value'] = $status;
if ($status == 'signedout') {
$node->field_reports_status['und'][0]['value'] = 'signedout';
test_report_generate_pdf($node,$uid);
} else if ($status == 'denied') {
$time_reason = date('m/d/Y H:i');
$field_reason = $form_state['input']['field_reason'][$lang][0]['value'];
$node->field_reason['und'][]['value'] = $time_reason. ': ' .$field_reason;
//change status of send mail = 0
$node->field_check_send_mail[$lang][0]['value'] = 1; //e_denied
}
node_save($node);
$form_state['redirect'] = 'test-reports/director';
// Clear the page and block caches.
cache_clear_all();
}
/**
* check role for report
*/
function _plex_test_report_check(){
global $user;
$arr_role = $user->roles;
if(!empty($arr_role[5]) || !empty($arr_role[6]) || !empty($arr_role[7])){
return TRUE;
}else{
return FALSE;
}
}
function _plex_check_access_personnel(){
global $user;
return TRUE;
$arr_role = $user->roles;
$uid = $user->uid;
$node_info = node_load(arg(2));
$author = $node_info->uid;
$status = $node_info->field_reports_status['und'][0]['value'];
$status1 = $node_info->field_permission_report['und'][0]['value'];
if(!empty($arr_role[7]) && $status == 'pending' && $status1 == 0){
if($uid == $author){
return TRUE;
}else{
return FALSE;
}
}else{
return FALSE;
}
}
/**
* Generate PDF
*/
function test_report_generate_pdf($node,$uid){
//include_once('phpToPDF.php');
global $base_url;
$user_id = $node->uid;
$user_info = user_load($user_id);
$fullname = $node->field_patient_name[LANGUAGE_NONE][0]['value'];
$accession = $node->field_accession_number[LANGUAGE_NONE][0]['value'];
$user_info_from = user_load($uid);
$fromname = $user_info_from->field_last_name[LANGUAGE_NONE][0]['value'].' '.$user_info_from->field_first_name[LANGUAGE_NONE][0]['value'];
$from = $user_info_from->mail;
$phone_from = $user_info_from->field_phone[LANGUAGE_NONE][0]['value'];
$fullname = str_replace(' ', '-', $fullname);
$file_name = $fullname.'-'.$node->nid.'.pdf';
$password = substr($fullname,0,2);
if ($accession) {
$password .= substr($accession,-4, 4);
}
$folder = 'sites/default/files/private';
if (!file_exists($folder)) {
mkdir($folder);
}
$date_complete = date('m-d-Y H:i A',time());
//$html = test_reports_html_pdf($node->nid,$uid);
$html = theme('print_form_report', array('node' => $node,'date' => $date_complete,'base_url' => $base_url));
$path_html = '/sites/default/files/report-pdf/tmphtml/';
/*
$report_html = 'report_html.html';
$report_file = fopen(DRUPAL_ROOT.$path_html.$report_html, "w");
fwrite($report_file, $html);
fclose($report_file);
*/
$report_html = "report_html_".time().'.html';
$report_file = fopen(DRUPAL_ROOT.$path_html.$report_html, "w");
fwrite($report_file, $html);
fclose($report_file);
// Protect PDF
//local
$origFile = DRUPAL_ROOT.'/'.$folder.'/'.$file_name;
$destFile = DRUPAL_ROOT.'/'.$folder.'/'.'plex-'.$file_name;
//check if is gotpantheon.com
if (strpos($base_url, 'gotpantheon.com')) {
shell_exec('/srv/bin/wkhtmltopdf '.$base_url.$path_html.$report_html. ' '.DRUPAL_ROOT.'/'.$folder.'/'.$file_name);
shell_exec('cp '.$origFile.' '.$destFile);
} else {
shell_exec('/usr/local/bin/wkhtmltopdf -T 5 -B 5 -L 5 -R 5 '.$base_url.$path_html.$report_html. ' '.DRUPAL_ROOT.'/'.$folder.'/'.$file_name);
//--disable-smart-shrinking --dpi 96
//shell_exec('/usr/bin/wkhtmltopdf '.$base_url.'/sites/default/files/report-pdf/tmphtml/'.$report_html. ' '.DRUPAL_ROOT.'/'.$folder.'/'.$file_name.'.pdf');
//shell_exec('/usr/local/bin/pdftk '.$origFile.' cat output '.$destFile.' user_pw '. $password);
if (strpos($base_url, 'domain.com')) {
shell_exec('/usr/local/bin/pdftk '.$origFile.' cat output '.$destFile.' user_pw '. $password);
} else {
shell_exec('pdftk '.$origFile.' cat output '.$destFile.' user_pw '. $password);
}
unlink($folder.'/'.$file_name);
}
// Update field file
$path = 'private://'.'plex-'.$file_name;
$file = file_save((object)array(
'filename' => $file_name,
'uri' => $path,
'status' => FILE_STATUS_PERMANENT,
'filemime' => file_get_mimetype($path),
));
$node->field_pdf_security['und'][] = array(
'fid' => $file->fid,
'display' => 1,
'description' => '',
);
$url_pdf = 'system/files/'.'plex-'.$file_name;
node_save($node);
// Send mail approved to Supervisor
$query_user = db_select('users_roles','user');
$query_user->fields('user',array('uid'));
$query_user->condition('user.rid',5,'=');
$result = $query_user->execute()->fetchAll();
$count_id = count($result);
if($user_id != $uid){
for($i=0;$i<$count_id;$i++){
$to_id = $result[$i]->uid;
$to_user_info = user_load($to_id);
$to = $to_user_info->mail;
$to_firstname = $to_user_info->field_first_name[LANGUAGE_NONE][0]['value'];
$to_lastname = $to_user_info->field_last_name[LANGUAGE_NONE][0]['value'];
plex_report_email_pdf($from,$fromname,$to,$password,$url_pdf,$to_firstname,$to_lastname,$phone_from);
}
}
drupal_set_message(t("The test reports form has been signed out."),'status');
drupal_goto($base_url.'/test-reports/director');
}