1: <?php
2:
3: class Footer extends \Sphp\tools\Component{
4: private $menufile = null;
5: private $text = "";
6: private $icon = "";
7: private $fullsize = false;
8: private $socialmedia = '<svg xmlns="http://www.w3.org/2000/svg" class="d-none">
9: <symbol id="bootstrap" viewBox="0 0 118 94">
10: <title>Bootstrap</title>
11: <path fill-rule="evenodd" clip-rule="evenodd" d="M24.509 0c-6.733 0-11.715 5.893-11.492 12.284.214 6.14-.064 14.092-2.066 20.577C8.943 39.365 5.547 43.485 0 44.014v5.972c5.547.529 8.943 4.649 10.951 11.153 2.002 6.485 2.28 14.437 2.066 20.577C12.794 88.106 17.776 94 24.51 94H93.5c6.733 0 11.714-5.893 11.491-12.284-.214-6.14.064-14.092 2.066-20.577 2.009-6.504 5.396-10.624 10.943-11.153v-5.972c-5.547-.529-8.934-4.649-10.943-11.153-2.002-6.484-2.28-14.437-2.066-20.577C105.214 5.894 100.233 0 93.5 0H24.508zM80 57.863C80 66.663 73.436 72 62.543 72H44a2 2 0 01-2-2V24a2 2 0 012-2h18.437c9.083 0 15.044 4.92 15.044 12.474 0 5.302-4.01 10.049-9.119 10.88v.277C75.317 46.394 80 51.21 80 57.863zM60.521 28.34H49.948v14.934h8.905c6.884 0 10.68-2.772 10.68-7.727 0-4.643-3.264-7.207-9.012-7.207zM49.948 49.2v16.458H60.91c7.167 0 10.964-2.876 10.964-8.281 0-5.406-3.903-8.178-11.425-8.178H49.948z"></path>
12: </symbol>
13: <symbol id="facebook" viewBox="0 0 16 16">
14: <path d="M16 8.049c0-4.446-3.582-8.05-8-8.05C3.58 0-.002 3.603-.002 8.05c0 4.017 2.926 7.347 6.75 7.951v-5.625h-2.03V8.05H6.75V6.275c0-2.017 1.195-3.131 3.022-3.131.876 0 1.791.157 1.791.157v1.98h-1.009c-.993 0-1.303.621-1.303 1.258v1.51h2.218l-.354 2.326H9.25V16c3.824-.604 6.75-3.934 6.75-7.951z"/>
15: </symbol>
16: <symbol id="instagram" viewBox="0 0 16 16">
17: <path d="M8 0C5.829 0 5.556.01 4.703.048 3.85.088 3.269.222 2.76.42a3.917 3.917 0 0 0-1.417.923A3.927 3.927 0 0 0 .42 2.76C.222 3.268.087 3.85.048 4.7.01 5.555 0 5.827 0 8.001c0 2.172.01 2.444.048 3.297.04.852.174 1.433.372 1.942.205.526.478.972.923 1.417.444.445.89.719 1.416.923.51.198 1.09.333 1.942.372C5.555 15.99 5.827 16 8 16s2.444-.01 3.298-.048c.851-.04 1.434-.174 1.943-.372a3.916 3.916 0 0 0 1.416-.923c.445-.445.718-.891.923-1.417.197-.509.332-1.09.372-1.942C15.99 10.445 16 10.173 16 8s-.01-2.445-.048-3.299c-.04-.851-.175-1.433-.372-1.941a3.926 3.926 0 0 0-.923-1.417A3.911 3.911 0 0 0 13.24.42c-.51-.198-1.092-.333-1.943-.372C10.443.01 10.172 0 7.998 0h.003zm-.717 1.442h.718c2.136 0 2.389.007 3.232.046.78.035 1.204.166 1.486.275.373.145.64.319.92.599.28.28.453.546.598.92.11.281.24.705.275 1.485.039.843.047 1.096.047 3.231s-.008 2.389-.047 3.232c-.035.78-.166 1.203-.275 1.485a2.47 2.47 0 0 1-.599.919c-.28.28-.546.453-.92.598-.28.11-.704.24-1.485.276-.843.038-1.096.047-3.232.047s-2.39-.009-3.233-.047c-.78-.036-1.203-.166-1.485-.276a2.478 2.478 0 0 1-.92-.598 2.48 2.48 0 0 1-.6-.92c-.109-.281-.24-.705-.275-1.485-.038-.843-.046-1.096-.046-3.233 0-2.136.008-2.388.046-3.231.036-.78.166-1.204.276-1.486.145-.373.319-.64.599-.92.28-.28.546-.453.92-.598.282-.11.705-.24 1.485-.276.738-.034 1.024-.044 2.515-.045v.002zm4.988 1.328a.96.96 0 1 0 0 1.92.96.96 0 0 0 0-1.92zm-4.27 1.122a4.109 4.109 0 1 0 0 8.217 4.109 4.109 0 0 0 0-8.217zm0 1.441a2.667 2.667 0 1 1 0 5.334 2.667 2.667 0 0 1 0-5.334z"/>
18: </symbol>
19: <symbol id="twitter" viewBox="0 0 16 16">
20: <path d="M5.026 15c6.038 0 9.341-5.003 9.341-9.334 0-.14 0-.282-.006-.422A6.685 6.685 0 0 0 16 3.542a6.658 6.658 0 0 1-1.889.518 3.301 3.301 0 0 0 1.447-1.817 6.533 6.533 0 0 1-2.087.793A3.286 3.286 0 0 0 7.875 6.03a9.325 9.325 0 0 1-6.767-3.429 3.289 3.289 0 0 0 1.018 4.382A3.323 3.323 0 0 1 .64 6.575v.045a3.288 3.288 0 0 0 2.632 3.218 3.203 3.203 0 0 1-.865.115 3.23 3.23 0 0 1-.614-.057 3.283 3.283 0 0 0 3.067 2.277A6.588 6.588 0 0 1 .78 13.58a6.32 6.32 0 0 1-.78-.045A9.344 9.344 0 0 0 5.026 15z"/>
21: </symbol>
22: </svg>';
23:
24: public function fu_setText($val) {
25: $this->text = $val;
26: }
27: public function fu_setIcon($val) {
28: $this->icon = $val;
29: }
30: public function fu_setFullSize() {
31: $this->fullsize = true;
32: }
33: public function fu_setMenuFile($menupath) {
34: $this->menufile = $menupath;
35: }
36: private function getMenu($callback) {
37: $menuo = "";
38: if($this->menufile != null){
39: include_once($this->menufile);
40: $menu = new FooterMenuUi();
41: $callback($menu);
42: $menu->_run();
43: $menuo = $menu->getOutput();
44: }
45: return $menuo;
46: }
47: public function genMenus($callback,$callbackmenurun) {
48: $menuo = "";
49: if($this->menufile != null){
50: include_once($this->menufile);
51: $menu = new FooterMenuUi();
52: $callback($menu);
53: $strmbar = $menu->genMenuBar();
54: $mnuroot = SphpBase::sphp_api()->getMenuList($menu->getRootMenu());
55: $str1 = "";
56: foreach ($mnuroot as $mnuName => $lstMenu) {
57: $menuo .= $callbackmenurun($lstMenu[0],$strmbar[0] . $menu->genMenu($lstMenu) . $strmbar[1]);
58: }
59: }
60: return $menuo;
61: }
62:
63: protected function onrender() {
64: global $cmpname;
65: if($this->text == "") $this->text = $cmpname;
66: if($this->icon == "") $this->icon = SphpBase::sphp_settings()->slib_path . "/masters/default/imgs/android-icon-192x192.png";
67:
68: $this->setTagName("footer");
69: if(! $this->fullsize){
70: $this->setPreTag('<div class="container" >');
71: $this->setPostTag('</div>');
72: }else{
73: $this->setInnerPreTag('<div class="container" ><div class="row">');
74: $this->element->setInnerPostTag('</div></div>');
75: }
76: $this->element->appendPreTag($this->socialmedia);
77:
78:
79: switch($this->styler){
80: default:{
81: $menuo = $this->getMenu(function($menu){
82: $menu->setNavMenuCss('nav col-md-4 justify-content-end');
83: $menu->setNavMenuItemCss('nav-link px-2 text-body-secondary');
84: });
85: $this->setAttributeDefault("class", "d-flex flex-wrap justify-content-between align-items-center py-3 my-4 border-top mt-auto");
86: $st = '<p class="col-md-4 mb-0 text-body-secondary">© 2024 '. $this->text .'</p>
87: <a href="/" class="col-md-4 d-flex align-items-center justify-content-center mb-3 mb-md-0 me-md-auto link-body-emphasis text-decoration-none">
88: <img src="'. $this->icon .'" class="img img-fluid bi-me2" width="40" />
89: </a>' . $menuo ;
90: break;
91: }case 1:{
92: $menuo = $this->getMenu(function($menu){
93: $menu->setNavMenuCss('nav col-md-4 justify-content-end');
94: $menu->setNavMenuItemCss('nav-link px-2 text-body-secondary');
95: });
96: $this->setAttributeDefault("class", "d-flex flex-wrap justify-content-between align-items-center py-3 my-4 border-top mt-auto");
97: $st = '<div class="col-md-4 d-flex align-items-center">
98: <a href="/" class="mb-3 me-2 mb-md-0 text-body-secondary text-decoration-none lh-1">
99: <img src="'. $this->icon .'" class="img img-fluid bi-me2" width="40" />
100: </a>
101: <span class="mb-3 mb-md-0 text-body-secondary">© 2024 '. $this->text .'</span>
102: </div>
103: '. $menuo .'
104: <ul class="nav col-md-4 justify-content-end list-unstylerd d-flex">
105: <li class="ms-3"><a class="text-body-secondary" href="#"><svg class="bi" width="24" height="24">
106: <use xlink:href="#twitter"></use>
107: </svg></a></li>
108: <li class="ms-3"><a class="text-body-secondary" href="#"><svg class="bi" width="24" height="24">
109: <use xlink:href="#instagram"></use>
110: </svg></a></li>
111: <li class="ms-3"><a class="text-body-secondary" href="#"><svg class="bi" width="24" height="24">
112: <use xlink:href="#facebook"></use>
113: </svg></a></li>
114: </ul>' ;
115: break;
116: }case 2:{
117: $menuo = $this->getMenu(function($menu){
118: $menu->setNavMenuCss('nav justify-content-center border-bottom pb-3 mb-3');
119: $menu->setNavMenuItemCss('nav-link px-2 text-body-secondary');
120: });
121: $this->setAttributeDefault("class", "py-3 my-4 mt-auto");
122: $st = $menuo . '<p class="text-center text-body-secondary">© 2024 '. $this->text .'</p>' ;
123: break;
124: }case 3:{
125: $menuo = $this->genMenus(function($menu){
126: $menu->setNavMenuCss('nav flex-column');
127: $menu->setNavMenuItemCss('nav-link p-0 text-body-secondary');
128: },function($menuname,$str){
129: return '<div class="col mb-3">
130: <h5>'. $menuname .'</h5>'. $str .'
131: </div>';
132: });
133: if($this->fullsize){
134: $this->setAttributeDefault("class", "py-5 my-5 border-top mt-auto");
135: }else{
136: $this->setAttributeDefault("class", "row row-cols-1 row-cols-sm-2 row-cols-md-5 py-5 my-5 border-top mt-auto");
137: }
138: $st = '<div class="col mb-3">
139: <a href="/" class="d-flex align-items-center mb-3 link-body-emphasis text-decoration-none">
140: <img src="'. $this->icon .'" class="img img-fluid bi-me2" width="40" />
141: </a>
142: <p class="text-body-secondary">© 2024 '. $this->text .'</p>
143: </div>
144:
145: <div class="col mb-3">
146:
147: </div>' . $menuo ;
148: break;
149: }case 4:{
150: $menuo = $this->genMenus(function($menu){
151: $menu->setNavMenuCss('nav flex-column');
152: $menu->setNavMenuItemCss('nav-link p-0 text-body-secondary');
153: },function($menuname,$str){
154: return '<div class="col-6 col-md-2 mb-3">
155: <h5>'. $menuname .'</h5>'. $str .'
156: </div>';
157: });
158: $this->setAttributeDefault("class", "py-5 mt-auto");
159: $st = '<div class="row">
160: '. $menuo .'
161: <div class="col-md-5 offset-md-1 mb-3">
162: <form method="post" action="'. getEventURL('newsletter','','index') .'">
163: <h5>Subscribe to our newsletter</h5>
164: <p>Monthly digest of what\'s new and exciting from us.</p>
165: <div class="d-flex flex-column flex-sm-row w-100 gap-2">
166: <label for="newsletter1" class="visually-hidden">Email address</label>
167: <input id="newsletter1" type="text" class="form-control" placeholder="Email address">
168: <button class="btn btn-primary" type="submit">Subscribe</button>
169: </div>
170: </form>
171: </div>
172: </div>
173:
174: <div class="d-flex flex-column flex-sm-row justify-content-between py-4 my-4 border-top">
175: <p>© 2024 '. $this->text .' All rights reserved.</p>
176: <ul class="list-unstylerd d-flex">
177: <li class="ms-3"><a class="link-body-emphasis" href="#"><svg class="bi" width="24" height="24"><use xlink:href="#twitter"></use></svg></a></li>
178: <li class="ms-3"><a class="link-body-emphasis" href="#"><svg class="bi" width="24" height="24"><use xlink:href="#instagram"></use></svg></a></li>
179: <li class="ms-3"><a class="link-body-emphasis" href="#"><svg class="bi" width="24" height="24"><use xlink:href="#facebook"></use></svg></a></li>
180: </ul>
181: </div>';
182: break;
183: }
184:
185: }
186:
187:
188: $this->setInnerHTML($st);
189:
190: }
191: }
192: