viewgit/inc/functions.php:22 Function utf8_encode() is deprecated [8192]
<?php /** * SeekQuarry/Yioop -- * Open Source Pure PHP Search Engine, Crawler, and Indexer * * Copyright (C) 2009 - 2022 Chris Pollett chris@pollett.org * * LICENSE: * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. * * END LICENSE * * @author Chris Pollett chris@pollett.org * @license https://www.gnu.org/licenses/ GPL3 * @link https://www.seekquarry.com/ * @copyright 2009 - 2022 * @filesource */ namespace seekquarry\yioop\views\helpers; use seekquarry\yioop\configs as C; /** * This is a helper class is used to handle * draw select options form elements * * @author Chris Pollett */ class OptionsHelper extends Helper { /** * Draws an HTML select tag according to the supplied parameters * * @param string $id the id attribute the select tag should have * If empty string id attribute not echo'd * @param string $name the name this form element should use * If empty string name attribute not echo'd * @param array $options an array of key value pairs for the options * tags of this select element. The key is used as an option tag's * value and the value being used as its contents. If the value * is empty in a key value pair then the key is taken as the * label of a new optgroup. * @param string $selected which option (note singular -- no support * for selecting more than one) should be set as selected * in the select tag * @param mixed $onchange_action if true then submit the parent form if * this drop down is changed, if false, normal dropdown, if * a callback function, then when change call callback * @param array $additional_attributes associative array of attributes => * values to add to the open select tag if present */ public function render($id, $name, $options, $selected, $onchange_action = false, $additional_attributes = []) { $stretch = ($_SERVER["MOBILE"]) ? 4 : 6; $word_wrap_len = $stretch * C\NAME_TRUNCATE_LEN; $id_info = ($id != "") ? " id='$id' " : " "; $name_info = ($name != "") ? " name='$name' " : " "; ?> <select <?= $id_info ?> <?= $name_info ?> <?php if ($onchange_action === true) { e(' onchange="this.form.submit()" '); } else if (is_string($onchange_action) ) { e(" onchange='$onchange_action' "); } foreach ($additional_attributes as $attribute => $value) { e(" $attribute='$value' "); } ?> > <?php $open_optgroup = false; foreach ($options as $value => $text) { if (empty($text) && !empty($value)) { if ($open_optgroup) { ?></optgroup><?php } ?><optgroup label='<?=$value ?>'><?php continue; } ?> <option value="<?= $value ?>" <?php if (trim($value) == ((is_string($selected)) ? trim($selected) : $selected)) { e('selected="selected"'); } if (mb_strlen($text) > $word_wrap_len + 3) { $text = mb_substr($text, 0, $word_wrap_len)."..."; } ?>><?= $text ?></option> <?php } if ($open_optgroup) { ?></optgroup><?php } ?> </select><?php if ($onchange_action !== false) { ?> <noscript> <input type="submit" value="<?=tl('option_helper_go') ?>"> </noscript> <?php } } /** * Creates a dropdown where selecting an item redirects to a given url. * * @param string $id the id attribute the select tag should have * If empty string id attribute not echo'd * @param array $options an array of key value pairs for the options * tags of this select element. The key is used as an option tag's * value and the value being used as its contents. If the value * is empty in a key value pair then the key is taken as the * label of a new optgroup. * @param string $selected which url should be selected in dropdown * @param string $url_prefix keys in $options should correspond to urls. * if such a key doesn't begin with http, it is assumed to be * a url suffix and the value $url_prefix is put before it to get * a complete url before the window location is changed. * @param boolean $as_list whether to output the result as a dropdown * or as an unordered list. * @param string $class_list a string of additional CSS classes for outer- * most div tag * @param string $show_top if empty then the selected item value will be the * clickable link at the top of the drop down, if non-empty * then the text of $show_top will be used. */ public function renderLinkDropDown($id, $options, $selected, $url_prefix, $as_list = false, $class_list = "", $show_top = "") { if ($as_list) { $started = false; foreach ($options as $url => $option) { if (empty($option)) { if ($started) { $started = false; e("</ul>"); } e("<h2 class='option-heading'>". urldecode($url) . "</h2>"); } else { if (!$started) { e("<ul class='square-list $class_list'>"); $started = true; } $out_url = (strpos($url, 'http') !== 0 && strpos($url, C\SHORT_BASE_URL) !== 0 && strpos($url, 'javascript:') !== 0) ? $url_prefix . $url : $url; $out_url = rtrim($out_url, "?"); if ($url == $selected) { e("<li><b><a href='$out_url'>" . urldecode($option). "</a></b></li>"); } else { e("<li><a href='$out_url'>" . urldecode($option). "</a></li>"); } } } if ($started) { e("</ul>"); } } else { $stretch = ($_SERVER["MOBILE"]) ? 4 : 6; $word_wrap_len = $stretch * C\NAME_TRUNCATE_LEN; $id_info = ($id != "") ? " id='$id' " : " "; $list_id_info = ($id != "") ? " id='$id-list' " : " "; $selected_id_info = ($id != "") ? " id='selected-$id' " : " "; $selected_id_info2 = ($id != "") ? " id='selected2-$id' " : " "; $opt_group = ""; $options = (empty($options)) ? [] : $options; foreach ($options as $value => $text) { if (empty($selected_text) || $value == $selected) { $selected_text = $text; } if (empty($text) && !empty($value)) { $opt_group = " class='opt-group' "; } } $show_top = (empty($show_top)) ? $selected_text : $show_top; ?> <div class="dropdown-container <?=$class_list?>" <?= $id_info ?>> <ul class="link-dropdown" > <li tabindex="0"><a class="dropdown-selector" <?=$selected_id_info?> href="javascript:this.preventDefault;"><b><?=$show_top ?></b></a> <ul <?=$list_id_info?>><?php foreach ($options as $value => $text) { if (empty($text) && !empty($value)) { ?><li><b><?=urldecode($value) ?></b></li><?php } else { if (empty($value)) { $value = ""; } $out_url = (strpos($value, 'http') !== 0 && strpos($value, C\SHORT_BASE_URL) !== 0 && strpos($value, 'javascript:') !== 0) ? $url_prefix . $value : $value; if ($selected_text == $text) { ?><li>✓<a <?= $selected_id_info2 ?> <?= $opt_group?> href="<?=$out_url ?>" ><?=urldecode($text) ?></a></li><?php } else { ?><li> <a <?= $opt_group?> href="<?=$out_url ?>" ><?=urldecode($text) ?></a></li><?php } } }?> </ul> </li> </ul> </div><?php } } }