WordPress.org

Plugin Directory

Changeset 779853


Ignore:
Timestamp:
09/29/13 14:50:04 (7 months ago)
Author:
eskapism
Message:

deploy from git

Location:
ep-admin-messages/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • ep-admin-messages/trunk/ep-admin-messages.class.php

    r761944 r779853  
    4848         } 
    4949 
    50         if ( isset( $this->config->messages ) ) { 
    51  
    52             foreach ( $this->config->messages as $one_message ) { 
     50        if ( ! isset( $this->config->messages ) || ! is_array( $this->config->messages ) )  
     51            return false; 
     52 
     53        foreach ( $this->config->messages as $one_message ) { 
     54         
     55            // Get settings for message 
     56            // make an array with the keys to get and just get'em! 
     57            $settings_to_get = array( 
     58                "locations" => "location", 
     59                "post_slugs" => "post_slug", 
     60                "capabilities" => "capability", 
     61                "user_ids" => "user_id", 
     62                "usernames" => "username", 
     63                "user_roles" => "user_role" 
     64            ); 
     65 
     66            // Dynamically create variables as defined in $settings_to_get 
     67            foreach ( $settings_to_get as $settings_key => $settings_value ) { 
     68 
     69                ${$settings_key} = array(); 
     70                if (! empty($one_message->{$settings_value} ) ) 
     71                    ${$settings_key}  = $this->get_array_from_string( $one_message->{$settings_value}  ); 
     72 
     73            } 
     74 
     75 
     76            // Detect language 
     77            // @todo: Actually detect language 
    5378             
    54                 // Get settings for message 
    55  
    56                 $locations = array(); 
    57                 if (! empty($one_message->location) ) 
    58                     $locations = $this->get_array_from_string( $one_message->location ); 
    59  
    60                 $post_slugs = array(); 
    61                 if (! empty($one_message->post_slug) ) 
    62                     $post_slugs = $this->get_array_from_string( $one_message->post_slug ); 
    63  
    64                 $capabilities = array(); 
    65                 if (! empty($one_message->capability) ) 
    66                     $capabilities = $this->get_array_from_string( $one_message->capability ); 
    67  
    68                 $user_ids = array(); 
    69                 if (! empty($one_message->user_id) ) 
    70                     $user_ids = $this->get_array_from_string( $one_message->user_id ); 
    71  
    72                 $usernames = array(); 
    73                 if (! empty($one_message->username) ) 
    74                     $usernames = $this->get_array_from_string( $one_message->username ); 
    75  
    76                 // Detect language 
    77                 // @todo: Actually detect language 
    78                 $message_to_show = ""; 
    79                 if ( ! empty( $one_message->message ) ) { 
    80                     $message_to_show = $one_message->message; 
    81                     if ( is_array($message_to_show)) $message_to_show = join($message_to_show); 
     79            // Setup message to show 
     80            $message_to_show = ""; 
     81            if ( ! empty( $one_message->message ) ) { 
     82                $message_to_show = $one_message->message; 
     83                if ( is_array($message_to_show)) $message_to_show = join($message_to_show); 
     84            } 
     85 
     86            // Setup message title 
     87            $message_title_to_show = __("Admin Message", "ep-admin-message"); 
     88            if ( ! empty( $one_message->title ) ) { 
     89                $message_title_to_show = $one_message->title; 
     90                if ( is_array($message_title_to_show)) $message_title_to_show = join($message_title_to_show); 
     91            } 
     92             
     93            // Determine if message should be shown on current screen 
     94            // By default all messages are shown 
     95            $do_show = true; 
     96            $position = "admin_notices"; 
     97 
     98            // First of all we must have a message to show 
     99            if ( empty( $message_to_show ) ) 
     100                continue; 
     101 
     102            // If locations is set then limit where to show 
     103            if ( ! empty( $locations ) ) { 
     104                 
     105                $do_show_location = false; 
     106 
     107                foreach ($locations as $one_location) { 
     108                     
     109                    if ( strpos( $one_location, "post_type:" ) !== false ) { 
     110 
     111                        // Location is a post type, i.e. location begins with "post_type:" 
     112 
     113                        $location_post_type = str_replace("post_type:", "", $one_location); 
     114                         
     115                        if ( empty($location_post_type) ) 
     116                            continue; 
     117 
     118                        if ( "post" === $current_screen->base && $location_post_type === $current_screen->post_type ) 
     119                            $do_show_location = true; 
     120 
     121                    } elseif ( strpos( $one_location, "post_type_overview:" ) !== false ) { 
     122                         
     123                        // Location is a post type overview screen 
     124 
     125                        $location_post_type = str_replace("post_type_overview:", "", $one_location); 
     126                         
     127                        if ( empty($location_post_type) ) 
     128                            continue; 
     129 
     130                        if ( "edit" === $current_screen->base && $location_post_type === $current_screen->post_type ) 
     131                            $do_show_location = true; 
     132 
     133                    } elseif ( strpos( $one_location, "post_type_metabox:" ) !== false ) { 
     134                         
     135                        // Location is a post type overview screen 
     136 
     137                        $location_post_type = str_replace("post_type_metabox:", "", $one_location); 
     138 
     139                        if ( empty($location_post_type) ) 
     140                            continue; 
     141 
     142                        if ( "post" === $current_screen->base && $location_post_type === $current_screen->post_type ) { 
     143                            $do_show_location = true; 
     144                            $position = "metabox"; 
     145                        } 
     146 
     147                    } elseif ( "dashboard" === $one_location ) { 
     148 
     149                        if ( "dashboard" === $current_screen->base ) 
     150                            $do_show_location = true; 
     151 
     152                    } elseif ( "dashboard_metabox" === $one_location ) { 
     153 
     154                        if ( "dashboard" === $current_screen->base ) { 
     155                            $do_show_location = true; 
     156                            $position = "dashboard_metabox"; 
     157                        } 
     158 
     159                    } elseif ( "plugins" === $one_location ) { 
     160 
     161                        if ( "plugins" === $current_screen->base ) 
     162                            $do_show_location = true; 
     163 
     164                    } elseif ( "users" === $one_location ) { 
     165 
     166                        if ( "users" === $current_screen->base ) 
     167                            $do_show_location = true; 
     168 
     169                    } elseif ( "profile" === $one_location ) { 
     170 
     171                        if ( "profile" === $current_screen->base ) 
     172                            $do_show_location = true; 
     173                     
     174                    } // if check locations 
     175 
     176                    // @todo: should we just be able to query any screen in the config? 
     177                    // Like: "screen_base:upload" 
     178                    // However problems with multiple conditions 
     179 
    82180                } 
    83181 
     182                if ( ! $do_show_location ) 
     183                    $do_show = false; 
     184 
     185            } 
     186 
     187            // If capabilites is set then limit who to show to 
     188            // User need to have at least of the capabilities 
     189            if ( ! empty( $capabilities ) ) { 
     190 
     191                $do_show_capability = false; 
     192 
     193                foreach ( $capabilities as $one_capability ) { 
     194 
     195                    if ( current_user_can( $one_capability ) ) { 
     196                        $do_show_capability = true; 
     197                        break; 
     198                    } 
     199 
     200                } 
     201 
     202                if ( ! $do_show_capability ) 
     203                    $do_show = false; 
     204            } 
     205             
     206            // If post_slugs is set then limit who to show to 
     207            if ( ! empty( $post_slugs ) ) { 
     208 
     209                $do_show_post_slug = false; 
     210 
     211                if ( ! empty( $post ) && isset( $post->post_name ) ) { 
    84212                 
    85                 // Determine if message should be shown on current screen 
    86                 // By default all messages are shown 
    87                 $do_show = true; 
    88                 $position = "admin_notices"; 
    89  
    90                 // First of all we must have a message to show 
    91                 if ( empty( $message_to_show ) ) 
    92                     continue; 
    93  
    94                 // If locations is set then limit where to show 
    95                 if ( ! empty( $locations ) ) { 
    96                      
    97                     $do_show_location = false; 
    98  
    99                     foreach ($locations as $one_location) { 
    100                          
    101                         if ( strpos( $one_location, "post_type:" ) !== false ) { 
    102  
    103                             // Location is a post type, i.e. location begins with "post_type:" 
    104  
    105                             $location_post_type = str_replace("post_type:", "", $one_location); 
    106                              
    107                             if ( empty($location_post_type) ) 
    108                                 continue; 
    109  
    110                             if ( "post" === $current_screen->base && $location_post_type === $current_screen->post_type ) 
    111                                 $do_show_location = true; 
    112  
    113                         } elseif ( strpos( $one_location, "post_type_overview:" ) !== false ) { 
    114                              
    115                             // Location is a post type overview screen 
    116  
    117                             $location_post_type = str_replace("post_type_overview:", "", $one_location); 
    118                              
    119                             if ( empty($location_post_type) ) 
    120                                 continue; 
    121  
    122                             if ( "edit" === $current_screen->base && $location_post_type === $current_screen->post_type ) 
    123                                 $do_show_location = true; 
    124  
    125                         } elseif ( strpos( $one_location, "post_type_metabox:" ) !== false ) { 
    126                              
    127                             // Location is a post type overview screen 
    128  
    129                             $location_post_type = str_replace("post_type_metabox:", "", $one_location); 
    130  
    131                             if ( empty($location_post_type) ) 
    132                                 continue; 
    133  
    134                             if ( "post" === $current_screen->base && $location_post_type === $current_screen->post_type ) { 
    135                                 $do_show_location = true; 
    136                                 $position = "metabox"; 
    137                             } 
    138  
    139                         } elseif ( "dashboard" === $one_location ) { 
    140  
    141                             if ( "dashboard" === $current_screen->base ) 
    142                                 $do_show_location = true; 
    143  
    144                         } elseif ( "dashboard_metabox" === $one_location ) { 
    145  
    146                             if ( "dashboard" === $current_screen->base ) { 
    147                                 $do_show_location = true; 
    148                                 $position = "dashboard_metabox"; 
    149                             } 
    150  
    151                         } elseif ( "plugins" === $one_location ) { 
    152  
    153                             if ( "plugins" === $current_screen->base ) 
    154                                 $do_show_location = true; 
    155  
    156                         } elseif ( "users" === $one_location ) { 
    157  
    158                             if ( "users" === $current_screen->base ) 
    159                                 $do_show_location = true; 
    160  
    161                         } elseif ( "profile" === $one_location ) { 
    162  
    163                             if ( "profile" === $current_screen->base ) 
    164                                 $do_show_location = true; 
    165                          
    166                         } // if check locations 
    167  
    168                         // @todo: should we just be able to query any screen in the config? 
    169                         // Like: "screen_base:upload" 
    170                         // However problems with multiple conditions 
    171  
    172                     } 
    173  
    174                     if ( ! $do_show_location ) 
    175                         $do_show = false; 
    176  
    177                 } 
    178  
    179                 // If capabilites is set then limit who to show to 
    180                 // User need to have at least of the capabilities 
    181                 if ( ! empty( $capabilities ) ) { 
    182  
    183                     $do_show_capability = false; 
    184  
    185                     foreach ( $capabilities as $one_capability ) { 
    186  
    187                         if ( current_user_can( $one_capability ) ) { 
    188                             $do_show_capability = true; 
     213                    foreach ( $post_slugs as $one_slug ) { 
     214 
     215                        // check post slug for exact match  
     216                        if ( $one_slug === $post->post_name ) { 
     217                            $do_show_post_slug = true; 
    189218                            break; 
    190219                        } 
    191220 
    192                     } 
    193  
    194                     if ( ! $do_show_capability ) 
    195                         $do_show = false; 
    196                 } 
    197                  
    198                 // If post_slugs is set then limit who to show to 
    199                 if ( ! empty( $post_slugs ) ) { 
    200  
    201                     $do_show_post_slug = false; 
    202  
    203                     if ( ! empty( $post ) && isset( $post->post_name ) ) { 
    204                      
    205                         foreach ( $post_slugs as $one_slug ) { 
    206  
    207                             // check post slug for exact match  
    208                             if ( $one_slug === $post->post_name ) { 
     221                        // check post slug for partial match, if one_slug ends with wildcard (*) 
     222                        if ( strpos( $one_slug, "*" ) !== false ) { 
     223                             
     224                            // found a wildcard, match a regexp out of it 
     225                            $regexp = "/" . str_replace("*", ".+", $one_slug) . "/"; 
     226                            if ( preg_match($regexp, $post->post_name) === 1) { 
    209227                                $do_show_post_slug = true; 
    210228                                break; 
    211229                            } 
    212230 
    213                             // check post slug for partial match, if one_slug ends with wildcard (*) 
    214                             if ( strpos( $one_slug, "*" ) !== false ) { 
    215                                  
    216                                 // found a wildcard, match a regexp out of it 
    217                                 $regexp = "/" . str_replace("*", ".+", $one_slug) . "/"; 
    218                                 if ( preg_match($regexp, $post->post_name) === 1) { 
    219                                     $do_show_post_slug = true; 
    220                                     break; 
    221                                 } 
    222  
    223                             } 
    224231                        } 
    225  
    226                     } // if not empty post 
    227  
    228                     if ( ! $do_show_post_slug ) 
    229                         $do_show = false; 
    230  
     232                    } 
     233 
     234                } // if not empty post 
     235 
     236                if ( ! $do_show_post_slug ) 
     237                    $do_show = false; 
     238 
     239            } 
     240 
     241            // If user_id is set then show only to users with that id 
     242            if ( ! empty( $user_ids ) ) { 
     243                 
     244                $do_show_user = false; 
     245 
     246                $current_user = wp_get_current_user(); 
     247                if ( in_array( $current_user->ID, $user_ids ) ) 
     248                    $do_show_user = true; 
     249 
     250                if ( ! $do_show_user ) 
     251                    $do_show = false; 
     252 
     253            } 
     254 
     255            // If username is set then only show to user with that username 
     256            if ( ! empty( $usernames ) ) { 
     257 
     258                $do_show_user = false; 
     259 
     260                $current_user = wp_get_current_user(); 
     261                if ( in_array( $current_user->data->user_login, $usernames ) ) 
     262                    $do_show_user = true; 
     263 
     264                if ( ! $do_show_user ) 
     265                    $do_show = false; 
     266 
     267 
     268            } 
     269 
     270            // If show message by user role 
     271            if ( ! empty($user_roles) ) { 
     272 
     273                $do_show_user = false; 
     274 
     275                // get current user 
     276                $current_user = wp_get_current_user(); 
     277                foreach ( $user_roles as $one_role ) { 
     278                    if ( $this->user_has_role( $current_user->ID, $one_role ) ) { 
     279                        $do_show_user = true; 
     280                        break; 
     281                    } 
    231282                } 
    232283 
    233                 // If user_id is set then show only to users with that id 
    234                 if ( ! empty( $user_ids ) ) { 
    235                      
    236                     $do_show_user = false; 
    237  
    238                     $current_user = wp_get_current_user(); 
    239                     if ( in_array( $current_user->ID, $user_ids ) ) 
    240                         $do_show_user = true; 
    241  
    242                     if ( ! $do_show_user ) 
    243                         $do_show = false; 
     284                if ( ! $do_show_user ) 
     285                    $do_show = false; 
     286 
     287            } 
     288 
     289            // end check settings things 
     290 
     291            // If message is to be shown 
     292            if ( $do_show ) { 
     293 
     294                if ( "admin_notices" === $position ) { 
     295                 
     296                    // Show message at admin_notices/top 
     297                    // Works for all screens 
     298                    add_action("admin_notices", function() use ($one_message, $message_to_show) { 
     299                        ?> 
     300                        <div class="updated"> 
     301                            <p><?php echo $message_to_show ?></p> 
     302                        </div> 
     303                        <?php 
     304                    }); 
     305 
     306                } elseif ( "metabox" === $position || "dashboard_metabox" === $position ) { 
     307 
     308                    // Show message in a meta box on the edit post screen 
     309                    $metabox_priority = "high"; // high', 'core', 'default' or 'low' 
     310                    $metabox_title = $message_title_to_show; 
     311                    $metabox_id = "ep-admin-message-" . md5( json_encode($one_message) ); 
     312 
     313                    if ( "metabox" === $position ) 
     314                        $metabox_post_type = $post->post_type; 
     315                    elseif ( "dashboard_metabox" === $position ) 
     316                        $metabox_post_type = "dashboard";                    
     317 
     318                    add_meta_box( $metabox_id, $metabox_title, function() use ($one_message, $message_to_show) { 
     319                        ?> 
     320                        <?php echo $message_to_show ?> 
     321                        <?php 
     322                    }, $metabox_post_type, "side", $metabox_priority ); 
    244323 
    245324                } 
    246325 
    247                 // If username is set then only show to user with that username 
    248                 if ( ! empty( $usernames ) ) { 
    249  
    250                     $do_show_user = false; 
    251  
    252                     $current_user = wp_get_current_user(); 
    253                     if ( in_array( $current_user->data->user_login, $usernames ) ) 
    254                         $do_show_user = true; 
    255  
    256                     if ( ! $do_show_user ) 
    257                         $do_show = false; 
    258  
    259  
    260                 } 
    261  
    262                 if ( $do_show ) { 
    263  
    264                     if ( "admin_notices" === $position ) { 
    265                      
    266                         // Show message at admin_notices/top 
    267                         // Works for all screens 
    268                         add_action("admin_notices", function() use ($one_message, $message_to_show) { 
    269                             ?> 
    270                             <div class="updated"> 
    271                                 <p><?php echo $message_to_show ?></p> 
    272                             </div> 
    273                             <?php 
    274                         }); 
    275  
    276                     } elseif ( "metabox" === $position || "dashboard_metabox" === $position ) { 
    277  
    278                         // Show message in a meta box on the edit post screen 
    279                         $metabox_priority = "high"; // high', 'core', 'default' or 'low' 
    280                         $metabox_title = __("Admin Message", "ep-admin-message"); 
    281                         $metabox_id = "ep-admin-message-" . md5( json_encode($one_message) ); 
    282  
    283                         if ( "metabox" === $position ) 
    284                             $metabox_post_type = $post->post_type; 
    285                         elseif ( "dashboard_metabox" === $position ) 
    286                             $metabox_post_type = "dashboard";                    
    287  
    288                         add_meta_box( $metabox_id, $metabox_title, function() use ($one_message, $message_to_show) { 
    289                             ?> 
    290                             <?php echo $message_to_show ?> 
    291                             <?php 
    292                         }, $metabox_post_type, "side", $metabox_priority ); 
    293  
    294                     } 
    295  
    296                 } 
    297  
    298             } 
    299  
    300         } 
    301  
    302     } 
     326            } // is show message 
     327 
     328        } // if message is set 
     329 
     330    } // setup messages 
     331 
     332    /** 
     333     * check if user has a role 
     334     * @param $user_id 
     335     * @param $role 
     336     */ 
     337    function user_has_role( $user_id, $role ) { 
     338      
     339        $user = get_userdata( $user_id ); 
     340 
     341        if ( empty( $user ) ) 
     342            return false; 
     343 
     344        return in_array( $role, (array) $user->roles ); 
     345    } 
     346  
    303347 
    304348    /** 
     
    344388 
    345389    function message_config_file_error() { 
     390         
     391        $msg = '%1$s: Config file <code>%2$s</code> does not contain a valid JSON configuration. Take a look at the <a href="%3$s">example config</a> to understand the config format and what you can do.'; 
     392        $example_file_url = "https://github.com/EarthPeople/ep-admin-messages/blob/master/ep-config-example.json"; 
    346393        ?> 
    347394        <div class="error"> 
    348             <p><?php echo sprintf( __( '%1$s: Config file "%2$s" does not contain valid JSON.', 'ep-admin-messages' ), $this->plugin_name, $this->config_file ); ?></p> 
     395            <p><?php echo sprintf( __( $msg, 'ep-admin-messages' ), $this->plugin_name, $this->config_file, $example_file_url ); ?></p> 
    349396        </div> 
    350         <?php        
     397        <?php 
     398 
    351399    } 
    352400 
    353401    function message_no_config_file_found() { 
     402 
     403        $msg = '%1$s: Could not find config file <code>%2$s</code> in your theme directory. Please create config file and try again. Take a look at the <a href="%3$s">example config</a> to understand the config format and what you can do.'; 
     404        $example_file_url = "https://github.com/EarthPeople/ep-admin-messages/blob/master/ep-config-example.json"; 
    354405        ?> 
    355406        <div class="error"> 
    356             <p><?php echo sprintf( __( '%1$s: Could not find config file "%2$s" in your theme directory.', 'ep-admin-messages' ), $this->plugin_name, $this->config_file ); ?></p> 
     407            <p><?php echo sprintf( __( $msg, 'ep-admin-messages' ), $this->plugin_name, $this->config_file, $example_file_url ); ?></p> 
    357408        </div> 
    358409        <?php 
     410 
    359411    } 
    360412 
  • ep-admin-messages/trunk/ep-admin-messages.php

    r761944 r779853  
    44Plugin URI: http://earthpeople.se/ 
    55Description: Show custom messages in the admin area 
    6 Version: 0.1.2 
     6Version: 0.1.3 
    77Author: Earth People 
    88Author URI: http://earthpeople.se/ 
  • ep-admin-messages/trunk/ep-config-example.json

    r761944 r779853  
    55    }, 
    66    { 
    7       "message": "This message is shown on all screen, but only for the user with id 1.", 
     7      "message": "This message is shown on all screens, but only for users with role <code>editor</code> or <code>author</code>.", 
     8      "user_role": "editor,author", 
     9      "location": "dashboard" 
     10    }, 
     11    { 
     12      "message": "This message is shown on all screens, but only for the user with id 1.", 
    813      "user_id": 1 
    914    }, 
    1015    { 
    11       "message": "This message is shown on all screen, but only for the user with the username <code>admin</code>.", 
     16      "message": "This message is shown on all screens, but only for the user with the username <code>admin</code>.", 
    1217      "username": "admin" 
    1318    }, 
     
    5459        "<p>Images are ok too:<br><img src='http://lorempixel.com/95/95/' alt='Dummy image from lorempixel.com' widht=100 height=100>" 
    5560      ], 
    56       "location": "dashboard_metabox" 
     61      "location": "dashboard_metabox", 
     62      "title": "This is the the text in title of the meta box" 
    5763    }, 
    5864    { 
  • ep-admin-messages/trunk/readme.txt

    r761944 r779853  
    77Requires at least: 3.6 
    88Tested up to: 3.6 
    9 Stable tag: 0.1.2 
     9Stable tag: 0.1.3 
    1010 
    1111Show messages in WP Admin. Different messages can be shown at different places, for different people. 
     
    4242= Messages are only shown to the users that you choose = 
    4343 
    44 Each message can be limited to be shown only to users with a specific [capability](http://codex.wordpress.org/Glossary#Capabilities). 
     44Each message can be limited to be shown only to users with a specific [capability](http://codex.wordpress.org/Glossary#Capabilities) or [role](http://codex.wordpress.org/Roles_and_Capabilities#Roles). 
    4545 
    4646You can for example show one message to your editors, i.e. users with the capability "edit_posts", and another message to your admins, i.e. users with the capability "manage_options". 
     
    101101== Changelog == 
    102102 
     103= 0.1.3 = 
     104 
     105* Added support for limiting messages to users based on their role. Usage: ```user_role: "editor,author"``` 
     106* Added support for custom title in metaboxes. Usage: ```"title": "This is the title of the message"``` 
     107 
    103108= 0.1.2 = 
    104109 
    105 * Added support for limiting messages to users based on their ID or their username. 
     110* Added support for limiting messages to users based on their ID or their username. Usage: ```username: "admin"`` 
    106111 
    107112= 0.1.1 = 
Note: See TracChangeset for help on using the changeset viewer.