예제 #1
0
 /**
  * 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;
 }