SpecialSchemaLinks.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489
  1. <?php
  2. /**
  3. * Links configuration for MySQL system tables
  4. */
  5. declare(strict_types=1);
  6. namespace PhpMyAdmin\Config;
  7. use PhpMyAdmin\Url;
  8. use PhpMyAdmin\Util;
  9. class SpecialSchemaLinks
  10. {
  11. /**
  12. * This array represent the details for generating links inside
  13. * special schemas like mysql, information_schema etc.
  14. * Major element represent a schema.
  15. * All the strings in this array represented in lower case
  16. *
  17. * Array structure ex:
  18. * array(
  19. * // Database name is the major element
  20. * 'mysql' => array(
  21. * // Table name
  22. * 'db' => array(
  23. * // Column name
  24. * 'user' => array(
  25. * // Main url param (can be an array where represent sql)
  26. * 'link_param' => 'username',
  27. * // Other url params
  28. * 'link_dependancy_params' => array(
  29. * 0 => array(
  30. * // URL parameter name
  31. * // (can be array where url param has static value)
  32. * 'param_info' => 'hostname',
  33. * // Column name related to url param
  34. * 'column_name' => 'host'
  35. * )
  36. * ),
  37. * // Page to link
  38. * 'default_page' => './' . Url::getFromRoute('/server/privileges')
  39. * )
  40. * )
  41. * )
  42. * );
  43. *
  44. * @return array<string,array<string,array<string,array<string,array<int,array<string,string>>|string>>>>
  45. *
  46. * @phpstan-return array<
  47. * string, array<
  48. * string, array<
  49. * string,
  50. * array{
  51. * 'link_param': string,
  52. * 'link_dependancy_params'?: array<
  53. * int,
  54. * array{'param_info': string, 'column_name': string}
  55. * >,
  56. * 'default_page': string
  57. * }>
  58. * >
  59. * >
  60. * }
  61. */
  62. public static function get(): array
  63. {
  64. global $cfg;
  65. $defaultPage = './' . Util::getScriptNameForOption(
  66. $cfg['DefaultTabTable'],
  67. 'table'
  68. );
  69. return [
  70. 'mysql' => [
  71. 'columns_priv' => [
  72. 'user' => [
  73. 'link_param' => 'username',
  74. 'link_dependancy_params' => [
  75. 0 => [
  76. 'param_info' => 'hostname',
  77. 'column_name' => 'host',
  78. ],
  79. ],
  80. 'default_page' => './' . Url::getFromRoute('/server/privileges'),
  81. ],
  82. 'table_name' => [
  83. 'link_param' => 'table',
  84. 'link_dependancy_params' => [
  85. 0 => [
  86. 'param_info' => 'db',
  87. 'column_name' => 'Db',
  88. ],
  89. ],
  90. 'default_page' => $defaultPage,
  91. ],
  92. 'column_name' => [
  93. 'link_param' => 'field',
  94. 'link_dependancy_params' => [
  95. 0 => [
  96. 'param_info' => 'db',
  97. 'column_name' => 'Db',
  98. ],
  99. 1 => [
  100. 'param_info' => 'table',
  101. 'column_name' => 'Table_name',
  102. ],
  103. ],
  104. 'default_page' => './' . Url::getFromRoute('/table/structure/change', ['change_column' => 1]),
  105. ],
  106. ],
  107. 'db' => [
  108. 'user' => [
  109. 'link_param' => 'username',
  110. 'link_dependancy_params' => [
  111. 0 => [
  112. 'param_info' => 'hostname',
  113. 'column_name' => 'host',
  114. ],
  115. ],
  116. 'default_page' => './' . Url::getFromRoute('/server/privileges'),
  117. ],
  118. ],
  119. 'event' => [
  120. 'name' => [
  121. 'link_param' => 'item_name',
  122. 'link_dependancy_params' => [
  123. 0 => [
  124. 'param_info' => 'db',
  125. 'column_name' => 'db',
  126. ],
  127. ],
  128. 'default_page' => './' . Url::getFromRoute('/database/events', ['edit_item' => 1]),
  129. ],
  130. ],
  131. 'innodb_index_stats' => [
  132. 'table_name' => [
  133. 'link_param' => 'table',
  134. 'link_dependancy_params' => [
  135. 0 => [
  136. 'param_info' => 'db',
  137. 'column_name' => 'database_name',
  138. ],
  139. ],
  140. 'default_page' => $defaultPage,
  141. ],
  142. 'index_name' => [
  143. 'link_param' => 'index',
  144. 'link_dependancy_params' => [
  145. 0 => [
  146. 'param_info' => 'db',
  147. 'column_name' => 'database_name',
  148. ],
  149. 1 => [
  150. 'param_info' => 'table',
  151. 'column_name' => 'table_name',
  152. ],
  153. ],
  154. 'default_page' => './' . Url::getFromRoute('/table/structure'),
  155. ],
  156. ],
  157. 'innodb_table_stats' => [
  158. 'table_name' => [
  159. 'link_param' => 'table',
  160. 'link_dependancy_params' => [
  161. 0 => [
  162. 'param_info' => 'db',
  163. 'column_name' => 'database_name',
  164. ],
  165. ],
  166. 'default_page' => $defaultPage,
  167. ],
  168. ],
  169. 'proc' => [
  170. 'name' => [
  171. 'link_param' => 'item_name',
  172. 'link_dependancy_params' => [
  173. 0 => [
  174. 'param_info' => 'db',
  175. 'column_name' => 'db',
  176. ],
  177. 1 => [
  178. 'param_info' => 'item_type',
  179. 'column_name' => 'type',
  180. ],
  181. ],
  182. 'default_page' => './' . Url::getFromRoute('/database/routines', ['edit_item' => 1]),
  183. ],
  184. 'specific_name' => [
  185. 'link_param' => 'item_name',
  186. 'link_dependancy_params' => [
  187. 0 => [
  188. 'param_info' => 'db',
  189. 'column_name' => 'db',
  190. ],
  191. 1 => [
  192. 'param_info' => 'item_type',
  193. 'column_name' => 'type',
  194. ],
  195. ],
  196. 'default_page' => './' . Url::getFromRoute('/database/routines', ['edit_item' => 1]),
  197. ],
  198. ],
  199. 'proc_priv' => [
  200. 'user' => [
  201. 'link_param' => 'username',
  202. 'link_dependancy_params' => [
  203. 0 => [
  204. 'param_info' => 'hostname',
  205. 'column_name' => 'Host',
  206. ],
  207. ],
  208. 'default_page' => './' . Url::getFromRoute('/server/privileges'),
  209. ],
  210. 'routine_name' => [
  211. 'link_param' => 'item_name',
  212. 'link_dependancy_params' => [
  213. 0 => [
  214. 'param_info' => 'db',
  215. 'column_name' => 'Db',
  216. ],
  217. 1 => [
  218. 'param_info' => 'item_type',
  219. 'column_name' => 'Routine_type',
  220. ],
  221. ],
  222. 'default_page' => './' . Url::getFromRoute('/database/routines', ['edit_item' => 1]),
  223. ],
  224. ],
  225. 'proxies_priv' => [
  226. 'user' => [
  227. 'link_param' => 'username',
  228. 'link_dependancy_params' => [
  229. 0 => [
  230. 'param_info' => 'hostname',
  231. 'column_name' => 'Host',
  232. ],
  233. ],
  234. 'default_page' => './' . Url::getFromRoute('/server/privileges'),
  235. ],
  236. ],
  237. 'tables_priv' => [
  238. 'user' => [
  239. 'link_param' => 'username',
  240. 'link_dependancy_params' => [
  241. 0 => [
  242. 'param_info' => 'hostname',
  243. 'column_name' => 'Host',
  244. ],
  245. ],
  246. 'default_page' => './' . Url::getFromRoute('/server/privileges'),
  247. ],
  248. 'table_name' => [
  249. 'link_param' => 'table',
  250. 'link_dependancy_params' => [
  251. 0 => [
  252. 'param_info' => 'db',
  253. 'column_name' => 'Db',
  254. ],
  255. ],
  256. 'default_page' => $defaultPage,
  257. ],
  258. ],
  259. 'user' => [
  260. 'user' => [
  261. 'link_param' => 'username',
  262. 'link_dependancy_params' => [
  263. 0 => [
  264. 'param_info' => 'hostname',
  265. 'column_name' => 'host',
  266. ],
  267. ],
  268. 'default_page' => './' . Url::getFromRoute('/server/privileges'),
  269. ],
  270. ],
  271. ],
  272. 'information_schema' => [
  273. 'columns' => [
  274. 'table_name' => [
  275. 'link_param' => 'table',
  276. 'link_dependancy_params' => [
  277. 0 => [
  278. 'param_info' => 'db',
  279. 'column_name' => 'table_schema',
  280. ],
  281. ],
  282. 'default_page' => $defaultPage,
  283. ],
  284. 'column_name' => [
  285. 'link_param' => 'field',
  286. 'link_dependancy_params' => [
  287. 0 => [
  288. 'param_info' => 'db',
  289. 'column_name' => 'table_schema',
  290. ],
  291. 1 => [
  292. 'param_info' => 'table',
  293. 'column_name' => 'table_name',
  294. ],
  295. ],
  296. 'default_page' => './' . Url::getFromRoute('/table/structure/change', ['change_column' => 1]),
  297. ],
  298. ],
  299. 'key_column_usage' => [
  300. 'table_name' => [
  301. 'link_param' => 'table',
  302. 'link_dependancy_params' => [
  303. 0 => [
  304. 'param_info' => 'db',
  305. 'column_name' => 'constraint_schema',
  306. ],
  307. ],
  308. 'default_page' => $defaultPage,
  309. ],
  310. 'column_name' => [
  311. 'link_param' => 'field',
  312. 'link_dependancy_params' => [
  313. 0 => [
  314. 'param_info' => 'db',
  315. 'column_name' => 'table_schema',
  316. ],
  317. 1 => [
  318. 'param_info' => 'table',
  319. 'column_name' => 'table_name',
  320. ],
  321. ],
  322. 'default_page' => './' . Url::getFromRoute('/table/structure/change', ['change_column' => 1]),
  323. ],
  324. 'referenced_table_name' => [
  325. 'link_param' => 'table',
  326. 'link_dependancy_params' => [
  327. 0 => [
  328. 'param_info' => 'db',
  329. 'column_name' => 'referenced_table_schema',
  330. ],
  331. ],
  332. 'default_page' => $defaultPage,
  333. ],
  334. 'referenced_column_name' => [
  335. 'link_param' => 'field',
  336. 'link_dependancy_params' => [
  337. 0 => [
  338. 'param_info' => 'db',
  339. 'column_name' => 'referenced_table_schema',
  340. ],
  341. 1 => [
  342. 'param_info' => 'table',
  343. 'column_name' => 'referenced_table_name',
  344. ],
  345. ],
  346. 'default_page' => './' . Url::getFromRoute('/table/structure/change', ['change_column' => 1]),
  347. ],
  348. ],
  349. 'partitions' => [
  350. 'table_name' => [
  351. 'link_param' => 'table',
  352. 'link_dependancy_params' => [
  353. 0 => [
  354. 'param_info' => 'db',
  355. 'column_name' => 'table_schema',
  356. ],
  357. ],
  358. 'default_page' => $defaultPage,
  359. ],
  360. ],
  361. 'processlist' => [
  362. 'user' => [
  363. 'link_param' => 'username',
  364. 'link_dependancy_params' => [
  365. 0 => [
  366. 'param_info' => 'hostname',
  367. 'column_name' => 'host',
  368. ],
  369. ],
  370. 'default_page' => './' . Url::getFromRoute('/server/privileges'),
  371. ],
  372. ],
  373. 'referential_constraints' => [
  374. 'table_name' => [
  375. 'link_param' => 'table',
  376. 'link_dependancy_params' => [
  377. 0 => [
  378. 'param_info' => 'db',
  379. 'column_name' => 'constraint_schema',
  380. ],
  381. ],
  382. 'default_page' => $defaultPage,
  383. ],
  384. 'referenced_table_name' => [
  385. 'link_param' => 'table',
  386. 'link_dependancy_params' => [
  387. 0 => [
  388. 'param_info' => 'db',
  389. 'column_name' => 'constraint_schema',
  390. ],
  391. ],
  392. 'default_page' => $defaultPage,
  393. ],
  394. ],
  395. 'routines' => [
  396. 'routine_name' => [
  397. 'link_param' => 'item_name',
  398. 'link_dependancy_params' => [
  399. 0 => [
  400. 'param_info' => 'db',
  401. 'column_name' => 'routine_schema',
  402. ],
  403. 1 => [
  404. 'param_info' => 'item_type',
  405. 'column_name' => 'routine_type',
  406. ],
  407. ],
  408. 'default_page' => './' . Url::getFromRoute('/database/routines'),
  409. ],
  410. ],
  411. 'schemata' => [
  412. 'schema_name' => [
  413. 'link_param' => 'db',
  414. 'default_page' => $defaultPage,
  415. ],
  416. ],
  417. 'statistics' => [
  418. 'table_name' => [
  419. 'link_param' => 'table',
  420. 'link_dependancy_params' => [
  421. 0 => [
  422. 'param_info' => 'db',
  423. 'column_name' => 'table_schema',
  424. ],
  425. ],
  426. 'default_page' => $defaultPage,
  427. ],
  428. 'column_name' => [
  429. 'link_param' => 'field',
  430. 'link_dependancy_params' => [
  431. 0 => [
  432. 'param_info' => 'db',
  433. 'column_name' => 'table_schema',
  434. ],
  435. 1 => [
  436. 'param_info' => 'table',
  437. 'column_name' => 'table_name',
  438. ],
  439. ],
  440. 'default_page' => './' . Url::getFromRoute('/table/structure/change', ['change_column' => 1]),
  441. ],
  442. ],
  443. 'tables' => [
  444. 'table_name' => [
  445. 'link_param' => 'table',
  446. 'link_dependancy_params' => [
  447. 0 => [
  448. 'param_info' => 'db',
  449. 'column_name' => 'table_schema',
  450. ],
  451. ],
  452. 'default_page' => $defaultPage,
  453. ],
  454. ],
  455. 'table_constraints' => [
  456. 'table_name' => [
  457. 'link_param' => 'table',
  458. 'link_dependancy_params' => [
  459. 0 => [
  460. 'param_info' => 'db',
  461. 'column_name' => 'table_schema',
  462. ],
  463. ],
  464. 'default_page' => $defaultPage,
  465. ],
  466. ],
  467. 'views' => [
  468. 'table_name' => [
  469. 'link_param' => 'table',
  470. 'link_dependancy_params' => [
  471. 0 => [
  472. 'param_info' => 'db',
  473. 'column_name' => 'table_schema',
  474. ],
  475. ],
  476. 'default_page' => $defaultPage,
  477. ],
  478. ],
  479. ],
  480. ];
  481. }
  482. }