diff options
author | Mario Vavti <mario@mariovavti.com> | 2016-07-26 13:17:46 +0200 |
---|---|---|
committer | Mario Vavti <mario@mariovavti.com> | 2016-07-26 13:17:46 +0200 |
commit | 560af7a5b8e30001ea6bf9a6d2ea36e94ae904d0 (patch) | |
tree | a05e018d04f8202e2b2e085c4a95ecabeaec19df | |
parent | e38880a68669e572efcaef1b99518116460ba0b0 (diff) | |
download | volse-hubzilla-560af7a5b8e30001ea6bf9a6d2ea36e94ae904d0.tar.gz volse-hubzilla-560af7a5b8e30001ea6bf9a6d2ea36e94ae904d0.tar.bz2 volse-hubzilla-560af7a5b8e30001ea6bf9a6d2ea36e94ae904d0.zip |
allow multiple-file cloud upload
-rw-r--r-- | Zotlabs/Storage/Browser.php | 75 | ||||
-rw-r--r-- | view/tpl/cloud_actionspanel.tpl | 2 |
2 files changed, 76 insertions, 1 deletions
diff --git a/Zotlabs/Storage/Browser.php b/Zotlabs/Storage/Browser.php index 93c55bd4c..0d1d4e791 100644 --- a/Zotlabs/Storage/Browser.php +++ b/Zotlabs/Storage/Browser.php @@ -70,6 +70,81 @@ class Browser extends DAV\Browser\Plugin { } /** + * Extend from parent to add our own listeners + */ + function initialize(DAV\Server $server) { + parent::initialize($server); + if ($this->enablePost) { + $this->server->on('onBrowserPostAction', [$this, 'cloudPostAction']); + } + } + + /** + * Handles POST requests for tree operations. + * + * @param string $uri + * @param string $action + * @param array $postVars + * @return boolean false will stop other events in the beforeMethod chain to execute + */ + function cloudPostAction($uri, $action, $postVars) { + switch ($postVars['sabreAction']) { + case 'mkcol' : + if (isset($postVars['name']) && trim($postVars['name'])) { + // Using basename() because we won't allow slashes + list(, $folderName) = \Sabre\HTTP\URLUtil::splitPath(trim($postVars['name'])); + + if (isset($postVars['resourceType'])) { + $resourceType = explode(',', $postVars['resourceType']); + } else { + $resourceType = ['{DAV:}collection']; + } + + $properties = []; + foreach ($postVars as $varName => $varValue) { + // Any _POST variable in clark notation is treated + // like a property. + if ($varName[0] === '{') { + // PHP will convert any dots to underscores. + // This leaves us with no way to differentiate + // the two. + // Therefore we replace the string *DOT* with a + // real dot. * is not allowed in uris so we + // should be good. + $varName = str_replace('*DOT*', '.', $varName); + $properties[$varName] = $varValue; + } + } + + $mkCol = new DAV\MkCol( + $resourceType, + $properties + ); + $this->server->createCollection($uri . '/' . $folderName, $mkCol); + } + break; + + case 'put' : + + if ($_FILES) + $file = current($_FILES); + else + break; + + for ($i = 0; $i < count($file['name']); $i++) { + list(, $newName) = \Sabre\HTTP\URLUtil::splitPath(trim($file['name'][$i])); + + if (is_uploaded_file($file['tmp_name'][$i])) { + $this->server->createFile($uri . '/' . $newName, fopen($file['tmp_name'][$i], 'r')); + } + } + break; + + } + return false; + } + + /** * @brief Creates the directory listing for the given path. * * @param string $path which should be displayed diff --git a/view/tpl/cloud_actionspanel.tpl b/view/tpl/cloud_actionspanel.tpl index acba965f2..9cdd73b31 100644 --- a/view/tpl/cloud_actionspanel.tpl +++ b/view/tpl/cloud_actionspanel.tpl @@ -18,7 +18,7 @@ <div class="clear"></div> <label for="files-upload">{{$upload_header}}</label> <div class="clear"></div> - <input class="form-group pull-left" id="files-upload" type="file" name="file"> + <input class="form-group pull-left" id="files-upload" type="file" name="file[]" multiple> <button class="btn btn-primary btn-sm pull-right" type="submit" value="{{$upload_submit}}">{{$upload_submit}}</button> </form> <div class="clear"></div> |