summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Pritz <bluewind@xinu.at>2011-09-11 16:00:22 +0200
committerFlorian Pritz <bluewind@xinu.at>2011-09-11 18:12:36 +0200
commit3e99f93830d61be76205474bacc749e97d9e3ca5 (patch)
treed065b3e7e42f74e9038570a1d921ba3e883f9250
parent599cf82ff710d01de97231e3fa73fff2b514708e (diff)
add upload_history page
Signed-off-by: Florian Pritz <bluewind@xinu.at>
-rw-r--r--application/controllers/file.php48
-rw-r--r--application/helpers/filebin_helper.php64
-rw-r--r--application/views/file/upload_history.php26
-rw-r--r--application/views/file_plaintext/upload_history.php17
-rw-r--r--data/default.css30
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;
+}