applicious_utils 0.1.25 → 0.1.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. data/app/assets/javascripts/applicious_utils/Plupload/changelog.txt +152 -0
  2. data/app/assets/javascripts/applicious_utils/Plupload/examples/bg.jpg +0 -0
  3. data/app/assets/javascripts/applicious_utils/Plupload/examples/custom.html +94 -0
  4. data/app/assets/javascripts/applicious_utils/Plupload/examples/dump.php +36 -0
  5. data/app/assets/javascripts/applicious_utils/Plupload/examples/jquery/events.html +196 -0
  6. data/app/assets/javascripts/applicious_utils/Plupload/examples/jquery/jquery_ui_widget.html +103 -0
  7. data/app/assets/javascripts/applicious_utils/Plupload/examples/jquery/queue_widget.html +174 -0
  8. data/app/assets/javascripts/applicious_utils/Plupload/examples/jquery/s3.php +158 -0
  9. data/app/assets/javascripts/applicious_utils/Plupload/examples/upload.php +124 -0
  10. data/app/assets/javascripts/applicious_utils/Plupload/js/jquery.plupload.queue/css/jquery.plupload.queue.css +177 -0
  11. data/app/assets/javascripts/applicious_utils/Plupload/js/jquery.plupload.queue/img/backgrounds.gif +0 -0
  12. data/app/assets/javascripts/applicious_utils/Plupload/js/jquery.plupload.queue/img/buttons-disabled.png +0 -0
  13. data/app/assets/javascripts/applicious_utils/Plupload/js/jquery.plupload.queue/img/buttons.png +0 -0
  14. data/app/assets/javascripts/applicious_utils/Plupload/js/jquery.plupload.queue/img/delete.gif +0 -0
  15. data/app/assets/javascripts/applicious_utils/Plupload/js/jquery.plupload.queue/img/done.gif +0 -0
  16. data/app/assets/javascripts/applicious_utils/Plupload/js/jquery.plupload.queue/img/error.gif +0 -0
  17. data/app/assets/javascripts/applicious_utils/Plupload/js/jquery.plupload.queue/img/throbber.gif +0 -0
  18. data/app/assets/javascripts/applicious_utils/Plupload/js/jquery.plupload.queue/img/transp50.png +0 -0
  19. data/app/assets/javascripts/applicious_utils/Plupload/js/jquery.plupload.queue/jquery.plupload.queue.js +1 -0
  20. data/app/assets/javascripts/applicious_utils/Plupload/js/jquery.ui.plupload/css/jquery.ui.plupload.css +139 -0
  21. data/app/assets/javascripts/applicious_utils/Plupload/js/jquery.ui.plupload/img/plupload-bw.png +0 -0
  22. data/app/assets/javascripts/applicious_utils/Plupload/js/jquery.ui.plupload/img/plupload.png +0 -0
  23. data/app/assets/javascripts/applicious_utils/Plupload/js/jquery.ui.plupload/jquery.ui.plupload.js +1 -0
  24. data/app/assets/javascripts/applicious_utils/Plupload/js/plupload.browserplus.js +1 -0
  25. data/app/assets/javascripts/applicious_utils/Plupload/js/plupload.flash.js +1 -0
  26. data/app/assets/javascripts/applicious_utils/Plupload/js/plupload.flash.swf +0 -0
  27. data/app/assets/javascripts/applicious_utils/Plupload/js/plupload.full.js +2 -0
  28. data/app/assets/javascripts/applicious_utils/Plupload/js/plupload.gears.js +1 -0
  29. data/app/assets/javascripts/applicious_utils/Plupload/js/plupload.html4.js +1 -0
  30. data/app/assets/javascripts/applicious_utils/Plupload/js/plupload.html5.js +1 -0
  31. data/app/assets/javascripts/applicious_utils/Plupload/js/plupload.js +2 -0
  32. data/app/assets/javascripts/applicious_utils/Plupload/js/plupload.silverlight.js +1 -0
  33. data/app/assets/javascripts/applicious_utils/Plupload/js/plupload.silverlight.xap +0 -0
  34. data/app/assets/javascripts/applicious_utils/Plupload/license.txt +339 -0
  35. data/app/assets/javascripts/applicious_utils/Plupload/readme.md +46 -0
  36. data/app/assets/javascripts/applicious_utils/index.js +1 -1
  37. data/applicious_utils.gemspec +2 -1
  38. data/lib/applicious_utils/engine.rb +2 -0
  39. data/lib/applicious_utils/uploads_helper.rb +148 -0
  40. data/lib/applicious_utils/version.rb +1 -1
  41. data/lib/applicious_utils.rb +11 -2
  42. data/lib/generators/applicious_uploader_initializer.rb +9 -0
  43. data/lib/generators/templates/amazon_s3.yml +8 -0
  44. data/lib/generators/templates/session_store.rb +69 -0
  45. metadata +41 -14
  46. data/app/assets/javascripts/applicious_utils/swfupload-jquery/README +0 -70
  47. data/app/assets/javascripts/applicious_utils/swfupload-jquery/examples/01 - single uploader.html +0 -73
  48. data/app/assets/javascripts/applicious_utils/swfupload-jquery/examples/02 - multiple uploaders.html +0 -123
  49. data/app/assets/javascripts/applicious_utils/swfupload-jquery/examples/upload.php +0 -7
  50. data/app/assets/javascripts/applicious_utils/swfupload-jquery/src/jquery.swfupload.js +0 -64
  51. data/app/assets/javascripts/applicious_utils/swfupload-jquery/vendor/swfupload/XPButtonUploadText_61x22.png +0 -0
  52. data/app/assets/javascripts/applicious_utils/swfupload-jquery/vendor/swfupload/swfupload.js +0 -980
  53. data/app/assets/javascripts/applicious_utils/swfupload-jquery/vendor/swfupload/swfupload.queue.js +0 -99
  54. data/app/assets/javascripts/applicious_utils/swfupload-jquery/vendor/swfupload/swfupload.swf +0 -0
  55. data/lib/applicious_utils/applicious_railtie.rb +0 -11
  56. data/lib/applicious_utils/view_helpers.rb +0 -16
