Plugin Directory

Changeset 933685


Ignore:
Timestamp:
06/17/2014 01:22:56 PM (12 years ago)
Author:
marisp
Message:

added JSON format for downloadList API

Location:
wpnewsman-newsletters/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • wpnewsman-newsletters/trunk/api.php

    r933680 r933685  
    232232        $map = $this->param('map', '');
    233233
     234        $format = $this->param('format', 'csv');
     235
    234236        $nofile = $this->param('nofile', false);
    235237
     
    247249                $newsman_export_fields_map[ $p[0] ] = $p[1];
    248250            }
     251        }
     252
     253        if ( $format ) {
     254            define('newsman_export_format', $format);
    249255        }
    250256
  • wpnewsman-newsletters/trunk/class.list.php

    r933680 r933685  
    590590    }
    591591
     592    private function subToJSON($sub, $fields, $map) {
     593        global $newsman_current_subscriber;
     594        global $newsman_current_list;
     595       
     596        $row = $sub->toJSON();
     597
     598        $newsman_current_list = $this;
     599        $newsman_current_subscriber = $row;
     600
     601        $n = newsman::getInstance();
     602
     603        $j = array();
     604
     605        foreach ($fields as $field) {
     606            if ( in_array($field, static::$linkFields) ) {
     607                $row[$field] = $n->getActionLink(str_replace('-link', '', $field));
     608            }
     609            if ( isset( $map[$field] ) ) {
     610                $j[$map[$field]] = $row[$field];
     611            } else {
     612                $j[$field] = $row[$field];
     613            }
     614        }
     615        return json_encode($j);
     616    }
     617
    592618    private function array_unique_merge() {       
    593619        return array_unique(call_user_func_array('array_merge', func_get_args()));
     
    627653            $res = $this->getSubscribers($offset, $limit, $type, $query, 'RAW_SQL_QUERY');
    628654            if ( is_array($res) && !empty($res)  ) {
     655                // csv
    629656                foreach ($res as $sub) {
    630657                    fputs($file, $this->subToCSVRow($sub, $fields)."\n");
    631                 }
     658                }                   
     659
    632660                $p += 1;
    633661            }
     
    651679    }
    652680
     681    /**
     682     * Fetches subscribers in batches and conver them to csv rows
     683     */
     684    private function subsToJSON($file, $fields, $map, $type = 'all') {
     685
     686        if (
     687            defined('newsman_csv_export_limit') ||
     688            defined('newsman_csv_export_offset') ||
     689            defined('newsman_csv_export_query')
     690        ) {
     691            $offset = defined('newsman_csv_export_offset') ? newsman_csv_export_offset : 0;
     692            $limit  = defined('newsman_csv_export_limit') ? newsman_csv_export_limit : 100;
     693            $query  = defined('newsman_csv_export_query') ? newsman_csv_export_query : false;
     694
     695            $res = $this->getSubscribers($offset, $limit, $type, $query, 'RAW_SQL_QUERY');
     696            if ( is_array($res) && !empty($res)  ) {
     697
     698                    $delim = '';
     699                    foreach ($res as $sub) {
     700                        fputs($file, $delim.$this->subToJSON($sub, $fields, $map));
     701                        $delim = ', ';
     702                    }
     703
     704                $p += 1;
     705            }
     706
     707            return;         
     708        }
     709
     710        $p = 1;
     711        $done = false;
     712        do {
     713            $res = $this->getPage($p, 1000, $type);
     714            if ( is_array($res) && !empty($res)  ) {
     715                $delim = '';
     716                foreach ($res as $sub) {
     717                    fputs($file, $delim.$this->subToJSON($sub, $fields, $map));
     718                    $delim = ',';
     719                }
     720                $p += 1;
     721            } else {
     722                $done = true;
     723            }
     724        } while ( !$done );
     725    }
     726
    653727    public function exportToCSV($filename, $type = 'all', $linksFields = array(), $forceFileOutput = true) {
    654728        global $newsman_export_fields_map;
     729
     730        if ( defined('newsman_export_format') ) {           
     731            switch (newsman_export_format) {
     732                case 'json':
     733                    $ct = 'application/json';
     734                    break;
     735
     736                case 'csv':                 
     737                default:
     738                    $ct = 'text/json';
     739                    break;
     740            }
     741            header( 'Content-Type: '.$ct );
     742        }
     743
    655744        if ( $forceFileOutput ) {
    656             header( 'Content-Type: text/csv' );
    657745            header( 'Content-Disposition: attachment;filename='.$filename);         
    658746        }
     
    660748        //var_dump($newsman_export_fields_map);
    661749
    662         if ( isset($_REQUEST['debug']) ) {
    663             echo '<pre>'; // FOR DEBUG ONLY
    664         }       
    665 
    666750        $out = fopen('php://output', 'w');
     751
    667752        if ( $out ) {
     753            if ( defined('newsman_export_format') && newsman_export_format === 'json' ) {
     754                fwrite($out, '[');
     755            }
     756
    668757            $fields = $this->getAllFields();
    669758
     
    671760            $mappedFields = array();
    672761
     762
     763
    673764            if ( isset($newsman_export_fields_map) ) {
     765                $map = $newsman_export_fields_map;
    674766                foreach ($fields as &$field) {
    675767                    $mappedFields[] = isset($newsman_export_fields_map[$field]) ? $newsman_export_fields_map[$field] : $field;
    676768                }
    677769            } else {
     770                $map = array();
    678771                $mappedFields = $fields;
    679772            }
    680773
    681             fputcsv($out, $mappedFields, ',', '"');
    682             $this->subsToCSV($out, $fields, $type);
     774            if ( defined('newsman_export_format') && newsman_export_format === 'json' ) {
     775                $this->subsToJSON($out, $fields, $newsman_export_fields_map);
     776            } else {
     777                fputcsv($out, $mappedFields, ',', '"');
     778                $this->subsToCSV($out, $fields, $type);             
     779            }
     780
     781            if ( defined('newsman_export_format') && newsman_export_format === 'json' ) {
     782                fwrite($out, ']');
     783            }       
     784
    683785            @fclose($out);         
    684786        }
    685787
    686         if ( isset($_REQUEST['debug']) ) {
    687             echo '</pre>'; // FOR DEBUG ONLY
    688         }
     788
    689789    }
    690790
  • wpnewsman-newsletters/trunk/views/welcome.php

    r933680 r933685  
    99            <div class="about-text">You updated and have better newsletter gadget!</div>
    1010
    11            
     11
    1212        <?php endif; ?>
    1313       
Note: See TracChangeset for help on using the changeset viewer.