* @author Jan-Christoph Borchardt * @author Joas Schilling * @author Jörn Friedrich Dreyer * @author Lukas Reschke * @author Morris Jobke * @author Pascal de Bruijn * @author Philipp Schaffrath * @author Robin Appelman * @author Robin McCorkell * @author scolebrook * @author Thomas Müller * @author Volkan Gezer * * @copyright Copyright (c) 2018, ownCloud GmbH * @license AGPL-3.0 * * This code is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License, version 3, * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License, version 3, * along with this program. If not, see * */ class OC_Defaults { private $theme; private $l; private $defaultEntity; private $defaultName; private $defaultTitle; private $defaultBaseUrl; private $defaultSyncClientUrl; private $defaultiOSClientUrl; private $defaultiTunesAppId; private $defaultAndroidClientUrl; private $defaultDocBaseUrl; private $defaultSlogan; private $defaultLogoClaim; private $defaultMailHeaderColor; /** * @var IConfig */ private $config; public function __construct() { $this->l = \OC::$server->getL10N('lib'); $this->config = \OC::$server->getConfig(); $this->defaultEntity = 'ownCloud'; /* e.g. company name, used for footers and copyright notices */ $this->defaultName = 'ownCloud'; /* short name, used when referring to the software */ $this->defaultTitle = 'ownCloud'; /* can be a longer name, for titles */ $this->defaultBaseUrl = 'https://owncloud.com'; $this->defaultSyncClientUrl = 'https://owncloud.com/desktop-app/'; $this->defaultiOSClientUrl = 'https://apps.apple.com/app/id1359583808'; $this->defaultiTunesAppId = '1359583808'; $this->defaultAndroidClientUrl = 'https://play.google.com/store/apps/details?id=com.owncloud.android'; $this->defaultDocBaseUrl = 'https://doc.owncloud.com'; $this->defaultSlogan = $this->l->t('A safe home for all your data'); $this->defaultLogoClaim = ''; $this->defaultMailHeaderColor = '#041e42'; /* header color of mail notifications */ $themePath = OC_Util::getTheme()->getDirectory(); $defaultsPath = OC::$SERVERROOT . '/' . $themePath . '/defaults.php'; if (\file_exists($defaultsPath)) { // prevent defaults.php from printing output \ob_start(); require_once $defaultsPath; \ob_end_clean(); if (\class_exists('OC_Theme')) { $this->theme = new OC_Theme(); } } } /** * @param string $method * @return bool */ private function themeExist($method) { if (isset($this->theme) && \method_exists($this->theme, $method)) { return true; } return false; } /** * Returns the base URL * @return string URL */ public function getBaseUrl() { if ($this->themeExist('getBaseUrl')) { return $this->theme->getBaseUrl(); } else { return $this->defaultBaseUrl; } } /** * Returns the URL where the sync clients are listed * @return string URL */ public function getSyncClientUrl() { if ($this->themeExist('getSyncClientUrl')) { return $this->theme->getSyncClientUrl(); } else { return $this->defaultSyncClientUrl; } } /** * Returns the URL to the App Store for the iOS Client * @return string URL */ public function getiOSClientUrl() { if ($this->themeExist('getiOSClientUrl')) { /* @phan-suppress-next-line PhanUndeclaredMethod */ return $this->theme->getiOSClientUrl(); } else { return $this->defaultiOSClientUrl; } } /** * Returns the AppId for the App Store for the iOS Client * @return string AppId */ public function getiTunesAppId() { if ($this->themeExist('getiTunesAppId')) { /* @phan-suppress-next-line PhanUndeclaredMethod */ return $this->theme->getiTunesAppId(); } else { return $this->defaultiTunesAppId; } } /** * Returns the URL to Google Play for the Android Client * @return string URL */ public function getAndroidClientUrl() { if ($this->themeExist('getAndroidClientUrl')) { /* @phan-suppress-next-line PhanUndeclaredMethod */ return $this->theme->getAndroidClientUrl(); } else { return $this->defaultAndroidClientUrl; } } /** * Returns the documentation URL * @return string URL */ public function getDocBaseUrl() { if ($this->themeExist('getDocBaseUrl')) { return $this->theme->getDocBaseUrl(); } else { return $this->defaultDocBaseUrl; } } /** * Returns the title * @return string title */ public function getTitle() { if ($this->themeExist('getTitle')) { return $this->theme->getTitle(); } else { return $this->defaultTitle; } } /** * Returns the short name of the software * @return string title */ public function getName() { if ($this->themeExist('getName')) { return $this->theme->getName(); } else { return $this->defaultName; } } /** * Returns the short name of the software containing HTML strings * @return string title */ public function getHTMLName() { if ($this->themeExist('getHTMLName')) { return $this->theme->getHTMLName(); } else { return $this->defaultName; } } /** * Returns entity (e.g. company name) - used for footer, copyright * @return string entity name */ public function getEntity() { if ($this->themeExist('getEntity')) { return $this->theme->getEntity(); } else { return $this->defaultEntity; } } /** * Returns slogan * @return string slogan */ public function getSlogan() { if ($this->themeExist('getSlogan')) { return $this->theme->getSlogan(); } else { return $this->defaultSlogan; } } /** * Returns logo claim * @return string logo claim */ public function getLogoClaim() { if ($this->themeExist('getLogoClaim')) { return $this->theme->getLogoClaim(); } else { return $this->defaultLogoClaim; } } /** * Returns short version of the footer * @return string short footer */ public function getShortFooter() { if ($this->themeExist('getShortFooter')) { $footer = $this->theme->getShortFooter(); } else { $footer = '' . $this->getEntity() . ''; $footer .= ' – ' . $this->getSlogan(); if ($this->getImprintUrl() !== '') { $footer .= ' | ' . $this->l->t('Imprint') . ''; } if ($this->getPrivacyPolicyUrl() !== '') { $footer .= ' | '. $this->l->t('Privacy Policy') .''; } } return $footer; } /** * Returns long version of the footer * @return string long footer */ public function getLongFooter() { if ($this->themeExist('getLongFooter')) { $footer = $this->theme->getLongFooter(); } else { $footer = $this->getShortFooter(); } return $footer; } /** * @param string $key * @param string|null $ocVersion ownCloud version to look for in the docs. * Defaults to 'latest'. The documentation site publishes the current * stable release only under /server/latest/ (older minor versions * such as 10.16 have no dedicated path), so a concrete version would * 404. Callers may still pass an explicit published version. */ public function buildDocLinkToKey($key, $ocVersion = null) { if ($this->themeExist('buildDocLinkToKey')) { return $this->theme->buildDocLinkToKey($key); } $version = $ocVersion ?: 'latest'; return $this->getDocBaseUrl() . '/server/' . $version . '/go.php?to=' . $key; } /** * Returns mail header color * @return string */ public function getMailHeaderColor() { if ($this->themeExist('getMailHeaderColor')) { return $this->theme->getMailHeaderColor(); } else { return $this->defaultMailHeaderColor; } } /** * Returns URL to imprint * @return string */ public function getImprintUrl() { try { return $this->config->getAppValue('core', 'legal.imprint_url', ''); } catch (\Exception $e) { return ''; } } /** * Returns URL to Privacy Policy * @return string */ public function getPrivacyPolicyUrl() { try { return $this->config->getAppValue('core', 'legal.privacy_policy_url', ''); } catch (\Exception $e) { return ''; } } /** * @internal Used for unit tests * * @param IConfig $config */ public function setConfig(IConfig $config) { $this->config = $config; } }