protected function compile()
	{
		/** @var PageModel $objPage */
		global $objPage;

		$items = array();
		$groups = array();

		// Get all groups of the current front end user
		if (FE_USER_LOGGED_IN)
		{
			$this->import(FrontendUser::class, 'User');
			$groups = $this->User->groups;
		}

		// Get all active pages and also include root pages if the language is added to the URL (see #72)
		$objPages = PageModel::findPublishedRegularWithoutGuestsByIds($this->pages, array('includeRoot'=>Config::get('addLanguageToUrl')));

		// Return if there are no pages
		if ($objPages === null)
		{
			return;
		}

		$arrPages = array();

		// Sort the array keys according to the given order
		if ($this->orderPages != '')
		{
			$tmp = StringUtil::deserialize($this->orderPages);

			if (!empty($tmp) && \is_array($tmp))
			{
				$arrPages = array_map(function () {}, array_flip($tmp));
			}
		}

		// Add the items to the pre-sorted array
		while ($objPages->next())
		{
			$arrPages[$objPages->id] = $objPages->current();
		}

		$arrPages = array_values(array_filter($arrPages));

		// Set default template
		if ($this->navigationTpl == '')
		{
			$this->navigationTpl = 'nav_default';
		}

		$objTemplate = new FrontendTemplate($this->navigationTpl);
		$objTemplate->type = \get_class($this);
		$objTemplate->cssID = $this->cssID; // see #4897 and 6129
		$objTemplate->level = 'level_1';

		/** @var PageModel[] $arrPages */
		foreach ($arrPages as $objModel)
		{
			$_groups = StringUtil::deserialize($objModel->groups);

			// Do not show protected pages unless a front end user is logged in
			if (!$objModel->protected || $this->showProtected || (\is_array($_groups) && \is_array($groups) && \count(array_intersect($_groups, $groups))))
			{
				// Get href
				switch ($objModel->type)
				{
					case 'redirect':
						$href = $objModel->url;
						break;

					case 'root':
						// Overwrite the alias to link to the empty URL or language URL (see #1641)
						$objModel->alias = 'index';
						$href = $objModel->getFrontendUrl();
						break;

					case 'forward':
						if ($objModel->jumpTo)
						{
							$objNext = PageModel::findPublishedById($objModel->jumpTo);
						}
						else
						{
							$objNext = PageModel::findFirstPublishedRegularByPid($objModel->id);
						}

						if ($objNext instanceof PageModel)
						{
							$href = $objNext->getFrontendUrl();
							break;
						}
						// DO NOT ADD A break; STATEMENT

					default:
						$href = $objModel->getFrontendUrl();
						break;
				}

				$trail = \in_array($objModel->id, $objPage->trail);

				// Active page
				if ($objPage->id == $objModel->id && $href == Environment::get('request'))
				{
					$strClass = trim($objModel->cssClass);
					$row = $objModel->row();

					$row['isActive'] = true;
					$row['isTrail'] = false;
					$row['class'] = trim('active ' . $strClass);
					$row['title'] = StringUtil::specialchars($objModel->title, true);
					$row['pageTitle'] = StringUtil::specialchars($objModel->pageTitle, true);
					$row['link'] = $objModel->title;
					$row['href'] = $href;
					$row['nofollow'] = (strncmp($objModel->robots, 'noindex,nofollow', 16) === 0);
					$row['target'] = '';
					$row['description'] = str_replace(array("\n", "\r"), array(' ', ''), $objModel->description);

					// Override the link target
					if ($objModel->type == 'redirect' && $objModel->target)
					{
						$row['target'] = ' target="_blank"';
					}

					$items[] = $row;
				}

				// Regular page
				else
				{
					$strClass = trim($objModel->cssClass . ($trail ? ' trail' : ''));
					$row = $objModel->row();

					$row['isActive'] = false;
					$row['isTrail'] = $trail;
					$row['class'] = $strClass;
					$row['title'] = StringUtil::specialchars($objModel->title, true);
					$row['pageTitle'] = StringUtil::specialchars($objModel->pageTitle, true);
					$row['link'] = $objModel->title;
					$row['href'] = $href;
					$row['nofollow'] = (strncmp($objModel->robots, 'noindex,nofollow', 16) === 0);
					$row['target'] = '';
					$row['description'] = str_replace(array("\n", "\r"), array(' ', ''), $objModel->description);

					// Override the link target
					if ($objModel->type == 'redirect' && $objModel->target)
					{
						$row['target'] = ' target="_blank"';
					}

					$items[] = $row;
				}
			}
		}

		// Add classes first and last
		$items[0]['class'] = trim($items[0]['class'] . ' first');
		$last = \count($items) - 1;
		$items[$last]['class'] = trim($items[$last]['class'] . ' last');

		$objTemplate->items = $items;

		$this->Template->request = Environment::get('indexFreeRequest');
		$this->Template->skipId = 'skipNavigation' . $this->id;
		$this->Template->skipNavigation = StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['skipNavigation']);
		$this->Template->items = !empty($items) ? $objTemplate->parse() : '';
	}
