This repository has been archived on 2024-06-26. You can view files and clone it, but cannot push or open issues or pull requests.
sakura/app/Controllers/UserController.php

138 lines
3.4 KiB
PHP
Raw Normal View History

2016-02-04 20:56:40 +00:00
<?php
/**
* Holds the user page controllers.
* @package Sakura
*/
namespace Sakura\Controllers;
2016-09-13 22:05:03 +00:00
use Phroute\Phroute\Exception\HttpMethodNotAllowedException;
2016-09-19 15:33:52 +00:00
use Phroute\Phroute\Exception\HttpRouteNotFoundException;
2016-02-04 20:56:40 +00:00
use Sakura\Config;
2016-08-07 14:10:27 +00:00
use Sakura\CurrentSession;
2016-02-18 23:28:44 +00:00
use Sakura\DB;
2016-02-05 11:20:33 +00:00
use Sakura\Rank;
2016-02-27 17:28:45 +00:00
use Sakura\User;
2016-02-04 20:56:40 +00:00
/**
* Everything that is just for serving user data.
* @package Sakura
* @author Julian van de Groep <me@flash.moe>
*/
2016-02-27 16:46:16 +00:00
class UserController extends Controller
2016-02-04 20:56:40 +00:00
{
/**
2016-02-05 11:20:33 +00:00
* Display the profile of a user.
2016-12-09 19:46:23 +00:00
* @param int $id
2016-08-05 02:35:37 +00:00
* @return string
2016-02-04 20:56:40 +00:00
*/
2016-12-09 19:46:23 +00:00
public function profile(int $id = 0): string
2016-02-04 20:56:40 +00:00
{
2016-02-27 17:28:45 +00:00
$profile = User::construct($id);
2016-02-04 20:56:40 +00:00
// If the user id is zero check if there was a namechange
2016-09-13 22:05:03 +00:00
if ($profile->id === 0) {
2016-02-04 20:56:40 +00:00
// Fetch from username_history
2016-02-25 16:06:29 +00:00
$check = DB::table('username_history')
2016-04-01 21:44:31 +00:00
->where('username_old_clean', clean_string($id, true, true))
2016-02-25 16:06:29 +00:00
->orderBy('change_id', 'desc')
->first();
2016-02-05 11:20:33 +00:00
2016-02-04 20:56:40 +00:00
// Redirect if so
if ($check) {
2016-12-04 16:33:52 +00:00
return redirect(route('user.profile', $check->user_id));
2016-02-04 20:56:40 +00:00
}
}
2016-09-13 14:53:17 +00:00
return view('user/profile', compact('profile'));
2016-02-04 20:56:40 +00:00
}
2016-12-09 19:46:23 +00:00
/**
* Resolve user id from username and redirect to profile.
* @throws HttpRouteNotFoundException
* @param string $id
*/
public function resolve(string $name): string
{
$id = DB::table('users')
->where('username_clean', clean_string($name, true, true))
->value('user_id');
if (!$id) {
throw new HttpRouteNotFoundException;
}
return redirect(route('user.profile', $id));
}
2016-09-19 15:33:52 +00:00
/**
* Last listened to.
* @param int $id
* @throws HttpRouteNotFoundException
* @return string
*/
2016-12-04 16:33:52 +00:00
public function nowPlaying(int $id): string
2016-09-19 15:33:52 +00:00
{
$user = User::construct($id);
if ($user->id === 0) {
throw new HttpRouteNotFoundException;
}
$user->updateLastTrack();
$artist_url = 'http://last.fm/music/' . urlencode($user->musicArtist);
$track_url = $artist_url . '/_/' . urlencode($user->musicTrack);
return $this->json([
'track' => $user->musicTrack,
'track_url' => $track_url,
'artist' => $user->musicArtist,
'artist_url' => $artist_url,
'listening' => $user->musicListening,
]);
}
2016-02-05 11:20:33 +00:00
/**
* Display the memberlist.
2016-08-05 02:35:37 +00:00
* @param int $rank
2016-09-13 22:05:03 +00:00
* @throws HttpMethodNotAllowedException
2016-08-05 02:35:37 +00:00
* @return string
2016-02-05 11:20:33 +00:00
*/
2016-12-04 16:33:52 +00:00
public function members(int $rank = null): string
2016-02-04 20:56:40 +00:00
{
if (!CurrentSession::$user->activated) {
2016-09-13 22:05:03 +00:00
throw new HttpMethodNotAllowedException;
2016-02-04 20:56:40 +00:00
}
2016-02-27 16:46:16 +00:00
// Get all ranks
$getRanks = DB::table('ranks')
->get(['rank_id']);
// Define variable
$ranks = [];
// Add the empty rank
$ranks[0] = Rank::construct(0);
// Reorder shit
foreach ($getRanks as $sortRank) {
$ranks[$sortRank->rank_id] = Rank::construct($sortRank->rank_id);
}
// Get the active rank
2016-07-26 17:29:53 +00:00
$rank = array_key_exists($rank, $ranks) ? $rank : ($rank ? 0 : intval(config("rank.regular")));
2016-02-27 16:46:16 +00:00
2016-09-13 22:05:03 +00:00
return view('user/members', compact('ranks', 'rank'));
2016-03-26 16:36:58 +00:00
}
2016-04-01 21:44:31 +00:00
2016-08-05 02:35:37 +00:00
/**
* Report a user.
* @param int $id
*/
2016-12-04 16:33:52 +00:00
public function report(int $id = 0): string
2016-04-01 21:44:31 +00:00
{
return view('user/report');
2016-04-01 21:44:31 +00:00
}
2016-02-04 20:56:40 +00:00
}