| @@ -175,10 +175,8 @@ | ||
| 175 | 175 | * @var string|null |
| 176 | 176 | */ |
| 177 | 177 | protected $message_type = null; |
| 178 | 178 | |
| 179 | - private $current_version; | |
| 180 | - | |
| 181 | 179 | private $option_legacy_tools; |
| 182 | 180 | |
| 183 | 181 | /** |
| 184 | 182 | * Constructor |
| @@ -192,9 +190,8 @@ | ||
| 192 | 190 | $this->wp_nonce_save = wp_create_nonce( static::DASHBOARD_SAVE . WPDA::get_current_user_login() ); |
| 193 | 191 | // Load Data Tables resources. |
| 194 | 192 | \WPDataAccess\Data_Tables\WPDA_Data_Tables::enqueue_styles_and_script(); |
| 195 | 193 | } |
| 196 | - $this->current_version = get_user_meta( WPDA::get_current_user_id(), 'wpda_data_explorer', true ); | |
| 197 | 194 | // Start with empty array. |
| 198 | 195 | if ( $widget_mode ) { |
| 199 | 196 | update_user_meta( WPDA::get_current_user_id(), self::USER_DASHBOARD, array() ); |
| 200 | 197 | } |
| @@ -236,17 +233,9 @@ | ||
| 236 | 233 | $this->dashboard_js(); |
| 237 | 234 | break; |
| 238 | 235 | case WP_Data_Access_Admin::PAGE_MAIN: |
| 239 | 236 | if ( !isset( $_REQUEST['page_action'] ) ) { |
| 240 | - if ( !isset( $_REQUEST['table_name'] ) ) { | |
| 241 | - $this->toolbar_wpda(); | |
| 242 | - } else { | |
| 243 | - if ( !isset( $_REQUEST['action'] ) || 'new' !== $_REQUEST['action'] && 'edit' !== $_REQUEST['action'] ) { | |
| 244 | - $this->toolbar_wpda_table(); | |
| 245 | - } else { | |
| 246 | - $this->toolbar_wpda_row(); | |
| 247 | - } | |
| 248 | - } | |
| 237 | + $this->toolbar_wpda(); | |
| 249 | 238 | } elseif ( 'wpda_backup' === $_REQUEST['page_action'] && (!isset( $_REQUEST['action'] ) || 'remove' === $_REQUEST['action'] || 'update' === $_REQUEST['action'] || 'add' === $_REQUEST['action']) ) { |
| 250 | 239 | $this->toolbar_backup(); |
| 251 | 240 | } elseif ( 'wpda_import_csv' === $_REQUEST['page_action'] ) { |
| 252 | 241 | $this->toolbar_import_csv(); |
| @@ -254,11 +243,8 @@ | ||
| 254 | 243 | break; |
| 255 | 244 | case WP_Data_Access_Admin::PAGE_APPS: |
| 256 | 245 | $this->toolbar_apps(); |
| 257 | 246 | break; |
| 258 | - case WP_Data_Access_Admin::PAGE_QUERY_BUILDER: | |
| 259 | - $this->toolbar_sql(); | |
| 260 | - break; | |
| 261 | 247 | case WP_Data_Access_Admin::PAGE_DESIGNER: |
| 262 | 248 | if ( !isset( $_REQUEST['action'] ) || 'new' !== $_REQUEST['action'] && 'edit' !== $_REQUEST['action'] ) { |
| 263 | 249 | $this->toolbar_designer(); |
| 264 | 250 | } |
| @@ -332,9 +318,9 @@ | ||
| 332 | 318 | $help_url = 'https://docs.wpdataaccess.com/'; |
| 333 | 319 | if ( isset( $_REQUEST['page'] ) ) { |
| 334 | 320 | switch ( $_REQUEST['page'] ) { |
| 335 | 321 | case \WP_Data_Access_Admin::PAGE_MAIN: |
| 336 | - $help_url = 'https://docs.legacy.wpdataaccess.com/docs/data-explorer-getting-started/'; | |
| 322 | + $help_url = 'https://docs.explorer.wpdataaccess.com/'; | |
| 337 | 323 | break; |
| 338 | 324 | case \WP_Data_Access_Admin::PAGE_APPS: |
| 339 | 325 | $help_url = 'https://docs.rad.wpdataaccess.com/'; |
| 340 | 326 | break; |
| @@ -893,8 +879,11 @@ | ||
| 893 | 879 | echo esc_attr( WP_Data_Access_Admin::PAGE_DESIGNER ); |
| 894 | 880 | ?>"> |
| 895 | 881 | <input type="hidden" name="action" value="create_table"> |
| 896 | 882 | <input type="hidden" name="caller" value="dataexplorer"> |
| 883 | + <input type="hidden" name="_wpnonce" value="<?php | |
| 884 | + echo esc_attr( wp_create_nonce( "wpda-query-" . WPDA_Design_Table_Model::get_base_table_name() . "--" ) ); | |
| 885 | + ?>"> | |
| 897 | 886 | </form> |
| 898 | 887 | <form id="wpda_goto_backup" style="display: none" method="post" action="?page=<?php |
| 899 | 888 | echo esc_attr( WP_Data_Access_Admin::PAGE_MAIN ); |
| 900 | 889 | ?>&page_action=wpda_backup"> |
| @@ -931,37 +920,18 @@ | ||
| 931 | 920 | </a> |
| 932 | 921 | </div> |
| 933 | 922 | </div><div> |
| 934 | 923 | <div> |
| 935 | - <?php | |
| 936 | - if ( 'new' !== $this->current_version && '' !== $this->current_version ) { | |
| 937 | - ?> | |
| 938 | - <a onclick="jQuery('#upload_file_container_multi').show();" | |
| 939 | - href="javascript:void(0)" | |
| 940 | - class="wpda-dashboard-item wpda_tooltip" | |
| 941 | - title="Import and execute SQL script files" | |
| 942 | - > | |
| 943 | - <i class="fas fa-file-code"></i> | |
| 944 | - <div> | |
| 945 | - Import SQL files | |
| 946 | - </div> | |
| 947 | - </a> | |
| 948 | - <?php | |
| 949 | - } else { | |
| 950 | - ?> | |
| 951 | - <a onClick="window.ppActionEnableImport();" | |
| 952 | - href="javascript:void(0)" | |
| 953 | - class="wpda-dashboard-item wpda_tooltip" | |
| 954 | - title="Import and execute SQL script files" | |
| 955 | - > | |
| 956 | - <i class="fas fa-file-code"></i> | |
| 957 | - <div> | |
| 958 | - Import SQL files | |
| 959 | - </div> | |
| 960 | - </a> | |
| 961 | - <?php | |
| 962 | - } | |
| 963 | - ?> | |
| 924 | + <a onClick="window.ppActionEnableImport();" | |
| 925 | + href="javascript:void(0)" | |
| 926 | + class="wpda-dashboard-item wpda_tooltip" | |
| 927 | + title="Import and execute SQL script files" | |
| 928 | + > | |
| 929 | + <i class="fas fa-file-code"></i> | |
| 930 | + <div> | |
| 931 | + Import SQL files | |
| 932 | + </div> | |
| 933 | + </a> | |
| 964 | 934 | </div><div> |
| 965 | 935 | <a href="<?php |
| 966 | 936 | echo esc_url( admin_url( 'admin.php' ) ); |
| 967 | 937 | ?>?page=<?php |
| @@ -1004,75 +974,24 @@ | ||
| 1004 | 974 | </div><?php |
| 1005 | 975 | } |
| 1006 | 976 | ?> |
| 1007 | 977 | </div><div> |
| 1008 | - <?php | |
| 1009 | - if ( 'new' !== $this->current_version && '' !== $this->current_version ) { | |
| 1010 | - ?> | |
| 1011 | - <div> | |
| 1012 | - <a onclick="jQuery('#wpda_db_container').show(); jQuery('#local_database').focus();" | |
| 1013 | - href="javascript:void(0)" | |
| 1014 | - class="wpda-dashboard-item wpda_tooltip" | |
| 1015 | - title="Add remote database or create local database" | |
| 1016 | - > | |
| 1017 | - <i id="wpda_toolbar_icon_add_database" class="fas fa-database"></i> | |
| 1018 | - <div> | |
| 1019 | - Add database | |
| 1020 | - </div> | |
| 1021 | - </a> | |
| 1022 | - </div> | |
| 1023 | - <?php | |
| 1024 | - } else { | |
| 1025 | - ?> | |
| 1026 | - <div> | |
| 1027 | - <a onclick="jQuery('#wpda_manage_databases').show(); jQuery('#local_database').focus();" | |
| 1028 | - href="javascript:void(0)" | |
| 1029 | - class="wpda-dashboard-item wpda_tooltip" | |
| 1030 | - title="Manage remote database connections and local databases" | |
| 1031 | - > | |
| 1032 | - <i id="wpda_toolbar_icon_add_database" class="fas fa-server"></i> | |
| 1033 | - <div> | |
| 1034 | - Databases | |
| 1035 | - </div> | |
| 1036 | - </a> | |
| 1037 | - </div><?php | |
| 1038 | - } | |
| 978 | + <div> | |
| 979 | + <a onclick="jQuery('#wpda_manage_databases').show(); jQuery('#local_database').focus();" | |
| 980 | + href="javascript:void(0)" | |
| 981 | + class="wpda-dashboard-item wpda_tooltip" | |
| 982 | + title="Manage remote database connections and local databases" | |
| 983 | + > | |
| 984 | + <i id="wpda_toolbar_icon_add_database" class="fas fa-server"></i> | |
| 985 | + <div> | |
| 986 | + Databases | |
| 987 | + </div> | |
| 988 | + </a> | |
| 989 | + </div><?php | |
| 1039 | 990 | ?> |
| 1040 | - <?php | |
| 1041 | - ?> | |
| 1042 | 991 | </div> |
| 1043 | 992 | </div> |
| 1044 | - <div class="wpda-promotion" style="font-size: 16px"> | |
| 1045 | - <?php | |
| 1046 | - if ( 'new' !== $this->current_version && '' !== $this->current_version ) { | |
| 1047 | - ?> | |
| 1048 | - <a href="?page=<?php | |
| 1049 | - echo esc_attr( WP_Data_Access_Admin::PAGE_MAIN ); | |
| 1050 | - ?>&de=new" | |
| 1051 | - style="display: flex; align-items: center; gap: 5px;" | |
| 1052 | - > | |
| 1053 | - <i class="fas fa-toggle-off"></i> | |
| 1054 | - <span>Switch to new Data Explorer</span> | |
| 1055 | - </a> | |
| 1056 | - <?php | |
| 1057 | - } else { | |
| 1058 | - ?> | |
| 1059 | - <span | |
| 1060 | - style="display: flex; align-items: center; gap: 5px; white-space: nowrap;" | |
| 1061 | - > | |
| 1062 | - <a href="?page=<?php | |
| 1063 | - echo esc_attr( WP_Data_Access_Admin::PAGE_MAIN ); | |
| 1064 | - ?>&de=old" | |
| 1065 | - style="display: flex; align-items: center; gap: 5px; white-space: nowrap;" | |
| 1066 | - > | |
| 1067 | - <i class="fas fa-toggle-on"></i> | |
| 1068 | - <span>Switch to old Data Explorer</span> | |
| 1069 | - </a> | |
| 1070 | - </span> | |
| 1071 | - <?php | |
| 1072 | - } | |
| 1073 | - ?> | |
| 1074 | - </div> | |
| 993 | + <div></div> | |
| 1075 | 994 | <?php |
| 1076 | 995 | //$this->get_promotions('wpda'); |
| 1077 | 996 | ?> |
| 1078 | 997 | </div> |
| @@ -1079,109 +998,8 @@ | ||
| 1079 | 998 | <?php |
| 1080 | 999 | } |
| 1081 | 1000 | |
| 1082 | 1001 | /** |
| 1083 | - * Data Explorer table page toolbar | |
| 1084 | - * | |
| 1085 | - * @return void | |
| 1086 | - */ | |
| 1087 | - protected function toolbar_wpda_table() { | |
| 1088 | - ?> | |
| 1089 | - <form id="wpda_new_row" style="display: none" method="post" action="?page=<?php | |
| 1090 | - echo esc_attr( WP_Data_Access_Admin::PAGE_MAIN ); | |
| 1091 | - ?>"> | |
| 1092 | - <?php | |
| 1093 | - if ( isset( $_REQUEST['wpdaschema_name'] ) ) { | |
| 1094 | - $schema_name = esc_attr( sanitize_text_field( wp_unslash( $_REQUEST['wpdaschema_name'] ) ) ); | |
| 1095 | - // phpcs:disable WordPress.Security.EscapeOutput | |
| 1096 | - echo "<input type='hidden' name='wpdaschema_name' value='{$schema_name}'>"; | |
| 1097 | - // phpcs:enable WordPress.Security.EscapeOutput | |
| 1098 | - } | |
| 1099 | - ?> | |
| 1100 | - <input type="hidden" id="wpda_new_row_table_name" name="table_name" value=""> | |
| 1101 | - <input type="hidden" name="action" value="new"> | |
| 1102 | - </form> | |
| 1103 | - <div id="wpda-dashboard-toolbar" class="wpda-dashboard-toolbar" style="display:none"> | |
| 1104 | - <div class="wpda-nowrap"> | |
| 1105 | - <div> | |
| 1106 | - <div> | |
| 1107 | - <a href="javascript:void(0)" | |
| 1108 | - id="wpda_toolbar_icon_add_row" | |
| 1109 | - class="wpda-dashboard-item wpda_tooltip" | |
| 1110 | - title="Add new row to table" | |
| 1111 | - > | |
| 1112 | - <i class="fas fa-plus-circle"></i> | |
| 1113 | - <div> | |
| 1114 | - Add row | |
| 1115 | - </div> | |
| 1116 | - </a> | |
| 1117 | - </div><div> | |
| 1118 | - <a onclick="jQuery('#upload_file_container').show()" | |
| 1119 | - href="javascript:void(0)" | |
| 1120 | - class="wpda-dashboard-item wpda_tooltip" | |
| 1121 | - title="Allows only imports into table authors" | |
| 1122 | - > | |
| 1123 | - <i class="fas fa-code"></i> | |
| 1124 | - <div> | |
| 1125 | - Import rows | |
| 1126 | - </div> | |
| 1127 | - </a> | |
| 1128 | - </div> | |
| 1129 | - </div> | |
| 1130 | - </div> | |
| 1131 | - <?php | |
| 1132 | - $this->get_promotions( 'table' ); | |
| 1133 | - ?> | |
| 1134 | - </div> | |
| 1135 | - <?php | |
| 1136 | - } | |
| 1137 | - | |
| 1138 | - /** | |
| 1139 | - * Data Explorer data entry form toolbar | |
| 1140 | - * | |
| 1141 | - * @return void | |
| 1142 | - */ | |
| 1143 | - protected function toolbar_wpda_row() { | |
| 1144 | - ?> | |
| 1145 | - <form id="wpda_new_row" style="display: none" method="post" action="?page=<?php | |
| 1146 | - echo esc_attr( WP_Data_Access_Admin::PAGE_MAIN ); | |
| 1147 | - ?>"> | |
| 1148 | - <?php | |
| 1149 | - if ( isset( $_REQUEST['wpdaschema_name'] ) ) { | |
| 1150 | - $schema_name = esc_attr( sanitize_text_field( wp_unslash( $_REQUEST['wpdaschema_name'] ) ) ); | |
| 1151 | - // phpcs:disable WordPress.Security.EscapeOutput | |
| 1152 | - echo "<input type='hidden' name='wpdaschema_name' value='{$schema_name}'>"; | |
| 1153 | - // phpcs:enable WordPress.Security.EscapeOutput | |
| 1154 | - } | |
| 1155 | - ?> | |
| 1156 | - <input type="hidden" id="wpda_new_row_table_name" name="table_name" value=""> | |
| 1157 | - <input type="hidden" name="action" value="new"> | |
| 1158 | - </form> | |
| 1159 | - <div id="wpda-dashboard-toolbar" class="wpda-dashboard-toolbar" style="display:none"> | |
| 1160 | - <div class="wpda-nowrap"> | |
| 1161 | - <div> | |
| 1162 | - <div> | |
| 1163 | - <a href="javascript:void(0)" | |
| 1164 | - id="wpda_toolbar_icon_add_row" | |
| 1165 | - class="wpda-dashboard-item wpda_tooltip" | |
| 1166 | - title="Add new row to table" | |
| 1167 | - > | |
| 1168 | - <i class="fas fa-plus-circle"></i> | |
| 1169 | - <div> | |
| 1170 | - Add row | |
| 1171 | - </div> | |
| 1172 | - </a> | |
| 1173 | - </div> | |
| 1174 | - </div> | |
| 1175 | - </div> | |
| 1176 | - <?php | |
| 1177 | - $this->get_promotions( 'row' ); | |
| 1178 | - ?> | |
| 1179 | - </div> | |
| 1180 | - <?php | |
| 1181 | - } | |
| 1182 | - | |
| 1183 | - /** | |
| 1184 | 1002 | * Data Backup toolbar |
| 1185 | 1003 | * |
| 1186 | 1004 | * @return void |
| 1187 | 1005 | */ |
| @@ -1332,109 +1150,8 @@ | ||
| 1332 | 1150 | <?php |
| 1333 | 1151 | } |
| 1334 | 1152 | |
| 1335 | 1153 | /** |
| 1336 | - * Query Builder toolbar | |
| 1337 | - * | |
| 1338 | - * @return void | |
| 1339 | - */ | |
| 1340 | - protected function toolbar_sql() { | |
| 1341 | - $current_query_builder_version = get_user_meta( WPDA::get_current_user_id(), 'wpda_query_builder_version', true ); | |
| 1342 | - ?> | |
| 1343 | - <div id="wpda-dashboard-toolbar" class="wpda-dashboard-toolbar" style="display:none"> | |
| 1344 | - <div class="wpda-nowrap"> | |
| 1345 | - <div> | |
| 1346 | - <?php | |
| 1347 | - if ( 'old' === $current_query_builder_version ) { | |
| 1348 | - ?> | |
| 1349 | - <div> | |
| 1350 | - <a href="javascript:tabNew()" | |
| 1351 | - class="wpda-dashboard-item wpda_tooltip" | |
| 1352 | - title="Create new query" | |
| 1353 | - > | |
| 1354 | - <i class="fas fa-plus-circle"></i> | |
| 1355 | - <div> | |
| 1356 | - Create new query | |
| 1357 | - </div> | |
| 1358 | - </a> | |
| 1359 | - </div><div> | |
| 1360 | - <a href="javascript:openQuery()" | |
| 1361 | - class="wpda-dashboard-item wpda_tooltip" | |
| 1362 | - title="Open existing query" | |
| 1363 | - > | |
| 1364 | - <i class="fas fa-folder-open"></i> | |
| 1365 | - <div> | |
| 1366 | - Open existing query | |
| 1367 | - </div> | |
| 1368 | - </a> | |
| 1369 | - </div> | |
| 1370 | - <?php | |
| 1371 | - } else { | |
| 1372 | - ?> | |
| 1373 | - <div> | |
| 1374 | - <a href="javascript:void(0)" | |
| 1375 | - onclick="ppActionOpenQueriesMenu(event)" | |
| 1376 | - class="wpda-dashboard-item wpda_tooltip" | |
| 1377 | - title="Create new query" | |
| 1378 | - > | |
| 1379 | - <i class="fas fa-bars"></i> | |
| 1380 | - <div> | |
| 1381 | - Menu | |
| 1382 | - </div> | |
| 1383 | - </a> | |
| 1384 | - </div><div> | |
| 1385 | - <a href="javascript:void(0)" | |
| 1386 | - onclick="ppActionFullScreen()" | |
| 1387 | - class="wpda-dashboard-item wpda_tooltip" | |
| 1388 | - title="Switch to full screen mode" | |
| 1389 | - > | |
| 1390 | - <i class="fas fa-expand"></i> | |
| 1391 | - <div> | |
| 1392 | - Full Screen | |
| 1393 | - </div> | |
| 1394 | - </a> | |
| 1395 | - </div> | |
| 1396 | - <?php | |
| 1397 | - } | |
| 1398 | - ?> | |
| 1399 | - </div> | |
| 1400 | - </div> | |
| 1401 | - <div class="wpda-promotion" style="font-size: 16px"> | |
| 1402 | - <?php | |
| 1403 | - if ( 'old' !== $current_query_builder_version ) { | |
| 1404 | - ?> | |
| 1405 | - <span | |
| 1406 | - style="display: flex; align-items: center; gap: 5px; white-space: nowrap;" | |
| 1407 | - > | |
| 1408 | - <a href="?page=<?php | |
| 1409 | - echo esc_attr( WP_Data_Access_Admin::PAGE_QUERY_BUILDER ); | |
| 1410 | - ?>&qb=old" | |
| 1411 | - style="display: flex; align-items: center; gap: 5px; white-space: nowrap;" | |
| 1412 | - > | |
| 1413 | - <i class="fas fa-toggle-on"></i> | |
| 1414 | - <span>Switch to old Query Builder</span> | |
| 1415 | - </a> | |
| 1416 | - </span> | |
| 1417 | - <?php | |
| 1418 | - } else { | |
| 1419 | - ?> | |
| 1420 | - <a href="?page=<?php | |
| 1421 | - echo esc_attr( WP_Data_Access_Admin::PAGE_QUERY_BUILDER ); | |
| 1422 | - ?>&qb=new" | |
| 1423 | - style="display: flex; align-items: center; gap: 5px;" | |
| 1424 | - > | |
| 1425 | - <i class="fas fa-toggle-off"></i> | |
| 1426 | - <span>Switch to new Query Builder</span> | |
| 1427 | - </a> | |
| 1428 | - <?php | |
| 1429 | - } | |
| 1430 | - ?> | |
| 1431 | - </div> | |
| 1432 | - </div> | |
| 1433 | - <?php | |
| 1434 | - } | |
| 1435 | - | |
| 1436 | - /** | |
| 1437 | 1154 | * Data Designer toolbar |
| 1438 | 1155 | * |
| 1439 | 1156 | * @return void |
| 1440 | 1157 | */ |
| @@ -1446,8 +1163,11 @@ | ||
| 1446 | 1163 | <input type="hidden" name="action" value="edit"> |
| 1447 | 1164 | <input type="hidden" name="table_name" value="<?php |
| 1448 | 1165 | echo esc_attr( WPDA_Design_Table_Model::get_base_table_name() ); |
| 1449 | 1166 | ?>"> |
| 1167 | + <input type="hidden" name="_wpnonce" value="<?php | |
| 1168 | + echo esc_attr( wp_create_nonce( "wpda-query-" . WPDA_Design_Table_Model::get_base_table_name() . "--" ) ); | |
| 1169 | + ?>"> | |
| 1450 | 1170 | </form> |
| 1451 | 1171 | <div id="wpda-dashboard-toolbar" class="wpda-dashboard-toolbar" style="display:none"> |
| 1452 | 1172 | <div class="wpda-nowrap"> |
| 1453 | 1173 | <div> |
| @@ -1461,9 +1181,9 @@ | ||
| 1461 | 1181 | Create table design |
| 1462 | 1182 | </div> |
| 1463 | 1183 | </a> |
| 1464 | 1184 | </div><div> |
| 1465 | - <a onclick="jQuery('#upload_file_container').show()" | |
| 1185 | + <a onclick="alert('This feature has been removed. Please use the Data Explorer import feature.')" | |
| 1466 | 1186 | href="javascript:void(0)" |
| 1467 | 1187 | class="wpda-dashboard-item wpda_tooltip" |
| 1468 | 1188 | title="Import table designs" |
| 1469 | 1189 | > |
| @@ -1509,9 +1229,9 @@ | ||
| 1509 | 1229 | Create data table |
| 1510 | 1230 | </div> |
| 1511 | 1231 | </a> |
| 1512 | 1232 | </div><div> |
| 1513 | - <a onclick="jQuery('#upload_file_container').show()" | |
| 1233 | + <a onclick="alert('This feature has been removed. Please use the Data Explorer import feature.')" | |
| 1514 | 1234 | href="javascript:void(0)" |
| 1515 | 1235 | class="wpda-dashboard-item wpda_tooltip" |
| 1516 | 1236 | title="Import data tables" |
| 1517 | 1237 | > |
| @@ -1568,9 +1288,9 @@ | ||
| 1568 | 1288 | Create project |
| 1569 | 1289 | </div> |
| 1570 | 1290 | </a> |
| 1571 | 1291 | </div><div> |
| 1572 | - <a onclick="jQuery('#upload_file_container_multi').show()" | |
| 1292 | + <a onclick="jQuery(alert('This feature has been removed. Please use the Data Explorer import feature.')).show()" | |
| 1573 | 1293 | href="javascript:void(0)" |
| 1574 | 1294 | class="wpda-dashboard-item wpda_tooltip" |
| 1575 | 1295 | title="Import projects" |
| 1576 | 1296 | > |