X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/76aea3697c6043c1613370f172395b4f65ee71f0..a6444c710cf37d7732aea76e752e43322b5036ca:/wp-includes/class.wp-dependencies.php diff --git a/wp-includes/class.wp-dependencies.php b/wp-includes/class.wp-dependencies.php index 1f7bb8db..ea607de2 100644 --- a/wp-includes/class.wp-dependencies.php +++ b/wp-includes/class.wp-dependencies.php @@ -1,11 +1,29 @@ queue : (array) $handles; $this->all_deps( $handles ); - foreach( $this->to_do as $handle ) { + foreach( $this->to_do as $key => $handle ) { if ( !in_array($handle, $this->done) && isset($this->registered[$handle]) ) { - if ( $this->registered[$handle]->src ) { // Else it defines a group. - $this->do_item( $handle ); + + if ( ! $this->registered[$handle]->src ) { // Defines a group. + $this->done[] = $handle; + continue; } - $this->done[] = $handle; + + if ( $this->do_item( $handle, $group ) ) + $this->done[] = $handle; + + unset( $this->to_do[$key] ); } } - $this->to_do = array(); return $this->done; } @@ -53,17 +76,21 @@ class WP_Dependencies { * @param mixed handles Accepts (string) dep name or (array of strings) dep names * @param bool recursion Used internally when function calls itself */ - function all_deps( $handles, $recursion = false ) { + function all_deps( $handles, $recursion = false, $group = false ) { if ( !$handles = (array) $handles ) return false; foreach ( $handles as $handle ) { - $handle = explode('?', $handle); - if ( isset($handle[1]) ) - $this->args[$handle[0]] = $handle[1]; - $handle = $handle[0]; + $handle_parts = explode('?', $handle); + $handle = $handle_parts[0]; + $queued = in_array($handle, $this->to_do, true); + + if ( in_array($handle, $this->done, true) ) // Already done + continue; + + $moved = $this->set_group( $handle, $recursion, $group ); - if ( isset($this->to_do[$handle]) ) // Already grobbed it and its deps + if ( $queued && !$moved ) // already queued and in the right group continue; $keep_going = true; @@ -71,7 +98,7 @@ class WP_Dependencies { $keep_going = false; // Script doesn't exist elseif ( $this->registered[$handle]->deps && array_diff($this->registered[$handle]->deps, array_keys($this->registered)) ) $keep_going = false; // Script requires deps which don't exist (not a necessary check. efficiency?) - elseif ( $this->registered[$handle]->deps && !$this->all_deps( $this->registered[$handle]->deps, true ) ) + elseif ( $this->registered[$handle]->deps && !$this->all_deps( $this->registered[$handle]->deps, true, $group ) ) $keep_going = false; // Script requires deps which don't exist if ( !$keep_going ) { // Either script or its deps don't exist. @@ -79,13 +106,17 @@ class WP_Dependencies { return false; // Abort this branch. else continue; // We're at the top level. Move on to the next one. - } + } + + if ( $queued ) // Already grobbed it and its deps + continue; + + if ( isset($handle_parts[1]) ) + $this->args[$handle] = $handle_parts[1]; - $this->to_do[$handle] = true; + $this->to_do[] = $handle; } - if ( !$recursion ) // at the end - $this->to_do = array_keys( $this->to_do ); return true; } @@ -140,8 +171,14 @@ class WP_Dependencies { } function dequeue( $handles ) { - foreach ( (array) $handles as $handle ) - unset( $this->queue[$handle] ); + foreach ( (array) $handles as $handle ) { + $handle = explode('?', $handle); + $key = array_search($handle[0], $this->queue); + if ( false !== $key ) { + unset($this->queue[$key]); + unset($this->args[$handle[0]]); + } + } } function query( $handle, $list = 'registered' ) { // registered, queue, done, to_do @@ -165,6 +202,21 @@ class WP_Dependencies { return false; } + function set_group( $handle, $recursion, $group ) { + $group = (int) $group; + + if ( $recursion ) + $group = min($this->group, $group); + else + $this->group = $group; + + if ( isset($this->groups[$handle]) && $this->groups[$handle] <= $group ) + return false; + + $this->groups[$handle] = $group; + return true; + } + } class _WP_Dependency { @@ -180,8 +232,6 @@ class _WP_Dependency { @list($this->handle, $this->src, $this->deps, $this->ver, $this->args) = func_get_args(); if ( !is_array($this->deps) ) $this->deps = array(); - if ( !$this->ver ) - $this->ver = false; } function add_data( $name, $data ) {