first work on Fork origin display; works for local forks
[phorkie.git] / src / phorkie / Repository / Remote.php
diff --git a/src/phorkie/Repository/Remote.php b/src/phorkie/Repository/Remote.php
new file mode 100644 (file)
index 0000000..4f5034c
--- /dev/null
@@ -0,0 +1,94 @@
+<?php
+namespace phorkie;
+
+class Repository_Remote
+{
+    protected $arConfig;
+    protected $name;
+
+    public function __construct($name, $arConfig)
+    {
+        $this->name = $name;
+        $this->arConfig = $arConfig;
+    }
+
+
+    public function getTitle()
+    {
+        if (isset($this->arConfig['title'])) {
+            return $this->arConfig['title'];
+        }
+        if ($this->isLocal()) {
+            $local = $this->getLocalRepository();
+            if ($local !== null) {
+                return $local->getTitle();
+            }
+            return 'deleted local paste';
+        }
+
+        return 'untitled repository';
+    }
+
+    public function getCloneURL()
+    {
+        if ($this->isLocal()) {
+            $local = $this->getLocalRepository();
+            if ($local !== null) {
+                return $local->getCloneURL();
+            }
+        }
+
+        return $this->arConfig['url'];
+    }
+
+    public function getWebURL()
+    {
+        if (isset($this->arConfig['homepage'])) {
+            return $this->arConfig['homepage'];
+        }
+
+        if ($this->isLocal()) {
+            $local = $this->getLocalRepository();
+            if ($local !== null) {
+                return $local->getLink('display');
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Tells you if this remote repository is a paste on the local server
+     *
+     * @return boolean True of false
+     */
+    public function isLocal()
+    {
+        return isset($this->arConfig['url'])
+            && $this->arConfig['url']{0} == '/';
+    }
+
+    /**
+     * If this remote is a local paste, then we'll get the repository object
+     * returned
+     *
+     * @return Repository Repository object or NULL
+     */
+    public function getLocalRepository()
+    {
+        if (!file_exists($this->arConfig['url'] . '/config')) {
+            return null;
+        }
+        $dir = basename($this->arConfig['url']);
+        if (substr($dir, -4) != '.git') {
+            //phorks are bare repositories "123.git"
+            return null;
+        }
+        $repo = new Repository();
+        $repo->loadById(substr($dir, 0, -4));
+        return $repo;
+    }
+
+}
+
+?>