value, (int) $course_id, max( 0, (int) $unit_id ), $announcement_id, InvitationState::SENT->value, $now, max( 0, (int) $actor_id ), $now, $now ); self::$by_announcement[ $announcement_id ] = Db::insert_id(); } public static function on_notified( $user_id, $announcement_id = 0, $course_id = 0 ): void { $user_id = (int) $user_id; $announcement_id = (int) $announcement_id; if ( $user_id <= 0 || $announcement_id <= 0 ) { return; } if ( ! isset( self::$by_announcement[ $announcement_id ] ) ) { $inv = InvitationRepository::for_announcement( $announcement_id, (int) $course_id ); if ( null === $inv ) { return; } self::$by_announcement[ $announcement_id ] = $inv->id; } global $wpdb; Db::query( 'INSERT IGNORE INTO %i (invitation_id, user_id, email_hash, source, state, sent_version, created_at) SELECT %d, u.ID, SHA2( LOWER( TRIM( u.user_email ) ), 256 ), %d, %d, 1, %s FROM %i u WHERE u.ID = %d', Db::table( 'invitees' ), self::$by_announcement[ $announcement_id ], InviteeSource::EARLIER->value, InviteeState::SENT->value, Clock::now(), $wpdb->users, $user_id ); } public static function reset(): void { self::$by_announcement = array(); } }