Newer
Older
class OwnCloudPlugin extends StudIPPlugin implements FilesystemPlugin {
public function getFileSelectNavigation()
{
$nav = new Navigation(_("OwnCloud"));
return $nav;
}
public function getFolder($folder_id = null)
{
if($folder_id && !$this->isFolder($folder_id)){
return null;
}
$name = rawurldecode(array_pop($folder_path));
'range_type' => $this->getPluginId(),
'range_id' => $this->getPluginName()
public function download_action()
{
$args = func_get_args();
$file_id = implode("/", array_map("rawurlencode", $args));
$parts = parse_url(UserConfig::get($GLOBALS['user']->id)->OWNCLOUD_ENDPOINT);
$url = $parts['scheme']
.urlencode(UserConfig::get($GLOBALS['user']->id)->OWNCLOUD_USERNAME)
.":"
.urlencode(UserConfig::get($GLOBALS['user']->id)->OWNCLOUD_PASSWORD)
."@"
.$parts['host']
.($parts['port'] ? ":".$parts['port'] : "")
.($parts['path'] ?: "");
if ($url[strlen($url) - 1] !== "/") {
$url .= "/";
}
$webdav = $url . "remote.php/webdav/";
$header = array();
$header[] = "Authorization: Bearer ".\Owncloud\OAuth::getAccessToken();
$r = curl_init();
curl_setopt($r, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($r, CURLOPT_URL, $webdav . $file_id);
curl_setopt($r, CURLOPT_HTTPHEADER, ($header));
curl_setopt($r, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec($r);
header("Content-Length: ".$info['size_download']);
header("Content-Type: ".$info['content_type']);
/**
* @param $file_id : this is a path to the file. Remind that the chunks of this path need to be rawurlencoded!
* @param bool $with_blob : should OwnCloudPlugin retrieve the blib of the file as well?
* @return FileRef|null : Returns the FileRef on success and null if the file doesn't exist.
*/
public function getPreparedFile($file_id, $with_blob = false)
if(!$this->isFile($file_id)) {
return null;
}
$filename = rawurldecode(array_pop($folder_path));
$parent_folder_id = implode("/", $folder_path);
$folder = new OwncloudFolder(array(
'id' => $folder_id,
'range_type' => $this->getPluginId(),
'range_id' => $this->getPluginName()
foreach ($folder->getFiles() as $file_info) {
if ($file_info->name === $filename) {
$info = $file_info;
break;
}
}
$file->id = $file_id;
$file->foldertype = $folder;
$file->name = $filename;
$file->size = $info->size;
$file->mime_type = $info->mime_type;
$file->download_url = $info->download_url;
$file->mkdate = $info->chdate;
$file->chdate = $info->chdate;
$file->content_terms_of_use_id = 'UNDEF_LICENSE';
if ($with_blob) {
$parts = parse_url(UserConfig::get($GLOBALS['user']->id)->OWNCLOUD_ENDPOINT);
$url = $parts['scheme']
.urlencode(UserConfig::get($GLOBALS['user']->id)->OWNCLOUD_USERNAME)
.":"
.urlencode(UserConfig::get($GLOBALS['user']->id)->OWNCLOUD_PASSWORD)
."@"
.$parts['host']
.($parts['port'] ? ":".$parts['port'] : "")
.($parts['path'] ?: "");
if ($url[strlen($url) - 1] !== "/") {
$url .= "/";
}
$webdav = $url . "remote.php/webdav/";
$header = array();
$header[] = "Authorization: Bearer ".\Owncloud\OAuth::getAccessToken();
$r = curl_init();
curl_setopt($r, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($r, CURLOPT_URL, $webdav.$file_id);
curl_setopt($r, CURLOPT_HTTPHEADER, ($header));
curl_setopt($r, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec($r);
$info = curl_getinfo($r);
curl_close($r);
$path = $GLOBALS['TMP_PATH']."/".md5(uniqid());
file_put_contents(
$path,
$content
);
$file->path_to_blob = $path;
}
}
public function filesystemConfigurationURL()
{
return PluginEngine::getURL($this, array(), "configure/myarea");
}
return false;
}
public function getSearchParameters()
{
// TODO: Implement getSearchParameters() method.
}
public function search($text, $parameters = array())
{
return null;
}
public function isSource()
{
return UserConfig::get($GLOBALS['user']->id)->OWNCLOUD_ACTIVATED;
}
public function isPersonalFileArea()
{
return UserConfig::get($GLOBALS['user']->id)->OWNCLOUD_ACTIVATED;
}
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
protected function getType($id)
{
$parts = parse_url(UserConfig::get($GLOBALS['user']->id)->OWNCLOUD_ENDPOINT);
$url = $parts['scheme']
."://"
.$parts['host']
.($parts['port'] ? ":".$parts['port'] : "")
.($parts['path'] ?: "");
if ($url[strlen($url) - 1] !== "/") {
$url .= "/";
}
$webdav = $url . "remote.php/webdav/";
$root = "remote.php/webdav/".$this->id;
$header = array();
$header[] = "Authorization: Bearer ".\Owncloud\OAuth::getAccessToken();
$r = curl_init();
curl_setopt($r, CURLOPT_CUSTOMREQUEST, "PROPFIND");
curl_setopt($r, CURLOPT_URL, $webdav."/".$id);
curl_setopt($r, CURLOPT_HTTPHEADER, ($header));
curl_setopt($r, CURLOPT_RETURNTRANSFER, 1);
$xml = curl_exec($r);
curl_close($r);
$doc = new DOMDocument();
$doc->loadXML($xml);
foreach ($doc->getElementsByTagNameNS("DAV:","response") as $file) {
foreach ($file->childNodes as $node) {
if ($node->tagName === "d:propstat") {
foreach ($node->childNodes as $prop) {
foreach ($prop->childNodes as $attr) {
if ($attr->tagName === "d:resourcetype") {
return /*$file_attributes['type'] =*/ ($attr->childNodes[0] && $attr->childNodes[0]->tagName === "d:collection") ? "folder" : "file";
}
}
}
}
}
}
return $file_attributes['type'];
}
protected function isFolder($id)
{
return $this->getType($id) == 'folder';
}
protected function isFile($id)