protected function compile()
	{
		
		global $objPage;

		$items = array();
		$groups = array();

		
		if (FE_USER_LOGGED_IN)
		{
			$this->import(FrontendUser::class, 'User');
			$groups = $this->User->groups;
		}

		
		$objPages = PageModel::findPublishedRegularWithoutGuestsByIds($this->pages, array('includeRoot'=>Config::get('addLanguageToUrl')));

		
		if ($objPages === null)
		{
			return;
		}

		$arrPages = array();

		
		if ($this->orderPages != '')
		{
			$tmp = StringUtil::deserialize($this->orderPages);

			if (!empty($tmp) && \is_array($tmp))
			{
				$arrPages = array_map(function () {}, array_flip($tmp));
			}
		}

		
		while ($objPages->next())
		{
			$arrPages[$objPages->id] = $objPages->current();
		}

		$arrPages = array_values(array_filter($arrPages));

		
		if ($this->navigationTpl == '')
		{
			$this->navigationTpl = 'nav_default';
		}

		$objTemplate = new FrontendTemplate($this->navigationTpl);
		$objTemplate->type = \get_class($this);
		$objTemplate->cssID = $this->cssID; 
		$objTemplate->level = 'level_1';

		
		foreach ($arrPages as $objModel)
		{
			$_groups = StringUtil::deserialize($objModel->groups);

			
			if (!$objModel->protected || $this->showProtected || (\is_array($_groups) && \is_array($groups) && \count(array_intersect($_groups, $groups))))
			{
				
				switch ($objModel->type)
				{
					case 'redirect':
						$href = $objModel->url;
						break;

					case 'root':
						
						$objModel->alias = 'index';
						$href = $objModel->getFrontendUrl();
						break;

					case 'forward':
						if ($objModel->jumpTo)
						{
							$objNext = PageModel::findPublishedById($objModel->jumpTo);
						}
						else
						{
							$objNext = PageModel::findFirstPublishedRegularByPid($objModel->id);
						}

						if ($objNext instanceof PageModel)
						{
							$href = $objNext->getFrontendUrl();
							break;
						}
						

					default:
						$href = $objModel->getFrontendUrl();
						break;
				}

				$trail = \in_array($objModel->id, $objPage->trail);

				
				if ($objPage->id == $objModel->id && $href == Environment::get('request'))
				{
					$strClass = trim($objModel->cssClass);
					$row = $objModel->row();

					$row['isActive'] = true;
					$row['isTrail'] = false;
					$row['class'] = trim('active ' . $strClass);
					$row['title'] = StringUtil::specialchars($objModel->title, true);
					$row['pageTitle'] = StringUtil::specialchars($objModel->pageTitle, true);
					$row['link'] = $objModel->title;
					$row['href'] = $href;
					$row['nofollow'] = (strncmp($objModel->robots, 'noindex,nofollow', 16) === 0);
					$row['target'] = '';
					$row['description'] = str_replace(array("\n", "\r"), array(' ', ''), $objModel->description);

					
					if ($objModel->type == 'redirect' && $objModel->target)
					{
						$row['target'] = ' target="_blank"';
					}

					$items[] = $row;
				}

				
				else
				{
					$strClass = trim($objModel->cssClass . ($trail ? ' trail' : ''));
					$row = $objModel->row();

					$row['isActive'] = false;
					$row['isTrail'] = $trail;
					$row['class'] = $strClass;
					$row['title'] = StringUtil::specialchars($objModel->title, true);
					$row['pageTitle'] = StringUtil::specialchars($objModel->pageTitle, true);
					$row['link'] = $objModel->title;
					$row['href'] = $href;
					$row['nofollow'] = (strncmp($objModel->robots, 'noindex,nofollow', 16) === 0);
					$row['target'] = '';
					$row['description'] = str_replace(array("\n", "\r"), array(' ', ''), $objModel->description);

					
					if ($objModel->type == 'redirect' && $objModel->target)
					{
						$row['target'] = ' target="_blank"';
					}

					$items[] = $row;
				}
			}
		}

		
		$items[0]['class'] = trim($items[0]['class'] . ' first');
		$last = \count($items) - 1;
		$items[$last]['class'] = trim($items[$last]['class'] . ' last');

		$objTemplate->items = $items;

		$this->Template->request = Environment::get('indexFreeRequest');
		$this->Template->skipId = 'skipNavigation' . $this->id;
		$this->Template->skipNavigation = StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['skipNavigation']);
		$this->Template->items = !empty($items) ? $objTemplate->parse() : '';
	}
