+/**
+ * Returns the space used by the current blog.
+ *
+ * @since 3.5.0
+ *
+ * @return int Used space in megabytes
+ */
+function get_space_used() {
+ /**
+ * Filters the amount of storage space used by the current site.
+ *
+ * @since 3.5.0
+ *
+ * @param int|bool $space_used The amount of used space, in megabytes. Default false.
+ */
+ $space_used = apply_filters( 'pre_get_space_used', false );
+ if ( false === $space_used ) {
+ $upload_dir = wp_upload_dir();
+ $space_used = get_dirsize( $upload_dir['basedir'] ) / MB_IN_BYTES;
+ }
+
+ return $space_used;
+}
+
+/**
+ * Returns the upload quota for the current blog.
+ *
+ * @since MU
+ *
+ * @return int Quota in megabytes
+ */
+function get_space_allowed() {
+ $space_allowed = get_option( 'blog_upload_space' );
+
+ if ( ! is_numeric( $space_allowed ) )
+ $space_allowed = get_site_option( 'blog_upload_space' );
+
+ if ( ! is_numeric( $space_allowed ) )
+ $space_allowed = 100;
+
+ /**
+ * Filters the upload quota for the current site.
+ *
+ * @since 3.7.0
+ *
+ * @param int $space_allowed Upload quota in megabytes for the current blog.
+ */
+ return apply_filters( 'get_space_allowed', $space_allowed );
+}
+
+/**
+ * Determines if there is any upload space left in the current blog's quota.
+ *
+ * @since 3.0.0
+ *
+ * @return int of upload space available in bytes
+ */
+function get_upload_space_available() {
+ $allowed = get_space_allowed();
+ if ( $allowed < 0 ) {
+ $allowed = 0;
+ }
+ $space_allowed = $allowed * MB_IN_BYTES;
+ if ( get_site_option( 'upload_space_check_disabled' ) )
+ return $space_allowed;
+
+ $space_used = get_space_used() * MB_IN_BYTES;
+
+ if ( ( $space_allowed - $space_used ) <= 0 )
+ return 0;
+
+ return $space_allowed - $space_used;
+}
+
+/**
+ * Determines if there is any upload space left in the current blog's quota.
+ *
+ * @since 3.0.0
+ * @return bool True if space is available, false otherwise.
+ */
+function is_upload_space_available() {
+ if ( get_site_option( 'upload_space_check_disabled' ) )
+ return true;
+
+ return (bool) get_upload_space_available();
+}
+
+/**
+ * Filters the maximum upload file size allowed, in bytes.
+ *
+ * @since 3.0.0
+ *
+ * @param int $size Upload size limit in bytes.
+ * @return int Upload size limit in bytes.
+ */
+function upload_size_limit_filter( $size ) {
+ $fileupload_maxk = KB_IN_BYTES * get_site_option( 'fileupload_maxk', 1500 );
+ if ( get_site_option( 'upload_space_check_disabled' ) )
+ return min( $size, $fileupload_maxk );
+
+ return min( $size, $fileupload_maxk, get_upload_space_available() );
+}
+
+/**
+ * Whether or not we have a large network.
+ *
+ * The default criteria for a large network is either more than 10,000 users or more than 10,000 sites.
+ * Plugins can alter this criteria using the {@see 'wp_is_large_network'} filter.
+ *
+ * @since 3.3.0
+ * @param string $using 'sites or 'users'. Default is 'sites'.
+ * @return bool True if the network meets the criteria for large. False otherwise.
+ */
+function wp_is_large_network( $using = 'sites' ) {
+ if ( 'users' == $using ) {
+ $count = get_user_count();
+ /**
+ * Filters whether the network is considered large.
+ *
+ * @since 3.3.0
+ *
+ * @param bool $is_large_network Whether the network has more than 10000 users or sites.
+ * @param string $component The component to count. Accepts 'users', or 'sites'.
+ * @param int $count The count of items for the component.
+ */
+ return apply_filters( 'wp_is_large_network', $count > 10000, 'users', $count );
+ }
+
+ $count = get_blog_count();
+ /** This filter is documented in wp-includes/ms-functions.php */
+ return apply_filters( 'wp_is_large_network', $count > 10000, 'sites', $count );
+}
+
+/**
+ * Retrieves a list of reserved site on a sub-directory Multisite install.
+ *
+ * @since 4.4.0
+ *
+ * @return array $names Array of reserved subdirectory names.
+ */
+function get_subdirectory_reserved_names() {
+ $names = array(
+ 'page', 'comments', 'blog', 'files', 'feed', 'wp-admin',
+ 'wp-content', 'wp-includes', 'wp-json', 'embed'
+ );
+
+ /**
+ * Filters reserved site names on a sub-directory Multisite install.
+ *
+ * @since 3.0.0
+ * @since 4.4.0 'wp-admin', 'wp-content', 'wp-includes', 'wp-json', and 'embed' were added
+ * to the reserved names list.
+ *
+ * @param array $subdirectory_reserved_names Array of reserved names.
+ */
+ return apply_filters( 'subdirectory_reserved_names', $names );
+}