diff options
author | Florian Pritz <bluewind@xinu.at> | 2011-09-11 16:00:22 +0200 |
---|---|---|
committer | Florian Pritz <bluewind@xinu.at> | 2011-09-11 18:12:36 +0200 |
commit | 3e99f93830d61be76205474bacc749e97d9e3ca5 (patch) | |
tree | d065b3e7e42f74e9038570a1d921ba3e883f9250 | |
parent | 599cf82ff710d01de97231e3fa73fff2b514708e (diff) |
add upload_history page
Signed-off-by: Florian Pritz <bluewind@xinu.at>
-rw-r--r-- | application/controllers/file.php | 48 | ||||
-rw-r--r-- | application/helpers/filebin_helper.php | 64 | ||||
-rw-r--r-- | application/views/file/upload_history.php | 26 | ||||
-rw-r--r-- | application/views/file_plaintext/upload_history.php | 17 | ||||
-rw-r--r-- | data/default.css | 30 |
5 files changed, 185 insertions, 0 deletions
diff --git a/application/controllers/file.php b/application/controllers/file.php index 13787eeb6..07bc56dd7 100644 --- a/application/controllers/file.php +++ b/application/controllers/file.php @@ -12,6 +12,7 @@ class File extends CI_Controller { function __construct() { parent::__construct(); + mb_internal_encoding('UTF-8'); $this->load->helper(array('form', 'filebin')); $this->load->model('file_mod'); $this->var->cli_client = false; @@ -94,6 +95,53 @@ class File extends CI_Controller { echo $this->config->item('upload_max_size'); } + function upload_history() + { + $password = $this->file_mod->get_password(); + + $this->load->library("MemcacheLibrary"); + if (! $cached = $this->memcachelibrary->get("history_".$this->var->view_dir."_".$password)) { + $data = array(); + $query = array(); + $lengths = array(); + $data['title'] = 'Upload history'; + + if ($password != "NULL") { + $query = $this->db->query(" + SELECT id, filename, mimetype, date, hash + FROM files + WHERE password = ? + ORDER BY date + ", array($password))->result_array(); + } + + foreach($query as $key => $item) { + $query[$key]["date"] = date("r", $item["date"]); + // Keep track of longest string to pad plaintext output correctly + foreach(array("id", "filename", "mimetype", "date", "hash") as $length_key) { + if (!isset($lengths[$length_key])) { + $lengths[$length_key] = 0; + } + $len = mb_strlen($query[$key][$length_key]); + if ($len > $lengths[$length_key]) { + $lengths[$length_key] = $len; + } + } + } + + $data["query"] = $query; + $data["lengths"] = $lengths; + + $cached = ""; + $cached .= $this->load->view($this->var->view_dir.'/header', $data, true); + $cached .= $this->load->view($this->var->view_dir.'/upload_history', $data, true); + $cached .= $this->load->view($this->var->view_dir.'/footer', $data, true); + $this->memcachelibrary->set('history_'.$this->var->view_dir."_".$password, $cached, 42); + } + + echo $cached; + } + // Allow users to delete IDs if their password matches the one used when uploading function delete() { diff --git a/application/helpers/filebin_helper.php b/application/helpers/filebin_helper.php index bb265d6e5..41960a3d6 100644 --- a/application/helpers/filebin_helper.php +++ b/application/helpers/filebin_helper.php @@ -106,4 +106,68 @@ function rangeDownload($file, $filename, $type) fclose($fp); } +function even_odd($reset = false) +{ + static $counter = 1; + + if ($reset) { + $counter = 1; + } + + if ($counter++%2 == 0) { + return 'even'; + } else { + return 'odd'; + } +} + +// Source: http://hu.php.net/manual/en/function.str-pad.php#71558 +// This is a multibyte enabled str_pad +function mb_str_pad($ps_input, $pn_pad_length, $ps_pad_string = " ", $pn_pad_type = STR_PAD_RIGHT, $ps_encoding = NULL) +{ + $ret = ""; + + if (is_null($ps_encoding)) + $ps_encoding = mb_internal_encoding(); + + $hn_length_of_padding = $pn_pad_length - mb_strlen($ps_input, $ps_encoding); + $hn_psLength = mb_strlen($ps_pad_string, $ps_encoding); // pad string length + + if ($hn_psLength <= 0 || $hn_length_of_padding <= 0) { + // Padding string equal to 0: + // + $ret = $ps_input; + } + else { + $hn_repeatCount = floor($hn_length_of_padding / $hn_psLength); // how many times repeat + + if ($pn_pad_type == STR_PAD_BOTH) { + $hs_lastStrLeft = ""; + $hs_lastStrRight = ""; + $hn_repeatCountLeft = $hn_repeatCountRight = ($hn_repeatCount - $hn_repeatCount % 2) / 2; + + $hs_lastStrLength = $hn_length_of_padding - 2 * $hn_repeatCountLeft * $hn_psLength; // the rest length to pad + $hs_lastStrLeftLength = $hs_lastStrRightLength = floor($hs_lastStrLength / 2); // the rest length divide to 2 parts + $hs_lastStrRightLength += $hs_lastStrLength % 2; // the last char add to right side + + $hs_lastStrLeft = mb_substr($ps_pad_string, 0, $hs_lastStrLeftLength, $ps_encoding); + $hs_lastStrRight = mb_substr($ps_pad_string, 0, $hs_lastStrRightLength, $ps_encoding); + + $ret = str_repeat($ps_pad_string, $hn_repeatCountLeft) . $hs_lastStrLeft; + $ret .= $ps_input; + $ret .= str_repeat($ps_pad_string, $hn_repeatCountRight) . $hs_lastStrRight; + } + else { + $hs_lastStr = mb_substr($ps_pad_string, 0, $hn_length_of_padding % $hn_psLength, $ps_encoding); // last part of pad string + + if ($pn_pad_type == STR_PAD_LEFT) + $ret = str_repeat($ps_pad_string, $hn_repeatCount) . $hs_lastStr . $ps_input; + else + $ret = $ps_input . str_repeat($ps_pad_string, $hn_repeatCount) . $hs_lastStr; + } + } + + return $ret; +} + # vim: set noet: diff --git a/application/views/file/upload_history.php b/application/views/file/upload_history.php new file mode 100644 index 000000000..5d61c7331 --- /dev/null +++ b/application/views/file/upload_history.php @@ -0,0 +1,26 @@ +<?php echo form_open('file/upload_history'); ?> + <p> + Password:<input type="password" name="password" size="10" /> + <input type="submit" value="Display" /> + </p> +</form> + +<table class="results"> +<tr> + <th>ID</th> + <th>Filename</th> + <th>Mimetype + <th>Date</th> + <th>Hash</th> +</tr> + +<?php foreach($query as $key => $item): ?> +<tr class="<?php echo even_odd(); ?>"> + <td><a href="<?php echo site_url("/".$item["id"]); ?>/"><?php echo $item["id"]; ?></a></td> + <td><?php echo $item["filename"]; ?></td> + <td><?php echo $item["mimetype"]; ?></td> + <td><?php echo $item["date"]; ?></td> + <td><?php echo $item["hash"]; ?></td> +</tr> +<?php endforeach; ?> +</table> diff --git a/application/views/file_plaintext/upload_history.php b/application/views/file_plaintext/upload_history.php new file mode 100644 index 000000000..e03311464 --- /dev/null +++ b/application/views/file_plaintext/upload_history.php @@ -0,0 +1,17 @@ +<?php +echo + mb_str_pad("ID", $lengths["id"])." | " + .mb_str_pad("Filename", $lengths["filename"])." | " + .mb_str_pad("Mimetype", $lengths["mimetype"])." | " + .mb_str_pad("Date", $lengths["date"])." | " + .mb_str_pad("Hash", $lengths["hash"])."\n"; + +foreach($query as $key => $item) { + echo + mb_str_pad($item["id"], $lengths["id"])." | " + .mb_str_pad($item["filename"], $lengths["filename"])." | " + .mb_str_pad($item["mimetype"], $lengths["mimetype"])." | " + .$item["date"]." | " + .$item["hash"]."\n"; +} + diff --git a/data/default.css b/data/default.css index 70738227b..2f1340731 100644 --- a/data/default.css +++ b/data/default.css @@ -48,3 +48,33 @@ body { padding-top:13px; } +table { + border-collapse: collapse; +} + +.results { + font-size: 0.75em; +} + +.results th { + padding: 0.5em 1em 0.25em 0.25em; + background: #fff; + border-bottom: 1px solid #999; + text-align: left; +} + +.results td { + padding: 0.3em 1em 0.3em 0.25em; +} + +.results tr:hover { + background: #ddf; +} + +tr.even { + background: #eef; +} + +tr.odd { + background: #fff; +} |