limitChars = (int) $limitChars; $this->maxRows = (int) $maxRows; $this->repeatCells = (int) $repeatCells; $this->showAll = (bool) $showAll; $this->themeImage = $themeImage; } /** * Function to get html for one relational key * * @param integer $horizontal_count the current horizontal count * @param string $header table header * @param array $keys all the keys * @param integer $indexByKeyname index by keyname * @param array $descriptions descriptions * @param integer $indexByDescription index by description * @param string $current_value current value on the edit form * * @return string $html the generated html */ private function getHtmlForOneKey( $horizontal_count, $header, array $keys, $indexByKeyname, array $descriptions, $indexByDescription, $current_value ) { $horizontal_count++; $output = ''; // whether the key name corresponds to the selected value in the form $rightKeynameIsSelected = false; $leftKeynameIsSelected = false; if ($this->repeatCells > 0 && $horizontal_count > $this->repeatCells) { $output .= $header; $horizontal_count = 0; } // key names and descriptions for the left section, // sorted by key names $leftKeyname = $keys[$indexByKeyname]; list( $leftDescription, $leftDescriptionTitle ) = $this->getDescriptionAndTitle($descriptions[$indexByKeyname]); // key names and descriptions for the right section, // sorted by descriptions $rightKeyname = $keys[$indexByDescription]; list( $rightDescription, $rightDescriptionTitle ) = $this->getDescriptionAndTitle($descriptions[$indexByDescription]); $indexByDescription++; if (! empty($current_value)) { $rightKeynameIsSelected = $rightKeyname == $current_value; $leftKeynameIsSelected = $leftKeyname == $current_value; } $output .= ''; $output .= Template::get('table/browse_foreigners/column_element')->render([ 'keyname' => $leftKeyname, 'description' => $leftDescription, 'title' => $leftDescriptionTitle, 'is_selected' => $leftKeynameIsSelected, 'nowrap' => true, ]); $output .= Template::get('table/browse_foreigners/column_element')->render([ 'keyname' => $leftKeyname, 'description' => $leftDescription, 'title' => $leftDescriptionTitle, 'is_selected' => $leftKeynameIsSelected, 'nowrap' => false, ]); $output .= '' . ''; $output .= Template::get('table/browse_foreigners/column_element')->render([ 'keyname' => $rightKeyname, 'description' => $rightDescription, 'title' => $rightDescriptionTitle, 'is_selected' => $rightKeynameIsSelected, 'nowrap' => false, ]); $output .= Template::get('table/browse_foreigners/column_element')->render([ 'keyname' => $rightKeyname, 'description' => $rightDescription, 'title' => $rightDescriptionTitle, 'is_selected' => $rightKeynameIsSelected, 'nowrap' => true, ]); $output .= ''; return array($output, $horizontal_count, $indexByDescription); } /** * Function to get html for relational field selection * * @param string $db current database * @param string $table current table * @param string $field field * @param array $foreignData foreign column data * @param string $fieldkey field key * @param string $current_value current columns's value * * @return string */ public function getHtmlForRelationalFieldSelection( $db, $table, $field, array $foreignData, $fieldkey, $current_value ) { $gotopage = $this->getHtmlForGotoPage($foreignData); $foreignShowAll = Template::get('table/browse_foreigners/show_all')->render([ 'foreign_data' => $foreignData, 'show_all' => $this->showAll, 'max_rows' => $this->maxRows, ]); $output = '
' . '
' . Url::getHiddenInputs($db, $table) . '' . ''; if (isset($_POST['rownumber'])) { $output .= ''; } $filter_value = (isset($_POST['foreign_filter']) ? htmlspecialchars($_POST['foreign_filter']) : ''); $output .= '' . '' . '' . '' . '' . '' . $gotopage . '' . '' . $foreignShowAll . '' . '
' . '
'; $output .= ''; if (!is_array($foreignData['disp_row'])) { $output .= '' . '
'; return $output; } $header = ' ' . __('Keyname') . ' ' . __('Description') . ' ' . __('Description') . ' ' . __('Keyname') . ' '; $output .= '' . $header . '' . "\n" . '' . $header . '' . "\n" . '' . "\n"; $descriptions = array(); $keys = array(); foreach ($foreignData['disp_row'] as $relrow) { if ($foreignData['foreign_display'] != false) { $descriptions[] = $relrow[$foreignData['foreign_display']]; } else { $descriptions[] = ''; } $keys[] = $relrow[$foreignData['foreign_field']]; } asort($keys); $horizontal_count = 0; $indexByDescription = 0; foreach ($keys as $indexByKeyname => $value) { list( $html, $horizontal_count, $indexByDescription ) = $this->getHtmlForOneKey( $horizontal_count, $header, $keys, $indexByKeyname, $descriptions, $indexByDescription, $current_value ); $output .= $html; } $output .= '' . ''; return $output; } /** * Get the description (possibly truncated) and the title * * @param string $description the key name's description * * @return array the new description and title */ private function getDescriptionAndTitle($description) { if (mb_strlen($description) <= $this->limitChars) { $description = htmlspecialchars( $description ); $descriptionTitle = ''; } else { $descriptionTitle = htmlspecialchars( $description ); $description = htmlspecialchars( mb_substr( $description, 0, $this->limitChars ) . '...' ); } return array($description, $descriptionTitle); } /** * Function to get html for the goto page option * * @param array|null $foreignData foreign data * * @return string */ private function getHtmlForGotoPage($foreignData) { $gotopage = ''; isset($_POST['pos']) ? $pos = $_POST['pos'] : $pos = 0; if ($foreignData === null || ! is_array($foreignData['disp_row'])) { return $gotopage; } $pageNow = @floor($pos / $this->maxRows) + 1; $nbTotalPage = @ceil($foreignData['the_total'] / $this->maxRows); if ($foreignData['the_total'] > $this->maxRows) { $gotopage = Util::pageselector( 'pos', $this->maxRows, $pageNow, $nbTotalPage, 200, 5, 5, 20, 10, __('Page number:') ); } return $gotopage; } /** * Function to get foreign limit * * @param string $foreignShowAll foreign navigation * * @return string */ public function getForeignLimit($foreignShowAll) { if (isset($foreignShowAll) && $foreignShowAll == __('Show all')) { return null; } isset($_POST['pos']) ? $pos = $_POST['pos'] : $pos = 0; return 'LIMIT ' . $pos . ', ' . $this->maxRows . ' '; } }