<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[38863] trunk: Revert [38859] due to an incomplete implementation.</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="https://core.trac.wordpress.org/changeset/38863">38863</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"https://core.trac.wordpress.org/changeset/38863","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>ocean90</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2016-10-21 17:00:29 +0000 (Fri, 21 Oct 2016)</dd>
</dl>
<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Revert <a href="https://core.trac.wordpress.org/changeset/38859">[38859]</a> due to an incomplete implementation.
See https://core.trac.wordpress.org/ticket/37128#comment:27.
See <a href="https://core.trac.wordpress.org/ticket/37128">#37128</a>.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcwpincludescategorytemplatephp">trunk/src/wp-includes/category-template.php</a></li>
<li><a href="#trunksrcwpincludescustomizeclasswpcustomizenavmenuitemsettingphp">trunk/src/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php</a></li>
<li><a href="#trunksrcwpincludescustomizeclasswpcustomizenavmenusettingphp">trunk/src/wp-includes/customize/class-wp-customize-nav-menu-setting.php</a></li>
<li><a href="#trunksrcwpincludesdeprecatedphp">trunk/src/wp-includes/deprecated.php</a></li>
<li><a href="#trunksrcwpincludesfunctionsphp">trunk/src/wp-includes/functions.php</a></li>
<li><a href="#trunksrcwpincludeslinktemplatephp">trunk/src/wp-includes/link-template.php</a></li>
<li><a href="#trunksrcwpincludesnavmenuphp">trunk/src/wp-includes/nav-menu.php</a></li>
<li><a href="#trunksrcwpsettingsphp">trunk/src/wp-settings.php</a></li>
</ul>
<h3>Removed Paths</h3>
<ul>
<li><a href="#trunksrcwpincludesclasswplistutilphp">trunk/src/wp-includes/class-wp-list-util.php</a></li>
<li><a href="#trunktestsphpunittestsfunctionswpListUtilphp">trunk/tests/phpunit/tests/functions/wpListUtil.php</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcwpincludescategorytemplatephp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/category-template.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/category-template.php 2016-10-21 16:16:17 UTC (rev 38862)
+++ trunk/src/wp-includes/category-template.php 2016-10-21 17:00:29 UTC (rev 38863)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -100,6 +100,45 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * Sort categories by name.
+ *
+ * Used by usort() as a callback, should not be used directly. Can actually be
+ * used to sort any term object.
+ *
+ * @since 2.3.0
+ * @access private
+ *
+ * @param object $a
+ * @param object $b
+ * @return int
+ */
+function _usort_terms_by_name( $a, $b ) {
+ return strcmp( $a->name, $b->name );
+}
+
+/**
+ * Sort categories by ID.
+ *
+ * Used by usort() as a callback, should not be used directly. Can actually be
+ * used to sort any term object.
+ *
+ * @since 2.3.0
+ * @access private
+ *
+ * @param object $a
+ * @param object $b
+ * @return int
+ */
+function _usort_terms_by_ID( $a, $b ) {
+ if ( $a->term_id > $b->term_id )
+ return 1;
+ elseif ( $a->term_id < $b->term_id )
+ return -1;
+ else
+ return 0;
+}
+
+/**
</ins><span class="cx" style="display: block; padding: 0 10px"> * Retrieve category name based on category ID.
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @since 0.71
</span></span></pre></div>
<a id="trunksrcwpincludesclasswplistutilphp"></a>
<div class="delfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Deleted: trunk/src/wp-includes/class-wp-list-util.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/class-wp-list-util.php 2016-10-21 16:16:17 UTC (rev 38862)
+++ trunk/src/wp-includes/class-wp-list-util.php 2016-10-21 17:00:29 UTC (rev 38863)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,260 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-<?php
-/**
- * WordPress List utility class
- *
- * @package WordPress
- * @since 4.7.0
- */
-
-/**
- * List utility.
- *
- * Utility class to handle operations on an array of objects.
- *
- * @since 4.7.0
- */
-class WP_List_Util {
- /**
- * The input array.
- *
- * @since 4.7.0
- * @access private
- * @var array
- */
- private $input = array();
-
- /**
- * The output array.
- *
- * @since 4.7.0
- * @access private
- * @var array
- */
- private $output = array();
-
- /**
- * Temporary arguments for sorting.
- *
- * @since 4.7.0
- * @access private
- * @var array
- */
- private $orderby = array();
-
- /**
- * Constructor.
- *
- * Sets the input array.
- *
- * @since 4.7.0
- *
- * @param array $input Array to perform operations on.
- */
- public function __construct( $input ) {
- $this->output = $this->input = $input;
- }
-
- /**
- * Returns the original input array.
- *
- * @since 4.7.0
- * @access public
- *
- * @return array The input array.
- */
- public function get_input() {
- return $this->input;
- }
-
- /**
- * Returns the output array.
- *
- * @since 4.7.0
- * @access public
- *
- * @return array The output array.
- */
- public function get_output() {
- return $this->output;
- }
-
- /**
- * Filters the list, based on a set of key => value arguments.
- *
- * @since 4.7.0
- *
- * @param array $args Optional. An array of key => value arguments to match
- * against each object. Default empty array.
- * @param string $operator Optional. The logical operation to perform. 'AND' means
- * all elements from the array must match. 'OR' means only
- * one element needs to match. 'NOT' means no elements may
- * match. Default 'AND'.
- * @return array Array of found values.
- */
- public function filter( $args = array(), $operator = 'AND' ) {
- if ( empty( $args ) ) {
- return $this->output;
- }
-
- $operator = strtoupper( $operator );
-
- if ( ! in_array( $operator, array( 'AND', 'OR', 'NOT' ), true ) ) {
- return array();
- }
-
- $count = count( $args );
- $filtered = array();
-
- foreach ( $this->output as $key => $obj ) {
- $to_match = (array) $obj;
-
- $matched = 0;
- foreach ( $args as $m_key => $m_value ) {
- if ( array_key_exists( $m_key, $to_match ) && $m_value == $to_match[ $m_key ] ) {
- $matched++;
- }
- }
-
- if ( ( 'AND' == $operator && $matched == $count )
- || ( 'OR' == $operator && $matched > 0 )
- || ( 'NOT' == $operator && 0 == $matched ) ) {
- $filtered[$key] = $obj;
- }
- }
-
- $this->output = $filtered;
-
- return $this->output;
- }
-
- /**
- * Plucks a certain field out of each object in the list.
- *
- * This has the same functionality and prototype of
- * array_column() (PHP 5.5) but also supports objects.
- *
- * @since 4.7.0
- *
- * @param int|string $field Field from the object to place instead of the entire object
- * @param int|string $index_key Optional. Field from the object to use as keys for the new array.
- * Default null.
- * @return array Array of found values. If `$index_key` is set, an array of found values with keys
- * corresponding to `$index_key`. If `$index_key` is null, array keys from the original
- * `$list` will be preserved in the results.
- */
- public function pluck( $field, $index_key = null ) {
- if ( ! $index_key ) {
- /*
- * This is simple. Could at some point wrap array_column()
- * if we knew we had an array of arrays.
- */
- foreach ( $this->output as $key => $value ) {
- if ( is_object( $value ) ) {
- $this->output[ $key ] = $value->$field;
- } else {
- $this->output[ $key ] = $value[ $field ];
- }
- }
- return $this->output;
- }
-
- /*
- * When index_key is not set for a particular item, push the value
- * to the end of the stack. This is how array_column() behaves.
- */
- $newlist = array();
- foreach ( $this->output as $value ) {
- if ( is_object( $value ) ) {
- if ( isset( $value->$index_key ) ) {
- $newlist[ $value->$index_key ] = $value->$field;
- } else {
- $newlist[] = $value->$field;
- }
- } else {
- if ( isset( $value[ $index_key ] ) ) {
- $newlist[ $value[ $index_key ] ] = $value[ $field ];
- } else {
- $newlist[] = $value[ $field ];
- }
- }
- }
-
- $this->output = $newlist;
-
- return $this->output;
- }
-
- /**
- * Sorts the list, based on one or more orderby arguments.
- *
- * @since 4.7.0
- *
- * @param string|array $orderby Optional. Either the field name to order by or an array
- * of multiple orderby fields as $orderby => $order.
- * @param string $order Optional. Either 'ASC' or 'DESC'. Only used if $orderby
- * is a string.
- * @return array The sorted array.
- */
- public function sort( $orderby = array(), $order = 'ASC' ) {
- if ( empty( $orderby ) ) {
- return $this->output;
- }
-
- if ( is_string( $orderby ) ) {
- $orderby = array( $orderby => $order );
- }
-
- foreach ( $orderby as $field => $direction ) {
- $orderby[ $field ] = 'DESC' === strtoupper( $direction ) ? 'DESC' : 'ASC';
- }
-
- $this->orderby = $orderby;
-
- usort( $this->output, array( $this, 'sort_callback' ) );
-
- $this->orderby = array();
-
- return $this->output;
- }
-
- /**
- * Callback to sort the list by specific fields.
- *
- * @since 4.7.0
- * @access private
- *
- * @see WP_List_Util::sort()
- *
- * @param object|array $a One object to compare.
- * @param object|array $b The other object to compare.
- * @return int 0 if both objects equal. -1 if second object should come first, 1 otherwise.
- */
- private function sort_callback( $a, $b ) {
- if ( empty( $this->orderby ) ) {
- return 0;
- }
-
- $a = (array) $a;
- $b = (array) $b;
-
- foreach ( $this->orderby as $field => $direction ) {
- if ( ! isset( $a[ $field ] ) || ! isset( $b[ $field ] ) ) {
- continue;
- }
-
- if ( $a[ $field ] == $b[ $field ] ) {
- continue;
- }
-
- $results = 'DESC' === $direction ? array( 1, -1 ) : array( -1, 1 );
-
- if ( is_numeric( $a[ $field ] ) && is_numeric( $b[ $field ] ) ) {
- return ( $a[ $field ] < $b[ $field ] ) ? $results[0] : $results[1];
- }
-
- return 0 > strcmp( $a[ $field ], $b[ $field ] ) ? $results[0] : $results[1];
- }
-
- return 0;
- }
-}
</del></span></pre></div>
<a id="trunksrcwpincludescustomizeclasswpcustomizenavmenuitemsettingphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php 2016-10-21 16:16:17 UTC (rev 38862)
+++ trunk/src/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php 2016-10-21 17:00:29 UTC (rev 38863)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -532,9 +532,8 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> if ( ARRAY_A === $args['output'] ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $items = wp_list_sort( $items, array(
- $args['output_key'] => 'ASC',
- ) );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $GLOBALS['_menu_item_sort_prop'] = $args['output_key'];
+ usort( $items, '_sort_nav_menu_items' );
</ins><span class="cx" style="display: block; padding: 0 10px"> $i = 1;
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> foreach ( $items as $k => $item ) {
</span></span></pre></div>
<a id="trunksrcwpincludescustomizeclasswpcustomizenavmenusettingphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/customize/class-wp-customize-nav-menu-setting.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/customize/class-wp-customize-nav-menu-setting.php 2016-10-21 16:16:17 UTC (rev 38862)
+++ trunk/src/wp-includes/customize/class-wp-customize-nav-menu-setting.php 2016-10-21 17:00:29 UTC (rev 38863)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -287,9 +287,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> // Make sure the menu objects get re-sorted after an update/insert.
</span><span class="cx" style="display: block; padding: 0 10px"> if ( ! $is_delete && ! empty( $args['orderby'] ) ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $menus = wp_list_sort( $menus, array(
- $args['orderby'] => 'ASC',
- ) );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $this->_current_menus_sort_orderby = $args['orderby'];
+ usort( $menus, array( $this, '_sort_menus_by_orderby' ) );
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> // @todo add support for $args['hide_empty'] === true
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -314,9 +313,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> * This is a workaround for a lack of closures.
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @since 4.3.0
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * @deprecated 4.7.0 Use wp_list_sort()
</del><span class="cx" style="display: block; padding: 0 10px"> * @access protected
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- *
</del><span class="cx" style="display: block; padding: 0 10px"> * @param object $menu1
</span><span class="cx" style="display: block; padding: 0 10px"> * @param object $menu2
</span><span class="cx" style="display: block; padding: 0 10px"> * @return int
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -324,8 +321,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> * @see WP_Customize_Nav_Menu_Setting::filter_wp_get_nav_menus()
</span><span class="cx" style="display: block; padding: 0 10px"> */
</span><span class="cx" style="display: block; padding: 0 10px"> protected function _sort_menus_by_orderby( $menu1, $menu2 ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- _deprecated_function( __METHOD__, '4.7.0', 'wp_list_sort' );
-
</del><span class="cx" style="display: block; padding: 0 10px"> $key = $this->_current_menus_sort_orderby;
</span><span class="cx" style="display: block; padding: 0 10px"> return strcmp( $menu1->$key, $menu2->$key );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span></span></pre></div>
<a id="trunksrcwpincludesdeprecatedphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/deprecated.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/deprecated.php 2016-10-21 16:16:17 UTC (rev 38862)
+++ trunk/src/wp-includes/deprecated.php 2016-10-21 17:00:29 UTC (rev 38863)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3798,83 +3798,3 @@
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> return preg_replace( '%&\s*\{[^}]*(\}\s*;?|$)%', '', $string );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
-/**
- * Sort categories by ID.
- *
- * Used by usort() as a callback, should not be used directly. Can actually be
- * used to sort any term object.
- *
- * @since 2.3.0
- * @deprecated 4.7.0 Use wp_list_sort()
- * @access private
- *
- * @param object $a
- * @param object $b
- * @return int
- */
-function _usort_terms_by_ID( $a, $b ) {
- _deprecated_function( __FUNCTION__, '4.7.0', 'wp_list_sort' );
-
- if ( $a->term_id > $b->term_id )
- return 1;
- elseif ( $a->term_id < $b->term_id )
- return -1;
- else
- return 0;
-}
-
-/**
- * Sort categories by name.
- *
- * Used by usort() as a callback, should not be used directly. Can actually be
- * used to sort any term object.
- *
- * @since 2.3.0
- * @deprecated 4.7.0 Use wp_list_sort()
- * @access private
- *
- * @param object $a
- * @param object $b
- * @return int
- */
-function _usort_terms_by_name( $a, $b ) {
- _deprecated_function( __FUNCTION__, '4.7.0', 'wp_list_sort' );
-
- return strcmp( $a->name, $b->name );
-}
-
-/**
- * Sort menu items by the desired key.
- *
- * @since 3.0.0
- * @deprecated 4.7.0 Use wp_list_sort()
- * @access private
- *
- * @global string $_menu_item_sort_prop
- *
- * @param object $a The first object to compare
- * @param object $b The second object to compare
- * @return int -1, 0, or 1 if $a is considered to be respectively less than, equal to, or greater than $b.
- */
-function _sort_nav_menu_items( $a, $b ) {
- global $_menu_item_sort_prop;
-
- _deprecated_function( __FUNCTION__, '4.7.0', 'wp_list_sort' );
-
- if ( empty( $_menu_item_sort_prop ) )
- return 0;
-
- if ( ! isset( $a->$_menu_item_sort_prop ) || ! isset( $b->$_menu_item_sort_prop ) )
- return 0;
-
- $_a = (int) $a->$_menu_item_sort_prop;
- $_b = (int) $b->$_menu_item_sort_prop;
-
- if ( $a->$_menu_item_sort_prop == $b->$_menu_item_sort_prop )
- return 0;
- elseif ( $_a == $a->$_menu_item_sort_prop && $_b == $b->$_menu_item_sort_prop )
- return $_a < $_b ? -1 : 1;
- else
- return strcmp( $a->$_menu_item_sort_prop, $b->$_menu_item_sort_prop );
-}
</del></span></pre></div>
<a id="trunksrcwpincludesfunctionsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/functions.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/functions.php 2016-10-21 16:16:17 UTC (rev 38862)
+++ trunk/src/wp-includes/functions.php 2016-10-21 17:00:29 UTC (rev 38863)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3489,7 +3489,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> * Filters a list of objects, based on a set of key => value arguments.
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @since 3.0.0
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * @since 4.7.0 Uses WP_List_Util class.
</del><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @param array $list An array of objects to filter
</span><span class="cx" style="display: block; padding: 0 10px"> * @param array $args Optional. An array of key => value arguments to match
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3503,26 +3502,21 @@
</span><span class="cx" style="display: block; padding: 0 10px"> * @return array A list of objects or object fields.
</span><span class="cx" style="display: block; padding: 0 10px"> */
</span><span class="cx" style="display: block; padding: 0 10px"> function wp_filter_object_list( $list, $args = array(), $operator = 'and', $field = false ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- if ( ! is_array( $list ) ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( ! is_array( $list ) )
</ins><span class="cx" style="display: block; padding: 0 10px"> return array();
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- }
</del><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $util = new WP_List_Util( $list );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $list = wp_list_filter( $list, $args, $operator );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $util->filter( $args, $operator );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( $field )
+ $list = wp_list_pluck( $list, $field );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- if ( $field ) {
- $util->pluck( $field );
- }
-
- return $util->get_output();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ return $list;
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px"> * Filters a list of objects, based on a set of key => value arguments.
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @since 3.1.0
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * @since 4.7.0 Uses WP_List_Util class.
</del><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @param array $list An array of objects to filter.
</span><span class="cx" style="display: block; padding: 0 10px"> * @param array $args Optional. An array of key => value arguments to match
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3534,12 +3528,33 @@
</span><span class="cx" style="display: block; padding: 0 10px"> * @return array Array of found values.
</span><span class="cx" style="display: block; padding: 0 10px"> */
</span><span class="cx" style="display: block; padding: 0 10px"> function wp_list_filter( $list, $args = array(), $operator = 'AND' ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- if ( ! is_array( $list ) ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( ! is_array( $list ) )
</ins><span class="cx" style="display: block; padding: 0 10px"> return array();
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+ if ( empty( $args ) )
+ return $list;
+
+ $operator = strtoupper( $operator );
+ $count = count( $args );
+ $filtered = array();
+
+ foreach ( $list as $key => $obj ) {
+ $to_match = (array) $obj;
+
+ $matched = 0;
+ foreach ( $args as $m_key => $m_value ) {
+ if ( array_key_exists( $m_key, $to_match ) && $m_value == $to_match[ $m_key ] )
+ $matched++;
+ }
+
+ if ( ( 'AND' == $operator && $matched == $count )
+ || ( 'OR' == $operator && $matched > 0 )
+ || ( 'NOT' == $operator && 0 == $matched ) ) {
+ $filtered[$key] = $obj;
+ }
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $util = new WP_List_Util( $list );
- return $util->filter( $args, $operator );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ return $filtered;
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3550,7 +3565,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @since 3.1.0
</span><span class="cx" style="display: block; padding: 0 10px"> * @since 4.0.0 $index_key parameter added.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * @since 4.7.0 Uses WP_List_Util class.
</del><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @param array $list List of objects or arrays
</span><span class="cx" style="display: block; padding: 0 10px"> * @param int|string $field Field from the object to place instead of the entire object
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3561,29 +3575,43 @@
</span><span class="cx" style="display: block; padding: 0 10px"> * `$list` will be preserved in the results.
</span><span class="cx" style="display: block; padding: 0 10px"> */
</span><span class="cx" style="display: block; padding: 0 10px"> function wp_list_pluck( $list, $field, $index_key = null ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $util = new WP_List_Util( $list );
- return $util->pluck( $field, $index_key );
-}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( ! $index_key ) {
+ /*
+ * This is simple. Could at some point wrap array_column()
+ * if we knew we had an array of arrays.
+ */
+ foreach ( $list as $key => $value ) {
+ if ( is_object( $value ) ) {
+ $list[ $key ] = $value->$field;
+ } else {
+ $list[ $key ] = $value[ $field ];
+ }
+ }
+ return $list;
+ }
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-/**
- * Sorts a list of objects, based on one or more orderby arguments.
- *
- * @since 4.7.0
- *
- * @param array $list An array of objects to filter.
- * @param string|array $orderby Optional. Either the field name to order by or an array
- * of multiple orderby fields as $orderby => $order.
- * @param string $order Optional. Either 'ASC' or 'DESC'. Only used if $orderby
- * is a string.
- * @return array The sorted array.
- */
-function wp_list_sort( $list, $orderby = array(), $order = 'ASC' ) {
- if ( ! is_array( $list ) ) {
- return array();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ /*
+ * When index_key is not set for a particular item, push the value
+ * to the end of the stack. This is how array_column() behaves.
+ */
+ $newlist = array();
+ foreach ( $list as $value ) {
+ if ( is_object( $value ) ) {
+ if ( isset( $value->$index_key ) ) {
+ $newlist[ $value->$index_key ] = $value->$field;
+ } else {
+ $newlist[] = $value->$field;
+ }
+ } else {
+ if ( isset( $value[ $index_key ] ) ) {
+ $newlist[ $value[ $index_key ] ] = $value[ $field ];
+ } else {
+ $newlist[] = $value[ $field ];
+ }
+ }
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $util = new WP_List_Util( $list );
- return $util->sort( $orderby, $order );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ return $newlist;
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span></span></pre></div>
<a id="trunksrcwpincludeslinktemplatephp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/link-template.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/link-template.php 2016-10-21 16:16:17 UTC (rev 38862)
+++ trunk/src/wp-includes/link-template.php 2016-10-21 17:00:29 UTC (rev 38863)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -169,9 +169,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> if ( strpos($permalink, '%category%') !== false ) {
</span><span class="cx" style="display: block; padding: 0 10px"> $cats = get_the_category($post->ID);
</span><span class="cx" style="display: block; padding: 0 10px"> if ( $cats ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $cats = wp_list_sort( $cats, array(
- 'term_id' => 'ASC',
- ) );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ usort($cats, '_usort_terms_by_ID'); // order by ID
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px"> * Filters the category that gets used in the %category% permalink token.
</span></span></pre></div>
<a id="trunksrcwpincludesnavmenuphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/nav-menu.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/nav-menu.php 2016-10-21 16:16:17 UTC (rev 38862)
+++ trunk/src/wp-includes/nav-menu.php 2016-10-21 17:00:29 UTC (rev 38863)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -558,6 +558,38 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * Sort menu items by the desired key.
+ *
+ * @since 3.0.0
+ * @access private
+ *
+ * @global string $_menu_item_sort_prop
+ *
+ * @param object $a The first object to compare
+ * @param object $b The second object to compare
+ * @return int -1, 0, or 1 if $a is considered to be respectively less than, equal to, or greater than $b.
+ */
+function _sort_nav_menu_items( $a, $b ) {
+ global $_menu_item_sort_prop;
+
+ if ( empty( $_menu_item_sort_prop ) )
+ return 0;
+
+ if ( ! isset( $a->$_menu_item_sort_prop ) || ! isset( $b->$_menu_item_sort_prop ) )
+ return 0;
+
+ $_a = (int) $a->$_menu_item_sort_prop;
+ $_b = (int) $b->$_menu_item_sort_prop;
+
+ if ( $a->$_menu_item_sort_prop == $b->$_menu_item_sort_prop )
+ return 0;
+ elseif ( $_a == $a->$_menu_item_sort_prop && $_b == $b->$_menu_item_sort_prop )
+ return $_a < $_b ? -1 : 1;
+ else
+ return strcmp( $a->$_menu_item_sort_prop, $b->$_menu_item_sort_prop );
+}
+
+/**
</ins><span class="cx" style="display: block; padding: 0 10px"> * Return if a menu item is valid.
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @link https://core.trac.wordpress.org/ticket/13958
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -650,9 +682,8 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> if ( ARRAY_A == $args['output'] ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $items = wp_list_sort( $items, array(
- $args['output_key'] => 'ASC',
- ) );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $GLOBALS['_menu_item_sort_prop'] = $args['output_key'];
+ usort($items, '_sort_nav_menu_items');
</ins><span class="cx" style="display: block; padding: 0 10px"> $i = 1;
</span><span class="cx" style="display: block; padding: 0 10px"> foreach ( $items as $k => $item ) {
</span><span class="cx" style="display: block; padding: 0 10px"> $items[$k]->{$args['output_key']} = $i++;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -745,7 +776,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> $menu_item->type_label = __( 'Post Type Archive' );
</span><span class="cx" style="display: block; padding: 0 10px"> $post_content = wp_trim_words( $menu_item->post_content, 200 );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $post_type_description = '' == $post_content ? $post_type_description : $post_content;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $post_type_description = '' == $post_content ? $post_type_description : $post_content;
</ins><span class="cx" style="display: block; padding: 0 10px"> $menu_item->url = get_post_type_archive_link( $menu_item->object );
</span><span class="cx" style="display: block; padding: 0 10px"> } elseif ( 'taxonomy' == $menu_item->type ) {
</span><span class="cx" style="display: block; padding: 0 10px"> $object = get_taxonomy( $menu_item->object );
</span></span></pre></div>
<a id="trunksrcwpsettingsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-settings.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-settings.php 2016-10-21 16:16:17 UTC (rev 38862)
+++ trunk/src/wp-settings.php 2016-10-21 17:00:29 UTC (rev 38863)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -91,7 +91,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> // Load early WordPress files.
</span><span class="cx" style="display: block; padding: 0 10px"> require( ABSPATH . WPINC . '/compat.php' );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-require( ABSPATH . WPINC . '/class-wp-list-util.php' );
</del><span class="cx" style="display: block; padding: 0 10px"> require( ABSPATH . WPINC . '/functions.php' );
</span><span class="cx" style="display: block; padding: 0 10px"> require( ABSPATH . WPINC . '/class-wp-matchesmapregex.php' );
</span><span class="cx" style="display: block; padding: 0 10px"> require( ABSPATH . WPINC . '/class-wp.php' );
</span></span></pre></div>
<a id="trunktestsphpunittestsfunctionswpListUtilphp"></a>
<div class="delfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Deleted: trunk/tests/phpunit/tests/functions/wpListUtil.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/functions/wpListUtil.php 2016-10-21 16:16:17 UTC (rev 38862)
+++ trunk/tests/phpunit/tests/functions/wpListUtil.php 2016-10-21 17:00:29 UTC (rev 38863)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,341 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-<?php
-
-/**
- * @group functions.php
- */
-class Tests_WP_List_Util extends WP_UnitTestCase {
- public function data_test_wp_list_pluck() {
- return array(
- 'arrays' => array(
- array(
- array( 'foo' => 'bar', 'bar' => 'baz', 'abc' => 'xyz' ),
- array( 'foo' => 'foo', '123' => '456', 'lorem' => 'ipsum' ),
- array( 'foo' => 'baz' ),
- ),
- 'foo',
- null,
- array( 'bar', 'foo', 'baz' ),
- ),
- 'arrays with index key' => array(
- array(
- array( 'foo' => 'bar', 'bar' => 'baz', 'abc' => 'xyz', 'key' => 'foo' ),
- array( 'foo' => 'foo', '123' => '456', 'lorem' => 'ipsum', 'key' => 'bar' ),
- array( 'foo' => 'baz', 'key' => 'value' ),
- ),
- 'foo',
- 'key',
- array( 'foo' => 'bar', 'bar' => 'foo', 'value' => 'baz' ),
- ),
- 'arrays with index key missing' => array(
- array(
- array( 'foo' => 'bar', 'bar' => 'baz', 'abc' => 'xyz' ),
- array( 'foo' => 'foo', '123' => '456', 'lorem' => 'ipsum', 'key' => 'bar' ),
- array( 'foo' => 'baz', 'key' => 'value' ),
- ),
- 'foo',
- 'key',
- array( 'bar' => 'foo', 'value' => 'baz', 'bar' ),
- ),
- 'objects' => array(
- array(
- (object) array( 'foo' => 'bar', 'bar' => 'baz', 'abc' => 'xyz' ),
- (object) array( 'foo' => 'foo', '123' => '456', 'lorem' => 'ipsum' ),
- (object) array( 'foo' => 'baz' ),
- ),
- 'foo',
- null,
- array( 'bar', 'foo', 'baz' ),
- ),
- 'objects with index key' => array(
- array(
- (object) array( 'foo' => 'bar', 'bar' => 'baz', 'abc' => 'xyz', 'key' => 'foo' ),
- (object) array( 'foo' => 'foo', '123' => '456', 'lorem' => 'ipsum', 'key' => 'bar' ),
- (object) array( 'foo' => 'baz', 'key' => 'value' ),
- ),
- 'foo',
- 'key',
- array( 'foo' => 'bar', 'bar' => 'foo', 'value' => 'baz' ),
- ),
- 'objects with index key missing' => array(
- array(
- (object) array( 'foo' => 'bar', 'bar' => 'baz', 'abc' => 'xyz' ),
- (object) array( 'foo' => 'foo', '123' => '456', 'lorem' => 'ipsum', 'key' => 'bar' ),
- (object) array( 'foo' => 'baz', 'key' => 'value' ),
- ),
- 'foo',
- 'key',
- array( 'bar' => 'foo', 'value' => 'baz', 'bar' ),
- ),
- );
- }
-
- /**
- * @dataProvider data_test_wp_list_pluck
- *
- * @param array $list List of objects or arrays.
- * @param int|string $field Field from the object to place instead of the entire object
- * @param int|string $index_key Field from the object to use as keys for the new array.
- * @param array $expected Expected result.
- */
- public function test_wp_list_pluck( $list, $field, $index_key, $expected ) {
- $this->assertEqualSetsWithIndex( $expected, wp_list_pluck( $list, $field, $index_key ) );
- }
-
- public function data_test_wp_list_filter() {
- return array(
- 'string instead of array' => array(
- 'foo',
- array(),
- 'AND',
- array(),
- ),
- 'object instead of array' => array(
- (object) array( 'foo' ),
- array(),
- 'AND',
- array(),
- ),
- 'empty args' => array(
- array( 'foo', 'bar' ),
- array(),
- 'AND',
- array( 'foo', 'bar' ),
- ),
- 'invalid operator' => array(
- array(
- (object) array( 'foo' => 'bar' ),
- (object) array( 'foo' => 'baz' ),
- ),
- array( 'foo' => 'bar' ),
- 'XOR',
- array(),
- ),
- 'single argument to match' => array(
- array(
- (object) array( 'foo' => 'bar', 'bar' => 'baz', 'abc' => 'xyz', 'key' => 'foo' ),
- (object) array( 'foo' => 'foo', '123' => '456', 'lorem' => 'ipsum', 'key' => 'bar' ),
- (object) array( 'foo' => 'baz', 'key' => 'value' ),
- (object) array( 'foo' => 'bar', 'key' => 'value' ),
- ),
- array( 'foo' => 'bar' ),
- 'AND',
- array(
- 0 => (object) array( 'foo' => 'bar', 'bar' => 'baz', 'abc' => 'xyz', 'key' => 'foo' ),
- 3 => (object) array( 'foo' => 'bar', 'key' => 'value' ),
- ),
- ),
- 'all must match' => array(
- array(
- (object) array( 'foo' => 'bar', 'bar' => 'baz', 'abc' => 'xyz', 'key' => 'foo' ),
- (object) array( 'foo' => 'foo', '123' => '456', 'lorem' => 'ipsum', 'key' => 'bar' ),
- (object) array( 'foo' => 'baz', 'key' => 'value', 'bar' => 'baz' ),
- (object) array( 'foo' => 'bar', 'key' => 'value' ),
- ),
- array( 'foo' => 'bar', 'bar' => 'baz' ),
- 'AND',
- array(
- 0 => (object) array( 'foo' => 'bar', 'bar' => 'baz', 'abc' => 'xyz', 'key' => 'foo' ),
- ),
- ),
- 'any must match' => array(
- array(
- (object) array( 'foo' => 'bar', 'bar' => 'baz', 'abc' => 'xyz', 'key' => 'foo' ),
- (object) array( 'foo' => 'foo', '123' => '456', 'lorem' => 'ipsum', 'key' => 'bar' ),
- (object) array( 'foo' => 'baz', 'key' => 'value', 'bar' => 'baz' ),
- (object) array( 'foo' => 'bar', 'key' => 'value' ),
- ),
- array( 'key' => 'value', 'bar' => 'baz' ),
- 'OR',
- array(
- 0 => (object) array( 'foo' => 'bar', 'bar' => 'baz', 'abc' => 'xyz', 'key' => 'foo' ),
- 2 => (object) array( 'foo' => 'baz', 'key' => 'value', 'bar' => 'baz' ),
- 3 => (object) array( 'foo' => 'bar', 'key' => 'value' ),
- ),
- ),
- 'none must match' => array(
- array(
- (object) array( 'foo' => 'bar', 'bar' => 'baz', 'abc' => 'xyz', 'key' => 'foo' ),
- (object) array( 'foo' => 'foo', '123' => '456', 'lorem' => 'ipsum', 'key' => 'bar' ),
- (object) array( 'foo' => 'baz', 'key' => 'value' ),
- (object) array( 'foo' => 'bar', 'key' => 'value' ),
- ),
- array( 'key' => 'value', 'bar' => 'baz' ),
- 'NOT',
- array(
- 1 => (object) array( 'foo' => 'foo', '123' => '456', 'lorem' => 'ipsum', 'key' => 'bar' ),
- ),
- ),
- );
- }
-
- /**
- * @dataProvider data_test_wp_list_filter
- *
- * @param array $list An array of objects to filter.
- * @param array $args An array of key => value arguments to match
- * against each object.
- * @param string $operator The logical operation to perform.
- * @param array $expected Expected result.
- */
- public function test_wp_list_filter( $list, $args, $operator, $expected ) {
- $this->assertEqualSetsWithIndex( $expected, wp_list_filter( $list, $args, $operator ) );
- }
-
- public function data_test_wp_list_sort() {
- return array(
- 'single orderby ascending' => array(
- array(
- array( 'foo' => 'bar', 'bar' => 'baz', 'key' => 'foo' ),
- array( 'foo' => 'foo', 'lorem' => 'ipsum', 'key' => 'bar' ),
- array( 'foo' => 'baz', 'key' => 'value' ),
- array( 'foo' => 'bar', 'key' => 'value' ),
- ),
- 'foo',
- 'ASC',
- array(
- array( 'foo' => 'bar', 'bar' => 'baz', 'key' => 'foo' ),
- array( 'foo' => 'bar', 'key' => 'value' ),
- array( 'foo' => 'baz', 'key' => 'value' ),
- array( 'foo' => 'foo', 'lorem' => 'ipsum', 'key' => 'bar' ),
- ),
- ),
- 'single orderby descending' => array(
- array(
- array( 'foo' => 'bar', 'bar' => 'baz', 'key' => 'foo' ),
- array( 'foo' => 'foo', 'lorem' => 'ipsum', 'key' => 'bar' ),
- array( 'foo' => 'baz', 'key' => 'value' ),
- array( 'foo' => 'bar', 'key' => 'value' ),
- ),
- 'foo',
- 'DESC',
- array(
- array( 'foo' => 'foo', 'lorem' => 'ipsum', 'key' => 'bar' ),
- array( 'foo' => 'baz', 'key' => 'value' ),
- array( 'foo' => 'bar', 'bar' => 'baz', 'key' => 'foo' ),
- array( 'foo' => 'bar', 'key' => 'value' ),
- ),
- ),
- 'single orderby array ascending' => array(
- array(
- array( 'foo' => 'bar', 'bar' => 'baz', 'key' => 'foo' ),
- array( 'foo' => 'foo', 'lorem' => 'ipsum', 'key' => 'bar' ),
- array( 'foo' => 'baz', 'key' => 'value' ),
- array( 'foo' => 'bar', 'key' => 'value' ),
- ),
- array( 'foo' => 'ASC' ),
- 'IGNORED',
- array(
- array( 'foo' => 'bar', 'bar' => 'baz', 'key' => 'foo' ),
- array( 'foo' => 'bar', 'key' => 'value' ),
- array( 'foo' => 'baz', 'key' => 'value' ),
- array( 'foo' => 'foo', 'lorem' => 'ipsum', 'key' => 'bar' ),
- ),
- ),
- 'single orderby array descending' => array(
- array(
- array( 'foo' => 'bar', 'bar' => 'baz', 'key' => 'foo' ),
- array( 'foo' => 'foo', 'lorem' => 'ipsum', 'key' => 'bar' ),
- array( 'foo' => 'baz', 'key' => 'value' ),
- array( 'foo' => 'bar', 'key' => 'value' ),
- ),
- array( 'foo' => 'DESC' ),
- 'IGNORED',
- array(
- array( 'foo' => 'foo', 'lorem' => 'ipsum', 'key' => 'bar' ),
- array( 'foo' => 'baz', 'key' => 'value' ),
- array( 'foo' => 'bar', 'bar' => 'baz', 'key' => 'foo' ),
- array( 'foo' => 'bar', 'key' => 'value' ),
- ),
- ),
- 'multiple orderby ascending' => array(
- array(
- array( 'foo' => 'bar', 'bar' => 'baz', 'key' => 'foo' ),
- array( 'foo' => 'foo', 'lorem' => 'ipsum', 'key' => 'bar' ),
- array( 'foo' => 'foo', 'key' => 'key' ),
- array( 'foo' => 'baz', 'key' => 'key' ),
- array( 'foo' => 'bar', 'key' => 'value' ),
- ),
- array( 'key' => 'ASC', 'foo' => 'ASC' ),
- 'IGNORED',
- array(
- array( 'foo' => 'foo', 'lorem' => 'ipsum', 'key' => 'bar' ),
- array( 'foo' => 'bar', 'bar' => 'baz', 'key' => 'foo' ),
- array( 'foo' => 'baz', 'key' => 'key' ),
- array( 'foo' => 'foo', 'key' => 'key' ),
- array( 'foo' => 'bar', 'key' => 'value' ),
- ),
- ),
- 'multiple orderby descending' => array(
- array(
- array( 'foo' => 'bar', 'bar' => 'baz', 'key' => 'foo' ),
- array( 'foo' => 'foo', 'lorem' => 'ipsum', 'key' => 'bar' ),
- array( 'foo' => 'foo', 'key' => 'key' ),
- array( 'foo' => 'baz', 'key' => 'key' ),
- array( 'foo' => 'bar', 'key' => 'value' ),
- ),
- array( 'key' => 'DESC', 'foo' => 'DESC' ),
- 'IGNORED',
- array(
- array( 'foo' => 'bar', 'key' => 'value' ),
- array( 'foo' => 'foo', 'key' => 'key' ),
- array( 'foo' => 'baz', 'key' => 'key' ),
- array( 'foo' => 'bar', 'bar' => 'baz', 'key' => 'foo' ),
- array( 'foo' => 'foo', 'lorem' => 'ipsum', 'key' => 'bar' ),
- ),
- ),
- 'multiple orderby mixed' => array(
- array(
- array( 'foo' => 'bar', 'bar' => 'baz', 'key' => 'foo' ),
- array( 'foo' => 'foo', 'lorem' => 'ipsum', 'key' => 'bar' ),
- array( 'foo' => 'foo', 'key' => 'key' ),
- array( 'foo' => 'baz', 'key' => 'key' ),
- array( 'foo' => 'bar', 'key' => 'value' ),
- ),
- array( 'key' => 'DESC', 'foo' => 'ASC' ),
- 'IGNORED',
- array(
- array( 'foo' => 'bar', 'key' => 'value' ),
- array( 'foo' => 'baz', 'key' => 'key' ),
- array( 'foo' => 'foo', 'key' => 'key' ),
- array( 'foo' => 'bar', 'bar' => 'baz', 'key' => 'foo' ),
- array( 'foo' => 'foo', 'lorem' => 'ipsum', 'key' => 'bar' ),
- ),
- ),
- );
- }
-
- /**
- * @dataProvider data_test_wp_list_sort
- *
- * @param string|array $orderby Either the field name to order by or an array
- * of multiple orderby fields as $orderby => $order.
- * @param string $order Either 'ASC' or 'DESC'.
- */
- public function test_wp_list_sort( $list, $orderby, $order, $expected ) {
- $this->assertEquals( $expected, wp_list_sort( $list, $orderby, $order ) );
- }
-
- public function test_wp_list_util_get_input() {
- $input = array( 'foo', 'bar' );
- $util = new WP_List_Util( $input );
-
- $this->assertEqualSets( $input, $util->get_input() );
- }
-
- public function test_wp_list_util_get_output_immediately() {
- $input = array( 'foo', 'bar' );
- $util = new WP_List_Util( $input );
-
- $this->assertEqualSets( $input, $util->get_output() );
- }
-
- public function test_wp_list_util_get_output() {
- $expected = array( (object) array( 'foo' => 'bar', 'bar' => 'baz' ) );
-
- $util = new WP_List_Util( array( (object) array( 'foo' => 'bar', 'bar' => 'baz' ), (object) array( 'bar' => 'baz' ) ) );
- $actual = $util->filter( array( 'foo' => 'bar' ) );
-
- $this->assertEqualSets( $expected, $actual );
- $this->assertEqualSets( $expected, $util->get_output() );
- }
-}
</del></span></pre>
</div>
</div>
</body>
</html>