/** * Plugin Name: Login as Customer * Description: Secure user‑switch plugin with audit log, role‑based restrictions, and modern UI. No activation or licensing required. * Version: 1.0 * Author: Recipe Codes * Author URI: http://recipe.codes * Text Domain: userswitchpro * Domain Path: /languages * Requires at least: 6.0 * Tested up to: 6.5 * License: GPL2 */ declare(strict_types=1); if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } // Define plugin constants. define( 'USERSWITCH_PRO_SECURE_DIR', plugin_dir_path( __FILE__ ) ); define( 'USERSWITCH_PRO_SECURE_URL', plugin_dir_url( __FILE__ ) ); // Include security helper functions. require_once USERSWITCH_PRO_SECURE_DIR . 'includes/security-helper.php'; /** Activation hook – create audit table. */ /** Activation hook – create audit table. */ register_activation_hook( __FILE__, 'userswitch_pro_activate' ); function userswitch_pro_activate() { global $wpdb; $table_name = $wpdb->prefix . 'userswitch_audit'; $charset_collate = $wpdb->get_charset_collate(); $sql = "CREATE TABLE IF NOT EXISTS {$table_name} ( id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, admin_id BIGINT(20) UNSIGNED NOT NULL, target_user_id BIGINT(20) UNSIGNED NOT NULL, action varchar(50) NOT NULL, ip_address varchar(100) NOT NULL, log_timestamp datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) {$charset_collate};"; require_once ABSPATH . 'wp-admin/includes/upgrade.php'; dbDelta( $sql ); } ?> global $wpdb; $table_name = $wpdb->prefix . 'userswitch_audit'; $charset_collate = $wpdb->get_charset_collate(); $sql = "CREATE TABLE IF NOT EXISTS {$table_name} (\n id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,\n admin_id BIGINT(20) UNSIGNED NOT NULL,\n target_user_id BIGINT(20) UNSIGNED NOT NULL,\n action varchar(50) NOT NULL,\n ip_address varchar(100) NOT NULL,\n log_timestamp datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,\n PRIMARY KEY (id)\n ) {$charset_collate};"; require_once ABSPATH . 'wp-admin/includes/upgrade.php'; dbDelta( $sql ); } ); /** Uninstall hook – drop audit table. */ /** Uninstall hook – drop audit table. */ register_uninstall_hook( __FILE__, 'userswitch_pro_uninstall' ); function userswitch_pro_uninstall() { global $wpdb; $table_name = $wpdb->prefix . 'userswitch_audit'; $wpdb->query( "DROP TABLE IF EXISTS {$table_name}" ); } ?> global $wpdb; $table_name = $wpdb->prefix . 'userswitch_audit'; $wpdb->query( "DROP TABLE IF EXISTS {$table_name}" ); } ); /** Initialise admin functionality – only for users with proper capability. */ function userswitch_pro_secure_admin_init() { // Verify current user can manage options. loginas_capability_check(); // Enqueue admin assets when on our plugin pages. add_action( 'admin_enqueue_scripts', function ( $hook ) { if ( strpos( $hook, 'userswitch' ) !== false ) { wp_enqueue_style( 'userswitch-admin-secure', USERSWITCH_PRO_SECURE_URL . 'assets/css/admin-css-secure.css', [], '1.0' ); // Select2 for searchable dropdowns. wp_enqueue_script( 'select2', 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js', ['jquery'], '4.0.13', true ); wp_enqueue_style( 'select2-css', 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css', [], '4.0.13' ); } } ); // Load the settings page implementation. require_once USERSWITCH_PRO_SECURE_DIR . 'admin/setting.php'; if ( class_exists( 'userswitch_admin_setting_pro' ) ) { new userswitch_admin_setting_pro(); } } add_action( 'admin_init', 'userswitch_pro_secure_admin_init' ); /** AJAX handler for switching to another user – respects role‑based restrictions and logs the action. */ function userswitch_pro_secure_switch_user() { // Verify nonce. if ( ! loginas_verify_nonce( 'userswitch_switch_user', 'userswitch_nonce' ) ) { wp_send_json_error( [ 'message' => __( 'Invalid request.', 'userswitchpro' ) ] ); } $user_id = isset( $_POST['user_id'] ) ? absint( $_POST['user_id'] ) : 0; if ( ! $user_id ) { wp_send_json_error( [ 'message' => __( 'No user specified.', 'userswitchpro' ) ] ); } // Role‑based restriction check. $allowed_roles = get_option( 'userswitch_allowed_roles', [ 'administrator' ] ); $current_user = wp_get_current_user(); if ( empty( array_intersect( $current_user->roles, $allowed_roles ) ) ) { wp_send_json_error( [ 'message' => __( 'You are not permitted to use this feature.', 'userswitchpro' ) ] ); } // Log the action. global $wpdb; $wpdb->insert( $wpdb->prefix . 'userswitch_audit', [ 'admin_id' => get_current_user_id(), 'target_user_id' => $user_id, 'action' => 'switch_user', 'ip_address' => $_SERVER['REMOTE_ADDR'] ?? 'unknown', ], [ '%d', '%d', '%s', '%s' ] ); // Perform the actual switch – reuse original function if present. if ( function_exists( 'loginas_switch_user' ) ) { loginas_switch_user( $user_id ); wp_send_json_success(); } else { wp_send_json_error( [ 'message' => __( 'Switch function missing.', 'userswitchpro' ) ] ); } } add_action( 'wp_ajax_userswitch_switch_user', 'userswitch_pro_secure_switch_user' ); ?> مايوه أولادي صيفي 2025 بطبعة صيفية - Stedrino Kids Wear - ستدرينو كيدز وير

Free shipping on orders over 500 EGP

مايوه أولادي صيفي 2025 بطبعة صيفية

250.00 EGP

Free shipping on orders over 500 EGP
Offer ends in --:--:--

29+ orders this week

Viewing now 25

Delivery in 2–5 business days across Egypt

مايوه أولادي صيفي بطبعة صيفية مرحة، خامة خفيفة وسريعة الجفاف، تصميم عملي مناسب للشاطئ والمسبح.

  • Secure payment
  • Easy exchange
  • WhatsApp support

  • Soft, kid-friendly fabrics
  • Easy returns & exchange
  • Secure checkout

Description

مايوه أولادي صيفي 2025 بطبعة صيفية

لو بتجهز للبحر أو المصيف، القطعة دي هتكون من الاختيارات الأساسية. تصميم بطبعة فراشات وورود وأوراق شجر بتدي إحساس بالحيوية والانطلاق، والخامة خفيفة بتهوّي الجسم وتجف بسرعة.

الخصر المطاطي مع الرباط بيساعد في التثبيت، وبيوفر راحة في اللبس حتى مع النشاط والحركة. سواء في السباحة أو اللعب على الشاطئ، القطعة دي هتكون عملية وسهلة الاستخدام.

هتلاقيها ضمن مجموعة ملابس الأولادي في Stedrino اللي بتركّز على الراحة والتصميم العملي.

Additional information

the color

white

Sex/Gender

My children

season

Summer

measuring

10, 12, 14, 16, 4, 6, 8

النوع

مايوه

What parents say

Very soft fabric and the size was perfect. My daughter loves it!

منى أ. Cairo, Egypt

Fast delivery and neat packaging. Will order again!

Sarah M. Alexandria, Egypt

Colors stay bright after washing. Great quality for the price.

هند س. Giza, Egypt