LLMS_Meta_Box_Award_Engagement_Submit
Award engagement submit meta box class.
Source Source
File: includes/admin/post-types/meta-boxes/class.llms.meta.box.award.engagement.submit.php
class LLMS_Meta_Box_Award_Engagement_Submit extends LLMS_Admin_Metabox {
/**
* ID of the student who earned (is about to earn) the engagement.
*
* @since 6.0.0
*
* @var int
*/
private $student_id;
/**
* Allowed post types.
*
* @since 6.0.0
*
* @var string[]
*/
private $post_types = array(
'llms_my_achievement' => array(
'model' => 'LLMS_User_Achievement',
'reporting_stab' => 'achievements',
),
'llms_my_certificate' => array(
'model' => 'LLMS_User_Certificate',
'reporting_stab' => 'certificates',
),
);
/**
* Configure the metabox settings.
*
* @since 6.0.0
*
* @return void
*/
public function configure() {
$this->id = 'submitdiv'; // Overrides the WordPress core one.
$this->title = __( 'Award', 'lifterlms' );
$this->screens = array_keys( $this->post_types );
$this->context = 'side';
$this->priority = 'high';
$this->callback_args = function() {
return 'llms_my_certificate' === get_post_type() ?
array(
'__back_compat_meta_box' => true,
)
:
array();
};
}
/**
* Not used because our metabox doesn't use the standard fields api.
*
* @since 6.0.0
*
* @return array
*/
public function get_fields() {
return array();
}
/**
* Function to field WP::output() method call.
*
* @since 6.0.0
*
* @return void
*/
public function output() {
global $action;
add_action( 'admin_print_footer_scripts', array( __CLASS__, 'metabox_scripts' ), PHP_INT_MAX );
$engagement = $this->post;
$engagement_id = (int) $this->post->ID;
$engagement_type_object = get_post_type_object( $this->post->post_type );
$can_publish = current_user_can( $engagement_type_object->cap->publish_posts );
$fields = $this->student_fields();
include LLMS_PLUGIN_DIR . 'includes/admin/views/metaboxes/view-award-engagement-submit.php';
}
/**
* Student fields.
*
* @since 6.0.0
*
* @return string
*/
private function student_fields() {
$fields = '';
// Creating.
if ( 'add' === get_current_screen()->action ) {
$fields = $this->student_fields_on_creation();
}
$fields .= $this->student_information();
return $fields;
}
/**
* Student fields on creation html.
*
* @since 6.0.0
*
* @return string
*/
private function student_fields_on_creation() {
$student_id = $this->current_student_id( true );
// The `post_author_override` is the same used in WP core for the author selector.
$field_id = 'post_author_override';
$field = array(
'id' => $field_id,
'type' => 'hidden',
'value' => $student_id,
'skip_save' => true,
'required' => true,
);
if ( empty( $student_id ) ) {
$field = array(
'allow_null' => false,
'class' => 'llms-select2-student',
'data_attributes' => array(
'allow_clear' => false,
'placeholder' => __( 'Select a Student', 'lifterlms' ),
),
'id' => $field_id,
'label' => ' ' . __( 'Select a Student', 'lifterlms' ),
'type' => 'select',
'skip_save' => true,
'required' => true,
);
}
return $this->process_field( $field );
}
/**
* Current student information html.
*
* @since 6.0.0
*
* @return string
*/
private function student_information() {
$post_type = get_post_type( $this->post->ID );
$student_id = $this->current_student_id();
$student = $student_id ? llms_get_student( $student_id ) : $student_id;
// Bail if no student.
if ( empty( $student ) ) {
return '';
}
$first = $student->get( 'first_name' );
$last = $student->get( 'last_name' );
if ( ! $first || ! $last ) {
$name = $student->get( 'display_name' );
} else {
$name = $last . ', ' . $first;
}
$url = add_query_arg(
array(
'page' => 'llms-reporting',
'tab' => 'students',
'student_id' => $student_id,
'stab' => $this->post_types[ $post_type ]['reporting_stab'],
),
admin_url( 'admin.php' )
);
return sprintf(
'<li class="llms-mb-list student-info"> <b>%1$s:</b> <span>%2$s</span></li>',
__( 'Student', 'lifterlms' ),
sprintf(
'<a href="%1$s" target="_blank">%2$s <%3$s></a>',
esc_url( $url ),
$name,
$student->get( 'user_email' )
)
);
}
/**
* Retrieve the current student id.
*
* @since 6.0.0
*
* @param null|bool $creating Whether or not we're awarding an engagement.
* If not provided, it'll be dynamically retrieved if the current screen's action is 'add'.
* See WordPress' `get_current_screen()`.
* @return int
*/
private function current_student_id( $creating = null ) {
if ( isset( $this->student_id ) ) {
return $this->student_id;
}
$creating = $creating ?? ( 'add' === get_current_screen()->action );
$post_type = get_post_type( $this->post->ID );
// If creating, take into account passed GET variable.
$student = $creating && ! empty( $_GET['sid'] ) ? llms_filter_input( INPUT_GET, 'sid', FILTER_SANITIZE_NUMBER_INT ) : 0; // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- no need to verify the nonce here.
// If not creating, retrieve the earned engagement user id.
$student = ! $creating ? ( new $this->post_types[ $post_type ]['model']( $this->post->ID ) )->get_user_id() : $student;
$this->student_id = $student;
return $this->student_id;
}
/**
* Metabox specific scripts.
*
* @since 6.0.0
*
* @return void
*/
public static function metabox_scripts() {
?>
<script>
document.addEventListener(
"DOMContentLoaded",
() => {
// Localization.
const __ = window.wp.i18n.__,
_i18n = {
'Publish on:' : __( 'Award on:', 'lifterlms' ),
'Publish' : __( 'Award', 'lifterlms' ),
'Published' : __( 'Awarded', 'lifterlms' ),
'Published on:': __( 'Awarded on:', 'lifterlms' ),
};
window.wp.hooks.addFilter(
'i18n.gettext',
'llms.awardEngagement.submitbox',
( translation, text ) => {
return text in _i18n ? _i18n[text] : translation;
}
);
}
);
</script>
<?php
}
}
Expand full source code Collapse full source code View on GitHub
Methods Methods
- configure — Configure the metabox settings.
- current_student_id — Retrieve the current student id.
- get_fields — Not used because our metabox doesn't use the standard fields api.
- metabox_scripts — Metabox specific scripts.
- output — Function to field WP::output() method call.
- student_fields — Student fields.
- student_fields_on_creation — Student fields on creation html.
- student_information — Current student information html.
Changelog Changelog
| Version | Description |
|---|---|
| 6.0.0 | Introduced. |