WordPress.org

Plugin Directory

Changeset 1573199


Ignore:
Timestamp:
01/12/17 09:53:38 (7 months ago)
Author:
bestwebsoft
Message:

"V0.1.4 - * New features added. "

Location:
timesheet
Files:
81 added
21 edited

Legend:

Unmodified
Added
Removed
  • timesheet/trunk/bws_menu/bws_functions.php

    r1517164 r1573199  
    44*/ 
    55 
     6/** 
     7 * Function to add 'bestwebsoft' slug for BWS_Menu MO file if BWS_Menu loaded from theme. 
     8 * 
     9 * @since 1.9.7 
     10 */ 
     11if ( ! function_exists ( 'bws_get_mofile' ) ) { 
     12    function bws_get_mofile( $mofile, $domain ) { 
     13        if ( 'bestwebsoft' == $domain ) { 
     14            $locale = get_locale(); 
     15            return str_replace( $locale, "bestwebsoft-{$locale}", $mofile ); 
     16        } 
     17 
     18        return $mofile; 
     19    } 
     20} 
     21 
    622/* Internationalization, first(!) */ 
    7 load_plugin_textdomain( 'bestwebsoft', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); 
     23if ( isset( $bws_menu_source ) && 'themes' == $bws_menu_source ) { 
     24    add_filter( 'load_textdomain_mofile', 'bws_get_mofile', 10, 2 ); 
     25    load_theme_textdomain( 'bestwebsoft', get_stylesheet_directory() . '/inc/bws_menu/languages' ); 
     26    remove_filter( 'load_textdomain_mofile', 'bws_get_mofile' ); 
     27} else { 
     28    load_plugin_textdomain( 'bestwebsoft', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); 
     29} 
    830 
    931/** 
     
    3456            } 
    3557 
    36             add_menu_page( 'BWS Panel', 'BWS Panel', 'manage_options', 'bws_panel', 'bws_add_menu_render', plugins_url( 'images/logo-white-min.png', __FILE__ ), '1001' ); 
     58            add_menu_page( 'BWS Panel', 'BWS Panel', 'manage_options', 'bws_panel', 'bws_add_menu_render', bws_menu_url( 'images/logo-white-min.png' ), '1001' ); 
    3759 
    3860            add_submenu_page( 'bws_panel', __( 'Plugins', 'bestwebsoft' ), __( 'Plugins', 'bestwebsoft' ), 'manage_options', 'bws_panel', 'bws_add_menu_render' ); 
     
    6991                deactivate_plugins( $plugin_basename ); 
    7092                $admin_url = ( function_exists( 'get_admin_url' ) ) ? get_admin_url( null, 'plugins.php' ) : esc_url( '/wp-admin/plugins.php' ); 
    71                 wp_die(  
     93                wp_die( 
    7294                    sprintf( 
    7395                        "<strong>%s</strong> %s <strong>WordPress %s</strong> %s <br /><br />%s <a href='%s'>%s</a>.", 
     
    108130 
    109131        /*  banner_to_settings notice */ 
    110         if ( ! empty( $bws_plugin_banner_to_settings ) ) {  
     132        if ( ! empty( $bws_plugin_banner_to_settings ) ) { 
    111133            if ( 1 == count( $bws_plugin_banner_to_settings ) ) { ?> 
    112134                <div class="updated" style="padding: 0; margin: 0; border: none; background: none;"> 
     
    114136                        <div class="icon"> 
    115137                            <img title="" src="<?php echo esc_attr( $bws_plugin_banner_to_settings[0]['banner_url'] ); ?>" alt="" /> 
    116                         </div>                       
     138                        </div> 
    117139                        <div class="text"> 
    118140                            <strong><?php _e( 'Thank you for installing', 'bestwebsoft' ); ?> <?php echo $bws_plugin_banner_to_settings[0]['plugin_info']['Name']; ?> plugin!</strong><br /> 
    119                             <?php _e( "Let's get started", 'bestwebsoft' ); ?>:  
    120                             <a href="<?php echo $bws_plugin_banner_to_settings[0]['settings_url']; ?>"><?php _e( 'Settings', 'bestwebsoft' ); ?></a>  
     141                            <?php _e( "Let's get started", 'bestwebsoft' ); ?>: 
     142                            <a href="<?php echo $bws_plugin_banner_to_settings[0]['settings_url']; ?>"><?php _e( 'Settings', 'bestwebsoft' ); ?></a> 
    121143                            <?php if ( false != $bws_plugin_banner_to_settings[0]['post_type_url'] ) { ?> 
    122                                 <?php _e( 'or', 'bestwebsoft' ); ?>  
     144                                <?php _e( 'or', 'bestwebsoft' ); ?> 
    123145                                <a href="<?php echo $bws_plugin_banner_to_settings[0]['post_type_url']; ?>"><?php _e( 'Add New', 'bestwebsoft' ); ?></a> 
    124146                            <?php } ?> 
     
    130152                        </form> 
    131153                    </div> 
    132                 </div>           
     154                </div> 
    133155            <?php } else { ?> 
    134156                <div class="updated" style="padding: 0; margin: 0; border: none; background: none;"> 
    135                     <div class="bws_banner_on_plugin_page bws_banner_to_settings_joint">     
     157                    <div class="bws_banner_on_plugin_page bws_banner_to_settings_joint"> 
    136158                        <form action="" method="post"> 
    137159                            <button class="notice-dismiss bws_hide_settings_notice" title="<?php _e( 'Close notice', 'bestwebsoft' ); ?>"></button> 
     
    139161                                <div class="icon"> 
    140162                                    <span class="dashicons dashicons-admin-plugins"></span> 
    141                                 </div>                                                           
     163                                </div> 
    142164                                <strong><?php _e( 'Thank you for installing plugins by BestWebSoft!', 'bestwebsoft' ); ?></strong> 
    143165                                <div class="hide-if-no-js bws-more-links"> 
    144                                     <a href="#" class="bws-more"><?php _e( 'More Details', 'bestwebsoft' ); ?></a>       
    145                                     <a href="#" class="bws-less hidden"><?php _e( 'Less Details', 'bestwebsoft' ); ?></a>    
    146                                 </div>           
    147                                 <?php wp_nonce_field( plugin_basename( __FILE__ ), 'bws_settings_nonce_name' ); ?>                               
     166                                    <a href="#" class="bws-more"><?php _e( 'More Details', 'bestwebsoft' ); ?></a> 
     167                                    <a href="#" class="bws-less hidden"><?php _e( 'Less Details', 'bestwebsoft' ); ?></a> 
     168                                </div> 
     169                                <?php wp_nonce_field( plugin_basename( __FILE__ ), 'bws_settings_nonce_name' ); ?> 
    148170                                <div class="clear"></div> 
    149171                            </div> 
    150172                            <div class="bws-details hide-if-js"> 
    151                                 <?php foreach ( $bws_plugin_banner_to_settings as $value ) { ?>      
    152                                     <div>        
    153                                         <strong><?php echo str_replace( ' by BestWebSoft', '', $value['plugin_info']['Name'] ); ?></strong>&ensp;<a href="<?php echo $value['settings_url']; ?>"><?php _e( 'Settings', 'bestwebsoft' ); ?></a>  
     173                                <?php foreach ( $bws_plugin_banner_to_settings as $value ) { ?> 
     174                                    <div> 
     175                                        <strong><?php echo str_replace( ' by BestWebSoft', '', $value['plugin_info']['Name'] ); ?></strong>&ensp;<a href="<?php echo $value['settings_url']; ?>"><?php _e( 'Settings', 'bestwebsoft' ); ?></a> 
    154176                                        <?php if ( false != $value['post_type_url'] ) { ?> 
    155177                                            &ensp;|&ensp;<a target="_blank" href="<?php echo $value['post_type_url']; ?>"><?php _e( 'Add New', 'bestwebsoft' ); ?></a> 
    156178                                        <?php } ?> 
    157179                                        <input type="hidden" name="bws_hide_settings_notice_<?php echo $value['plugin_options_name']; ?>" value="hide" /> 
    158                                     </div>       
    159                                 <?php } ?>       
     180                                    </div> 
     181                                <?php } ?> 
    160182                            </div> 
    161183                        </div> 
     
    170192    function bws_plugin_banner( $plugin_info, $this_banner_prefix, $link_slug, $link_key, $link_pn, $banner_url_or_slug ) { 
    171193        global $wp_version, $bstwbsftwppdtplgns_cookie_add, $bstwbsftwppdtplgns_banner_array; 
    172          
     194 
    173195        if ( empty( $bstwbsftwppdtplgns_banner_array ) ) { 
    174196            if ( ! function_exists( 'bws_get_banner_array' ) ) 
     
    190212            if ( $this_banner == $value[0] ) { 
    191213                if ( ! isset( $bstwbsftwppdtplgns_cookie_add ) ) { 
    192                     echo '<script type="text/javascript" src="' . plugins_url( 'js/c_o_o_k_i_e.js', __FILE__ ) . '"></script>'; 
     214                    echo '<script type="text/javascript" src="' . bws_menu_url( 'js/c_o_o_k_i_e.js' ) . '"></script>'; 
    193215                    $bstwbsftwppdtplgns_cookie_add = true; 
    194216                } ?> 
     
    214236                        <div class="icon"> 
    215237                            <img title="" src="<?php echo esc_attr( $banner_url_or_slug ); ?>" alt="" /> 
    216                         </div>                       
     238                        </div> 
    217239                        <div class="text"><?php 
    218240                            _e( 'It’s time to upgrade your', 'bestwebsoft' ); ?> <strong><?php echo $plugin_info['Name']; ?> plugin</strong> <?php _e( 'to', 'bestwebsoft' ); ?> <strong>Pro</strong> <?php _e( 'version!', 'bestwebsoft' ); ?><br /> 
     
    269291                    unset( $plugin_options['hide_premium_options'][ $key ] ); 
    270292                } 
    271              
     293 
    272294                if ( $is_network_option ) 
    273295                    update_site_option( $plugin_options_name, $plugin_options ); 
     
    280302 
    281303        if ( isset( $_POST['bws_license_submit'] ) && check_admin_referer( $plugin_basename, 'bws_license_nonce_name' ) ) { 
    282             if ( '' != $bws_license_key ) {  
     304            if ( '' != $bws_license_key ) { 
    283305                if ( strlen( $bws_license_key ) != 18 ) { 
    284306                    $result['error'] = __( "Wrong license key", 'bestwebsoft' ); 
     
    297319 
    298320                    $all_plugins = get_plugins(); 
    299                      
     321 
    300322                    if ( ! array_key_exists( $bws_license_plugin, $all_plugins ) ) { 
    301323                        $current = get_site_transient( 'update_plugins' ); 
     
    318340                                    foreach ( $response as $key => $value ) { 
    319341                                        if ( "wrong_license_key" == $value->package ) { 
    320                                             $result['error'] = __( "Wrong license key", 'bestwebsoft' );  
     342                                            $result['error'] = __( "Wrong license key", 'bestwebsoft' ); 
    321343                                        } elseif ( "wrong_domain" == $value->package ) { 
    322344                                            $result['error'] = __( "This license key is bind to another site", 'bestwebsoft' ); 
     
    335357                                        $uploadDir = wp_upload_dir(); 
    336358                                        $zip_name = explode( '/', $bws_license_plugin ); 
    337                                          
    338                                         if ( !function_exists( 'curl_init' ) ) {  
     359 
     360                                        if ( !function_exists( 'curl_init' ) ) { 
    339361                                            $received_content = file_get_contents( $url ); 
    340362                                        } else { 
     
    378400                                        /* activate Pro */ 
    379401                                        if ( file_exists( WP_PLUGIN_DIR . '/' . $zip_name[0] ) ) { 
    380                                             if ( is_multisite() && is_plugin_active_for_network( plugin_basename( __FILE__ ) ) ) { 
     402                                            if ( is_multisite() && is_plugin_active_for_network( $plugin_basename ) ) { 
    381403                                                /* if multisite and free plugin is network activated */ 
    382404                                                $active_plugins = get_site_option( 'active_sitewide_plugins' ); 
     
    395417                                    } 
    396418                                } else { 
    397                                     $result['error'] = __( "Something went wrong. Try again later or upload the plugin manually. We are sorry for inconvenience.", 'bestwebsoft' );  
     419                                    $result['error'] = __( "Something went wrong. Try again later or upload the plugin manually. We are sorry for inconvenience.", 'bestwebsoft' ); 
    398420                                } 
    399421                            } 
     
    403425                        /* activate Pro */ 
    404426                        if ( ! is_plugin_active( $bws_license_plugin ) ) { 
    405                             if ( is_multisite() && is_plugin_active_for_network( plugin_basename( __FILE__ ) ) ) { 
     427                            if ( is_multisite() && is_plugin_active_for_network( $plugin_basename ) ) { 
    406428                                /* if multisite and free plugin is network activated */ 
    407429                                $network_wide = true; 
     
    455477            <p><?php _e( "Congratulations! Pro version of the plugin is successfully installed and activated.", 'bestwebsoft' ); ?></p> 
    456478            <p> 
    457                 <?php _e( "Please, go to", 'bestwebsoft' ); ?> <a href="admin.php?page=<?php echo $pro_page; ?>"><?php _e( 'the setting page', 'bestwebsoft' ); ?></a>  
     479                <?php _e( "Please, go to", 'bestwebsoft' ); ?> <a href="admin.php?page=<?php echo $pro_page; ?>"><?php _e( 'the setting page', 'bestwebsoft' ); ?></a> 
    458480                (<?php _e( "You will be redirected automatically in 5 seconds.", 'bestwebsoft' ); ?>) 
    459481            </p> 
     
    470492            <form method="post" action=""> 
    471493                <p> 
    472                     <?php _e( 'Enter your license key to install and activate', 'bestwebsoft' ); ?>  
    473                     <a href="http://bestwebsoft.com/products/wordpress/plugins/<?php echo $link_slug; ?>/?k=<?php echo $link_key; ?>&amp;pn=<?php echo $link_pn; ?>&amp;v=<?php echo $plugin_info["Version"]; ?>&amp;wp_v=<?php echo $wp_version; ?>" target="_blank" title="<?php echo $plugin_info["Name"]; ?> Pro">Pro</a>  
     494                    <?php _e( 'Enter your license key to install and activate', 'bestwebsoft' ); ?> 
     495                    <a href="http://bestwebsoft.com/products/wordpress/plugins/<?php echo $link_slug; ?>/?k=<?php echo $link_key; ?>&amp;pn=<?php echo $link_pn; ?>&amp;v=<?php echo $plugin_info["Version"]; ?>&amp;wp_v=<?php echo $wp_version; ?>" target="_blank" title="<?php echo $plugin_info["Name"]; ?> Pro">Pro</a> 
    474496                    <?php _e( 'version of the plugin.', 'bestwebsoft' ); ?><br /> 
    475497                    <span class="bws_info"> 
    476                         <?php _e( 'License key can be found in the', 'bestwebsoft' ); ?>  
    477                         <a href="http://bestwebsoft.com/wp-login.php">Client Area</a>  
     498                        <?php _e( 'License key can be found in the', 'bestwebsoft' ); ?> 
     499                        <a href="http://bestwebsoft.com/wp-login.php">Client Area</a> 
    478500                        <?php _e( '(your username is the email address specified during the purchase).', 'bestwebsoft' ); ?> 
    479501                    </span> 
     
    515537                    _e( 'After that you can activate it by entering your license key.', 'bestwebsoft' ); ?><br /> 
    516538                    <span class="bws_info"> 
    517                         <?php _e( 'License key can be found in the', 'bestwebsoft' ); ?>  
    518                         <a href="http://bestwebsoft.com/wp-login.php">Client Area</a>  
     539                        <?php _e( 'License key can be found in the', 'bestwebsoft' ); ?> 
     540                        <a href="http://bestwebsoft.com/wp-login.php">Client Area</a> 
    519541                        <?php _e( '(your username is the email address specified during the purchase).', 'bestwebsoft' ); ?> 
    520542                    </span> 
     
    546568            <p><?php _e( "Congratulations! The Pro license of the plugin is successfully activated.", 'bestwebsoft' ); ?></p> 
    547569            <p> 
    548                 <?php _e( "Please, go to", 'bestwebsoft' ); ?> <a href="admin.php?page=<?php echo $page; ?>"><?php _e( 'the setting page', 'bestwebsoft' ); ?></a>  
     570                <?php _e( "Please, go to", 'bestwebsoft' ); ?> <a href="admin.php?page=<?php echo $page; ?>"><?php _e( 'the setting page', 'bestwebsoft' ); ?></a> 
    549571                (<?php _e( "You will be redirected automatically in 5 seconds.", 'bestwebsoft' ); ?>) 
    550572            </p> 
     
    560582        if ( isset( $_POST['bws_license_submit'] ) && check_admin_referer( $plugin_basename, 'bws_license_nonce_name' ) ) { 
    561583            $license_key = isset( $_POST['bws_license_key'] ) ? stripslashes( esc_html( trim( $_POST['bws_license_key'] ) ) ) : ''; 
    562              
     584 
    563585            if ( '' != $license_key ) { 
    564586 
     
    588610                            foreach ( $response as $key => $value ) { 
    589611                                if ( "wrong_license_key" == $value->package ) { 
    590                                     $result['error'] = __( 'Wrong license key.', 'bestwebsoft' );  
     612                                    $result['error'] = __( 'Wrong license key.', 'bestwebsoft' ); 
    591613                                } else if ( "wrong_domain" == $value->package ) { 
    592614                                    $result['error'] = __( 'This license key is bind to another site.', 'bestwebsoft' ); 
     
    619641                                    if ( $bstwbsftwppdtplgns_options[ $plugin_basename ] != $license_key ) { 
    620642                                        $bstwbsftwppdtplgns_options[ $plugin_basename ] = $license_key; 
    621                                          
     643 
    622644                                        $file = @fopen( dirname( dirname( __FILE__ ) ) . "/license_key.txt" , "w+" ); 
    623645                                        if ( $file ) { 
     
    627649                                        $update_option = true; 
    628650                                    } 
    629                                      
    630                                     if ( $bstwbsftwppdtplgns_options['time_out'][ $plugin_basename ] != $value->time_out ) { 
     651 
     652                                    if ( ! isset( $bstwbsftwppdtplgns_options['time_out'][ $plugin_basename ] ) || $bstwbsftwppdtplgns_options['time_out'][ $plugin_basename ] != $value->time_out ) { 
    631653                                        $bstwbsftwppdtplgns_options['time_out'][ $plugin_basename ] = $value->time_out; 
    632654                                        $update_option = true; 
    633655                                    } 
    634                                      
     656 
    635657                                    if ( isset( $update_option ) ) { 
    636658                                        if ( is_multisite() ) 
     
    742764        if ( isset( $bstwbsftwppdtplgns_options['time_out'][ $plugin_key ] ) && ( strtotime( $bstwbsftwppdtplgns_options['time_out'][ $plugin_key ] ) < strtotime( date("m/d/Y") . '+1 month' ) ) && ( strtotime( $bstwbsftwppdtplgns_options['time_out'][ $plugin_key ] ) > strtotime( date("m/d/Y") ) ) ) { 
    743765            if ( ! isset( $bstwbsftwppdtplgns_cookie_add ) ) { 
    744                 echo '<script type="text/javascript" src="' . plugins_url( 'js/c_o_o_k_i_e.js', __FILE__ ) . '"></script>'; 
     766                echo '<script type="text/javascript" src="' . bws_menu_url( 'js/c_o_o_k_i_e.js' ) . '"></script>'; 
    745767                $bstwbsftwppdtplgns_cookie_add = true; 
    746768            } ?> 
     
    768790                    </div> 
    769791                    <div class="text"><?php _e( "You license for", 'bestwebsoft' ); ?> <strong><?php echo $plugin_name; ?></strong> <?php echo __( "expires on", 'bestwebsoft' ) . ' ' . $bstwbsftwppdtplgns_options['time_out'][ $plugin_key ] . ' ' . __( "and you won't be granted TOP-PRIORITY SUPPORT or UPDATES.", 'bestwebsoft' ); ?> <a target="_new" href="http://support.bestwebsoft.com/entries/53487136"><?php _e( "Learn more", 'bestwebsoft' ); ?></a></div> 
    770                 </div>   
     792                </div> 
    771793            </div> 
    772794        <?php } 
     
    784806        if ( isset( $plugin_options['display_settings_notice'] ) && 0 == $plugin_options['display_settings_notice'] ) 
    785807            return; 
    786          
     808 
    787809        if ( isset( $_POST['bws_hide_settings_notice_' . $plugin_options_name ] ) && check_admin_referer( plugin_basename( __FILE__ ), 'bws_settings_nonce_name' )  ) { 
    788810            $plugin_options['display_settings_notice'] = 0; 
     
    796818        if ( false == strrpos( $banner_url_or_slug, '/' ) ) { 
    797819            $banner_url_or_slug = '//ps.w.org/' . $banner_url_or_slug . '/assets/icon-128x128.png'; 
    798         }  
     820        } 
    799821 
    800822        $bws_plugin_banner_to_settings[] = array( 
    801             'plugin_info'           => $plugin_info,  
     823            'plugin_info'           => $plugin_info, 
    802824            'plugin_options_name'   => $plugin_options_name, 
    803825            'banner_url'            => $banner_url_or_slug, 
     
    843865        if ( isset( $return ) ) 
    844866            return; 
    845          
     867 
    846868        if ( isset( $_POST['bws_hide_suggest_feature_banner_' . $plugin_options_name ] ) && check_admin_referer( $plugin_info['Name'], 'bws_settings_nonce_name' )  ) { 
    847869            $plugin_options['display_suggest_feature_banner'] = 0; 
     
    860882                <div class="icon"> 
    861883                    <img title="" src="<?php echo esc_attr( $banner_url_or_slug ); ?>" alt="" /> 
    862                 </div>                       
     884                </div> 
    863885                <div class="text"> 
    864886                    <strong><?php _e( 'Thank you for choosing', 'bestwebsoft' ); ?> <?php echo $plugin_info['Name']; ?> plugin!</strong><br /> 
    865                     <?php _e( "If you have a feature, suggestion or idea you'd like to see in the plugin, we'd love to hear about it!", 'bestwebsoft' ); ?>  
    866                     <a target="_blank" href="http://support.bestwebsoft.com/hc/en-us/requests/new"><?php _e( 'Suggest a Feature', 'bestwebsoft' ); ?></a>  
     887                    <?php _e( "If you have a feature, suggestion or idea you'd like to see in the plugin, we'd love to hear about it!", 'bestwebsoft' ); ?> 
     888                    <a target="_blank" href="http://support.bestwebsoft.com/hc/en-us/requests/new"><?php _e( 'Suggest a Feature', 'bestwebsoft' ); ?></a> 
    867889                </div> 
    868890                <form action="" method="post"> 
     
    880902        <div id="bws_save_settings_notice" class="updated fade below-h2" style="display:none;"> 
    881903            <p> 
    882                 <strong><?php _e( 'Notice', 'bestwebsoft' ); ?></strong>: <?php _e( "The plugin's settings have been changed.", 'bestwebsoft' ); ?>  
     904                <strong><?php _e( 'Notice', 'bestwebsoft' ); ?></strong>: <?php _e( "The plugin's settings have been changed.", 'bestwebsoft' ); ?> 
    883905                <a class="bws_save_anchor" href="#bws-submit-button"><?php _e( 'Save Changes', 'bestwebsoft' ); ?></a> 
    884906            </p> 
     
    891913        if ( ! isset( $options['hide_premium_options'] ) || ! is_array( $options['hide_premium_options'] ) ) 
    892914            $options['hide_premium_options'] = array(); 
    893          
     915 
    894916        $options['hide_premium_options'][] = get_current_user_id(); 
    895917 
    896         return array(  
     918        return array( 
    897919                'message' => __( 'You can always look at premium options by clicking on the "Show Pro features" in the "Go PRO" tab', 'bestwebsoft' ), 
    898920                'options' => $options ); 
     
    914936        if ( isset( $_GET['bws_activate_plugin'] ) && check_admin_referer( 'bws_activate_plugin' . $_GET['bws_activate_plugin'] ) ) { 
    915937 
    916             $plugin = isset( $_GET['bws_activate_plugin'] ) ? $_GET['bws_activate_plugin'] : '';                 
    917             $result = activate_plugin( $plugin, '', is_network_admin() );                
     938            $plugin = isset( $_GET['bws_activate_plugin'] ) ? $_GET['bws_activate_plugin'] : ''; 
     939            $result = activate_plugin( $plugin, '', is_network_admin() ); 
    918940            if ( is_wp_error( $result ) ) { 
    919941                if ( 'unexpected_output' == $result->get_error_code() ) { 
     
    951973    function bws_admin_enqueue_scripts() { 
    952974        global $wp_version; 
    953         wp_enqueue_style( 'bws-admin-css', plugins_url( 'css/general_style.css', __FILE__ ) ); 
    954         wp_enqueue_script( 'bws-admin-scripts', plugins_url( 'js/general_script.js', __FILE__ ), array( 'jquery' ) ); 
     975        wp_enqueue_style( 'bws-admin-css', bws_menu_url( 'css/general_style.css' ) ); 
     976        wp_enqueue_script( 'bws-admin-scripts', bws_menu_url( 'js/general_script.js' ), array( 'jquery' ) ); 
    955977 
    956978        if ( isset( $_GET['page'] ) && in_array( $_GET['page'], array( 'bws_panel', 'bws_themes', 'bws_system_status' ) ) ) { 
    957             wp_enqueue_style( 'bws_menu_style', plugins_url( 'css/style.css', __FILE__ ) ); 
    958             wp_enqueue_script( 'bws_menu_script', plugins_url( 'js/bws_menu.js' , __FILE__ ) ); 
     979            wp_enqueue_style( 'bws_menu_style', bws_menu_url( 'css/style.css' ) ); 
     980            wp_enqueue_script( 'bws_menu_script', bws_menu_url( 'js/bws_menu.js' ) ); 
    959981            wp_enqueue_script( 'theme-install' ); 
    960982            add_thickbox(); 
     
    976998            </noscript> 
    977999        <?php } 
    978         if ( 4.2 > $wp_version ) { 
    979             $plugin_dir_array = explode( '/', plugin_basename( __FILE__ ) ); 
    980             $plugin_dir = $plugin_dir_array[0]; ?> 
     1000        if ( 4.2 > $wp_version ) { ?> 
    9811001            <style type="text/css"> 
    9821002                .bws_hide_settings_notice, 
     
    9851005                    height: 11px; 
    9861006                    border: none; 
    987                     background: url("<?php echo plugins_url( $plugin_dir . '/bws_menu/images/close_banner.png' ); ?>") no-repeat center center; 
     1007                    background: url("<?php echo bws_menu_url( 'images/close_banner.png' ); ?>") no-repeat center center; 
    9881008                    box-shadow: none; 
    9891009                    float: right; 
     
    10051025                    'label': '<?php esc_attr_e( "Add BWS Shortcode", "bestwebsoft" ); ?>', 
    10061026                    'title': '<?php esc_attr_e( "Add BWS Plugins Shortcode", "bestwebsoft" ); ?>', 
    1007                     'icon_url': '<?php echo plugins_url( "images/shortcode-icon.png" , __FILE__ ); ?>', 
     1027                    'icon_url': '<?php echo bws_menu_url( "images/shortcode-icon.png" ); ?>', 
    10081028                    'function_name': [ 
    10091029                        <?php foreach ( $bws_shortcode_list as $key => $value ) { 
    10101030                            if ( isset( $value['js_function'] ) ) 
    1011                                 echo "'" . $value['js_function'] . "',";     
     1031                                echo "'" . $value['js_function'] . "',"; 
    10121032                        } ?> 
    10131033                    ], 
     
    10231043                        'click'     => false, 
    10241044                        'onload'    => true 
    1025                     ),  
     1045                    ), 
    10261046                    'content'       => '<h3>' . __( 'Add shortcode', 'bestwebsoft' ) . '</h3><p>' . __( "Add BestWebSoft plugins' shortcodes using this button.", 'bestwebsoft' ) . '</p>', 
    1027                     'position' => array(  
     1047                    'position' => array( 
    10281048                        'edge'      => 'right' 
    10291049                    ), 
     
    10341054                bws_add_tooltip_in_admin( $tooltip_args ); 
    10351055            } 
    1036         }  
     1056        } 
    10371057    } 
    10381058} 
     
    10401060if ( ! function_exists ( 'bws_plugins_include_codemirror' ) ) { 
    10411061    function bws_plugins_include_codemirror() { 
    1042         wp_enqueue_style( 'codemirror.css', plugins_url( 'css/codemirror.css', __FILE__ ) ); 
    1043         wp_enqueue_script( 'codemirror.js', plugins_url( 'js/codemirror.js', __FILE__ ), array( 'jquery' ) ); 
     1062        wp_enqueue_style( 'codemirror.css', bws_menu_url( 'css/codemirror.css' ) ); 
     1063        wp_enqueue_script( 'codemirror.js', bws_menu_url( 'js/codemirror.js' ), array( 'jquery' ) ); 
    10441064    } 
    10451065} 
     
    10631083                return; 
    10641084            /* Default arguments */ 
    1065             $tooltip_args_default = array(  
     1085            $tooltip_args_default = array( 
    10661086                'tooltip_id'    => false, 
    1067                 'css_selector'  => false,  
     1087                'css_selector'  => false, 
    10681088                'actions'       => array( 
    10691089                    'click'     => true, 
    10701090                    'onload'    => false, 
    1071                 ),  
     1091                ), 
    10721092                'buttons'       => array( 
    10731093                    'close'     => array( 
     
    10771097                ), 
    10781098                'position' => array( 
    1079                     'edge'      => 'top',  
     1099                    'edge'      => 'top', 
    10801100                    'align'     => 'center', 
    1081                     'pos-left'  => 0,  
    1082                     'pos-top'   => 0,  
    1083                     'zindex'    => 10000  
     1101                    'pos-left'  => 0, 
     1102                    'pos-top'   => 0, 
     1103                    'zindex'    => 10000 
    10841104                ), 
    10851105                'set_timeout' => 0 
     
    11471167            global $bstwbsftwppdtplgns_tooltip_script_add; 
    11481168            if ( ! isset( $bstwbsftwppdtplgns_tooltip_script_add ) ) { 
    1149                 echo '<script type="text/javascript" src="' . plugins_url( 'js/bws_tooltip.js', __FILE__ ) . '"></script>'; 
     1169                echo '<script type="text/javascript" src="' . bws_menu_url( 'js/bws_tooltip.js' ) . '"></script>'; 
    11501170                $bstwbsftwppdtplgns_tooltip_script_add = true; 
    11511171            } 
     
    11641184if ( ! function_exists ( 'bws_form_restore_default_settings' ) ) { 
    11651185    function bws_form_restore_default_settings( $plugin_basename, $change_permission_attr = '' ) { ?> 
    1166         <form method="post" action="">           
     1186        <form method="post" action=""> 
    11671187            <p><?php _e( 'Restore all plugin settings to defaults', 'bestwebsoft' ); ?></p> 
    1168             <p>                  
     1188            <p> 
    11691189                <input <?php echo $change_permission_attr; ?> type="submit" class="button" value="<?php _e( 'Restore settings', 'bestwebsoft' ); ?>" /> 
    11701190            </p> 
     
    11811201            <form method="post" action=""> 
    11821202                <p> 
    1183                     <button class="button" name="bws_restore_confirm"><?php _e( 'Yes, restore all settings', 'bestwebsoft' ) ?></button> 
     1203                    <button class="button button-primary" name="bws_restore_confirm"><?php _e( 'Yes, restore all settings', 'bestwebsoft' ) ?></button> 
    11841204                    <button class="button" name="bws_restore_deny"><?php _e( 'No, go back to the settings page', 'bestwebsoft' ) ?></button> 
    11851205                    <?php wp_nonce_field( $plugin_basename, 'bws_settings_nonce_name' ); ?> 
     
    12051225if ( ! function_exists( 'bws_add_buttons' ) ){ 
    12061226    function bws_add_buttons( $plugin_array ) { 
    1207         $plugin_array['add_bws_shortcode'] = plugins_url( 'js/shortcode-button.js', __FILE__ ); 
     1227        $plugin_array['add_bws_shortcode'] = bws_menu_url( 'js/shortcode-button.js' ); 
    12081228        return $plugin_array; 
    12091229    } 
     
    12191239/* Generate inline content for the popup window when the "bws shortcode" button is clicked */ 
    12201240if ( ! function_exists( 'bws_shortcode_media_button_popup' ) ) { 
    1221     function bws_shortcode_media_button_popup() {  
     1241    function bws_shortcode_media_button_popup() { 
    12221242        global $bws_shortcode_list, $wp_version; 
    12231243        if ( $wp_version < '3.3' ) 
     
    12561276            <script type="text/javascript"> 
    12571277                (function($){ 
    1258                     $( '.bws_shortcode_insert' ).on( 'click',function() {  
     1278                    $( '.bws_shortcode_insert' ).on( 'click',function() { 
    12591279                        var shortcode = $( '#TB_ajaxContent #bws_shortcode_display' ).text(); 
    12601280                        if ( '' != shortcode ) { 
     
    12641284                            } else { 
    12651285                                tinyMCE.execCommand( 'mceInsertContent', false, shortcode ); 
    1266                             }                
     1286                            } 
    12671287                        } 
    12681288                        /* close the thickbox after adding shortcode to editor */ 
     
    12711291                })(jQuery); 
    12721292            </script> 
    1273         <?php }  
     1293        <?php } 
    12741294    } 
    12751295} 
     
    12821302        $content = '<p><a href="' . $url . '" target="_blank">' . __( 'Visit Help Center', 'bestwebsoft' ) . '</a></p>'; 
    12831303 
    1284         $screen->add_help_tab(  
     1304        $screen->add_help_tab( 
    12851305            array( 
    12861306                'id'      => $args['id'] . '_help_tab', 
     
    13221342                if ( $f = fopen( $index_file, 'w+' ) ) 
    13231343                    fclose( $f ); 
    1324             }                
     1344            } 
    13251345        } 
    13261346 
     
    13281348        $real_css_file = $folder . '/' . $css_file; 
    13291349 
    1330         $php_file = 'bws-custom-code.php';   
    1331         $real_php_file = $folder . '/' . $php_file;  
     1350        $php_file = 'bws-custom-code.php'; 
     1351        $real_php_file = $folder . '/' . $php_file; 
    13321352 
    13331353        $is_multisite = is_multisite(); 
     
    13381358 
    13391359            /* CSS */ 
    1340             $newcontent_css = wp_unslash( $_POST['bws_newcontent_css'] );    
     1360            $newcontent_css = wp_unslash( $_POST['bws_newcontent_css'] ); 
    13411361            if ( ! empty( $newcontent_css ) && isset( $_REQUEST['bws_custom_css_active'] ) ) { 
    13421362                if ( $is_multisite ) 
     
    13891409            } else { 
    13901410                $error .= __( 'Not enough permissions to create the file', 'bestwebsoft' ) . ' ' . $index_file . '. '; 
    1391             }                
     1411            } 
    13921412 
    13931413            if ( ! empty( $error ) ) 
     
    14211441        if ( ! empty( $message ) ) { ?> 
    14221442            <div id="message" class="below-h2 updated notice is-dismissible"><p><?php echo $message; ?></p></div> 
    1423         <?php } ?>       
     1443        <?php } ?> 
    14241444        <form action="" method="post"> 
    1425             <?php foreach ( array( 'css', 'php' ) as $extension ) { ?>               
     1445            <?php foreach ( array( 'css', 'php' ) as $extension ) { ?> 
    14261446                <p> 
    14271447                    <?php if ( 'css' == $extension ) 
     
    14411461                <p class="description"> 
    14421462                    <a href="<?php echo ( 'css' == $extension ) ? 'https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_started' : 'http://php.net/' ?>" target="_blank"> 
    1443                         <?php printf( __( 'Learn more about %s', 'bestwebsoft' ), strtoupper( $extension ) ); ?>                         
     1463                        <?php printf( __( 'Learn more about %s', 'bestwebsoft' ), strtoupper( $extension ) ); ?> 
    14441464                    </a> 
    1445                 </p>                 
     1465                </p> 
    14461466            <?php } 
    14471467            if ( ( ! file_exists( $real_css_file ) || is_writeable( $real_css_file ) ) && ( ! file_exists( $real_php_file ) || is_writeable( $real_php_file ) ) ) { ?> 
    14481468                <p class="submit"> 
    1449                     <input type="hidden" name="bws_update_custom_code" value="submit" />                     
    1450                     <?php submit_button( __( 'Save Changes', 'bestwebsoft' ), 'primary', 'submit', false );  
     1469                    <input type="hidden" name="bws_update_custom_code" value="submit" /> 
     1470                    <?php submit_button( __( 'Save Changes', 'bestwebsoft' ), 'primary', 'submit', false ); 
    14511471                    wp_nonce_field( 'bws_update_' . $css_file ); ?> 
    14521472                </p> 
     
    14571477            <?php } ?> 
    14581478        </form> 
    1459     <?php }  
     1479    <?php } 
    14601480} 
    14611481 
     
    14971517 
    14981518            if ( ! $is_multisite && ! empty( $bstwbsftwppdtplgns_options['custom_code']['bws-custom-code.php'] ) ) { 
    1499                  
     1519 
    15001520                if ( file_exists( $bstwbsftwppdtplgns_options['custom_code']['bws-custom-code.php'] ) ) { 
    15011521                    if ( ! defined( 'BWS_GLOBAL' ) ) 
     
    15421562        if ( empty( $bstwbsftwppdtplgns_options['bws_menu']['version'] ) ) { 
    15431563            /* remove options */ 
    1544             if ( $is_multisite )  
     1564            if ( $is_multisite ) 
    15451565                delete_site_option( 'bstwbsftwppdtplgns_options' ); 
    15461566            else 
     
    15711591                } 
    15721592            } 
    1573         }    
     1593        } 
     1594    } 
     1595} 
     1596 
     1597/** 
     1598 * Function to getting url to current BWS_Menu. 
     1599 * 
     1600 * @since 1.9.7 
     1601 */ 
     1602if ( ! function_exists ( 'bws_menu_url' ) ) { 
     1603    function bws_menu_url( $path = '' ) { 
     1604        $bws_menu_current_dir = str_replace( '\\', '/', dirname( __FILE__ ) ); 
     1605        $bws_menu_abspath = str_replace( '\\', '/', ABSPATH ); 
     1606        $bws_menu_current_url = site_url( str_replace( $bws_menu_abspath, '', $bws_menu_current_dir ) ); 
     1607 
     1608        return sprintf( '%s/%s', $bws_menu_current_url, $path ); 
    15741609    } 
    15751610} 
  • timesheet/trunk/bws_menu/bws_include.php

    r1437107 r1573199  
    55 
    66if ( ! function_exists ( 'bws_include_init' ) ) { 
    7     function bws_include_init( $base ) { 
     7    function bws_include_init( $base, $bws_menu_source = 'plugins' ) { 
    88        global $bstwbsftwppdtplgns_options, $bstwbsftwppdtplgns_added_menu; 
    99        if ( ! function_exists( 'get_plugin_data' ) ) 
    1010            require_once( ABSPATH . 'wp-admin/includes/plugin.php' ); 
    1111 
    12         $bws_menu_info = get_plugin_data( dirname( dirname( plugin_dir_path( __FILE__ ) ) ) . '/' . dirname( $base ) . '/bws_menu/bws_menu.php' ); 
     12        $wp_content_dir = defined( 'WP_CONTENT_DIR' ) ? WP_CONTENT_DIR : ABSPATH . 'wp-content'; 
     13        $wp_plugins_dir = defined( 'WP_PLUGIN_DIR' ) ? WP_PLUGIN_DIR : $wp_content_dir . '/plugins'; 
     14 
     15        if ( $bws_menu_source == 'plugins' ) { 
     16            $bws_menu_dir = $wp_plugins_dir . '/' .  dirname( $base ) . '/bws_menu/bws_menu.php'; 
     17        } else { 
     18            $bws_menu_dir = $wp_content_dir . '/themes/' . $base . '/inc/bws_menu/bws_menu.php'; 
     19        } 
     20 
     21        $bws_menu_info = get_plugin_data( $bws_menu_dir ); 
    1322        $bws_menu_version = $bws_menu_info["Version"]; 
    1423 
     
    4352            require_once( dirname( __FILE__ ) . '/bws_functions.php' ); 
    4453        } else if ( ! isset( $bstwbsftwppdtplgns_added_menu ) ) { 
     54 
    4555            $all_plugins = get_plugins(); 
     56            $all_themes = wp_get_themes(); 
     57 
    4658            foreach ( $bstwbsftwppdtplgns_options['bws_menu']['version'] as $key => $value ) { 
    47                 if ( array_key_exists( $key, $all_plugins ) ) { 
    48                     if ( $bws_menu_version < $value && is_plugin_active( $base ) ) { 
    49                         if ( ! isset( $plugin_with_newer_menu ) ) 
    50                             $plugin_with_newer_menu = $key; 
    51                         elseif ( $bstwbsftwppdtplgns_options['bws_menu']['version'][ $plugin_with_newer_menu ] < $bstwbsftwppdtplgns_options['bws_menu']['version'][ $key ] ) 
    52                             $plugin_with_newer_menu = $key; 
     59                if ( array_key_exists( $key, $all_plugins ) || array_key_exists( $key, $all_themes ) ) { 
     60                    if ( $bws_menu_version < $value && ( is_plugin_active( $key ) || preg_match( '|' . $key . '$|', get_template_directory() ) ) ) { 
     61                        if ( ! isset( $product_with_newer_menu ) ) 
     62                            $product_with_newer_menu = $key; 
     63                        elseif ( $bstwbsftwppdtplgns_options['bws_menu']['version'][ $product_with_newer_menu ] < $bstwbsftwppdtplgns_options['bws_menu']['version'][ $key ] ) 
     64                            $product_with_newer_menu = $key; 
    5365                    } 
    5466                } else { 
     
    6072                } 
    6173            } 
    62             if ( ! isset( $plugin_with_newer_menu ) ) 
    63                 $plugin_with_newer_menu = $base; 
    64             $plugin_with_newer_menu = explode( '/', $plugin_with_newer_menu ); 
    65             $wp_content_dir = defined( 'WP_CONTENT_DIR' ) ? basename( WP_CONTENT_DIR ) : 'wp-content'; 
    6674 
    67             if ( file_exists( ABSPATH . $wp_content_dir . '/plugins/' . $plugin_with_newer_menu[0] . '/bws_menu/bws_menu.php' ) ) { 
    68                 require_once( ABSPATH . $wp_content_dir . '/plugins/' . $plugin_with_newer_menu[0] . '/bws_menu/bws_menu.php' ); 
     75            if ( ! isset( $product_with_newer_menu ) ) 
     76                $product_with_newer_menu = $base; 
     77 
     78            $folder_with_newer_menu = explode( '/', $product_with_newer_menu ); 
     79 
     80            if ( array_key_exists( $product_with_newer_menu, $all_plugins ) ) { 
     81                $bws_menu_source = 'plugins'; 
     82                $bws_menu_new_dir = $wp_plugins_dir . '/' . $folder_with_newer_menu[0]; 
     83            } else if ( array_key_exists( $product_with_newer_menu, $all_themes ) ) { 
     84                $bws_menu_source = 'themes'; 
     85                $bws_menu_new_dir = $wp_content_dir . '/themes/' . $folder_with_newer_menu[0] . '/inc'; 
     86            } else { 
     87                $bws_menu_new_dir = ''; 
     88            } 
     89 
     90            if ( file_exists( $bws_menu_new_dir . '/bws_menu/bws_functions.php' ) ) { 
     91                require_once( $bws_menu_new_dir . '/bws_menu/bws_functions.php' ); 
     92                require_once( $bws_menu_new_dir . '/bws_menu/bws_menu.php' ); 
    6993            } else { 
    7094                require_once( dirname( __FILE__ ) . '/bws_menu.php' ); 
    71             } 
    72  
    73             if ( file_exists( ABSPATH . $wp_content_dir . '/plugins/' . $plugin_with_newer_menu[0] . '/bws_menu/bws_functions.php' ) ) { 
    74                 require_once( ABSPATH . $wp_content_dir . '/plugins/' . $plugin_with_newer_menu[0] . '/bws_menu/bws_functions.php' ); 
    75             } else { 
    7695                require_once( dirname( __FILE__ ) . '/bws_functions.php' ); 
    7796            } 
    7897 
    7998            $bstwbsftwppdtplgns_added_menu = true; 
    80         }        
     99        } 
    81100    } 
    82101} 
  • timesheet/trunk/bws_menu/bws_menu.php

    r1517164 r1573199  
    22/* 
    33* Function for displaying BestWebSoft menu 
    4 * Version: 1.9.4 
     4* Version: 1.9.7 
    55*/ 
    66 
     
    1919 
    2020            /* get $bws_plugins */ 
    21             require_once( dirname( __FILE__ ) . '/product_list.php' ); 
     21            require( dirname( __FILE__ ) . '/product_list.php' ); 
    2222 
    2323            $all_plugins = get_plugins(); 
     
    273273                <div class="bws-title"> 
    274274                    <a href="<?php echo self_admin_url( 'admin.php?page=bws_panel' ); ?>"> 
    275                         <img class="bws-logo" src="<?php echo plugins_url( 'images/bestwebsoft-logo-white.svg', __FILE__ ); ?>" /> 
     275                        <img class="bws-logo" src="<?php echo bws_menu_url( 'images/bestwebsoft-logo-white.svg' ); ?>" /> 
    276276                        BestWebSoft 
    277277                        <span>panel</span> 
     
    542542                                                    <a class="button button-secondary" href="<?php echo wp_nonce_url( 'admin.php?page=bws_panel&amp;bws_activate_plugin=' . $key_plugin, 'bws_activate_plugin' . $key_plugin ); ?>" title="<?php _e( 'Activate this plugin', 'bestwebsoft' ); ?>"><?php _e( 'Activate', 'bestwebsoft' ); ?></a> 
    543543                                                <?php } else { 
    544                                                     $install_url = isset( $value_plugin['install_url'] ) ? $value_plugin['install_url'] : esc_url( self_admin_url( 'plugin-install.php?tab=search&type=term&s=' . str_replace( ' ', '+', $value_plugin['name'] ) . '+BestWebSoft&plugin-search-input=Search+Plugins' ) ); ?> 
     544                                                    $install_url = isset( $value_plugin['install_url'] ) ? $value_plugin['install_url'] : esc_url( self_admin_url( 'plugin-install.php?tab=search&type=term&s=' . str_replace( ' ', '+', str_replace( '-', '', $value_plugin['name'] ) ) . '+BestWebSoft&plugin-search-input=Search+Plugins' ) ); ?> 
    545545                                                    <a class="button button-secondary" href="<?php echo $install_url; ?>" title="<?php _e( 'Install this plugin', 'bestwebsoft' ); ?>" target="_blank"><?php _e( 'Install Now', 'bestwebsoft' ); ?></a> 
    546546                                                <?php } 
     
    578578                    <?php } 
    579579                } elseif ( 'bws_themes' == $_GET['page'] ) { 
    580                     require_once( dirname( __FILE__ ) . '/product_list.php' ); ?> 
     580                    require( dirname( __FILE__ ) . '/product_list.php' ); ?> 
    581581                    <h1><?php _e( 'Themes', 'bestwebsoft' ); ?></h1> 
    582582                    <div id="availablethemes" class="bws-availablethemes"> 
     
    586586                                    $installed_theme = wp_get_theme( $theme->slug ); ?> 
    587587                                    <a class="screenshot" href="<?php echo esc_url( $theme->href ); ?>"> 
    588                                         <img src="<?php echo plugins_url( "icons/themes/" , __FILE__ ) . $theme->slug . '.png'; ?>" width='150' /> 
     588                                        <img src="<?php echo bws_menu_url( "icons/themes/" ) . $theme->slug . '.png'; ?>" width='150' /> 
    589589                                    </a> 
    590590                                    <h3><?php echo $theme->name; ?></h3> 
     
    607607                                        <div class="theme" tabindex="0"> 
    608608                                            <div class="theme-screenshot"> 
    609                                                 <img src="<?php echo plugins_url( "icons/themes/" , __FILE__ ) . $theme->slug . '.png'; ?>" alt="" /> 
     609                                                <img src="<?php echo bws_menu_url( "icons/themes/" ) . $theme->slug . '.png'; ?>" alt="" /> 
    610610                                            </div> 
    611611                                            <div class="theme-author"><?php printf( __( 'By %s', 'bestwebsoft' ), 'BestWebSoft' ); ?></div> 
     
    698698        global $bstwbsftwppdtplgns_banner_array; 
    699699        $bstwbsftwppdtplgns_banner_array = array( 
     700            array( 'sclbttns_hide_banner_on_plugin_page', 'social-buttons-pack/social-buttons-pack.php', '1.1.0' ), 
    700701            array( 'tmsht_hide_banner_on_plugin_page', 'timesheet/timesheet.php', '0.1.3' ), 
    701702            array( 'pgntn_hide_banner_on_plugin_page', 'pagination/pagination.php', '1.0.6' ), 
  • timesheet/trunk/bws_menu/css/general_style.css

    r1472159 r1573199  
    1 #adminmenu #toplevel_page_bws_panel .wp-submenu li:nth-child(4) a { 
    2     border-bottom: 1px solid #444; 
    3     padding-bottom: 12px; 
    4     margin-bottom: 5px; 
     1#adminmenu #toplevel_page_bws_panel .wp-submenu li:nth-child(5) a { 
     2    border-top: 1px solid #444; 
     3    padding-top: 12px; 
     4    margin-top: 6px; 
    55} 
    66.bws_info { 
     
    4949} 
    5050/* 
    51 * styles for pro_version settings and tooltip  
     51* styles for pro_version settings and tooltip 
    5252*/ 
    5353td.bws_pro_version, 
     
    6868    overflow: hidden; 
    6969} 
    70 .bws_table_bg {  
     70.bws_table_bg { 
    7171    background: #f8e268 url("../images/pattern.png"); 
    7272    opacity: 0.11; 
     
    8181    z-index: 5; 
    8282} 
    83 .bws_pro_version_table_bloc table.bws_pro_version {  
     83.bws_pro_version_table_bloc table.bws_pro_version { 
    8484    background: transparent; 
    8585    margin: 0; 
     
    8787    width: 100%; 
    8888} 
    89 table.bws_pro_version {  
     89table.bws_pro_version { 
    9090    background: #E0E0E0; 
    9191    border: 1px solid #AAA; 
     
    104104    border-top: 1px solid #AAA; 
    105105    position: relative; 
    106     z-index: 2;  
    107     padding: 10px;  
     106    z-index: 2; 
     107    padding: 10px; 
    108108    font-size: 14px; 
    109109} 
     
    148148} 
    149149/* style for mini-block (ex. google map) */ 
    150 .bws_pro_version_bloc_mini .bws_pro_version_table_bloc table.bws_pro_version {  
     150.bws_pro_version_bloc_mini .bws_pro_version_table_bloc table.bws_pro_version { 
    151151    width: auto; 
    152152} 
     
    156156    width: 200px; 
    157157} 
    158 .bws_pro_version_bloc_mini .bws_pro_version_tooltip a {     
     158.bws_pro_version_bloc_mini .bws_pro_version_tooltip a { 
    159159    display: inline-block; 
    160160    line-height: 1.5; 
     
    175175        text-align: center; 
    176176    } 
    177     .bws_pro_version_tooltip a {    
     177    .bws_pro_version_tooltip a { 
    178178        display: inline-block; 
    179179        line-height: 1.5; 
     
    190190 
    191191/* 
    192 * styles for banner  
     192* styles for banner 
    193193*/ 
    194194.bws_banner_on_plugin_page { 
     
    214214div.bws_banner_on_plugin_page .button { 
    215215    float: right; 
    216     border: none;  
     216    border: none; 
    217217    font-size: 14px; 
    218218    margin: 18px 40px; 
     
    233233} 
    234234.bws_banner_on_plugin_page .button:hover, 
    235 .bws_banner_on_plugin_page .button:focus {     
     235.bws_banner_on_plugin_page .button:focus { 
    236236    background: #222; 
    237237    color: #FFF; 
     
    263263    font-size: 16px; 
    264264    line-height: 26px; 
    265     padding: 13px 14px 14px;  
     265    padding: 13px 14px 14px; 
    266266} 
    267267.bws_banner_to_settings_joint .icon span.dashicons-admin-plugins { 
     
    321321@media screen and (max-device-width: 768px) { 
    322322    .bws_banner_on_plugin_page .text, 
    323     .bws_banner_on_plugin_page .icon,  
     323    .bws_banner_on_plugin_page .icon, 
    324324    .bws_banner_on_plugin_page .button_div, 
    325325    .bws_banner_on_plugin_page .button { 
     
    356356    margin: 3px 5px; 
    357357    width: 28px; 
    358     display: inline-block;     
     358    display: inline-block; 
    359359} 
    360360.bws_help_box:not(.dashicons) { 
  • timesheet/trunk/bws_menu/product_list.php

    r1517164 r1573199  
    9898        'install_url'   => 'http://bestwebsoft.com/products/wordpress/plugins/db-manager/download/?k=01ed9731780d87f85f5901064b7d76d8&pn=' . $bws_plugin_info["id"] . '&v=' . $bws_plugin_info["version"] . '&wp_v=' . $wp_version, 
    9999        'settings'      => 'admin.php?page=db-manager.php', 
    100         'icon'          => plugins_url( 'icons/plugins/', __FILE__ ) . 'db-manager.png' 
     100        'icon'          => bws_menu_url( 'icons/plugins/' ) . 'db-manager.png' 
    101101    ), 
    102102    'donate-button/donate.php' => array( 
     
    354354        'settings'      => 'admin.php?page=quotes-and-tips.php' 
    355355    ), 
     356    'rating-bws/rating-bws.php' => array( 
     357        'category'      => array( 'content-and-media' ), 
     358        'name'          => 'Rating', 
     359        'description'   => 'Add rating plugin to your WordPress website to receive feedback from your customers.', 
     360        'link'          => 'http://bestwebsoft.com/products/wordpress/plugins/rating/?k=c00e0824bb999735a3224616ef51f4c5&pn=' . $bws_plugin_info["id"] . '&v=' . $bws_plugin_info["version"] . '&wp_v=' . $wp_version, 
     361        'settings'      => 'admin.php?page=rating.php' 
     362    ), 
    356363    'realty/realty.php' => array( 
    357364        'category'      => array( 'content-and-media' ), 
     
    400407        'description'   => 'Add social media buttons and widgets to WordPress posts, pages and widgets. FB, Twitter, G+1, Pinterest, LinkedIn.', 
    401408        'link'          => 'http://bestwebsoft.com/products/wordpress/plugins/social-buttons-pack/?k=b6440fad9f54274429e536b0c61b42da&pn=' . $bws_plugin_info["id"] . '&v=' . $bws_plugin_info["version"] . '&wp_v=' . $wp_version, 
    402         'settings'      => 'admin.php?page=social-buttons.php' 
     409        'settings'      => 'admin.php?page=social-buttons.php', 
     410        'pro_version'   => 'social-buttons-pack-pro/social-buttons-pack-pro.php', 
     411        'purchase'      => 'http://bestwebsoft.com/products/wordpress/plugins/social-buttons-pack/buy/?k=e7059cacde0d275b224a5d995c9160fd&pn=' . $bws_plugin_info["id"] . '&v=' . $bws_plugin_info["version"] . '&wp_v=' . $wp_version, 
     412        'pro_settings'  => 'admin.php?page=social-buttons.php' 
    403413    ), 
    404414    'subscriber/subscriber.php' => array( 
  • timesheet/trunk/css/settings.css

    r1517164 r1573199  
    101101    background: #ffffff; 
    102102} 
     103#tmsht_display_ts_user_page_for_users_wrap, 
     104#tmsht_display_ts_report_page_for_users_wrap { 
     105    padding: 0 10px 0 25px; 
     106} 
    103107#tmsht_display_ts_user_page_for, 
    104108#tmsht_display_ts_report_page_for { 
     
    110114    margin: 0; 
    111115} 
    112  
    113116#tmsht_display_ts_user_page_for label, 
    114117#tmsht_display_ts_report_page_for label { 
     
    125128.tmsht_reminder_settings span:first-child { 
    126129    margin-left: 0; 
    127 } 
    128 #tmsht_display_ts_user_page_for_users_wrap, 
    129 #tmsht_display_ts_report_page_for_users_wrap { 
    130     padding: 0 10px 0 25px; 
    131130} 
    132131#tmsht_time_reminder { 
     
    169168        padding: 0 5px; 
    170169    } 
     170    #tmsht_settings_table tr td:last-child { 
     171        padding-right: 0; 
     172    } 
    171173    .tmsht_format_i18n { 
    172174        width: 100% !important; 
  • timesheet/trunk/css/ts_report_styles.css

    r1517164 r1573199  
    1313    float: left; 
    1414    vertical-align: top; 
     15} 
     16.rtl .tmsht_ts_report_filter_item { 
     17    float: right; 
    1518} 
    1619.tmsht_ts_report_filter_block { 
     
    3639    vertical-align: middle; 
    3740} 
     41.rtl .tmsht_ts_report_filter_item_legend .tmsht_ts_report_legend_color { 
     42    margin: -4px 0 0 5px; 
     43} 
    3844.tmsht_ts_report_filter_item_user { 
    3945    max-width: 360px; 
    4046    width: 100%; 
    4147    padding-right: 0; 
     48    float: left; 
     49} 
     50.rtl .tmsht_ts_report_filter_item_user { 
    4251    float: right; 
    4352} 
     
    114123    width: 37px; 
    115124} 
     125#tmsht_ts_report_table .tmsht_ts_report_table_td_fill_group { 
     126    width: 100%; 
     127    height: 100%; 
     128} 
    116129#tmsht_ts_report_table .tmsht_ts_report_table_td_fill { 
    117     position: absolute; 
    118     width: 100%; 
     130    width: 8.333333333%; 
    119131    height: 100%; 
    120     top: 0; 
    121     left: 0; 
     132    float: left; 
     133} 
     134.rtl #tmsht_ts_report_table .tmsht_ts_report_table_td_fill { 
     135    float: right; 
    122136} 
    123137#tmsht_ts_report_table .tmsht_ts_report_table_td_readonly_fill { 
     
    273287    background-color: rgba( 0, 0, 0, 0.2 ); 
    274288} 
    275 @media screen and (max-width: 1205px) { 
    276     .tmsht_ts_report_filter_item_user { 
    277         float: left; 
    278     } 
    279 } 
    280289@media screen and (max-width: 782px) { 
    281290    .tmsht_ts_report_filter_item { 
  • timesheet/trunk/css/ts_user_styles.css

    r1517164 r1573199  
    9898    color: #0592ce !important; 
    9999} 
    100 #tmsht_ts_user_table tr.tmsht_ts_user_table_tr_today td { 
     100#tmsht_ts_user_table.tmsht_ts_user_table_head_timeline tr.tmsht_ts_user_table_tr_today td { 
    101101    border-top: 2px solid #0592ce !important; 
    102102    border-bottom: 2px solid #0592ce !important; 
     103} 
     104#tmsht_ts_user_table.tmsht_ts_user_table_head_dateline .tmsht_ts_user_table_td_highlight_today_right_border { 
     105    border-right: 2px solid #0592ce !important; 
    103106} 
    104107#tmsht_ts_user_table td.tmsht_ts_user_table_td_time { 
     
    110113    vertical-align: top; 
    111114} 
    112 #tmsht_ts_user_table td.tmsht_ts_user_table_td_time:hover { 
     115#tmsht_ts_user_table td.tmsht_ts_user_table_td_highlighted { 
    113116    opacity: 0.8; 
    114117} 
    115 #tmsht_ts_user_table .tmsht_ts_user_table_td_fill { 
     118#tmsht_ts_user_table td.tmsht_ts_user_table_td_highlighted:before { 
     119    content: ''; 
    116120    position: absolute; 
    117121    width: 100%; 
    118122    height: 100%; 
    119     top: 0; 
    120123    left: 0; 
     124    right: 0; 
     125    background: rgba( 160, 195, 255, 0.2 ); 
     126    z-index: 2; 
    121127    pointer-events: none; 
     128} 
     129.tmsht_ts_user_table_td_selecting .tmsht_ts_user_table_td_fill_group { 
     130    visibility: hidden; 
     131} 
     132#tmsht_ts_user_table .tmsht_ts_user_table_td_fill_group { 
     133    width: 100%; 
     134    height: 100%; 
     135} 
     136#tmsht_ts_user_table.tmsht_ts_user_table_head_timeline .tmsht_ts_user_table_td_fill { 
     137    width: 8.333333333%; 
     138    height: 100%; 
     139    float: left; 
     140} 
     141.rtl #tmsht_ts_user_table.tmsht_ts_user_table_head_timeline .tmsht_ts_user_table_td_fill { 
     142    float: right; 
     143} 
     144#tmsht_ts_user_table.tmsht_ts_user_table_head_dateline .tmsht_ts_user_table_td_fill { 
     145    width: 100%; 
     146    height: 8.333333333%; 
    122147} 
    123148#tmsht_ts_user_table .tmsht_ts_user_table_td_readonly_fill { 
     
    240265.tmsht_select_legend_display { 
    241266    position: relative; 
    242     padding: 3px 25px 3px 32px; 
     267    padding: 3px 25px 3px 3px; 
    243268    margin: 1px; 
    244269} 
    245270.rtl .tmsht_select_legend_display { 
    246     padding: 3px 32px 3px 25px; 
     271    padding: 3px 3px 3px 25px; 
    247272} 
    248273.tmsht_select_legend_label_name, 
     
    305330    color: #32373c; 
    306331    outline: 0; 
    307     z-index: 1; 
     332    z-index: 3; 
    308333    -webkit-transition: 50ms border-color ease-in-out; 
    309334    transition: 50ms border-color ease-in-out; 
     
    343368    clear:both; 
    344369} 
     370#tmsht_ts_user_table_selection { 
     371    display: none; 
     372    position: absolute; 
     373    border: 1px solid #4285f4; 
     374    background: none; 
     375    z-index: 2; 
     376    pointer-events: none; 
     377} 
    345378#tmsht_ts_user_table_area .ui-selectable-helper { 
    346     position: absolute; 
    347     z-index: 100; 
    348     background: rgba( 0, 0, 0, 0.1 ); 
    349     border: 1px dashed rgba( 0, 0, 0, 0.3 ); 
    350 } 
    351 /* Context menu */ 
     379    display: none; 
     380    position: absolute; 
     381    z-index: -2; 
     382} 
     383/* Context menu TS table*/ 
    352384#tmsht_ts_user_context_menu { 
    353385    display: none; 
     
    369401} 
    370402#tmsht_ts_user_context_menu .tmsht_ts_user_context_menu_item { 
     403    max-width: 240px; 
    371404    margin: 0; 
    372405    padding: 5px 9px 5px 5px; 
    373     white-space: nowrap; 
    374406    cursor: default; 
    375407} 
     
    381413    background-color: #0073aa; 
    382414} 
     415.tmsht_ts_user_context_menu_item_separator { 
     416    border-top: 1px solid #cccccc; 
     417    border-bottom: 1px solid #f5f5f5; 
     418    padding: 0 !important; 
     419    margin: 5px !important; 
     420} 
    383421.tmsht_ts_user_context_menu_text { 
    384422    vertical-align: top; 
    385423} 
    386424.tmsht_ts_user_context_menu_icon { 
     425    display: inline-block; 
     426    min-width: 20px; 
     427    min-height: 20px; 
    387428    margin: 0 5px 0 0; 
    388429    font-size: 18px; 
    389430    vertical-align: bottom; 
     431} 
     432.rtl .tmsht_ts_user_context_menu_icon { 
     433    margin: 0 0 0 5px; 
    390434} 
    391435.tmsht_ts_user_context_menu_link { 
     
    408452    .tmsht_select_legend_display { 
    409453        position: relative; 
    410         padding: 7px 25px 7px 32px; 
     454        padding: 7px 25px 7px 7px; 
    411455        margin: 1px; 
    412456    } 
     
    419463    } 
    420464    .rtl .tmsht_select_legend_display { 
    421         padding: 7px 32px 7px 25px; 
     465        padding: 7px 7px 7px 25px; 
    422466    } 
    423467    .tmsht_select_legend_option { 
  • timesheet/trunk/js/settings.js

    r1517164 r1573199  
    4040                    $this.slider( 'values', 1, timeline_to ); 
    4141                }); 
    42  
    4342            }, 
    4443            'slide' : function( event, ui ) { 
     
    5352                $( 'input[name="tmsht_ts_timeline_to"]' ).val( timeline_to ).trigger( 'change' ); 
    5453            } 
    55  
    5654        }); 
    5755 
  • timesheet/trunk/js/ts_report_script.js

    r1517164 r1573199  
    11(function($){ 
    22    $( document ).ready( function() { 
     3        var is_rtl = $( 'body' ).hasClass( 'rtl' ); 
     4 
     5        /* Users filter position */ 
     6        $( window ).on( 'resize', function() { 
     7            var filters_width = 0; 
     8            $( '.tmsht_ts_report_filter_item' ).each( function() { 
     9                var $filter_item = $( this ); 
     10                filters_width += $filter_item.innerWidth(); 
     11            }); 
     12 
     13            if ( $( '.tmsht_ts_report_filter' ).width() > filters_width ) { 
     14                if ( ! is_rtl ) { 
     15                    $( '.tmsht_ts_report_filter_item_user' ).css( 'float', 'right' ); 
     16                } else { 
     17                    $( '.tmsht_ts_report_filter_item_user' ).css( 'float', 'left' ); 
     18                } 
     19            } else { 
     20                if ( ! is_rtl ) { 
     21                    $( '.tmsht_ts_report_filter_item_user' ).css( 'float', 'left' ); 
     22                } else { 
     23                    $( '.tmsht_ts_report_filter_item_user' ).css( 'float', 'right' ); 
     24                } 
     25            } 
     26        }).trigger( 'resize' ); 
     27 
    328        /* Date picker */ 
    429        tmsht_datetime_options = tmsht_datetime_options || {}; 
  • timesheet/trunk/js/ts_user_script.js

    r1517164 r1573199  
    11(function($){ 
    22    $( document ).ready( function() { 
     3        var get_legend = function( legend_id ) { 
     4            var legend_id = legend_id || false, 
     5                $ts_legend = $( '.tmsht_ts_user_legend' ), 
     6                $ts_legend_option = null; 
     7 
     8            if ( legend_id !== false ) { 
     9                $ts_legend_option = $ts_legend.find( 'option[value="' + legend_id + '"]' ); 
     10            } else { 
     11                $ts_legend_option = $ts_legend.find( 'option:selected' ); 
     12            } 
     13 
     14            return { 
     15                'id'    : $ts_legend_option.val(), 
     16                'title' : $ts_legend_option.text(), 
     17                'color' : $ts_legend_option.attr( 'data-color' ) 
     18            } 
     19        }, 
     20        is_rtl = $( 'body' ).hasClass( 'rtl' ); 
     21 
    322        /* Date picker */ 
    423        tmsht_datetime_options = tmsht_datetime_options || {}; 
     
    3352            return false; 
    3453        }); 
    35         /* Date picker */ 
    3654 
    3755        /* Fake selector legends */ 
     
    4159        $( '#tmsht_ts_user_table' ).tmsht_ts_user_table_handler(); 
    4260 
    43         var get_legend = function( legend_id ) { 
    44             var legend_id = legend_id || false, 
    45                 $ts_legend = $( '.tmsht_ts_user_legend' ), 
    46                 $ts_legend_option = null; 
    47  
    48             if ( legend_id !== false ) { 
    49                 $ts_legend_option = $ts_legend.find( 'option[value="' + legend_id + '"]' ); 
    50             } else { 
    51                 $ts_legend_option = $ts_legend.find( 'option:selected' ); 
    52             } 
    53  
    54             return { 
    55                 'id'    : $ts_legend_option.val(), 
    56                 'title' : $ts_legend_option.text(), 
    57                 'color' : $ts_legend_option.attr( 'data-color' ) 
    58             } 
    59         } 
    60  
     61        /* On preparation transposition data */ 
     62        $( '#tmsht_ts_user_table' ).on( 'set_transposition_data', function() { 
     63            var $tbl = $( '#tmsht_ts_user_table' ), 
     64                $trs = $tbl.find( 'tbody tr' ); 
     65                data = { 
     66                    'current_date' : 'undefined', 
     67                    'dates'        : {} 
     68                } 
     69 
     70            $trs.each( function( index ) { 
     71                var $tr = $( this ), 
     72                    tr_date = $tr.attr( 'data-tr-date' ); 
     73 
     74                if ( $tr.hasClass( 'tmsht_ts_user_table_tr_today' ) ) { 
     75                    data.current_date = tr_date; 
     76                } 
     77 
     78                data.dates[ index ] = tr_date; 
     79            }); 
     80 
     81            $tbl.data( 'transposition_data', data ); 
     82 
     83        }).trigger( 'set_transposition_data' ); 
     84 
     85        /* On transposition button click */ 
     86        $( '#tmsht_transposition_tbl' ).on( 'click', function( e ) { 
     87            var $table = $( '#tmsht_ts_user_table' ), 
     88                count = $table.find( 'tr:first td' ).length - 1, 
     89                trs_data = $table.data( 'transposition_data' ), 
     90                data = {}; 
     91 
     92            for ( $i = 0; $i <= count; $i++ ) { 
     93                data[ $i ] = $table.find( 'thead, tbody' ).children().find( 'td:eq(' + $i + ')' ); 
     94            } 
     95 
     96            $table.find( 'thead, tbody, tfoot' ).empty(); 
     97 
     98            for ( $i = 0; $i <= count; $i++ ) { 
     99                if ( $i == 0 ) { 
     100                    $table.find( 'thead' ).append( $( '<tr/>' ).append( data[ $i ] ) ); 
     101                } else { 
     102                    $table.find( 'tbody' ).append( $( '<tr/>' ).append( data[ $i ] ) ); 
     103                } 
     104            } 
     105 
     106            $tfoot = $table.find( 'thead tr' ).clone(); 
     107            $tfoot.find( 'input' ).remove(); 
     108            $table.find( 'tfoot' ).append( $tfoot ); 
     109 
     110            $table.attr( 'class', function() { 
     111                var classes = $( this ).attr( 'class' ); 
     112 
     113                if ( $( this ).hasClass( 'tmsht_ts_user_table_head_timeline' ) ) { 
     114                    return classes.replace( 'tmsht_ts_user_table_head_timeline', 'tmsht_ts_user_table_head_dateline' ); 
     115                } else { 
     116                    return classes.replace( 'tmsht_ts_user_table_head_dateline', 'tmsht_ts_user_table_head_timeline' );; 
     117                } 
     118            }); 
     119 
     120            if ( $table.is( '.tmsht_ts_user_table_head_timeline' ) ) { 
     121                $table.find( 'tbody tr' ).each( function( index ) { 
     122                    var $tr = $( this ); 
     123 
     124                    $tr.addClass( 'tmsht_ts_user_table_tr' ) 
     125                    $tr.attr( 'data-tr-date', trs_data.dates[ index ] ); 
     126 
     127                    if ( trs_data.dates[ index ] == trs_data.current_date ) { 
     128                        $tr.addClass( 'tmsht_ts_user_table_tr_today' ); 
     129                    } 
     130 
     131                }); 
     132            } else if ( $table.is( '.tmsht_ts_user_table_head_dateline' ) ) { 
     133                var $div = $table.find( 'thead tr td.tmsht_ts_user_table_td_dateline .tmsht_ts_user_table_highlight_today' ), 
     134                    index = $div.parent().index(), 
     135                    $tds = $table.find( 'tr' ).find( 'td:eq(' + index + ')' ), 
     136                    $tds_prev = ( ! is_rtl ) ? $tds.prev() : $tds.next(); 
     137 
     138                $tds.addClass( 'tmsht_ts_user_table_td_highlight_today_right_border' ); 
     139                $tds_prev.addClass( 'tmsht_ts_user_table_td_highlight_today_right_border' ); 
     140            } 
     141 
     142            $( '#tmsht_ts_user_table' ).trigger( 'selection' ); 
     143            e.preventDefault(); 
     144            return false; 
     145        }); 
     146 
     147        /*********************************************************** 
     148         * Actions with TS table 
     149         ***********************************************************/ 
     150 
     151        /* Show select area in TS table */ 
     152        $( '#tmsht_ts_user_table' ).on( 'selection', function() { 
     153            var $tbl = $( this ), 
     154                $trs = $tbl.find( 'tbody tr' ).has( '.tmsht_ts_user_table_td_highlighted' ), 
     155                $tds = $trs.find( '.tmsht_ts_user_table_td_highlighted' ); 
     156 
     157            if ( $tds.length > 0 ) { 
     158                var $td_in_first_tr = ( ! is_rtl ) ? $trs.filter( ':first' ).find( '.tmsht_ts_user_table_td_highlighted:first' ) : $trs.filter( ':first' ).find( '.tmsht_ts_user_table_td_highlighted:last' ), 
     159                    $tr_first = $td_in_first_tr.parent(), 
     160                    $tds_in_first_tr = $tr_first.find( '.tmsht_ts_user_table_td_highlighted' ), 
     161                    tr_index = $tr_first.index(), 
     162                    trs_count = $tds.length / $tds_in_first_tr.length, 
     163                    select_top = $td_in_first_tr.offset().top - $tbl.offset().top, 
     164                    select_left = $td_in_first_tr.offset().left - $tbl.offset().left, 
     165                    select_width = 0, 
     166                    select_height = 0, 
     167                    isWebkit = $.browser.webkit; 
     168 
     169                $tds_in_first_tr.each( function() { 
     170                    select_width += $( this ).outerWidth(); 
     171                }); 
     172 
     173                for ( var i = tr_index; i <= tr_index + trs_count ; i++ ) { 
     174                    select_height += $tbl.find( 'tbody tr:eq(' + i + ') .tmsht_ts_user_table_td_highlighted:first' ).outerHeight(); 
     175                } 
     176 
     177                $( '#tmsht_ts_user_table_selection:hidden' ).show(); 
     178 
     179                $( '#tmsht_ts_user_table_selection:visible' ).css({ 
     180                    'top'    : select_top, 
     181                    'left'   : select_left, 
     182                    'width'  : select_width + 1, 
     183                    'height' : select_height + 1, 
     184                    'margin' : ( ! isWebkit ) ? '-1px 0 0 -1px' : '' 
     185                }); 
     186            } 
     187        }).trigger( 'selection' ); 
     188 
     189        /* Hide select area in TS table */ 
     190        $( '#tmsht_ts_user_table' ).on( 'deselection', function() { 
     191            $( this ).find( 'tbody td.tmsht_ts_user_table_td_highlighted' ).removeClass( 'tmsht_ts_user_table_td_highlighted' ); 
     192            $( '#tmsht_ts_user_table_selection:visible' ).hide(); 
     193        }); 
     194 
     195        /* Add selection event in TS table */ 
     196        $( '#tmsht_ts_user_table' ).on( 'add_event', function( event, e ) { 
     197            $( this ).data( 'selecting', e ); 
     198        }).data( 'selecting', false ); 
     199 
     200        /* Apply status to selected cells in TS table */ 
     201        $( '#tmsht_ts_user_table' ).on( 'apply_status', function( event, legend_id ) { 
     202            var $tbl = $( this ), 
     203                $tds = $tbl.find( '.tmsht_ts_user_table_td_highlighted' ); 
     204 
     205            $tds.each( function() { 
     206                var $td = $( this ), 
     207                    $tr = $td.parent(), 
     208                    $ts_user_table_td_fill = $td.find( '.tmsht_ts_user_table_td_fill' ), 
     209                    legend = get_legend( legend_id ); 
     210 
     211                $ts_user_table_td_fill 
     212                    .attr( 'data-legend-id', legend.id ) 
     213                    .css( 'background-color', legend.color ) 
     214                    .removeAttr( 'data-td-group' ) 
     215                    .removeAttr( 'title' ); 
     216 
     217                $tr.find( '.tmsht_tr_date[disabled="disabled"]' ).attr( 'disabled', false ); 
     218            }); 
     219 
     220            $( '#tmsht_ts_user_table' ).tmsht_ts_user_table_handler( 'show_details' ); 
     221        }); 
     222 
     223        /* Get mobile events in TS table */ 
     224        $( '#tmsht_ts_user_table tbody' ).on( 'touchstart', function( event ) { 
     225            $( this ).data( 'mobile_event', event ); 
     226        }).on( 'touchmove', function( event ) { 
     227            $( this ).data( 'mobile_event', event ); 
     228        }).on( 'touchend', function( event ) { 
     229            $( this ).data( 'mobile_event', event ); 
     230        }).data( 'mobile_event', false ); 
     231 
     232        /* Select cells in TS table */ 
    61233        $( '#tmsht_ts_user_table tbody' ).selectable({ 
    62234            filter   : 'td', 
    63235            cancel   : '.tmsht_ts_user_table_td_readonly', 
    64236            appendTo : '#tmsht_ts_user_table_area', 
     237            start : function( event ) { 
     238                $( '.tmsht_select_legend' ).filter( '[data-status="open"]' ).trigger( 'select.close' ); 
     239                $( '#tmsht_ts_user_context_menu' ).trigger( 'hide_context_menu' ); 
     240            }, 
    65241            selecting: function( event, ui ) { 
    66  
    67                 $( '#tmsht_ts_user_context_menu' ).trigger( 'hide_context_menu' ); 
    68  
    69                 /* Fix select area */ 
    70                 $( '.ui-selectable-helper' ).css({ 
    71                     'margin-top'  : -1 * ( parseInt( ( $( '#tmsht_ts_user_table' ).offset().top ) ) - 2 ), 
    72                     'margin-left' : -1 * ( parseInt( ( $( '#tmsht_ts_user_table' ).offset().left ) ) - 2 ) 
    73                 }); 
    74  
    75                 if ( $( ui.selecting ).is( '.tmsht_ts_user_table_td_time' ) ) { 
    76                     var $td = $( ui.selecting ), 
    77                         $tr = $td.parent(), 
    78                         prev_legend_id = $td.attr( 'data-legend-id' ), 
    79                         $td_fill = $td.find( '.tmsht_ts_user_table_td_fill' ), 
    80                         legend = get_legend(); 
    81  
    82  
    83                     if ( $td.hasClass( 'tmsht_ts_user_table_td_readonly' ) ) { 
    84                         return false; 
    85                     } 
    86  
    87                     $td 
    88                         .attr( 'data-legend-id', legend.id ) 
    89                         .attr( 'data-prev-legend-id', prev_legend_id ) 
    90                         .removeAttr( 'title' ) 
    91                         .removeAttr( 'data-td-group' ); 
    92  
    93                     $td_fill.css( 'background-color', legend.color ); 
    94  
    95                     if ( legend.id > 0 ) { 
    96                         $td.addClass( 'tmsht_ts_user_table_td_selected' ); 
    97                     } else { 
    98                         $td.removeClass( 'tmsht_ts_user_table_td_selected' ); 
    99                     } 
    100  
    101                     $tr.find( '.tmsht_tr_date[disabled="disabled"]' ).attr( 'disabled', false ); 
     242                var $td = $( ui.selecting ); 
     243 
     244                if ( $td.hasClass( 'tmsht_ts_user_table_td_readonly' ) ) { 
     245                    return false; 
     246                } 
     247 
     248                if ( ! $( '#tmsht_ts_user_table' ).data( 'selecting' ) && ! $td.hasClass( 'tmsht_ts_user_table_td_dateline' ) ) { 
     249                    $( '#tmsht_ts_user_table' ).trigger( 'deselection' ); 
     250                } 
     251 
     252                $( '#tmsht_ts_user_table' ).trigger( 'add_event', true ); 
     253 
     254                if ( $td.is( '.tmsht_ts_user_table_td_time' ) ) { 
     255                    $td.addClass( 'tmsht_ts_user_table_td_highlighted' ); 
    102256                } 
    103257            }, 
    104258            unselecting: function( event, ui ) { 
    105                 if ( $( ui.unselecting ).is( '.tmsht_ts_user_table_td_time' ) ) { 
    106                     var $td = $( ui.unselecting ), 
    107                         $tr = $td.parent(), 
    108                         prev_legend_id = $td.attr( 'data-prev-legend-id' ), 
    109                         $td_fill = $td.find( '.tmsht_ts_user_table_td_fill' ), 
    110                         legend = get_legend( prev_legend_id ); 
    111  
    112                     $td 
    113                         .attr( 'data-legend-id', legend.id ) 
    114                         .removeAttr( 'data-prev-legend-id' ); 
    115  
    116                     $td_fill.css( 'background-color', legend.color ); 
    117  
    118                     if ( legend.id > 0 ) { 
    119                         $td.addClass( 'tmsht_ts_user_table_td_selected' ); 
    120                     } else { 
    121                         $td.removeClass( 'tmsht_ts_user_table_td_selected' ); 
    122                     } 
     259 
     260                var $td = $( ui.unselecting ); 
     261 
     262                if ( $td.hasClass( 'tmsht_ts_user_table_td_readonly' ) ) { 
     263                    return false; 
     264                } 
     265 
     266                if ( $td.is( '.tmsht_ts_user_table_td_time' ) ) { 
     267                    $td.removeClass( 'tmsht_ts_user_table_td_highlighted' ); 
    123268                } 
    124269            }, 
     
    127272            }, 
    128273            stop: function( event, ui ) { 
    129                 $( '#tmsht_ts_user_table' ).tmsht_ts_user_table_handler( 'show_details' ); 
    130             } 
    131         }); 
    132  
    133         $( '#tmsht_transposition_tbl' ).on( 'click', function(e) { 
    134             var $table = $( '#tmsht_ts_user_table' ), 
    135                 count = $table.find( 'tr:first td' ).length - 1, 
    136                 data = {}; 
    137  
    138             for ( $i = 0; $i <= count; $i++ ) { 
    139                 data[ $i ] = $table.find( 'thead, tbody' ).children().find( 'td:eq(' + $i + ')' ); 
    140             } 
    141  
    142             $table.find( 'thead, tbody, tfoot' ).empty(); 
    143  
    144             for ( $i = 0; $i <= count; $i++ ) { 
    145                 if ( $i == 0 ) { 
    146                     $table.find( 'thead' ).append( $( '<tr/>' ).append( data[ $i ] ) ); 
     274                var mobile_event = $( '#tmsht_ts_user_table tbody' ).data( 'mobile_event' ) 
     275 
     276                if ( mobile_event.type == 'touchend' ) { 
     277                    $( '#tmsht_ts_user_context_menu' ).trigger( 'show_context_menu', mobile_event ); 
     278                } 
     279 
     280                $( '#tmsht_ts_user_table' ) 
     281                    .trigger( 'selection' ) 
     282                    .trigger( 'add_event', false ); 
     283            } 
     284        }); 
     285 
     286        /*********************************************************** 
     287         * Actions with context menu in TS table 
     288         ***********************************************************/ 
     289 
     290        /* On right click in TS table cell */ 
     291        $( '#tmsht_ts_user_table' ).on( 'contextmenu', '.tmsht_ts_user_table_td_time', function( e ) { 
     292            var $td = $( this ); 
     293 
     294            if ( ! $td.hasClass( 'tmsht_ts_user_table_td_readonly' ) ) { 
     295 
     296                /* If clicked not in selected cell */ 
     297                if ( ! $td.hasClass( 'tmsht_ts_user_table_td_highlighted' ) ) { 
     298                    $( '#tmsht_ts_user_table' ).trigger( 'deselection' ); 
     299                    $td.addClass( 'tmsht_ts_user_table_td_highlighted' ); 
     300                    $( '#tmsht_ts_user_table' ).trigger( 'selection' ) 
     301                } 
     302 
     303                if ( $td.is( '.tmsht_ts_user_table_td_highlighted' ) ) { 
     304                    $( '#tmsht_ts_user_context_menu' ).trigger( 'show_context_menu', e ); 
    147305                } else { 
    148                     $table.find( 'tbody' ).append( $( '<tr/>' ).append( data[ $i ] ) ); 
    149                 } 
    150             } 
    151  
    152             $tfoot = $table.find( 'thead tr' ).clone(); 
    153             $tfoot.find( 'input' ).remove(); 
    154             $table.find( 'tfoot' ).append( $tfoot ); 
    155  
    156             $table.attr( 'class', function() { 
    157                 var classes = $( this ).attr( 'class' ); 
    158  
    159                 if ( $( this ).hasClass( 'tmsht_ts_user_table_head_timeline' ) ) { 
    160                     return classes.replace( 'tmsht_ts_user_table_head_timeline', 'tmsht_ts_user_table_head_dateline' ); 
    161                 } else { 
    162                     return classes.replace( 'tmsht_ts_user_table_head_dateline', 'tmsht_ts_user_table_head_timeline' );; 
    163                 } 
    164             }); 
     306                    $( '#tmsht_ts_user_context_menu' ).trigger( 'hide_context_menu' ); 
     307                } 
     308            } 
    165309            e.preventDefault(); 
    166310            return false; 
    167311        }); 
    168312 
    169  
    170         /* On right click */ 
    171         $( '#tmsht_ts_user_table' ).on( 'contextmenu', '.tmsht_ts_user_table_td_time', function( e ) { 
    172             var $td = $( this ); 
    173  
    174             if ( ! $td.hasClass( 'tmsht_ts_user_table_td_readonly' ) ) { 
    175                 if ( $td.is( '[data-legend-id!="-1"]' ) ) { 
    176                     $( '#tmsht_ts_user_context_menu' ).trigger( 'show_context_menu', e ); 
    177                     $td.addClass( 'tmsht_context_menu' ); 
    178                 } else { 
    179                     $( '#tmsht_ts_user_context_menu' ).trigger( 'hide_context_menu' ); 
    180                 } 
    181             } 
    182             e.preventDefault(); 
    183             return false; 
    184         }); 
    185  
    186         /* On taphold */ 
    187         var touch_timer; 
    188         $( '#tmsht_ts_user_table tbody' ).on( 'touchstart', '.tmsht_ts_user_table_td_time', function( e ) { 
    189             var $td = $( this ); 
    190  
    191             if ( ! $td.hasClass( 'tmsht_ts_user_table_td_readonly' ) ) { 
    192                 touch_timer = setTimeout( function() { 
    193                     $( '#tmsht_ts_user_context_menu' ).trigger( 'show_context_menu', e ); 
    194                     $td.addClass( 'tmsht_context_menu' ); 
    195                 }, 600 ); 
    196             } 
    197         }).on( 'touchend touchmove', '.tmsht_ts_user_table_td_time', function() { 
    198             if ( touch_timer ) { 
    199                 clearTimeout( touch_timer ); 
    200             } 
    201         }); 
    202  
    203         /* Context menu */ 
     313        /* TS table context menu */ 
    204314        $( '#tmsht_ts_user_context_menu' ).on( 'show_context_menu', function( event, e ) { 
    205315            var $context_menu = $( this ), 
     
    210320                coorX = coorY = 0; 
    211321 
    212             if ( e.type == 'touchstart' ) { /* mobile */ 
     322            if ( e.type == 'touchend' ) { /* mobile */ 
    213323                var touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0]; 
    214324                coorX = touch.clientX + window.scrollX; 
    215325                coorY = touch.clientY + window.scrollY; 
    216326            } else { /* desktop */ 
    217                 coorX = e.clientX + window.scrollX; 
    218                 coorY = e.clientY + window.scrollY; 
    219             } 
    220  
    221             coorX = coorX - ts_table_offset_left; 
     327                coorX = e.pageX; 
     328                coorY = e.pageY; 
     329            } 
    222330 
    223331            if ( $wp_bar.css( 'position' ) == 'fixed' ) { 
     
    225333            } 
    226334 
    227             margin_left = ( $( window ).width() > coorX + width + ts_table_offset_left ) ? 0 : -1 * width; 
     335            if ( ! is_rtl ) { 
     336                coorX = coorX - ts_table_offset_left; 
     337                margin_left = ( $( window ).width() > coorX + width ) ? 0 : -1 * width; 
     338            } else { 
     339                margin_left = ( coorX - width < 0 ) ? 0 : -1 * width; 
     340            } 
    228341 
    229342            $context_menu 
     
    238351                .attr( 'data-visible', 'true' ); 
    239352        }).on( 'hide_context_menu', function() { 
    240             var $context_menu = $( this ), 
    241                 $td = $( '#tmsht_ts_user_table tbody td.tmsht_context_menu' ); 
    242  
    243             $td.removeClass( 'tmsht_context_menu' ); 
     353            var $context_menu = $( this ); 
     354 
    244355            $context_menu 
    245356                .hide() 
     
    247358        }); 
    248359 
     360        /* On select item in context menu in TS table */ 
     361        $( '.tmsht_ts_user_context_menu_item.tmsht_ts_user_context_menu_item_enabled' ).on( 'click', function() { 
     362            var $context_menu_item = $( this ), 
     363                action = $context_menu_item.attr( 'data-action' ); 
     364 
     365            switch( action ) { 
     366                case 'delete': 
     367                    $( '#tmsht_ts_user_context_menu' ).trigger( 'hide_context_menu' ); 
     368                    $( '#tmsht_ts_user_table' ).trigger( 'apply_status', -1 ); 
     369                    break; 
     370                case 'apply_status': 
     371                    var legend_id = $context_menu_item.attr( 'data-legend-id' ); 
     372                    $( '#tmsht_ts_user_context_menu' ).trigger( 'hide_context_menu' ); 
     373                    $( '#tmsht_ts_user_table' ).trigger( 'apply_status', legend_id ); 
     374                    break 
     375                default: 
     376                    break; 
     377            } 
     378        }); 
     379 
    249380        $( window ).on( 'resize', function() { 
    250381            $( '#tmsht_ts_user_context_menu' ).trigger( 'hide_context_menu' ); 
    251         }); 
    252  
    253         $( document ).on( 'click', function( e ) { 
     382            $( '#tmsht_ts_user_table' ).trigger( 'deselection' ); 
     383        }); 
     384 
     385        $( document ).on( 'mouseup', function( e ) { 
    254386            if ( e.button != 0 || $( e.target ).closest( '#tmsht_ts_user_context_menu' ).length ) { 
    255387                return; 
     
    258390            $( '#tmsht_ts_user_context_menu' ).trigger( 'hide_context_menu' ); 
    259391        }); 
    260  
    261         $( '.tmsht_ts_user_context_menu_item.tmsht_ts_user_context_menu_item_enabled' ).on( 'click', function() { 
    262             var $context_menu_item = $( this ), 
    263                 action = $context_menu_item.attr( 'data-action' ), 
    264                 $td = $( '#tmsht_ts_user_table tbody td.tmsht_context_menu' ), 
    265                 $tr = $td.parent(), 
    266                 $td_fill = $td.find( '.tmsht_ts_user_table_td_fill' ), 
    267                 legend = get_legend( -1 ); 
    268  
    269             switch( action ) { 
    270                 case 'delete': 
    271                     $td 
    272                         .attr( 'data-legend-id', legend.id ) 
    273                         .removeAttr( 'data-prev-legend-id' ) 
    274                         .removeAttr( 'title' ) 
    275                         .removeAttr( 'data-td-group' ) 
    276                         .removeClass( 'tmsht_ts_user_table_td_selected' ); 
    277  
    278                     $td_fill.css( 'background-color', legend.color ); 
    279  
    280                     $tr.find( '.tmsht_tr_date[disabled="disabled"]' ).attr( 'disabled', false ); 
    281  
    282                     $( '#tmsht_ts_user_context_menu' ).trigger( 'hide_context_menu' ); 
    283                     $( '#tmsht_ts_user_table' ).tmsht_ts_user_table_handler( 'show_details' ); 
    284                     break; 
    285                 default: 
    286                     break; 
    287             } 
    288         }); 
    289392    }); 
    290393 
    291     /* start Legend selector*/ 
     394    /* Handler fake legend */ 
    292395    $.fn.tmsht_ts_user_select_legend = function( target ) { 
    293396 
     
    304407        } 
    305408 
    306         $( document ).on( 'click', function( e ) { 
     409        $( document ).on( 'mouseup', function( e ) { 
    307410            if ( $( e.target ).closest( '.tmsht_select_legend' ).length ) { 
    308411                return; 
     
    317420            } 
    318421 
    319             var $this_select = $( this ); 
     422            var $this_select = $( this ), 
     423                this_select_id = ( $this_select.attr( 'id' ) ) ? 'id_' + $this_select.attr( 'id' ) + ' ' : ''; 
    320424 
    321425            target = target || select_index; 
     
    334438 
    335439            var $select = $( '<div/>', { 
    336                     'class'       : 'tmsht_select_legend tmsht_select_legend_' + target + ' tmsht_select_legend_hidden tmsht_unselectable', 
     440                    'class'       : this_select_id + 'tmsht_select_legend tmsht_select_legend_' + target + ' tmsht_select_legend_hidden tmsht_unselectable', 
    337441                    'data-status' : 'close' 
    338442                }).bind( 'select.open', function () { 
     
    382486                var $this_option = $( this ); 
    383487 
     488                if( index_option == 0 ) { 
     489                    return true; 
     490                } 
     491 
    384492                $( '<li/>', { 
    385493                    'class'      : 'tmsht_select_legend_option', 
    386494                    'data-index' : index_option, 
     495                    'data-id'    : $this_option.val(), 
    387496                    'data-color' : $this_option.data( 'color' ), 
    388497                    'data-name'  : $this_option.text(), 
     
    394503                    $( this ).removeClass( 'tmsht_select_legend_option_hover' ); 
    395504                }).on( 'click', function() { 
    396                     var index = $( this ).data( 'index' ); 
    397  
    398                     $this_select.find( 'option' ).eq( index ).attr( 'selected', true ).trigger( 'change' ); 
     505                    var index = $( this ).data( 'index' ), 
     506                        legend_id = $( this ).data( 'id' ); 
     507 
     508                    if( $select.hasClass( 'id_tmsht_ts_user_legend' ) ) { 
     509                        $( '#tmsht_ts_user_table' ).trigger( 'apply_status', legend_id ); 
     510                    } 
     511 
    399512                }).appendTo( $options_wrap ); 
    400513            }); 
     
    404517        }); 
    405518    }; 
    406     /* end Legend selector*/ 
    407  
    408     /* start Legend selector*/ 
     519 
     520    /* Handler TS table */ 
    409521    $.fn.tmsht_ts_user_table_handler = (function( method ) { 
    410522        var methods = { 
    411523            'init' : function( options ) { 
    412                 return this.each( function ( table_index ) { 
     524                return this.each( function() { 
    413525                    $( this ).tmsht_ts_user_table_handler( 'show_details' ); 
    414526                }); 
    415527            }, 
    416528            'show_details' : function() { 
    417                 return this.each( function () { 
     529                return this.each( function() { 
    418530                    var $ts_table = $( this ), 
    419                         tbl_data = {}; 
     531                        tbl_data = {}, 
    420532                        key = 0; 
    421533 
    422                     $( '.tmsht_tr_date' ).each( function() { 
    423                         var tr_date = $( this ).val(); 
    424  
    425                         if ( $ts_table.find( 'td.tmsht_ts_user_table_td_time[data-td-date="' + tr_date + '"]' ).filter( '[data-legend-id!="-1"]' ).length == 0 ) { 
     534                    $trs_date = $ts_table.find( '.tmsht_tr_date' ); 
     535 
     536                    $trs_date.each( function() { 
     537 
     538                        var date = $( this ).val(); 
     539 
     540                        if ( $ts_table.find( 'td.tmsht_ts_user_table_td_time[data-td-date="' + date + '"] .tmsht_ts_user_table_td_fill[data-legend-id!="-1"]' ).length == 0 ) { 
    426541                            return true; 
    427542                        } 
    428543 
    429                         var $tds = $ts_table.find( 'td.tmsht_ts_user_table_td_time[data-td-date="' + tr_date + '"]' ); 
    430  
    431                         $tds.each( function( index, elem ) { 
    432                             var $td = $( this ), 
    433                                 legend_id = $td.attr( 'data-legend-id' ); 
    434                                 next_legend_id = $( $tds[ index + 1 ] ).attr( 'data-legend-id' ); 
    435                                 date = $td.attr( 'data-td-date' ); 
     544                        var $tds_fill = $ts_table.find( '.tmsht_ts_user_table_td_time[data-td-date="' + date + '"] .tmsht_ts_user_table_td_fill' ); 
     545 
     546                        $tds_fill.each( function( index, elem ) { 
     547                            var $td_fill = $( elem ), 
     548                                legend_id = $td_fill.attr( 'data-legend-id' ); 
     549                                next_legend_id = $tds_fill.eq( index + 1 ).attr( 'data-legend-id' ); 
     550 
     551                            $td_fill.removeAttr( 'title' ); 
    436552 
    437553                            if ( legend_id < 0 ) { 
     
    443559 
    444560                            tbl_data[ legend_id ][ date ][ key ] = tbl_data[ legend_id ][ date ][ key ] || []; 
    445                             tbl_data[ legend_id ][ date ][ key ].push( parseInt( $td.attr( 'data-td-time' ) ) ); 
    446  
    447                             $td.attr( 'data-td-group', key ); 
     561                            tbl_data[ legend_id ][ date ][ key ].push( { 
     562                                'time_from' : $td_fill.attr( 'data-fill-time-from' ), 
     563                                'time_to'   : $td_fill.attr( 'data-fill-time-to' ) 
     564                            } ); 
     565 
     566                            $td_fill.attr( 'data-fill-group', key ); 
     567 
    448568                            if ( legend_id != next_legend_id ) { 
    449569                                key++; 
     
    452572                    }); 
    453573 
    454                     $( '.tmsht_ts_user_advanced_box.tmsht_maybe_hidden, .tmsht_ts_user_advanced_box .tmsht_maybe_hidden' ).addClass( 'tmsht_hidden' ); 
    455                     $( '.tmsht_ts_user_advanced_box.tmsht_maybe_hidden .tmsht_ts_user_advanced_box_interval' ).remove(); 
    456  
    457                     Number.prototype.toFormat = function() { 
    458                         var n = this; 
    459  
    460                         return n > 9 ? "" + n: "0" + n; 
    461                     } 
     574                    $prepare_box = $( '.tmsht_ts_user_advanced_box' ).addClass( 'tmsht_hidden' ); 
     575                    $prepare_box.find( '.tmsht_ts_user_advanced_box_details' ).addClass( 'tmsht_hidden' ); 
     576                    $prepare_box.find( '.tmsht_ts_user_advanced_box_interval' ).remove(); 
    462577 
    463578                    for ( var legend_id in tbl_data ) { 
     579 
    464580                        var $box = $( '.tmsht_ts_user_advanced_box[data-box-id="' + legend_id + '"]' ).removeClass( 'tmsht_hidden' ); 
    465581 
    466582                        for ( var date in tbl_data[ legend_id ] ) { 
    467                             var $details = $box.find( '.tmsht_ts_user_advanced_box_details[data-box-details-date="' + date + '"]' ), 
     583                            var $details = $box.find( '.tmsht_ts_user_advanced_box_details[data-details-date="' + date + '"]' ), 
    468584                                $wrap = $details.find( '.tmsht_ts_user_advanced_box_interval_wrap' ); 
    469585 
    470586                            $details.removeClass( 'tmsht_hidden' ); 
    471                             for ( var time in tbl_data[ legend_id ][ date ] ) { 
     587 
     588                            for ( var interval in tbl_data[ legend_id ][ date ] ) { 
    472589                                var $interval_template = $( '#tmsht_ts_user_advanced_box_details_template .tmsht_ts_user_advanced_box_interval' ).clone(), 
    473                                     time_from = tbl_data[ legend_id ][ date ][ time ][0], 
    474                                     time_to = ( tbl_data[ legend_id ][ date ][ time ][ tbl_data[ legend_id ][ date ][ time ].length - 1 ] + 1 ), 
    475                                     group = time, 
     590                                    time_from = tbl_data[ legend_id ][ date ][ interval ][0]['time_from'], 
     591                                    time_to = tbl_data[ legend_id ][ date ][ interval ][ tbl_data[ legend_id ][ date ][ interval ].length - 1 ]['time_to'], 
     592                                    group = interval, 
    476593                                    index = $box.find( '.tmsht_ts_user_advanced_box_interval' ).length, 
    477594                                    interval_html = $interval_template.html() 
    478                                                         .replace( /%index%/g, index ) 
    479                                                         .replace( /%legend_id%/g, legend_id ) 
    480                                                         .replace( /%date%/g, date ) 
    481                                                         .replace( /%time_from%/g, time_from.toFormat() ) 
    482                                                         .replace( /%time_to%/g, ( time_to ).toFormat() ) 
    483                                                         .replace( /%input_time_from%/g, time_from.toFormat() + ':00:00' ) 
    484                                                         .replace( /%input_time_to%/g, ( time_to != 24 ) ? time_to.toFormat() + ':00:00' : '23:59:59' ) 
    485                                                         .replace( /data-hidden-name/g, 'name' ); 
     595                                        .replace( /%index%/g, index ) 
     596                                        .replace( /%legend_id%/g, legend_id ) 
     597                                        .replace( /%date%/g, date ) 
     598                                        .replace( /%time_from%/g, time_from ) 
     599                                        .replace( /%time_to%/g, time_to ) 
     600                                        .replace( /%input_time_from%/g, time_from + ':00' ) 
     601                                        .replace( /%input_time_to%/g, ( time_to != '24:00' ) ? time_to + ':00' : '23:59:59' ) 
     602                                        .replace( /data-hidden-name/g, 'name' ); 
    486603 
    487604                                $interval_template 
     
    493610                                        var $interval = $( this ), 
    494611                                            group = $interval.attr( 'data-details-group' ), 
    495                                             $td_fill = $ts_table.find( 'td.tmsht_ts_user_table_td_time[data-td-group="' + group + '"] .tmsht_ts_user_table_td_fill' ); 
    496  
    497                                         $td_fill.addClass( 'tmsht_ts_user_highlight' ); 
     612                                            $tds_fill = $ts_table.find( '.tmsht_ts_user_table_td_fill[data-fill-group="' + group + '"]' ); 
     613 
     614                                        $tds_fill.addClass( 'tmsht_ts_user_highlight' ); 
    498615                                    }).on( 'mouseleave', function () { 
    499                                         var $td_fill = $( '.tmsht_ts_user_highlight' ); 
    500  
    501                                         $td_fill.removeClass( 'tmsht_ts_user_highlight' ); 
     616                                        var $tds_fill = $ts_table.find( '.tmsht_ts_user_highlight' ); 
     617 
     618                                        $tds_fill.removeClass( 'tmsht_ts_user_highlight' ); 
    502619                                    }); 
    503620 
    504                                 $ts_table.find( 'td.tmsht_ts_user_table_td_time[data-td-group="' + group + '"]' ).each( function() { 
    505                                     var $td = $( this ); 
    506                                         group_legend_id = $td.attr( 'data-legend-id' ), 
    507                                         group_legend_name = $( '.tmsht_ts_user_legend option[value="' + group_legend_id + '"]' ).text(), 
    508                                         time_from = $interval_template.find( '.tmsht_ts_user_advanced_box_interval_from_text' ).text(), 
    509                                         time_to = $interval_template.find( '.tmsht_ts_user_advanced_box_interval_to_text' ).text(); 
    510                                     if ( group_legend_id > 0 ) { 
    511                                         $td.attr( 'title', group_legend_name + ' (' + time_from + ' - ' + time_to + ')' ); 
    512                                     } 
    513                                 }); 
     621                                var group_legend_name = $box.find( '.tmsht_ts_user_advanced_box_title' ).text(); 
     622                                    $tds_fill = $ts_table.find( '.tmsht_ts_user_table_td_fill[data-fill-group="' + group + '"]' ); 
     623 
     624                                $tds_fill.attr( 'title', group_legend_name + ' (' + time_from + ' - ' + time_to + ')' ); 
    514625                            } 
    515626                        } 
  • timesheet/trunk/languages/timesheet-ru_RU.po

    r1517164 r1573199  
    33"Project-Id-Version: Timesheet\n" 
    44"Report-Msgid-Bugs-To: \n" 
    5 "POT-Creation-Date: 2016-10-11 16:24+0300\n" 
    6 "PO-Revision-Date: 2016-10-11 16:24+0300\n" 
     5"POT-Creation-Date: 2016-12-21 19:22+0300\n" 
     6"PO-Revision-Date: 2016-12-29 19:22+0300\n" 
    77"Last-Translator: plugin@bestwebsoft.com <plugin@bestwebsoft.com>\n" 
    88"Language-Team: BestWebSoft Team <wp@bestwebsoft.com>\n" 
     
    1919"X-Poedit-SearchPath-0: ..\n" 
    2020 
    21 #: ../timesheet.php:56 ../timesheet.php:58 ../timesheet.php:1354 
     21#: ../timesheet.php:59 ../timesheet.php:61 ../timesheet.php:1363 
    2222msgid "Report" 
    2323msgstr "Отчет" 
    2424 
    25 #: ../timesheet.php:147 
     25#: ../timesheet.php:149 
    2626msgid "Work In Office" 
    2727msgstr "Работа в офисе" 
    2828 
    29 #: ../timesheet.php:153 
     29#: ../timesheet.php:155 
    3030msgid "Work Remotely" 
    3131msgstr "Удаленная работа" 
    3232 
    33 #: ../timesheet.php:159 
     33#: ../timesheet.php:161 
    3434msgid "Will be absent" 
    3535msgstr "Отсутствие" 
    3636 
    37 #: ../timesheet.php:165 
     37#: ../timesheet.php:167 
    3838msgid "Vacation" 
    3939msgstr "Отпуск" 
    4040 
    41 #: ../timesheet.php:255 
     41#: ../timesheet.php:293 
    4242msgid "Timesheet Reminder" 
    4343msgstr "Timesheet Напоминание" 
    4444 
    45 #: ../timesheet.php:256 
     45#: ../timesheet.php:294 
    4646msgid "Hi" 
    4747msgstr "Привет" 
    4848 
    49 #: ../timesheet.php:256 
     49#: ../timesheet.php:294 
    5050msgid "Please complete your timesheet for the following days" 
    5151msgstr "Пожалуйста, заполните ваш график за следующие дни" 
    5252 
    53 #: ../timesheet.php:256 
     53#: ../timesheet.php:294 
    5454msgid "Complete Timesheet Now" 
    5555msgstr "Заполнить График Сейчас" 
    5656 
    57 #: ../timesheet.php:256 
     57#: ../timesheet.php:294 
    5858msgid "Do not reply to this message. This is an automatic mailing." 
    5959msgstr "Не отвечайте на это сообщение. Это автоматическая рассылка." 
    6060 
     61#: ../timesheet.php:384 
     62msgid "Please, input status name" 
     63msgstr "" 
     64"Пожалуйста, введите название легендыПожалуйста, введите название статуса" 
     65 
     66#: ../timesheet.php:389 ../timesheet.php:391 
     67msgid "Please, choose status color" 
     68msgstr "Пожалуйста, выберите цвет легендыПожалуйста, выберите цвет статуса" 
     69 
     70#: ../timesheet.php:396 
     71#, php-format 
     72msgid "Status with name \"%s\" or with color %s already exists" 
     73msgstr "Статус с названием \"%s\" или цветом %s уже существует" 
     74 
    6175#: ../timesheet.php:400 
    62 msgid "Please, input legend name" 
    63 msgstr "Пожалуйста, введите название легенды" 
    64  
    65 #: ../timesheet.php:405 ../timesheet.php:407 
    66 msgid "Please, choose legend color" 
    67 msgstr "Пожалуйста, выберите цвет легенды" 
    68  
    69 #: ../timesheet.php:412 
    7076#, php-format 
    71 msgid "Legend with name \"%s\" or with color %s already exists" 
    72 msgstr "Легенда с названием \"%s\" или цветом %s уже существует" 
    73  
    74 #: ../timesheet.php:416 
    75 #, php-format 
    76 msgid "" 
    77 "The legend with the color %s can not be saved. Please choose a different " 
     77msgid "" 
     78"The status with the color %s can not be saved. Please choose a different " 
    7879"color." 
    7980msgstr "" 
    80 "Легенда с цветом %s не может быть сохранена. Пожалуйста выберите другой цвет." 
    81  
    82 #: ../timesheet.php:429 
    83 msgid "Legend has been successfully added" 
    84 msgstr "Легенда успешно добавлена" 
    85  
    86 #: ../timesheet.php:431 ../timesheet.php:434 
    87 msgid "Legend has not been added" 
    88 msgstr "Легенда не добавлена" 
    89  
    90 #: ../timesheet.php:572 
     81"Статус с цветом %s не может быть сохранен. Пожалуйста выберите другой цвет." 
     82 
     83#: ../timesheet.php:413 
     84msgid "Status has been successfully added" 
     85msgstr "Статус добавлен успешно" 
     86 
     87#: ../timesheet.php:415 ../timesheet.php:418 
     88msgid "Status has not been added" 
     89msgstr "Статус не был добавлен" 
     90 
     91#: ../timesheet.php:571 
    9192msgid "Settings saved" 
    9293msgstr "Настройки сохранены" 
    9394 
    94 #: ../timesheet.php:592 
     95#: ../timesheet.php:582 
    9596msgid "All plugin settings were restored." 
    9697msgstr "Все настройки плагина восстановлены." 
    9798 
    98 #: ../timesheet.php:597 
     99#: ../timesheet.php:596 
    99100msgid "Timesheet Settings" 
    100101msgstr "Настройки Timesheet" 
    101102 
    102 #: ../timesheet.php:599 ../timesheet.php:1911 ../timesheet.php:1924 
     103#: ../timesheet.php:598 ../timesheet.php:1926 ../timesheet.php:1939 
    103104msgid "Settings" 
    104105msgstr "Настройки" 
    105106 
    106 #: ../timesheet.php:600 
     107#: ../timesheet.php:599 
    107108msgid "Go PRO" 
    108109msgstr "Перейти на PRO версию" 
    109110 
    110 #: ../timesheet.php:604 ../timesheet.php:982 ../timesheet.php:1357 
     111#: ../timesheet.php:603 ../timesheet.php:985 ../timesheet.php:1366 
    111112msgid "WARNING" 
    112113msgstr "ВНИМАНИЕ" 
    113114 
    114 #: ../timesheet.php:604 ../timesheet.php:982 ../timesheet.php:1357 
     115#: ../timesheet.php:603 ../timesheet.php:985 ../timesheet.php:1366 
    115116msgid "The plugin works correctly only if JavaScript is enabled." 
    116117msgstr "Плагин работает корректно только при включенном JavaScript." 
    117118 
    118 #: ../timesheet.php:620 
     119#: ../timesheet.php:619 
    119120msgid "Timeline" 
    120121msgstr "Время" 
    121122 
    122 #: ../timesheet.php:623 
     123#: ../timesheet.php:622 
    123124msgctxt "timeline" 
    124125msgid "from" 
    125126msgstr "от" 
    126127 
    127 #: ../timesheet.php:623 
     128#: ../timesheet.php:622 
    128129msgctxt "timeline" 
    129130msgid "to" 
    130131msgstr "до" 
    131132 
    132 #: ../timesheet.php:623 
     133#: ../timesheet.php:622 
    133134msgctxt "timeline" 
    134135msgid "hours" 
    135136msgstr "часов" 
    136137 
    137 #: ../timesheet.php:631 
     138#: ../timesheet.php:630 
    138139msgid "Weekends" 
    139140msgstr "Выходные" 
    140141 
    141 #: ../timesheet.php:644 ../timesheet.php:678 
    142 msgid "Legends" 
    143 msgstr "Легенды" 
    144  
    145 #: ../timesheet.php:647 
     142#: ../timesheet.php:643 ../timesheet.php:677 
     143msgid "Statuses" 
     144msgstr "Статусы" 
     145 
     146#: ../timesheet.php:646 
    146147msgid "Name" 
    147148msgstr "Название" 
    148149 
    149 #: ../timesheet.php:650 
    150 msgid "Add Legend" 
    151 msgstr "Добавить Легенду" 
    152  
    153 #: ../timesheet.php:655 ../timesheet.php:664 ../timesheet.php:684 
     150#: ../timesheet.php:649 
     151msgid "Add status" 
     152msgstr "Добавить статус" 
     153 
     154#: ../timesheet.php:654 ../timesheet.php:663 ../timesheet.php:683 
    154155msgid "Enabled" 
    155156msgstr "Включено" 
    156157 
    157 #: ../timesheet.php:656 ../timesheet.php:668 ../timesheet.php:685 
     158#: ../timesheet.php:655 ../timesheet.php:684 
     159msgctxt "Settings status table header" 
     160msgid "Name" 
     161msgstr "Название" 
     162 
     163#: ../timesheet.php:656 ../timesheet.php:685 
     164msgctxt "Settings status table header" 
     165msgid "Color" 
     166msgstr "Цвет" 
     167 
     168#: ../timesheet.php:667 
    158169msgctxt "Settings legend table header" 
    159170msgid "Name" 
    160171msgstr "Название" 
    161172 
    162 #: ../timesheet.php:657 ../timesheet.php:671 ../timesheet.php:686 
     173#: ../timesheet.php:670 
    163174msgctxt "Settings legend table header" 
    164175msgid "Color" 
    165176msgstr "Цвет" 
    166177 
    167 #: ../timesheet.php:678 
    168 msgid "No legends" 
    169 msgstr "Нет легенд" 
    170  
    171 #: ../timesheet.php:694 
     178#: ../timesheet.php:677 
     179msgid "No statuses" 
     180msgstr "Нет статусов" 
     181 
     182#: ../timesheet.php:693 
    172183msgid "Date format" 
    173184msgstr "Формат даты" 
    174185 
    175 #: ../timesheet.php:701 
     186#: ../timesheet.php:700 
    176187msgid "WordPress Settings" 
    177188msgstr "Настройки WordPress" 
    178189 
    179 #: ../timesheet.php:713 
     190#: ../timesheet.php:712 
    180191msgid "Custom" 
    181192msgstr "Пользовательский" 
    182193 
    183 #: ../timesheet.php:724 
     194#: ../timesheet.php:723 
    184195msgid "Documentation on date and time formatting" 
    185196msgstr "Документация по форматированию времени и даты" 
    186197 
    187 #: ../timesheet.php:729 
     198#: ../timesheet.php:727 
     199msgid "Allow to edit past days" 
     200msgstr "Разрешить редактирование прошедших дней" 
     201 
     202#: ../timesheet.php:732 
    188203msgid "Display TS user page for" 
    189204msgstr "Отображать TS страницу пользователя для" 
    190205 
    191 #: ../timesheet.php:752 ../timesheet.php:805 
     206#: ../timesheet.php:757 ../timesheet.php:812 
    192207msgid "Close" 
    193208msgstr "Закрыть" 
    194209 
    195 #: ../timesheet.php:763 ../timesheet.php:816 
     210#: ../timesheet.php:768 ../timesheet.php:823 
    196211msgid "Unlock premium options by upgrading to Pro version" 
    197212msgstr "Активируйте премиум опции обновившись до Pro версии" 
    198213 
    199 #: ../timesheet.php:766 ../timesheet.php:819 
     214#: ../timesheet.php:771 ../timesheet.php:826 
    200215msgid "Learn More" 
    201216msgstr "Подробнее" 
    202217 
    203 #: ../timesheet.php:782 
     218#: ../timesheet.php:787 
    204219msgid "Display TS report page for" 
    205220msgstr "Отображать TS страницу отчетов для" 
    206221 
    207 #: ../timesheet.php:834 
     222#: ../timesheet.php:841 
    208223msgid "Email reminder" 
    209224msgstr "Напоминания на емейл" 
    210225 
    211 #: ../timesheet.php:836 
     226#: ../timesheet.php:843 
    212227msgid "" 
    213228"This option allows sending an email reminder to a user if his work schedule " 
     
    215230msgstr "" 
    216231"Эта опция позволяет отправить по электронной почте напоминание пользователю, " 
    217 "если он не заполнен график работы." 
    218  
    219 #: ../timesheet.php:838 
     232"если он не заполнил график работы." 
     233 
     234#: ../timesheet.php:845 
    220235msgctxt "email reminder" 
    221236msgid "every" 
    222237msgstr "каждый (каждую)" 
    223238 
    224 #: ../timesheet.php:844 
     239#: ../timesheet.php:851 
    225240msgctxt "email reminder" 
    226241msgid "in" 
    227242msgstr "в" 
    228243 
    229 #: ../timesheet.php:848 
     244#: ../timesheet.php:855 
    230245msgctxt "email reminder" 
    231246msgid "Subject" 
    232247msgstr "Тема" 
    233248 
    234 #: ../timesheet.php:850 
     249#: ../timesheet.php:857 
    235250msgctxt "email reminder" 
    236251msgid "Message" 
    237252msgstr "Сообщение" 
    238253 
    239 #: ../timesheet.php:853 
     254#: ../timesheet.php:860 
    240255msgid "" 
    241256"You can edit the content of reminder letter which will be sent to users. You " 
     
    246261"сообщения:" 
    247262 
    248 #: ../timesheet.php:855 
     263#: ../timesheet.php:862 
    249264msgid "this shortcode will be replaced with the username" 
    250265msgstr "этот шорткод будет заменен на имя пользователя" 
    251266 
    252 #: ../timesheet.php:856 
     267#: ../timesheet.php:863 
    253268msgid "" 
    254269"this shortcode will be replaced with days that are not filled by the user" 
    255270msgstr "этот шорткод будет заменен днями, которые не заполнены пользователем" 
    256271 
    257 #: ../timesheet.php:857 
     272#: ../timesheet.php:864 
    258273msgid "" 
    259274"this shortcode will be replaced with the link to TS user page in the " 
     
    263278"управления" 
    264279 
    265 #: ../timesheet.php:858 
     280#: ../timesheet.php:865 
    266281msgid "" 
    267282"this shortcode will be replaced with the link with your text to TS user page " 
     
    271286"пользователя в панели управления" 
    272287 
    273 #: ../timesheet.php:869 ../timesheet.php:1124 
     288#: ../timesheet.php:876 ../timesheet.php:1135 
    274289msgid "Save Changes" 
    275290msgstr "Сохранить изменения" 
    276291 
    277 #: ../timesheet.php:913 ../timesheet.php:1167 
    278 msgid "Reset" 
    279 msgstr "Сброс" 
    280  
    281 #: ../timesheet.php:928 ../timesheet.php:948 
     292#: ../timesheet.php:916 
     293msgid "Please select..." 
     294msgstr "Пожалуста, выберите..." 
     295 
     296#: ../timesheet.php:931 ../timesheet.php:951 
    282297msgid "Data has not been saved" 
    283298msgstr "Данные не сохранены" 
    284299 
    285 #: ../timesheet.php:956 
     300#: ../timesheet.php:959 
    286301msgid "Data has been saved" 
    287302msgstr "Данные сохранены" 
    288303 
    289 #: ../timesheet.php:959 
     304#: ../timesheet.php:962 
    290305msgid "Data has not been saved, because there was no change" 
    291306msgstr "Данные не сохранены, поскольку изменения не вносились" 
    292307 
    293 #: ../timesheet.php:992 
     308#: ../timesheet.php:995 
    294309msgid "Date from" 
    295310msgstr "Дата от" 
    296311 
    297 #: ../timesheet.php:996 
     312#: ../timesheet.php:999 
    298313msgid "Date to" 
    299314msgstr "Дата до" 
    300315 
    301 #: ../timesheet.php:1000 
     316#: ../timesheet.php:1003 
    302317msgid "Change date" 
    303318msgstr "Изменить дату" 
    304319 
    305 #: ../timesheet.php:1005 ../timesheet.php:1411 
    306 msgid "Legend" 
    307 msgstr "Легенда" 
    308  
    309 #: ../timesheet.php:1018 
     320#: ../timesheet.php:1008 ../timesheet.php:1420 
     321msgid "Status" 
     322msgstr "Статус" 
     323 
     324#: ../timesheet.php:1021 
    310325msgid "Transposition table" 
    311326msgstr "Транспонирование таблицы" 
    312327 
    313 #: ../timesheet.php:1129 
     328#: ../timesheet.php:1141 
    314329msgid "Edit time" 
    315330msgstr "Изменить время" 
    316331 
    317 #: ../timesheet.php:1129 
     332#: ../timesheet.php:1141 
    318333msgid "Available in PRO" 
    319334msgstr "Доступно в ПРО" 
    320335 
    321 #: ../timesheet.php:1131 
    322 msgid "Delete legend" 
    323 msgstr "Удалить легенду" 
    324  
    325 #: ../timesheet.php:1154 
     336#: ../timesheet.php:1145 
     337msgid "Delete status" 
     338msgstr "Удалить статус" 
     339 
     340#: ../timesheet.php:1175 
    326341msgid "Week" 
    327342msgstr "Неделя" 
    328343 
    329 #: ../timesheet.php:1155 
     344#: ../timesheet.php:1176 
    330345msgid "Month" 
    331346msgstr "Месяц" 
    332347 
    333 #: ../timesheet.php:1159 
     348#: ../timesheet.php:1180 
    334349msgctxt "Group by" 
    335350msgid "Date" 
    336351msgstr "Дате" 
    337352 
    338 #: ../timesheet.php:1160 
     353#: ../timesheet.php:1181 
    339354msgctxt "Group by" 
    340355msgid "User" 
    341356msgstr "Пользователю" 
    342357 
    343 #: ../timesheet.php:1168 
    344 msgid "All Legends" 
    345 msgstr "Все легенды" 
    346  
    347 #: ../timesheet.php:1351 
     358#: ../timesheet.php:1188 
     359msgid "Blank" 
     360msgstr "Пустые" 
     361 
     362#: ../timesheet.php:1189 
     363msgid "All statuses" 
     364msgstr "Все статусы" 
     365 
     366#: ../timesheet.php:1360 
    348367msgid "Select at least one user" 
    349368msgstr "Выберите хотя бы одного пользователя" 
    350369 
    351 #: ../timesheet.php:1366 
     370#: ../timesheet.php:1375 
    352371msgid "Date" 
    353372msgstr "Дата" 
    354373 
    355 #: ../timesheet.php:1375 
     374#: ../timesheet.php:1384 
    356375msgctxt "date" 
    357376msgid "from" 
    358377msgstr "с" 
    359378 
    360 #: ../timesheet.php:1379 
     379#: ../timesheet.php:1388 
    361380msgctxt "date" 
    362381msgid "to" 
    363382msgstr "по" 
    364383 
    365 #: ../timesheet.php:1405 
     384#: ../timesheet.php:1414 
    366385msgid "Group by" 
    367386msgstr "Сортировать по " 
    368387 
    369 #: ../timesheet.php:1423 
     388#: ../timesheet.php:1432 
    370389msgid "Users" 
    371390msgstr "Пользователи" 
    372391 
    373 #: ../timesheet.php:1426 
     392#: ../timesheet.php:1435 
    374393msgid "Search user" 
    375394msgstr "Поиск пользователя" 
    376395 
    377 #: ../timesheet.php:1430 
     396#: ../timesheet.php:1439 
    378397msgctxt "All users" 
    379398msgid "All users" 
    380399msgstr "Все пользователи" 
    381400 
    382 #: ../timesheet.php:1436 
     401#: ../timesheet.php:1445 
    383402msgctxt "Search user" 
    384403msgid "No results" 
    385404msgstr "По вашему запросу ничего не найдено" 
    386405 
    387 #: ../timesheet.php:1443 
     406#: ../timesheet.php:1452 
    388407msgctxt "Search user" 
    389408msgid "No users to select" 
    390409msgstr "Нет доступных пользователей для выбора" 
    391410 
    392 #: ../timesheet.php:1464 
     411#: ../timesheet.php:1473 
    393412msgctxt "Apply ts report" 
    394413msgid "Apply" 
    395414msgstr "Применить" 
    396415 
    397 #: ../timesheet.php:1524 ../timesheet.php:1637 ../timesheet.php:1734 
     416#: ../timesheet.php:1533 ../timesheet.php:1651 ../timesheet.php:1753 
    398417msgid "No data to view" 
    399418msgstr "Нет доступных данных для просмотра" 
    400419 
    401 #: ../timesheet.php:1925 
     420#: ../timesheet.php:1940 
    402421msgid "FAQ" 
    403422msgstr "FAQ" 
    404423 
    405 #: ../timesheet.php:1926 
     424#: ../timesheet.php:1941 
    406425msgid "Support" 
    407426msgstr "Тех. Поддержка" 
    408427 
    409 #: ../timesheet.php:1958 
     428#: ../timesheet.php:1973 
    410429msgid "Once Weekly" 
    411430msgstr "Один раз в неделю" 
     431 
     432#~ msgid "Legend has not been added" 
     433#~ msgstr "Легенда не добавлена" 
     434 
     435#~ msgid "Legends" 
     436#~ msgstr "Легенды" 
     437 
     438#~ msgid "Add Legend" 
     439#~ msgstr "Добавить Легенду" 
     440 
     441#~ msgid "No legends" 
     442#~ msgstr "Нет легенд" 
     443 
     444#~ msgid "Reset" 
     445#~ msgstr "Сброс" 
     446 
     447#~ msgid "Legend" 
     448#~ msgstr "Легенда" 
     449 
     450#~ msgid "Delete legend" 
     451#~ msgstr "Удалить легенду" 
     452 
     453#~ msgid "All Legends" 
     454#~ msgstr "Все легенды" 
    412455 
    413456#~ msgid "" 
     
    454497#~ msgid "Highlight current day" 
    455498#~ msgstr "Выделить текущий день" 
    456  
    457 #~ msgid "Highlight past days" 
    458 #~ msgstr "Выделить предыдущие дни" 
  • timesheet/trunk/languages/timesheet-uk.po

    r1517164 r1573199  
    33"Project-Id-Version: Timesheet\n" 
    44"Report-Msgid-Bugs-To: \n" 
    5 "POT-Creation-Date: 2016-10-11 16:20+0300\n" 
    6 "PO-Revision-Date: 2016-10-11 16:24+0300\n" 
     5"POT-Creation-Date: 2016-12-21 19:18+0300\n" 
     6"PO-Revision-Date: 2016-12-29 19:20+0300\n" 
    77"Last-Translator: plugin@bestwebsoft.com <plugin@bestwebsoft.com>\n" 
    88"Language-Team: BestWebSoft Team <wp@bestwebsoft.com>\n" 
     
    1919"X-Poedit-SearchPath-0: ..\n" 
    2020 
    21 #: ../timesheet.php:56 ../timesheet.php:58 ../timesheet.php:1354 
     21#: ../timesheet.php:59 ../timesheet.php:61 ../timesheet.php:1363 
    2222msgid "Report" 
    2323msgstr "Звіт" 
    2424 
    25 #: ../timesheet.php:147 
     25#: ../timesheet.php:149 
    2626msgid "Work In Office" 
    2727msgstr "Робота в офісі" 
    2828 
    29 #: ../timesheet.php:153 
     29#: ../timesheet.php:155 
    3030msgid "Work Remotely" 
    3131msgstr "Віддалена робота" 
    3232 
    33 #: ../timesheet.php:159 
     33#: ../timesheet.php:161 
    3434msgid "Will be absent" 
    3535msgstr "Відсутність" 
    3636 
    37 #: ../timesheet.php:165 
     37#: ../timesheet.php:167 
    3838msgid "Vacation" 
    3939msgstr "Відпустка" 
    4040 
    41 #: ../timesheet.php:255 
     41#: ../timesheet.php:293 
    4242msgid "Timesheet Reminder" 
    4343msgstr "Timesheet Нагадування" 
    4444 
    45 #: ../timesheet.php:256 
     45#: ../timesheet.php:294 
    4646msgid "Hi" 
    4747msgstr "Привіт" 
    4848 
    49 #: ../timesheet.php:256 
     49#: ../timesheet.php:294 
    5050msgid "Please complete your timesheet for the following days" 
    5151msgstr "Будь ласка, заповніть ваш графік за наступні дні" 
    5252 
    53 #: ../timesheet.php:256 
     53#: ../timesheet.php:294 
    5454msgid "Complete Timesheet Now" 
    5555msgstr "Заповнити Графік Зараз" 
    5656 
    57 #: ../timesheet.php:256 
     57#: ../timesheet.php:294 
    5858msgid "Do not reply to this message. This is an automatic mailing." 
    5959msgstr "Не відповідайте на це повідомлення. Це автоматична розсилка." 
    6060 
     61#: ../timesheet.php:384 
     62msgid "Please, input status name" 
     63msgstr "Будь ласка, введіть назву статуса" 
     64 
     65#: ../timesheet.php:389 ../timesheet.php:391 
     66msgid "Please, choose status color" 
     67msgstr "Будь ласка, виберіть колір статуса" 
     68 
     69#: ../timesheet.php:396 
     70#, php-format 
     71msgid "Status with name \"%s\" or with color %s already exists" 
     72msgstr "Статус з назвою \"%s\" або кольором %s вже існує" 
     73 
    6174#: ../timesheet.php:400 
    62 msgid "Please, input legend name" 
    63 msgstr "Будь ласка, введіть назву легенди" 
    64  
    65 #: ../timesheet.php:405 ../timesheet.php:407 
    66 msgid "Please, choose legend color" 
    67 msgstr "Будь ласка, виберіть колір легенди" 
    68  
    69 #: ../timesheet.php:412 
    7075#, php-format 
    71 msgid "Legend with name \"%s\" or with color %s already exists" 
    72 msgstr "Легенда з назвою \"%s\" або кольором %s вже існує" 
    73  
    74 #: ../timesheet.php:416 
    75 #, php-format 
    76 msgid "" 
    77 "The legend with the color %s can not be saved. Please choose a different " 
     76msgid "" 
     77"The status with the color %s can not be saved. Please choose a different " 
    7878"color." 
    7979msgstr "" 
    80 "Легенда з кольором %s не може бути збережена. Будь ласка виберіть інший " 
    81 "колір." 
    82  
    83 #: ../timesheet.php:429 
    84 msgid "Legend has been successfully added" 
    85 msgstr "Легенда успішно додана" 
    86  
    87 #: ../timesheet.php:431 ../timesheet.php:434 
    88 msgid "Legend has not been added" 
    89 msgstr "Легенда не додана" 
    90  
    91 #: ../timesheet.php:572 
     80"Статус з кольором %s не може бути збережен. Будь ласка виберіть інший колір." 
     81 
     82#: ../timesheet.php:413 
     83msgid "Status has been successfully added" 
     84msgstr "Статус успішно додан" 
     85 
     86#: ../timesheet.php:415 ../timesheet.php:418 
     87msgid "Status has not been added" 
     88msgstr "Статус не було додано" 
     89 
     90#: ../timesheet.php:571 
    9291msgid "Settings saved" 
    9392msgstr "Налаштування збережені" 
    9493 
    95 #: ../timesheet.php:592 
     94#: ../timesheet.php:582 
    9695msgid "All plugin settings were restored." 
    9796msgstr "Всі настройки плагіна відновлені." 
    9897 
    99 #: ../timesheet.php:597 
     98#: ../timesheet.php:596 
    10099msgid "Timesheet Settings" 
    101 msgstr "Нлаштування Timesheet" 
    102  
    103 #: ../timesheet.php:599 ../timesheet.php:1911 ../timesheet.php:1924 
     100msgstr "Нaлаштування Timesheet" 
     101 
     102#: ../timesheet.php:598 ../timesheet.php:1926 ../timesheet.php:1939 
    104103msgid "Settings" 
    105104msgstr "Налаштування" 
    106105 
    107 #: ../timesheet.php:600 
     106#: ../timesheet.php:599 
    108107msgid "Go PRO" 
    109108msgstr "Перейти на PRO версію" 
    110109 
    111 #: ../timesheet.php:604 ../timesheet.php:982 ../timesheet.php:1357 
     110#: ../timesheet.php:603 ../timesheet.php:985 ../timesheet.php:1366 
    112111msgid "WARNING" 
    113112msgstr "УВАГА" 
    114113 
    115 #: ../timesheet.php:604 ../timesheet.php:982 ../timesheet.php:1357 
     114#: ../timesheet.php:603 ../timesheet.php:985 ../timesheet.php:1366 
    116115msgid "The plugin works correctly only if JavaScript is enabled." 
    117116msgstr "Плагін працює коректно тільки при включеному JavaScript." 
    118117 
    119 #: ../timesheet.php:620 
     118#: ../timesheet.php:619 
    120119msgid "Timeline" 
    121120msgstr "Час" 
    122121 
    123 #: ../timesheet.php:623 
     122#: ../timesheet.php:622 
    124123msgctxt "timeline" 
    125124msgid "from" 
    126125msgstr "від" 
    127126 
    128 #: ../timesheet.php:623 
     127#: ../timesheet.php:622 
    129128msgctxt "timeline" 
    130129msgid "to" 
    131130msgstr "до" 
    132131 
    133 #: ../timesheet.php:623 
     132#: ../timesheet.php:622 
    134133msgctxt "timeline" 
    135134msgid "hours" 
    136135msgstr "годин" 
    137136 
    138 #: ../timesheet.php:631 
     137#: ../timesheet.php:630 
    139138msgid "Weekends" 
    140139msgstr "Вихідні" 
    141140 
    142 #: ../timesheet.php:644 ../timesheet.php:678 
    143 msgid "Legends" 
    144 msgstr "Легенди" 
    145  
    146 #: ../timesheet.php:647 
     141#: ../timesheet.php:643 ../timesheet.php:677 
     142msgid "Statuses" 
     143msgstr "Статуси" 
     144 
     145#: ../timesheet.php:646 
    147146msgid "Name" 
    148147msgstr "Назва" 
    149148 
    150 #: ../timesheet.php:650 
    151 msgid "Add Legend" 
    152 msgstr "Додати Легенду" 
    153  
    154 #: ../timesheet.php:655 ../timesheet.php:664 ../timesheet.php:684 
     149#: ../timesheet.php:649 
     150msgid "Add status" 
     151msgstr "Додати статус" 
     152 
     153#: ../timesheet.php:654 ../timesheet.php:663 ../timesheet.php:683 
    155154msgid "Enabled" 
    156155msgstr "Включено" 
    157156 
    158 #: ../timesheet.php:656 ../timesheet.php:668 ../timesheet.php:685 
     157#: ../timesheet.php:655 ../timesheet.php:684 
     158msgctxt "Settings status table header" 
     159msgid "Name" 
     160msgstr "Назва" 
     161 
     162#: ../timesheet.php:656 ../timesheet.php:685 
     163msgctxt "Settings status table header" 
     164msgid "Color" 
     165msgstr "Колір" 
     166 
     167#: ../timesheet.php:667 
    159168msgctxt "Settings legend table header" 
    160169msgid "Name" 
    161170msgstr "Назва" 
    162171 
    163 #: ../timesheet.php:657 ../timesheet.php:671 ../timesheet.php:686 
     172#: ../timesheet.php:670 
    164173msgctxt "Settings legend table header" 
    165174msgid "Color" 
    166175msgstr "Колір" 
    167176 
    168 #: ../timesheet.php:678 
    169 msgid "No legends" 
    170 msgstr "Немає легенд" 
    171  
    172 #: ../timesheet.php:694 
     177#: ../timesheet.php:677 
     178msgid "No statuses" 
     179msgstr "Немає статусів" 
     180 
     181#: ../timesheet.php:693 
    173182msgid "Date format" 
    174183msgstr "Формат дати" 
    175184 
    176 #: ../timesheet.php:701 
     185#: ../timesheet.php:700 
    177186msgid "WordPress Settings" 
    178187msgstr "Налаштування WordPress" 
    179188 
    180 #: ../timesheet.php:713 
     189#: ../timesheet.php:712 
    181190msgid "Custom" 
    182191msgstr "Користувацький" 
    183192 
    184 #: ../timesheet.php:724 
     193#: ../timesheet.php:723 
    185194msgid "Documentation on date and time formatting" 
    186195msgstr "Документація щодо форматування часу і дати" 
    187196 
    188 #: ../timesheet.php:729 
     197#: ../timesheet.php:727 
     198msgid "Allow to edit past days" 
     199msgstr "Дозволити редагувати минулі дні" 
     200 
     201#: ../timesheet.php:732 
    189202msgid "Display TS user page for" 
    190203msgstr "Відображати TS сторінку користувача для" 
    191204 
    192 #: ../timesheet.php:752 ../timesheet.php:805 
     205#: ../timesheet.php:757 ../timesheet.php:812 
    193206msgid "Close" 
    194207msgstr "Закрити" 
    195208 
    196 #: ../timesheet.php:763 ../timesheet.php:816 
     209#: ../timesheet.php:768 ../timesheet.php:823 
    197210msgid "Unlock premium options by upgrading to Pro version" 
    198211msgstr "Активуйте преміум опції оновившись до Pro версії" 
    199212 
    200 #: ../timesheet.php:766 ../timesheet.php:819 
     213#: ../timesheet.php:771 ../timesheet.php:826 
    201214msgid "Learn More" 
    202215msgstr "Докладніше" 
    203216 
    204 #: ../timesheet.php:782 
     217#: ../timesheet.php:787 
    205218msgid "Display TS report page for" 
    206219msgstr "Відображати TS сторінку звітів для" 
    207220 
    208 #: ../timesheet.php:834 
     221#: ../timesheet.php:841 
    209222msgid "Email reminder" 
    210223msgstr "Нагадування на емейл" 
    211224 
    212 #: ../timesheet.php:836 
     225#: ../timesheet.php:843 
    213226msgid "" 
    214227"This option allows sending an email reminder to a user if his work schedule " 
     
    218231"якщо він не заповнив графік роботи." 
    219232 
    220 #: ../timesheet.php:838 
     233#: ../timesheet.php:845 
    221234msgctxt "email reminder" 
    222235msgid "every" 
    223236msgstr "кожен (кожну)" 
    224237 
    225 #: ../timesheet.php:844 
     238#: ../timesheet.php:851 
    226239msgctxt "email reminder" 
    227240msgid "in" 
    228241msgstr "о" 
    229242 
    230 #: ../timesheet.php:848 
     243#: ../timesheet.php:855 
    231244msgctxt "email reminder" 
    232245msgid "Subject" 
    233246msgstr "Тема" 
    234247 
    235 #: ../timesheet.php:850 
     248#: ../timesheet.php:857 
    236249msgctxt "email reminder" 
    237250msgid "Message" 
    238251msgstr "Повідомлення" 
    239252 
    240 #: ../timesheet.php:853 
     253#: ../timesheet.php:860 
    241254msgid "" 
    242255"You can edit the content of reminder letter which will be sent to users. You " 
     
    247260"повідомлення:" 
    248261 
    249 #: ../timesheet.php:855 
     262#: ../timesheet.php:862 
    250263msgid "this shortcode will be replaced with the username" 
    251264msgstr "цей шорткод буде замінений на ім'я користувача" 
    252265 
    253 #: ../timesheet.php:856 
     266#: ../timesheet.php:863 
    254267msgid "" 
    255268"this shortcode will be replaced with days that are not filled by the user" 
    256269msgstr "цей шорткод буде замінений днями, що не заповнені користувачем" 
    257270 
    258 #: ../timesheet.php:857 
     271#: ../timesheet.php:864 
    259272msgid "" 
    260273"this shortcode will be replaced with the link to TS user page in the " 
     
    264277"управління" 
    265278 
    266 #: ../timesheet.php:858 
     279#: ../timesheet.php:865 
    267280msgid "" 
    268281"this shortcode will be replaced with the link with your text to TS user page " 
     
    272285"користувача в панелі управління" 
    273286 
    274 #: ../timesheet.php:869 ../timesheet.php:1124 
     287#: ../timesheet.php:876 ../timesheet.php:1135 
    275288msgid "Save Changes" 
    276289msgstr "Зберегти зміни" 
    277290 
    278 #: ../timesheet.php:913 ../timesheet.php:1167 
    279 msgid "Reset" 
    280 msgstr "Скидання" 
    281  
    282 #: ../timesheet.php:928 ../timesheet.php:948 
     291#: ../timesheet.php:916 
     292msgid "Please select..." 
     293msgstr "Виберіть будь ласка..." 
     294 
     295#: ../timesheet.php:931 ../timesheet.php:951 
    283296msgid "Data has not been saved" 
    284297msgstr "Дані не були збережені" 
    285298 
    286 #: ../timesheet.php:956 
     299#: ../timesheet.php:959 
    287300msgid "Data has been saved" 
    288301msgstr "Дані були збережені" 
    289302 
    290 #: ../timesheet.php:959 
     303#: ../timesheet.php:962 
    291304msgid "Data has not been saved, because there was no change" 
    292305msgstr "Дані не були збережені, оскільки зміни не вносилися" 
    293306 
    294 #: ../timesheet.php:992 
     307#: ../timesheet.php:995 
    295308msgid "Date from" 
    296309msgstr "Дата від" 
    297310 
    298 #: ../timesheet.php:996 
     311#: ../timesheet.php:999 
    299312msgid "Date to" 
    300313msgstr "Дата до" 
    301314 
    302 #: ../timesheet.php:1000 
     315#: ../timesheet.php:1003 
    303316msgid "Change date" 
    304317msgstr "Змінити дату" 
    305318 
    306 #: ../timesheet.php:1005 ../timesheet.php:1411 
    307 msgid "Legend" 
    308 msgstr "Легенда" 
    309  
    310 #: ../timesheet.php:1018 
     319#: ../timesheet.php:1008 ../timesheet.php:1420 
     320msgid "Status" 
     321msgstr "Статус" 
     322 
     323#: ../timesheet.php:1021 
    311324msgid "Transposition table" 
    312325msgstr "Транспонування таблиці" 
    313326 
    314 #: ../timesheet.php:1129 
     327#: ../timesheet.php:1141 
    315328msgid "Edit time" 
    316329msgstr "Змінити час" 
    317330 
    318 #: ../timesheet.php:1129 
     331#: ../timesheet.php:1141 
    319332msgid "Available in PRO" 
    320333msgstr "Доступно в ПРО" 
    321334 
    322 #: ../timesheet.php:1131 
    323 msgid "Delete legend" 
    324 msgstr "Видалити легенду" 
    325  
    326 #: ../timesheet.php:1154 
     335#: ../timesheet.php:1145 
     336msgid "Delete status" 
     337msgstr "Видалити статус" 
     338 
     339#: ../timesheet.php:1175 
    327340msgid "Week" 
    328341msgstr "Тиждень" 
    329342 
    330 #: ../timesheet.php:1155 
     343#: ../timesheet.php:1176 
    331344msgid "Month" 
    332345msgstr "Місяць" 
    333346 
    334 #: ../timesheet.php:1159 
     347#: ../timesheet.php:1180 
    335348msgctxt "Group by" 
    336349msgid "Date" 
    337350msgstr "Датою" 
    338351 
    339 #: ../timesheet.php:1160 
     352#: ../timesheet.php:1181 
    340353msgctxt "Group by" 
    341354msgid "User" 
    342355msgstr "Користувачом" 
    343356 
    344 #: ../timesheet.php:1168 
    345 msgid "All Legends" 
    346 msgstr "Всі легенди" 
    347  
    348 #: ../timesheet.php:1351 
     357#: ../timesheet.php:1188 
     358msgid "Blank" 
     359msgstr "Порожні" 
     360 
     361#: ../timesheet.php:1189 
     362msgid "All statuses" 
     363msgstr "Всі статуси" 
     364 
     365#: ../timesheet.php:1360 
    349366msgid "Select at least one user" 
    350367msgstr "Виберіть хоча б одного користувача" 
    351368 
    352 #: ../timesheet.php:1366 
     369#: ../timesheet.php:1375 
    353370msgid "Date" 
    354371msgstr "Дата" 
    355372 
    356 #: ../timesheet.php:1375 
     373#: ../timesheet.php:1384 
    357374msgctxt "date" 
    358375msgid "from" 
    359376msgstr "з" 
    360377 
    361 #: ../timesheet.php:1379 
     378#: ../timesheet.php:1388 
    362379msgctxt "date" 
    363380msgid "to" 
    364381msgstr "по" 
    365382 
    366 #: ../timesheet.php:1405 
     383#: ../timesheet.php:1414 
    367384msgid "Group by" 
    368385msgstr "Сортувати за" 
    369386 
    370 #: ../timesheet.php:1423 
     387#: ../timesheet.php:1432 
    371388msgid "Users" 
    372389msgstr "Користувачі" 
    373390 
    374 #: ../timesheet.php:1426 
     391#: ../timesheet.php:1435 
    375392msgid "Search user" 
    376393msgstr "Пошук користувача" 
    377394 
    378 #: ../timesheet.php:1430 
     395#: ../timesheet.php:1439 
    379396msgctxt "All users" 
    380397msgid "All users" 
    381398msgstr "Всі користувачі" 
    382399 
    383 #: ../timesheet.php:1436 
     400#: ../timesheet.php:1445 
    384401msgctxt "Search user" 
    385402msgid "No results" 
    386403msgstr "За вашим запитом нічого не знайдено" 
    387404 
    388 #: ../timesheet.php:1443 
     405#: ../timesheet.php:1452 
    389406msgctxt "Search user" 
    390407msgid "No users to select" 
    391408msgstr "Немає доступних користувачів для вибору" 
    392409 
    393 #: ../timesheet.php:1464 
     410#: ../timesheet.php:1473 
    394411msgctxt "Apply ts report" 
    395412msgid "Apply" 
    396413msgstr "Застосувати" 
    397414 
    398 #: ../timesheet.php:1524 ../timesheet.php:1637 ../timesheet.php:1734 
     415#: ../timesheet.php:1533 ../timesheet.php:1651 ../timesheet.php:1753 
    399416msgid "No data to view" 
    400417msgstr "Немає доступних даних для перегляду" 
    401418 
    402 #: ../timesheet.php:1925 
     419#: ../timesheet.php:1940 
    403420msgid "FAQ" 
    404421msgstr "FAQ" 
    405422 
    406 #: ../timesheet.php:1926 
     423#: ../timesheet.php:1941 
    407424msgid "Support" 
    408425msgstr "Тех. Підтримка" 
    409426 
    410 #: ../timesheet.php:1958 
     427#: ../timesheet.php:1973 
    411428msgid "Once Weekly" 
    412429msgstr "Один раз на тиждень" 
     430 
     431#~ msgid "Legend has not been added" 
     432#~ msgstr "Легенда не додана" 
     433 
     434#~ msgid "Legends" 
     435#~ msgstr "Легенди" 
     436 
     437#~ msgid "Add Legend" 
     438#~ msgstr "Додати Легенду" 
     439 
     440#~ msgid "No legends" 
     441#~ msgstr "Немає легенд" 
     442 
     443#~ msgid "Reset" 
     444#~ msgstr "Скидання" 
     445 
     446#~ msgid "Legend" 
     447#~ msgstr "Легенда" 
     448 
     449#~ msgid "Delete legend" 
     450#~ msgstr "Видалити легенду" 
     451 
     452#~ msgid "All Legends" 
     453#~ msgstr "Всі легенди" 
    413454 
    414455#~ msgid "" 
     
    455496#~ msgid "Highlight current day" 
    456497#~ msgstr "Виділити поточний день" 
    457  
    458 #~ msgid "Highlight past days" 
    459 #~ msgstr "Виділити попередні дні" 
  • timesheet/trunk/readme.txt

    r1525423 r1573199  
    44Tags: timesheet, timesheet plugin, schedule, my schedule, organise schedule, planning, time management, work, work schedule, office tool, reports, timetable 
    55Requires at least: 3.8 
    6 Tested up to: 4.6.1 
    7 Stable tag: 0.1.3 
     6Tested up to: 4.7.1 
     7Stable tag: 0.1.4 
    88License: GPLv3 or later 
    99License URI: http://www.gnu.org/licenses/gpl-3.0.html 
     
    3131* Enable automatic email notifications from timesheet 
    3232* Customize timesheet email notifications: 
    33     * Remaining day/time  
     33    * Remaining day/time 
    3434    * Subject 
    3535    * Message 
     
    8484= Why I don't see all users on the report page, just certain of them? = 
    8585 
    86 It is necessary to select roles for users who be able to see Timesheet page for filling out the schedule. To do so, please go to the plugin settings page and find "Display TS user page for" option. After that, select the necessary roles and save changes.  
     86It is necessary to select roles for users who be able to see Timesheet page for filling out the schedule. To do so, please go to the plugin settings page and find "Display TS user page for" option. After that, select the necessary roles and save changes. 
    8787 
    8888= How can I add a legend? = 
     
    9292= Is it possible to delete the legend from the legends list? = 
    9393 
    94 You can't delete the legend, but you can hide it. Please go to the plugin settings page, find the table with legends, and deselect the legend you want to hide.  
     94You can't delete the legend, but you can hide it. Please go to the plugin settings page, find the table with legends, and deselect the legend you want to hide. 
    9595 
    9696= I have some problems with the plugin's work. What Information should I provide to receive proper support? = 
     
    111111 
    112112== Changelog == 
     113 
     114= V0.1.4 - 12.01.2017 = 
     115* NEW : Ability to allow edit past days. 
     116* Update : BWS plugins section is updated. 
    113117 
    114118= V0.1.3 - 18.10.2016 = 
     
    131135== Upgrade Notice == 
    132136 
     137= V0.1.4 = 
     138* New features added. 
     139* Appearance improved. 
     140* Usability improved. 
     141 
    133142= V0.1.3 = 
    134143* New features added. 
  • timesheet/trunk/timesheet.php

    r1517164 r1573199  
    77Text Domain: timesheet 
    88Domain Path: /languages 
    9 Version: 0.1.3 
     9Version: 0.1.4 
    1010Author URI: http://bestwebsoft.com/ 
    1111License: Proprietary 
    1212*/ 
    1313 
    14 /*  © Copyright 2016  BestWebSoft  ( http://support.bestwebsoft.com ) 
     14/*  © Copyright 2017  BestWebSoft  ( http://support.bestwebsoft.com ) 
    1515 
    1616    This program is free software; you can redistribute it and/or modify 
     
    3030if ( ! function_exists( 'tmsht_admin_menu' ) ) { 
    3131    function tmsht_admin_menu() { 
    32         global $tmsht_options; 
     32        global $tmsht_options, $tmsht_current_user; 
    3333 
    3434        bws_general_menu(); 
     
    4343        $tmsht_current_user = wp_get_current_user(); 
    4444 
    45         foreach ( $tmsht_current_user->caps as $role => $value ) { 
    46             if ( in_array( $role, $tmsht_options['display_pages']['ts_user']['user_roles'] ) ) { 
     45        if ( isset( $tmsht_options['display_pages']['ts_user']['user_roles'] ) ) { 
     46            $display_timesheet_page = false; 
     47 
     48            if ( is_multisite() && is_super_admin( $tmsht_current_user->ID ) ) { 
     49                if ( in_array( 'administrator', $tmsht_options['display_pages']['ts_user']['user_roles'] ) ) { 
     50                    $display_timesheet_page = true; 
     51                } 
     52            } else { 
     53                foreach ( $tmsht_current_user->caps as $role => $value ) { 
     54                    if ( in_array( $role, $tmsht_options['display_pages']['ts_user']['user_roles'] ) ) { 
     55                        $display_timesheet_page = true; 
     56                        break; 
     57                    } 
     58                } 
     59            } 
     60 
     61            if ( $display_timesheet_page ) { 
    4762                $ts_user_page_hook = add_menu_page( 'Timesheet', 'Timesheet', 'read', 'timesheet_ts_user', 'tmsht_ts_user_page', 'dashicons-clock' ); 
    4863                add_action( 'load-' . $ts_user_page_hook, 'tmsht_add_tabs' ); 
    49                 break; 
    50             } 
    51         } 
    52  
    53         foreach ( $tmsht_current_user->caps as $role => $value ) { 
    54             if ( in_array( $role, $tmsht_options['display_pages']['ts_report']['user_roles'] ) ) { 
     64            } 
     65        } 
     66 
     67        if ( isset( $tmsht_options['display_pages']['ts_report']['user_roles'] ) ) { 
     68            $display_report_page = false; 
     69 
     70            if ( is_multisite() && is_super_admin( $tmsht_current_user->ID ) ) { 
     71                if ( in_array( 'administrator', $tmsht_options['display_pages']['ts_user']['user_roles'] ) ) { 
     72                    $display_report_page = true; 
     73                } 
     74            } else { 
     75                foreach ( $tmsht_current_user->caps as $role => $value ) { 
     76                    if ( in_array( $role, $tmsht_options['display_pages']['ts_report']['user_roles'] ) ) { 
     77                        $display_report_page = true; 
     78                        break; 
     79                    } 
     80                } 
     81            } 
     82 
     83            if ( $display_report_page ) { 
    5584                if ( isset( $ts_user_page_hook ) ) { 
    5685                    $ts_report_page_hook = add_submenu_page( 'timesheet_ts_user', __( 'Report', 'timesheet' ), __( 'Report', 'timesheet' ), 'read', 'timesheet_ts_report', 'tmsht_ts_report_page' ); 
     
    5988                } 
    6089                add_action( 'load-' . $ts_report_page_hook, 'tmsht_add_tabs' ); 
    61                 break; 
    6290            } 
    6391        } 
     
    128156        global $wpdb; 
    129157 
    130         $tmsht_prefix = "{$wpdb->prefix}tmsht"; 
    131  
    132158        require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); 
    133159        /* Table with legends */ 
    134         if ( ! $wpdb->query( "SHOW TABLES LIKE '{$tmsht_prefix}_legends';" ) ) { 
    135             $sql = "CREATE TABLE `{$tmsht_prefix}_legends` ( 
     160        if ( ! $wpdb->query( "SHOW TABLES LIKE '{$wpdb->prefix}tmsht_legends';" ) ) { 
     161            $sql = "CREATE TABLE `{$wpdb->prefix}tmsht_legends` ( 
    136162                `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    137163                `name` varchar(255) NOT NULL, 
     
    142168            dbDelta( $sql ); 
    143169 
    144                 $default_legends = array( 
     170            $default_legends = array( 
     171                array( 
     172                    'id'       => 1, 
     173                    'name'     => __( 'Work In Office', 'timesheet' ), 
     174                    'color'    => '#94e091', 
     175                    'disabled' => 0 
     176                ), 
     177                array( 
     178                    'id'       => 2, 
     179                    'name'     => __( 'Work Remotely', 'timesheet' ), 
     180                    'color'    => '#eded76', 
     181                    'disabled' => 0 
     182                ), 
     183                array( 
     184                    'id'       => 3, 
     185                    'name'     => __( 'Will be absent', 'timesheet' ), 
     186                    'color'    => '#dd8989', 
     187                    'disabled' => 0 
     188                ), 
     189                array( 
     190                    'id'       => 4, 
     191                    'name'     => __( 'Vacation', 'timesheet' ), 
     192                    'color'    => '#8da6bf', 
     193                    'disabled' => 0 
     194                ), 
     195            ); 
     196 
     197            foreach ( $default_legends as $legend ) { 
     198                $wpdb->insert( 
     199                    "{$wpdb->prefix}tmsht_legends", 
    145200                    array( 
    146                         'id'       => 1, 
    147                         'name'     => __( 'Work In Office', 'timesheet' ), 
    148                         'color'    => '#94e091', 
    149                         'disabled' => 0 
     201                        'id'        => $legend['id'], 
     202                        'name'      => $legend['name'], 
     203                        'color'     => $legend['color'], 
     204                        'disabled'  => $legend['disabled'] 
    150205                    ), 
    151                     array( 
    152                         'id'       => 2, 
    153                         'name'     => __( 'Work Remotely', 'timesheet' ), 
    154                         'color'    => '#eded76', 
    155                         'disabled' => 0 
    156                     ), 
    157                     array( 
    158                         'id'       => 3, 
    159                         'name'     => __( 'Will be absent', 'timesheet' ), 
    160                         'color'    => '#dd8989', 
    161                         'disabled' => 0 
    162                     ), 
    163                     array( 
    164                         'id'       => 4, 
    165                         'name'     => __( 'Vacation', 'timesheet' ), 
    166                         'color'    => '#8da6bf', 
    167                         'disabled' => 0 
    168                     ), 
     206                    array( '%d', '%s', '%s', '%d' ) 
    169207                ); 
    170  
    171                 foreach ( $default_legends as $legend ) { 
    172                     $wpdb->insert( 
    173                         "{$tmsht_prefix}_legends", 
    174                         array( 'id' => $legend['id'], 'name' => $legend['name'], 'color' => $legend['color'], 'disabled' => $legend['disabled'] ), 
    175                         array( '%d', '%s', '%s', '%d' ) 
    176                     ); 
    177                 } 
     208            } 
    178209        } 
    179210        /* Table with ts */ 
    180         if ( ! $wpdb->query( "SHOW TABLES LIKE '{$tmsht_prefix}_ts';" ) ) { 
    181             $sql = "CREATE TABLE `{$tmsht_prefix}_ts` ( 
     211        if ( ! $wpdb->query( "SHOW TABLES LIKE '{$wpdb->prefix}tmsht_ts';" ) ) { 
     212            $sql = "CREATE TABLE `{$wpdb->prefix}tmsht_ts` ( 
    182213                `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    183214                `user_id` bigint(20) NOT NULL, 
     
    192223} 
    193224 
    194 if ( ! function_exists( 'tmsht_activate' ) ) { 
    195     function tmsht_activate( $networkwide ) { 
    196         global $wpdb; 
    197  
    198         /* Activation function for network, check if it is a network activation - if so, run the activation function for each blog id */ 
    199         if ( is_multisite() && $networkwide ) { 
    200             $old_blog = $wpdb->blogid; 
    201             /* Get all blog ids */ 
    202             $blogids = $wpdb->get_col( "SELECT `blog_id` FROM $wpdb->blogs" ); 
    203             foreach ( $blogids as $blog_id ) { 
    204                 switch_to_blog( $blog_id ); 
    205                 tmsht_create_tables(); 
    206                 tmsht_register_options(); 
    207             } 
    208             switch_to_blog( $old_blog ); 
    209             return; 
    210         } 
    211         tmsht_create_tables(); 
    212         tmsht_register_options(); 
     225if ( ! function_exists( 'tmsht_register_options' ) ) { 
     226    function tmsht_register_options() { 
     227        global $tmsht_plugin_info, $tmsht_options; 
     228 
     229        $update_option = false; 
     230        $db_version = '0.1'; 
     231 
     232        if ( ! get_option( 'tmsht_options' ) ) { 
     233            $default_options = tmsht_get_default_options(); 
     234            add_option( 'tmsht_options', $default_options ); 
     235        } 
     236 
     237        $tmsht_options = get_option( 'tmsht_options' ); 
     238 
     239        /* Array merge incase this version has added new options */ 
     240        if ( ! isset( $tmsht_options['plugin_option_version'] ) || $tmsht_options['plugin_option_version'] != $tmsht_plugin_info["Version"] ) { 
     241 
     242            $default_options = tmsht_get_default_options(); 
     243 
     244            /* START Remove after 01.03.2017 */ 
     245            if ( ! isset( $tmsht_options['display_pages']['ts_user']['user_roles'] ) || ! isset( $tmsht_options['display_pages']['ts_report']['user_roles'] ) ) { 
     246                $tmsht_options['display_pages'] = array( 
     247                    'ts_user' => array( 
     248                        'user_roles'        => isset( $tmsht_options['display_pages']['ts_user']['user_roles'] ) ? $tmsht_options['display_pages']['ts_user']['user_roles'] : $default_options['display_pages']['ts_user']['user_roles'], 
     249                        'user_ids'          => array(), 
     250                        'has_sub_exception' => array() 
     251                    ), 
     252                    'ts_report' => array( 
     253                        'user_roles'        => isset( $tmsht_options['display_pages']['ts_report']['user_roles'] ) ? $tmsht_options['display_pages']['ts_report']['user_roles'] : $default_options['display_pages']['ts_report']['user_roles'], 
     254                        'user_ids'          => array(), 
     255                        'has_sub_exception' => array() 
     256                    ) 
     257                ); 
     258            } 
     259            /* END Remove after 01.03.2017 */ 
     260 
     261            $tmsht_options = array_merge( $default_options, $tmsht_options ); 
     262 
     263            $tmsht_options['plugin_option_version'] = $tmsht_plugin_info["Version"]; 
     264            $update_option = true; 
     265        } 
     266 
     267        /* Update tables when update plugin and tables changes*/ 
     268        if ( ! isset( $tmsht_options['plugin_db_version'] ) || $tmsht_options['plugin_db_version'] != $db_version ) { 
     269            tmsht_create_tables(); 
     270 
     271            /* update DB version */ 
     272            $tmsht_options['plugin_db_version'] = $db_version; 
     273            $update_option = true; 
     274        } 
     275 
     276        if ( $update_option ) { 
     277            update_option( 'tmsht_options', $tmsht_options ); 
     278        } 
    213279    } 
    214280} 
    215281 
    216 if ( ! function_exists( 'tmsht_register_options' ) ) { 
    217     function tmsht_register_options() { 
    218         global $tmsht_plugin_info, $tmsht_default_options, $tmsht_options; 
    219  
    220         $update_option = false; 
    221         $db_version = '0.1'; 
    222  
    223         if ( ! function_exists( 'get_editable_roles' ) ) { 
     282if ( ! function_exists( 'tmsht_get_default_options' ) ) { 
     283    function tmsht_get_default_options() { 
     284        global $tmsht_plugin_info; 
     285 
     286        if ( ! function_exists( 'get_editable_roles' ) ) 
    224287            require_once( ABSPATH . 'wp-admin/includes/user.php' ); 
    225         } 
    226  
    227         $tmsht_ts_user_roles = array_keys( get_editable_roles() ); 
    228  
    229         $tmsht_default_options = array( 
     288 
     289        $user_roles = array_keys( get_editable_roles() ); 
     290 
     291        $default_options = array( 
    230292            'plugin_option_version'   => $tmsht_plugin_info["Version"], 
    231             'plugin_db_version'       => $db_version, 
    232293            'ts_timeline_from'        => 0, 
    233294            'ts_timeline_to'          => 24, 
    234295            'weekends'                => array( 'sat', 'sun' ), 
     296            'edit_past_days'          => 0, 
    235297            'date_format_type'        => 'wp', 
    236298            'date_format'             => get_option( 'date_format' ), 
    237299            'display_pages'           => array( 
    238300                'ts_user' => array( 
    239                     'user_roles'        => $tmsht_ts_user_roles, 
     301                    'user_roles'        => $user_roles, 
    240302                    'user_ids'          => array(), 
    241303                    'has_sub_exception' => array() 
     
    258320            'first_install'           => strtotime( "now" ) 
    259321        ); 
    260  
    261         if ( ! get_option( 'tmsht_options' ) ) { 
    262             add_option( 'tmsht_options', $tmsht_default_options ); 
    263         } 
    264  
    265         $tmsht_options = get_option( 'tmsht_options' ); 
    266  
    267         /* Array merge incase this version has added new options */ 
    268         if ( ! isset( $tmsht_options['plugin_option_version'] ) || $tmsht_options['plugin_option_version'] != $tmsht_plugin_info["Version"] ) { 
    269  
    270             /* START Remove after 01.03.2017 */ 
    271             if ( ! isset( $tmsht_options[ 'display_pages' ]['ts_user']['user_roles'] ) || ! isset( $tmsht_options[ 'display_pages' ]['ts_report']['user_roles'] ) ) { 
    272                 $tmsht_options['display_pages'] = array( 
    273                     'ts_user' => array( 
    274                         'user_roles'        => $tmsht_options['display_pages']['ts_user'], 
    275                         'user_ids'          => array(), 
    276                         'has_sub_exception' => array() 
    277                     ), 
    278                     'ts_report' => array( 
    279                         'user_roles'        => $tmsht_options['display_pages']['ts_report'], 
    280                         'user_ids'          => array(), 
    281                         'has_sub_exception' => array() 
    282                     ) 
    283                 ); 
    284             } 
    285             /* END Remove after 01.03.2017 */ 
    286  
    287             $tmsht_options = array_merge( $tmsht_default_options, $tmsht_options ); 
    288  
    289             $tmsht_options['plugin_option_version'] = $tmsht_plugin_info["Version"]; 
    290             $update_option = true; 
    291         } 
    292  
    293         /* Update tables when update plugin and tables changes*/ 
    294         if ( ! isset( $tmsht_options['plugin_db_version'] ) || $tmsht_options['plugin_db_version'] != $db_version ) { 
    295             tmsht_create_tables(); 
    296  
    297             /* update DB version */ 
    298             $tmsht_options['plugin_db_version'] = $db_version; 
    299             $update_option = true; 
    300         } 
    301  
    302         if ( $update_option ) { 
    303             update_option( 'tmsht_options', $tmsht_options ); 
    304         } 
     322        return $default_options; 
    305323    } 
    306324} 
     
    320338 
    321339            $locale = explode( '_', get_locale() ); 
    322             $tmsht_datetime_options = array( 
     340            $datetime_options = array( 
    323341                'locale'         => $locale[0], 
    324342                'dayOfWeekStart' => get_option( 'start_of_week' ) 
     
    328346                wp_register_script( 'tmsht_datetimepicker_script', plugins_url( 'js/jquery.datetimepicker.full.min.js', __FILE__ ), array( 'jquery' ) ); 
    329347                wp_enqueue_script( 'ts_user_script', plugins_url( 'js/ts_user_script.js', __FILE__ ), array( 'jquery', 'jquery-ui-selectable', 'jquery-touch-punch', 'tmsht_datetimepicker_script' ), $tmsht_plugin_info['Version'] ); 
    330                 wp_localize_script( 'ts_user_script', 'tmsht_datetime_options', $tmsht_datetime_options ); 
     348                wp_localize_script( 'ts_user_script', 'tmsht_datetime_options', $datetime_options ); 
    331349                wp_enqueue_style( 'ts_user_styles', plugins_url( 'css/ts_user_styles.css', __FILE__ ), false, $tmsht_plugin_info['Version'] ); 
    332350                wp_enqueue_style( 'tmsht_datetimepicker_styles', plugins_url( 'css/jquery.datetimepicker.css', __FILE__ ), false ); 
     
    336354                wp_register_script( 'tmsht_datetimepicker_script', plugins_url( 'js/jquery.datetimepicker.full.min.js', __FILE__ ), array( 'jquery' ) ); 
    337355                wp_enqueue_script( 'ts_report_script', plugins_url( 'js/ts_report_script.js', __FILE__ ), array( 'jquery', 'tmsht_datetimepicker_script' ), $tmsht_plugin_info['Version'] ); 
    338                 wp_localize_script( 'ts_report_script', 'tmsht_datetime_options', $tmsht_datetime_options ); 
     356                wp_localize_script( 'ts_report_script', 'tmsht_datetime_options', $datetime_options ); 
    339357                wp_enqueue_style( 'ts_report_styles', plugins_url( 'css/ts_report_styles.css', __FILE__ ), false, $tmsht_plugin_info['Version'] ); 
    340358                wp_enqueue_style( 'tmsht_datetimepicker_styles', plugins_url( 'css/jquery.datetimepicker.css', __FILE__ ), false ); 
    341359            } 
    342360        } 
    343  
    344361    } 
    345362} 
     
    349366        global $wpdb; 
    350367 
    351         $tmsht_prefix = "{$wpdb->prefix}tmsht"; 
    352         $tmsht_get_legends = $wpdb->get_results( "SELECT color FROM `{$tmsht_prefix}_legends`", ARRAY_A ); 
    353         $tmsht_wrong_colors = array( '#ffffff', '#f9f9f9' ); 
    354  
    355         foreach ( $tmsht_get_legends as $tmsht_legend ) { 
    356             $tmsht_wrong_colors[] = $tmsht_legend['color']; 
     368        $get_legends = $wpdb->get_results( "SELECT `color` FROM `{$wpdb->prefix}tmsht_legends`", ARRAY_A ); 
     369        $wrong_colors = array( '#ffffff', '#f9f9f9' ); 
     370 
     371        foreach ( $get_legends as $legend ) { 
     372            $wrong_colors[] = $legend['color']; 
    357373        } 
    358374 
    359375        while (1) { 
    360             $tmsht_color = sprintf( "#%06x", rand( 0,16777215 ) ); 
    361             if ( ! in_array( $tmsht_color, $tmsht_wrong_colors ) ) { 
     376            $color = sprintf( "#%06x", rand( 0,16777215 ) ); 
     377            if ( ! in_array( $color, $wrong_colors ) ) { 
    362378                break; 
    363379            } 
    364380        } 
    365381 
    366         return $tmsht_color; 
     382        return $color; 
    367383    } 
    368384} 
     
    370386if ( ! function_exists( 'tmsht_settings_page' ) ) { 
    371387    function tmsht_settings_page() { 
    372         global $wpdb, $tmsht_options, $tmsht_default_options, $tmsht_plugin_info, $wp_version; 
     388        global $wpdb, $tmsht_options, $tmsht_plugin_info, $wp_version; 
    373389 
    374390        $message = $error = ""; 
    375  
    376         $tmsht_prefix = "{$wpdb->prefix}tmsht"; 
    377  
    378391        $plugin_basename = plugin_basename( __FILE__ ); 
    379  
    380         $tmsht_weekends_arr = $tmsht_days_reminder_arr = array( 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun' ); 
    381         $tmsht_date_format_arr = array( 'wp', 'custom' ); 
    382  
    383         $tmsht_date_formats = array( 
     392        $days_arr = array( 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'  ); 
     393        $date_formats = array( 
    384394            'wp'     => get_option( 'date_format' ), 
    385395            'custom' => $tmsht_options['date_format'] 
    386396        ); 
    387  
    388         $tmsht_get_roles = get_editable_roles(); 
    389         ksort( $tmsht_get_roles ); 
     397        $all_roles = get_editable_roles(); 
     398        ksort( $all_roles ); 
    390399 
    391400        if ( ( isset( $_POST['tmsht_save_settings'] ) || isset( $_POST['tmsht_add_ts_legend'] ) ) && check_admin_referer( 'tmsht_nonce_save_settings', 'tmsht_nonce_name' ) ) { 
     
    393402            if ( isset( $_POST['tmsht_add_ts_legend'] ) ) { 
    394403 
    395                 $tmsht_ts_legend_name = ( isset( $_POST['tmsht_add_ts_legend_name'] ) ) ? esc_html( trim( $_POST['tmsht_add_ts_legend_name'] ) ) : ''; 
    396                 $tmsht_ts_legend_color = ( isset( $_POST['tmsht_add_ts_legend_color'] ) ) ? esc_html( trim( $_POST['tmsht_add_ts_legend_color'] ) ) : ''; 
    397                 $tmsht_wrong_colors = array( '#ffffff', '#f9f9f9' ); 
    398  
    399                 if ( empty( $tmsht_ts_legend_name ) ) { 
    400                     $error = __( 'Please, input legend name', 'timesheet' ); 
    401                 } 
    402  
    403                 if ( ! preg_match( '/^#?([a-f0-9]{6}|[a-f0-9]{3})$/', $tmsht_ts_legend_color ) ) { 
     404                $ts_legend_name = ( isset( $_POST['tmsht_add_ts_legend_name'] ) ) ? esc_html( trim( $_POST['tmsht_add_ts_legend_name'] ) ) : ''; 
     405                $ts_legend_color = ( isset( $_POST['tmsht_add_ts_legend_color'] ) ) ? esc_html( trim( $_POST['tmsht_add_ts_legend_color'] ) ) : ''; 
     406 
     407                if ( empty( $ts_legend_name ) ) { 
     408                    $error = __( 'Please, input status name', 'timesheet' ); 
     409                } 
     410 
     411                if ( ! preg_match( '/^#?([a-f0-9]{6}|[a-f0-9]{3})$/', $ts_legend_color ) ) { 
    404412                    if ( $error != "" ) { 
    405                         $error .= '<br>' . __( 'Please, choose legend color', 'timesheet' ); 
     413                        $error .= '<br>' . __( 'Please, choose status color', 'timesheet' ); 
    406414                    } else { 
    407                         $error .= __( 'Please, choose legend color', 'timesheet' ); 
     415                        $error .= __( 'Please, choose status color', 'timesheet' ); 
    408416                    } 
    409417                } 
    410418 
    411                 if ( $error == "" && $wpdb->get_results( "SELECT `id` FROM `{$tmsht_prefix}_legends` WHERE `name` = '$tmsht_ts_legend_name' OR `color` = '$tmsht_ts_legend_color'" ) ) { 
    412                     $error = sprintf( __( 'Legend with name "%s" or with color %s already exists', 'timesheet' ), $tmsht_ts_legend_name, $tmsht_ts_legend_color ); 
    413                 } 
    414  
    415                 if ( $error == "" && in_array( $tmsht_ts_legend_color, $tmsht_wrong_colors ) ) { 
    416                     $error = sprintf( __( 'The legend with the color %s can not be saved. Please choose a different color.', 'timesheet' ), $tmsht_ts_legend_color ); 
     419                if ( $error == "" && $wpdb->get_results( "SELECT `id` FROM `{$wpdb->prefix}tmsht_legends` WHERE `name` = '$ts_legend_name' OR `color` = '$ts_legend_color'" ) ) { 
     420                    $error = sprintf( __( 'Status with name "%s" or with color %s already exists', 'timesheet' ), $ts_legend_name, $ts_legend_color ); 
     421                } 
     422 
     423                if ( $error == "" && in_array( $ts_legend_color, array( '#ffffff', '#f9f9f9' ) ) ) { 
     424                    $error = sprintf( __( 'The status with the color %s can not be saved. Please choose a different color.', 'timesheet' ), $ts_legend_color ); 
    417425                } 
    418426 
    419427                if ( $error == "" ) { 
    420  
    421428                    $tmsht_query = $wpdb->insert( 
    422                         "{$tmsht_prefix}_legends", 
    423                         array( 'name' => $tmsht_ts_legend_name, 'color' => $tmsht_ts_legend_color ), 
     429                        "{$wpdb->prefix}tmsht_legends", 
     430                        array( 'name' => $ts_legend_name, 
     431                            'color' => $ts_legend_color ), 
    424432                        array( '%s', '%s' ) 
    425433                    ); 
    426434 
    427435                    if ( $tmsht_query ) { 
    428                         unset( $tmsht_ts_legend_name, $tmsht_ts_legend_color ); 
    429                         $message = __( 'Legend has been successfully added', 'timesheet' ); 
     436                        unset( $ts_legend_name, $ts_legend_color ); 
     437                        $message = __( 'Status has been successfully added', 'timesheet' ); 
    430438                    } else { 
    431                         $error = __( 'Legend has not been added', 'timesheet' ); 
     439                        $error = __( 'Status has not been added', 'timesheet' ); 
    432440                    } 
    433441                } else { 
    434                     $error .= '<br>' . __( 'Legend has not been added', 'timesheet' ); 
     442                    $error .= '<br>' . __( 'Status has not been added', 'timesheet' ); 
    435443                } 
    436444            } 
    437445 
    438446            if ( isset( $_POST['tmsht_save_settings'] ) ) { 
     447                $default_options = tmsht_get_default_options(); 
    439448 
    440449                if ( isset( $_POST['bws_hide_premium_options'] ) ) { 
     
    460469                if ( is_array( $tmsht_weekends ) ) { 
    461470                    foreach ( $tmsht_weekends as $tmsht_weekend ) { 
    462                         if ( ! in_array( ucfirst( $tmsht_weekend ), $tmsht_weekends_arr ) ) { 
     471                        if ( ! in_array( ucfirst( $tmsht_weekend ), $days_arr ) ) { 
    463472                            unset( $tmsht_weekend ); 
    464473                        } 
     
    470479 
    471480                /* Enable/disable legends */ 
    472                 $tmsht_ts_legend_ids = ( isset( $_POST['tmsht_ts_legend_id'] ) && is_array( $_POST['tmsht_ts_legend_id'] ) ) ? $_POST['tmsht_ts_legend_id'] : array(); 
    473                 $tmsht_ts_legend_ids_hidden = ( isset( $_POST['tmsht_ts_legend_id_hidden'] ) && is_array( $_POST['tmsht_ts_legend_id_hidden'] ) ) ? $_POST['tmsht_ts_legend_id_hidden'] : array(); 
    474  
    475                 foreach ( $tmsht_ts_legend_ids_hidden as $legend_id ) { 
     481                $ts_legend_ids = ( isset( $_POST['tmsht_ts_legend_id'] ) && is_array( $_POST['tmsht_ts_legend_id'] ) ) ? $_POST['tmsht_ts_legend_id'] : array(); 
     482                $ts_legend_ids_hidden = ( isset( $_POST['tmsht_ts_legend_id_hidden'] ) && is_array( $_POST['tmsht_ts_legend_id_hidden'] ) ) ? $_POST['tmsht_ts_legend_id_hidden'] : array(); 
     483 
     484                foreach ( $ts_legend_ids_hidden as $legend_id ) { 
    476485                    $color = ( isset( $_POST['tmsht_ts_legend_color'][ $legend_id ] ) && preg_match( '/^#?([a-f0-9]{6}|[a-f0-9]{3})$/', trim( $_POST['tmsht_ts_legend_color'][ $legend_id ] ) ) ) ? trim( $_POST['tmsht_ts_legend_color'][ $legend_id ] ) : false; 
    477                     $disabled = ( ! in_array( $legend_id, $tmsht_ts_legend_ids ) ) ? 1 : 0; 
     486                    $disabled = ( ! in_array( $legend_id, $ts_legend_ids ) ) ? 1 : 0; 
    478487 
    479488                    if ( $color ) { 
    480                         $wpdb->query( $wpdb->prepare( "UPDATE `{$tmsht_prefix}_legends` SET `color` = %s, `disabled` = %d WHERE `id` = %d", $color, $disabled, $legend_id ) ); 
     489                        $wpdb->update( $wpdb->prefix . "tmsht_legends", 
     490                            array( 
     491                                'color'     => $color, 
     492                                'disabled'  => $disabled 
     493                            ), 
     494                            array( 'id' => $legend_id ), 
     495                            array( '%s', '%d' ) 
     496                        ); 
    481497                    } else { 
    482                         $wpdb->query( $wpdb->prepare( "UPDATE `{$tmsht_prefix}_legends` SET `disabled` = %d WHERE `id` = %d", $disabled, $legend_id ) ); 
     498                        $wpdb->update( $wpdb->prefix . "tmsht_legends", 
     499                            array( 
     500                                'disabled'  => $disabled 
     501                            ), 
     502                            array( 'id' => $legend_id ), 
     503                            array( '%d' ) 
     504                        ); 
    483505                    } 
    484506                } 
    485507 
    486508                /* Set date format */ 
    487                 if ( isset( $_POST['tmsht_date_format_type'] ) && in_array( $_POST['tmsht_date_format_type'] , $tmsht_date_format_arr ) ) { 
    488                     $tmsht_options['date_format_type'] = $_POST['tmsht_date_format_type']; 
    489  
     509                if ( isset( $_POST['tmsht_date_format_type'] ) ) { 
    490510                    switch ( $_POST['tmsht_date_format_type'] ) { 
    491                         case 'custom' : 
     511                        case 'custom': 
     512                            $tmsht_options['date_format_type'] = $_POST['tmsht_date_format_type']; 
    492513                            $tmsht_options['date_format'] = ( isset( $_POST['tmsht_date_format_code'] ) ) ? esc_html( trim( $_POST['tmsht_date_format_code'] ) ) : ''; 
    493514                            break; 
    494515                        case 'wp': 
    495                         default: 
     516                            $tmsht_options['date_format_type'] = $_POST['tmsht_date_format_type']; 
    496517                            $tmsht_options['date_format'] = get_option( 'date_format' ); 
    497518                            break; 
     519                        default: 
     520                            break; 
    498521                    } 
    499522                } 
    500523 
     524                $tmsht_options['edit_past_days'] = ( isset( $_POST['tmsht_edit_past_days'] ) && $_POST['tmsht_edit_past_days'] == 1 ) ? 1 : 0; 
     525 
    501526                /* Display TS user page for */ 
    502                 $tmsht_display_ts_user_page_for = ( isset( $_POST['tmsht_display_ts_user_page_for'] ) && is_array( $_POST['tmsht_display_ts_user_page_for'] ) ) ? $_POST['tmsht_display_ts_user_page_for'] : array(); 
     527                $display_ts_user_page_for = ( isset( $_POST['tmsht_display_ts_user_page_for'] ) && is_array( $_POST['tmsht_display_ts_user_page_for'] ) ) ? $_POST['tmsht_display_ts_user_page_for'] : array(); 
    503528                $tmsht_ts_user_roles = array(); 
    504                 foreach ( $tmsht_display_ts_user_page_for as $role ) { 
    505                     if ( array_key_exists( $role, $tmsht_get_roles ) ) { 
     529                foreach ( $display_ts_user_page_for as $role ) { 
     530                    if ( array_key_exists( $role, $all_roles ) ) { 
    506531                        $tmsht_ts_user_roles[] = $role; 
    507532                    } 
     
    511536 
    512537                /* Display TS report page for */ 
    513                 $tmsht_display_ts_report_page_for = ( isset( $_POST['tmsht_display_ts_report_page_for'] ) && is_array( $_POST['tmsht_display_ts_report_page_for'] ) ) ? $_POST['tmsht_display_ts_report_page_for'] : array(); 
    514                 $tmsht_ts_report_roles = array(); 
    515                 foreach ( $tmsht_display_ts_report_page_for as $role ) { 
    516                     if ( array_key_exists( $role, $tmsht_get_roles ) ) { 
    517                         $tmsht_ts_report_roles[] = $role; 
     538                $display_ts_report_page_for = ( isset( $_POST['tmsht_display_ts_report_page_for'] ) && is_array( $_POST['tmsht_display_ts_report_page_for'] ) ) ? $_POST['tmsht_display_ts_report_page_for'] : array(); 
     539                $ts_report_roles = array(); 
     540                foreach ( $display_ts_report_page_for as $role ) { 
     541                    if ( array_key_exists( $role, $all_roles ) ) { 
     542                        $ts_report_roles[] = $role; 
    518543                    } 
    519544                } 
    520545 
    521                 $tmsht_options['display_pages']['ts_report']['user_roles'] = $tmsht_ts_report_roles; 
     546                $tmsht_options['display_pages']['ts_report']['user_roles'] = $ts_report_roles; 
    522547 
    523548                $tmsht_options['reminder_on_email'] = ( isset( $_POST['tmsht_reminder_on_email'] ) && $_POST['tmsht_reminder_on_email'] == 1 ); 
    524                 $tmsht_options['day_reminder'] = ( isset( $_POST['tmsht_day_reminder'] ) && in_array( ucfirst( $_POST['tmsht_day_reminder'] ), $tmsht_days_reminder_arr ) ) ? $_POST['tmsht_day_reminder'] : $tmsht_default_options['day_reminder']; 
    525                 $tmsht_options['time_reminder'] = ( isset( $_POST['tmsht_time_reminder'] ) && preg_match( '/^([01]?[0-9]|2[0-3]):[0-5][0-9]$/', $_POST['tmsht_time_reminder'] ) ) ? $_POST['tmsht_time_reminder'] : $tmsht_default_options['time_reminder']; 
    526  
    527                 $tmsht_reminder_change_state = ( isset( $_POST['tmsht_reminder_change_state'] ) && $_POST['tmsht_reminder_change_state'] == 1 ); 
    528  
    529                 if ( $tmsht_reminder_change_state ) { 
     549                $tmsht_options['day_reminder'] = ( isset( $_POST['tmsht_day_reminder'] ) && in_array( ucfirst( $_POST['tmsht_day_reminder'] ), $days_arr ) ) ? $_POST['tmsht_day_reminder'] : $default_options['day_reminder']; 
     550                $tmsht_options['time_reminder'] = ( isset( $_POST['tmsht_time_reminder'] ) && preg_match( '/^([01]?[0-9]|2[0-3]):[0-5][0-9]$/', $_POST['tmsht_time_reminder'] ) ) ? $_POST['tmsht_time_reminder'] : $default_options['time_reminder']; 
     551 
     552                if ( isset( $_POST['tmsht_reminder_change_state'] ) && $_POST['tmsht_reminder_change_state'] == 1 ) { 
    530553 
    531554                    wp_clear_scheduled_hook( 'tmsht_reminder_to_email' ); 
     
    564587                } 
    565588 
    566                 $tmsht_options['content_reminder']['subject'] = ( isset( $_POST['tmsht_reminder_subject'] ) ) ? wp_strip_all_tags( $_POST['tmsht_reminder_subject'] ) : $tmsht_default_options['content_reminder']['subject']; 
    567                 $tmsht_options['content_reminder']['message'] = ( isset( $_POST['tmsht_reminder_message'] ) ) ? wp_strip_all_tags( $_POST['tmsht_reminder_message'] ) : $tmsht_default_options['content_reminder']['message']; 
     589                $tmsht_options['content_reminder']['subject'] = ( isset( $_POST['tmsht_reminder_subject'] ) ) ? wp_strip_all_tags( $_POST['tmsht_reminder_subject'] ) : $default_options['content_reminder']['subject']; 
     590                $tmsht_options['content_reminder']['message'] = ( isset( $_POST['tmsht_reminder_message'] ) ) ? wp_strip_all_tags( $_POST['tmsht_reminder_message'] ) : $default_options['content_reminder']['message']; 
    568591 
    569592                /* Save settings if no errors */ 
     
    576599 
    577600        $bws_hide_premium_options_check = bws_hide_premium_options_check( $tmsht_options ); 
     601 
     602        if ( isset( $_REQUEST['bws_restore_confirm'] ) && check_admin_referer( $plugin_basename, 'bws_settings_nonce_name' ) ) { 
     603            $tmsht_options = tmsht_get_default_options(); 
     604            update_option( 'tmsht_options', $tmsht_options ); 
     605            $wpdb->query( "UPDATE `{$wpdb->prefix}tmsht_legends` SET `disabled` = 1 WHERE `id` NOT IN (1,2,3,4)" ); 
     606            $message =  __( 'All plugin settings were restored.', 'timesheet' ); 
     607        } 
     608 
     609        $legends = $wpdb->get_results( "SELECT * FROM `{$wpdb->prefix}tmsht_legends`", ARRAY_A ); 
    578610 
    579611        /* GO PRO */ 
     
    584616            elseif ( ! empty( $go_pro_result['message'] ) ) 
    585617                $message = $go_pro_result['message']; 
    586         } 
    587  
    588         if ( isset( $_REQUEST['bws_restore_confirm'] ) && check_admin_referer( $plugin_basename, 'bws_settings_nonce_name' ) ) { 
    589             $tmsht_options = $tmsht_default_options; 
    590             update_option( 'tmsht_options', $tmsht_options ); 
    591             $wpdb->query( "UPDATE `{$tmsht_prefix}_legends` SET `disabled` = 1 WHERE `id` NOT IN (1,2,3,4)" ); 
    592             $message =  __( 'All plugin settings were restored.', 'timesheet' ); 
    593         } 
    594  
    595         $tmsht_legends = $wpdb->get_results( "SELECT * FROM `{$tmsht_prefix}_legends`", ARRAY_A ); ?> 
     618        } ?> 
    596619        <div class="wrap tmsht_wrap"> 
    597620            <h1 style="line-height: normal;"><?php _e( 'Timesheet Settings', 'timesheet' ); ?></h1> 
     
    632655                                <td> 
    633656                                    <fieldset> 
    634                                         <?php foreach ( $tmsht_weekends_arr as $weekend ) { ?> 
     657                                        <?php foreach ( $days_arr as $day ) { ?> 
    635658                                            <label class="tmsht_label_weekends"> 
    636                                                 <input type="checkbox" name="tmsht_weekends[]" value="<?php echo strtolower( $weekend ); ?>" <?php if ( in_array( strtolower( $weekend ), $tmsht_options['weekends'] ) ) echo 'checked="checked"'; ?>> 
    637                                                 <?php _e( $weekend ); ?> 
     659                                                <input type="checkbox" name="tmsht_weekends[]" value="<?php echo strtolower( $day ); ?>" <?php if ( in_array( strtolower( $day ), $tmsht_options['weekends'] ) ) echo 'checked="checked"'; ?>> 
     660                                                <?php _e( $day ); ?> 
    638661                                            </label> 
    639662                                        <?php } ?> 
     
    642665                            </tr> 
    643666                            <tr class="tmsht_settings_table_tr"> 
    644                                 <th><?php _e( 'Legends', 'timesheet' ); ?></th> 
     667                                <th><?php _e( 'Statuses', 'timesheet' ); ?></th> 
    645668                                <td id="tmsht_ts_legends_settings"> 
    646669                                    <div id="tmsht_ts_legends_table_wrap"> 
    647                                         <div><input id="tmsht_add_ts_legend_name" class="bws_no_bind_notice" type="text" name="tmsht_add_ts_legend_name" value="<?php if ( isset( $tmsht_ts_legend_name ) ) echo $tmsht_ts_legend_name; ?>" maxlength="100" placeholder="<?php _e( 'Name', 'timesheet' ); ?>"></div> 
    648                                         <div><input id="tmsht_add_ts_legend_color" class="bws_no_bind_notice" type="text" name="tmsht_add_ts_legend_color" value="<?php echo ( isset( $tmsht_ts_legend_color ) ) ? $tmsht_ts_legend_color : tmsht_generate_color(); ?>" data-default-color="#000000"></div> 
     670                                        <div><input id="tmsht_add_ts_legend_name" class="bws_no_bind_notice" type="text" name="tmsht_add_ts_legend_name" value="<?php if ( isset( $ts_legend_name ) ) echo $ts_legend_name; ?>" maxlength="100" placeholder="<?php _e( 'Name', 'timesheet' ); ?>"></div> 
     671                                        <div><input id="tmsht_add_ts_legend_color" class="bws_no_bind_notice" type="text" name="tmsht_add_ts_legend_color" value="<?php echo ( isset( $ts_legend_color ) ) ? $ts_legend_color : tmsht_generate_color(); ?>" data-default-color="#000000"></div> 
    649672                                        <div id="tmsht_ts_legend_header_actions"> 
    650                                             <input class="button-secondary bws_no_bind_notice" type="submit" name="tmsht_add_ts_legend" value="<?php _e( 'Add Legend', 'timesheet' ); ?>"> 
     673                                            <input class="button-secondary bws_no_bind_notice" type="submit" name="tmsht_add_ts_legend" value="<?php _e( 'Add status', 'timesheet' ); ?>"> 
    651674                                        </div> 
    652675                                        <table class="widefat striped tmsht_ts_legends_table"> 
     
    654677                                                <tr> 
    655678                                                    <td class="tmsht_ts_legend_id_cell"><?php _e( 'Enabled', 'timesheet' ); ?></td> 
    656                                                     <td class="tmsht_ts_legend_name_cell"><?php _ex( 'Name', 'Settings legend table header', 'timesheet' ); ?></td> 
    657                                                     <td class="tmsht_ts_legend_color_cell"><?php _ex( 'Color', 'Settings legend table header', 'timesheet' ); ?></td> 
     679                                                    <td class="tmsht_ts_legend_name_cell"><?php _ex( 'Name', 'Settings status table header', 'timesheet' ); ?></td> 
     680                                                    <td class="tmsht_ts_legend_color_cell"><?php _ex( 'Color', 'Settings status table header', 'timesheet' ); ?></td> 
    658681                                                </tr> 
    659682                                            </thead> 
    660683                                            <tbody> 
    661                                                 <?php if ( $tmsht_legends ) { 
    662                                                     foreach ( $tmsht_legends as $id => $legend ) { ?> 
     684                                                <?php if ( $legends ) { 
     685                                                    foreach ( $legends as $legend ) { ?> 
    663686                                                        <tr> 
    664687                                                            <td class="tmsht_ts_legend_id_cell" data-column-title="<?php _e( 'Enabled', 'timesheet' ); ?>"> 
     
    676699                                                } else { ?> 
    677700                                                    <tr> 
    678                                                         <td class="tmsht_ts_no_legends" colspan="3" data-column-title="<?php _e( 'Legends', 'timesheet' ); ?>"><?php _e( 'No legends', 'timesheet' ); ?></td> 
     701                                                        <td class="tmsht_ts_no_legends" colspan="3" data-column-title="<?php _e( 'Statuses', 'timesheet' ); ?>"><?php _e( 'No statuses', 'timesheet' ); ?></td> 
    679702                                                    </tr> 
    680703                                                <?php } ?> 
     
    683706                                                <tr> 
    684707                                                    <td class="tmsht_ts_legend_id_cell"><?php _e( 'Enabled', 'timesheet' ); ?></td> 
    685                                                     <td class="tmsht_ts_legend_name_cell"><?php _ex( 'Name', 'Settings legend table header', 'timesheet' ); ?></td> 
    686                                                     <td class="tmsht_ts_legend_color_cell"><?php _ex( 'Color', 'Settings legend table header', 'timesheet' ); ?></td> 
     708                                                    <td class="tmsht_ts_legend_name_cell"><?php _ex( 'Name', 'Settings status table header', 'timesheet' ); ?></td> 
     709                                                    <td class="tmsht_ts_legend_color_cell"><?php _ex( 'Color', 'Settings status table header', 'timesheet' ); ?></td> 
    687710                                                </tr> 
    688711                                            </tfoot> 
     
    699722                                                <td> 
    700723                                                    <label> 
    701                                                         <input id="tmsht_date_format_type_wp" type="radio" name="tmsht_date_format_type" data-date-format-code="<?php echo $tmsht_date_formats['wp']; ?>" data-date-format-display="<?php echo date_i18n( $tmsht_date_formats['wp'] ); ?>" value="wp" <?php if ( $tmsht_options['date_format_type'] == 'wp' ) echo 'checked="checked"'; ?>><?php _e( 'WordPress Settings', 'timesheet' ); ?> 
     724                                                        <input id="tmsht_date_format_type_wp" type="radio" name="tmsht_date_format_type" data-date-format-code="<?php echo $date_formats['wp']; ?>" data-date-format-display="<?php echo date_i18n( $date_formats['wp'] ); ?>" value="wp" <?php if ( $tmsht_options['date_format_type'] == 'wp' ) echo 'checked="checked"'; ?>><?php _e( 'WordPress Settings', 'timesheet' ); ?> 
    702725                                                    </label> 
    703726                                                </td> 
    704727                                                <td> 
    705728                                                    <label for="tmsht_date_format_type_wp"> 
    706                                                         <code><?php echo $tmsht_date_formats['wp']; ?></code> 
     729                                                        <code><?php echo $date_formats['wp']; ?></code> 
    707730                                                    </label> 
    708731                                                </td> 
     
    711734                                                <td> 
    712735                                                    <label> 
    713                                                         <input id="tmsht_date_format_type_custom" type="radio" name="tmsht_date_format_type" data-date-format-code="<?php echo $tmsht_date_formats['custom']; ?>" data-date-format-display="<?php echo date_i18n( $tmsht_date_formats['custom'] ); ?>" value="custom" <?php if ( $tmsht_options['date_format_type'] == 'custom' ) echo 'checked="checked"'; ?>><?php _e( 'Custom', 'timesheet' ); ?> 
     736                                                        <input id="tmsht_date_format_type_custom" type="radio" name="tmsht_date_format_type" data-date-format-code="<?php echo $date_formats['custom']; ?>" data-date-format-display="<?php echo date_i18n( $date_formats['custom'] ); ?>" value="custom" <?php if ( $tmsht_options['date_format_type'] == 'custom' ) echo 'checked="checked"'; ?>><?php _e( 'Custom', 'timesheet' ); ?> 
    714737                                                    </label> 
    715738                                                </td> 
    716739                                                <td> 
    717                                                     <input id="tmsht_date_format_code" type="text" name="tmsht_date_format_code" max-length="25" value="<?php echo $tmsht_date_formats['custom']; ?>"> 
    718                                                     <span id="tmsht_date_format_display"><?php echo date_i18n( $tmsht_date_formats['custom'] ); ?></span> 
     740                                                    <input id="tmsht_date_format_code" type="text" name="tmsht_date_format_code" max-length="25" value="<?php echo $date_formats['custom']; ?>"> 
     741                                                    <span id="tmsht_date_format_display"><?php echo date_i18n( $date_formats['custom'] ); ?></span> 
    719742                                                    <span id="tmsht_date_format_spinner" class="spinner"></span> 
    720743                                                </td> 
     
    726749                            </tr> 
    727750                            <tr class="tmsht_settings_table_tr"> 
     751                                <th><?php _e( 'Allow to edit past days', 'timesheet' ); ?></th> 
     752                                <td><input id="tmsht_edit_past_days" type="checkbox" name="tmsht_edit_past_days" value="1" <?php if ( $tmsht_options['edit_past_days'] == 1 ) echo 'checked="checked"'; ?>></td> 
     753                            </tr> 
     754                            <tr class="tmsht_settings_table_tr"> 
    728755                                <th> 
    729756                                    <?php _e( 'Display TS user page for', 'timesheet' ); ?> 
     
    732759                                    <div id="tmsht_display_ts_user_page_for_wrap"> 
    733760                                        <ul id="tmsht_display_ts_user_page_for"> 
    734                                             <?php foreach ( $tmsht_get_roles as $role => $details ) { 
    735  
    736                                                 $args = array( 
    737                                                     'blog_id'     => get_current_blog_id(), 
    738                                                     'role'        => $role, 
    739                                                     'number'      => 3, 
    740                                                     'count_total' => true 
     761                                            <?php foreach ( $all_roles as $role => $details ) { 
     762 
     763                                                $users_in_role = $wpdb->get_results( 
     764                                                    "SELECT users.ID, users.user_login 
     765                                                    FROM `{$wpdb->base_prefix}users` AS users, `{$wpdb->base_prefix}usermeta` AS umeta 
     766                                                    WHERE users.ID = umeta.user_id 
     767                                                    AND umeta.meta_key = '{$wpdb->prefix}capabilities' 
     768                                                    AND umeta.meta_value LIKE '%\"{$role}\"%' 
     769                                                    ORDER BY users.ID ASC 
     770                                                    LIMIT 3", 
     771                                                    OBJECT_K 
    741772                                                ); 
    742773 
    743                                                 $tmsht_get_users = new WP_User_Query( $args ); 
    744  
    745                                                 if ( $tmsht_get_users->get_total() > 0 ) { ?> 
     774                                                if ( $role == 'administrator' && is_multisite() && ! is_main_site() ) { 
     775                                                    $tmsht_super_admins = get_super_admins(); 
     776 
     777                                                    foreach ( $tmsht_super_admins as $super_admin ) { 
     778                                                        $get_user = get_user_by( 'login', $super_admin ); 
     779                                                        if ( $get_user ) { 
     780                                                            $add_user = array( 
     781                                                                'ID'           => $get_user->ID, 
     782                                                                'user_login'   => $get_user->user_login 
     783                                                            ); 
     784                                                            $users_in_role[ $get_user->ID ] = (object) $add_user; 
     785                                                        } 
     786                                                    } 
     787                                                } 
     788 
     789                                                ksort( $users_in_role ); 
     790 
     791                                                if ( count( $users_in_role ) > 0 ) { ?> 
    746792                                                    <li> 
    747793                                                        <label><input type="checkbox" name="tmsht_display_ts_user_page_for[]" value="<?php echo $role; ?>" <?php if ( in_array( $role, $tmsht_options['display_pages']['ts_user']['user_roles'] ) ) echo 'checked="checked"'; ?>><?php echo translate_user_role( $details['name'] ); ?></label> 
     
    753799                                                                        <div class="bws_table_bg"></div> 
    754800                                                                        <ul class="tmsht_display_ts_user_page_for_users"> 
    755                                                                             <?php foreach ( $tmsht_get_users->results as $user ) { ?> 
     801                                                                            <?php foreach ( $users_in_role as $user ) { ?> 
    756802                                                                                <li><label><input type="checkbox" <?php if ( in_array( $role, $tmsht_options['display_pages']['ts_user']['user_roles'] ) ) echo 'checked="checked"'; ?> disabled="disabled"><?php echo $user->user_login; ?></label></li> 
    757803                                                                            <?php } ?> 
     
    785831                                    <div id="tmsht_display_ts_report_page_for_wrap"> 
    786832                                        <ul id="tmsht_display_ts_report_page_for"> 
    787                                             <?php foreach ( $tmsht_get_roles as $role => $details )  { 
    788  
    789                                                 $args = array( 
    790                                                     'blog_id'     => get_current_blog_id(), 
    791                                                     'role'        => $role, 
    792                                                     'number'      => 3, 
    793                                                     'count_total' => true 
     833                                            <?php foreach ( $all_roles as $role => $details )  { 
     834 
     835                                                $users_in_role = $wpdb->get_results( 
     836                                                    "SELECT users.ID, users.user_login 
     837                                                    FROM `{$wpdb->base_prefix}users` AS users, `{$wpdb->base_prefix}usermeta` AS umeta 
     838                                                    WHERE users.ID = umeta.user_id 
     839                                                    AND umeta.meta_key = '{$wpdb->prefix}capabilities' 
     840                                                    AND umeta.meta_value LIKE '%\"{$role}\"%' 
     841                                                    ORDER BY users.ID ASC 
     842                                                    LIMIT 3", 
     843                                                    OBJECT_K 
    794844                                                ); 
    795845 
    796                                                 $tmsht_get_users = new WP_User_Query( $args ); 
    797  
    798                                                 if ( $tmsht_get_users->get_total() > 0 ) { ?> 
     846                                                if ( $role == 'administrator' && is_multisite() && ! is_main_site() ) { 
     847                                                    $tmsht_super_admins = get_super_admins(); 
     848 
     849                                                    foreach ( $tmsht_super_admins as $super_admin ) { 
     850                                                        $get_user = get_user_by( 'login', $super_admin ); 
     851                                                        if ( $get_user ) { 
     852                                                            $add_user = array( 
     853                                                                'ID'           => $get_user->ID, 
     854                                                                'user_login'   => $get_user->user_login 
     855                                                            ); 
     856                                                            $users_in_role[ $get_user->ID ] = (object) $add_user; 
     857                                                        } 
     858                                                    } 
     859                                                } 
     860 
     861                                                ksort( $users_in_role ); 
     862 
     863                                                if ( count( $users_in_role ) > 0 ) { ?> 
    799864                                                    <li> 
    800865                                                        <label><input type="checkbox" name="tmsht_display_ts_report_page_for[]" value="<?php echo $role; ?>" <?php if ( in_array( $role, $tmsht_options['display_pages']['ts_report']['user_roles'] ) ) echo 'checked="checked"'; ?>><?php echo translate_user_role( $details['name'] ); ?></label> 
     
    806871                                                                        <div class="bws_table_bg"></div> 
    807872                                                                        <ul class="tmsht_display_ts_report_page_for_users"> 
    808                                                                             <?php foreach ( $tmsht_get_users->results as $user ) { ?> 
     873                                                                            <?php foreach ( $users_in_role as $user ) { ?> 
    809874                                                                                <li><label><input type="checkbox" <?php if ( in_array( $role, $tmsht_options['display_pages']['ts_report']['user_roles'] ) ) echo 'checked="checked"'; ?> disabled="disabled"><?php echo $user->user_login; ?></label></li> 
    810875                                                                            <?php } ?> 
     
    838903                                        <span><?php _ex( 'every', 'email reminder', 'timesheet' ); ?>&nbsp;</span> 
    839904                                        <select id="tmsht_day_reminder" name="tmsht_day_reminder"> 
    840                                             <?php foreach ( $tmsht_days_reminder_arr as $day_reminder ) { ?> 
    841                                                 <option value="<?php echo strtolower( $day_reminder ); ?>" <?php if ( strtolower( $day_reminder ) == $tmsht_options['day_reminder'] ) echo 'selected="selected"'; ?>><?php _e( $day_reminder ); ?></option> 
     905                                            <?php foreach ( $days_arr as $day ) { ?> 
     906                                                <option value="<?php echo strtolower( $day ); ?>" <?php if ( strtolower( $day ) == $tmsht_options['day_reminder'] ) echo 'selected="selected"'; ?>><?php _e( $day ); ?></option> 
    842907                                            <?php } ?> 
    843908                                        </select> 
     
    875940                } 
    876941            } elseif ( 'go_pro' == $_GET['action'] ) { 
    877                 bws_go_pro_tab_show( $bws_hide_premium_options_check, $tmsht_plugin_info, $plugin_basename, 'timesheet.php', 'timesheet-pro.php', 'timesheet-pro/timesheet-pro.php', 'timesheet', '3bdf25984ad6aa9d95074e31c5eb9bb3', '606', isset( $go_pro_result['pro_plugin_is_activated'] ) ); 
     942                bws_go_pro_tab_show( $bws_hide_premium_options_check, $tmsht_plugin_info, $plugin_basename, 'timesheet_settings', 'timesheet_pro_settings', 'timesheet-pro/timesheet-pro.php', 'timesheet', '3bdf25984ad6aa9d95074e31c5eb9bb3', '606', isset( $go_pro_result['pro_plugin_is_activated'] ) ); 
    878943            } 
    879944            bws_plugin_reviews_block( $tmsht_plugin_info['Name'], 'timesheet' ); ?> 
     
    884949if ( ! function_exists( 'tmsht_ts_user_page' ) ) { 
    885950    function tmsht_ts_user_page() { 
    886         global $wpdb, $tmsht_options, $tmsht_plugin_info, $wp_version; 
     951        global $wpdb, $tmsht_options, $tmsht_plugin_info, $wp_version, $tmsht_current_user; 
    887952 
    888953        $message = $error = ""; 
    889  
    890         $tmsht_prefix = "{$wpdb->prefix}tmsht"; 
    891         $tmsht_current_user = wp_get_current_user(); 
    892954        $tmsht_date_format = $tmsht_options['date_format']; 
    893955        $tmsht_date_format_default = 'Y-m-d'; 
     
    907969        $timeline_to = $tmsht_options['ts_timeline_to'] - 1; 
    908970 
    909         $tmsht_legends = $wpdb->get_results( "SELECT * FROM `{$tmsht_prefix}_legends`", OBJECT_K ); 
     971        $tmsht_legends = $wpdb->get_results( "SELECT * FROM `{$wpdb->prefix}tmsht_legends`", OBJECT_K ); 
    910972        /* Convert stdClass items of array( $tmsht_legends ) to associative array */ 
    911973        $tmsht_legends = json_decode( json_encode( $tmsht_legends ), true ); 
    912         $tmsht_legends[-1] = array( 'name' => __( 'Reset', 'timesheet' ), 'color' => 'transparent', 'disabled' => 0 ); 
     974        $tmsht_legends[-1] = array( 'name' => __( 'Please select...', 'timesheet' ), 'color' => 'transparent', 'disabled' => 0 ); 
    913975        ksort( $tmsht_legends ); 
    914976 
     
    918980                foreach ( $_POST['tmsht_tr_date'] as $tr_date ) { 
    919981 
    920                     if ( date( $tmsht_date_format_default, strtotime( $tr_date ) ) < date( $tmsht_date_format_default ) ) { 
     982                    if ( date( $tmsht_date_format_default, strtotime( $tr_date ) ) < date( $tmsht_date_format_default ) && $tmsht_options['edit_past_days'] == 0 ) { 
    921983                        continue; 
    922984                    } 
    923985 
    924                     $tmsht_query = $wpdb->query( $wpdb->prepare( "DELETE FROM `{$tmsht_prefix}_ts` WHERE `user_id` = %d AND date(`time_from`) = %s", $tmsht_current_user->ID, $tr_date ) ); 
     986                    $tmsht_query = $wpdb->query( $wpdb->prepare( "DELETE FROM `{$wpdb->prefix}tmsht_ts` WHERE `user_id` = %d AND date(`time_from`) = %s", $tmsht_current_user->ID, $tr_date ) ); 
    925987 
    926988                    if ( $tmsht_query === false ) { 
     
    9391001 
    9401002                                $tmsht_query = $wpdb->insert( 
    941                                     "{$tmsht_prefix}_ts", 
     1003                                    "{$wpdb->prefix}tmsht_ts", 
    9421004                                    array( 'user_id' => $tmsht_current_user->ID, 'time_from' => $ts_interval_from, 'time_to' => $ts_interval_to, 'legend_id' => $legend_id ), 
    9431005                                    array( '%d', '%s', '%s', '%d' ) 
     
    9621024        $ts_data = $wpdb->get_results( 
    9631025            "SELECT `time_from`, `time_to`, `legend_id` 
    964             FROM `{$tmsht_prefix}_ts` 
     1026            FROM `{$wpdb->prefix}tmsht_ts` 
    9651027            WHERE date(`time_from`) >= '" . $date_from ."' 
    9661028            AND date(`time_to`) <= '" . $date_to . "' 
     
    10021064                </div> 
    10031065                <div class="tmsht_ts_user_filter_item tmsht_ts_user_filter_item_legend"> 
    1004                     <div class="tmsht_ts_user_filter_title"><strong><?php _e( 'Legend', 'timesheet' ); ?></strong></div> 
     1066                    <div class="tmsht_ts_user_filter_title"><strong><?php _e( 'Status', 'timesheet' ); ?></strong></div> 
    10051067                    <select id="tmsht_ts_user_legend" class="tmsht_ts_user_legend" name="tmsht_ts_user_legend"> 
    10061068                        <?php $legend_index = 0; 
    10071069                        foreach ( $tmsht_legends as $id => $legend ) { 
    10081070                            if ( $legend['disabled'] == 0 ) { ?> 
    1009                                 <option value="<?php echo $id; ?>" data-color="<?php echo $legend['color']; ?>" <?php if ( $legend_index == 1 ) echo 'selected="selected"'; ?>><?php echo $legend['name']; ?></option> 
     1071                                <option value="<?php echo $id; ?>" data-color="<?php echo $legend['color']; ?>" <?php if ( $legend_index == 0 ) echo 'selected="selected"'; ?>><?php echo $legend['name']; ?></option> 
    10101072                                <?php $legend_index++; 
    10111073                            } 
     
    10311093                            </thead> 
    10321094                            <tbody> 
    1033                             <?php $tmsht_tr_index = 0; 
     1095                            <?php $tmsht_tr_index = $tmsht_td_index = 0; 
    10341096                                foreach( $date_period as $date ) { 
    10351097                                $tmsht_tr_classes = ( date( $tmsht_date_format_default, strtotime( $date ) ) == date( $tmsht_date_format_default ) ) ? 'tmsht_ts_user_table_tr tmsht_ts_user_table_tr_today' : 'tmsht_ts_user_table_tr'; 
    10361098                                $tmsht_td_dateline_classes = ( date( $tmsht_date_format_default, strtotime( $date ) ) == date( $tmsht_date_format_default ) ) ? ' tmsht_ts_user_table_highlight_today' : ''; 
    10371099                                $tmsht_td_dateline_classes .= ( in_array( strtolower( date( 'D', strtotime( $date ) ) ), $tmsht_options['weekends'] ) ) ? ' tmsht_ts_user_table_highlight_weekdays' : ''; 
    1038                                 $tmsht_td_readonly = ( date( $tmsht_date_format_default, strtotime( $date ) ) < date( $tmsht_date_format_default ) ); ?> 
    1039                                 <tr class="<?php echo $tmsht_tr_classes; ?>"> 
    1040                                     <td class="tmsht_ts_user_table_td_dateline<?php echo $tmsht_td_dateline_classes; ?>"> 
    1041                                         <div class="tmsht_ts_user_formatted_date"><?php echo date_i18n( $tmsht_date_format, strtotime( $date ) ); ?></div> 
    1042                                         <div class="tmsht_ts_user_weekday"><?php echo date_i18n( 'D', strtotime( $date ) ); ?></div> 
     1100                                $tmsht_td_readonly = ( date( $tmsht_date_format_default, strtotime( $date ) ) < date( $tmsht_date_format_default ) && $tmsht_options['edit_past_days'] == 0 ); ?> 
     1101                                <tr class="<?php echo $tmsht_tr_classes; ?>" data-tr-date="<?php echo date( $tmsht_date_format_default, strtotime( $date ) ); ?>"> 
     1102                                    <td class="tmsht_ts_user_table_td_dateline"> 
     1103                                        <div class="tmsht_ts_user_table_td_dateline_group<?php echo $tmsht_td_dateline_classes; ?>" data-datline-date="<?php echo date( $tmsht_date_format_default, strtotime( $date ) ); ?>"> 
     1104                                            <div class="tmsht_ts_user_formatted_date"><?php echo date_i18n( $tmsht_date_format, strtotime( $date ) ); ?></div> 
     1105                                            <div class="tmsht_ts_user_weekday"><?php echo date_i18n( 'D', strtotime( $date ) ); ?></div> 
     1106                                        </div> 
    10431107                                        <input class="tmsht_tr_date" type="hidden" name="tmsht_tr_date[]" value="<?php echo date( $tmsht_date_format_default, strtotime( $date ) ); ?>" disabled="disabled"> 
    10441108                                    </td> 
    10451109                                    <?php for ( $time_value = $timeline_from; $time_value <= $timeline_to; $time_value++ ) { 
    1046                                         $search_date = date( $tmsht_date_format_default, strtotime( $date ) ); 
    1047                                         $td_datetime = strtotime( sprintf( "%s %02d:00:00", $search_date, $time_value ) ); 
    1048                                         $td_legend_id = -1; 
    1049                                         $td_title = ''; 
    1050  
    1051                                         if ( array_key_exists( $search_date, $ts_data ) ) { 
    1052                                             foreach ( $ts_data[ $search_date ] as $data ) { 
    1053                                                 if ( strtotime( $data['time_from'] ) <= $td_datetime && strtotime( $data['time_to'] ) > $td_datetime ) { 
    1054                                                     $td_legend_id = $data['legend_id']; 
    1055  
    1056                                                     $time_to_adjustment = ( date( 'i', strtotime( $data['time_to'] ) ) > 0 ) ? '24:00' : date( 'H:i', strtotime( $data['time_to'] ) ); 
    1057                                                     $td_title = sprintf( "%s (%s - %s)", $tmsht_legends[ $td_legend_id ]['name'], date( 'H:i', strtotime( $data['time_from'] ) ), $time_to_adjustment ); 
    1058                                                 } 
    1059                                             } 
    1060                                         } 
    1061  
    10621110                                        $tmsht_td_timeline_classes = 'tmsht_ts_user_table_td_time'; 
    1063  
    1064                                         if ( $td_legend_id != -1 ) { 
    1065                                             $tmsht_td_timeline_classes .= ' tmsht_ts_user_table_td_selected'; 
    1066                                         } 
    10671111 
    10681112                                        if ( $tmsht_td_readonly ) { 
    10691113                                            $tmsht_td_timeline_classes .= ' tmsht_ts_user_table_td_readonly'; 
     1114                                            $tmsht_td_index = -1; 
     1115                                        } 
     1116 
     1117                                        if ( $tmsht_td_index == 0 ) { 
     1118                                            $tmsht_td_timeline_classes .= ' tmsht_ts_user_table_td_highlighted'; 
    10701119                                        } ?> 
    1071                                         <td class="<?php echo $tmsht_td_timeline_classes; ?>" data-td-index="<?php echo $time_value; ?>" data-td-date="<?php echo date( $tmsht_date_format_default, strtotime( $date ) ); ?>" data-td-time="<?php printf( "%02d:00", $time_value ); ?>" data-legend-id="<?php echo $td_legend_id; ?>" title="<?php echo $td_title; ?>"> 
    1072                                         <div class="tmsht_ts_user_table_td_fill" style="background-color: <?php echo $tmsht_legends[ $td_legend_id ]['color']; ?>;"></div> 
     1120                                        <td class="<?php echo $tmsht_td_timeline_classes; ?>" data-tr-index="<?php echo $tmsht_tr_index; ?>" data-td-index="<?php echo $time_value; ?>" data-td-date="<?php echo date( $tmsht_date_format_default, strtotime( $date ) ); ?>" data-td-time-from="<?php printf( "%02d:00", $time_value ); ?>" data-td-time-to="<?php printf( "%02d:00", $time_value + 1 ); ?>"> 
     1121                                            <div class="tmsht_ts_user_table_td_fill_group"> 
     1122                                                <?php for ( $time_minutes = 0; $time_minutes < 60; $time_minutes += 5 ) { 
     1123 
     1124                                                    $search_date = date( $tmsht_date_format_default, strtotime( $date ) ); 
     1125                                                    $td_datetime = strtotime( sprintf( "%s %02d:%02d:00", $search_date, $time_value, $time_minutes ) ); 
     1126                                                    $td_legend_id = -1; 
     1127                                                    $td_title = ''; 
     1128 
     1129                                                    if ( array_key_exists( $search_date, $ts_data ) ) { 
     1130                                                        foreach ( $ts_data[ $search_date ] as $data ) { 
     1131 
     1132                                                            if ( strtotime( $data['time_from'] ) <= $td_datetime && strtotime( $data['time_to'] ) > $td_datetime ) { 
     1133                                                                $td_legend_id = $data['legend_id']; 
     1134                                                                $time_to_adjustment = ( date( 'i', strtotime( $data['time_to'] ) ) == 59 ) ? '24:00' : date( 'H:i', strtotime( $data['time_to'] ) ); 
     1135                                                                $td_title = sprintf( "%s (%s - %s)", $tmsht_legends[ $td_legend_id ]['name'], date( 'H:i', strtotime( $data['time_from'] ) ), $time_to_adjustment ); 
     1136                                                            } 
     1137                                                        } 
     1138                                                    } ?> 
     1139                                                    <div class="tmsht_ts_user_table_td_fill" style="background-color: <?php echo $tmsht_legends[ $td_legend_id ]['color']; ?>;" data-fill-time-from="<?php printf( "%02d:%02d", $time_value, $time_minutes ); ?>" data-fill-time-to="<?php printf( "%02d:%02d", ( $time_minutes < 55 ) ? $time_value : $time_value + 1, ( $time_minutes < 55 ) ? $time_minutes + 5 : 0 ); ?>" data-legend-id="<?php echo $td_legend_id; ?>" title="<?php echo $td_title; ?>"></div> 
     1140                                                <?php } ?> 
     1141                                            </div> 
    10731142                                            <?php if ( $tmsht_td_readonly ) { ?> 
    10741143                                                <div class="tmsht_ts_user_table_td_readonly_fill"></div> 
    10751144                                            <?php } ?> 
    10761145                                        </td> 
    1077                                     <?php } ?> 
     1146                                        <?php $tmsht_td_index++; 
     1147                                    } ?> 
    10781148                                </tr> 
    10791149                                <?php $tmsht_tr_index++; 
     
    10891159                            </tfoot> 
    10901160                        </table> 
     1161                        <div id="tmsht_ts_user_table_selection"></div> 
    10911162                    </div> 
    10921163                    <div class="tmsht_ts_user_advanced_container_area"> 
     
    11001171                                    <div class="tmsht_ts_user_advanced_box_content"> 
    11011172                                        <?php foreach( $date_period as $date ) { ?> 
    1102                                             <div class="tmsht_ts_user_advanced_box_details tmsht_maybe_hidden tmsht_hidden" data-box-details-date="<?php echo date( $tmsht_date_format_default, strtotime( $date ) ); ?>" data-box-details-date-format="<?php echo date_i18n( $tmsht_date_format, strtotime( $date ) ); ?>"> 
     1173                                            <div class="tmsht_ts_user_advanced_box_details tmsht_maybe_hidden tmsht_hidden" data-details-date="<?php echo date( $tmsht_date_format_default, strtotime( $date ) ); ?>"> 
    11031174                                                <div class="tmsht_ts_user_advanced_box_date"><?php echo date_i18n( $tmsht_date_format, strtotime( $date ) ); ?></div> 
    11041175                                                <div class="tmsht_ts_user_advanced_box_interval_wrap"></div> 
     
    11131184                        <div id="tmsht_ts_user_advanced_box_details_template" class="tmsht_hidden"> 
    11141185                            <div class="tmsht_ts_user_advanced_box_interval"> 
    1115                                 <span class="tmsht_ts_user_advanced_box_interval_from_text">%time_from%:00</span><input class="tmsht_ts_user_advanced_box_interval_from tmsht_maybe_hidden tmsht_hidden" type="text" value="%time_from%"> - <span class="tmsht_ts_user_advanced_box_interval_to_text">%time_to%:00</span><input class="tmsht_ts_user_advanced_box_interval_to tmsht_maybe_hidden tmsht_hidden" type="text" value="%time_to%"> 
     1186                                <span class="tmsht_ts_user_advanced_box_interval_from_text">%time_from%</span><input class="tmsht_ts_user_advanced_box_interval_from tmsht_maybe_hidden tmsht_hidden" type="text" value="%time_from%"> - <span class="tmsht_ts_user_advanced_box_interval_to_text">%time_to%</span><input class="tmsht_ts_user_advanced_box_interval_to tmsht_maybe_hidden tmsht_hidden" type="text" value="%time_to%"> 
    11161187                                <input type="hidden" data-hidden-name="tmsht_to_db[%date%][]" value="%date% %input_time_from%@%date% %input_time_to%@%legend_id%"> 
    11171188                            </div> 
     
    11301201                    <?php } ?> 
    11311202                    <li class="tmsht_ts_user_context_menu_item tmsht_ts_user_context_menu_item_enabled" data-action="delete"> 
    1132                         <span class="tmsht_ts_user_context_menu_icon dashicons dashicons-dismiss"></span><span class="tmsht_ts_user_context_menu_text"><?php _e( 'Delete legend', 'timesheet' ); ?></span> 
     1203                        <span class="tmsht_ts_user_context_menu_icon dashicons dashicons-dismiss"></span><span class="tmsht_ts_user_context_menu_text"><?php _e( 'Delete status', 'timesheet' ); ?></span> 
    11331204                    </li> 
     1205                    <li class="tmsht_ts_user_context_menu_item tmsht_ts_user_context_menu_item_separator tmsht_ts_user_context_menu_item_disabled"></li> 
     1206                    <?php foreach ( $tmsht_legends as $id => $legend ) { 
     1207                        if ( $legend['disabled'] == 0 && $id >= 0 ) { ?> 
     1208                            <li class="tmsht_ts_user_context_menu_item tmsht_ts_user_context_menu_item_enabled" data-legend-id="<?php echo $id; ?>" data-action="apply_status"> 
     1209                                <span class="tmsht_ts_user_context_menu_icon" style="background: <?php echo $legend['color']; ?>;"></span><span class="tmsht_ts_user_context_menu_text"><?php echo $legend['name']; ?></span> 
     1210                            </li> 
     1211                        <?php } 
     1212                    } ?> 
    11341213                </ul> 
    11351214            </form> 
     
    11431222 
    11441223        $message = $error = ""; 
    1145  
    1146         $tmsht_prefix = "{$wpdb->prefix}tmsht"; 
    11471224        $tmsht_date_format = $tmsht_options['date_format']; 
    11481225        $tmsht_date_format_default = 'Y-m-d'; 
     
    11641241 
    11651242        /* Get legends */ 
    1166         $tmsht_legends = $wpdb->get_results( "SELECT * FROM `{$tmsht_prefix}_legends`", OBJECT_K ); 
     1243        $tmsht_legends = $wpdb->get_results( "SELECT * FROM `{$wpdb->prefix}tmsht_legends`", OBJECT_K ); 
    11671244        /* Convert stdClass items of array( $tmsht_legends ) to associative array */ 
    11681245        $tmsht_legends = json_decode( json_encode( $tmsht_legends ), true ); 
    1169         $tmsht_legends[-1] = array( 'name' => __( 'Reset', 'timesheet' ), 'color' => 'transparent', 'disabled' => 1 ); 
    1170         $tmsht_legends[-2] = array( 'name' => __( 'All Legends', 'timesheet' ), 'color' => '#444444', 'disabled' => 0 ); 
     1246        $tmsht_legends[-1] = array( 'name' => __( 'Blank', 'timesheet' ), 'color' => 'transparent', 'disabled' => 1 ); 
     1247        $tmsht_legends[-2] = array( 'name' => __( 'All statuses', 'timesheet' ), 'color' => '#444444', 'disabled' => 0 ); 
    11711248        ksort( $tmsht_legends ); 
    11721249 
     
    11741251        $tmsht_users = array(); 
    11751252        $tmsht_roles = $tmsht_options['display_pages']['ts_user']['user_roles']; 
    1176         $tmsht_current_blog_id = get_current_blog_id(); 
    1177  
    1178         if ( $wp_version < '4.4' ) { 
    1179             foreach( $tmsht_roles as $role ) { 
    1180                 $args = array( 
    1181                     'blog_id' => $tmsht_current_blog_id, 
    1182                     'role'    => $role 
    1183                 ); 
    1184  
    1185                 $tmsht_get_users = get_users( $args ); 
    1186  
    1187                 foreach ( $tmsht_get_users as $user ) { 
    1188                     foreach ( $user->caps as $role => $value ) { 
    1189                         $tmsht_users[ $user->ID ] = $user->user_login; 
     1253 
     1254        foreach( $tmsht_roles as $role ) { 
     1255            $users_in_role = $wpdb->get_results( 
     1256                "SELECT users.ID, users.user_login 
     1257                FROM `{$wpdb->base_prefix}users` AS users, `{$wpdb->base_prefix}usermeta` AS umeta 
     1258                WHERE users.ID = umeta.user_id 
     1259                AND umeta.meta_key = '{$wpdb->prefix}capabilities' 
     1260                AND umeta.meta_value LIKE '%\"{$role}\"%' 
     1261                ORDER BY users.ID ASC", 
     1262                OBJECT_K 
     1263            ); 
     1264 
     1265            if ( $role == 'administrator' && is_multisite() && ! is_main_site() ) { 
     1266                $tmsht_super_admins = get_super_admins(); 
     1267 
     1268                foreach ( $tmsht_super_admins as $super_admin ) { 
     1269                    $get_user = get_user_by( 'login', $super_admin ); 
     1270                    if ( $get_user ) { 
     1271                        $add_user = array( 
     1272                            'ID'         => $get_user->ID, 
     1273                            'user_login' => $get_user->user_login 
     1274                        ); 
     1275                        $users_in_role[ $get_user->ID ] = (object) $add_user; 
    11901276                    } 
    11911277                } 
    11921278            } 
    1193         } else { 
    1194             $args = array( 
    1195                 'blog_id'  => $tmsht_current_blog_id, 
    1196                 'role__in' => $tmsht_roles 
    1197             ); 
    1198  
    1199             $tmsht_get_users = get_users( $args ); 
    1200  
    1201             foreach ( $tmsht_get_users as $user ) { 
    1202                 foreach ( $user->caps as $role => $value ) { 
    1203                     $tmsht_users[ $user->ID ] = $user->user_login; 
    1204                 } 
     1279 
     1280            ksort( $users_in_role ); 
     1281 
     1282            if ( count( $users_in_role ) == 0 ) { 
     1283                continue; 
     1284            } 
     1285 
     1286            foreach ( $users_in_role as $user_id => $user_data ) { 
     1287                $tmsht_users[ $user_data->ID ] = $user_data->user_login; 
    12051288            } 
    12061289        } 
     
    12551338 
    12561339        /* Report generation */ 
    1257         $date_from = ( isset( $_POST['tmsht_ts_report_date_from'] ) && strtotime( $_POST['tmsht_ts_report_date_from'] ) ) ? $_POST['tmsht_ts_report_date_from'] : date( $tmsht_date_format_default ); 
    1258         $date_to = ( isset( $_POST['tmsht_ts_report_date_to'] ) && strtotime( $_POST['tmsht_ts_report_date_to'] ) ) ? $_POST['tmsht_ts_report_date_to'] : date( $tmsht_date_format_default, strtotime( "next " . $week_days_arr[ $day_of_week_start ] . " +6 days" ) ); 
     1340        $date_from = $filter_date_from = ( isset( $_POST['tmsht_ts_report_date_from'] ) && strtotime( $_POST['tmsht_ts_report_date_from'] ) && $ts_report_filters['date']['type'] == 'period' ) ? $_POST['tmsht_ts_report_date_from'] : date( $tmsht_date_format_default ); 
     1341        $date_to = $filter_date_to = ( isset( $_POST['tmsht_ts_report_date_to'] ) && strtotime( $_POST['tmsht_ts_report_date_to'] ) && $ts_report_filters['date']['type'] == 'period' ) ? $_POST['tmsht_ts_report_date_to'] : date( $tmsht_date_format_default, strtotime( "next " . $week_days_arr[ $day_of_week_start ] . " +6 days" ) ); 
     1342 
     1343        if ( $ts_report_filters['date']['type'] == 'preset' ) { 
     1344            $date_from = date( $tmsht_date_format_default ); 
     1345            $date_to = date( $tmsht_date_format_default, strtotime( "+" . $ts_report_filters['date']['preset']['quantity'] . " " . $ts_report_filters['date']['preset']['unit'] ) ); 
     1346        } 
    12591347 
    12601348        $date_start = new DateTime( $date_from ); 
    1261  
    1262         if ( $ts_report_filters['date']['type'] == 'period' ) { 
    1263             $date_end = new DateTime( $date_to ); 
    1264         } else { 
    1265             $date_end = new DateTime( date( $tmsht_date_format_default, strtotime( "+" . $ts_report_filters['date']['preset']['quantity'] . " " . $ts_report_filters['date']['preset']['unit'] ) ) ); 
    1266         } 
     1349        $date_end = new DateTime( $date_to ); 
    12671350 
    12681351        $date_end = $date_end->modify( '+1 day' ); 
     
    12861369        if ( $tmsht_selected_users ) { 
    12871370            $tmsht_user_ids = implode( ',', $tmsht_selected_users ); 
    1288             $ts_data_query = "SELECT `id`, `user_id`, `time_from`, `time_to`, `legend_id` FROM `{$tmsht_prefix}_ts` WHERE date(`time_from`) >= '" . $date_from ."' AND date(`time_to`) <= '" . $date_to . "'"; 
     1371            $ts_data_query = "SELECT `id`, `user_id`, `time_from`, `time_to`, `legend_id` FROM `{$wpdb->prefix}tmsht_ts` WHERE date(`time_from`) >= '" . $date_from ."' AND date(`time_to`) <= '" . $date_to . "'"; 
    12891372 
    12901373            if ( $tmsht_current_legend_id > 0 ) { 
     
    13751458                                            <div class="tmsht_ts_report_filter_block"> 
    13761459                                                <span><?php _ex( 'from', 'date', 'timesheet' ); ?></span> 
    1377                                                 <input id="tmsht_ts_report_date_from" class="tmsht_date_datepicker_input" type="text" name="tmsht_ts_report_date_from" value="<?php echo $date_from; ?>" autocomplete="off"> 
     1460                                                <input id="tmsht_ts_report_date_from" class="tmsht_date_datepicker_input" type="text" name="tmsht_ts_report_date_from" value="<?php echo $filter_date_from; ?>" autocomplete="off"> 
    13781461                                            </div> 
    13791462                                            <div class="tmsht_ts_report_filter_block"> 
    13801463                                                <span><?php _ex( 'to', 'date', 'timesheet' ); ?></span> 
    1381                                                 <input id="tmsht_ts_report_date_to" class="tmsht_date_datepicker_input" type="text" name="tmsht_ts_report_date_to" value="<?php echo $date_to; ?>" autocomplete="off"> 
     1464                                                <input id="tmsht_ts_report_date_to" class="tmsht_date_datepicker_input" type="text" name="tmsht_ts_report_date_to" value="<?php echo $filter_date_to; ?>" autocomplete="off"> 
    13821465                                            </div> 
    13831466                                        </td> 
     
    14101493                        </div> 
    14111494                        <div class="tmsht_ts_report_filter_item tmsht_ts_report_filter_item_legend"> 
    1412                             <div class="tmsht_ts_report_filter_title"><strong><?php _e( 'Legend', 'timesheet' ); ?></strong></div> 
     1495                            <div class="tmsht_ts_report_filter_title"><strong><?php _e( 'Status', 'timesheet' ); ?></strong></div> 
    14131496                                <fieldset> 
    14141497                                <?php $legend_index = 0; 
     
    15121595                                    $tmsht_td_dateline_classes .= ( $tmsht_is_today ) ? ' tmsht_ts_report_table_highlight_today' : ''; 
    15131596                                    $tmsht_td_dateline_classes .= ( in_array( strtolower( date( 'D', strtotime( $date ) ) ), $tmsht_options['weekends'] ) ) ? ' tmsht_ts_report_table_highlight_weekdays' : ''; 
    1514                                     $tmsht_td_readonly = ( date( $tmsht_date_format_default, strtotime( $date ) ) < date( $tmsht_date_format_default ) ); ?> 
     1597                                    $tmsht_td_readonly = ( date( $tmsht_date_format_default, strtotime( $date ) ) < date( $tmsht_date_format_default ) && $tmsht_options['edit_past_days'] == 0 ); ?> 
    15151598                                    <tr class="<?php echo $tmsht_tr_classes; ?>"> 
    15161599                                        <?php if ( $pre_date != $date ) { ?> 
     
    15311614                                                </td> 
    15321615                                                <?php for ( $time_value = $timeline_from; $time_value <= $timeline_to; $time_value++ ) { 
    1533                                                     $search_date = date( $tmsht_date_format_default, strtotime( $date ) ); 
    1534                                                     $td_datetime = strtotime( sprintf( "%s %02d:00:00", $search_date, $time_value ) ); 
    1535                                                     $td_legend_id = -1; 
    1536                                                     $td_title = ''; 
    1537  
    1538                                                     foreach ( $user_data_1 as $data ) { 
    1539                                                         if ( $data ) { 
    1540                                                             if ( strtotime( $data['time_from'] ) <= $td_datetime && strtotime( $data['time_to'] ) > $td_datetime ) { 
    1541                                                                 $td_legend_id = $data['legend_id']; 
    1542  
    1543                                                                 $time_to_adjustment = ( date( 'i', strtotime( $data['time_to'] ) ) > 0 ) ? '24:00' : date( 'H:i', strtotime( $data['time_to'] ) ); 
    1544                                                                 $td_title = sprintf( "%s (%s - %s)", $tmsht_legends[ $td_legend_id ]['name'], date( 'H:i', strtotime( $data['time_from'] ) ), $time_to_adjustment ); 
    1545  
    1546                                                             } 
    1547                                                         } 
    1548                                                     } 
    1549  
    15501616                                                    $tmsht_td_timeline_classes = 'tmsht_ts_report_table_td_time tmsht_ts_report_table_td_time_' . $time_value; 
    15511617                                                    $tmsht_td_timeline_classes .= ( $tmsht_is_today ) ? ' tmsht_ts_report_table_td_today' : ''; 
    1552                                                     $tmsht_td_timeline_classes .= ( $td_legend_id != -1 ) ? ' tmsht_ts_report_table_td_selected' : ''; 
    15531618                                                    $tmsht_td_hover_classes = 'tmsht_ts_report_table_td_helper tmsht_ts_report_table_td_helper_' . $time_value; ?> 
    1554                                                     <td class="<?php echo $tmsht_td_timeline_classes; ?>" data-td-index="<?php echo $time_value; ?>" data-td-date="<?php echo date( $tmsht_date_format_default ); ?>" data-td-time="<?php printf( "%02d:00", $time_value ); ?>" data-legend-id="<?php echo $td_legend_id; ?>" title="<?php echo $td_title; ?>"> 
     1619                                                    <td class="<?php echo $tmsht_td_timeline_classes; ?>" data-td-index="<?php echo $time_value; ?>" data-td-date="<?php echo date( $tmsht_date_format_default ); ?>" data-td-time="<?php printf( "%02d:00", $time_value ); ?>"> 
    15551620                                                        <div class="<?php echo $tmsht_td_hover_classes; ?>"></div> 
    1556                                                         <div class="tmsht_ts_report_table_td_fill" style="background-color: <?php echo $tmsht_legends[ $td_legend_id ]['color']; ?>;"></div> 
     1621                                                        <div class="tmsht_ts_report_table_td_fill_group"> 
     1622                                                            <?php for ( $time_minutes = 0; $time_minutes < 60; $time_minutes += 5 ) { 
     1623 
     1624                                                                $search_date = date( $tmsht_date_format_default, strtotime( $date ) ); 
     1625                                                                $td_datetime = strtotime( sprintf( "%s %02d:%02d:00", $search_date, $time_value, $time_minutes ) ); 
     1626                                                                $td_legend_id = -1; 
     1627                                                                $td_title = ''; 
     1628 
     1629                                                                foreach ( $user_data_1 as $data ) { 
     1630                                                                    if ( $data ) { 
     1631                                                                        if ( strtotime( $data['time_from'] ) <= $td_datetime && strtotime( $data['time_to'] ) > $td_datetime ) { 
     1632                                                                            $td_legend_id = $data['legend_id']; 
     1633 
     1634                                                                            $time_to_adjustment = ( date( 'i', strtotime( $data['time_to'] ) ) == 59 ) ? '24:00' : date( 'H:i', strtotime( $data['time_to'] ) ); 
     1635                                                                            $td_title = sprintf( "%s (%s - %s)", $tmsht_legends[ $td_legend_id ]['name'], date( 'H:i', strtotime( $data['time_from'] ) ), $time_to_adjustment ); 
     1636                                                                        } 
     1637                                                                    } 
     1638                                                                } ?> 
     1639                                                                <div class="tmsht_ts_report_table_td_fill" style="background-color: <?php echo $tmsht_legends[ $td_legend_id ]['color']; ?>;" data-fill-time-from="<?php printf( "%02d:%02d", $time_value, $time_minutes ); ?>" data-fill-time-to="<?php printf( "%02d:%02d", ( $time_minutes < 55 ) ? $time_value : $time_value + 1, ( $time_minutes < 55 ) ? $time_minutes + 5 : 0 ); ?>" data-legend-id="<?php echo $td_legend_id; ?>" title="<?php echo $td_title; ?>"></div> 
     1640                                                            <?php } ?> 
     1641                                                        </div> 
    15571642                                                        <?php if ( $tmsht_td_readonly ) { ?> 
    15581643                                                            <div class="tmsht_ts_report_table_td_readonly_fill"></div> 
     
    15741659                                            </td> 
    15751660                                            <?php for ( $time_value = $timeline_from; $time_value <= $timeline_to; $time_value++ ) { 
    1576                                                 $search_date = date( $tmsht_date_format_default, strtotime( $date ) ); 
    1577                                                 $td_datetime = strtotime( sprintf( "%s %02d:00:00", $search_date, $time_value ) ); 
    1578                                                 $td_legend_id = -1; 
    1579                                                 $td_title = ''; 
    1580  
    1581                                                 foreach ( $user_data_2 as $data ) { 
    1582                                                     if ( $data ) { 
    1583                                                         if ( strtotime( $data['time_from'] ) <= $td_datetime && strtotime( $data['time_to'] ) > $td_datetime ) { 
    1584                                                             $td_legend_id = $data['legend_id']; 
    1585  
    1586                                                             $time_to_adjustment = ( date( 'i', strtotime( $data['time_to'] ) ) > 0 ) ? '24:00' : date( 'H:i', strtotime( $data['time_to'] ) ); 
    1587                                                             $td_title = sprintf( "%s (%s - %s)", $tmsht_legends[ $td_legend_id ]['name'], date( 'H:i', strtotime( $data['time_from'] ) ), $time_to_adjustment ); 
    1588                                                         } 
    1589                                                     } 
    1590                                                 } 
    1591  
    15921661                                                $tmsht_td_timeline_classes = 'tmsht_ts_report_table_td_time tmsht_ts_report_table_td_time_' . $time_value; 
    15931662                                                $tmsht_td_timeline_classes .= ( $tmsht_is_today ) ? ' tmsht_ts_report_table_td_today' : ''; 
    1594                                                 $tmsht_td_timeline_classes .= ( $td_legend_id != -1 ) ? ' tmsht_ts_report_table_td_selected' : ''; 
    15951663                                                $tmsht_td_hover_classes = 'tmsht_ts_report_table_td_helper tmsht_ts_report_table_td_helper_' . $time_value; ?> 
    1596                                                 <td class="<?php echo $tmsht_td_timeline_classes; ?>" data-td-index="<?php echo $time_value; ?>" data-td-date="<?php echo date( $tmsht_date_format_default ); ?>" data-td-time="<?php printf( "%02d:00", $time_value ); ?>" data-legend-id="<?php echo $td_legend_id; ?>" title="<?php echo $td_title; ?>"> 
     1664                                                <td class="<?php echo $tmsht_td_timeline_classes; ?>" data-td-index="<?php echo $time_value; ?>" data-td-date="<?php echo date( $tmsht_date_format_default ); ?>" data-td-time="<?php printf( "%02d:00", $time_value ); ?>"> 
    15971665                                                    <div class="<?php echo $tmsht_td_hover_classes; ?>"></div> 
    1598                                                     <div class="tmsht_ts_report_table_td_fill" style="background-color: <?php echo $tmsht_legends[ $td_legend_id ]['color']; ?>;"></div> 
     1666                                                &nbs