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;
}
}
?>