OSDN Git Service

Abstract output of data to a format_items() utility function
authorDaniel Bachhuber <d@danielbachhuber.com>
Sun, 3 Feb 2013 23:31:14 +0000 (15:31 -0800)
committerDaniel Bachhuber <d@danielbachhuber.com>
Sat, 9 Feb 2013 23:02:49 +0000 (15:02 -0800)
php/commands/term.php
php/utils.php

index c52db45..d6c9ffb 100644 (file)
@@ -34,45 +34,7 @@ class Term_Command extends WP_CLI_Command {
                                'count',
                        );
 
-               switch ( $assoc_args['format'] ) {
-                       case 'table':
-                               $table = new \cli\Table();
-
-                               $table->setHeaders( $fields );
-
-                               foreach ( $terms as $term ) {
-                                       $line = array();
-
-                                       foreach ( $fields as $field ) {
-                                               $line[] = $term->$field;
-                                       }
-
-                                       $table->addRow( $line );
-                               }
-
-                               $table->display();
-
-                               WP_CLI::line( 'Total: ' . count( $terms ) . ' terms.' );
-                               break;
-                       case 'csv':
-                       case 'json':
-                               $output_terms = array();
-
-                               foreach( $terms as $term ) {
-                                       $output_term = new stdClass;
-                                       foreach( $fields as $field ) {
-                                               $output_term->$field = $term->$field;
-                                       }
-                                       $output_terms[] = $output_term;
-                               }
-
-                               if ( 'json' == $assoc_args['format'] )
-                                       echo json_encode( $output_terms );
-                               else
-                                       WP_CLI\Utils\output_csv( $output_terms, $fields );
-                               break;
-               }
-
+               WP_CLI\Utils\format_items( $assoc_args['format'], $fields, $terms );
        }
 
        /**
index 4e06615..10b7604 100644 (file)
@@ -234,6 +234,53 @@ function recursive_unserialize_replace( $from = '', $to = '', $data = '', $seria
 }
 
 /**
+ * Output items in a table, JSON, or CSV
+ *
+ * @param string $format     Format to use: 'table', 'json', 'csv'
+ * @param array  $fields     Named fields for each item of data
+ * @param array  $items      Data to output
+ */
+function format_items( $format, $fields, $items ) {
+
+       switch ( $format ) {
+               case 'table':
+                       $table = new \cli\Table();
+
+                       $table->setHeaders( $fields );
+
+                       foreach ( $items as $item ) {
+                               $line = array();
+
+                               foreach ( $fields as $field ) {
+                                       $line[] = $item->$field;
+                               }
+
+                               $table->addRow( $line );
+                       }
+
+                       $table->display();
+                       break;
+               case 'csv':
+               case 'json':
+                       $output_items = array();
+
+                       foreach( $items as $item ) {
+                               $output_item = new \stdClass;
+                               foreach( $fields as $field ) {
+                                       $output_item->$field = $item->$field;
+                               }
+                               $output_items[] = $output_item;
+                       }
+
+                       if ( 'json' == $format )
+                               echo json_encode( $output_items );
+                       else
+                               output_csv( $output_items, $fields );
+                       break;
+       }
+}
+
+/**
  * Output data as CSV
  *
  * @param array  $rows       Array of rows to output