WordPress.org

Plugin Directory

Changeset 1552692


Ignore:
Timestamp:
12/12/16 13:33:13 (12 months ago)
Author:
khaxan
Message:

Added encoding to table
Checked compatibility with WP 4.7

Location:
report-content
Files:
20 added
12 edited

Legend:

Unmodified
Added
Removed
  • report-content/trunk/inc/class-wprc-list-table.php

    r1143800 r1552692  
    11<?php 
     2 
    23/** 
    34 * Base class for displaying a list of items in an ajaxified HTML table. 
     
    910 * @subpackage List_Table 
    1011 */ 
    11 class WPRC_List_Table { 
     12class WPRC_List_Table 
     13{ 
    1214 
    1315    /** 
     
    1921     */ 
    2022    public $items; 
    21  
     23    /** 
     24     * The current screen 
     25     * 
     26     * @since 3.1.0 
     27     * @var object 
     28     * @access protected 
     29     */ 
     30    protected $screen; 
     31    /** 
     32     * The view switcher modes. 
     33     * 
     34     * @since 4.1.0 
     35     * @var array 
     36     * @access protected 
     37     */ 
     38    protected $modes = array(); 
    2239    /** 
    2340     * Various information about the current table 
     
    2845     */ 
    2946    private $_args; 
    30  
    3147    /** 
    3248     * Various information needed for displaying the pagination 
     
    3753     */ 
    3854    private $_pagination_args = array(); 
    39  
    40     /** 
    41      * The current screen 
    42      * 
    43      * @since 3.1.0 
    44      * @var object 
    45      * @access protected 
    46      */ 
    47     protected $screen; 
    48  
    4955    /** 
    5056     * Cached bulk actions 
     
    5561     */ 
    5662    private $_actions; 
    57  
    5863    /** 
    5964     * Cached pagination output 
     
    6671 
    6772    /** 
    68      * The view switcher modes. 
    69      * 
    70      * @since 4.1.0 
    71      * @var array 
    72      * @access protected 
    73      */ 
    74     protected $modes = array(); 
    75  
    76     /** 
    7773     * Constructor. 
    7874     * 
     
    8682     *     Array or string of arguments. 
    8783     * 
    88      *     @type string $plural  Plural value used for labels and the objects being listed. 
     84     * @type string $plural Plural value used for labels and the objects being listed. 
    8985     *                            This affects things such as CSS class-names and nonces used 
    9086     *                            in the list table, e.g. 'posts'. Default empty. 
    91      *     @type string $singular Singular label for an object being listed, e.g. 'post'. 
     87     * @type string $singular Singular label for an object being listed, e.g. 'post'. 
    9288     *                            Default empty 
    93      *     @type bool   $ajax    Whether the list table supports AJAX. This includes loading 
     89     * @type bool $ajax Whether the list table supports AJAX. This includes loading 
    9490     *                            and sorting data, for example. If true, the class will call 
    9591     *                            the {@see _js_vars()} method in the footer to provide variables 
    9692     *                            to any scripts handling AJAX events. Default false. 
    97      *     @type string $screen  String containing the hook name used to determine the current 
     93     * @type string $screen String containing the hook name used to determine the current 
    9894     *                            screen. If left null, the current screen will be automatically set. 
    9995     *                            Default null. 
    10096     * } 
    10197     */ 
    102     public function __construct( $args = array() ) { 
    103         $args = wp_parse_args( $args, array( 
    104             'plural' => '', 
     98    public function __construct($args = array()) 
     99    { 
     100        $args = wp_parse_args($args, array( 
     101            'plural'   => '', 
    105102            'singular' => '', 
    106             'ajax' => false, 
    107             'screen' => null, 
    108         ) ); 
    109  
    110         $this->screen = convert_to_screen( $args['screen'] ); 
    111  
    112         add_filter( "manage_{$this->screen->id}_columns", array( $this, 'get_columns' ), 0 ); 
    113  
    114         if ( !$args['plural'] ) 
     103            'ajax'     => false, 
     104            'screen'   => null, 
     105        )); 
     106 
     107        $this->screen = convert_to_screen($args['screen']); 
     108 
     109        add_filter("manage_{$this->screen->id}_columns", array($this, 'get_columns'), 0); 
     110 
     111        if (!$args['plural']) 
    115112            $args['plural'] = $this->screen->base; 
    116113 
    117         $args['plural'] = sanitize_key( $args['plural'] ); 
    118         $args['singular'] = sanitize_key( $args['singular'] ); 
     114        $args['plural'] = sanitize_key($args['plural']); 
     115        $args['singular'] = sanitize_key($args['singular']); 
    119116 
    120117        $this->_args = $args; 
    121118 
    122         if ( $args['ajax'] ) { 
     119        if ($args['ajax']) { 
    123120            // wp_enqueue_script( 'list-table' ); 
    124             add_action( 'admin_footer', array( $this, '_js_vars' ) ); 
    125         } 
    126  
    127         if ( empty( $this->modes ) ) { 
     121            add_action('admin_footer', array($this, '_js_vars')); 
     122        } 
     123 
     124        if (empty($this->modes)) { 
    128125            $this->modes = array( 
    129                 'list'    => __( 'List View' ), 
    130                 'excerpt' => __( 'Excerpt View' ) 
     126                'list'    => __('List View'), 
     127                'excerpt' => __('Excerpt View') 
    131128            ); 
    132129        } 
     
    142139     * @return mixed Property. 
    143140     */ 
    144     public function __get( $name ) { 
     141    public function __get($name) 
     142    { 
    145143        return $this->$name; 
    146144    } 
     
    152150     * @access public 
    153151     * 
    154      * @param string $name  Property to set. 
    155      * @param mixed  $value Property value. 
     152     * @param string $name Property to set. 
     153     * @param mixed $value Property value. 
    156154     * @return mixed Newly-set property. 
    157155     */ 
    158     public function __set( $name, $value ) { 
     156    public function __set($name, $value) 
     157    { 
    159158        return $this->$name = $value; 
    160159    } 
     
    169168     * @return bool Whether the property is set. 
    170169     */ 
    171     public function __isset( $name ) { 
    172         return isset( $this->$name ); 
     170    public function __isset($name) 
     171    { 
     172        return isset($this->$name); 
    173173    } 
    174174 
     
    181181     * @param string $name Property to unset. 
    182182     */ 
    183     public function __unset( $name ) { 
    184         unset( $this->$name ); 
     183    public function __unset($name) 
     184    { 
     185        unset($this->$name); 
    185186    } 
    186187 
     
    191192     * @access public 
    192193     * 
    193      * @param callable $name      Method to call. 
    194      * @param array    $arguments Arguments to pass when calling. 
     194     * @param callable $name Method to call. 
     195     * @param array $arguments Arguments to pass when calling. 
    195196     * @return mixed|bool Return value of the callback, false otherwise. 
    196197     */ 
    197     public function __call( $name, $arguments ) { 
    198         return call_user_func_array( array( $this, $name ), $arguments ); 
     198    public function __call($name, $arguments) 
     199    { 
     200        return call_user_func_array(array($this, $name), $arguments); 
    199201    } 
    200202 
     
    206208     * @abstract 
    207209     */ 
    208     public function ajax_user_can() { 
    209         die( 'function WP_List_Table::ajax_user_can() must be over-ridden in a sub-class.' ); 
    210     } 
    211  
    212     /** 
    213      * Prepares the list of items for displaying. 
    214      * @uses WP_List_Table::set_pagination_args() 
    215      * 
    216      * @since 3.1.0 
    217      * @access public 
    218      * @abstract 
    219      */ 
    220     public function prepare_items() { 
    221         die( 'function WP_List_Table::prepare_items() must be over-ridden in a sub-class.' ); 
    222     } 
    223  
    224     /** 
    225      * An internal method that sets all the necessary pagination arguments 
    226      * 
    227      * @param array $args An associative array with information about the pagination 
    228      * @access protected 
    229      */ 
    230     protected function set_pagination_args( $args ) { 
    231         $args = wp_parse_args( $args, array( 
    232             'total_items' => 0, 
    233             'total_pages' => 0, 
    234             'per_page' => 0, 
    235         ) ); 
    236  
    237         if ( !$args['total_pages'] && $args['per_page'] > 0 ) 
    238             $args['total_pages'] = ceil( $args['total_items'] / $args['per_page'] ); 
    239  
    240         // Redirect if page number is invalid and headers are not already sent. 
    241         if ( ! headers_sent() && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) && $args['total_pages'] > 0 && $this->get_pagenum() > $args['total_pages'] ) { 
    242             wp_redirect( add_query_arg( 'paged', $args['total_pages'] ) ); 
    243             exit; 
    244         } 
    245  
    246         $this->_pagination_args = $args; 
     210    public function ajax_user_can() 
     211    { 
     212        die('function WP_List_Table::ajax_user_can() must be over-ridden in a sub-class.'); 
    247213    } 
    248214 
     
    257223     * @return int Number of items that correspond to the given pagination argument. 
    258224     */ 
    259     public function get_pagination_arg( $key ) { 
    260         if ( 'page' == $key ) 
     225    public function get_pagination_arg($key) 
     226    { 
     227        if ('page' == $key) 
    261228            return $this->get_pagenum(); 
    262229 
    263         if ( isset( $this->_pagination_args[$key] ) ) 
    264             return $this->_pagination_args[$key]; 
    265     } 
    266  
    267     /** 
    268      * Whether the table has items to display or not 
    269      * 
    270      * @since 3.1.0 
    271      * @access public 
    272      * 
    273      * @return bool 
    274      */ 
    275     public function has_items() { 
    276         return !empty( $this->items ); 
    277     } 
    278  
    279     /** 
    280      * Message to be displayed when there are no items 
    281      * 
    282      * @since 3.1.0 
    283      * @access public 
    284      */ 
    285     public function no_items() { 
    286         _e( 'No items found.' ); 
     230        if (isset($this->_pagination_args[ $key ])) 
     231            return $this->_pagination_args[ $key ]; 
    287232    } 
    288233 
     
    296241     * @param string $input_id The search input id 
    297242     */ 
    298     public function search_box( $text, $input_id ) { 
    299         if ( empty( $_REQUEST['s'] ) && !$this->has_items() ) 
     243    public function search_box($text, $input_id) 
     244    { 
     245        if (empty($_REQUEST['s']) && !$this->has_items()) 
    300246            return; 
    301247 
    302248        $input_id = $input_id . '-search-input'; 
    303249 
    304         if ( ! empty( $_REQUEST['orderby'] ) ) 
    305             echo '<input type="hidden" name="orderby" value="' . esc_attr( $_REQUEST['orderby'] ) . '" />'; 
    306         if ( ! empty( $_REQUEST['order'] ) ) 
    307             echo '<input type="hidden" name="order" value="' . esc_attr( $_REQUEST['order'] ) . '" />'; 
    308         if ( ! empty( $_REQUEST['post_mime_type'] ) ) 
    309             echo '<input type="hidden" name="post_mime_type" value="' . esc_attr( $_REQUEST['post_mime_type'] ) . '" />'; 
    310         if ( ! empty( $_REQUEST['detached'] ) ) 
    311             echo '<input type="hidden" name="detached" value="' . esc_attr( $_REQUEST['detached'] ) . '" />'; 
    312 ?> 
    313 <p class="search-box"> 
    314     <label class="screen-reader-text" for="<?php echo $input_id ?>"><?php echo $text; ?>:</label> 
    315     <input type="search" id="<?php echo $input_id ?>" name="s" value="<?php _admin_search_query(); ?>" /> 
    316     <?php submit_button( $text, 'button', false, false, array('id' => 'search-submit') ); ?> 
    317 </p> 
    318 <?php 
    319     } 
    320  
    321     /** 
    322      * Get an associative array ( id => link ) with the list 
    323      * of views available on this table. 
    324      * 
    325      * @since 3.1.0 
    326      * @access protected 
    327      * 
    328      * @return array 
    329      */ 
    330     protected function get_views() { 
    331         return array(); 
     250        if (!empty($_REQUEST['orderby'])) 
     251            echo '<input type="hidden" name="orderby" value="' . esc_attr($_REQUEST['orderby']) . '" />'; 
     252        if (!empty($_REQUEST['order'])) 
     253            echo '<input type="hidden" name="order" value="' . esc_attr($_REQUEST['order']) . '" />'; 
     254        if (!empty($_REQUEST['post_mime_type'])) 
     255            echo '<input type="hidden" name="post_mime_type" value="' . esc_attr($_REQUEST['post_mime_type']) . '" />'; 
     256        if (!empty($_REQUEST['detached'])) 
     257            echo '<input type="hidden" name="detached" value="' . esc_attr($_REQUEST['detached']) . '" />'; 
     258        ?> 
     259        <p class="search-box"> 
     260            <label class="screen-reader-text" for="<?php echo $input_id ?>"><?php echo $text; ?>:</label> 
     261            <input type="search" id="<?php echo $input_id ?>" name="s" value="<?php _admin_search_query(); ?>"/> 
     262            <?php submit_button($text, 'button', false, false, array('id' => 'search-submit')); ?> 
     263        </p> 
     264        <?php 
     265    } 
     266 
     267    /** 
     268     * Whether the table has items to display or not 
     269     * 
     270     * @since 3.1.0 
     271     * @access public 
     272     * 
     273     * @return bool 
     274     */ 
     275    public function has_items() 
     276    { 
     277        return !empty($this->items); 
    332278    } 
    333279 
     
    338284     * @access public 
    339285     */ 
    340     public function views() { 
     286    public function views() 
     287    { 
    341288        $views = $this->get_views(); 
    342289        /** 
     
    350297         * @param array $views An array of available list table views. 
    351298         */ 
    352         $views = apply_filters( "views_{$this->screen->id}", $views ); 
    353  
    354         if ( empty( $views ) ) 
     299        $views = apply_filters("views_{$this->screen->id}", $views); 
     300 
     301        if (empty($views)) 
    355302            return; 
    356303 
    357304        echo "<ul class='subsubsub'>\n"; 
    358         foreach ( $views as $class => $view ) { 
     305        foreach ($views as $class => $view) { 
    359306            $views[ $class ] = "\t<li class='$class'>$view"; 
    360307        } 
    361         echo implode( " |</li>\n", $views ) . "</li>\n"; 
     308        echo implode(" |</li>\n", $views) . "</li>\n"; 
    362309        echo "</ul>"; 
    363310    } 
    364311 
    365312    /** 
    366      * Get an associative array ( option_name => option_title ) with the list 
    367      * of bulk actions available on this table. 
     313     * Get an associative array ( id => link ) with the list 
     314     * of views available on this table. 
    368315     * 
    369316     * @since 3.1.0 
     
    372319     * @return array 
    373320     */ 
    374     protected function get_bulk_actions() { 
     321    protected function get_views() 
     322    { 
    375323        return array(); 
     324    } 
     325 
     326    /** 
     327     * Get the current action selected from the bulk actions dropdown. 
     328     * 
     329     * @since 3.1.0 
     330     * @access public 
     331     * 
     332     * @return string|bool The action name or False if no action was selected 
     333     */ 
     334    public function current_action() 
     335    { 
     336        if (isset($_REQUEST['filter_action']) && !empty($_REQUEST['filter_action'])) 
     337            return false; 
     338 
     339        if (isset($_REQUEST['action']) && -1 != $_REQUEST['action']) 
     340            return $_REQUEST['action']; 
     341 
     342        if (isset($_REQUEST['action2']) && -1 != $_REQUEST['action2']) 
     343            return $_REQUEST['action2']; 
     344 
     345        return false; 
     346    } 
     347 
     348    /** 
     349     * Get a list of columns. The format is: 
     350     * 'internal-name' => 'Title' 
     351     * 
     352     * @since 3.1.0 
     353     * @access public 
     354     * @abstract 
     355     * 
     356     * @return array 
     357     */ 
     358    public function get_columns() 
     359    { 
     360        die('function WP_List_Table::get_columns() must be over-ridden in a sub-class.'); 
     361    } 
     362 
     363    /** 
     364     * Display the table 
     365     * 
     366     * @since 3.1.0 
     367     * @access public 
     368     */ 
     369    public function display() 
     370    { 
     371        $singular = $this->_args['singular']; 
     372 
     373        $this->display_tablenav('top'); 
     374 
     375        ?> 
     376        <table class="wp-list-table <?php echo implode(' ', $this->get_table_classes()); ?>"> 
     377            <thead> 
     378            <tr> 
     379                <?php $this->print_column_headers(); ?> 
     380            </tr> 
     381            </thead> 
     382 
     383            <tfoot> 
     384            <tr> 
     385                <?php $this->print_column_headers(false); ?> 
     386            </tr> 
     387            </tfoot> 
     388 
     389            <tbody id="the-list"<?php 
     390            if ($singular) { 
     391                echo " data-wp-lists='list:$singular'"; 
     392            } ?>> 
     393            <?php $this->display_rows_or_placeholder(); ?> 
     394            </tbody> 
     395        </table> 
     396        <?php 
     397        $this->display_tablenav('bottom'); 
     398    } 
     399 
     400    /** 
     401     * Generate the table navigation above or below the table 
     402     * 
     403     * @since 3.1.0 
     404     * @access protected 
     405     * @param string $which 
     406     */ 
     407    protected function display_tablenav($which) 
     408    { 
     409        if ('top' == $which) 
     410            wp_nonce_field('bulk-' . $this->_args['plural']); 
     411        ?> 
     412        <div class="tablenav <?php echo esc_attr($which); ?>"> 
     413 
     414            <div class="alignleft actions bulkactions"> 
     415                <?php $this->bulk_actions($which); ?> 
     416            </div> 
     417            <?php 
     418            $this->extra_tablenav($which); 
     419            $this->pagination($which); 
     420            ?> 
     421 
     422            <br class="clear"/> 
     423        </div> 
     424        <?php 
    376425    } 
    377426 
     
    385434     *                      This is designated as optional for backwards-compatibility. 
    386435     */ 
    387     protected function bulk_actions( $which = '' ) { 
    388         if ( is_null( $this->_actions ) ) { 
     436    protected function bulk_actions($which = '') 
     437    { 
     438        if (is_null($this->_actions)) { 
    389439            $no_new_actions = $this->_actions = $this->get_bulk_actions(); 
    390440            /** 
     
    400450             * @param array $actions An array of the available bulk actions. 
    401451             */ 
    402             $this->_actions = apply_filters( "bulk_actions-{$this->screen->id}", $this->_actions ); 
    403             $this->_actions = array_intersect_assoc( $this->_actions, $no_new_actions ); 
     452            $this->_actions = apply_filters("bulk_actions-{$this->screen->id}", $this->_actions); 
     453            $this->_actions = array_intersect_assoc($this->_actions, $no_new_actions); 
    404454            $two = ''; 
    405455        } else { 
     
    407457        } 
    408458 
    409         if ( empty( $this->_actions ) ) 
     459        if (empty($this->_actions)) 
    410460            return; 
    411461 
    412         echo "<label for='bulk-action-selector-" . esc_attr( $which ) . "' class='screen-reader-text'>" . __( 'Select bulk action' ) . "</label>"; 
    413         echo "<select name='action$two' id='bulk-action-selector-" . esc_attr( $which ) . "'>\n"; 
    414         echo "<option value='-1' selected='selected'>" . __( 'Bulk Actions' ) . "</option>\n"; 
    415  
    416         foreach ( $this->_actions as $name => $title ) { 
     462        echo "<label for='bulk-action-selector-" . esc_attr($which) . "' class='screen-reader-text'>" . __('Select bulk action') . "</label>"; 
     463        echo "<select name='action$two' id='bulk-action-selector-" . esc_attr($which) . "'>\n"; 
     464        echo "<option value='-1' selected='selected'>" . __('Bulk Actions') . "</option>\n"; 
     465 
     466        foreach ($this->_actions as $name => $title) { 
    417467            $class = 'edit' == $name ? ' class="hide-if-no-js"' : ''; 
    418468 
     
    422472        echo "</select>\n"; 
    423473 
    424         submit_button( __( 'Apply' ), 'action', false, false, array( 'id' => "doaction$two" ) ); 
     474        submit_button(__('Apply'), 'action', false, false, array('id' => "doaction$two")); 
    425475        echo "\n"; 
    426476    } 
    427477 
    428478    /** 
    429      * Get the current action selected from the bulk actions dropdown. 
    430      * 
    431      * @since 3.1.0 
    432      * @access public 
    433      * 
    434      * @return string|bool The action name or False if no action was selected 
    435      */ 
    436     public function current_action() { 
    437         if ( isset( $_REQUEST['filter_action'] ) && ! empty( $_REQUEST['filter_action'] ) ) 
    438             return false; 
    439  
    440         if ( isset( $_REQUEST['action'] ) && -1 != $_REQUEST['action'] ) 
    441             return $_REQUEST['action']; 
    442  
    443         if ( isset( $_REQUEST['action2'] ) && -1 != $_REQUEST['action2'] ) 
    444             return $_REQUEST['action2']; 
    445  
    446         return false; 
     479     * Get an associative array ( option_name => option_title ) with the list 
     480     * of bulk actions available on this table. 
     481     * 
     482     * @since 3.1.0 
     483     * @access protected 
     484     * 
     485     * @return array 
     486     */ 
     487    protected function get_bulk_actions() 
     488    { 
     489        return array(); 
     490    } 
     491 
     492    /** 
     493     * Extra controls to be displayed between bulk actions and pagination 
     494     * 
     495     * @since 3.1.0 
     496     * @access protected 
     497     * 
     498     * @param string $which 
     499     */ 
     500    protected function extra_tablenav($which) 
     501    { 
     502    } 
     503 
     504    /** 
     505     * Display the pagination. 
     506     * 
     507     * @since 3.1.0 
     508     * @access protected 
     509     * 
     510     * @param string $which 
     511     */ 
     512    protected function pagination($which) 
     513    { 
     514        if (empty($this->_pagination_args)) { 
     515            return; 
     516        } 
     517 
     518        $total_items = $this->_pagination_args['total_items']; 
     519        $total_pages = $this->_pagination_args['total_pages']; 
     520        $infinite_scroll = false; 
     521        if (isset($this->_pagination_args['infinite_scroll'])) { 
     522            $infinite_scroll = $this->_pagination_args['infinite_scroll']; 
     523        } 
     524 
     525        $output = '<span class="displaying-num">' . sprintf(_n('1 item', '%s items', $total_items), number_format_i18n($total_items)) . '</span>'; 
     526 
     527        $current = $this->get_pagenum(); 
     528 
     529        $current_url = set_url_scheme('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); 
     530 
     531        $current_url = remove_query_arg(array('hotkeys_highlight_last', 'hotkeys_highlight_first'), $current_url); 
     532 
     533        $page_links = array(); 
     534 
     535        $disable_first = $disable_last = ''; 
     536        if ($current == 1) { 
     537            $disable_first = ' disabled'; 
     538        } 
     539        if ($current == $total_pages) { 
     540            $disable_last = ' disabled'; 
     541        } 
     542        $page_links[] = sprintf("<a class='%s' title='%s' href='%s'>%s</a>", 
     543            'first-page' . $disable_first, 
     544            esc_attr__('Go to the first page'), 
     545            esc_url(remove_query_arg('paged', $current_url)), 
     546            '&laquo;' 
     547        ); 
     548 
     549        $page_links[] = sprintf("<a class='%s' title='%s' href='%s'>%s</a>", 
     550            'prev-page' . $disable_first, 
     551            esc_attr__('Go to the previous page'), 
     552            esc_url(add_query_arg('paged', max(1, $current - 1), $current_url)), 
     553            '&lsaquo;' 
     554        ); 
     555 
     556        if ('bottom' == $which) { 
     557            $html_current_page = $current; 
     558        } else { 
     559            $html_current_page = sprintf("%s<input class='current-page' id='current-page-selector' title='%s' type='text' name='paged' value='%s' size='%d' />", 
     560                '<label for="current-page-selector" class="screen-reader-text">' . __('Select Page') . '</label>', 
     561                esc_attr__('Current page'), 
     562                $current, 
     563                strlen($total_pages) 
     564            ); 
     565        } 
     566        $html_total_pages = sprintf("<span class='total-pages'>%s</span>", number_format_i18n($total_pages)); 
     567        $page_links[] = '<span class="paging-input">' . sprintf(_x('%1$s of %2$s', 'paging'), $html_current_page, $html_total_pages) . '</span>'; 
     568 
     569        $page_links[] = sprintf("<a class='%s' title='%s' href='%s'>%s</a>", 
     570            'next-page' . $disable_last, 
     571            esc_attr__('Go to the next page'), 
     572            esc_url(add_query_arg('paged', min($total_pages, $current + 1), $current_url)), 
     573            '&rsaquo;' 
     574        ); 
     575 
     576        $page_links[] = sprintf("<a class='%s' title='%s' href='%s'>%s</a>", 
     577            'last-page' . $disable_last, 
     578            esc_attr__('Go to the last page'), 
     579            esc_url(add_query_arg('paged', $total_pages, $current_url)), 
     580            '&raquo;' 
     581        ); 
     582 
     583        $pagination_links_class = 'pagination-links'; 
     584        if (!empty($infinite_scroll)) { 
     585            $pagination_links_class = ' hide-if-js'; 
     586        } 
     587        $output .= "\n<span class='$pagination_links_class'>" . join("\n", $page_links) . '</span>'; 
     588 
     589        if ($total_pages) { 
     590            $page_class = $total_pages < 2 ? ' one-page' : ''; 
     591        } else { 
     592            $page_class = ' no-pages'; 
     593        } 
     594        $this->_pagination = "<div class='tablenav-pages{$page_class}'>$output</div>"; 
     595 
     596        echo $this->_pagination; 
     597    } 
     598 
     599    /** 
     600     * Get a list of CSS classes for the list table table tag. 
     601     * 
     602     * @since 3.1.0 
     603     * @access protected 
     604     * 
     605     * @return array List of CSS classes for the table tag. 
     606     */ 
     607    protected function get_table_classes() 
     608    { 
     609        return array('widefat', 'fixed', $this->_args['plural']); 
     610    } 
     611 
     612    /** 
     613     * Print column headers, accounting for hidden and sortable columns. 
     614     * 
     615     * @since 3.1.0 
     616     * @access public 
     617     * 
     618     * @param bool $with_id Whether to set the id attribute or not 
     619     */ 
     620    public function print_column_headers($with_id = true) 
     621    { 
     622        list($columns, $hidden, $sortable) = $this->get_column_info(); 
     623 
     624        $current_url = set_url_scheme('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); 
     625        $current_url = remove_query_arg('paged', $current_url); 
     626 
     627        if (isset($_GET['orderby'])) 
     628            $current_orderby = $_GET['orderby']; 
     629        else 
     630            $current_orderby = ''; 
     631 
     632        if (isset($_GET['order']) && 'desc' == $_GET['order']) 
     633            $current_order = 'desc'; 
     634        else 
     635            $current_order = 'asc'; 
     636 
     637        if (!empty($columns['cb'])) { 
     638            static $cb_counter = 1; 
     639            $columns['cb'] = '<label class="screen-reader-text" for="cb-select-all-' . $cb_counter . '">' . __('Select All') . '</label>' 
     640                . '<input id="cb-select-all-' . $cb_counter . '" type="checkbox" />'; 
     641            $cb_counter++; 
     642        } 
     643 
     644        foreach ($columns as $column_key => $column_display_name) { 
     645            $class = array('manage-column', "column-$column_key"); 
     646 
     647            $style = ''; 
     648            if (in_array($column_key, $hidden)) 
     649                $style = 'display:none;'; 
     650 
     651            $style = ' style="' . $style . '"'; 
     652 
     653            if ('cb' == $column_key) 
     654                $class[] = 'check-column'; 
     655            elseif (in_array($column_key, array('posts', 'comments', 'links'))) 
     656                $class[] = 'num'; 
     657 
     658            if (isset($sortable[ $column_key ])) { 
     659                list($orderby, $desc_first) = $sortable[ $column_key ]; 
     660 
     661                if ($current_orderby == $orderby) { 
     662                    $order = 'asc' == $current_order ? 'desc' : 'asc'; 
     663                    $class[] = 'sorted'; 
     664                    $class[] = $current_order; 
     665                } else { 
     666                    $order = $desc_first ? 'desc' : 'asc'; 
     667                    $class[] = 'sortable'; 
     668                    $class[] = $desc_first ? 'asc' : 'desc'; 
     669                } 
     670 
     671                $column_display_name = '<a href="' . esc_url(add_query_arg(compact('orderby', 'order'), $current_url)) . '"><span>' . $column_display_name . '</span><span class="sorting-indicator"></span></a>'; 
     672            } 
     673 
     674            $id = $with_id ? "id='$column_key'" : ''; 
     675 
     676            if (!empty($class)) 
     677                $class = "class='" . join(' ', $class) . "'"; 
     678 
     679            echo "<th scope='col' $id $class $style>$column_display_name</th>"; 
     680        } 
     681    } 
     682 
     683    /** 
     684     * Generate the tbody element for the list table. 
     685     * 
     686     * @since 3.1.0 
     687     * @access public 
     688     */ 
     689    public function display_rows_or_placeholder() 
     690    { 
     691        if ($this->has_items()) { 
     692            $this->display_rows(); 
     693        } else { 
     694            echo '<tr class="no-items"><td class="colspanchange" colspan="' . $this->get_column_count() . '">'; 
     695            $this->no_items(); 
     696            echo '</td></tr>'; 
     697        } 
     698    } 
     699 
     700    /** 
     701     * Generate the table rows 
     702     * 
     703     * @since 3.1.0 
     704     * @access public 
     705     */ 
     706    public function display_rows() 
     707    { 
     708        foreach ($this->items as $item) 
     709            $this->single_row($item); 
     710    } 
     711 
     712    /** 
     713     * Generates content for a single row of the table 
     714     * 
     715     * @since 3.1.0 
     716     * @access public 
     717     * 
     718     * @param object $item The current item 
     719     */ 
     720    public function single_row($item) 
     721    { 
     722        static $row_class = ''; 
     723        $row_class = ($row_class == '' ? ' class="alternate"' : ''); 
     724 
     725        echo '<tr' . $row_class . '>'; 
     726        $this->single_row_columns($item); 
     727        echo '</tr>'; 
     728    } 
     729 
     730    /** 
     731     * Generates the columns for a single row of the table 
     732     * 
     733     * @since 3.1.0 
     734     * @access protected 
     735     * 
     736     * @param object $item The current item 
     737     */ 
     738    protected function single_row_columns($item) 
     739    { 
     740        list($columns, $hidden) = $this->get_column_info(); 
     741 
     742        foreach ($columns as $column_name => $column_display_name) { 
     743            $class = "class='$column_name column-$column_name'"; 
     744 
     745            $style = ''; 
     746            if (in_array($column_name, $hidden)) 
     747                $style = ' style="display:none;"'; 
     748 
     749            $attributes = "$class$style"; 
     750 
     751            if ('cb' == $column_name) { 
     752                echo '<th scope="row" class="check-column">'; 
     753                echo $this->column_cb($item); 
     754                echo '</th>'; 
     755            } elseif (method_exists($this, 'column_' . $column_name)) { 
     756                echo "<td $attributes>"; 
     757                echo call_user_func(array($this, 'column_' . $column_name), $item); 
     758                echo "</td>"; 
     759            } else { 
     760                echo "<td $attributes>"; 
     761                echo $this->column_default($item, $column_name); 
     762                echo "</td>"; 
     763            } 
     764        } 
     765    } 
     766 
     767    /** 
     768     * Return number of visible columns 
     769     * 
     770     * @since 3.1.0 
     771     * @access public 
     772     * 
     773     * @return int 
     774     */ 
     775    public function get_column_count() 
     776    { 
     777        list ($columns, $hidden) = $this->get_column_info(); 
     778        $hidden = array_intersect(array_keys($columns), array_filter($hidden)); 
     779        return count($columns) - count($hidden); 
     780    } 
     781 
     782    /** 
     783     * Get a list of all, hidden and sortable columns, with filter applied 
     784     * 
     785     * @since 3.1.0 
     786     * @access protected 
     787     * 
     788     * @return array 
     789     */ 
     790    protected function get_column_info() 
     791    { 
     792        if (isset($this->_column_headers)) 
     793            return $this->_column_headers; 
     794 
     795        $columns = get_column_headers($this->screen); 
     796        $hidden = get_hidden_columns($this->screen); 
     797 
     798        $sortable_columns = $this->get_sortable_columns(); 
     799        /** 
     800         * Filter the list table sortable columns for a specific screen. 
     801         * 
     802         * The dynamic portion of the hook name, `$this->screen->id`, refers 
     803         * to the ID of the current screen, usually a string. 
     804         * 
     805         * @since 3.5.0 
     806         * 
     807         * @param array $sortable_columns An array of sortable columns. 
     808         */ 
     809        $_sortable = apply_filters("manage_{$this->screen->id}_sortable_columns", $sortable_columns); 
     810 
     811        $sortable = array(); 
     812        foreach ($_sortable as $id => $data) { 
     813            if (empty($data)) 
     814                continue; 
     815 
     816            $data = (array)$data; 
     817            if (!isset($data[1])) 
     818                $data[1] = false; 
     819 
     820            $sortable[ $id ] = $data; 
     821        } 
     822 
     823        $this->_column_headers = array($columns, $hidden, $sortable); 
     824 
     825        return $this->_column_headers; 
     826    } 
     827 
     828    /** 
     829     * Get a list of sortable columns. The format is: 
     830     * 'internal-name' => 'orderby' 
     831     * or 
     832     * 'internal-name' => array( 'orderby', true ) 
     833     * 
     834     * The second format will make the initial sorting order be descending 
     835     * 
     836     * @since 3.1.0 
     837     * @access protected 
     838     * 
     839     * @return array 
     840     */ 
     841    protected function get_sortable_columns() 
     842    { 
     843        return array(); 
     844    } 
     845 
     846    /** 
     847     * Message to be displayed when there are no items 
     848     * 
     849     * @since 3.1.0 
     850     * @access public 
     851     */ 
     852    public function no_items() 
     853    { 
     854        _e('No items found.'); 
     855    } 
     856 
     857    /** 
     858     * Handle an incoming ajax request (called from admin-ajax.php) 
     859     * 
     860     * @since 3.1.0 
     861     * @access public 
     862     */ 
     863    public function ajax_response() 
     864    { 
     865        $this->prepare_items(); 
     866 
     867        ob_start(); 
     868        if (!empty($_REQUEST['no_placeholder'])) { 
     869            $this->display_rows(); 
     870        } else { 
     871            $this->display_rows_or_placeholder(); 
     872        } 
     873 
     874        $rows = ob_get_clean(); 
     875 
     876        $response = array('rows' => $rows); 
     877 
     878        if (isset($this->_pagination_args['total_items'])) { 
     879            $response['total_items_i18n'] = sprintf( 
     880                _n('1 item', '%s items', $this->_pagination_args['total_items']), 
     881                number_format_i18n($this->_pagination_args['total_items']) 
     882            ); 
     883        } 
     884        if (isset($this->_pagination_args['total_pages'])) { 
     885            $response['total_pages'] = $this->_pagination_args['total_pages']; 
     886            $response['total_pages_i18n'] = number_format_i18n($this->_pagination_args['total_pages']); 
     887        } 
     888 
     889        die(wp_json_encode($response)); 
     890    } 
     891 
     892    /** 
     893     * Prepares the list of items for displaying. 
     894     * @uses WP_List_Table::set_pagination_args() 
     895     * 
     896     * @since 3.1.0 
     897     * @access public 
     898     * @abstract 
     899     */ 
     900    public function prepare_items() 
     901    { 
     902        die('function WP_List_Table::prepare_items() must be over-ridden in a sub-class.'); 
     903    } 
     904 
     905    /** 
     906     * Send required variables to JavaScript land 
     907     * 
     908     * @access public 
     909     */ 
     910    public function _js_vars() 
     911    { 
     912        $args = array( 
     913            'class'  => get_class($this), 
     914            'screen' => array( 
     915                'id'   => $this->screen->id, 
     916                'base' => $this->screen->base, 
     917            ) 
     918        ); 
     919 
     920        printf("<script type='text/javascript'>list_args = %s;</script>\n", wp_json_encode($args)); 
     921    } 
     922 
     923    /** 
     924     * An internal method that sets all the necessary pagination arguments 
     925     * 
     926     * @param array $args An associative array with information about the pagination 
     927     * @access protected 
     928     */ 
     929    protected function set_pagination_args($args) 
     930    { 
     931        $args = wp_parse_args($args, array( 
     932            'total_items' => 0, 
     933            'total_pages' => 0, 
     934            'per_page'    => 0, 
     935        )); 
     936 
     937        if (!$args['total_pages'] && $args['per_page'] > 0) 
     938            $args['total_pages'] = ceil($args['total_items'] / $args['per_page']); 
     939 
     940        // Redirect if page number is invalid and headers are not already sent. 
     941        if (!headers_sent() && (!defined('DOING_AJAX') || !DOING_AJAX) && $args['total_pages'] > 0 && $this->get_pagenum() > $args['total_pages']) { 
     942            wp_redirect(add_query_arg('paged', $args['total_pages'])); 
     943            exit; 
     944        } 
     945 
     946        $this->_pagination_args = $args; 
     947    } 
     948 
     949    /** 
     950     * Get the current page number 
     951     * 
     952     * @since 3.1.0 
     953     * @access public 
     954     * 
     955     * @return int 
     956     */ 
     957    public function get_pagenum() 
     958    { 
     959        $pagenum = isset($_REQUEST['paged']) ? absint($_REQUEST['paged']) : 0; 
     960 
     961        if (isset($this->_pagination_args['total_pages']) && $pagenum > $this->_pagination_args['total_pages']) 
     962            $pagenum = $this->_pagination_args['total_pages']; 
     963 
     964        return max(1, $pagenum); 
    447965    } 
    448966 
     
    457975     * @return string 
    458976     */ 
    459     protected function row_actions( $actions, $always_visible = false ) { 
    460         $action_count = count( $actions ); 
     977    protected function row_actions($actions, $always_visible = false) 
     978    { 
     979        $action_count = count($actions); 
    461980        $i = 0; 
    462981 
    463         if ( !$action_count ) 
     982        if (!$action_count) 
    464983            return ''; 
    465984 
    466         $out = '<div class="' . ( $always_visible ? 'row-actions visible' : 'row-actions' ) . '">'; 
    467         foreach ( $actions as $action => $link ) { 
     985        $out = '<div class="' . ($always_visible ? 'row-actions visible' : 'row-actions') . '">'; 
     986        foreach ($actions as $action => $link) { 
    468987            ++$i; 
    469             ( $i == $action_count ) ? $sep = '' : $sep = ' | '; 
     988            ($i == $action_count) ? $sep = '' : $sep = ' | '; 
    470989            $out .= "<span class='$action'>$link$sep</span>"; 
    471990        } 
     
    4831002     * @param string $post_type 
    4841003     */ 
    485     protected function months_dropdown( $post_type ) { 
     1004    protected function months_dropdown($post_type) 
     1005    { 
    4861006        global $wpdb, $wp_locale; 
    4871007 
    488         $months = $wpdb->get_results( $wpdb->prepare( " 
     1008        $months = $wpdb->get_results($wpdb->prepare(" 
    4891009            SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month 
    4901010            FROM $wpdb->posts 
    4911011            WHERE post_type = %s 
    4921012            ORDER BY post_date DESC 
    493         ", $post_type ) ); 
     1013        ", $post_type)); 
    4941014 
    4951015        /** 
     
    4981018         * @since 3.7.0 
    4991019         * 
    500          * @param object $months    The months drop-down query results. 
     1020         * @param object $months The months drop-down query results. 
    5011021         * @param string $post_type The post type. 
    5021022         */ 
    503         $months = apply_filters( 'months_dropdown_results', $months, $post_type ); 
    504  
    505         $month_count = count( $months ); 
    506  
    507         if ( !$month_count || ( 1 == $month_count && 0 == $months[0]->month ) ) 
     1023        $months = apply_filters('months_dropdown_results', $months, $post_type); 
     1024 
     1025        $month_count = count($months); 
     1026 
     1027        if (!$month_count || (1 == $month_count && 0 == $months[0]->month)) 
    5081028            return; 
    5091029 
    510         $m = isset( $_GET['m'] ) ? (int) $_GET['m'] : 0; 
    511 ?> 
    512         <label for="filter-by-date" class="screen-reader-text"><?php _e( 'Filter by date' ); ?></label> 
     1030        $m = isset($_GET['m']) ? (int)$_GET['m'] : 0; 
     1031        ?> 
     1032        <label for="filter-by-date" class="screen-reader-text"><?php _e('Filter by date'); ?></label> 
    5131033        <select name="m" id="filter-by-date"> 
    514             <option<?php selected( $m, 0 ); ?> value="0"><?php _e( 'All dates' ); ?></option> 
    515 <?php 
    516         foreach ( $months as $arc_row ) { 
    517             if ( 0 == $arc_row->year ) 
    518                 continue; 
    519  
    520             $month = zeroise( $arc_row->month, 2 ); 
    521             $year = $arc_row->year; 
    522  
    523             printf( "<option %s value='%s'>%s</option>\n", 
    524                 selected( $m, $year . $month, false ), 
    525                 esc_attr( $arc_row->year . $month ), 
    526                 /* translators: 1: month name, 2: 4-digit year */ 
    527                 sprintf( __( '%1$s %2$d' ), $wp_locale->get_month( $month ), $year ) 
    528             ); 
    529         } 
    530 ?> 
     1034            <option<?php selected($m, 0); ?> value="0"><?php _e('All dates'); ?></option> 
     1035            <?php 
     1036            foreach ($months as $arc_row) { 
     1037                if (0 == $arc_row->year) 
     1038                    continue; 
     1039 
     1040                $month = zeroise($arc_row->month, 2); 
     1041                $year = $arc_row->year; 
     1042 
     1043                printf("<option %s value='%s'>%s</option>\n", 
     1044                    selected($m, $year . $month, false), 
     1045                    esc_attr($arc_row->year . $month), 
     1046                    /* translators: 1: month name, 2: 4-digit year */ 
     1047                    sprintf(__('%1$s %2$d'), $wp_locale->get_month($month), $year) 
     1048                ); 
     1049            } 
     1050            ?> 
    5311051        </select> 
    532 <?php 
     1052        <?php 
    5331053    } 
    5341054 
     
    5411061     * @param string $current_mode 
    5421062     */ 
    543     protected function view_switcher( $current_mode ) { 
    544 ?> 
    545         <input type="hidden" name="mode" value="<?php echo esc_attr( $current_mode ); ?>" /> 
     1063    protected function view_switcher($current_mode) 
     1064    { 
     1065        ?> 
     1066        <input type="hidden" name="mode" value="<?php echo esc_attr($current_mode); ?>"/> 
    5461067        <div class="view-switch"> 
    547 <?php 
    548             foreach ( $this->modes as $mode => $title ) { 
    549                 $classes = array( 'view-' . $mode ); 
    550                 if ( $current_mode == $mode ) 
     1068            <?php 
     1069            foreach ($this->modes as $mode => $title) { 
     1070                $classes = array('view-' . $mode); 
     1071                if ($current_mode == $mode) 
    5511072                    $classes[] = 'current'; 
    5521073                printf( 
    5531074                    "<a href='%s' class='%s' id='view-switch-$mode'><span class='screen-reader-text'>%s</span></a>\n", 
    554                     esc_url( add_query_arg( 'mode', $mode ) ), 
    555                     implode( ' ', $classes ), 
     1075                    esc_url(add_query_arg('mode', $mode)), 
     1076                    implode(' ', $classes), 
    5561077                    $title 
    5571078                ); 
    5581079            } 
    559         ?> 
     1080            ?> 
    5601081        </div> 
    561 <?php 
     1082        <?php 
    5621083    } 
    5631084 
     
    5681089     * @access protected 
    5691090     * 
    570      * @param int $post_id          The post ID. 
     1091     * @param int $post_id The post ID. 
    5711092     * @param int $pending_comments Number of pending comments. 
    5721093     */ 
    573     protected function comments_bubble( $post_id, $pending_comments ) { 
    574         $pending_phrase = sprintf( __( '%s pending' ), number_format( $pending_comments ) ); 
    575  
    576         if ( $pending_comments ) 
     1094    protected function comments_bubble($post_id, $pending_comments) 
     1095    { 
     1096        $pending_phrase = sprintf(__('%s pending'), number_format($pending_comments)); 
     1097 
     1098        if ($pending_comments) 
    5771099            echo '<strong>'; 
    5781100 
    579         echo "<a href='" . esc_url( add_query_arg( 'p', $post_id, admin_url( 'edit-comments.php' ) ) ) . "' title='" . esc_attr( $pending_phrase ) . "' class='post-com-count'><span class='comment-count'>" . number_format_i18n( get_comments_number() ) . "</span></a>"; 
    580  
    581         if ( $pending_comments ) 
     1101        echo "<a href='" . esc_url(add_query_arg('p', $post_id, admin_url('edit-comments.php'))) . "' title='" . esc_attr($pending_phrase) . "' class='post-com-count'><span class='comment-count'>" . number_format_i18n(get_comments_number()) . "</span></a>"; 
     1102 
     1103        if ($pending_comments) 
    5821104            echo '</strong>'; 
    5831105    } 
    5841106 
    5851107    /** 
    586      * Get the current page number 
    587      * 
    588      * @since 3.1.0 
    589      * @access public 
    590      * 
     1108     * Get number of items to display on a single page 
     1109     * 
     1110     * @since 3.1.0 
     1111     * @access protected 
     1112     * 
     1113     * @param string $option 
     1114     * @param int $default 
    5911115     * @return int 
    5921116     */ 
    593     public function get_pagenum() { 
    594         $pagenum = isset( $_REQUEST['paged'] ) ? absint( $_REQUEST['paged'] ) : 0; 
    595  
    596         if( isset( $this->_pagination_args['total_pages'] ) && $pagenum > $this->_pagination_args['total_pages'] ) 
    597             $pagenum = $this->_pagination_args['total_pages']; 
    598  
    599         return max( 1, $pagenum ); 
    600     } 
    601  
    602     /** 
    603      * Get number of items to display on a single page 
    604      * 
    605      * @since 3.1.0 
    606      * @access protected 
    607      * 
    608      * @param string $option 
    609      * @param int    $default 
    610      * @return int 
    611      */ 
    612     protected function get_items_per_page( $option, $default = 20 ) { 
    613         $per_page = (int) get_user_option( $option ); 
    614         if ( empty( $per_page ) || $per_page < 1 ) 
     1117    protected function get_items_per_page($option, $default = 20) 
     1118    { 
     1119        $per_page = (int)get_user_option($option); 
     1120        if (empty($per_page) || $per_page < 1) 
    6151121            $per_page = $default; 
    6161122 
     
    6281134         * @param int $per_page Number of items to be displayed. Default 20. 
    6291135         */ 
    630         return (int) apply_filters( $option, $per_page ); 
    631     } 
    632  
    633     /** 
    634      * Display the pagination. 
    635      * 
    636      * @since 3.1.0 
    637      * @access protected 
    638      * 
    639      * @param string $which 
    640      */ 
    641     protected function pagination( $which ) { 
    642         if ( empty( $this->_pagination_args ) ) { 
    643             return; 
    644         } 
    645  
    646         $total_items = $this->_pagination_args['total_items']; 
    647         $total_pages = $this->_pagination_args['total_pages']; 
    648         $infinite_scroll = false; 
    649         if ( isset( $this->_pagination_args['infinite_scroll'] ) ) { 
    650             $infinite_scroll = $this->_pagination_args['infinite_scroll']; 
    651         } 
    652  
    653         $output = '<span class="displaying-num">' . sprintf( _n( '1 item', '%s items', $total_items ), number_format_i18n( $total_items ) ) . '</span>'; 
    654  
    655         $current = $this->get_pagenum(); 
    656  
    657         $current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ); 
    658  
    659         $current_url = remove_query_arg( array( 'hotkeys_highlight_last', 'hotkeys_highlight_first' ), $current_url ); 
    660  
    661         $page_links = array(); 
    662  
    663         $disable_first = $disable_last = ''; 
    664         if ( $current == 1 ) { 
    665             $disable_first = ' disabled'; 
    666         } 
    667         if ( $current == $total_pages ) { 
    668             $disable_last = ' disabled'; 
    669         } 
    670         $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>", 
    671             'first-page' . $disable_first, 
    672             esc_attr__( 'Go to the first page' ), 
    673             esc_url( remove_query_arg( 'paged', $current_url ) ), 
    674             '&laquo;' 
    675         ); 
    676  
    677         $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>", 
    678             'prev-page' . $disable_first, 
    679             esc_attr__( 'Go to the previous page' ), 
    680             esc_url( add_query_arg( 'paged', max( 1, $current-1 ), $current_url ) ), 
    681             '&lsaquo;' 
    682         ); 
    683  
    684         if ( 'bottom' == $which ) { 
    685             $html_current_page = $current; 
    686         } else { 
    687             $html_current_page = sprintf( "%s<input class='current-page' id='current-page-selector' title='%s' type='text' name='paged' value='%s' size='%d' />", 
    688                 '<label for="current-page-selector" class="screen-reader-text">' . __( 'Select Page' ) . '</label>', 
    689                 esc_attr__( 'Current page' ), 
    690                 $current, 
    691                 strlen( $total_pages ) 
    692             ); 
    693         } 
    694         $html_total_pages = sprintf( "<span class='total-pages'>%s</span>", number_format_i18n( $total_pages ) ); 
    695         $page_links[] = '<span class="paging-input">' . sprintf( _x( '%1$s of %2$s', 'paging' ), $html_current_page, $html_total_pages ) . '</span>'; 
    696  
    697         $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>", 
    698             'next-page' . $disable_last, 
    699             esc_attr__( 'Go to the next page' ), 
    700             esc_url( add_query_arg( 'paged', min( $total_pages, $current+1 ), $current_url ) ), 
    701             '&rsaquo;' 
    702         ); 
    703  
    704         $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>", 
    705             'last-page' . $disable_last, 
    706             esc_attr__( 'Go to the last page' ), 
    707             esc_url( add_query_arg( 'paged', $total_pages, $current_url ) ), 
    708             '&raquo;' 
    709         ); 
    710  
    711         $pagination_links_class = 'pagination-links'; 
    712         if ( ! empty( $infinite_scroll ) ) { 
    713             $pagination_links_class = ' hide-if-js'; 
    714         } 
    715         $output .= "\n<span class='$pagination_links_class'>" . join( "\n", $page_links ) . '</span>'; 
    716  
    717         if ( $total_pages ) { 
    718             $page_class = $total_pages < 2 ? ' one-page' : ''; 
    719         } else { 
    720             $page_class = ' no-pages'; 
    721         } 
    722         $this->_pagination = "<div class='tablenav-pages{$page_class}'>$output</div>"; 
    723  
    724         echo $this->_pagination; 
    725     } 
    726  
    727     /** 
    728      * Get a list of columns. The format is: 
    729      * 'internal-name' => 'Title' 
    730      * 
    731      * @since 3.1.0 
    732      * @access public 
    733      * @abstract 
    734      * 
    735      * @return array 
    736      */ 
    737     public function get_columns() { 
    738         die( 'function WP_List_Table::get_columns() must be over-ridden in a sub-class.' ); 
    739     } 
    740  
    741     /** 
    742      * Get a list of sortable columns. The format is: 
    743      * 'internal-name' => 'orderby' 
    744      * or 
    745      * 'internal-name' => array( 'orderby', true ) 
    746      * 
    747      * The second format will make the initial sorting order be descending 
    748      * 
    749      * @since 3.1.0 
    750      * @access protected 
    751      * 
    752      * @return array 
    753      */ 
    754     protected function get_sortable_columns() { 
    755         return array(); 
    756     } 
    757  
    758     /** 
    759      * Get a list of all, hidden and sortable columns, with filter applied 
    760      * 
    761      * @since 3.1.0 
    762      * @access protected 
    763      * 
    764      * @return array 
    765      */ 
    766     protected function get_column_info() { 
    767         if ( isset( $this->_column_headers ) ) 
    768             return $this->_column_headers; 
    769  
    770         $columns = get_column_headers( $this->screen ); 
    771         $hidden = get_hidden_columns( $this->screen ); 
    772  
    773         $sortable_columns = $this->get_sortable_columns(); 
    774         /** 
    775          * Filter the list table sortable columns for a specific screen. 
    776          * 
    777          * The dynamic portion of the hook name, `$this->screen->id`, refers 
    778          * to the ID of the current screen, usually a string. 
    779          * 
    780          * @since 3.5.0 
    781          * 
    782          * @param array $sortable_columns An array of sortable columns. 
    783          */ 
    784         $_sortable = apply_filters( "manage_{$this->screen->id}_sortable_columns", $sortable_columns ); 
    785  
    786         $sortable = array(); 
    787         foreach ( $_sortable as $id => $data ) { 
    788             if ( empty( $data ) ) 
    789                 continue; 
    790  
    791             $data = (array) $data; 
    792             if ( !isset( $data[1] ) ) 
    793                 $data[1] = false; 
    794  
    795             $sortable[$id] = $data; 
    796         } 
    797  
    798         $this->_column_headers = array( $columns, $hidden, $sortable ); 
    799  
    800         return $this->_column_headers; 
    801     } 
    802  
    803     /** 
    804      * Return number of visible columns 
    805      * 
    806      * @since 3.1.0 
    807      * @access public 
    808      * 
    809      * @return int 
    810      */ 
    811     public function get_column_count() { 
    812         list ( $columns, $hidden ) = $this->get_column_info(); 
    813         $hidden = array_intersect( array_keys( $columns ), array_filter( $hidden ) ); 
    814         return count( $columns ) - count( $hidden ); 
    815     } 
    816  
    817     /** 
    818      * Print column headers, accounting for hidden and sortable columns. 
    819      * 
    820      * @since 3.1.0 
    821      * @access public 
    822      * 
    823      * @param bool $with_id Whether to set the id attribute or not 
    824      */ 
    825     public function print_column_headers( $with_id = true ) { 
    826         list( $columns, $hidden, $sortable ) = $this->get_column_info(); 
    827  
    828         $current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ); 
    829         $current_url = remove_query_arg( 'paged', $current_url ); 
    830  
    831         if ( isset( $_GET['orderby'] ) ) 
    832             $current_orderby = $_GET['orderby']; 
    833         else 
    834             $current_orderby = ''; 
    835  
    836         if ( isset( $_GET['order'] ) && 'desc' == $_GET['order'] ) 
    837             $current_order = 'desc'; 
    838         else 
    839             $current_order = 'asc'; 
    840  
    841         if ( ! empty( $columns['cb'] ) ) { 
    842             static $cb_counter = 1; 
    843             $columns['cb'] = '<label class="screen-reader-text" for="cb-select-all-' . $cb_counter . '">' . __( 'Select All' ) . '</label>' 
    844                 . '<input id="cb-select-all-' . $cb_counter . '" type="checkbox" />'; 
    845             $cb_counter++; 
    846         } 
    847  
    848         foreach ( $columns as $column_key => $column_display_name ) { 
    849             $class = array( 'manage-column', "column-$column_key" ); 
    850  
    851             $style = ''; 
    852             if ( in_array( $column_key, $hidden ) ) 
    853                 $style = 'display:none;'; 
    854  
    855             $style = ' style="' . $style . '"'; 
    856  
    857             if ( 'cb' == $column_key ) 
    858                 $class[] = 'check-column'; 
    859             elseif ( in_array( $column_key, array( 'posts', 'comments', 'links' ) ) ) 
    860                 $class[] = 'num'; 
    861  
    862             if ( isset( $sortable[$column_key] ) ) { 
    863                 list( $orderby, $desc_first ) = $sortable[$column_key]; 
    864  
    865                 if ( $current_orderby == $orderby ) { 
    866                     $order = 'asc' == $current_order ? 'desc' : 'asc'; 
    867                     $class[] = 'sorted'; 
    868                     $class[] = $current_order; 
    869                 } else { 
    870                     $order = $desc_first ? 'desc' : 'asc'; 
    871                     $class[] = 'sortable'; 
    872                     $class[] = $desc_first ? 'asc' : 'desc'; 
    873                 } 
    874  
    875                 $column_display_name = '<a href="' . esc_url( add_query_arg( compact( 'orderby', 'order' ), $current_url ) ) . '"><span>' . $column_display_name . '</span><span class="sorting-indicator"></span></a>'; 
    876             } 
    877  
    878             $id = $with_id ? "id='$column_key'" : ''; 
    879  
    880             if ( !empty( $class ) ) 
    881                 $class = "class='" . join( ' ', $class ) . "'"; 
    882  
    883             echo "<th scope='col' $id $class $style>$column_display_name</th>"; 
    884         } 
    885     } 
    886  
    887     /** 
    888      * Display the table 
    889      * 
    890      * @since 3.1.0 
    891      * @access public 
    892      */ 
    893     public function display() { 
    894         $singular = $this->_args['singular']; 
    895  
    896         $this->display_tablenav( 'top' ); 
    897  
    898 ?> 
    899 <table class="wp-list-table <?php echo implode( ' ', $this->get_table_classes() ); ?>"> 
    900     <thead> 
    901     <tr> 
    902         <?php $this->print_column_headers(); ?> 
    903     </tr> 
    904     </thead> 
    905  
    906     <tfoot> 
    907     <tr> 
    908         <?php $this->print_column_headers( false ); ?> 
    909     </tr> 
    910     </tfoot> 
    911  
    912     <tbody id="the-list"<?php 
    913         if ( $singular ) { 
    914             echo " data-wp-lists='list:$singular'"; 
    915         } ?>> 
    916         <?php $this->display_rows_or_placeholder(); ?> 
    917     </tbody> 
    918 </table> 
    919 <?php 
    920         $this->display_tablenav( 'bottom' ); 
    921     } 
    922  
    923     /** 
    924      * Get a list of CSS classes for the list table table tag. 
    925      * 
    926      * @since 3.1.0 
    927      * @access protected 
    928      * 
    929      * @return array List of CSS classes for the table tag. 
    930      */ 
    931     protected function get_table_classes() { 
    932         return array( 'widefat', 'fixed', $this->_args['plural'] ); 
    933     } 
    934  
    935     /** 
    936      * Generate the table navigation above or below the table 
    937      * 
    938      * @since 3.1.0 
    939      * @access protected 
    940      * @param string $which 
    941      */ 
    942     protected function display_tablenav( $which ) { 
    943         if ( 'top' == $which ) 
    944             wp_nonce_field( 'bulk-' . $this->_args['plural'] ); 
    945 ?> 
    946     <div class="tablenav <?php echo esc_attr( $which ); ?>"> 
    947  
    948         <div class="alignleft actions bulkactions"> 
    949             <?php $this->bulk_actions( $which ); ?> 
    950         </div> 
    951 <?php 
    952         $this->extra_tablenav( $which ); 
    953         $this->pagination( $which ); 
    954 ?> 
    955  
    956         <br class="clear" /> 
    957     </div> 
    958 <?php 
    959     } 
    960  
    961     /** 
    962      * Extra controls to be displayed between bulk actions and pagination 
    963      * 
    964      * @since 3.1.0 
    965      * @access protected 
    966      * 
    967      * @param string $which 
    968      */ 
    969     protected function extra_tablenav( $which ) {} 
    970  
    971     /** 
    972      * Generate the tbody element for the list table. 
    973      * 
    974      * @since 3.1.0 
    975      * @access public 
    976      */ 
    977     public function display_rows_or_placeholder() { 
    978         if ( $this->has_items() ) { 
    979             $this->display_rows(); 
    980         } else { 
    981             echo '<tr class="no-items"><td class="colspanchange" colspan="' . $this->get_column_count() . '">'; 
    982             $this->no_items(); 
    983             echo '</td></tr>'; 
    984         } 
    985     } 
    986  
    987     /** 
    988      * Generate the table rows 
    989      * 
    990      * @since 3.1.0 
    991      * @access public 
    992      */ 
    993     public function display_rows() { 
    994         foreach ( $this->items as $item ) 
    995             $this->single_row( $item ); 
    996     } 
    997  
    998     /** 
    999      * Generates content for a single row of the table 
    1000      * 
    1001      * @since 3.1.0 
    1002      * @access public 
    1003      * 
    1004      * @param object $item The current item 
    1005      */ 
    1006     public function single_row( $item ) { 
    1007         static $row_class = ''; 
    1008         $row_class = ( $row_class == '' ? ' class="alternate"' : '' ); 
    1009  
    1010         echo '<tr' . $row_class . '>'; 
    1011         $this->single_row_columns( $item ); 
    1012         echo '</tr>'; 
    1013     } 
    1014  
    1015     /** 
    1016      * Generates the columns for a single row of the table 
    1017      * 
    1018      * @since 3.1.0 
    1019      * @access protected 
    1020      * 
    1021      * @param object $item The current item 
    1022      */ 
    1023     protected function single_row_columns( $item ) { 
    1024         list( $columns, $hidden ) = $this->get_column_info(); 
    1025  
    1026         foreach ( $columns as $column_name => $column_display_name ) { 
    1027             $class = "class='$column_name column-$column_name'"; 
    1028  
    1029             $style = ''; 
    1030             if ( in_array( $column_name, $hidden ) ) 
    1031                 $style = ' style="display:none;"'; 
    1032  
    1033             $attributes = "$class$style"; 
    1034  
    1035             if ( 'cb' == $column_name ) { 
    1036                 echo '<th scope="row" class="check-column">'; 
    1037                 echo $this->column_cb( $item ); 
    1038                 echo '</th>'; 
    1039             } 
    1040             elseif ( method_exists( $this, 'column_' . $column_name ) ) { 
    1041                 echo "<td $attributes>"; 
    1042                 echo call_user_func( array( $this, 'column_' . $column_name ), $item ); 
    1043                 echo "</td>"; 
    1044             } 
    1045             else { 
    1046                 echo "<td $attributes>"; 
    1047                 echo $this->column_default( $item, $column_name ); 
    1048                 echo "</td>"; 
    1049             } 
    1050         } 
    1051     } 
    1052  
    1053     /** 
    1054      * Handle an incoming ajax request (called from admin-ajax.php) 
    1055      * 
    1056      * @since 3.1.0 
    1057      * @access public 
    1058      */ 
    1059     public function ajax_response() { 
    1060         $this->prepare_items(); 
    1061  
    1062         ob_start(); 
    1063         if ( ! empty( $_REQUEST['no_placeholder'] ) ) { 
    1064             $this->display_rows(); 
    1065         } else { 
    1066             $this->display_rows_or_placeholder(); 
    1067         } 
    1068  
    1069         $rows = ob_get_clean(); 
    1070  
    1071         $response = array( 'rows' => $rows ); 
    1072  
    1073         if ( isset( $this->_pagination_args['total_items'] ) ) { 
    1074             $response['total_items_i18n'] = sprintf( 
    1075                 _n( '1 item', '%s items', $this->_pagination_args['total_items'] ), 
    1076                 number_format_i18n( $this->_pagination_args['total_items'] ) 
    1077             ); 
    1078         } 
    1079         if ( isset( $this->_pagination_args['total_pages'] ) ) { 
    1080             $response['total_pages'] = $this->_pagination_args['total_pages']; 
    1081             $response['total_pages_i18n'] = number_format_i18n( $this->_pagination_args['total_pages'] ); 
    1082         } 
    1083  
    1084         die( wp_json_encode( $response ) ); 
    1085     } 
    1086  
    1087     /** 
    1088      * Send required variables to JavaScript land 
    1089      * 
    1090      * @access public 
    1091      */ 
    1092     public function _js_vars() { 
    1093         $args = array( 
    1094             'class'  => get_class( $this ), 
    1095             'screen' => array( 
    1096                 'id'   => $this->screen->id, 
    1097                 'base' => $this->screen->base, 
    1098             ) 
    1099         ); 
    1100  
    1101         printf( "<script type='text/javascript'>list_args = %s;</script>\n", wp_json_encode( $args ) ); 
     1136        return (int)apply_filters($option, $per_page); 
    11021137    } 
    11031138} 
  • report-content/trunk/inc/class-wprc-table.php

    r1143800 r1552692  
    11<?php 
    22 
    3 if(!class_exists('WPRC_List_Table')){ 
    4     require_once( 'class-wprc-list-table.php' ); 
     3if (!class_exists('WPRC_List_Table')) { 
     4    require_once('class-wprc-list-table.php'); 
    55} 
    66 
    7 class WPRC_Table extends WPRC_List_Table { 
     7class WPRC_Table extends WPRC_List_Table 
     8{ 
    89 
    9     function __construct(){ 
    10         global $status, $page; 
     10    function __construct() 
     11    { 
     12        global $status, $page; 
    1113 
    12         global $wpdb; 
    13         $this->table = $wpdb->prefix . "contentreports"; 
    14                  
    15         //Set parent defaults 
    16         parent::__construct( array( 
    17             'singular'  => 'report',     //singular name of the listed records 
    18             'plural'    => 'reports',    //plural name of the listed records 
    19             'ajax'      => false        //does this table support ajax? 
    20         ) ); 
    21     } 
    22      
    23     function column_default($item, $column_name){ 
    24         return $item[$column_name]; 
    25     } 
    26      
    27     function column_reporter($item){ 
    28         return $item['reporter_name'].'<br/><a href="mailto:'.$item['reporter_email'].'">'.$item['reporter_email'].'</a>'; 
    29     } 
    30     function column_post($item){ 
    31         $post = get_post($item['post_id']); 
    32          
    33         if( is_a($post, 'WP_Post') ) 
    34             return '<a href="'.get_edit_post_link( $post->ID ).'#wprc-reports">'.$post->post_title.'</a>'; 
     14        global $wpdb; 
     15        $this->table = $wpdb->prefix . "contentreports"; 
    3516 
    36         return 'Post Not Found'; 
    37     } 
     17        //Set parent defaults 
     18        parent::__construct(array( 
     19            'singular' => 'report',     //singular name of the listed records 
     20            'plural'   => 'reports',    //plural name of the listed records 
     21            'ajax'     => false        //does this table support ajax? 
     22        )); 
     23    } 
    3824 
    39     function column_status($item){ 
    40         return '<span class="'.$item['status'].'-report">&#x25cf;</a>'; 
    41     } 
     25    function column_default($item, $column_name) 
     26    { 
     27        return $item[ $column_name ]; 
     28    } 
    4229 
    43     function column_cb($item){ 
    44         return sprintf( 
    45             '<input type="checkbox" name="%1$s[]" value="%2$s" />', 
    46             /*$1%s*/ $this->_args['singular'],  //Let's simply repurpose the table's singular label ("movie") 
    47             /*$2%s*/ $item['id']                //The value of the checkbox should be the record's id 
    48         ); 
    49     } 
    50      
    51     function get_columns(){ 
    52         $columns = array( 
    53             'cb'                => '<input type="checkbox" />', //Render a checkbox instead of text 
    54             'reason'            => 'Issue', 
    55             'status'            => 'Status', 
    56             'details'           => 'Details', 
    57             'time'              => 'Time', 
    58             'reporter'          => 'Reporter', 
    59             'post'              => 'Post' 
    60         ); 
    61         return $columns; 
    62     } 
     30    function column_reporter($item) 
     31    { 
     32        return $item['reporter_name'] . '<br/><a href="mailto:' . $item['reporter_email'] . '">' . $item['reporter_email'] . '</a>'; 
     33    } 
    6334 
    64     function get_sortable_columns() { 
    65         $sortable_columns = array( 
    66             'time'     => array('time',true),     //true means it's already sorted 
    67         ); 
    68         return $sortable_columns; 
    69     } 
    70      
    71     function get_bulk_actions() { 
    72         $permission_options = get_option('wprc_permissions_settings'); 
    73         $bulk_action_permission = (isset($permission_options['minimum_role_change']))?$permission_options['minimum_role_change']:'activate_plugins'; 
    74         if(!current_user_can($bulk_action_permission)) 
    75             return array(); 
     35    function column_post($item) 
     36    { 
     37        $post = get_post($item['post_id']); 
    7638 
    77         $actions = array( 
    78             'change_status'     =>  'Mark as resolved', 
    79             'delete'            =>  'Delete' 
    80         ); 
    81         return $actions; 
    82     } 
     39        if (is_a($post, 'WP_Post')) 
     40            return '<a href="' . get_edit_post_link($post->ID) . '#wprc-reports">' . $post->post_title . '</a>'; 
    8341 
    84     function process_bulk_action() { 
    85         global $wpdb; 
    86         //Detect when a bulk action is being triggered... 
    87         if( 'delete'===$this->current_action() ) { 
    88             $id_string = join(',', $_GET['report']); 
    89             $query = "DELETE FROM $this->table WHERE id IN ($id_string)"; 
    90             $wpdb->query($query); 
    91         } 
     42        return 'Post Not Found'; 
     43    } 
    9244 
    93         if( 'change_status'===$this->current_action() && is_array($_GET['report'])) { 
    94             $id_string = join(',', $_GET['report']); 
    95             $query = "UPDATE $this->table SET status='old' WHERE id IN ($id_string)"; 
    96             $wpdb->query($query); 
    97         } 
    98          
    99     } 
    100      
    101     function prepare_items() { 
    102         global $wpdb; //This is used only if making any database queries 
    103         $per_page = 50; 
     45    function column_status($item) 
     46    { 
     47        return '<span class="' . $item['status'] . '-report">&#x25cf;</a>'; 
     48    } 
    10449 
    105         $columns = $this->get_columns(); 
    106         $hidden = array(); 
    107         $sortable = $this->get_sortable_columns(); 
     50    function column_cb($item) 
     51    { 
     52        return sprintf( 
     53            '<input type="checkbox" name="%1$s[]" value="%2$s" />', 
     54            /*$1%s*/ 
     55            $this->_args['singular'],  //Let's simply repurpose the table's singular label ("movie") 
     56            /*$2%s*/ 
     57            $item['id']                //The value of the checkbox should be the record's id 
     58        ); 
     59    } 
    10860 
    109         $this->_column_headers = array($columns, $hidden, $sortable); 
     61    function get_bulk_actions() 
     62    { 
     63        $permission_options = get_option('wprc_permissions_settings'); 
     64        $bulk_action_permission = (isset($permission_options['minimum_role_change'])) ? $permission_options['minimum_role_change'] : 'activate_plugins'; 
     65        if (!current_user_can($bulk_action_permission)) 
     66            return array(); 
    11067 
    111         $this->process_bulk_action(); 
     68        $actions = array( 
     69            'change_status' => 'Mark as resolved', 
     70            'delete'        => 'Delete' 
     71        ); 
     72        return $actions; 
     73    } 
    11274 
    113         $orderby = (!empty($_REQUEST['orderby'])) ? $_REQUEST['orderby'] : 'time'; //If no sort, default to title 
    114         $order = (!empty($_REQUEST['order'])) ? $_REQUEST['order'] : 'desc'; //If no order, default to asc 
    115         $query = "SELECT * FROM $this->table ORDER BY $orderby $order"; 
    116         $data = $wpdb->get_results( $query, ARRAY_A ); 
     75    function prepare_items() 
     76    { 
     77        global $wpdb; //This is used only if making any database queries 
     78        $per_page = 50; 
    11779 
    118         $current_page = $this->get_pagenum(); 
     80        $columns = $this->get_columns(); 
     81        $hidden = array(); 
     82        $sortable = $this->get_sortable_columns(); 
    11983 
    120         $total_items = count($data); 
     84        $this->_column_headers = array($columns, $hidden, $sortable); 
    12185 
    122         $data = array_slice($data,(($current_page-1)*$per_page),$per_page); 
     86        $this->process_bulk_action(); 
    12387 
    124         $this->items = $data; 
     88        $orderby = (!empty($_REQUEST['orderby'])) ? $_REQUEST['orderby'] : 'time'; //If no sort, default to title 
     89        $order = (!empty($_REQUEST['order'])) ? $_REQUEST['order'] : 'desc'; //If no order, default to asc 
     90        $query = "SELECT * FROM $this->table ORDER BY $orderby $order"; 
     91        $data = $wpdb->get_results($query, ARRAY_A); 
    12592 
    126         $this->set_pagination_args( array( 
    127             'total_items' => $total_items,                  //WE have to calculate the total number of items 
    128             'per_page'    => $per_page,                     //WE have to determine how many items to show on a page 
    129             'total_pages' => ceil($total_items/$per_page)   //WE have to calculate the total number of pages 
    130         ) ); 
    131     } 
    132      
     93        $current_page = $this->get_pagenum(); 
     94 
     95        $total_items = count($data); 
     96 
     97        $data = array_slice($data, (($current_page - 1) * $per_page), $per_page); 
     98 
     99        $this->items = $data; 
     100 
     101        $this->set_pagination_args(array( 
     102            'total_items' => $total_items,                  //WE have to calculate the total number of items 
     103            'per_page'    => $per_page,                     //WE have to determine how many items to show on a page 
     104            'total_pages' => ceil($total_items / $per_page)   //WE have to calculate the total number of pages 
     105        )); 
     106    } 
     107 
     108    function get_columns() 
     109    { 
     110        $columns = array( 
     111            'cb'       => '<input type="checkbox" />', //Render a checkbox instead of text 
     112            'reason'   => 'Issue', 
     113            'status'   => 'Status', 
     114            'details'  => 'Details', 
     115            'time'     => 'Time', 
     116            'reporter' => 'Reporter', 
     117            'post'     => 'Post' 
     118        ); 
     119        return $columns; 
     120    } 
     121 
     122    function get_sortable_columns() 
     123    { 
     124        $sortable_columns = array( 
     125            'time' => array('time', true),     //true means it's already sorted 
     126        ); 
     127        return $sortable_columns; 
     128    } 
     129 
     130    function process_bulk_action() 
     131    { 
     132        global $wpdb; 
     133        //Detect when a bulk action is being triggered... 
     134        if ('delete' === $this->current_action()) { 
     135            $id_string = join(',', $_GET['report']); 
     136            $query = "DELETE FROM $this->table WHERE id IN ($id_string)"; 
     137            $wpdb->query($query); 
     138        } 
     139 
     140        if ('change_status' === $this->current_action() && is_array($_GET['report'])) { 
     141            $id_string = join(',', $_GET['report']); 
     142            $query = "UPDATE $this->table SET status='old' WHERE id IN ($id_string)"; 
     143            $wpdb->query($query); 
     144        } 
     145 
     146    } 
     147 
    133148} 
  • report-content/trunk/inc/meta-boxes.php

    r835946 r1552692  
    55----------------------------------------------------*/ 
    66 
    7 add_action( 'load-post.php', 'wprc_post_meta_boxes_setup' ); 
    8 add_action( 'load-post-new.php', 'wprc_post_meta_boxes_setup' ); 
     7add_action('load-post.php', 'wprc_post_meta_boxes_setup'); 
     8add_action('load-post-new.php', 'wprc_post_meta_boxes_setup'); 
    99 
    10 function wprc_post_meta_boxes_setup() { 
     10function wprc_post_meta_boxes_setup() 
     11{ 
    1112    $other_options = get_option('wprc_other_settings'); 
    1213    $permission_options = get_option('wprc_permissions_settings'); 
    13     if($other_options['disable_metabox'] || !current_user_can($permission_options['minimum_role_view'])) return; 
    14     add_action( 'add_meta_boxes', 'wprc_add_post_meta_boxes' ); 
     14    if ($other_options['disable_metabox'] || !current_user_can($permission_options['minimum_role_view'])) return; 
     15    add_action('add_meta_boxes', 'wprc_add_post_meta_boxes'); 
    1516} 
    1617 
    17 function wprc_add_post_meta_boxes() { 
     18function wprc_add_post_meta_boxes() 
     19{ 
    1820    add_meta_box( 
    19         'wprc-post-reports',            // Unique ID 
    20         esc_html__( 'Post Reports', 'wprc' ),       // Title 
    21         'wprc_meta_box_callback',       // Callback function 
    22         'post',                 // Admin page (or post type) 
    23         'normal',                   // Context 
    24         'default'                   // Priority 
     21        'wprc-post-reports',            // Unique ID 
     22        esc_html__('Post Reports', 'wprc'),        // Title 
     23        'wprc_meta_box_callback',        // Callback function 
     24        'post',                    // Admin page (or post type) 
     25        'normal',                    // Context 
     26        'default'                    // Priority 
    2527    ); 
    2628} 
    2729 
    28 function wprc_meta_box_callback( $object, $box ) { 
     30function wprc_meta_box_callback($object, $box) 
     31{ 
    2932    $post_reports = wprc_get_post_reports($object->ID); 
    30     if(count($post_reports)<=0): 
    31     ?> 
     33    if (count($post_reports) <= 0): 
     34        ?> 
    3235        No reports found. 
    3336    <?php else: ?> 
    3437        <style type="text/css"> 
    35             #wprc-reports{ width:100%; border-collapse: collapse;text-align: left;} 
    36             #wprc-reports td, #wprc-reports th{padding: 6px;min-width: 160px; border-bottom: 1px solid #E7E7E7;} 
    37             #wprc-reports .even{background: #e7e7e7;} 
    38             #wprc-reports th { font-size: medium; } 
     38            #wprc-reports { 
     39                width: 100%; 
     40                border-collapse: collapse; 
     41                text-align: left; 
     42            } 
     43 
     44            #wprc-reports td, #wprc-reports th { 
     45                padding: 6px; 
     46                min-width: 160px; 
     47                border-bottom: 1px solid #E7E7E7; 
     48            } 
     49 
     50            #wprc-reports .even { 
     51                background: #e7e7e7; 
     52            } 
     53 
     54            #wprc-reports th { 
     55                font-size: medium; 
     56            } 
    3957        </style> 
    4058        <table id="wprc-reports"> 
     
    4462            </tr> 
    4563            <?php foreach ($post_reports as $key => $report): ?> 
    46                 <tr class="<?php echo ($key%2 == 0)?'even':'odd'; ?>"> 
     64                <tr class="<?php echo ($key % 2 == 0) ? 'even' : 'odd'; ?>"> 
    4765                    <td><?php echo $report['reason']; ?></td> 
    4866                    <td><?php echo $report['details']; ?></td> 
     
    5068            <?php endforeach; ?> 
    5169        </table> 
    52     <?php 
     70        <?php 
    5371    endif; 
    5472} 
  • report-content/trunk/inc/options-panel.php

    r1022760 r1552692  
    44*/ 
    55 
    6 function wprc_menu_item() { 
     6function wprc_menu_item() 
     7{ 
    78    global $wprc_settings_page_hook; 
    8     $wprc_settings_page_hook = add_submenu_page( 
    9         'wprc_reports_page', 
    10         'Report Settings',                          // The title to be displayed in the browser window for this page. 
    11         'Settings',                                 // The text to be displayed for this menu item 
    12         'administrator',                            // Which type of users can see this menu item   
    13         'wprc_settings',                            // The unique ID - that is, the slug - for this menu item 
    14         'wprc_render_settings_page'                 // The name of the function to call when rendering this menu's page   
    15     ); 
    16 } 
    17 add_action( 'admin_menu', 'wprc_menu_item' ); 
    18  
    19 function wprc_scripts_styles($hook) { 
     9    $wprc_settings_page_hook = add_submenu_page( 
     10        'wprc_reports_page', 
     11        'Report Settings',                            // The title to be displayed in the browser window for this page. 
     12        'Settings',                                    // The text to be displayed for this menu item 
     13        'administrator',                            // Which type of users can see this menu item 
     14        'wprc_settings',                            // The unique ID - that is, the slug - for this menu item 
     15        'wprc_render_settings_page'                // The name of the function to call when rendering this menu's page 
     16    ); 
     17} 
     18 
     19add_action('admin_menu', 'wprc_menu_item'); 
     20 
     21function wprc_scripts_styles($hook) 
     22{ 
    2023    global $wprc_settings_page_hook; 
    21     if( $wprc_settings_page_hook != $hook ) 
     24    if ($wprc_settings_page_hook != $hook) 
    2225        return; 
    23     wp_enqueue_style("options_panel_stylesheet", plugins_url( "static/css/options-panel.css" , dirname(__FILE__) ), false, "1.0", "all"); 
    24     wp_enqueue_script("options_panel_script", plugins_url( "static/js/options-panel.js" , dirname(__FILE__) ), false, "1.0"); 
     26    wp_enqueue_style("options_panel_stylesheet", plugins_url("static/css/options-panel.css", dirname(__FILE__)), false, "1.0", "all"); 
     27    wp_enqueue_script("options_panel_script", plugins_url("static/js/options-panel.js", dirname(__FILE__)), false, "1.0"); 
    2528    wp_enqueue_script('common'); 
    2629    wp_enqueue_script('wp-lists'); 
    2730    wp_enqueue_script('postbox'); 
    2831} 
    29 add_action( 'admin_enqueue_scripts', 'wprc_scripts_styles' ); 
    30  
    31 function wprc_render_settings_page() { 
    32 ?> 
    33 <div class="wrap"> 
    34 <div id="icon-options-general" class="icon32"></div> 
    35 <h2>Report Content Settings</h2> 
    36     <?php settings_errors(); ?> 
    37     <div class="clearfix paddingtop20"> 
    38         <div class="first ninecol"> 
    39             <form method="post" action="options.php"> 
    40                 <?php settings_fields( 'wprc_settings' ); ?> 
    41                 <?php do_meta_boxes('wprc_metaboxes','advanced',null); ?> 
    42                 <?php wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); ?> 
    43                 <?php wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); ?> 
    44             </form> 
    45         </div> 
    46         <div class="last threecol"> 
    47             <div class="side-block"> 
    48                 Like the plugin? <br/> 
    49                 <a href="https://wordpress.org/support/view/plugin-reviews/report-content#postform">Leave a review</a>. 
     32 
     33add_action('admin_enqueue_scripts', 'wprc_scripts_styles'); 
     34 
     35function wprc_render_settings_page() 
     36{ 
     37    ?> 
     38    <div class="wrap"> 
     39        <div id="icon-options-general" class="icon32"></div> 
     40        <h2>Report Content Settings</h2> 
     41        <?php settings_errors(); ?> 
     42        <div class="clearfix paddingtop20"> 
     43            <div class="first ninecol"> 
     44                <form method="post" action="options.php"> 
     45                    <?php settings_fields('wprc_settings'); ?> 
     46                    <?php do_meta_boxes('wprc_metaboxes', 'advanced', null); ?> 
     47                    <?php wp_nonce_field('closedpostboxes', 'closedpostboxesnonce', false); ?> 
     48                    <?php wp_nonce_field('meta-box-order', 'meta-box-order-nonce', false); ?> 
     49                </form> 
     50            </div> 
     51            <div class="last threecol"> 
     52                <div class="side-block"> 
     53                    Like the plugin? <br/> 
     54                    <a href="https://wordpress.org/support/view/plugin-reviews/report-content#postform">Leave a 
     55                        review</a>. 
     56                </div> 
    5057            </div> 
    5158        </div> 
    5259    </div> 
    53 </div> 
    5460<?php } 
    5561 
    56 function wprc_create_options() {  
    57      
    58     add_settings_section( 'form_settings_section', null, null, 'wprc_settings' ); 
    59     add_settings_section( 'integration_settings_section', null, null, 'wprc_settings' ); 
    60     add_settings_section( 'email_settings_section', null, null, 'wprc_settings' ); 
    61     add_settings_section( 'permissions_settings_section', null, null, 'wprc_settings' ); 
    62     add_settings_section( 'other_settings_section', null, null, 'wprc_settings' ); 
    63  
    64     add_settings_field( 
    65         'active_fields', '', 'wprc_render_settings_field', 'wprc_settings', 'form_settings_section', 
     62function wprc_create_options() 
     63{ 
     64 
     65    add_settings_section('form_settings_section', null, null, 'wprc_settings'); 
     66    add_settings_section('integration_settings_section', null, null, 'wprc_settings'); 
     67    add_settings_section('email_settings_section', null, null, 'wprc_settings'); 
     68    add_settings_section('permissions_settings_section', null, null, 'wprc_settings'); 
     69    add_settings_section('other_settings_section', null, null, 'wprc_settings'); 
     70 
     71    add_settings_field( 
     72        'active_fields', '', 'wprc_render_settings_field', 'wprc_settings', 'form_settings_section', 
    6673        array( 
    6774            'title' => 'Active Fields', 
    68             'desc' => 'Fields that will appear on the report form', 
    69             'id' => 'active_fields', 
    70             'type' => 'multicheckbox', 
    71             'items' => array('reason'=>'Reason', 'reporter_name'=>'Name','reporter_email'=>'Email','details'=>'Details'), 
     75            'desc'  => 'Fields that will appear on the report form', 
     76            'id'    => 'active_fields', 
     77            'type'  => 'multicheckbox', 
     78            'items' => array('reason' => 'Reason', 'reporter_name' => 'Name', 'reporter_email' => 'Email', 'details' => 'Details'), 
    7279            'group' => 'wprc_form_settings' 
    7380        ) 
    74     ); 
    75  
    76     add_settings_field( 
    77         'required_fields', '', 'wprc_render_settings_field', 'wprc_settings', 'form_settings_section', 
     81    ); 
     82 
     83    add_settings_field( 
     84        'required_fields', '', 'wprc_render_settings_field', 'wprc_settings', 'form_settings_section', 
    7885        array( 
    7986            'title' => 'Required Fields', 
    80             'desc' => 'Fields that are required', 
    81             'id' => 'required_fields', 
    82             'type' => 'multicheckbox', 
    83             'items' => array('reason'=>'Reason', 'reporter_name'=>'Name','reporter_email'=>'Email','details'=>'Details'), 
     87            'desc'  => 'Fields that are required', 
     88            'id'    => 'required_fields', 
     89            'type'  => 'multicheckbox', 
     90            'items' => array('reason' => 'Reason', 'reporter_name' => 'Name', 'reporter_email' => 'Email', 'details' => 'Details'), 
    8491            'group' => 'wprc_form_settings' 
    8592        ) 
    86     ); 
    87  
    88     add_settings_field( 
    89         'report_reasons', '', 'wprc_render_settings_field', 'wprc_settings', 'form_settings_section', 
     93    ); 
     94 
     95    add_settings_field( 
     96        'report_reasons', '', 'wprc_render_settings_field', 'wprc_settings', 'form_settings_section', 
    9097        array( 
    9198            'title' => 'Issues', 
    92             'desc' => 'Add one entry per line. These issues will appear in the form of a dropdown.', 
    93             'id' => 'report_reasons', 
    94             'type' => 'textarea', 
     99            'desc'  => 'Add one entry per line. These issues will appear in the form of a dropdown.', 
     100            'id'    => 'report_reasons', 
     101            'type'  => 'textarea', 
    95102            'group' => 'wprc_form_settings' 
    96103        ) 
    97     ); 
    98  
    99      add_settings_field( 
    100         'slidedown_button_text', '', 'wprc_render_settings_field', 'wprc_settings', 'form_settings_section', 
     104    ); 
     105 
     106    add_settings_field( 
     107        'slidedown_button_text', '', 'wprc_render_settings_field', 'wprc_settings', 'form_settings_section', 
    101108        array( 
    102109            'title' => 'Slide Down Button Text', 
    103             'desc' => '', 
    104             'id' => 'slidedown_button_text', 
    105             'type' => 'text', 
     110            'desc'  => '', 
     111            'id'    => 'slidedown_button_text', 
     112            'type'  => 'text', 
    106113            'group' => 'wprc_form_settings' 
    107114        ) 
    108     ); 
    109  
    110     add_settings_field( 
    111         'submit_button_text', '', 'wprc_render_settings_field', 'wprc_settings', 'form_settings_section', 
     115    ); 
     116 
     117    add_settings_field( 
     118        'submit_button_text', '', 'wprc_render_settings_field', 'wprc_settings', 'form_settings_section', 
    112119        array( 
    113120            'title' => 'Submit Button Text', 
    114             'desc' => '', 
    115             'id' => 'submit_button_text', 
    116             'type' => 'text', 
     121            'desc'  => '', 
     122            'id'    => 'submit_button_text', 
     123            'type'  => 'text', 
    117124            'group' => 'wprc_form_settings' 
    118125        ) 
    119     ); 
    120  
    121     add_settings_field( 
    122         'color_scheme', '', 'wprc_render_settings_field', 'wprc_settings', 'form_settings_section', 
    123         array( 
    124             'title' => 'Color Scheme', 
    125             'desc' => 'Select a scheme for the form', 
    126             'id' => 'color_scheme', 
    127             'type' => 'select', 
    128             'options' => array("yellow-colorscheme"=>"Yellow", "red-colorscheme" =>"Red", "blue-colorscheme" => "Blue", "green-colorscheme" => "Green"), 
    129             'group' => 'wprc_form_settings' 
    130         ) 
    131     ); 
    132  
    133     add_settings_field( 
    134         'integration_type', '', 'wprc_render_settings_field', 'wprc_settings', 'integration_settings_section', 
    135         array( 
    136             'title' => 'Add the report form', 
    137             'desc' => 'If you choose manual integration you will have to place <b>&lt;?php wprc_report_submission_form(); ?&gt;</b> in your theme files manually.', 
    138             'id' => 'integration_type', 
    139             'type' => 'select', 
    140             'options' => array("automatically" =>"Automatically", "manually" => "Manually"), 
    141             'group' => 'wprc_integration_settings' 
    142         ) 
    143     ); 
    144  
    145     add_settings_field( 
    146         'automatic_form_position', '', 'wprc_render_settings_field', 'wprc_settings', 'integration_settings_section', 
    147         array( 
    148             'title' => 'Add the form', 
    149             'desc' => ' Where do you want the form to be placed? This option will only work if you choose automatic integration', 
    150             'id' => 'automatic_form_position', 
    151             'type' => 'select', 
    152             'options' => array("above" =>"Above post content", "below" => "Below post content"), 
    153             'group' => 'wprc_integration_settings' 
    154         ) 
    155     ); 
    156  
    157     add_settings_field( 
    158         'display_on', '', 'wprc_render_settings_field', 'wprc_settings', 'integration_settings_section', 
    159         array( 
    160             'title' => 'Display form on', 
    161             'desc' => ' Select the section of your website where you want this form to appear', 
    162             'id' => 'display_on', 
    163             'type' => 'select', 
    164             'options' => array("everywhere" =>"The whole site", "single_post" => "Posts", 'single_page' => 'Pages', 'posts_pages'=>'Posts & Pages'), 
    165             'group' => 'wprc_integration_settings' 
    166         ) 
    167     ); 
    168  
    169     add_settings_field( 
    170         'email_recipients', '', 'wprc_render_settings_field', 'wprc_settings', 'email_settings_section', 
    171         array( 
    172             'title' => 'On getting a new report send email to', 
    173             'desc' => 'Select email recipients', 
    174             'id' => 'email_recipients', 
    175             'type' => 'select', 
    176             'options' => array("none"=>"No one", "author" =>"Post Author", "admin" => "Blog administrator", "author_admin" => "Author and administrator"), 
    177             'group' => 'wprc_email_settings' 
    178         ) 
    179     ); 
    180  
    181     add_settings_field( 
    182         'sender_name', '', 'wprc_render_settings_field', 'wprc_settings', 'email_settings_section', 
     126    ); 
     127 
     128    add_settings_field( 
     129        'color_scheme', '', 'wprc_render_settings_field', 'wprc_settings', 'form_settings_section', 
     130        array( 
     131            'title'   => 'Color Scheme', 
     132            'desc'    => 'Select a scheme for the form', 
     133            'id'      => 'color_scheme', 
     134            'type'    => 'select', 
     135            'options' => array("yellow-colorscheme" => "Yellow", "red-colorscheme" => "Red", "blue-colorscheme" => "Blue", "green-colorscheme" => "Green"), 
     136            'group'   => 'wprc_form_settings' 
     137        ) 
     138    ); 
     139 
     140    add_settings_field( 
     141        'integration_type', '', 'wprc_render_settings_field', 'wprc_settings', 'integration_settings_section', 
     142        array( 
     143            'title'   => 'Add the report form', 
     144            'desc'    => 'If you choose manual integration you will have to place <b>&lt;?php wprc_report_submission_form(); ?&gt;</b> in your theme files manually.', 
     145            'id'      => 'integration_type', 
     146            'type'    => 'select', 
     147            'options' => array("automatically" => "Automatically", "manually" => "Manually"), 
     148            'group'   => 'wprc_integration_settings' 
     149        ) 
     150    ); 
     151 
     152    add_settings_field( 
     153        'automatic_form_position', '', 'wprc_render_settings_field', 'wprc_settings', 'integration_settings_section', 
     154        array( 
     155            'title'   => 'Add the form', 
     156            'desc'    => ' Where do you want the form to be placed? This option will only work if you choose automatic integration', 
     157            'id'      => 'automatic_form_position', 
     158            'type'    => 'select', 
     159            'options' => array("above" => "Above post content", "below" => "Below post content"), 
     160            'group'   => 'wprc_integration_settings' 
     161        ) 
     162    ); 
     163 
     164    add_settings_field( 
     165        'display_on', '', 'wprc_render_settings_field', 'wprc_settings', 'integration_settings_section', 
     166        array( 
     167            'title'   => 'Display form on', 
     168            'desc'    => ' Select the section of your website where you want this form to appear', 
     169            'id'      => 'display_on', 
     170            'type'    => 'select', 
     171            'options' => array("everywhere" => "The whole site", "single_post" => "Posts", 'single_page' => 'Pages', 'posts_pages' => 'Posts & Pages'), 
     172            'group'   => 'wprc_integration_settings' 
     173        ) 
     174    ); 
     175 
     176    add_settings_field( 
     177        'email_recipients', '', 'wprc_render_settings_field', 'wprc_settings', 'email_settings_section', 
     178        array( 
     179            'title'   => 'On getting a new report send email to', 
     180            'desc'    => 'Select email recipients', 
     181            'id'      => 'email_recipients', 
     182            'type'    => 'select', 
     183            'options' => array("none" => "No one", "author" => "Post Author", "admin" => "Blog administrator", "author_admin" => "Author and administrator"), 
     184            'group'   => 'wprc_email_settings' 
     185        ) 
     186    ); 
     187 
     188    add_settings_field( 
     189        'sender_name', '', 'wprc_render_settings_field', 'wprc_settings', 'email_settings_section', 
    183190        array( 
    184191            'title' => 'Sender\'s Name', 
    185             'desc' => '', 
    186             'id' => 'sender_name', 
    187             'type' => 'text', 
    188             'group' => 'wprc_email_settings' 
    189         ) 
    190     ); 
    191  
    192     add_settings_field( 
    193         'sender_address', '', 'wprc_render_settings_field', 'wprc_settings', 'email_settings_section', 
     192            'desc'  => '', 
     193            'id'    => 'sender_name', 
     194            'type'  => 'text', 
     195            'group' => 'wprc_email_settings' 
     196        ) 
     197    ); 
     198 
     199    add_settings_field( 
     200        'sender_address', '', 'wprc_render_settings_field', 'wprc_settings', 'email_settings_section', 
    194201        array( 
    195202            'title' => 'Sender\'s Email Address', 
    196             'desc' => '', 
    197             'id' => 'sender_address', 
    198             'type' => 'text', 
    199             'group' => 'wprc_email_settings' 
    200         ) 
    201     ); 
    202  
    203     add_settings_field( 
    204         'author_email_subject', '', 'wprc_render_settings_field', 'wprc_settings', 'email_settings_section', 
     203            'desc'  => '', 
     204            'id'    => 'sender_address', 
     205            'type'  => 'text', 
     206            'group' => 'wprc_email_settings' 
     207        ) 
     208    ); 
     209 
     210    add_settings_field( 
     211        'author_email_subject', '', 'wprc_render_settings_field', 'wprc_settings', 'email_settings_section', 
    205212        array( 
    206213            'title' => 'Author Email Subject', 
    207             'desc' => 'Subject of the email you want sent to authors. The report will also be appended.', 
    208             'id' => 'author_email_subject', 
    209             'type' => 'text', 
    210             'group' => 'wprc_email_settings' 
    211         ) 
    212     ); 
    213  
    214     add_settings_field( 
    215         'author_email_content', '', 'wprc_render_settings_field', 'wprc_settings', 'email_settings_section', 
     214            'desc'  => 'Subject of the email you want sent to authors. The report will also be appended.', 
     215            'id'    => 'author_email_subject', 
     216            'type'  => 'text', 
     217            'group' => 'wprc_email_settings' 
     218        ) 
     219    ); 
     220 
     221    add_settings_field( 
     222        'author_email_content', '', 'wprc_render_settings_field', 'wprc_settings', 'email_settings_section', 
    216223        array( 
    217224            'title' => 'Author Email Content', 
    218             'desc' => 'This will be sent to the author of the post. The report will also be appended.<br/><b>%AUTHOR%</b> will be replaced by author name<br/><b>%POSTURL%</b> will be replaced with a link to the post<br/><b>%EDITURL%</b> will be replaced with a link to the edit page', 
    219             'id' => 'author_email_content', 
    220             'type' => 'textarea', 
    221             'group' => 'wprc_email_settings' 
    222         ) 
    223     ); 
    224  
    225     add_settings_field( 
    226         'admin_email_subject', '', 'wprc_render_settings_field', 'wprc_settings', 'email_settings_section', 
     225            'desc'  => 'This will be sent to the author of the post. The report will also be appended.<br/><b>%AUTHOR%</b> will be replaced by author name<br/><b>%POSTURL%</b> will be replaced with a link to the post<br/><b>%EDITURL%</b> will be replaced with a link to the edit page', 
     226            'id'    => 'author_email_content', 
     227            'type'  => 'textarea', 
     228            'group' => 'wprc_email_settings' 
     229        ) 
     230    ); 
     231 
     232    add_settings_field( 
     233        'admin_email_subject', '', 'wprc_render_settings_field', 'wprc_settings', 'email_settings_section', 
    227234        array( 
    228235            'title' => 'Admin Email Subject', 
    229             'desc' => 'Subject of the email you want sent to admins. The report will also be appended.', 
    230             'id' => 'admin_email_subject', 
    231             'type' => 'text', 
    232             'group' => 'wprc_email_settings' 
    233         ) 
    234     ); 
    235  
    236     add_settings_field( 
    237         'admin_email_content', '', 'wprc_render_settings_field', 'wprc_settings', 'email_settings_section', 
     236            'desc'  => 'Subject of the email you want sent to admins. The report will also be appended.', 
     237            'id'    => 'admin_email_subject', 
     238            'type'  => 'text', 
     239            'group' => 'wprc_email_settings' 
     240        ) 
     241    ); 
     242 
     243    add_settings_field( 
     244        'admin_email_content', '', 'wprc_render_settings_field', 'wprc_settings', 'email_settings_section', 
    238245        array( 
    239246            'title' => 'Admin Email Content', 
    240             'desc' => 'This will be sent to the blog admins. The report will also be appended.<br/><b>%POSTURL%</b> will be replaced with a link to the post<br/><b>%EDITURL%</b> will be replaced with a link to the edit page<br/><b>%REPORTSURL%</b> will be replaced by a link to reports page', 
    241             'id' => 'admin_email_content', 
    242             'type' => 'textarea', 
    243             'group' => 'wprc_email_settings' 
    244         ) 
    245     ); 
    246  
    247     add_settings_field( 
    248         'minimum_role_view', '', 'wprc_render_settings_field', 'wprc_settings', 'permissions_settings_section', 
    249         array( 
    250             'title' => 'Minimum access level required to view the reports', 
    251             'desc' => 'What\'s the minimum role that a logged in user needs to have in order to view reports', 
    252             'id' => 'minimum_role_view', 
    253             'type' => 'select', 
     247            'desc'  => 'This will be sent to the blog admins. The report will also be appended.<br/><b>%POSTURL%</b> will be replaced with a link to the post<br/><b>%EDITURL%</b> will be replaced with a link to the edit page<br/><b>%REPORTSURL%</b> will be replaced by a link to reports page', 
     248            'id'    => 'admin_email_content', 
     249            'type'  => 'textarea', 
     250            'group' => 'wprc_email_settings' 
     251        ) 
     252    ); 
     253 
     254    add_settings_field( 
     255        'minimum_role_view', '', 'wprc_render_settings_field', 'wprc_settings', 'permissions_settings_section', 
     256        array( 
     257            'title'   => 'Minimum access level required to view the reports', 
     258            'desc'    => 'What\'s the minimum role that a logged in user needs to have in order to view reports', 
     259            'id'      => 'minimum_role_view', 
     260            'type'    => 'select', 
    254261            'options' => array("install_plugins" => "Administrator", "moderate_comments" => "Editor", "edit_published_posts" => "Author", "edit_posts" => "Contributor", "read" => "Subscriber"), 
     262            'group'   => 'wprc_permissions_settings' 
     263        ) 
     264    ); 
     265 
     266    add_settings_field( 
     267        'minimum_role_change', '', 'wprc_render_settings_field', 'wprc_settings', 'permissions_settings_section', 
     268        array( 
     269            'title'   => 'Minimum access level required to change status of/delete reports', 
     270            'desc'    => 'What\'s the minimum role that a logged in user needs to have in order to manipulate reports', 
     271            'id'      => 'minimum_role_change', 
     272            'type'    => 'select', 
     273            'options' => array("install_plugins" => "Administrator", "moderate_comments" => "Editor", "edit_published_posts" => "Author", "edit_posts" => "Contributor", "read" => "Subscriber"), 
     274            'group'   => 'wprc_permissions_settings' 
     275        ) 
     276    ); 
     277 
     278    add_settings_field( 
     279        'login_required', '', 'wprc_render_settings_field', 'wprc_settings', 'permissions_settings_section', 
     280        array( 
     281            'title' => 'Users must be logged in to report content', 
     282            'desc'  => '', 
     283            'id'    => 'login_required', 
     284            'type'  => 'checkbox', 
    255285            'group' => 'wprc_permissions_settings' 
    256286        ) 
    257     ); 
    258  
    259     add_settings_field( 
    260         'minimum_role_change', '', 'wprc_render_settings_field', 'wprc_settings', 'permissions_settings_section', 
    261         array( 
    262             'title' => 'Minimum access level required to change status of/delete reports', 
    263             'desc' => 'What\'s the minimum role that a logged in user needs to have in order to manipulate reports', 
    264             'id' => 'minimum_role_change', 
    265             'type' => 'select', 
    266             'options' => array("install_plugins" => "Administrator", "moderate_comments" => "Editor", "edit_published_posts" => "Author", "edit_posts" => "Contributor", "read" => "Subscriber"), 
     287    ); 
     288 
     289    add_settings_field( 
     290        'use_akismet', '', 'wprc_render_settings_field', 'wprc_settings', 'permissions_settings_section', 
     291        array( 
     292            'title' => 'Use Akismet to filter reports', 
     293            'desc'  => 'Akismet plugin is required for this feature.', 
     294            'id'    => 'use_akismet', 
     295            'type'  => 'checkbox', 
    267296            'group' => 'wprc_permissions_settings' 
    268297        ) 
    269     ); 
    270  
    271     add_settings_field( 
    272         'login_required', '', 'wprc_render_settings_field', 'wprc_settings', 'permissions_settings_section', 
    273         array( 
    274             'title' => 'Users must be logged in to report content', 
    275             'desc' => '', 
    276             'id' => 'login_required', 
    277             'type' => 'checkbox', 
    278             'group' => 'wprc_permissions_settings' 
    279         ) 
    280     ); 
    281  
    282     add_settings_field( 
    283         'use_akismet', '', 'wprc_render_settings_field', 'wprc_settings', 'permissions_settings_section', 
    284         array( 
    285             'title' => 'Use Akismet to filter reports', 
    286             'desc' => 'Akismet plugin is required for this feature.', 
    287             'id' => 'use_akismet', 
    288             'type' => 'checkbox', 
    289             'group' => 'wprc_permissions_settings' 
    290         ) 
    291     ); 
    292  
    293     add_settings_field( 
    294         'disable_metabox', '', 'wprc_render_settings_field', 'wprc_settings', 'other_settings_section', 
     298    ); 
     299 
     300    add_settings_field( 
     301        'disable_metabox', '', 'wprc_render_settings_field', 'wprc_settings', 'other_settings_section', 
    295302        array( 
    296303            'title' => 'Disabe metabox?', 
    297             'desc' => 'Check if you don\' want to display the metabox', 
    298             'id' => 'disable_metabox', 
    299             'type' => 'checkbox', 
     304            'desc'  => 'Check if you don\' want to display the metabox', 
     305            'id'    => 'disable_metabox', 
     306            'type'  => 'checkbox', 
    300307            'group' => 'wprc_other_settings' 
    301308        ) 
    302     ); 
    303  
    304     add_settings_field( 
    305         'disable_db_saving', '', 'wprc_render_settings_field', 'wprc_settings', 'other_settings_section', 
     309    ); 
     310 
     311    add_settings_field( 
     312        'disable_db_saving', '', 'wprc_render_settings_field', 'wprc_settings', 'other_settings_section', 
    306313        array( 
    307314            'title' => 'Don\'t save reports in database', 
    308             'desc' => 'Check if you don\' want to save reports in database', 
    309             'id' => 'disable_db_saving', 
    310             'type' => 'checkbox', 
     315            'desc'  => 'Check if you don\' want to save reports in database', 
     316            'id'    => 'disable_db_saving', 
     317            'type'  => 'checkbox', 
    311318            'group' => 'wprc_other_settings' 
    312319        ) 
    313     ); 
    314      
    315     // Finally, we register the fields with WordPress  
     320    ); 
     321 
     322    // Finally, we register the fields with WordPress 
    316323    register_setting('wprc_settings', 'wprc_form_settings', 'wprc_settings_validation'); 
    317324    register_setting('wprc_settings', 'wprc_integration_settings', 'wprc_settings_validation'); 
     
    319326    register_setting('wprc_settings', 'wprc_permissions_settings', 'wprc_settings_validation'); 
    320327    register_setting('wprc_settings', 'wprc_other_settings', 'wprc_settings_validation'); 
    321      
     328 
    322329} // end sandbox_initialize_theme_options  
    323330add_action('admin_init', 'wprc_create_options'); 
    324331 
    325 function wprc_settings_validation($input){ 
     332function wprc_settings_validation($input) 
     333{ 
    326334    return $input; 
    327335} 
    328336 
    329 function wprc_add_meta_boxes(){ 
    330     add_meta_box("wprc_form_settings_metabox", 'Form Settings', "wprc_metaboxes_callback", "wprc_metaboxes", 'advanced', 'default', array('settings_section'=>'form_settings_section')); 
    331     add_meta_box("wprc_integration_settings_metabox", 'Integration Settings', "wprc_metaboxes_callback", "wprc_metaboxes", 'advanced', 'default', array('settings_section'=>'integration_settings_section')); 
    332     add_meta_box("wprc_email_settings_metabox", 'Email Settings', "wprc_metaboxes_callback", "wprc_metaboxes", 'advanced', 'default', array('settings_section'=>'email_settings_section')); 
    333     add_meta_box("wprc_permissions_settings_metabox", 'Security Settings', "wprc_metaboxes_callback", "wprc_metaboxes", 'advanced', 'default', array('settings_section'=>'permissions_settings_section')); 
    334     add_meta_box("wprc_other_settings_metabox", 'Other Settings', "wprc_metaboxes_callback", "wprc_metaboxes", 'advanced', 'default', array('settings_section'=>'other_settings_section')); 
    335 } 
    336 add_action( 'admin_init', 'wprc_add_meta_boxes' ); 
    337  
    338 function wprc_metaboxes_callback($post, $args){ 
    339     do_settings_fields( "wprc_settings", $args['args']['settings_section'] ); 
     337function wprc_add_meta_boxes() 
     338{ 
     339    add_meta_box("wprc_form_settings_metabox", 'Form Settings', "wprc_metaboxes_callback", "wprc_metaboxes", 'advanced', 'default', array('settings_section' => 'form_settings_section')); 
     340    add_meta_box("wprc_integration_settings_metabox", 'Integration Settings', "wprc_metaboxes_callback", "wprc_metaboxes", 'advanced', 'default', array('settings_section' => 'integration_settings_section')); 
     341    add_meta_box("wprc_email_settings_metabox", 'Email Settings', "wprc_metaboxes_callback", "wprc_metaboxes", 'advanced', 'default', array('settings_section' => 'email_settings_section')); 
     342    add_meta_box("wprc_permissions_settings_metabox", 'Security Settings', "wprc_metaboxes_callback", "wprc_metaboxes", 'advanced', 'default', array('settings_section' => 'permissions_settings_section')); 
     343    add_meta_box("wprc_other_settings_metabox", 'Other Settings', "wprc_metaboxes_callback", "wprc_metaboxes", 'advanced', 'default', array('settings_section' => 'other_settings_section')); 
     344} 
     345 
     346add_action('admin_init', 'wprc_add_meta_boxes'); 
     347 
     348function wprc_metaboxes_callback($post, $args) 
     349{ 
     350    do_settings_fields("wprc_settings", $args['args']['settings_section']); 
    340351    submit_button('Save Changes', 'secondary'); 
    341352} 
    342353 
    343 function wprc_render_settings_field($args){ 
     354function wprc_render_settings_field($args) 
     355{ 
    344356    $option_value = get_option($args['group']); 
    345 ?> 
     357    ?> 
    346358    <div class="row clearfix"> 
    347359        <div class="col colone"><?php echo $args['title']; ?></div> 
    348360        <div class="col coltwo"> 
    349     <?php if($args['type'] == 'text'): ?> 
    350         <input type="text" id="<?php echo $args['id'] ?>" name="<?php echo $args['group'].'['.$args['id'].']'; ?>" value="<?php echo esc_attr($option_value[$args['id']]); ?>"> 
    351     <?php elseif ($args['type'] == 'select'): ?> 
    352         <select name="<?php echo $args['group'].'['.$args['id'].']'; ?>" id="<?php echo $args['id']; ?>"> 
    353             <?php foreach ($args['options'] as $key=>$option) { ?> 
    354                 <option <?php selected($option_value[$args['id']], $key); echo 'value="'.$key.'"'; ?>><?php echo $option; ?></option><?php } ?> 
    355         </select> 
    356     <?php elseif($args['type'] == 'checkbox'): ?> 
    357         <input type="hidden" name="<?php echo $args['group'].'['.$args['id'].']'; ?>" value="0" /> 
    358         <input type="checkbox" name="<?php echo $args['group'].'['.$args['id'].']'; ?>" id="<?php echo $args['id']; ?>" value="1" <?php checked($option_value[$args['id']]); ?> /> 
    359     <?php elseif($args['type'] == 'textarea'): ?> 
    360         <textarea name="<?php echo $args['group'].'['.$args['id'].']'; ?>" type="<?php echo $args['type']; ?>" cols="" rows=""><?php if ( $option_value[$args['id']] != "") { echo stripslashes(esc_textarea($option_value[$args['id']]) ); } ?></textarea> 
    361     <?php elseif($args['type'] == 'multicheckbox'): 
    362         foreach ($args['items'] as $key => $checkboxitem ): 
    363     ?> 
    364         <input type="hidden" name="<?php echo $args['group'].'['.$args['id'].']['.$key.']'; ?>" value="0" /> 
    365         <label for="<?php echo $args['group'].'['.$args['id'].']['.$key.']'; ?>"><?php echo $checkboxitem; ?></label> <input type="checkbox" name="<?php echo $args['group'].'['.$args['id'].']['.$key.']'; ?>" id="<?php echo $args['group'].'['.$args['id'].']['.$key.']'; ?>" value="1"  
    366         <?php if($key=='reason'){ ?>checked="checked" disabled="disabled"<?php }else{ checked($option_value[$args['id']][$key]); } ?> /> 
    367     <?php endforeach; ?> 
    368     <?php elseif($args['type'] == 'multitext'): 
    369         foreach ($args['items'] as $key => $textitem ): 
    370     ?> 
    371         <label for="<?php echo $args['group'].'['.$args['id'].']['.$key.']'; ?>"><?php echo $textitem; ?></label><br/> 
    372         <input type="text" id="<?php echo $args['group'].'['.$args['id'].']['.$key.']'; ?>" name="<?php echo $args['group'].'['.$args['id'].']['.$key.']'; ?>" value="<?php echo esc_attr($option_value[$args['id']][$key]); ?>"><br/> 
    373     <?php endforeach; endif; ?> 
     361            <?php if ($args['type'] == 'text'): ?> 
     362                <input type="text" id="<?php echo $args['id'] ?>" 
     363                       name="<?php echo $args['group'] . '[' . $args['id'] . ']'; ?>" 
     364                       value="<?php echo esc_attr($option_value[ $args['id'] ]); ?>"> 
     365            <?php elseif ($args['type'] == 'select'): ?> 
     366                <select name="<?php echo $args['group'] . '[' . $args['id'] . ']'; ?>" id="<?php echo $args['id']; ?>"> 
     367                    <?php foreach ($args['options'] as $key => $option) { ?> 
     368                        <option <?php selected($option_value[ $args['id'] ], $key); 
     369                        echo 'value="' . $key . '"'; ?>><?php echo $option; ?></option><?php } ?> 
     370                </select> 
     371            <?php elseif ($args['type'] == 'checkbox'): ?> 
     372                <input type="hidden" name="<?php echo $args['group'] . '[' . $args['id'] . ']'; ?>" value="0"/> 
     373                <input type="checkbox" name="<?php echo $args['group'] . '[' . $args['id'] . ']'; ?>" 
     374                       id="<?php echo $args['id']; ?>" value="1" <?php checked($option_value[ $args['id'] ]); ?> /> 
     375            <?php elseif ($args['type'] == 'textarea'): ?> 
     376                <textarea name="<?php echo $args['group'] . '[' . $args['id'] . ']'; ?>" 
     377                          type="<?php echo $args['type']; ?>" cols="" 
     378                          rows=""><?php if ($option_value[ $args['id'] ] != "") { 
     379                        echo stripslashes(esc_textarea($option_value[ $args['id'] ])); 
     380                    } ?></textarea> 
     381            <?php elseif ($args['type'] == 'multicheckbox'): 
     382                foreach ($args['items'] as $key => $checkboxitem): 
     383                    ?> 
     384                    <input type="hidden" name="<?php echo $args['group'] . '[' . $args['id'] . '][' . $key . ']'; ?>" 
     385                           value="0"/> 
     386                    <label 
     387                        for="<?php echo $args['group'] . '[' . $args['id'] . '][' . $key . ']'; ?>"><?php echo $checkboxitem; ?></label> 
     388                    <input type="checkbox" name="<?php echo $args['group'] . '[' . $args['id'] . '][' . $key . ']'; ?>" 
     389                           id="<?php echo $args['group'] . '[' . $args['id'] . '][' . $key . ']'; ?>" value="1" 
     390                           <?php if ($key == 'reason'){ ?>checked="checked" disabled="disabled"<?php } else { 
     391                        checked($option_value[ $args['id'] ][ $key ]); 
     392                    } ?> /> 
     393                <?php endforeach; ?> 
     394            <?php elseif ($args['type'] == 'multitext'): 
     395                foreach ($args['items'] as $key => $textitem): 
     396                    ?> 
     397                    <label 
     398                        for="<?php echo $args['group'] . '[' . $args['id'] . '][' . $key . ']'; ?>"><?php echo $textitem; ?></label> 
     399                    <br/> 
     400                    <input type="text" id="<?php echo $args['group'] . '[' . $args['id'] . '][' . $key . ']'; ?>" 
     401                           name="<?php echo $args['group'] . '[' . $args['id'] . '][' . $key . ']'; ?>" 
     402                           value="<?php echo esc_attr($option_value[ $args['id'] ][ $key ]); ?>"><br/> 
     403                <?php endforeach; endif; ?> 
    374404        </div> 
    375         <div class="col colthree"><small><?php echo $args['desc'] ?></small></div> 
     405        <div class="col colthree"> 
     406            <small><?php echo $args['desc'] ?></small> 
     407        </div> 
    376408    </div> 
    377 <?php 
     409    <?php 
    378410} 
    379411 
  • report-content/trunk/inc/report-form.php

    r835946 r1552692  
    1 <?php  
    2     global $post; 
    3     $form_options = get_option('wprc_form_settings'); 
    4     $permissions = get_option('wprc_permissions_settings'); 
    5     $required_fields = $form_options['required_fields']; 
    6     $reasons = explode("\n", $form_options['report_reasons']); 
     1<?php 
     2global $post; 
     3$form_options = get_option('wprc_form_settings'); 
     4$permissions = get_option('wprc_permissions_settings'); 
     5$required_fields = $form_options['required_fields']; 
     6$reasons = explode("\n", $form_options['report_reasons']); 
    77?> 
    88<div class="wprc-container <?php echo $form_options['color_scheme']; ?>"> 
     
    1212        </div> 
    1313        <div class="wprc-form"> 
    14             <?php if( $permissions['login_required'] && !is_user_logged_in() ): ?> 
     14            <?php if ($permissions['login_required'] && !is_user_logged_in()): ?> 
    1515                To report this post you need to <a href="<?php echo wp_login_url(); ?>" title="Login">login</a> first. 
    1616            <?php else: ?> 
    1717            <div class="left-section"> 
    1818                <li class="list-item-reason"> 
    19                     <label for="input-reason-<?php echo $post->ID; ?>">Issue: <span class="required-sign">*</span></label><br/> 
     19                    <label for="input-reason-<?php echo $post->ID; ?>">Issue: <span 
     20                            class="required-sign">*</span></label><br/> 
    2021                    <select id="input-reason-<?php echo $post->ID; ?>" class="input-reason"> 
    2122                        <?php foreach ($reasons as $key => $reason): ?> 
     
    2526                </li> 
    2627                <li class="list-item-name"> 
    27                     <?php if($form_options['active_fields']['reporter_name']): ?> 
    28                     <label for="input-name-<?php echo $post->ID; ?>"> 
    29                         Your Name: 
    30                         <?php if($required_fields['reporter_name']): ?><span class="required-sign">*</span><?php endif; ?> 
    31                     </label><br/> 
    32                     <input type="text" id="input-name-<?php echo $post->ID; ?>" class="input-name wprc-input"/> 
     28                    <?php if ($form_options['active_fields']['reporter_name']): ?> 
     29                        <label for="input-name-<?php echo $post->ID; ?>"> 
     30                            Your Name: 
     31                            <?php if ($required_fields['reporter_name']): ?><span 
     32                                class="required-sign">*</span><?php endif; ?> 
     33                        </label><br/> 
     34                        <input type="text" id="input-name-<?php echo $post->ID; ?>" class="input-name wprc-input"/> 
    3335                    <?php endif; ?> 
    3436                </li> 
    3537                <li class="list-item-email"> 
    36                     <?php if($form_options['active_fields']['reporter_email']): ?> 
    37                     <label for="input-email-<?php echo $post->ID; ?>"> 
    38                         Your Email: 
    39                         <?php if($required_fields['reporter_email']): ?><span class="required-sign">*</span><?php endif; ?> 
    40                     </label><br/> 
    41                     <input type="text" id="input-email-<?php echo $post->ID; ?>" class="input-email wprc-input"/> 
     38                    <?php if ($form_options['active_fields']['reporter_email']): ?> 
     39                        <label for="input-email-<?php echo $post->ID; ?>"> 
     40                            Your Email: 
     41                            <?php if ($required_fields['reporter_email']): ?><span 
     42                                class="required-sign">*</span><?php endif; ?> 
     43                        </label><br/> 
     44                        <input type="text" id="input-email-<?php echo $post->ID; ?>" class="input-email wprc-input"/> 
    4245                    <?php endif; ?> 
    4346                </li> 
     
    4548            <div class="right-section"> 
    4649                <li class="list-item-details"> 
    47                     <?php if($form_options['active_fields']['details']): ?> 
    48                     <label for="input-details-<?php echo $post->ID; ?>"> 
    49                         Details: 
    50                         <?php if($required_fields['details']): ?><span class="required-sign">*</span><?php endif; ?> 
    51                     </label><br/> 
    52                     <textarea id="input-details-<?php echo $post->ID; ?>" class="input-details wprc-input"></textarea> 
     50                    <?php if ($form_options['active_fields']['details']): ?> 
     51                        <label for="input-details-<?php echo $post->ID; ?>"> 
     52                            Details: 
     53                            <?php if ($required_fields['details']): ?><span 
     54                                class="required-sign">*</span><?php endif; ?> 
     55                        </label><br/> 
     56                        <textarea id="input-details-<?php echo $post->ID; ?>" 
     57                                  class="input-details wprc-input"></textarea> 
    5358                    <?php endif; ?> 
    5459                </li> 
     
    5762            <input type="hidden" class="post-id" value="<?php echo $post->ID; ?>"> 
    5863            <button type="button" class="wprc-submit"><?php echo $form_options['submit_button_text'] ?></button> 
    59             <img class="loading-img" style="display:none;" src="<?php echo plugins_url( 'static/img/loading.gif' , dirname(__FILE__) ); ?>" /> 
     64            <img class="loading-img" style="display:none;" 
     65                 src="<?php echo plugins_url('static/img/loading.gif', dirname(__FILE__)); ?>"/> 
    6066        </div> 
    6167    </div> 
  • report-content/trunk/inc/reports-list.php

    r835946 r1552692  
    11<?php 
    22 
    3 if(!class_exists('WPRC_Table')){ 
    4     require_once( 'class-wprc-table.php' ); 
     3if (!class_exists('WPRC_Table')) { 
     4    require_once('class-wprc-table.php'); 
    55} 
    66 
    7 function wprc_add_menu_items(){ 
    8     $permission_options = get_option('wprc_permissions_settings'); 
    9     $menu_page_permission = (isset($permission_options['minimum_role_view']))?$permission_options['minimum_role_view']:'activate_plugins'; 
    10     add_menu_page('Reports', 'Reports', $menu_page_permission, 'wprc_reports_page', 'wprc_render_list_page'); 
     7function wprc_add_menu_items() 
     8{ 
     9    $permission_options = get_option('wprc_permissions_settings'); 
     10    $menu_page_permission = (isset($permission_options['minimum_role_view'])) ? $permission_options['minimum_role_view'] : 'activate_plugins'; 
     11    add_menu_page('Reports', 'Reports', $menu_page_permission, 'wprc_reports_page', 'wprc_render_list_page'); 
    1112} 
     13 
    1214add_action('admin_menu', 'wprc_add_menu_items'); 
    1315 
    14 function wprc_db_change_admin_notice() { 
    15     if(!isset($_GET['report']) || !isset($_GET['action'])) 
    16         return; 
    17     if($_GET['action'] === 'delete') 
    18         $message = count($_GET['report'])." record(s) deleted from database"; 
    19     elseif($_GET['action'] === 'change_status') 
    20         $message = count($_GET['report'])." record(s) marked as resolved"; 
    21     ?> 
    22     <div class="updated"> 
    23         <p><?php echo $message; ?></p> 
    24     </div> 
    25     <?php 
     16function wprc_db_change_admin_notice() 
     17{ 
     18    if (!isset($_GET['report']) || !isset($_GET['action'])) 
     19        return; 
     20    if ($_GET['action'] === 'delete') 
     21        $message = count($_GET['report']) . " record(s) deleted from database"; 
     22    elseif ($_GET['action'] === 'change_status') 
     23        $message = count($_GET['report']) . " record(s) marked as resolved"; 
     24    ?> 
     25    <div class="updated"> 
     26        <p><?php echo $message; ?></p> 
     27    </div> 
     28    <?php 
    2629} 
    27 add_action( 'admin_notices', 'wprc_db_change_admin_notice' ); 
    2830 
    29 function wprc_render_list_page(){ 
    30     $reportsTable = new WPRC_Table(); 
    31     $reportsTable->prepare_items(); 
    32     ?> 
    33     <div class="wrap">         
    34         <div id="icon-users" class="icon32"><br/></div> 
    35         <h2>Reports</h2> 
    36         <style type="text/css"> 
    37             .fixed .column-status { text-align: center; width: 4em !important; } 
    38             .new-report, .old-report{font-size: 24px;} 
    39             .new-report{ color:#C30000; } 
    40             .old-report{ color: green; } 
    41         </style> 
    42         <form id="reports-filter" method="get"> 
    43             <input type="hidden" name="page" value="<?php echo $_REQUEST['page'] ?>" /> 
    44             <?php $reportsTable->display() ?> 
    45         </form> 
    46     </div> 
    47     <?php 
     31add_action('admin_notices', 'wprc_db_change_admin_notice'); 
     32 
     33function wprc_render_list_page() 
     34{ 
     35    $reportsTable = new WPRC_Table(); 
     36    $reportsTable->prepare_items(); 
     37    ?> 
     38    <div class="wrap"> 
     39        <div id="icon-users" class="icon32"><br/></div> 
     40        <h2>Reports</h2> 
     41        <style type="text/css"> 
     42            .fixed .column-status { 
     43                text-align: center; 
     44                width: 4em !important; 
     45            } 
     46 
     47            .new-report, .old-report { 
     48                font-size: 24px; 
     49            } 
     50 
     51            .new-report { 
     52                color: #C30000; 
     53            } 
     54 
     55            .old-report { 
     56                color: green; 
     57            } 
     58        </style> 
     59        <form id="reports-filter" method="get"> 
     60            <input type="hidden" name="page" value="<?php echo $_REQUEST['page'] ?>"/> 
     61            <?php $reportsTable->display() ?> 
     62        </form> 
     63    </div> 
     64    <?php 
    4865} 
  • report-content/trunk/readme.txt

    r1191548 r1552692  
    44Donate link: http://wpgurus.net/ 
    55Requires at least: 3.0 
    6 Tested up to: 4.2 
    7 Stable tag: 1.4 
     6Tested up to: 4.7 
     7Stable tag: 1.5.0 
    88License: GPLv2 or later 
    99License URI: http://www.gnu.org/licenses/gpl-2.0.html 
  • report-content/trunk/report-content.php

    r1191548 r1552692  
    44Plugin URI: http://wpgurus.net/ 
    55Description: Inserts a secure form on specified pages so that your readers can report bugs, spam content and other problems. 
    6 Version: 1.4 
     6Version: 1.5.0 
    77Author: Hassan Akhtar 
    88Author URI: http://wpgurus.net/ 
     
    1111 
    1212/********************************************** 
    13 * 
    14 * Creating the contentreports table on installation 
    15 * 
    16 ***********************************************/ 
    17  
    18 global $wprc_db_version; 
    19 $wprc_db_version = "1.0"; 
    20  
    21 function wprc_install() { 
    22     global $wpdb; 
    23     global $wprc_db_version; 
    24     $table_name = $wpdb->prefix . "contentreports"; 
    25     if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") == $table_name && get_option("wprc_db_version")) 
     13 * 
     14 * Creating the contentreports table on installation 
     15 * 
     16 ***********************************************/ 
     17 
     18define('WPRC_TABLE_VERSION', '1.1'); 
     19 
     20function wprc_install() 
     21{ 
     22    global $wpdb; 
     23 
     24    $table_name = wprc_table_name(); 
     25    $table_exists = $wpdb->get_var("SHOW TABLES LIKE '$table_name'") == $table_name; 
     26    $table_up_to_date = get_option("wprc_db_version") == WPRC_TABLE_VERSION; 
     27 
     28    if ($table_exists && $table_up_to_date) { 
    2629        return; 
    27        
     30    } 
     31 
     32    wprc_create_table(); 
     33    update_option('wprc_db_version', WPRC_TABLE_VERSION); 
     34 
     35    if ($table_exists) { 
     36        return; 
     37    } 
     38 
     39    wprc_initialize_settings(); 
     40} 
     41 
     42function wprc_table_name() 
     43{ 
     44    global $wpdb; 
     45    return $wpdb->prefix . "contentreports"; 
     46} 
     47 
     48function wprc_create_table() 
     49{ 
     50    global $wpdb; 
     51    $table_name = wprc_table_name(); 
     52 
     53    $charset_collate = $wpdb->get_charset_collate(); 
    2854    $sql = " 
    2955        CREATE TABLE $table_name ( 
     
    3662        reporter_email VARCHAR(55) DEFAULT '' NULL, 
    3763        post_id mediumint(9) NOT NULL, 
    38         UNIQUE KEY id (id) ); 
     64        UNIQUE KEY id (id) ) $charset_collate; 
    3965    "; 
    4066 
    41     require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); 
    42     dbDelta( $sql ); 
    43  
     67    require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); 
     68    dbDelta($sql); 
     69} 
     70 
     71function wprc_initialize_settings() 
     72{ 
    4473    $wprc_form_settings = array( 
    45         'active_fields'             => array('reason'=>1, 'reporter_name'=>1,'reporter_email'=>1,'details'=>1), 
    46         'required_fields'           => array('reason'=>1, 'reporter_name'=>1,'reporter_email'=>1,'details'=>1), 
    47         'report_reasons'            => "Copyright Infringment\nSpam\nInvalid Contents\nBroken Links", 
    48         'slidedown_button_text'     => 'Report Content', 
    49         'submit_button_text'        => 'Submit Report', 
    50         'color_scheme'              => 'yellow' 
     74        'active_fields'         => array('reason' => 1, 'reporter_name' => 1, 'reporter_email' => 1, 'details' => 1), 
     75        'required_fields'       => array('reason' => 1, 'reporter_name' => 1, 'reporter_email' => 1, 'details' => 1), 
     76        'report_reasons'        => "Copyright Infringement\nSpam\nInvalid Contents\nBroken Links", 
     77        'slidedown_button_text' => 'Report Content', 
     78        'submit_button_text'    => 'Submit Report', 
     79        'color_scheme'          => 'yellow' 
    5180    ); 
    5281    $wprc_integration_settings = array( 
    53         'integration_type'          => 'automatically', 
    54         'automatic_form_position'   => 'above', 
    55         'display_on'                => 'posts_pages' 
     82        'integration_type'        => 'automatically', 
     83        'automatic_form_position' => 'above', 
     84        'display_on'              => 'posts_pages' 
    5685    ); 
    5786    $wprc_email_settings = array( 
    58         'email_recipients'      => 'none', 
    59         'sender_name'           => '', 
    60         'sender_address'        => '', 
    61         'author_email_subject'  => 'Your article has been flagged', 
    62         'author_email_content'  => "Hi %AUTHOR%,\n\nYour article on ".get_option('blogname')." has been flagged.\n\nView the article: %POSTURL%\nEdit the article: %EDITURL%", 
    63         'admin_email_subject'   => 'New report submitted', 
    64         'admin_email_content'   => "Hi admin,\n\nAn article on your website ".get_option('blogname')." has been flagged.\n\nView the article: %POSTURL%\nEdit the article: %EDITURL%\nView all reports: %REPORTSURL%" 
     87        'email_recipients'     => 'none', 
     88        'sender_name'          => '', 
     89        'sender_address'       => '', 
     90        'author_email_subject' => 'Your article has been flagged', 
     91        'author_email_content' => "Hi %AUTHOR%,\n\nYour article on " . get_option('blogname') . " has been flagged.\n\nView the article: %POSTURL%\nEdit the article: %EDITURL%", 
     92        'admin_email_subject'  => 'New report submitted', 
     93        'admin_email_content'  => "Hi admin,\n\nAn article on your website " . get_option('blogname') . " has been flagged.\n\nView the article: %POSTURL%\nEdit the article: %EDITURL%\nView all reports: %REPORTSURL%" 
    6594    ); 
    6695    $wprc_permissions_settings = array( 
    67         'minimum_role_view'     => 'install_plugins', 
    68         'minimum_role_change'   => 'install_plugins', 
    69         'login_required'        => 0, 
    70         'use_akismet'           => 1 
     96        'minimum_role_view'   => 'install_plugins', 
     97        'minimum_role_change' => 'install_plugins', 
     98        'login_required'      => 0, 
     99        'use_akismet'         => 1 
    71100    ); 
    72101    $wprc_other_settings = array( 
    73         'disable_metabox'       => 0, 
    74         'disable_db_saving'     => 0  
    75     ); 
    76     update_option('wprc_db_version', $wprc_db_version ); 
     102        'disable_metabox'   => 0, 
     103        'disable_db_saving' => 0 
     104    ); 
    77105    update_option('wprc_form_settings', $wprc_form_settings); 
    78106    update_option('wprc_integration_settings', $wprc_integration_settings); 
     
    81109    update_option('wprc_other_settings', $wprc_other_settings); 
    82110} 
    83 register_activation_hook( __FILE__, 'wprc_install' ); 
    84  
    85 function wprc_rollback(){ 
     111 
     112register_activation_hook(__FILE__, 'wprc_install'); 
     113 
     114function wprc_rollback() 
     115{ 
    86116    delete_option('wprc_db_version'); 
    87117    delete_option('wprc_form_settings'); 
     
    94124    return $wpdb->query("DROP TABLE $table_name"); 
    95125} 
     126 
    96127register_uninstall_hook(__FILE__, 'wprc_rollback'); 
    97128 
    98129/********************************************** 
    99 * 
    100 * Enqueuing scripts and styles 
    101 * 
    102 ***********************************************/ 
    103  
    104 function wprc_enqueue_resources(){ 
    105     wp_enqueue_style( 'wprc-style', plugins_url('static/css/styles.css', __FILE__) ); 
     130 * 
     131 * Enqueuing scripts and styles 
     132 * 
     133 ***********************************************/ 
     134 
     135function wprc_enqueue_resources() 
     136{ 
     137    wp_enqueue_style('wprc-style', plugins_url('static/css/styles.css', __FILE__)); 
    106138    wp_enqueue_script('wprc-script', plugins_url('static/js/scripts.js', __FILE__), array('jquery')); 
    107     wp_localize_script( 'wprc-script', 'wprcajaxhandler', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ))); 
    108 } 
     139    wp_localize_script('wprc-script', 'wprcajaxhandler', array('ajaxurl' => admin_url('admin-ajax.php'))); 
     140} 
     141 
    109142add_action('wp_enqueue_scripts', 'wprc_enqueue_resources'); 
    110143 
    111144/********************************************** 
    112 * 
    113 * Automatically insert the report form in posts  
    114 * 
    115 ***********************************************/ 
    116  
    117 function wprc_add_report_button_filter($content){ 
     145 * 
     146 * Automatically insert the report form in posts 
     147 * 
     148 ***********************************************/ 
     149 
     150function wprc_add_report_button_filter($content) 
     151{ 
    118152    $integration_options = get_option('wprc_integration_settings'); 
    119     if( ($integration_options && $integration_options['integration_type']=='manually')  || 
    120         ($integration_options['display_on'] == 'single_post' && !is_single())           ||  
    121         ($integration_options['display_on'] == 'single_page' && !is_page())             ||  
    122         ($integration_options['display_on'] == 'posts_pages' && !is_singular()) ) 
     153    if (($integration_options && $integration_options['integration_type'] == 'manually') || 
     154        ($integration_options['display_on'] == 'single_post' && !is_single()) || 
     155        ($integration_options['display_on'] == 'single_page' && !is_page()) || 
     156        ($integration_options['display_on'] == 'posts_pages' && !is_singular()) 
     157    ) 
    123158        return $content; 
    124159 
     
    128163    ob_end_clean(); 
    129164 
    130     if($integration_options && $integration_options['automatic_form_position']=='below') 
    131         return $content.$form_html; 
    132     return $form_html.$content; 
    133 } 
     165    if ($integration_options && $integration_options['automatic_form_position'] == 'below') 
     166        return $content . $form_html; 
     167    return $form_html . $content; 
     168} 
     169 
    134170add_filter('the_content', 'wprc_add_report_button_filter', 99); 
    135171 
    136 function wprc_report_submission_form(){ 
     172function wprc_report_submission_form() 
     173{ 
    137174    include "inc/report-form.php"; 
    138175} 
    139176 
    140 function wprc_neutralize_excerpt( $content ) { 
    141      remove_filter('the_content', 'wprc_add_report_button_filter'); 
    142      return $content; 
    143 } 
     177function wprc_neutralize_excerpt($content) 
     178{ 
     179    remove_filter('the_content', 'wprc_add_report_button_filter'); 
     180    return $content; 
     181} 
     182 
    144183add_filter('get_the_excerpt', 'wprc_neutralize_excerpt', 5); 
    145184 
    146185/********************************************** 
    147 * 
    148 * Database functions 
    149 * 
    150 ***********************************************/ 
    151  
    152 function wprc_insert_data($args){ 
     186 * 
     187 * Database functions 
     188 * 
     189 ***********************************************/ 
     190 
     191function wprc_insert_data($args) 
     192{ 
    153193    $other_options = get_option('wprc_other_settings'); 
    154     if($other_options['disable_db_saving']) 
     194    if ($other_options['disable_db_saving']) 
    155195        return true; 
    156196    global $wpdb; 
    157197    $table = $wpdb->prefix . "contentreports"; 
    158     $result = $wpdb->insert( $table, $args ); 
    159     if($result) 
     198    $result = $wpdb->insert($table, $args); 
     199    if ($result) 
    160200        return $wpdb->insert_id; 
    161201    return false; 
    162202} 
    163203 
    164 function wprc_get_post_reports($post_id){ 
     204function wprc_get_post_reports($post_id) 
     205{ 
    165206    global $wpdb; 
    166207    $table = $wpdb->prefix . "contentreports"; 
    167     $query = "SELECT * FROM $table WHERE post_id = $post_id ORDER BY time DESC"; 
    168     return $wpdb->get_results( $query, ARRAY_A ); 
    169 } 
    170  
    171 function wprc_delete_post_reports($post_id){ 
     208    $query = "SELECT * FROM $table WHERE post_id = $post_id ORDER BY time DESC"; 
     209    return $wpdb->get_results($query, ARRAY_A); 
     210} 
     211 
     212function wprc_delete_post_reports($post_id) 
     213{ 
    172214    global $wpdb; 
    173215    $table = $wpdb->prefix . "contentreports"; 
    174     $query = $wpdb->prepare( "DELETE FROM $table WHERE post_id = %d", $post_id ); 
    175     return $wpdb->query( $query ); 
    176 } 
    177  
    178 /********************************************** 
    179 * 
    180 * Cleanup on post deletion 
    181 * 
    182 ***********************************************/ 
    183  
    184 function wprc_on_post_delete($post_id){ 
     216    $query = $wpdb->prepare("DELETE FROM $table WHERE post_id = %d", $post_id); 
     217    return $wpdb->query($query); 
     218} 
     219 
     220/********************************************** 
     221 * 
     222 * Cleanup on post deletion 
     223 * 
     224 ***********************************************/ 
     225 
     226function wprc_on_post_delete($post_id) 
     227{ 
    185228    wprc_delete_post_reports($post_id); 
    186229} 
     230 
    187231add_action('delete_post', 'wprc_on_post_delete'); 
    188232 
    189233/********************************************** 
    190 * 
    191 * Mailing function 
    192 * 
    193 ***********************************************/ 
    194  
    195 function wprc_mail($report){ 
    196     $post_id            = $report['post_id']; 
    197     $post_url           = get_post_permalink( $post_id ); 
    198     $post_edit_url      = admin_url( "post.php?post=$post_id&action=edit" ); 
    199     $reports_url        = admin_url( 'admin.php?page=wprc_reports_page' ); 
    200     $email_options      = get_option('wprc_email_settings'); 
    201     $admin_emails_sent  = true; 
     234 * 
     235 * Mailing function 
     236 * 
     237 ***********************************************/ 
     238 
     239function wprc_mail($report) 
     240{ 
     241    $post_id = $report['post_id']; 
     242    $post_url = get_post_permalink($post_id); 
     243    $post_edit_url = admin_url("post.php?post=$post_id&action=edit"); 
     244    $reports_url = admin_url('admin.php?page=wprc_reports_page'); 
     245    $email_options = get_option('wprc_email_settings'); 
     246    $admin_emails_sent = true; 
    202247    $author_emails_sent = true; 
    203     $headers            = array(); 
    204     if( !$email_options || $email_options['email_recipients'] == 'none') 
     248    $headers = array(); 
     249    if (!$email_options || $email_options['email_recipients'] == 'none') 
    205250        return true; 
    206251 
    207     if($email_options['sender_name'] && $email_options['sender_address']) 
    208         $headers[] = 'From: '.$email_options['sender_name'].' <'.$email_options['sender_address'].'>'; 
    209     $report_string = "\n\nReport:\n\n".$report['reason']."\n\n".$report['details']; 
    210  
    211     if('admin' == $email_options['email_recipients'] || 'author_admin' == $email_options['email_recipients']){ 
    212         $to_admin = get_option( 'admin_email' ); 
     252    if ($email_options['sender_name'] && $email_options['sender_address']) 
     253        $headers[] = 'From: ' . $email_options['sender_name'] . ' <' . $email_options['sender_address'] . '>'; 
     254    $report_string = "\n\nReport:\n\n" . $report['reason'] . "\n\n" . $report['details']; 
     255 
     256    if ('admin' == $email_options['email_recipients'] || 'author_admin' == $email_options['email_recipients']) { 
     257        $to_admin = get_option('admin_email'); 
    213258        $email_options['admin_email_content'] = str_replace('%POSTURL%', $post_url, $email_options['admin_email_content']); 
    214259        $email_options['admin_email_content'] = str_replace('%EDITURL%', $post_edit_url, $email_options['admin_email_content']); 
    215260        $email_options['admin_email_content'] = str_replace('%REPORTSURL%', $reports_url, $email_options['admin_email_content']); 
    216         $admin_emails_sent = wp_mail( $to_admin, $email_options['admin_email_subject'], $email_options['admin_email_content'].$report_string, $headers ); 
    217     } 
    218  
    219     if('author' == $email_options['email_recipients'] || 'author_admin' == $email_options['email_recipients']){ 
     261        $admin_emails_sent = wp_mail($to_admin, $email_options['admin_email_subject'], $email_options['admin_email_content'] . $report_string, $headers); 
     262    } 
     263 
     264    if ('author' == $email_options['email_recipients'] || 'author_admin' == $email_options['email_recipients']) { 
    220265        $post = get_post($post_id); 
    221         $author = get_user_by( 'id', $post->post_author ); 
     266        $author = get_user_by('id', $post->post_author); 
    222267        $email_options['author_email_content'] = str_replace('%AUTHOR%', $author->display_name, $email_options['author_email_content']); 
    223268        $email_options['author_email_content'] = str_replace('%POSTURL%', $post_url, $email_options['author_email_content']); 
    224269        $email_options['author_email_content'] = str_replace('%EDITURL%', $post_edit_url, $email_options['author_email_content']); 
    225         if($author->user_email != $to_admin) 
    226             $author_emails_sent = wp_mail( $author->user_email, $email_options['author_email_subject'], $email_options['author_email_content'].$report_string, $headers ); 
     270        if ($author->user_email != $to_admin) 
     271            $author_emails_sent = wp_mail($author->user_email, $email_options['author_email_subject'], $email_options['author_email_content'] . $report_string, $headers); 
    227272    } 
    228273 
     
    231276 
    232277/********************************************** 
    233 * 
    234 * Check for errors, insert into DB and send emails 
    235 * 
    236 ***********************************************/ 
    237  
    238 function wprc_add_report(){ 
     278 * 
     279 * Check for errors, insert into DB and send emails 
     280 * 
     281 ***********************************************/ 
     282 
     283function wprc_add_report() 
     284{ 
    239285    $message['success'] = 0; 
    240286    $permissions = get_option('wprc_permissions_settings'); 
    241     if($permissions['login_required'] && !is_user_logged_in()){ 
     287    if ($permissions['login_required'] && !is_user_logged_in()) { 
    242288        $message['message'] = 'To submit a report you need to <a href="<?php echo wp_login_url(); ?>" title="Login">login</a> first'; 
    243289        die(json_encode($message)); 
     
    248294    $required_fields = $form_options['required_fields']; 
    249295    foreach ($required_fields as $key => $field) { 
    250         if($field && $active_fields[$key] && !$_POST[$key]){ 
     296        if ($field && $active_fields[ $key ] && !$_POST[ $key ]) { 
    251297            $message['message'] = 'You missed a required field'; 
    252298            die(json_encode($message)); 
    253299        } 
    254300    } 
    255      
    256     if($active_fields['reporter_email'] && $_POST['reporter_email'] && !is_email($_POST['reporter_email'])) { 
     301 
     302    if ($active_fields['reporter_email'] && $_POST['reporter_email'] && !is_email($_POST['reporter_email'])) { 
    257303        $message['message'] = 'Email address invalid'; 
    258304        die(json_encode($message)); 
    259305    } 
    260306 
    261     $details        = $_POST['details']; 
    262     $reporter_name  = (isset($_POST['reporter_name']))?$_POST['reporter_name']:''; 
    263     $reporter_email = (isset($_POST['reporter_email']))?$_POST['reporter_email']:''; 
     307    $details = $_POST['details']; 
     308    $reporter_name = (isset($_POST['reporter_name'])) ? $_POST['reporter_name'] : ''; 
     309    $reporter_email = (isset($_POST['reporter_email'])) ? $_POST['reporter_email'] : ''; 
    264310 
    265311    $new_report = array( 
    266         'reason'            =>  sanitize_text_field($_POST['reason']), 
    267         'status'            =>  'new', 
    268         'time'              =>  current_time('mysql'), 
    269         'details'           =>  sanitize_text_field($details), 
    270         'reporter_name'     =>  sanitize_text_field($reporter_name), 
    271         'reporter_email'    =>  sanitize_email($reporter_email), 
    272         'post_id'           =>  intval($_POST['id']) 
    273     ); 
    274     if(wprc_is_spam($new_report)){ 
     312        'reason'         => sanitize_text_field($_POST['reason']), 
     313        'status'         => 'new', 
     314        'time'           => current_time('mysql'), 
     315        'details'        => sanitize_text_field($details), 
     316        'reporter_name'  => sanitize_text_field($reporter_name), 
     317        'reporter_email' => sanitize_email($reporter_email), 
     318        'post_id'        => intval($_POST['id']) 
     319    ); 
     320    if (wprc_is_spam($new_report)) { 
    275321        $message['message'] = 'Your submission has been marked as spam by our filters'; 
    276322        die(json_encode($message)); 
    277323    } 
    278324 
    279     if(!wprc_insert_data($new_report)){ 
     325    if (!wprc_insert_data($new_report)) { 
    280326        $message['message'] = 'An unexpected error occured. Please try again later'; 
    281327        die(json_encode($message)); 
     
    287333    die(json_encode($message)); 
    288334} 
    289 add_action( 'wp_ajax_wprc_add_report', 'wprc_add_report' ); 
    290 add_action( 'wp_ajax_nopriv_wprc_add_report', 'wprc_add_report' ); 
    291  
    292 /********************************************** 
    293 * 
    294 * Adding new columns to edit.php page 
    295 * 
    296 ***********************************************/ 
    297  
    298 function wprc_add_admin_column_headers($headers){ 
     335 
     336add_action('wp_ajax_wprc_add_report', 'wprc_add_report'); 
     337add_action('wp_ajax_nopriv_wprc_add_report', 'wprc_add_report'); 
     338 
     339/********************************************** 
     340 * 
     341 * Adding new columns to edit.php page 
     342 * 
     343 ***********************************************/ 
     344 
     345function wprc_add_admin_column_headers($headers) 
     346{ 
    299347    $permission_options = get_option('wprc_permissions_settings'); 
    300     if(!current_user_can($permission_options['minimum_role_view'])) return $headers; 
     348    if (!current_user_can($permission_options['minimum_role_view'])) return $headers; 
    301349 
    302350    $headers['wprc_post_reports'] = "Post Reports"; 
    303351    return $headers; 
    304352} 
    305 add_filter( 'manage_posts_columns', 'wprc_add_admin_column_headers',10, 2 ); 
    306  
    307 function wprc_add_admin_column_contents($header, $something){ 
    308     if($header == 'wprc_post_reports'){ 
     353 
     354add_filter('manage_posts_columns', 'wprc_add_admin_column_headers', 10, 2); 
     355 
     356function wprc_add_admin_column_contents($header, $something) 
     357{ 
     358    if ($header == 'wprc_post_reports') { 
    309359        global $post; 
    310360        $wprc_post_reports = wprc_get_post_reports($post->ID); 
    311         echo '<a href="'.get_edit_post_link( $post->ID ).'#wprc-reports">'.count($wprc_post_reports).'</a>'; 
    312     }    
    313 } 
    314 add_filter( 'manage_posts_custom_column', 'wprc_add_admin_column_contents', 10, 2 ); 
    315  
    316 /********************************************** 
    317 * 
    318 * Prepare the report for akismet and run tests 
    319 * 
    320 ***********************************************/ 
    321  
    322 function wprc_is_spam($report){ 
     361        echo '<a href="' . get_edit_post_link($post->ID) . '#wprc-reports">' . count($wprc_post_reports) . '</a>'; 
     362    } 
     363} 
     364 
     365add_filter('manage_posts_custom_column', 'wprc_add_admin_column_contents', 10, 2); 
     366 
     367/********************************************** 
     368 * 
     369 * Prepare the report for akismet and run tests 
     370 * 
     371 ***********************************************/ 
     372 
     373function wprc_is_spam($report) 
     374{ 
    323375    $permission_options = get_option('wprc_permissions_settings'); 
    324     if(!$permission_options['use_akismet'] || !function_exists('akismet_init')) 
     376    if (!$permission_options['use_akismet'] || !function_exists('akismet_init')) 
    325377        return false; 
    326378    $content['comment_author'] = $report['reporter_name']; 
     
    333385 
    334386/********************************************** 
    335 * 
    336 * Pass the report through Akismet filters to  
    337 * make sure it isn't spam 
    338 * 
    339 ***********************************************/ 
    340  
    341 function wprc_akismet_failed($content) { 
     387 * 
     388 * Pass the report through Akismet filters to 
     389 * make sure it isn't spam 
     390 * 
     391 ***********************************************/ 
     392 
     393function wprc_akismet_failed($content) 
     394{ 
    342395    $isSpam = FALSE; 
    343     $content = (array)$content;  
     396    $content = (array)$content; 
    344397    if (function_exists('akismet_init')) { 
    345398        $wpcom_api_key = get_option('wordpress_api_key'); 
     
    347400            global $akismet_api_host, $akismet_api_port; 
    348401            // set remaining required values for akismet api 
    349             $content['user_ip'] = preg_replace( '/[^0-9., ]/', '', $_SERVER['REMOTE_ADDR'] ); 
     402            $content['user_ip'] = preg_replace('/[^0-9., ]/', '', $_SERVER['REMOTE_ADDR']); 
    350403            $content['user_agent'] = $_SERVER['HTTP_USER_AGENT']; 
    351404            $content['referrer'] = $_SERVER['HTTP_REFERER']; 
    352405            $content['blog'] = get_option('home'); 
    353              
     406 
    354407            if (empty($content['referrer'])) { 
    355408                $content['referrer'] = get_permalink(); 
    356409            } 
    357              
     410 
    358411            $queryString = ''; 
    359              
     412 
    360413            foreach ($content as $key => $data) { 
    361414                if (!empty($data)) { 
     
    368421                $isSpam = TRUE; 
    369422            } 
    370         }    
     423        } 
    371424    } 
    372425    return $isSpam; 
     
    374427 
    375428/********************************************** 
    376 * 
    377 * Include the necessary items 
    378 * 
    379 ***********************************************/ 
     429 * 
     430 * Include the necessary items 
     431 * 
     432 ***********************************************/ 
    380433 
    381434include('inc/meta-boxes.php'); 
  • report-content/trunk/static/css/options-panel.css

    r924703 r1552692  
    11.wrap { 
    2     margin: 4px 15px 0 0; 
    3     padding-right: 30px; 
     2    margin: 4px 15px 0 0; 
     3    padding-right: 30px; 
    44} 
    55 
    66.js .postbox .hndle { 
    7     cursor: move; 
    8     margin: 0; 
    9     padding: 8px; 
     7    cursor: move; 
     8    margin: 0; 
     9    padding: 8px; 
    1010} 
    1111 
    1212.row { 
    13     border-bottom: 1px dashed #EDEDED; 
    14     display: block; 
    15     padding-top: 20px; 
    16     padding-bottom: 20px; 
     13    border-bottom: 1px dashed #EDEDED; 
     14    display: block; 
     15    padding-top: 20px; 
     16    padding-bottom: 20px; 
    1717} 
    1818 
    1919.col.colone, 
    2020.col.coltwo, 
    21 .col.colthree{ 
    22     float:left; 
    23     padding:0 10px; 
     21.col.colthree { 
     22    float: left; 
     23    padding: 0 10px; 
    2424} 
    2525 
    26 .colone{ 
    27     width:25%; 
     26.colone { 
     27    width: 25%; 
    2828} 
    2929 
    30 .coltwo{ 
    31     width:45%; 
     30.coltwo { 
     31    width: 45%; 
    3232} 
    3333 
    34 .colthree{ 
    35     width:20%; 
     34.colthree { 
     35    width: 20%; 
    3636} 
    3737 
    3838.col textarea, 
    3939.col input[type="text"], 
    40 .col select{ 
    41     width:80%; 
     40.col select { 
     41    width: 80%; 
    4242} 
    4343 
    44 .col textarea{ 
    45     height:170px; 
     44.col textarea { 
     45    height: 170px; 
    4646} 
    4747 
    48 .paddingtop20{ 
    49     padding-top:20px; 
     48.paddingtop20 { 
     49    padding-top: 20px; 
    5050} 
    5151 
    5252.side-block { 
    53     background: none repeat scroll 0 0 #FAFAFA; 
    54     border: 1px solid #FFFFFF; 
    55     outline: thin solid #EBEBEB; 
    56     padding: 10px; 
     53    background: none repeat scroll 0 0 #FAFAFA; 
     54    border: 1px solid #FFFFFF; 
     55    outline: thin solid #EBEBEB; 
     56    padding: 10px; 
    5757} 
    5858 
    5959small { 
    60     color: #666666; 
     60    color: #666666; 
    6161} 
    6262 
    63 .clearfix{zoom:1;}.clearfix:before,.clearfix:after{content:"";display:table;} 
    64 .clearfix:after{clear:both;} 
     63.clearfix { 
     64    zoom: 1; 
     65} 
    6566 
    66 @media only screen and (min-width:700px){ 
    67     .onecol{width:5.801104972%;} 
    68     .twocol{width:14.364640883%;} 
    69     .threecol{width:22.928176794%;} 
    70     .fourcol{width:31.491712705%;} 
    71     .fivecol{width:40.055248616%;} 
    72     .sixcol{width:48.618784527%;} 
    73     .sevencol{width:57.182320438000005%;} 
    74     .eightcol{width:65.74585634900001%;} 
    75     .ninecol{width:74.30939226%;} 
    76     .tencol{width:82.87292817100001%;} 
    77     .elevencol{width:91.436464082%;} 
    78     .twelvecol{width:99.999999993%;} 
    79     .onecol,.twocol,.threecol,.fourcol,.fivecol,.sixcol,.sevencol,.eightcol,.ninecol,.tencol,.elevencol,.twelvecol{position:relative;float:left;margin-left:2.762430939%;}  
    80     .first{margin-left:0;} 
    81     .last{float:right;} 
     67.clearfix:before, .clearfix:after { 
     68    content: ""; 
     69    display: table; 
    8270} 
     71 
     72.clearfix:after { 
     73    clear: both; 
     74} 
     75 
     76@media only screen and (min-width: 700px) { 
     77    .onecol { 
     78        width: 5.801104972%; 
     79    } 
     80 
     81    .twocol { 
     82        width: 14.364640883%; 
     83    } 
     84 
     85    .threecol { 
     86        width: 22.928176794%; 
     87    } 
     88 
     89    .fourcol { 
     90        width: 31.491712705%; 
     91    } 
     92 
     93    .fivecol { 
     94        width: 40.055248616%; 
     95    } 
     96 
     97    .sixcol { 
     98        width: 48.618784527%; 
     99    } 
     100 
     101    .sevencol { 
     102        width: 57.182320438000005%; 
     103    } 
     104 
     105    .eightcol { 
     106        width: 65.74585634900001%; 
     107    } 
     108 
     109    .ninecol { 
     110        width: 74.30939226%; 
     111    } 
     112 
     113    .tencol { 
     114        width: 82.87292817100001%; 
     115    } 
     116 
     117    .elevencol { 
     118        width: 91.436464082%; 
     119    } 
     120 
     121    .twelvecol { 
     122        width: 99.999999993%; 
     123    } 
     124 
     125    .onecol, .twocol, .threecol, .fourcol, .fivecol, .sixcol, .sevencol, .eightcol, .ninecol, .tencol, .elevencol, .twelvecol { 
     126        position: relative; 
     127        float: left; 
     128        margin-left: 2.762430939%; 
     129    } 
     130 
     131    .first { 
     132        margin-left: 0; 
     133    } 
     134 
     135    .last { 
     136        float: right; 
     137    } 
     138} 
  • report-content/trunk/static/css/styles.css

    r835946 r1552692  
    11.wprc-container { 
    2     display: block; 
    3     float: right; 
    4     width: 100%; 
    5     margin:20px 0; 
     2    display: block; 
     3    float: right; 
     4    width: 100%; 
     5    margin: 20px 0; 
    66} 
    7 .wprc-container.red-colorscheme .wprc-content{ 
    8     border-top: 4px solid #EB652E; 
     7 
     8.wprc-container.red-colorscheme .wprc-content { 
     9    border-top: 4px solid #EB652E; 
    910} 
    10 .wprc-container.blue-colorscheme .wprc-content{ 
    11     border-top: 4px solid #4785CC; 
     11 
     12.wprc-container.blue-colorscheme .wprc-content { 
     13    border-top: 4px solid #4785CC; 
    1214} 
    13 .wprc-container.green-colorscheme .wprc-content{ 
    14     border-top: 4px solid #6CBE56; 
     15 
     16.wprc-container.green-colorscheme .wprc-content { 
     17    border-top: 4px solid #6CBE56; 
    1518} 
     19 
    1620.wprc-container .wprc-content { 
    17     background: #F6F6F6; 
    18     border-top: 4px solid #FDCE3A; 
    19     width:100%; 
    20     padding: 20px; 
    21     display: none; 
    22     clear:both; 
    23     box-shadow: 0 3px 3px #B8B8B8; 
     21    background: #F6F6F6; 
     22    border-top: 4px solid #FDCE3A; 
     23    width: 100%; 
     24    padding: 20px; 
     25    display: none; 
     26    clear: both; 
     27    box-shadow: 0 3px 3px #B8B8B8; 
    2428} 
     29 
    2530.wprc-content .left-section, 
    26 .wprc-content .right-section{ 
    27     width:50%; 
     31.wprc-content .right-section { 
     32    width: 50%; 
    2833} 
    29 .wprc-content .left-section{ 
    30     float:left; 
     34 
     35.wprc-content .left-section { 
     36    float: left; 
    3137} 
    32 .wprc-content .right-section{ 
    33     float:right; 
    34     padding-left: 20px; 
     38 
     39.wprc-content .right-section { 
     40    float: right; 
     41    padding-left: 20px; 
    3542} 
    36 .wprc-content .right-section li{ 
    37     height:100%; 
     43 
     44.wprc-content .right-section li { 
     45    height: 100%; 
    3846} 
    39 .clear{ 
    40     clear: both; 
     47 
     48.clear { 
     49    clear: both; 
    4150} 
    42 div.wprc-content li{ 
    43     list-style: none outside none; 
    44     margin: 0; 
     51 
     52div.wprc-content li { 
     53    list-style: none outside none; 
     54    margin: 0; 
    4555} 
    46 .wprc-content textarea,  
     56 
     57.wprc-content textarea, 
    4758.wprc-content input[type='text'], 
    4859.wprc-content input[type='email'], 
    4960.wprc-content input[type='password'], 
    5061.wprc-content select { 
    51     resize: none; 
    52     width: 100%; 
    53     padding: 5px; 
     62    resize: none; 
     63    width: 100%; 
     64    padding: 5px; 
    5465} 
    5566 
    5667.wprc-content, 
    57 .wprc-content textarea,  
     68.wprc-content textarea, 
    5869.wprc-content input, 
    5970.wprc-content select, 
    6071.wprc-content .left-section, 
    6172.wprc-content .right-section { 
    62     -webkit-box-sizing: border-box; 
    63     -moz-box-sizing: border-box; 
    64     box-sizing: border-box; 
    65     font-size: 14px; 
     73    -webkit-box-sizing: border-box; 
     74    -moz-box-sizing: border-box; 
     75    box-sizing: border-box; 
     76    font-size: 14px; 
    6677} 
    6778 
    6879.wprc-content .required-sign { 
    69     color: #FF0000; 
     80    color: #FF0000; 
    7081} 
    7182 
    72 .wprc-content .input-details{ 
    73     height:135px; 
     83.wprc-content .input-details { 
     84    height: 135px; 
    7485} 
    7586 
    76 .wprc-container .wprc-switch{ 
    77     float: right; 
     87.wprc-container .wprc-switch { 
     88    float: right; 
    7889} 
     90 
    7991.wprc-message.error, 
    80 .wprc-message.success{ 
    81     background-image: url("../img/sprites.png"); 
    82     background-repeat: no-repeat; 
    83     color: #FFFFFF; 
    84     padding: 10px 10px 10px 50px; 
    85     margin-bottom: 10px;  
     92.wprc-message.success { 
     93    background-image: url("../img/sprites.png"); 
     94    background-repeat: no-repeat; 
     95    color: #FFFFFF; 
     96    padding: 10px 10px 10px 50px; 
     97    margin-bottom: 10px; 
    8698} 
     99 
    87100.wprc-message.error { 
    88     background-color: #E85E2B; 
    89     background-position: 10px 7px; 
     101    background-color: #E85E2B; 
     102    background-position: 10px 7px; 
    90103} 
     104 
    91105.wprc-message.success { 
    92     background-color: #6CBE56; 
    93     background-position: 10px -39px; 
     106    background-color: #6CBE56; 
     107    background-position: 10px -39px; 
    94108} 
    95 .wprc-content .loading-img{ 
    96     vertical-align: middle; 
    97     box-shadow: none; 
    98     border: 0 none; 
     109 
     110.wprc-content .loading-img { 
     111    vertical-align: middle; 
     112    box-shadow: none; 
     113    border: 0 none; 
    99114} 
    100115 
     
    104119.wprc-container.red-colorscheme button.wprc-submit, 
    105120.wprc-container.red-colorscheme button.wprc-submit:hover, 
    106 .wprc-container.red-colorscheme button.wprc-submit:active{ 
    107     background: #EB652E; 
    108     border: 1px solid #EB652E; 
    109     color: #FFFFFF; 
     121.wprc-container.red-colorscheme button.wprc-submit:active { 
     122    background: #EB652E; 
     123    border: 1px solid #EB652E; 
     124    color: #FFFFFF; 
    110125} 
    111126 
     
    115130.wprc-container.blue-colorscheme button.wprc-submit, 
    116131.wprc-container.blue-colorscheme button.wprc-submit:hover, 
    117 .wprc-container.blue-colorscheme button.wprc-submit:active{ 
    118     background: #4785CC; 
    119     border: 1px solid #4785CC; 
    120     color: #FFFFFF; 
     132.wprc-container.blue-colorscheme button.wprc-submit:active { 
     133    background: #4785CC; 
     134    border: 1px solid #4785CC; 
     135    color: #FFFFFF; 
    121136} 
    122137 
     
    126141.wprc-container.green-colorscheme button.wprc-submit, 
    127142.wprc-container.green-colorscheme button.wprc-submit:hover, 
    128 .wprc-container.green-colorscheme button.wprc-submit:active{ 
    129     background: #6CBE56; 
    130     border: 1px solid #6CBE56; 
    131     color: #FFFFFF; 
     143.wprc-container.green-colorscheme button.wprc-submit:active { 
     144    background: #6CBE56; 
     145    border: 1px solid #6CBE56; 
     146    color: #FFFFFF; 
    132147} 
    133148 
    134 .wprc-content .wprc-submit{ 
    135     margin-top: 10px; 
     149.wprc-content .wprc-submit { 
     150    margin-top: 10px; 
    136151} 
     152 
    137153.wprc-container button.wprc-switch, 
    138154.wprc-container button.wprc-switch:hover, 
     
    141157.wprc-content button.wprc-submit:hover, 
    142158.wprc-content button.wprc-submit:active { 
    143     background: #FDCE3A; 
    144     border: 1px solid #FDCE3A; 
    145     border-radius: 0; 
    146     color: #946501; 
    147     box-shadow: none; 
     159    background: #FDCE3A; 
     160    border: 1px solid #FDCE3A; 
     161    border-radius: 0; 
     162    color: #946501; 
     163    box-shadow: none; 
    148164} 
  • report-content/trunk/static/js/options-panel.js

    r835946 r1552692  
    1 jQuery(document).ready(function(){ 
     1jQuery(document).ready(function () { 
    22    postboxes.add_postbox_toggles('wprc_metaboxes'); 
    33    jQuery('.if-js-closed').removeClass('if-js-closed').addClass('closed'); 
  • report-content/trunk/static/js/scripts.js

    r835946 r1552692  
    1 jQuery(document).ready(function($) { 
     1jQuery(document).ready(function ($) { 
    22    var clickedButton; 
    33    var currentForm; 
    44    $('.wprc-input').val(''); 
    55    $('.wprc-submit').prop("disabled", false); 
    6     $('.wprc-switch').click(function(){ 
     6    $('.wprc-switch').click(function () { 
    77        $(this).siblings('.wprc-content').slideToggle(); 
    88    }); 
    99 
    10     $('.wprc-submit').click(function(){ 
    11         clickedButton       = $(this); 
    12         currentForm         = $(this).parents('.wprc-content'); 
    13         var post_id         = currentForm.find('.post-id').val(); 
    14         var _reason         = currentForm.find('.input-reason').val(); 
    15         var _details        = currentForm.find('.input-details').val(); 
    16         var _reporter_name  = currentForm.find('.input-name').val(); 
     10    $('.wprc-submit').click(function () { 
     11        clickedButton = $(this); 
     12        currentForm = $(this).parents('.wprc-content'); 
     13        var post_id = currentForm.find('.post-id').val(); 
     14        var _reason = currentForm.find('.input-reason').val(); 
     15        var _details = currentForm.find('.input-details').val(); 
     16        var _reporter_name = currentForm.find('.input-name').val(); 
    1717        var _reporter_email = currentForm.find('.input-email').val(); 
    1818        clickedButton.prop("disabled", true); 
     
    2222            url: wprcajaxhandler.ajaxurl, 
    2323            data: { 
    24                 action:         'wprc_add_report', 
    25                 id:             post_id, 
    26                 reason:         _reason, 
    27                 details:        _details, 
    28                 reporter_name:  _reporter_name, 
     24                action: 'wprc_add_report', 
     25                id: post_id, 
     26                reason: _reason, 
     27                details: _details, 
     28                reporter_name: _reporter_name, 
    2929                reporter_email: _reporter_email 
    3030            }, 
    31             success:function(data, textStatus, XMLHttpRequest){ 
    32                     currentForm.find('.loading-img').hide(); 
    33                     data = jQuery.parseJSON(data); 
    34                     if(data.success){ 
    35                         currentForm.find('.wprc-message').html(data.message).addClass('success'); 
    36                         currentForm.find('.wprc-form').remove(); 
    37                     } 
    38                     else{ 
    39                         clickedButton.prop("disabled", false); 
    40                         currentForm.find('.wprc-message').html(data.message).addClass('error'); 
    41                     } 
     31            success: function (data, textStatus, XMLHttpRequest) { 
     32                currentForm.find('.loading-img').hide(); 
     33                data = jQuery.parseJSON(data); 
     34                if (data.success) { 
     35                    currentForm.find('.wprc-message').html(data.message).addClass('success'); 
     36                    currentForm.find('.wprc-form').remove(); 
     37                } 
     38                else { 
     39                    clickedButton.prop("disabled", false); 
     40                    currentForm.find('.wprc-message').html(data.message).addClass('error'); 
     41                } 
    4242            }, 
    43             error: function(MLHttpRequest, textStatus, errorThrown){ 
     43            error: function (MLHttpRequest, textStatus, errorThrown) { 
    4444                alert(errorThrown); 
    4545            } 
Note: See TracChangeset for help on using the changeset viewer.