Plugin Directory

Changeset 2668739


Ignore:
Timestamp:
01/29/2022 09:54:27 AM (4 years ago)
Author:
darklrd
Message:

iFlyChat new backend update

Location:
iflychat/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • iflychat/trunk/iflychat.php

    r2628223 r2668739  
    66 * Description: One on one chat, Multiple chatrooms, Embedded chatrooms
    77 * Author: iFlyChat Team
    8  * Version: 4.7.0
     8 * Version: 4.6.4
    99 * Author URI: https://iflychat.com/
    1010 *
    1111 * @package iflychat
    12  * @version 4.7.0
     12 * @version 4.6.4
    1313 *
    1414 * Exit if accessed directly
     
    6767}
    6868
    69 define( 'IFLYCHAT_PLUGIN_VERSION', 'WP-4.7.0' );
     69define( 'IFLYCHAT_PLUGIN_VERSION', 'WP-4.6.4' );
    7070if ( ! defined( 'IFLYCHAT_DEBUG' ) ) {
    7171    define( 'IFLYCHAT_DEBUG', false );
     
    8686 * Function to get Session Token.
    8787 *
    88  * @since 4.7.0
     88 * @since 4.6.4
    8989 * @return String $session_token as String.
    9090 */
    9191function iflychat_get_hash_session() {
    9292    $data = uniqid( mp_rand(), true );
    93     $hash = base64_encode( hash( 'sha256', $data, true ) ); //phpcs:ignore
     93    $hash = base64_encode( hash( 'sha256', $data, true ) );
    9494
    9595    $session_token = strtr(
     
    107107 * Function to get User ID.
    108108 *
    109  * @since 4.7.0
     109 * @since 4.6.4
    110110 * @return String user ID as String.
    111111 */
     
    122122 * Function to get User's Display Name.
    123123 *
    124  * @since 4.7.0
     124 * @since 4.6.4
    125125 * @return String user's Display Name as String or false.
    126126 */
     
    148148 * Function to load script Async.
    149149 *
    150  * @since 4.7.0
     150 * @since 4.6.4
    151151 * @param String $url String.
    152152 * @return String $url String.
     
    166166 * Function to Initialise the plugin.
    167167 *
    168  * @since 4.7.0
     168 * @since 4.6.4
    169169 */
    170170function iflychat_init() {
     
    177177        wp_localize_script( 'iflychat-ajax', 'iflychat_app_id', iflychat_get_option( 'iflychat_app_id' ) );
    178178        wp_localize_script( 'iflychat-ajax', 'iflychat_external_cdn_host', iflychat_chatcamp_check() ? CHATCAMP_EXTERNAL_CDN_HOST : DRUPALCHAT_EXTERNAL_CDN_HOST );
     179
     180        wp_localize_script(
     181            'iflychat-ajax',
     182            'iflychat_ajax',
     183            array(
     184                'ajax_nonce' => wp_create_nonce( 'iflychat_ajax_nonce' ),
     185            )
     186        );
     187
    179188        if ( is_user_logged_in() ) {
    180             //phpcs:ignore
    181             // $user_data = json_encode( _iflychat_get_user_auth() );
    182189            $user_data = wp_json_encode( _iflychat_get_user_auth() );
    183190        }
    184191
    185192        if ( '1' === iflychat_get_option( 'iflychat_session_caching' ) && isset( $_SESSION['user_data'] ) && $user_data === $_SESSION['user_data'] ) {
    186             //phpcs:ignore
    187             //if(iflychat_get_option('iflychat_enable_friends') == '1'){
    188193            if ( isset( $_SESSION['token'] ) && ! empty( $_SESSION['token'] ) ) {
    189                 wp_localize_script( 'iflychat-ajax', 'iflychat_auth_token', $_SESSION['token'] );
     194                wp_localize_script( 'iflychat-ajax', 'iflychat_auth_token', sanitize_text_field( wp_unslash( $_SESSION['token'] ) ) );
    190195            }
    191196        }
     
    201206            wp_enqueue_script( 'iflychat-popup', IFLYCHAT_URL . 'js/iflychat-popup.js', array(), filemtime( IFLYCHAT_DIR . 'js/iflychat-popup.js' ), true );
    202207        }
    203     }
    204 }
    205 
    206 // phpcs:ignore
    207 /*
    208 Already Commented
    209 add_filter('iflychat_get_user_groups_filter','iflychat_get_user_groups');
    210 function iflychat_get_user_groups(){
    211 $current_user =  wp_get_current_user();
    212 $arr = array();
    213 if ($current_user->ID % 2 == 0 ) {
    214     $arr['A'] = "A";
    215 } else {
    216     $arr['B'] = "B";
    217 }
    218 return (array)$arr;
    219 };
    220 */
     208
     209        /*wp_localize_script(
     210            'iflychat-popup',
     211            'iflychat_popup_ajax',
     212            array(
     213                'ajax_nonce' => wp_create_nonce( 'iflychat_popup_ajax_nonce' ),
     214            )
     215        );*/
     216    }
     217}
    221218
    222219/**
    223220 * Function to get user_details
    224221 *
    225  * @since 4.7.0
     222 * @since 4.6.4
    226223 */
    227224function _iflychat_get_user_auth() {
     
    311308 * Function to get User authentication
    312309 *
    313  * @since 4.7.0
     310 * @since 4.6.4
    314311 */
    315312function _iflychat_get_auth() {
     
    455452 * Function to get mobile authentication
    456453 *
    457  * @since 4.7.0
     454 * @since 4.6.4
    458455 */
    459456function iflychat_mobile_auth() {
    460     if ( '1' === iflychat_get_option( 'iflychat_enable_mobile_sdk_integration', '2' ) ) {
    461 
    462         $username = isset( $_POST['username'] ) ? sanitize_text_field( wp_unslash( $_POST['username'] ) ) : ''; //phpcs:ignore
    463         $password = isset( $_POST['password'] ) ? sanitize_text_field( wp_unslash( $_POST['password'] ) ) : ''; //phpcs:ignore
    464 
    465         $uid = wp_authenticate_username_password( null, $username, $password );
    466         $id  = ( $uid->data->ID );
    467         if ( '' !== trim( $id ) ) {
    468             $user   = wp_set_current_user( $id, $username );
    469             $result = wp_json_encode( _iflychat_get_auth( $username ) );
    470             header( 'Content-Type: application/json' );
    471             echo $result; //phpcs:ignore
     457    if ( check_ajax_referer( 'iflychat_ajax_nonce', 'nonce' ) ) {
     458        if ( '1' === iflychat_get_option( 'iflychat_enable_mobile_sdk_integration', '2' ) ) {
     459            $username = isset( $_POST['username'] ) ? sanitize_text_field( wp_unslash( $_POST['username'] ) ) : '';
     460            $password = isset( $_POST['password'] ) ? sanitize_text_field( wp_unslash( $_POST['password'] ) ) : '';
     461
     462            $uid = wp_authenticate_username_password( null, $username, $password );
     463            $id  = ( $uid->data->ID );
     464            if ( '' !== trim( $id ) ) {
     465                $user = wp_set_current_user( $id, $username );
     466                header( 'Content-Type: application/json' );
     467                echo wp_json_encode( _iflychat_get_auth( $username ) );
     468            } else {
     469                header( 'HTTP/1.1 403 Access Denied' );
     470                echo esc_html( 'Access Denied' );
     471            }
    472472        } else {
    473473            header( 'HTTP/1.1 403 Access Denied' );
    474             echo esc_html( 'Access Denied' );
    475         }
    476     } else {
    477         header( 'HTTP/1.1 403 Access Denied' );
    478         echo esc_html( 'Please Enable Mobile SDK Integration' );
     474            echo esc_html( 'Please Enable Mobile SDK Integration' );
     475        }
    479476    }
    480477    exit;
     
    484481 * Function to Submit chat
    485482 *
    486  * @since 4.7.0
     483 * @since 4.6.4
    487484 */
    488485function iflychat_submit_uth() {
    489 
    490     $json = null;
    491     $json = _iflychat_get_auth();
    492 
    493     $response = wp_json_encode( $json );
    494     header( 'Content-Type: application/json' );
    495     echo $response; //phpcs:ignore
     486    if ( check_ajax_referer( 'iflychat_ajax_nonce', 'nonce' ) ) {
     487        $json = null;
     488        $json = _iflychat_get_auth();
     489
     490        header( 'Content-Type: application/json' );
     491        echo wp_json_encode( $json );
     492    }
    496493    exit;
    497494}
     
    500497 * Function to Install plugin
    501498 *
    502  * @since 4.7.0
     499 * @since 4.6.4
    503500 */
    504501function iflychat_install() {
     
    509506 * Function to uninstall plugin
    510507 *
    511  * @since 4.7.0
     508 * @since 4.6.4
    512509 */
    513510function iflychat_uninstall() {
     
    518515 * Function to Set Settings option
    519516 *
    520  * @since 4.7.0
     517 * @since 4.6.4
    521518 */
    522519function iflychat_set_options() {
     
    651648 * Function to create Settings page
    652649 *
    653  * @since 4.7.0
     650 * @since 4.6.4
    654651 */
    655652function iflychat_settings() {
     653
    656654    wp_enqueue_script( 'iflychat-admin', IFLYCHAT_URL . 'js/iflychat.admin.script.js', array(), filemtime( IFLYCHAT_DIR . 'js/iflychat.admin.script.js' ), true );
    657655
    658     $active_tab = isset( $_GET['tab'] ) ? sanitize_text_field( wp_unslash( $_GET['tab'] ) ) : 'plugin_settings'; //phpcs:ignore
     656    wp_localize_script(
     657        'iflychat-admin',
     658        'iflychat_admin_ajax',
     659        array(
     660            'ajax_url'   => admin_url( 'admin-ajax.php' ),
     661            'ajax_nonce' => wp_create_nonce( 'iflychat_admin_ajax_nonce' ),
     662        )
     663    );
     664
     665    $default_tab = 'plugin_settings';
     666    if ( isset( $_POST['iflychat_network_settings_form_nonce'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['iflychat_network_settings_form_nonce'] ) ), 'iflychat_network_settings_form' ) ) {
     667        $default_tab = 'plugin_settings';
     668    }
     669
     670    $active_tab = isset( $_GET['tab'] ) ? sanitize_text_field( wp_unslash( $_GET['tab'] ) ) : $default_tab;
    659671    $i          = 0;
    660672    ?>
     
    687699
    688700            if ( iflychat_validate_fields() ) {
    689                 if ( isset( $_GET['updated'] ) && 'true' === trim( sanitize_text_field( wp_unslash( $_GET['updated'] ) ) ) ) { //phpcs:ignore
     701                if ( isset( $_GET['updated'] ) && 'true' === trim( sanitize_text_field( wp_unslash( $_GET['updated'] ) ) ) ) {
    690702                    ?>
    691703                    <div id="message" class="updated fade"><p><strong><?php esc_html_e( 'Settings Updated', 'iflychat_settings' ); ?></strong></p></div>
     
    790802            } else {
    791803                $theme      = wp_get_theme();
    792                 $theme_name = esc_html( $theme->Name . ' ' . $theme->Version ); // phpcs:ignore
     804                $theme_name = esc_html( $theme->get( 'Name' ) . ' ' . $theme->get( 'Version' ) );
    793805            }
    794806            ?>
     
    828840                $host_name = isset( $host[2] ) ? $host[2] : '';
    829841                if ( isset( $_SESSION['token'] ) && ! empty( $_SESSION['token'] ) ) {
    830                     $token = $_SESSION['token'];
     842                    $token = sanitize_text_field( wp_unslash( $_SESSION['token'] ) );
    831843                } else {
    832844                    $token = _iflychat_get_auth()->key;
     
    848860 * Function to check if iflychat is installed
    849861 *
    850  * @since 4.7.0
     862 * @since 4.6.4
    851863 */
    852864function iflychat_is_installed() {
     
    863875 * Function to array of settings options.
    864876 *
    865  * @since 4.7.0
     877 * @since 4.6.4
    866878 * @return Array settings options as Array.
    867879 */
     
    883895 * Function to get url method.
    884896 *
    885  * @since 4.7.0
     897 * @since 4.6.4
    886898 * @return String URL method as String.
    887899 */
     
    899911 * Function to add settings page.
    900912 *
    901  * @since 4.7.0
     913 * @since 4.6.4
    902914 */
    903915function iflychat_settings_page() {
     
    912924 * Function to register settings loops through options.
    913925 *
    914  * @since 4.7.0
     926 * @since 4.6.4
    915927 */
    916928function iflychat_register_settings() {
     
    928940        }
    929941    }
    930 
    931     // phpcs:ignore
    932     /*
    933     Commented Already
    934     if (iflychat_get_option('iflychat_promote_plugin') === false) {
    935     iflychat_add_option('iflychat_promote_plugin', '0', '', 'yes');
    936     }
    937 
    938     if (iflychat_get_option('iflychat_ext_d_i') === false) {
    939     iflychat_add_option('iflychat_ext_d_i', '1', '', 'yes');
    940     }
    941     */
    942 
    943942}
    944943add_action( 'admin_init', 'iflychat_register_settings' );
     
    947946 * Function to Validate form fields.
    948947 *
    949  * @since 4.7.0
     948 * @since 4.6.4
    950949 * @return Boolean true or false as Boolean.
    951950 */
     
    968967 * Function to Update site options.
    969968 *
    970  * @since 4.7.0
     969 * @since 4.6.4
    971970 */
    972971function iflychat_network_settings() {
     
    977976
    978977        if ( ( 'iflychat-settings' === $option_page ) && ( 'update' === $action ) ) {
    979             foreach ( (array) $_POST as $key => $value ) { // phpcs:ignore
    980                 if ( substr( $key, 0, 9 ) === 'iflychat_' ) {
    981                     update_site_option( $key, trim( $value ) );
     978
     979            if ( is_array( $_POST ) && count( $_POST ) > 0 ) {
     980                foreach ( $_POST as $key => $value ) {
     981                    if ( substr( $key, 0, 9 ) === 'iflychat_' ) {
     982                        update_site_option( $key, trim( sanitize_text_field( wp_unslash( $value ) ) ) );
     983                    }
    982984                }
    983985            }
     
    10201022 * Function to check path match or not.
    10211023 *
    1022  * @since 4.7.0
     1024 * @since 4.6.4
    10231025 * @param String $path path name as string.
    10241026 * @param String $patterns path name as string.
     
    10431045 * Function to check path check.
    10441046 *
    1045  * @since 4.7.0
     1047 * @since 4.6.4
    10461048 * @return Boolean $page_match true or false Boolean.
    10471049 */
     
    10751077 * Function to return content type.
    10761078 *
    1077  * @since 4.7.0
     1079 * @since 4.6.4
    10781080 * @return string content type as string.
    10791081 */
     
    10851087 * Function to send ofline message.
    10861088 *
    1087  * @since 4.7.0
     1089 * @since 4.6.4
    10881090 */
    10891091function iflychat_send_offline_message() {
    1090 
    1091     // phpcs:ignore
    1092     $contact_details = isset( $_POST['drupalchat_m_contact_details'] ) ? sanitize_textarea_field( wp_unslash( $_POST['drupalchat_m_contact_details'] ) ) : '';
    1093     // phpcs:ignore
    1094     $drupalchat_m_message = isset( $_POST['drupalchat_m_message'] ) ? sanitize_textarea_field( wp_unslash( $_POST['drupalchat_m_message'] ) ) : '';
    1095 
    1096     if ( isset( $contact_details ) && isset( $drupalchat_m_message ) ) { // phpcs:ignore
    1097         global $user;
    1098         $drupalchat_offline_mail                    = array();
    1099         $drupalchat_offline_mail['subject']         = 'iFlyChat: Message from Customer';
    1100         $drupalchat_offline_mail['contact_details'] = '<p>' . iflychat_get_option( 'iflychat_support_chat_offline_message_contact' ) . ': ' . ( $contact_details ) . '</p>';
    1101         $drupalchat_offline_mail['message']         = '<p>' . iflychat_get_option( 'iflychat_support_chat_offline_message_label' ) . ': ' . ( $drupalchat_m_message ) . '</p>';
    1102         $drupalchat_offline_mail['message']         = $drupalchat_offline_mail['contact_details'] . '<br><br>' . $drupalchat_offline_mail['message'];
    1103         add_filter( 'wp_mail_content_type', 'iflychat_mail_set_content_type' );
    1104         $result = wp_mail( iflychat_get_option( 'iflychat_support_chat_offline_message_email' ), $drupalchat_offline_mail['subject'], $drupalchat_offline_mail['message'] );
    1105     }
    1106 
    1107     $response = wp_json_encode( $result );
    1108     header( 'Content-Type: application/json' );
    1109     echo $response; // phpcs:ignore
     1092    if ( check_ajax_referer( 'iflychat_ajax_nonce', 'nonce' ) ) {
     1093        $contact_details      = isset( $_POST['drupalchat_m_contact_details'] ) ? sanitize_textarea_field( wp_unslash( $_POST['drupalchat_m_contact_details'] ) ) : '';
     1094        $drupalchat_m_message = isset( $_POST['drupalchat_m_message'] ) ? sanitize_textarea_field( wp_unslash( $_POST['drupalchat_m_message'] ) ) : '';
     1095
     1096        if ( isset( $contact_details ) && isset( $drupalchat_m_message ) ) {
     1097            global $user;
     1098            $drupalchat_offline_mail                    = array();
     1099            $drupalchat_offline_mail['subject']         = 'iFlyChat: Message from Customer';
     1100            $drupalchat_offline_mail['contact_details'] = '<p>' . iflychat_get_option( 'iflychat_support_chat_offline_message_contact' ) . ': ' . ( $contact_details ) . '</p>';
     1101            $drupalchat_offline_mail['message']         = '<p>' . iflychat_get_option( 'iflychat_support_chat_offline_message_label' ) . ': ' . ( $drupalchat_m_message ) . '</p>';
     1102            $drupalchat_offline_mail['message']         = $drupalchat_offline_mail['contact_details'] . '<br><br>' . $drupalchat_offline_mail['message'];
     1103            add_filter( 'wp_mail_content_type', 'iflychat_mail_set_content_type' );
     1104            $result = wp_mail( iflychat_get_option( 'iflychat_support_chat_offline_message_email' ), $drupalchat_offline_mail['subject'], $drupalchat_offline_mail['message'] );
     1105        }
     1106
     1107        header( 'Content-Type: application/json' );
     1108        echo wp_json_encode( $result );
     1109    }
    11101110    exit;
    11111111}
     
    11141114 * Function to check admin chat.
    11151115 *
    1116  * @since 4.7.0
     1116 * @since 4.6.4
    11171117 * @return Boolean admin chat true or false as Boolean.
    11181118 */
     
    11311131            if ( $aa === $current_user->user_login ) {
    11321132                return true;
    1133                 break; // phpcs:ignore
    11341133            }
    11351134        }
     
    11411140 * Function to check chat is moderator.
    11421141 *
    1143  * @since 4.7.0
     1142 * @since 4.6.4
    11441143 * @return Boolean chat moderator true or false as Boolean.
    11451144 */
     
    11541153            if ( $aa === $current_user->user_login ) {
    11551154                return true;
    1156                 break;// phpcs:ignore
    11571155            }
    11581156        }
     
    11641162 * Function to destroy session ( session unset ).
    11651163 *
    1166  * @since 4.7.0
     1164 * @since 4.6.4
    11671165 */
    11681166function iflychat_token_destroy() {
     
    11901188 * Function to set cookie for user login.
    11911189 *
    1192  * @since 4.7.0
     1190 * @since 4.6.4
    11931191 */
    11941192function iflychat_user_login() {
     
    12011199 * Function to set cookie and destroy token for user logout.
    12021200 *
    1203  * @since 4.7.0
     1201 * @since 4.6.4
    12041202 */
    12051203function iflychat_user_logout() {
     
    12131211 * Function to get Inbox.
    12141212 *
    1215  * @since 4.7.0
     1213 * @since 4.6.4
    12161214 * @return string $output messages content as string.
    12171215 */
    12181216function iflychat_get_inbox() {
     1217
    12191218    $data = array(
    12201219        'uid'     => iflychat_get_user_id(),
     
    12421241        foreach ( $query as $record ) {
    12431242            $rt      = $record->timestamp + ( $timezone_offet * 3600 );
    1244             $output .= '<div style="display:block;border-bottom: 1px solid #ccc; padding: 10px;"><div style="font-size:130%; display: inline;">' . $record->name . '</div><div style="float:right;color:#AAA; font-size: 70%;">' . date( "{$date_format} {$time_format}", $rt ) . '</div><div style="display: block; padding: 10px;">' . $record->message . '</div></div>'; // phpcs:ignore
     1243            $output .= '<div style="display:block;border-bottom: 1px solid #ccc; padding: 10px;"><div style="font-size:130%; display: inline;">' . $record->name . '</div><div style="float:right;color:#AAA; font-size: 70%;">' . date( "{$date_format} {$time_format}", $rt ) . '</div><div style="display: block; padding: 10px;">' . $record->message . '</div></div>';
    12451244        }
    12461245    }
     
    12521251 * Function to get Message thread.
    12531252 *
    1254  * @since 4.7.0
     1253 * @since 4.6.4
    12551254 * @param Array $atts attributes as Array.
    12561255 * @return string $output messages content as string.
    12571256 */
    12581257function iflychat_get_message_thread( $atts ) {
    1259     // phpcs:ignore
     1258
    12601259    extract(
    12611260        shortcode_atts(
     
    13061305        foreach ( $query as $record ) {
    13071306            $rt      = $record->timestamp + ( $timezone_offet * 3600 );
    1308             $output .= '<div style="display:block;border-bottom: 1px solid #ccc; padding: 1% 0% 1% 0%;"></div><div style="display:block; padding-top: 1%; padding-bottom: 0%"><div style="font-size:100%; display: inline;"><a href="#">' . $record->from_name . '</a></div><div style="float:right;font-size: 70%;">' . date( "{$date_format} {$time_format}", $rt ) . '</div><div style="display: block; padding-top: 1%; padding-bottom: 0%">' . $record->message . '</div></div>';// phpcs:ignore
     1307            $output .= '<div style="display:block;border-bottom: 1px solid #ccc; padding: 1% 0% 1% 0%;"></div><div style="display:block; padding-top: 1%; padding-bottom: 0%"><div style="font-size:100%; display: inline;"><a href="#">' . $record->from_name . '</a></div><div style="float:right;font-size: 70%;">' . date( "{$date_format} {$time_format}", $rt ) . '</div><div style="display: block; padding-top: 1%; padding-bottom: 0%">' . $record->message . '</div></div>';
    13091308        }
    13101309    }
     
    13151314 * Function to get Embed code.
    13161315 *
    1317  * @since 4.7.0
     1316 * @since 4.6.4
    13181317 * @param Array $atts attributes as Array.
    13191318 * @return string $output messages content as string.
     
    13231322    global $iflychat_engine;
    13241323
    1325     extract( // phpcs:ignore
     1324    extract(
    13261325        shortcode_atts(
    13271326            array(
     
    13701369 * Function to get Embed code.
    13711370 *
    1372  * @since 4.7.0
     1371 * @since 4.6.4
    13731372 * @return string $url URL as string.
    13741373 */
     
    14431442 * Function to get user profile url.
    14441443 *
    1445  * @since 4.7.0
     1444 * @since 4.6.4
    14461445 * @return string url as string.
    14471446 */
     
    14691468 * Function to get option by name.
    14701469 *
    1471  * @since 4.7.0
     1470 * @since 4.6.4
    14721471 * @param string $name as option name string.
    14731472 * @return string option value string.
     
    14841483 * Function to Add a new option.
    14851484 *
    1486  * @since 4.7.0
     1485 * @since 4.6.4
    14871486 * @param string  $name as option name string.
    14881487 * @param string  $value as option value string.
     
    15021501 * Function to update a option.
    15031502 *
    1504  * @since 4.7.0
     1503 * @since 4.6.4
    15051504 * @param string $name as option name string.
    15061505 * @param string $value as option value string.
     
    15181517 * Function to check user access.
    15191518 *
    1520  * @since 4.7.0
     1519 * @since 4.6.4
    15211520 * @return Boolean Access true or false Boolean.
    15221521 */
     
    15351534 * Function to get avtar url from html.
    15361535 *
    1537  * @since 4.7.0
     1536 * @since 4.6.4
    15381537 * @param String $source html as String.
    15391538 * @return String avtar url as String.
     
    15551554 * Function to return host name (url) .
    15561555 *
    1557  * @since 4.7.0
     1556 * @since 4.6.4
    15581557 * @param Boolean $https is tru or false as boolean.
    15591558 * @return String url as String.
     
    15781577 * Function to get string.
    15791578 *
    1580  * @since 4.7.0
     1579 * @since 4.6.4
    15811580 * @param String $words as String.
    15821581 * @return String $final word as String.
     
    15911590 * Function to check chat camp.
    15921591 *
    1593  * @since 4.7.0
     1592 * @since 4.6.4
    15941593 * @return Boolean true or false as Boolean.
    15951594 */
     
    16071606 * Function to add chatcamp userdata.
    16081607 *
    1609  * @since 4.7.0
     1608 * @since 4.6.4
    16101609 * @param Array $data users data as Array.
    16111610 * @return Array $data users data as Array.
     
    16261625 * Function to check user update or not.
    16271626 *
    1628  * @since 4.7.0
     1627 * @since 4.6.4
    16291628 * @param Array  $new users data as Array.
    16301629 * @param Object $old users data as Object.
  • iflychat/trunk/readme.txt

    r2628223 r2668739  
    33Contributors: darklrd, shubhamgupta
    44Requires at least: 3.0
    5 Tested up to: 5.3
    6 Stable tag: 4.7.0
     5Tested up to: 5.8.2
     6Stable tag: 4.6.4
    77Tags: buddypress, chat, chat room, community, embed chat, friends, group chat, html5 chat, one to one chat, live chat, popup chat, mobile chat, multisite, wordpress chat, wp chat, ultimate member
    88License: GPLv2 or later
     
    138138== Changelog ==
    139139
    140 = 4.7.0 =
    141 
    142 11/11/2021: iFlyChat new backend update.
    143 
    144140= 4.6.4 =
    145141
     
    453449== Upgrade Notice ==
    454450
    455 = 4.7.0 =
    456 After updating, go to iFlyChat Settings page and click on Update button.
    457 
    458451= 4.6.4 =
    459452After updating, go to iFlyChat Settings page and click on Update button.
Note: See TracChangeset for help on using the changeset viewer.