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' => '
',
'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' => '
',
'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 . '
';
}
}
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();
?>
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 );
?>
'; ?>
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' );
}
?>
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 ) ) );
}
}