diff --git a/mod/friendica.php b/mod/friendica.php
deleted file mode 100644
index 4942e4c8f..000000000
--- a/mod/friendica.php
+++ /dev/null
@@ -1,141 +0,0 @@
-argv[1]) && ($a->argv[1] == "json")) {
- $register_policies = [
- Register::CLOSED => 'REGISTER_CLOSED',
- Register::APPROVE => 'REGISTER_APPROVE',
- Register::OPEN => 'REGISTER_OPEN'
- ];
-
- $register_policy_int = intval(Config::get('config', 'register_policy'));
- if ($register_policy_int !== Register::CLOSED && Config::get('config', 'invitation_only')) {
- $register_policy = 'REGISTER_INVITATION';
- } else {
- $register_policy = $register_policies[$register_policy_int];
- }
-
- $condition = [];
- $admin = false;
- if (!empty(Config::get('config', 'admin_nickname'))) {
- $condition['nickname'] = Config::get('config', 'admin_nickname');
- }
- if (!empty(Config::get('config', 'admin_email'))) {
- $adminlist = explode(",", str_replace(" ", "", Config::get('config', 'admin_email')));
- $condition['email'] = $adminlist[0];
- $administrator = DBA::selectFirst('user', ['username', 'nickname'], $condition);
- if (DBA::isResult($administrator)) {
- $admin = [
- 'name' => $administrator['username'],
- 'profile'=> System::baseUrl() . '/profile/' . $administrator['nickname'],
- ];
- }
- }
-
- $visible_addons = Addon::getVisibleList();
-
- Config::load('feature_lock');
- $locked_features = [];
- $featureLock = Config::get('config', 'feature_lock');
- if (isset($featureLock)) {
- foreach ($featureLock as $k => $v) {
- if ($k === 'config_loaded') {
- continue;
- }
-
- $locked_features[$k] = intval($v);
- }
- }
-
- $data = [
- 'version' => FRIENDICA_VERSION,
- 'url' => System::baseUrl(),
- 'addons' => $visible_addons,
- 'locked_features' => $locked_features,
- 'explicit_content' => (int)Config::get('system', 'explicit_content', false),
- 'language' => Config::get('system','language'),
- 'register_policy' => $register_policy,
- 'admin' => $admin,
- 'site_name' => Config::get('config', 'sitename'),
- 'platform' => FRIENDICA_PLATFORM,
- 'info' => Config::get('config', 'info'),
- 'no_scrape_url' => System::baseUrl().'/noscrape'
- ];
-
- header('Content-type: application/json; charset=utf-8');
- echo json_encode($data);
- exit();
- }
-}
-
-function friendica_content(App $a)
-{
- $o = '
Friendica
' . PHP_EOL;
- $o .= '';
- $o .= L10n::t('This is Friendica, version %s that is running at the web location %s. The database version is %s, the post update version is %s.',
- '' . FRIENDICA_VERSION . '', System::baseUrl(), '' . DB_UPDATE_VERSION . '',
- '' . Config::get("system", "post_update_version") . '');
- $o .= '
' . PHP_EOL;
-
- $o .= '';
- $o .= L10n::t('Please visit Friendi.ca to learn more about the Friendica project.') . PHP_EOL;
- $o .= '
' . PHP_EOL;
-
- $o .= '';
- $o .= L10n::t('Bug reports and issues: please visit') . ' ' . ''.L10n::t('the bugtracker at github').'';
- $o .= '
' . PHP_EOL;
- $o .= '';
- $o .= L10n::t('Suggestions, praise, etc. - please email "info" at "friendi - dot - ca');
- $o .= '
' . PHP_EOL;
-
- $visible_addons = Addon::getVisibleList();
- if (count($visible_addons)) {
- $o .= '' . L10n::t('Installed addons/apps:') . '
' . PHP_EOL;
- $sorted = $visible_addons;
- $s = '';
- sort($sorted);
- foreach ($sorted as $p) {
- if (strlen($p)) {
- if (strlen($s)) {
- $s .= ', ';
- }
- $s .= $p;
- }
- }
- $o .= '' . $s . '
' . PHP_EOL;
- } else {
- $o .= '' . L10n::t('No installed addons/apps') . '
' . PHP_EOL;
- }
-
- if (Config::get('system', 'tosdisplay'))
- {
- $o .= ''.L10n::t('Read about the Terms of Service of this node.', System::baseurl()).'
';
- }
-
- $blocklist = Config::get('system', 'blocklist', []);
- if (!empty($blocklist)) {
- $o .= '' . L10n::t('On this server the following remote servers are blocked.') . '
' . PHP_EOL;
- $o .= '
' . L10n::t('Blocked domain') . ' | ' . L10n::t('Reason for the block') . ' |
' . PHP_EOL;
- foreach ($blocklist as $b) {
- $o .= '' . $b['domain'] .' | ' . $b['reason'] . ' |
' . PHP_EOL;
- }
- $o .= '
' . PHP_EOL;
- }
-
- Hook::callAll('about_hook', $o);
-
- return $o;
-}
diff --git a/src/App/Router.php b/src/App/Router.php
index 6612936e1..b1d8d3ade 100644
--- a/src/App/Router.php
+++ b/src/App/Router.php
@@ -94,6 +94,7 @@ class Router
$collector->addRoute(['GET'], '/{id:\d+}[/posts|conversations]', Module\Contact::class);
});
$this->routeCollector->addRoute(['GET'], '/credits', Module\Credits::class);
+ $this->routeCollector->addRoute(['GET'], '/directory', Module\Directory::class);
$this->routeCollector->addGroup('/feed', function (RouteCollector $collector) {
$collector->addRoute(['GET'], '/{nickname}', Module\Feed::class);
$collector->addRoute(['GET'], '/{nickname}/posts', Module\Feed::class);
@@ -101,11 +102,11 @@ class Router
$collector->addRoute(['GET'], '/{nickname}/replies', Module\Feed::class);
$collector->addRoute(['GET'], '/{nickname}/activity', Module\Feed::class);
});
- $this->routeCollector->addRoute(['GET'], '/directory', Module\Directory::class);
$this->routeCollector->addRoute(['GET'], '/feedtest', Module\Feedtest::class);
$this->routeCollector->addRoute(['GET'], '/filer[/{id:\d+}]', Module\Filer::class);
$this->routeCollector->addRoute(['GET'], '/followers/{owner}', Module\Followers::class);
$this->routeCollector->addRoute(['GET'], '/following/{owner}', Module\Following::class);
+ $this->routeCollector->addRoute(['GET'], '/friendica[/json]', Module\Friendica::class);
$this->routeCollector->addGroup('/group', function (RouteCollector $collector) {
$collector->addRoute(['GET', 'POST'], '[/]', Module\Group::class);
$collector->addRoute(['GET', 'POST'], '/{group:\d+}', Module\Group::class);
diff --git a/src/Model/User.php b/src/Model/User.php
index c575b44d3..8945faeae 100644
--- a/src/Model/User.php
+++ b/src/Model/User.php
@@ -129,6 +129,21 @@ class User
}
}
+ /**
+ * Get a user based on it's email
+ *
+ * @param string $email
+ * @param array $fields
+ *
+ * @return array|boolean User record if it exists, false otherwise
+ *
+ * @throws Exception
+ */
+ public static function getByEmail($email, array $fields = [])
+ {
+ return DBA::selectFirst('user', $fields, ['email' => $email]);
+ }
+
/**
* @brief Get owner data by user id
*
diff --git a/src/Module/Friendica.php b/src/Module/Friendica.php
new file mode 100644
index 000000000..067a986a2
--- /dev/null
+++ b/src/Module/Friendica.php
@@ -0,0 +1,162 @@
+getConfig();
+
+ $visibleAddonList = Addon::getVisibleList();
+ if (!empty($visibleAddonList)) {
+
+ $sorted = $visibleAddonList;
+ sort($sorted);
+
+ $sortedAddonList = '';
+
+ foreach ($sorted as $addon) {
+ if (strlen($addon)) {
+ if (strlen($sortedAddonList)) {
+ $sortedAddonList .= ', ';
+ }
+ $sortedAddonList .= $addon;
+ }
+ }
+ $addon = [
+ 'title' => L10n::t('Installed addons/apps:'),
+ 'list' => $sortedAddonList,
+ ];
+ } else {
+ $addon = [
+ 'title' => L10n::t('No installed addons/apps'),
+ ];
+ }
+
+ $tos = ($config->get('system', 'tosdisplay')) ?
+ L10n::t('Read about the Terms of Service of this node.', $app->getBaseURL()) :
+ '';
+
+ $blockList = $config->get('system', 'blocklist');
+
+ if (!empty($blockList)) {
+ $blocked = [
+ 'title' => L10n::t('On this server the following remote servers are blocked.'),
+ 'header' => [
+ L10n::t('Blocked domain'),
+ L10n::t('Reason for the block'),
+ ],
+ 'list' => $blockList,
+ ];
+ } else {
+ $blocked = null;
+ }
+
+ $hooked = '';
+
+ Hook::callAll('about_hook', $hooked);
+
+ $tpl = Renderer::getMarkupTemplate('friendica.tpl');
+
+ return Renderer::replaceMacros($tpl, [
+ 'about' => L10n::t('This is Friendica, version %s that is running at the web location %s. The database version is %s, the post update version is %s.',
+ '' . FRIENDICA_VERSION . '',
+ $app->getBaseURL(),
+ '' . DB_UPDATE_VERSION . '',
+ '' . $config->get("system", "post_update_version") . ''),
+ 'friendica' => L10n::t('Please visit Friendi.ca to learn more about the Friendica project.'),
+ 'bugs' => L10n::t('Bug reports and issues: please visit') . ' ' . '' . L10n::t('the bugtracker at github') . '',
+ 'info' => L10n::t('Suggestions, praise, etc. - please email "info" at "friendi - dot - ca'),
+
+ 'visible_addons' => $addon,
+ 'tos' => $tos,
+ 'block_list' => $blocked,
+ 'hooked' => $hooked,
+ ]);
+ }
+
+ public static function rawContent()
+ {
+ $app = self::getApp();
+
+ // @TODO: Replace with parameter from router
+ if ($app->argc <= 1 || ($app->argv[1] !== 'json')) {
+ return;
+ }
+
+ $config = $app->getConfig();
+
+ $register_policies = [
+ Register::CLOSED => 'REGISTER_CLOSED',
+ Register::APPROVE => 'REGISTER_APPROVE',
+ Register::OPEN => 'REGISTER_OPEN'
+ ];
+
+ $register_policy_int = intval($config->get('config', 'register_policy'));
+ if ($register_policy_int !== Register::CLOSED && $config->get('config', 'invitation_only')) {
+ $register_policy = 'REGISTER_INVITATION';
+ } else {
+ $register_policy = $register_policies[$register_policy_int];
+ }
+
+ $condition = [];
+ $admin = false;
+ if (!empty($config->get('config', 'admin_nickname'))) {
+ $condition['nickname'] = $config->get('config', 'admin_nickname');
+ }
+ if (!empty($config->get('config', 'admin_email'))) {
+ $adminList = explode(',', str_replace(' ', '', $config->get('config', 'admin_email')));
+ $condition['email'] = $adminList[0];
+ $administrator = User::getByEmail($adminList[0], ['username', 'nickname']);
+ if (!empty($administrator)) {
+ $admin = [
+ 'name' => $administrator['username'],
+ 'profile' => $app->getBaseURL() . '/profile/' . $administrator['nickname'],
+ ];
+ }
+ }
+
+ $visible_addons = Addon::getVisibleList();
+
+ $config->load('feature_lock');
+ $locked_features = [];
+ $featureLocks = $config->get('config', 'feature_lock');
+ if (isset($featureLocks)) {
+ foreach ($featureLocks as $feature => $lock) {
+ if ($feature === 'config_loaded') {
+ continue;
+ }
+
+ $locked_features[$feature] = intval($lock);
+ }
+ }
+
+ $data = [
+ 'version' => FRIENDICA_VERSION,
+ 'url' => $app->getBaseURL(),
+ 'addons' => $visible_addons,
+ 'locked_features' => $locked_features,
+ 'explicit_content' => intval($config->get('system', 'explicit_content', 0)),
+ 'language' => $config->get('system', 'language'),
+ 'register_policy' => $register_policy,
+ 'admin' => $admin,
+ 'site_name' => $config->get('config', 'sitename'),
+ 'platform' => FRIENDICA_PLATFORM,
+ 'info' => $config->get('config', 'info'),
+ 'no_scrape_url' => $app->getBaseURL() . '/noscrape',
+ ];
+
+ header('Content-type: application/json; charset=utf-8');
+ echo json_encode($data);
+ exit();
+ }
+}
diff --git a/view/templates/friendica.tpl b/view/templates/friendica.tpl
new file mode 100644
index 000000000..0fa9eac5b
--- /dev/null
+++ b/view/templates/friendica.tpl
@@ -0,0 +1,45 @@
+Friendica
+
+{{$about nofilter}}
+
+{{$friendica nofilter}}
+
+{{$bugs nofilter}}
+
+{{$info nofilter}}
+
+
+{{$visible_addons.title nofilter}}
+{{if $visible_addons.list}}
+{{$visible_addons.list nofilter}}
+{{/if}}
+
+{{if $tos}}
+{{$tos}}
+{{/if}}
+
+{{if $block_list}}
+
+
{{$block_list.title nofilter}}
+
+
+
+
+ {{$block_list.header[0] nofilter}} |
+ {{$block_list.header[1] nofilter}} |
+
+
+
+ {{foreach $block_list.list as $blocked}}
+
+ {{$blocked.domain nofilter}} |
+ {{$blocked.reason nofilter}} |
+
+ {{/foreach}}
+
+
+
+
+{{/if}}
+
+{{$hooked}}