Convert Walker classes to pass as reference. Props mdawaffe. fixes #6796 for trunk

git-svn-id: http://svn.automattic.com/wordpress/trunk@7761 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
ryan 2008-04-21 19:30:54 +00:00
parent 23fd331b4a
commit d95ea6777b
3 changed files with 45 additions and 69 deletions

View File

@ -126,33 +126,25 @@ class Walker_Category_Checklist extends Walker {
var $tree_type = 'category'; var $tree_type = 'category';
var $db_fields = array ('parent' => 'parent', 'id' => 'term_id'); //TODO: decouple this var $db_fields = array ('parent' => 'parent', 'id' => 'term_id'); //TODO: decouple this
function start_lvl($output, $depth, $args) { function start_lvl(&$output, $depth, $args) {
$indent = str_repeat("\t", $depth); $indent = str_repeat("\t", $depth);
$output .= "$indent<ul class='children'>\n"; $output .= "$indent<ul class='children'>\n";
return $output;
} }
function end_lvl($output, $depth, $args) { function end_lvl(&$output, $depth, $args) {
$indent = str_repeat("\t", $depth); $indent = str_repeat("\t", $depth);
$output .= "$indent</ul>\n"; $output .= "$indent</ul>\n";
return $output;
} }
function start_el($output, $category, $depth, $args) { function start_el(&$output, $category, $depth, $args) {
extract($args); extract($args);
$class = in_array( $category->term_id, $popular_cats ) ? ' class="popular-category"' : ''; $class = in_array( $category->term_id, $popular_cats ) ? ' class="popular-category"' : '';
$output .= "\n<li id='category-$category->term_id'$class>" . '<label for="in-category-' . $category->term_id . '" class="selectit"><input value="' . $category->term_id . '" type="checkbox" name="post_category[]" id="in-category-' . $category->term_id . '"' . (in_array( $category->term_id, $selected_cats ) ? ' checked="checked"' : "" ) . '/> ' . wp_specialchars( apply_filters('the_category', $category->name )) . '</label>'; $output .= "\n<li id='category-$category->term_id'$class>" . '<label for="in-category-' . $category->term_id . '" class="selectit"><input value="' . $category->term_id . '" type="checkbox" name="post_category[]" id="in-category-' . $category->term_id . '"' . (in_array( $category->term_id, $selected_cats ) ? ' checked="checked"' : "" ) . '/> ' . wp_specialchars( apply_filters('the_category', $category->name )) . '</label>';
return $output;
} }
function end_el($output, $category, $depth, $args) { function end_el(&$output, $category, $depth, $args) {
if ( 'list' != $args['style'] )
return $output;
$output .= "</li>\n"; $output .= "</li>\n";
return $output;
} }
} }

View File

