WordPress.org

Plugin Directory

Changeset 624038


Ignore:
Timestamp:
11/12/12 14:09:18 (17 months ago)
Author:
bainternet
Message:

tagged 2.6

Location:
bainternet-posts-creation-limits
Files:
9 added
6 deleted
4 edited
1 copied

Legend:

Unmodified
Added
Removed
  • bainternet-posts-creation-limits/tags/2.6/bapl.php

    r570821 r624038  
    44Plugin URI: http://en.bainternet.info/category/plugins 
    55Description: this plugin helps you to limit the number of posts/pages/custom post types each user can create on your site. 
    6 Version: 2.4 
     6Version: 2.6 
    77Author: bainternet 
    88Author URI: http://en.bainternet.info 
     
    2828         
    2929        protected $_MU; 
     30 
     31        public $current_message; 
    3032         
    3133        //constructor 
     
    4446            add_shortcode('IN_LIMIT',array($this,'limits_shortcode_handler')); 
    4547            add_shortcode('in_limit',array($this,'limits_shortcode_handler')); 
    46         } 
    47  
     48 
     49            //limit xml-rpc 
     50            add_filter('wp_insert_post_empty_content',array($this,'limit_xml_rpc')); 
     51        } 
     52 
     53        /** 
     54         * limit_xml_rpc limit xml-rpc user 
     55         * @since 2.5 
     56         * @param  boolean $maybe   
     57         * @param  array $postarr 
     58         * @return true to limit false to allow 
     59         */ 
     60        public function limit_xml_rpc($maybe,$postarr){ 
     61            //exit early if not xmlrpc request 
     62            if (!defined('XMLRPC_REQUEST') ||  XMLRPC_REQUEST != true) 
     63                return $maybe; 
     64 
     65            if ($this->limitUser($postarr['post_author'],$postarr['post_type'])) 
     66                return apply_filters('bapl_xml_rpc_limit',true); 
     67 
     68        } 
     69 
     70        /** 
     71         * limitUser this is the money function which checks to limit a user by post count 
     72         * @since 2.5 
     73         * @param  int  $user_id  
     74         * @param  strin  $type    post type 
     75         * @param  boolean $use_m   use shortcode message flag 
     76         * @return true to limit false to allow 
     77         */ 
     78        public function limitUser($user_id = null,$type = null,$use_m = true){ 
     79 
     80            //exit early if no settings 
     81            $options = $this->bapl_getOptions('bapl'); 
     82            if (!isset($options['rules'])) 
     83                return false; 
     84 
     85            if ($user_id == null){ 
     86                global $current_user; 
     87                get_currentuserinfo(); 
     88                $user_id = $current_user->id; 
     89                if ($user_id <= 0) 
     90                    return true; 
     91            } 
     92 
     93            if ($type == null){ 
     94                global $typenow; 
     95                $type = isset($typenow)? $typenow: 'post'; 
     96            } 
     97 
     98            if ($this->_MU) {  
     99                if ( current_user_can('manage_network') ) 
     100                    return false; 
     101            }elseif( current_user_can('manage_options') ){ 
     102                return false; 
     103            } 
     104             
     105            global $wpdb; 
     106            //check old limits by role first 
     107            $rules_BY_ANY = $this->get_sub_array($options['rules'],'role','ANY'); 
     108            if ($rules_BY_ANY){ 
     109                foreach((array)$rules_BY_ANY as $ke => $arr){ 
     110                    if ($arr['post_type'] == $type){ 
     111                        //$count_posts = get_posts(array('author'=>$user_id,'post_type' => $type,'post_status' => $arr['status'],'fields' => 'ids')); 
     112                        $time = (isset($arr['time_span']) && $arr['time_span'] != "FOREVER" ) ? " AND TIMEDIFF(NOW(), post_date) < '".$arr['time_span']."'" : ""; 
     113                        $pstatus = ($arr['status'] == 'any') ? "IN ('publish', 'pending', 'draft', 'future', 'private', 'trash')": " = '".$arr['status']."'"; 
     114                        $count = $wpdb->get_var("SELECT COUNT(ID) FROM $wpdb->posts WHERE post_status ". $pstatus ." AND post_author = $user_id AND post_type = '$type'".$time); 
     115                        if($count >= $arr['limit']){ 
     116                            if ($use_m) 
     117                                $this->current_message = $arr['message']; 
     118                            return true; 
     119                        } 
     120                    } 
     121                } 
     122            } 
     123                 
     124            //check limit by role 
     125            $current_role = $this->balp_get_current_user_role(); 
     126            $rules_BY_roles = $this->get_sub_array($options['rules'],'role',$current_role); 
     127            if ($rules_BY_roles){ 
     128                foreach((array)$rules_BY_roles as $ke => $arr){ 
     129                    if ($arr['post_type'] == $type){ 
     130                        //$count_posts = get_posts(array('author'=>$user_id,'post_type' => $type,'post_status' => $arr['status'],'fields' => 'ids')); 
     131                        //$count = count($count_posts); 
     132                        $time = (isset($arr['time_span']) && $arr['time_span'] != "FOREVER" ) ? " AND TIMEDIFF(NOW(), post_date) < '".$arr['time_span']."'" : ""; 
     133                        $pstatus = ($arr['status'] == 'any') ? "IN ('publish', 'pending', 'draft', 'future', 'private', 'trash')": " = '".$arr['status']."'"; 
     134                        $count = $wpdb->get_var("SELECT COUNT(ID) FROM $wpdb->posts WHERE post_status ". $pstatus ." AND post_author = $user_id AND post_type = '$type'".$time); 
     135                        if($count >= $arr['limit']){ 
     136                            if ($use_m) 
     137                                $this->current_message = $arr['message']; 
     138                            return true; 
     139                        } 
     140                    } 
     141                } 
     142            } 
     143                 
     144            //check limit by user id 
     145            $rules_BY_id = $this->get_sub_array($options['rules'],'role',$current_user->ID); 
     146            if ($rules_BY_id){ 
     147                foreach((array)$rules_BY_id as $ke => $arr){ 
     148                    if ($arr['post_type'] == $type){ 
     149                        $time = (isset($arr['time_span']) && $arr['time_span'] != "FOREVER" ) ? " AND TIMEDIFF(NOW(), post_date) < '".$arr['time_span']."'" : ""; 
     150                        $pstatus = ($arr['status'] == 'any') ? "IN ('publish', 'pending', 'draft', 'future', 'private', 'trash')": " = '".$arr['status']."'"; 
     151                        $count = $wpdb->get_var("SELECT COUNT(ID) FROM $wpdb->posts WHERE post_status ". $pstatus ." AND post_author = $user_id AND post_type = '$type'".$time); 
     152                        if($count >= $arr['limit']){ 
     153                            if ($use_m) 
     154                                $this->current_message = $arr['message']; 
     155                            return true; 
     156                        } 
     157                    } 
     158                } 
     159            } 
     160 
     161            return false; 
     162        } 
     163 
     164        /** 
     165         * limits_shortcode_handler  
     166         * @since 2.4 
     167         * @param  array $atts  
     168         * @param  string $content  
     169         * @return string 
     170         */ 
    48171        public function limits_shortcode_handler($atts,$content = NULL){ 
    49172            extract(shortcode_atts(array( 
     
    55178            if (!is_user_logged_in()) 
    56179                return apply_filters('bapl_shortcode_not_logged_in',$m); 
     180 
    57181            global $current_user; 
    58182            get_currentuserinfo(); 
     
    63187                return apply_filters('bapl_shortcode_admin',do_shortcode($content)); 
    64188            } 
    65             $typenow = $type; 
    66             //check old limits by role first 
    67             $current_role = $this->balp_get_current_user_role(); 
    68             $rules_BY_ANY = $this->get_sub_array($options['rules'],'role','ANY'); 
    69             if ($rules_BY_ANY){ 
    70                 foreach((array)$rules_BY_ANY as $ke => $arr){ 
    71                     if ($arr['post_type'] == $typenow){ 
    72                         $count_posts = get_posts(array('author'=>$current_user->ID,'post_type' => $typenow,'post_status' => $arr['status'],'fields' => 'ids')); 
    73                         $count = count($count_posts); 
    74                         if($count >= $arr['limit']){ 
    75                             if ($use_m == 'true') 
    76                                 return apply_filters('bapl_shortcode_limited',$arr['message']); 
    77                             else{ 
    78                                 return apply_filters('bapl_shortcode_limited',$message); 
    79                             } 
    80                         } 
    81                     } 
    82                 } 
    83             } 
    84                  
    85             //check limit by role 
    86             $current_role = $this->balp_get_current_user_role(); 
    87             $rules_BY_roles = $this->get_sub_array($options['rules'],'role',$current_role); 
    88             if ($rules_BY_roles){ 
    89                 foreach((array)$rules_BY_roles as $ke => $arr){ 
    90                     if ($arr['post_type'] == $typenow){ 
    91                         $count_posts = get_posts(array('author'=>$current_user->ID,'post_type' => $typenow,'post_status' => $arr['status'],'fields' => 'ids')); 
    92                         $count = count($count_posts); 
    93                         if($count >= $arr['limit']){ 
    94                             if ($use_m == 'true') 
    95                                 return apply_filters('bapl_shortcode_limited',$arr['message']); 
    96                             else{ 
    97                                 return apply_filters('bapl_shortcode_limited',$message); 
    98                             } 
    99                         } 
    100                     } 
    101                 } 
    102             } 
    103                  
    104             //check limit by user id 
    105             $rules_BY_id = $this->get_sub_array($options['rules'],'role',$current_user->ID); 
    106             if ($rules_BY_id){ 
    107                 foreach((array)$rules_BY_id as $ke => $arr){ 
    108                     if ($arr['post_type'] == $typenow){ 
    109                         $count_posts = get_posts(array('author'=>$current_user->ID,'post_type' => $typenow,'post_status' => $arr['status'],'fields' => 'ids')); 
    110                         $count = count($count_posts); 
    111                         if($count >= $arr['limit']){ 
    112                             if ($use_m == 'true') 
    113                                 return apply_filters('bapl_shortcode_limited',$arr['message']); 
    114                             else{ 
    115                                 return apply_filters('bapl_shortcode_limited',$message); 
    116                             } 
    117                         } 
    118                     } 
    119                 } 
    120             } 
    121  
     189 
     190            if ($this->limitUser($current_user->ID,$type)){ 
     191                if ($use_m == 'true') 
     192                    return apply_filters('bapl_shortcode_limited',$this->current_message); 
     193                else 
     194                    return apply_filters('bapl_shortcode_limited',$message); 
     195            } 
     196             
    122197            //all good return the content 
    123198            return apply_filters('bapl_shortcode_ok',do_shortcode($content)); 
     
    126201        public function remove_add_new(){ 
    127202            global $pagenow ,$current_user,$typenow; 
    128              
    129203            if (is_admin() && $pagenow=='edit.php'){ 
    130                 $options = $this->bapl_getOptions('bapl'); 
    131                 if (!isset($options['rules'])) 
    132                     return; 
    133  
    134204                get_currentuserinfo(); 
    135                 if ($this->_MU) {  
    136                     if ( current_user_can('manage_network') ) 
    137                         return; 
    138                 }elseif( current_user_can('manage_options') ){ 
    139                     return; 
    140                 } 
    141                  
    142                  
    143                 //check old limits by role first 
    144                 $current_role = $this->balp_get_current_user_role(); 
    145                 $rules_BY_ANY = $this->get_sub_array($options['rules'],'role','ANY'); 
    146                 if ($rules_BY_ANY){ 
    147                     foreach((array)$rules_BY_ANY as $ke => $arr){ 
    148                         if ($arr['post_type'] == $typenow){ 
    149                             $count_posts = get_posts(array('author'=>$current_user->ID,'post_type' => $typenow,'post_status' => $arr['status'],'fields' => 'ids')); 
    150                             $count = count($count_posts); 
    151                             if($count >= $arr['limit']){ 
    152                                 $this->bapl_not_allowed_remove_links(); 
    153                             } 
    154                         } 
    155                     } 
    156                 } 
    157                      
    158                 //check limit by role 
    159                 $current_role = $this->balp_get_current_user_role(); 
    160                 $rules_BY_roles = $this->get_sub_array($options['rules'],'role',$current_role); 
    161                 if ($rules_BY_roles){ 
    162                     foreach((array)$rules_BY_roles as $ke => $arr){ 
    163                         if ($arr['post_type'] == $typenow){ 
    164                             $count_posts = get_posts(array('author'=>$current_user->ID,'post_type' => $typenow,'post_status' => $arr['status'],'fields' => 'ids')); 
    165                             $count = count($count_posts); 
    166                             if($count >= $arr['limit']){ 
    167                                 $this->bapl_not_allowed_remove_links(); 
    168                             } 
    169                         } 
    170                     } 
    171                 } 
    172                      
    173                 //check limit by user id 
    174                 $rules_BY_id = $this->get_sub_array($options['rules'],'role',$current_user->ID); 
    175                 if ($rules_BY_id){ 
    176                     foreach((array)$rules_BY_id as $ke => $arr){ 
    177                         if ($arr['post_type'] == $typenow){ 
    178                             $count_posts = get_posts(array('author'=>$current_user->ID,'post_type' => $typenow,'post_status' => $arr['status'],'fields' => 'ids')); 
    179                             $count = count($count_posts); 
    180                             if($count >= $arr['limit']){ 
    181                                 $this->bapl_not_allowed_remove_links(); 
    182                             } 
    183                         } 
    184                     } 
     205                if ($this->limitUser($current_user->ID,$typenow)){ 
     206                    $this->bapl_not_allowed_remove_links(); 
    185207                } 
    186208            } 
     
    188210         
    189211        public function bapl_not_allowed_remove_links(){ 
     212 
    190213            add_action('admin_footer',array($this,'hide_links')); 
    191214        } 
     
    209232        } 
    210233         
    211          
    212234        //limit post type count per user  
    213235        public function bapl_limit_post_count(){ 
     
    227249                } 
    228250                 
     251                if ($this->limitUser($current_user->ID,$typenow)){ 
     252                    $this->bapl_not_allowed($this->current_message); 
     253                    exit; 
     254                } 
    229255                 
    230                 //check old limits by role first 
    231                 $current_role = $this->balp_get_current_user_role(); 
    232                 $rules_BY_ANY = $this->get_sub_array($options['rules'],'role','ANY'); 
    233                 if ($rules_BY_ANY){ 
    234                     foreach($rules_BY_ANY as $ke => $arr){ 
    235                         if ($arr['post_type'] == $typenow){ 
    236                             $count_posts = get_posts(array('author'=>$current_user->ID,'post_type' => $typenow,'post_status' => $arr['status'],'fields' => 'ids')); 
    237                             $count = count($count_posts); 
    238                             if($count >= $arr['limit']){ 
    239                                 $this->bapl_not_allowed($arr['message']); 
    240                                 exit; 
    241                             } 
    242                         } 
    243                     } 
    244                 } 
    245                      
    246                 //check limit by role 
    247                 $current_role = $this->balp_get_current_user_role(); 
    248                 $rules_BY_roles = $this->get_sub_array($options['rules'],'role',$current_role); 
    249                 if ($rules_BY_roles){ 
    250                     foreach($rules_BY_roles as $ke => $arr){ 
    251                         if ($arr['post_type'] == $typenow || $arr['post_type'] == 'any'){ 
    252                             $tyn = ($arr['post_type'] == 'any') ? 'any' : $typenow; 
    253                             $count_posts = get_posts(array('author'=>$current_user->ID,'post_type' => $tyn,'post_status' => $arr['status'],'fields' => 'ids')); 
    254                             $count = count($count_posts); 
    255                             if($count >= $arr['limit']){ 
    256                                 $this->bapl_not_allowed($arr['message']); 
    257                                 exit; 
    258                             } 
    259                         } 
    260                     } 
    261                 } 
    262                      
    263                 //check limit by user id 
    264                 $rules_BY_id = $this->get_sub_array($options['rules'],'role',$current_user->ID); 
    265                 if ($rules_BY_id){ 
    266                     foreach($rules_BY_id as $ke => $arr){ 
    267                         if ($arr['post_type'] == $typenow || $arr['post_type'] == 'any'){ 
    268                             $tyn = ($arr['post_type'] == 'any') ? 'any' : $typenow; 
    269                             $count_posts = get_posts(array('author'=>$current_user->ID,'post_type' => $tyn,'post_status' => $arr['status'],'fields' => 'ids')); 
    270                             $count = count($count_posts); 
    271                             if($count >= $arr['limit']){ 
    272                                 $this->bapl_not_allowed($arr['message']); 
    273                                 exit; 
    274                             } 
    275                         } 
    276                     } 
    277                 } 
    278256                do_action('post_creation_limits_custom_checks',$typenow,$current_user->ID); 
    279257            } 
     
    282260        //add menu function 
    283261        public function bapl_menu(){ 
    284              // Add a new submenu under Settings: 
    285             if ($this->_MU) {  
     262              
     263            if ($this->_MU) { // Add a new submenu under Settings: 
    286264                $hook = add_options_page(__('Posts Creation limits','Bainternet_WPSNFL'), __('Posts Creation limits','Bainternet_WPSNFL'), 'manage_network', __FILE__, array($this,'bapl_settings_page')); 
    287265            }else{ 
     
    323301                <div id="icon-options-general" class="icon32"></div> <h2><?php _e('Post Creation Limits'); ?> <a title="add a new limit rule" class="add-new-h2"><?php _e('Add New Limit'); ?></a></h2><br/><br/> 
    324302                <form method="post" action="options.php"> 
    325                 <style>#TB_ajaxContent{height: 380px !important;}</style> 
     303                <style>#TB_ajaxContent{height: 420px !important;}</style> 
    326304                    <?php settings_fields('bapl_Options'); ?> 
    327305                    <?php $options = $this->bapl_getOptions('bapl'); //get_option display: none?> 
     
    335313                                    <th><?php _e('Post Status'); ?></th> 
    336314                                    <th><?php _e('Limit message'); ?></th> 
     315                                    <th><?php _e('Time Span'); ?></th> 
    337316                                    <th><?php _e('Actions'); ?></th> 
    338317                                </tr> 
     
    345324                                    <th><?php _e('Post Status'); ?></th> 
    346325                                    <th><?php _e('Limit message'); ?></th> 
     326                                    <th><?php _e('Time Span'); ?></th> 
    347327                                    <th><?php _e('Actions'); ?></th> 
    348328                                </tr> 
     
    359339                                    echo '<td>'.$v['status'].'<input type="hidden" name="bapl[rules][' . $c . '][status]" value="'.$v['status'].'"></td>'; 
    360340                                    echo '<td><pre><code>'.htmlentities(substr($v['message'],0,32)).'</code></pre><textarea style="display:none;" name="bapl[rules][' . $c . '][message]">'.$v['message'].'</textarea></td>'; 
     341                                    echo '<td>'.((isset($v['time_span']) && $v['time_span'] != "FOREVER")? __('Every')." ".$v['time_span'].__(' hours'): (isset($v['time_span'])? $v['time_span'] : "FOREVER")) .'<input type="hidden" name="bapl[rules][' . $c . '][time_span]" value="'.($v['time_span']? $v['time_span'] : "FOREVER") .'"></td>'; 
    361342                                    echo '<td><span class="edit_rule button-secondary">Edit</span> <span class="remove_rule button-secondary">Remove</span></td>'; 
    362343                                    echo '</tr>'; 
     
    385366                        jQuery('.ro').show(); 
    386367                        jQuery('.user_i').hide(); 
     368                        jQuery('#tis').val(''); 
    387369                    } 
    388370                     
     
    398380                        v4 = jQuery('#st').val(); 
    399381                        v5 = jQuery('#ms').val(); 
     382                        v6 = jQuery('#tis').val(); 
    400383                        tr.append('<td>'+ v1 +' <input type="hidden" name="bapl[rules][' + counter + '][role]" value="'+v1+'"></td>'); //<th>User Role/ID</th> 
    401384                        tr.append('<td>'+ v2 +' <input type="hidden" name="bapl[rules][' + counter + '][post_type]" value="'+v2+'"></td>'); //<th>Post Type</th> 
     
    403386                        tr.append('<td>'+ v4 +' <input type="hidden" name="bapl[rules][' + counter + '][status]" value="'+v4+'"></td>'); //<th>Post Status</th> 
    404387                        tr.append('<td><pre><code>'+ html_entities(v5.substring(0, 35)) +'</code></pre> <textarea style="display:none;" name="bapl[rules][' + counter + '][message]">'+v5+'</textarea></td>'); //<th>Limit message</th> 
     388                        if (v6 == "FOREVER" || v6.length <= 0 || !isNumeric(v6)) 
     389                            tr.append('<td><?php _e("FOREVER"); ?> <input type="hidden" name="bapl[rules][' + counter + '][time_span]" value="FOREVER"></td>'); 
     390                        else 
     391                            tr.append('<td><?php _e("Every "); ?>'+v6+' <?php _e('hours');?> <input type="hidden" name="bapl[rules][' + counter + '][time_span]" value="'+v6+'"></td>'); 
    405392                        tr.append('<td><span class="edit_rule button-secondary">Edit</span> <span class="remove_rule button-secondary">Remove</span></td>'); //<th>Actions</th> 
    406393                        jQuery('#limit_rules').find('tbody').append(tr); 
     
    416403                        jQuery('.new_rule').removeClass('new_rule').addClass('save_edit'); 
    417404                        jQuery(curr_row).children().each(function(index, value) {  
    418                             if ( index < 5){ 
     405                            if ( index < 6){ 
    419406                                if (jQuery(value).find('input').length) 
    420407                                    v[index] = jQuery(value).find('input').val(); 
     
    436423                        jQuery('#st').val(v[3]); 
    437424                        jQuery('#ms').val(v[4]); 
    438                         tb_show('Edit Limit Rule','TB_inline?height=380&width=400&inlineId=d_e_f'); 
     425                        jQuery('#tis').val(v[5]); 
     426                        tb_show('Edit Limit Rule','TB_inline?height=420&width=400&inlineId=d_e_f'); 
    439427                         
    440428                    } 
     
    451439                        v4 = jQuery('#st').val(); 
    452440                        v5 = jQuery('#ms').val(); 
     441                        v6 = jQuery('#tis').val(); 
    453442                        tr.append('<td>'+ v1 +' <input type="hidden" name="bapl[rules][' + counter + '][role]" value="'+v1+'"></td>'); //<th>User Role/ID</th> 
    454443                        tr.append('<td>'+ v2 +' <input type="hidden" name="bapl[rules][' + counter + '][post_type]" value="'+v2+'"></td>'); //<th>Post Type</th> 
     
    456445                        tr.append('<td>'+ v4 +' <input type="hidden" name="bapl[rules][' + counter + '][status]" value="'+v4+'"></td>'); //<th>Post Status</th> 
    457446                        tr.append('<td><pre><code>'+ html_entities(v5) +'</code></pre>  <textarea style="display:none;" name="bapl[rules][' + counter + '][message]">'+v5+'</textarea></td>'); //<th>Limit message</th> 
     447                        if (v6 == "FOREVER" || v6.length <= 0 || !isNumeric(v6)) 
     448                            tr.append('<td><?php _e("FOREVER"); ?> <input type="hidden" name="bapl[rules][' + counter + '][time_span]" value="FOREVER"></td>'); 
     449                        else 
     450                            tr.append('<td><?php _e("Every "); ?>'+v6+' <?php _e('hours');?> <input type="hidden" name="bapl[rules][' + counter + '][time_span]" value="'+v6+'"></td>'); 
    458451                        tr.append('<td><span class="edit_rule button-secondary">Edit</span> <span class="remove_rule button-secondary">Remove</span></td>'); //<th>Actions</th> 
    459452                        jQuery(curr_row).remove(); 
     
    468461                        return encoded; 
    469462                    } 
    470                      
     463                    function isNumeric(n) { 
     464                        return !isNaN(parseFloat(n)) && isFinite(n); 
     465                    } 
    471466                    //add new rule 
    472467                    jQuery(".new_rule").live('click',function(e){ 
     
    505500                    jQuery(".add-new-h2").live('click',function(){ 
    506501                        res_form(); 
    507                         tb_show('add a new limit rule','TB_inline?height=380&width=400&inlineId=d_e_f'); 
     502                        tb_show('add a new limit rule','TB_inline?height=420&width=400&inlineId=d_e_f'); 
    508503                    }); 
    509504                    </script> 
     
    577572                            <span class="dsc"><small><?php _e('Enter limit message'); ?></small></span> 
    578573                        </li> 
     574                        <li> 
     575                            <label for="time_span"><?php _e('Time Span'); ?></label> 
     576                            <input name="time_span" type="text" id="tis" size="4"/><br/> 
     577                            <span class="dsc"><small><?php _e('How long to Limit The User In hours (or you can type FOREVER)'); ?></small></span> 
     578                        </li> 
    579579                        <input type="hidden" id="rule_count" value=""/> 
    580580                    </ul> 
  • bainternet-posts-creation-limits/tags/2.6/readme.txt

    r570821 r624038  
    55Requires at least: 3.0 
    66Tested up to: 3.4.1 
    7 Stable tag: 2.4 
     7Stable tag: 2.6 
    88 
    99this plugin helps you to limit the number of posts/pages/custom post types each user can create on your site. 
     
    119119 
    120120== Changelog == 
     1212.6 `trash` is now  check in `any` status as well. 
     122 
     1232.5 Added time span. 
     124 
    1211252.4 Added Any to post type rules. 
    122126 
  • bainternet-posts-creation-limits/trunk/bapl.php

    r570821 r624038  
    44Plugin URI: http://en.bainternet.info/category/plugins 
    55Description: this plugin helps you to limit the number of posts/pages/custom post types each user can create on your site. 
    6 Version: 2.4 
     6Version: 2.6 
    77Author: bainternet 
    88Author URI: http://en.bainternet.info 
     
    2828         
    2929        protected $_MU; 
     30 
     31        public $current_message; 
    3032         
    3133        //constructor 
     
    4446            add_shortcode('IN_LIMIT',array($this,'limits_shortcode_handler')); 
    4547            add_shortcode('in_limit',array($this,'limits_shortcode_handler')); 
    46         } 
    47  
     48 
     49            //limit xml-rpc 
     50            add_filter('wp_insert_post_empty_content',array($this,'limit_xml_rpc')); 
     51        } 
     52 
     53        /** 
     54         * limit_xml_rpc limit xml-rpc user 
     55         * @since 2.5 
     56         * @param  boolean $maybe   
     57         * @param  array $postarr 
     58         * @return true to limit false to allow 
     59         */ 
     60        public function limit_xml_rpc($maybe,$postarr){ 
     61            //exit early if not xmlrpc request 
     62            if (!defined('XMLRPC_REQUEST') ||  XMLRPC_REQUEST != true) 
     63                return $maybe; 
     64 
     65            if ($this->limitUser($postarr['post_author'],$postarr['post_type'])) 
     66                return apply_filters('bapl_xml_rpc_limit',true); 
     67 
     68        } 
     69 
     70        /** 
     71         * limitUser this is the money function which checks to limit a user by post count 
     72         * @since 2.5 
     73         * @param  int  $user_id  
     74         * @param  strin  $type    post type 
     75         * @param  boolean $use_m   use shortcode message flag 
     76         * @return true to limit false to allow 
     77         */ 
     78        public function limitUser($user_id = null,$type = null,$use_m = true){ 
     79 
     80            //exit early if no settings 
     81            $options = $this->bapl_getOptions('bapl'); 
     82            if (!isset($options['rules'])) 
     83                return false; 
     84 
     85            if ($user_id == null){ 
     86                global $current_user; 
     87                get_currentuserinfo(); 
     88                $user_id = $current_user->id; 
     89                if ($user_id <= 0) 
     90                    return true; 
     91            } 
     92 
     93            if ($type == null){ 
     94                global $typenow; 
     95                $type = isset($typenow)? $typenow: 'post'; 
     96            } 
     97 
     98            if ($this->_MU) {  
     99                if ( current_user_can('manage_network') ) 
     100                    return false; 
     101            }elseif( current_user_can('manage_options') ){ 
     102                return false; 
     103            } 
     104             
     105            global $wpdb; 
     106            //check old limits by role first 
     107            $rules_BY_ANY = $this->get_sub_array($options['rules'],'role','ANY'); 
     108            if ($rules_BY_ANY){ 
     109                foreach((array)$rules_BY_ANY as $ke => $arr){ 
     110                    if ($arr['post_type'] == $type){ 
     111                        //$count_posts = get_posts(array('author'=>$user_id,'post_type' => $type,'post_status' => $arr['status'],'fields' => 'ids')); 
     112                        $time = (isset($arr['time_span']) && $arr['time_span'] != "FOREVER" ) ? " AND TIMEDIFF(NOW(), post_date) < '".$arr['time_span']."'" : ""; 
     113                        $pstatus = ($arr['status'] == 'any') ? "IN ('publish', 'pending', 'draft', 'future', 'private', 'trash')": " = '".$arr['status']."'"; 
     114                        $count = $wpdb->get_var("SELECT COUNT(ID) FROM $wpdb->posts WHERE post_status ". $pstatus ." AND post_author = $user_id AND post_type = '$type'".$time); 
     115                        if($count >= $arr['limit']){ 
     116                            if ($use_m) 
     117                                $this->current_message = $arr['message']; 
     118                            return true; 
     119                        } 
     120                    } 
     121                } 
     122            } 
     123                 
     124            //check limit by role 
     125            $current_role = $this->balp_get_current_user_role(); 
     126            $rules_BY_roles = $this->get_sub_array($options['rules'],'role',$current_role); 
     127            if ($rules_BY_roles){ 
     128                foreach((array)$rules_BY_roles as $ke => $arr){ 
     129                    if ($arr['post_type'] == $type){ 
     130                        //$count_posts = get_posts(array('author'=>$user_id,'post_type' => $type,'post_status' => $arr['status'],'fields' => 'ids')); 
     131                        //$count = count($count_posts); 
     132                        $time = (isset($arr['time_span']) && $arr['time_span'] != "FOREVER" ) ? " AND TIMEDIFF(NOW(), post_date) < '".$arr['time_span']."'" : ""; 
     133                        $pstatus = ($arr['status'] == 'any') ? "IN ('publish', 'pending', 'draft', 'future', 'private', 'trash')": " = '".$arr['status']."'"; 
     134                        $count = $wpdb->get_var("SELECT COUNT(ID) FROM $wpdb->posts WHERE post_status ". $pstatus ." AND post_author = $user_id AND post_type = '$type'".$time); 
     135                        if($count >= $arr['limit']){ 
     136                            if ($use_m) 
     137                                $this->current_message = $arr['message']; 
     138                            return true; 
     139                        } 
     140                    } 
     141                } 
     142            } 
     143                 
     144            //check limit by user id 
     145            $rules_BY_id = $this->get_sub_array($options['rules'],'role',$current_user->ID); 
     146            if ($rules_BY_id){ 
     147                foreach((array)$rules_BY_id as $ke => $arr){ 
     148                    if ($arr['post_type'] == $type){ 
     149                        $time = (isset($arr['time_span']) && $arr['time_span'] != "FOREVER" ) ? " AND TIMEDIFF(NOW(), post_date) < '".$arr['time_span']."'" : ""; 
     150                        $pstatus = ($arr['status'] == 'any') ? "IN ('publish', 'pending', 'draft', 'future', 'private', 'trash')": " = '".$arr['status']."'"; 
     151                        $count = $wpdb->get_var("SELECT COUNT(ID) FROM $wpdb->posts WHERE post_status ". $pstatus ." AND post_author = $user_id AND post_type = '$type'".$time); 
     152                        if($count >= $arr['limit']){ 
     153                            if ($use_m) 
     154                                $this->current_message = $arr['message']; 
     155                            return true; 
     156                        } 
     157                    } 
     158                } 
     159            } 
     160 
     161            return false; 
     162        } 
     163 
     164        /** 
     165         * limits_shortcode_handler  
     166         * @since 2.4 
     167         * @param  array $atts  
     168         * @param  string $content  
     169         * @return string 
     170         */ 
    48171        public function limits_shortcode_handler($atts,$content = NULL){ 
    49172            extract(shortcode_atts(array( 
     
    55178            if (!is_user_logged_in()) 
    56179                return apply_filters('bapl_shortcode_not_logged_in',$m); 
     180 
    57181            global $current_user; 
    58182            get_currentuserinfo(); 
     
    63187                return apply_filters('bapl_shortcode_admin',do_shortcode($content)); 
    64188            } 
    65             $typenow = $type; 
    66             //check old limits by role first 
    67             $current_role = $this->balp_get_current_user_role(); 
    68             $rules_BY_ANY = $this->get_sub_array($options['rules'],'role','ANY'); 
    69             if ($rules_BY_ANY){ 
    70                 foreach((array)$rules_BY_ANY as $ke => $arr){ 
    71                     if ($arr['post_type'] == $typenow){ 
    72                         $count_posts = get_posts(array('author'=>$current_user->ID,'post_type' => $typenow,'post_status' => $arr['status'],'fields' => 'ids')); 
    73                         $count = count($count_posts); 
    74                         if($count >= $arr['limit']){ 
    75                             if ($use_m == 'true') 
    76                                 return apply_filters('bapl_shortcode_limited',$arr['message']); 
    77                             else{ 
    78                                 return apply_filters('bapl_shortcode_limited',$message); 
    79                             } 
    80                         } 
    81                     } 
    82                 } 
    83             } 
    84                  
    85             //check limit by role 
    86             $current_role = $this->balp_get_current_user_role(); 
    87             $rules_BY_roles = $this->get_sub_array($options['rules'],'role',$current_role); 
    88             if ($rules_BY_roles){ 
    89                 foreach((array)$rules_BY_roles as $ke => $arr){ 
    90                     if ($arr['post_type'] == $typenow){ 
    91                         $count_posts = get_posts(array('author'=>$current_user->ID,'post_type' => $typenow,'post_status' => $arr['status'],'fields' => 'ids')); 
    92                         $count = count($count_posts); 
    93                         if($count >= $arr['limit']){ 
    94                             if ($use_m == 'true') 
    95                                 return apply_filters('bapl_shortcode_limited',$arr['message']); 
    96                             else{ 
    97                                 return apply_filters('bapl_shortcode_limited',$message); 
    98                             } 
    99                         } 
    100                     } 
    101                 } 
    102             } 
    103                  
    104             //check limit by user id 
    105             $rules_BY_id = $this->get_sub_array($options['rules'],'role',$current_user->ID); 
    106             if ($rules_BY_id){ 
    107                 foreach((array)$rules_BY_id as $ke => $arr){ 
    108                     if ($arr['post_type'] == $typenow){ 
    109                         $count_posts = get_posts(array('author'=>$current_user->ID,'post_type' => $typenow,'post_status' => $arr['status'],'fields' => 'ids')); 
    110                         $count = count($count_posts); 
    111                         if($count >= $arr['limit']){ 
    112                             if ($use_m == 'true') 
    113                                 return apply_filters('bapl_shortcode_limited',$arr['message']); 
    114                             else{ 
    115                                 return apply_filters('bapl_shortcode_limited',$message); 
    116                             } 
    117                         } 
    118                     } 
    119                 } 
    120             } 
    121  
     189 
     190            if ($this->limitUser($current_user->ID,$type)){ 
     191                if ($use_m == 'true') 
     192                    return apply_filters('bapl_shortcode_limited',$this->current_message); 
     193                else 
     194                    return apply_filters('bapl_shortcode_limited',$message); 
     195            } 
     196             
    122197            //all good return the content 
    123198            return apply_filters('bapl_shortcode_ok',do_shortcode($content)); 
     
    126201        public function remove_add_new(){ 
    127202            global $pagenow ,$current_user,$typenow; 
    128              
    129203            if (is_admin() && $pagenow=='edit.php'){ 
    130                 $options = $this->bapl_getOptions('bapl'); 
    131                 if (!isset($options['rules'])) 
    132                     return; 
    133  
    134204                get_currentuserinfo(); 
    135                 if ($this->_MU) {  
    136                     if ( current_user_can('manage_network') ) 
    137                         return; 
    138                 }elseif( current_user_can('manage_options') ){ 
    139                     return; 
    140                 } 
    141                  
    142                  
    143                 //check old limits by role first 
    144                 $current_role = $this->balp_get_current_user_role(); 
    145                 $rules_BY_ANY = $this->get_sub_array($options['rules'],'role','ANY'); 
    146                 if ($rules_BY_ANY){ 
    147                     foreach((array)$rules_BY_ANY as $ke => $arr){ 
    148                         if ($arr['post_type'] == $typenow){ 
    149                             $count_posts = get_posts(array('author'=>$current_user->ID,'post_type' => $typenow,'post_status' => $arr['status'],'fields' => 'ids')); 
    150                             $count = count($count_posts); 
    151                             if($count >= $arr['limit']){ 
    152                                 $this->bapl_not_allowed_remove_links(); 
    153                             } 
    154                         } 
    155                     } 
    156                 } 
    157                      
    158                 //check limit by role 
    159                 $current_role = $this->balp_get_current_user_role(); 
    160                 $rules_BY_roles = $this->get_sub_array($options['rules'],'role',$current_role); 
    161                 if ($rules_BY_roles){ 
    162                     foreach((array)$rules_BY_roles as $ke => $arr){ 
    163                         if ($arr['post_type'] == $typenow){ 
    164                             $count_posts = get_posts(array('author'=>$current_user->ID,'post_type' => $typenow,'post_status' => $arr['status'],'fields' => 'ids')); 
    165                             $count = count($count_posts); 
    166                             if($count >= $arr['limit']){ 
    167                                 $this->bapl_not_allowed_remove_links(); 
    168                             } 
    169                         } 
    170                     } 
    171                 } 
    172                      
    173                 //check limit by user id 
    174                 $rules_BY_id = $this->get_sub_array($options['rules'],'role',$current_user->ID); 
    175                 if ($rules_BY_id){ 
    176                     foreach((array)$rules_BY_id as $ke => $arr){ 
    177                         if ($arr['post_type'] == $typenow){ 
    178                             $count_posts = get_posts(array('author'=>$current_user->ID,'post_type' => $typenow,'post_status' => $arr['status'],'fields' => 'ids')); 
    179                             $count = count($count_posts); 
    180                             if($count >= $arr['limit']){ 
    181                                 $this->bapl_not_allowed_remove_links(); 
    182                             } 
    183                         } 
    184                     } 
     205                if ($this->limitUser($current_user->ID,$typenow)){ 
     206                    $this->bapl_not_allowed_remove_links(); 
    185207                } 
    186208            } 
     
    188210         
    189211        public function bapl_not_allowed_remove_links(){ 
     212 
    190213            add_action('admin_footer',array($this,'hide_links')); 
    191214        } 
     
    209232        } 
    210233         
    211          
    212234        //limit post type count per user  
    213235        public function bapl_limit_post_count(){ 
     
    227249                } 
    228250                 
     251                if ($this->limitUser($current_user->ID,$typenow)){ 
     252                    $this->bapl_not_allowed($this->current_message); 
     253                    exit; 
     254                } 
    229255                 
    230                 //check old limits by role first 
    231                 $current_role = $this->balp_get_current_user_role(); 
    232                 $rules_BY_ANY = $this->get_sub_array($options['rules'],'role','ANY'); 
    233                 if ($rules_BY_ANY){ 
    234                     foreach($rules_BY_ANY as $ke => $arr){ 
    235                         if ($arr['post_type'] == $typenow){ 
    236                             $count_posts = get_posts(array('author'=>$current_user->ID,'post_type' => $typenow,'post_status' => $arr['status'],'fields' => 'ids')); 
    237                             $count = count($count_posts); 
    238                             if($count >= $arr['limit']){ 
    239                                 $this->bapl_not_allowed($arr['message']); 
    240                                 exit; 
    241                             } 
    242                         } 
    243                     } 
    244                 } 
    245                      
    246                 //check limit by role 
    247                 $current_role = $this->balp_get_current_user_role(); 
    248                 $rules_BY_roles = $this->get_sub_array($options['rules'],'role',$current_role); 
    249                 if ($rules_BY_roles){ 
    250                     foreach($rules_BY_roles as $ke => $arr){ 
    251                         if ($arr['post_type'] == $typenow || $arr['post_type'] == 'any'){ 
    252                             $tyn = ($arr['post_type'] == 'any') ? 'any' : $typenow; 
    253                             $count_posts = get_posts(array('author'=>$current_user->ID,'post_type' => $tyn,'post_status' => $arr['status'],'fields' => 'ids')); 
    254                             $count = count($count_posts); 
    255                             if($count >= $arr['limit']){ 
    256                                 $this->bapl_not_allowed($arr['message']); 
    257                                 exit; 
    258                             } 
    259                         } 
    260                     } 
    261                 } 
    262                      
    263                 //check limit by user id 
    264                 $rules_BY_id = $this->get_sub_array($options['rules'],'role',$current_user->ID); 
    265                 if ($rules_BY_id){ 
    266                     foreach($rules_BY_id as $ke => $arr){ 
    267                         if ($arr['post_type'] == $typenow || $arr['post_type'] == 'any'){ 
    268                             $tyn = ($arr['post_type'] == 'any') ? 'any' : $typenow; 
    269                             $count_posts = get_posts(array('author'=>$current_user->ID,'post_type' => $tyn,'post_status' => $arr['status'],'fields' => 'ids')); 
    270                             $count = count($count_posts); 
    271                             if($count >= $arr['limit']){ 
    272                                 $this->bapl_not_allowed($arr['message']); 
    273                                 exit; 
    274                             } 
    275                         } 
    276                     } 
    277                 } 
    278256                do_action('post_creation_limits_custom_checks',$typenow,$current_user->ID); 
    279257            } 
     
    282260        //add menu function 
    283261        public function bapl_menu(){ 
    284              // Add a new submenu under Settings: 
    285             if ($this->_MU) {  
     262              
     263            if ($this->_MU) { // Add a new submenu under Settings: 
    286264                $hook = add_options_page(__('Posts Creation limits','Bainternet_WPSNFL'), __('Posts Creation limits','Bainternet_WPSNFL'), 'manage_network', __FILE__, array($this,'bapl_settings_page')); 
    287265            }else{ 
     
    323301                <div id="icon-options-general" class="icon32"></div> <h2><?php _e('Post Creation Limits'); ?> <a title="add a new limit rule" class="add-new-h2"><?php _e('Add New Limit'); ?></a></h2><br/><br/> 
    324302                <form method="post" action="options.php"> 
    325                 <style>#TB_ajaxContent{height: 380px !important;}</style> 
     303                <style>#TB_ajaxContent{height: 420px !important;}</style> 
    326304                    <?php settings_fields('bapl_Options'); ?> 
    327305                    <?php $options = $this->bapl_getOptions('bapl'); //get_option display: none?> 
     
    335313                                    <th><?php _e('Post Status'); ?></th> 
    336314                                    <th><?php _e('Limit message'); ?></th> 
     315                                    <th><?php _e('Time Span'); ?></th> 
    337316                                    <th><?php _e('Actions'); ?></th> 
    338317                                </tr> 
     
    345324                                    <th><?php _e('Post Status'); ?></th> 
    346325                                    <th><?php _e('Limit message'); ?></th> 
     326                                    <th><?php _e('Time Span'); ?></th> 
    347327                                    <th><?php _e('Actions'); ?></th> 
    348328                                </tr> 
     
    359339                                    echo '<td>'.$v['status'].'<input type="hidden" name="bapl[rules][' . $c . '][status]" value="'.$v['status'].'"></td>'; 
    360340                                    echo '<td><pre><code>'.htmlentities(substr($v['message'],0,32)).'</code></pre><textarea style="display:none;" name="bapl[rules][' . $c . '][message]">'.$v['message'].'</textarea></td>'; 
     341                                    echo '<td>'.((isset($v['time_span']) && $v['time_span'] != "FOREVER")? __('Every')." ".$v['time_span'].__(' hours'): (isset($v['time_span'])? $v['time_span'] : "FOREVER")) .'<input type="hidden" name="bapl[rules][' . $c . '][time_span]" value="'.($v['time_span']? $v['time_span'] : "FOREVER") .'"></td>'; 
    361342                                    echo '<td><span class="edit_rule button-secondary">Edit</span> <span class="remove_rule button-secondary">Remove</span></td>'; 
    362343                                    echo '</tr>'; 
     
    385366                        jQuery('.ro').show(); 
    386367                        jQuery('.user_i').hide(); 
     368                        jQuery('#tis').val(''); 
    387369                    } 
    388370                     
     
    398380                        v4 = jQuery('#st').val(); 
    399381                        v5 = jQuery('#ms').val(); 
     382                        v6 = jQuery('#tis').val(); 
    400383                        tr.append('<td>'+ v1 +' <input type="hidden" name="bapl[rules][' + counter + '][role]" value="'+v1+'"></td>'); //<th>User Role/ID</th> 
    401384                        tr.append('<td>'+ v2 +' <input type="hidden" name="bapl[rules][' + counter + '][post_type]" value="'+v2+'"></td>'); //<th>Post Type</th> 
     
    403386                        tr.append('<td>'+ v4 +' <input type="hidden" name="bapl[rules][' + counter + '][status]" value="'+v4+'"></td>'); //<th>Post Status</th> 
    404387                        tr.append('<td><pre><code>'+ html_entities(v5.substring(0, 35)) +'</code></pre> <textarea style="display:none;" name="bapl[rules][' + counter + '][message]">'+v5+'</textarea></td>'); //<th>Limit message</th> 
     388                        if (v6 == "FOREVER" || v6.length <= 0 || !isNumeric(v6)) 
     389                            tr.append('<td><?php _e("FOREVER"); ?> <input type="hidden" name="bapl[rules][' + counter + '][time_span]" value="FOREVER"></td>'); 
     390                        else 
     391                            tr.append('<td><?php _e("Every "); ?>'+v6+' <?php _e('hours');?> <input type="hidden" name="bapl[rules][' + counter + '][time_span]" value="'+v6+'"></td>'); 
    405392                        tr.append('<td><span class="edit_rule button-secondary">Edit</span> <span class="remove_rule button-secondary">Remove</span></td>'); //<th>Actions</th> 
    406393                        jQuery('#limit_rules').find('tbody').append(tr); 
     
    416403                        jQuery('.new_rule').removeClass('new_rule').addClass('save_edit'); 
    417404                        jQuery(curr_row).children().each(function(index, value) {  
    418                             if ( index < 5){ 
     405                            if ( index < 6){ 
    419406                                if (jQuery(value).find('input').length) 
    420407                                    v[index] = jQuery(value).find('input').val(); 
     
    436423                        jQuery('#st').val(v[3]); 
    437424                        jQuery('#ms').val(v[4]); 
    438                         tb_show('Edit Limit Rule','TB_inline?height=380&width=400&inlineId=d_e_f'); 
     425                        jQuery('#tis').val(v[5]); 
     426                        tb_show('Edit Limit Rule','TB_inline?height=420&width=400&inlineId=d_e_f'); 
    439427                         
    440428                    } 
     
    451439                        v4 = jQuery('#st').val(); 
    452440                        v5 = jQuery('#ms').val(); 
     441                        v6 = jQuery('#tis').val(); 
    453442                        tr.append('<td>'+ v1 +' <input type="hidden" name="bapl[rules][' + counter + '][role]" value="'+v1+'"></td>'); //<th>User Role/ID</th> 
    454443                        tr.append('<td>'+ v2 +' <input type="hidden" name="bapl[rules][' + counter + '][post_type]" value="'+v2+'"></td>'); //<th>Post Type</th> 
     
    456445                        tr.append('<td>'+ v4 +' <input type="hidden" name="bapl[rules][' + counter + '][status]" value="'+v4+'"></td>'); //<th>Post Status</th> 
    457446                        tr.append('<td><pre><code>'+ html_entities(v5) +'</code></pre>  <textarea style="display:none;" name="bapl[rules][' + counter + '][message]">'+v5+'</textarea></td>'); //<th>Limit message</th> 
     447                        if (v6 == "FOREVER" || v6.length <= 0 || !isNumeric(v6)) 
     448                            tr.append('<td><?php _e("FOREVER"); ?> <input type="hidden" name="bapl[rules][' + counter + '][time_span]" value="FOREVER"></td>'); 
     449                        else 
     450                            tr.append('<td><?php _e("Every "); ?>'+v6+' <?php _e('hours');?> <input type="hidden" name="bapl[rules][' + counter + '][time_span]" value="'+v6+'"></td>'); 
    458451                        tr.append('<td><span class="edit_rule button-secondary">Edit</span> <span class="remove_rule button-secondary">Remove</span></td>'); //<th>Actions</th> 
    459452                        jQuery(curr_row).remove(); 
     
    468461                        return encoded; 
    469462                    } 
    470                      
     463                    function isNumeric(n) { 
     464                        return !isNaN(parseFloat(n)) && isFinite(n); 
     465                    } 
    471466                    //add new rule 
    472467                    jQuery(".new_rule").live('click',function(e){ 
     
    505500                    jQuery(".add-new-h2").live('click',function(){ 
    506501                        res_form(); 
    507                         tb_show('add a new limit rule','TB_inline?height=380&width=400&inlineId=d_e_f'); 
     502                        tb_show('add a new limit rule','TB_inline?height=420&width=400&inlineId=d_e_f'); 
    508503                    }); 
    509504                    </script> 
     
    577572                            <span class="dsc"><small><?php _e('Enter limit message'); ?></small></span> 
    578573                        </li> 
     574                        <li> 
     575                            <label for="time_span"><?php _e('Time Span'); ?></label> 
     576                            <input name="time_span" type="text" id="tis" size="4"/><br/> 
     577                            <span class="dsc"><small><?php _e('How long to Limit The User In hours (or you can type FOREVER)'); ?></small></span> 
     578                        </li> 
    579579                        <input type="hidden" id="rule_count" value=""/> 
    580580                    </ul> 
  • bainternet-posts-creation-limits/trunk/readme.txt

    r570821 r624038  
    55Requires at least: 3.0 
    66Tested up to: 3.4.1 
    7 Stable tag: 2.4 
     7Stable tag: 2.6 
    88 
    99this plugin helps you to limit the number of posts/pages/custom post types each user can create on your site. 
     
    119119 
    120120== Changelog == 
     1212.6 `trash` is now  check in `any` status as well. 
     122 
     1232.5 Added time span. 
     124 
    1211252.4 Added Any to post type rules. 
    122126 
Note: See TracChangeset for help on using the changeset viewer.