@@ -0,0 +1,174 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
3
+ <head>
4
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
5
+ <title>Plupload - Queue widget example</title>
6
+ <style type="text/css">
7
+ body {
8
+ font-family:Verdana, Geneva, sans-serif;
9
+ font-size:13px;
10
+ color:#333;
11
+ background:url(../bg.jpg);
12
+ }
13
+ </style>
14
+ <link rel="stylesheet" href="../../js/jquery.plupload.queue/css/jquery.plupload.queue.css" type="text/css" media="screen" />
15
+
16
+ <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
17
+ <script type="text/javascript" src="http://bp.yahooapis.com/2.4.21/browserplus-min.js"></script>
18
+
19
+ <script type="text/javascript" src="../../js/plupload.js"></script>
20
+ <script type="text/javascript" src="../../js/plupload.gears.js"></script>
21
+ <script type="text/javascript" src="../../js/plupload.silverlight.js"></script>
22
+ <script type="text/javascript" src="../../js/plupload.flash.js"></script>
23
+ <script type="text/javascript" src="../../js/plupload.browserplus.js"></script>
24
+ <script type="text/javascript" src="../../js/plupload.html4.js"></script>
25
+ <script type="text/javascript" src="../../js/plupload.html5.js"></script>
26
+ <script type="text/javascript" src="../../js/jquery.plupload.queue/jquery.plupload.queue.js"></script>
27
+
28
+ <!-- <script type="text/javascript" src="http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js"></script> -->
29
+ </head>
30
+ <body>
31
+
32
+ <form method="post" action="dump.php">
33
+ <h1>Queue widget example</h1>
34
+
35
+ <p>Shows the jQuery Plupload Queue widget and under different runtimes.</p>
36
+
37
+ <div style="float: left; margin-right: 20px">
38
+ <h3>Flash runtime</h3>
39
+ <div id="flash_uploader" style="width: 450px; height: 330px;">You browser doesn't have Flash installed.</div>
40
+
41
+ <h3>Gears runtime</h3>
42
+ <div id="gears_uploader" style="width: 450px; height: 330px;">You browser doesn't have Gears installed.</div>
43
+ </div>
44
+
45
+ <div style="float: left; margin-right: 20px">
46
+ <h3>Silverlight runtime</h3>
47
+ <div id="silverlight_uploader" style="width: 450px; height: 330px;">You browser doesn't have Silverlight installed.</div>
48
+
49
+ <h3>HTML 5 runtime</h3>
50
+ <div id="html5_uploader" style="width: 450px; height: 330px;">You browser doesn't support native upload. Try Firefox 3 or Safari 4.</div>
51
+ </div>
52
+
53
+ <div style="float: left; margin-right: 20px">
54
+ <h3>BrowserPlus runtime</h3>
55
+ <div id="browserplus_uploader" style="width: 450px; height: 330px;">You browser doesn't have BrowserPlus installed.</div>
56
+
57
+ <h3>HTML 4 runtime</h3>
58
+ <div id="html4_uploader" style="width: 450px; height: 330px;">You browser doesn't have HTML 4 support.</div>
59
+ </div>
60
+
61
+ <br style="clear: both" />
62
+
63
+ <input type="submit" value="Send" />
64
+ </form>
65
+
66
+ <script type="text/javascript">
67
+ $(function() {
68
+ // Setup flash version
69
+ $("#flash_uploader").pluploadQueue({
70
+ // General settings
71
+ runtimes : 'flash',
72
+ url : '../upload.php',
73
+ max_file_size : '10mb',
74
+ chunk_size : '1mb',
75
+ unique_names : true,
76
+ filters : [
77
+ {title : "Image files", extensions : "jpg,gif,png"},
78
+ {title : "Zip files", extensions : "zip"}
79
+ ],
80
+
81
+ // Resize images on clientside if we can
82
+ resize : {width : 320, height : 240, quality : 90},
83
+
84
+ // Flash settings
85
+ flash_swf_url : '../../js/plupload.flash.swf'
86
+ });
87
+
88
+ // Setup gears version
89
+ $("#gears_uploader").pluploadQueue({
90
+ // General settings
91
+ runtimes : 'gears',
92
+ url : 'upload.php',
93
+ max_file_size : '10mb',
94
+ chunk_size : '1mb',
95
+ unique_names : true,
96
+ filters : [
97
+ {title : "Image files", extensions : "jpg,gif,png"},
98
+ {title : "Zip files", extensions : "zip"}
99
+ ],
100
+
101
+ // Resize images on clientside if we can
102
+ resize : {width : 320, height : 240, quality : 90}
103
+ });
104
+
105
+ // Setup silverlight version
106
+ $("#silverlight_uploader").pluploadQueue({
107
+ // General settings
108
+ runtimes : 'silverlight',
109
+ url : 'upload.php',
110
+ max_file_size : '10mb',
111
+ chunk_size : '1mb',
112
+ unique_names : true,
113
+ filters : [
114
+ {title : "Image files", extensions : "jpg,gif,png"},
115
+ {title : "Zip files", extensions : "zip"}
116
+ ],
117
+
118
+ // Resize images on clientside if we can
119
+ resize : {width : 320, height : 240, quality : 90},
120
+
121
+ // Silverlight settings
122
+ silverlight_xap_url : '../../js/plupload.silverlight.xap'
123
+ });
124
+
125
+ // Setup html5 version
126
+ $("#html5_uploader").pluploadQueue({
127
+ // General settings
128
+ runtimes : 'html5',
129
+ url : 'upload.php',
130
+ max_file_size : '10mb',
131
+ chunk_size : '1mb',
132
+ unique_names : true,
133
+ filters : [
134
+ {title : "Image files", extensions : "jpg,gif,png"},
135
+ {title : "Zip files", extensions : "zip"}
136
+ ],
137
+
138
+ // Resize images on clientside if we can
139
+ resize : {width : 320, height : 240, quality : 90}
140
+ });
141
+
142
+ // Setup browserplus version
143
+ $("#browserplus_uploader").pluploadQueue({
144
+ // General settings
145
+ runtimes : 'browserplus',
146
+ url : 'upload.php',
147
+ max_file_size : '10mb',
148
+ chunk_size : '1mb',
149
+ unique_names : true,
150
+ filters : [
151
+ {title : "Image files", extensions : "jpg,gif,png"},
152
+ {title : "Zip files", extensions : "zip"}
153
+ ],
154
+
155
+ // Resize images on clientside if we can
156
+ resize : {width : 320, height : 240, quality : 90}
157
+ });
158
+
159
+ // Setup html4 version
160
+ $("#html4_uploader").pluploadQueue({
161
+ // General settings
162
+ runtimes : 'html4',
163
+ url : 'upload.php',
164
+ unique_names : true,
165
+ filters : [
166
+ {title : "Image files", extensions : "jpg,gif,png"},
167
+ {title : "Zip files", extensions : "zip"}
168
+ ]
169
+ });
170
+ });
171
+ </script>
172
+
173
+ </body>
174
+ </html>
@@ -0,0 +1,158 @@
1
+ <?php
2
+ /*
3
+ In order to upload files to S3 using Flash runtime, one should start by placing crossdomain.xml into the bucket.
4
+ crossdomain.xml can be as simple as this:
5
+
6
+ <?xml version="1.0"?>
7
+ <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
8
+ <cross-domain-policy>
9
+ <allow-access-from domain="*" secure="false" />
10
+ </cross-domain-policy>
11
+
12
+ In our tests SilverLight didn't require anything special and worked with this configuration just fine. It may fail back
13
+ to the same crossdomain.xml as last resort.
14
+
15
+ !!!Important!!! Plupload UI Widget here, is used only for demo purposes and is not required for uploading to S3.
16
+ */
17
+
18
+ // important variables that will be used throughout this example
19
+ $bucket = 'BUCKET';
20
+
21
+ // these can be found on your Account page, under Security Credentials > Access Keys
22
+ $accessKeyId = 'ACCESS_KEY_ID';
23
+ $secret = 'SECRET_ACCESS_KEY';
24
+
25
+
26
+ // hash_hmac — Generate a keyed hash value using the HMAC method
27
+ // (PHP 5 >= 5.1.2, PECL hash >= 1.1)
28
+ if (!function_exists('hash_hmac')) :
29
+ // based on: http://www.php.net/manual/en/function.sha1.php#39492
30
+ function hash_hmac($algo, $data, $key, $raw_output = false)
31
+ {
32
+ $blocksize = 64;
33
+ if (strlen($key) > $blocksize)
34
+ $key = pack('H*', $algo($key));
35
+
36
+ $key = str_pad($key, $blocksize, chr(0x00));
37
+ $ipad = str_repeat(chr(0x36), $blocksize);
38
+ $opad = str_repeat(chr(0x5c), $blocksize);
39
+ $hmac = pack('H*', $algo(($key^$opad) . pack('H*', $algo(($key^$ipad) . $data))));
40
+
41
+ return $raw_output ? $hmac : bin2hex($hmac);
42
+ }
43
+ endif;
44
+
45
+ // prepare policy
46
+ $policy = base64_encode(json_encode(array(
47
+ // ISO 8601 - date('c'); generates uncompatible date, so better do it manually
48
+ 'expiration' => date('Y-m-d\TH:i:s.000\Z', strtotime('+1 day')),
49
+ 'conditions' => array(
50
+ array('bucket' => $bucket),
51
+ array('acl' => 'public-read'),
52
+ array('starts-with', '$key', ''),
53
+ // for demo purposes we are accepting only images
54
+ array('starts-with', '$Content-Type', 'image/'),
55
+ // "Some versions of the Adobe Flash Player do not properly handle HTTP responses that have an empty body.
56
+ // To configure POST to return a response that does not have an empty body, set success_action_status to 201.
57
+ // When set, Amazon S3 returns an XML document with a 201 status code."
58
+ // http://docs.amazonwebservices.com/AmazonS3/latest/dev/HTTPPOSTFlash.html
59
+ array('success_action_status' => '201'),
60
+ // Plupload internally adds name field, so we need to mention it here
61
+ array('starts-with', '$name', ''),
62
+ // One more field to take into account: Filename - gets silently sent by FileReference.upload() in Flash
63
+ // http://docs.amazonwebservices.com/AmazonS3/latest/dev/HTTPPOSTFlash.html
64
+ array('starts-with', '$Filename', ''),
65
+ )
66
+ )));
67
+
68
+ // sign policy
69
+ $signature = base64_encode(hash_hmac('sha1', $policy, $secret, true));
70
+
71
+ ?>
72
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
73
+ <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
74
+ <head>
75
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
76
+ <title>Plupload to Amazon S3 Example</title>
77
+
78
+ <style type="text/css">
79
+ body {
80
+ font-family:Verdana, Geneva, sans-serif;
81
+ font-size:13px;
82
+ color:#333;
83
+ background:url(../bg.jpg);
84
+ }
85
+ </style>
86
+
87
+ <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/themes/base/jquery-ui.css" type="text/css" />
88
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
89
+ <script src=" https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.min.js"></script>
90
+
91
+ <!-- Load plupload and all it's runtimes and finally the UI widget -->
92
+ <link rel="stylesheet" href="../../js/jquery.ui.plupload/css/jquery.ui.plupload.css" type="text/css" />
93
+
94
+ <script type="text/javascript" src="../../js/plupload.js"></script>
95
+ <script type="text/javascript" src="../../js/plupload.gears.js"></script>
96
+ <script type="text/javascript" src="../../js/plupload.silverlight.js"></script>
97
+ <script type="text/javascript" src="../../js/plupload.flash.js"></script>
98
+ <script type="text/javascript" src="../../js/plupload.browserplus.js"></script>
99
+ <script type="text/javascript" src="../../js/plupload.html4.js"></script>
100
+ <script type="text/javascript" src="../../js/plupload.html5.js"></script>
101
+ <script type="text/javascript" src="../../js/jquery.ui.plupload/jquery.ui.plupload.js"></script>
102
+ <!--<script type="text/javascript" src="http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js"></script>-->
103
+
104
+ </head>
105
+ <body>
106
+
107
+ <h1>Plupload to Amazon S3 Example</h1>
108
+
109
+ <div id="uploader">
110
+ <p>You browser doesn't have Flash, Silverlight, Gears, BrowserPlus or HTML5 support.</p>
111
+ </div>
112
+
113
+ <script type="text/javascript">
114
+ // Convert divs to queue widgets when the DOM is ready
115
+ $(function() {
116
+ $("#uploader").plupload({
117
+ runtimes : 'flash,silverlight',
118
+ url : 'http://<?php echo $bucket; ?>.s3.amazonaws.com/',
119
+ max_file_size : '10mb',
120
+
121
+ multipart: true,
122
+ multipart_params: {
123
+ 'key': '${filename}', // use filename as a key
124
+ 'Filename': '${filename}', // adding this to keep consistency across the runtimes
125
+ 'acl': 'public-read',
126
+ 'Content-Type': 'image/jpeg',
127
+ 'success_action_status': '201',
128
+ 'AWSAccessKeyId' : '<?php echo $accessKeyId; ?>',
129
+ 'policy': '<?php echo $policy; ?>',
130
+ 'signature': '<?php echo $signature; ?>'
131
+ },
132
+
133
+ // !!!Important!!!
134
+ // this is not recommended with S3, since it will force Flash runtime into the mode, with no progress indication
135
+ //resize : {width : 800, height : 600, quality : 60}, // Resize images on clientside, if possible
136
+
137
+ // optional, but better be specified directly
138
+ file_data_name: 'file',
139
+
140
+ // re-use widget (not related to S3, but to Plupload UI Widget)
141
+ multiple_queues: true,
142
+
143
+ // Specify what files to browse for
144
+ filters : [
145
+ {title : "JPEG files", extensions : "jpg"}
146
+ ],
147
+
148
+ // Flash settings
149
+ flash_swf_url : '../../js/plupload.flash.swf',
150
+
151
+ // Silverlight settings
152
+ silverlight_xap_url : '../../js/plupload.silverlight.xap'
153
+ });
154
+ });
155
+ </script>
156
+
157
+ </body>
158
+ </html>
@@ -0,0 +1,124 @@
1
+ <?php
2
+ /**
3
+ * upload.php
4
+ *
5
+ * Copyright 2009, Moxiecode Systems AB
6
+ * Released under GPL License.
7
+ *
8
+ * License: http://www.plupload.com/license
9
+ * Contributing: http://www.plupload.com/contributing
10
+ */
11
+
12
+ // HTTP headers for no cache etc
13
+ header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
14
+ header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
15
+ header("Cache-Control: no-store, no-cache, must-revalidate");
16
+ header("Cache-Control: post-check=0, pre-check=0", false);
17
+ header("Pragma: no-cache");
18
+
19
+ // Settings
20
+ //$targetDir = ini_get("upload_tmp_dir") . DIRECTORY_SEPARATOR . "plupload";
21
+ $targetDir = 'uploads/';
22
+
23
+ //$cleanupTargetDir = false; // Remove old files
24
+ //$maxFileAge = 60 * 60; // Temp file age in seconds
25
+
26
+ // 5 minutes execution time
27
+ @set_time_limit(5 * 60);
28
+
29
+ // Uncomment this one to fake upload time
30
+ // usleep(5000);
31
+
32
+ // Get parameters
33
+ $chunk = isset($_REQUEST["chunk"]) ? $_REQUEST["chunk"] : 0;
34
+ $chunks = isset($_REQUEST["chunks"]) ? $_REQUEST["chunks"] : 0;
35
+ $fileName = isset($_REQUEST["name"]) ? $_REQUEST["name"] : '';
36
+
37
+ // Clean the fileName for security reasons
38
+ $fileName = preg_replace('/[^\w\._]+/', '', $fileName);
39
+
40
+ // Make sure the fileName is unique but only if chunking is disabled
41
+ if ($chunks < 2 && file_exists($targetDir . DIRECTORY_SEPARATOR . $fileName)) {
42
+ $ext = strrpos($fileName, '.');
43
+ $fileName_a = substr($fileName, 0, $ext);
44
+ $fileName_b = substr($fileName, $ext);
45
+
46
+ $count = 1;
47
+ while (file_exists($targetDir . DIRECTORY_SEPARATOR . $fileName_a . '_' . $count . $fileName_b))
48
+ $count++;
49
+
50
+ $fileName = $fileName_a . '_' . $count . $fileName_b;
51
+ }
52
+
53
+ // Create target dir
54
+ if (!file_exists($targetDir))
55
+ @mkdir($targetDir);
56
+
57
+ // Remove old temp files
58
+ /* this doesn't really work by now
59
+
60
+ if (is_dir($targetDir) && ($dir = opendir($targetDir))) {
61
+ while (($file = readdir($dir)) !== false) {
62
+ $filePath = $targetDir . DIRECTORY_SEPARATOR . $file;
63
+
64
+ // Remove temp files if they are older than the max age
65
+ if (preg_match('/\\.tmp$/', $file) && (filemtime($filePath) < time() - $maxFileAge))
66
+ @unlink($filePath);
67
+ }
68
+
69
+ closedir($dir);
70
+ } else
71
+ die('{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "Failed to open temp directory."}, "id" : "id"}');
72
+ */
73
+
74
+ // Look for the content type header
75
+ if (isset($_SERVER["HTTP_CONTENT_TYPE"]))
76
+ $contentType = $_SERVER["HTTP_CONTENT_TYPE"];
77
+
78
+ if (isset($_SERVER["CONTENT_TYPE"]))
79
+ $contentType = $_SERVER["CONTENT_TYPE"];
80
+
81
+ // Handle non multipart uploads older WebKit versions didn't support multipart in HTML5
82
+ if (strpos($contentType, "multipart") !== false) {
83
+ if (isset($_FILES['file']['tmp_name']) && is_uploaded_file($_FILES['file']['tmp_name'])) {
84
+ // Open temp file
85
+ $out = fopen($targetDir . DIRECTORY_SEPARATOR . $fileName, $chunk == 0 ? "wb" : "ab");
86
+ if ($out) {
87
+ // Read binary input stream and append it to temp file
88
+ $in = fopen($_FILES['file']['tmp_name'], "rb");
89
+
90
+ if ($in) {
91
+ while ($buff = fread($in, 4096))
92
+ fwrite($out, $buff);
93
+ } else
94
+ die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');
95
+ fclose($in);
96
+ fclose($out);
97
+ @unlink($_FILES['file']['tmp_name']);
98
+ } else
99
+ die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}');
100
+ } else
101
+ die('{"jsonrpc" : "2.0", "error" : {"code": 103, "message": "Failed to move uploaded file."}, "id" : "id"}');
102
+ } else {
103
+ // Open temp file
104
+ $out = fopen($targetDir . DIRECTORY_SEPARATOR . $fileName, $chunk == 0 ? "wb" : "ab");
105
+ if ($out) {
106
+ // Read binary input stream and append it to temp file
107
+ $in = fopen("php://input", "rb");
108
+
109
+ if ($in) {
110
+ while ($buff = fread($in, 4096))
111
+ fwrite($out, $buff);
112
+ } else
113
+ die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');
114
+
115
+ fclose($in);
116
+ fclose($out);
117
+ } else
118
+ die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}');
119
+ }
120
+
121
+ // Return JSON-RPC response
122
+ die('{"jsonrpc" : "2.0", "result" : null, "id" : "id"}');
123
+
124
+ ?>
@@ -0,0 +1,177 @@
1
+ /*
2
+ Plupload
3
+ ------------------------------------------------------------------- */
4
+
5
+ .plupload_button {
6
+ display: -moz-inline-box; /* FF < 3*/
7
+ display: inline-block;
8
+ font: normal 12px sans-serif;
9
+ text-decoration: none;
10
+ color: #42454a;
11
+ border: 1px solid #bababa;
12
+ padding: 2px 8px 3px 20px;
13
+ margin-right: 4px;
14
+ background: #f3f3f3 url('../img/buttons.png') no-repeat 0 center;
15
+ outline: 0;
16
+
17
+ /* Optional rounded corners for browsers that support it */
18
+ -moz-border-radius: 3px;
19
+ -khtml-border-radius: 3px;
20
+ -webkit-border-radius: 3px;
21
+ border-radius: 3px;
22
+ }
23
+
24
+ .plupload_button:hover {
25
+ color: #000;
26
+ text-decoration: none;
27
+ }
28
+
29
+ .plupload_disabled, a.plupload_disabled:hover {
30
+ color: #737373;
31
+ border-color: #c5c5c5;
32
+ background: #ededed url('../img/buttons-disabled.png') no-repeat 0 center;
33
+ cursor: default;
34
+ }
35
+
36
+ .plupload_add {
37
+ background-position: -181px center;
38
+ }
39
+
40
+ .plupload_wrapper {
41
+ font: normal 11px Verdana,sans-serif;
42
+ width: 100%;
43
+ }
44
+
45
+ .plupload_container {
46
+ padding: 8px;
47
+ background: url('../img/transp50.png');
48
+ /*-moz-border-radius: 5px;*/
49
+ }
50
+
51
+ .plupload_container input {
52
+ border: 1px solid #DDD;
53
+ font: normal 11px Verdana,sans-serif;
54
+ width: 98%;
55
+ }
56
+
57
+ .plupload_header {background: #2A2C2E url('../img/backgrounds.gif') repeat-x;}
58
+ .plupload_header_content {
59
+ background: url('../img/backgrounds.gif') no-repeat 0 -317px;
60
+ min-height: 56px;
61
+ padding-left: 60px;
62
+ color: #FFF;
63
+ }
64
+ .plupload_header_title {
65
+ font: normal 18px sans-serif;
66
+ padding: 6px 0 3px;
67
+ }
68
+ .plupload_header_text {
69
+ font: normal 12px sans-serif;
70
+ }
71
+
72
+ .plupload_filelist {
73
+ margin: 0;
74
+ padding: 0;
75
+ list-style: none;
76
+ }
77
+
78
+ .plupload_scroll .plupload_filelist {
79
+ height: 185px;
80
+ background: #F5F5F5;
81
+ overflow-y: scroll;
82
+ }
83
+
84
+ .plupload_filelist li {
85
+ padding: 10px 8px;
86
+ background: #F5F5F5 url('../img/backgrounds.gif') repeat-x 0 -156px;
87
+ border-bottom: 1px solid #DDD;
88
+ }
89
+
90
+ .plupload_filelist_header, .plupload_filelist_footer {
91
+ background: #DFDFDF;
92
+ padding: 8px 8px;
93
+ color: #42454A;
94
+ }
95
+ .plupload_filelist_header {
96
+ border-top: 1px solid #EEE;
97
+ border-bottom: 1px solid #CDCDCD;
98
+ }
99
+
100
+ .plupload_filelist_footer {border-top: 1px solid #FFF; height: 22px; line-height: 20px; vertical-align: middle;}
101
+ .plupload_file_name {float: left; overflow: hidden}
102
+ .plupload_file_status {color: #777;}
103
+ .plupload_file_status span {color: #42454A;}
104
+ .plupload_file_size, .plupload_file_status, .plupload_progress {
105
+ float: right;
106
+ width: 80px;
107
+ }
108
+ .plupload_file_size, .plupload_file_status, .plupload_file_action {text-align: right;}
109
+
110
+ .plupload_filelist .plupload_file_name {width: 205px}
111
+
112
+ .plupload_file_action {
113
+ float: right;
114
+ width: 16px;
115
+ height: 16px;
116
+ margin-left: 15px;
117
+ }
118
+
119
+ .plupload_file_action * {
120
+ display: none;
121
+ width: 16px;
122
+ height: 16px;
123
+ }
124
+
125
+ li.plupload_uploading {background: #ECF3DC url('../img/backgrounds.gif') repeat-x 0 -238px;}
126
+ li.plupload_done {color:#AAA}
127
+
128
+ li.plupload_delete a {
129
+ background: url('../img/delete.gif');
130
+ }
131
+
132
+ li.plupload_failed a {
133
+ background: url('../img/error.gif');
134
+ cursor: default;
135
+ }
136
+
137
+ li.plupload_done a {
138
+ background: url('../img/done.gif');
139
+ cursor: default;
140
+ }
141
+
142
+ .plupload_progress, .plupload_upload_status {
143
+ display: none;
144
+ }
145
+
146
+ .plupload_progress_container {
147
+ margin-top: 3px;
148
+ border: 1px solid #CCC;
149
+ background: #FFF;
150
+ padding: 1px;
151
+ }
152
+ .plupload_progress_bar {
153
+ width: 0px;
154
+ height: 7px;
155
+ background: #CDEB8B;
156
+ }
157
+
158
+ .plupload_scroll .plupload_filelist_header .plupload_file_action, .plupload_scroll .plupload_filelist_footer .plupload_file_action {
159
+ margin-right: 17px;
160
+ }
161
+
162
+ /* Floats */
163
+
164
+ .plupload_clear,.plupload_clearer {clear: both;}
165
+ .plupload_clearer, .plupload_progress_bar {
166
+ display: block;
167
+ font-size: 0;
168
+ line-height: 0;
169
+ }
170
+
171
+ li.plupload_droptext {
172
+ background: transparent;
173
+ text-align: center;
174
+ vertical-align: middle;
175
+ border: 0;
176
+ line-height: 165px;
177
+ }
@@ -0,0 +1 @@
1
+ (function(c){var d={};function a(e){return plupload.translate(e)||e}function b(f,e){e.contents().each(function(g,h){h=c(h);if(!h.is(".plupload")){h.remove()}});e.prepend('<div class="plupload_wrapper plupload_scroll"><div id="'+f+'_container" class="plupload_container"><div class="plupload"><div class="plupload_header"><div class="plupload_header_content"><div class="plupload_header_title">'+a("Select files")+'</div><div class="plupload_header_text">'+a("Add files to the upload queue and click the start button.")+'</div></div></div><div class="plupload_content"><div class="plupload_filelist_header"><div class="plupload_file_name">'+a("Filename")+'</div><div class="plupload_file_action">&nbsp;</div><div class="plupload_file_status"><span>'+a("Status")+'</span></div><div class="plupload_file_size">'+a("Size")+'</div><div class="plupload_clearer">&nbsp;</div></div><ul id="'+f+'_filelist" class="plupload_filelist"></ul><div class="plupload_filelist_footer"><div class="plupload_file_name"><div class="plupload_buttons"><a href="#" class="plupload_button plupload_add">'+a("Add files")+'</a><a href="#" class="plupload_button plupload_start">'+a("Start upload")+'</a></div><span class="plupload_upload_status"></span></div><div class="plupload_file_action"></div><div class="plupload_file_status"><span class="plupload_total_status">0%</span></div><div class="plupload_file_size"><span class="plupload_total_file_size">0 b</span></div><div class="plupload_progress"><div class="plupload_progress_container"><div class="plupload_progress_bar"></div></div></div><div class="plupload_clearer">&nbsp;</div></div></div></div></div><input type="hidden" id="'+f+'_count" name="'+f+'_count" value="0" /></div>')}c.fn.pluploadQueue=function(e){if(e){this.each(function(){var j,i,k;i=c(this);k=i.attr("id");if(!k){k=plupload.guid();i.attr("id",k)}j=new plupload.Uploader(c.extend({dragdrop:true,container:k},e));d[k]=j;function h(l){var n;if(l.status==plupload.DONE){n="plupload_done"}if(l.status==plupload.FAILED){n="plupload_failed"}if(l.status==plupload.QUEUED){n="plupload_delete"}if(l.status==plupload.UPLOADING){n="plupload_uploading"}var m=c("#"+l.id).attr("class",n).find("a").css("display","block");if(l.hint){m.attr("title",l.hint)}}function f(){c("span.plupload_total_status",i).html(j.total.percent+"%");c("div.plupload_progress_bar",i).css("width",j.total.percent+"%");c("span.plupload_upload_status",i).text(a("Uploaded %d/%d files").replace(/%d\/%d/,j.total.uploaded+"/"+j.files.length))}function g(){var m=c("ul.plupload_filelist",i).html(""),n=0,l;c.each(j.files,function(p,o){l="";if(o.status==plupload.DONE){if(o.target_name){l+='<input type="hidden" name="'+k+"_"+n+'_tmpname" value="'+plupload.xmlEncode(o.target_name)+'" />'}l+='<input type="hidden" name="'+k+"_"+n+'_name" value="'+plupload.xmlEncode(o.name)+'" />';l+='<input type="hidden" name="'+k+"_"+n+'_status" value="'+(o.status==plupload.DONE?"done":"failed")+'" />';n++;c("#"+k+"_count").val(n)}m.append('<li id="'+o.id+'"><div class="plupload_file_name"><span>'+o.name+'</span></div><div class="plupload_file_action"><a href="#"></a></div><div class="plupload_file_status">'+o.percent+'%</div><div class="plupload_file_size">'+plupload.formatSize(o.size)+'</div><div class="plupload_clearer">&nbsp;</div>'+l+"</li>");h(o);c("#"+o.id+".plupload_delete a").click(function(q){c("#"+o.id).remove();j.removeFile(o);q.preventDefault()})});c("span.plupload_total_file_size",i).html(plupload.formatSize(j.total.size));if(j.total.queued===0){c("span.plupload_add_text",i).text(a("Add files."))}else{c("span.plupload_add_text",i).text(j.total.queued+" files queued.")}c("a.plupload_start",i).toggleClass("plupload_disabled",j.files.length==(j.total.uploaded+j.total.failed));m[0].scrollTop=m[0].scrollHeight;f();if(!j.files.length&&j.features.dragdrop&&j.settings.dragdrop){c("#"+k+"_filelist").append('<li class="plupload_droptext">'+a("Drag files here.")+"</li>")}}j.bind("UploadFile",function(l,m){c("#"+m.id).addClass("plupload_current_file")});j.bind("Init",function(l,m){b(k,i);if(!e.unique_names&&e.rename){c("#"+k+"_filelist div.plupload_file_name span",i).live("click",function(s){var q=c(s.target),o,r,n,p="";o=l.getFile(q.parents("li")[0].id);n=o.name;r=/^(.+)(\.[^.]+)$/.exec(n);if(r){n=r[1];p=r[2]}q.hide().after('<input type="text" />');q.next().val(n).focus().blur(function(){q.show().next().remove()}).keydown(function(u){var t=c(this);if(u.keyCode==13){u.preventDefault();o.name=t.val()+p;q.text(o.name);t.blur()}})})}c("a.plupload_add",i).attr("id",k+"_browse");l.settings.browse_button=k+"_browse";if(l.features.dragdrop&&l.settings.dragdrop){l.settings.drop_element=k+"_filelist";c("#"+k+"_filelist").append('<li class="plupload_droptext">'+a("Drag files here.")+"</li>")}c("#"+k+"_container").attr("title","Using runtime: "+m.runtime);c("a.plupload_start",i).click(function(n){if(!c(this).hasClass("plupload_disabled")){j.start()}n.preventDefault()});c("a.plupload_stop",i).click(function(n){n.preventDefault();j.stop()});c("a.plupload_start",i).addClass("plupload_disabled")});j.init();j.bind("Error",function(l,o){var m=o.file,n;if(m){n=o.message;if(o.details){n+=" ("+o.details+")"}if(o.code==plupload.FILE_SIZE_ERROR){alert(a("Error: File to large: ")+m.name)}if(o.code==plupload.FILE_EXTENSION_ERROR){alert(a("Error: Invalid file extension: ")+m.name)}m.hint=n;c("#"+m.id).attr("class","plupload_failed").find("a").css("display","block").attr("title",n)}});j.bind("StateChanged",function(){if(j.state===plupload.STARTED){c("li.plupload_delete a,div.plupload_buttons",i).hide();c("span.plupload_upload_status,div.plupload_progress,a.plupload_stop",i).css("display","block");c("span.plupload_upload_status",i).text("Uploaded "+j.total.uploaded+"/"+j.files.length+" files");if(e.multiple_queues){c("span.plupload_total_status,span.plupload_total_file_size",i).show()}}else{g();c("a.plupload_stop,div.plupload_progress",i).hide();c("a.plupload_delete",i).css("display","block")}});j.bind("QueueChanged",g);j.bind("FileUploaded",function(l,m){h(m)});j.bind("UploadProgress",function(l,m){c("#"+m.id+" div.plupload_file_status",i).html(m.percent+"%");h(m);f();if(e.multiple_queues&&j.total.uploaded+j.total.failed==j.files.length){c(".plupload_buttons,.plupload_upload_status",i).css("display","inline");c(".plupload_start",i).addClass("plupload_disabled");c("span.plupload_total_status,span.plupload_total_file_size",i).hide()}});if(e.setup){e.setup(j)}});return this}else{return d[c(this[0]).attr("id")]}}})(jQuery);