334 lines
8.6 KiB
PHP
334 lines
8.6 KiB
PHP
<?php
|
|
/**
|
|
* Holds the url generation class.
|
|
*
|
|
* @package Sakura
|
|
*/
|
|
|
|
namespace Sakura;
|
|
|
|
/**
|
|
* Rewrite URL generator.
|
|
*
|
|
* @package Sakura
|
|
* @author Julian van de Groep <me@flash.moe>
|
|
*/
|
|
class Urls
|
|
{
|
|
/**
|
|
* Unformatted links
|
|
* 0 - Plain
|
|
* 1 - mod_rewrite
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $urls = [
|
|
|
|
// General site sections
|
|
'SITE_HOME' => [
|
|
'/index.php',
|
|
'/',
|
|
],
|
|
'SITE_NEWS' => [
|
|
'/news.php',
|
|
'/news',
|
|
],
|
|
'SITE_NEWS_POST' => [
|
|
'/news.php?id=%u',
|
|
'/news/%u',
|
|
],
|
|
'SITE_NEWS_CAT' => [
|
|
'/news.php?cat=$s',
|
|
'/news/%s',
|
|
],
|
|
'SITE_NEWS_CAT_POST' => [
|
|
'/news.php?cat=%s&id=%u',
|
|
'/news/%s/%u',
|
|
],
|
|
'SITE_SEARCH' => [
|
|
'/search.php',
|
|
'/search',
|
|
],
|
|
'SITE_PREMIUM' => [
|
|
'/support.php',
|
|
'/support',
|
|
],
|
|
'SITE_DONATE_TRACK' => [
|
|
'/support.php?tracker=true',
|
|
'/support/tracker',
|
|
],
|
|
'SITE_FAQ' => [
|
|
'/faq.php',
|
|
'/faq',
|
|
],
|
|
'SITE_LOGIN' => [
|
|
'/authenticate.php?ref=login',
|
|
'/login',
|
|
],
|
|
'SITE_LOGOUT' => [
|
|
'/authenticate.php?ref=logout',
|
|
'/logout',
|
|
],
|
|
'SITE_REGISTER' => [
|
|
'/authenticate.php?ref=register',
|
|
'/register',
|
|
],
|
|
'SITE_FORGOT_PASSWORD' => [
|
|
'/authenticate.php?ref=forgotpassword',
|
|
'/forgotpassword',
|
|
],
|
|
'SITE_ACTIVATE' => [
|
|
'/authenticate.php?ref=activate',
|
|
'/activate',
|
|
],
|
|
'INFO_PAGE' => [
|
|
'/index.php?p=%s',
|
|
'/p/%s',
|
|
],
|
|
'AUTH_ACTION' => [
|
|
'/authenticate.php',
|
|
'/authenticate',
|
|
],
|
|
|
|
// Memberlist
|
|
'MEMBERLIST_INDEX' => [
|
|
'/members.php',
|
|
'/members',
|
|
],
|
|
'MEMBERLIST_SORT' => [
|
|
'/members.php?sort=%s',
|
|
'/members/%s',
|
|
],
|
|
'MEMBERLIST_RANK' => [
|
|
'/members.php?rank=%u',
|
|
'/members/%u',
|
|
],
|
|
'MEMBERLIST_PAGE' => [
|
|
'/members.php?page=%u',
|
|
'/members?page=%u',
|
|
],
|
|
'MEMBERLIST_ALL' => [
|
|
'/members.php?sort=%s&rank=%u',
|
|
'/members/%s/%u',
|
|
],
|
|
|
|
// Forums
|
|
'FORUM_INDEX' => [
|
|
'/index.php?forum=true',
|
|
'/forum',
|
|
],
|
|
'FORUM_SUB' => [
|
|
'/viewforum.php?f=%u',
|
|
'/forum/%u',
|
|
],
|
|
'FORUM_MARK_READ' => [
|
|
'/viewforum.php?f=%u&read=true&session=%s',
|
|
'/forum/%u?read=true&session=%s',
|
|
],
|
|
'FORUM_THREAD' => [
|
|
'/viewtopic.php?t=%u',
|
|
'/forum/thread/%u',
|
|
],
|
|
'FORUM_POST' => [
|
|
'/viewtopic.php?p=%u',
|
|
'/forum/post/%u',
|
|
],
|
|
'FORUM_REPLY' => [
|
|
'/posting.php?t=%u',
|
|
'/forum/thread/%u/reply',
|
|
],
|
|
'FORUM_NEW_THREAD' => [
|
|
'/posting.php?f=%u',
|
|
'/forum/%u/new',
|
|
],
|
|
'FORUM_EDIT_POST' => [
|
|
'/posting.php?p=%1$u&edit=%1$u',
|
|
'/forum/post/%u/edit',
|
|
],
|
|
'FORUM_DELETE_POST' => [
|
|
'/posting.php?p=%1$u&delete=%1$u',
|
|
'/forum/post/%u/delete',
|
|
],
|
|
'FORUM_QUOTE_POST' => [
|
|
'/posting.php?p=%1$u"e=%1$u',
|
|
'/forum/post/%u/quote',
|
|
],
|
|
'FORUM_LOCK' => [
|
|
'/viewtopic.php?t=%u&lock=%s',
|
|
'/forum/thread/%u?lock=%s',
|
|
],
|
|
'FORUM_STICKY' => [
|
|
'/viewtopic.php?t=%u&sticky=%s',
|
|
'/forum/thread/%u?sticky=%s',
|
|
],
|
|
'FORUM_ANNOUNCE' => [
|
|
'/viewtopic.php?t=%u&announce=%s',
|
|
'/forum/thread/%u?announce=%s',
|
|
],
|
|
'FORUM_RESTORE' => [
|
|
'/viewtopic.php?t=%u&restore=%s',
|
|
'/forum/thread/%u?restore=%s',
|
|
],
|
|
'FORUM_TRASH' => [
|
|
'/viewtopic.php?t=%u&trash=%s',
|
|
'/forum/thread/%u?trash=%s',
|
|
],
|
|
'FORUM_PRUNE' => [
|
|
'/viewtopic.php?t=%u&prune=%s',
|
|
'/forum/thread/%u?prune=%s',
|
|
],
|
|
|
|
// Image serve references
|
|
'IMAGE_AVATAR' => [
|
|
'/imageserve.php?m=avatar&u=%u',
|
|
'/a/%u',
|
|
],
|
|
'IMAGE_BACKGROUND' => [
|
|
'/imageserve.php?m=background&u=%u',
|
|
'/bg/%u',
|
|
],
|
|
'IMAGE_HEADER' => [
|
|
'/imageserve.php?m=header&u=%u',
|
|
'/u/%u/header',
|
|
],
|
|
|
|
// User actions
|
|
'USER_LOGOUT' => [
|
|
'/authenticate.php?mode=logout&time=%u&session=%s&redirect=%s',
|
|
'/logout?mode=logout&time=%u&session=%s&redirect=%s',
|
|
],
|
|
'USER_REPORT' => [
|
|
'/report.php?mode=user&u=%u',
|
|
'/u/%u/report',
|
|
],
|
|
'USER_PROFILE' => [
|
|
'/profile.php?u=%s',
|
|
'/u/%s',
|
|
],
|
|
'USER_COMMENTS' => [
|
|
'/profile.php?u=%u&view=comments',
|
|
'/u/%u/comments',
|
|
],
|
|
'USER_FRIENDS' => [
|
|
'/profile.php?u=%u&view=friends',
|
|
'/u/%u/friends',
|
|
],
|
|
'USER_GROUPS' => [
|
|
'/profile.php?u=%u&view=groups',
|
|
'/u/%u/groups',
|
|
],
|
|
'USER_THREADS' => [
|
|
'/profile.php?u=%u&view=threads',
|
|
'/u/%u/threads',
|
|
],
|
|
'USER_POSTS' => [
|
|
'/profile.php?u=%u&view=posts',
|
|
'/u/%u/posts',
|
|
],
|
|
'USER_GROUP' => [
|
|
'/group.php?g=%u',
|
|
'/g/%u',
|
|
],
|
|
|
|
// Settings urls
|
|
'SETTINGS_INDEX' => [
|
|
'/settings.php',
|
|
'/settings',
|
|
],
|
|
'SETTING_CAT' => [
|
|
'/settings.php?cat=%s',
|
|
'/settings/%s',
|
|
],
|
|
'SETTING_MODE' => [
|
|
'/settings.php?cat=%s&mode=%s',
|
|
'/settings/%s/%s',
|
|
],
|
|
'REQUEST_NOTIFICATIONS' => [
|
|
'/settings.php?request-notifications=true',
|
|
'/notifications',
|
|
],
|
|
|
|
// Friend Actions
|
|
'FRIEND_ACTION' => [
|
|
'/settings.php?friend-action=true',
|
|
'/friends',
|
|
],
|
|
'FRIEND_ADD' => [
|
|
'/settings.php?friend-action=true&add=%u&session=%s&time=%u&redirect=%s',
|
|
'/friends?add=%u&session=%s&time=%u&redirect=%s',
|
|
],
|
|
'FRIEND_REMOVE' => [
|
|
'/settings.php?friend-action=true&remove=%u&session=%s&time=%u&redirect=%s',
|
|
'/friends?remove=%u&session=%s&time=%u&redirect=%s',
|
|
],
|
|
|
|
// Manage urls
|
|
'MANAGE_INDEX' => [
|
|
'/manage.php',
|
|
'/manage',
|
|
],
|
|
'MANAGE_CAT' => [
|
|
'/manage.php?cat=%s',
|
|
'/manage/%s',
|
|
],
|
|
'MANAGE_MODE' => [
|
|
'/manage.php?cat=%s&mode=%s',
|
|
'/manage/%s/%s',
|
|
],
|
|
|
|
// Comments urls
|
|
'COMMENT_POST' => [
|
|
'/settings.php?comment-action=true',
|
|
'/comments',
|
|
],
|
|
'COMMENT_VOTE' => [
|
|
'/settings.php?comment-action=true&id=%u&mode=vote&state=%u&category=%s&session=%s',
|
|
'/comments?id=%u&mode=vote&state=%u&category=%s&session=%s',
|
|
],
|
|
'COMMENT_DELETE' => [
|
|
'/settings.php?comment-action=true&id=%u&category=%s&mode=delete&session=%s',
|
|
'/comments?id=%u&mode=delete&category=%s&session=%s',
|
|
],
|
|
|
|
];
|
|
|
|
/**
|
|
* Format a URL.
|
|
*
|
|
* @param string $lid The ID of a URL.
|
|
* @param array $args Additional arguments.
|
|
* @param bool $rewrite Toggle mod_rewrite.
|
|
*
|
|
* @return null|string The formatted URL.
|
|
*/
|
|
public function format($lid, $args = [], $rewrite = null, $b = true)
|
|
{
|
|
|
|
// Check if the requested url exists
|
|
if (!array_key_exists($lid, $this->urls)) {
|
|
return null;
|
|
}
|
|
|
|
if ($b && ($lid === 'SETTING_CAT' || $lid === 'SETTING_MODE')) {
|
|
if (in_array('messages', $args)) {
|
|
return null;
|
|
}
|
|
|
|
if ($lid === 'SETTING_CAT') {
|
|
return Router::route("settings.{$args[0]}");
|
|
}
|
|
|
|
if ($lid === 'SETTING_MODE') {
|
|
$a = implode('.', $args);
|
|
$a = str_replace("usertitle", "title", $a);
|
|
return Router::route("settings.{$a}");
|
|
}
|
|
}
|
|
|
|
// Format urls
|
|
$formatted = vsprintf($this->urls[$lid][0], $args);
|
|
|
|
// Return the formatted url
|
|
return $formatted;
|
|
}
|
|
}
|