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

class PhpCodeForPosts
{

    const POSTFIELD_PREFIX = 'phpcodeforposts';
    const AJAXHOOK = 'phpcodeforposts_ajax';
    const TEXTDOMAIN = 'phpcodeforposts';

    static $directory_path;
    static $web_path;
    static $options;
    static $variables = array();
    static $_vars = array();

    public function __construct ( $directory_path, $web_path )
    {
        if( ! $directory_path ) {
            throw new InvalidArgumentException( _e( 'Please specify the directory path' ) );
        }
        if( ! $web_path ) {
            throw new InvalidArgumentException( _e( 'Please specify the web path' ) );
        }

        self::$directory_path = $directory_path;
        self::$web_path = $web_path;

        $this->load_class_dependencies();

        add_action( 'init', array( __CLASS__, 'check_post' ) );
        add_action( 'wp_ajax_' . self::AJAXHOOK, array( __CLASS__, 'check_ajax' ) );

        add_shortcode( PhpCodeForPosts_Shortcode::get_shortcode(), array( 'PhpCodeForPosts_Shortcode', 'handle_shortcode' ) );
        if( is_multisite() ) {
            add_shortcode( PhpCodeForPosts_Shortcode::get_multisite_shortcode(), array( 'PhpCodeForPosts_Shortcode', 'handle_multisite_shortcode' ) );
        }

        add_filter( 'widget_text', 'do_shortcode', 5, 1 );

        if( PhpCodeForPosts::$options->get_option( 'content_filter' ) ) {
            add_filter( 'the_content', array( 'PhpCodeForPosts_Shortcode', 'handle_extra_shortcode' ), 0, 1 );
        }

        if( PhpCodeForPosts::$options->get_option( 'content_filter' ) ) {
            add_filter( 'widget_text', array( 'PhpCodeForPosts_Shortcode', 'handle_extra_shortcode' ), 0, 1 );
        }
    }

    private function load_class_dependencies ()
    {
        require( self::directory_path_it( 'Classes/Options.php' ) );
        require( self::directory_path_it( 'Classes/Menu.php' ) );
        require( self::directory_path_it( 'Classes/Database.php' ) );
        require( self::directory_path_it( 'Classes/Snippet.php' ) );
        require( self::directory_path_it( 'Classes/Messages.php' ) );
        require( self::directory_path_it( 'Classes/Install.php' ) );
        require( self::directory_path_it( 'Classes/Shortcode.php' ) );
        require( self::directory_path_it( 'Classes/Exporter.php' ) );

        PhpCodeForPosts::$options = new PhpCodeForPosts_Options;
        new PhpCodeForPosts_Menu();
    }

    public static function set_variable ( $key, $value )
    {
        PhpCodeForPosts::$variables[$key] = $value;
    }

    public static function get_variable ( $key )
    {
        return PhpCodeForPosts::$variables[$key];
    }


    public static function check_post ()
    {
        ob_start();
        if( ! ( is_admin() && isset( $_POST[PhpCodeForPosts::POSTFIELD_PREFIX] ) && ! isset( $_POST['nopost'] ) ) ) {
            return;
        }

        $post = $_POST[PhpCodeForPosts::POSTFIELD_PREFIX];
        $action = isset( $post['action'] ) ? $post['action'] : false;
        $action_code = isset( $post['actioncode'] ) ? $post['actioncode'] : false;
        $item = isset( $post['item'] ) ? $post['item'] : false;

        if(
            $action === false
            || $action_code === false
            || $item === false
            || ! self::check_nonce( $action_code, $item, $action )
        ) {
            return;
        }

        self::check_actions( $post, false );
        ob_end_flush();
    }

    public static function check_ajax ()
    {
        if( ! isset( $_POST[PhpCodeForPosts::POSTFIELD_PREFIX] ) ) {
            return;
        }

        $post = $_POST[PhpCodeForPosts::POSTFIELD_PREFIX];

        $action = isset( $post['action'] ) ? $post['action'] : false;
        $action_code = isset( $post['actioncode'] ) ? $post['actioncode'] : false;
        $item = isset( $post['item'] ) ? $post['item'] : false;

        if(
            $action === false
            || $action_code === false
            || $item === false
            || ! self::check_nonce( $action_code, $item, $action )
        ) {
            echo "nope";
        } else {
            self::check_actions( $post, true );
        }
        wp_die();
    }

