Skip to content
Snippets Groups Projects
OwnCloudPlugin.class.php 3.36 KiB
Newer Older
Rasmus Fuhse's avatar
Rasmus Fuhse committed
<?php

Rasmus Fuhse's avatar
Rasmus Fuhse committed
require_once __DIR__."/classes/OAuth.class.php";
Rasmus Fuhse's avatar
Rasmus Fuhse committed
require_once __DIR__."/classes/OwncloudFolder.class.php";
Rasmus Fuhse's avatar
Rasmus Fuhse committed
include __DIR__.'/vendor/autoload.php';
Rasmus Fuhse's avatar
Rasmus Fuhse committed

Rasmus Fuhse's avatar
Rasmus Fuhse committed
class OwnCloudPlugin extends StudIPPlugin implements FilesystemPlugin {

    public function getFileSelectNavigation()
    {
        $nav = new Navigation(_("OwnCloud"));
Rasmus Fuhse's avatar
Rasmus Fuhse committed
        $nav->setImage(Icon::create("cloud", "clickable"));
Rasmus Fuhse's avatar
Rasmus Fuhse committed
        return $nav;
    }

    public function getFolder($folder_id = null)
    {
Rasmus Fuhse's avatar
Rasmus Fuhse committed
        $folder_path = explode("/", $folder_id);
        array_pop($folder_path);
        $parent_folder_id = implode("/", $folder_path);
Rasmus Fuhse's avatar
Rasmus Fuhse committed
        $folder = new OwncloudFolder(array(
Rasmus Fuhse's avatar
Rasmus Fuhse committed
            'id' => $folder_id,
Rasmus Fuhse's avatar
Rasmus Fuhse committed
            'parent_id' => $parent_folder_id,
            'range_type' => $this->getPluginId()
Rasmus Fuhse's avatar
Rasmus Fuhse committed
        ), $this->getPluginId());
        return $folder;
Rasmus Fuhse's avatar
Rasmus Fuhse committed
    }

Rasmus Fuhse's avatar
Rasmus Fuhse committed
    public function download_action()
    {
        $args = func_get_args();
        $file_id = implode("/", $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);
Rasmus Fuhse's avatar
Rasmus Fuhse committed
        $info = curl_getinfo($r);
Rasmus Fuhse's avatar
Rasmus Fuhse committed
        curl_close($r);

Rasmus Fuhse's avatar
Rasmus Fuhse committed
        header("Content-Length: ".$info['size_download']);
        header("Content-Type: ".$info['content_type']);
Rasmus Fuhse's avatar
Rasmus Fuhse committed
        echo $content;
        return;
    }

Rasmus Fuhse's avatar
Rasmus Fuhse committed
    public function getPreparedFile($file_id)
    {
Rasmus Fuhse's avatar
Rasmus Fuhse committed
        $folder_path = explode("/", $file_id);
Rasmus Fuhse's avatar
Rasmus Fuhse committed
        $filename = array_pop($folder_path);
Rasmus Fuhse's avatar
Rasmus Fuhse committed
        $folder_id = implode("/", $folder_path);
        array_pop($folder_path);
        $parent_folder_id = implode("/", $folder_path);

        $folder = new OwncloudFolder(array(
            'id' => $folder_id,
Rasmus Fuhse's avatar
Rasmus Fuhse committed
            'parent_id' => $parent_folder_id,
            'range_type' => $this->getPluginId()
Rasmus Fuhse's avatar
Rasmus Fuhse committed
        ), $this->getPluginId());

        $file = new FileRef();
Rasmus Fuhse's avatar
Rasmus Fuhse committed
        $file->id = $file_id;
Rasmus Fuhse's avatar
Rasmus Fuhse committed
        $file->foldertype = $folder;
Rasmus Fuhse's avatar
Rasmus Fuhse committed
        $file->name = $filename;
Rasmus Fuhse's avatar
Rasmus Fuhse committed

        return $file;
Rasmus Fuhse's avatar
Rasmus Fuhse committed
    }

    public function filesystemConfigurationURL()
    {
        return PluginEngine::getURL($this, array(), "configure/myarea");
    }

Rasmus Fuhse's avatar
Rasmus Fuhse committed
    public function hasSearch()
    {
Rasmus Fuhse's avatar
Rasmus Fuhse committed
        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;
    }

}