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/libraries/Urls.php
2016-03-28 03:18:59 +02:00

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&quote=%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;
}
}