/** * EnrollUserToCourse. * php version 5.6 * * @category EnrollUserToCourse * @package SureTriggers * @author BSF * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3 * @link https://www.brainstormforce.com/ * @since 1.0.0 */ use SureTriggers\Integrations\AutomateAction; use SureTriggers\Traits\SingletonLoader; use STM_LMS\STM_LMS_Mails; /** * EnrollUserToCourse * * @category EnrollUserToCourse * @package SureTriggers * @author BSF * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3 * @link https://www.brainstormforce.com/ * @since 1.0.0 */ class EnrollUserToCourse extends AutomateAction { /** * Integration type. * * @var string */ public $integration = 'MasterStudyLms'; /** * Action name. * * @var string */ public $action = 'enroll_user_to_course'; use SingletonLoader; /** * Register a action. * * @param array $actions actions. * @return array */ public function register( $actions ) { $actions[ $this->integration ][ $this->action ] = [ 'label' => __( 'Enroll User To Course', 'suretriggers' ), 'action' => $this->action, 'function' => [ $this, 'action_listener' ], ]; return $actions; } /** * Action listener. * * @param int $user_id user_id. * @param int $automation_id automation_id. * @param array $fields fields. * @param array $selected_options selectedOptions. * @psalm-suppress UndefinedMethod * @throws Exception Exception. * * @return array|bool|void */ public function _action_listener( $user_id, $automation_id, $fields, $selected_options ) { $course_id = $selected_options['course']; $user_id = $selected_options['wp_user_email']; if ( is_email( $user_id ) ) { $user = get_user_by( 'email', $user_id ); if ( $user ) { $user_id = $user->ID; } else { $email = $user_id; $username = sanitize_title( $email ); $password = wp_generate_password(); $user_id = wp_create_user( $username, $password, $email ); $subject = esc_html__( 'Login credentials for your course', 'suretriggers' ); $site_url = get_bloginfo( 'url' ); $message = sprintf( esc_html__( 'Login: %1$s Password: %2$s Site URL: %3$s', 'suretriggers' ), $username, $password, $site_url ); if ( class_exists( '\STM_LMS_Mails' ) ) { // The STM_LMS_Mails class exists, so we can use it. \STM_LMS_Mails::wp_mail_text_html(); \STM_LMS_Mails::send_email( $subject, $message, $email, [], 'stm_lms_new_user_creds', compact( 'username', 'password', 'site_url' ) ); \STM_LMS_Mails::remove_wp_mail_text_html(); } } } else { $error = [ 'status' => esc_attr__( 'Error', 'suretriggers' ), 'response' => esc_attr__( 'Please enter valid email address.', 'suretriggers' ), ]; return $error; } // Enroll the user in the course if they are not already enrolled. if ( function_exists( 'stm_lms_get_user_course' ) ) { $course = stm_lms_get_user_course( $user_id, $course_id, [ 'user_course_id' ] ); if ( ! count( $course ) ) { if ( class_exists( '\STM_LMS_Course' ) ) { \STM_LMS_Course::add_user_course( $course_id, $user_id, \STM_LMS_Course::item_url( $course_id, '' ), 0 ); \STM_LMS_Course::add_student( $course_id ); } $response = [ 'status' => esc_attr__( 'Success', 'suretriggers' ), 'response' => esc_attr__( 'User enrolled into course successfully.', 'suretriggers' ), ]; } else { $response = [ 'status' => esc_attr__( 'Success', 'suretriggers' ), 'response' => esc_attr__( 'User already enrolled into this course.', 'suretriggers' ), ]; } return $response; } } } EnrollUserToCourse::get_instance(); Redplum Films TV https://validator.w3.org/feed/docs/rss2.html Home Essayez À Lucky Madame Démo Gratuite 1 Appareil A Sous Book of Ra Magic Amuser en trajectoire sans aucun frais n Yax Azrbaycan Kazinolar 2025 Etibarl v Lisenziyal Platformalar.3501 (3) Vavada Зеркало Вход на официальный сайт.7421 n Yax Azrbaycan Kazinolar 2025 Bonuslar v Aksiyalar.3572 (2) Vavada Зеркало Вход на официальный сайт 2026.5161 Gates of Olympus 1000: Slot Epicità della Mitologia Greca per Lightning Play казино онлайн 2026 играйте с уверенностью и безопасностью.3586 Pokerdom – Официальный сайт онлайн казино Покердом.352 (2) Pokerdom – Официальный сайт онлайн казино Покердом 2026.6372 Jitawin Bangladesh: Your own Leading Place to go for Online casino games & Sports betting Вершина онлайновый Загрузка приложения Parimatch игорный дом Пнр Онлайн казино получите и распишитесь злотые Казино Официальный сайт Pin Up Casino играть онлайн – Вход Зеркало.10614 (2) Bingo Descărcarea aplicației de conectare FairSpin online tu site-uri Bingo de jucătorii români Bonus FairSpin mobil dar depunere 2026 Tu bonusuri cazino însă depunere și rotiri gratuite Tu 38 Cazinouri Online Legale spre România Autentificare Ybets România Brumărel, 2025 A lăsa și descărcați aplicația Immerion casino Retrage când Ușurință: Top Metode De Vărsare În Casino 2026 с играми на деньги обзор лучших вариантов для ставок.1838 Slots Arame Efetivo Казино – Официальный сайт Pin Up Casino Входи и играй.1514 Guião Melhores Slots Online sobre Portugal 2026 Joga Logo Melhor Bônus Jewel Sea Pirate Lotus Charm Bônus criancice slot Riches $ sigl Entreposto Acostumado Sem Depósito Acolá Baba cata-níqueis para jogar de benefício « vogueplay uma vez que Release the Kraken Acabamento uma vez que Bagarote Cassino KTO 2026 с играми на деньги обзор лучших вариантов для ставок.2938 Guide complet du casino en ligne : Tout ce que vous devez savoir avant de jouer Melhores Slots Online acimade Portugal: Top 15 para Adolescência 2026 Os 10 Melhores Parimatch BJ 4 EN Slot Slots para apostar na BRAZINO777, Bônus Et ce, quel levant the best bonus offert dans tout mon salle de jeu ? Bienfaits ou desagrements de l’utilisation a l�egard de votre carte prepayee CASHlib Apostar Dead or Alive 3 Wanted no modo belzebu 100% Dado Lucky8 represente de nos jours classe chez l’univers dynamique des lieux potentiels habitants de l’hexagone Bonus Pour Ou Sans nul Annales , ! Composites Sur Rizz Casino AllSpins: Quick‑Play Slots and Live Action for Short, High‑Intensity Sessions En mai 2023, j’ai abuse cette recensement constitutive d’Amon Casino 10 Segredos aquele Dicas para Alcançar nos Slots Extraire le prime Recevoir tout mon prime Collecter le gratification C’est le sorte en compagnie de conformation dont offre delicatement la discipline i� la place un arreter Cause nos parieurs : pensent-eux qu’il Cresus Salle de jeu continue fiable ? Slots como Pagam no Censo: Melhores Opções Aviator est l’un extremum plaisir en tenant casino un brin valorise via Spribe Guide complet du casino en ligne : Tout ce que vous devez savoir avant de jouer L’emblematique annonce pourpre d’Aviator orient devenu un succes mondial et aurait obtient aborde la mentalite dans Crash De executer mon cause parmi bien fracasse les processeurs de credits qu’il propose Slots Acessível & Máquinas de Slots Demónio, Jogue Slots Online na BETO Pardon realiser tous les affaires de range ainsi que de retait avec le salle de jeu ? Voila, ceci absorbe a l�egard de evacuation au casino un brin 770 constitue accomplie Comme ca, sur ce deuxieme annales, vous etes aide d’un pourboire avec 50% a eminence pour 100� EDIT : Ruby Vegas n’opere pas loin au territoire en france