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 .= '' . PHP_EOL; - foreach ($blocklist as $b) { - $o .= '' . PHP_EOL; - } - $o .= '
' . L10n::t('Blocked domain') . '' . L10n::t('Reason for the block') . '
' . $b['domain'] .'' . $b['reason'] . '
' . 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}}

+
+ + + + + + + + + {{foreach $block_list.list as $blocked}} + + + + + {{/foreach}} + +
{{$block_list.header[0] nofilter}}{{$block_list.header[1] nofilter}}
{{$blocked.domain nofilter}}{{$blocked.reason nofilter}}
+
+ +{{/if}} + +{{$hooked}}