From 70bcfb5b861894ecfc5df386921586e3b2ff2555 Mon Sep 17 00:00:00 2001
From: plegall
Date: Tue, 27 May 2014 14:11:23 +0000
Subject: [PATCH] feature 2616: HTML5 upload (with plupload 2.1.2). First basic
implementation. Needs customization.
Chunked upload + Drag & drop (no more Flash)
use a new specific API method pwg.images.upload
git-svn-id: http://piwigo.org/svn/trunk@28545 68402e56-0260-453c-a942-63ccdbb3a9ee
---
.../default/template/photos_add_direct.tpl | 243 +-
admin/themes/default/theme.css | 7 +-
include/ws_functions/pwg.images.php | 140 +
themes/default/js/plugins/plupload/Moxie.swf | Bin 0 -> 29349 bytes
themes/default/js/plugins/plupload/Moxie.xap | Bin 0 -> 62643 bytes
themes/default/js/plugins/plupload/i18n/ar.js | 2 +
themes/default/js/plugins/plupload/i18n/az.js | 2 +
themes/default/js/plugins/plupload/i18n/bs.js | 2 +
themes/default/js/plugins/plupload/i18n/cs.js | 2 +
themes/default/js/plugins/plupload/i18n/cy.js | 2 +
themes/default/js/plugins/plupload/i18n/da.js | 2 +
themes/default/js/plugins/plupload/i18n/de.js | 2 +
themes/default/js/plugins/plupload/i18n/el.js | 2 +
themes/default/js/plugins/plupload/i18n/en.js | 2 +
themes/default/js/plugins/plupload/i18n/es.js | 2 +
themes/default/js/plugins/plupload/i18n/et.js | 2 +
themes/default/js/plugins/plupload/i18n/fa.js | 2 +
themes/default/js/plugins/plupload/i18n/fi.js | 2 +
themes/default/js/plugins/plupload/i18n/fr.js | 2 +
themes/default/js/plugins/plupload/i18n/he.js | 2 +
themes/default/js/plugins/plupload/i18n/hr.js | 2 +
themes/default/js/plugins/plupload/i18n/hu.js | 2 +
themes/default/js/plugins/plupload/i18n/hy.js | 2 +
themes/default/js/plugins/plupload/i18n/id.js | 2 +
themes/default/js/plugins/plupload/i18n/it.js | 2 +
themes/default/js/plugins/plupload/i18n/ja.js | 2 +
themes/default/js/plugins/plupload/i18n/ka.js | 2 +
themes/default/js/plugins/plupload/i18n/kk.js | 2 +
themes/default/js/plugins/plupload/i18n/km.js | 2 +
themes/default/js/plugins/plupload/i18n/ko.js | 2 +
themes/default/js/plugins/plupload/i18n/lt.js | 2 +
themes/default/js/plugins/plupload/i18n/lv.js | 2 +
themes/default/js/plugins/plupload/i18n/mn.js | 2 +
themes/default/js/plugins/plupload/i18n/ms.js | 2 +
themes/default/js/plugins/plupload/i18n/nl.js | 2 +
themes/default/js/plugins/plupload/i18n/pl.js | 2 +
.../default/js/plugins/plupload/i18n/pt_BR.js | 2 +
themes/default/js/plugins/plupload/i18n/ro.js | 2 +
themes/default/js/plugins/plupload/i18n/ru.js | 2 +
themes/default/js/plugins/plupload/i18n/sk.js | 2 +
themes/default/js/plugins/plupload/i18n/sq.js | 2 +
themes/default/js/plugins/plupload/i18n/sr.js | 2 +
.../default/js/plugins/plupload/i18n/sr_RS.js | 2 +
themes/default/js/plugins/plupload/i18n/sv.js | 2 +
.../default/js/plugins/plupload/i18n/th_TH.js | 2 +
themes/default/js/plugins/plupload/i18n/tr.js | 2 +
.../default/js/plugins/plupload/i18n/uk_UA.js | 2 +
.../default/js/plugins/plupload/i18n/zh_CN.js | 2 +
.../default/js/plugins/plupload/i18n/zh_TW.js | 2 +
.../css/jquery.plupload.queue.css | 185 +
.../jquery.plupload.queue/img/backgrounds.gif | Bin 0 -> 2977 bytes
.../img/buttons-disabled.png | Bin 0 -> 1292 bytes
.../jquery.plupload.queue/img/buttons.png | Bin 0 -> 1439 bytes
.../jquery.plupload.queue/img/delete.gif | Bin 0 -> 180 bytes
.../jquery.plupload.queue/img/done.gif | Bin 0 -> 1024 bytes
.../jquery.plupload.queue/img/error.gif | Bin 0 -> 994 bytes
.../jquery.plupload.queue/img/throbber.gif | Bin 0 -> 1922 bytes
.../jquery.plupload.queue/img/transp50.png | Bin 0 -> 399 bytes
.../jquery.plupload.queue.js | 428 +
.../jquery.plupload.queue.min.js | 1 +
.../css/jquery.ui.plupload.css | 371 +
.../css/jquery.ui.plupload.css.orig | 370 +
.../jquery.ui.plupload/img/loading.gif | Bin 0 -> 4023 bytes
.../jquery.ui.plupload/img/plupload.png | Bin 0 -> 6597 bytes
.../jquery.ui.plupload/jquery.ui.plupload.js | 1323 ++
.../jquery.ui.plupload.min.js | 1 +
themes/default/js/plugins/plupload/moxie.js | 10726 ++++++++++++++++
.../default/js/plugins/plupload/moxie.min.js | 15 +
.../js/plugins/plupload/plupload.dev.js | 2315 ++++
.../js/plugins/plupload/plupload.full.min.js | 28 +
.../js/plugins/plupload/plupload.min.js | 13 +
ws.php | 24 +
72 files changed, 16110 insertions(+), 168 deletions(-)
create mode 100644 themes/default/js/plugins/plupload/Moxie.swf
create mode 100644 themes/default/js/plugins/plupload/Moxie.xap
create mode 100644 themes/default/js/plugins/plupload/i18n/ar.js
create mode 100644 themes/default/js/plugins/plupload/i18n/az.js
create mode 100644 themes/default/js/plugins/plupload/i18n/bs.js
create mode 100644 themes/default/js/plugins/plupload/i18n/cs.js
create mode 100644 themes/default/js/plugins/plupload/i18n/cy.js
create mode 100644 themes/default/js/plugins/plupload/i18n/da.js
create mode 100644 themes/default/js/plugins/plupload/i18n/de.js
create mode 100644 themes/default/js/plugins/plupload/i18n/el.js
create mode 100644 themes/default/js/plugins/plupload/i18n/en.js
create mode 100644 themes/default/js/plugins/plupload/i18n/es.js
create mode 100644 themes/default/js/plugins/plupload/i18n/et.js
create mode 100644 themes/default/js/plugins/plupload/i18n/fa.js
create mode 100644 themes/default/js/plugins/plupload/i18n/fi.js
create mode 100644 themes/default/js/plugins/plupload/i18n/fr.js
create mode 100644 themes/default/js/plugins/plupload/i18n/he.js
create mode 100644 themes/default/js/plugins/plupload/i18n/hr.js
create mode 100644 themes/default/js/plugins/plupload/i18n/hu.js
create mode 100644 themes/default/js/plugins/plupload/i18n/hy.js
create mode 100644 themes/default/js/plugins/plupload/i18n/id.js
create mode 100644 themes/default/js/plugins/plupload/i18n/it.js
create mode 100644 themes/default/js/plugins/plupload/i18n/ja.js
create mode 100644 themes/default/js/plugins/plupload/i18n/ka.js
create mode 100644 themes/default/js/plugins/plupload/i18n/kk.js
create mode 100644 themes/default/js/plugins/plupload/i18n/km.js
create mode 100644 themes/default/js/plugins/plupload/i18n/ko.js
create mode 100644 themes/default/js/plugins/plupload/i18n/lt.js
create mode 100644 themes/default/js/plugins/plupload/i18n/lv.js
create mode 100644 themes/default/js/plugins/plupload/i18n/mn.js
create mode 100644 themes/default/js/plugins/plupload/i18n/ms.js
create mode 100644 themes/default/js/plugins/plupload/i18n/nl.js
create mode 100644 themes/default/js/plugins/plupload/i18n/pl.js
create mode 100644 themes/default/js/plugins/plupload/i18n/pt_BR.js
create mode 100644 themes/default/js/plugins/plupload/i18n/ro.js
create mode 100644 themes/default/js/plugins/plupload/i18n/ru.js
create mode 100644 themes/default/js/plugins/plupload/i18n/sk.js
create mode 100644 themes/default/js/plugins/plupload/i18n/sq.js
create mode 100644 themes/default/js/plugins/plupload/i18n/sr.js
create mode 100644 themes/default/js/plugins/plupload/i18n/sr_RS.js
create mode 100644 themes/default/js/plugins/plupload/i18n/sv.js
create mode 100644 themes/default/js/plugins/plupload/i18n/th_TH.js
create mode 100644 themes/default/js/plugins/plupload/i18n/tr.js
create mode 100644 themes/default/js/plugins/plupload/i18n/uk_UA.js
create mode 100644 themes/default/js/plugins/plupload/i18n/zh_CN.js
create mode 100644 themes/default/js/plugins/plupload/i18n/zh_TW.js
create mode 100644 themes/default/js/plugins/plupload/jquery.plupload.queue/css/jquery.plupload.queue.css
create mode 100644 themes/default/js/plugins/plupload/jquery.plupload.queue/img/backgrounds.gif
create mode 100644 themes/default/js/plugins/plupload/jquery.plupload.queue/img/buttons-disabled.png
create mode 100644 themes/default/js/plugins/plupload/jquery.plupload.queue/img/buttons.png
create mode 100644 themes/default/js/plugins/plupload/jquery.plupload.queue/img/delete.gif
create mode 100644 themes/default/js/plugins/plupload/jquery.plupload.queue/img/done.gif
create mode 100644 themes/default/js/plugins/plupload/jquery.plupload.queue/img/error.gif
create mode 100644 themes/default/js/plugins/plupload/jquery.plupload.queue/img/throbber.gif
create mode 100644 themes/default/js/plugins/plupload/jquery.plupload.queue/img/transp50.png
create mode 100644 themes/default/js/plugins/plupload/jquery.plupload.queue/jquery.plupload.queue.js
create mode 100644 themes/default/js/plugins/plupload/jquery.plupload.queue/jquery.plupload.queue.min.js
create mode 100644 themes/default/js/plugins/plupload/jquery.ui.plupload/css/jquery.ui.plupload.css
create mode 100644 themes/default/js/plugins/plupload/jquery.ui.plupload/css/jquery.ui.plupload.css.orig
create mode 100644 themes/default/js/plugins/plupload/jquery.ui.plupload/img/loading.gif
create mode 100644 themes/default/js/plugins/plupload/jquery.ui.plupload/img/plupload.png
create mode 100644 themes/default/js/plugins/plupload/jquery.ui.plupload/jquery.ui.plupload.js
create mode 100644 themes/default/js/plugins/plupload/jquery.ui.plupload/jquery.ui.plupload.min.js
create mode 100644 themes/default/js/plugins/plupload/moxie.js
create mode 100644 themes/default/js/plugins/plupload/moxie.min.js
create mode 100644 themes/default/js/plugins/plupload/plupload.dev.js
create mode 100644 themes/default/js/plugins/plupload/plupload.full.min.js
create mode 100644 themes/default/js/plugins/plupload/plupload.min.js
diff --git a/admin/themes/default/template/photos_add_direct.tpl b/admin/themes/default/template/photos_add_direct.tpl
index df87e4d87..b5b471fb9 100644
--- a/admin/themes/default/template/photos_add_direct.tpl
+++ b/admin/themes/default/template/photos_add_direct.tpl
@@ -1,10 +1,10 @@
-{if $upload_mode eq 'multiple'}
-{combine_script id='jquery.jgrowl' load='footer' require='jquery' path='themes/default/js/plugins/jquery.jgrowl_minimized.js' }
-{combine_script id='jquery.uploadify' load='footer' require='jquery' path='admin/include/uploadify/jquery.uploadify.v3.0.0.min.js' }
+{combine_script id='jquery.jgrowl' load='footer' require='jquery' path='themes/default/js/plugins/jquery.jgrowl_minimized.js'}
+{combine_script id='jquery.plupload' load='footer' require='jquery' path='themes/default/js/plugins/plupload/plupload.full.min.js'}
+{combine_script id='jquery.plupload.queue' load='footer' require='jquery' path='themes/default/js/plugins/plupload/jquery.plupload.queue/jquery.plupload.queue.min.js'}
{combine_script id='jquery.ui.progressbar' load='footer'}
+
{combine_css path="themes/default/js/plugins/jquery.jgrowl.css"}
-{combine_css path="admin/include/uploadify/uploadify.css"}
-{/if}
+{combine_css path="themes/default/js/plugins/plupload/jquery.plupload.queue/css/jquery.plupload.queue.css"}
{include file='include/colorbox.inc.tpl'}
{include file='include/add_album.inc.tpl'}
@@ -35,6 +35,12 @@ categoriesCache.selectize(jQuery('[data-selectize=categories]'), {
jQuery('[data-add-album]').pwgAddAlbum({ cache: categoriesCache });
+var uploadify_path = '{$uploadify_path}';
+var upload_id = '{$upload_id}';
+var session_id = '{$session_id}';
+var pwg_token = '{$pwg_token}';
+var buttonText = "{'Select files'|@translate}";
+var sizeLimit = Math.round({$upload_max_filesize} / 1024); /* in KBytes */
{literal}
jQuery(document).ready(function(){
@@ -112,137 +118,73 @@ jQuery(document).ready(function(){
return false;
});
-{/literal}
-{if $upload_mode eq 'html'}
-{literal}
- function addUploadBox() {
- var uploadBox = '';
- jQuery(uploadBox).appendTo("#uploadBoxes");
- }
+ jQuery("#uploader").pluploadQueue({
+ // General settings
+ // runtimes : 'html5,flash,silverlight,html4',
+ runtimes : 'html5',
- addUploadBox();
+ // url : '../upload.php',
+ url : 'ws.php?method=pwg.images.upload&format=json',
- jQuery("#addUploadBox A").click(function () {
- addUploadBox();
- });
+ // User can upload no more then 20 files in one go (sets multiple_queues to false)
+ max_file_count: 100,
+
+ chunk_size: '500kb',
+
+ filters : {
+ // Maximum file size
+ max_file_size : '1000mb',
+ // Specify what files to browse for
+ mime_types: [
+ {title : "Image files", extensions : "jpeg,jpg,gif,png"},
+ {title : "Zip files", extensions : "zip"}
+ ]
+ },
- jQuery("#uploadForm").submit(function() {
- return checkUploadStart();
- });
-{/literal}
-{elseif $upload_mode eq 'multiple'}
+ // Rename files by clicking on their titles
+ // rename: true,
+
+ // Sort files
+ sortable: true,
-var uploadify_path = '{$uploadify_path}';
-var upload_id = '{$upload_id}';
-var session_id = '{$session_id}';
-var pwg_token = '{$pwg_token}';
-var buttonText = "{'Select files'|@translate}";
-var sizeLimit = Math.round({$upload_max_filesize} / 1024); /* in KBytes */
+ // Enable ability to drag'n'drop files onto the widget (currently only HTML5 supports that)
+ dragdrop: true,
-{literal}
- jQuery("#uploadify").uploadify({
- 'uploader' : uploadify_path + '/uploadify.php',
- 'langFile' : uploadify_path + '/uploadifyLang_en.js',
- 'swf' : uploadify_path + '/uploadify.swf',
- 'checkExisting' : false,
+ init : {
+ BeforeUpload: function(up, file) {
+ console.log('[BeforeUpload]', file);
- buttonCursor : 'pointer',
- 'buttonText' : buttonText,
- 'width' : 300,
- 'cancelImage' : uploadify_path + '/cancel.png',
- 'queueID' : 'fileQueue',
- 'auto' : false,
- 'multi' : true,
- 'fileTypeDesc' : 'Photo files',
- 'fileTypeExts' : '*.jpg;*.JPG;*.jpeg;*.JPEG;*.png;*.PNG;*.gif;*.GIF;{/literal}{if $tif_enabled}*.tif;*.TIF;*.tiff;*.TIFF{/if}{literal}',
- 'fileSizeLimit' : sizeLimit,
- 'progressData' : 'percentage',
- requeueErrors : false,
- 'onSelect' : function(event,ID,fileObj) {
- jQuery("#fileQueue").show();
- },
- 'onQueueComplete' : function(stats) {
- jQuery("input[name=submit_upload]").click();
- },
- onUploadError: function (file,errorCode,errorMsg,errorString,swfuploadifyQueue) {
- /* uploadify calls the onUploadError trigger when the user cancels a file! */
- /* There no error so we skip it to avoid panic. */
- if ("Cancelled" == errorString) {
- return false;
+ // You can override settings before the file is uploaded
+ // up.setOption('url', 'upload.php?id=' + file.id);
+ up.setOption(
+ 'multipart_params',
+ {
+ category : jQuery("select[name=category] option:selected").val(),
+ level : jQuery("select[name=level] option:selected").val(),
+ pwg_token : pwg_token
+ // name : file.name
+ }
+ );
+ },
+
+ FileUploaded: function(up, file, info) {
+ // Called when file has finished uploading
+ console.log('[FileUploaded] File:', file, "Info:", info);
+
+ var data = jQuery.parseJSON(info.response);
+
+ jQuery("#uploadedPhotos").parent("fieldset").show();
+
+ html = '';
+ html += '
';
+ html += ' ';
+
+ jQuery("#uploadedPhotos").prepend(html);
}
-
- var msg = file.name+', '+errorString;
-
- /* Let's put the error message in the form to display once the form is */
- /* performed, it makes support easier when user can copy/paste the error */
- /* thrown. */
- jQuery("#uploadForm").append('');
-
- jQuery.jGrowl(
- 'onUploadError '+msg,
- {
- theme: 'error',
- header: 'ERROR',
- life: 4000,
- sticky: false
- }
- );
-
- return false;
- },
- onUploadSuccess: function (file,data,response) {
- var data = jQuery.parseJSON(data);
- jQuery("#uploadedPhotos").parent("fieldset").show();
-
- /* Let's display the thumbnail of the uploaded photo, no need to wait the */
- /* end of the queue */
- jQuery("#uploadedPhotos").prepend('
');
- },
- onUploadComplete: function(file,swfuploadifyQueue) {
- var max = parseInt(jQuery("#progressMax").text());
- var next = parseInt(jQuery("#progressCurrent").text())+1;
- var addToProgressBar = 2;
- if (next <= max) {
- jQuery("#progressCurrent").text(next);
- }
- else {
- addToProgressBar = 1;
- }
-
- jQuery("#progressbar").progressbar({
- value: jQuery("#progressbar").progressbar("option", "value") + addToProgressBar
- });
}
- });
-
- jQuery("input[type=button]").click(function() {
- if (!checkUploadStart()) {
- return false;
- }
-
- jQuery("#uploadify").uploadifySettings(
- 'postData',
- {
- 'category_id' : jQuery("select[name=category]").val(),
- 'level' : jQuery("select[name=level] option:selected").val(),
- 'upload_id' : upload_id,
- 'session_id' : session_id,
- 'pwg_token' : pwg_token
- }
- );
-
- nb_files = jQuery(".uploadifyQueueItem").size();
- jQuery("#progressMax").text(nb_files);
- jQuery("#progressbar").progressbar({max: nb_files*2, value:1});
- jQuery("#progressCurrent").text(1);
-
- jQuery("#uploadProgress").show();
-
- jQuery("#uploadify").uploadifyUpload();
- });
+ });
{/literal}
-{/if}
});
{/footer_script}
@@ -313,6 +255,16 @@ var sizeLimit = Math.round({$upload_max_filesize} / 1024); /* in KBytes */
{'create a new album'|@translate}
+ {'Manage Permissions'|@translate}
+
+
+
+
+
Your browser doesn't have Flash, Silverlight or HTML5 support.
+
-{if $upload_mode eq 'html'}
-
-
-
- {'You are using the Browser uploader. Try the Flash uploader instead.'|@translate:$switch_url}
-
-{elseif $upload_mode eq 'multiple'}
- You've got a problem with your JavaScript
-
-
-
- {'You are using the Flash uploader. Problems? Try the Browser uploader instead.'|@translate:$switch_url}
-
-{/if}
- {'Manage Permissions'|@translate}
-
-
-
-{if $upload_mode eq 'html'}
-
-
-
-{elseif $upload_mode eq 'multiple'}
-
-
-
-
-{/if}
diff --git a/admin/themes/default/theme.css b/admin/themes/default/theme.css
index 65025eef6..88928807f 100644
--- a/admin/themes/default/theme.css
+++ b/admin/themes/default/theme.css
@@ -574,11 +574,6 @@ img.ui-datepicker-trigger {
text-align:left;
}
-#photosAddContent FIELDSET {
- width:650px;
- margin:0 auto 20px auto;
-}
-
#photosAddContent P {
margin:0;
}
@@ -998,7 +993,7 @@ p#uploadWarningsSummary .showInfo {margin-left:3px;}
p#uploadWarnings {display:none;text-align:left;margin-bottom:1em;font-size:90%;color:#999;}
p#uploadModeInfos {text-align:left;margin-top:1em;font-size:90%;color:#999;}
-#photosAddContent p.showFieldset {text-align:left;margin: 0 auto 10px auto;width: 650px;}
+#photosAddContent p.showFieldset {text-align:left;margin: 1em;}
#uploadProgress {width:650px; margin:10px auto;font-size:90%;}
#progressbar {border:1px solid #ccc; background-color:#eee;}
diff --git a/include/ws_functions/pwg.images.php b/include/ws_functions/pwg.images.php
index 78d1d51d7..6e224e6e4 100644
--- a/include/ws_functions/pwg.images.php
+++ b/include/ws_functions/pwg.images.php
@@ -1242,6 +1242,146 @@ SELECT id, name, permalink
);
}
+/**
+ * API method
+ * Adds a image (simple way)
+ * @param mixed[] $params
+ * @option int[] category
+ * @option string name (optional)
+ * @option string author (optional)
+ * @option string comment (optional)
+ * @option int level
+ * @option string|string[] tags
+ * @option int image_id (optional)
+ */
+function ws_images_upload($params, $service)
+{
+ global $conf;
+
+ if (get_pwg_token() != $params['pwg_token'])
+ {
+ return new PwgError(403, 'Invalid security token');
+ }
+
+ // usleep(100000);
+
+ // if (!isset($_FILES['image']))
+ // {
+ // return new PwgError(405, 'The image (file) is missing');
+ // }
+
+ // file_put_contents('/tmp/plupload.log', "[".date('c')."] ".__FUNCTION__."\n\n", FILE_APPEND);
+ // file_put_contents('/tmp/plupload.log', '$_FILES = '.var_export($_FILES, true)."\n", FILE_APPEND);
+ // file_put_contents('/tmp/plupload.log', '$_POST = '.var_export($_POST, true)."\n", FILE_APPEND);
+
+ $upload_dir = $conf['upload_dir'].'/buffer';
+
+ // create the upload directory tree if not exists
+ if (!mkgetdir($upload_dir, MKGETDIR_DEFAULT&~MKGETDIR_DIE_ON_ERROR))
+ {
+ return new PwgError(500, 'error during buffer directory creation');
+ }
+
+ // Get a file name
+ if (isset($_REQUEST["name"]))
+ {
+ $fileName = $_REQUEST["name"];
+ }
+ elseif (!empty($_FILES))
+ {
+ $fileName = $_FILES["file"]["name"];
+ }
+ else
+ {
+ $fileName = uniqid("file_");
+ }
+
+ $filePath = $upload_dir.DIRECTORY_SEPARATOR.$fileName;
+
+ // Chunking might be enabled
+ $chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0;
+ $chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 0;
+
+ file_put_contents('/tmp/plupload.log', "[".date('c')."] ".__FUNCTION__.', '.$fileName.' '.($chunk+1).'/'.$chunks."\n", FILE_APPEND);
+
+ single_insert(
+ 'plupload',
+ array(
+ 'received_on' => date('c'),
+ 'filename' => $fileName,
+ 'chunk' => $chunk+1,
+ 'chunks' => $chunks,
+ )
+ );
+
+
+ // Open temp file
+ if (!$out = @fopen("{$filePath}.part", $chunks ? "ab" : "wb"))
+ {
+ die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}');
+ }
+
+ if (!empty($_FILES))
+ {
+ if ($_FILES["file"]["error"] || !is_uploaded_file($_FILES["file"]["tmp_name"]))
+ {
+ die('{"jsonrpc" : "2.0", "error" : {"code": 103, "message": "Failed to move uploaded file."}, "id" : "id"}');
+ }
+
+ // Read binary input stream and append it to temp file
+ if (!$in = @fopen($_FILES["file"]["tmp_name"], "rb"))
+ {
+ die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');
+ }
+ }
+ else
+ {
+ if (!$in = @fopen("php://input", "rb"))
+ {
+ die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');
+ }
+ }
+
+ while ($buff = fread($in, 4096))
+ {
+ fwrite($out, $buff);
+ }
+
+ @fclose($out);
+ @fclose($in);
+
+ // Check if file has been uploaded
+ if (!$chunks || $chunk == $chunks - 1)
+ {
+ // Strip the temp .part suffix off
+ rename("{$filePath}.part", $filePath);
+
+ include_once(PHPWG_ROOT_PATH.'admin/include/functions_upload.inc.php');
+
+ $image_id = add_uploaded_file(
+ $filePath,
+ $params['name'],
+ $params['category'],
+ $params['level'],
+ null // image_id = not provided, this is a new photo
+ );
+
+ $query = '
+SELECT
+ id,
+ path
+ FROM '.IMAGES_TABLE.'
+ WHERE id = '.$image_id.'
+;';
+ $image_infos = pwg_db_fetch_assoc(pwg_query($query));
+
+ return array(
+ 'image_id' => $image_id,
+ 'src' => DerivativeImage::thumb_url($image_infos),
+ );
+ }
+}
+
/**
* API method
* Check if an image exists by it's name or md5 sum
diff --git a/themes/default/js/plugins/plupload/Moxie.swf b/themes/default/js/plugins/plupload/Moxie.swf
new file mode 100644
index 0000000000000000000000000000000000000000..da9914bb84f173d6c803e7c1a5373dd9eba1fbc2
GIT binary patch
literal 29349
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
kiF8|T7j7aSrj^YhCCQ{e7D0AN4!#frxUMF0Q*
literal 0
HcmV?d00001
diff --git a/themes/default/js/plugins/plupload/Moxie.xap b/themes/default/js/plugins/plupload/Moxie.xap
new file mode 100644
index 0000000000000000000000000000000000000000..aabc9f7c88653d6bc81d92be2a889e6b35d47a16
GIT binary patch
literal 62643
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