web/wp-admin/includes/template.php
branchwordpress
changeset 109 03b0d1493584
child 132 4d4862461b8d
equal deleted inserted replaced
-1:000000000000 109:03b0d1493584
       
     1 <?php
       
     2 /**
       
     3  * Template WordPress Administration API.
       
     4  *
       
     5  * A Big Mess. Also some neat functions that are nicely written.
       
     6  *
       
     7  * @package WordPress
       
     8  * @subpackage Administration
       
     9  */
       
    10 
       
    11 // Ugly recursive category stuff.
       
    12 /**
       
    13  * {@internal Missing Short Description}}
       
    14  *
       
    15  * @since unknown
       
    16  *
       
    17  * @param unknown_type $parent
       
    18  * @param unknown_type $level
       
    19  * @param unknown_type $categories
       
    20  * @param unknown_type $page
       
    21  * @param unknown_type $per_page
       
    22  */
       
    23 function cat_rows( $parent = 0, $level = 0, $categories = 0, $page = 1, $per_page = 20 ) {
       
    24 
       
    25 	$count = 0;
       
    26 
       
    27 	if ( empty($categories) ) {
       
    28 
       
    29 		$args = array('hide_empty' => 0);
       
    30 		if ( !empty($_GET['s']) )
       
    31 			$args['search'] = $_GET['s'];
       
    32 
       
    33 		$categories = get_categories( $args );
       
    34 
       
    35 		if ( empty($categories) )
       
    36 			return false;
       
    37 	}
       
    38 
       
    39 	$children = _get_term_hierarchy('category');
       
    40 
       
    41 	_cat_rows( $parent, $level, $categories, $children, $page, $per_page, $count );
       
    42 
       
    43 }
       
    44 
       
    45 /**
       
    46  * {@internal Missing Short Description}}
       
    47  *
       
    48  * @since unknown
       
    49  *
       
    50  * @param unknown_type $categories
       
    51  * @param unknown_type $count
       
    52  * @param unknown_type $parent
       
    53  * @param unknown_type $level
       
    54  * @param unknown_type $page
       
    55  * @param unknown_type $per_page
       
    56  * @return unknown
       
    57  */
       
    58 function _cat_rows( $parent = 0, $level = 0, $categories, &$children, $page = 1, $per_page = 20, &$count ) {
       
    59 
       
    60 	$start = ($page - 1) * $per_page;
       
    61 	$end = $start + $per_page;
       
    62 	ob_start();
       
    63 
       
    64 	foreach ( $categories as $key => $category ) {
       
    65 		if ( $count >= $end )
       
    66 			break;
       
    67 
       
    68 		if ( $category->parent != $parent && empty($_GET['s']) )
       
    69 			continue;
       
    70 
       
    71 		// If the page starts in a subtree, print the parents.
       
    72 		if ( $count == $start && $category->parent > 0 ) {
       
    73 
       
    74 			$my_parents = array();
       
    75 			$p = $category->parent;
       
    76 			while ( $p ) {
       
    77 				$my_parent = get_category( $p );
       
    78 				$my_parents[] = $my_parent;
       
    79 				if ( $my_parent->parent == 0 )
       
    80 					break;
       
    81 				$p = $my_parent->parent;
       
    82 			}
       
    83 
       
    84 			$num_parents = count($my_parents);
       
    85 			while( $my_parent = array_pop($my_parents) ) {
       
    86 				echo "\t" . _cat_row( $my_parent, $level - $num_parents );
       
    87 				$num_parents--;
       
    88 			}
       
    89 		}
       
    90 
       
    91 		if ( $count >= $start )
       
    92 			echo "\t" . _cat_row( $category, $level );
       
    93 
       
    94 		unset( $categories[ $key ] );
       
    95 
       
    96 		$count++;
       
    97 
       
    98 		if ( isset($children[$category->term_id]) )
       
    99 			_cat_rows( $category->term_id, $level + 1, $categories, $children, $page, $per_page, $count );
       
   100 	}
       
   101 
       
   102 	$output = ob_get_contents();
       
   103 	ob_end_clean();
       
   104 
       
   105 	echo $output;
       
   106 }
       
   107 
       
   108 /**
       
   109  * {@internal Missing Short Description}}
       
   110  *
       
   111  * @since unknown
       
   112  *
       
   113  * @param unknown_type $category
       
   114  * @param unknown_type $level
       
   115  * @param unknown_type $name_override
       
   116  * @return unknown
       
   117  */
       
   118 function _cat_row( $category, $level, $name_override = false ) {
       
   119 	static $row_class = '';
       
   120 
       
   121 	$category = get_category( $category, OBJECT, 'display' );
       
   122 
       
   123 	$default_cat_id = (int) get_option( 'default_category' );
       
   124 	$pad = str_repeat( '&#8212; ', max(0, $level) );
       
   125 	$name = ( $name_override ? $name_override : $pad . ' ' . $category->name );
       
   126 	$edit_link = "categories.php?action=edit&amp;cat_ID=$category->term_id";
       
   127 	if ( current_user_can( 'manage_categories' ) ) {
       
   128 		$edit = "<a class='row-title' href='$edit_link' title='" . esc_attr(sprintf(__('Edit &#8220;%s&#8221;'), $category->name)) . "'>" . esc_attr( $name ) . '</a><br />';
       
   129 		$actions = array();
       
   130 		$actions['edit'] = '<a href="' . $edit_link . '">' . __('Edit') . '</a>';
       
   131 		$actions['inline hide-if-no-js'] = '<a href="#" class="editinline">' . __('Quick&nbsp;Edit') . '</a>';
       
   132 		if ( $default_cat_id != $category->term_id )
       
   133 			$actions['delete'] = "<a class='delete:the-list:cat-$category->term_id submitdelete' href='" . wp_nonce_url("categories.php?action=delete&amp;cat_ID=$category->term_id", 'delete-category_' . $category->term_id) . "'>" . __('Delete') . "</a>";
       
   134 		$actions = apply_filters('cat_row_actions', $actions, $category);
       
   135 		$action_count = count($actions);
       
   136 		$i = 0;
       
   137 		$edit .= '<div class="row-actions">';
       
   138 		foreach ( $actions as $action => $link ) {
       
   139 			++$i;
       
   140 			( $i == $action_count ) ? $sep = '' : $sep = ' | ';
       
   141 			$edit .= "<span class='$action'>$link$sep</span>";
       
   142 		}
       
   143 		$edit .= '</div>';
       
   144 	} else {
       
   145 		$edit = $name;
       
   146 	}
       
   147 
       
   148 	$row_class = 'alternate' == $row_class ? '' : 'alternate';
       
   149 	$qe_data = get_category_to_edit($category->term_id);
       
   150 
       
   151 	$category->count = number_format_i18n( $category->count );
       
   152 	$posts_count = ( $category->count > 0 ) ? "<a href='edit.php?cat=$category->term_id'>$category->count</a>" : $category->count;
       
   153 	$output = "<tr id='cat-$category->term_id' class='iedit $row_class'>";
       
   154 
       
   155 	$columns = get_column_headers('categories');
       
   156 	$hidden = get_hidden_columns('categories');
       
   157 	foreach ( $columns as $column_name => $column_display_name ) {
       
   158 		$class = "class=\"$column_name column-$column_name\"";
       
   159 
       
   160 		$style = '';
       
   161 		if ( in_array($column_name, $hidden) )
       
   162 			$style = ' style="display:none;"';
       
   163 
       
   164 		$attributes = "$class$style";
       
   165 
       
   166 		switch ($column_name) {
       
   167 			case 'cb':
       
   168 				$output .= "<th scope='row' class='check-column'>";
       
   169 				if ( $default_cat_id != $category->term_id ) {
       
   170 					$output .= "<input type='checkbox' name='delete[]' value='$category->term_id' />";
       
   171 				} else {
       
   172 					$output .= "&nbsp;";
       
   173 				}
       
   174 				$output .= '</th>';
       
   175 				break;
       
   176 			case 'name':
       
   177 				$output .= "<td $attributes>$edit";
       
   178 				$output .= '<div class="hidden" id="inline_' . $qe_data->term_id . '">';
       
   179 				$output .= '<div class="name">' . $qe_data->name . '</div>';
       
   180 				$output .= '<div class="slug">' . $qe_data->slug . '</div>';
       
   181 				$output .= '<div class="cat_parent">' . $qe_data->parent . '</div></div></td>';
       
   182 				break;
       
   183 			case 'description':
       
   184 				$output .= "<td $attributes>$category->description</td>";
       
   185 				break;
       
   186 			case 'slug':
       
   187 				$output .= "<td $attributes>$category->slug</td>";
       
   188 				break;
       
   189 			case 'posts':
       
   190 				$attributes = 'class="posts column-posts num"' . $style;
       
   191 				$output .= "<td $attributes>$posts_count</td>\n";
       
   192 				break;
       
   193 			default:
       
   194 				$output .= "<td $attributes>";
       
   195 				$output .= apply_filters('manage_categories_custom_column', '', $column_name, $category->term_id);
       
   196 				$output .= "</td>";
       
   197 		}
       
   198 	}
       
   199 	$output .= '</tr>';
       
   200 
       
   201 	return $output;
       
   202 }
       
   203 
       
   204 /**
       
   205  * {@internal Missing Short Description}}
       
   206  *
       
   207  * @since 2.7
       
   208  *
       
   209  * Outputs the HTML for the hidden table rows used in Categories, Link Caregories and Tags quick edit.
       
   210  *
       
   211  * @param string $type "tag", "category" or "link-category"
       
   212  * @return
       
   213  */
       
   214 function inline_edit_term_row($type) {
       
   215 
       
   216 	if ( ! current_user_can( 'manage_categories' ) )
       
   217 		return;
       
   218 
       
   219 	$is_tag = $type == 'edit-tags';
       
   220 	$columns = get_column_headers($type);
       
   221 	$hidden = array_intersect( array_keys( $columns ), array_filter( get_hidden_columns($type) ) );
       
   222 	$col_count = count($columns) - count($hidden);
       
   223 	?>
       
   224 
       
   225 <form method="get" action=""><table style="display: none"><tbody id="inlineedit">
       
   226 	<tr id="inline-edit" class="inline-edit-row" style="display: none"><td colspan="<?php echo $col_count; ?>">
       
   227 
       
   228 		<fieldset><div class="inline-edit-col">
       
   229 			<h4><?php _e( 'Quick Edit' ); ?></h4>
       
   230 
       
   231 			<label>
       
   232 				<span class="title"><?php _e( 'Name' ); ?></span>
       
   233 				<span class="input-text-wrap"><input type="text" name="name" class="ptitle" value="" /></span>
       
   234 			</label>
       
   235 
       
   236 			<label>
       
   237 				<span class="title"><?php _e( 'Slug' ); ?></span>
       
   238 				<span class="input-text-wrap"><input type="text" name="slug" class="ptitle" value="" /></span>
       
   239 			</label>
       
   240 
       
   241 <?php if ( 'category' == $type ) : ?>
       
   242 
       
   243 			<label>
       
   244 				<span class="title"><?php _e( 'Parent' ); ?></span>
       
   245 				<?php wp_dropdown_categories(array('hide_empty' => 0, 'name' => 'parent', 'orderby' => 'name', 'hierarchical' => 1, 'show_option_none' => __('None'))); ?>
       
   246 			</label>
       
   247 
       
   248 <?php endif; // $type ?>
       
   249 
       
   250 		</div></fieldset>
       
   251 
       
   252 <?php
       
   253 
       
   254 	$core_columns = array( 'cb' => true, 'description' => true, 'name' => true, 'slug' => true, 'posts' => true );
       
   255 
       
   256 	foreach ( $columns as $column_name => $column_display_name ) {
       
   257 		if ( isset( $core_columns[$column_name] ) )
       
   258 			continue;
       
   259 		do_action( 'quick_edit_custom_box', $column_name, $type );
       
   260 	}
       
   261 
       
   262 ?>
       
   263 
       
   264 	<p class="inline-edit-save submit">
       
   265 		<a accesskey="c" href="#inline-edit" title="<?php _e('Cancel'); ?>" class="cancel button-secondary alignleft"><?php _e('Cancel'); ?></a>
       
   266 		<?php $update_text = ( $is_tag ) ? __( 'Update Tag' ) : __( 'Update Category' ); ?>
       
   267 		<a accesskey="s" href="#inline-edit" title="<?php echo esc_attr( $update_text ); ?>" class="save button-primary alignright"><?php echo $update_text; ?></a>
       
   268 		<img class="waiting" style="display:none;" src="images/wpspin_light.gif" alt="" />
       
   269 		<span class="error" style="display:none;"></span>
       
   270 		<?php wp_nonce_field( 'taxinlineeditnonce', '_inline_edit', false ); ?>
       
   271 		<br class="clear" />
       
   272 	</p>
       
   273 	</td></tr>
       
   274 	</tbody></table></form>
       
   275 <?php
       
   276 }
       
   277 
       
   278 /**
       
   279  * {@internal Missing Short Description}}
       
   280  *
       
   281  * @since unknown
       
   282  *
       
   283  * @param unknown_type $category
       
   284  * @param unknown_type $name_override
       
   285  * @return unknown
       
   286  */
       
   287 function link_cat_row( $category, $name_override = false ) {
       
   288 	static $row_class = '';
       
   289 
       
   290 	if ( !$category = get_term( $category, 'link_category', OBJECT, 'display' ) )
       
   291 		return false;
       
   292 	if ( is_wp_error( $category ) )
       
   293 		return $category;
       
   294 
       
   295 	$default_cat_id = (int) get_option( 'default_link_category' );
       
   296 	$name = ( $name_override ? $name_override : $category->name );
       
   297 	$edit_link = "link-category.php?action=edit&amp;cat_ID=$category->term_id";
       
   298 	if ( current_user_can( 'manage_categories' ) ) {
       
   299 		$edit = "<a class='row-title' href='$edit_link' title='" . esc_attr(sprintf(__('Edit &#8220;%s&#8221;'), $category->name)) . "'>$name</a><br />";
       
   300 		$actions = array();
       
   301 		$actions['edit'] = '<a href="' . $edit_link . '">' . __('Edit') . '</a>';
       
   302 		$actions['inline hide-if-no-js'] = '<a href="#" class="editinline">' . __('Quick&nbsp;Edit') . '</a>';
       
   303 		if ( $default_cat_id != $category->term_id )
       
   304 			$actions['delete'] = "<a class='delete:the-list:link-cat-$category->term_id submitdelete' href='" . wp_nonce_url("link-category.php?action=delete&amp;cat_ID=$category->term_id", 'delete-link-category_' . $category->term_id) . "'>" . __('Delete') . "</a>";
       
   305 		$actions = apply_filters('link_cat_row_actions', $actions, $category);
       
   306 		$action_count = count($actions);
       
   307 		$i = 0;
       
   308 		$edit .= '<div class="row-actions">';
       
   309 		foreach ( $actions as $action => $link ) {
       
   310 			++$i;
       
   311 			( $i == $action_count ) ? $sep = '' : $sep = ' | ';
       
   312 			$edit .= "<span class='$action'>$link$sep</span>";
       
   313 		}
       
   314 		$edit .= '</div>';
       
   315 	} else {
       
   316 		$edit = $name;
       
   317 	}
       
   318 
       
   319 	$row_class = 'alternate' == $row_class ? '' : 'alternate';
       
   320 	$qe_data = get_term_to_edit($category->term_id, 'link_category');
       
   321 
       
   322 	$category->count = number_format_i18n( $category->count );
       
   323 	$count = ( $category->count > 0 ) ? "<a href='link-manager.php?cat_id=$category->term_id'>$category->count</a>" : $category->count;
       
   324 	$output = "<tr id='link-cat-$category->term_id' class='iedit $row_class'>";
       
   325 	$columns = get_column_headers('edit-link-categories');
       
   326 	$hidden = get_hidden_columns('edit-link-categories');
       
   327 	foreach ( $columns as $column_name => $column_display_name ) {
       
   328 		$class = "class=\"$column_name column-$column_name\"";
       
   329 
       
   330 		$style = '';
       
   331 		if ( in_array($column_name, $hidden) )
       
   332 			$style = ' style="display:none;"';
       
   333 
       
   334 		$attributes = "$class$style";
       
   335 
       
   336 		switch ($column_name) {
       
   337 			case 'cb':
       
   338 				$output .= "<th scope='row' class='check-column'>";
       
   339 				if ( absint( get_option( 'default_link_category' ) ) != $category->term_id ) {
       
   340 					$output .= "<input type='checkbox' name='delete[]' value='$category->term_id' />";
       
   341 				} else {
       
   342 					$output .= "&nbsp;";
       
   343 				}
       
   344 				$output .= "</th>";
       
   345 				break;
       
   346 			case 'name':
       
   347 				$output .= "<td $attributes>$edit";
       
   348 				$output .= '<div class="hidden" id="inline_' . $qe_data->term_id . '">';
       
   349 				$output .= '<div class="name">' . $qe_data->name . '</div>';
       
   350 				$output .= '<div class="slug">' . $qe_data->slug . '</div>';
       
   351 				$output .= '<div class="cat_parent">' . $qe_data->parent . '</div></div></td>';
       
   352 				break;
       
   353 			case 'description':
       
   354 				$output .= "<td $attributes>$category->description</td>";
       
   355 				break;
       
   356 			case 'slug':
       
   357 				$output .= "<td $attributes>$category->slug</td>";
       
   358 				break;
       
   359 			case 'links':
       
   360 				$attributes = 'class="links column-links num"' . $style;
       
   361 				$output .= "<td $attributes>$count</td>";
       
   362 				break;
       
   363 			default:
       
   364 				$output .= "<td $attributes>";
       
   365 				$output .= apply_filters('manage_link_categories_custom_column', '', $column_name, $category->term_id);
       
   366 				$output .= "</td>";
       
   367 		}
       
   368 	}
       
   369 	$output .= '</tr>';
       
   370 
       
   371 	return $output;
       
   372 }
       
   373 
       
   374 /**
       
   375  * Outputs the html checked attribute.
       
   376  *
       
   377  * Compares the first two arguments and if identical marks as checked
       
   378  *
       
   379  * @since 2.8
       
   380  *
       
   381  * @param any $checked One of the values to compare
       
   382  * @param any $current (true) The other value to compare if not just true
       
   383  * @param bool $echo Whether or not to echo or just return the string
       
   384  */
       
   385 function checked( $checked, $current = true, $echo = true) {
       
   386 	return __checked_selected_helper( $checked, $current, $echo, 'checked' );
       
   387 }
       
   388 
       
   389 /**
       
   390  * Outputs the html selected attribute.
       
   391  *
       
   392  * Compares the first two arguments and if identical marks as selected
       
   393  *
       
   394  * @since 2.8
       
   395  *
       
   396  * @param any selected One of the values to compare
       
   397  * @param any $current (true) The other value to compare if not just true
       
   398  * @param bool $echo Whether or not to echo or just return the string
       
   399  */
       
   400 function selected( $selected, $current = true, $echo = true) {
       
   401 	return __checked_selected_helper( $selected, $current, $echo, 'selected' );
       
   402 }
       
   403 
       
   404 /**
       
   405  * Private helper function for checked and selected.
       
   406  *
       
   407  * Compares the first two arguments and if identical marks as $type
       
   408  *
       
   409  * @since 2.8
       
   410  * @access private
       
   411  *
       
   412  * @param any $helper One of the values to compare
       
   413  * @param any $current (true) The other value to compare if not just true
       
   414  * @param bool $echo Whether or not to echo or just return the string
       
   415  * @param string $type The type of checked|selected we are doing.
       
   416  */
       
   417 function __checked_selected_helper( $helper, $current, $echo, $type) {
       
   418 	if ( $helper == $current)
       
   419 		$result = " $type='$type'";
       
   420 	else
       
   421 		$result = '';
       
   422 
       
   423 	if ($echo)
       
   424 		echo $result;
       
   425 
       
   426 	return $result;
       
   427 }
       
   428 
       
   429 //
       
   430 // Category Checklists
       
   431 //
       
   432 
       
   433 /**
       
   434  * {@internal Missing Short Description}}
       
   435  *
       
   436  * @since unknown
       
   437  * @deprecated Use {@link wp_link_category_checklist()}
       
   438  * @see wp_link_category_checklist()
       
   439  *
       
   440  * @param unknown_type $default
       
   441  * @param unknown_type $parent
       
   442  * @param unknown_type $popular_ids
       
   443  */
       
   444 function dropdown_categories( $default = 0, $parent = 0, $popular_ids = array() ) {
       
   445 	global $post_ID;
       
   446 	wp_category_checklist($post_ID);
       
   447 }
       
   448 
       
   449 /**
       
   450  * {@internal Missing Short Description}}
       
   451  *
       
   452  * @since unknown
       
   453  */
       
   454 class Walker_Category_Checklist extends Walker {
       
   455 	var $tree_type = 'category';
       
   456 	var $db_fields = array ('parent' => 'parent', 'id' => 'term_id'); //TODO: decouple this
       
   457 
       
   458 	function start_lvl(&$output, $depth, $args) {
       
   459 		$indent = str_repeat("\t", $depth);
       
   460 		$output .= "$indent<ul class='children'>\n";
       
   461 	}
       
   462 
       
   463 	function end_lvl(&$output, $depth, $args) {
       
   464 		$indent = str_repeat("\t", $depth);
       
   465 		$output .= "$indent</ul>\n";
       
   466 	}
       
   467 
       
   468 	function start_el(&$output, $category, $depth, $args) {
       
   469 		extract($args);
       
   470 
       
   471 		$class = in_array( $category->term_id, $popular_cats ) ? ' class="popular-category"' : '';
       
   472 		$output .= "\n<li id='category-$category->term_id'$class>" . '<label 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"' : "" ) . '/> ' . esc_html( apply_filters('the_category', $category->name )) . '</label>';
       
   473 	}
       
   474 
       
   475 	function end_el(&$output, $category, $depth, $args) {
       
   476 		$output .= "</li>\n";
       
   477 	}
       
   478 }
       
   479 
       
   480 /**
       
   481  * {@internal Missing Short Description}}
       
   482  *
       
   483  * @since unknown
       
   484  *
       
   485  * @param unknown_type $post_id
       
   486  * @param unknown_type $descendants_and_self
       
   487  * @param unknown_type $selected_cats
       
   488  * @param unknown_type $popular_cats
       
   489  */
       
   490 function wp_category_checklist( $post_id = 0, $descendants_and_self = 0, $selected_cats = false, $popular_cats = false, $walker = null ) {
       
   491 	if ( empty($walker) || !is_a($walker, 'Walker') )
       
   492 		$walker = new Walker_Category_Checklist;
       
   493 
       
   494 	$descendants_and_self = (int) $descendants_and_self;
       
   495 
       
   496 	$args = array();
       
   497 
       
   498 	if ( is_array( $selected_cats ) )
       
   499 		$args['selected_cats'] = $selected_cats;
       
   500 	elseif ( $post_id )
       
   501 		$args['selected_cats'] = wp_get_post_categories($post_id);
       
   502 	else
       
   503 		$args['selected_cats'] = array();
       
   504 
       
   505 	if ( is_array( $popular_cats ) )
       
   506 		$args['popular_cats'] = $popular_cats;
       
   507 	else
       
   508 		$args['popular_cats'] = get_terms( 'category', array( 'fields' => 'ids', 'orderby' => 'count', 'order' => 'DESC', 'number' => 10, 'hierarchical' => false ) );
       
   509 
       
   510 	if ( $descendants_and_self ) {
       
   511 		$categories = get_categories( "child_of=$descendants_and_self&hierarchical=0&hide_empty=0" );
       
   512 		$self = get_category( $descendants_and_self );
       
   513 		array_unshift( $categories, $self );
       
   514 	} else {
       
   515 		$categories = get_categories('get=all');
       
   516 	}
       
   517 
       
   518 	// Post process $categories rather than adding an exclude to the get_terms() query to keep the query the same across all posts (for any query cache)
       
   519 	$checked_categories = array();
       
   520 	$keys = array_keys( $categories );
       
   521 
       
   522 	foreach( $keys as $k ) {
       
   523 		if ( in_array( $categories[$k]->term_id, $args['selected_cats'] ) ) {
       
   524 			$checked_categories[] = $categories[$k];
       
   525 			unset( $categories[$k] );
       
   526 		}
       
   527 	}
       
   528 
       
   529 	// Put checked cats on top
       
   530 	echo call_user_func_array(array(&$walker, 'walk'), array($checked_categories, 0, $args));
       
   531 	// Then the rest of them
       
   532 	echo call_user_func_array(array(&$walker, 'walk'), array($categories, 0, $args));
       
   533 }
       
   534 
       
   535 /**
       
   536  * {@internal Missing Short Description}}
       
   537  *
       
   538  * @since unknown
       
   539  *
       
   540  * @param unknown_type $taxonomy
       
   541  * @param unknown_type $default
       
   542  * @param unknown_type $number
       
   543  * @param unknown_type $echo
       
   544  * @return unknown
       
   545  */
       
   546 function wp_popular_terms_checklist( $taxonomy, $default = 0, $number = 10, $echo = true ) {
       
   547 	global $post_ID;
       
   548 	if ( $post_ID )
       
   549 		$checked_categories = wp_get_post_categories($post_ID);
       
   550 	else
       
   551 		$checked_categories = array();
       
   552 	$categories = get_terms( $taxonomy, array( 'orderby' => 'count', 'order' => 'DESC', 'number' => $number, 'hierarchical' => false ) );
       
   553 
       
   554 	$popular_ids = array();
       
   555 	foreach ( (array) $categories as $category ) {
       
   556 		$popular_ids[] = $category->term_id;
       
   557 		if ( !$echo ) // hack for AJAX use
       
   558 			continue;
       
   559 		$id = "popular-category-$category->term_id";
       
   560 		?>
       
   561 
       
   562 		<li id="<?php echo $id; ?>" class="popular-category">
       
   563 			<label class="selectit">
       
   564 			<input id="in-<?php echo $id; ?>" type="checkbox" value="<?php echo (int) $category->term_id; ?>" />
       
   565 				<?php echo esc_html( apply_filters( 'the_category', $category->name ) ); ?>
       
   566 			</label>
       
   567 		</li>
       
   568 
       
   569 		<?php
       
   570 	}
       
   571 	return $popular_ids;
       
   572 }
       
   573 
       
   574 /**
       
   575  * {@internal Missing Short Description}}
       
   576  *
       
   577  * @since unknown
       
   578  * @deprecated Use {@link wp_link_category_checklist()}
       
   579  * @see wp_link_category_checklist()
       
   580  *
       
   581  * @param unknown_type $default
       
   582  */
       
   583 function dropdown_link_categories( $default = 0 ) {
       
   584 	global $link_id;
       
   585 
       
   586 	wp_link_category_checklist($link_id);
       
   587 }
       
   588 
       
   589 /**
       
   590  * {@internal Missing Short Description}}
       
   591  *
       
   592  * @since unknown
       
   593  *
       
   594  * @param unknown_type $link_id
       
   595  */
       
   596 function wp_link_category_checklist( $link_id = 0 ) {
       
   597 	$default = 1;
       
   598 
       
   599 	if ( $link_id ) {
       
   600 		$checked_categories = wp_get_link_cats($link_id);
       
   601 
       
   602 		if ( count( $checked_categories ) == 0 ) {
       
   603 			// No selected categories, strange
       
   604 			$checked_categories[] = $default;
       
   605 		}
       
   606 	} else {
       
   607 		$checked_categories[] = $default;
       
   608 	}
       
   609 
       
   610 	$categories = get_terms('link_category', 'orderby=count&hide_empty=0');
       
   611 
       
   612 	if ( empty($categories) )
       
   613 		return;
       
   614 
       
   615 	foreach ( $categories as $category ) {
       
   616 		$cat_id = $category->term_id;
       
   617 		$name = esc_html( apply_filters('the_category', $category->name));
       
   618 		$checked = in_array( $cat_id, $checked_categories );
       
   619 		echo '<li id="link-category-', $cat_id, '"><label for="in-link-category-', $cat_id, '" class="selectit"><input value="', $cat_id, '" type="checkbox" name="link_category[]" id="in-link-category-', $cat_id, '"', ($checked ? ' checked="checked"' : "" ), '/> ', $name, "</label></li>";
       
   620 	}
       
   621 }
       
   622 
       
   623 // Tag stuff
       
   624 
       
   625 // Returns a single tag row (see tag_rows below)
       
   626 // Note: this is also used in admin-ajax.php!
       
   627 /**
       
   628  * {@internal Missing Short Description}}
       
   629  *
       
   630  * @since unknown
       
   631  *
       
   632  * @param unknown_type $tag
       
   633  * @param unknown_type $class
       
   634  * @return unknown
       
   635  */
       
   636 function _tag_row( $tag, $class = '', $taxonomy = 'post_tag' ) {
       
   637 		$count = number_format_i18n( $tag->count );
       
   638 		$tagsel = ($taxonomy == 'post_tag' ? 'tag' : $taxonomy);
       
   639 		$count = ( $count > 0 ) ? "<a href='edit.php?$tagsel=$tag->slug'>$count</a>" : $count;
       
   640 
       
   641 		$name = apply_filters( 'term_name', $tag->name );
       
   642 		$qe_data = get_term($tag->term_id, $taxonomy, object, 'edit');
       
   643 		$edit_link = "edit-tags.php?action=edit&amp;taxonomy=$taxonomy&amp;tag_ID=$tag->term_id";
       
   644 		$out = '';
       
   645 		$out .= '<tr id="tag-' . $tag->term_id . '"' . $class . '>';
       
   646 		$columns = get_column_headers('edit-tags');
       
   647 		$hidden = get_hidden_columns('edit-tags');
       
   648 		foreach ( $columns as $column_name => $column_display_name ) {
       
   649 			$class = "class=\"$column_name column-$column_name\"";
       
   650 
       
   651 			$style = '';
       
   652 			if ( in_array($column_name, $hidden) )
       
   653 				$style = ' style="display:none;"';
       
   654 
       
   655 			$attributes = "$class$style";
       
   656 
       
   657 			switch ($column_name) {
       
   658 				case 'cb':
       
   659 					$out .= '<th scope="row" class="check-column"> <input type="checkbox" name="delete_tags[]" value="' . $tag->term_id . '" /></th>';
       
   660 					break;
       
   661 				case 'name':
       
   662 					$out .= '<td ' . $attributes . '><strong><a class="row-title" href="' . $edit_link . '" title="' . esc_attr(sprintf(__('Edit &#8220;%s&#8221;'), $name)) . '">' . $name . '</a></strong><br />';
       
   663 					$actions = array();
       
   664 					$actions['edit'] = '<a href="' . $edit_link . '">' . __('Edit') . '</a>';
       
   665 					$actions['inline hide-if-no-js'] = '<a href="#" class="editinline">' . __('Quick&nbsp;Edit') . '</a>';
       
   666 					$actions['delete'] = "<a class='delete:the-list:tag-$tag->term_id submitdelete' href='" . wp_nonce_url("edit-tags.php?action=delete&amp;taxonomy=$taxonomy&amp;tag_ID=$tag->term_id", 'delete-tag_' . $tag->term_id) . "'>" . __('Delete') . "</a>";
       
   667 					$actions = apply_filters('tag_row_actions', $actions, $tag);
       
   668 					$action_count = count($actions);
       
   669 					$i = 0;
       
   670 					$out .= '<div class="row-actions">';
       
   671 					foreach ( $actions as $action => $link ) {
       
   672 						++$i;
       
   673 						( $i == $action_count ) ? $sep = '' : $sep = ' | ';
       
   674 						$out .= "<span class='$action'>$link$sep</span>";
       
   675 					}
       
   676 					$out .= '</div>';
       
   677 					$out .= '<div class="hidden" id="inline_' . $qe_data->term_id . '">';
       
   678 					$out .= '<div class="name">' . $qe_data->name . '</div>';
       
   679 					$out .= '<div class="slug">' . $qe_data->slug . '</div></div></td>';
       
   680 					break;
       
   681 				case 'description':
       
   682 					$out .= "<td $attributes>$tag->description</td>";
       
   683 					break;
       
   684 				case 'slug':
       
   685 					$out .= "<td $attributes>$tag->slug</td>";
       
   686 					break;
       
   687 				case 'posts':
       
   688 					$attributes = 'class="posts column-posts num"' . $style;
       
   689 					$out .= "<td $attributes>$count</td>";
       
   690 					break;
       
   691 				default:
       
   692 					$out .= "<td $attributes>";
       
   693 					$out .= apply_filters("manage_${taxonomy}_custom_column", '', $column_name, $tag->term_id);
       
   694 					$out .= "</td>";
       
   695 			}
       
   696 		}
       
   697 
       
   698 		$out .= '</tr>';
       
   699 
       
   700 		return $out;
       
   701 }
       
   702 
       
   703 // Outputs appropriate rows for the Nth page of the Tag Management screen,
       
   704 // assuming M tags displayed at a time on the page
       
   705 // Returns the number of tags displayed
       
   706 /**
       
   707  * {@internal Missing Short Description}}
       
   708  *
       
   709  * @since unknown
       
   710  *
       
   711  * @param unknown_type $page
       
   712  * @param unknown_type $pagesize
       
   713  * @param unknown_type $searchterms
       
   714  * @return unknown
       
   715  */
       
   716 function tag_rows( $page = 1, $pagesize = 20, $searchterms = '', $taxonomy = 'post_tag' ) {
       
   717 
       
   718 	// Get a page worth of tags
       
   719 	$start = ($page - 1) * $pagesize;
       
   720 
       
   721 	$args = array('offset' => $start, 'number' => $pagesize, 'hide_empty' => 0);
       
   722 
       
   723 	if ( !empty( $searchterms ) ) {
       
   724 		$args['search'] = $searchterms;
       
   725 	}
       
   726 
       
   727 	$tags = get_terms( $taxonomy, $args );
       
   728 
       
   729 	// convert it to table rows
       
   730 	$out = '';
       
   731 	$count = 0;
       
   732 	foreach( $tags as $tag )
       
   733 		$out .= _tag_row( $tag, ++$count % 2 ? ' class="iedit alternate"' : ' class="iedit"', $taxonomy );
       
   734 
       
   735 	// filter and send to screen
       
   736 	echo $out;
       
   737 	return $count;
       
   738 }
       
   739 
       
   740 // define the columns to display, the syntax is 'internal name' => 'display name'
       
   741 /**
       
   742  * {@internal Missing Short Description}}
       
   743  *
       
   744  * @since unknown
       
   745  *
       
   746  * @return unknown
       
   747  */
       
   748 function wp_manage_posts_columns() {
       
   749 	$posts_columns = array();
       
   750 	$posts_columns['cb'] = '<input type="checkbox" />';
       
   751 	/* translators: manage posts column name */
       
   752 	$posts_columns['title'] = _x('Post', 'column name');
       
   753 	$posts_columns['author'] = __('Author');
       
   754 	$posts_columns['categories'] = __('Categories');
       
   755 	$posts_columns['tags'] = __('Tags');
       
   756 	if ( !isset($_GET['post_status']) || !in_array($_GET['post_status'], array('pending', 'draft', 'future')) )
       
   757 		$posts_columns['comments'] = '<div class="vers"><img alt="Comments" src="images/comment-grey-bubble.png" /></div>';
       
   758 	$posts_columns['date'] = __('Date');
       
   759 	$posts_columns = apply_filters('manage_posts_columns', $posts_columns);
       
   760 
       
   761 	return $posts_columns;
       
   762 }
       
   763 
       
   764 // define the columns to display, the syntax is 'internal name' => 'display name'
       
   765 /**
       
   766  * {@internal Missing Short Description}}
       
   767  *
       
   768  * @since unknown
       
   769  *
       
   770  * @return unknown
       
   771  */
       
   772 function wp_manage_media_columns() {
       
   773 	$posts_columns = array();
       
   774 	$posts_columns['cb'] = '<input type="checkbox" />';
       
   775 	$posts_columns['icon'] = '';
       
   776 	/* translators: column name */
       
   777 	$posts_columns['media'] = _x('File', 'column name');
       
   778 	$posts_columns['author'] = __('Author');
       
   779 	//$posts_columns['tags'] = _x('Tags', 'column name');
       
   780 	/* translators: column name */
       
   781 	$posts_columns['parent'] = _x('Attached to', 'column name');
       
   782 	$posts_columns['comments'] = '<div class="vers"><img alt="Comments" src="images/comment-grey-bubble.png" /></div>';
       
   783 	//$posts_columns['comments'] = __('Comments');
       
   784 	/* translators: column name */
       
   785 	$posts_columns['date'] = _x('Date', 'column name');
       
   786 	$posts_columns = apply_filters('manage_media_columns', $posts_columns);
       
   787 
       
   788 	return $posts_columns;
       
   789 }
       
   790 
       
   791 /**
       
   792  * {@internal Missing Short Description}}
       
   793  *
       
   794  * @since unknown
       
   795  *
       
   796  * @return unknown
       
   797  */
       
   798 function wp_manage_pages_columns() {
       
   799 	$posts_columns = array();
       
   800 	$posts_columns['cb'] = '<input type="checkbox" />';
       
   801 	$posts_columns['title'] = __('Title');
       
   802 	$posts_columns['author'] = __('Author');
       
   803 	$post_status = 'all';
       
   804 	if ( !empty($_GET['post_status']) )
       
   805 		$post_status = $_GET['post_status'];
       
   806 	if ( !in_array($post_status, array('pending', 'draft', 'future')) )
       
   807 		$posts_columns['comments'] = '<div class="vers"><img alt="" src="images/comment-grey-bubble.png" /></div>';
       
   808 	$posts_columns['date'] = __('Date');
       
   809 	$posts_columns = apply_filters('manage_pages_columns', $posts_columns);
       
   810 
       
   811 	return $posts_columns;
       
   812 }
       
   813 
       
   814 /**
       
   815  * {@internal Missing Short Description}}
       
   816  *
       
   817  * @since unknown
       
   818  *
       
   819  * @param unknown_type $page
       
   820  * @return unknown
       
   821  */
       
   822 function get_column_headers($page) {
       
   823 	global $_wp_column_headers;
       
   824 
       
   825 	if ( !isset($_wp_column_headers) )
       
   826 		$_wp_column_headers = array();
       
   827 
       
   828 	// Store in static to avoid running filters on each call
       
   829 	if ( isset($_wp_column_headers[$page]) )
       
   830 		return $_wp_column_headers[$page];
       
   831 
       
   832 	switch ($page) {
       
   833 		case 'edit':
       
   834 			 $_wp_column_headers[$page] = wp_manage_posts_columns();
       
   835 			 break;
       
   836 		case 'edit-pages':
       
   837 			$_wp_column_headers[$page] = wp_manage_pages_columns();
       
   838 			break;
       
   839 		case 'edit-comments':
       
   840 			$_wp_column_headers[$page] = array(
       
   841 				'cb' => '<input type="checkbox" />',
       
   842 				'author' => __('Author'),
       
   843 				/* translators: column name */
       
   844 				'comment' => _x('Comment', 'column name'),
       
   845 				//'date' => __('Submitted'),
       
   846 				'response' => __('In Response To')
       
   847 			);
       
   848 
       
   849 			break;
       
   850 		case 'link-manager':
       
   851 			$_wp_column_headers[$page] = array(
       
   852 				'cb' => '<input type="checkbox" />',
       
   853 				'name' => __('Name'),
       
   854 				'url' => __('URL'),
       
   855 				'categories' => __('Categories'),
       
   856 				'rel' => __('Relationship'),
       
   857 				'visible' => __('Visible'),
       
   858 				'rating' => __('Rating')
       
   859 			);
       
   860 
       
   861 			break;
       
   862 		case 'upload':
       
   863 			$_wp_column_headers[$page] = wp_manage_media_columns();
       
   864 			break;
       
   865 		case 'categories':
       
   866 			$_wp_column_headers[$page] = array(
       
   867 				'cb' => '<input type="checkbox" />',
       
   868 				'name' => __('Name'),
       
   869 				'description' => __('Description'),
       
   870 				'slug' => __('Slug'),
       
   871 				'posts' => __('Posts')
       
   872 			);
       
   873 
       
   874 			break;
       
   875 		case 'edit-link-categories':
       
   876 			$_wp_column_headers[$page] = array(
       
   877 				'cb' => '<input type="checkbox" />',
       
   878 				'name' => __('Name'),
       
   879 				'description' => __('Description'),
       
   880 				'slug' => __('Slug'),
       
   881 				'links' => __('Links')
       
   882 			);
       
   883 
       
   884 			break;
       
   885 		case 'edit-tags':
       
   886 			$_wp_column_headers[$page] = array(
       
   887 				'cb' => '<input type="checkbox" />',
       
   888 				'name' => __('Name'),
       
   889 				'description' => __('Description'),
       
   890 				'slug' => __('Slug'),
       
   891 				'posts' => __('Posts')
       
   892 			);
       
   893 
       
   894 			break;
       
   895 		case 'users':
       
   896 			$_wp_column_headers[$page] = array(
       
   897 				'cb' => '<input type="checkbox" />',
       
   898 				'username' => __('Username'),
       
   899 				'name' => __('Name'),
       
   900 				'email' => __('E-mail'),
       
   901 				'role' => __('Role'),
       
   902 				'posts' => __('Posts')
       
   903 			);
       
   904 			break;
       
   905 		default :
       
   906 			$_wp_column_headers[$page] = array();
       
   907 	}
       
   908 
       
   909 	$_wp_column_headers[$page] = apply_filters('manage_' . $page . '_columns', $_wp_column_headers[$page]);
       
   910 	return $_wp_column_headers[$page];
       
   911 }
       
   912 
       
   913 /**
       
   914  * {@internal Missing Short Description}}
       
   915  *
       
   916  * @since unknown
       
   917  *
       
   918  * @param unknown_type $type
       
   919  * @param unknown_type $id
       
   920  */
       
   921 function print_column_headers( $type, $id = true ) {
       
   922 	$type = str_replace('.php', '', $type);
       
   923 	$columns = get_column_headers( $type );
       
   924 	$hidden = get_hidden_columns($type);
       
   925 	$styles = array();
       
   926 //	$styles['tag']['posts'] = 'width: 90px;';
       
   927 //	$styles['link-category']['links'] = 'width: 90px;';
       
   928 //	$styles['category']['posts'] = 'width: 90px;';
       
   929 //	$styles['link']['visible'] = 'text-align: center;';
       
   930 
       
   931 	foreach ( $columns as $column_key => $column_display_name ) {
       
   932 		$class = ' class="manage-column';
       
   933 
       
   934 		$class .= " column-$column_key";
       
   935 
       
   936 		if ( 'cb' == $column_key )
       
   937 			$class .= ' check-column';
       
   938 		elseif ( in_array($column_key, array('posts', 'comments', 'links')) )
       
   939 			$class .= ' num';
       
   940 
       
   941 		$class .= '"';
       
   942 
       
   943 		$style = '';
       
   944 		if ( in_array($column_key, $hidden) )
       
   945 			$style = 'display:none;';
       
   946 
       
   947 		if ( isset($styles[$type]) && isset($styles[$type][$column_key]) )
       
   948 			$style .= ' ' . $styles[$type][$column_key];
       
   949 		$style = ' style="' . $style . '"';
       
   950 ?>
       
   951 	<th scope="col" <?php echo $id ? "id=\"$column_key\"" : ""; echo $class; echo $style; ?>><?php echo $column_display_name; ?></th>
       
   952 <?php }
       
   953 }
       
   954 
       
   955 /**
       
   956  * Register column headers for a particular screen.  The header names will be listed in the Screen Options.
       
   957  *
       
   958  * @since 2.7.0
       
   959  *
       
   960  * @param string $screen The handle for the screen to add help to.  This is usually the hook name returned by the add_*_page() functions.
       
   961  * @param array $columns An array of columns with column IDs as the keys and translated column names as the values
       
   962  * @see get_column_headers(), print_column_headers(), get_hidden_columns()
       
   963  */
       
   964 function register_column_headers($screen, $columns) {
       
   965 	global $_wp_column_headers;
       
   966 
       
   967 	if ( !isset($_wp_column_headers) )
       
   968 		$_wp_column_headers = array();
       
   969 
       
   970 	$_wp_column_headers[$screen] = $columns;
       
   971 }
       
   972 
       
   973 /**
       
   974  * {@internal Missing Short Description}}
       
   975  *
       
   976  * @since unknown
       
   977  *
       
   978  * @param unknown_type $page
       
   979  */
       
   980 function get_hidden_columns($page) {
       
   981 	$page = str_replace('.php', '', $page);
       
   982 	return (array) get_user_option( 'manage-' . $page . '-columns-hidden', 0, false );
       
   983 }
       
   984 
       
   985 /**
       
   986  * {@internal Missing Short Description}}
       
   987  *
       
   988  * Outputs the quick edit and bulk edit table rows for posts and pages
       
   989  *
       
   990  * @since 2.7
       
   991  *
       
   992  * @param string $type 'post' or 'page'
       
   993  */
       
   994 function inline_edit_row( $type ) {
       
   995 	global $current_user, $mode;
       
   996 
       
   997 	$is_page = 'page' == $type;
       
   998 	if ( $is_page ) {
       
   999 		$screen = 'edit-pages';
       
  1000 		$post = get_default_page_to_edit();
       
  1001 	} else {
       
  1002 		$screen = 'edit';
       
  1003 		$post = get_default_post_to_edit();
       
  1004 	}
       
  1005 
       
  1006 	$columns = $is_page ? wp_manage_pages_columns() : wp_manage_posts_columns();
       
  1007 	$hidden = array_intersect( array_keys( $columns ), array_filter( get_hidden_columns($screen) ) );
       
  1008 	$col_count = count($columns) - count($hidden);
       
  1009 	$m = ( isset($mode) && 'excerpt' == $mode ) ? 'excerpt' : 'list';
       
  1010 	$can_publish = current_user_can("publish_{$type}s");
       
  1011 	$core_columns = array( 'cb' => true, 'date' => true, 'title' => true, 'categories' => true, 'tags' => true, 'comments' => true, 'author' => true );
       
  1012 
       
  1013 ?>
       
  1014 
       
  1015 <form method="get" action=""><table style="display: none"><tbody id="inlineedit">
       
  1016 	<?php
       
  1017 	$bulk = 0;
       
  1018 	while ( $bulk < 2 ) { ?>
       
  1019 
       
  1020 	<tr id="<?php echo $bulk ? 'bulk-edit' : 'inline-edit'; ?>" class="inline-edit-row inline-edit-row-<?php echo "$type ";
       
  1021 		echo $bulk ? "bulk-edit-row bulk-edit-row-$type" : "quick-edit-row quick-edit-row-$type";
       
  1022 	?>" style="display: none"><td colspan="<?php echo $col_count; ?>">
       
  1023 
       
  1024 	<fieldset class="inline-edit-col-left"><div class="inline-edit-col">
       
  1025 		<h4><?php echo $bulk ? ( $is_page ? __( 'Bulk Edit Pages' ) : __( 'Bulk Edit Posts' ) ) : __( 'Quick Edit' ); ?></h4>
       
  1026 
       
  1027 
       
  1028 <?php if ( $bulk ) : ?>
       
  1029 		<div id="bulk-title-div">
       
  1030 			<div id="bulk-titles"></div>
       
  1031 		</div>
       
  1032 
       
  1033 <?php else : // $bulk ?>
       
  1034 
       
  1035 		<label>
       
  1036 			<span class="title"><?php _e( 'Title' ); ?></span>
       
  1037 			<span class="input-text-wrap"><input type="text" name="post_title" class="ptitle" value="" /></span>
       
  1038 		</label>
       
  1039 
       
  1040 <?php endif; // $bulk ?>
       
  1041 
       
  1042 
       
  1043 <?php if ( !$bulk ) : ?>
       
  1044 
       
  1045 		<label>
       
  1046 			<span class="title"><?php _e( 'Slug' ); ?></span>
       
  1047 			<span class="input-text-wrap"><input type="text" name="post_name" value="" /></span>
       
  1048 		</label>
       
  1049 
       
  1050 		<label><span class="title"><?php _e( 'Date' ); ?></span></label>
       
  1051 		<div class="inline-edit-date">
       
  1052 			<?php touch_time(1, 1, 4, 1); ?>
       
  1053 		</div>
       
  1054 		<br class="clear" />
       
  1055 
       
  1056 <?php endif; // $bulk
       
  1057 
       
  1058 		ob_start();
       
  1059 		$authors = get_editable_user_ids( $current_user->id, true, $type ); // TODO: ROLE SYSTEM
       
  1060 		if ( $authors && count( $authors ) > 1 ) :
       
  1061 			$users_opt = array('include' => $authors, 'name' => 'post_author', 'class'=> 'authors', 'multi' => 1);
       
  1062 			if ( $bulk )
       
  1063 				$users_opt['show_option_none'] = __('- No Change -');
       
  1064 ?>
       
  1065 		<label>
       
  1066 			<span class="title"><?php _e( 'Author' ); ?></span>
       
  1067 			<?php wp_dropdown_users( $users_opt ); ?>
       
  1068 		</label>
       
  1069 
       
  1070 <?php
       
  1071 		endif; // authors
       
  1072 		$authors_dropdown = ob_get_clean();
       
  1073 ?>
       
  1074 
       
  1075 <?php if ( !$bulk ) : echo $authors_dropdown; ?>
       
  1076 
       
  1077 		<div class="inline-edit-group">
       
  1078 			<label class="alignleft">
       
  1079 				<span class="title"><?php _e( 'Password' ); ?></span>
       
  1080 				<span class="input-text-wrap"><input type="text" name="post_password" class="inline-edit-password-input" value="" /></span>
       
  1081 			</label>
       
  1082 
       
  1083 			<em style="margin:5px 10px 0 0" class="alignleft">
       
  1084 				<?php
       
  1085 				/* translators: Between password field and private checkbox on post quick edit interface */
       
  1086 				echo __( '&ndash;OR&ndash;' );
       
  1087 				?>
       
  1088 			</em>
       
  1089 			<label class="alignleft inline-edit-private">
       
  1090 				<input type="checkbox" name="keep_private" value="private" />
       
  1091 				<span class="checkbox-title"><?php echo $is_page ? __('Private page') : __('Private post'); ?></span>
       
  1092 			</label>
       
  1093 		</div>
       
  1094 
       
  1095 <?php endif; ?>
       
  1096 
       
  1097 	</div></fieldset>
       
  1098 
       
  1099 <?php if ( !$is_page && !$bulk ) : ?>
       
  1100 
       
  1101 	<fieldset class="inline-edit-col-center inline-edit-categories"><div class="inline-edit-col">
       
  1102 		<span class="title inline-edit-categories-label"><?php _e( 'Categories' ); ?>
       
  1103 			<span class="catshow"><?php _e('[more]'); ?></span>
       
  1104 			<span class="cathide" style="display:none;"><?php _e('[less]'); ?></span>
       
  1105 		</span>
       
  1106 		<ul class="cat-checklist">
       
  1107 			<?php wp_category_checklist(); ?>
       
  1108 		</ul>
       
  1109 	</div></fieldset>
       
  1110 
       
  1111 <?php endif; // !$is_page && !$bulk ?>
       
  1112 
       
  1113 	<fieldset class="inline-edit-col-right"><div class="inline-edit-col">
       
  1114 
       
  1115 <?php
       
  1116 	if ( $bulk )
       
  1117 		echo $authors_dropdown;
       
  1118 ?>
       
  1119 
       
  1120 <?php if ( $is_page ) : ?>
       
  1121 
       
  1122 		<label>
       
  1123 			<span class="title"><?php _e( 'Parent' ); ?></span>
       
  1124 <?php
       
  1125 	$dropdown_args = array('selected' => $post->post_parent, 'name' => 'post_parent', 'show_option_none' => __('Main Page (no parent)'), 'option_none_value' => 0, 'sort_column'=> 'menu_order, post_title');
       
  1126 	if ( $bulk )
       
  1127 		$dropdown_args['show_option_no_change'] =  __('- No Change -');
       
  1128 	$dropdown_args = apply_filters('quick_edit_dropdown_pages_args', $dropdown_args);
       
  1129 	wp_dropdown_pages($dropdown_args);
       
  1130 ?>
       
  1131 		</label>
       
  1132 
       
  1133 <?php	if ( !$bulk ) : ?>
       
  1134 
       
  1135 		<label>
       
  1136 			<span class="title"><?php _e( 'Order' ); ?></span>
       
  1137 			<span class="input-text-wrap"><input type="text" name="menu_order" class="inline-edit-menu-order-input" value="<?php echo $post->menu_order ?>" /></span>
       
  1138 		</label>
       
  1139 
       
  1140 <?php	endif; // !$bulk ?>
       
  1141 
       
  1142 		<label>
       
  1143 			<span class="title"><?php _e( 'Template' ); ?></span>
       
  1144 			<select name="page_template">
       
  1145 <?php	if ( $bulk ) : ?>
       
  1146 				<option value="-1"><?php _e('- No Change -'); ?></option>
       
  1147 <?php	endif; // $bulk ?>
       
  1148 				<option value="default"><?php _e( 'Default Template' ); ?></option>
       
  1149 				<?php page_template_dropdown() ?>
       
  1150 			</select>
       
  1151 		</label>
       
  1152 
       
  1153 <?php elseif ( !$bulk ) : // $is_page ?>
       
  1154 
       
  1155 		<label class="inline-edit-tags">
       
  1156 			<span class="title"><?php _e( 'Tags' ); ?></span>
       
  1157 			<textarea cols="22" rows="1" name="tags_input" class="tags_input"></textarea>
       
  1158 		</label>
       
  1159 
       
  1160 <?php endif; // $is_page  ?>
       
  1161 
       
  1162 <?php if ( $bulk ) : ?>
       
  1163 
       
  1164 		<div class="inline-edit-group">
       
  1165 		<label class="alignleft">
       
  1166 			<span class="title"><?php _e( 'Comments' ); ?></span>
       
  1167 			<select name="comment_status">
       
  1168 				<option value=""><?php _e('- No Change -'); ?></option>
       
  1169 				<option value="open"><?php _e('Allow'); ?></option>
       
  1170 				<option value="closed"><?php _e('Do not allow'); ?></option>
       
  1171 			</select>
       
  1172 		</label>
       
  1173 
       
  1174 		<label class="alignright">
       
  1175 			<span class="title"><?php _e( 'Pings' ); ?></span>
       
  1176 			<select name="ping_status">
       
  1177 				<option value=""><?php _e('- No Change -'); ?></option>
       
  1178 				<option value="open"><?php _e('Allow'); ?></option>
       
  1179 				<option value="closed"><?php _e('Do not allow'); ?></option>
       
  1180 			</select>
       
  1181 		</label>
       
  1182 		</div>
       
  1183 
       
  1184 <?php else : // $bulk ?>
       
  1185 
       
  1186 		<div class="inline-edit-group">
       
  1187 			<label class="alignleft">
       
  1188 				<input type="checkbox" name="comment_status" value="open" />
       
  1189 				<span class="checkbox-title"><?php _e( 'Allow Comments' ); ?></span>
       
  1190 			</label>
       
  1191 
       
  1192 			<label class="alignleft">
       
  1193 				<input type="checkbox" name="ping_status" value="open" />
       
  1194 				<span class="checkbox-title"><?php _e( 'Allow Pings' ); ?></span>
       
  1195 			</label>
       
  1196 		</div>
       
  1197 
       
  1198 <?php endif; // $bulk ?>
       
  1199 
       
  1200 
       
  1201 		<div class="inline-edit-group">
       
  1202 			<label class="inline-edit-status alignleft">
       
  1203 				<span class="title"><?php _e( 'Status' ); ?></span>
       
  1204 				<select name="_status">
       
  1205 <?php if ( $bulk ) : ?>
       
  1206 					<option value="-1"><?php _e('- No Change -'); ?></option>
       
  1207 <?php endif; // $bulk ?>
       
  1208 				<?php if ( $can_publish ) : // Contributors only get "Unpublished" and "Pending Review" ?>
       
  1209 					<option value="publish"><?php _e( 'Published' ); ?></option>
       
  1210 					<option value="future"><?php _e( 'Scheduled' ); ?></option>
       
  1211 <?php if ( $bulk ) : ?>
       
  1212 					<option value="private"><?php _e('Private') ?></option>
       
  1213 <?php endif; // $bulk ?>
       
  1214 				<?php endif; ?>
       
  1215 					<option value="pending"><?php _e( 'Pending Review' ); ?></option>
       
  1216 					<option value="draft"><?php _e( 'Draft' ); ?></option>
       
  1217 				</select>
       
  1218 			</label>
       
  1219 
       
  1220 <?php if ( !$is_page && $can_publish && current_user_can( 'edit_others_posts' ) ) : ?>
       
  1221 
       
  1222 <?php	if ( $bulk ) : ?>
       
  1223 
       
  1224 			<label class="alignright">
       
  1225 				<span class="title"><?php _e( 'Sticky' ); ?></span>
       
  1226 				<select name="sticky">
       
  1227 					<option value="-1"><?php _e( '- No Change -' ); ?></option>
       
  1228 					<option value="sticky"><?php _e( 'Sticky' ); ?></option>
       
  1229 					<option value="unsticky"><?php _e( 'Not Sticky' ); ?></option>
       
  1230 				</select>
       
  1231 			</label>
       
  1232 
       
  1233 <?php	else : // $bulk ?>
       
  1234 
       
  1235 			<label class="alignleft">
       
  1236 				<input type="checkbox" name="sticky" value="sticky" />
       
  1237 				<span class="checkbox-title"><?php _e( 'Make this post sticky' ); ?></span>
       
  1238 			</label>
       
  1239 
       
  1240 <?php	endif; // $bulk ?>
       
  1241 
       
  1242 <?php endif; // !$is_page && $can_publish && current_user_can( 'edit_others_posts' ) ?>
       
  1243 
       
  1244 		</div>
       
  1245 
       
  1246 	</div></fieldset>
       
  1247 
       
  1248 <?php
       
  1249 	foreach ( $columns as $column_name => $column_display_name ) {
       
  1250 		if ( isset( $core_columns[$column_name] ) )
       
  1251 			continue;
       
  1252 		do_action( $bulk ? 'bulk_edit_custom_box' : 'quick_edit_custom_box', $column_name, $type);
       
  1253 	}
       
  1254 ?>
       
  1255 	<p class="submit inline-edit-save">
       
  1256 		<a accesskey="c" href="#inline-edit" title="<?php _e('Cancel'); ?>" class="button-secondary cancel alignleft"><?php _e('Cancel'); ?></a>
       
  1257 		<?php if ( ! $bulk ) {
       
  1258 			wp_nonce_field( 'inlineeditnonce', '_inline_edit', false );
       
  1259 			$update_text = ( $is_page ) ? __( 'Update Page' ) : __( 'Update Post' );
       
  1260 			?>
       
  1261 			<a accesskey="s" href="#inline-edit" title="<?php _e('Update'); ?>" class="button-primary save alignright"><?php echo esc_attr( $update_text ); ?></a>
       
  1262 			<img class="waiting" style="display:none;" src="images/wpspin_light.gif" alt="" />
       
  1263 		<?php } else {
       
  1264 			$update_text = ( $is_page ) ? __( 'Update Pages' ) : __( 'Update Posts' );
       
  1265 		?>
       
  1266 			<input accesskey="s" class="button-primary alignright" type="submit" name="bulk_edit" value="<?php echo esc_attr( $update_text ); ?>" />
       
  1267 		<?php } ?>
       
  1268 		<input type="hidden" name="post_view" value="<?php echo $m; ?>" />
       
  1269 		<br class="clear" />
       
  1270 	</p>
       
  1271 	</td></tr>
       
  1272 <?php
       
  1273 	$bulk++;
       
  1274 	} ?>
       
  1275 	</tbody></table></form>
       
  1276 <?php
       
  1277 }
       
  1278 
       
  1279 // adds hidden fields with the data for use in the inline editor for posts and pages
       
  1280 /**
       
  1281  * {@internal Missing Short Description}}
       
  1282  *
       
  1283  * @since unknown
       
  1284  *
       
  1285  * @param unknown_type $post
       
  1286  */
       
  1287 function get_inline_data($post) {
       
  1288 
       
  1289 	if ( ! current_user_can('edit_' . $post->post_type, $post->ID) )
       
  1290 		return;
       
  1291 
       
  1292 	$title = esc_attr($post->post_title);
       
  1293 
       
  1294 	echo '
       
  1295 <div class="hidden" id="inline_' . $post->ID . '">
       
  1296 	<div class="post_title">' . $title . '</div>
       
  1297 	<div class="post_name">' . $post->post_name . '</div>
       
  1298 	<div class="post_author">' . $post->post_author . '</div>
       
  1299 	<div class="comment_status">' . $post->comment_status . '</div>
       
  1300 	<div class="ping_status">' . $post->ping_status . '</div>
       
  1301 	<div class="_status">' . $post->post_status . '</div>
       
  1302 	<div class="jj">' . mysql2date( 'd', $post->post_date, false ) . '</div>
       
  1303 	<div class="mm">' . mysql2date( 'm', $post->post_date, false ) . '</div>
       
  1304 	<div class="aa">' . mysql2date( 'Y', $post->post_date, false ) . '</div>
       
  1305 	<div class="hh">' . mysql2date( 'H', $post->post_date, false ) . '</div>
       
  1306 	<div class="mn">' . mysql2date( 'i', $post->post_date, false ) . '</div>
       
  1307 	<div class="ss">' . mysql2date( 's', $post->post_date, false ) . '</div>
       
  1308 	<div class="post_password">' . esc_html( $post->post_password ) . '</div>';
       
  1309 
       
  1310 	if( $post->post_type == 'page' )
       
  1311 		echo '
       
  1312 	<div class="post_parent">' . $post->post_parent . '</div>
       
  1313 	<div class="page_template">' . esc_html( get_post_meta( $post->ID, '_wp_page_template', true ) ) . '</div>
       
  1314 	<div class="menu_order">' . $post->menu_order . '</div>';
       
  1315 
       
  1316 	if( $post->post_type == 'post' )
       
  1317 		echo '
       
  1318 	<div class="tags_input">' . esc_html( str_replace( ',', ', ', get_tags_to_edit($post->ID) ) ) . '</div>
       
  1319 	<div class="post_category">' . implode( ',', wp_get_post_categories( $post->ID ) ) . '</div>
       
  1320 	<div class="sticky">' . (is_sticky($post->ID) ? 'sticky' : '') . '</div>';
       
  1321 
       
  1322 	echo '</div>';
       
  1323 }
       
  1324 
       
  1325 /**
       
  1326  * {@internal Missing Short Description}}
       
  1327  *
       
  1328  * @since unknown
       
  1329  *
       
  1330  * @param unknown_type $posts
       
  1331  */
       
  1332 function post_rows( $posts = array() ) {
       
  1333 	global $wp_query, $post, $mode;
       
  1334 
       
  1335 	add_filter('the_title','esc_html');
       
  1336 
       
  1337 	// Create array of post IDs.
       
  1338 	$post_ids = array();
       
  1339 
       
  1340 	if ( empty($posts) )
       
  1341 		$posts = &$wp_query->posts;
       
  1342 
       
  1343 	foreach ( $posts as $a_post )
       
  1344 		$post_ids[] = $a_post->ID;
       
  1345 
       
  1346 	$comment_pending_count = get_pending_comments_num($post_ids);
       
  1347 	if ( empty($comment_pending_count) )
       
  1348 		$comment_pending_count = array();
       
  1349 
       
  1350 	foreach ( $posts as $post ) {
       
  1351 		if ( empty($comment_pending_count[$post->ID]) )
       
  1352 			$comment_pending_count[$post->ID] = 0;
       
  1353 
       
  1354 		_post_row($post, $comment_pending_count[$post->ID], $mode);
       
  1355 	}
       
  1356 }
       
  1357 
       
  1358 /**
       
  1359  * {@internal Missing Short Description}}
       
  1360  *
       
  1361  * @since unknown
       
  1362  *
       
  1363  * @param unknown_type $a_post
       
  1364  * @param unknown_type $pending_comments
       
  1365  * @param unknown_type $mode
       
  1366  */
       
  1367 function _post_row($a_post, $pending_comments, $mode) {
       
  1368 	global $post;
       
  1369 	static $rowclass;
       
  1370 
       
  1371 	$global_post = $post;
       
  1372 	$post = $a_post;
       
  1373 	setup_postdata($post);
       
  1374 
       
  1375 	$rowclass = 'alternate' == $rowclass ? '' : 'alternate';
       
  1376 	global $current_user;
       
  1377 	$post_owner = ( $current_user->ID == $post->post_author ? 'self' : 'other' );
       
  1378 	$edit_link = get_edit_post_link( $post->ID );
       
  1379 	$title = _draft_or_post_title();
       
  1380 ?>
       
  1381 	<tr id='post-<?php echo $post->ID; ?>' class='<?php echo trim( $rowclass . ' author-' . $post_owner . ' status-' . $post->post_status ); ?> iedit' valign="top">
       
  1382 <?php
       
  1383 	$posts_columns = get_column_headers('edit');
       
  1384 	$hidden = get_hidden_columns('edit');
       
  1385 	foreach ( $posts_columns as $column_name=>$column_display_name ) {
       
  1386 		$class = "class=\"$column_name column-$column_name\"";
       
  1387 
       
  1388 		$style = '';
       
  1389 		if ( in_array($column_name, $hidden) )
       
  1390 			$style = ' style="display:none;"';
       
  1391 
       
  1392 		$attributes = "$class$style";
       
  1393 
       
  1394 		switch ($column_name) {
       
  1395 
       
  1396 		case 'cb':
       
  1397 		?>
       
  1398 		<th scope="row" class="check-column"><?php if ( current_user_can( 'edit_post', $post->ID ) ) { ?><input type="checkbox" name="post[]" value="<?php the_ID(); ?>" /><?php } ?></th>
       
  1399 		<?php
       
  1400 		break;
       
  1401 
       
  1402 		case 'date':
       
  1403 			if ( '0000-00-00 00:00:00' == $post->post_date && 'date' == $column_name ) {
       
  1404 				$t_time = $h_time = __('Unpublished');
       
  1405 				$time_diff = 0;
       
  1406 			} else {
       
  1407 				$t_time = get_the_time(__('Y/m/d g:i:s A'));
       
  1408 				$m_time = $post->post_date;
       
  1409 				$time = get_post_time('G', true, $post);
       
  1410 
       
  1411 				$time_diff = time() - $time;
       
  1412 
       
  1413 				if ( $time_diff > 0 && $time_diff < 24*60*60 )
       
  1414 					$h_time = sprintf( __('%s ago'), human_time_diff( $time ) );
       
  1415 				else
       
  1416 					$h_time = mysql2date(__('Y/m/d'), $m_time);
       
  1417 			}
       
  1418 
       
  1419 			echo '<td ' . $attributes . '>';
       
  1420 			if ( 'excerpt' == $mode )
       
  1421 				echo apply_filters('post_date_column_time', $t_time, $post, $column_name, $mode);
       
  1422 			else
       
  1423 				echo '<abbr title="' . $t_time . '">' . apply_filters('post_date_column_time', $h_time, $post, $column_name, $mode) . '</abbr>';
       
  1424 			echo '<br />';
       
  1425 			if ( 'publish' == $post->post_status ) {
       
  1426 				_e('Published');
       
  1427 			} elseif ( 'future' == $post->post_status ) {
       
  1428 				if ( $time_diff > 0 )
       
  1429 					echo '<strong class="attention">' . __('Missed schedule') . '</strong>';
       
  1430 				else
       
  1431 					_e('Scheduled');
       
  1432 			} else {
       
  1433 				_e('Last Modified');
       
  1434 			}
       
  1435 			echo '</td>';
       
  1436 		break;
       
  1437 
       
  1438 		case 'title':
       
  1439 			$attributes = 'class="post-title column-title"' . $style;
       
  1440 		?>
       
  1441 		<td <?php echo $attributes ?>><strong><?php if ( current_user_can( 'edit_post', $post->ID ) ) { ?><a class="row-title" href="<?php echo $edit_link; ?>" title="<?php echo esc_attr(sprintf(__('Edit &#8220;%s&#8221;'), $title)); ?>"><?php echo $title ?></a><?php } else { echo $title; }; _post_states($post); ?></strong>
       
  1442 		<?php
       
  1443 			if ( 'excerpt' == $mode )
       
  1444 				the_excerpt();
       
  1445 
       
  1446 			$actions = array();
       
  1447 			if ( current_user_can('edit_post', $post->ID) ) {
       
  1448 				$actions['edit'] = '<a href="' . get_edit_post_link($post->ID, true) . '" title="' . esc_attr(__('Edit this post')) . '">' . __('Edit') . '</a>';
       
  1449 				$actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="' . esc_attr(__('Edit this post inline')) . '">' . __('Quick&nbsp;Edit') . '</a>';
       
  1450 			}
       
  1451 			if ( current_user_can('delete_post', $post->ID) ) {
       
  1452 				$actions['delete'] = "<a class='submitdelete' title='" . esc_attr(__('Delete this post')) . "' href='" . wp_nonce_url("post.php?action=delete&amp;post=$post->ID", 'delete-post_' . $post->ID) . "' onclick=\"if ( confirm('" . esc_js(sprintf( ('draft' == $post->post_status) ? __("You are about to delete this draft '%s'\n 'Cancel' to stop, 'OK' to delete.") : __("You are about to delete this post '%s'\n 'Cancel' to stop, 'OK' to delete."), $post->post_title )) . "') ) { return true;}return false;\">" . __('Delete') . "</a>";
       
  1453 			}
       
  1454 			if ( in_array($post->post_status, array('pending', 'draft')) ) {
       
  1455 				if ( current_user_can('edit_post', $post->ID) )
       
  1456 					$actions['view'] = '<a href="' . get_permalink($post->ID) . '" title="' . esc_attr(sprintf(__('Preview &#8220;%s&#8221;'), $title)) . '" rel="permalink">' . __('Preview') . '</a>';
       
  1457 			} else {
       
  1458 				$actions['view'] = '<a href="' . get_permalink($post->ID) . '" title="' . esc_attr(sprintf(__('View &#8220;%s&#8221;'), $title)) . '" rel="permalink">' . __('View') . '</a>';
       
  1459 			}
       
  1460 			$actions = apply_filters('post_row_actions', $actions, $post);
       
  1461 			$action_count = count($actions);
       
  1462 			$i = 0;
       
  1463 			echo '<div class="row-actions">';
       
  1464 			foreach ( $actions as $action => $link ) {
       
  1465 				++$i;
       
  1466 				( $i == $action_count ) ? $sep = '' : $sep = ' | ';
       
  1467 				echo "<span class='$action'>$link$sep</span>";
       
  1468 			}
       
  1469 			echo '</div>';
       
  1470 
       
  1471 			get_inline_data($post);
       
  1472 		?>
       
  1473 		</td>
       
  1474 		<?php
       
  1475 		break;
       
  1476 
       
  1477 		case 'categories':
       
  1478 		?>
       
  1479 		<td <?php echo $attributes ?>><?php
       
  1480 			$categories = get_the_category();
       
  1481 			if ( !empty( $categories ) ) {
       
  1482 				$out = array();
       
  1483 				foreach ( $categories as $c )
       
  1484 					$out[] = "<a href='edit.php?category_name=$c->slug'> " . esc_html(sanitize_term_field('name', $c->name, $c->term_id, 'category', 'display')) . "</a>";
       
  1485 					echo join( ', ', $out );
       
  1486 			} else {
       
  1487 				_e('Uncategorized');
       
  1488 			}
       
  1489 		?></td>
       
  1490 		<?php
       
  1491 		break;
       
  1492 
       
  1493 		case 'tags':
       
  1494 		?>
       
  1495 		<td <?php echo $attributes ?>><?php
       
  1496 			$tags = get_the_tags($post->ID);
       
  1497 			if ( !empty( $tags ) ) {
       
  1498 				$out = array();
       
  1499 				foreach ( $tags as $c )
       
  1500 					$out[] = "<a href='edit.php?tag=$c->slug'> " . esc_html(sanitize_term_field('name', $c->name, $c->term_id, 'post_tag', 'display')) . "</a>";
       
  1501 				echo join( ', ', $out );
       
  1502 			} else {
       
  1503 				_e('No Tags');
       
  1504 			}
       
  1505 		?></td>
       
  1506 		<?php
       
  1507 		break;
       
  1508 
       
  1509 		case 'comments':
       
  1510 		?>
       
  1511 		<td <?php echo $attributes ?>><div class="post-com-count-wrapper">
       
  1512 		<?php
       
  1513 			$pending_phrase = sprintf( __('%s pending'), number_format( $pending_comments ) );
       
  1514 			if ( $pending_comments )
       
  1515 				echo '<strong>';
       
  1516 				comments_number("<a href='edit-comments.php?p=$post->ID' title='$pending_phrase' class='post-com-count'><span class='comment-count'>" . /* translators: comment count link */ _x('0', 'comment count') . '</span></a>', "<a href='edit-comments.php?p=$post->ID' title='$pending_phrase' class='post-com-count'><span class='comment-count'>" . /* translators: comment count link */ _x('1', 'comment count') . '</span></a>', "<a href='edit-comments.php?p=$post->ID' title='$pending_phrase' class='post-com-count'><span class='comment-count'>" . /* translators: comment count link: % will be substituted by comment count */ _x('%', 'comment count') . '</span></a>');
       
  1517 				if ( $pending_comments )
       
  1518 				echo '</strong>';
       
  1519 		?>
       
  1520 		</div></td>
       
  1521 		<?php
       
  1522 		break;
       
  1523 
       
  1524 		case 'author':
       
  1525 		?>
       
  1526 		<td <?php echo $attributes ?>><a href="edit.php?author=<?php the_author_meta('ID'); ?>"><?php the_author() ?></a></td>
       
  1527 		<?php
       
  1528 		break;
       
  1529 
       
  1530 		case 'control_view':
       
  1531 		?>
       
  1532 		<td><a href="<?php the_permalink(); ?>" rel="permalink" class="view"><?php _e('View'); ?></a></td>
       
  1533 		<?php
       
  1534 		break;
       
  1535 
       
  1536 		case 'control_edit':
       
  1537 		?>
       
  1538 		<td><?php if ( current_user_can('edit_post', $post->ID) ) { echo "<a href='$edit_link' class='edit'>" . __('Edit') . "</a>"; } ?></td>
       
  1539 		<?php
       
  1540 		break;
       
  1541 
       
  1542 		case 'control_delete':
       
  1543 		?>
       
  1544 		<td><?php if ( current_user_can('delete_post', $post->ID) ) { echo "<a href='" . wp_nonce_url("post.php?action=delete&amp;post=$id", 'delete-post_' . $post->ID) . "' class='delete'>" . __('Delete') . "</a>"; } ?></td>
       
  1545 		<?php
       
  1546 		break;
       
  1547 
       
  1548 		default:
       
  1549 		?>
       
  1550 		<td <?php echo $attributes ?>><?php do_action('manage_posts_custom_column', $column_name, $post->ID); ?></td>
       
  1551 		<?php
       
  1552 		break;
       
  1553 	}
       
  1554 }
       
  1555 ?>
       
  1556 	</tr>
       
  1557 <?php
       
  1558 	$post = $global_post;
       
  1559 }
       
  1560 
       
  1561 /*
       
  1562  * display one row if the page doesn't have any children
       
  1563  * otherwise, display the row and its children in subsequent rows
       
  1564  */
       
  1565 /**
       
  1566  * {@internal Missing Short Description}}
       
  1567  *
       
  1568  * @since unknown
       
  1569  *
       
  1570  * @param unknown_type $page
       
  1571  * @param unknown_type $level
       
  1572  */
       
  1573 function display_page_row( $page, $level = 0 ) {
       
  1574 	global $post;
       
  1575 	static $rowclass;
       
  1576 
       
  1577 	$post = $page;
       
  1578 	setup_postdata($page);
       
  1579 
       
  1580 	if ( 0 == $level && (int)$page->post_parent > 0 ) {
       
  1581 		//sent level 0 by accident, by default, or because we don't know the actual level
       
  1582 		$find_main_page = (int)$page->post_parent;
       
  1583 		while ( $find_main_page > 0 ) {
       
  1584 			$parent = get_page($find_main_page);
       
  1585 
       
  1586 			if ( is_null($parent) )
       
  1587 				break;
       
  1588 
       
  1589 			$level++;
       
  1590 			$find_main_page = (int)$parent->post_parent;
       
  1591 
       
  1592 			if ( !isset($parent_name) )
       
  1593 				$parent_name = $parent->post_title;
       
  1594 		}
       
  1595 	}
       
  1596 
       
  1597 	$page->post_title = esc_html( $page->post_title );
       
  1598 	$pad = str_repeat( '&#8212; ', $level );
       
  1599 	$id = (int) $page->ID;
       
  1600 	$rowclass = 'alternate' == $rowclass ? '' : 'alternate';
       
  1601 	$posts_columns = get_column_headers('edit-pages');
       
  1602 	$hidden = get_hidden_columns('edit-pages');
       
  1603 	$title = _draft_or_post_title();
       
  1604 ?>
       
  1605 <tr id="page-<?php echo $id; ?>" class="<?php echo $rowclass; ?> iedit">
       
  1606 <?php
       
  1607 
       
  1608 foreach ($posts_columns as $column_name=>$column_display_name) {
       
  1609 	$class = "class=\"$column_name column-$column_name\"";
       
  1610 
       
  1611 	$style = '';
       
  1612 	if ( in_array($column_name, $hidden) )
       
  1613 		$style = ' style="display:none;"';
       
  1614 
       
  1615 	$attributes = "$class$style";
       
  1616 
       
  1617 	switch ($column_name) {
       
  1618 
       
  1619 	case 'cb':
       
  1620 		?>
       
  1621 		<th scope="row" class="check-column"><input type="checkbox" name="post[]" value="<?php the_ID(); ?>" /></th>
       
  1622 		<?php
       
  1623 		break;
       
  1624 	case 'date':
       
  1625 		if ( '0000-00-00 00:00:00' == $page->post_date && 'date' == $column_name ) {
       
  1626 			$t_time = $h_time = __('Unpublished');
       
  1627 			$time_diff = 0;
       
  1628 		} else {
       
  1629 			$t_time = get_the_time(__('Y/m/d g:i:s A'));
       
  1630 			$m_time = $page->post_date;
       
  1631 			$time = get_post_time('G', true);
       
  1632 
       
  1633 			$time_diff = time() - $time;
       
  1634 
       
  1635 			if ( $time_diff > 0 && $time_diff < 24*60*60 )
       
  1636 				$h_time = sprintf( __('%s ago'), human_time_diff( $time ) );
       
  1637 			else
       
  1638 				$h_time = mysql2date(__('Y/m/d'), $m_time);
       
  1639 		}
       
  1640 		echo '<td ' . $attributes . '>';
       
  1641 		echo '<abbr title="' . $t_time . '">' . apply_filters('post_date_column_time', $h_time, $page, $column_name, '') . '</abbr>';
       
  1642 		echo '<br />';
       
  1643 		if ( 'publish' == $page->post_status ) {
       
  1644 			_e('Published');
       
  1645 		} elseif ( 'future' == $page->post_status ) {
       
  1646 			if ( $time_diff > 0 )
       
  1647 				echo '<strong class="attention">' . __('Missed schedule') . '</strong>';
       
  1648 			else
       
  1649 				_e('Scheduled');
       
  1650 		} else {
       
  1651 			_e('Last Modified');
       
  1652 		}
       
  1653 		echo '</td>';
       
  1654 		break;
       
  1655 	case 'title':
       
  1656 		$attributes = 'class="post-title page-title column-title"' . $style;
       
  1657 		$edit_link = get_edit_post_link( $page->ID );
       
  1658 		?>
       
  1659 		<td <?php echo $attributes ?>><strong><?php if ( current_user_can( 'edit_page', $page->ID ) ) { ?><a class="row-title" href="<?php echo $edit_link; ?>" title="<?php echo esc_attr(sprintf(__('Edit &#8220;%s&#8221;'), $title)); ?>"><?php echo $pad; echo $title ?></a><?php } else { echo $pad; echo $title; }; _post_states($page); echo isset($parent_name) ? ' | ' . __('Parent Page: ') . esc_html($parent_name) : ''; ?></strong>
       
  1660 		<?php
       
  1661 		$actions = array();
       
  1662 		if ( current_user_can('edit_page', $page->ID) ) {
       
  1663 			$actions['edit'] = '<a href="' . $edit_link . '" title="' . esc_attr(__('Edit this page')) . '">' . __('Edit') . '</a>';
       
  1664 			$actions['inline'] = '<a href="#" class="editinline">' . __('Quick&nbsp;Edit') . '</a>';
       
  1665 		}
       
  1666 		if ( current_user_can('delete_page', $page->ID) ) {
       
  1667 			$actions['delete'] = "<a class='submitdelete' title='" . esc_attr(__('Delete this page')) . "' href='" . wp_nonce_url("page.php?action=delete&amp;post=$page->ID", 'delete-page_' . $page->ID) . "' onclick=\"if ( confirm('" . esc_js(sprintf( ('draft' == $page->post_status) ? __("You are about to delete this draft '%s'\n 'Cancel' to stop, 'OK' to delete.") : __("You are about to delete this page '%s'\n 'Cancel' to stop, 'OK' to delete."), $page->post_title )) . "') ) { return true;}return false;\">" . __('Delete') . "</a>";
       
  1668 		}
       
  1669 		if ( in_array($post->post_status, array('pending', 'draft')) ) {
       
  1670 			if ( current_user_can('edit_page', $page->ID) )
       
  1671 				$actions['view'] = '<a href="' . get_permalink($page->ID) . '" title="' . esc_attr(sprintf(__('Preview &#8220;%s&#8221;'), $title)) . '" rel="permalink">' . __('Preview') . '</a>';
       
  1672 		} else {
       
  1673 			$actions['view'] = '<a href="' . get_permalink($page->ID) . '" title="' . esc_attr(sprintf(__('View &#8220;%s&#8221;'), $title)) . '" rel="permalink">' . __('View') . '</a>';
       
  1674 		}
       
  1675 		$actions = apply_filters('page_row_actions', $actions, $page);
       
  1676 		$action_count = count($actions);
       
  1677 
       
  1678 		$i = 0;
       
  1679 		echo '<div class="row-actions">';
       
  1680 		foreach ( $actions as $action => $link ) {
       
  1681 			++$i;
       
  1682 			( $i == $action_count ) ? $sep = '' : $sep = ' | ';
       
  1683 			echo "<span class='$action'>$link$sep</span>";
       
  1684 		}
       
  1685 		echo '</div>';
       
  1686 
       
  1687 		get_inline_data($post);
       
  1688 		echo '</td>';
       
  1689 		break;
       
  1690 
       
  1691 	case 'comments':
       
  1692 		?>
       
  1693 		<td <?php echo $attributes ?>><div class="post-com-count-wrapper">
       
  1694 		<?php
       
  1695 		$left = get_pending_comments_num( $page->ID );
       
  1696 		$pending_phrase = sprintf( __('%s pending'), number_format( $left ) );
       
  1697 		if ( $left )
       
  1698 			echo '<strong>';
       
  1699 		comments_number("<a href='edit-comments.php?p=$id' title='$pending_phrase' class='post-com-count'><span class='comment-count'>" . /* translators: comment count link */ _x('0', 'comment count') . '</span></a>', "<a href='edit-comments.php?p=$id' title='$pending_phrase' class='post-com-count'><span class='comment-count'>" . /* translators: comment count link */ _x('1', 'comment count') . '</span></a>', "<a href='edit-comments.php?p=$id' title='$pending_phrase' class='post-com-count'><span class='comment-count'>" . /* translators: comment count link: % will be substituted by comment count */ _x('%', 'comment count') . '</span></a>');
       
  1700 		if ( $left )
       
  1701 			echo '</strong>';
       
  1702 		?>
       
  1703 		</div></td>
       
  1704 		<?php
       
  1705 		break;
       
  1706 
       
  1707 	case 'author':
       
  1708 		?>
       
  1709 		<td <?php echo $attributes ?>><a href="edit-pages.php?author=<?php the_author_meta('ID'); ?>"><?php the_author() ?></a></td>
       
  1710 		<?php
       
  1711 		break;
       
  1712 
       
  1713 	default:
       
  1714 		?>
       
  1715 		<td <?php echo $attributes ?>><?php do_action('manage_pages_custom_column', $column_name, $id); ?></td>
       
  1716 		<?php
       
  1717 		break;
       
  1718 	}
       
  1719 }
       
  1720 ?>
       
  1721 
       
  1722 </tr>
       
  1723 
       
  1724 <?php
       
  1725 }
       
  1726 
       
  1727 /*
       
  1728  * displays pages in hierarchical order with paging support
       
  1729  */
       
  1730 /**
       
  1731  * {@internal Missing Short Description}}
       
  1732  *
       
  1733  * @since unknown
       
  1734  *
       
  1735  * @param unknown_type $pages
       
  1736  * @param unknown_type $pagenum
       
  1737  * @param unknown_type $per_page
       
  1738  * @return unknown
       
  1739  */
       
  1740 function page_rows($pages, $pagenum = 1, $per_page = 20) {
       
  1741 	global $wpdb;
       
  1742 
       
  1743 	$level = 0;
       
  1744 
       
  1745 	if ( ! $pages ) {
       
  1746 		$pages = get_pages( array('sort_column' => 'menu_order') );
       
  1747 
       
  1748 		if ( ! $pages )
       
  1749 			return false;
       
  1750 	}
       
  1751 
       
  1752 	/*
       
  1753 	 * arrange pages into two parts: top level pages and children_pages
       
  1754 	 * children_pages is two dimensional array, eg.
       
  1755 	 * children_pages[10][] contains all sub-pages whose parent is 10.
       
  1756 	 * It only takes O(N) to arrange this and it takes O(1) for subsequent lookup operations
       
  1757 	 * If searching, ignore hierarchy and treat everything as top level
       
  1758 	 */
       
  1759 	if ( empty($_GET['s']) ) {
       
  1760 
       
  1761 		$top_level_pages = array();
       
  1762 		$children_pages = array();
       
  1763 
       
  1764 		foreach ( $pages as $page ) {
       
  1765 
       
  1766 			// catch and repair bad pages
       
  1767 			if ( $page->post_parent == $page->ID ) {
       
  1768 				$page->post_parent = 0;
       
  1769 				$wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET post_parent = '0' WHERE ID = %d", $page->ID) );
       
  1770 				clean_page_cache( $page->ID );
       
  1771 			}
       
  1772 
       
  1773 			if ( 0 == $page->post_parent )
       
  1774 				$top_level_pages[] = $page;
       
  1775 			else
       
  1776 				$children_pages[ $page->post_parent ][] = $page;
       
  1777 		}
       
  1778 
       
  1779 		$pages = &$top_level_pages;
       
  1780 	}
       
  1781 
       
  1782 	$count = 0;
       
  1783 	$start = ($pagenum - 1) * $per_page;
       
  1784 	$end = $start + $per_page;
       
  1785 
       
  1786 	foreach ( $pages as $page ) {
       
  1787 		if ( $count >= $end )
       
  1788 			break;
       
  1789 
       
  1790 		if ( $count >= $start )
       
  1791 			echo "\t" . display_page_row( $page, $level );
       
  1792 
       
  1793 		$count++;
       
  1794 
       
  1795 		if ( isset($children_pages) )
       
  1796 			_page_rows( $children_pages, $count, $page->ID, $level + 1, $pagenum, $per_page );
       
  1797 	}
       
  1798 
       
  1799 	// if it is the last pagenum and there are orphaned pages, display them with paging as well
       
  1800 	if ( isset($children_pages) && $count < $end ){
       
  1801 		foreach( $children_pages as $orphans ){
       
  1802 			foreach ( $orphans as $op ) {
       
  1803 				if ( $count >= $end )
       
  1804 					break;
       
  1805 				if ( $count >= $start )
       
  1806 					echo "\t" . display_page_row( $op, 0 );
       
  1807 				$count++;
       
  1808 			}
       
  1809 		}
       
  1810 	}
       
  1811 }
       
  1812 
       
  1813 /*
       
  1814  * Given a top level page ID, display the nested hierarchy of sub-pages
       
  1815  * together with paging support
       
  1816  */
       
  1817 /**
       
  1818  * {@internal Missing Short Description}}
       
  1819  *
       
  1820  * @since unknown
       
  1821  *
       
  1822  * @param unknown_type $children_pages
       
  1823  * @param unknown_type $count
       
  1824  * @param unknown_type $parent
       
  1825  * @param unknown_type $level
       
  1826  * @param unknown_type $pagenum
       
  1827  * @param unknown_type $per_page
       
  1828  */
       
  1829 function _page_rows( &$children_pages, &$count, $parent, $level, $pagenum, $per_page ) {
       
  1830 
       
  1831 	if ( ! isset( $children_pages[$parent] ) )
       
  1832 		return;
       
  1833 
       
  1834 	$start = ($pagenum - 1) * $per_page;
       
  1835 	$end = $start + $per_page;
       
  1836 
       
  1837 	foreach ( $children_pages[$parent] as $page ) {
       
  1838 
       
  1839 		if ( $count >= $end )
       
  1840 			break;
       
  1841 
       
  1842 		// If the page starts in a subtree, print the parents.
       
  1843 		if ( $count == $start && $page->post_parent > 0 ) {
       
  1844 			$my_parents = array();
       
  1845 			$my_parent = $page->post_parent;
       
  1846 			while ( $my_parent) {
       
  1847 				$my_parent = get_post($my_parent);
       
  1848 				$my_parents[] = $my_parent;
       
  1849 				if ( !$my_parent->post_parent )
       
  1850 					break;
       
  1851 				$my_parent = $my_parent->post_parent;
       
  1852 			}
       
  1853 			$num_parents = count($my_parents);
       
  1854 			while( $my_parent = array_pop($my_parents) ) {
       
  1855 				echo "\t" . display_page_row( $my_parent, $level - $num_parents );
       
  1856 				$num_parents--;
       
  1857 			}
       
  1858 		}
       
  1859 
       
  1860 		if ( $count >= $start )
       
  1861 			echo "\t" . display_page_row( $page, $level );
       
  1862 
       
  1863 		$count++;
       
  1864 
       
  1865 		_page_rows( $children_pages, $count, $page->ID, $level + 1, $pagenum, $per_page );
       
  1866 	}
       
  1867 
       
  1868 	unset( $children_pages[$parent] ); //required in order to keep track of orphans
       
  1869 }
       
  1870 
       
  1871 /**
       
  1872  * {@internal Missing Short Description}}
       
  1873  *
       
  1874  * @since unknown
       
  1875  *
       
  1876  * @param unknown_type $user_object
       
  1877  * @param unknown_type $style
       
  1878  * @param unknown_type $role
       
  1879  * @return unknown
       
  1880  */
       
  1881 function user_row( $user_object, $style = '', $role = '' ) {
       
  1882 	global $wp_roles;
       
  1883 
       
  1884 	$current_user = wp_get_current_user();
       
  1885 
       
  1886 	if ( !( is_object( $user_object) && is_a( $user_object, 'WP_User' ) ) )
       
  1887 		$user_object = new WP_User( (int) $user_object );
       
  1888 	$email = $user_object->user_email;
       
  1889 	$url = $user_object->user_url;
       
  1890 	$short_url = str_replace( 'http://', '', $url );
       
  1891 	$short_url = str_replace( 'www.', '', $short_url );
       
  1892 	if ('/' == substr( $short_url, -1 ))
       
  1893 		$short_url = substr( $short_url, 0, -1 );
       
  1894 	if ( strlen( $short_url ) > 35 )
       
  1895 		$short_url = substr( $short_url, 0, 32 ).'...';
       
  1896 	$numposts = get_usernumposts( $user_object->ID );
       
  1897 	$checkbox = '';
       
  1898 	// Check if the user for this row is editable
       
  1899 	if ( current_user_can( 'edit_user', $user_object->ID ) ) {
       
  1900 		// Set up the user editing link
       
  1901 		// TODO: make profile/user-edit determination a seperate function
       
  1902 		if ($current_user->ID == $user_object->ID) {
       
  1903 			$edit_link = 'profile.php';
       
  1904 		} else {
       
  1905 			$edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( esc_url( stripslashes( $_SERVER['REQUEST_URI'] ) ) ), "user-edit.php?user_id=$user_object->ID" ) );
       
  1906 		}
       
  1907 		$edit = "<strong><a href=\"$edit_link\">$user_object->user_login</a></strong><br />";
       
  1908 
       
  1909 		// Set up the hover actions for this user
       
  1910 		$actions = array();
       
  1911 		$actions['edit'] = '<a href="' . $edit_link . '">' . __('Edit') . '</a>';
       
  1912 		if ( $current_user->ID != $user_object->ID )
       
  1913 			$actions['delete'] = "<a class='submitdelete' href='" . wp_nonce_url("users.php?action=delete&amp;user=$user_object->ID", 'bulk-users') . "'>" . __('Delete') . "</a>";
       
  1914 		$actions = apply_filters('user_row_actions', $actions, $user_object);
       
  1915 		$action_count = count($actions);
       
  1916 		$i = 0;
       
  1917 		$edit .= '<div class="row-actions">';
       
  1918 		foreach ( $actions as $action => $link ) {
       
  1919 			++$i;
       
  1920 			( $i == $action_count ) ? $sep = '' : $sep = ' | ';
       
  1921 			$edit .= "<span class='$action'>$link$sep</span>";
       
  1922 		}
       
  1923 		$edit .= '</div>';
       
  1924 
       
  1925 		// Set up the checkbox (because the user is editable, otherwise its empty)
       
  1926 		$checkbox = "<input type='checkbox' name='users[]' id='user_{$user_object->ID}' class='$role' value='{$user_object->ID}' />";
       
  1927 
       
  1928 	} else {
       
  1929 		$edit = '<strong>' . $user_object->user_login . '</strong>';
       
  1930 	}
       
  1931 	$role_name = isset($wp_roles->role_names[$role]) ? translate_user_role($wp_roles->role_names[$role] ) : __('None');
       
  1932 	$r = "<tr id='user-$user_object->ID'$style>";
       
  1933 	$columns = get_column_headers('users');
       
  1934 	$hidden = get_hidden_columns('users');
       
  1935 	$avatar = get_avatar( $user_object->ID, 32 );
       
  1936 	foreach ( $columns as $column_name => $column_display_name ) {
       
  1937 		$class = "class=\"$column_name column-$column_name\"";
       
  1938 
       
  1939 		$style = '';
       
  1940 		if ( in_array($column_name, $hidden) )
       
  1941 			$style = ' style="display:none;"';
       
  1942 
       
  1943 		$attributes = "$class$style";
       
  1944 
       
  1945 		switch ($column_name) {
       
  1946 			case 'cb':
       
  1947 				$r .= "<th scope='row' class='check-column'>$checkbox</th>";
       
  1948 				break;
       
  1949 			case 'username':
       
  1950 				$r .= "<td $attributes>$avatar $edit</td>";
       
  1951 				break;
       
  1952 			case 'name':
       
  1953 				$r .= "<td $attributes>$user_object->first_name $user_object->last_name</td>";
       
  1954 				break;
       
  1955 			case 'email':
       
  1956 				$r .= "<td $attributes><a href='mailto:$email' title='" . sprintf( __('e-mail: %s' ), $email ) . "'>$email</a></td>";
       
  1957 				break;
       
  1958 			case 'role':
       
  1959 				$r .= "<td $attributes>$role_name</td>";
       
  1960 				break;
       
  1961 			case 'posts':
       
  1962 				$attributes = 'class="posts column-posts num"' . $style;
       
  1963 				$r .= "<td $attributes>";
       
  1964 				if ( $numposts > 0 ) {
       
  1965 					$r .= "<a href='edit.php?author=$user_object->ID' title='" . __( 'View posts by this author' ) . "' class='edit'>";
       
  1966 					$r .= $numposts;
       
  1967 					$r .= '</a>';
       
  1968 				} else {
       
  1969 					$r .= 0;
       
  1970 				}
       
  1971 				$r .= "</td>";
       
  1972 				break;
       
  1973 			default:
       
  1974 				$r .= "<td $attributes>";
       
  1975 				$r .= apply_filters('manage_users_custom_column', '', $column_name, $user_object->ID);
       
  1976 				$r .= "</td>";
       
  1977 		}
       
  1978 	}
       
  1979 	$r .= '</tr>';
       
  1980 
       
  1981 	return $r;
       
  1982 }
       
  1983 
       
  1984 /**
       
  1985  * {@internal Missing Short Description}}
       
  1986  *
       
  1987  * @since unknown
       
  1988  *
       
  1989  * @param unknown_type $status
       
  1990  * @param unknown_type $s
       
  1991  * @param unknown_type $start
       
  1992  * @param unknown_type $num
       
  1993  * @param unknown_type $post
       
  1994  * @param unknown_type $type
       
  1995  * @return unknown
       
  1996  */
       
  1997 function _wp_get_comment_list( $status = '', $s = false, $start, $num, $post = 0, $type = '' ) {
       
  1998 	global $wpdb;
       
  1999 
       
  2000 	$start = abs( (int) $start );
       
  2001 	$num = (int) $num;
       
  2002 	$post = (int) $post;
       
  2003 	$count = wp_count_comments();
       
  2004 	$index = '';
       
  2005 
       
  2006 	if ( 'moderated' == $status ) {
       
  2007 		$approved = "comment_approved = '0'";
       
  2008 		$total = $count->moderated;
       
  2009 	} elseif ( 'approved' == $status ) {
       
  2010 		$approved = "comment_approved = '1'";
       
  2011 		$total = $count->approved;
       
  2012 	} elseif ( 'spam' == $status ) {
       
  2013 		$approved = "comment_approved = 'spam'";
       
  2014 		$total = $count->spam;
       
  2015 	} else {
       
  2016 		$approved = "( comment_approved = '0' OR comment_approved = '1' )";
       
  2017 		$total = $count->moderated + $count->approved;
       
  2018 		$index = 'USE INDEX (comment_date_gmt)';
       
  2019 	}
       
  2020 
       
  2021 	if ( $post ) {
       
  2022 		$total = '';
       
  2023 		$post = " AND comment_post_ID = '$post'";
       
  2024 		$orderby = "ORDER BY comment_date_gmt ASC LIMIT $start, $num";
       
  2025 	} else {
       
  2026 		$post = '';
       
  2027 		$orderby = "ORDER BY comment_date_gmt DESC LIMIT $start, $num";
       
  2028 	}
       
  2029 
       
  2030 	if ( 'comment' == $type )
       
  2031 		$typesql = "AND comment_type = ''";
       
  2032 	elseif ( 'pingback' == $type )
       
  2033 		$typesql = "AND comment_type = 'pingback'";
       
  2034 	elseif ( 'trackback' == $type )
       
  2035 		$typesql = "AND comment_type = 'trackback'";
       
  2036 	elseif ( 'pings' == $type )
       
  2037 		$typesql = "AND ( comment_type = 'pingback' OR comment_type = 'trackback' )";
       
  2038 	else
       
  2039 		$typesql = '';
       
  2040 
       
  2041 	if ( !empty($type) )
       
  2042 		$total = '';
       
  2043 
       
  2044 	if ( $s ) {
       
  2045 		$total = '';
       
  2046 		$s = $wpdb->escape($s);
       
  2047 		$query = "FROM $wpdb->comments WHERE
       
  2048 			(comment_author LIKE '%$s%' OR
       
  2049 			comment_author_email LIKE '%$s%' OR
       
  2050 			comment_author_url LIKE ('%$s%') OR
       
  2051 			comment_author_IP LIKE ('%$s%') OR
       
  2052 			comment_content LIKE ('%$s%') ) AND
       
  2053 			$approved
       
  2054 			$typesql";
       
  2055 	} else {
       
  2056 		$query = "FROM $wpdb->comments $index WHERE $approved $post $typesql";
       
  2057 	}
       
  2058 
       
  2059 	$comments = $wpdb->get_results("SELECT * $query $orderby");
       
  2060 	if ( '' === $total )
       
  2061 		$total = $wpdb->get_var("SELECT COUNT(comment_ID) $query");
       
  2062 
       
  2063 	update_comment_cache($comments);
       
  2064 
       
  2065 	return array($comments, $total);
       
  2066 }
       
  2067 
       
  2068 /**
       
  2069  * {@internal Missing Short Description}}
       
  2070  *
       
  2071  * @since unknown
       
  2072  *
       
  2073  * @param unknown_type $comment_id
       
  2074  * @param unknown_type $mode
       
  2075  * @param unknown_type $comment_status
       
  2076  * @param unknown_type $checkbox
       
  2077  */
       
  2078 function _wp_comment_row( $comment_id, $mode, $comment_status, $checkbox = true, $from_ajax = false ) {
       
  2079 	global $comment, $post, $_comment_pending_count;
       
  2080 	$comment = get_comment( $comment_id );
       
  2081 	$post = get_post($comment->comment_post_ID);
       
  2082 	$the_comment_status = wp_get_comment_status($comment->comment_ID);
       
  2083 	$user_can = current_user_can('edit_post', $post->ID);
       
  2084 
       
  2085 	$author_url = get_comment_author_url();
       
  2086 	if ( 'http://' == $author_url )
       
  2087 		$author_url = '';
       
  2088 	$author_url_display = preg_replace('|http://(www\.)?|i', '', $author_url);
       
  2089 	if ( strlen($author_url_display) > 50 )
       
  2090 		$author_url_display = substr($author_url_display, 0, 49) . '...';
       
  2091 
       
  2092 	$ptime = date('G', strtotime( $comment->comment_date ) );
       
  2093 	if ( ( abs(time() - $ptime) ) < 86400 )
       
  2094 		$ptime = sprintf( __('%s ago'), human_time_diff( $ptime ) );
       
  2095 	else
       
  2096 		$ptime = mysql2date(__('Y/m/d \a\t g:i A'), $comment->comment_date );
       
  2097 
       
  2098 	$delete_url = esc_url( wp_nonce_url( "comment.php?action=deletecomment&p=$post->ID&c=$comment->comment_ID", "delete-comment_$comment->comment_ID" ) );
       
  2099 	$approve_url = esc_url( wp_nonce_url( "comment.php?action=approvecomment&p=$post->ID&c=$comment->comment_ID", "approve-comment_$comment->comment_ID" ) );
       
  2100 	$unapprove_url = esc_url( wp_nonce_url( "comment.php?action=unapprovecomment&p=$post->ID&c=$comment->comment_ID", "unapprove-comment_$comment->comment_ID" ) );
       
  2101 	$spam_url = esc_url( wp_nonce_url( "comment.php?action=deletecomment&dt=spam&p=$post->ID&c=$comment->comment_ID", "delete-comment_$comment->comment_ID" ) );
       
  2102 
       
  2103 	echo "<tr id='comment-$comment->comment_ID' class='$the_comment_status'>";
       
  2104 	$columns = get_column_headers('edit-comments');
       
  2105 	$hidden = get_hidden_columns('edit-comments');
       
  2106 	foreach ( $columns as $column_name => $column_display_name ) {
       
  2107 		$class = "class=\"$column_name column-$column_name\"";
       
  2108 
       
  2109 		$style = '';
       
  2110 		if ( in_array($column_name, $hidden) )
       
  2111 			$style = ' style="display:none;"';
       
  2112 
       
  2113 		$attributes = "$class$style";
       
  2114 
       
  2115 		switch ($column_name) {
       
  2116 			case 'cb':
       
  2117 				if ( !$checkbox ) break;
       
  2118 				echo '<th scope="row" class="check-column">';
       
  2119 				if ( $user_can ) echo "<input type='checkbox' name='delete_comments[]' value='$comment->comment_ID' />";
       
  2120 				echo '</th>';
       
  2121 				break;
       
  2122 			case 'comment':
       
  2123 				echo "<td $attributes>";
       
  2124 				echo '<div id="submitted-on">';
       
  2125 				printf(__('Submitted on <a href="%1$s">%2$s at %3$s</a>'), get_comment_link($comment->comment_ID), get_comment_date(__('Y/m/d')), get_comment_date(__('g:ia')));
       
  2126 				echo '</div>';
       
  2127 				comment_text(); ?>
       
  2128 				<div id="inline-<?php echo $comment->comment_ID; ?>" class="hidden">
       
  2129 				<textarea class="comment" rows="3" cols="10"><?php echo $comment->comment_content; ?></textarea>
       
  2130 				<div class="author-email"><?php if ( $user_can ) echo esc_attr( $comment->comment_author_email ); ?></div>
       
  2131 				<div class="author"><?php if ( $user_can ) echo esc_attr( $comment->comment_author ); ?></div>
       
  2132 				<div class="author-url"><?php echo esc_attr( $comment->comment_author_url ); ?></div>
       
  2133 				<div class="comment_status"><?php echo $comment->comment_approved; ?></div>
       
  2134 				</div>
       
  2135 				<?php
       
  2136 				$actions = array();
       
  2137 
       
  2138 				if ( $user_can ) {
       
  2139 					$actions['approve'] = "<a href='$approve_url' class='dim:the-comment-list:comment-$comment->comment_ID:unapproved:e7e7d3:e7e7d3:new=approved vim-a' title='" . __( 'Approve this comment' ) . "'>" . __( 'Approve' ) . '</a>';
       
  2140 					$actions['unapprove'] = "<a href='$unapprove_url' class='dim:the-comment-list:comment-$comment->comment_ID:unapproved:e7e7d3:e7e7d3:new=unapproved vim-u' title='" . __( 'Unapprove this comment' ) . "'>" . __( 'Unapprove' ) . '</a>';
       
  2141 					if ( $comment_status && 'all' != $comment_status ) { // not looking at all comments
       
  2142 						if ( 'approved' == $the_comment_status ) {
       
  2143 							$actions['unapprove'] = "<a href='$unapprove_url' class='delete:the-comment-list:comment-$comment->comment_ID:e7e7d3:action=dim-comment&amp;new=unapproved vim-u vim-destructive' title='" . __( 'Unapprove this comment' ) . "'>" . __( 'Unapprove' ) . '</a>';
       
  2144 							unset($actions['approve']);
       
  2145 						} else {
       
  2146 							$actions['approve'] = "<a href='$approve_url' class='delete:the-comment-list:comment-$comment->comment_ID:e7e7d3:action=dim-comment&amp;new=approved vim-a vim-destructive' title='" . __( 'Approve this comment' ) . "'>" . __( 'Approve' ) . '</a>';
       
  2147 							unset($actions['unapprove']);
       
  2148 						}
       
  2149 					}
       
  2150 					if ( 'spam' != $the_comment_status )
       
  2151 						$actions['spam'] = "<a href='$spam_url' class='delete:the-comment-list:comment-$comment->comment_ID::spam=1 vim-s vim-destructive' title='" . __( 'Mark this comment as spam' ) . "'>" . /* translators: mark as spam link */ _x( 'Spam', 'verb' ) . '</a>';
       
  2152 					$actions['delete'] = "<a href='$delete_url' class='delete:the-comment-list:comment-$comment->comment_ID delete vim-d vim-destructive'>" . __('Delete') . '</a>';
       
  2153 					$actions['edit'] = "<a href='comment.php?action=editcomment&amp;c={$comment->comment_ID}' title='" . __('Edit comment') . "'>". __('Edit') . '</a>';
       
  2154 					$actions['quickedit'] = '<a onclick="commentReply.open(\''.$comment->comment_ID.'\',\''.$post->ID.'\',\'edit\');return false;" class="vim-q" title="'.__('Quick Edit').'" href="#">' . __('Quick&nbsp;Edit') . '</a>';
       
  2155 					if ( 'spam' != $the_comment_status )
       
  2156 						$actions['reply'] = '<a onclick="commentReply.open(\''.$comment->comment_ID.'\',\''.$post->ID.'\');return false;" class="vim-r" title="'.__('Reply to this comment').'" href="#">' . __('Reply') . '</a>';
       
  2157 
       
  2158 					$actions = apply_filters( 'comment_row_actions', $actions, $comment );
       
  2159 
       
  2160 					$i = 0;
       
  2161 					echo '<div class="row-actions">';
       
  2162 					foreach ( $actions as $action => $link ) {
       
  2163 						++$i;
       
  2164 						( ( ('approve' == $action || 'unapprove' == $action) && 2 === $i ) || 1 === $i ) ? $sep = '' : $sep = ' | ';
       
  2165 
       
  2166 						// Reply and quickedit need a hide-if-no-js span when not added with ajax
       
  2167 						if ( ('reply' == $action || 'quickedit' == $action) && ! $from_ajax )
       
  2168 							$action .= ' hide-if-no-js';
       
  2169 
       
  2170 						echo "<span class='$action'>$sep$link</span>";
       
  2171 					}
       
  2172 					echo '</div>';
       
  2173 				}
       
  2174 
       
  2175 				echo '</td>';
       
  2176 				break;
       
  2177 			case 'author':
       
  2178 				echo "<td $attributes><strong>"; comment_author(); echo '</strong><br />';
       
  2179 				if ( !empty($author_url) )
       
  2180 					echo "<a title='$author_url' href='$author_url'>$author_url_display</a><br />";
       
  2181 				if ( $user_can ) {
       
  2182 					if ( !empty($comment->comment_author_email) ) {
       
  2183 						comment_author_email_link();
       
  2184 						echo '<br />';
       
  2185 					}
       
  2186 					echo '<a href="edit-comments.php?s=';
       
  2187 					comment_author_IP();
       
  2188 					echo '&amp;mode=detail';
       
  2189 					if ( 'spam' == $comment_status )
       
  2190 						echo '&amp;comment_status=spam';
       
  2191 					echo '">';
       
  2192 					comment_author_IP();
       
  2193 					echo '</a>';
       
  2194 				} //current_user_can
       
  2195 				echo '</td>';
       
  2196 				break;
       
  2197 			case 'date':
       
  2198 				echo "<td $attributes>" . get_comment_date(__('Y/m/d \a\t g:ia')) . '</td>';
       
  2199 				break;
       
  2200 			case 'response':
       
  2201 				if ( 'single' !== $mode ) {
       
  2202 					if ( isset( $_comment_pending_count[$post->ID] ) ) {
       
  2203 						$pending_comments = absint( $_comment_pending_count[$post->ID] );
       
  2204 					} else {
       
  2205 						$_comment_pending_count_temp = (array) get_pending_comments_num( array( $post->ID ) );
       
  2206 						$pending_comments = $_comment_pending_count[$post->ID] = $_comment_pending_count_temp[$post->ID];
       
  2207 					}
       
  2208 					if ( $user_can ) {
       
  2209 						$post_link = "<a href='" . get_edit_post_link($post->ID) . "'>";
       
  2210 						$post_link .= get_the_title($post->ID) . '</a>';
       
  2211 					} else {
       
  2212 						$post_link = get_the_title($post->ID);
       
  2213 					}
       
  2214 					echo "<td $attributes>\n";
       
  2215 					echo '<div class="response-links"><span class="post-com-count-wrapper">';
       
  2216 					echo $post_link . '<br />';
       
  2217 					$pending_phrase = sprintf( __('%s pending'), number_format( $pending_comments ) );
       
  2218 					if ( $pending_comments )
       
  2219 						echo '<strong>';
       
  2220 					comments_number("<a href='edit-comments.php?p=$post->ID' title='$pending_phrase' class='post-com-count'><span class='comment-count'>" . /* translators: comment count link */ _x('0', 'comment count') . '</span></a>', "<a href='edit-comments.php?p=$post->ID' title='$pending_phrase' class='post-com-count'><span class='comment-count'>" . /* translators: comment count link */ _x('1', 'comment count') . '</span></a>', "<a href='edit-comments.php?p=$post->ID' title='$pending_phrase' class='post-com-count'><span class='comment-count'>" . /* translators: comment count link: % will be substituted by comment count */ _x('%', 'comment count') . '</span></a>');
       
  2221 					if ( $pending_comments )
       
  2222 						echo '</strong>';
       
  2223 					echo '</span> ';
       
  2224 					echo "<a href='" . get_permalink( $post->ID ) . "'>#</a>";
       
  2225 					echo '</div>';
       
  2226 					if ( 'attachment' == $post->post_type && ( $thumb = wp_get_attachment_image( $post->ID, array(80, 60), true ) ) )
       
  2227 						echo $thumb;
       
  2228 					echo '</td>';
       
  2229 				}
       
  2230 				break;
       
  2231 			default:
       
  2232 				echo "<td $attributes>\n";
       
  2233 				do_action( 'manage_comments_custom_column', $column_name, $comment->comment_ID );
       
  2234 				echo "</td>\n";
       
  2235 				break;
       
  2236 		}
       
  2237 	}
       
  2238 	echo "</tr>\n";
       
  2239 }
       
  2240 
       
  2241 /**
       
  2242  * {@internal Missing Short Description}}
       
  2243  *
       
  2244  * @since unknown
       
  2245  *
       
  2246  * @param unknown_type $position
       
  2247  * @param unknown_type $checkbox
       
  2248  * @param unknown_type $mode
       
  2249  */
       
  2250 function wp_comment_reply($position = '1', $checkbox = false, $mode = 'single', $table_row = true) {
       
  2251 	global $current_user;
       
  2252 
       
  2253 	// allow plugin to replace the popup content
       
  2254 	$content = apply_filters( 'wp_comment_reply', '', array('position' => $position, 'checkbox' => $checkbox, 'mode' => $mode) );
       
  2255 
       
  2256 	if ( ! empty($content) ) {
       
  2257 		echo $content;
       
  2258 		return;
       
  2259 	}
       
  2260 
       
  2261 	$columns = get_column_headers('edit-comments');
       
  2262 	$hidden = array_intersect( array_keys( $columns ), array_filter( get_hidden_columns('edit-comments') ) );
       
  2263 	$col_count = count($columns) - count($hidden);
       
  2264 
       
  2265 ?>
       
  2266 <form method="get" action="">
       
  2267 <?php if ( $table_row ) : ?>
       
  2268 <table style="display:none;"><tbody id="com-reply"><tr id="replyrow"><td colspan="<?php echo $col_count; ?>">
       
  2269 <?php else : ?>
       
  2270 <div id="com-reply" style="display:none;"><div id="replyrow">
       
  2271 <?php endif; ?>
       
  2272 	<div id="replyhead" style="display:none;"><?php _e('Reply to Comment'); ?></div>
       
  2273 
       
  2274 	<div id="edithead" style="display:none;">
       
  2275 		<div class="inside">
       
  2276 		<label for="author"><?php _e('Name') ?></label>
       
  2277 		<input type="text" name="newcomment_author" size="50" value="" tabindex="101" id="author" />
       
  2278 		</div>
       
  2279 
       
  2280 		<div class="inside">
       
  2281 		<label for="author-email"><?php _e('E-mail') ?></label>
       
  2282 		<input type="text" name="newcomment_author_email" size="50" value="" tabindex="102" id="author-email" />
       
  2283 		</div>
       
  2284 
       
  2285 		<div class="inside">
       
  2286 		<label for="author-url"><?php _e('URL') ?></label>
       
  2287 		<input type="text" id="author-url" name="newcomment_author_url" size="103" value="" tabindex="103" />
       
  2288 		</div>
       
  2289 		<div style="clear:both;"></div>
       
  2290 	</div>
       
  2291 
       
  2292 	<div id="replycontainer"><textarea rows="8" cols="40" name="replycontent" tabindex="104" id="replycontent"></textarea></div>
       
  2293 
       
  2294 	<p id="replysubmit" class="submit">
       
  2295 	<a href="#comments-form" class="cancel button-secondary alignleft" tabindex="106"><?php _e('Cancel'); ?></a>
       
  2296 	<a href="#comments-form" class="save button-primary alignright" tabindex="104">
       
  2297 	<span id="savebtn" style="display:none;"><?php _e('Update Comment'); ?></span>
       
  2298 	<span id="replybtn" style="display:none;"><?php _e('Submit Reply'); ?></span></a>
       
  2299 	<img class="waiting" style="display:none;" src="images/wpspin_light.gif" alt="" />
       
  2300 	<span class="error" style="display:none;"></span>
       
  2301 	<br class="clear" />
       
  2302 	</p>
       
  2303 
       
  2304 	<input type="hidden" name="user_ID" id="user_ID" value="<?php echo $current_user->ID; ?>" />
       
  2305 	<input type="hidden" name="action" id="action" value="" />
       
  2306 	<input type="hidden" name="comment_ID" id="comment_ID" value="" />
       
  2307 	<input type="hidden" name="comment_post_ID" id="comment_post_ID" value="" />
       
  2308 	<input type="hidden" name="status" id="status" value="" />
       
  2309 	<input type="hidden" name="position" id="position" value="<?php echo $position; ?>" />
       
  2310 	<input type="hidden" name="checkbox" id="checkbox" value="<?php echo $checkbox ? 1 : 0; ?>" />
       
  2311 	<input type="hidden" name="mode" id="mode" value="<?php echo esc_attr($mode); ?>" />
       
  2312 	<?php wp_nonce_field( 'replyto-comment', '_ajax_nonce', false ); ?>
       
  2313 	<?php wp_comment_form_unfiltered_html_nonce(); ?>
       
  2314 <?php if ( $table_row ) : ?>
       
  2315 </td></tr></tbody></table>
       
  2316 <?php else : ?>
       
  2317 </div></div>
       
  2318 <?php endif; ?>
       
  2319 </form>
       
  2320 <?php
       
  2321 }
       
  2322 
       
  2323 /**
       
  2324  * {@internal Missing Short Description}}
       
  2325  *
       
  2326  * @since unknown
       
  2327  *
       
  2328  * @param unknown_type $currentcat
       
  2329  * @param unknown_type $currentparent
       
  2330  * @param unknown_type $parent
       
  2331  * @param unknown_type $level
       
  2332  * @param unknown_type $categories
       
  2333  * @return unknown
       
  2334  */
       
  2335 function wp_dropdown_cats( $currentcat = 0, $currentparent = 0, $parent = 0, $level = 0, $categories = 0 ) {
       
  2336 	if (!$categories )
       
  2337 		$categories = get_categories( array('hide_empty' => 0) );
       
  2338 
       
  2339 	if ( $categories ) {
       
  2340 		foreach ( $categories as $category ) {
       
  2341 			if ( $currentcat != $category->term_id && $parent == $category->parent) {
       
  2342 				$pad = str_repeat( '&#8211; ', $level );
       
  2343 				$category->name = esc_html( $category->name );
       
  2344 				echo "\n\t<option value='$category->term_id'";
       
  2345 				if ( $currentparent == $category->term_id )
       
  2346 					echo " selected='selected'";
       
  2347 				echo ">$pad$category->name</option>";
       
  2348 				wp_dropdown_cats( $currentcat, $currentparent, $category->term_id, $level +1, $categories );
       
  2349 			}
       
  2350 		}
       
  2351 	} else {
       
  2352 		return false;
       
  2353 	}
       
  2354 }
       
  2355 
       
  2356 /**
       
  2357  * {@internal Missing Short Description}}
       
  2358  *
       
  2359  * @since unknown
       
  2360  *
       
  2361  * @param unknown_type $meta
       
  2362  */
       
  2363 function list_meta( $meta ) {
       
  2364 	// Exit if no meta
       
  2365 	if ( ! $meta ) {
       
  2366 		echo '
       
  2367 <table id="list-table" style="display: none;">
       
  2368 	<thead>
       
  2369 	<tr>
       
  2370 		<th class="left">' . __( 'Name' ) . '</th>
       
  2371 		<th>' . __( 'Value' ) . '</th>
       
  2372 	</tr>
       
  2373 	</thead>
       
  2374 	<tbody id="the-list" class="list:meta">
       
  2375 	<tr><td></td></tr>
       
  2376 	</tbody>
       
  2377 </table>'; //TBODY needed for list-manipulation JS
       
  2378 		return;
       
  2379 	}
       
  2380 	$count = 0;
       
  2381 ?>
       
  2382 <table id="list-table">
       
  2383 	<thead>
       
  2384 	<tr>
       
  2385 		<th class="left"><?php _e( 'Name' ) ?></th>
       
  2386 		<th><?php _e( 'Value' ) ?></th>
       
  2387 	</tr>
       
  2388 	</thead>
       
  2389 	<tbody id='the-list' class='list:meta'>
       
  2390 <?php
       
  2391 	foreach ( $meta as $entry )
       
  2392 		echo _list_meta_row( $entry, $count );
       
  2393 ?>
       
  2394 	</tbody>
       
  2395 </table>
       
  2396 <?php
       
  2397 }
       
  2398 
       
  2399 /**
       
  2400  * {@internal Missing Short Description}}
       
  2401  *
       
  2402  * @since unknown
       
  2403  *
       
  2404  * @param unknown_type $entry
       
  2405  * @param unknown_type $count
       
  2406  * @return unknown
       
  2407  */
       
  2408 function _list_meta_row( $entry, &$count ) {
       
  2409 	static $update_nonce = false;
       
  2410 	if ( !$update_nonce )
       
  2411 		$update_nonce = wp_create_nonce( 'add-meta' );
       
  2412 
       
  2413 	$r = '';
       
  2414 	++ $count;
       
  2415 	if ( $count % 2 )
       
  2416 		$style = 'alternate';
       
  2417 	else
       
  2418 		$style = '';
       
  2419 	if ('_' == $entry['meta_key'] { 0 } )
       
  2420 		$style .= ' hidden';
       
  2421 
       
  2422 	if ( is_serialized( $entry['meta_value'] ) ) {
       
  2423 		if ( is_serialized_string( $entry['meta_value'] ) ) {
       
  2424 			// this is a serialized string, so we should display it
       
  2425 			$entry['meta_value'] = maybe_unserialize( $entry['meta_value'] );
       
  2426 		} else {
       
  2427 			// this is a serialized array/object so we should NOT display it
       
  2428 			--$count;
       
  2429 			return;
       
  2430 		}
       
  2431 	}
       
  2432 
       
  2433 	$entry['meta_key'] = esc_attr($entry['meta_key']);
       
  2434 	$entry['meta_value'] = htmlspecialchars($entry['meta_value']); // using a <textarea />
       
  2435 	$entry['meta_id'] = (int) $entry['meta_id'];
       
  2436 
       
  2437 	$delete_nonce = wp_create_nonce( 'delete-meta_' . $entry['meta_id'] );
       
  2438 
       
  2439 	$r .= "\n\t<tr id='meta-{$entry['meta_id']}' class='$style'>";
       
  2440 	$r .= "\n\t\t<td class='left'><label class='screen-reader-text' for='meta[{$entry['meta_id']}][key]'>" . __( 'Key' ) . "</label><input name='meta[{$entry['meta_id']}][key]' id='meta[{$entry['meta_id']}][key]' tabindex='6' type='text' size='20' value='{$entry['meta_key']}' />";
       
  2441 
       
  2442 	$r .= "\n\t\t<div class='submit'><input name='deletemeta[{$entry['meta_id']}]' type='submit' ";
       
  2443 	$r .= "class='delete:the-list:meta-{$entry['meta_id']}::_ajax_nonce=$delete_nonce deletemeta' tabindex='6' value='". esc_attr__( 'Delete' ) ."' />";
       
  2444 	$r .= "\n\t\t<input name='updatemeta' type='submit' tabindex='6' value='". esc_attr__( 'Update' ) ."' class='add:the-list:meta-{$entry['meta_id']}::_ajax_nonce=$update_nonce updatemeta' /></div>";
       
  2445 	$r .= wp_nonce_field( 'change-meta', '_ajax_nonce', false, false );
       
  2446 	$r .= "</td>";
       
  2447 
       
  2448 	$r .= "\n\t\t<td><label class='screen-reader-text' for='meta[{$entry['meta_id']}][value]'>" . __( 'Value' ) . "</label><textarea name='meta[{$entry['meta_id']}][value]' id='meta[{$entry['meta_id']}][value]' tabindex='6' rows='2' cols='30'>{$entry['meta_value']}</textarea></td>\n\t</tr>";
       
  2449 	return $r;
       
  2450 }
       
  2451 
       
  2452 /**
       
  2453  * {@internal Missing Short Description}}
       
  2454  *
       
  2455  * @since unknown
       
  2456  */
       
  2457 function meta_form() {
       
  2458 	global $wpdb;
       
  2459 	$limit = (int) apply_filters( 'postmeta_form_limit', 30 );
       
  2460 	$keys = $wpdb->get_col( "
       
  2461 		SELECT meta_key
       
  2462 		FROM $wpdb->postmeta
       
  2463 		GROUP BY meta_key
       
  2464 		HAVING meta_key NOT LIKE '\_%'
       
  2465 		ORDER BY LOWER(meta_key)
       
  2466 		LIMIT $limit" );
       
  2467 	if ( $keys )
       
  2468 		natcasesort($keys);
       
  2469 ?>
       
  2470 <p><strong><?php _e( 'Add new custom field:' ) ?></strong></p>
       
  2471 <table id="newmeta">
       
  2472 <thead>
       
  2473 <tr>
       
  2474 <th class="left"><label for="metakeyselect"><?php _e( 'Name' ) ?></label></th>
       
  2475 <th><label for="metavalue"><?php _e( 'Value' ) ?></label></th>
       
  2476 </tr>
       
  2477 </thead>
       
  2478 
       
  2479 <tbody>
       
  2480 <tr>
       
  2481 <td id="newmetaleft" class="left">
       
  2482 <?php if ( $keys ) { ?>
       
  2483 <select id="metakeyselect" name="metakeyselect" tabindex="7">
       
  2484 <option value="#NONE#"><?php _e( '- Select -' ); ?></option>
       
  2485 <?php
       
  2486 
       
  2487 	foreach ( $keys as $key ) {
       
  2488 		$key = esc_attr( $key );
       
  2489 		echo "\n<option value='" . esc_attr($key) . "'>$key</option>";
       
  2490 	}
       
  2491 ?>
       
  2492 </select>
       
  2493 <input class="hide-if-js" type="text" id="metakeyinput" name="metakeyinput" tabindex="7" value="" />
       
  2494 <a href="#postcustomstuff" class="hide-if-no-js" onclick="jQuery('#metakeyinput, #metakeyselect, #enternew, #cancelnew').toggle();return false;">
       
  2495 <span id="enternew"><?php _e('Enter new'); ?></span>
       
  2496 <span id="cancelnew" class="hidden"><?php _e('Cancel'); ?></span></a>
       
  2497 <?php } else { ?>
       
  2498 <input type="text" id="metakeyinput" name="metakeyinput" tabindex="7" value="" />
       
  2499 <?php } ?>
       
  2500 </td>
       
  2501 <td><textarea id="metavalue" name="metavalue" rows="2" cols="25" tabindex="8"></textarea></td>
       
  2502 </tr>
       
  2503 
       
  2504 <tr><td colspan="2" class="submit">
       
  2505 <input type="submit" id="addmetasub" name="addmeta" class="add:the-list:newmeta" tabindex="9" value="<?php esc_attr_e( 'Add Custom Field' ) ?>" />
       
  2506 <?php wp_nonce_field( 'add-meta', '_ajax_nonce', false ); ?>
       
  2507 </td></tr>
       
  2508 </tbody>
       
  2509 </table>
       
  2510 <?php
       
  2511 
       
  2512 }
       
  2513 
       
  2514 /**
       
  2515  * {@internal Missing Short Description}}
       
  2516  *
       
  2517  * @since unknown
       
  2518  *
       
  2519  * @param unknown_type $edit
       
  2520  * @param unknown_type $for_post
       
  2521  * @param unknown_type $tab_index
       
  2522  * @param unknown_type $multi
       
  2523  */
       
  2524 function touch_time( $edit = 1, $for_post = 1, $tab_index = 0, $multi = 0 ) {
       
  2525 	global $wp_locale, $post, $comment;
       
  2526 
       
  2527 	if ( $for_post )
       
  2528 		$edit = ( in_array($post->post_status, array('draft', 'pending') ) && (!$post->post_date_gmt || '0000-00-00 00:00:00' == $post->post_date_gmt ) ) ? false : true;
       
  2529 
       
  2530 	$tab_index_attribute = '';
       
  2531 	if ( (int) $tab_index > 0 )
       
  2532 		$tab_index_attribute = " tabindex=\"$tab_index\"";
       
  2533 
       
  2534 	// echo '<label for="timestamp" style="display: block;"><input type="checkbox" class="checkbox" name="edit_date" value="1" id="timestamp"'.$tab_index_attribute.' /> '.__( 'Edit timestamp' ).'</label><br />';
       
  2535 
       
  2536 	$time_adj = time() + (get_option( 'gmt_offset' ) * 3600 );
       
  2537 	$post_date = ($for_post) ? $post->post_date : $comment->comment_date;
       
  2538 	$jj = ($edit) ? mysql2date( 'd', $post_date, false ) : gmdate( 'd', $time_adj );
       
  2539 	$mm = ($edit) ? mysql2date( 'm', $post_date, false ) : gmdate( 'm', $time_adj );
       
  2540 	$aa = ($edit) ? mysql2date( 'Y', $post_date, false ) : gmdate( 'Y', $time_adj );
       
  2541 	$hh = ($edit) ? mysql2date( 'H', $post_date, false ) : gmdate( 'H', $time_adj );
       
  2542 	$mn = ($edit) ? mysql2date( 'i', $post_date, false ) : gmdate( 'i', $time_adj );
       
  2543 	$ss = ($edit) ? mysql2date( 's', $post_date, false ) : gmdate( 's', $time_adj );
       
  2544 
       
  2545 	$cur_jj = gmdate( 'd', $time_adj );
       
  2546 	$cur_mm = gmdate( 'm', $time_adj );
       
  2547 	$cur_aa = gmdate( 'Y', $time_adj );
       
  2548 	$cur_hh = gmdate( 'H', $time_adj );
       
  2549 	$cur_mn = gmdate( 'i', $time_adj );
       
  2550 
       
  2551 	$month = "<select " . ( $multi ? '' : 'id="mm" ' ) . "name=\"mm\"$tab_index_attribute>\n";
       
  2552 	for ( $i = 1; $i < 13; $i = $i +1 ) {
       
  2553 		$month .= "\t\t\t" . '<option value="' . zeroise($i, 2) . '"';
       
  2554 		if ( $i == $mm )
       
  2555 			$month .= ' selected="selected"';
       
  2556 		$month .= '>' . $wp_locale->get_month_abbrev( $wp_locale->get_month( $i ) ) . "</option>\n";
       
  2557 	}
       
  2558 	$month .= '</select>';
       
  2559 
       
  2560 	$day = '<input type="text" ' . ( $multi ? '' : 'id="jj" ' ) . 'name="jj" value="' . $jj . '" size="2" maxlength="2"' . $tab_index_attribute . ' autocomplete="off" />';
       
  2561 	$year = '<input type="text" ' . ( $multi ? '' : 'id="aa" ' ) . 'name="aa" value="' . $aa . '" size="4" maxlength="4"' . $tab_index_attribute . ' autocomplete="off" />';
       
  2562 	$hour = '<input type="text" ' . ( $multi ? '' : 'id="hh" ' ) . 'name="hh" value="' . $hh . '" size="2" maxlength="2"' . $tab_index_attribute . ' autocomplete="off" />';
       
  2563 	$minute = '<input type="text" ' . ( $multi ? '' : 'id="mn" ' ) . 'name="mn" value="' . $mn . '" size="2" maxlength="2"' . $tab_index_attribute . ' autocomplete="off" />';
       
  2564 	/* translators: 1: month input, 2: day input, 3: year input, 4: hour input, 5: minute input */
       
  2565 	printf(__('%1$s%2$s, %3$s @ %4$s : %5$s'), $month, $day, $year, $hour, $minute);
       
  2566 
       
  2567 	echo '<input type="hidden" id="ss" name="ss" value="' . $ss . '" />';
       
  2568 
       
  2569 	if ( $multi ) return;
       
  2570 
       
  2571 	echo "\n\n";
       
  2572 	foreach ( array('mm', 'jj', 'aa', 'hh', 'mn') as $timeunit ) {
       
  2573 		echo '<input type="hidden" id="hidden_' . $timeunit . '" name="hidden_' . $timeunit . '" value="' . $$timeunit . '" />' . "\n";
       
  2574 		$cur_timeunit = 'cur_' . $timeunit;
       
  2575 		echo '<input type="hidden" id="'. $cur_timeunit . '" name="'. $cur_timeunit . '" value="' . $$cur_timeunit . '" />' . "\n";
       
  2576 	}
       
  2577 ?>
       
  2578 
       
  2579 <p>
       
  2580 <a href="#edit_timestamp" class="save-timestamp hide-if-no-js button"><?php _e('OK'); ?></a>
       
  2581 <a href="#edit_timestamp" class="cancel-timestamp hide-if-no-js"><?php _e('Cancel'); ?></a>
       
  2582 </p>
       
  2583 <?php
       
  2584 }
       
  2585 
       
  2586 /**
       
  2587  * {@internal Missing Short Description}}
       
  2588  *
       
  2589  * @since unknown
       
  2590  *
       
  2591  * @param unknown_type $default
       
  2592  */
       
  2593 function page_template_dropdown( $default = '' ) {
       
  2594 	$templates = get_page_templates();
       
  2595 	ksort( $templates );
       
  2596 	foreach (array_keys( $templates ) as $template )
       
  2597 		: if ( $default == $templates[$template] )
       
  2598 			$selected = " selected='selected'";
       
  2599 		else
       
  2600 			$selected = '';
       
  2601 	echo "\n\t<option value='".$templates[$template]."' $selected>$template</option>";
       
  2602 	endforeach;
       
  2603 }
       
  2604 
       
  2605 /**
       
  2606  * {@internal Missing Short Description}}
       
  2607  *
       
  2608  * @since unknown
       
  2609  *
       
  2610  * @param unknown_type $default
       
  2611  * @param unknown_type $parent
       
  2612  * @param unknown_type $level
       
  2613  * @return unknown
       
  2614  */
       
  2615 function parent_dropdown( $default = 0, $parent = 0, $level = 0 ) {
       
  2616 	global $wpdb, $post_ID;
       
  2617 	$items = $wpdb->get_results( $wpdb->prepare("SELECT ID, post_parent, post_title FROM $wpdb->posts WHERE post_parent = %d AND post_type = 'page' ORDER BY menu_order", $parent) );
       
  2618 
       
  2619 	if ( $items ) {
       
  2620 		foreach ( $items as $item ) {
       
  2621 			// A page cannot be its own parent.
       
  2622 			if (!empty ( $post_ID ) ) {
       
  2623 				if ( $item->ID == $post_ID ) {
       
  2624 					continue;
       
  2625 				}
       
  2626 			}
       
  2627 			$pad = str_repeat( '&nbsp;', $level * 3 );
       
  2628 			if ( $item->ID == $default)
       
  2629 				$current = ' selected="selected"';
       
  2630 			else
       
  2631 				$current = '';
       
  2632 
       
  2633 			echo "\n\t<option class='level-$level' value='$item->ID'$current>$pad " . esc_html($item->post_title) . "</option>";
       
  2634 			parent_dropdown( $default, $item->ID, $level +1 );
       
  2635 		}
       
  2636 	} else {
       
  2637 		return false;
       
  2638 	}
       
  2639 }
       
  2640 
       
  2641 /**
       
  2642  * {@internal Missing Short Description}}
       
  2643  *
       
  2644  * @since unknown
       
  2645  */
       
  2646 function browse_happy() {
       
  2647 	$getit = __( 'WordPress recommends a better browser' );
       
  2648 	echo '
       
  2649 		<div id="bh"><a href="http://browsehappy.com/" title="'.$getit.'"><img src="images/browse-happy.gif" alt="Browse Happy" /></a></div>
       
  2650 ';
       
  2651 }
       
  2652 
       
  2653 /**
       
  2654  * {@internal Missing Short Description}}
       
  2655  *
       
  2656  * @since unknown
       
  2657  *
       
  2658  * @param unknown_type $id
       
  2659  * @return unknown
       
  2660  */
       
  2661 function the_attachment_links( $id = false ) {
       
  2662 	$id = (int) $id;
       
  2663 	$post = & get_post( $id );
       
  2664 
       
  2665 	if ( $post->post_type != 'attachment' )
       
  2666 		return false;
       
  2667 
       
  2668 	$icon = get_attachment_icon( $post->ID );
       
  2669 	$attachment_data = wp_get_attachment_metadata( $id );
       
  2670 	$thumb = isset( $attachment_data['thumb'] );
       
  2671 ?>
       
  2672 <form id="the-attachment-links">
       
  2673 <table>
       
  2674 	<col />
       
  2675 	<col class="widefat" />
       
  2676 	<tr>
       
  2677 		<th scope="row"><?php _e( 'URL' ) ?></th>
       
  2678 		<td><textarea rows="1" cols="40" type="text" class="attachmentlinks" readonly="readonly"><?php echo wp_get_attachment_url(); ?></textarea></td>
       
  2679 	</tr>
       
  2680 <?php if ( $icon ) : ?>
       
  2681 	<tr>
       
  2682 		<th scope="row"><?php $thumb ? _e( 'Thumbnail linked to file' ) : _e( 'Image linked to file' ); ?></th>
       
  2683 		<td><textarea rows="1" cols="40" type="text" class="attachmentlinks" readonly="readonly"><a href="<?php echo wp_get_attachment_url(); ?>"><?php echo $icon ?></a></textarea></td>
       
  2684 	</tr>
       
  2685 	<tr>
       
  2686 		<th scope="row"><?php $thumb ? _e( 'Thumbnail linked to page' ) : _e( 'Image linked to page' ); ?></th>
       
  2687 		<td><textarea rows="1" cols="40" type="text" class="attachmentlinks" readonly="readonly"><a href="<?php echo get_attachment_link( $post->ID ) ?>" rel="attachment wp-att-<?php echo $post->ID; ?>"><?php echo $icon ?></a></textarea></td>
       
  2688 	</tr>
       
  2689 <?php else : ?>
       
  2690 	<tr>
       
  2691 		<th scope="row"><?php _e( 'Link to file' ) ?></th>
       
  2692 		<td><textarea rows="1" cols="40" type="text" class="attachmentlinks" readonly="readonly"><a href="<?php echo wp_get_attachment_url(); ?>" class="attachmentlink"><?php echo basename( wp_get_attachment_url() ); ?></a></textarea></td>
       
  2693 	</tr>
       
  2694 	<tr>
       
  2695 		<th scope="row"><?php _e( 'Link to page' ) ?></th>
       
  2696 		<td><textarea rows="1" cols="40" type="text" class="attachmentlinks" readonly="readonly"><a href="<?php echo get_attachment_link( $post->ID ) ?>" rel="attachment wp-att-<?php echo $post->ID ?>"><?php the_title(); ?></a></textarea></td>
       
  2697 	</tr>
       
  2698 <?php endif; ?>
       
  2699 </table>
       
  2700 </form>
       
  2701 <?php
       
  2702 }
       
  2703 
       
  2704 
       
  2705 /**
       
  2706  * Print out <option> html elements for role selectors based on $wp_roles
       
  2707  *
       
  2708  * @package WordPress
       
  2709  * @subpackage Administration
       
  2710  * @since 2.1
       
  2711  *
       
  2712  * @uses $wp_roles
       
  2713  * @param string $default slug for the role that should be already selected
       
  2714  */
       
  2715 function wp_dropdown_roles( $selected = false ) {
       
  2716 	global $wp_roles;
       
  2717 	$p = '';
       
  2718 	$r = '';
       
  2719 
       
  2720 	$editable_roles = get_editable_roles();
       
  2721 
       
  2722 	foreach( $editable_roles as $role => $details ) {
       
  2723 		$name = translate_user_role($details['name'] );
       
  2724 		if ( $selected == $role ) // Make default first in list
       
  2725 			$p = "\n\t<option selected='selected' value='" . esc_attr($role) . "'>$name</option>";
       
  2726 		else
       
  2727 			$r .= "\n\t<option value='" . esc_attr($role) . "'>$name</option>";
       
  2728 	}
       
  2729 	echo $p . $r;
       
  2730 }
       
  2731 
       
  2732 /**
       
  2733  * {@internal Missing Short Description}}
       
  2734  *
       
  2735  * @since unknown
       
  2736  *
       
  2737  * @param unknown_type $size
       
  2738  * @return unknown
       
  2739  */
       
  2740 function wp_convert_hr_to_bytes( $size ) {
       
  2741 	$size = strtolower($size);
       
  2742 	$bytes = (int) $size;
       
  2743 	if ( strpos($size, 'k') !== false )
       
  2744 		$bytes = intval($size) * 1024;
       
  2745 	elseif ( strpos($size, 'm') !== false )
       
  2746 		$bytes = intval($size) * 1024 * 1024;
       
  2747 	elseif ( strpos($size, 'g') !== false )
       
  2748 		$bytes = intval($size) * 1024 * 1024 * 1024;
       
  2749 	return $bytes;
       
  2750 }
       
  2751 
       
  2752 /**
       
  2753  * {@internal Missing Short Description}}
       
  2754  *
       
  2755  * @since unknown
       
  2756  *
       
  2757  * @param unknown_type $bytes
       
  2758  * @return unknown
       
  2759  */
       
  2760 function wp_convert_bytes_to_hr( $bytes ) {
       
  2761 	$units = array( 0 => 'B', 1 => 'kB', 2 => 'MB', 3 => 'GB' );
       
  2762 	$log = log( $bytes, 1024 );
       
  2763 	$power = (int) $log;
       
  2764 	$size = pow(1024, $log - $power);
       
  2765 	return $size . $units[$power];
       
  2766 }
       
  2767 
       
  2768 /**
       
  2769  * {@internal Missing Short Description}}
       
  2770  *
       
  2771  * @since unknown
       
  2772  *
       
  2773  * @return unknown
       
  2774  */
       
  2775 function wp_max_upload_size() {
       
  2776 	$u_bytes = wp_convert_hr_to_bytes( ini_get( 'upload_max_filesize' ) );
       
  2777 	$p_bytes = wp_convert_hr_to_bytes( ini_get( 'post_max_size' ) );
       
  2778 	$bytes = apply_filters( 'upload_size_limit', min($u_bytes, $p_bytes), $u_bytes, $p_bytes );
       
  2779 	return $bytes;
       
  2780 }
       
  2781 
       
  2782 /**
       
  2783  * {@internal Missing Short Description}}
       
  2784  *
       
  2785  * @since unknown
       
  2786  *
       
  2787  * @param unknown_type $action
       
  2788  */
       
  2789 function wp_import_upload_form( $action ) {
       
  2790 	$bytes = apply_filters( 'import_upload_size_limit', wp_max_upload_size() );
       
  2791 	$size = wp_convert_bytes_to_hr( $bytes );
       
  2792 	$upload_dir = wp_upload_dir();
       
  2793 	if ( ! empty( $upload_dir['error'] ) ) :
       
  2794 		?><div class="error"><p><?php _e('Before you can upload your import file, you will need to fix the following error:'); ?></p>
       
  2795 		<p><strong><?php echo $upload_dir['error']; ?></strong></p></div><?php
       
  2796 	else :
       
  2797 ?>
       
  2798 <form enctype="multipart/form-data" id="import-upload-form" method="post" action="<?php echo esc_attr($action) ?>">
       
  2799 <p>
       
  2800 <?php wp_nonce_field('import-upload'); ?>
       
  2801 <label for="upload"><?php _e( 'Choose a file from your computer:' ); ?></label> (<?php printf( __('Maximum size: %s' ), $size ); ?>)
       
  2802 <input type="file" id="upload" name="import" size="25" />
       
  2803 <input type="hidden" name="action" value="save" />
       
  2804 <input type="hidden" name="max_file_size" value="<?php echo $bytes; ?>" />
       
  2805 </p>
       
  2806 <p class="submit">
       
  2807 <input type="submit" class="button" value="<?php esc_attr_e( 'Upload file and import' ); ?>" />
       
  2808 </p>
       
  2809 </form>
       
  2810 <?php
       
  2811 	endif;
       
  2812 }
       
  2813 
       
  2814 /**
       
  2815  * {@internal Missing Short Description}}
       
  2816  *
       
  2817  * @since unknown
       
  2818  */
       
  2819 function wp_remember_old_slug() {
       
  2820 	global $post;
       
  2821 	$name = esc_attr($post->post_name); // just in case
       
  2822 	if ( strlen($name) )
       
  2823 		echo '<input type="hidden" id="wp-old-slug" name="wp-old-slug" value="' . $name . '" />';
       
  2824 }
       
  2825 
       
  2826 /**
       
  2827  * Add a meta box to an edit form.
       
  2828  *
       
  2829  * @since 2.5.0
       
  2830  *
       
  2831  * @param string $id String for use in the 'id' attribute of tags.
       
  2832  * @param string $title Title of the meta box.
       
  2833  * @param string $callback Function that fills the box with the desired content. The function should echo its output.
       
  2834  * @param string $page The type of edit page on which to show the box (post, page, link).
       
  2835  * @param string $context The context within the page where the boxes should show ('normal', 'advanced').
       
  2836  * @param string $priority The priority within the context where the boxes should show ('high', 'low').
       
  2837  */
       
  2838 function add_meta_box($id, $title, $callback, $page, $context = 'advanced', $priority = 'default', $callback_args=null) {
       
  2839 	global $wp_meta_boxes;
       
  2840 
       
  2841 	if ( !isset($wp_meta_boxes) )
       
  2842 		$wp_meta_boxes = array();
       
  2843 	if ( !isset($wp_meta_boxes[$page]) )
       
  2844 		$wp_meta_boxes[$page] = array();
       
  2845 	if ( !isset($wp_meta_boxes[$page][$context]) )
       
  2846 		$wp_meta_boxes[$page][$context] = array();
       
  2847 
       
  2848 	foreach ( array_keys($wp_meta_boxes[$page]) as $a_context ) {
       
  2849 	foreach ( array('high', 'core', 'default', 'low') as $a_priority ) {
       
  2850 		if ( !isset($wp_meta_boxes[$page][$a_context][$a_priority][$id]) )
       
  2851 			continue;
       
  2852 
       
  2853 		// If a core box was previously added or removed by a plugin, don't add.
       
  2854 		if ( 'core' == $priority ) {
       
  2855 			// If core box previously deleted, don't add
       
  2856 			if ( false === $wp_meta_boxes[$page][$a_context][$a_priority][$id] )
       
  2857 				return;
       
  2858 			// If box was added with default priority, give it core priority to maintain sort order
       
  2859 			if ( 'default' == $a_priority ) {
       
  2860 				$wp_meta_boxes[$page][$a_context]['core'][$id] = $wp_meta_boxes[$page][$a_context]['default'][$id];
       
  2861 				unset($wp_meta_boxes[$page][$a_context]['default'][$id]);
       
  2862 			}
       
  2863 			return;
       
  2864 		}
       
  2865 		// If no priority given and id already present, use existing priority
       
  2866 		if ( empty($priority) ) {
       
  2867 			$priority = $a_priority;
       
  2868 		// else if we're adding to the sorted priortiy, we don't know the title or callback. Glab them from the previously added context/priority.
       
  2869 		} elseif ( 'sorted' == $priority ) {
       
  2870 			$title = $wp_meta_boxes[$page][$a_context][$a_priority][$id]['title'];
       
  2871 			$callback = $wp_meta_boxes[$page][$a_context][$a_priority][$id]['callback'];
       
  2872 			$callback_args = $wp_meta_boxes[$page][$a_context][$a_priority][$id]['args'];
       
  2873 		}
       
  2874 		// An id can be in only one priority and one context
       
  2875 		if ( $priority != $a_priority || $context != $a_context )
       
  2876 			unset($wp_meta_boxes[$page][$a_context][$a_priority][$id]);
       
  2877 	}
       
  2878 	}
       
  2879 
       
  2880 	if ( empty($priority) )
       
  2881 		$priority = 'low';
       
  2882 
       
  2883 	if ( !isset($wp_meta_boxes[$page][$context][$priority]) )
       
  2884 		$wp_meta_boxes[$page][$context][$priority] = array();
       
  2885 
       
  2886 	$wp_meta_boxes[$page][$context][$priority][$id] = array('id' => $id, 'title' => $title, 'callback' => $callback, 'args' => $callback_args);
       
  2887 }
       
  2888 
       
  2889 /**
       
  2890  * {@internal Missing Short Description}}
       
  2891  *
       
  2892  * @since unknown
       
  2893  *
       
  2894  * @param unknown_type $page
       
  2895  * @param unknown_type $context
       
  2896  * @param unknown_type $object
       
  2897  * @return int number of meta_boxes
       
  2898  */
       
  2899 function do_meta_boxes($page, $context, $object) {
       
  2900 	global $wp_meta_boxes;
       
  2901 	static $already_sorted = false;
       
  2902 
       
  2903 	//do_action('do_meta_boxes', $page, $context, $object);
       
  2904 
       
  2905 	$hidden = get_hidden_meta_boxes($page);
       
  2906 
       
  2907 	echo "<div id='$context-sortables' class='meta-box-sortables'>\n";
       
  2908 
       
  2909 	$i = 0;
       
  2910 	do {
       
  2911 		// Grab the ones the user has manually sorted. Pull them out of their previous context/priority and into the one the user chose
       
  2912 		if ( !$already_sorted && $sorted = get_user_option( "meta-box-order_$page", 0, false ) ) {
       
  2913 			foreach ( $sorted as $box_context => $ids )
       
  2914 				foreach ( explode(',', $ids) as $id )
       
  2915 					if ( $id )
       
  2916 						add_meta_box( $id, null, null, $page, $box_context, 'sorted' );
       
  2917 		}
       
  2918 		$already_sorted = true;
       
  2919 
       
  2920 		if ( !isset($wp_meta_boxes) || !isset($wp_meta_boxes[$page]) || !isset($wp_meta_boxes[$page][$context]) )
       
  2921 			break;
       
  2922 
       
  2923 		foreach ( array('high', 'sorted', 'core', 'default', 'low') as $priority ) {
       
  2924 			if ( isset($wp_meta_boxes[$page][$context][$priority]) ) {
       
  2925 				foreach ( (array) $wp_meta_boxes[$page][$context][$priority] as $box ) {
       
  2926 					if ( false == $box || ! $box['title'] )
       
  2927 						continue;
       
  2928 					$i++;
       
  2929 					$style = '';
       
  2930 					if ( in_array($box['id'], $hidden) )
       
  2931 						$style = 'style="display:none;"';
       
  2932 					echo '<div id="' . $box['id'] . '" class="postbox ' . postbox_classes($box['id'], $page) . '" ' . $style . '>' . "\n";
       
  2933 					echo '<div class="handlediv" title="' . __('Click to toggle') . '"><br /></div>';
       
  2934 					echo "<h3 class='hndle'><span>{$box['title']}</span></h3>\n";
       
  2935 					echo '<div class="inside">' . "\n";
       
  2936 					call_user_func($box['callback'], $object, $box);
       
  2937 					echo "</div>\n";
       
  2938 					echo "</div>\n";
       
  2939 				}
       
  2940 			}
       
  2941 		}
       
  2942 	} while(0);
       
  2943 
       
  2944 	echo "</div>";
       
  2945 
       
  2946 	return $i;
       
  2947 
       
  2948 }
       
  2949 
       
  2950 /**
       
  2951  * Remove a meta box from an edit form.
       
  2952  *
       
  2953  * @since 2.6.0
       
  2954  *
       
  2955  * @param string $id String for use in the 'id' attribute of tags.
       
  2956  * @param string $page The type of edit page on which to show the box (post, page, link).
       
  2957  * @param string $context The context within the page where the boxes should show ('normal', 'advanced').
       
  2958  */
       
  2959 function remove_meta_box($id, $page, $context) {
       
  2960 	global $wp_meta_boxes;
       
  2961 
       
  2962 	if ( !isset($wp_meta_boxes) )
       
  2963 		$wp_meta_boxes = array();
       
  2964 	if ( !isset($wp_meta_boxes[$page]) )
       
  2965 		$wp_meta_boxes[$page] = array();
       
  2966 	if ( !isset($wp_meta_boxes[$page][$context]) )
       
  2967 		$wp_meta_boxes[$page][$context] = array();
       
  2968 
       
  2969 	foreach ( array('high', 'core', 'default', 'low') as $priority )
       
  2970 		$wp_meta_boxes[$page][$context][$priority][$id] = false;
       
  2971 }
       
  2972 
       
  2973 /**
       
  2974  * {@internal Missing Short Description}}
       
  2975  *
       
  2976  * @since unknown
       
  2977  *
       
  2978  * @param unknown_type $page
       
  2979  */
       
  2980 function meta_box_prefs($page) {
       
  2981 	global $wp_meta_boxes;
       
  2982 
       
  2983 	if ( empty($wp_meta_boxes[$page]) )
       
  2984 		return;
       
  2985 
       
  2986 	$hidden = get_hidden_meta_boxes($page);
       
  2987 
       
  2988 	foreach ( array_keys($wp_meta_boxes[$page]) as $context ) {
       
  2989 		foreach ( array_keys($wp_meta_boxes[$page][$context]) as $priority ) {
       
  2990 			foreach ( $wp_meta_boxes[$page][$context][$priority] as $box ) {
       
  2991 				if ( false == $box || ! $box['title'] )
       
  2992 					continue;
       
  2993 				// Submit box cannot be hidden
       
  2994 				if ( 'submitdiv' == $box['id'] || 'linksubmitdiv' == $box['id'] )
       
  2995 					continue;
       
  2996 				$box_id = $box['id'];
       
  2997 				echo '<label for="' . $box_id . '-hide">';
       
  2998 				echo '<input class="hide-postbox-tog" name="' . $box_id . '-hide" type="checkbox" id="' . $box_id . '-hide" value="' . $box_id . '"' . (! in_array($box_id, $hidden) ? ' checked="checked"' : '') . ' />';
       
  2999 				echo "{$box['title']}</label>\n";
       
  3000 			}
       
  3001 		}
       
  3002 	}
       
  3003 }
       
  3004 
       
  3005 function get_hidden_meta_boxes($page) {
       
  3006 	$hidden = (array) get_user_option( "meta-box-hidden_$page", 0, false );
       
  3007 
       
  3008 	// Hide slug boxes by default
       
  3009 	if ( empty($hidden[0]) ) {
       
  3010 		if ( 'page' == $page )
       
  3011 			$hidden = array('pageslugdiv');
       
  3012 		elseif ( 'post' == $page )
       
  3013 			$hidden = array('slugdiv');
       
  3014 	}
       
  3015 
       
  3016 	return $hidden;
       
  3017 }
       
  3018 
       
  3019 /**
       
  3020  * Add a new section to a settings page.
       
  3021  *
       
  3022  * @since 2.7.0
       
  3023  *
       
  3024  * @param string $id String for use in the 'id' attribute of tags.
       
  3025  * @param string $title Title of the section.
       
  3026  * @param string $callback Function that fills the section with the desired content. The function should echo its output.
       
  3027  * @param string $page The type of settings page on which to show the section (general, reading, writing, ...).
       
  3028  */
       
  3029 function add_settings_section($id, $title, $callback, $page) {
       
  3030 	global $wp_settings_sections;
       
  3031 
       
  3032 	if ( !isset($wp_settings_sections) )
       
  3033 		$wp_settings_sections = array();
       
  3034 	if ( !isset($wp_settings_sections[$page]) )
       
  3035 		$wp_settings_sections[$page] = array();
       
  3036 	if ( !isset($wp_settings_sections[$page][$id]) )
       
  3037 		$wp_settings_sections[$page][$id] = array();
       
  3038 
       
  3039 	$wp_settings_sections[$page][$id] = array('id' => $id, 'title' => $title, 'callback' => $callback);
       
  3040 }
       
  3041 
       
  3042 /**
       
  3043  * Add a new field to a settings page.
       
  3044  *
       
  3045  * @since 2.7.0
       
  3046  *
       
  3047  * @param string $id String for use in the 'id' attribute of tags.
       
  3048  * @param string $title Title of the field.
       
  3049  * @param string $callback Function that fills the field with the desired content. The function should echo its output.
       
  3050  * @param string $page The type of settings page on which to show the field (general, reading, writing, ...).
       
  3051  * @param string $section The section of the settingss page in which to show the box (default, ...).
       
  3052  * @param array $args Additional arguments
       
  3053  */
       
  3054 function add_settings_field($id, $title, $callback, $page, $section = 'default', $args = array()) {
       
  3055 	global $wp_settings_fields;
       
  3056 
       
  3057 	if ( !isset($wp_settings_fields) )
       
  3058 		$wp_settings_fields = array();
       
  3059 	if ( !isset($wp_settings_fields[$page]) )
       
  3060 		$wp_settings_fields[$page] = array();
       
  3061 	if ( !isset($wp_settings_fields[$page][$section]) )
       
  3062 		$wp_settings_fields[$page][$section] = array();
       
  3063 
       
  3064 	$wp_settings_fields[$page][$section][$id] = array('id' => $id, 'title' => $title, 'callback' => $callback, 'args' => $args);
       
  3065 }
       
  3066 
       
  3067 /**
       
  3068  * {@internal Missing Short Description}}
       
  3069  *
       
  3070  * @since unknown
       
  3071  *
       
  3072  * @param unknown_type $page
       
  3073  */
       
  3074 function do_settings_sections($page) {
       
  3075 	global $wp_settings_sections, $wp_settings_fields;
       
  3076 
       
  3077 	if ( !isset($wp_settings_sections) || !isset($wp_settings_sections[$page]) )
       
  3078 		return;
       
  3079 
       
  3080 	foreach ( (array) $wp_settings_sections[$page] as $section ) {
       
  3081 		echo "<h3>{$section['title']}</h3>\n";
       
  3082 		call_user_func($section['callback'], $section);
       
  3083 		if ( !isset($wp_settings_fields) || !isset($wp_settings_fields[$page]) || !isset($wp_settings_fields[$page][$section['id']]) )
       
  3084 			continue;
       
  3085 		echo '<table class="form-table">';
       
  3086 		do_settings_fields($page, $section['id']);
       
  3087 		echo '</table>';
       
  3088 	}
       
  3089 }
       
  3090 
       
  3091 /**
       
  3092  * {@internal Missing Short Description}}
       
  3093  *
       
  3094  * @since unknown
       
  3095  *
       
  3096  * @param unknown_type $page
       
  3097  * @param unknown_type $section
       
  3098  */
       
  3099 function do_settings_fields($page, $section) {
       
  3100 	global $wp_settings_fields;
       
  3101 
       
  3102 	if ( !isset($wp_settings_fields) || !isset($wp_settings_fields[$page]) || !isset($wp_settings_fields[$page][$section]) )
       
  3103 		return;
       
  3104 
       
  3105 	foreach ( (array) $wp_settings_fields[$page][$section] as $field ) {
       
  3106 		echo '<tr valign="top">';
       
  3107 		if ( !empty($field['args']['label_for']) )
       
  3108 			echo '<th scope="row"><label for="' . $field['args']['label_for'] . '">' . $field['title'] . '</label></th>';
       
  3109 		else
       
  3110 			echo '<th scope="row">' . $field['title'] . '</th>';
       
  3111 		echo '<td>';
       
  3112 		call_user_func($field['callback']);
       
  3113 		echo '</td>';
       
  3114 		echo '</tr>';
       
  3115 	}
       
  3116 }
       
  3117 
       
  3118 /**
       
  3119  * {@internal Missing Short Description}}
       
  3120  *
       
  3121  * @since unknown
       
  3122  *
       
  3123  * @param unknown_type $page
       
  3124  */
       
  3125 function manage_columns_prefs($page) {
       
  3126 	$columns = get_column_headers($page);
       
  3127 
       
  3128 	$hidden = get_hidden_columns($page);
       
  3129 
       
  3130 	foreach ( $columns as $column => $title ) {
       
  3131 		// Can't hide these
       
  3132 		if ( 'cb' == $column || 'title' == $column || 'name' == $column || 'username' == $column || 'media' == $column || 'comment' == $column )
       
  3133 			continue;
       
  3134 		if ( empty($title) )
       
  3135 			continue;
       
  3136 
       
  3137 		if ( 'comments' == $column )
       
  3138 			$title = __('Comments');
       
  3139 		$id = "$column-hide";
       
  3140 		echo '<label for="' . $id . '">';
       
  3141 		echo '<input class="hide-column-tog" name="' . $id . '" type="checkbox" id="' . $id . '" value="' . $column . '"' . (! in_array($column, $hidden) ? ' checked="checked"' : '') . ' />';
       
  3142 		echo "$title</label>\n";
       
  3143 	}
       
  3144 }
       
  3145 
       
  3146 /**
       
  3147  * {@internal Missing Short Description}}
       
  3148  *
       
  3149  * @since unknown
       
  3150  *
       
  3151  * @param unknown_type $found_action
       
  3152  */
       
  3153 function find_posts_div($found_action = '') {
       
  3154 ?>
       
  3155 	<div id="find-posts" class="find-box" style="display:none;">
       
  3156 		<div id="find-posts-head" class="find-box-head"><?php _e('Find Posts or Pages'); ?></div>
       
  3157 		<div class="find-box-inside">
       
  3158 			<div class="find-box-search">
       
  3159 				<?php if ( $found_action ) { ?>
       
  3160 					<input type="hidden" name="found_action" value="<?php echo esc_attr($found_action); ?>" />
       
  3161 				<?php } ?>
       
  3162 
       
  3163 				<input type="hidden" name="affected" id="affected" value="" />
       
  3164 				<?php wp_nonce_field( 'find-posts', '_ajax_nonce', false ); ?>
       
  3165 				<label class="screen-reader-text" for="find-posts-input"><?php _e( 'Search' ); ?></label>
       
  3166 				<input type="text" id="find-posts-input" name="ps" value="" />
       
  3167 				<input type="button" onclick="findPosts.send();" value="<?php esc_attr_e( 'Search' ); ?>" class="button" /><br />
       
  3168 
       
  3169 				<input type="radio" name="find-posts-what" id="find-posts-posts" checked="checked" value="posts" />
       
  3170 				<label for="find-posts-posts"><?php _e( 'Posts' ); ?></label>
       
  3171 				<input type="radio" name="find-posts-what" id="find-posts-pages" value="pages" />
       
  3172 				<label for="find-posts-pages"><?php _e( 'Pages' ); ?></label>
       
  3173 			</div>
       
  3174 			<div id="find-posts-response"></div>
       
  3175 		</div>
       
  3176 		<div class="find-box-buttons">
       
  3177 			<input type="button" class="button alignleft" onclick="findPosts.close();" value="<?php esc_attr_e('Close'); ?>" />
       
  3178 			<input id="find-posts-submit" type="submit" class="button-primary alignright" value="<?php esc_attr_e('Select'); ?>" />
       
  3179 		</div>
       
  3180 	</div>
       
  3181 <?php
       
  3182 }
       
  3183 
       
  3184 /**
       
  3185  * Display the post password.
       
  3186  *
       
  3187  * The password is passed through {@link esc_attr()} to ensure that it
       
  3188  * is safe for placing in an html attribute.
       
  3189  *
       
  3190  * @uses attr
       
  3191  * @since 2.7.0
       
  3192  */
       
  3193 function the_post_password() {
       
  3194 	global $post;
       
  3195 	if ( isset( $post->post_password ) ) echo esc_attr( $post->post_password );
       
  3196 }
       
  3197 
       
  3198 /**
       
  3199  * {@internal Missing Short Description}}
       
  3200  *
       
  3201  * @since unknown
       
  3202  */
       
  3203 function favorite_actions( $screen = null ) {
       
  3204 	switch ( $screen ) {
       
  3205 		case 'post-new.php':
       
  3206 			$default_action = array('edit.php' => array(__('Edit Posts'), 'edit_posts'));
       
  3207 			break;
       
  3208 		case 'edit-pages.php':
       
  3209 			$default_action = array('page-new.php' => array(__('New Page'), 'edit_pages'));
       
  3210 			break;
       
  3211 		case 'page-new.php':
       
  3212 			$default_action = array('edit-pages.php' => array(__('Edit Pages'), 'edit_pages'));
       
  3213 			break;
       
  3214 		case 'upload.php':
       
  3215 			$default_action = array('media-new.php' => array(__('New Media'), 'upload_files'));
       
  3216 			break;
       
  3217 		case 'media-new.php':
       
  3218 			$default_action = array('upload.php' => array(__('Edit Media'), 'upload_files'));
       
  3219 			break;
       
  3220 		case 'link-manager.php':
       
  3221 			$default_action = array('link-add.php' => array(__('New Link'), 'manage_links'));
       
  3222 			break;
       
  3223 		case 'link-add.php':
       
  3224 			$default_action = array('link-manager.php' => array(__('Edit Links'), 'manage_links'));
       
  3225 			break;
       
  3226 		case 'users.php':
       
  3227 			$default_action = array('user-new.php' => array(__('New User'), 'create_users'));
       
  3228 			break;
       
  3229 		case 'user-new.php':
       
  3230 			$default_action = array('users.php' => array(__('Edit Users'), 'edit_users'));
       
  3231 			break;
       
  3232 		case 'plugins.php':
       
  3233 			$default_action = array('plugin-install.php' => array(__('Install Plugins'), 'install_plugins'));
       
  3234 			break;
       
  3235 		case 'plugin-install.php':
       
  3236 			$default_action = array('plugins.php' => array(__('Manage Plugins'), 'activate_plugins'));
       
  3237 			break;
       
  3238 		case 'themes.php':
       
  3239 			$default_action = array('theme-install.php' => array(__('Install Themes'), 'install_themes'));
       
  3240 			break;
       
  3241 		case 'theme-install.php':
       
  3242 			$default_action = array('themes.php' => array(__('Manage Themes'), 'switch_themes'));
       
  3243 			break;
       
  3244 		default:
       
  3245 			$default_action = array('post-new.php' => array(__('New Post'), 'edit_posts'));
       
  3246 			break;
       
  3247 	}
       
  3248 
       
  3249 	$actions = array(
       
  3250 		'post-new.php' => array(__('New Post'), 'edit_posts'),
       
  3251 		'edit.php?post_status=draft' => array(__('Drafts'), 'edit_posts'),
       
  3252 		'page-new.php' => array(__('New Page'), 'edit_pages'),
       
  3253 		'media-new.php' => array(__('Upload'), 'upload_files'),
       
  3254 		'edit-comments.php' => array(__('Comments'), 'moderate_comments')
       
  3255 		);
       
  3256 
       
  3257 	$default_key = array_keys($default_action);
       
  3258 	$default_key = $default_key[0];
       
  3259 	if ( isset($actions[$default_key]) )
       
  3260 		unset($actions[$default_key]);
       
  3261 	$actions = array_merge($default_action, $actions);
       
  3262 	$actions = apply_filters('favorite_actions', $actions);
       
  3263 
       
  3264 	$allowed_actions = array();
       
  3265 	foreach ( $actions as $action => $data ) {
       
  3266 		if ( current_user_can($data[1]) )
       
  3267 			$allowed_actions[$action] = $data[0];
       
  3268 	}
       
  3269 
       
  3270 	if ( empty($allowed_actions) )
       
  3271 		return;
       
  3272 
       
  3273 	$first = array_keys($allowed_actions);
       
  3274 	$first = $first[0];
       
  3275 	echo '<div id="favorite-actions">';
       
  3276 	echo '<div id="favorite-first"><a href="' . $first . '">' . $allowed_actions[$first] . '</a></div><div id="favorite-toggle"><br /></div>';
       
  3277 	echo '<div id="favorite-inside">';
       
  3278 
       
  3279 	array_shift($allowed_actions);
       
  3280 
       
  3281 	foreach ( $allowed_actions as $action => $label) {
       
  3282 		echo "<div class='favorite-action'><a href='$action'>";
       
  3283 		echo $label;
       
  3284 		echo "</a></div>\n";
       
  3285 	}
       
  3286 	echo "</div></div>\n";
       
  3287 }
       
  3288 
       
  3289 /**
       
  3290  * Get the post title.
       
  3291  *
       
  3292  * The post title is fetched and if it is blank then a default string is
       
  3293  * returned.
       
  3294  *
       
  3295  * @since 2.7.0
       
  3296  * @param int $id The post id. If not supplied the global $post is used.
       
  3297  *
       
  3298  */
       
  3299 function _draft_or_post_title($post_id = 0)
       
  3300 {
       
  3301 	$title = get_the_title($post_id);
       
  3302 	if ( empty($title) )
       
  3303 		$title = __('(no title)');
       
  3304 	return $title;
       
  3305 }
       
  3306 
       
  3307 /**
       
  3308  * Display the search query.
       
  3309  *
       
  3310  * A simple wrapper to display the "s" parameter in a GET URI. This function
       
  3311  * should only be used when {@link the_search_query()} cannot.
       
  3312  *
       
  3313  * @uses attr
       
  3314  * @since 2.7.0
       
  3315  *
       
  3316  */
       
  3317 function _admin_search_query() {
       
  3318 	echo isset($_GET['s']) ? esc_attr( stripslashes( $_GET['s'] ) ) : '';
       
  3319 }
       
  3320 
       
  3321 /**
       
  3322  * Generic Iframe header for use with Thickbox
       
  3323  *
       
  3324  * @since 2.7.0
       
  3325  * @param string $title Title of the Iframe page.
       
  3326  * @param bool $limit_styles Limit styles to colour-related styles only (unless others are enqueued).
       
  3327  *
       
  3328  */
       
  3329 function iframe_header( $title = '', $limit_styles = false ) {
       
  3330 ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
       
  3331 <html xmlns="http://www.w3.org/1999/xhtml" <?php do_action('admin_xml_ns'); ?> <?php language_attributes(); ?>>
       
  3332 <head>
       
  3333 <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php echo get_option('blog_charset'); ?>" />
       
  3334 <title><?php bloginfo('name') ?> &rsaquo; <?php echo $title ?> &#8212; <?php _e('WordPress'); ?></title>
       
  3335 <?php
       
  3336 wp_enqueue_style( 'global' );
       
  3337 if ( ! $limit_styles )
       
  3338 	wp_enqueue_style( 'wp-admin' );
       
  3339 wp_enqueue_style( 'colors' );
       
  3340 ?>
       
  3341 <script type="text/javascript">
       
  3342 //<![CDATA[
       
  3343 addLoadEvent = function(func){if(typeof jQuery!="undefined")jQuery(document).ready(func);else if(typeof wpOnload!='function'){wpOnload=func;}else{var oldonload=wpOnload;wpOnload=function(){oldonload();func();}}};
       
  3344 function tb_close(){var win=window.dialogArguments||opener||parent||top;win.tb_remove();}
       
  3345 //]]>
       
  3346 </script>
       
  3347 <?php
       
  3348 do_action('admin_print_styles');
       
  3349 do_action('admin_print_scripts');
       
  3350 do_action('admin_head');
       
  3351 ?>
       
  3352 </head>
       
  3353 <body<?php if ( isset($GLOBALS['body_id']) ) echo ' id="' . $GLOBALS['body_id'] . '"'; ?>>
       
  3354 <?php
       
  3355 }
       
  3356 
       
  3357 /**
       
  3358  * Generic Iframe footer for use with Thickbox
       
  3359  *
       
  3360  * @since 2.7.0
       
  3361  *
       
  3362  */
       
  3363 function iframe_footer() {
       
  3364 	//We're going to hide any footer output on iframe pages, but run the hooks anyway since they output Javascript or other needed content. ?>
       
  3365 	<div class="hidden">
       
  3366 <?php
       
  3367 	do_action('admin_footer', '');
       
  3368 	do_action('admin_print_footer_scripts'); ?>
       
  3369 	</div>
       
  3370 <script type="text/javascript">if(typeof wpOnload=="function")wpOnload();</script>
       
  3371 </body>
       
  3372 </html>
       
  3373 <?php
       
  3374 }
       
  3375 
       
  3376 function _post_states($post) {
       
  3377 	$post_states = array();
       
  3378 	if ( isset($_GET['post_status']) )
       
  3379 		$post_status = $_GET['post_status'];
       
  3380 	else
       
  3381 		$post_status = '';
       
  3382 
       
  3383 	if ( !empty($post->post_password) )
       
  3384 		$post_states[] = __('Password protected');
       
  3385 	if ( 'private' == $post->post_status && 'private' != $post_status )
       
  3386 		$post_states[] = __('Private');
       
  3387 	if ( 'draft' == $post->post_status && 'draft' != $post_status )
       
  3388 		$post_states[] = __('Draft');
       
  3389 	if ( 'pending' == $post->post_status && 'pending' != $post_status )
       
  3390 		/* translators: post state */
       
  3391 		$post_states[] = _x('Pending', 'post state');
       
  3392 	if ( is_sticky($post->ID) )
       
  3393 		$post_states[] = __('Sticky');
       
  3394 
       
  3395 	$post_states = apply_filters( 'display_post_states', $post_states );
       
  3396 
       
  3397 	if ( ! empty($post_states) ) {
       
  3398 		$state_count = count($post_states);
       
  3399 		$i = 0;
       
  3400 		echo ' - ';
       
  3401 		foreach ( $post_states as $state ) {
       
  3402 			++$i;
       
  3403 			( $i == $state_count ) ? $sep = '' : $sep = ', ';
       
  3404 			echo "<span class='post-state'>$state$sep</span>";
       
  3405 		}
       
  3406 	}
       
  3407 }
       
  3408 
       
  3409 function screen_meta($screen) {
       
  3410 	global $wp_meta_boxes, $_wp_contextual_help;
       
  3411 
       
  3412 	$screen = str_replace('.php', '', $screen);
       
  3413 	$screen = str_replace('-new', '', $screen);
       
  3414 	$screen = str_replace('-add', '', $screen);
       
  3415 	$screen = apply_filters('screen_meta_screen', $screen);
       
  3416 
       
  3417 	$column_screens = get_column_headers($screen);
       
  3418 	$meta_screens = array('index' => 'dashboard');
       
  3419 
       
  3420 	if ( isset($meta_screens[$screen]) )
       
  3421 		$screen = $meta_screens[$screen];
       
  3422 	$show_screen = false;
       
  3423 	$show_on_screen = false;
       
  3424 	if ( !empty($wp_meta_boxes[$screen]) || !empty($column_screens) ) {
       
  3425 		$show_screen = true;
       
  3426 		$show_on_screen = true;
       
  3427 	}
       
  3428 
       
  3429 	$screen_options = screen_options($screen);
       
  3430 	if ( $screen_options )
       
  3431 		$show_screen = true;
       
  3432 
       
  3433 	if ( !isset($_wp_contextual_help) )
       
  3434 		$_wp_contextual_help = array();
       
  3435 
       
  3436 	$settings = '';
       
  3437 
       
  3438 	switch ( $screen ) {
       
  3439 		case 'post':
       
  3440 			if ( !isset($_wp_contextual_help['post']) ) {
       
  3441 				$help = drag_drop_help();
       
  3442 				$help .= '<p>' . __('<a href="http://codex.wordpress.org/Writing_Posts" target="_blank">Writing Posts</a>') . '</p>';
       
  3443 				$_wp_contextual_help['post'] = $help;
       
  3444 			}
       
  3445 			break;
       
  3446 		case 'page':
       
  3447 			if ( !isset($_wp_contextual_help['page']) ) {
       
  3448 				$help = drag_drop_help();
       
  3449 				$_wp_contextual_help['page'] = $help;
       
  3450 			}
       
  3451 			break;
       
  3452 		case 'dashboard':
       
  3453 			if ( !isset($_wp_contextual_help['dashboard']) ) {
       
  3454 				$help = '<p>' . __('The modules on this screen can be arranged in several columns. You can select the number of columns from the Screen Options tab.') . "</p>\n";
       
  3455 				$help .= drag_drop_help();
       
  3456 				$_wp_contextual_help['dashboard'] = $help;
       
  3457 			}
       
  3458 			break;
       
  3459 		case 'link':
       
  3460 			if ( !isset($_wp_contextual_help['link']) ) {
       
  3461 				$help = drag_drop_help();
       
  3462 				$_wp_contextual_help['link'] = $help;
       
  3463 			}
       
  3464 			break;
       
  3465 		case 'options-general':
       
  3466 			if ( !isset($_wp_contextual_help['options-general']) )
       
  3467 				$_wp_contextual_help['options-general'] = __('<a href="http://codex.wordpress.org/Settings_General_SubPanel" target="_blank">General Settings</a>');
       
  3468 			break;
       
  3469 		case 'theme-install':
       
  3470 		case 'plugin-install':
       
  3471 			if ( ( !isset($_GET['tab']) || 'dashboard' == $_GET['tab'] ) && !isset($_wp_contextual_help[$screen]) ) {
       
  3472 				$help = plugins_search_help();
       
  3473 				$_wp_contextual_help[$screen] = $help;
       
  3474 			}
       
  3475 			break;
       
  3476 		case 'widgets':
       
  3477 			if ( !isset($_wp_contextual_help['widgets']) ) {
       
  3478 				$help = widgets_help();
       
  3479 				$_wp_contextual_help['widgets'] = $help;
       
  3480 			}
       
  3481 			$settings = '<p><a id="access-on" href="widgets.php?widgets-access=on">' . __('Enable accessibility mode') . '</a><a id="access-off" href="widgets.php?widgets-access=off">' . __('Disable accessibility mode') . "</a></p>\n";
       
  3482 			$show_screen = true;
       
  3483 			break;
       
  3484 	}
       
  3485 ?>
       
  3486 <div id="screen-meta">
       
  3487 <?php
       
  3488 	if ( $show_screen ) :
       
  3489 ?>
       
  3490 <div id="screen-options-wrap" class="hidden">
       
  3491 	<form id="adv-settings" action="" method="post">
       
  3492 <?php if ( $show_on_screen ) : ?>
       
  3493 	<h5><?php _e('Show on screen') ?></h5>
       
  3494 	<div class="metabox-prefs">
       
  3495 <?php
       
  3496 	if ( !meta_box_prefs($screen) && isset($column_screens) ) {
       
  3497 		manage_columns_prefs($screen);
       
  3498 	}
       
  3499 ?>
       
  3500 	<br class="clear" />
       
  3501 	</div>
       
  3502 <?php endif; ?>
       
  3503 <?php echo screen_layout($screen); ?>
       
  3504 <?php echo $screen_options; ?>
       
  3505 <?php echo $settings; ?>
       
  3506 <div><?php wp_nonce_field( 'screen-options-nonce', 'screenoptionnonce', false ); ?></div>
       
  3507 </form>
       
  3508 </div>
       
  3509 
       
  3510 <?php
       
  3511 	endif;
       
  3512 
       
  3513 	global $title;
       
  3514 
       
  3515 	$_wp_contextual_help = apply_filters('contextual_help_list', $_wp_contextual_help, $screen);
       
  3516 	?>
       
  3517 	<div id="contextual-help-wrap" class="hidden">
       
  3518 	<?php
       
  3519 	$contextual_help = '';
       
  3520 	if ( isset($_wp_contextual_help[$screen]) ) {
       
  3521 		if ( !empty($title) )
       
  3522 			$contextual_help .= '<h5>' . sprintf(__('Get help with &#8220;%s&#8221;'), $title) . '</h5>';
       
  3523 		else
       
  3524 			$contextual_help .= '<h5>' . __('Get help with this page') . '</h5>';
       
  3525 		$contextual_help .= '<div class="metabox-prefs">' . $_wp_contextual_help[$screen] . "</div>\n";
       
  3526 
       
  3527 		$contextual_help .= '<h5>' . __('Other Help') . '</h5>';
       
  3528 	} else {
       
  3529 		$contextual_help .= '<h5>' . __('Help') . '</h5>';
       
  3530 	}
       
  3531 
       
  3532 	$contextual_help .= '<div class="metabox-prefs">';
       
  3533 	$default_help = __('<a href="http://codex.wordpress.org/" target="_blank">Documentation</a>');
       
  3534 	$default_help .= '<br />';
       
  3535 	$default_help .= __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>');
       
  3536 	$contextual_help .= apply_filters('default_contextual_help', $default_help);
       
  3537 	$contextual_help .= "</div>\n";
       
  3538 	echo apply_filters('contextual_help', $contextual_help, $screen);
       
  3539 	?>
       
  3540 	</div>
       
  3541 
       
  3542 <div id="screen-meta-links">
       
  3543 <div id="contextual-help-link-wrap" class="hide-if-no-js screen-meta-toggle">
       
  3544 <a href="#contextual-help" id="contextual-help-link" class="show-settings"><?php _e('Help') ?></a>
       
  3545 </div>
       
  3546 <?php if ( $show_screen ) { ?>
       
  3547 <div id="screen-options-link-wrap" class="hide-if-no-js screen-meta-toggle">
       
  3548 <a href="#screen-options" id="show-settings-link" class="show-settings"><?php _e('Screen Options') ?></a>
       
  3549 </div>
       
  3550 <?php } ?>
       
  3551 </div>
       
  3552 </div>
       
  3553 <?php
       
  3554 }
       
  3555 
       
  3556 /**
       
  3557  * Add contextual help text for a page
       
  3558  *
       
  3559  * @since 2.7.0
       
  3560  *
       
  3561  * @param string $screen The handle for the screen to add help to.  This is usually the hook name returned by the add_*_page() functions.
       
  3562  * @param string $help Arbitrary help text
       
  3563  */
       
  3564 function add_contextual_help($screen, $help) {
       
  3565 	global $_wp_contextual_help;
       
  3566 
       
  3567 	if ( !isset($_wp_contextual_help) )
       
  3568 		$_wp_contextual_help = array();
       
  3569 
       
  3570 	$_wp_contextual_help[$screen] = $help;
       
  3571 }
       
  3572 
       
  3573 function drag_drop_help() {
       
  3574 	return '
       
  3575 	<p>' .	__('Most of the modules on this screen can be moved. If you hover your mouse over the title bar of a module you&rsquo;ll notice the 4 arrow cursor appears to let you know it is movable. Click on it, hold down the mouse button and start dragging the module to a new location. As you drag the module, notice the dotted gray box that also moves. This box indicates where the module will be placed when you release the mouse button.') . '</p>
       
  3576 	<p>' . __('The same modules can be expanded and collapsed by clicking once on their title bar and also completely hidden from the Screen Options tab.') . '</p>
       
  3577 ';
       
  3578 }
       
  3579 
       
  3580 function plugins_search_help() {
       
  3581 	return '
       
  3582 	<p><strong>' . __('Search help') . '</strong></p>' .
       
  3583 	'<p>' . __('You may search based on 3 criteria:') . '<br />' .
       
  3584 	__('<strong>Term:</strong> Searches theme names and descriptions for the specified term.') . '<br />' .
       
  3585 	__('<strong>Tag:</strong> Searches for themes tagged as such.') . '<br />' .
       
  3586 	__('<strong>Author:</strong> Searches for themes created by the Author, or which the Author contributed to.') . '</p>
       
  3587 ';
       
  3588 }
       
  3589 
       
  3590 function widgets_help() {
       
  3591 	return '
       
  3592 	<p>' . __('Widgets are added and arranged by simple drag &#8217;n&#8217; drop. If you hover your mouse over the titlebar of a widget, you&#8217;ll see a 4-arrow cursor which indicates that the widget is movable.  Click on the titlebar, hold down the mouse button and drag the widget to a sidebar. As you drag, you&#8217;ll see a dotted box that also moves. This box shows where the widget will go once you drop it.') . '</p>
       
  3593 	<p>' . __('To remove a widget from a sidebar, drag it back to Available Widgets or click on the arrow on its titlebar to reveal its settings, and then click Remove.') . '</p>
       
  3594 	<p>' . __('To remove a widget from a sidebar <em>and keep its configuration</em>, drag it to Inactive Widgets.') . '</p>
       
  3595 	<p>' . __('The Inactive Widgets area stores widgets that are configured but not curently used. If you change themes and the new theme has fewer sidebars than the old, all extra widgets will be stored to Inactive Widgets automatically.') . '</p>
       
  3596 ';
       
  3597 }
       
  3598 
       
  3599 function screen_layout($screen) {
       
  3600 	global $screen_layout_columns;
       
  3601 
       
  3602 	$columns = array('dashboard' => 4, 'post' => 2, 'page' => 2, 'link' => 2);
       
  3603 	$columns = apply_filters('screen_layout_columns', $columns, $screen);
       
  3604 
       
  3605 	if ( !isset($columns[$screen]) ) {
       
  3606 		$screen_layout_columns = 0;
       
  3607 		return '';
       
  3608  	}
       
  3609 
       
  3610 	$screen_layout_columns = get_user_option("screen_layout_$screen");
       
  3611 	$num = $columns[$screen];
       
  3612 
       
  3613 	if ( ! $screen_layout_columns )
       
  3614 			$screen_layout_columns = 2;
       
  3615 
       
  3616 	$i = 1;
       
  3617 	$return = '<h5>' . __('Screen Layout') . "</h5>\n<div class='columns-prefs'>" . __('Number of Columns:') . "\n";
       
  3618 	while ( $i <= $num ) {
       
  3619 		$return .= "<label><input type='radio' name='screen_columns' value='$i'" . ( ($screen_layout_columns == $i) ? " checked='checked'" : "" ) . " /> $i</label>\n";
       
  3620 		++$i;
       
  3621 	}
       
  3622 	$return .= "</div>\n";
       
  3623 	return $return;
       
  3624 }
       
  3625 
       
  3626 function screen_options($screen) {
       
  3627 	switch ( $screen ) {
       
  3628 		case 'edit':
       
  3629 			$per_page_label = __('Posts per page:');
       
  3630 			break;
       
  3631 		case 'edit-pages':
       
  3632 			$per_page_label = __('Pages per page:');
       
  3633 			break;
       
  3634 		case 'edit-comments':
       
  3635 			$per_page_label = __('Comments per page:');
       
  3636 			break;
       
  3637 		case 'upload':
       
  3638 			$per_page_label = __('Media items per page:');
       
  3639 			break;
       
  3640 		case 'categories':
       
  3641 			$per_page_label = __('Categories per page:');
       
  3642 			break;
       
  3643 		case 'edit-tags':
       
  3644 			$per_page_label = __('Tags per page:');
       
  3645 			break;
       
  3646 		case 'plugins':
       
  3647 			$per_page_label = __('Plugins per page:');
       
  3648 			break;
       
  3649 		default:
       
  3650 			return '';
       
  3651 	}
       
  3652 
       
  3653 	$option = str_replace('-', '_', "${screen}_per_page");
       
  3654 	$per_page = get_user_option($option);
       
  3655 	if ( empty($per_page) ) {
       
  3656 		if ( 'plugins' == $screen )
       
  3657 			$per_page = 999;
       
  3658 		else
       
  3659 			$per_page = 20;
       
  3660 	}
       
  3661 
       
  3662 	$return = '<h5>' . __('Options') . "</h5>\n";
       
  3663 	$return .= "<div class='screen-options'>\n";
       
  3664 	if ( !empty($per_page_label) )
       
  3665 		$return .= "<label for='$option'>$per_page_label</label> <input type='text' class='screen-per-page' name='wp_screen_options[value]' id='$option' maxlength='3' value='$per_page' />\n";
       
  3666 	$return .= "<input type='submit' class='button' value='" . esc_attr__('Apply') . "' />";
       
  3667 	$return .= "<input type='hidden' name='wp_screen_options[option]' value='" . esc_attr($option) . "' />";
       
  3668 	$return .= "</div>\n";
       
  3669 	return $return;
       
  3670 }
       
  3671 
       
  3672 function screen_icon($name = '') {
       
  3673 	global $parent_file, $hook_suffix;
       
  3674 
       
  3675 	if ( empty($name) ) {
       
  3676 		if ( isset($parent_file) && !empty($parent_file) )
       
  3677 			$name = substr($parent_file, 0, -4);
       
  3678 		else
       
  3679 			$name = str_replace(array('.php', '-new', '-add'), '', $hook_suffix);
       
  3680 	}
       
  3681 ?>
       
  3682 	<div id="icon-<?php echo $name; ?>" class="icon32"><br /></div>
       
  3683 <?php
       
  3684 }
       
  3685 
       
  3686 /**
       
  3687  * Test support for compressing JavaScript from PHP
       
  3688  *
       
  3689  * Outputs JavaScript that tests if compression from PHP works as expected
       
  3690  * and sets an option with the result. Has no effect when the current user
       
  3691  * is not an administrator. To run the test again the option 'can_compress_scripts'
       
  3692  * has to be deleted.
       
  3693  *
       
  3694  * @since 2.8.0
       
  3695  */
       
  3696 function compression_test() {
       
  3697 ?>
       
  3698 	<script type="text/javascript">
       
  3699 	/* <![CDATA[ */
       
  3700 	var testCompression = {
       
  3701 		get : function(test) {
       
  3702 			var x;
       
  3703 			if ( window.XMLHttpRequest ) {
       
  3704 				x = new XMLHttpRequest();
       
  3705 			} else {
       
  3706 				try{x=new ActiveXObject('Msxml2.XMLHTTP');}catch(e){try{x=new ActiveXObject('Microsoft.XMLHTTP');}catch(e){};}
       
  3707 			}
       
  3708 
       
  3709 			if (x) {
       
  3710 				x.onreadystatechange = function() {
       
  3711 					var r, h;
       
  3712 					if ( x.readyState == 4 ) {
       
  3713 						r = x.responseText.substr(0, 18);
       
  3714 						h = x.getResponseHeader('Content-Encoding');
       
  3715 						testCompression.check(r, h, test);
       
  3716 					}
       
  3717 				}
       
  3718 
       
  3719 				x.open('GET', 'admin-ajax.php?action=wp-compression-test&test='+test+'&'+(new Date()).getTime(), true);
       
  3720 				x.send('');
       
  3721 			}
       
  3722 		},
       
  3723 
       
  3724 		check : function(r, h, test) {
       
  3725 			if ( ! r && ! test )
       
  3726 				this.get(1);
       
  3727 
       
  3728 			if ( 1 == test ) {
       
  3729 				if ( h && ( h.match(/deflate/i) || h.match(/gzip/i) ) )
       
  3730 					this.get('no');
       
  3731 				else
       
  3732 					this.get(2);
       
  3733 
       
  3734 				return;
       
  3735 			}
       
  3736 
       
  3737 			if ( 2 == test ) {
       
  3738 				if ( '"wpCompressionTest' == r )
       
  3739 					this.get('yes');
       
  3740 				else
       
  3741 					this.get('no');
       
  3742 			}
       
  3743 		}
       
  3744 	};
       
  3745 	testCompression.check();
       
  3746 	/* ]]> */
       
  3747 	</script>
       
  3748 <?php
       
  3749 }
       
  3750 
       
  3751 ?>