/**
 *  Recursively construct the proper HTML
 *  for representing a folder full of items
 *
 *  @param array $dirs       array of directory objects to process
 *  @param array $path_array path components in array form
 *  @param array $item_info  metadata about each item
 *
 *  @return void
 *
 *  @author Ken Auberry <*****@*****.**>
 */
function build_folder_structure(&$dirs, $path_array, $item_info)
{
    if (count($path_array) > 1) {
        if (!isset($dirs['folders'][$path_array[0]])) {
            $dirs['folders'][$path_array[0]] = array();
        }
        build_folder_structure($dirs['folders'][$path_array[0]], array_splice($path_array, 1), $item_info);
    } else {
        $size_string = format_bytes($item_info['size']);
        $item_id = $item_info['item_id'];
        $url = base_url() . "myemsl/itemauth/{$item_id}";
        $item_info['url'] = $url;
        $item_info_json = json_encode($item_info);
        $dirs['files'][$item_id] = "<a class='item_link' id='item_{$item_id}' href='#'>{$path_array[0]}</a> <span class='fineprint'>[size: {$size_string}]</span><span class='item_data_json' id='item_id_{$item_id}' style='display:none;'>{$item_info_json}</span>";
    }
}
 /**
  *  Return the list of files and their associated metadata
  *  for a given transaction id
  *
  *  @param integer $transaction_id The transaction to pull
  *
  *  @return [type]   [description]
  *
  *  @author Ken Auberry <*****@*****.**>
  */
 public function get_files_for_transaction($transaction_id)
 {
     $DB_metadata = $this->load->database('default', TRUE);
     $file_select_array = array('f.item_id', 'f.name', 'f.subdir', "DATE_TRUNC('second',t.stime) AT TIME ZONE 'US/Pacific' as stime", 'f.mtime as modified_time', 'f.ctime as created_time', 'f.transaction', 'f.size');
     $DB_metadata->trans_start();
     $DB_metadata->query("set local timezone to '{$this->local_timezone}';");
     $DB_metadata->select($file_select_array)->from('transactions t')->join('files f', 't.transaction = f.transaction');
     $DB_metadata->where('f.transaction', $transaction_id);
     $DB_metadata->order_by('f.subdir, f.name');
     $files_query = $DB_metadata->get();
     $DB_metadata->trans_complete();
     $files_list = array();
     if ($files_query && $files_query->num_rows() > 0) {
         foreach ($files_query->result_array() as $row) {
             $files_list[$row['item_id']] = $row;
         }
         $file_tree = array();
         $dirs = array();
         foreach ($files_list as $item_id => $item_info) {
             $subdir = preg_replace('|^proposal\\s[^/]+/[^/]+/\\d{4}\\.\\d{1,2}\\.\\d{1,2}/?|i', '', $item_info['subdir']);
             $filename = $item_info['name'];
             $path = !empty($subdir) ? "{$subdir}/{$filename}" : $filename;
             $path_array = explode('/', $path);
             build_folder_structure($dirs, $path_array, $item_info);
         }
         return array('treelist' => $dirs, 'files' => $files_list);
     }
 }