getRouteByType(null, ['type' => 'asc']); foreach ($routes as $row) { $route = new Item($row['type'], $row['from'], $row['redirect'], $row['description'], $row['active'], $row['short_url'], $row['id']); if ($match = $route->matchRoute($path)) { return $route; } } return false; } /** * Perform the redirect based on $route and $path * The user will be redirected either to the page (using http redirect) or to a error (404) * * @param Item $route * @param string $path */ public static function executeRoute($route, $path) { $access = TikiLib::lib('access'); if ($redirect = $route->getRedirectPath($path)) { $access->redirect($redirect); } else { $access->display_error($path, tra("Page cannot be found"), '404'); } } /** * Retrieves the parameters for in-place route * * @param Item $route * @param string $path * @return array|bool */ public static function getInPlaceRoutingParameters($route, $path) { return $route->getInPlaceRoutingParameters($path); } /** * Generate a hash to use in the shorturls to redirect to the selected page. * @param int $size The hash size * @return bool|string * @throws \Exception */ public static function generateShortUrlHash($size = 6) { $routeLib = TikiLib::lib('custom_route'); $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; $validHash = false; $hash = ''; while (! $validHash) { $hash = substr(str_shuffle($chars), 0, $size); $validHash = ! $routeLib->checkRouteExists($hash); } return $hash; } /** * Get a shorturl for the requested url * * @param string $url The url to short * @param string $description The shorturl description * @param bool $reUse * @return Item * @throws \Exception */ public static function getShortUrlRoute($url, $description, $reUse = true) { $routeLib = TikiLib::lib('custom_route'); $conditions = [ 'type' => Item::TYPE_DIRECT, 'redirect' => json_encode(['to' => $url]), 'active' => 1, 'short_url' => 1, ]; $routeDetails = $routeLib->findRoute($conditions); if (empty($routeDetails) || ! $reUse) { $hash = self::generateShortUrlHash(); $route = new Item(Item::TYPE_DIRECT, $hash, ['to' => $url], $description, 1, 1); $route->save(); } else { $route = Item::load($routeDetails['id']); } return $route; } }