add_action( 'mainwp_add_edit_client_upload_client_icon', array( static::class, 'ajax_upload_client_icon' ) ); MainWP_Post_Handler::instance()->add_action( 'mainwp_add_edit_contact_upload_contact_icon', array( static::class, 'ajax_upload_contact_icon' ) ); } /** * Method init_menu() * * Initiate menu. * * @uses \MainWP\Dashboard\MainWP_Menu::is_disable_menu_item() */ public static function init_menu() { static::$page = add_submenu_page( 'mainwp_tab', esc_html__( 'Clients', 'mainwp' ), '' . esc_html__( 'Clients', 'mainwp' ) . '', 'read', 'ManageClients', array( static::get_class_name(), 'render_manage_clients', ) ); add_submenu_page( 'mainwp_tab', esc_html__( 'Clients', 'mainwp' ), '
' . esc_html__( 'Add Client', 'mainwp' ) . '
', 'read', 'ClientAddNew', array( static::get_class_name(), 'render_add_client', ) ); add_submenu_page( 'mainwp_tab', esc_html__( 'Clients', 'mainwp' ), '
' . esc_html__( 'Import Clients', 'mainwp' ) . '
', 'read', 'ClientImport', array( static::get_class_name(), 'render_import_clients', ) ); add_submenu_page( 'mainwp_tab', esc_html__( 'Clients', 'mainwp' ), '
' . esc_html__( 'Client Fields', 'mainwp' ) . '
', 'read', 'ClientAddField', array( static::get_class_name(), 'render_client_fields', ) ); /** * This hook allows you to add extra sub pages to the client page via the 'mainwp-getsubpages-client' filter. * * @link http://codex.mainwp.com/#mainwp-getsubpages-client */ $sub_pages = array(); static::$subPages = apply_filters( 'mainwp_getsubpages_client', $sub_pages ); if ( isset( static::$subPages ) && is_array( static::$subPages ) ) { foreach ( static::$subPages as $subPage ) { if ( MainWP_Menu::is_disable_menu_item( 3, 'ManageClients' . $subPage['slug'] ) ) { continue; } add_submenu_page( 'mainwp_tab', $subPage['title'], '
' . esc_html( $subPage['title'] ) . '
', 'read', 'ManageClients' . $subPage['slug'], $subPage['callback'] ); } } static::init_left_menu( static::$subPages ); add_action( 'load-' . static::$page, array( static::get_class_name(), 'on_load_page' ) ); } /** * Method on_load_page() * * Run on page load. */ public static function on_load_page() { if ( isset( $_GET['client_id'] ) && ! empty( $_GET['client_id'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized MainWP_Client_Overview::instance()->on_load_page( static::$page ); return; } add_filter( 'mainwp_header_actions_right', array( static::get_class_name(), 'screen_options' ), 10, 2 ); static::$itemsTable = new MainWP_Client_List_Table(); } /** * Method screen_options() * * Create Page Settings button. * * @param mixed $input Page Settings button HTML. * * @return mixed Screen sptions button. */ public static function screen_options( $input ) { return $input . ' '; } /** * Initiates sub pages menu. * * @uses \MainWP\Dashboard\MainWP_Menu::is_disable_menu_item() */ public static function init_subpages_menu() { ?> esc_html__( 'Clients', 'mainwp' ), 'parent_key' => 'mainwp_tab', 'slug' => 'ManageClients', 'href' => 'admin.php?page=ManageClients', 'icon' => '', 'desc' => 'Manage clients on your child sites', ), 0 ); $init_sub_subleftmenu = array( array( 'title' => esc_html__( 'Clients', 'mainwp' ), 'parent_key' => 'ManageClients', 'href' => 'admin.php?page=ManageClients', 'slug' => 'ManageClients', 'right' => 'manage_clients', 'leftsub_order_level2' => 1, ), array( 'title' => esc_html__( 'Add Client', 'mainwp' ), 'parent_key' => 'ManageClients', 'href' => 'admin.php?page=ClientAddNew', 'slug' => 'ClientAddNew', 'right' => '', 'leftsub_order_level2' => 2, ), array( 'title' => esc_html__( 'Import Clients', 'mainwp' ), 'parent_key' => 'ManageClients', 'href' => 'admin.php?page=ClientImport', 'slug' => 'ClientImport', 'right' => '', 'leftsub_order_level2' => 3, ), array( 'title' => esc_html__( 'Client Fields', 'mainwp' ), 'parent_key' => 'ManageClients', 'href' => 'admin.php?page=ClientAddField', 'slug' => 'ClientAddField', 'right' => '', 'leftsub_order_level2' => 4, ), ); MainWP_Menu::init_subpages_left_menu( $subPages, $init_sub_subleftmenu, 'ManageClients', 'ManageClients' ); foreach ( $init_sub_subleftmenu as $item ) { if ( MainWP_Menu::is_disable_menu_item( 3, $item['slug'] ) ) { continue; } MainWP_Menu::add_left_menu( $item, 2 ); } } /** * Method ajax_upload_client_icon() */ public static function ajax_upload_client_icon() { // phpcs:ignore Generic.Classes.OpeningBraceSameLine.ContentAfterBrace -- NOSONAR - complexity. MainWP_Post_Handler::instance()->secure_request( 'mainwp_add_edit_client_upload_client_icon' ); // phpcs:disable WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized $iconfile_slug = isset( $_POST['iconFileSlug'] ) ? sanitize_text_field( wp_unslash( $_POST['iconFileSlug'] ) ) : ''; $delete = isset( $_POST['delete'] ) ? intval( $_POST['delete'] ) : 0; $client_id = isset( $_POST['iconItemId'] ) ? intval( $_POST['iconItemId'] ) : 0; $delnonce = isset( $_POST['delnonce'] ) ? sanitize_key( $_POST['delnonce'] ) : ''; if ( $delete ) { if ( ! MainWP_System_Utility::is_valid_custom_nonce( 'client', $iconfile_slug, $delnonce ) ) { die( 'Invalid nonce!' ); } if ( $client_id ) { $client = MainWP_DB_Client::instance()->get_wp_client_by( 'client_id', $client_id ); if ( $client && ! empty( $client->image ) ) { $update = array( 'image' => '', 'client_id' => $client_id, ); MainWP_DB_Client::instance()->update_client( $update ); MainWP_Utility::instance()->delete_uploaded_icon_file( 'client-images', $client->image ); } } elseif ( ! empty( $iconfile_slug ) ) { MainWP_Utility::instance()->delete_uploaded_icon_file( 'client-images', $iconfile_slug ); } wp_die( wp_json_encode( array( 'result' => 'success' ) ) ); } $output = isset( $_FILES['mainwp_upload_icon_uploader'] ) ? MainWP_System_Utility::handle_upload_image( 'client-images', $_FILES['mainwp_upload_icon_uploader'] ) : null; // phpcs:enable WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized $uploaded_icon = 'NOTCHANGE'; if ( is_array( $output ) && isset( $output['filename'] ) && ! empty( $output['filename'] ) ) { $uploaded_icon = $output['filename']; } if ( 'NOTCHANGE' !== $uploaded_icon ) { $dirs = MainWP_System_Utility::get_mainwp_dir( 'client-images', true ); $icon_url = $dirs[1] . $uploaded_icon; wp_die( wp_json_encode( array( 'result' => 'success', 'iconfile' => esc_html( $uploaded_icon ), 'iconsrc' => esc_html( $icon_url ), 'iconimg' => 'Client custom icon', 'iconnonce' => MainWP_System_Utility::get_custom_nonce( 'client', esc_html( $uploaded_icon ) ), ) ) ); } else { $result = array( 'result' => 'failed', ); $error = MainWP_Post_Handler::get_upload_icon_error( $output ); if ( ! empty( $error ) ) { $result['error'] = esc_html( $error ); } wp_die( wp_json_encode( $result ) ); } } /** * Method ajax_upload_contact_icon() */ public static function ajax_upload_contact_icon() { // phpcs:ignore Generic.Classes.OpeningBraceSameLine.ContentAfterBrace -- NOSONAR - complexity. MainWP_Post_Handler::instance()->secure_request( 'mainwp_add_edit_contact_upload_contact_icon' ); // phpcs:disable WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized $iconfile_slug = isset( $_POST['iconFileSlug'] ) ? sanitize_text_field( wp_unslash( $_POST['iconFileSlug'] ) ) : ''; $delete = isset( $_POST['delete'] ) ? intval( $_POST['delete'] ) : 0; $contact_id = isset( $_POST['iconItemId'] ) ? intval( $_POST['iconItemId'] ) : 0; $delnonce = isset( $_POST['delnonce'] ) ? sanitize_key( $_POST['delnonce'] ) : ''; if ( $delete ) { if ( ! MainWP_System_Utility::is_valid_custom_nonce( 'contact', $iconfile_slug, $delnonce ) ) { die( 'Invalid nonce!' ); } if ( $contact_id ) { $contact_data = MainWP_DB_Client::instance()->get_wp_client_contact_by( 'contact_id', $contact_id ); if ( $contact_data && ! empty( $contact_data->contact_image ) ) { $update = array( 'contact_image' => '', 'contact_id' => $contact_id, ); MainWP_DB_Client::instance()->update_client_contact( $update ); MainWP_Utility::instance()->delete_uploaded_icon_file( 'client-images', $contact_data->contact_image ); } } elseif ( ! empty( $iconfile_slug ) ) { MainWP_Utility::instance()->delete_uploaded_icon_file( 'client-images', $iconfile_slug ); } wp_die( wp_json_encode( array( 'result' => 'success' ) ) ); } $output = isset( $_FILES['mainwp_upload_icon_uploader'] ) ? MainWP_System_Utility::handle_upload_image( 'client-images', $_FILES['mainwp_upload_icon_uploader'] ) : null; // phpcs:enable WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized $uploaded_icon = 'NOTCHANGE'; if ( is_array( $output ) && isset( $output['filename'] ) && ! empty( $output['filename'] ) ) { $uploaded_icon = $output['filename']; } if ( 'NOTCHANGE' !== $uploaded_icon ) { $dirs = MainWP_System_Utility::get_mainwp_dir( 'client-images', true ); $icon_url = $dirs[1] . $uploaded_icon; wp_die( wp_json_encode( array( 'result' => 'success', 'iconfile' => esc_html( $uploaded_icon ), 'iconsrc' => esc_html( $icon_url ), 'iconimg' => 'Client custom icon', 'iconnonce' => MainWP_System_Utility::get_custom_nonce( 'contact', esc_html( $uploaded_icon ) ), ) ) ); } else { $result = array( 'result' => 'failed', ); $error = MainWP_Post_Handler::get_upload_icon_error( $output ); if ( ! empty( $error ) ) { $result['error'] = esc_html( $error ); } wp_die( wp_json_encode( $result ) ); } } /** * Method render_header() * * Render Clients page header. * * @param string $shownPage The page slug shown at this moment. * * @uses \MainWP\Dashboard\MainWP_Menu::is_disable_menu_item() * @uses \MainWP\Dashboard\MainWP_UI::render_top_header() * @uses \MainWP\Dashboard\MainWP_UI::render_page_navigation() */ public static function render_header( $shownPage = '' ) { // phpcs:ignore -- NOSONAR -Current complexity is the only way to achieve desired results, pull request solutions appreciated. // phpcs:disable WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized $client_id = isset( $_GET['client_id'] ) ? intval( $_GET['client_id'] ) : 0; // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized $params = array( 'title' => esc_html__( 'Clients', 'mainwp' ), 'which' => 'overview' === $shownPage ? 'page_clients_overview' : '', ); $client = false; if ( $client_id ) { $client = MainWP_DB_Client::instance()->get_wp_client_by( 'client_id', $client_id ); if ( $client ) { $arr_client = MainWP_Utility::map_fields( $client, array( 'image', 'selected_icon_info' ), false ); // array map. $client_pic = MainWP_Client_Handler::get_client_contact_image( $arr_client ); $params['title'] = $client_pic . '
' . $client->name . '
' . $client->client_email . '
'; } } MainWP_UI::render_top_header( $params ); $renderItems = array(); if ( \mainwp_current_user_can( 'dashboard', 'manage_clients' ) ) { $renderItems[] = array( 'title' => esc_html__( 'Clients', 'mainwp' ), 'href' => 'admin.php?page=ManageClients', 'active' => ( '' === $shownPage ) ? true : false, ); } if ( $client_id ) { $renderItems[] = array( 'title' => $client ? $client->name : esc_html__( 'Overview', 'mainwp' ), 'href' => 'admin.php?page=ManageClients&client_id=' . $client_id, 'active' => ( 'overview' === $shownPage ), ); $renderItems[] = array( 'title' => $client ? esc_html__( 'Edit', 'mainwp' ) . ' ' . $client->name : esc_html__( 'Edit Client', 'mainwp' ), 'href' => 'admin.php?page=ClientAddNew&client_id=' . $client_id, 'active' => ( 'Edit' === $shownPage ) ? true : false, ); } if ( ! MainWP_Menu::is_disable_menu_item( 3, 'ClientAddNew' ) ) { $renderItems[] = array( 'title' => esc_html__( 'Add Client', 'mainwp' ), 'href' => 'admin.php?page=ClientAddNew', 'active' => ( 'Add' === $shownPage ) ? true : false, ); } if ( ! MainWP_Menu::is_disable_menu_item( 3, 'ClientImport' ) ) { $renderItems[] = array( 'title' => esc_html__( 'Import Clients', 'mainwp' ), 'href' => 'admin.php?page=ClientImport', 'active' => ( 'Add' === $shownPage ) ? true : false, ); } if ( ! MainWP_Menu::is_disable_menu_item( 3, 'ClientAddField' ) ) { $renderItems[] = array( 'title' => esc_html__( 'Client Fields', 'mainwp' ), 'href' => 'admin.php?page=ClientAddField', 'active' => ( 'AddField' === $shownPage ) ? true : false, ); } if ( isset( static::$subPages ) && is_array( static::$subPages ) ) { foreach ( static::$subPages as $subPage ) { if ( MainWP_Menu::is_disable_menu_item( 3, 'ManageClients' . $subPage['slug'] ) ) { continue; } if ( ! empty( $subPage['individual_settings'] ) && empty( $client_id ) ) { continue; } $client_param = $client_id ? '&client_id=' . $client_id : ''; $item = array(); $item['title'] = $subPage['title']; $item['href'] = 'admin.php?page=ManageClients' . $subPage['slug'] . $client_param; $item['active'] = ( $subPage['slug'] === $shownPage ) ? true : false; $renderItems[] = $item; } } // phpcs:enable MainWP_UI::render_page_navigation( $renderItems ); } /** * Method render_footer() * * Render Clients page footer. Closes the page container. */ public static function render_footer() { echo ''; } /** * Renders manage clients dashboard. * * @return void */ public static function render_manage_clients() { if ( isset( $_GET['client_id'] ) && ! empty( $_GET['client_id'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended MainWP_Client_Overview::instance()->on_show_page( intval( $_GET['client_id'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended return; } if ( ! \mainwp_current_user_can( 'dashboard', 'manage_clients' ) ) { \mainwp_do_not_have_permissions( esc_html__( 'manage clients', 'mainwp' ) ); return; } static::$itemsTable->prepare_items(); static::render_header( '' ); static::render_second_top_header(); ?>
display(); static::$itemsTable->clear_items(); ?>
get_columns(); if ( isset( $columns['cb'] ) ) { unset( $columns['cb'] ); } $sites_per_page = get_option( 'mainwp_default_manage_clients_per_page', 25 ); if ( isset( $columns['site_actions'] ) && empty( $columns['site_actions'] ) ) { $columns['site_actions'] = esc_html__( 'Actions', 'mainwp' ); } $show_cols = get_user_option( 'mainwp_settings_show_manage_clients_columns' ); if ( false === $show_cols ) { // to backwards. $show_cols = array(); foreach ( $columns as $name => $title ) { if ( in_array( $name, array( 'image', 'client', 'suspended', 'contact_name', 'websites', 'created' ) ) ) { $show_cols[ $name ] = 1; } else { $show_cols[ $name ] = 0; } } $user = wp_get_current_user(); if ( $user ) { update_user_option( $user->ID, 'mainwp_settings_show_manage_clients_columns', $show_cols, true ); } } if ( ! is_array( $show_cols ) ) { $show_cols = array(); } ?> get_wp_client_by( 'client_id', $client_id ) : false; $client_sites = MainWP_DB_Client::instance()->get_websites_by_client_ids( $client_id ); if ( $client_sites ) { foreach ( $client_sites as $site ) { $selected_sites[] = $site->id; } } } static::render_header( $show ); ?>
', ' ' ); // NOSONAR - noopener - open safe. ?>
$selected_sites, 'show_group' => false, 'add_edit_client_id' => $client_id, 'enable_offline_sites' => $client_id ? true : false, ); MainWP_UI_Select_Sites::select_sites_box( $sel_params ); ?>
', ' ' ); ?>

'; ?>
get_websites_by_url() * * @return array Import data. */ public static function handle_client_import_files() { // phpcs:ignore -- NOSONAR $tmp_path = isset( $_FILES['mainwp_client_import_file_bulkupload']['tmp_name'] ) ? sanitize_text_field( wp_unslash( $_FILES['mainwp_client_import_file_bulkupload']['tmp_name'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Missing -- NOSONAR MainWP_System_Utility::get_wp_file_system(); //phpcs:enable /** * WordPress files system object. * * @global object */ global $wp_filesystem; $content = $wp_filesystem->get_contents( $tmp_path ); // to compatible with EOL on OSs. $content = str_replace( "\r\n", "\r", $content ); $content = str_replace( "\n", "\r", $content ); $lines = explode( "\r", $content ); $import_data = array(); $default_values = array( 'client.name' => '', 'client.email' => '', 'client.contact.address.1' => '', 'client.contact.address.2' => '', 'client.city' => '', 'client.state' => '', 'client.zip' => '', 'client.country' => '', 'client.suspended' => 0, 'client.url' => '', ); if ( is_array( $lines ) && ( ! empty( $lines ) ) ) { $header_line = null; foreach ( $lines as $original_line ) { $line = trim( $original_line ); if ( MainWP_Utility::starts_with( $line, '#' ) ) { continue; } $items = str_getcsv( $line, ',' ); if ( ( null === $header_line ) && ! empty( $_POST['mainwp_client_import_chk_header_first'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- NOSONAR $header_line = sanitize_text_field( $line ) . "\r"; continue; } if ( 3 > count( $items ) ) { continue; } $x = 0; $import_fields = array(); // Take data from the CSV file into the array. foreach ( $default_values as $field => $val ) { $value = isset( $items[ $x ] ) ? $items[ $x ] : $val; $import_fields[ $field ] = sanitize_text_field( $value ); ++$x; } $import_data[] = $import_fields; } } if ( ! empty( $import_data ) ) { foreach ( $import_data as $k_import => $val_import ) { if ( ! empty( $val_import['client.url'] ) ) { $import_data[ $k_import ]['client.url'] = explode( ';', sanitize_text_field( $val_import['client.url'] ) ); } } } return array( 'header_line' => esc_js( $header_line ), 'data' => $import_data, ); } /** * Renders the Add New Client Fields form. */ public static function render_client_fields() { static::render_header( 'AddField' ); ?>
get_client_fields(); ?>

>
[field_name ) ); ?>] field_desc ) ); ?>
esc_html__( 'Client name are empty. Please try again.', 'mainwp' ) ) ); return; } $add_new = true; $default_client_fields = MainWP_Client_Handler::get_default_client_fields(); $client_to_add = array(); foreach ( $default_client_fields as $field_name => $item ) { if ( ! empty( $item['db_field'] ) && isset( $client_fields['default_field'][ $field_name ] ) ) { $client_to_add[ $item['db_field'] ] = sanitize_text_field( wp_unslash( $client_fields['default_field'][ $field_name ] ) ); } } $client_to_add['primary_contact_id'] = isset( $client_fields['default_field']['primary_contact_id'] ) ? intval( $client_fields['default_field']['primary_contact_id'] ) : 0; $client_id = isset( $client_fields['client_id'] ) ? intval( $client_fields['client_id'] ) : 0; $new_suspended = isset( $client_to_add['suspended'] ) ? (int) $client_to_add['suspended'] : 0; $old_suspended = $new_suspended; if ( $client_id ) { $current_client = MainWP_DB_Client::instance()->get_wp_client_by( 'client_id', $client_id ); $old_suspended = $current_client->suspended; $client_to_add['client_id'] = $client_id; // update client. if ( isset( $client_to_add['created'] ) && ! empty( $client_to_add['created'] ) ) { $client_to_add['created'] = strtotime( $client_to_add['created'] ); } $add_new = false; } else { $client_to_add['created'] = time(); } try { $inserted = MainWP_DB_Client::instance()->update_client( $client_to_add, true ); } catch ( \Exception $e ) { echo wp_json_encode( array( 'error' => $e->getMessage() ) ); return; } if ( $client_id ) { MainWP_DB_Client::instance()->update_selected_sites_for_client( $client_id, $selected_sites ); } elseif ( is_object( $inserted ) ) { MainWP_DB_Client::instance()->update_selected_sites_for_client( $inserted->client_id, $selected_sites ); $client_id = $inserted->client_id; } if ( is_object( $inserted ) ) { /** * Add client * * Fires after add a client. * * @param object $inserted client data. * @param bool $add_new true add new, false updated. * * @since 4.5.1.1 */ do_action( 'mainwp_client_updated', $inserted, $add_new ); if ( ! $add_new && $new_suspended != $old_suspended ) { //phpcs:ignore -- to valid. /** * Fires immediately after update client suspend/unsuspend. * * @since 4.5.1.1 * * @param object $client client data. * @param bool $new_suspended true|false. */ do_action( 'mainwp_client_suspend', $inserted, $new_suspended ); } } if ( $client_id && isset( $client_fields['custom_fields'] ) && is_array( $client_fields['custom_fields'] ) ) { foreach ( $client_fields['custom_fields'] as $field_val ) { $field_id = array_key_first( $field_val ); // update custom field value for client. if ( $field_id ) { $val = $field_val[ $field_id ]; MainWP_DB_Client::instance()->update_client_field_value( $field_id, $val, $client_id ); } } } $client_image = ''; if ( isset( $_POST['mainwp_add_edit_client_uploaded_icon_hidden'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification $client_image = sanitize_text_field( wp_unslash( $_POST['mainwp_add_edit_client_uploaded_icon_hidden'] ) ); // phpcs:ignore WordPress.Security.NonceVerification } // compatible with quick setup. if ( isset( $_FILES['mainwp_client_image_uploader'] ) && isset( $_FILES['mainwp_client_image_uploader']['error']['client_field'] ) && UPLOAD_ERR_OK === $_FILES['mainwp_client_image_uploader']['error']['client_field'] ) { // phpcs:ignore WordPress.Security.NonceVerification $output = MainWP_System_Utility::handle_upload_image( 'client-images', $_FILES['mainwp_client_image_uploader'], 'client_field' ); // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized if ( is_array( $output ) && isset( $output['filename'] ) && ! empty( $output['filename'] ) ) { $client_image = $output['filename']; } } $client_data = MainWP_DB_Client::instance()->get_wp_client_by( 'client_id', $client_id ); if ( $client_data && $client_data->image !== $client_image && $client_id ) { $old_file = $client_data->image; if ( $old_file !== $client_image && ! empty( $old_file ) ) { MainWP_Utility::instance()->delete_uploaded_icon_file( 'client-images', $old_file ); } $update = array( 'client_id' => $client_id, 'image' => $client_image, ); MainWP_DB_Client::instance()->update_client( $update ); } if ( $client_id && isset( $client_fields['default_field']['selected_icon'] ) ) { $cust_icon = sanitize_text_field( wp_unslash( $client_fields['default_field']['selected_icon'] ) ); $cust_color = sanitize_hex_color( wp_unslash( $client_fields['default_field']['selected_color'] ) ); $update = array( 'client_id' => $client_id, 'selected_icon_info' => 'selected:' . $cust_icon . ';color:' . $cust_color, ); MainWP_DB_Client::instance()->update_client( $update ); } $is_first_contact = true; $auto_assign_contact_id = 0; if ( $client_id && isset( $client_fields['contacts_field'] ) ) { foreach ( $client_fields['contacts_field']['client.contact.name'] as $indx => $contact_name ) { $contact_to_add = array(); if ( empty( $contact_name ) ) { continue; } $contact_to_add['contact_name'] = sanitize_text_field( wp_unslash( $contact_name ) ); $contact_email = sanitize_text_field( wp_unslash( $client_fields['contacts_field']['contact.email'][ $indx ] ) ); if ( empty( $contact_email ) ) { continue; } $contact_id = isset( $client_fields['contacts_field']['contact_id'][ $indx ] ) ? intval( $client_fields['contacts_field']['contact_id'][ $indx ] ) : 0; if ( empty( $contact_id ) ) { continue; } $editing_contact_nonce_id = sanitize_key( $client_fields['contacts_field']['nonce_contact_id'][ $indx ] ); if ( ! wp_verify_nonce( $editing_contact_nonce_id, 'editing-' . $client_id . '-contact-' . $contact_id ) ) { continue; } $contact_to_add['contact_email'] = $contact_email; $contact_to_add['contact_phone'] = sanitize_text_field( wp_unslash( $client_fields['contacts_field']['contact.phone'][ $indx ] ) ); $contact_to_add['contact_role'] = sanitize_text_field( wp_unslash( $client_fields['contacts_field']['contact.role'][ $indx ] ) ); $contact_to_add['facebook'] = sanitize_text_field( wp_unslash( $client_fields['contacts_field']['contact.facebook'][ $indx ] ) ); $contact_to_add['twitter'] = sanitize_text_field( wp_unslash( $client_fields['contacts_field']['contact.twitter'][ $indx ] ) ); $contact_to_add['instagram'] = sanitize_text_field( wp_unslash( $client_fields['contacts_field']['contact.instagram'][ $indx ] ) ); $contact_to_add['linkedin'] = sanitize_text_field( wp_unslash( $client_fields['contacts_field']['contact.linkedin'][ $indx ] ) ); $cust_icon = sanitize_text_field( wp_unslash( $client_fields['contacts_field']['selected_icon'][ $indx ] ) ); $cust_color = sanitize_hex_color( wp_unslash( $client_fields['contacts_field']['selected_color'][ $indx ] ) ); $contact_to_add['contact_icon_info'] = 'selected:' . $cust_icon . ';color:' . $cust_color; $contact_to_add['contact_client_id'] = $client_id; $contact_to_add['contact_id'] = $contact_id; $updated = MainWP_DB_Client::instance()->update_client_contact( $contact_to_add ); $is_first_contact = false; if ( $updated ) { $contact_data = MainWP_DB_Client::instance()->get_wp_client_contact_by( 'contact_id', $contact_id ); $contact_image = ''; if ( isset( $_POST['mainwp_add_edit_contact_uploaded_icon_hidden']['contacts_field'][ $indx ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification $contact_image = sanitize_text_field( wp_unslash( $_POST['mainwp_add_edit_contact_uploaded_icon_hidden']['contacts_field'][ $indx ] ) ); // phpcs:ignore WordPress.Security.NonceVerification } if ( $contact_data && $contact_data->contact_image !== $contact_image && $contact_id ) { $old_file = $contact_data->contact_image; if ( $old_file !== $contact_image && ! empty( $old_file ) ) { MainWP_Utility::instance()->delete_uploaded_icon_file( 'client-images', $old_file ); } $update = array( 'contact_id' => $contact_id, 'contact_image' => $contact_image, ); MainWP_DB_Client::instance()->update_client_contact( $update ); } } } } if ( $client_id && isset( $client_fields['new_contacts_field'] ) ) { foreach ( $client_fields['new_contacts_field']['client.contact.name'] as $indx => $contact_name ) { $contact_to_add = array(); if ( empty( $contact_name ) ) { continue; } $contact_to_add['contact_name'] = $contact_name; $contact_email = $client_fields['new_contacts_field']['contact.email'][ $indx ]; if ( empty( $contact_email ) ) { continue; } $contact_to_add['contact_email'] = $contact_email; $contact_to_add['contact_phone'] = isset( $client_fields['new_contacts_field']['contact.phone'][ $indx ] ) ? $client_fields['new_contacts_field']['contact.phone'][ $indx ] : ''; $contact_to_add['contact_role'] = $client_fields['new_contacts_field']['contact.role'][ $indx ]; $contact_to_add['facebook'] = isset( $client_fields['new_contacts_field']['contact.facebook'][ $indx ] ) ? $client_fields['new_contacts_field']['contact.facebook'][ $indx ] : ''; $contact_to_add['twitter'] = isset( $client_fields['new_contacts_field']['contact.twitter'][ $indx ] ) ? $client_fields['new_contacts_field']['contact.twitter'][ $indx ] : ''; $contact_to_add['instagram'] = isset( $client_fields['new_contacts_field']['contact.instagram'][ $indx ] ) ? $client_fields['new_contacts_field']['contact.instagram'][ $indx ] : ''; $contact_to_add['linkedin'] = isset( $client_fields['new_contacts_field']['contact.linkedin'][ $indx ] ) ? $client_fields['new_contacts_field']['contact.linkedin'][ $indx ] : ''; $cust_icon = isset( $client_fields['new_contacts_field']['selected_icon'][ $indx ] ) ? sanitize_text_field( wp_unslash( $client_fields['new_contacts_field']['selected_icon'][ $indx ] ) ) : ''; $cust_color = isset( $client_fields['new_contacts_field']['selected_color'][ $indx ] ) ? sanitize_hex_color( wp_unslash( $client_fields['new_contacts_field']['selected_color'][ $indx ] ) ) : ''; $contact_to_add['contact_icon_info'] = 'selected:' . $cust_icon . ';color:' . $cust_color; $contact_to_add['contact_client_id'] = $client_id; $inserted = MainWP_DB_Client::instance()->update_client_contact( $contact_to_add ); if ( $inserted ) { $contact_id = $inserted->contact_id; $contact_image = ''; if ( isset( $_POST['mainwp_add_edit_contact_uploaded_icon_hidden']['new_contacts_field'][ $indx ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification $contact_image = sanitize_text_field( wp_unslash( $_POST['mainwp_add_edit_contact_uploaded_icon_hidden']['new_contacts_field'][ $indx ] ) ); // phpcs:ignore WordPress.Security.NonceVerification } if ( '' !== $contact_image && $contact_id ) { $update = array( 'contact_id' => $contact_id, 'contact_image' => $contact_image, ); MainWP_DB_Client::instance()->update_client_contact( $update ); } if ( $is_first_contact && empty( $auto_assign_contact_id ) ) { $auto_assign_contact_id = $contact_id; } } } } if ( $client_id && isset( $client_fields['delele_contacts'] ) && is_array( $client_fields['delele_contacts'] ) ) { foreach ( $client_fields['delele_contacts'] as $delete_id ) { MainWP_DB_Client::instance()->delete_client_contact( $client_id, $delete_id ); $is_first_contact = false; } } if ( $is_first_contact && $auto_assign_contact_id && $client_id ) { // auto assign. $update = array( 'client_id' => $client_id, 'primary_contact_id' => $auto_assign_contact_id, ); MainWP_DB_Client::instance()->update_client( $update ); } // phpcs:disable WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized if ( isset( $_POST['is_first_client'] ) && ! empty( $_POST['is_first_client'] ) ) { delete_transient( 'mainwp_transient_just_connected_site_id' ); } //phpcs:enable echo wp_json_encode( array( 'success' => 'yes', 'client_id' => $client_id, ) ); } /** * Method render_add_client_modal(). * * Renders add client Modal window. */ public static function render_add_client_modal() { ?> client_id : 0; $default_client_fields = MainWP_Client_Handler::get_default_client_fields(); $custom_fields = MainWP_DB_Client::instance()->get_client_fields( true, $client_id, true ); $client_image = $edit_client ? $edit_client->image : ''; $icon_info_array = array(); if ( $edit_client ) { $arr_fields = array( 'image', 'selected_icon_info', ); $icon_info_array = MainWP_Utility::map_fields( $edit_client, $arr_fields, false ); } $uploaded_icon_src = ''; if ( ! empty( $client_image ) ) { $uploaded_icon_src = MainWP_Client_Handler::get_client_contact_image( $icon_info_array, 'client', 'uploaded_icon' ); } ?>

$field ) { $db_field = isset( $field['db_field'] ) ? $field['db_field'] : ''; $val = $edit_client && '' !== $db_field && property_exists( $edit_client, $db_field ) ? $edit_client->{$db_field} : ''; $tip = isset( $field['tooltip'] ) ? $field['tooltip'] : ''; ?>
get_wp_client_contact_by( 'client_id', $client_id ); ?>
0 ) { $compatible_tokens = MainWP_Client_Handler::get_compatible_tokens(); foreach ( $custom_fields as $field ) { if ( isset( $default_client_fields[ $field->field_name ] ) ) { continue; } // do not show these tokens. if ( isset( $compatible_tokens[ $field->field_name ] ) ) { continue; } $field_val = ( property_exists( $field, 'field_value' ) && '' !== $field->field_value ) ? esc_html( $field->field_value ) : ''; ?>
0 && $field->client_id > 0 ) { // edit client and it is individual field, then show to edit/delete field buttons. ?> [field_name ); ?>]
'; } return $output; } /** * Method get_add_contact_temp(). * * Get add contact template. * * @param mixed $edit_contact The contact data to edit. * @param bool $echo_out Echo template or not. * @param int $client_id Client id. */ public static function get_add_contact_temp( $edit_contact = false, $echo_out = false, $client_id = 0 ) { //phpcs:ignore -- NOSONAR - complex. $input_name = 'new_contacts_field'; $contact_id = 0; $contact_image = ''; if ( $edit_contact ) { $input_name = 'contacts_field'; $contact_id = $edit_contact->contact_id; $contact_image = $edit_contact->contact_image; } $uploaded_icon_src = ''; if ( ! empty( $contact_image ) ) { $arr_fields = array( 'contact_image', 'contact_icon_info', ); $icon_info_array = MainWP_Utility::map_fields( $edit_contact, $arr_fields, false ); $uploaded_icon_src = MainWP_Client_Handler::get_client_contact_image( $icon_info_array, 'contact', 'uploaded_icon' ); } ob_start(); ?>

$field ) { $db_field = isset( $field['db_field'] ) ? $field['db_field'] : ''; $val = $edit_contact && '' !== $db_field && property_exists( $edit_contact, $db_field ) ? $edit_contact->{$db_field} : ''; $contact_id = $edit_contact && property_exists( $edit_contact, 'contact_id' ) ? $edit_contact->contact_id : ''; ?>
false, 'error' => '', 'message' => '', ); // phpcs:disable WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized $client_id = isset( $_POST['client_id'] ) ? intval( $_POST['client_id'] ) : 0; // 0 is global client's field. $field_id = isset( $_POST['field_id'] ) ? intval( $_POST['field_id'] ) : 0; $field_desc = isset( $_POST['field_desc'] ) ? sanitize_text_field( wp_unslash( $_POST['field_desc'] ) ) : ''; $field_name = isset( $_POST['field_name'] ) ? sanitize_text_field( wp_unslash( $_POST['field_name'] ) ) : ''; $field_name = trim( $field_name, '[]' ); // phpcs:enable // update general or individual client field. if ( $field_id ) { $current = MainWP_DB_Client::instance()->get_client_fields_by( 'field_id', $field_id ); if ( $current && $current->field_name === $field_name && $current->field_desc === $field_desc ) { $return['success'] = true; $return['message'] = esc_html__( 'Field has been saved without changes.', 'mainwp' ); } else { $current = MainWP_DB_Client::instance()->get_client_fields_by( 'field_name', $field_name, $client_id ); // check if other field with the same name existed. if ( $current && (int) $current->field_id !== $field_id ) { $return['error'] = esc_html__( 'Field already exists, try different field name.', 'mainwp' ); } else { // update general or individual field name. $field = MainWP_DB_Client::instance()->update_client_field( $field_id, array( 'field_name' => $field_name, 'field_desc' => $field_desc, 'client_id' => $client_id, ) ); if ( $field ) { $return['success'] = true; } } } } else { // add new. $current = MainWP_DB_Client::instance()->get_client_fields_by( 'field_name', $field_name, $client_id ); if ( $current ) { // checking general or individual field name. $return['error'] = esc_html__( 'Field already exists, try different field name.', 'mainwp' ); } else { // insert general or individual field name. $field = MainWP_DB_Client::instance()->add_client_field( array( 'field_name' => $field_name, 'field_desc' => $field_desc, 'client_id' => $client_id, ) ); if ( $field ) { $return['success'] = true; } else { $return['error'] = esc_html__( 'Undefined error occurred. Please try again.', 'mainwp' ); } } } echo wp_json_encode( $return ); exit; } /** * Method save_note() * * Save Client Note. */ public static function save_note() { if ( isset( $_POST['clientid'] ) && ! empty( $_POST['clientid'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized $note = isset( $_POST['note'] ) ? wp_unslash( $_POST['note'] ) : ''; // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized $esc_note = MainWP_Utility::esc_content( $note ); $update = array( 'client_id' => intval( $_POST['clientid'] ), // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized 'note' => $esc_note, ); MainWP_DB_Client::instance()->update_client( $update ); die( wp_json_encode( array( 'result' => 'SUCCESS', 'esc_note_content' => $esc_note, ) ) ); } die( wp_json_encode( array( 'undefined_error' => true ) ) ); } }