Changeset 2668739
- Timestamp:
- 01/29/2022 09:54:27 AM (4 years ago)
- Location:
- iflychat/trunk
- Files:
-
- 2 edited
-
iflychat.php (modified) (57 diffs)
-
readme.txt (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
iflychat/trunk/iflychat.php
r2628223 r2668739 6 6 * Description: One on one chat, Multiple chatrooms, Embedded chatrooms 7 7 * Author: iFlyChat Team 8 * Version: 4. 7.08 * Version: 4.6.4 9 9 * Author URI: https://iflychat.com/ 10 10 * 11 11 * @package iflychat 12 * @version 4. 7.012 * @version 4.6.4 13 13 * 14 14 * Exit if accessed directly … … 67 67 } 68 68 69 define( 'IFLYCHAT_PLUGIN_VERSION', 'WP-4. 7.0' );69 define( 'IFLYCHAT_PLUGIN_VERSION', 'WP-4.6.4' ); 70 70 if ( ! defined( 'IFLYCHAT_DEBUG' ) ) { 71 71 define( 'IFLYCHAT_DEBUG', false ); … … 86 86 * Function to get Session Token. 87 87 * 88 * @since 4. 7.088 * @since 4.6.4 89 89 * @return String $session_token as String. 90 90 */ 91 91 function iflychat_get_hash_session() { 92 92 $data = uniqid( mp_rand(), true ); 93 $hash = base64_encode( hash( 'sha256', $data, true ) ); //phpcs:ignore93 $hash = base64_encode( hash( 'sha256', $data, true ) ); 94 94 95 95 $session_token = strtr( … … 107 107 * Function to get User ID. 108 108 * 109 * @since 4. 7.0109 * @since 4.6.4 110 110 * @return String user ID as String. 111 111 */ … … 122 122 * Function to get User's Display Name. 123 123 * 124 * @since 4. 7.0124 * @since 4.6.4 125 125 * @return String user's Display Name as String or false. 126 126 */ … … 148 148 * Function to load script Async. 149 149 * 150 * @since 4. 7.0150 * @since 4.6.4 151 151 * @param String $url String. 152 152 * @return String $url String. … … 166 166 * Function to Initialise the plugin. 167 167 * 168 * @since 4. 7.0168 * @since 4.6.4 169 169 */ 170 170 function iflychat_init() { … … 177 177 wp_localize_script( 'iflychat-ajax', 'iflychat_app_id', iflychat_get_option( 'iflychat_app_id' ) ); 178 178 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 179 188 if ( is_user_logged_in() ) { 180 //phpcs:ignore181 // $user_data = json_encode( _iflychat_get_user_auth() );182 189 $user_data = wp_json_encode( _iflychat_get_user_auth() ); 183 190 } 184 191 185 192 if ( '1' === iflychat_get_option( 'iflychat_session_caching' ) && isset( $_SESSION['user_data'] ) && $user_data === $_SESSION['user_data'] ) { 186 //phpcs:ignore187 //if(iflychat_get_option('iflychat_enable_friends') == '1'){188 193 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'] ) ) ); 190 195 } 191 196 } … … 201 206 wp_enqueue_script( 'iflychat-popup', IFLYCHAT_URL . 'js/iflychat-popup.js', array(), filemtime( IFLYCHAT_DIR . 'js/iflychat-popup.js' ), true ); 202 207 } 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 } 221 218 222 219 /** 223 220 * Function to get user_details 224 221 * 225 * @since 4. 7.0222 * @since 4.6.4 226 223 */ 227 224 function _iflychat_get_user_auth() { … … 311 308 * Function to get User authentication 312 309 * 313 * @since 4. 7.0310 * @since 4.6.4 314 311 */ 315 312 function _iflychat_get_auth() { … … 455 452 * Function to get mobile authentication 456 453 * 457 * @since 4. 7.0454 * @since 4.6.4 458 455 */ 459 456 function 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 } 472 472 } else { 473 473 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 } 479 476 } 480 477 exit; … … 484 481 * Function to Submit chat 485 482 * 486 * @since 4. 7.0483 * @since 4.6.4 487 484 */ 488 485 function 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:ignore486 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 } 496 493 exit; 497 494 } … … 500 497 * Function to Install plugin 501 498 * 502 * @since 4. 7.0499 * @since 4.6.4 503 500 */ 504 501 function iflychat_install() { … … 509 506 * Function to uninstall plugin 510 507 * 511 * @since 4. 7.0508 * @since 4.6.4 512 509 */ 513 510 function iflychat_uninstall() { … … 518 515 * Function to Set Settings option 519 516 * 520 * @since 4. 7.0517 * @since 4.6.4 521 518 */ 522 519 function iflychat_set_options() { … … 651 648 * Function to create Settings page 652 649 * 653 * @since 4. 7.0650 * @since 4.6.4 654 651 */ 655 652 function iflychat_settings() { 653 656 654 wp_enqueue_script( 'iflychat-admin', IFLYCHAT_URL . 'js/iflychat.admin.script.js', array(), filemtime( IFLYCHAT_DIR . 'js/iflychat.admin.script.js' ), true ); 657 655 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; 659 671 $i = 0; 660 672 ?> … … 687 699 688 700 if ( iflychat_validate_fields() ) { 689 if ( isset( $_GET['updated'] ) && 'true' === trim( sanitize_text_field( wp_unslash( $_GET['updated'] ) ) ) ) { //phpcs:ignore701 if ( isset( $_GET['updated'] ) && 'true' === trim( sanitize_text_field( wp_unslash( $_GET['updated'] ) ) ) ) { 690 702 ?> 691 703 <div id="message" class="updated fade"><p><strong><?php esc_html_e( 'Settings Updated', 'iflychat_settings' ); ?></strong></p></div> … … 790 802 } else { 791 803 $theme = wp_get_theme(); 792 $theme_name = esc_html( $theme-> Name . ' ' . $theme->Version ); // phpcs:ignore804 $theme_name = esc_html( $theme->get( 'Name' ) . ' ' . $theme->get( 'Version' ) ); 793 805 } 794 806 ?> … … 828 840 $host_name = isset( $host[2] ) ? $host[2] : ''; 829 841 if ( isset( $_SESSION['token'] ) && ! empty( $_SESSION['token'] ) ) { 830 $token = $_SESSION['token'];842 $token = sanitize_text_field( wp_unslash( $_SESSION['token'] ) ); 831 843 } else { 832 844 $token = _iflychat_get_auth()->key; … … 848 860 * Function to check if iflychat is installed 849 861 * 850 * @since 4. 7.0862 * @since 4.6.4 851 863 */ 852 864 function iflychat_is_installed() { … … 863 875 * Function to array of settings options. 864 876 * 865 * @since 4. 7.0877 * @since 4.6.4 866 878 * @return Array settings options as Array. 867 879 */ … … 883 895 * Function to get url method. 884 896 * 885 * @since 4. 7.0897 * @since 4.6.4 886 898 * @return String URL method as String. 887 899 */ … … 899 911 * Function to add settings page. 900 912 * 901 * @since 4. 7.0913 * @since 4.6.4 902 914 */ 903 915 function iflychat_settings_page() { … … 912 924 * Function to register settings loops through options. 913 925 * 914 * @since 4. 7.0926 * @since 4.6.4 915 927 */ 916 928 function iflychat_register_settings() { … … 928 940 } 929 941 } 930 931 // phpcs:ignore932 /*933 Commented Already934 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 943 942 } 944 943 add_action( 'admin_init', 'iflychat_register_settings' ); … … 947 946 * Function to Validate form fields. 948 947 * 949 * @since 4. 7.0948 * @since 4.6.4 950 949 * @return Boolean true or false as Boolean. 951 950 */ … … 968 967 * Function to Update site options. 969 968 * 970 * @since 4. 7.0969 * @since 4.6.4 971 970 */ 972 971 function iflychat_network_settings() { … … 977 976 978 977 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 } 982 984 } 983 985 } … … 1020 1022 * Function to check path match or not. 1021 1023 * 1022 * @since 4. 7.01024 * @since 4.6.4 1023 1025 * @param String $path path name as string. 1024 1026 * @param String $patterns path name as string. … … 1043 1045 * Function to check path check. 1044 1046 * 1045 * @since 4. 7.01047 * @since 4.6.4 1046 1048 * @return Boolean $page_match true or false Boolean. 1047 1049 */ … … 1075 1077 * Function to return content type. 1076 1078 * 1077 * @since 4. 7.01079 * @since 4.6.4 1078 1080 * @return string content type as string. 1079 1081 */ … … 1085 1087 * Function to send ofline message. 1086 1088 * 1087 * @since 4. 7.01089 * @since 4.6.4 1088 1090 */ 1089 1091 function 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 } 1110 1110 exit; 1111 1111 } … … 1114 1114 * Function to check admin chat. 1115 1115 * 1116 * @since 4. 7.01116 * @since 4.6.4 1117 1117 * @return Boolean admin chat true or false as Boolean. 1118 1118 */ … … 1131 1131 if ( $aa === $current_user->user_login ) { 1132 1132 return true; 1133 break; // phpcs:ignore1134 1133 } 1135 1134 } … … 1141 1140 * Function to check chat is moderator. 1142 1141 * 1143 * @since 4. 7.01142 * @since 4.6.4 1144 1143 * @return Boolean chat moderator true or false as Boolean. 1145 1144 */ … … 1154 1153 if ( $aa === $current_user->user_login ) { 1155 1154 return true; 1156 break;// phpcs:ignore1157 1155 } 1158 1156 } … … 1164 1162 * Function to destroy session ( session unset ). 1165 1163 * 1166 * @since 4. 7.01164 * @since 4.6.4 1167 1165 */ 1168 1166 function iflychat_token_destroy() { … … 1190 1188 * Function to set cookie for user login. 1191 1189 * 1192 * @since 4. 7.01190 * @since 4.6.4 1193 1191 */ 1194 1192 function iflychat_user_login() { … … 1201 1199 * Function to set cookie and destroy token for user logout. 1202 1200 * 1203 * @since 4. 7.01201 * @since 4.6.4 1204 1202 */ 1205 1203 function iflychat_user_logout() { … … 1213 1211 * Function to get Inbox. 1214 1212 * 1215 * @since 4. 7.01213 * @since 4.6.4 1216 1214 * @return string $output messages content as string. 1217 1215 */ 1218 1216 function iflychat_get_inbox() { 1217 1219 1218 $data = array( 1220 1219 'uid' => iflychat_get_user_id(), … … 1242 1241 foreach ( $query as $record ) { 1243 1242 $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:ignore1243 $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>'; 1245 1244 } 1246 1245 } … … 1252 1251 * Function to get Message thread. 1253 1252 * 1254 * @since 4. 7.01253 * @since 4.6.4 1255 1254 * @param Array $atts attributes as Array. 1256 1255 * @return string $output messages content as string. 1257 1256 */ 1258 1257 function iflychat_get_message_thread( $atts ) { 1259 // phpcs:ignore 1258 1260 1259 extract( 1261 1260 shortcode_atts( … … 1306 1305 foreach ( $query as $record ) { 1307 1306 $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:ignore1307 $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>'; 1309 1308 } 1310 1309 } … … 1315 1314 * Function to get Embed code. 1316 1315 * 1317 * @since 4. 7.01316 * @since 4.6.4 1318 1317 * @param Array $atts attributes as Array. 1319 1318 * @return string $output messages content as string. … … 1323 1322 global $iflychat_engine; 1324 1323 1325 extract( // phpcs:ignore1324 extract( 1326 1325 shortcode_atts( 1327 1326 array( … … 1370 1369 * Function to get Embed code. 1371 1370 * 1372 * @since 4. 7.01371 * @since 4.6.4 1373 1372 * @return string $url URL as string. 1374 1373 */ … … 1443 1442 * Function to get user profile url. 1444 1443 * 1445 * @since 4. 7.01444 * @since 4.6.4 1446 1445 * @return string url as string. 1447 1446 */ … … 1469 1468 * Function to get option by name. 1470 1469 * 1471 * @since 4. 7.01470 * @since 4.6.4 1472 1471 * @param string $name as option name string. 1473 1472 * @return string option value string. … … 1484 1483 * Function to Add a new option. 1485 1484 * 1486 * @since 4. 7.01485 * @since 4.6.4 1487 1486 * @param string $name as option name string. 1488 1487 * @param string $value as option value string. … … 1502 1501 * Function to update a option. 1503 1502 * 1504 * @since 4. 7.01503 * @since 4.6.4 1505 1504 * @param string $name as option name string. 1506 1505 * @param string $value as option value string. … … 1518 1517 * Function to check user access. 1519 1518 * 1520 * @since 4. 7.01519 * @since 4.6.4 1521 1520 * @return Boolean Access true or false Boolean. 1522 1521 */ … … 1535 1534 * Function to get avtar url from html. 1536 1535 * 1537 * @since 4. 7.01536 * @since 4.6.4 1538 1537 * @param String $source html as String. 1539 1538 * @return String avtar url as String. … … 1555 1554 * Function to return host name (url) . 1556 1555 * 1557 * @since 4. 7.01556 * @since 4.6.4 1558 1557 * @param Boolean $https is tru or false as boolean. 1559 1558 * @return String url as String. … … 1578 1577 * Function to get string. 1579 1578 * 1580 * @since 4. 7.01579 * @since 4.6.4 1581 1580 * @param String $words as String. 1582 1581 * @return String $final word as String. … … 1591 1590 * Function to check chat camp. 1592 1591 * 1593 * @since 4. 7.01592 * @since 4.6.4 1594 1593 * @return Boolean true or false as Boolean. 1595 1594 */ … … 1607 1606 * Function to add chatcamp userdata. 1608 1607 * 1609 * @since 4. 7.01608 * @since 4.6.4 1610 1609 * @param Array $data users data as Array. 1611 1610 * @return Array $data users data as Array. … … 1626 1625 * Function to check user update or not. 1627 1626 * 1628 * @since 4. 7.01627 * @since 4.6.4 1629 1628 * @param Array $new users data as Array. 1630 1629 * @param Object $old users data as Object. -
iflychat/trunk/readme.txt
r2628223 r2668739 3 3 Contributors: darklrd, shubhamgupta 4 4 Requires at least: 3.0 5 Tested up to: 5. 36 Stable tag: 4. 7.05 Tested up to: 5.8.2 6 Stable tag: 4.6.4 7 7 Tags: 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 8 8 License: GPLv2 or later … … 138 138 == Changelog == 139 139 140 = 4.7.0 =141 142 11/11/2021: iFlyChat new backend update.143 144 140 = 4.6.4 = 145 141 … … 453 449 == Upgrade Notice == 454 450 455 = 4.7.0 =456 After updating, go to iFlyChat Settings page and click on Update button.457 458 451 = 4.6.4 = 459 452 After updating, go to iFlyChat Settings page and click on Update button.
Note: See TracChangeset
for help on using the changeset viewer.