protected function compile ( ) { /** @var PageModel $objPage */ global $ objPage ; $ items = array ( ) ; $ groups = array ( ) ; // Get all groups of the current front end user if ( FE_USER_LOGGED_IN ) { $ this -> import ( FrontendUser :: class , 'User' ) ; $ groups = $ this -> User -> groups ; } // Get all active pages and also include root pages if the language is added to the URL (see #72) $ objPages = PageModel :: findPublishedRegularWithoutGuestsByIds ( $ this -> pages , array ( 'includeRoot' => Config :: get ( 'addLanguageToUrl' ) ) ) ; // Return if there are no pages if ( $ objPages === null ) { return ; } $ arrPages = array ( ) ; // Sort the array keys according to the given order if ( $ this -> orderPages != '' ) { $ tmp = StringUtil :: deserialize ( $ this -> orderPages ) ; if ( ! empty ( $ tmp ) && \ is_array ( $ tmp ) ) { $ arrPages = array_map ( function ( ) { } , array_flip ( $ tmp ) ) ; } } // Add the items to the pre-sorted array while ( $ objPages -> next ( ) ) { $ arrPages [ $ objPages -> id ] = $ objPages -> current ( ) ; } $ arrPages = array_values ( array_filter ( $ arrPages ) ) ; // Set default template if ( $ this -> navigationTpl == '' ) { $ this -> navigationTpl = 'nav_default' ; } $ objTemplate = new FrontendTemplate ( $ this -> navigationTpl ) ; $ objTemplate -> type = \ get_class ( $ this ) ; $ objTemplate -> cssID = $ this -> cssID ; // see #4897 and 6129 $ objTemplate -> level = 'level_1' ; /** @var PageModel[] $arrPages */ foreach ( $ arrPages as $ objModel ) { $ _groups = StringUtil :: deserialize ( $ objModel -> groups ) ; // Do not show protected pages unless a front end user is logged in if ( ! $ objModel -> protected || $ this -> showProtected || ( \ is_array ( $ _groups ) && \ is_array ( $ groups ) && \ count ( array_intersect ( $ _groups , $ groups ) ) ) ) { // Get href switch ( $ objModel -> type ) { case 'redirect' : $ href = $ objModel -> url ; break ; case 'root' : // Overwrite the alias to link to the empty URL or language URL (see #1641) $ objModel -> alias = 'index' ; $ href = $ objModel -> getFrontendUrl ( ) ; break ; case 'forward' : if ( $ objModel -> jumpTo ) { $ objNext = PageModel :: findPublishedById ( $ objModel -> jumpTo ) ; } else { $ objNext = PageModel :: findFirstPublishedRegularByPid ( $ objModel -> id ) ; } if ( $ objNext instanceof PageModel ) { $ href = $ objNext -> getFrontendUrl ( ) ; break ; } // DO NOT ADD A break; STATEMENT default : $ href = $ objModel -> getFrontendUrl ( ) ; break ; } $ trail = \ in_array ( $ objModel -> id , $ objPage -> trail ) ; // Active page if ( $ objPage -> id == $ objModel -> id && $ href == Environment :: get ( 'request' ) ) { $ strClass = trim ( $ objModel -> cssClass ) ; $ row = $ objModel -> row ( ) ; $ row [ 'isActive' ] = true ; $ row [ 'isTrail' ] = false ; $ row [ 'class' ] = trim ( 'active ' . $ strClass ) ; $ row [ 'title' ] = StringUtil :: specialchars ( $ objModel -> title , true ) ; $ row [ 'pageTitle' ] = StringUtil :: specialchars ( $ objModel -> pageTitle , true ) ; $ row [ 'link' ] = $ objModel -> title ; $ row [ 'href' ] = $ href ; $ row [ 'nofollow' ] = ( strncmp ( $ objModel -> robots , 'noindex,nofollow' , 16 ) === 0 ) ; $ row [ 'target' ] = '' ; $ row [ 'description' ] = str_replace ( array ( "\n" , "\r" ) , array ( ' ' , '' ) , $ objModel -> description ) ; // Override the link target if ( $ objModel -> type == 'redirect' && $ objModel -> target ) { $ row [ 'target' ] = ' target="_blank"' ; } $ items [ ] = $ row ; } // Regular page else { $ strClass = trim ( $ objModel -> cssClass . ( $ trail ? ' trail' : '' ) ) ; $ row = $ objModel -> row ( ) ; $ row [ 'isActive' ] = false ; $ row [ 'isTrail' ] = $ trail ; $ row [ 'class' ] = $ strClass ; $ row [ 'title' ] = StringUtil :: specialchars ( $ objModel -> title , true ) ; $ row [ 'pageTitle' ] = StringUtil :: specialchars ( $ objModel -> pageTitle , true ) ; $ row [ 'link' ] = $ objModel -> title ; $ row [ 'href' ] = $ href ; $ row [ 'nofollow' ] = ( strncmp ( $ objModel -> robots , 'noindex,nofollow' , 16 ) === 0 ) ; $ row [ 'target' ] = '' ; $ row [ 'description' ] = str_replace ( array ( "\n" , "\r" ) , array ( ' ' , '' ) , $ objModel -> description ) ; // Override the link target if ( $ objModel -> type == 'redirect' && $ objModel -> target ) { $ row [ 'target' ] = ' target="_blank"' ; } $ items [ ] = $ row ; } } } // Add classes first and last $ items [ 0 ] [ 'class' ] = trim ( $ items [ 0 ] [ 'class' ] . ' first' ) ; $ last = \ count ( $ items ) - 1 ; $ items [ $ last ] [ 'class' ] = trim ( $ items [ $ last ] [ 'class' ] . ' last' ) ; $ objTemplate -> items = $ items ; $ this -> Template -> request = Environment :: get ( 'indexFreeRequest' ) ; $ this -> Template -> skipId = 'skipNavigation' . $ this -> id ; $ this -> Template -> skipNavigation = StringUtil :: specialchars ( $ GLOBALS [ 'TL_LANG' ] [ 'MSC' ] [ 'skipNavigation' ] ) ; $ this -> Template -> items = ! empty ( $ items ) ? $ objTemplate -> parse ( ) : '' ; }
Generate the module
Generate the module