/** * 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); } }