@ -35,6 +35,7 @@ function redirect_post($post_ID = '') {
$location = $location[0] . '#postcustom'; $location = $location[0] . '#postcustom';
} elseif (!empty($referredby) && $referredby != $referer) { } elseif (!empty($referredby) && $referredby != $referer) {
$location = $_POST['referredby']; $location = $_POST['referredby'];
$location = remove_query_arg('_wp_original_http_referer', $location);
if ( $_POST['referredby'] == 'redo' ) if ( $_POST['referredby'] == 'redo' )
$location = get_permalink( $post_ID ); $location = get_permalink( $post_ID );
elseif ( false !== strpos($location, 'edit.php') ) elseif ( false !== strpos($location, 'edit.php') )

View File

@ -395,26 +395,26 @@ class Walker {
var $db_fields; var $db_fields;
//abstract callbacks //abstract callbacks
function start_lvl($output) { return $output; } function start_lvl(&$output) {}
function end_lvl($output) { return $output; } function end_lvl(&$output) {}
function start_el($output) { return $output; } function start_el(&$output) {}
function end_el($output) { return $output; } function end_el(&$output) {}
/* /*
* display one element if the element doesn't have any children * display one element if the element doesn't have any children
* otherwise, display the element and its children * otherwise, display the element and its children
*/ */
function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, $output ) { function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output ) {
if ( !$element) if ( !$element )
return $output; return;
$id_field = $this->db_fields['id']; $id_field = $this->db_fields['id'];
$parent_field = $this->db_fields['parent']; $parent_field = $this->db_fields['parent'];
//display this element //display this element
$cb_args = array_merge( array($output, $element, $depth), $args); $cb_args = array_merge( array(&$output, $element, $depth), $args);
$output = call_user_func_array(array(&$this, 'start_el'), $cb_args); call_user_func_array(array(&$this, 'start_el'), $cb_args);
if ( $max_depth == 0 || if ( $max_depth == 0 ||
($max_depth != 0 && $max_depth > $depth+1 )) { //whether to descend ($max_depth != 0 && $max_depth > $depth+1 )) { //whether to descend
@ -427,12 +427,12 @@ class Walker {
if ( !isset($newlevel) ) { if ( !isset($newlevel) ) {
$newlevel = true; $newlevel = true;
//start the child delimiter //start the child delimiter
$cb_args = array_merge( array($output, $depth), $args); $cb_args = array_merge( array(&$output, $depth), $args);
$output = call_user_func_array(array(&$this, 'start_lvl'), $cb_args); call_user_func_array(array(&$this, 'start_lvl'), $cb_args);
} }
array_splice( $children_elements, $i, 1 ); array_splice( $children_elements, $i, 1 );
$output = $this->display_element( $child, $children_elements, $max_depth, $depth + 1, $args, $output ); $this->display_element( $child, $children_elements, $max_depth, $depth + 1, $args, $output );
$i = -1; $i = -1;
} }
} }
@ -440,15 +440,13 @@ class Walker {
if ( isset($newlevel) && $newlevel ){ if ( isset($newlevel) && $newlevel ){
//end the child delimiter //end the child delimiter
$cb_args = array_merge( array($output, $depth), $args); $cb_args = array_merge( array(&$output, $depth), $args);
$output = call_user_func_array(array(&$this, 'end_lvl'), $cb_args); call_user_func_array(array(&$this, 'end_lvl'), $cb_args);
} }
//end this element //end this element
$cb_args = array_merge( array($output, $element, $depth), $args); $cb_args = array_merge( array(&$output, $element, $depth), $args);
$output = call_user_func_array(array(&$this, 'end_el'), $cb_args); call_user_func_array(array(&$this, 'end_el'), $cb_args);
return $output;
} }
/* /*
@ -476,7 +474,7 @@ class Walker {
if ( -1 == $max_depth ) { if ( -1 == $max_depth ) {
$empty_array = array(); $empty_array = array();
foreach ( $elements as $e ) foreach ( $elements as $e )
$output = $this->display_element( $e, $empty_array, 1, 0, $args, $output ); $this->display_element( $e, $empty_array, 1, 0, $args, $output );
return $output; return $output;
} }
@ -512,7 +510,7 @@ class Walker {
} }
foreach ( $top_level_elements as $e ) foreach ( $top_level_elements as $e )
$output = $this->display_element( $e, $children_elements, $max_depth, 0, $args, $output ); $this->display_element( $e, $children_elements, $max_depth, 0, $args, $output );
/* /*
* if we are displaying all levels, and remaining children_elements is not empty, * if we are displaying all levels, and remaining children_elements is not empty,
@ -521,7 +519,7 @@ class Walker {
if ( ( $max_depth == 0 ) && sizeof( $children_elements ) > 0 ) { if ( ( $max_depth == 0 ) && sizeof( $children_elements ) > 0 ) {
$empty_array = array(); $empty_array = array();
foreach ( $children_elements as $orphan_e ) foreach ( $children_elements as $orphan_e )
$output = $this->display_element( $orphan_e, $empty_array, 1, 0, $args, $output ); $this->display_element( $orphan_e, $empty_array, 1, 0, $args, $output );
} }
return $output; return $output;
} }
@ -531,19 +529,17 @@ class Walker_Page extends Walker {
var $tree_type = 'page'; var $tree_type = 'page';
var $db_fields = array ('parent' => 'post_parent', 'id' => 'ID'); //TODO: decouple this var $db_fields = array ('parent' => 'post_parent', 'id' => 'ID'); //TODO: decouple this
function start_lvl($output, $depth) { function start_lvl(&$output, $depth) {
$indent = str_repeat("\t", $depth); $indent = str_repeat("\t", $depth);
$output .= "\n$indent<ul>\n"; $output .= "\n$indent<ul>\n";
return $output;
} }
function end_lvl($output, $depth) { function end_lvl(&$output, $depth) {
$indent = str_repeat("\t", $depth); $indent = str_repeat("\t", $depth);
$output .= "$indent</ul>\n"; $output .= "$indent</ul>\n";
return $output;
} }
function start_el($output, $page, $depth, $current_page, $args) { function start_el(&$output, $page, $depth, $current_page, $args) {
if ( $depth ) if ( $depth )
$indent = str_repeat("\t", $depth); $indent = str_repeat("\t", $depth);
else else
@ -571,14 +567,10 @@ class Walker_Page extends Walker {
$output .= " " . mysql2date($date_format, $time); $output .= " " . mysql2date($date_format, $time);
} }
return $output;
} }
function end_el($output, $page, $depth) { function end_el(&$output, $page, $depth) {
$output .= "</li>\n"; $output .= "</li>\n";
return $output;
} }
} }
@ -587,18 +579,16 @@ class Walker_PageDropdown extends Walker {
var $tree_type = 'page'; var $tree_type = 'page';
var $db_fields = array ('parent' => 'post_parent', 'id' => 'ID'); //TODO: decouple this var $db_fields = array ('parent' => 'post_parent', 'id' => 'ID'); //TODO: decouple this
function start_el($output, $page, $depth, $args) { function start_el(&$output, $page, $depth, $args) {
$pad = str_repeat('&nbsp;', $depth * 3); $pad = str_repeat('&nbsp;', $depth * 3);
$output .= "\t<option value=\"$page->ID\""; $output .= "\t<option value=\"$page->ID\"";
if ( $page->ID == $args['selected'] ) if ( $page->ID == $args['selected'] )
$output .= ' selected="selected"'; $output .= ' selected="selected"';
$output .= '>'; $output .= '>';
$title = wp_specialchars($page->post_title); $title = wp_specialchars($page->post_title);
$output .= "$pad$title"; $output .= "$pad$title";
$output .= "</option>\n"; $output .= "</option>\n";
return $output;
} }
} }
@ -606,25 +596,23 @@ class Walker_Category extends Walker {
var $tree_type = 'category'; var $tree_type = 'category';
var $db_fields = array ('parent' => 'parent', 'id' => 'term_id'); //TODO: decouple this var $db_fields = array ('parent' => 'parent', 'id' => 'term_id'); //TODO: decouple this
function start_lvl($output, $depth, $args) { function start_lvl(&$output, $depth, $args) {
if ( 'list' != $args['style'] ) if ( 'list' != $args['style'] )
return $output; return;
$indent = str_repeat("\t", $depth); $indent = str_repeat("\t", $depth);
$output .= "$indent<ul class='children'>\n"; $output .= "$indent<ul class='children'>\n";
return $output;
} }
function end_lvl($output, $depth, $args) { function end_lvl(&$output, $depth, $args) {
if ( 'list' != $args['style'] ) if ( 'list' != $args['style'] )
return $output; return;
$indent = str_repeat("\t", $depth); $indent = str_repeat("\t", $depth);
$output .= "$indent</ul>\n"; $output .= "$indent</ul>\n";
return $output;
} }
function start_el($output, $category, $depth, $args) { function start_el(&$output, $category, $depth, $args) {
extract($args); extract($args);
$cat_name = attribute_escape( $category->name); $cat_name = attribute_escape( $category->name);
@ -687,16 +675,13 @@ class Walker_Category extends Walker {
} else { } else {
$output .= "\t$link<br />\n"; $output .= "\t$link<br />\n";
} }
return $output;
} }
function end_el($output, $page, $depth, $args) { function end_el(&$output, $page, $depth, $args) {
if ( 'list' != $args['style'] ) if ( 'list' != $args['style'] )
return $output; return;
$output .= "</li>\n"; $output .= "</li>\n";
return $output;
} }
} }
@ -705,7 +690,7 @@ class Walker_CategoryDropdown extends Walker {
var $tree_type = 'category'; var $tree_type = 'category';
var $db_fields = array ('parent' => 'parent', 'id' => 'term_id'); //TODO: decouple this var $db_fields = array ('parent' => 'parent', 'id' => 'term_id'); //TODO: decouple this
function start_el($output, $category, $depth, $args) { function start_el(&$output, $category, $depth, $args) {
$pad = str_repeat('&nbsp;', $depth * 3); $pad = str_repeat('&nbsp;', $depth * 3);
$cat_name = apply_filters('list_cats', $category->name, $category); $cat_name = apply_filters('list_cats', $category->name, $category);
@ -721,8 +706,6 @@ class Walker_CategoryDropdown extends Walker {
$output .= '&nbsp;&nbsp;' . gmdate($format, $category->last_update_timestamp); $output .= '&nbsp;&nbsp;' . gmdate($format, $category->last_update_timestamp);
} }
$output .= "</option>\n"; $output .= "</option>\n";
return $output;
} }
} }