/** * 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 */ function PMA_getHtmlForOneKey($horizontal_count, $header, $keys, $indexByKeyname, $descriptions, $indexByDescription, $current_value) { $horizontal_count++; $output = ''; // whether the key name corresponds to the selected value in the form $rightKeynameIsSelected = false; $leftKeynameIsSelected = false; if ($GLOBALS['cfg']['RepeatCells'] > 0 && $horizontal_count > $GLOBALS['cfg']['RepeatCells']) { $output .= $header; $horizontal_count = 0; } // key names and descriptions for the left section, // sorted by key names $leftKeyname = $keys[$indexByKeyname]; list($leftDescription, $leftDescriptionTitle) = PMA_getDescriptionAndTitle($descriptions[$indexByKeyname]); // key names and descriptions for the right section, // sorted by descriptions $rightKeyname = $keys[$indexByDescription]; list($rightDescription, $rightDescriptionTitle) = PMA_getDescriptionAndTitle($descriptions[$indexByDescription]); $indexByDescription++; if (!empty($current_value)) { $rightKeynameIsSelected = $rightKeyname == $current_value; $leftKeynameIsSelected = $leftKeyname == $current_value; } $output .= '<tr class="noclick ' . '>'; $output .= PMA_getHtmlForColumnElement('class="nowrap"', $leftKeynameIsSelected, $leftKeyname, $leftDescription, $leftDescriptionTitle); $output .= PMA_getHtmlForColumnElement('', $leftKeynameIsSelected, $leftKeyname, $leftDescription, $leftDescriptionTitle); $output .= '<td width="20%">' . '<img src="' . $GLOBALS['pmaThemeImage'] . 'spacer.png" alt=""' . ' width="1" height="1" /></td>'; $output .= PMA_getHtmlForColumnElement('', $rightKeynameIsSelected, $rightKeyname, $rightDescription, $rightDescriptionTitle); $output .= PMA_getHtmlForColumnElement('class="nowrap"', $rightKeynameIsSelected, $rightKeyname, $rightDescription, $rightDescriptionTitle); $output .= '</tr>'; return array($output, $horizontal_count, $indexByDescription); }
/** * Test for PMA_getHtmlForColumnElement * * @return void */ function testGetHtmlForColumnElement() { $cssClass = ''; $isSelected = false; $keyname = ''; $description = 'foo'; $title = ''; $result = PMA_getHtmlForColumnElement($cssClass, $isSelected, $keyname, $description, $title); $this->assertContains('<td>', $result); $this->assertContains('<a class="foreign_value" data-key="" href="#" ' . 'title="Use this value">', $result); $cssClass = 'class="baz"'; $isSelected = true; $keyname = 'bar'; $title = 'foo'; $result = PMA_getHtmlForColumnElement($cssClass, $isSelected, $keyname, $description, $title); $this->assertContains('<td class="baz">', $result); $this->assertContains('<strong>', $result); $this->assertContains('<a class="foreign_value" data-key="bar" href="#" ' . 'title="Use this value: foo">', $result); }
/** * 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 array $data data * * @return string */ function PMA_getHtmlForRelationalFieldSelection($db, $table, $field, $foreignData, $fieldkey, $data) { $gotopage = PMA_getHtmlForGotoPage($foreignData); $showall = PMA_getHtmlForShowAll($foreignData); $output = '<form action="browse_foreigners.php" method="post">' . '<fieldset>' . PMA_URL_getHiddenInputs($db, $table) . '<input type="hidden" name="field" value="' . htmlspecialchars($field) . '" />' . '<input type="hidden" name="fieldkey" value="' . (isset($fieldkey) ? htmlspecialchars($fieldkey) : '') . '" />'; if (isset($_REQUEST['rownumber'])) { $output .= '<input type="hidden" name="rownumber" value="' . htmlspecialchars($_REQUEST['rownumber']) . '" />'; } $output .= '<span class="formelement">' . '<label for="input_foreign_filter">' . __('Search:') . '</label>' . '<input type="text" name="foreign_filter" ' . 'id="input_foreign_filter" value="' . (isset($_REQUEST['foreign_filter']) ? htmlspecialchars($_REQUEST['foreign_filter']) : '') . '" />' . '<input type="submit" name="submit_foreign_filter" value="' . __('Go') . '" />' . '</span>' . '<span class="formelement">' . $gotopage . '</span>' . '<span class="formelement">' . $showall . '</span>' . '</fieldset>' . '</form>'; $output .= '<table width="100%">'; if (is_array($foreignData['disp_row'])) { $header = '<tr> <th>' . __('Keyname') . '</th> <th>' . __('Description') . '</th> <td width="20%"></td> <th>' . __('Description') . '</th> <th>' . __('Keyname') . '</th> </tr>'; $output .= '<thead>' . $header . '</thead>' . "\n" . '<tfoot>' . $header . '</tfoot>' . "\n" . '<tbody>' . "\n"; $values = array(); $keys = array(); foreach ($foreignData['disp_row'] as $relrow) { if ($foreignData['foreign_display'] != false) { $values[] = $relrow[$foreignData['foreign_display']]; } else { $values[] = ''; } $keys[] = $relrow[$foreignData['foreign_field']]; } asort($keys); $hcount = 0; $odd_row = true; $val_ordered_current_row = 0; $val_ordered_current_equals_data = false; $key_ordered_current_equals_data = false; foreach ($keys as $key_ordered_current_row => $value) { $hcount++; if ($GLOBALS['cfg']['RepeatCells'] > 0 && $hcount > $GLOBALS['cfg']['RepeatCells']) { $output .= $header; $hcount = 0; $odd_row = true; } $key_ordered_current_key = $keys[$key_ordered_current_row]; $key_ordered_current_val = $values[$key_ordered_current_row]; $val_ordered_current_key = $keys[$val_ordered_current_row]; $val_ordered_current_val = $values[$val_ordered_current_row]; $val_ordered_current_row++; $pmaString = $GLOBALS['PMA_String']; $limitChars = $GLOBALS['cfg']['LimitChars']; if ($pmaString->strlen($val_ordered_current_val) <= $limitChars) { $val_ordered_current_val = htmlspecialchars($val_ordered_current_val); $val_ordered_current_val_title = ''; } else { $val_ordered_current_val_title = htmlspecialchars($val_ordered_current_val); $val_ordered_current_val = htmlspecialchars($pmaString->substr($val_ordered_current_val, 0, $limitChars) . '...'); } if ($pmaString->strlen($key_ordered_current_val) <= $limitChars) { $key_ordered_current_val = htmlspecialchars($key_ordered_current_val); $key_ordered_current_val_title = ''; } else { $key_ordered_current_val_title = htmlspecialchars($key_ordered_current_val); $key_ordered_current_val = htmlspecialchars($pmaString->substr($key_ordered_current_val, 0, $limitChars) . '...'); } if (!empty($data)) { $val_ordered_current_equals_data = $val_ordered_current_key == $data; $key_ordered_current_equals_data = $key_ordered_current_key == $data; } $output .= '<tr class="noclick ' . ($odd_row ? 'odd' : 'even') . '">'; $odd_row = !$odd_row; $output .= PMA_getHtmlForColumnElement('class="nowrap"', $key_ordered_current_equals_data, $key_ordered_current_key, $key_ordered_current_val, $key_ordered_current_val_title, $field); $output .= PMA_getHtmlForColumnElement('', $key_ordered_current_equals_data, $key_ordered_current_key, $key_ordered_current_val, $key_ordered_current_val_title, $field); $output .= '<td width="20%">' . '<img src="' . $GLOBALS['pmaThemeImage'] . 'spacer.png" alt=""' . ' width="1" height="1" /></td>'; $output .= PMA_getHtmlForColumnElement('', $val_ordered_current_equals_data, $key_ordered_current_key, $val_ordered_current_val, $val_ordered_current_val_title, $field); $output .= PMA_getHtmlForColumnElement('class="nowrap"', $val_ordered_current_equals_data, $key_ordered_current_key, $val_ordered_current_val, $val_ordered_current_val_title, $field); $output .= '</tr>'; } // end while } $output .= '</tbody>' . '</table>'; return $output; }
/** * 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 array $data data * * @return string */ function PMA_getHtmlForRelationalFieldSelection($db, $table, $field, $foreignData, $fieldkey, $data) { $gotopage = PMA_getHtmlForGotoPage($foreignData); $showall = PMA_getHtmlForShowAll($foreignData); $output = '<form class="ajax" ' . 'id="browse_foreign_form" name="browse_foreign_from" ' . 'action="browse_foreigners.php" method="post">' . '<fieldset>' . PMA_URL_getHiddenInputs($db, $table) . '<input type="hidden" name="field" value="' . htmlspecialchars($field) . '" />' . '<input type="hidden" name="fieldkey" value="' . (isset($fieldkey) ? htmlspecialchars($fieldkey) : '') . '" />'; if (isset($_REQUEST['rownumber'])) { $output .= '<input type="hidden" name="rownumber" value="' . htmlspecialchars($_REQUEST['rownumber']) . '" />'; } $filter_value = isset($_REQUEST['foreign_filter']) ? htmlspecialchars($_REQUEST['foreign_filter']) : ''; $output .= '<span class="formelement">' . '<label for="input_foreign_filter">' . __('Search:') . '</label>' . '<input type="text" name="foreign_filter" ' . 'id="input_foreign_filter" ' . 'value="' . $filter_value . '" data-old="' . $filter_value . '" ' . '/>' . '<input type="submit" name="submit_foreign_filter" value="' . __('Go') . '" />' . '</span>' . '<span class="formelement">' . $gotopage . '</span>' . '<span class="formelement">' . $showall . '</span>' . '</fieldset>' . '</form>'; $output .= '<table width="100%" id="browse_foreign_table">'; if (!is_array($foreignData['disp_row'])) { $output .= '</tbody>' . '</table>'; return $output; } $header = '<tr> <th>' . __('Keyname') . '</th> <th>' . __('Description') . '</th> <td width="20%"></td> <th>' . __('Description') . '</th> <th>' . __('Keyname') . '</th> </tr>'; $output .= '<thead>' . $header . '</thead>' . "\n" . '<tfoot>' . $header . '</tfoot>' . "\n" . '<tbody>' . "\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); $hcount = 0; $odd_row = true; $indexByDescription = 0; // whether the key name corresponds to the selected value in the form $rightKeynameIsSelected = false; $leftKeynameIsSelected = false; foreach ($keys as $indexByKeyname => $value) { $hcount++; if ($GLOBALS['cfg']['RepeatCells'] > 0 && $hcount > $GLOBALS['cfg']['RepeatCells']) { $output .= $header; $hcount = 0; $odd_row = true; } // key names and descriptions for the left section, // sorted by key names $leftKeyname = $keys[$indexByKeyname]; list($leftDescription, $leftDescriptionTitle) = PMA_getDescriptionAndTitle($descriptions[$indexByKeyname]); // key names and descriptions for the right section, // sorted by descriptions $rightKeyname = $keys[$indexByDescription]; list($rightDescription, $rightDescriptionTitle) = PMA_getDescriptionAndTitle($descriptions[$indexByDescription]); $indexByDescription++; if (!empty($data)) { $rightKeynameIsSelected = $rightKeyname == $data; $leftKeynameIsSelected = $leftKeyname == $data; } $output .= '<tr class="noclick ' . ($odd_row ? 'odd' : 'even') . '">'; $odd_row = !$odd_row; $output .= PMA_getHtmlForColumnElement('class="nowrap"', $leftKeynameIsSelected, $leftKeyname, $leftDescription, $leftDescriptionTitle); $output .= PMA_getHtmlForColumnElement('', $leftKeynameIsSelected, $leftKeyname, $leftDescription, $leftDescriptionTitle); $output .= '<td width="20%">' . '<img src="' . $GLOBALS['pmaThemeImage'] . 'spacer.png" alt=""' . ' width="1" height="1" /></td>'; $output .= PMA_getHtmlForColumnElement('', $rightKeynameIsSelected, $rightKeyname, $rightDescription, $rightDescriptionTitle); $output .= PMA_getHtmlForColumnElement('class="nowrap"', $rightKeynameIsSelected, $rightKeyname, $rightDescription, $rightDescriptionTitle); $output .= '</tr>'; } // end while $output .= '</tbody>' . '</table>'; return $output; }
/** * Test for PMA_getHtmlForColumnElement * * @return void */ function testGetHtmlForColumnElement() { $cssClass = ''; $isSelected = false; $keyname = ''; $description = 'foo'; $title = ''; $result = PMA_getHtmlForColumnElement($cssClass, $isSelected, $keyname, $description, $title); $this->assertTag(PMA_getTagArray('<td>'), $result); $this->assertTag(PMA_getTagArray('<a class="foreign_value" href="#" ' . 'title="Use this value">', array('content' => 'foo')), $result); $cssClass = 'baz'; $isSelected = true; $keyname = 'bar'; $title = 'foo'; $result = PMA_getHtmlForColumnElement($cssClass, $isSelected, $keyname, $description, $title); $this->assertTag(PMA_getTagArray('<td>'), $result); $this->assertTag(PMA_getTagArray('<strong>'), $result); $this->assertTag(PMA_getTagArray('<a class="foreign_value" href="#" ' . 'title="Use this value: foo">', array('content' => 'bar')), $result); }