browse_foreigners.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  1. <?php
  2. /* vim: set expandtab sw=4 ts=4 sts=4: */
  3. /**
  4. * display selection for relational field values
  5. *
  6. * @package PhpMyAdmin
  7. */
  8. require_once 'libraries/common.inc.php';
  9. require_once 'libraries/transformations.lib.php';
  10. /**
  11. * Sets globals from $_REQUEST
  12. */
  13. $request_params = array(
  14. 'field',
  15. 'fieldkey',
  16. 'foreign_filter',
  17. 'pos',
  18. 'rownumber'
  19. );
  20. foreach ($request_params as $one_request_param) {
  21. if (isset($_REQUEST[$one_request_param])) {
  22. $GLOBALS[$one_request_param] = $_REQUEST[$one_request_param];
  23. }
  24. }
  25. PMA_Util::checkParameters(array('db', 'table', 'field'));
  26. $response = PMA_Response::getInstance();
  27. $response->getFooter()->setMinimal();
  28. $header = $response->getHeader();
  29. $header->disableMenu();
  30. $header->setBodyId('body_browse_foreigners');
  31. /**
  32. * Displays the frame
  33. */
  34. $cfgRelation = PMA_getRelationsParam();
  35. $foreigners = ($cfgRelation['relwork'] ? PMA_getForeigners($db, $table) : false);
  36. $override_total = true;
  37. if (! isset($pos)) {
  38. $pos = 0;
  39. }
  40. $foreign_limit = 'LIMIT ' . $pos . ', ' . $GLOBALS['cfg']['MaxRows'] . ' ';
  41. if (isset($foreign_navig) && $foreign_navig == __('Show all')) {
  42. unset($foreign_limit);
  43. }
  44. $foreignData = PMA_getForeignData(
  45. $foreigners, $field, $override_total,
  46. isset($foreign_filter) ? $foreign_filter : '', $foreign_limit
  47. );
  48. if (isset($rownumber)) {
  49. $rownumber_param = '&amp;rownumber=' . urlencode($rownumber);
  50. } else {
  51. $rownumber_param = '';
  52. }
  53. $gotopage = '';
  54. $showall = '';
  55. if (is_array($foreignData['disp_row'])) {
  56. if ($cfg['ShowAll']
  57. && ($foreignData['the_total'] > $GLOBALS['cfg']['MaxRows'])
  58. ) {
  59. $showall = '<input type="submit" name="foreign_navig" value="'
  60. . __('Show all') . '" />';
  61. }
  62. $session_max_rows = $GLOBALS['cfg']['MaxRows'];
  63. $pageNow = @floor($pos / $session_max_rows) + 1;
  64. $nbTotalPage = @ceil($foreignData['the_total'] / $session_max_rows);
  65. if ($foreignData['the_total'] > $GLOBALS['cfg']['MaxRows']) {
  66. $gotopage = PMA_Util::pageselector(
  67. 'pos',
  68. $session_max_rows,
  69. $pageNow,
  70. $nbTotalPage,
  71. 200,
  72. 5,
  73. 5,
  74. 20,
  75. 10,
  76. __('Page number:')
  77. );
  78. }
  79. }
  80. // When coming from Table/Zoom search
  81. if (isset($_REQUEST['fromsearch'])) {
  82. // In table or zoom search, input fields are named "criteriaValues"
  83. $element_name = " var field = 'criteriaValues';\n";
  84. } else {
  85. // In insert/edit, input fields are named "fields"
  86. $element_name = " var field = 'fields';\n";
  87. }
  88. if (isset($rownumber)) {
  89. $element_name .= " var element_name = field + '[multi_edit]["
  90. . htmlspecialchars($rownumber) . "][' + fieldmd5 + ']';\n"
  91. . " var null_name = field_null + '[multi_edit]["
  92. . htmlspecialchars($rownumber) . "][' + fieldmd5 + ']';\n";
  93. } else {
  94. $element_name .= "var element_name = field + '[]'";
  95. }
  96. $error = PMA_jsFormat(
  97. __(
  98. 'The target browser window could not be updated. '
  99. . 'Maybe you have closed the parent window, or '
  100. . 'your browser\'s security settings are '
  101. . 'configured to block cross-window updates.'
  102. )
  103. );
  104. if (! isset($fieldkey) || ! is_numeric($fieldkey)) {
  105. $fieldkey = 0;
  106. }
  107. $code = <<<EOC
  108. self.focus();
  109. function formupdate(fieldmd5, key) {
  110. var \$inline = window.opener.jQuery('.browse_foreign_clicked');
  111. if (\$inline.length != 0) {
  112. \$inline.removeClass('browse_foreign_clicked')
  113. // for grid editing,
  114. // puts new value in the previous element which is
  115. // a span with class curr_value, and trigger .change()
  116. .prev('.curr_value').text(key).change();
  117. // for zoom-search editing, puts new value in the previous
  118. // element which is an input field
  119. \$inline.prev('input[type=text]').val(key);
  120. self.close();
  121. return false;
  122. }
  123. if (opener && opener.document && opener.document.insertForm) {
  124. var field = 'fields';
  125. var field_null = 'fields_null';
  126. $element_name
  127. var element_name_alt = field + '[$fieldkey]';
  128. if (opener.document.insertForm.elements[element_name]) {
  129. // Edit/Insert form
  130. opener.document.insertForm.elements[element_name].value = key;
  131. if (opener.document.insertForm.elements[null_name]) {
  132. opener.document.insertForm.elements[null_name].checked = false;
  133. }
  134. self.close();
  135. return false;
  136. } else if (opener.document.insertForm.elements[element_name_alt]) {
  137. // Search form
  138. opener.document.insertForm.elements[element_name_alt].value = key;
  139. self.close();
  140. return false;
  141. }
  142. }
  143. alert('$error');
  144. }
  145. EOC;
  146. $header->getScripts()->addCode($code);
  147. // HTML output
  148. $output = '<form action="browse_foreigners.php" method="post">'
  149. . '<fieldset>'
  150. . PMA_generate_common_hidden_inputs($db, $table)
  151. . '<input type="hidden" name="field" value="' . htmlspecialchars($field) . '" />'
  152. . '<input type="hidden" name="fieldkey" value="'
  153. . (isset($fieldkey) ? htmlspecialchars($fieldkey) : '') . '" />';
  154. if (isset($rownumber)) {
  155. $output .= '<input type="hidden" name="rownumber" value="'
  156. . htmlspecialchars($rownumber) . '" />';
  157. }
  158. $output .= '<span class="formelement">'
  159. . '<label for="input_foreign_filter">' . __('Search') . ':' . '</label>'
  160. . '<input type="text" name="foreign_filter" id="input_foreign_filter" value="'
  161. . (isset($foreign_filter) ? htmlspecialchars($foreign_filter) : '') . '" />'
  162. . '<input type="submit" name="submit_foreign_filter" value="'
  163. . __('Go') . '" />'
  164. . '</span>'
  165. . '<span class="formelement">' . $gotopage . '</span>'
  166. . '<span class="formelement">' . $showall . '</span>'
  167. . '</fieldset>'
  168. . '</form>';
  169. $output .= '<table width="100%">';
  170. if (is_array($foreignData['disp_row'])) {
  171. $header = '<tr>
  172. <th>' . __('Keyname') . '</th>
  173. <th>' . __('Description') . '</th>
  174. <td width="20%"></td>
  175. <th>' . __('Description') . '</th>
  176. <th>' . __('Keyname') . '</th>
  177. </tr>';
  178. $output .= '<thead>' . $header . '</thead>' . "\n"
  179. . '<tfoot>' . $header . '</tfoot>' . "\n"
  180. . '<tbody>' . "\n";
  181. $values = array();
  182. $keys = array();
  183. foreach ($foreignData['disp_row'] as $relrow) {
  184. if ($foreignData['foreign_display'] != false) {
  185. $values[] = $relrow[$foreignData['foreign_display']];
  186. } else {
  187. $values[] = '';
  188. }
  189. $keys[] = $relrow[$foreignData['foreign_field']];
  190. }
  191. asort($keys);
  192. $hcount = 0;
  193. $odd_row = true;
  194. $val_ordered_current_row = 0;
  195. $val_ordered_current_equals_data = false;
  196. $key_ordered_current_equals_data = false;
  197. foreach ($keys as $key_ordered_current_row => $value) {
  198. $hcount++;
  199. if ($cfg['RepeatCells'] > 0 && $hcount > $cfg['RepeatCells']) {
  200. $output .= $header;
  201. $hcount = 0;
  202. $odd_row = true;
  203. }
  204. $key_ordered_current_key = $keys[$key_ordered_current_row];
  205. $key_ordered_current_val = $values[$key_ordered_current_row];
  206. $val_ordered_current_key = $keys[$val_ordered_current_row];
  207. $val_ordered_current_val = $values[$val_ordered_current_row];
  208. $val_ordered_current_row++;
  209. if (PMA_strlen($val_ordered_current_val) <= $cfg['LimitChars']) {
  210. $val_ordered_current_val = htmlspecialchars(
  211. $val_ordered_current_val
  212. );
  213. $val_ordered_current_val_title = '';
  214. } else {
  215. $val_ordered_current_val_title = htmlspecialchars(
  216. $val_ordered_current_val
  217. );
  218. $val_ordered_current_val = htmlspecialchars(
  219. PMA_substr($val_ordered_current_val, 0, $cfg['LimitChars'])
  220. . '...'
  221. );
  222. }
  223. if (PMA_strlen($key_ordered_current_val) <= $cfg['LimitChars']) {
  224. $key_ordered_current_val = htmlspecialchars(
  225. $key_ordered_current_val
  226. );
  227. $key_ordered_current_val_title = '';
  228. } else {
  229. $key_ordered_current_val_title = htmlspecialchars(
  230. $key_ordered_current_val
  231. );
  232. $key_ordered_current_val = htmlspecialchars(
  233. PMA_substr(
  234. $key_ordered_current_val, 0, $cfg['LimitChars']
  235. ) . '...'
  236. );
  237. }
  238. if (! empty($data)) {
  239. $val_ordered_current_equals_data = $val_ordered_current_key == $data;
  240. $key_ordered_current_equals_data = $key_ordered_current_key == $data;
  241. }
  242. $output .= '<tr class="noclick ' . ($odd_row ? 'odd' : 'even') . '">';
  243. $odd_row = ! $odd_row;
  244. $output .= '<td class="nowrap">'
  245. . ($key_ordered_current_equals_data ? '<strong>' : '')
  246. . '<a href="#" title="' . __('Use this value')
  247. . ($key_ordered_current_val_title != ''
  248. ? ': ' . $key_ordered_current_val_title
  249. : '') . '"'
  250. . ' onclick="formupdate(\'' . md5($field) . '\', \''
  251. . PMA_jsFormat($key_ordered_current_key, false) . '\'); return false;">'
  252. . htmlspecialchars($key_ordered_current_key)
  253. . '</a>' . ($key_ordered_current_equals_data ? '</strong>' : '')
  254. . '</td>';
  255. $output .= '<td>'
  256. . ($key_ordered_current_equals_data ? '<strong>' : '')
  257. . '<a href="#" title="' . __('Use this value')
  258. . ($key_ordered_current_val_title != '' ? ': '
  259. . $key_ordered_current_val_title : '') . '" onclick="formupdate(\''
  260. . md5($field) . '\', \''
  261. . PMA_jsFormat($key_ordered_current_key, false)
  262. . '\'); return false;">'
  263. . $key_ordered_current_val . '</a>'
  264. . ($key_ordered_current_equals_data ? '</strong>' : '')
  265. . '</td>';
  266. $output .= '<td width="20%">'
  267. . '<img src="' . $GLOBALS['pmaThemeImage'] . 'spacer.png" alt=""'
  268. . ' width="1" height="1" /></td>';
  269. $output .= '<td>'
  270. . ($val_ordered_current_equals_data ? '<strong>' : '')
  271. . '<a href="#" title="' . __('Use this value')
  272. . ($val_ordered_current_val_title != '' ? ': '
  273. . $val_ordered_current_val_title : '') . '" onclick="formupdate(\''
  274. . md5($field) . '\', \''
  275. . PMA_jsFormat($val_ordered_current_key, false)
  276. . '\'); return false;">'
  277. . $val_ordered_current_val . '</a>'
  278. . ($val_ordered_current_equals_data ? '</strong>' : '')
  279. . '</td>';
  280. $output .= '<td class="nowrap">'
  281. . ($val_ordered_current_equals_data ? '<strong>' : '')
  282. . '<a href="#" title="' . __('Use this value')
  283. . ($val_ordered_current_val_title != ''
  284. ? ': ' . $val_ordered_current_val_title : '')
  285. . '" onclick="formupdate(\'' . md5($field) . '\', \''
  286. . PMA_jsFormat($val_ordered_current_key, false) . '\'); return false;">'
  287. . htmlspecialchars($val_ordered_current_key)
  288. . '</a>' . ($val_ordered_current_equals_data ? '</strong>' : '')
  289. . '</td>';
  290. $output .= '</tr>';
  291. } // end while
  292. }
  293. $output .= '</tbody>'
  294. . '</table>';
  295. $response->addHtml($output);
  296. ?>