YaWK  24.1
Yet another WebKit
submenu.php
Go to the documentation of this file.
1 <?php
3 {
4  use YAWK\db;
5  use YAWK\widget;
6 
7  /**
8  * @details<b>Empty submenu Widget - for development and demo purpose</b>
9  *
10  * <p>If you want to embed any menu on any page in any position, this should be
11  * the widget of your choice! It can handle every menu that you have created
12  * before within YaWK's menu system.</p>
13  *
14  *
15  * @author Daniel Retzl <[email protected]>
16  * @copyright 2018 Daniel Retzl
17  * @version 1.0.0
18  * @brief Submenu widget - embed any menu on any page in any position
19  */
20  class submenu extends widget
21  {
22  /** @var object global widget object data */
23  public $widget = '';
24  /** @var string Title that will be shown above widget */
25  public string $submenuHeading = '';
26  /** @var string Subtext will be displayed beside title */
27  public string $submenuSubtext = '';
28  /** @var string|int ID of the menu to display */
29  public string|int $menuID = '';
30  /** * @var string the class that is applied to the subMenu */
31  public string $subMenuClass;
32  /** * @var string the class that is applied to a subMenu Item */
33  public string $subMenuItemClass;
34  /** @var bool true|false display menu as sidebar */
35  public string $sidebar = 'false';
36  /** @var bool true|false show menu name on top */
37  public bool $showMenuName = false;
38 
39  /**
40  * @brief Load all widget settings from database and fill object
41  * @param object $db Database Object
42  * @brief Load all widget settings on object init.
43  */
44  public function __construct($db)
45  {
46  // load this widget settings from db
47  $this->widget = new widget();
49  foreach ($settings as $property => $value) {
50  $this->$property = $value;
51  }
52 
53  // set sidebar property
54  if (isset($this->widget->data['sidebar'])){
55  $this->sidebar = $this->widget->data['sidebar'];
56  }
57  else {
58  $this->sidebar = 'false';
59  }
60 
61  // check if sidebar is set
62  if ($this->sidebar === 'true')
63  { // include sidebar js
64  echo '<script src="system/widgets/submenu/sidebar.js" type="text/javascript"></script>';
65  // include sidebar css
66  echo '<link rel="stylesheet" href="system/widgets/submenu/sidebar.css">';
67  }
68 
69  // check if menu obj is set
70  if (!isset($menu))
71  {
72  require_once 'system/classes/menu.php';
73  $menu = new \YAWK\menu();
74  }
75  }
76 
77  /**
78  * @brief Init submenu widget and call a function for demo purpose
79  * @brief submenu Widget Init
80  */
81  public function init($db)
82  {
83  // draw headline
84  echo $this->getHeading($this->submenuHeading, $this->submenuSubtext);
85  $this->drawMenu($db);
86  }
87 
88  /**
89  * @brief draw sidebar start
90  * @details If $this->sidebar is set to true, this function will be called before menu entry
91  * and wrap the menu in a sidebar div.
92  * @return void
93  */
94  public function drawSidebarStart(): void
95  {
96  echo '<div id="mySidebar" class="sidebar shadow"><a href="javascript:void(0)" class="btn btn-default" onclick="closeNav()">x</a>';
97  }
98 
99  /**
100  * @brief draw sidebar end
101  * @details If $this->sidebar is set to true, this function will be called after menu entry
102  * and closes the wrapping menu sidebar div.
103  * @return void
104  */
105  public function drawSidebarEnd(): void
106  {
107  echo '</div>';
108  }
109 
110  public function drawMenu($db)
111  {
112  $this->displaySubMenu($db, $this->menuID);
113  }
114 
115  /**
116  * @brief display any subMenu (used by widgets to get any menu in any position)
117  * @copyright 2009-2016 Daniel Retzl
118  * @license https://opensource.org/licenses/MIT
119  * @version 1.0.0
120  * @param object $db database
121  * @param int $menuID the menuID to get data
122  */
123  public function displaySubMenu($db, $menuID)
124  { /** @param db $db */
125 
126  // check if menu name should be displayed
127  if ($this->showMenuName)
128  { // get menu name from db
129  $menuName = "<li class=\"list-group-item\"><b>".\YAWK\menu::getMenuNameByID($db, $menuID)."</b><li>";
130  }
131  else
132  { // don't show menu name
133  $menuName = '';
134  }
135 
136  // get menu entries and draw navbar
137  $res = $db->query("SELECT * FROM {menu}
138  WHERE published = 1
139  AND menuID = '".$menuID."'
140  ORDER by sort, title");
141 
142  $subMenuItem = '';
143  $subMenuClass = '';
144  $subMenuItemClass = '';
145  while ($row = mysqli_fetch_assoc($res))
146  {
147  // check if target is set
148  if (!empty($row['target']))
149  { // target is set
150  $row['target'] = ' target="'.$row['target'].'"';
151  }
152  else
153  { // target is not set
154  $row['target'] = '';
155  }
156 
157  // check if subMenu class is set
158  if (!empty($this->subMenuClass)){
159  $subMenuClass = ' class="'.$this->subMenuClass.'"';
160  }
161  else
162  { // subMenuClass is not set
163  $subMenuClass = '';
164  }
165 
166  // check if subMenuItem class is set
167  if (!empty($this->subMenuItemClass)){
168  $submenuItemClass = ' class="'.$this->subMenuItemClass.'"';
169  }
170  else
171  { // subMenuItemClass is not set
172  $subMenuItemClass = '';
173  }
174 
175  // check if icon is set
176  if (isset($row['icon']))
177  { // set icon markup
178  $icon = '<i class="'.$row["icon"].' text-muted"></i>';
179  }
180  else
181  { // no icon set
182  $icon = "";
183  }
184 
185  // add menu item to menu
186  $subMenuItem .= '<li class="list-group-item hvr-grow"><small>'.$icon.'&nbsp;&nbsp;<a href="'.$row['href'].'"'.$subMenuItemClass.$row['target'].'>'.$row['text'].'</a></small></li>';
187  }
188 
189  // if sidebar is set, start sidebar markup
190  if ($this->sidebar === 'true') { // include sidebar js
191  echo '<button class="openbtn" id="openSubmenuBtn">☰</button>';
192  // wrap menu in sidebar (start)
193  $this->drawSidebarStart();
194  }
195 
196  // draw subMenu
197  echo '<div id="subMenu"'.$subMenuClass.'>
198  <ul class="list-group" style="cursor:pointer;">'.$menuName.' ';
199  echo ' '.$subMenuItem.'</ul>
200  </div>';
201 
202  // if sidebar is set, close sidebar
203  if ($this->sidebar === 'true')
204  { // wrap menu in sidebar (end)
205  $this->drawSidebarEnd();
206  }
207  }
208  }
209 }
Submenu widget - embed any menu on any page in any position.
Definition: submenu.php:20
drawSidebarEnd()
draw sidebar end
Definition: submenu.php:104
displaySubMenu($db, $menuID)
display any subMenu (used by widgets to get any menu in any position)
Definition: submenu.php:122
__construct($db)
Load all widget settings from database and fill object.
Definition: submenu.php:43
init($db)
Init submenu widget and call a function for demo purpose.
Definition: submenu.php:80
drawSidebarStart()
draw sidebar start
Definition: submenu.php:93
Mysqli database class; returns db connection object.
Definition: db.php:16
Widgets are small, useful tools that you can include everywhere in your website.
Definition: widget.php:22
getWidgetSettingsArray($db)
Get widget settings and return it as array.
Definition: widget.php:69
getHeading($heading, $subtext)
Get widget heading and subtext, return headline.
Definition: widget.php:669
if(!isset($page)) if(!isset($db)) if(!isset($lang)) if(isset($_GET['toggleItem'])) if(isset($_GET['del']) &&($_GET['del']==="1")) if(isset($_POST['changetitle'])) if(isset($_POST['changeLanguage'])) if(isset($_POST['add'])) else if(isset($_POST['save'])) else $menuName
Definition: menu-edit.php:217
if(isset($_POST['save'])) $settings
$value