Move mod/noscrape to Module\Noscrape
This commit is contained in:
		
					parent
					
						
							
								9269221825
							
						
					
				
			
			
				commit
				
					
						4260b94fec
					
				
			
		
					 3 changed files with 117 additions and 111 deletions
				
			
		
							
								
								
									
										111
									
								
								mod/noscrape.php
									
										
									
									
									
								
							
							
						
						
									
										111
									
								
								mod/noscrape.php
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										112
									
								
								src/Module/NoScrape.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								src/Module/NoScrape.php
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -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);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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]],
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue