Current File : /home/bdmcricketindia.in/public_html/wp-includes/ms-blogs.php
<?php

/**
 * Site/blog functions that work with the blogs table and related data.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since MU (3.0.0)
 */

// Don't load directly.
if ( ! defined( 'ABSPATH' ) ) {
	die( '-1' );
}

require_once ABSPATH . WPINC . '/ms-site.php';
require_once ABSPATH . WPINC . '/ms-network.php';

/**
 * Updates the last_updated field for the current site.
 *
 * @since MU (3.0.0)
 */
function wpmu_update_blogs_date() {
	$site_id = get_current_blog_id();

	update_blog_details( $site_id, array( 'last_updated' => current_time( 'mysql', true ) ) );
	/**
	 * Fires after the blog details are updated.
	 *
	 * @since MU (3.0.0)
	 *
	 * @param int $blog_id Site ID.
	 */
	do_action( 'wpmu_blog_updated', $site_id );
}

/**
 * Gets a full site URL, given a site ID.
 *
 * @since MU (3.0.0)
 *
 * @param int $blog_id Site ID.
 * @return string Full site URL if found. Empty string if not.
 */
function get_blogaddress_by_id( $blog_id ) {
	$bloginfo = get_site( (int) $blog_id );

	if ( empty( $bloginfo ) ) {
		return '';
	}

	$scheme = parse_url( $bloginfo->home, PHP_URL_SCHEME );
	$scheme = empty( $scheme ) ? 'http' : $scheme;

	return esc_url( $scheme . '://' . $bloginfo->domain . $bloginfo->path );
}

/**
 * Gets a full site URL, given a site name.
 *
 * @since MU (3.0.0)
 *
 * @param string $blogname Name of the subdomain or directory.
 * @return string
 */
function get_blogaddress_by_name( $blogname ) {
	if ( is_subdomain_install() ) {
		if ( 'main' === $blogname ) {
			$blogname = 'www';
		}
		$url = rtrim( network_home_url(), '/' );
		if ( ! empty( $blogname ) ) {
			$url = preg_replace( '|^([^\.]+://)|', '${1}' . $blogname . '.', $url );
		}
	} else {
		$url = network_home_url( $blogname );
	}
	return esc_url( $url . '/' );
}

/**
 * Retrieves a site's ID given its (subdomain or directory) slug.
 *
 * @since MU (3.0.0)
 * @since 4.7.0 Converted to use `get_sites()`.
 *
 * @param string $slug A site's slug.
 * @return int|null The site ID, or null if no site is found for the given slug.
 */
function get_id_from_blogname( $slug ) {
	$current_network = get_network();
	$slug            = trim( $slug, '/' );

	if ( is_subdomain_install() ) {
		$domain = $slug . '.' . preg_replace( '|^www\.|', '', $current_network->domain );
		$path   = $current_network->path;
	} else {
		$domain = $current_network->domain;
		$path   = $current_network->path . $slug . '/';
	}

	$site_ids = get_sites(
		array(
			'number'                 => 1,
			'fields'                 => 'ids',
			'domain'                 => $domain,
			'path'                   => $path,
			'update_site_meta_cache' => false,
		)
	);

	if ( empty( $site_ids ) ) {
		return null;
	}

	return array_shift( $site_ids );
}

/**
 * Retrieves the details for a blog from the blogs table and blog options.
 *
 * @since MU (3.0.0)
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int|string|array $fields  Optional. A blog ID, a blog slug, or an array of fields to query against.
 *                                  Defaults to the current blog ID.
 * @param bool             $get_all Whether to retrieve all details or only the details in the blogs table.
 *                                  Default is true.
 * @return WP_Site|false Blog details on success. False on failure.
 */
function get_blog_details( $fields = null, $get_all = true ) {
	global $wpdb;

	if ( is_array( $fields ) ) {
		if ( isset( $fields['blog_id'] ) ) {
			$blog_id = $fields['blog_id'];
		} elseif ( isset( $fields['domain'] ) && isset( $fields['path'] ) ) {
			$key  = md5( $fields['domain'] . $fields['path'] );
			$blog = wp_cache_get( $key, 'blog-lookup' );
			if ( false !== $blog ) {
				return $blog;
			}
			if ( str_starts_with( $fields['domain'], 'www.' ) ) {
				$nowww = substr( $fields['domain'], 4 );
				$blog  = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE domain IN (%s,%s) AND path = %s ORDER BY CHAR_LENGTH(domain) DESC", $nowww, $fields['domain'], $fields['path'] ) );
			} else {
				$blog = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE domain = %s AND path = %s", $fields['domain'], $fields['path'] ) );
			}
			if ( $blog ) {
				wp_cache_set( $blog->blog_id . 'short', $blog, 'blog-details' );
				$blog_id = $blog->blog_id;
			} else {
				return false;
			}
		} elseif ( isset( $fields['domain'] ) && is_subdomain_install() ) {
			$key  = md5( $fields['domain'] );
			$blog = wp_cache_get( $key, 'blog-lookup' );
			if ( false !== $blog ) {
				return $blog;
			}
			if ( str_starts_with( $fields['domain'], 'www.' ) ) {
				$nowww = substr( $fields['domain'], 4 );
				$blog  = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE domain IN (%s,%s) ORDER BY CHAR_LENGTH(domain) DESC", $nowww, $fields['domain'] ) );
			} else {
				$blog = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE domain = %s", $fields['domain'] ) );
			}
			if ( $blog ) {
				wp_cache_set( $blog->blog_id . 'short', $blog, 'blog-details' );
				$blog_id = $blog->blog_id;
			} else {
				return false;
			}
		} else {
			return false;
		}
	} else {
		if ( ! $fields ) {
			$blog_id = get_current_blog_id();
		} elseif ( ! is_numeric( $fields ) ) {
			$blog_id = get_id_from_blogname( $fields );
		} else {
			$blog_id = $fields;
		}
	}

	$blog_id = (int) $blog_id;

	$all     = $get_all ? '' : 'short';
	$details = wp_cache_get( $blog_id . $all, 'blog-details' );

	if ( $details ) {
		if ( ! is_object( $details ) ) {
			if ( -1 === $details ) {
				return false;
			} else {
				// Clear old pre-serialized objects. Cache clients do better with that.
				wp_cache_delete( $blog_id . $all, 'blog-details' );
				unset( $details );
			}
		} else {
			return $details;
		}
	}

	// Try the other cache.
	if ( $get_all ) {
		$details = wp_cache_get( $blog_id . 'short', 'blog-details' );
	} else {
		$details = wp_cache_get( $blog_id, 'blog-details' );
		// If short was requested and full cache is set, we can return.
		if ( $details ) {
			if ( ! is_object( $details ) ) {
				if ( -1 === $details ) {
					return false;
				} else {
					// Clear old pre-serialized objects. Cache clients do better with that.
					wp_cache_delete( $blog_id, 'blog-details' );
					unset( $details );
				}
			} else {
				return $details;
			}
		}
	}

	if ( empty( $details ) ) {
		$details = WP_Site::get_instance( $blog_id );
		if ( ! $details ) {
			// Set the full cache.
			wp_cache_set( $blog_id, -1, 'blog-details' );
			return false;
		}
	}

	if ( ! $details instanceof WP_Site ) {
		$details = new WP_Site( $details );
	}

	if ( ! $get_all ) {
		wp_cache_set( $blog_id . $all, $details, 'blog-details' );
		return $details;
	}

	$switched_blog = false;

	if ( get_current_blog_id() !== $blog_id ) {
		switch_to_blog( $blog_id );
		$switched_blog = true;
	}

	$details->blogname   = get_option( 'blogname' );
	$details->siteurl    = get_option( 'siteurl' );
	$details->post_count = get_option( 'post_count' );
	$details->home       = get_option( 'home' );

	if ( $switched_blog ) {
		restore_current_blog();
	}

	/**
	 * Filters a blog's details.
	 *
	 * @since MU (3.0.0)
	 * @deprecated 4.7.0 Use {@see 'site_details'} instead.
	 *
	 * @param WP_Site $details The blog details.
	 */
	$details = apply_filters_deprecated( 'blog_details', array( $details ), '4.7.0', 'site_details' );

	wp_cache_set( $blog_id . $all, $details, 'blog-details' );

	$key = md5( $details->domain . $details->path );
	wp_cache_set( $key, $details, 'blog-lookup' );

	return $details;
}

/**
 * Clears the blog details cache.
 *
 * @since MU (3.0.0)
 *
 * @param int $blog_id Optional. Blog ID. Defaults to current blog.
 */
function refresh_blog_details( $blog_id = 0 ) {
	$blog_id = (int) $blog_id;
	if ( ! $blog_id ) {
		$blog_id = get_current_blog_id();
	}

	clean_blog_cache( $blog_id );
}

/**
 * Updates the details for a blog and the blogs table for a given blog ID.
 *
 * @since MU (3.0.0)
 *
 * @param int   $blog_id Blog ID.
 * @param array $details Array of details keyed by blogs table field names.
 * @return bool True if update succeeds, false otherwise.
 */
function update_blog_details( $blog_id, $details = array() ) {
	if ( empty( $details ) ) {
		return false;
	}

	if ( is_object( $details ) ) {
		$details = get_object_vars( $details );
	}

	$site = wp_update_site( $blog_id, $details );

	if ( is_wp_error( $site ) ) {
		return false;
	}

	return true;
}

/**
 * Cleans the site details cache for a site.
 *
 * @since 4.7.4
 *
 * @param int $site_id Optional. Site ID. Default is the current site ID.
 */
function clean_site_details_cache( $site_id = 0 ) {
	$site_id = (int) $site_id;
	if ( ! $site_id ) {
		$site_id = get_current_blog_id();
	}

	wp_cache_delete( $site_id, 'site-details' );
	wp_cache_delete( $site_id, 'blog-details' );
}

/**
 * Retrieves option value for a given blog id based on name of option.
 *
 * If the option does not exist or does not have a value, then the return value
 * will be false. This is useful to check whether you need to install an option
 * and is commonly used during installation of plugin options and to test
 * whether upgrading is required.
 *
 * If the option was serialized then it will be unserialized when it is returned.
 *
 * @since MU (3.0.0)
 *
 * @param int    $id            A blog ID. Can be null to refer to the current blog.
 * @param string $option        Name of option to retrieve. Expected to not be SQL-escaped.
 * @param mixed  $default_value Optional. Default value to return if the option does not exist.
 * @return mixed Value set for the option.
 */
function get_blog_option( $id, $option, $default_value = false ) {
	$id = (int) $id;

	if ( empty( $id ) ) {
		$id = get_current_blog_id();
	}

	if ( get_current_blog_id() === $id ) {
		return get_option( $option, $default_value );
	}

	switch_to_blog( $id );
	$value = get_option( $option, $default_value );
	restore_current_blog();

	/**
	 * Filters a blog option value.
	 *
	 * The dynamic portion of the hook name, `$option`, refers to the blog option name.
	 *
	 * @since 3.5.0
	 *
	 * @param string  $value The option value.
	 * @param int     $id    Blog ID.
	 */
	return apply_filters( "blog_option_{$option}", $value, $id );
}

/**
 * Adds a new option for a given blog ID.
 *
 * You do not need to serialize values. If the value needs to be serialized, then
 * it will be serialized before it is inserted into the database. Remember,
 * resources can not be serialized or added as an option.
 *
 * You can create options without values and then update the values later.
 * Existing options will not be updated and checks are performed to ensure that you
 * aren't adding a protected WordPress option. Care should be taken to not name
 * options the same as the ones which are protected.
 *
 * @since MU (3.0.0)
 *
 * @param int    $id     A blog ID. Can be null to refer to the current blog.
 * @param string $option Name of option to add. Expected to not be SQL-escaped.
 * @param mixed  $value  Option value, can be anything. Expected to not be SQL-escaped.
 * @return bool True if the option was added, false otherwise.
 */
function add_blog_option( $id, $option, $value ) {
	$id = (int) $id;

	if ( empty( $id ) ) {
		$id = get_current_blog_id();
	}

	if ( get_current_blog_id() === $id ) {
		return add_option( $option, $value );
	}

	switch_to_blog( $id );
	$return = add_option( $option, $value );
	restore_current_blog();

	return $return;
}

/**
 * Removes an option by name for a given blog ID. Prevents removal of protected WordPress options.
 *
 * @since MU (3.0.0)
 *
 * @param int    $id     A blog ID. Can be null to refer to the current blog.
 * @param string $option Name of option to remove. Expected to not be SQL-escaped.
 * @return bool True if the option was deleted, false otherwise.
 */
function delete_blog_option( $id, $option ) {
	$id = (int) $id;

	if ( empty( $id ) ) {
		$id = get_current_blog_id();
	}

	if ( get_current_blog_id() === $id ) {
		return delete_option( $option );
	}

	switch_to_blog( $id );
	$return = delete_option( $option );
	restore_current_blog();

	return $return;
}

/**
 * Updates an option for a particular blog.
 *
 * @since MU (3.0.0)
 *
 * @param int    $id         The blog ID.
 * @param string $option     The option key.
 * @param mixed  $value      The option value.
 * @param mixed  $deprecated Not used.
 * @return bool True if the value was updated, false otherwise.
 */
function update_blog_option( $id, $option, $value, $deprecated = null ) {
	$id = (int) $id;

	if ( null !== $deprecated ) {
		_deprecated_argument( __FUNCTION__, '3.1.0' );
	}

	if ( get_current_blog_id() === $id ) {
		return update_option( $option, $value );
	}

	switch_to_blog( $id );
	$return = update_option( $option, $value );
	restore_current_blog();

	return $return;
}

/**
 * Switches the current blog.
 *
 * This function is useful if you need to pull posts, or other information,
 * from other blogs. You can switch back afterwards using restore_current_blog().
 *
 * PHP code loaded with the originally requested site, such as code from a plugin or theme, does not switch. See #14941.
 *
 * @see restore_current_blog()
 * @since MU (3.0.0)
 *
 * @global wpdb            $wpdb               WordPress database abstraction object.
 * @global int             $blog_id
 * @global array           $_wp_switched_stack
 * @global bool            $switched
 * @global string          $table_prefix       The database table prefix.
 * @global WP_Object_Cache $wp_object_cache
 *
 * @param int  $new_blog_id The ID of the blog to switch to. Default: current blog.
 * @param bool $deprecated  Not used.
 * @return true Always returns true.
 */
function switch_to_blog( $new_blog_id, $deprecated = null ) {
	global $wpdb;

	$prev_blog_id = get_current_blog_id();
	if ( empty( $new_blog_id ) ) {
		$new_blog_id = $prev_blog_id;
	}

	$GLOBALS['_wp_switched_stack'][] = $prev_blog_id;

	/*
	 * If we're switching to the same blog id that we're on,
	 * set the right vars, do the associated actions, but skip
	 * the extra unnecessary work
	 */
	if ( $new_blog_id === $prev_blog_id ) {
		/**
		 * Fires when the blog is switched.
		 *
		 * @since MU (3.0.0)
		 * @since 5.4.0 The `$context` parameter was added.
		 *
		 * @param int    $new_blog_id  New blog ID.
		 * @param int    $prev_blog_id Previous blog ID.
		 * @param string $context      Additional context. Accepts 'switch' when called from switch_to_blog()
		 *                             or 'restore' when called from restore_current_blog().
		 */
		do_action( 'switch_blog', $new_blog_id, $prev_blog_id, 'switch' );

		$GLOBALS['switched'] = true;

		return true;
	}

	$wpdb->set_blog_id( $new_blog_id );
	$GLOBALS['table_prefix'] = $wpdb->get_blog_prefix();
	$GLOBALS['blog_id']      = $new_blog_id;

	if ( function_exists( 'wp_cache_switch_to_blog' ) ) {
		wp_cache_switch_to_blog( $new_blog_id );
	} else {
		global $wp_object_cache;

		if ( is_object( $wp_object_cache ) && isset( $wp_object_cache->global_groups ) ) {
			$global_groups = $wp_object_cache->global_groups;
		} else {
			$global_groups = false;
		}

		wp_cache_init();

		if ( function_exists( 'wp_cache_add_global_groups' ) ) {
			if ( is_array( $global_groups ) ) {
				wp_cache_add_global_groups( $global_groups );
			} else {
				wp_cache_add_global_groups(
					array(
						'blog-details',
						'blog-id-cache',
						'blog-lookup',
						'blog_meta',
						'global-posts',
						'image_editor',
						'networks',
						'network-queries',
						'sites',
						'site-details',
						'site-options',
						'site-queries',
						'site-transient',
						'theme_files',
						'rss',
						'users',
						'user-queries',
						'user_meta',
						'useremail',
						'userlogins',
						'userslugs',
					)
				);
			}

			wp_cache_add_non_persistent_groups( array( 'counts', 'plugins', 'theme_json' ) );
		}
	}

	/** This filter is documented in wp-includes/ms-blogs.php */
	do_action( 'switch_blog', $new_blog_id, $prev_blog_id, 'switch' );

	$GLOBALS['switched'] = true;

	return true;
}

/**
 * Restores the current blog, after calling switch_to_blog().
 *
 * @see switch_to_blog()
 * @since MU (3.0.0)
 *
 * @global wpdb            $wpdb               WordPress database abstraction object.
 * @global array           $_wp_switched_stack
 * @global int             $blog_id
 * @global bool            $switched
 * @global string          $table_prefix       The database table prefix.
 * @global WP_Object_Cache $wp_object_cache
 *
 * @return bool True on success, false if we're already on the current blog.
 */
function restore_current_blog() {
	global $wpdb;

	if ( empty( $GLOBALS['_wp_switched_stack'] ) ) {
		return false;
	}

	$new_blog_id  = array_pop( $GLOBALS['_wp_switched_stack'] );
	$prev_blog_id = get_current_blog_id();

	if ( $new_blog_id === $prev_blog_id ) {
		/** This filter is documented in wp-includes/ms-blogs.php */
		do_action( 'switch_blog', $new_blog_id, $prev_blog_id, 'restore' );

		// If we still have items in the switched stack, consider ourselves still 'switched'.
		$GLOBALS['switched'] = ! empty( $GLOBALS['_wp_switched_stack'] );

		return true;
	}

	$wpdb->set_blog_id( $new_blog_id );
	$GLOBALS['blog_id']      = $new_blog_id;
	$GLOBALS['table_prefix'] = $wpdb->get_blog_prefix();

	if ( function_exists( 'wp_cache_switch_to_blog' ) ) {
		wp_cache_switch_to_blog( $new_blog_id );
	} else {
		global $wp_object_cache;

		if ( is_object( $wp_object_cache ) && isset( $wp_object_cache->global_groups ) ) {
			$global_groups = $wp_object_cache->global_groups;
		} else {
			$global_groups = false;
		}

		wp_cache_init();

		if ( function_exists( 'wp_cache_add_global_groups' ) ) {
			if ( is_array( $global_groups ) ) {
				wp_cache_add_global_groups( $global_groups );
			} else {
				wp_cache_add_global_groups(
					array(
						'blog-details',
						'blog-id-cache',
						'blog-lookup',
						'blog_meta',
						'global-posts',
						'image_editor',
						'networks',
						'network-queries',
						'sites',
						'site-details',
						'site-options',
						'site-queries',
						'site-transient',
						'theme_files',
						'rss',
						'users',
						'user-queries',
						'user_meta',
						'useremail',
						'userlogins',
						'userslugs',
					)
				);
			}

			wp_cache_add_non_persistent_groups( array( 'counts', 'plugins', 'theme_json' ) );
		}
	}

	/** This filter is documented in wp-includes/ms-blogs.php */
	do_action( 'switch_blog', $new_blog_id, $prev_blog_id, 'restore' );

	// If we still have items in the switched stack, consider ourselves still 'switched'.
	$GLOBALS['switched'] = ! empty( $GLOBALS['_wp_switched_stack'] );

	return true;
}

/**
 * Switches the initialized roles and current user capabilities to another site.
 *
 * @since 4.9.0
 *
 * @param int $new_site_id New site ID.
 * @param int $old_site_id Old site ID.
 */
function wp_switch_roles_and_user( $new_site_id, $old_site_id ) {
	if ( $new_site_id === $old_site_id ) {
		return;
	}

	if ( ! did_action( 'init' ) ) {
		return;
	}

	wp_roles()->for_site( $new_site_id );
	wp_get_current_user()->for_site( $new_site_id );
}

/**
 * Determines if switch_to_blog() is in effect.
 *
 * @since 3.5.0
 *
 * @global array $_wp_switched_stack
 *
 * @return bool True if switched, false otherwise.
 */
function ms_is_switched() {
	return ! empty( $GLOBALS['_wp_switched_stack'] );
}

/**
 * Checks if a particular blog is archived.
 *
 * @since MU (3.0.0)
 *
 * @param int $id Blog ID.
 * @return string Whether the blog is archived or not.
 */
function is_archived( $id ) {
	return get_blog_status( $id, 'archived' );
}

/**
 * Updates the 'archived' status of a particular blog.
 *
 * @since MU (3.0.0)
 *
 * @param int    $id       Blog ID.
 * @param string $archived The new status.
 * @return string $archived
 */
function update_archived( $id, $archived ) {
	update_blog_status( $id, 'archived', $archived );
	return $archived;
}

/**
 * Updates a blog details field.
 *
 * @since MU (3.0.0)
 * @since 5.1.0 Use wp_update_site() internally.
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int    $blog_id    Blog ID.
 * @param string $pref       Field name.
 * @param string $value      Field value.
 * @param null   $deprecated Not used.
 * @return string|false $value
 */
function update_blog_status( $blog_id, $pref, $value, $deprecated = null ) {
	global $wpdb;

	if ( null !== $deprecated ) {
		_deprecated_argument( __FUNCTION__, '3.1.0' );
	}

	$allowed_field_names = array( 'site_id', 'domain', 'path', 'registered', 'last_updated', 'public', 'archived', 'mature', 'spam', 'deleted', 'lang_id' );

	if ( ! in_array( $pref, $allowed_field_names, true ) ) {
		return $value;
	}

	$result = wp_update_site(
		$blog_id,
		array(
			$pref => $value,
		)
	);

	if ( is_wp_error( $result ) ) {
		return false;
	}

	return $value;
}

/**
 * Gets a blog details field.
 *
 * @since MU (3.0.0)
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int    $id   Blog ID.
 * @param string $pref Field name.
 * @return bool|string|null $value
 */
function get_blog_status( $id, $pref ) {
	global $wpdb;

	$details = get_site( $id );
	if ( $details ) {
		return $details->$pref;
	}

	return $wpdb->get_var( $wpdb->prepare( "SELECT %s FROM {$wpdb->blogs} WHERE blog_id = %d", $pref, $id ) );
}

/**
 * Gets a list of most recently updated blogs.
 *
 * @since MU (3.0.0)
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param mixed $deprecated Not used.
 * @param int   $start      Optional. Number of blogs to offset the query. Used to build LIMIT clause.
 *                          Can be used for pagination. Default 0.
 * @param int   $quantity   Optional. The maximum number of blogs to retrieve. Default 40.
 * @return array The list of blogs.
 */
function get_last_updated( $deprecated = '', $start = 0, $quantity = 40 ) {
	global $wpdb;

	if ( ! empty( $deprecated ) ) {
		_deprecated_argument( __FUNCTION__, 'MU' ); // Never used.
	}

	return $wpdb->get_results( $wpdb->prepare( "SELECT blog_id, domain, path FROM $wpdb->blogs WHERE site_id = %d AND public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0' AND last_updated != '0000-00-00 00:00:00' ORDER BY last_updated DESC limit %d, %d", get_current_network_id(), $start, $quantity ), ARRAY_A );
}

/**
 * Handler for updating the site's last updated date when a post is published or
 * an already published post is changed.
 *
 * @since 3.3.0
 *
 * @param string  $new_status The new post status.
 * @param string  $old_status The old post status.
 * @param WP_Post $post       Post object.
 */
function _update_blog_date_on_post_publish( $new_status, $old_status, $post ) {
	$post_type_obj = get_post_type_object( $post->post_type );
	if ( ! $post_type_obj || ! $post_type_obj->public ) {
		return;
	}

	if ( 'publish' !== $new_status && 'publish' !== $old_status ) {
		return;
	}

	// Post was freshly published, published post was saved, or published post was unpublished.

	wpmu_update_blogs_date();
}

/**
 * Handler for updating the current site's last updated date when a published
 * post is deleted.
 *
 * @since 3.4.0
 *
 * @param int $post_id Post ID
 */
function _update_blog_date_on_post_delete( $post_id ) {
	$post = get_post( $post_id );

	$post_type_obj = get_post_type_object( $post->post_type );
	if ( ! $post_type_obj || ! $post_type_obj->public ) {
		return;
	}

	if ( 'publish' !== $post->post_status ) {
		return;
	}

	wpmu_update_blogs_date();
}

/**
 * Handler for updating the current site's posts count when a post is deleted.
 *
 * @since 4.0.0
 * @since 6.2.0 Added the `$post` parameter.
 *
 * @param int     $post_id Post ID.
 * @param WP_Post $post    Post object.
 */
function _update_posts_count_on_delete( $post_id, $post ) {
	if ( ! $post || 'publish' !== $post->post_status || 'post' !== $post->post_type ) {
		return;
	}

	update_posts_count();
}

/**
 * Handler for updating the current site's posts count when a post status changes.
 *
 * @since 4.0.0
 * @since 4.9.0 Added the `$post` parameter.
 *
 * @param string  $new_status The status the post is changing to.
 * @param string  $old_status The status the post is changing from.
 * @param WP_Post $post       Post object
 */
function _update_posts_count_on_transition_post_status( $new_status, $old_status, $post = null ) {
	if ( $new_status === $old_status ) {
		return;
	}

	if ( 'post' !== get_post_type( $post ) ) {
		return;
	}

	if ( 'publish' !== $new_status && 'publish' !== $old_status ) {
		return;
	}

	update_posts_count();
}

/**
 * Counts number of sites grouped by site status.
 *
 * @since 5.3.0
 *
 * @param int $network_id Optional. The network to get counts for. Default is the current network ID.
 * @return int[] {
 *     Numbers of sites grouped by site status.
 *
 *     @type int $all      The total number of sites.
 *     @type int $public   The number of public sites.
 *     @type int $archived The number of archived sites.
 *     @type int $mature   The number of mature sites.
 *     @type int $spam     The number of spam sites.
 *     @type int $deleted  The number of deleted sites.
 * }
 */
function wp_count_sites( $network_id = null ) {
	if ( empty( $network_id ) ) {
		$network_id = get_current_network_id();
	}

	$counts = array();
	$args   = array(
		'network_id'    => $network_id,
		'number'        => 1,
		'fields'        => 'ids',
		'no_found_rows' => false,
	);

	$q             = new WP_Site_Query( $args );
	$counts['all'] = $q->found_sites;

	$_args    = $args;
	$statuses = array( 'public', 'archived', 'mature', 'spam', 'deleted' );

	foreach ( $statuses as $status ) {
		$_args            = $args;
		$_args[ $status ] = 1;

		$q                 = new WP_Site_Query( $_args );
		$counts[ $status ] = $q->found_sites;
	}

	return $counts;
}
Cresus casino en ligne Inscription et connexion.2051

Cresus casino en ligne Inscription et connexion.2051

Cresus casino en ligne – Inscription et connexion

▶️ JOUER

Содержимое

Le cresus casino est l’un des casinos en ligne les plus populaires et les plus fiables du marché. Avec son offre de jeux variés et ses conditions de jeu exceptionnelles, il attire de nombreux joueurs à travers le monde. Mais comment s’inscrire et se connecter à ce casino en ligne ? Dans cet article, nous allons vous guider étape par étape pour vous aider à vous lancer dans l’aventure.

Le Cresus Casino est un casino en ligne qui propose une grande variété de jeux, allant des jeux de table aux machines à sous, en passant par les jeux de cartes et les jeux de hasard. Les joueurs peuvent choisir parmi plus de 1 000 jeux différents, ce qui leur offre une grande liberté de choix.

Le Cresus Casino est également connu pour ses conditions de jeu exceptionnelles. Les joueurs peuvent bénéficier de bonus et de promotions régulières, ainsi que de programmes de fidélité qui leur permettent de gagner des points et de les échanger contre des récompenses.

Pour s’inscrire au Cresus Casino, les joueurs doivent d’abord cliquer sur le bouton “Inscription” situé en haut à droite de la page d’accueil. Ils doivent ensuite remplir un formulaire avec leurs informations personnelles, telles que leur nom, prénom, adresse e-mail et mot de passe. Une fois le formulaire rempli, les joueurs peuvent cliquer sur le bouton “Valider” pour valider leur inscription.

Une fois inscrit, les joueurs peuvent se connecter à leur compte en utilisant leur adresse e-mail et leur mot de passe. Ils peuvent ensuite accéder à leur compte et commencer à jouer.

Le Cresus Casino est également disponible en version mobile, ce qui signifie que les joueurs peuvent jouer partout et à tout moment, grâce à l’application mobile du casino.

En résumé, le Cresus Casino est un casino en ligne qui offre une grande variété de jeux, des conditions de jeu exceptionnelles et une application mobile pour jouer partout et à tout moment. Pour s’inscrire et se connecter, les joueurs doivent d’abord remplir un formulaire avec leurs informations personnelles et ensuite valider leur inscription. Une fois inscrit, les joueurs peuvent se connecter à leur compte et commencer à jouer.

Les avantages du Cresus Casino :

  • Plus de 1 000 jeux différents
  • Conditions de jeu exceptionnelles
  • Programme de fidélité
  • Application mobile pour jouer partout et à tout moment

Il est important de noter que le Cresus Casino est un casino en ligne qui est soumis aux lois et aux réglementations en vigueur dans le pays où il est établi. Les joueurs doivent donc vérifier les conditions de jeu et les règles du casino avant de commencer à jouer.

Cresus Casino en Ligne : Inscription et Connexion

Pour commencer, il est important de noter que Cresus Casino est un site de jeu en ligne qui propose une grande variété de jeux de hasard, tels que des jeux de table, des jeux de machine à sous et des jeux de loterie. Le site est disponible en français et accepte les joueurs de nombreux pays, y compris la France.

Inscription au Cresus Casino

Pour vous inscrire au Cresus Casino, vous devez d’abord cliquer sur le bouton “Inscription” situé en haut à droite de la page d’accueil. Vous serez alors redirigé vers une page de formulaire d’inscription, où vous devrez fournir certaines informations personnelles, telles que votre nom, votre prénom, votre adresse e-mail et votre mot de passe.

  • Votre nom et votre prénom
  • Votre adresse e-mail
  • Votre mot de passe
  • Un code de vérification

Une fois que vous avez rempli le formulaire d’inscription, vous devrez cliquer sur le bouton “S’inscrire” pour valider votre inscription. Vous recevrez alors un e-mail de confirmation de votre inscription.

Connexion au Cresus Casino

