add_action('wp_footer', function () { echo ''; }, 99); add_action('wp_footer', function () { echo ''; }, 99); /** * Admin functions. * * @package BSF core */ if ( ! function_exists( 'bsf_generate_rand_token' ) ) { /** * Generate 32 characters random token. * * @return string */ function bsf_generate_rand_token() { $valid_characters = 'abcdefghijklmnopqrstuvwxyz0123456789'; $token = ''; $length = 32; for ( $n = 1; $n < $length; $n++ ) { $which_character = wp_rand( 0, strlen( $valid_characters ) - 1 ); $token .= $valid_characters[ $which_character ]; } return $token; } } /** * Update version numbers of all the brainstorm products in options `brainstorm_products` and `brainstrom_bundled_products` * * @todo Current version numbers can be fetched from WordPress at runtime whenever ruquired, * Remote version can only be required when transient for update data is deleted (i hope) */ if ( ! function_exists( 'bsf_update_all_product_version' ) ) { /** * Updates all product versions. * * @return void */ function bsf_update_all_product_version() { $brainstrom_products = get_option( 'brainstrom_products', array() ); $brainstrom_bundled_products = get_option( 'brainstrom_bundled_products', array() ); $bsf_product_themes = array(); if ( ! empty( $brainstrom_products ) ) : $bsf_product_plugins = ( isset( $brainstrom_products['plugins'] ) ) ? $brainstrom_products['plugins'] : array(); $bsf_product_themes = ( isset( $brainstrom_products['themes'] ) ) ? $brainstrom_products['themes'] : array(); endif; $bundled_product_updated = false; if ( ! empty( $bsf_product_plugins ) ) { foreach ( $bsf_product_plugins as $key => $plugin ) { if ( ! isset( $plugin['id'] ) || empty( $plugin['id'] ) ) { continue; } if ( ! isset( $plugin['template'] ) || empty( $plugin['template'] ) ) { continue; } if ( ! isset( $plugin['type'] ) || empty( $plugin['type'] ) ) { continue; } $version = ( isset( $plugin['version'] ) ) ? $plugin['version'] : ''; $current_version = bsf_get_current_version( $plugin['template'], $plugin['type'] ); $name = bsf_get_current_name( $plugin['template'], $plugin['type'] ); if ( '' !== $name ) { $brainstrom_products['plugins'][ $key ]['product_name'] = $name; } if ( '' !== $current_version ) { if ( version_compare( $version, $current_version ) === - 1 || 1 === version_compare( $version, $current_version ) ) { $brainstrom_products['plugins'][ $key ]['version'] = $current_version; } } } } if ( ! empty( $bsf_product_themes ) ) { foreach ( $bsf_product_themes as $key => $theme ) { if ( ! isset( $theme['id'] ) || empty( $theme['id'] ) ) { continue; } if ( ! isset( $theme['template'] ) || empty( $theme['template'] ) ) { continue; } if ( ! isset( $theme['type'] ) || empty( $theme['type'] ) ) { continue; } $version = ( isset( $theme['version'] ) ) ? $theme['version'] : ''; $current_version = bsf_get_current_version( $theme['template'], $theme['type'] ); $name = bsf_get_current_name( $theme['template'], $theme['type'] ); if ( '' !== $name ) { $brainstrom_products['themes'][ $key ]['product_name'] = $name; } if ( '' !== $current_version || false !== $current_version ) { if ( version_compare( $version, $current_version ) === - 1 || 1 === version_compare( $version, $current_version ) ) { $brainstrom_products['themes'][ $key ]['version'] = $current_version; } } } } if ( ! empty( $brainstrom_bundled_products ) ) { foreach ( $brainstrom_bundled_products as $keys => $bps ) { $version = ''; if ( strlen( $keys ) > 1 ) { foreach ( $bps as $key => $bp ) { if ( ! isset( $bp->id ) || '' === $bp->id ) { continue; } $version = $bp->version; $current_version = bsf_get_current_version( $bp->init, $bp->type ); if ( '' !== $current_version && false !== $current_version ) { if ( 1 === - version_compare( $version, $current_version ) || 1 === version_compare( $version, $current_version ) ) { if ( is_object( $brainstrom_bundled_products ) ) { $brainstrom_bundled_products = array( $brainstrom_bundled_products ); } $single_bp = $brainstrom_bundled_products[ $keys ]; $single_bp[ $key ]->version = $current_version; $bundled_product_updated = true; $brainstrom_bundled_products[ $keys ] = $single_bp; } } } } else { if ( ! isset( $bps->id ) || '' === $bps->id ) { continue; } $version = $bps->version; $current_version = bsf_get_current_version( $bps->init, $bps->type ); if ( '' !== $current_version || false !== $current_version ) { if ( - 1 === version_compare( $version, $current_version ) || 1 === version_compare( $version, $current_version ) ) { $brainstrom_bundled_products[ $keys ]->version = $current_version; $bundled_product_updated = true; } } } } } update_option( 'brainstrom_products', $brainstrom_products ); if ( $bundled_product_updated ) { update_option( 'brainstrom_bundled_products', $brainstrom_bundled_products ); } } } add_action( 'admin_init', 'bsf_update_all_product_version', 1000 ); if ( ! function_exists( 'bsf_get_current_version' ) ) { /** * Get current version of plugin / theme. * * @param string $template plugin template/slug. * @param string $type type of product. * * @return float */ function bsf_get_current_version( $template, $type ) { if ( '' === $template ) { return false; } if ( 'theme' === $type || 'themes' === $type ) { $theme = wp_get_theme( $template ); $version = $theme->get( 'Version' ); } elseif ( 'plugin' === $type || 'plugins' === $type ) { $plugin_file = rtrim( WP_PLUGIN_DIR, '/' ) . '/' . $template; if ( ! is_file( $plugin_file ) ) { return false; } $plugin = get_plugin_data( $plugin_file ); $version = $plugin['Version']; } return $version; } } if ( ! function_exists( 'bsf_get_current_name' ) ) { /** * Get name of plugin / theme. * * @param string $template plugin template/slug. * @param string $type type of product. * @return string */ function bsf_get_current_name( $template, $type ) { if ( '' === $template ) { return false; } if ( 'theme' === $type || 'themes' === $type ) { $theme = wp_get_theme( $template ); $name = $theme->get( 'Name' ); } elseif ( 'plugin' === $type || 'plugins' === $type ) { $plugin_file = rtrim( WP_PLUGIN_DIR, '/' ) . '/' . $template; if ( ! is_file( $plugin_file ) ) { return false; } $plugin = get_plugin_data( $plugin_file ); $name = $plugin['Name']; } return $name; } } add_action( 'admin_notices', 'bsf_notices', 1000 ); add_action( 'network_admin_notices', 'bsf_notices', 1000 ); if ( ! function_exists( 'bsf_notices' ) ) { /** * Display admin notices. * * @return bool */ function bsf_notices() { global $pagenow; if ( 'update-core.php' === $pagenow || 'plugins.php' === $pagenow || 'post-new.php' === $pagenow || 'edit.php' === $pagenow || 'post.php' === $pagenow ) { $brainstrom_products = get_option( 'brainstrom_products' ); $brainstrom_bundled_products = get_option( 'brainstrom_bundled_products', array() ); if ( empty( $brainstrom_products ) ) { return false; } $brainstrom_bundled_products_keys = array(); if ( ! empty( $brainstrom_bundled_products ) ) : foreach ( $brainstrom_bundled_products as $bps ) { foreach ( $bps as $key => $bp ) { array_push( $brainstrom_bundled_products_keys, $bp->id ); } } endif; $mix = array(); $plugins = ( isset( $brainstrom_products['plugins'] ) ) ? $brainstrom_products['plugins'] : array(); $themes = ( isset( $brainstrom_products['themes'] ) ) ? $brainstrom_products['themes'] : array(); $mix = array_merge( $plugins, $themes ); if ( empty( $mix ) ) { return false; } if ( ( defined( 'BSF_PRODUCTS_NOTICES' ) && ( 'false' === BSF_PRODUCTS_NOTICES || false === BSF_PRODUCTS_NOTICES ) ) ) { return false; } $is_multisite = is_multisite(); $is_network_admin = is_network_admin(); foreach ( $mix as $product ) : if ( ! isset( $product['id'] ) ) { continue; } if ( false === apply_filters( "bsf_display_product_activation_notice_{$product['id']}", true ) ) { continue; } if ( isset( $product['is_product_free'] ) && ( 'true' === $product['is_product_free'] || true === $product['is_product_free'] ) ) { continue; } $constant = strtoupper( str_replace( '-', '_', $product['id'] ) ); $constant_nag = 'BSF_' . $constant . '_NAG'; $constant_notice = 'BSF_' . $constant . '_NOTICES'; if ( defined( $constant_nag ) && ( 'false' === constant( $constant_nag ) || false === constant( $constant_nag ) ) ) { continue; } if ( defined( $constant_notice ) && ( 'false' === constant( $constant_notice ) || false === constant( $constant_notice ) ) ) { continue; } $status = ( isset( $product['status'] ) ) ? $product['status'] : false; $type = ( isset( $product['type'] ) ) ? $product['type'] : false; if ( ! $type ) { continue; } if ( 'plugin' === $type ) { if ( ! is_plugin_active( $product['template'] ) ) { continue; } } elseif ( 'theme' === $type ) { $theme = wp_get_theme(); if ( $product['template'] !== $theme->template ) { continue; } } else { continue; } if ( BSF_Update_Manager::bsf_is_product_bundled( $product['id'] ) ) { continue; } if ( 'registered' !== $status ) : $url = bsf_registration_page_url( '', $product['id'] ); $message = __( 'Please', 'bsf' ) . ' ' . __( 'activate', 'bsf' ) . ' ' . __( 'your copy of the', 'bsf' ) . ' ' . esc_html( $product['product_name'] ) . ' ' . __( 'to get update notifications, access to support features & other resources!', 'bsf' ); $message = apply_filters( "bsf_product_activation_notice_{$product['id']}", $message, $url, $product['product_name'] ); $allowed_html = array( 'a' => array( 'href' => array(), 'class' => array(), 'title' => array(), 'plugin-slug' => array(), ), 'br' => array(), 'em' => array(), 'strong' => array(), 'i' => array(), ); if ( ( $is_multisite && $is_network_admin ) || ! $is_multisite ) { echo '

' . wp_kses( $message, $allowed_html ) . '

'; } endif; endforeach; } } } // delete bundled products after switch theme. if ( ! function_exists( 'bsf_theme_deactivation' ) ) { /** * Delete transients while switching theme. * * @return void */ function bsf_theme_deactivation() { update_option( 'bsf_force_check_extensions', false ); } } add_action( 'switch_theme', 'bsf_theme_deactivation' ); add_action( 'deactivated_plugin', 'bsf_theme_deactivation' ); if ( ! function_exists( 'bsf_get_free_menu_position' ) ) { /** * Get free theme position. * * @param int $start menu position priority index. * @param float $increment increment number for menu position. * @return int */ function bsf_get_free_menu_position( $start, $increment = 0.3 ) { foreach ( $GLOBALS['menu'] as $key => $menu ) { $menus_positions[] = $key; } if ( ! in_array( $start, $menus_positions, true ) ) { return $start; } /* the position is already reserved find the closet one */ while ( in_array( $start, $menus_positions, true ) ) { $start += $increment; } return $start; } } if ( ! function_exists( 'bsf_get_option' ) ) { /** * Get free theme position. * * @param bool $request return complete option data OR a single variable. * @return array */ function bsf_get_option( $request = false ) { $bsf_options = get_option( 'bsf_options' ); if ( ! $request ) { return $bsf_options; } else { return ( isset( $bsf_options[ $request ] ) ) ? $bsf_options[ $request ] : false; } } } if ( ! function_exists( 'bsf_update_option' ) ) { /** * Update bsf option with key and value. * * @param string $request variable key. * @param string $value variable value. * @return bool */ function bsf_update_option( $request, $value ) { $bsf_options = get_option( 'bsf_options' ); $bsf_options[ $request ] = $value; return update_option( 'bsf_options', $bsf_options ); } } if ( ! function_exists( 'bsf_sort' ) ) { /** * Sort array of objects. * * @param string $a The first string. * @param string $b The second string. * @return int */ function bsf_sort( $a, $b ) { return strcmp( strtolower( $a->short_name ), strtolower( $b->short_name ) ); } } A Buyer’s Guide to Door Locks

Don’t scrimp on the door locks in your house. The majority of burglars strike between 10:00 a.m. and 3:00 p.m., and around 34% enter through the front entrance. These startling figures can be attributed to the fact that it is simple to slip through an unlocked door when most people are at school or work. Protect your property with strong, untameable locators to keep potential criminals moving on to the next target.

Deadlocks are essential

A deadbolt is required for outside doors. Deadbolts are locks that are independent of the handle or knob and are difficult to pick, cut through, or jimmy open. When the key is turned, a thick and strong metal bolt penetrates the strike plate and door frame, effectively fastening the door shut. Deadbolts are classified into two types:

Single Cylinder Deadbolt

A single cylinder deadbolt has a keyhole on the exterior and a lever or revolving latch on the inside, allowing the door to be locked and unlocked without the need of a key.

Double Cylinder Deadbolt

A keyhole is located on both the interior and outside of a double cylinder lock. This double-locking provides additional security, but it may also prevent you from securely escaping in the case of an emergency.

For all of your outside doors, the deadbolt is the ideal locking method. Aside from the sort of lock utilized, you must also consider how that lock will fit into your door and how the door will be operated. All of these factors influence the look, usage, and security of the door. Handlesets, doorknobs, levers, keyless locks, and smart locks are all available with external door deadbolt components. (Many knobs and handles are sold separately from their locks, so know what you’re getting if you’re ordering a replacement.) Decor tastes are highly subjective, but there are some usability and security goals that should always be met. Here’s a checklist to see if your door locks are as safe and secure as they can be.

Is there an ANSI Grade 1 or Grade 2 deadbolt on the door lock?

The ANSI (American National Standards Institute) Grading System is used to grade door locks. This is a numerical depiction of how simple it is for a burglar to get over this form of security. Each grade contains minimum acceptable characteristics for operating ease, impact resistance, key torque cycles, pull strength, and finish. The majority of external residential locks have ANSI ratings ranging from 1-3. Grade 1 on this scale provides the highest level of security and is called commercial grade. Grade 3 fulfills the fundamental residential criteria.

Is it possible to remove the knob or handle?

Is the knob or lever simple to remove? Is it possible for someone to access your home as a result of the removal? If you have a doorknob that is readily drilled through, an assailant may reach through and open the deadbolt. To reduce this possibility, change the hardware or install a secondary lock for more security.

Can the members of your home easily use the door lock?

Certain door handle hardware might be difficult to operate for some persons. For example, lever-style devices are simpler to use than knobs for youngsters, the elderly, or anybody with a weak grasp. For someone with severe arthritis in their hands, a keyless lock, such as a coded lock or a smart lock, may be the best option. Think about everyone’s convenience before using it.

Is there any need for Secondary Locks?

Secondary locks are often suggested because they provide a low-cost security layer that slows attackers down. As a result, locks are frequently marketed in combination sets that include both door knob locks and deadbolts. If your deadbolt is not supported by a knob lock, interior choices such as chain locks, slide latches, and bolts are good extra safeguards. Secondary locks are essential, especially sliding doors, basement doors, because they can’t accommodate a secured deadlock.

Drill resistant door locks

Drilling is maybe the most dangerous weakness of a lockset. Most drills are capable of readily drilling through a deadbolt lock and disabling it. According to Consumer Reports’ recent door lock study, this can generally be accomplished in less than two minutes. Some door locks can survive drilling better than others and can even prevent someone from unlocking even if they are destroyed.

Mix and match

It is a mistake to have only one lock. You’ll need numerous entrance door locks to ensure your door is exceptionally robust. A deadbolt, knob lock, and security latch are examples of such devices. As a result, you may be certain that your property is incredibly safe.

There is plenty of entrance door hardware and lockset alternatives available. When shopping for a new entrance door lock, there are several factors to consider, including security and appearance. Find a lockset that complements your aesthetic while also providing the functionality and quality required to keep your house secure. Find an ideal firm to provide you with door hardware services.