HEX
Server: Apache
System: Linux v38079.2is.nl 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User: democfellows (10015)
PHP: 8.1.34
Disabled: opcache_get_status
Upload Files
File: /var/www/vhosts/creativefellows.nl/test.creativefellows.nl/nomor/classes/NavigationController.php
<?php
	
	class NavigationController extends BaseController{
		
		private $language_base;
		
	    public function __construct($database,$language_base="",array $data,$active_page_name=null)
		{
			
			$this->db 					= $database;
			$this->active_page_name 	= $active_page_name;			
			$this->language_base 		= $language_base;
			
			foreach($data as $el => $val)
			{
				$this->$el = $val;
			}
			
	    }
		
		public function getName()
		{
			return $this->naam;
		}
		
		public function getSectionId()
		{
			return $this->sectie_id;
		}
		
		
		public function getUrl()
		{
			$link = $this->getLinkBase() . $this->vl( $this->getName() );
			return $link;
		}
		
		public function getLinkBase()
		{	
			return $this->language_base;
		}
		
		public function showInFooter()
		{
			return $this->sitelinks == 1 ? true : false;
		}
		
		public function navIsActive($current_section)
		{
			return $this->vl($this->active_page_name) == $this->vl($this->naam) ? "current": "";
		}
		
		public function getNavigationElements($positie_id,$sectie=null,$category_name=null)
		{
			
			if($category_name != null)
			{

				//get category ID
				$cat_info 	= $this->db->run("SELECT * FROM `categories` WHERE `naam` LIKE '".preg_replace("/( |-)/","%",$this->db->esc($category_name))."' AND `active` = '1' OR `url` LIKE '%". preg_replace("/( |-)/","%",$this->db->esc($category_name)) ."%' AND `active` = '1'",false);	

				$cats 		= $this->db->run("SELECT * FROM `categories`, `entry_categories`,`entry_posities` WHERE `entry_categories`.`category_id` = `categories`.`category_id` AND `entry_categories`.`unique_id` = `entry_posities`.`unique_id` AND `categories`.`category_id` = ".$cat_info["category_id"]." AND `categories`.`active`='1' AND `zichtbaar` = '1' AND `entry_posities`.`positie_id` = '$positie_id' ORDER BY position ASC");
				
				return $cats;
				
			}
			
			elseif($sectie != null)
			{

				// new array
				$data 	= array();
				
				// get section ID	
				$sectionId = $this->getSectionData($sectie,"sectie_id"); 
			
				
				// categories
				$data[] 		= $this->getCategories($sectionId); 
				
				
				// entries
				$data[] 		= $this->getEntriesInSection($sectionId,$positie_id); 
							

				return $data;
				
			}	
			
			else return $this->getEntriesOnPosition($positie_id); 
				
		}
		
		
		private function getEntriesOnPosition($position_id)
		{
			$sql = "SELECT * FROM unique_ids,entry_posities WHERE unique_ids.unique_id = entry_posities.unique_id AND entry_posities.positie_id = :positie_id AND unique_ids.status = 2 ORDER BY unique_ids.position ASC";
				
			$sth = $this->db->prepare($sql);
			$sth->execute([
				"positie_id" => $position_id
			]);
				
			return $sth->fetchAll();	
		}
		
		
		private function getEntriesInSection($section_id,$position_id)
		{
			$sql = "SELECT * FROM unique_ids,entry_posities WHERE unique_ids.unique_id = entry_posities.unique_id AND unique_ids.sectie_id = :section_id AND entry_posities.positie_id = :positie_id AND unique_ids.status = 2 ORDER BY unique_ids.position ASC";
				
			$sth = $this->db->prepare($sql);
			$sth->execute([
				"section_id" => $section_id,
				"positie_id" => $position_id
			]);
				
			return $sth->fetchAll();	
			
			
		}
		
		
		private function getCategories($section_id)
		{
			$sql = "SELECT * FROM `categories` WHERE `sectie_id` = :section_id AND `active`='1' AND `zichtbaar` = '1' ORDER BY position ASC";
				
			$sth = $this->db->prepare($sql);
			$sth->execute([
				"section_id" => $section_id
			]);
				
			return $sth->fetchAll();	
	
		}
		
		
		private function getSectionData($name,$return)
		{
			$sql = "SELECT * FROM secties WHERE naam LIKE :name";
				
			$sth = $this->db->prepare($sql);
			$sth->execute([
				"name" => $name
			]);
				
			$data = $sth->fetch();	
			return $data[$return];
			
		}
		
		public function getSideBarElements($section_id,$active_cat,$active_entry,$menu_class="menu vertical")
		{	

			$categories = $this->getCategories($this->getSectionId());
			
			
			$html .= '<ul class="'. $menu_class .'">';
			
			foreach($categories as $cat)
			{
				$link_base 		= $this->getLinkBase() ."/". $this->vl($this->getName()) ."/". $this->vl($cat["url"] ? $cat["url"] : $cat["naam"])."/";
				$cat_is_open 	= $this->vl(strtolower($cat["url"])) != $active_cat ? " hide" : "";
				
				//$html .= $this->vl(strtolower($cat["url"]))." = ".$active_cat;//$active_entry;
				
				$html .= '<li>';
					$html .= '<a href="'. $link_base .'">'. $cat["naam"] .'</a>';
					$html .= '<ul class="nested '. $menu_class . $cat_is_open .'">';
					
					$categoryEntries = $this->getCategoryEntries($cat["category_id"]);
					foreach($categoryEntries as $i => $entry)
					{	
						if($i == 0 || count($categoryEntries) == 1) continue;
							
						$fn				= $entry[0]->first_field;
						$link_label		= $entry[0]->$fn;
						$entry_url		= $this->vl($link_label);
						
						$link_to_item 	= $this->getLinkBase() ."/". $this->vl($this->getName()) ."/". $this->vl($cat["url"] ? $cat["url"] : $cat["naam"]) ."/". $entry_url;
						$is_active		= $entry_url === $active_entry ? "active" : "";
						
						$html .= '<li>';
							$html .= '<a href="'. $link_to_item.'" class="'. $is_active .'">'. $link_label .'</a>';
						$html .= '</li>';
					}
					$html .= '</ul>';
				$html .= '</li>';
				
			}
			
			$html .= '</ul>';
			return $html;
			
		}
		
		
		private function getCategoryEntries($category_id)
		{
			$sql = "SELECT * FROM `entry_categories` RIGHT JOIN `unique_ids` ON `entry_categories`.`unique_id` = `unique_ids`.`unique_id` WHERE category_id = :cat_id";
				
			$sth = $this->db->prepare($sql);
			$sth->execute([
				"cat_id" => $category_id
			]);
			
			$cassette 	= new CassetteController($this->db);
			
			
			$entries 	= [];
	        while($entry = $sth->fetch())
			{
				$entries[] = $cassette->getPage($entry["url"]);
			}
			
			return $entries;
				
		}
		
		
		public function getNavigationOnPosition($positie_id,$sectie=null,$category_name=null,$menu_class="menu vertical")
		{
			
			$subs = $this->getNavigationElements($positie_id,$sectie,$category_name);
			
			
			$dropdown_item_count 	= 0;
			$dropdown_items 		= "";

			if(count($subs[0]) > 0 || count($subs[1]) > 0)
			{

				$dropdown_items .= '<ul class="'. $menu_class .'">';
				for ($i = 0; $i < count($subs); ++$i) {
										
					foreach($subs[$i] as $s)
					{
						
						// Link is category
						if(isset($s["category_id"]))
						{
							$link_to_item 	= $this->getUrl() ."/". $this->vl(($s["url"] ? $s["url"] : $s["naam"]))."/";
							$link_label		= $s["naam"];												
						}

						// Link is entry
						else
						{	
							
							$cassette 		= new CassetteController($this->db);
							$data 			= $cassette->getPage($s["url"]);
														
							$fn				= $data[0]->first_field;
							$link_to_item 	= $data[0]->entry_link;
							$link_label		= $data[0]->$fn;
							
							if($data[0]->redirect) $link_to_item = $data[0]->redirect;


						}

						$dropdown_items .= '<li>';
						$dropdown_items .= '<a href="'. $this->getLinkBase() . $link_to_item .'">'. $link_label .'</a>';
						$dropdown_items .= '</li>';

						$dropdown_item_count++;
					}

				}	
				$dropdown_items .= '</ul>';

			}
		
			return $dropdown_items;
			
		}
		
	
	}
	
?>