Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
HomeUrl
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
2 / 2
5
100.00% covered (success)
100.00%
1 / 1
 create
100.00% covered (success)
100.00%
10 / 10
100.00% covered (success)
100.00%
1 / 1
4
 sanitizeUrl
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3/**
4 *
5 * @package Zmsticketprinter
6 * @copyright BerlinOnline Stadtportal GmbH & Co. KG
7 *
8 */
9
10namespace BO\Zmsticketprinter\Helper;
11
12use BO\Mellon\Validator;
13
14class HomeUrl
15{
16    /**
17     * check if new home url is requested, if not check if url exists in cookie,
18     * otherwise set current uri from request as new home url
19     *
20     **/
21    public static function create(\Psr\Http\Message\RequestInterface $request)
22    {
23        $homeUrl = null;
24        $validator = $request->getAttribute('validator');
25        $ticketprinter = $validator->getParameter('ticketprinter')->isArray()->getValue();
26        if ($ticketprinter && array_key_exists('home', $ticketprinter)) {
27            $homeUrl = Validator::value($ticketprinter['home'])->isUrl()->getValue();
28        } elseif (!$homeUrl) {
29            $homeUrl = $request->getRequestTarget();
30        }
31        // Clean up accumulated /& patterns from URL (bug in redirect chain)
32        $homeUrl = static::sanitizeUrl($homeUrl);
33        //\App::$log->debug("HOMEURL", [$homeUrl, $request->getRequestTarget()]);
34        \BO\Zmsclient\Ticketprinter::setHomeUrl($homeUrl, $request);
35        return $homeUrl;
36    }
37
38    /**
39     * Remove accumulated /& patterns from URL that occur due to redirect chain issues
40     *
41     * @return null|string|string[]
42     *
43     */
44    public static function sanitizeUrl($url): array|string|null
45    {
46        // Remove repeated /& patterns (e.g., ?/&/&/& becomes ?)
47        $url = preg_replace('#\?(/&)+#', '?', $url);
48        // Remove any remaining leading /& after ?
49        $url = preg_replace('#\?/&#', '?', $url);
50        // Clean up empty query string marker
51        $url = preg_replace('#\?$#', '', $url);
52        return $url;
53    }
54}