• File: Exporter.php
  • Full Path: /home/dealkatnwc/www/wp-content/plugins/php-code-for-posts-master/Classes/Exporter.php
  • Date Modified: 02/11/2019 3:55 PM
  • File size: 3.46 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php

Class PhpCodeForPosts_Exporter
{

    public static function generate_export_file ()
    {
        $snippets = PhpCodeForPosts_Database::load_all_snippets();

        $columns = array(
            "ID",
            "Name",
            "Description",
            "Code",
            "Shared",
	        "Slug"
        );

        $csvOutput = "\"" . implode( "\",\"", $columns ) . "\"" . "\r\n";

        if( count( $snippets ) > 0 ) {
            while( $snippet = array_shift( $snippets ) ) {
                /* var $snippet = PhpCodeForPosts_Snippet() */
                $_snippet = array(
                    $snippet->get_id(),
                    addslashes( $snippet->get_name() ),
                    addslashes( $snippet->get_description() ),
                    addslashes( PhpCodeForPosts_Snippet::hash_code( $snippet->get_code() ) ),
                    intval( $snippet->get_shared() ),
	                addslashes( $snippet->get_slug() )
                );
                $csvOutput .= "\"" . implode( "\",\"", $_snippet ) . "\"" . "\r\n";
            }
        }

        $filename = 'php-code-for-posts-export-' . date( 'Y-m-d' ) . '.csv';
        header( 'Content-Type: Application/CSV; charset=utf-8' );
        header( 'Content-Length: ' . strlen( $csvOutput ) );
        header( 'Content-Disposition: attachment; filename=' . $filename );
        echo $csvOutput;
        exit;
    }

    public static function do_import ()
    {
        $file = isset( $_FILES['csvfile'] ) ? $_FILES['csvfile'] : false;
        if( ! $file || $file['error'] ) {
            throw new Exception( __( 'Error: Invalid file', "phpcodeforposts" ) );
        }

        $open = fopen( $file['tmp_name'], 'r' );
        if( ! $open ) {
            throw new Exception( __( 'Error: Failed to read file', "phpcodeforposts" ) );
        }

        //the first line is the titles, we dont care for them, for now.
        //I cant validate this line really because columns could be what ever the user chooses
        fgets( $open );

        $snippets = array();
        $keepIds = isset( $_POST['keep-ids'] ) ? intval( $_POST['keep-ids'] ) : 0;


        while( ( $line = fgetcsv( $open ) ) != false ) {

            if( empty( $line ) ) {
                continue;
            }

            if( ! self::is_file_line_valid( $line ) ) {
                throw new Exception( __( 'Error: Invalid line, not continuing', "phpcodeforposts" ) );
            }

            $snippet = new PhpCodeForPosts_Snippet();
            $snippet
                ->set_name( $line[1] )
                ->set_description( $line[2] )
                ->set_code( PhpCodeForPosts_Snippet::unhash_code( $line[3] ) )
                ->set_shared( $line[4] )
                ->set_slug( $line[5] );

            if( $keepIds ) {
                $snippet->set_id( $line[0] );
            }

            $snippets[] = $snippet;
        }

        if( count( $snippets ) > 0 ) {
            foreach( $snippets as $snippet ) {
                PhpCodeForPosts_Database::save_snippet( $snippet );
            }
        }

    }

    private static function is_file_line_valid ( $file )
    {
        if( ! filter_var( $file[0], FILTER_VALIDATE_INT ) ) {
            return false;
        }

        if( ! isset( $file[1][0] ) ) {
            return false;
        }

        if( false === base64_decode( $file[3], true ) ) {
            return false;
        }

        if( $file[4] != "0" && $file[4] != "1" ) {
            return false;
        }

        return true;
    }
}