trangunghoa
10/6/2017 - 3:54 PM

Export report

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');
}