| 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: |