Files
2026-04-28 15:13:50 +02:00

145 lines
4.0 KiB
PHP

<?php
namespace AIOSEO\Plugin\Pro\Schema\Graphs\Course;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* MemberMouseCourse class
*
* @since 4.6.4
*/
class MemberMouseCourse extends Course {
/**
* Returns the graph data.
*
* @since 4.6.4
*
* @param Object $graphData The graph data.
* @return array The parsed graph data.
*/
public function get( $graphData = null ) {
$data = parent::getGraphData( $graphData );
if ( ! aioseo()->helpers->isMemberMouseCoursesActive() ) {
return [];
}
$courseId = get_the_ID();
$certificatesEnabled = get_post_meta( $courseId, '_mmcs_course_certificates_enable', true );
if ( is_string( $certificatesEnabled ) && 'enabled' === strtolower( $certificatesEnabled ) ) {
$data['hasCourseCertificate'] = [
'@type' => 'EducationalOccupationalCredential',
'name' => sprintf(
// Translators: 1 - The site name.
__( '%1$s Certificate of Completion', 'aioseo-pro' ),
get_bloginfo( 'name' )
)
];
}
if ( isset( $graphData->properties->autogenerate ) && ! $graphData->properties->autogenerate ) {
return $data;
}
$sectionTableName = aioseo()->core->db->prefix . 'mmcs_sections';
$sections = aioseo()->core->db->execute(
aioseo()->core->db->db->prepare(
"SELECT * FROM {$sectionTableName} WHERE course_id = $courseId ORDER BY section_order ASC",
get_the_ID()
),
true
)->result();
if ( ! empty( $sections ) ) {
$sectionData = [];
foreach ( $sections as $section ) {
$sectionData[] = [
'@type' => 'Syllabus',
'name' => $section->title,
'description' => $section->description
];
}
if ( ! empty( $sectionData ) ) {
$data['syllabusSections'] = $sectionData;
}
}
// Get all memberships that have access to this course.
$postAccessTableName = aioseo()->core->db->prefix . 'mm_posts_access';
$memberships = aioseo()->core->db->execute(
aioseo()->core->db->db->prepare(
"SELECT access_id FROM {$postAccessTableName} WHERE post_id = %d",
$courseId
),
true
)->result();
if ( ! empty( $memberships ) ) {
$currency = get_option( 'mm-option-currency', 'USD' );
$offers = [];
foreach ( $memberships as $membership ) {
$membershipLevelTableName = aioseo()->core->db->prefix . 'mm_membership_levels';
$membershipLevels = aioseo()->core->db->execute(
aioseo()->core->db->db->prepare(
"SELECT * FROM {$membershipLevelTableName} WHERE id = %d",
$membership->access_id
),
true
)->result();
foreach ( $membershipLevels as $membershipLevel ) {
if ( '1' === $membershipLevel->is_free ) {
$offers[] = [
'@type' => 'Offer',
'category' => 'Free'
];
continue;
}
// Get the product IDs for the membership level.
$membershipProductTableName = aioseo()->core->db->prefix . 'mm_membership_level_products';
$membershipProducts = aioseo()->core->db->execute(
aioseo()->core->db->db->prepare(
"SELECT * FROM {$membershipProductTableName} WHERE membership_id = %d",
$membershipLevel->id
),
true
)->result();
foreach ( $membershipProducts as $membershipProduct ) {
$productTableName = aioseo()->core->db->prefix . 'mm_products';
$product = aioseo()->core->db->execute(
aioseo()->core->db->db->prepare(
"SELECT * FROM {$productTableName} WHERE id = %d",
$membershipProduct->product_id
),
true
)->result();
foreach ( $product as $productData ) {
$category = ! empty( $productData->rebill_frequency ) ? 'Subscription' : 'Paid';
$offers[] = [
'@type' => 'Offer',
'category' => $category,
'price' => number_format( $productData->price, 2 ),
'priceCurrency' => $currency
];
}
}
}
}
if ( ! empty( $offers ) ) {
$data['offers'] = $offers;
}
}
return $data;
}
}