/**
 * 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);
 }