diff options
Diffstat (limited to 'Zotlabs/Storage')
-rw-r--r-- | Zotlabs/Storage/Browser.php | 9 | ||||
-rw-r--r-- | Zotlabs/Storage/GitRepo.php | 159 |
2 files changed, 6 insertions, 162 deletions
diff --git a/Zotlabs/Storage/Browser.php b/Zotlabs/Storage/Browser.php index e7f71c8c8..6ea6031d3 100644 --- a/Zotlabs/Storage/Browser.php +++ b/Zotlabs/Storage/Browser.php @@ -5,6 +5,7 @@ namespace Zotlabs\Storage; use Sabre\DAV; use App; use Zotlabs\Lib\Config; +use Zotlabs\Lib\Text; /** * @brief Provides a DAV frontend for the webbrowser. @@ -260,13 +261,16 @@ class Browser extends DAV\Browser\Plugin { } } + $display_path_encoded = Text::rawurlencode_parts($data['display_path']); + $href_encoded = Text::rawurlencode_parts($href); + // put the array for this file together $ft['attach_id'] = $id; // $ft['icon'] = $icon; $ft['photo_icon'] = $photo_icon; $ft['is_creator'] = $is_creator; - $ft['rel_path'] = (($data) ? '/cloud/' . $nick .'/' . $data['display_path'] : $href); - $ft['full_path'] = z_root() . (($data) ? '/cloud/' . $nick .'/' . $data['display_path'] : $href); + $ft['rel_path'] = (($data) ? '/cloud/' . $nick .'/' . $display_path_encoded : $href_encoded); + $ft['full_path'] = z_root() . (($data) ? '/cloud/' . $nick .'/' . $display_path_encoded : $href_encoded); $ft['name'] = $name; $ft['type'] = $type; $ft['size'] = $size; @@ -399,7 +403,6 @@ class Browser extends DAV\Browser\Plugin { '$allow_gid' => ((isset($channel_acl['allow_gid'])) ? acl2json($channel_acl['allow_gid']) : ''), '$deny_cid' => ((isset($channel_acl['deny_cid'])) ? acl2json($channel_acl['deny_cid']) : ''), '$deny_gid' => ((isset($channel_acl['deny_gid'])) ? acl2json($channel_acl['deny_gid']) : ''), - '$is_owner' => $is_owner, '$select_all_label' => t('Select All'), '$bulk_actions_label' => t('Bulk Actions'), '$adjust_permissions_label' => t('Adjust Permissions'), diff --git a/Zotlabs/Storage/GitRepo.php b/Zotlabs/Storage/GitRepo.php deleted file mode 100644 index 306abc0ba..000000000 --- a/Zotlabs/Storage/GitRepo.php +++ /dev/null @@ -1,159 +0,0 @@ -<?php - -namespace Zotlabs\Storage; - -use PHPGit\Git as PHPGit; - -require __DIR__ . '/../../library/PHPGit.autoload.php'; // Load PHPGit dependencies - -/** - * Wrapper class for PHPGit class for git repositories managed by Hubzilla - * - * @author Andrew Manning <andrewmanning@grid.reticu.li> - */ -class GitRepo { - - public $url = null; - public $name = null; - private $path = null; - private $channel = null; - public $git = null; - private $repoBasePath = null; - - function __construct($channel = 'sys', $url = null, $clone = false, $name = null, $path = null) { - - if ($channel === 'sys' && !is_site_admin()) { - logger('Only admin can use channel sys'); - return null; - } - - $this->repoBasePath = __DIR__ . '/../../store/git'; - $this->channel = $channel; - $this->git = new PHPGit(); - - // Allow custom path for repo in the case of , for example - if ($path) { - $this->path = $path; - } else { - $this->path = $this->repoBasePath . "/" . $this->channel . "/" . $this->name; - } - - if ($this->isValidGitRepoURL($url)) { - $this->url = $url; - } - - if ($name) { - $this->name = $name; - } else { - $this->name = $this->getRepoNameFromURL($url); - } - if (!$this->name) { - logger('Error creating GitRepo. No repo name found.'); - return null; - } - - if (is_dir($this->path)) { - // ignore the $url input if it exists - // TODO: Check if the path is either empty or is a valid git repo and error if not - $this->git->setRepository($this->path); - // TODO: get repo metadata - return; - } - - if ($this->url) { - // create the folder and clone the repo at url to that folder if $clone is true - if ($clone) { - if (mkdir($this->path, 0770, true)) { - $this->git->setRepository($this->path); - if (!$this->cloneRepo()) { - // TODO: throw error - logger('git clone failed: ' . json_encode($this->git)); - } - } else { - logger('git repo path could not be created: ' . json_encode($this->git)); - } - } - } - } - - public function initRepo() { - if(!$this->path) return false; - try { - return $this->git->init($this->path); - } catch (\PHPGit\Exception\GitException $ex) { - return false; - } - } - - public function pull() { - try { - $success = $this->git->pull(); - } catch (\PHPGit\Exception\GitException $ex) { - return false; - } - return $success; - } - - public function getRepoPath() { - return $this->path; - } - - public function setRepoPath($directory) { - if (is_dir($directory)) { - $this->path->$directory; - $this->git->setRepository($directory); - return true; - } - return false; - } - - public function setIdentity($user_name, $user_email) { - // setup user for commit messages - $this->git->config->set("user.name", $user_name, ['global' => false, 'system' => false]); - $this->git->config->set("user.email", $user_email, ['global' => false, 'system' => false]); - } - - public function cloneRepo() { - if (validate_url($this->url) && $this->isValidGitRepoURL($this->url) && is_dir($this->path)) { - return $this->git->clone($this->url, $this->path); - } - } - - public function probeRepo() { - $git = $this->git; - $repo = array(); - $repo['remote'] = $git->remote(); - $repo['branches'] = $git->branch(['all' => true]); - $repo['logs'] = $git->log(array('limit' => 50)); - return $repo; - } - - // Commit changes to the repo. Default is to stage all changes and commit everything. - public function commit($msg, $options = array()) { - try { - return $this->git->commit($msg, $options); - } catch (\PHPGit\Exception\GitException $ex) { - return false; - } - } - - public static function isValidGitRepoURL($url) { - if (validate_url($url) && strrpos(parse_url($url, PHP_URL_PATH), '.')) { - return true; - } else { - return false; - } - } - - public static function getRepoNameFromURL($url) { - $urlpath = parse_url($url, PHP_URL_PATH); - $lastslash = strrpos($urlpath, '/') + 1; - $gitext = strrpos($urlpath, '.'); - if ($gitext) { - return substr($urlpath, $lastslash, $gitext - $lastslash); - } else { - return null; - } - } - -} |