index.twig 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. <div class="container-fluid">
  2. <div class="row">
  3. <h2>
  4. {{ get_image('s_db') }}
  5. {% if has_statistics %}
  6. {% trans 'Databases statistics' %}
  7. {% else %}
  8. {% trans 'Databases' %}
  9. {% endif %}
  10. </h2>
  11. </div>
  12. {% if is_create_database_shown %}
  13. <div class="row">
  14. <ul>
  15. <li id="li_create_database" class="no_bullets">
  16. {% if has_create_database_privileges %}
  17. <form method="post" action="{{ url('/server/databases/create') }}" id="create_database_form" class="ajax">
  18. <p>
  19. <strong>
  20. <label for="text_create_db">
  21. {{ get_image('b_newdb') }}
  22. {% trans 'Create database' %}
  23. </label>
  24. {{ show_mysql_docu('CREATE_DATABASE') }}
  25. </strong>
  26. </p>
  27. {{ get_hidden_inputs('', '', 5) }}
  28. <input type="hidden" name="reload" value="1">
  29. {% if has_statistics %}
  30. <input type="hidden" name="statistics" value="1">
  31. {% endif %}
  32. <input type="text" name="new_db" maxlength="64" class="textfield" value="
  33. {{- database_to_create }}" id="text_create_db" placeholder="
  34. {%- trans 'Database name' %}" required>
  35. {% if charsets is not empty %}
  36. <select lang="en" dir="ltr" name="db_collation">
  37. <option value="">{% trans 'Collation' %}</option>
  38. <option value=""></option>
  39. {% for charset in charsets %}
  40. <optgroup label="{{ charset.name }}" title="{{ charset.description }}">
  41. {% for collation in charset.collations %}
  42. <option value="{{ collation.name }}" title="{{ collation.description }}"{{ collation.is_selected ? ' selected' }}>
  43. {{- collation.name -}}
  44. </option>
  45. {% endfor %}
  46. </optgroup>
  47. {% endfor %}
  48. </select>
  49. {% endif %}
  50. <input id="buttonGo" class="btn btn-primary" type="submit" value="{% trans 'Create' %}">
  51. </form>
  52. {% else %}
  53. <p>
  54. <strong>
  55. {{ get_image('b_newdb') }}
  56. {% trans 'Create database' %}
  57. {{ show_mysql_docu('CREATE_DATABASE') }}
  58. </strong>
  59. </p>
  60. <span class="noPrivileges">
  61. {{ get_image('s_error', '', {
  62. 'hspace': 2,
  63. 'border': 0,
  64. 'align': 'middle'
  65. }) }}
  66. {% trans 'No privileges to create databases' %}
  67. </span>
  68. {% endif %}
  69. </li>
  70. </ul>
  71. </div>
  72. {% endif %}
  73. {% if database_count > 0 %}
  74. {% include 'filter.twig' with {'filter_value': ''} only %}
  75. <div id="tableslistcontainer row">
  76. <div class="container-fluid">
  77. {{ get_list_navigator(
  78. database_count,
  79. pos,
  80. url_params,
  81. url('/server/databases'),
  82. 'frame_content',
  83. max_db_list
  84. ) }}
  85. <form class="ajax" action="{{ url('/server/databases') }}" method="post" name="dbStatsForm" id="dbStatsForm">
  86. {{ get_hidden_inputs(url_params) }}
  87. <div class="table-responsive row">
  88. <table class="table table-striped table-hover w-auto">
  89. <thead class="thead-light">
  90. <tr>
  91. {% if is_drop_allowed %}
  92. <th></th>
  93. {% endif %}
  94. <th>
  95. <a href="{{ url('/server/databases', url_params|merge({
  96. 'sort_by': 'SCHEMA_NAME',
  97. 'sort_order': url_params.sort_by == 'SCHEMA_NAME'
  98. and url_params.sort_order == 'asc' ? 'desc' : 'asc'
  99. })) }}">
  100. {% trans 'Database' %}
  101. {% if url_params.sort_by == 'SCHEMA_NAME' %}
  102. {% if url_params.sort_order == 'asc' %}
  103. {{ get_image('s_asc', 'Ascending'|trans) }}
  104. {% else %}
  105. {{ get_image('s_desc', 'Descending'|trans) }}
  106. {% endif %}
  107. {% endif %}
  108. </a>
  109. </th>
  110. <th>
  111. <a href="{{ url('/server/databases', url_params|merge({
  112. 'sort_by': 'DEFAULT_COLLATION_NAME',
  113. 'sort_order': url_params.sort_by == 'DEFAULT_COLLATION_NAME'
  114. and url_params.sort_order == 'asc' ? 'desc' : 'asc'
  115. })) }}">
  116. {% trans 'Collation' %}
  117. {% if url_params.sort_by == 'DEFAULT_COLLATION_NAME' %}
  118. {% if url_params.sort_order == 'asc' %}
  119. {{ get_image('s_asc', 'Ascending'|trans) }}
  120. {% else %}
  121. {{ get_image('s_desc', 'Descending'|trans) }}
  122. {% endif %}
  123. {% endif %}
  124. </a>
  125. </th>
  126. {% if has_statistics %}
  127. {% for name, statistic in header_statistics %}
  128. <th{{ statistic.format == 'byte' ? ' colspan="2"' }}>
  129. <a href="{{ url('/server/databases', url_params|merge({
  130. 'sort_by': name,
  131. 'sort_order': url_params.sort_by == name
  132. and url_params.sort_order == 'asc' ? 'desc' : 'asc'
  133. })) }}">
  134. {{ statistic.title }}
  135. {% if url_params.sort_by == name %}
  136. {% if url_params.sort_order == 'asc' %}
  137. {{ get_image('s_asc', 'Ascending'|trans) }}
  138. {% else %}
  139. {{ get_image('s_desc', 'Descending'|trans) }}
  140. {% endif %}
  141. {% endif %}
  142. </a>
  143. </th>
  144. {% endfor %}
  145. {% endif %}
  146. {% if has_master_replication %}
  147. <th>{% trans 'Master replication' %}</th>
  148. {% endif %}
  149. {% if has_slave_replication %}
  150. <th>{% trans 'Slave replication' %}</th>
  151. {% endif %}
  152. <th>{% trans 'Action' %}</th>
  153. </tr>
  154. </thead>
  155. <tbody>
  156. {% for database in databases %}
  157. <tr class="db-row{{ database.is_system_schema or database.is_pmadb ? ' noclick' }}" data-filter-row="{{ database.name|upper }}">
  158. {% if is_drop_allowed %}
  159. <td class="tool">
  160. <input type="checkbox" name="selected_dbs[]" class="checkall" title="
  161. {{- database.name }}" value="
  162. {{- database.name }}"
  163. {{- database.is_system_schema or database.is_pmadb ? ' disabled' }}>
  164. </td>
  165. {% endif %}
  166. <td class="name">
  167. <a href="{{ database.url }}" title="
  168. {{- "Jump to database '%s'"|trans|format(database.name) }}">
  169. {{ database.name }}
  170. </a>
  171. </td>
  172. <td class="value">
  173. <dfn title="{{ database.collation.description }}">
  174. {{ database.collation.name }}
  175. </dfn>
  176. </td>
  177. {% if has_statistics %}
  178. {% for statistic in database.statistics %}
  179. {% if statistic.format is same as('byte') %}
  180. {% set value = format_byte_down(statistic.raw, 3, 1) %}
  181. <td class="value">
  182. <data value="{{ statistic.raw }}" title="{{ statistic.raw }}">
  183. {{ value[0] }}
  184. </data>
  185. </td>
  186. <td class="unit">{{ value[1] }}</td>
  187. {% else %}
  188. <td class="value">
  189. <data value="{{ statistic.raw }}" title="{{ statistic.raw }}">
  190. {{ format_number(statistic.raw, 0) }}
  191. </data>
  192. </td>
  193. {% endif %}
  194. {% endfor %}
  195. {% endif %}
  196. {% if database.replication.master.status %}
  197. {% if database.replication.master.is_replicated %}
  198. <td class="tool text-center">
  199. {{ get_icon('s_success', 'Replicated'|trans) }}
  200. </td>
  201. {% else %}
  202. <td class="tool text-center">
  203. {{ get_icon('s_cancel', 'Not replicated'|trans) }}
  204. </td>
  205. {% endif %}
  206. {% endif %}
  207. {% if database.replication.slave.status %}
  208. {% if database.replication.slave.is_replicated %}
  209. <td class="tool text-center">
  210. {{ get_icon('s_success', 'Replicated'|trans) }}
  211. </td>
  212. {% else %}
  213. <td class="tool text-center">
  214. {{ get_icon('s_cancel', 'Not replicated'|trans) }}
  215. </td>
  216. {% endif %}
  217. {% endif %}
  218. <td class="tool">
  219. <a class="server_databases" data="
  220. {{- database.name|js_format }}" href="{{ url('/server/privileges', {
  221. 'db': database.name,
  222. 'checkprivsdb': database.name
  223. }) }}" title="
  224. {{- 'Check privileges for database "%s".'|trans|format(database.name) }}">
  225. {{ get_icon('s_rights', 'Check privileges'|trans) }}
  226. </a>
  227. </td>
  228. </tr>
  229. {% endfor %}
  230. </tbody>
  231. <tfoot class="thead-light">
  232. <tr>
  233. <th colspan="{{ is_drop_allowed ? '3' : '2' }}">
  234. {% trans 'Total:' %}
  235. <span id="filter-rows-count">
  236. {{- database_count -}}
  237. </span>
  238. </th>
  239. {% if has_statistics %}
  240. {% for statistic in total_statistics %}
  241. {% if statistic.format is same as('byte') %}
  242. {% set value = format_byte_down(statistic.raw, 3, 1) %}
  243. <th class="value">
  244. <data value="{{ statistic.raw }}" title="{{ statistic.raw }}">
  245. {{ value[0] }}
  246. </data>
  247. </th>
  248. <th class="unit">{{ value[1] }}</th>
  249. {% else %}
  250. <th class="value">
  251. <data value="{{ statistic.raw }}" title="{{ statistic.raw }}">
  252. {{ format_number(statistic.raw, 0) }}
  253. </data>
  254. </th>
  255. {% endif %}
  256. {% endfor %}
  257. {% endif %}
  258. {% if has_master_replication %}
  259. <th></th>
  260. {% endif %}
  261. {% if has_slave_replication %}
  262. <th></th>
  263. {% endif %}
  264. <th></th>
  265. </tr>
  266. </tfoot>
  267. </table>
  268. </div>
  269. {# Footer buttons #}
  270. {% if is_drop_allowed %}
  271. {% include 'select_all.twig' with {
  272. 'theme_image_path': theme_image_path,
  273. 'text_dir': text_dir,
  274. 'form_name': 'dbStatsForm'
  275. } only %}
  276. <button class="btn btn-link mult_submit ajax" type="submit" name="" value="Drop" title="{% trans 'Drop' %}">
  277. {{ get_icon('b_deltbl', 'Drop'|trans) }}
  278. </button>
  279. {% endif %}
  280. {# Enable statistics #}
  281. {% if not has_statistics %}
  282. <div class="row">
  283. {{ 'Note: Enabling the database statistics here might cause heavy traffic between the web server and the MySQL server.'|trans|notice }}
  284. </div>
  285. <div class="row">
  286. <ul>
  287. <li class="li_switch_dbstats">
  288. <a href="{{ url('/server/databases') }}" data-post="{{ get_common({'statistics': '1'}, '') }}" title="{% trans 'Enable statistics' %}">
  289. <strong>{% trans 'Enable statistics' %}</strong>
  290. </a>
  291. </li>
  292. </ul>
  293. </div>
  294. {% endif %}
  295. </form>
  296. </div>
  297. </div>
  298. </div>
  299. {% else %}
  300. <p>{{ 'No databases'|trans|notice }}</p>
  301. {% endif %}