Move mod/friendica to src/Module/Friendica
authorPhilipp Holzer <admin@philipp.info>
Sat, 4 May 2019 08:05:21 +0000 (10:05 +0200)
committerPhilipp Holzer <admin@philipp.info>
Sat, 4 May 2019 08:14:29 +0000 (10:14 +0200)
mod/friendica.php [deleted file]
src/App/Router.php
src/Model/User.php
src/Module/Friendica.php [new file with mode: 0644]
view/templates/friendica.tpl [new file with mode: 0644]

diff --git a/mod/friendica.php b/mod/friendica.php
deleted file mode 100644 (file)
index 4942e4c..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-<?php
-/**
- * @file mod/friendica.php
- */
-
-use Friendica\App;
-use Friendica\Core\Addon;
-use Friendica\Core\Config;
-use Friendica\Core\Hook;
-use Friendica\Core\L10n;
-use Friendica\Core\System;
-use Friendica\Database\DBA;
-use Friendica\Module\Register;
-
-function friendica_init(App $a)
-{
-       if (!empty($a->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 = '<h1>Friendica</h1>' . PHP_EOL;
-       $o .= '<p>';
-       $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.',
-               '<strong>' . FRIENDICA_VERSION . '</strong>', System::baseUrl(), '<strong>' . DB_UPDATE_VERSION . '</strong>',
-               '<strong>' . Config::get("system", "post_update_version") . '</strong>');
-       $o .= '</p>' . PHP_EOL;
-
-       $o .= '<p>';
-       $o .= L10n::t('Please visit <a href="https://friendi.ca">Friendi.ca</a> to learn more about the Friendica project.') . PHP_EOL;
-       $o .= '</p>' . PHP_EOL;
-
-       $o .= '<p>';
-       $o .= L10n::t('Bug reports and issues: please visit') . ' ' . '<a href="https://github.com/friendica/friendica/issues?state=open">'.L10n::t('the bugtracker at github').'</a>';
-       $o .= '</p>' . PHP_EOL;
-       $o .= '<p>';
-       $o .= L10n::t('Suggestions, praise, etc. - please email "info" at "friendi - dot - ca');
-       $o .= '</p>' . PHP_EOL;
-
-       $visible_addons = Addon::getVisibleList();
-       if (count($visible_addons)) {
-               $o .= '<p>' . L10n::t('Installed addons/apps:') . '</p>' . PHP_EOL;
-               $sorted = $visible_addons;
-               $s = '';
-               sort($sorted);
-               foreach ($sorted as $p) {
-                       if (strlen($p)) {
-                               if (strlen($s)) {
-                                       $s .= ', ';
-                               }
-                               $s .= $p;
-                       }
-               }
-               $o .= '<div style="margin-left: 25px; margin-right: 25px; margin-bottom: 25px;">' . $s . '</div>' . PHP_EOL;
-       } else {
-               $o .= '<p>' . L10n::t('No installed addons/apps') . '</p>' . PHP_EOL;
-       }
-
-       if (Config::get('system', 'tosdisplay'))
-       {
-               $o .= '<p>'.L10n::t('Read about the <a href="%1$s/tos">Terms of Service</a> of this node.', System::baseurl()).'</p>';
-       }
-
-       $blocklist = Config::get('system', 'blocklist', []);
-       if (!empty($blocklist)) {
-               $o .= '<div id="about_blocklist"><p>' . L10n::t('On this server the following remote servers are blocked.') . '</p>' . PHP_EOL;
-               $o .= '<table class="table"><thead><tr><th>' . L10n::t('Blocked domain') . '</th><th>' . L10n::t('Reason for the block') . '</th></thead><tbody>' . PHP_EOL;
-               foreach ($blocklist as $b) {
-                       $o .= '<tr><td>' . $b['domain'] .'</td><td>' . $b['reason'] . '</td></tr>' . PHP_EOL;
-               }
-               $o .= '</tbody></table></div>' . PHP_EOL;
-       }
-
-       Hook::callAll('about_hook', $o);
-
-       return $o;
-}
index 6612936..b1d8d3a 100644 (file)
@@ -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);
index c575b44..8945fae 100644 (file)
@@ -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 (file)
index 0000000..067a986
--- /dev/null
@@ -0,0 +1,162 @@
+<?php
+
+namespace Friendica\Module;
+
+use Friendica\BaseModule;
+use Friendica\Core\Addon;
+use Friendica\Core\Hook;
+use Friendica\Core\L10n;
+use Friendica\Core\Renderer;
+use Friendica\Model\User;
+
+class Friendica extends BaseModule
+{
+       public static function content()
+       {
+               $app = self::getApp();
+               $config = $app->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 <a href="%1$s/tos">Terms of Service</a> 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.',
+                               '<strong>' . FRIENDICA_VERSION . '</strong>',
+                               $app->getBaseURL(),
+                               '<strong>' . DB_UPDATE_VERSION . '</strong>',
+                               '<strong>' . $config->get("system", "post_update_version") . '</strong>'),
+                       'friendica' => L10n::t('Please visit <a href="https://friendi.ca">Friendi.ca</a> to learn more about the Friendica project.'),
+                       'bugs'      => L10n::t('Bug reports and issues: please visit') . ' ' . '<a href="https://github.com/friendica/friendica/issues?state=open">' . L10n::t('the bugtracker at github') . '</a>',
+                       '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 (file)
index 0000000..0fa9eac
--- /dev/null
@@ -0,0 +1,45 @@
+<h1>Friendica</h1>
+<br>
+<p>{{$about nofilter}}</p>
+<br>
+<p>{{$friendica nofilter}}</p>
+<br>
+<p>{{$bugs nofilter}}</p>
+<br>
+<p>{{$info nofilter}}</p>
+<br>
+
+<p>{{$visible_addons.title nofilter}}</p>
+{{if $visible_addons.list}}
+<div style="margin-left: 25px; margin-right: 25px; margin-bottom: 25px;">{{$visible_addons.list nofilter}}</div>
+{{/if}}
+
+{{if $tos}}
+<p>{{$tos}}</p>
+{{/if}}
+
+{{if $block_list}}
+<div id="about_blocklist">
+       <p>{{$block_list.title nofilter}}</p>
+       <br>
+       <table class="table">
+               <thead>
+                       <tr>
+                               <th>{{$block_list.header[0] nofilter}}</th>
+                               <th>{{$block_list.header[1] nofilter}}</th>
+                       </tr>
+               </thead>
+               <tbody>
+               {{foreach $block_list.list as $blocked}}
+                       <tr>
+                               <td>{{$blocked.domain nofilter}}</td>
+                               <td>{{$blocked.reason nofilter}}</td>
+                       </tr>
+               {{/foreach}}
+               </tbody>
+       </table>
+</div>
+
+{{/if}}
+
+{{$hooked}}