summaryrefslogtreecommitdiffstats
path: root/lib/private
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2014-11-24 16:24:26 +0100
committerThomas Müller <thomas.mueller@tmit.eu>2014-11-25 11:53:28 +0100
commitc503ecd54495167f97b6602e5b41c1cf95467395 (patch)
treef0d8dfa42dda7c4d8c2e5e64d8ec19204c7fc24e /lib/private
parent6fb2477fb75d4c982a1568e2392d17fd7cc2fd4b (diff)
downloadnextcloud-server-c503ecd54495167f97b6602e5b41c1cf95467395.tar.gz
nextcloud-server-c503ecd54495167f97b6602e5b41c1cf95467395.zip
Introduce app info xml parser including basic unit test - necessary for #10777
Diffstat (limited to 'lib/private')
-rw-r--r--lib/private/app.php59
-rw-r--r--lib/private/app/infoparser.php92
-rw-r--r--lib/private/helper.php5
-rw-r--r--lib/private/urlgenerator.php12
4 files changed, 108 insertions, 60 deletions
diff --git a/lib/private/app.php b/lib/private/app.php
index bc9ca0351ea..8e36d43bfb1 100644
--- a/lib/private/app.php
+++ b/lib/private/app.php
@@ -635,63 +635,10 @@ class OC_App {
}
$file = self::getAppPath($appId) . '/appinfo/info.xml';
}
- $data = array();
- if (!file_exists($file)) {
- return null;
- }
- $content = @file_get_contents($file);
- if (!$content) {
- return null;
- }
- $xml = new SimpleXMLElement($content);
- $data['info'] = array();
- $data['remote'] = array();
- $data['public'] = array();
- foreach ($xml->children() as $child) {
- /**
- * @var $child SimpleXMLElement
- */
- if ($child->getName() == 'remote') {
- foreach ($child->children() as $remote) {
- /**
- * @var $remote SimpleXMLElement
- */
- $data['remote'][$remote->getName()] = (string)$remote;
- }
- } elseif ($child->getName() == 'public') {
- foreach ($child->children() as $public) {
- /**
- * @var $public SimpleXMLElement
- */
- $data['public'][$public->getName()] = (string)$public;
- }
- } elseif ($child->getName() == 'types') {
- $data['types'] = array();
- foreach ($child->children() as $type) {
- /**
- * @var $type SimpleXMLElement
- */
- $data['types'][] = $type->getName();
- }
- } elseif ($child->getName() == 'description') {
- $xml = (string)$child->asXML();
- $data[$child->getName()] = substr($xml, 13, -14); //script <description> tags
- } elseif ($child->getName() == 'documentation') {
- foreach ($child as $subChild) {
- $url = (string) $subChild;
-
- // If it is not an absolute URL we assume it is a key
- // i.e. admin-ldap will get converted to go.php?to=admin-ldap
- if(!\OC::$server->getHTTPHelper()->isHTTPURL($url)) {
- $url = OC_Helper::linkToDocs($url);
- }
- $data["documentation"][$subChild->getName()] = $url;
- }
- } else {
- $data[$child->getName()] = (string)$child;
- }
- }
+ $parser = new \OC\App\InfoParser(\OC::$server->getHTTPHelper(), \OC::$server->getURLGenerator());
+ $data = $parser->parse($file);
+
self::$appInfo[$appId] = $data;
return $data;
diff --git a/lib/private/app/infoparser.php b/lib/private/app/infoparser.php
new file mode 100644
index 00000000000..908fcd82636
--- /dev/null
+++ b/lib/private/app/infoparser.php
@@ -0,0 +1,92 @@
+<?php
+ /**
+ * @author Thomas Müller
+ * @copyright 2014 Thomas Müller deepdiver@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\App;
+
+use OCP\IURLGenerator;
+use SimpleXMLElement;
+
+class InfoParser {
+
+ /**
+ * @param \OC\HTTPHelper $httpHelper
+ * @param IURLGenerator $urlGenerator
+ */
+ public function __construct(\OC\HTTPHelper $httpHelper, IURLGenerator $urlGenerator) {
+ $this->httpHelper = $httpHelper;
+ $this->urlGenerator = $urlGenerator;
+ }
+
+ /**
+ * @param string $file
+ * @return null|string
+ */
+ public function parse($file) {
+ if (!file_exists($file)) {
+ return null;
+ }
+
+ $content = @file_get_contents($file);
+ if (!$content) {
+ return null;
+ }
+ $xml = new SimpleXMLElement($content);
+ $data['info'] = array();
+ $data['remote'] = array();
+ $data['public'] = array();
+ foreach ($xml->children() as $child) {
+ /**
+ * @var $child SimpleXMLElement
+ */
+ if ($child->getName() == 'remote') {
+ foreach ($child->children() as $remote) {
+ /**
+ * @var $remote SimpleXMLElement
+ */
+ $data['remote'][$remote->getName()] = (string)$remote;
+ }
+ } elseif ($child->getName() == 'public') {
+ foreach ($child->children() as $public) {
+ /**
+ * @var $public SimpleXMLElement
+ */
+ $data['public'][$public->getName()] = (string)$public;
+ }
+ } elseif ($child->getName() == 'types') {
+ $data['types'] = array();
+ foreach ($child->children() as $type) {
+ /**
+ * @var $type SimpleXMLElement
+ */
+ $data['types'][] = $type->getName();
+ }
+ } elseif ($child->getName() == 'description') {
+ $xml = (string)$child->asXML();
+ $data[$child->getName()] = substr($xml, 13, -14); //script <description> tags
+ } elseif ($child->getName() == 'documentation') {
+ foreach ($child as $subChild) {
+ $url = (string)$subChild;
+
+ // If it is not an absolute URL we assume it is a key
+ // i.e. admin-ldap will get converted to go.php?to=admin-ldap
+ if (!$this->httpHelper->isHTTPURL($url)) {
+ $url = $this->urlGenerator->linkToDocs($url);
+ }
+
+ $data["documentation"][$subChild->getName()] = $url;
+ }
+ } else {
+ $data[$child->getName()] = (string)$child;
+ }
+ }
+
+ return $data;
+ }
+}
diff --git a/lib/private/helper.php b/lib/private/helper.php
index be448b8ff9b..d43eefcdc52 100644
--- a/lib/private/helper.php
+++ b/lib/private/helper.php
@@ -58,12 +58,11 @@ class OC_Helper {
}
/**
- * @param $key
+ * @param string $key
* @return string url to the online documentation
*/
public static function linkToDocs($key) {
- $theme = new OC_Defaults();
- return $theme->buildDocLinkToKey($key);
+ return OC::$server->getURLGenerator()->linkToDocs($key);
}
/**
diff --git a/lib/private/urlgenerator.php b/lib/private/urlgenerator.php
index e50e9eed6af..d263d25aeef 100644
--- a/lib/private/urlgenerator.php
+++ b/lib/private/urlgenerator.php
@@ -8,6 +8,7 @@
*/
namespace OC;
+use OC_Defaults;
use OCP\IURLGenerator;
use RuntimeException;
@@ -156,7 +157,7 @@ class URLGenerator implements IURLGenerator {
/**
* Makes an URL absolute
- * @param string $url the url in the owncloud host
+ * @param string $url the url in the ownCloud host
* @return string the absolute version of the url
*/
public function getAbsoluteURL($url) {
@@ -173,4 +174,13 @@ class URLGenerator implements IURLGenerator {
return \OC_Request::serverProtocol() . '://' . \OC_Request::serverHost(). $webRoot . $separator . $url;
}
+
+ /**
+ * @param string $key
+ * @return string url to the online documentation
+ */
+ public function linkToDocs($key) {
+ $theme = new OC_Defaults();
+ return $theme->buildDocLinkToKey($key);
+ }
}