/** * Check if uri $source is equal to current uri point with array of $aliases and active $order set * @param null $source * @param array|null $aliases * @param bool $order * @return bool */ public static function isCurrentLink($source = null, array $aliases = null, $order = false) { $elementPoint = Url::buildPathway($source); $currentPoint = Url::buildPathwayFromRequest(); // use special active element order type: controller, action switch ($order) { case 'controller': $elementPoint = Str::firstIn($elementPoint, '/'); $active = Str::startsWith($elementPoint, $currentPoint); break; case 'action': $elementArray = explode('/', $elementPoint); if (!Str::contains('/', $elementPoint) || count($elementArray) < 2) { $active = $elementPoint === $currentPoint; } else { $elementPoint = $elementArray[0] . '/' . $elementArray[1]; $active = Str::startsWith($elementPoint, $currentPoint); } break; case 'id': $elementArray = explode('/', $elementPoint); $elementPoint = $elementArray[0] . '/' . $elementArray[1]; if ($elementArray[2] === null) { // looks like id is not defined in element if (Str::contains('?', $currentPoint)) { $currentPoint = Str::firstIn($currentPoint, '?'); } $currentArray = explode('/', $currentPoint); $currentToId = implode('/', array_slice($currentArray, 0, 3)); $active = $elementPoint === $currentToId; } else { $elementPoint .= '/' . $elementArray[2]; $active = Str::startsWith($elementPoint, $currentPoint); } break; default: $active = $elementPoint === $currentPoint; break; } // check if current uri equals with aliases if (Obj::isArray($aliases) && count($aliases) > 0) { foreach ($aliases as $activeUri) { $activeUri = trim($activeUri, '/'); if (Str::endsWith('*', $activeUri)) { $activeUri = rtrim($activeUri, '*'); if (Str::startsWith($activeUri, $currentPoint)) { $active = true; } } else { if ($activeUri === $currentPoint) { $active = true; } } } } return $active; }