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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user