make make_link more sane
This commit is contained in:
parent
fd359fb08c
commit
f47e35e4e5
@ -8,15 +8,35 @@ class UrlsTest extends TestCase
|
|||||||
{
|
{
|
||||||
public function test_make_link()
|
public function test_make_link()
|
||||||
{
|
{
|
||||||
|
// basic
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
"/test/foo",
|
"/test/foo",
|
||||||
make_link("foo")
|
make_link("foo")
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// remove leading slash from path
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
"/test/foo",
|
"/test/foo",
|
||||||
make_link("/foo")
|
make_link("/foo")
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// query
|
||||||
|
$this->assertEquals(
|
||||||
|
"/test/foo?a=1&b=2",
|
||||||
|
make_link("foo", "a=1&b=2")
|
||||||
|
);
|
||||||
|
|
||||||
|
// hash
|
||||||
|
$this->assertEquals(
|
||||||
|
"/test/foo#cake",
|
||||||
|
make_link("foo", null, "cake")
|
||||||
|
);
|
||||||
|
|
||||||
|
// query + hash
|
||||||
|
$this->assertEquals(
|
||||||
|
"/test/foo?a=1&b=2#cake",
|
||||||
|
make_link("foo", "a=1&b=2", "cake")
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_make_http()
|
public function test_make_http()
|
||||||
@ -57,4 +77,25 @@ class UrlsTest extends TestCase
|
|||||||
modify_url("/foo/bar?a=1&b=2", ["a"=>null, "b"=>null])
|
modify_url("/foo/bar?a=1&b=2", ["a"=>null, "b"=>null])
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function test_referer_or()
|
||||||
|
{
|
||||||
|
unset($_SERVER['HTTP_REFERER']);
|
||||||
|
$this->assertEquals(
|
||||||
|
"foo",
|
||||||
|
referer_or("foo")
|
||||||
|
);
|
||||||
|
|
||||||
|
$_SERVER['HTTP_REFERER'] = "cake";
|
||||||
|
$this->assertEquals(
|
||||||
|
"cake",
|
||||||
|
referer_or("foo")
|
||||||
|
);
|
||||||
|
|
||||||
|
$_SERVER['HTTP_REFERER'] = "cake";
|
||||||
|
$this->assertEquals(
|
||||||
|
"foo",
|
||||||
|
referer_or("foo", ["cake"])
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,32 +23,27 @@ class Link
|
|||||||
*
|
*
|
||||||
* eg make_link("post/list") becomes "/v2/index.php?q=post/list"
|
* eg make_link("post/list") becomes "/v2/index.php?q=post/list"
|
||||||
*/
|
*/
|
||||||
function make_link(?string $page=null, ?string $query=null): string
|
function make_link(?string $page=null, ?string $query=null, ?string $fragment=null): string
|
||||||
{
|
{
|
||||||
global $config;
|
global $config;
|
||||||
|
|
||||||
if (is_null($page)) {
|
if (is_null($page)) {
|
||||||
$page = $config->get_string(SetupConfig::MAIN_PAGE);
|
$page = $config->get_string(SetupConfig::MAIN_PAGE);
|
||||||
}
|
}
|
||||||
|
$page = trim($page, "/");
|
||||||
|
|
||||||
|
$parts = [];
|
||||||
$install_dir = get_base_href();
|
$install_dir = get_base_href();
|
||||||
if (SPEED_HAX || $config->get_bool('nice_urls', false)) {
|
if (SPEED_HAX || $config->get_bool('nice_urls', false)) {
|
||||||
$base = $install_dir;
|
$parts['path'] = "$install_dir/$page";
|
||||||
} else {
|
} else {
|
||||||
$base = "$install_dir/index.php?q=";
|
$parts['path'] = "$install_dir/index.php";
|
||||||
|
$query = "q=$page&$query";
|
||||||
}
|
}
|
||||||
|
$parts['query'] = $query; // http_build_query($query);
|
||||||
|
$parts['fragment'] = $fragment; // http_build_query($hash);
|
||||||
|
|
||||||
if (is_null($query)) {
|
return unparse_url($parts);
|
||||||
return str_replace("//", "/", $base.'/'.$page);
|
|
||||||
} else {
|
|
||||||
if (strpos($base, "?")) {
|
|
||||||
return $base .'/'. $page .'&'. $query;
|
|
||||||
} elseif (strpos($query, "#") === 0) {
|
|
||||||
return $base .'/'. $page . $query;
|
|
||||||
} else {
|
|
||||||
return $base .'/'. $page .'?'. $query;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -643,7 +643,7 @@ function show_ip(string $ip, string $ban_reason): string
|
|||||||
global $user;
|
global $user;
|
||||||
$u_reason = url_escape($ban_reason);
|
$u_reason = url_escape($ban_reason);
|
||||||
$u_end = url_escape("+1 week");
|
$u_end = url_escape("+1 week");
|
||||||
$ban = $user->can(Permissions::BAN_IP) ? ", <a href='".make_link("ip_ban/list", "c_ip=$ip&c_reason=$u_reason&c_expires=$u_end#create")."'>Ban</a>" : "";
|
$ban = $user->can(Permissions::BAN_IP) ? ", <a href='".make_link("ip_ban/list", "c_ip=$ip&c_reason=$u_reason&c_expires=$u_end", "create")."'>Ban</a>" : "";
|
||||||
$ip = $user->can(Permissions::VIEW_IP) ? $ip.$ban : "";
|
$ip = $user->can(Permissions::VIEW_IP) ? $ip.$ban : "";
|
||||||
return $ip;
|
return $ip;
|
||||||
}
|
}
|
||||||
|
@ -107,4 +107,32 @@ class BBCodeTest extends ShimmiePHPUnitTestCase
|
|||||||
$bb = new BBCode();
|
$bb = new BBCode();
|
||||||
return $bb->strip($in);
|
return $bb->strip($in);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testSiteLinks()
|
||||||
|
{
|
||||||
|
$this->assertEquals(
|
||||||
|
'<a class="shm-clink" data-clink-sel="" href="/test/post/view/123">>>123</a>',
|
||||||
|
$this->filter(">>123")
|
||||||
|
);
|
||||||
|
$this->assertEquals(
|
||||||
|
'<a class="shm-clink" data-clink-sel="#c456" href="/test/post/view/123#c456">>>123#c456</a>',
|
||||||
|
$this->filter(">>123#c456")
|
||||||
|
);
|
||||||
|
$this->assertEquals(
|
||||||
|
'<a class="shm-clink" data-clink-sel="" href="/test/foo/bar">foo/bar</a>',
|
||||||
|
$this->filter("[url]site://foo/bar[/url]")
|
||||||
|
);
|
||||||
|
$this->assertEquals(
|
||||||
|
'<a class="shm-clink" data-clink-sel="#c123" href="/test/foo/bar#c123">foo/bar#c123</a>',
|
||||||
|
$this->filter("[url]site://foo/bar#c123[/url]")
|
||||||
|
);
|
||||||
|
$this->assertEquals(
|
||||||
|
'<a class="shm-clink" data-clink-sel="" href="/test/foo/bar">look at my post</a>',
|
||||||
|
$this->filter("[url=site://foo/bar]look at my post[/url]")
|
||||||
|
);
|
||||||
|
$this->assertEquals(
|
||||||
|
'<a class="shm-clink" data-clink-sel="#c123" href="/test/foo/bar#c123">look at my comment</a>',
|
||||||
|
$this->filter("[url=site://foo/bar#c123]look at my comment[/url]")
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -210,7 +210,7 @@ class CommentList extends Extension
|
|||||||
$cpe = new CommentPostingEvent(int_escape($_POST['image_id']), $user, $_POST['comment']);
|
$cpe = new CommentPostingEvent(int_escape($_POST['image_id']), $user, $_POST['comment']);
|
||||||
send_event($cpe);
|
send_event($cpe);
|
||||||
$page->set_mode(PageMode::REDIRECT);
|
$page->set_mode(PageMode::REDIRECT);
|
||||||
$page->set_redirect(make_link("post/view/$i_iid#comment_on_$i_iid"));
|
$page->set_redirect(make_link("post/view/$i_iid", null, "comment_on_$i_iid"));
|
||||||
} catch (CommentPostingException $ex) {
|
} catch (CommentPostingException $ex) {
|
||||||
$this->theme->display_error(403, "Comment Blocked", $ex->getMessage());
|
$this->theme->display_error(403, "Comment Blocked", $ex->getMessage());
|
||||||
}
|
}
|
||||||
|
@ -234,7 +234,7 @@ class CommentListTheme extends Themelet
|
|||||||
$html = "
|
$html = "
|
||||||
<div class=\"comment $hb\">
|
<div class=\"comment $hb\">
|
||||||
$h_userlink: $h_comment
|
$h_userlink: $h_comment
|
||||||
<a href=\"".make_link("post/view/$i_image_id#c$i_comment_id")."\">>>></a>
|
<a href=\"".make_link("post/view/$i_image_id", null, "c$i_comment_id")."\">>>></a>
|
||||||
</div>
|
</div>
|
||||||
";
|
";
|
||||||
} else {
|
} else {
|
||||||
|
@ -76,8 +76,8 @@ class NumericScoreTheme extends Themelet
|
|||||||
$pop_images .= $this->build_thumb_html($image)."\n";
|
$pop_images .= $this->build_thumb_html($image)."\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
$b_dte = make_link("popular_by_".$dte[3]."?".date($dte[2], (strtotime('-1 '.$dte[3], strtotime($dte[0])))));
|
$b_dte = make_link("popular_by_".$dte[3], date($dte[2], (strtotime('-1 '.$dte[3], strtotime($dte[0])))));
|
||||||
$f_dte = make_link("popular_by_".$dte[3]."?".date($dte[2], (strtotime('+1 '.$dte[3], strtotime($dte[0])))));
|
$f_dte = make_link("popular_by_".$dte[3], date($dte[2], (strtotime('+1 '.$dte[3], strtotime($dte[0])))));
|
||||||
|
|
||||||
$html = "\n".
|
$html = "\n".
|
||||||
"<h3 style='text-align: center;'>\n".
|
"<h3 style='text-align: center;'>\n".
|
||||||
|
@ -114,7 +114,7 @@ class PrivMsg extends Extension
|
|||||||
if ($user->can(Permissions::READ_PM)) {
|
if ($user->can(Permissions::READ_PM)) {
|
||||||
$count = $this->count_pms($user);
|
$count = $this->count_pms($user);
|
||||||
$h_count = $count > 0 ? " <span class='unread'>($count)</span>" : "";
|
$h_count = $count > 0 ? " <span class='unread'>($count)</span>" : "";
|
||||||
$event->add_link("Private Messages$h_count", make_link("user#private-messages"));
|
$event->add_link("Private Messages$h_count", make_link("user", null, "private-messages"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user