forked from Public/pics
Uploading of new photos now fully working.
This commit is contained in:
parent
77a9cd5d53
commit
790d5fc5d0
@ -14,45 +14,44 @@ class UploadMedia extends HTMLController
|
|||||||
if (!Registry::get('user')->isAdmin())
|
if (!Registry::get('user')->isAdmin())
|
||||||
throw new NotAllowedException();
|
throw new NotAllowedException();
|
||||||
|
|
||||||
$page = new MediaUploader();
|
if (!isset($_REQUEST['tag']))
|
||||||
parent::__construct('Upload new media - ' . SITE_TITLE);
|
throw new UserFacingException('No album tag provided.');
|
||||||
|
|
||||||
|
$tag = Tag::fromId($_REQUEST['tag']);
|
||||||
|
|
||||||
|
$page = new MediaUploader($tag);
|
||||||
|
parent::__construct('Upload new photos - ' . SITE_TITLE);
|
||||||
$this->page->adopt($page);
|
$this->page->adopt($page);
|
||||||
|
|
||||||
// Are we saving something?
|
// Are we saving something?
|
||||||
if (isset($_POST['save']))
|
if (!empty($_FILES['uploads']))
|
||||||
{
|
{
|
||||||
if (empty($_FILES) || empty($_FILES['new_asset']))
|
$files = isset($_FILES['uploads'][0]) ? $_FILES['uploads'] : [$_FILES['uploads']];
|
||||||
return;
|
$new_ids = [];
|
||||||
|
foreach ($files as $num => $uploaded_file)
|
||||||
// Any tags?
|
|
||||||
$new_tags = [];
|
|
||||||
if (isset($_POST['tag']) && is_array($_POST['tag']))
|
|
||||||
{
|
|
||||||
foreach ($_POST['tag'] as $id_tag => $bool)
|
|
||||||
if (is_numeric($id_tag))
|
|
||||||
$new_tags[] = $id_tag;
|
|
||||||
}
|
|
||||||
|
|
||||||
var_dump($_FILES);
|
|
||||||
var_dump($_POST);
|
|
||||||
|
|
||||||
foreach ($_FILES['new_asset']['tmp_name'] as $num => $uploaded_file)
|
|
||||||
{
|
{
|
||||||
if (empty($uploaded_file))
|
if (empty($uploaded_file))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
$asset = Asset::createNew([
|
$asset = Asset::createNew([
|
||||||
'filename_to_copy' => $uploaded_file,
|
'filename_to_copy' => $uploaded_file['tmp_name'],
|
||||||
'preferred_filename' => $_FILES['new_asset']['name'][$num],
|
'preferred_filename' => $uploaded_file['name'],
|
||||||
'title' => !empty($_POST['title'][$num]) ? $_POST['title'][$num] : null,
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$asset->linkTags($new_tags);
|
$new_ids[] = $asset->getId();
|
||||||
|
$asset->linkTags([$tag->id_tag]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prevent uploading twice.
|
if (isset($_REQUEST['format']) && $_REQUEST['format'] === 'json')
|
||||||
header('Location: ' . BASEURL . '/uploadmedia/');
|
{
|
||||||
exit;
|
echo json_encode(['success' => true, 'new_ids' => $new_ids]);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
header('Location: ' . BASEURL . '/uploadmedia/');
|
||||||
|
exit;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -194,7 +194,7 @@ class Asset
|
|||||||
unset($image);
|
unset($image);
|
||||||
|
|
||||||
$exif = EXIF::fromFile($destination);
|
$exif = EXIF::fromFile($destination);
|
||||||
$date_captured = intval($exif->created_timestamp);
|
$date_captured = $exif->created_timestamp > 0 ? $exif->created_timestamp : time();
|
||||||
}
|
}
|
||||||
|
|
||||||
$db = Registry::get('db');
|
$db = Registry::get('db');
|
||||||
|
@ -694,6 +694,9 @@ a#previous_photo:hover, a#next_photo:hover {
|
|||||||
height: 5px;
|
height: 5px;
|
||||||
width: 0%;
|
width: 0%;
|
||||||
}
|
}
|
||||||
|
#upload_preview_area .progress .error {
|
||||||
|
background: #b22;
|
||||||
|
}
|
||||||
|
|
||||||
/* Spinner animation
|
/* Spinner animation
|
||||||
----------------------*/
|
----------------------*/
|
||||||
|
@ -2,6 +2,7 @@ function UploadQueue(options) {
|
|||||||
this.queue = options.queue_element;
|
this.queue = options.queue_element;
|
||||||
this.preview_area = options.preview_area;
|
this.preview_area = options.preview_area;
|
||||||
this.upload_progress = [];
|
this.upload_progress = [];
|
||||||
|
this.upload_url = options.upload_url;
|
||||||
this.submit = options.submit_button;
|
this.submit = options.submit_button;
|
||||||
this.addEvents();
|
this.addEvents();
|
||||||
}
|
}
|
||||||
@ -69,13 +70,45 @@ UploadQueue.prototype.process = function() {
|
|||||||
var files = this.queue.files;
|
var files = this.queue.files;
|
||||||
for (var i = 0; i < files.length; i++) {
|
for (var i = 0; i < files.length; i++) {
|
||||||
this.setSpinnerLabel("Uploading file " + (i + 1) + " out of " + files.length);
|
this.setSpinnerLabel("Uploading file " + (i + 1) + " out of " + files.length);
|
||||||
this.updateProgress(i, 0.5);
|
|
||||||
var callback = (i !== files.length - 1) ? null : function() {
|
var callback = (i !== files.length - 1) ? null : function() {
|
||||||
this.hideSpinner();
|
this.hideSpinner();
|
||||||
};
|
};
|
||||||
|
this.sendFile(files[i], i, callback);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
UploadQueue.prototype.sendFile = function(file, index, callback) {
|
||||||
|
// Prepare the request.
|
||||||
|
var that = this;
|
||||||
|
var request = new XMLHttpRequest();
|
||||||
|
request.addEventListener('error', function(event) {
|
||||||
|
that.updateProgress(index, -1);
|
||||||
|
});
|
||||||
|
request.addEventListener('progress', function(event) {
|
||||||
|
that.updateProgress(index, event.loaded / event.total);
|
||||||
|
});
|
||||||
|
request.addEventListener('load', function(event) {
|
||||||
|
that.updateProgress(index, 1);
|
||||||
|
if (request.responseText !== null && request.status === 200) {
|
||||||
|
var obj = JSON.parse(request.responseText);
|
||||||
|
if (obj.error) {
|
||||||
|
alert(obj.error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (callback) {
|
||||||
|
callback.call(that, obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var data = new FormData();
|
||||||
|
data.append('uploads', file, file.name);
|
||||||
|
|
||||||
|
request.open('POST', this.upload_url, true);
|
||||||
|
request.send(data);
|
||||||
|
};
|
||||||
|
|
||||||
UploadQueue.prototype.addProgressBar = function(index) {
|
UploadQueue.prototype.addProgressBar = function(index) {
|
||||||
if (index in this.upload_progress) {
|
if (index in this.upload_progress) {
|
||||||
return;
|
return;
|
||||||
@ -99,7 +132,15 @@ UploadQueue.prototype.updateProgress = function(index, progress) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var bar = this.upload_progress[index];
|
var bar = this.upload_progress[index];
|
||||||
bar.style.width = Math.ceil(progress * 100) + '%';
|
|
||||||
|
if (progress >= 0) {
|
||||||
|
bar.style.width = Math.ceil(progress * 100) + '%';
|
||||||
|
} else {
|
||||||
|
bar.style.width = "";
|
||||||
|
if (progress === -1) {
|
||||||
|
bar.className = "error";
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
UploadQueue.prototype.showSpinner = function(sibling, label) {
|
UploadQueue.prototype.showSpinner = function(sibling, label) {
|
||||||
|
@ -8,11 +8,16 @@
|
|||||||
|
|
||||||
class MediaUploader extends SubTemplate
|
class MediaUploader extends SubTemplate
|
||||||
{
|
{
|
||||||
|
public function __construct(Tag $tag)
|
||||||
|
{
|
||||||
|
$this->tag = $tag;
|
||||||
|
}
|
||||||
|
|
||||||
protected function html_content()
|
protected function html_content()
|
||||||
{
|
{
|
||||||
echo '
|
echo '
|
||||||
<form action="" class="admin_box" method="post" enctype="multipart/form-data">
|
<form action="', BASEURL, '/uploadmedia/?tag=', $this->tag->id_tag, '" class="admin_box" method="post" enctype="multipart/form-data">
|
||||||
<h2>Upload new photos</h2>
|
<h2>Upload new photos to "', $this->tag->tag, '"</h2>
|
||||||
<div>
|
<div>
|
||||||
<h3>Select files</h3>
|
<h3>Select files</h3>
|
||||||
<input type="file" id="upload_queue" name="uploads[]" multiple>
|
<input type="file" id="upload_queue" name="uploads[]" multiple>
|
||||||
@ -29,7 +34,8 @@ class MediaUploader extends SubTemplate
|
|||||||
var upload_queue = new UploadQueue({
|
var upload_queue = new UploadQueue({
|
||||||
queue_element: document.getElementById("upload_queue"),
|
queue_element: document.getElementById("upload_queue"),
|
||||||
preview_area: document.getElementById("upload_preview_area"),
|
preview_area: document.getElementById("upload_preview_area"),
|
||||||
submit_button: document.querySelector("input[type=submit]")
|
submit_button: document.querySelector("input[type=submit]"),
|
||||||
|
upload_url: "', BASEURL, '/uploadmedia/?format=json&tag=', $this->tag->id_tag, '"
|
||||||
});
|
});
|
||||||
}, 100);
|
}, 100);
|
||||||
</script>';
|
</script>';
|
||||||
|
Loading…
Reference in New Issue
Block a user