mirror of
https://github.com/lubuntu-team/lubuntu.me.git
synced 2025-02-23 08:11:08 +00:00
455 lines
11 KiB
PHP
455 lines
11 KiB
PHP
|
<?php
|
||
|
namespace Elementor;
|
||
|
|
||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||
|
exit; // Exit if accessed directly.
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Elementor utils class.
|
||
|
*
|
||
|
* Elementor utils handler class is responsible for different utility methods
|
||
|
* used by Elementor.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*/
|
||
|
class Utils {
|
||
|
|
||
|
/**
|
||
|
* Is ajax.
|
||
|
*
|
||
|
* Whether the current request is a WordPress ajax request.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
* @access public
|
||
|
* @static
|
||
|
*
|
||
|
* @return bool True if it's a WordPress ajax request, false otherwise.
|
||
|
*/
|
||
|
public static function is_ajax() {
|
||
|
// TODO: When minimum required version of Elementor will be 4.7, use `wp_doing_ajax()` instead.
|
||
|
return defined( 'DOING_AJAX' ) && DOING_AJAX;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Is script debug.
|
||
|
*
|
||
|
* Whether script debug is ebanled or not.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
* @access public
|
||
|
* @static
|
||
|
*
|
||
|
* @return bool True if it's a script debug is active, false otherwise.
|
||
|
*/
|
||
|
public static function is_script_debug() {
|
||
|
return defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get edit link.
|
||
|
*
|
||
|
* Retrieve Elementor edit link.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
* @access public
|
||
|
* @static
|
||
|
*
|
||
|
* @param int $post_id Optional. Post ID. Default is `0`.
|
||
|
*
|
||
|
* @return string Post edit link.
|
||
|
*/
|
||
|
public static function get_edit_link( $post_id = 0 ) {
|
||
|
$edit_link = add_query_arg( [ 'post' => $post_id, 'action' => 'elementor' ], admin_url( 'post.php' ) );
|
||
|
|
||
|
/**
|
||
|
* Get edit link.
|
||
|
*
|
||
|
* Filters the Elementor edit link.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @param string $edit_link New URL query string (unescaped).
|
||
|
* @param int $post_id Post ID.
|
||
|
*/
|
||
|
$edit_link = apply_filters( 'elementor/utils/get_edit_link', $edit_link, $post_id );
|
||
|
|
||
|
return $edit_link;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get pro link.
|
||
|
*
|
||
|
* Retrieve the link to Elementor Pro.
|
||
|
*
|
||
|
* @since 1.7.0
|
||
|
* @access public
|
||
|
* @static
|
||
|
*
|
||
|
* @param string $link URL to Elementor pro.
|
||
|
*
|
||
|
* @return string Elementor pro link.
|
||
|
*/
|
||
|
public static function get_pro_link( $link ) {
|
||
|
static $theme_name = false;
|
||
|
|
||
|
if ( ! $theme_name ) {
|
||
|
$theme_obj = wp_get_theme();
|
||
|
if ( $theme_obj->parent() ) {
|
||
|
$theme_name = $theme_obj->parent()->get( 'Name' );
|
||
|
} else {
|
||
|
$theme_name = $theme_obj->get( 'Name' );
|
||
|
}
|
||
|
|
||
|
$theme_name = sanitize_key( $theme_name );
|
||
|
}
|
||
|
|
||
|
$link = add_query_arg( 'utm_term', $theme_name, $link );
|
||
|
|
||
|
if ( defined( 'ELEMENTOR_PARTNER_ID' ) ) {
|
||
|
$link = add_query_arg( 'partner_id', sanitize_key( ELEMENTOR_PARTNER_ID ), $link );
|
||
|
}
|
||
|
|
||
|
return $link;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get preview URL.
|
||
|
*
|
||
|
* Retrieve the post preview URL.
|
||
|
*
|
||
|
* @since 1.6.4
|
||
|
* @access public
|
||
|
* @static
|
||
|
*
|
||
|
* @param int $post_id Optional. Post ID. Default is `0`.
|
||
|
*
|
||
|
* @return string Post preview URL.
|
||
|
*/
|
||
|
public static function get_preview_url( $post_id ) {
|
||
|
$preview_url = set_url_scheme( add_query_arg( 'elementor-preview', '', get_permalink( $post_id ) ) );
|
||
|
|
||
|
/**
|
||
|
* Preview URL.
|
||
|
*
|
||
|
* Filters the Elementor preview URL.
|
||
|
*
|
||
|
* @since 1.6.4
|
||
|
*
|
||
|
* @param string $preview_url URL with chosen scheme.
|
||
|
* @param int $post_id Post ID.
|
||
|
*/
|
||
|
$preview_url = apply_filters( 'elementor/utils/preview_url', $preview_url, $post_id );
|
||
|
|
||
|
return $preview_url;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @since 1.9.0
|
||
|
* @static
|
||
|
* @access public
|
||
|
*/
|
||
|
public static function get_wp_preview_url( $post_id ) {
|
||
|
$query_args = [];
|
||
|
|
||
|
$nonce = wp_create_nonce( 'post_preview_' . $post_id );
|
||
|
$query_args['preview_nonce'] = $nonce;
|
||
|
$query_args['preview'] = 'true';
|
||
|
|
||
|
$wp_preview_url = get_preview_post_link( $post_id, $query_args );
|
||
|
|
||
|
/**
|
||
|
* WordPress preview URL.
|
||
|
*
|
||
|
* Filters the WordPress preview URL.
|
||
|
*
|
||
|
* @since 1.9.0
|
||
|
*
|
||
|
* @param string $wp_preview_url WordPress preview URL with chosen scheme.
|
||
|
* @param int $post_id Post ID.
|
||
|
*/
|
||
|
$wp_preview_url = apply_filters( 'elementor/utils/wp_preview_url', $wp_preview_url, $post_id );
|
||
|
|
||
|
return $wp_preview_url;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @since 1.9.0
|
||
|
* @static
|
||
|
* @access public
|
||
|
*/
|
||
|
public static function get_exit_to_dashboard_url( $post_id ) {
|
||
|
$exit_url = get_edit_post_link( $post_id, 'raw' );
|
||
|
|
||
|
/**
|
||
|
* Exit To Dashboard URL.
|
||
|
*
|
||
|
* Filters the Exit To Dashboard URL.
|
||
|
*
|
||
|
* @since 1.9.0
|
||
|
*
|
||
|
* @param string $exit_url Default exit URL.
|
||
|
* @param int $post_id Post ID.
|
||
|
*/
|
||
|
$exit_url = apply_filters( 'elementor/utils/exit_to_dashboard_url', $exit_url, $post_id );
|
||
|
|
||
|
return $exit_url;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Is post type supports Elementor.
|
||
|
*
|
||
|
* Whether the post type supports editing with Elementor.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
* @access public
|
||
|
* @static
|
||
|
*
|
||
|
* @param int $post_id Optional. Post ID. Default is `0`.
|
||
|
*
|
||
|
* @return string True if post type supports editing with Elementor, false otherwise.
|
||
|
*/
|
||
|
public static function is_post_type_support( $post_id = 0 ) {
|
||
|
$post_type = get_post_type( $post_id );
|
||
|
$is_supported = post_type_supports( $post_type, 'elementor' );
|
||
|
|
||
|
/**
|
||
|
* Is post type support.
|
||
|
*
|
||
|
* Filters whether the post type supports editing with Elementor.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @param bool $is_supported Whether the post type supports editing with Elementor.
|
||
|
* @param int $post_id Post ID.
|
||
|
* @param string $post_type Post type.
|
||
|
*/
|
||
|
$is_supported = apply_filters( 'elementor/utils/is_post_type_support', $is_supported, $post_id, $post_type );
|
||
|
|
||
|
return $is_supported;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get placeholder image source.
|
||
|
*
|
||
|
* Retrieve the source of the placeholder image.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
* @access public
|
||
|
* @static
|
||
|
*
|
||
|
* @return string The source of the default placeholder image used by Elementor.
|
||
|
*/
|
||
|
public static function get_placeholder_image_src() {
|
||
|
$placeholder_image = ELEMENTOR_ASSETS_URL . 'images/placeholder.png';
|
||
|
|
||
|
/**
|
||
|
* Get placeholder image source.
|
||
|
*
|
||
|
* Filters the source of the default placeholder image used by Elementor.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @param string $placeholder_image The source of the default placeholder image.
|
||
|
*/
|
||
|
$placeholder_image = apply_filters( 'elementor/utils/get_placeholder_image_src', $placeholder_image );
|
||
|
|
||
|
return $placeholder_image;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Generate random string.
|
||
|
*
|
||
|
* Returns a string containing a hexadecimal representation of randon number.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
* @access public
|
||
|
* @static
|
||
|
*
|
||
|
* @return string Random string.
|
||
|
*/
|
||
|
public static function generate_random_string() {
|
||
|
return dechex( rand() );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Do not cache.
|
||
|
*
|
||
|
* Tell WordPress cache plugins not to cache this request.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
* @access public
|
||
|
* @static
|
||
|
*/
|
||
|
public static function do_not_cache() {
|
||
|
if ( ! defined( 'DONOTCACHEPAGE' ) ) {
|
||
|
define( 'DONOTCACHEPAGE', true );
|
||
|
}
|
||
|
|
||
|
if ( ! defined( 'DONOTCACHEDB' ) ) {
|
||
|
define( 'DONOTCACHEDB', true );
|
||
|
}
|
||
|
|
||
|
if ( ! defined( 'DONOTMINIFY' ) ) {
|
||
|
define( 'DONOTMINIFY', true );
|
||
|
}
|
||
|
|
||
|
if ( ! defined( 'DONOTCDN' ) ) {
|
||
|
define( 'DONOTCDN', true );
|
||
|
}
|
||
|
|
||
|
if ( ! defined( 'DONOTCACHCEOBJECT' ) ) {
|
||
|
define( 'DONOTCACHCEOBJECT', true );
|
||
|
}
|
||
|
|
||
|
// Set the headers to prevent caching for the different browsers.
|
||
|
nocache_headers();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get timezone string.
|
||
|
*
|
||
|
* Retrieve timezone string from the WordPress database.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
* @access public
|
||
|
* @static
|
||
|
*
|
||
|
* @return string Timezone string.
|
||
|
*/
|
||
|
public static function get_timezone_string() {
|
||
|
$current_offset = (float) get_option( 'gmt_offset' );
|
||
|
$timezone_string = get_option( 'timezone_string' );
|
||
|
|
||
|
// Create a UTC+- zone if no timezone string exists.
|
||
|
if ( empty( $timezone_string ) ) {
|
||
|
if ( 0 === $current_offset ) {
|
||
|
$timezone_string = 'UTC+0';
|
||
|
} elseif ( $current_offset < 0 ) {
|
||
|
$timezone_string = 'UTC' . $current_offset;
|
||
|
} else {
|
||
|
$timezone_string = 'UTC+' . $current_offset;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $timezone_string;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Do action deprecated.
|
||
|
*
|
||
|
* Fires functions attached to a deprecated action hook.
|
||
|
*
|
||
|
* @since 1.0.10
|
||
|
* @access public
|
||
|
* @static
|
||
|
*
|
||
|
* @param string $tag The name of the action hook.
|
||
|
* @param array $args Array of additional function arguments to be passed to `do_action()`.
|
||
|
* @param string $version The version of WordPress that deprecated the hook.
|
||
|
* @param string $replacement Optional. The hook that should have been used.
|
||
|
* @param string $message Optional. A message regarding the change.
|
||
|
*/
|
||
|
public static function do_action_deprecated( $tag, $args, $version, $replacement = false, $message = null ) {
|
||
|
// TODO: When minimum required version of Elementor will be 4.6, this method can be replaced by `do_action_deprecated()` function.
|
||
|
if ( function_exists( 'do_action_deprecated' ) ) { /* WP >= 4.6 */
|
||
|
do_action_deprecated( $tag, $args, $version, $replacement, $message );
|
||
|
} else {
|
||
|
do_action_ref_array( $tag, $args );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Do filter deprecated.
|
||
|
*
|
||
|
* Fires functions attached to a deprecated filter hook.
|
||
|
*
|
||
|
* @since 1.0.10
|
||
|
* @access public
|
||
|
* @static
|
||
|
*
|
||
|
* @param string $tag The name of the filter hook.
|
||
|
* @param array $args Array of additional function arguments to be passed to `apply_filters()`.
|
||
|
* @param string $version The version of WordPress that deprecated the hook.
|
||
|
* @param string $replacement Optional. The hook that should have been used.
|
||
|
* @param string $message Optional. A message regarding the change.
|
||
|
*/
|
||
|
public static function apply_filters_deprecated( $tag, $args, $version, $replacement = false, $message = null ) {
|
||
|
// TODO: When minimum required version of Elementor will be 4.6, this method can be replaced by `apply_filters_deprecated()` function.
|
||
|
if ( function_exists( 'apply_filters_deprecated' ) ) { /* WP >= 4.6 */
|
||
|
return apply_filters_deprecated( $tag, $args, $version, $replacement, $message );
|
||
|
} else {
|
||
|
return apply_filters_ref_array( $tag, $args );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @since 1.9.0
|
||
|
* @static
|
||
|
* @access public
|
||
|
*/
|
||
|
public static function get_last_edited( $post_id ) {
|
||
|
$post = get_post( $post_id );
|
||
|
|
||
|
$autosave_post = Utils::get_post_autosave( $post_id );
|
||
|
|
||
|
if ( $autosave_post ) {
|
||
|
$post = $autosave_post;
|
||
|
}
|
||
|
|
||
|
$date = date_i18n( _x( 'M j, H:i', 'revision date format', 'elementor' ), strtotime( $post->post_modified ) );
|
||
|
$display_name = get_the_author_meta( 'display_name' , $post->post_author );
|
||
|
|
||
|
if ( $autosave_post ) {
|
||
|
/* translators: 1: Saving date, 2: Author display name */
|
||
|
$last_edited = sprintf( __( 'Draft saved on %1$s by %2$s', 'elementor' ), '<time>' . $date . '</time>', $display_name );
|
||
|
} else {
|
||
|
/* translators: 1: Editing date, 2: Author display name */
|
||
|
$last_edited = sprintf( __( 'Last edited on %1$s by %2$s', 'elementor' ), '<time>' . $date . '</time>', $display_name );
|
||
|
}
|
||
|
|
||
|
return $last_edited;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @since 1.9.0
|
||
|
* @static
|
||
|
* @access public
|
||
|
*/
|
||
|
public static function get_create_new_post_url( $post_type = 'page' ) {
|
||
|
$new_post_url = add_query_arg( [
|
||
|
'action' => 'elementor_new_post',
|
||
|
'post_type' => $post_type,
|
||
|
], admin_url( 'edit.php' ) );
|
||
|
|
||
|
$new_post_url = wp_nonce_url( $new_post_url, 'elementor_action_new_post' );
|
||
|
|
||
|
return $new_post_url;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @static
|
||
|
* @access public
|
||
|
*/
|
||
|
public static function get_post_autosave( $post_id, $user_id = 0 ) {
|
||
|
global $wpdb;
|
||
|
|
||
|
$where = $wpdb->prepare( 'post_parent = %d AND post_name LIKE %s', [ $post_id, "{$post_id}-autosave%" ] );
|
||
|
|
||
|
if ( $user_id ) {
|
||
|
$where .= $wpdb->prepare( ' AND post_author = %d', $user_id );
|
||
|
}
|
||
|
|
||
|
$revision = $wpdb->get_row( "SELECT * FROM $wpdb->posts WHERE $where AND post_type = 'revision'" );
|
||
|
|
||
|
if ( $revision ) {
|
||
|
$revision = new \WP_Post( $revision );
|
||
|
} else {
|
||
|
$revision = false;
|
||
|
}
|
||
|
|
||
|
return $revision;
|
||
|
}
|
||
|
}
|