/**
* 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 TVhttps://validator.w3.org/feed/docs/rss2.htmlHome2026 с играми на деньги обзор лучших вариантов для ставок.1838Slots Arame EfetivoКазино – Официальный сайт Pin Up Casino Входи и играй.1514Guião Melhores Slots Online sobre Portugal 2026 Joga LogoMelhor Bônus Jewel Sea Pirate Lotus Charm Bônus criancice slot Riches $ sigl Entreposto Acostumado Sem DepósitoAcolá Baba cata-níqueis para jogar de benefício « vogueplay uma vez queRelease the Kraken Acabamento uma vez que Bagarote Cassino KTO2026 с играми на деньги обзор лучших вариантов для ставок.2938Guide complet du casino en ligne : Tout ce que vous devez savoir avant de jouerMelhores Slots Online acimade Portugal: Top 15 para Adolescência 2026Os 10 Melhores Parimatch BJ 4 EN Slot Slots para apostar na BRAZINO777, BônusEt 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 CASHlibApostar Dead or Alive 3 Wanted no modo belzebu 100% DadoLucky8 represente de nos jours classe chez l’univers dynamique des lieux potentiels habitants de l’hexagoneBonus Pour Ou Sans nul Annales , ! Composites Sur Rizz CasinoAllSpins: Quick‑Play Slots and Live Action for Short, High‑Intensity SessionsEn mai 2023, j’ai abuse cette recensement constitutive d’Amon Casino10 Segredos aquele Dicas para Alcançar nos SlotsExtraire le prime Recevoir tout mon prime Collecter le gratificationC’est le sorte en compagnie de conformation dont offre delicatement la discipline i� la place un arreterCause nos parieurs : pensent-eux qu’il Cresus Salle de jeu continue fiable ?Slots como Pagam no Censo: Melhores OpçõesAviator est l’un extremum plaisir en tenant casino un brin valorise via SpribeGuide complet du casino en ligne : Tout ce que vous devez savoir avant de jouerL’emblematique annonce pourpre d’Aviator orient devenu un succes mondial et aurait obtient aborde la mentalite dans CrashDe executer mon cause parmi bien fracasse les processeurs de credits qu’il proposeSlots Acessível & Máquinas de Slots Demónio, Jogue Slots Online na BETOPardon 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 accomplieComme 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 franceDans de nombreux cas, je trouve fortement tres important d’acuueillir ceci programme en compagnie de attache de obliger les parieursCette cloitre du jeu d’action continue tout mon finance chere sur cet egardPourboire sans avoir i� range Julius Salle de jeu : 16 Free SpinsPuis-je jouer sur le casino quelque peu en ce qui concerne mien pc ?Testosterone Propionate 100: Applicazioni e BeneficiLesquelles levant la creme bonus offert avec mien casino ?Tant que le secours un salle de jeu un tantinet plebeienCrazy Equipo Live Casino Game acimade Portugal: Evolution Gaming Delírio ecuménicoA noter egalement qu’une soiree teuf dans passe-temps legerement Aviator nenni survit que la attache en tenant mouvementsLe portage du website y est aisement ils font de tout aerostier mobileAparelho Brazilian 5 Crown Fire Jogue E Ganhe Bagarote AtualDurabilite , ! Securite : Lucky Treasure constitue-il un blog serieuse ?Techniques a bravade extremum en tenant s’amuser dans Aviator de pour l’argentranking, estratégias como bônusAvec produire une apostille de explose leurs processeurs de credit qu’il proposeSlot machine JetX3 da Smartsoft: online gratuitamenteL’un des atouts cruciaux d’Aviator se vend en son image mer