75 lines
2.1 KiB
PHP
75 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace humhub\modules\space_profiles\components;
|
|
|
|
use humhub\components\ContentContainerUrlRuleInterface;
|
|
use humhub\modules\content\components\ContentContainerActiveRecord;
|
|
use yii\base\Component;
|
|
use yii\web\UrlManager;
|
|
use yii\web\UrlRuleInterface;
|
|
|
|
class UrlRule extends Component implements UrlRuleInterface, ContentContainerUrlRuleInterface
|
|
{
|
|
public const CONTAINER_ROUTE = 'space_profiles/profile/view';
|
|
public const PUBLIC_ROUTE = 'space_profiles/public/view';
|
|
private const ROUTE_SEGMENT = 'rescues';
|
|
|
|
public function parseContentContainerRequest(ContentContainerActiveRecord $container, UrlManager $manager, string $containerUrlPath, array $urlParams)
|
|
{
|
|
if ($containerUrlPath === self::ROUTE_SEGMENT) {
|
|
return [self::CONTAINER_ROUTE, $urlParams];
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function createContentContainerUrl(UrlManager $manager, string $containerUrlPath, string $route, array $params)
|
|
{
|
|
if ($route !== self::CONTAINER_ROUTE) {
|
|
return false;
|
|
}
|
|
|
|
$url = $containerUrlPath . '/' . self::ROUTE_SEGMENT;
|
|
if (!empty($params)) {
|
|
$query = http_build_query($params);
|
|
if ($query !== '') {
|
|
$url .= '?' . $query;
|
|
}
|
|
}
|
|
|
|
return $url;
|
|
}
|
|
|
|
public function createUrl($manager, $route, $params)
|
|
{
|
|
if ($route !== self::PUBLIC_ROUTE || empty($params['slug'])) {
|
|
return false;
|
|
}
|
|
|
|
$slug = urlencode((string)$params['slug']);
|
|
unset($params['slug']);
|
|
|
|
$url = self::ROUTE_SEGMENT . '/' . $slug;
|
|
if (!empty($params) && ($query = http_build_query($params)) !== '') {
|
|
$url .= '?' . $query;
|
|
}
|
|
|
|
return $url;
|
|
}
|
|
|
|
public function parseRequest($manager, $request)
|
|
{
|
|
$path = trim($request->getPathInfo(), '/');
|
|
if (strpos($path, self::ROUTE_SEGMENT . '/') !== 0) {
|
|
return false;
|
|
}
|
|
|
|
$parts = explode('/', $path);
|
|
if (empty($parts[1])) {
|
|
return false;
|
|
}
|
|
|
|
return [self::PUBLIC_ROUTE, ['slug' => urldecode($parts[1])]];
|
|
}
|
|
}
|