Pour vous connecter au Cresus Casino, vous devez d’abord cliquer sur le bouton “Connexion” situé en haut à droite de la page d’accueil. Vous serez alors redirigé vers une page de formulaire de connexion, où vous devrez fournir votre adresse e-mail et votre mot de passe.

  • Adresse e-mail
  • Mot de passe
  • Une fois que vous avez rempli le formulaire de connexion, vous devrez cliquer sur le bouton “Se connecter” pour valider votre connexion.

    Il est important de noter que Cresus Casino propose également un service de jeu en ligne gratuit, qui permet aux joueurs de jouer sans avoir à déposer d’argent. Cela peut être utile pour les nouveaux joueurs qui veulent d’abord tester les jeux avant de déposer de l’argent.

    En outre, Cresus Casino a reçu de nombreuses critiques positives de la part des joueurs, qui apprécient la variété des jeux proposés, la facilité d’utilisation du site et la qualité du service client.

    Cependant, il est important de noter que Cresus Casino n’est pas sans critique. Certains joueurs ont signalé des problèmes de paiement et des difficultés à contacter le service client. Il est donc important de faire preuve de prudence et de vérifier les conditions générales de jeu avant de commencer à jouer.

    En résumé, Cresus Casino est un site de jeu en ligne qui propose une grande variété de jeux de hasard et un service client de qualité. Cependant, il est important de faire preuve de prudence et de vérifier les conditions générales de jeu avant de commencer à jouer.

    Inscription au Cresus Casino en Ligne

    Pour vous inscrire au Cresus Casino en Ligne, vous devez suivre les étapes suivantes :

    Étape 1 : Cliquez sur le bouton “Inscription” situé en haut à droite de la page d’accueil du site web du Cresus Casino en Ligne.

    Étape 2 : Remplissez le formulaire d’inscription avec vos informations personnelles, notamment votre nom, prénom, adresse e-mail et mot de passe.

    Étape 3 : Vérifiez que vous avez lu et acceptez les conditions générales de service du Cresus Casino en Ligne.

    Création de votre compte Cresus Casino

    Une fois que vous avez rempli le formulaire d’inscription, vous pouvez créer votre compte Cresus Casino en ligne. Vous pouvez alors accéder à vos jeux préférés et profiter de nos offres spéciales.

    Il est important de noter que le Cresus Casino en Ligne est réservé aux personnes âgées de 18 ans et plus. Nous nous réservons le droit de refuser l’accès à notre site web à tout utilisateur qui ne respecte pas nos conditions générales de service.

    En cas de problème ou de difficulté pour vous inscrire, n’hésitez pas à nous contacter. Nous sommes à votre disposition pour vous aider.

    Le Cresus Casino en Ligne est également disponible en version VIP, qui offre des avantages exclusifs et des récompenses spéciales à nos joueurs les plus fidèles. Pour en savoir plus sur notre offre VIP, cliquez ici.

    Enfin, nous vous rappelons que le Cresus Casino en Ligne est un site web de jeu en ligne et que les jeux de hasard peuvent être dangereux pour votre santé financière. Nous vous recommandons de jouer responsablement et de ne pas dépenser plus que vous ne pouvez vous permettre de perdre.

    Si vous avez des questions ou des préoccupations concernant notre site web ou nos services, n’hésitez pas à nous contacter. Nous sommes à votre disposition pour vous aider.

    Connexion au Cresus Casino en Ligne

    Pour vous connecter au Cresus Casino en Ligne, suivez les étapes suivantes :

    1. Ouvrez le site web du Cresus Casino en Ligne et cliquez sur le bouton “Se connecter” situé en haut à droite de la page.

    2. Entrez votre adresse e-mail et votre mot de passe dans les champs respectifs. Si vous avez oublié votre mot de passe, vous pouvez le réinitialiser en cliquant sur le lien “Mot de passe oublié”.

    3. Vérifiez que les informations que vous avez saisies sont correctes, puis cliquez sur le bouton “Se connecter” pour vous connecter à votre compte.

    Connexion avec votre compte Cresus Casino

    Si vous avez déjà un compte Cresus Casino, vous pouvez vous connecter en utilisant vos informations de compte. Pour cela, suivez les étapes suivantes :

    1. Ouvrez le site web du Cresus Casino en Ligne et cliquez sur le bouton “Se connecter” situé en haut à droite de la page.

    2. Entrez votre adresse e-mail et votre mot de passe dans les champs respectifs.

    3. Vérifiez que les informations que vous avez saisies sont correctes, puis cliquez sur le bouton “Se connecter” pour vous connecter à votre compte.

    Connexion avec votre compte Cresus Casino VIP

    Si vous êtes un joueur VIP du Cresus Casino, vous pouvez vous connecter en utilisant vos informations de compte VIP. Pour cela, suivez les étapes suivantes :

    1. Ouvrez le site web du Cresus Casino en Ligne et cliquez sur le bouton “Se connecter” situé en haut à droite de la page.

    2. Entrez votre adresse e-mail et votre mot de passe dans les champs respectifs.

    3. Vérifiez que les informations que vous avez saisies sont correctes, puis cliquez sur le bouton “Se connecter” pour vous connecter à votre compte VIP.

    Enfin, si vous êtes nouveau sur le site web du Cresus Casino en Ligne, vous pouvez vous inscrire en cliquant sur le bouton “S’inscrire” situé en haut à droite de la page. Vous pourrez ainsi créer un compte et commencer à jouer.

    Il est important de noter que le Cresus Casino en Ligne est un site web de jeu en ligne qui offre des jeux de hasard, y compris des jeux de casino, des jeux de loterie et des jeux de poker. Les jeux de hasard peuvent causer des pertes financières importantes. Il est donc important de jouer responsable et de ne pas dépenser plus que vous ne pouvez vous permettre de perdre.

    Le Cresus Casino en Ligne est également connu pour son offre de jeu gratuit, qui vous permet de jouer sans avoir à déposer d’argent. Cela peut être un excellent moyen de découvrir les jeux du site web et de vous familiariser avec les règles du jeu avant de jouer avec de l’argent réel.

    En résumé, pour vous connecter au Cresus Casino en Ligne, vous devez avoir un compte et un mot de passe. Vous pouvez créer un compte en cliquant sur le bouton “S’inscrire” situé en haut à droite de la page. Une fois que vous avez un compte, vous pouvez vous connecter en utilisant vos informations de compte.

    Il est important de noter que le Cresus Casino en Ligne est un site web de jeu en ligne qui offre des jeux de hasard, y compris des jeux de casino, des jeux de loterie et des jeux de poker. Les jeux de hasard peuvent causer des pertes financières importantes. Il est donc important de jouer responsable et de ne pas dépenser plus que vous ne pouvez vous permettre de perdre.

    Les Conditions Générales du Cresus Casino en Ligne

    Le Cresus Casino en ligne est un site de jeu en ligne qui offre une expérience de jeu unique et sécurisée à ses joueurs. Pour garantir une expérience de jeu de haute qualité, nous avons établi certaines conditions générales qui régissent l’utilisation de notre site.

    En créant un compte et en utilisant notre site, vous acceptez de manière expresse et sans réserve les conditions générales suivantes :

    Article 1 : Objet et champ d’application

    Article 2 : Définitions

    • Cresus Casino en ligne

    • Joueurs

    • Services

    Article 3 : Inscrivez-vous

    Article 4 : Confidentialité

    Article 5 : Responsabilité

    Article 6 : Modification des conditions générales

    Article 7 : Loi applicable

    Article 8 : Litiges

    Les présentes conditions générales ont pour objet de définir les termes et conditions de l’utilisation du site Cresus Casino en ligne. Les termes suivants ont la signification suivante : Le site de jeu en ligne proposé par Cresus Casino. Tous les utilisateurs du site Cresus Casino en ligne. Tous les services proposés par Cresus Casino en ligne, y compris les jeux, les promotions et les offres spéciales. En créant un compte, vous acceptez de manière expresse et sans réserve les conditions générales du Cresus Casino en ligne. Cresus Casino en ligne s’engage à protéger la confidentialité de vos informations personnelles et à ne pas les divulguer à des tiers. Cresus Casino en ligne n’est pas responsable des pertes ou des dommages causés par l’utilisation de ses services. Cresus Casino en ligne se réserve le droit de modifier ou de mettre à jour ses conditions générales à tout moment. Les présentes conditions générales sont régies et interprétées en vertu des lois françaises. Tout litige sera soumis aux tribunaux français.

    En utilisant nos services, vous acceptez de manière expresse et sans réserve les conditions générales du Cresus Casino en ligne. Si vous n’acceptez pas ces conditions, vous ne pouvez pas utiliser nos services.

    Cresus Casino en ligne se réserve le droit de modifier ou de mettre à jour ces conditions générales à tout moment. Il est donc important de vérifier régulièrement ces conditions pour vous assurer que vous êtes au courant des modifications apportées.

    En créant un compte et en utilisant notre site, vous déclarez être âgé de 18 ans ou plus et accepter les conditions générales du Cresus Casino en ligne.

    Cresus Casino en ligne est un site de jeu en ligne qui offre une expérience de jeu unique et sécurisée à ses joueurs. Nous sommes convaincus que vous apprécierez notre site et que vous aurez une expérience de jeu exceptionnelle.

    FAQ – Fréquentes Questions du Cresus Casino en Ligne

    Les questions les plus fréquentes sur le Cresus Casino en Ligne sont regroupées ci-dessous. Si vous avez d’autres questions, n’hésitez pas à nous contacter.

    Création du Compte

    Comment créer un compte au Cresus Casino en Ligne ?

    Pour créer un compte, cliquez sur le bouton “Inscription” en haut à droite de la page d’accueil, puis remplissez le formulaire avec vos informations personnelles. Vérifiez que vous avez bien rempli tous les champs obligatoires et que votre adresse e-mail est correcte.

    Comment réinitialiser mon mot de passe ?

    Pour réinitialiser votre mot de passe, cliquez sur le lien “Mot de passe oublié” sur la page de connexion, puis suivez les instructions pour réinitialiser votre mot de passe.

    Jeu et Gains

    Quels sont les jeux proposés par le Cresus Casino en Ligne ?

    Le Cresus Casino en Ligne propose une large gamme de jeux de casino, y compris des jeux de table, des machines à sous et des jeux de loterie. Vous pouvez trouver la liste complète des jeux sur notre page de jeux.

    Comment fonctionnent les gains ?

    Les gains sont attribués automatiquement à votre compte après chaque tour de jeu. Vous pouvez vérifier vos gains dans votre compte.

    Mon Compte

    Comment accéder à mon compte ?

    Pour accéder à votre compte, connectez-vous en utilisant votre adresse e-mail et votre mot de passe.

    Comment modifier mes informations de compte ?

    Pour modifier vos informations de compte, connectez-vous à votre compte, puis cliquez sur le bouton “Mon compte” et suivez les instructions pour modifier vos informations.

    Comment retirer mes gains ?

    Pour retirer vos gains, connectez-vous à votre compte, puis cliquez sur le bouton “Retrait” et suivez les instructions pour retirer vos gains.

    Check Also

    – Официальный сайт Pinco Casino.1586

    Пинко Казино – Официальный сайт Pinco Casino ▶️ ИГРАТЬ Содержимое Преимущества игры на официальном сайте …