    private static function check_actions ( $post, $ajax = false )
    {

        switch( $post['action'] ) {
            case 'updateoptions':
                $state = PhpCodeForPosts::$options->save_posted_options( $post );

                if( $ajax ) {
                    echo (int)$state;
                    exit;
                }

                if( $state ) {
                    PhpCodeForPosts_Messages::add_success_message( __( 'Options saved', "phpcodeforposts" ) );
                } else {
                    PhpCodeForPosts_Messages::add_error_message( __( 'Failed to save options - have they changed?', "phpcodeforposts" ) );
                }
                break;


            case 'save':
                $state = PhpCodeForPosts_Snippet::save_posted_snippet( $post );
                if( $ajax ) {
                    echo (int)$state;
                    exit;
                }

                if( $state ) {
                    $shortcode = '[' . PhpCodeForPosts_Shortcode::get_shortcode() . ' snippet=' . PhpCodeForPosts_Snippet::$last_saved_snippet->get_id() . ']';
                    PhpCodeForPosts_Messages::add_success_message( __( 'Snippet saved', "phpcodeforposts" ) . ' - ' . $shortcode );
                } else {
                    PhpCodeForPosts_Messages::add_error_message( __( 'Failed to save snippet - has it changed?', "phpcodeforposts" ) );
                }
                header( 'location:admin.php' . html_entity_decode( PhpCodeForPosts_Snippet::$last_saved_snippet->get_snippet_edit_link() ) );
                exit;

                break;


            case 'delete':
                $state = PhpCodeForPosts_Database::delete_snippet_by_id( $post['item'] );
                if( $ajax ) {
                    $msg = $state ? __( 'Snippet Deleted', "phpcodeforposts" ) : __( 'Failed to delete snippet - it may not exist', "phpcodeforposts" );
                    self::send_json_response( $state ? 1 : 0, $msg );
                }

                if( $state ) {
                    PhpCodeForPosts_Messages::add_success_message( __( 'Snippet deleted', "phpcodeforposts" ) );
                } else {
                    PhpCodeForPosts_Messages::add_error_message( __( 'Failed to delete snippet - it may not exist', "phpcodeforposts" ) );
                }
                break;

            case 'bulkdelete':
                $snippets_to_delete = $post['delete'];

                if( count( $snippets_to_delete ) == 0 ) {
                    if( $ajax ) {
                        self::send_json_response( true, __( 'Nothing To Delete', "phpcodeforposts" ) );
                    }
                    break; //do nothing.
                }

                $deleted_count = 0;
                foreach( $snippets_to_delete as $record => $one ) {
                    try {
                        if( PhpCodeForPosts_Database::delete_snippet_by_id( intval( $record ) ) ) {
                            $deleted_count++;
                        }
                    } catch( InvalidArgumentException $e ) {
                        //do nothing.
                    }
                }

                if( $deleted_count > 0 ) {
                    $msg = sprintf(
                        _n( '%d Snippet deleted', '%d Snippets deleted', $deleted_count, "phpcodeforposts" ),
                        $deleted_count
                    );

                    if( $ajax ) {
                        self::send_json_response( true, $msg );
                    } else {
                        PhpCodeForPosts_Messages::add_success_message( $msg );
                    }
                } else {
                    $msg = __( 'Failed to delete snippets', "phpcodeforposts" );
                    if( $ajax ) {
                        self::send_json_response( false, $msg );
                    } else {
                        PhpCodeForPosts_Messages::add_error_message( $msg );
                    }
                }
                break;

            case 'generate-export':
                PhpCodeForPosts_Exporter::generate_export_file();
                break;

            case 'do-import':
                try {
                    PhpCodeForPosts_Exporter::do_import();
                    PhpCodeForPosts_Messages::add_success_message( __( 'Snippets Imported Successfully', "phpcodeforposts" ) );
                } catch( Exception $e ) {
                    PhpCodeForPosts_Messages::add_error_message( $e->getMessage() );
                }
                break;
        }
    }

    private static function send_json_response ( $state, $msg )
    {
        $json = json_encode( array( 'state' => $state, 'msg' => $msg ) );
        header( 'Content-Type:application/json' );
        header( 'Content-Length:' . strlen( $json ) );
        echo $json;
        exit;
    }

    public static function web_path_it ( $file )
    {
        return PhpCodeForPosts::$web_path . $file;
    }

    public static function directory_path_it ( $file )
    {
        return PhpCodeForPosts::$directory_path . $file;
    }

    public static function get_checkbox_field ( $key, $label )
    {

        return sprintf(
            '%1$s<input name="%2$s" id="%3$s" type="checkbox" value="1" %5$s /><label for="%3$s">%4$s</label>',
            self::get_hidden_field( $key, 0 ),
            self::__input_name( $key ),
            self::__input_id( $key ),
            $label,
            checked( self::$options->get_option( $key ), 1, false )
        );
    }

    public static function get_hidden_field ( $key, $value )
    {
        return sprintf(
            '<input type="hidden" name="%s" value="%s" />',
            self::__input_name( $key ),
            esc_attr( $value )
        );
    }

    public static function get_input_field ( $key, $value, $label )
    {
        return sprintf(
            '<label for="%1$s">%2$s</label> <input type="text" name="%3$s" value="%4$s" id="%1$s" />',
            self::__input_id( $key ),
            esc_html( $label, "phpcodeforposts" ),
            self::__input_name( $key ),
            esc_attr( $value )
        );
    }

    public static function get_select_field( $key, $label, $values )
    {
	    $option = self::$options->get_option( PhpCodeForPosts_Options::OPTION_MENUPOSITION );
	    $options = '';
	    if ( count( $values ) ) {
		    foreach ( $values as $k => $v ) {
			    $options .= sprintf( '<option value="%s"%s>%s</option>', $k, selected( $option, $k, FALSE ), $v );
		    }
	    }
        return sprintf(
            '<label for="%1$s">%2$s</label><select name="%1$s" id="%1$s">%3$s</select>',
	        "phpcodeforposts[$key]",
	        $label,
	        $options
        );
    }

    public static function __input_name ( $key )
    {
        return self::POSTFIELD_PREFIX . '[' . $key . ']';
    }

    public static function __input_id ( $key )
    {
        return self::POSTFIELD_PREFIX . '_' . $key;
    }

    public static function check_nonce ( $action_code, $item, $action )
    {
        return wp_verify_nonce( $action_code, $item . $action );
    }

    public static function ready_nonce ( $item, $action )
    {
        return wp_create_nonce( $item . $action );
    }
}