]> git.mxchange.org Git - friendica.git/commitdiff
Move mod/noscrape to Module\Noscrape
authornupplaPhil <admin@philipp.info>
Sun, 26 Jan 2020 22:43:47 +0000 (23:43 +0100)
committernupplaPhil <admin@philipp.info>
Sun, 26 Jan 2020 22:43:47 +0000 (23:43 +0100)
mod/noscrape.php [deleted file]
src/Module/NoScrape.php [new file with mode: 0644]
static/routes.config.php

diff --git a/mod/noscrape.php b/mod/noscrape.php
deleted file mode 100644 (file)
index 0b3d490..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-/**
- * @file mod/noscrape.php
- */
-
-use Friendica\App;
-use Friendica\Core\Protocol;
-use Friendica\Database\DBA;
-use Friendica\DI;
-use Friendica\Model\Profile;
-use Friendica\Model\User;
-
-function noscrape_init(App $a)
-{
-       if ($a->argc > 1) {
-               $which = $a->argv[1];
-       } else {
-               exit();
-       }
-
-       $profile = 0;
-       if ((local_user()) && ($a->argc > 2) && ($a->argv[2] === 'view')) {
-               $which = $a->user['nickname'];
-               $profile = $a->argv[1];
-       }
-
-       Profile::load($a, $which, $profile);
-
-       $json_info = [
-               'addr'         => $a->profile['addr'],
-               'nick'         => $which,
-               'guid'         => $a->profile['guid'],
-               'key'          => $a->profile['pubkey'],
-               'homepage'     => DI::baseUrl()."/profile/{$which}",
-               'comm'         => ($a->profile['account-type'] == User::ACCOUNT_TYPE_COMMUNITY),
-               'account-type' => $a->profile['account-type'],
-       ];
-
-       $dfrn_pages = ['request', 'confirm', 'notify', 'poll'];
-       foreach ($dfrn_pages as $dfrn) {
-               $json_info["dfrn-{$dfrn}"] = DI::baseUrl()."/dfrn_{$dfrn}/{$which}";
-       }
-
-       if (!$a->profile['net-publish'] || $a->profile['hidewall']) {
-               header('Content-type: application/json; charset=utf-8');
-               $json_info["hide"] = true;
-               echo json_encode($json_info);
-               exit;
-       }
-
-       $keywords = $a->profile['pub_keywords'] ?? '';
-       $keywords = str_replace(['#',',',' ',',,'], ['',' ',',',','], $keywords);
-       $keywords = explode(',', $keywords);
-
-       $contactPhoto = DBA::selectFirst('contact', ['photo'], ['self' => true, 'uid' => $a->profile['uid']]);
-
-       $json_info['fn'] = $a->profile['name'];
-       $json_info['photo'] = $contactPhoto["photo"];
-       $json_info['tags'] = $keywords;
-       $json_info['language'] = $a->profile['language'];
-
-       if (is_array($a->profile) && !$a->profile['hide-friends']) {
-               /// @todo What should this value tell us?
-               $r = q("SELECT `gcontact`.`updated` FROM `contact` INNER JOIN `gcontact` WHERE `gcontact`.`nurl` = `contact`.`nurl` AND `self` AND `uid` = %d LIMIT 1",
-                       intval($a->profile['uid']));
-               if (DBA::isResult($r)) {
-                       $json_info["updated"] =  date("c", strtotime($r[0]['updated']));
-               }
-
-               $r = q("SELECT COUNT(*) AS `total` FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 and `pending` = 0 AND `hidden` = 0 AND `archive` = 0
-                               AND `network` IN ('%s', '%s', '%s', '')",
-                       intval($a->profile['uid']),
-                       DBA::escape(Protocol::DFRN),
-                       DBA::escape(Protocol::DIASPORA),
-                       DBA::escape(Protocol::OSTATUS)
-               );
-               if (DBA::isResult($r)) {
-                       $json_info["contacts"] = intval($r[0]['total']);
-               }
-       }
-
-       // We display the last activity (post or login), reduced to year and week number
-       $last_active = 0;
-       $condition = ['uid' => $a->profile['uid'], 'self' => true];
-       $contact = DBA::selectFirst('contact', ['last-item'], $condition);
-       if (DBA::isResult($contact)) {
-               $last_active = strtotime($contact['last-item']);
-       }
-
-       $condition = ['uid' => $a->profile['uid']];
-       $user = DBA::selectFirst('user', ['login_date'], $condition);
-       if (DBA::isResult($user)) {
-               if ($last_active < strtotime($user['login_date'])) {
-                       $last_active = strtotime($user['login_date']);
-               }
-       }
-       $json_info["last-activity"] = date("o-W", $last_active);
-
-       //These are optional fields.
-       $profile_fields = ['pdesc', 'locality', 'region', 'postal-code', 'country-name', 'gender', 'marital', 'about'];
-       foreach ($profile_fields as $field) {
-               if (!empty($a->profile[$field])) {
-                       $json_info["$field"] = $a->profile[$field];
-               }
-       }
-
-       //Output all the JSON!
-       header('Content-type: application/json; charset=utf-8');
-       echo json_encode($json_info);
-       exit;
-}
diff --git a/src/Module/NoScrape.php b/src/Module/NoScrape.php
new file mode 100644 (file)
index 0000000..26cae98
--- /dev/null
@@ -0,0 +1,112 @@
+<?php
+
+namespace Friendica\Module;
+
+use Friendica\BaseModule;
+use Friendica\Core\Protocol;
+use Friendica\Core\System;
+use Friendica\Database\DBA;
+use Friendica\DI;
+use Friendica\Model\GContact;
+use Friendica\Model\Profile;
+use Friendica\Model\User;
+
+/**
+ * Endpoint for getting current user infos
+ *
+ * @see GContact::updateFromNoScrape() for usage
+ */
+class NoScrape extends BaseModule
+{
+       public static function rawContent(array $parameters = [])
+       {
+               $a = DI::app();
+
+               $which = DI::args()->get(1);
+
+               $profile = 0;
+               if ((local_user()) && (DI::args()->get(2) === 'view')) {
+                       $which   = $a->user['nickname'];
+                       $profile = DI::args()->get(1);
+               }
+
+               Profile::load($a, $which, $profile);
+
+               $json_info = [
+                       'addr'         => $a->profile['addr'],
+                       'nick'         => $which,
+                       'guid'         => $a->profile['guid'],
+                       'key'          => $a->profile['pubkey'],
+                       'homepage'     => DI::baseUrl() . "/profile/{$which}",
+                       'comm'         => ($a->profile['account-type'] == User::ACCOUNT_TYPE_COMMUNITY),
+                       'account-type' => $a->profile['account-type'],
+               ];
+
+               $dfrn_pages = ['request', 'confirm', 'notify', 'poll'];
+               foreach ($dfrn_pages as $dfrn) {
+                       $json_info["dfrn-{$dfrn}"] = DI::baseUrl() . "/dfrn_{$dfrn}/{$which}";
+               }
+
+               if (!$a->profile['net-publish'] || $a->profile['hidewall']) {
+                       $json_info['hide'] = true;
+                       System::jsonExit($json_info);
+               }
+
+               $keywords = $a->profile['pub_keywords'] ?? '';
+               $keywords = str_replace(['#', ',', ' ', ',,'], ['', ' ', ',', ','], $keywords);
+               $keywords = explode(',', $keywords);
+
+               $contactPhoto = DBA::selectFirst('contact', ['photo'], ['self' => true, 'uid' => $a->profile['uid']]);
+
+               $json_info['fn']       = $a->profile['name'];
+               $json_info['photo']    = $contactPhoto["photo"];
+               $json_info['tags']     = $keywords;
+               $json_info['language'] = $a->profile['language'];
+
+               if (!($a->profile['hide-friends'] ?? false)) {
+                       /// @todo What should this value tell us?
+                       $result = DBA::p("SELECT `gcontact`.`updated` FROM `contact` INNER JOIN `gcontact` WHERE `gcontact`.`nurl` = `contact`.`nurl` AND `self` AND `uid` = %d LIMIT 1", $a->profile['uid']);
+                       if (DBA::isResult($result)) {
+                               $json_info["updated"] = date("c", strtotime($result[0]['updated']));
+                       }
+
+                       $json_info['contacts'] = DBA::count('contact',
+                               [
+                                       'uid'     => $a->profile['uid'],
+                                       'self'    => 0,
+                                       'blocked' => 0,
+                                       'pending' => 0,
+                                       'hidden'  => 0,
+                                       'archive' => 0,
+                                       'network' => [Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS]
+                               ]);
+               }
+
+               // We display the last activity (post or login), reduced to year and week number
+               $last_active = 0;
+               $condition   = ['uid' => $a->profile['uid'], 'self' => true];
+               $contact     = DBA::selectFirst('contact', ['last-item'], $condition);
+               if (DBA::isResult($contact)) {
+                       $last_active = strtotime($contact['last-item']);
+               }
+
+               $condition = ['uid' => $a->profile['uid']];
+               $user      = DBA::selectFirst('user', ['login_date'], $condition);
+               if (DBA::isResult($user)) {
+                       if ($last_active < strtotime($user['login_date'])) {
+                               $last_active = strtotime($user['login_date']);
+                       }
+               }
+               $json_info['last-activity'] = date('o-W', $last_active);
+
+               //These are optional fields.
+               $profile_fields = ['pdesc', 'locality', 'region', 'postal-code', 'country-name', 'gender', 'marital', 'about'];
+               foreach ($profile_fields as $field) {
+                       if (!empty($a->profile[$field])) {
+                               $json_info["$field"] = $a->profile[$field];
+                       }
+               }
+
+               System::jsonExit($json_info);
+       }
+}
index a4fc823940d2b557e05fa0b4941746e5100820b3..17a2b5bf58f91cdbc93892f207cd6781bbdfd3aa 100644 (file)
@@ -167,6 +167,11 @@ return [
        '/nodeinfo/{version}' => [Module\NodeInfo::class,        [R::GET]],
        '/nogroup'            => [Module\Group::class,           [R::GET]],
 
+       '/noscrape' => [
+               '/{nick}'         => [Module\NoScrape::class, [R::GET]],
+               '/{profile}/view' => [Module\NoScrape::class, [R::GET]],
+       ],
+
        '/notifications' => [
                '/network[/json]'    => [Module\Notifications\Notifications::class, [R::GET, R::POST]],
                '/system[/json]'     => [Module\Notifications\Notifications::class, [R::GET, R::POST]],