languages/learndash.pot000066600002241174152141567320011224 0ustar00# Copyright (C) 2020 LearnDash # This file is distributed under the same license as the LearnDash LMS plugin. msgid "" msgstr "" "Project-Id-Version: LearnDash LMS 3.1.6\n" "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/learndash-core-3.1.6.master\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "POT-Creation-Date: 2020-03-31T22:24:15+00:00\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "X-Generator: WP-CLI 2.4.0\n" "X-Domain: learndash\n" #. Plugin Name of the plugin #: includes/admin/class-learndash-admin-menus-tabs.php:387 #: includes/admin/class-learndash-admin-menus-tabs.php:388 #: includes/settings/settings-sections/class-ld-settings-section-translations-learndash.php:34 msgid "LearnDash LMS" msgstr "" #. Plugin URI of the plugin #. Author URI of the plugin msgid "http://www.learndash.com" msgstr "" #. Description of the plugin msgid "LearnDash LMS Plugin - Turn your WordPress site into a learning management system." msgstr "" #. Author of the plugin #: includes/admin/class-learndash-admin-addons-list-table.php:48 msgid "LearnDash" msgstr "" #: includes/admin/class-learndash-admin-addons-list-table.php:52 msgid "Third Party" msgstr "" #. translators: placeholder: Human relative date time. #: includes/admin/class-learndash-admin-addons-list-table.php:331 msgctxt "placeholder: human relative date time" msgid "%s ago" msgstr "" #: includes/admin/class-learndash-admin-addons-list-table.php:430 msgid "Check Updates" msgstr "" #: includes/admin/class-learndash-admin-binary-selector.php:81 #: includes/admin/class-learndash-admin-binary-selector.php:82 msgid "Search:" msgstr "" #: includes/admin/class-learndash-admin-binary-selector.php:291 msgid "‹ prev" msgstr "" #. translators: placeholder: Page X of Y. #: includes/admin/class-learndash-admin-binary-selector.php:294 msgctxt "placeholder: Page X of Y" msgid "Page %s of %s" msgstr "" #: includes/admin/class-learndash-admin-binary-selector.php:297 msgid "next ›" msgstr "" #: includes/admin/class-learndash-admin-binary-selector.php:314 #: includes/settings/settings-pages/class-ld-settings-page-overview.php:944 #: themes/ld30/templates/shortcodes/profile.php:150 #: themes/ld30/templates/shortcodes/profile/search.php:74 msgid "Search" msgstr "" #. translators: placeholder: Course. #: includes/admin/class-learndash-admin-binary-selector.php:651 msgctxt "Course Users Label" msgid "%s Users" msgstr "" #. translators: placeholder: Course. #: includes/admin/class-learndash-admin-binary-selector.php:654 msgctxt "Course Users label" msgid "%s Users" msgstr "" #. translators: placeholder: Course. #: includes/admin/class-learndash-admin-binary-selector.php:660 msgctxt "Search All Course Users" msgid "Search All %s Users" msgstr "" #. translators: placeholder: Course. #: includes/admin/class-learndash-admin-binary-selector.php:665 msgctxt "Search Assigned Course Users" msgid "Search Assigned %s Users" msgstr "" #: includes/admin/class-learndash-admin-binary-selector.php:696 #: includes/admin/class-learndash-admin-groups-edit.php:266 msgid "Group Users" msgstr "" #: includes/admin/class-learndash-admin-binary-selector.php:700 msgid "Search All Group Users" msgstr "" #: includes/admin/class-learndash-admin-binary-selector.php:701 msgid "Search Assigned Group Users" msgstr "" #: includes/admin/class-learndash-admin-binary-selector.php:730 #: includes/admin/class-learndash-admin-groups-edit.php:260 msgid "Group Leaders" msgstr "" #: includes/admin/class-learndash-admin-binary-selector.php:734 msgid "Search All Group Leaders" msgstr "" #: includes/admin/class-learndash-admin-binary-selector.php:735 msgid "Search Assigned Group Leaders" msgstr "" #. translators: placeholder: courses. #: includes/admin/class-learndash-admin-binary-selector.php:1002 msgctxt "Group Courses label" msgid "Group %s" msgstr "" #. translators: placeholder: courses. #: includes/admin/class-learndash-admin-binary-selector.php:1010 msgctxt "Search All Group Courses Label" msgid "Search All Group %s" msgstr "" #. translators: placeholder: courses. #: includes/admin/class-learndash-admin-binary-selector.php:1015 msgctxt "Search Assigned Group Courses Label" msgid "Search Assigned Group %s" msgstr "" #. translators: placeholder: Course. #: includes/admin/class-learndash-admin-binary-selector.php:1049 msgctxt "Groups Using Course Label" msgid "Groups Using %s" msgstr "" #: includes/admin/class-learndash-admin-binary-selector.php:1055 #: includes/admin/class-learndash-admin-binary-selector.php:1141 #: includes/admin/class-learndash-admin-binary-selector.php:1176 msgid "Search All Groups" msgstr "" #. translators: placeholder: Course. #: includes/admin/class-learndash-admin-binary-selector.php:1058 msgctxt "Search Course Groups Label" msgid "Search %s Groups" msgstr "" #. translators: placeholder: Courses. #: includes/admin/class-learndash-admin-binary-selector.php:1092 msgctxt "User Enrolled in Courses Label" msgid "User Enrolled in %s" msgstr "" #. translators: placeholder: Courses. #: includes/admin/class-learndash-admin-binary-selector.php:1100 msgctxt "Search All Courses Label" msgid "Search All %s" msgstr "" #. translators: placeholder: Courses. #: includes/admin/class-learndash-admin-binary-selector.php:1105 msgctxt "Search Enrolled Courses Label" msgid "Search Enrolled %s" msgstr "" #: includes/admin/class-learndash-admin-binary-selector.php:1137 msgid "User Enrolled in Groups" msgstr "" #: includes/admin/class-learndash-admin-binary-selector.php:1142 msgid "Search Enrolled Groups" msgstr "" #: includes/admin/class-learndash-admin-binary-selector.php:1172 msgid "Leader of Groups" msgstr "" #: includes/admin/class-learndash-admin-binary-selector.php:1177 msgid "Search Leader Groups" msgstr "" #: includes/admin/class-learndash-admin-builder.php:167 #: includes/admin/class-learndash-admin-builder.php:198 #: themes/ld30/templates/course.php:185 #: themes/ld30/templates/course.php:187 #: themes/ld30/templates/shortcodes/course_content_shortcode.php:85 #: themes/ld30/templates/shortcodes/course_content_shortcode.php:87 #: themes/ld30/templates/shortcodes/profile.php:152 #: themes/ld30/templates/shortcodes/profile.php:154 #: themes/ld30/templates/widgets/course-navigation.php:60 #: themes/ld30/templates/widgets/course-navigation.php:62 #: themes/legacy/templates/course.php:137 #: themes/legacy/templates/course_content_shortcode.php:51 #: themes/legacy/templates/profile.php:37 msgid "Expand All" msgstr "" #: includes/admin/class-learndash-admin-builder.php:169 #: includes/admin/class-learndash-admin-builder.php:200 #: themes/ld30/templates/course.php:185 #: themes/ld30/templates/shortcodes/course_content_shortcode.php:85 #: themes/ld30/templates/shortcodes/profile.php:152 #: themes/ld30/templates/widgets/course-navigation.php:60 #: themes/legacy/templates/course.php:137 #: themes/legacy/templates/course_content_shortcode.php:51 #: themes/legacy/templates/profile.php:37 msgid "Collapse All" msgstr "" #. translators: 'placeholders: will be post type labels like Course, Lesson, Topic'. #: includes/admin/class-learndash-admin-builder.php:230 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:180 msgctxt "placeholders: will be post type labels like Course, Lesson, Topic" msgid "Are you sure you want to remove this %1$s from the %2$s? (This will also remove all sub-items)" msgstr "" #. translators: placeholder: will be post type label like Course, Lesson, Topic. #: includes/admin/class-learndash-admin-builder.php:237 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:186 msgctxt "placeholder: will be post type label like Course, Lesson, Topic" msgid "Are you sure you want to move this %s to Trash?" msgstr "" #: includes/admin/class-learndash-admin-builder.php:253 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:592 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:596 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:688 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:716 msgid "Expand/Collape Section" msgstr "" #: includes/admin/class-learndash-admin-builder.php:253 msgid "New" msgstr "" #: includes/admin/class-learndash-admin-builder.php:268 msgid "Search..." msgstr "" #: includes/admin/class-learndash-admin-builder.php:319 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:406 #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:346 #: themes/legacy/templates/learndash_pager.php:87 msgid "First Page" msgstr "" #: includes/admin/class-learndash-admin-builder.php:320 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:407 #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:347 #: themes/ld30/templates/modules/pagination.php:116 #: themes/legacy/templates/learndash_pager.php:90 msgid "Previous Page" msgstr "" #: includes/admin/class-learndash-admin-builder.php:322 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:409 #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:349 #: themes/ld30/templates/modules/pagination.php:136 #: themes/legacy/templates/learndash_pager.php:95 msgid "Next Page" msgstr "" #: includes/admin/class-learndash-admin-builder.php:323 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:410 #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:350 #: themes/legacy/templates/learndash_pager.php:99 msgid "Last Page" msgstr "" #. translators: placeholder: link to LearnDash Data Upgrade admin page. #: includes/admin/class-learndash-admin-data-upgrades.php:307 msgctxt "placeholder: link to LearnDash Data Upgrade admin page" msgid "LearnDash Notice: Please perform a %s. This is a required step to ensure accurate reporting." msgstr "" #. translators: placeholder: link to LearnDash Data Upgrade admin page. #: includes/admin/class-learndash-admin-data-upgrades.php:308 msgid "LearnDash Data Upgrade" msgstr "" #: includes/admin/class-learndash-admin-data-upgrades.php:411 msgid "Last run: none" msgstr "" #. translators: placeholders: date/time, user name. #: includes/admin/class-learndash-admin-data-upgrades.php:418 msgctxt "placeholders: date/time, user name" msgid "Last run: %1$s by %2$s" msgstr "" #: includes/admin/class-learndash-admin-groups-edit.php:77 msgid "LearnDash Group Admin" msgstr "" #. translators: placeholder: course. #: includes/admin/class-learndash-admin-groups-edit.php:110 msgctxt "placeholder: course" msgid "Enable automatic group enrollment when a user enrolls into any associated group %s" msgstr "" #. translators: placeholder: Courses. #: includes/admin/class-learndash-admin-groups-edit.php:263 msgctxt "Group Courses" msgid "Group %s" msgstr "" #. translators: placeholder: Group Leaders Count. #: includes/admin/class-learndash-admin-groups-edit.php:290 msgctxt "Group Leaders Count" msgid "Total %d" msgstr "" #. translators: placeholder: Group Users Count. #: includes/admin/class-learndash-admin-groups-edit.php:323 msgctxt "Group Users Count" msgid "Total %d" msgstr "" #. translators: placeholder: Goup Courses Count. #: includes/admin/class-learndash-admin-groups-edit.php:356 msgctxt "Group Courses Count" msgid "Total %d" msgstr "" #: includes/admin/class-learndash-admin-groups-users-list-table.php:54 msgid "Email Group" msgstr "" #: includes/admin/class-learndash-admin-groups-users-list-table.php:79 #: includes/admin/class-learndash-admin-groups-users-list-table.php:148 #: includes/admin/classes-posts-listings/class-learndash-admin-questions-listing.php:171 #: includes/admin/ld-admin.php:577 #: includes/admin/ld-admin.php:636 #: includes/ld-assignment-uploads.php:1078 #: includes/ld-assignment-uploads.php:1109 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizOverall.php:105 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:548 #: includes/quiz/ld-quiz-essays.php:398 #: includes/quiz/ld-quiz-essays.php:426 #: includes/quiz/ld-quiz-essays.php:448 #: includes/quiz/ld-quiz-essays.php:919 #: includes/quiz/ld-quiz-essays.php:932 #: includes/quiz/ld-quiz-essays.php:945 #: themes/legacy/templates/quiz_progress_rows.php:150 msgid "edit" msgstr "" #: includes/admin/class-learndash-admin-groups-users-list-table.php:94 msgid "List Users" msgstr "" #: includes/admin/class-learndash-admin-groups-users-list-table.php:98 #: includes/admin/class-learndash-admin-groups-users-list-table.php:112 msgid "Export Progress" msgstr "" #: includes/admin/class-learndash-admin-groups-users-list-table.php:101 #: includes/admin/class-learndash-admin-groups-users-list-table.php:123 msgid "Export Results" msgstr "" #: includes/admin/class-learndash-admin-groups-users-list-table.php:129 #: includes/ld-groups.php:145 msgid "Edit Group" msgstr "" #: includes/admin/class-learndash-admin-groups-users-list-table.php:167 #: includes/ld-groups.php:377 msgid "Report" msgstr "" #: includes/admin/class-learndash-admin-groups-users-list.php:54 #: includes/admin/class-learndash-admin-groups-users-list.php:55 #: includes/admin/class-learndash-admin-menus-tabs.php:702 #: includes/admin/class-learndash-admin-menus-tabs.php:718 #: includes/admin/class-learndash-admin-menus-tabs.php:1401 #: includes/admin/class-learndash-admin-menus-tabs.php:1410 msgid "Group Administration" msgstr "" #: includes/admin/class-learndash-admin-groups-users-list.php:156 msgid "per Page" msgstr "" #: includes/admin/class-learndash-admin-groups-users-list.php:174 #: includes/ld-groups.php:353 #: includes/ld-groups.php:362 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:303 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:393 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:322 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:26 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-email-settings.php:167 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-email-settings.php:224 #: themes/ld30/templates/modules/login-modal.php:300 #: themes/legacy/templates/profile.php:65 msgid "Username" msgstr "" #: includes/admin/class-learndash-admin-groups-users-list.php:175 #: includes/ld-groups.php:352 #: includes/ld-groups.php:361 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:516 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:517 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontToplist.php:15 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionOverall.php:41 #: themes/legacy/templates/profile.php:63 msgid "Name" msgstr "" #: includes/admin/class-learndash-admin-groups-users-list.php:176 #: includes/ld-groups.php:354 #: includes/ld-groups.php:363 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1188 #: includes/settings/settings-fields/class-ld-settings-fields-quiz-custom-fields.php:98 #: themes/ld30/templates/modules/login-modal.php:304 #: themes/legacy/templates/profile.php:66 msgid "Email" msgstr "" #: includes/admin/class-learndash-admin-groups-users-list.php:177 #: includes/admin/class-learndash-admin-groups-users-list.php:192 #: includes/class-ld-translations.php:516 #: includes/ld-assignment-uploads.php:1170 msgid "Actions" msgstr "" #: includes/admin/class-learndash-admin-groups-users-list.php:191 msgid "Group Name" msgstr "" #: includes/admin/class-learndash-admin-groups-users-list.php:205 #: includes/ld-groups.php:342 msgid "Please login as a Group Administrator" msgstr "" #: includes/admin/class-learndash-admin-groups-users-list.php:219 msgid "Email Subject:" msgstr "" #: includes/admin/class-learndash-admin-groups-users-list.php:223 msgid "Email Message:" msgstr "" #: includes/admin/class-learndash-admin-groups-users-list.php:240 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:539 msgid "Send" msgstr "" #: includes/admin/class-learndash-admin-groups-users-list.php:241 #: themes/ld30/templates/shortcodes/profile/search-results.php:8 msgid "Reset" msgstr "" #: includes/admin/class-learndash-admin-groups-users-list.php:242 msgid "Both Email Subject and Message are required and cannot be empty." msgstr "" #: includes/admin/class-learndash-admin-groups-users-list.php:243 msgid "Sending..." msgstr "" #: includes/admin/class-learndash-admin-groups-users-list.php:265 msgid "Search Users" msgstr "" #: includes/admin/class-learndash-admin-groups-users-list.php:267 msgid "Search Groups" msgstr "" #: includes/admin/class-learndash-admin-groups-users-list.php:296 msgid "Update User" msgstr "" #. translators: placeholder: Post Type Plural Name. #: includes/admin/class-learndash-admin-menus-tabs.php:164 msgctxt "placeholder: Post Type Plural Name" msgid "All %s" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:312 msgctxt "Certificates Menu Label" msgid "Certificates" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:324 msgctxt "Assignments Menu Label" msgid "Assignments" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:336 msgctxt "Groups Menu Label" msgid "Groups" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:347 msgctxt "Submitted Essays Menu Label" msgid "Submitted Essays" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:451 msgctxt "Settings Menu Label" msgid "Settings" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:565 msgctxt "Quiz Submitted Essays Tab Label" msgid "Submitted Essays" msgstr "" #. translators: placeholder: Edit Quiz Label. #: includes/admin/class-learndash-admin-menus-tabs.php:609 #: includes/class-ld-lms.php:793 msgctxt "Edit Quiz Label" msgid "Edit %s" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:641 msgctxt "Quiz Statistics Tab Label" msgid "Statistics" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:651 msgctxt "Quiz Leaderboard Tab Label" msgid "Leaderboard" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:666 msgctxt "Reports Menu Label" msgid "Reports" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:677 msgctxt "Transactions Tab Label" msgid "Transactions" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:753 msgctxt "LMS License Tab Label" msgid "LMS License" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:975 #: includes/admin/class-learndash-admin-menus-tabs.php:976 msgid "There was an unexpected error while loading. Please try refreshing the page. If the error continues, contact LearnDash support." msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:979 msgid "Section Heading" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:980 msgid "Section Headings" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:981 msgid "answer" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:982 msgid "answers" msgstr "" #. translators: placeholder: Lesson. #: includes/admin/class-learndash-admin-menus-tabs.php:1005 msgctxt "placeholder: Lesson" msgid "Start by adding a %s." msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1037 msgctxt "Link back to the post type overview" msgid "Back to" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1038 msgctxt "Builder actions dropdown" msgid "Actions" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1039 msgctxt "Builder elements" msgid "Expand All" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1040 msgctxt "Builder elements" msgid "Collapse All" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1041 msgid "An error occurred while submitting your request. Please try again." msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1042 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:615 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:685 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:713 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:740 #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:618 #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:731 msgid "Cancel" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1043 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_AdminToplist.php:72 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionOverall.php:76 #: includes/quiz/ld-quiz-essays.php:862 msgid "Edit" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1044 #: includes/settings/settings-fields/class-ld-settings-fields-quiz-custom-fields.php:137 msgid "Remove" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1045 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:30 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:270 #: includes/settings/settings-sections/class-ld-settings-section-side-submit.php:61 msgid "Save" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1046 #: includes/admin/class-learndash-admin-menus-tabs.php:1325 #: includes/admin/class-learndash-admin-menus-tabs.php:1346 #: includes/admin/class-learndash-admin-menus-tabs.php:1677 #: includes/admin/class-learndash-admin-menus-tabs.php:1711 #: includes/admin/class-learndash-admin-menus-tabs.php:1880 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizOverall.php:90 #: includes/settings/settings-pages/class-ld-settings-page-assignments-options.php:23 #: includes/gutenberg/blocks/ld-certificate/index.js:102 #: includes/gutenberg/blocks/ld-course-complete/index.js:67 #: includes/gutenberg/blocks/ld-course-content/index.js:83 #: includes/gutenberg/blocks/ld-course-expire-status/index.js:99 #: includes/gutenberg/blocks/ld-course-info/index.js:132 #: includes/gutenberg/blocks/ld-course-inprogress/index.js:66 #: includes/gutenberg/blocks/ld-course-list/index.js:206 #: includes/gutenberg/blocks/ld-course-notstarted/index.js:67 #: includes/gutenberg/blocks/ld-course-progress/index.js:89 #: includes/gutenberg/blocks/ld-course-resume/index.js:91 #: includes/gutenberg/blocks/ld-courseinfo/index.js:264 #: includes/gutenberg/blocks/ld-group/index.js:63 #: includes/gutenberg/blocks/ld-lesson-list/index.js:191 #: includes/gutenberg/blocks/ld-payment-buttons/index.js:69 #: includes/gutenberg/blocks/ld-profile/index.js:108 #: includes/gutenberg/blocks/ld-quiz-complete/index.js:67 #: includes/gutenberg/blocks/ld-quiz-list/index.js:195 #: includes/gutenberg/blocks/ld-student/index.js:66 #: includes/gutenberg/blocks/ld-topic-list/index.js:195 #: includes/gutenberg/blocks/ld-user-course-points/index.js:69 #: includes/gutenberg/blocks/ld-user-groups/index.js:68 #: includes/gutenberg/blocks/ld-usermeta/index.js:147 #: includes/gutenberg/blocks/ld-visitor/index.js:63 msgid "Settings" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1047 msgid "Click here to edit the question" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1048 msgid "Message for correct answer - optional" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1049 msgid "Use different message for incorrect answer" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1050 msgid "Currently same message is displayed as above." msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1051 msgid "Message for incorrect answer - optional" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1052 msgid "Solution hint" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1053 #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-quizzes.php:335 #: includes/admin/ld-quiz-builder-helpers.php:111 msgid "points" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1054 msgid "Click here to edit the answer" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1055 msgid "Update Answer" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1056 msgid "Answer is missing" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1057 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:318 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:377 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:383 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:415 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-email-settings.php:179 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-email-settings.php:236 msgid "Allow HTML" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1058 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1803 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1837 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:312 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:106 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:241 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:28 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:121 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:392 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:772 msgid "Correct" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1059 msgctxt "First sort answer correct" msgid "1st" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1060 msgctxt "Second sort answer correct" msgid "2nd" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1061 msgctxt "Third sort answer correct" msgid "3rd" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1062 msgctxt "nth sort answer correct" msgid "th" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1063 msgid "Answer updated" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1064 msgid "Edit answer settings" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1065 msgid "Answer:" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1066 msgid "Click here to edit the matrix" msgstr "" #. translators: placeholders: Question #: includes/admin/class-learndash-admin-menus-tabs.php:1070 msgctxt "placeholder: Question" msgid "New %1$s" msgstr "" #. translators: placeholders: Quiz #: includes/admin/class-learndash-admin-menus-tabs.php:1075 msgctxt "placeholder: Quiz" msgid "New %1$s" msgstr "" #. translators: placeholders: Topic #: includes/admin/class-learndash-admin-menus-tabs.php:1080 msgctxt "placeholder: Topic" msgid "New %1$s" msgstr "" #. translators: placeholders: Lesson #: includes/admin/class-learndash-admin-menus-tabs.php:1085 msgctxt "placeholder: Lesson" msgid "New %1$s" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1088 msgid "New answer" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1089 msgid "New Section Heading" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1091 msgctxt "Title for the new course, lesson, quiz" msgid "Enter a title" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1092 msgctxt "Answer for a question" msgid "Enter an answer" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1093 msgctxt "Please wait while the form is loading" msgid "Please wait..." msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1094 msgctxt "Add lesson, topic, quiz..." msgid "Add" msgstr "" #. translators: placeholders: Question #: includes/admin/class-learndash-admin-menus-tabs.php:1098 msgctxt "placeholder: Question" msgid "Add %1$s" msgstr "" #. translators: placeholders: Question #: includes/admin/class-learndash-admin-menus-tabs.php:1103 msgctxt "placeholder: Questions" msgid "Add %1$s" msgstr "" #. translators: placeholders: Quiz #: includes/admin/class-learndash-admin-menus-tabs.php:1108 msgctxt "placeholder: Quiz" msgid "Add %1$s" msgstr "" #. translators: placeholders: Topic #: includes/admin/class-learndash-admin-menus-tabs.php:1113 msgctxt "placeholder: Topic" msgid "Add %1$s" msgstr "" #. translators: placeholders: Lesson #: includes/admin/class-learndash-admin-menus-tabs.php:1118 msgctxt "placeholder: Lesson" msgid "Add %1$s" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1121 msgid "Add answer" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1122 msgid "Add Section Heading" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1124 msgctxt "Move the current element up in the builder interface" msgid "Move up" msgstr "" #. translators: placeholders: question #: includes/admin/class-learndash-admin-menus-tabs.php:1127 msgctxt "Warning when no question was entered" msgid "The %s is empty." msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1130 msgctxt "Move the current element down in the builder interface" msgid "Move down" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1131 msgctxt "Rename the current element in the builder interface" msgid "Rename" msgstr "" #. translators: placeholders: lessons #: includes/admin/class-learndash-admin-menus-tabs.php:1135 msgctxt "placeholders: lessons" msgid "Search %1$s" msgstr "" #. translators: placeholders: quizzes #: includes/admin/class-learndash-admin-menus-tabs.php:1140 msgctxt "placeholders: quizzes" msgid "Search %1$s" msgstr "" #. translators: placeholders: topics #: includes/admin/class-learndash-admin-menus-tabs.php:1145 msgctxt "placeholders: topics" msgid "Search %1$s" msgstr "" #. translators: placeholders: questions #: includes/admin/class-learndash-admin-menus-tabs.php:1150 msgctxt "placeholders: questions" msgid "Search %1$s" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1154 msgctxt "List of recent lessons, topics, quizzes or questions" msgid "Recent" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1155 msgctxt "Lesson, Topic, Quiz or Question posts" msgid "View all" msgstr "" #. translators: placeholders: Lesson #: includes/admin/class-learndash-admin-menus-tabs.php:1159 msgctxt "placeholders: Lesson" msgid "Start adding your first %1$s" msgstr "" #. translators: placeholders: Quiz #: includes/admin/class-learndash-admin-menus-tabs.php:1164 msgctxt "placeholders: Quiz" msgid "Start adding your first %1$s" msgstr "" #. translators: placeholders: Topic #: includes/admin/class-learndash-admin-menus-tabs.php:1169 msgctxt "placeholders: Topic" msgid "Start adding your first %1$s" msgstr "" #. translators: placeholders: Question #: includes/admin/class-learndash-admin-menus-tabs.php:1174 msgctxt "placeholders: Question" msgid "Start adding your first %1$s" msgstr "" #. translators: placeholders: Lessons #: includes/admin/class-learndash-admin-menus-tabs.php:1181 msgctxt "placeholders: Lessons" msgid "All available %1$s have been added." msgstr "" #. translators: placeholders: Quizzes #: includes/admin/class-learndash-admin-menus-tabs.php:1186 msgctxt "placeholders: Quizzes" msgid "All available %1$s have been added." msgstr "" #. translators: placeholders: Topics #: includes/admin/class-learndash-admin-menus-tabs.php:1191 msgctxt "placeholders: Topics" msgid "All available %1$s have been added." msgstr "" #. translators: placeholders: Questions #: includes/admin/class-learndash-admin-menus-tabs.php:1196 msgctxt "placeholders: Questions" msgid "All available %1$s have been added." msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1200 msgctxt "Lesson, Topic, Quiz or Question" msgid "Start adding your first" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1201 msgctxt "Builder - Refresh list of Lessons, Topics, Quizzes or Questions" msgid "Refresh" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1202 msgctxt "Builder - Load more Lessons, Topics, Quizzes or Questions" msgid "Load More" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1203 msgctxt "Builder - Add selected Lessons, Topics, Quizzes or Questions" msgid "Add Selected" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1204 msgctxt "Undo action in the builder" msgid "Undo" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1205 msgctxt "Matrix answer Criteroion" msgid "Criterion" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1206 msgctxt "Sort matrix answer element" msgid "Sort element" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1207 msgctxt "Question settings. Placeholder in JavaScript" msgid "Settings" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1208 msgctxt "Select an option" msgid "Select" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1209 msgctxt "No matching Lesson, Topic, Quiz or Question found" msgid "Nothing matches your search" msgstr "" #. translators: placeholders: Lessons #: includes/admin/class-learndash-admin-menus-tabs.php:1212 msgctxt "placeholder: Lessons" msgid "Drop %1$s here" msgstr "" #. translators: placeholders: Question #: includes/admin/class-learndash-admin-menus-tabs.php:1217 msgctxt "placeholder: Question" msgid "Drop %1$s here" msgstr "" #. translators: placeholders: Quizzes #: includes/admin/class-learndash-admin-menus-tabs.php:1222 msgctxt "placeholder: Quizzes" msgid "Drop %1$s here" msgstr "" #. translators: placeholders: %1$s: Topics, %2$s: Quizzes #: includes/admin/class-learndash-admin-menus-tabs.php:1227 msgctxt "placeholder: %1$s: Topics, %2$s: Quizzes" msgid "Drop %1$s or %2$s here" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1231 msgctxt "singular - Amount of steps in a course or quiz" msgid "step" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1232 msgctxt "plural - Amount of steps in a course or quiz" msgid "steps" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1233 msgctxt "Amount of steps in this course or quiz" msgid "in this" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1234 msgctxt "Builder - Final quiz. Placeholder in JavaScript" msgid "Final" msgstr "" #. translators: placeholders: %1$s: Quiz, %2$s: Questions #: includes/admin/class-learndash-admin-menus-tabs.php:1237 msgctxt "This quiz has no questions." msgid "This %1$s has no %2$s yet" msgstr "" #. translators: placeholders: question #: includes/admin/class-learndash-admin-menus-tabs.php:1243 msgctxt "Warning when no question was entered" msgid "The %s is empty, click here to edit it." msgstr "" #. translators: placeholders: Questions #: includes/admin/class-learndash-admin-menus-tabs.php:1249 msgctxt "Manage Questions in builder" msgid "Manage %1$s in builder" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1252 msgctxt "Total points" msgid "TOTAL:" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1253 msgctxt "Displayed when the post type, e.g. course, has no content" msgid "has no content yet." msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1254 msgctxt "Content type, e.g. lesson" msgid "Add a new" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1255 msgctxt "Content type, e.g. lesson" msgid "or add an existing one from the sidebar" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1256 msgctxt "Type of essay answer" msgid "Answer format" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1257 msgctxt "Submit essay answer in a text box" msgid "Text entry" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1258 msgctxt "Submit essay answer as an upload" msgid "File upload" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1259 msgctxt "What grading options should be used after essay submission" msgid "What should happen on quiz submission?" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1260 msgctxt "Essay answer grading option" msgid "Not Graded, No Points Awarded" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1261 msgctxt "Essay answer grading option" msgid "Not Graded, Full Points Awarded" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1262 msgctxt "Essay answer grading option" msgid "Graded, Full Points Awarded" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1263 msgctxt "Essay answer grading option has not been set" msgid "Not set" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1317 #: includes/admin/class-learndash-admin-menus-tabs.php:1664 #: includes/admin/class-learndash-admin-menus-tabs.php:1700 #: includes/admin/classes-posts-listings/class-learndash-admin-courses-listing.php:69 #: includes/admin/classes-posts-listings/class-learndash-admin-quizzes-listing.php:122 #: includes/settings/settings-pages/class-ld-settings-page-courses-builder-single.php:149 #: includes/settings/settings-pages/class-ld-settings-page-quizzes-builder-single.php:179 msgid "Builder" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1338 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:40 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:67 #: includes/settings/settings-pages/class-ld-settings-page-overview.php:54 msgid "Overview" msgstr "" #. translators: placeholder: Essays. #: includes/admin/class-learndash-admin-menus-tabs.php:1353 msgctxt "placeholder: Essays" msgid "%s" msgstr "" #. translators: placeholder: Quizzes. #: includes/admin/class-learndash-admin-menus-tabs.php:1359 #: includes/settings/settings-pages/class-ld-settings-page-overview.php:1027 #: includes/settings/settings-sections/class-ld-settings-section-permalinks.php:159 msgctxt "placeholder: Quizzes" msgid "%s" msgstr "" #. translators: placeholder: Post Type Plural Name. #: includes/admin/class-learndash-admin-menus-tabs.php:1366 msgctxt "placeholder: Post Type Plural Name" msgid "%s" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1373 msgctxt "Quiz Import/Export Tab Label" msgid "Import/Export" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1466 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1944 #: themes/ld30/templates/modules/messages/lesson-progression.php:11 msgid "Back" msgstr "" #. translators: placeholder: Questions. #: includes/admin/class-learndash-admin-menus-tabs.php:1542 msgctxt "placeholder: Questions" msgid "%s" msgstr "" #. translators: placeholders: Quiz, Questions. #: includes/admin/class-learndash-admin-menus-tabs.php:1577 #: includes/admin/class-learndash-admin-menus-tabs.php:1763 msgctxt "placeholders: Quiz, Questions" msgid "Reprocess %1$s %2$s" msgstr "" #. translators: placeholder: Quiz. #: includes/admin/class-learndash-admin-menus-tabs.php:1595 #: includes/admin/class-learndash-admin-menus-tabs.php:1780 #: includes/admin/classes-posts-listings/class-learndash-admin-quizzes-listing.php:229 msgctxt "placeholder: Quiz" msgid "Export %s" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1615 #: includes/admin/class-learndash-admin-menus-tabs.php:1644 #: includes/admin/class-learndash-admin-menus-tabs.php:1800 #: includes/admin/classes-posts-listings/class-learndash-admin-quizzes-listing.php:188 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:162 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:167 #: themes/ld30/templates/shortcodes/profile/quizzes.php:21 #: themes/legacy/templates/profile.php:142 #: themes/legacy/templates/quiz_progress_rows.php:99 msgid "Statistics" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1626 #: includes/admin/class-learndash-admin-menus-tabs.php:1652 #: includes/admin/class-learndash-admin-menus-tabs.php:1811 #: includes/admin/classes-posts-listings/class-learndash-admin-quizzes-listing.php:214 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontToplist.php:8 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:856 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:479 msgid "Leaderboard" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1683 #: includes/admin/ld-admin.php:1924 #: includes/ld-groups.php:141 #: includes/ld-groups.php:147 #: includes/ld-groups.php:155 msgid "Groups" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1726 #: includes/admin/classes-posts-listings/class-learndash-admin-quizzes-listing.php:162 #: includes/class-ld-custom-label.php:63 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:848 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Import.php:73 #: includes/settings/settings-sections/class-ld-settings-section-custom-labels.php:147 msgid "Questions" msgstr "" #: includes/admin/class-learndash-admin-menus-tabs.php:1749 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:712 msgid "Advanced Settings" msgstr "" #: includes/admin/class-learndash-admin-pointers.php:156 msgid "First time using LearnDash?" msgstr "" #. translators: placeholder: Link to Bootcamp page #: includes/admin/class-learndash-admin-pointers.php:159 msgctxt "placeholder: Link to Bootcamp page" msgid "Go to the LearnDash %s" msgstr "" #. translators: placeholder: Link to Bootcamp page #: includes/admin/class-learndash-admin-pointers.php:160 msgid "mini-Bootcamp" msgstr "" #. translators: placeholders: Post Type singular label. #: includes/admin/class-learndash-admin-posts-edit.php:263 msgctxt "placeholders: Post Type singular label" msgid "Add %s title" msgstr "" #. translators: placeholders: Post Type singular label. #: includes/admin/class-learndash-admin-posts-edit.php:285 msgctxt "placeholders: Post Type singular label" msgid "Add %s content." msgstr "" #: includes/admin/class-learndash-admin-posts-edit.php:366 msgid "Associated Content" msgstr "" #. translators: placeholders: Quiz, Questions. #: includes/admin/class-learndash-admin-posts-edit.php:384 msgctxt "placeholders: Quiz, Questions" msgid "%1$s %2$s %3$s" msgstr "" #. translators: placeholder: Taxonomy singular name. #: includes/admin/class-learndash-admin-posts-listing.php:220 msgctxt "placeholder: Taxonomy singular name." msgid "Filter by %s" msgstr "" #: includes/admin/class-learndash-admin-posts-listing.php:279 #: includes/admin/ld-admin.php:674 msgid "Show more details" msgstr "" #: includes/admin/class-learndash-admin-settings-data-reports.php:14 msgctxt "Learndash Report Menu Label" msgid "Reports" msgstr "" #: includes/admin/class-learndash-admin-settings-data-reports.php:159 #: includes/admin/class-learndash-admin-settings-data-reports.php:165 #: includes/admin/ld-admin.php:278 msgid "User Reports" msgstr "" #: includes/admin/class-learndash-admin-settings-data-reports.php:164 msgid "Click to toggle" msgstr "" #. translators: placeholder: Course. #: includes/admin/class-learndash-admin-user-profile-edit.php:164 msgctxt "Course Info Label" msgid "%s Info" msgstr "" #. translators: placeholder: Course. #: includes/admin/class-learndash-admin-user-profile-edit.php:207 msgctxt "Permanently Delete Course Data Label" msgid "Permanently Delete %s Data" msgstr "" #: includes/admin/class-learndash-admin-user-profile-edit.php:211 msgid "Check and click update profile to permanently delete user's LearnDash course data. This cannot be undone." msgstr "" #: includes/admin/class-learndash-admin-user-profile-edit.php:238 msgid "Remove the Quiz lock(s) for this user." msgstr "" #. translators: placeholder: Courses. #: includes/admin/class-learndash-admin-user-profile-edit.php:402 msgctxt "User Enrolled Courses" msgid "User Enrolled %s" msgstr "" #: includes/admin/class-learndash-admin-user-profile-edit.php:407 msgid "Administrators are automatically enrolled in all Courses." msgstr "" #: includes/admin/class-learndash-admin-user-profile-edit.php:497 #: includes/class-ld-cpt-instance.php:93 #: includes/class-ld-lms.php:1387 #: includes/class-ld-lms.php:1855 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:40 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizOverall.php:89 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:310 #: includes/settings/settings-sections/class-ld-settings-section-courses-management-display.php:342 msgid "Title" msgstr "" #: includes/admin/class-learndash-admin-user-profile-edit.php:498 #: includes/admin/ld-admin.php:425 #: includes/ld-assignment-uploads.php:1117 #: includes/quiz/ld-quiz-essays.php:294 #: themes/ld30/templates/shortcodes/profile/assignments.php:15 #: themes/ld30/templates/shortcodes/profile/quiz-row.php:143 #: themes/legacy/templates/course.php:154 #: themes/legacy/templates/course.php:282 #: themes/legacy/templates/course_content_shortcode.php:59 #: themes/legacy/templates/course_content_shortcode.php:144 #: themes/legacy/templates/lesson.php:124 #: themes/legacy/templates/profile.php:77 #: themes/legacy/templates/quiz_progress_rows.php:147 #: themes/legacy/templates/topic.php:130 msgid "Status" msgstr "" #: includes/admin/class-learndash-admin-user-profile-edit.php:499 msgid "Steps" msgstr "" #: includes/admin/class-learndash-admin-user-profile-edit.php:500 msgid "Started / Completed" msgstr "" #: includes/admin/class-learndash-admin-user-profile-edit.php:532 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:544 #: themes/legacy/templates/quiz_progress_rows.php:152 msgid "view" msgstr "" #. translators: placeholder: Started Date. #: includes/admin/class-learndash-admin-user-profile-edit.php:582 msgctxt "placeholder: Started date" msgid "Started: %s" msgstr "" #. translators: placeholder: Started Group Date. #: includes/admin/class-learndash-admin-user-profile-edit.php:593 msgctxt "placeholder: Started Group date" msgid "Started: %s (Group Access)" msgstr "" #: includes/admin/class-learndash-admin-user-profile-edit.php:607 #: themes/legacy/templates/course_progress_rows.php:59 msgid "(access expired)" msgstr "" #. translators: placeholder: Course Expires Date. #: includes/admin/class-learndash-admin-user-profile-edit.php:616 msgctxt "Course Expires on date" msgid "Expires: %s" msgstr "" #. translators: placeholder: Course Completed Data. #: includes/admin/class-learndash-admin-user-profile-edit.php:630 msgctxt "placeholder: Completed date" msgid "Completed: %s" msgstr "" #. translators: placeholder: Lesson. #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:66 msgctxt "placeholder: Lesson" msgid "Click the '+' to add a new %s" msgstr "" #. translators: placeholder: Topic. #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:73 msgctxt "placeholder: Topic" msgid "Click the '+' to add a new %s" msgstr "" #. translators: placeholder: Quiz. #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:80 msgctxt "placeholder: Quiz" msgid "Click the '+' to add a new %s" msgstr "" #. translators: placeholder: Lessons. #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:88 msgctxt "placeholder: Lessons" msgid "Drop %s Here" msgstr "" #. translators: placeholder: Lesson, Topics. #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:95 msgctxt "placeholder: Lesson, Topics" msgid "Drop %1$s %2$s Here" msgstr "" #. translators: placeholder: Quizzes. #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:103 msgctxt "placeholder: Quizzes" msgid "Drop Global %s Here" msgstr "" #. translators: placeholder: Lesson, Quizzes. #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:111 msgctxt "placeholder: Lesson, Quizzes" msgid "Drop %1$s %2$s Here" msgstr "" #. translators: placeholder: Topic, Quizzes. #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:118 msgctxt "placeholder: Topic, Quizzes" msgid "Drop %1$s %2$s Here" msgstr "" #. translators: placeholder: number of steps. #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:154 msgctxt "placeholder: number of steps" msgid "Total Steps: %s" msgstr "" #. translators: placeholder: will contain post type label. #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:562 #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:584 msgctxt "placeholder: will contain post type label" msgid "Edit %s Settings (new window)" msgstr "" #. translators: placeholder: will contain post type label. #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:568 msgctxt "placeholder: will contain post type label" msgid "View %s (new window)" msgstr "" #. translators: placeholder: will contain post type label. #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:576 #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:592 msgctxt "placeholder: will contain post type label" msgid "Move %s to Trash" msgstr "" #. translators: placeholders: will contain post type label, Course. #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:582 msgctxt "placeholders: will contain post type label, Course" msgid "Remove %1$s from %2$s" msgstr "" #. translators: placeholder: will contain post type label. #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:607 #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:609 msgctxt "placeholder: will contain post type label" msgid "Move %s" msgstr "" #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:613 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:683 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:711 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:738 #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:616 #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:729 msgid "Edit Title" msgstr "" #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:614 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:684 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:712 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:739 #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:617 #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:730 msgid "Ok" msgstr "" #. translators: placeholder: Lesson. #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:667 msgctxt "placeholder: Lesson" msgid "Move %s" msgstr "" #. translators: placeholder: Lesson. #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:671 msgctxt "placeholder: Lesson" msgid "Edit %s Settings (new window)" msgstr "" #. translators: placeholder: Lesson. #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:675 msgctxt "placeholder: Lesson" msgid "View %s (new window)" msgstr "" #. translators: placeholders: Lesson, Course. #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:679 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:707 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:734 msgctxt "placeholders: Lesson, Course" msgid "Remove %1$s from %2$s" msgstr "" #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:697 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:724 #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:717 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:337 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:392 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:434 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionOverall.php:84 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1209 #: includes/settings/settings-fields/class-ld-settings-fields-quiz-custom-fields.php:54 msgid "Move" msgstr "" #. translators: placeholder: Topic. #. translators: placeholder: placeholder: Topic. #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:701 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:728 #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:721 msgctxt "placeholder: Topic" msgid "Edit %s Settings (new window)" msgstr "" #. translators: placeholder: Topic. #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:704 msgctxt "placeholder: Topic" msgid "View %s (new window)" msgstr "" #. translators: placeholder: placeholder: Quiz. #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:731 msgctxt "placeholder: Quiz" msgid "View %s (new window)" msgstr "" #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:1028 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:1063 #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:953 #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:989 msgid "#1: Invalid post data" msgstr "" #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:1031 #: includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php:1066 #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:956 #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:992 msgid "#2: Invalid post data" msgstr "" #. translators: placeholder: Question. #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:68 msgctxt "placeholder: Question" msgid "Click the '+' to add a new %s" msgstr "" #. translators: placeholder: Questions. #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:75 msgctxt "placeholder: Questions" msgid "Drop %s Here" msgstr "" #. translators: placeholder: Questions label, number of questions. #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:114 msgctxt "placeholder: Questions label, number of questions" msgid "Total %1$s: %2$s" msgstr "" #. translators: placeholders: post type labels like Question, second Quiz. #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:141 msgctxt "placeholders: post type labels like Question, second Quiz" msgid "Are you sure you want to remove this %1$s from the %2$s?" msgstr "" #. translators: placeholders: post type labels like Question. #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:147 msgctxt "placeholders: post type labels like Question" msgid "Are you sure you want to move this %s to Trash?" msgstr "" #. translators: placeholder: Question Type. #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:570 #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:702 msgctxt "placeholder: Question Type" msgid "%s" msgstr "" #. translators: placeholder: Question Points. #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:580 #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:712 msgctxt "placeholder: Question Points" msgid "(%dpt)" msgid_plural "(%dpts)" msgstr[0] "" msgstr[1] "" #. translators: placeholders: Question, Quiz. #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:598 #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:724 msgctxt "placeholders: Question, Quiz" msgid "Remove %1$s from %2$s" msgstr "" #. translators: placeholder: Total of question points. #: includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php:645 msgctxt "placeholder: Total of question points" msgid "Total Points: %s" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-courses.php:46 #: includes/admin/ld-admin.php:283 msgctxt "Export User Course Data Label" msgid "Export User %s Data" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-courses.php:292 #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-quizzes.php:270 msgctxt "placeholders: result count, total count" msgid "%1$d of %2$s Users" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-courses.php:304 #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-quizzes.php:282 msgid "user_id" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-courses.php:309 #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-quizzes.php:287 msgid "name" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-courses.php:315 #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-quizzes.php:293 msgid "email" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-courses.php:321 #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-quizzes.php:366 msgid "course_id" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-courses.php:326 #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-quizzes.php:372 msgid "course_title" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-courses.php:332 msgid "steps_completed" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-courses.php:337 msgid "steps_total" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-courses.php:342 msgid "course_completed" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-courses.php:347 msgid "course_completed_on" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-courses.php:387 #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-quizzes.php:409 msgid "ERROR: Cannot create working folder. Check that the parent folder is writable" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-courses.php:488 msgctxt "Course Complete Report label: NO" msgid "NO" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-courses.php:492 #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-courses.php:495 msgctxt "Course Complete Report label: YES" msgid "YES" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-quizzes.php:46 msgctxt "Export User Quiz Data Label" msgid "Export User %s Data" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-quizzes.php:299 msgid "quiz_id" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-quizzes.php:304 msgid "quiz_title" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-quizzes.php:318 msgid "score" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-quizzes.php:323 msgid "total" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-quizzes.php:328 msgid "date" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-quizzes.php:341 msgid "points_total" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-quizzes.php:347 msgid "percentage" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-quizzes.php:353 msgid "time_spent" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-quizzes.php:359 msgid "passed" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-quizzes.php:360 msgctxt "Quiz Passed Report label: NO" msgid "NO" msgstr "" #: includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-quizzes.php:563 msgctxt "Quiz Passed Report label: YES" msgid "YES" msgstr "" #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-course-access-list-convert.php:36 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-course-access-list.php:36 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-quiz-questions.php:35 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-rename_wpproquiz-tables.php:122 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-user-meta-courses.php:35 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-user-meta-quizzes.php:36 msgid "Upgrade" msgstr "" #. translators: placeholder: Course. #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-course-access-list-convert.php:45 msgctxt "placeholder: Course" msgid "Convert %s Access Lists" msgstr "" #. translators: placeholder: course. #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-course-access-list-convert.php:53 msgctxt "placeholder: course" msgid "This convert the %s access list setting to user meta where it can be managed more efficiently. (Optional)" msgstr "" #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-course-access-list-convert.php:79 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-course-access-list.php:79 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-quiz-questions.php:97 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-user-meta-courses.php:81 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-user-meta-quizzes.php:82 msgid "Continue previous upgrade processing?" msgstr "" #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-course-access-list-convert.php:264 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-course-access-list.php:266 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-quiz-questions.php:448 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-rename_wpproquiz-tables.php:497 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-user-meta-courses.php:268 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-user-meta-quizzes.php:269 msgid "Complete" msgstr "" #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-course-access-list-convert.php:268 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-course-access-list.php:270 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-quiz-questions.php:452 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-rename_wpproquiz-tables.php:501 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-user-meta-courses.php:272 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-user-meta-quizzes.php:273 #: includes/course/ld-course-list-shortcode.php:1530 #: includes/course/ld-course-progress.php:1426 #: includes/settings/shortcodes-sections/ld_course_list.php:81 #: sfwd_lms.php:553 #: includes/gutenberg/blocks/ld-course-list/index.js:288 msgid "In Progress" msgstr "" #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-course-access-list-convert.php:271 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-course-access-list.php:273 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-quiz-questions.php:455 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-rename_wpproquiz-tables.php:504 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-user-meta-courses.php:275 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-user-meta-quizzes.php:276 msgid "Incomplete" msgstr "" #. translators: placeholders: result count, total count. #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-course-access-list-convert.php:278 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-course-access-list.php:280 msgctxt "placeholders: progress status, result count, total count" msgid "%1$s: %2$d of %3$d Courses" msgstr "" #. translators: placeholder: Course. #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-course-access-list.php:45 msgctxt "placeholder: Course" msgid "Upgrade %s Meta" msgstr "" #. translators: placeholder: course. #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-course-access-list.php:53 msgctxt "placeholder: course" msgid "This upgrade will upgrade the %s meta elements. (Optional)" msgstr "" #. translators: placeholders: Quiz, Questions. #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-quiz-questions.php:44 msgctxt "placeholders: Quiz, Questions" msgid "Upgrade %1$s %2$s" msgstr "" #. translators: placeholders: Quiz questions, Quiz. #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-quiz-questions.php:54 msgctxt "placeholders: Quiz questions, Quiz" msgid "This upgrade will convert the %1$s %2$s to WordPress custom post type. This is required before enabling %3$s Builder. (Optional)" msgstr "" #. translators: placeholders: Quiz. #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-quiz-questions.php:126 msgctxt "placeholders: Quiz" msgid "Invalid %s ID" msgstr "" #. translators: placeholders: Questions, Quiz, Quiz Title. #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-quiz-questions.php:147 msgctxt "placeholders: Questions, Quiz, Quiz Title" msgid "Reprocess %1$s for %2$s: \"%3$s\"" msgstr "" #. translators: placeholders: Questions. #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-quiz-questions.php:162 msgctxt "placeholders: Questions" msgid "Process Mismatched %s only?" msgstr "" #. translators: placeholders: result count, total count, Questions label. #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-quiz-questions.php:462 msgctxt "placeholders: progress status, result count, total count, Questions label" msgid "%1$s: %2$d of %3$d %4$s" msgstr "" #. translators: placeholder: Number of skipper Questions. #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-quiz-questions.php:474 msgctxt "placeholder: Number of skipper Questions" msgid "ProQuiz Questions Skipped %d" msgstr "" #. translators: placeholder: ProQuiz Question ID. #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-quiz-questions.php:509 msgctxt "placeholder: ProQuiz Question ID" msgid "[%d] Empty Question ProID given." msgstr "" #. translators: placeholder: ProQuiz Question ID. #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-quiz-questions.php:520 msgctxt "placeholder: ProQuiz Question ID" msgid "ProQuestion ID [%d] Model not found." msgstr "" #. translators: placeholder: ProQuiz Question ID, ProQuiz Quiz ID. #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-quiz-questions.php:532 msgctxt "placeholder: ProQuiz Question ID, ProQuiz Quiz ID" msgid "ProQuestion ID [%1$d] ProQuiz ID empty [%2$d]." msgstr "" #. translators: placeholder: ProQuiz Question ID, ProQuiz Quiz ID. #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-quiz-questions.php:544 msgctxt "placeholder: ProQuiz Question ID, ProQuiz Quiz ID" msgid "ProQuestion ID [%1$d] ProQuiz ID Model not found [%2$d]." msgstr "" #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-rename_wpproquiz-tables.php:127 msgid "Reload" msgstr "" #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-rename_wpproquiz-tables.php:134 msgid "Rename WPProQuiz DB Tables" msgstr "" #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-rename_wpproquiz-tables.php:140 msgid "This upgrade will rename the existing WPProQuiz database tables to a new name inline with LearnDash standards.
It is recommended you set your site to maintenance mode before performing this upgrade." msgstr "" #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-rename_wpproquiz-tables.php:149 msgctxt "placeholders: default prefix, example table name" msgid "%1$s - Legacy ProQuiz table prefix. Ex. %2$s" msgstr "" #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-rename_wpproquiz-tables.php:155 msgctxt "placeholders: learndash prefix, example table name" msgid "%1$s - LearnDash ProQuiz table prefix. Ex. %2$s" msgstr "" #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-rename_wpproquiz-tables.php:175 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-rename_wpproquiz-tables.php:215 msgid "Source Tables" msgstr "" #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-rename_wpproquiz-tables.php:177 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-rename_wpproquiz-tables.php:217 msgid "Destination Tables" msgstr "" #. translators: placeholders: result count, total count. #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-rename_wpproquiz-tables.php:511 msgctxt "placeholders: progress status, result count, total count" msgid "%1$s: %2$d of %3$d ProQuiz Table" msgstr "" #. translators: placeholder: Course. #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-user-meta-courses.php:44 msgctxt "placeholder: Course" msgid "Upgrade User %s Data" msgstr "" #. translators: placeholder: Course, course. #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-user-meta-courses.php:53 msgctxt "placeholder: course" msgid "This upgrade will sync your existing user data for %s into a new database table for better reporting. (Required)" msgstr "" #. translators: placeholders: result count, total count. #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-user-meta-courses.php:282 #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-user-meta-quizzes.php:283 msgctxt "placeholders: progress status, result count, total count" msgid "%1$s: %2$d of %3$d Users" msgstr "" #. translators: placeholder: Quiz. #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-user-meta-quizzes.php:45 msgctxt "placeholder: Quiz" msgid "Upgrade User %s Data" msgstr "" #. translators: placeholder: quiz. #: includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-user-meta-quizzes.php:54 msgctxt "placeholder: quiz" msgid "This upgrade will sync your existing user data for %s into a new database table for better reporting. (Required)" msgstr "" #. translators: placeholder: Course. #: includes/admin/classes-posts-edits/class-learndash-admin-course-edit.php:103 msgctxt "placeholder: Course" msgid "LearnDash %s Builder" msgstr "" #. translators: placeholder: Course. #: includes/admin/classes-posts-edits/class-learndash-admin-course-edit.php:120 msgctxt "LearnDash Course Groups" msgid "LearnDash %s Groups" msgstr "" #. translators: placeholders: Question. #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:223 msgctxt "placeholders: Question" msgid "%s Category" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:225 #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:261 #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:270 #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:279 #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:288 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:40 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:80 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:125 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:142 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:154 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1231 msgid "(optional)" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:234 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:173 msgid "Answer type" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:243 #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:465 #: includes/admin/classes-posts-listings/class-learndash-admin-questions-listing.php:36 #: includes/admin/ld-admin.php:426 #: includes/ld-assignment-uploads.php:1139 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_AdminToplist.php:59 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1813 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1866 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontToplist.php:17 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:49 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:56 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:324 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:362 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:421 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionOverall.php:44 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:105 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:240 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:30 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:120 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:771 #: includes/quiz/ld-quiz-essays.php:295 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:508 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:503 #: includes/settings/shortcodes-sections/quizinfo.php:32 #: themes/ld30/templates/shortcodes/profile.php:110 #: themes/ld30/templates/shortcodes/profile/quiz-row.php:147 #: themes/legacy/templates/quiz_progress_rows.php:147 msgid "Points" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:243 #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:252 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:49 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:110 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:215 msgid "(required)" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:252 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:215 msgid "Answers" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:261 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:535 msgid "Single choice options" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:270 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:125 msgid "Message with the correct answer" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:279 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:142 msgid "Message with the incorrect answer" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:288 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1913 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1958 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:154 msgid "Hint" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:297 msgid "Template" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:387 msgid "Answer Type" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:419 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:83 msgid "You can assign classify category for a question. Categories are e.g. visible in statistics function." msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:422 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:86 msgid "You can manage categories in global settings." msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:426 #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:436 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:90 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:100 msgid "Create new category" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:427 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Statistics.php:58 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Statistics.php:703 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:91 msgid "No category" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:438 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:102 msgid "Create" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:462 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:53 msgid "Points for this question (Standard is 1 point)" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:468 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:59 msgid "This points will be rewarded, only if the user closes the question correctly." msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:474 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:65 msgid "Different points for each answer" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:477 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:68 msgid "If you enable this option, you can enter different points for every answer." msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:483 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:74 msgid "Show reached points in the correct- and incorrect message?" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:507 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:128 msgid "This text will be visible if answered correctly. It can be used as explanation for complex questions. The message \"Right\" or \"Wrong\" is always displayed automatically." msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:511 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:132 msgid "Same text for correct- and incorrect-message?" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:537 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:145 msgid "This text will be visible if answered incorrectly. It can be used as explanation for complex questions. The message \"Right\" or \"Wrong\" is always displayed automatically." msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:559 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:157 msgid "Here you can enter solution hint." msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:563 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:161 msgid "Activate hint for this question?" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:582 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:538 msgid "If \"Different points for each answer\" is activated, you can activate a special mode.
This changes the calculation of the points" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:586 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:542 msgid "Different points - modus 2 activate" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:590 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:546 msgid "Disables the distinction between correct and incorrect." msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:594 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:550 msgid "Disable correct and incorrect" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:598 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:554 msgid "Explanation of points calculation" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:628 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:222 msgid "Please sort the answers in right order with the \"Move\" - Button. The answers will be displayed randomly." msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:633 #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:639 #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:661 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:227 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:233 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:255 msgid "Add new answer" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:643 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:237 msgid "In this mode, Sort Elements must be assigned to their corresponding Criterion." msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:646 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:240 msgid "Each Sort Element must be unique, and only one-to-one associations are supported." msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:650 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:244 msgid "Percentage width of criteria table column:" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:655 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:249 msgid "Allows adjustment of the left column's width, and the right column will auto-fill the rest of the available space. Increase this to allow accommodate longer criterion text. Defaults to 20%." msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:697 #: includes/admin/classes-posts-edits/class-learndash-admin-quiz-edit.php:515 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:538 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:693 msgid "Use Template" msgstr "" #. translators: Question Title. #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:706 msgctxt "placeholder: Question Title" msgid "Revert: %s" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:710 #: includes/admin/classes-posts-edits/class-learndash-admin-quiz-edit.php:528 #: includes/settings/settings-fields/class-ld-settings-fields-quiz-templates-load.php:107 msgid "Select a Template to load" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:718 #: includes/admin/classes-posts-edits/class-learndash-admin-quiz-edit.php:537 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:33 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:549 #: includes/settings/settings-fields/class-ld-settings-fields-quiz-templates-load.php:130 msgid "load template" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:723 #: includes/admin/classes-posts-edits/class-learndash-admin-quiz-edit.php:542 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:554 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:702 msgid "Save as Template" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:727 #: includes/admin/classes-posts-edits/class-learndash-admin-quiz-edit.php:546 #: includes/settings/settings-fields/class-ld-settings-fields-quiz-templates-save.php:86 msgid "Select a templates to save or new" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:728 #: includes/admin/classes-posts-edits/class-learndash-admin-quiz-edit.php:547 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:275 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:559 #: includes/settings/settings-fields/class-ld-settings-fields-quiz-templates-save.php:88 msgid "Create new template" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:735 #: includes/admin/classes-posts-edits/class-learndash-admin-quiz-edit.php:554 #: includes/settings/settings-fields/class-ld-settings-fields-quiz-templates-save.php:98 msgid "new template name" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:762 #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:766 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:574 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:579 msgid "\"Different points for each answer\" enabled" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:763 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:576 msgid "\"Different points - mode 2\" disable" msgstr "" #: includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php:767 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:581 msgid "\"Different points - mode 2\" enabled" msgstr "" #. translators: placeholder: Quiz. #: includes/admin/classes-posts-edits/class-learndash-admin-quiz-edit.php:223 msgctxt "placeholder: Quiz" msgid "LearnDash %s Builder" msgstr "" #. translators: placeholder: Quiz. #: includes/admin/classes-posts-edits/class-learndash-admin-quiz-edit.php:237 #: includes/admin/classes-posts-edits/class-learndash-admin-quiz-edit.php:309 msgctxt "placeholder: Quiz" msgid "LearnDash %s Advanced Settings" msgstr "" #. translators: placeholder: Quiz. #: includes/admin/classes-posts-edits/class-learndash-admin-quiz-edit.php:325 msgctxt "placeholder: Quiz" msgid "LearnDash %s Question Settings" msgstr "" #. translators: placeholder: Quiz. #: includes/admin/classes-posts-edits/class-learndash-admin-quiz-edit.php:341 msgctxt "placeholder: Quiz" msgid "LearnDash %s Result Settings" msgstr "" #. translators: placeholder: Quiz. #: includes/admin/classes-posts-edits/class-learndash-admin-quiz-edit.php:357 msgctxt "placeholder: Quiz" msgid "LearnDash %s Mode Settings" msgstr "" #. translators: placeholder: Quiz. #: includes/admin/classes-posts-edits/class-learndash-admin-quiz-edit.php:373 msgctxt "placeholder: Quiz" msgid "LearnDash %s Result Text Settings" msgstr "" #. translators: placeholder: Quiz. #: includes/admin/classes-posts-edits/class-learndash-admin-quiz-edit.php:389 msgctxt "placeholder: Quiz" msgid "LearnDash %s Template Settings" msgstr "" #. translators: placeholder: Quiz. #: includes/admin/classes-posts-edits/class-learndash-admin-quiz-edit.php:405 msgctxt "placeholder: Quiz" msgid "LearnDash %s Leaderboard Settings" msgstr "" #. translators: placeholder: Quiz. #: includes/admin/classes-posts-edits/class-learndash-admin-quiz-edit.php:421 msgctxt "placeholder: Quiz" msgid "LearnDash %s Custom Fields Settings" msgstr "" #. translators: Quiz Title. #: includes/admin/classes-posts-edits/class-learndash-admin-quiz-edit.php:524 #: includes/settings/settings-fields/class-ld-settings-fields-quiz-templates-load.php:100 msgctxt "placeholder: Quiz Title" msgid "Revert: %s" msgstr "" #. translators: placeholder: Course. #: includes/admin/classes-posts-listings/class-learndash-admin-courses-listing.php:56 #: includes/settings/settings-pages/class-ld-settings-page-courses-builder-single.php:136 msgctxt "placeholder: Course" msgid "Use %s Builder" msgstr "" #. translators: placeholder: Courses. #: includes/admin/classes-posts-listings/class-learndash-admin-lessons-listing.php:46 #: includes/admin/classes-posts-listings/class-learndash-admin-quizzes-listing.php:48 #: includes/admin/classes-posts-listings/class-learndash-admin-topics-listing.php:46 msgctxt "placeholder: Courses" msgid "Show All %s" msgstr "" #: includes/admin/classes-posts-listings/class-learndash-admin-questions-listing.php:35 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_AdminToplist.php:38 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_AdminToplist.php:57 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionOverall.php:42 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1161 #: includes/settings/settings-fields/class-ld-settings-fields-quiz-custom-fields.php:57 msgid "Type" msgstr "" #. translators: placeholder: Quiz. #: includes/admin/classes-posts-listings/class-learndash-admin-questions-listing.php:39 msgctxt "placeholder: Quiz" msgid "Assigned %s" msgstr "" #. translators: placeholder: Question. #: includes/admin/classes-posts-listings/class-learndash-admin-questions-listing.php:51 #: includes/class-ld-lms.php:1227 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:635 msgctxt "placeholder: Question" msgid "%s Category" msgstr "" #. translators: placeholder: Quizzes. #: includes/admin/classes-posts-listings/class-learndash-admin-questions-listing.php:68 msgctxt "placeholder: Quizzes" msgid "Show All %s" msgstr "" #. translators: placeholder: Quiz. #: includes/admin/classes-posts-listings/class-learndash-admin-questions-listing.php:74 msgctxt "placeholder: Quiz" msgid "-- No %s --" msgstr "" #: includes/admin/classes-posts-listings/class-learndash-admin-questions-listing.php:172 #: includes/admin/ld-admin.php:578 #: includes/admin/ld-admin.php:637 #: includes/quiz/ld-quiz-essays.php:399 #: includes/quiz/ld-quiz-essays.php:427 #: includes/quiz/ld-quiz-essays.php:449 msgid "filter" msgstr "" #. translators: placeholder: Group Leaders Count. #: includes/admin/classes-posts-listings/class-learndash-admin-questions-listing.php:180 msgctxt "Quizzes Count" msgid "Total %d" msgstr "" #. translators: placeholder: Question. #: includes/admin/classes-posts-listings/class-learndash-admin-questions-listing.php:235 msgctxt "placeholder: Question" msgid "Show all %s types" msgstr "" #: includes/admin/classes-posts-listings/class-learndash-admin-questions-listing.php:265 msgid "Show all ProQuiz Categories" msgstr "" #. translators: placeholder: Lessons. #: includes/admin/classes-posts-listings/class-learndash-admin-quizzes-listing.php:71 #: includes/admin/classes-posts-listings/class-learndash-admin-topics-listing.php:68 msgctxt "placeholder: Lessons" msgid "Show All %s" msgstr "" #. translators: placeholder: Quiz. #: includes/admin/classes-posts-listings/class-learndash-admin-quizzes-listing.php:107 #: includes/settings/settings-pages/class-ld-settings-page-quizzes-builder-single.php:166 msgctxt "placeholder: Quiz" msgid "Use %s Builder" msgstr "" #. translators: placeholder: Quiz. #: includes/admin/classes-posts-listings/class-learndash-admin-quizzes-listing.php:154 msgctxt "placeholder: Quiz" msgid "Show %s Questions" msgstr "" #. translators: placeholder: Quiz. #: includes/admin/classes-posts-listings/class-learndash-admin-quizzes-listing.php:180 msgctxt "placeholder: Quiz" msgid "Show %s Statistics" msgstr "" #. translators: placeholder: Quiz. #: includes/admin/classes-posts-listings/class-learndash-admin-quizzes-listing.php:206 msgctxt "placeholder: Quiz" msgid "Show %s Leaderboard" msgstr "" #: includes/admin/classes-posts-listings/class-learndash-admin-quizzes-listing.php:237 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizOverall.php:166 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizOverall.php:171 msgid "Export" msgstr "" #: includes/admin/ld-admin.php:261 #: includes/class-ld-lms.php:768 msgctxt "Edit Topic Label" msgid "Edit %s" msgstr "" #: includes/admin/ld-admin.php:284 msgctxt "Export Quiz Data Label" msgid "Export %s Data" msgstr "" #: includes/admin/ld-admin.php:342 msgid "Shortcode" msgstr "" #: includes/admin/ld-admin.php:364 #: includes/admin/ld-admin.php:370 #: includes/admin/ld-admin.php:401 #: includes/quiz/ld-quiz-essays.php:296 msgctxt "Assigned Course Label" msgid "Assigned %s" msgstr "" #: includes/admin/ld-admin.php:365 #: includes/admin/ld-admin.php:402 msgctxt "Assigned Lesson Label" msgid "Assigned %s" msgstr "" #: includes/admin/ld-admin.php:476 msgctxt "Assignment approval status" msgid "Approved" msgstr "" #: includes/admin/ld-admin.php:479 msgctxt "Assignment approval status" msgid "Not Approved" msgstr "" #: includes/admin/ld-admin.php:486 #: includes/quiz/ld-quiz-essays.php:331 msgid "approve" msgstr "" #: includes/admin/ld-admin.php:510 msgctxt "placeholders: current points / maximum point for assignment" msgid "%1$s / %2$s" msgstr "" #: includes/admin/ld-admin.php:512 msgctxt "Points for assignment not enabled" msgid "Not Enabled" msgstr "" #: includes/admin/ld-admin.php:551 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Quiz.php:342 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizOverall.php:125 msgid "Missing ProQuiz Associated Settings." msgstr "" #: includes/admin/ld-admin.php:586 msgctxt "placeholder: Course" msgid "%s Required" msgstr "" #: includes/admin/ld-admin.php:645 msgctxt "placeholder: Lesson" msgid "%s Required" msgstr "" #: includes/admin/ld-admin.php:750 msgid "Filter by %s" msgstr "" #: includes/admin/ld-admin.php:832 #: includes/admin/ld-admin.php:2075 msgctxt "Show All Courses Option Label" msgid "Show All %s" msgstr "" #: includes/admin/ld-admin.php:839 #: includes/admin/ld-admin.php:2086 #: includes/admin/ld-admin.php:2160 #: includes/class-ld-semper-fi-module.php:1172 msgid "loading" msgstr "" #: includes/admin/ld-admin.php:849 msgctxt "Show All Lessons Option Label" msgid "Show All %s" msgstr "" #: includes/admin/ld-admin.php:939 msgctxt "Show All Topics Option Label" msgid "Show All %s" msgstr "" #: includes/admin/ld-admin.php:1013 #: includes/admin/ld-admin.php:1028 msgctxt "Show All Quizzes Option Label" msgid "Show All %s" msgstr "" #: includes/admin/ld-admin.php:1054 msgid "Approval Status" msgstr "" #: includes/admin/ld-admin.php:1055 #: includes/ld-assignment-uploads.php:1122 #: themes/ld30/templates/assignment/partials/row.php:163 #: themes/ld30/templates/shortcodes/profile/assignment-row.php:112 msgid "Approved" msgstr "" #: includes/admin/ld-admin.php:1056 #: includes/ld-assignment-uploads.php:1126 msgid "Not Approved" msgstr "" #: includes/admin/ld-admin.php:1646 #: includes/settings/settings-pages/class-ld-settings-page-overview.php:1058 msgid "Changelog" msgstr "" #: includes/admin/ld-admin.php:1661 #: includes/settings/shortcodes-sections/quizinfo.php:29 msgid "Count" msgstr "" #: includes/admin/ld-admin.php:1941 #: includes/admin/ld-admin.php:1970 msgid "Total %s" msgstr "" #: includes/admin/ld-admin.php:2148 msgid "Show All Groups" msgstr "" #: includes/admin/ld-admin.php:2168 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_AdminToplist.php:11 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:209 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:288 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:93 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:139 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:200 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:223 msgid "Filter" msgstr "" #: includes/admin/ld-quiz-builder-helpers.php:110 msgid "point" msgstr "" #: includes/admin/ld-quiz-builder-helpers.php:114 msgctxt "Question type description for Free Answers" msgid "correct answers (one per line) (answers will be converted to lower case)" msgstr "" #: includes/admin/ld-quiz-builder-helpers.php:115 msgctxt "Question type description for Sort Answers" msgid "Please sort the answers in the right order with the \"move\" button. The answers will be displayed randomly." msgstr "" #: includes/admin/ld-quiz-builder-helpers.php:117 msgid "Use { } to mark a gap and correct answer:
I {play} soccer." msgstr "" #: includes/admin/ld-quiz-builder-helpers.php:118 msgid "Use [ ] to mark multiple correct answers:
I {[love][hate]} soccer." msgstr "" #: includes/admin/ld-quiz-builder-helpers.php:121 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:509 msgid "How should the user submit their answer?" msgstr "" #. translators: placeholders: course #: includes/admin/ld-quiz-builder-helpers.php:124 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:516 msgctxt "placeholders: course" msgid "This is a question that can be graded and potentially prevent a user from progressing to the next step of the %s." msgstr "" #: includes/admin/ld-quiz-builder-helpers.php:127 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:517 msgid "The user can only progress if the essay is marked as \"Graded\" and if the user has enough points to move on." msgstr "" #. translators: placeholders: quiz #: includes/admin/ld-quiz-builder-helpers.php:130 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:518 msgctxt "placeholders: quiz" msgid "How should the answer to this question be marked and graded upon %s submission?" msgstr "" #: includes/admin/ld-quiz-builder-helpers.php:135 msgid "Use { } to mark an assessment:
Less true { [1] [2] [3] [4] [5] } More true" msgstr "" #: includes/admin/ld-quiz-builder-helpers.php:136 msgid "Use [ ] to mark selectable items:
Less true { [A] [B] [C] } More true" msgstr "" #: includes/admin/onboarding-templates/onboarding-groups.php:16 msgctxt "Placeholder text when no Groups exist" msgid "You don't have any Groups yet" msgstr "" #: includes/admin/onboarding-templates/onboarding-groups.php:21 msgid "Users can be placed into Groups and assigned a Group Leader who can track the progress and performance of any user in the Group." msgstr "" #: includes/admin/onboarding-templates/onboarding-groups.php:27 msgctxt "Button text to create a new group" msgid "Add your first Group" msgstr "" #: includes/admin/onboarding-templates/onboarding-groups.php:37 msgctxt "Titel of tutorial video" msgid "Creating a Group" msgstr "" #: includes/admin/onboarding-templates/onboarding-groups.php:43 #: includes/admin/onboarding-templates/onboarding-sfwd-certificates.php:49 #: includes/admin/onboarding-templates/onboarding-sfwd-courses.php:53 #: includes/admin/onboarding-templates/onboarding-sfwd-lessons.php:55 #: includes/admin/onboarding-templates/onboarding-sfwd-question.php:44 #: includes/admin/onboarding-templates/onboarding-sfwd-quiz.php:58 #: includes/admin/onboarding-templates/onboarding-sfwd-topic.php:59 msgid "Related help and documentation" msgstr "" #: includes/admin/onboarding-templates/onboarding-sfwd-certificates.php:15 msgctxt "Placeholder text when no certificates have been created" msgid "You don't have any Certificates yet" msgstr "" #. translators: placeholder: %1$s: Quiz, %2$s: Course #: includes/admin/onboarding-templates/onboarding-sfwd-certificates.php:22 msgctxt "placeholder: %1$s: Quiz, %2$s: Course" msgid "Certificates can be awarded based on %1$s performance or at the very end of a %2$s. Once earned, the Certificate is available for PDF download from the user’s LearnDash profile." msgstr "" #: includes/admin/onboarding-templates/onboarding-sfwd-certificates.php:30 msgctxt "Button to add a certificate" msgid "Add your first Certificate" msgstr "" #: includes/admin/onboarding-templates/onboarding-sfwd-certificates.php:35 msgid "Need more help?" msgstr "" #. translators: placeholder: Course. #: includes/admin/onboarding-templates/onboarding-sfwd-certificates.php:41 msgctxt "placeholder: Course" msgid "Creating a Great %1$s Certificate" msgstr "" #. translators: placeholder: Courses. #: includes/admin/onboarding-templates/onboarding-sfwd-courses.php:16 msgctxt "placeholder: Courses" msgid "You don't have any %s yet" msgstr "" #. translators: placeholder: %1$s: Courses, %2$s: Course, %3$s: Lessons, %4$s: Topics, %5$s: Quizzes #: includes/admin/onboarding-templates/onboarding-sfwd-courses.php:22 msgctxt "placeholder: %1$s: Courses, %2$s: Course, %3$s: Lessons, %4$s: Topics, %5$s: Quizzes" msgid "%1$s offer a convenient and organized way for you to deliver training content. Create a %2$s and include %3$s, %4$s, %5$s, Assignments, and more!" msgstr "" #. translators: placeholder: Course. #: includes/admin/onboarding-templates/onboarding-sfwd-courses.php:34 msgctxt "placeholder: Course" msgid "Add your first %s" msgstr "" #. translators: Courses. #: includes/admin/onboarding-templates/onboarding-sfwd-courses.php:45 msgctxt "placeholder: Courses" msgid "Getting started with LearnDash %s" msgstr "" #. translators: placeholder: Lessons. #: includes/admin/onboarding-templates/onboarding-sfwd-lessons.php:16 msgctxt "placeholder: Lessons" msgid "You don't have any %s yet" msgstr "" #. translators: placeholder: %1$s: Lessons, %2$s: Course, %3$s: Lessons, %4$s: Course #: includes/admin/onboarding-templates/onboarding-sfwd-lessons.php:23 msgctxt "placeholder: %1$s: Lessons, %2$s: Course, %3$s: Lessons, %4$s: Course" msgid "%1$s are where you add your content for your %2$s. You can add %3$s using the Course Builder, or you can create them individually and assign them to a %4$s later" msgstr "" #. translators: placeholder: Lesson. #: includes/admin/onboarding-templates/onboarding-sfwd-lessons.php:35 msgctxt "placeholder: Lesson" msgid "Add your first %s" msgstr "" #. translators: placeholder: %1$s: Lessons, %2$s: Course #: includes/admin/onboarding-templates/onboarding-sfwd-lessons.php:46 msgctxt "placeholder: %1$s: Lessons, %2$s: Course" msgid "Creating %1$s for Your %2$s" msgstr "" #: includes/admin/onboarding-templates/onboarding-sfwd-lessons.php:60 msgid "View all docs" msgstr "" #. translators: placeholder: Questions. #: includes/admin/onboarding-templates/onboarding-sfwd-question.php:16 msgctxt "placeholder: Questions" msgid "You don't have any %s yet" msgstr "" #. translators: placeholder: %1$s: Questions, %2$s: Quiz, %3$s: Questions, %4$s: Quiz #: includes/admin/onboarding-templates/onboarding-sfwd-question.php:23 msgctxt "placeholder: %1$s: Questions, %2$s: Quiz, %3$s: Questions, %4$s: Quiz" msgid "You can add %1$s when you create a %2$s, or you can choose to add %3$s at any time and add them to a %4$s later." msgstr "" #. translators: placeholder: Question. #: includes/admin/onboarding-templates/onboarding-sfwd-question.php:35 msgctxt "placeholder: Question" msgid "Add your first %s" msgstr "" #. translators: placeholder: Quizzes. #: includes/admin/onboarding-templates/onboarding-sfwd-quiz.php:16 msgctxt "placeholder: Quizzes" msgid "You don't have any %s yet" msgstr "" #. translators: placeholder: %1$s: Quizzes, %2$s: Course, %3$s: Quiz, %4$s: Course #: includes/admin/onboarding-templates/onboarding-sfwd-quiz.php:23 msgctxt "placeholder: %1$s: Quizzes, %2$s: Course, %3$s: Quiz, %4$s: Course" msgid "%1$s are a great way to check if your learners are understanding the %2$s content. You can have a %3$s in the middle of a %4$s, or you can put it at the end" msgstr "" #. translators: placeholder: Quiz. #: includes/admin/onboarding-templates/onboarding-sfwd-quiz.php:35 msgctxt "placeholder: Quiz" msgid "Add your first %s" msgstr "" #. translators: placeholder: %1$s: Quiz #: includes/admin/onboarding-templates/onboarding-sfwd-quiz.php:46 msgctxt "placeholder: %1$s: Quiz" msgid "Creating a %1$s" msgstr "" #. translators: placeholder: Topics. #: includes/admin/onboarding-templates/onboarding-sfwd-topic.php:16 msgctxt "placeholder: Topics" msgid "You don't have any %s yet" msgstr "" #. translators: placeholder: %1$s: Lessons, %2$s: Course, %3$s: Topics, %4$s: Topics, %5$s: Lesson #: includes/admin/onboarding-templates/onboarding-sfwd-topic.php:23 msgctxt "placeholder: %1$s: Lessons, %2$s: Course, %3$s: Topics, %4$s: Topics, %5$s: Lesson" msgid "When you have %1$s in your %2$s, you can break them up into separate %3$s. You can add %4$s using the Course Builder, or you can create them individually and assign them to a %5$s later." msgstr "" #. translators: placeholder: Topic. #: includes/admin/onboarding-templates/onboarding-sfwd-topic.php:36 msgctxt "placeholder: Topic" msgid "Add your first %s" msgstr "" #. translators: placeholder: %1$s: Topics #: includes/admin/onboarding-templates/onboarding-sfwd-topic.php:49 msgctxt "placeholder: %1$s: Topics" msgid "Creating %1$s" msgstr "" #: includes/class-ld-addons-updater.php:105 #: includes/class-ld-addons-updater.php:137 msgid "Return to LearnDash Add-ons Page" msgstr "" #: includes/class-ld-addons-updater.php:135 msgid "Activate Plugin" msgstr "" #: includes/class-ld-addons-updater.php:307 msgid "Directory successfully renamed." msgstr "" #: includes/class-ld-addons-updater.php:312 msgid "Unable to rename the update to match the existing directory." msgstr "" #. translators: placeholders: Translation Name, Translation Locale. #: includes/class-ld-addons-updater.php:363 msgctxt "placeholders: Translation Name, Translation Locale" msgid "

Updating translations for %1$s (%2$s)...

" msgstr "" #. translators: placeholder: plugin title. #: includes/class-ld-addons-updater.php:374 msgctxt "placeholder: plugin title" msgid "%s: Translations" msgstr "" #: includes/class-ld-cpt-instance.php:58 msgid " Options" msgstr "" #: includes/class-ld-cpt-instance.php:89 #: includes/class-ld-lms.php:1852 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:306 #: includes/settings/settings-sections/class-ld-settings-section-courses-management-display.php:336 msgid "Sort By" msgstr "" #: includes/class-ld-cpt-instance.php:90 msgid "select" msgstr "" #: includes/class-ld-cpt-instance.php:92 #: includes/class-ld-cpt-instance.php:104 #: includes/class-ld-lms.php:1854 #: includes/class-ld-lms.php:1865 msgid "Select a choice..." msgstr "" #: includes/class-ld-cpt-instance.php:94 #: includes/class-ld-gdpr.php:395 #: includes/class-ld-gdpr.php:494 #: includes/class-ld-lms.php:1388 #: includes/class-ld-lms.php:1856 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1190 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:323 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:27 #: includes/settings/settings-fields/class-ld-settings-fields-quiz-custom-fields.php:102 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:311 #: includes/settings/settings-sections/class-ld-settings-section-courses-management-display.php:341 #: themes/ld30/templates/shortcodes/profile/assignments.php:16 #: themes/ld30/templates/shortcodes/profile/quizzes.php:25 #: themes/legacy/templates/profile.php:143 msgid "Date" msgstr "" #: includes/class-ld-cpt-instance.php:95 #: includes/class-ld-lms.php:1389 #: includes/class-ld-lms.php:1857 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:312 #: includes/settings/settings-sections/class-ld-settings-section-courses-management-display.php:340 msgid "Menu Order" msgstr "" #: includes/class-ld-cpt-instance.php:98 #: includes/class-ld-cpt-instance.php:109 #: includes/class-ld-lms.php:1860 #: includes/class-ld-lms.php:1870 msgid "Choose the sort order." msgstr "" #: includes/class-ld-cpt-instance.php:101 #: includes/class-ld-lms.php:1863 msgid "Sort Direction" msgstr "" #: includes/class-ld-cpt-instance.php:105 #: includes/class-ld-lms.php:1400 #: includes/class-ld-lms.php:1866 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:324 #: includes/settings/settings-sections/class-ld-settings-section-courses-management-display.php:353 msgid "Ascending" msgstr "" #: includes/class-ld-cpt-instance.php:106 #: includes/class-ld-lms.php:1401 #: includes/class-ld-lms.php:1867 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:325 #: includes/settings/settings-sections/class-ld-settings-section-courses-management-display.php:354 msgid "Descending" msgstr "" #: includes/class-ld-cpt-instance.php:112 msgid "Posts Per Page" msgstr "" #: includes/class-ld-cpt-instance.php:114 msgid "Enter the number of posts to display per page." msgstr "" #: includes/class-ld-cpt-instance.php:811 #: includes/course/ld-course-functions.php:935 #: includes/course/ld-course-list-shortcode.php:1478 #: includes/course/ld-course-progress.php:1378 #: includes/course/ld-course-progress.php:1432 #: includes/course/ld-course-progress.php:2244 #: includes/ld-certificates.php:156 #: includes/settings/shortcodes-sections/ld_course_list.php:82 #: sfwd_lms.php:554 #: themes/ld30/templates/shortcodes/profile.php:96 #: themes/legacy/templates/course_progress_rows.php:99 #: includes/gutenberg/blocks/ld-course-list/index.js:292 msgid "Completed" msgstr "" #: includes/class-ld-cpt-instance.php:909 msgid "Access to certificate page is disallowed." msgstr "" #: includes/class-ld-cpt-widget.php:33 msgctxt "Displays a list of lessons for a course and tracks lesson progress." msgid "Displays a list of %1$s for a %2$s and tracks %3$s progress." msgstr "" #: includes/class-ld-cpt-widget.php:179 #: includes/class-ld-cpt-widget.php:311 #: includes/class-ld-cpt-widget.php:443 #: includes/class-ld-cpt-widget.php:573 #: includes/class-ld-cpt-widget.php:704 #: includes/course/ld-course-info-widget.php:185 #: includes/course/ld-course-info-widget.php:438 #: includes/course/ld-course-progress.php:2081 #: themes/ld30/includes/helpers.php:1251 msgid "Title:" msgstr "" #: includes/class-ld-cpt-widget.php:214 msgctxt "placeholder: Course" msgid "Displays a list of %s" msgstr "" #: includes/class-ld-cpt-widget.php:346 msgctxt "placeholder: Quiz" msgid "Displays a list of %s" msgstr "" #: includes/class-ld-cpt-widget.php:476 msgctxt "placeholder: Transactions" msgid "Displays a list of %s" msgstr "" #: includes/class-ld-cpt-widget.php:607 msgctxt "placeholder: Certificates" msgid "Displays a list of %s" msgstr "" #: includes/class-ld-cpt.php:37 #: includes/ld-groups.php:143 #: includes/quiz/ld-quiz-essays.php:29 msgid "Add New" msgstr "" #: includes/class-ld-cpt.php:39 msgctxt "placeholder: Post Name" msgid "Add New %s" msgstr "" #: includes/class-ld-cpt.php:40 msgctxt "placeholder: Post Name" msgid "Edit %s" msgstr "" #: includes/class-ld-cpt.php:41 msgctxt "placeholder: Post Name" msgid "New %s" msgstr "" #: includes/class-ld-cpt.php:42 msgctxt "placeholder: Post Name" msgid "View %s" msgstr "" #: includes/class-ld-cpt.php:43 msgctxt "placeholder: Post Name" msgid "Search %s" msgstr "" #: includes/class-ld-cpt.php:44 msgctxt "placeholder: Post Name" msgid "No %s found" msgstr "" #: includes/class-ld-cpt.php:45 msgctxt "placeholder: Post Name" msgid "No %s found in Trash" msgstr "" #: includes/class-ld-cpt.php:46 msgctxt "placeholder: Post Name" msgid "Parent %s" msgstr "" #: includes/class-ld-cpt.php:48 msgctxt "placeholder: Post Name" msgid "%s Published" msgstr "" #: includes/class-ld-cpt.php:49 msgctxt "placeholder: Post Name" msgid "%s Published Privately" msgstr "" #: includes/class-ld-cpt.php:50 msgctxt "placeholder: Post Name" msgid "%s Reverted to Draft" msgstr "" #: includes/class-ld-cpt.php:51 msgctxt "placeholder: Post Name" msgid "%s Scheduled" msgstr "" #: includes/class-ld-cpt.php:52 msgctxt "placeholder: Post Name" msgid "%s Updated" msgstr "" #: includes/class-ld-custom-label.php:27 #: includes/settings/settings-sections/class-ld-settings-section-custom-labels.php:75 msgid "Course" msgstr "" #: includes/class-ld-custom-label.php:31 #: includes/settings/settings-sections/class-ld-settings-section-custom-labels.php:83 msgid "Courses" msgstr "" #: includes/class-ld-custom-label.php:35 #: includes/settings/settings-sections/class-ld-settings-section-custom-labels.php:91 msgid "Lesson" msgstr "" #: includes/class-ld-custom-label.php:39 #: includes/settings/settings-sections/class-ld-settings-section-custom-labels.php:99 msgid "Lessons" msgstr "" #: includes/class-ld-custom-label.php:43 #: includes/settings/settings-sections/class-ld-settings-section-custom-labels.php:107 msgid "Topic" msgstr "" #: includes/class-ld-custom-label.php:47 #: includes/settings/settings-sections/class-ld-settings-section-custom-labels.php:115 msgid "Topics" msgstr "" #: includes/class-ld-custom-label.php:51 #: includes/settings/settings-sections/class-ld-settings-section-custom-labels.php:123 msgid "Quiz" msgstr "" #: includes/class-ld-custom-label.php:55 #: includes/settings/settings-sections/class-ld-settings-section-custom-labels.php:131 msgid "Quizzes" msgstr "" #: includes/class-ld-custom-label.php:59 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1446 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:110 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:104 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:119 #: includes/settings/settings-sections/class-ld-settings-section-custom-labels.php:139 msgid "Question" msgstr "" #: includes/class-ld-custom-label.php:67 msgid "Take this Course" msgstr "" #: includes/class-ld-custom-label.php:71 #: includes/settings/settings-pages/class-ld-settings-page-overview.php:151 #: includes/settings/settings-pages/class-ld-settings-page-overview.php:456 #: includes/settings/settings-pages/class-ld-settings-page-overview.php:507 #: includes/settings/settings-pages/class-ld-settings-page-overview.php:569 #: includes/settings/settings-pages/class-ld-settings-page-overview.php:626 #: includes/settings/settings-pages/class-ld-settings-page-overview.php:661 #: includes/settings/settings-pages/class-ld-settings-page-overview.php:715 #: includes/settings/settings-pages/class-ld-settings-page-overview.php:758 #: includes/settings/settings-pages/class-ld-settings-page-overview.php:793 #: includes/settings/settings-pages/class-ld-settings-page-overview.php:826 msgid "Mark Complete" msgstr "" #: includes/class-ld-custom-label.php:75 msgid "Click Here to Continue" msgstr "" #. translators: placeholder: Courses. #: includes/class-ld-custom-label.php:165 msgctxt "placeholder: Courses" msgid "Back to %s" msgstr "" #. translators: placeholder: Course. #: includes/class-ld-custom-label.php:170 msgctxt "placeholder: Course" msgid "Back to %s" msgstr "" #. translators: placeholder: Lessons. #: includes/class-ld-custom-label.php:179 msgctxt "placeholder: Lessons" msgid "Back to %s" msgstr "" #. translators: placeholder: Lesson. #: includes/class-ld-custom-label.php:184 msgctxt "placeholder: Lesson" msgid "Back to %s" msgstr "" #. translators: placeholder: Topics. #: includes/class-ld-custom-label.php:193 msgctxt "placeholder: Topics" msgid "Back to %s" msgstr "" #. translators: placeholder: Topic. #: includes/class-ld-custom-label.php:198 msgctxt "placeholder: Topic" msgid "Back to %s" msgstr "" #. translators: placeholder: Quizzes. #: includes/class-ld-custom-label.php:208 msgctxt "placeholder: Quizzes" msgid "Back to %s" msgstr "" #. translators: placeholder: Quiz. #: includes/class-ld-custom-label.php:213 msgctxt "placeholder: Quiz" msgid "Back to %s" msgstr "" #. translators: placeholder: Questions. #: includes/class-ld-custom-label.php:222 msgctxt "placeholder: Questions" msgid "Back to %s" msgstr "" #. translators: placeholder: Question. #: includes/class-ld-custom-label.php:227 msgctxt "placeholder: Question" msgid "Back to %s" msgstr "" #. translators: placeholder: Transactions. #: includes/class-ld-custom-label.php:237 msgctxt "placeholder: Transactions" msgid "Back to %s" msgstr "" #. translators: placeholder: Transaction. #: includes/class-ld-custom-label.php:242 msgctxt "placeholder: Transaction" msgid "Back to %s" msgstr "" #. translators: placeholder: Groups. #: includes/class-ld-custom-label.php:251 msgctxt "placeholder: Groups" msgid "Back to %s" msgstr "" #. translators: placeholder: Group. #: includes/class-ld-custom-label.php:256 msgctxt "placeholder: Group" msgid "Back to %s" msgstr "" #. translators: placeholder: Assignments. #: includes/class-ld-custom-label.php:265 msgctxt "placeholder: Assignments" msgid "Back to %s" msgstr "" #. translators: placeholder: Assignment. #: includes/class-ld-custom-label.php:270 msgctxt "placeholder: Assignment" msgid "Back to %s" msgstr "" #. translators: placeholder: Essays. #: includes/class-ld-custom-label.php:279 msgctxt "placeholder: Essays" msgid "Back to %s" msgstr "" #. translators: placeholder: Essay. #: includes/class-ld-custom-label.php:284 msgctxt "placeholder: Essay" msgid "Back to %s" msgstr "" #. translators: placeholder: Certificates. #: includes/class-ld-custom-label.php:293 msgctxt "placeholder: Certificates" msgid "Back to %s" msgstr "" #. translators: placeholder: Certificate. #: includes/class-ld-custom-label.php:298 msgctxt "placeholder: Certificate" msgid "Back to %s" msgstr "" #. translators: placeholder: Post Type Plural label. #: includes/class-ld-custom-label.php:307 msgctxt "placeholder: Post Type Plural label" msgid "Back to %s" msgstr "" #. translators: placeholder: Post Type Singular label. #: includes/class-ld-custom-label.php:312 msgctxt "placeholder: Post Type Singular label" msgid "Back to %s" msgstr "" #. translators: placeholder: Post Type slug. #: includes/class-ld-custom-label.php:320 msgctxt "placeholder: Post Type slug" msgid "Back to %s" msgstr "" #. translators: placeholder: Course. #: includes/class-ld-custom-label.php:343 msgctxt "placeholder: Course" msgid "Previous %s" msgstr "" #. translators: placeholder: Lesson. #: includes/class-ld-custom-label.php:350 msgctxt "placeholder: Lesson" msgid "Previous %s" msgstr "" #. translators: placeholder: Topic. #: includes/class-ld-custom-label.php:357 msgctxt "placeholder: Topic" msgid "Previous %s" msgstr "" #. translators: placeholder: Quiz. #: includes/class-ld-custom-label.php:364 msgctxt "placeholder: Quiz" msgid "Previous %s" msgstr "" #. translators: placeholder: Question. #: includes/class-ld-custom-label.php:371 msgctxt "placeholder: Question" msgid "Previous %s" msgstr "" #. translators: placeholder: Transaction. #: includes/class-ld-custom-label.php:378 msgctxt "placeholder: Transaction" msgid "Previous %s" msgstr "" #. translators: placeholder: Group. #: includes/class-ld-custom-label.php:385 msgctxt "placeholder: Group" msgid "Previous %s" msgstr "" #. translators: placeholder: Assignment. #: includes/class-ld-custom-label.php:392 msgctxt "placeholder: Assignment" msgid "Previous %s" msgstr "" #. translators: placeholder: Essay. #: includes/class-ld-custom-label.php:399 msgctxt "placeholder: Essay" msgid "Previous %s" msgstr "" #. translators: placeholder: Certificate. #: includes/class-ld-custom-label.php:406 msgctxt "placeholder: Certificate" msgid "Previous %s" msgstr "" #. translators: placeholder: Post Type Singular label. #: includes/class-ld-custom-label.php:413 msgctxt "placeholder: Post Type Singular label" msgid "Previous %s" msgstr "" #. translators: placeholder: Post Type slug. #: includes/class-ld-custom-label.php:420 msgctxt "placeholder: Post Type slug" msgid "Previous %s" msgstr "" #. translators: placeholder: Course. #: includes/class-ld-custom-label.php:443 msgctxt "placeholder: Course" msgid "Next %s" msgstr "" #. translators: placeholder: Lesson. #: includes/class-ld-custom-label.php:450 msgctxt "placeholder: Lesson" msgid "Next %s" msgstr "" #. translators: placeholder: Topic. #: includes/class-ld-custom-label.php:457 msgctxt "placeholder: Topic" msgid "Next %s" msgstr "" #. translators: placeholder: Quiz. #: includes/class-ld-custom-label.php:464 msgctxt "placeholder: Quiz" msgid "Next %s" msgstr "" #. translators: placeholder: Question. #: includes/class-ld-custom-label.php:471 msgctxt "placeholder: Question" msgid "Next %s" msgstr "" #. translators: placeholder: Transaction. #: includes/class-ld-custom-label.php:478 msgctxt "placeholder: Transaction" msgid "Next %s" msgstr "" #. translators: placeholder: Group. #: includes/class-ld-custom-label.php:485 msgctxt "placeholder: Group" msgid "Next %s" msgstr "" #. translators: placeholder: Assignment. #: includes/class-ld-custom-label.php:492 msgctxt "placeholder: Assignment" msgid "Next %s" msgstr "" #. translators: placeholder: Essay. #: includes/class-ld-custom-label.php:499 msgctxt "placeholder: Essay" msgid "Next %s" msgstr "" #. translators: placeholder: Certificate. #: includes/class-ld-custom-label.php:506 msgctxt "placeholder: Certificate" msgid "Next %s" msgstr "" #. translators: placeholder: Post Type Singular label. #: includes/class-ld-custom-label.php:513 msgctxt "placeholder: Post Type Singular label" msgid "Next %s" msgstr "" #. translators: placeholder: Post Type slug. #: includes/class-ld-custom-label.php:520 msgctxt "placeholder: Post Type slug" msgid "Next %s" msgstr "" #. translators: placeholder: Course. #: includes/class-ld-custom-label.php:544 msgctxt "placeholder: Course" msgid "%s page" msgstr "" #. translators: placeholder: Lesson. #: includes/class-ld-custom-label.php:551 msgctxt "placeholder: Lesson" msgid "%s page" msgstr "" #. translators: placeholder: Topic. #: includes/class-ld-custom-label.php:558 msgctxt "placeholder: Topic" msgid "%s page" msgstr "" #. translators: placeholder: Quiz. #: includes/class-ld-custom-label.php:565 msgctxt "placeholder: Quiz" msgid "%s page" msgstr "" #. translators: placeholder: Question. #: includes/class-ld-custom-label.php:572 msgctxt "placeholder: Question" msgid "%s page" msgstr "" #. translators: placeholder: Transaction. #: includes/class-ld-custom-label.php:579 msgctxt "placeholder: Transaction" msgid "%s page" msgstr "" #. translators: placeholder: Group. #: includes/class-ld-custom-label.php:586 msgctxt "placeholder: Group" msgid "%s page" msgstr "" #. translators: placeholder: Assignment. #: includes/class-ld-custom-label.php:593 msgctxt "placeholder: Assignment" msgid "%s page" msgstr "" #. translators: placeholder: Essay. #: includes/class-ld-custom-label.php:600 msgctxt "placeholder: Essay" msgid "%s page" msgstr "" #. translators: placeholder: Certificate. #: includes/class-ld-custom-label.php:607 msgctxt "placeholder: Certificate" msgid "%s page" msgstr "" #. translators: placeholder: Post Type Singular label. #: includes/class-ld-custom-label.php:616 msgctxt "placeholder: Post Type Singular label" msgid "%s page" msgstr "" #. translators: placeholder: Post Type slug. #: includes/class-ld-custom-label.php:625 msgctxt "placeholder: Post Type slug" msgid "%s page" msgstr "" #: includes/class-ld-gdpr.php:71 #: includes/class-ld-gdpr.php:423 msgctxt "placeholder: Course" msgid "LearnDash LMS %s Assignments" msgstr "" #: includes/class-ld-gdpr.php:76 #: includes/class-ld-gdpr.php:522 msgctxt "placeholder: Quiz" msgid "LearnDash LMS %s Essays" msgstr "" #: includes/class-ld-gdpr.php:128 #: includes/class-ld-gdpr.php:154 #: includes/class-ld-gdpr.php:188 #: includes/class-ld-gdpr.php:255 msgid "Transaction Type" msgstr "" #: includes/class-ld-gdpr.php:129 msgid "Stripe" msgstr "" #: includes/class-ld-gdpr.php:134 #: includes/class-ld-gdpr.php:160 #: includes/class-ld-gdpr.php:198 #: includes/class-ld-gdpr.php:799 msgid "Order Item" msgstr "" #: includes/class-ld-gdpr.php:138 #: includes/class-ld-gdpr.php:164 #: includes/class-ld-gdpr.php:202 #: includes/class-ld-gdpr.php:803 msgid "Order Total" msgstr "" #: includes/class-ld-gdpr.php:142 #: includes/class-ld-gdpr.php:176 #: includes/class-ld-gdpr.php:223 #: includes/class-ld-gdpr.php:261 #: includes/class-ld-gdpr.php:807 msgid "Order Email" msgstr "" #: includes/class-ld-gdpr.php:155 msgid "PayPal" msgstr "" #: includes/class-ld-gdpr.php:168 #: includes/class-ld-gdpr.php:265 msgid "First Name" msgstr "" #: includes/class-ld-gdpr.php:172 #: includes/class-ld-gdpr.php:211 #: includes/class-ld-gdpr.php:219 #: includes/class-ld-gdpr.php:269 msgid "Last Name" msgstr "" #: includes/class-ld-gdpr.php:189 msgid "2Checkout" msgstr "" #: includes/class-ld-gdpr.php:194 msgid "Invoice" msgstr "" #: includes/class-ld-gdpr.php:206 msgid "Cardholder Name" msgstr "" #: includes/class-ld-gdpr.php:215 msgid "Middle Initial" msgstr "" #: includes/class-ld-gdpr.php:227 #: includes/class-ld-gdpr.php:231 msgid "Street Address" msgstr "" #: includes/class-ld-gdpr.php:235 msgid "City" msgstr "" #: includes/class-ld-gdpr.php:239 msgid "State" msgstr "" #: includes/class-ld-gdpr.php:243 msgid "Zip" msgstr "" #: includes/class-ld-gdpr.php:256 msgid "Samcart" msgstr "" #: includes/class-ld-gdpr.php:273 msgid "Phone #" msgstr "" #: includes/class-ld-gdpr.php:277 msgid "IP Address" msgstr "" #: includes/class-ld-gdpr.php:281 msgid "Billing Address" msgstr "" #: includes/class-ld-gdpr.php:285 msgid "Billing City" msgstr "" #: includes/class-ld-gdpr.php:289 msgid "Billing State" msgstr "" #: includes/class-ld-gdpr.php:293 msgid "Billing ZIP" msgstr "" #: includes/class-ld-gdpr.php:303 msgid "Order ID" msgstr "" #: includes/class-ld-gdpr.php:307 msgid "Order Date" msgstr "" #: includes/class-ld-gdpr.php:324 msgid "LearnDash LMS Purchase Transactions" msgstr "" #: includes/class-ld-gdpr.php:390 msgid "Assignment URL" msgstr "" #: includes/class-ld-gdpr.php:404 #: includes/class-ld-gdpr.php:503 msgctxt "placeholder: Course" msgid "%s" msgstr "" #: includes/class-ld-gdpr.php:415 #: includes/class-ld-gdpr.php:514 msgctxt "placeholder: Lesson" msgid "%s" msgstr "" #: includes/class-ld-gdpr.php:488 msgid "Essay URL" msgstr "" #: includes/class-ld-lms.php:766 msgctxt "Add New Topic Label" msgid "Add New" msgstr "" #: includes/class-ld-lms.php:767 msgctxt "Add New Topic Label" msgid "Add New %s" msgstr "" #: includes/class-ld-lms.php:769 msgctxt "New Topic Label" msgid "New %s" msgstr "" #: includes/class-ld-lms.php:771 msgctxt "View Topic Label" msgid "View %s" msgstr "" #: includes/class-ld-lms.php:772 msgctxt "View Topics Label" msgid "View %s" msgstr "" #: includes/class-ld-lms.php:773 msgctxt "Search Topic Label" msgid "Search %s" msgstr "" #: includes/class-ld-lms.php:774 msgctxt "No Topic found Label" msgid "No %s found" msgstr "" #: includes/class-ld-lms.php:775 msgctxt "No Topic found in Trash" msgid "No %s found in Trash" msgstr "" #: includes/class-ld-lms.php:778 msgctxt "Topic Published" msgid "%s Published" msgstr "" #: includes/class-ld-lms.php:779 msgctxt "Topic Published Privately" msgid "%s Published Privately" msgstr "" #: includes/class-ld-lms.php:780 msgctxt "Topic Reverted to Draft" msgid "%s Reverted to Draft" msgstr "" #: includes/class-ld-lms.php:781 msgctxt "Topic Scheduled" msgid "%s Scheduled" msgstr "" #: includes/class-ld-lms.php:782 msgctxt "Topic Updated" msgid "%s Updated" msgstr "" #: includes/class-ld-lms.php:791 msgctxt "Add New Quiz Label" msgid "Add New" msgstr "" #: includes/class-ld-lms.php:792 msgctxt "Add New Quiz Label" msgid "Add New %s" msgstr "" #: includes/class-ld-lms.php:794 msgctxt "New Quiz Label" msgid "New %s" msgstr "" #: includes/class-ld-lms.php:796 msgctxt "View Quiz Label" msgid "View %s" msgstr "" #: includes/class-ld-lms.php:797 msgctxt "View Quizzes Label" msgid "View %s" msgstr "" #: includes/class-ld-lms.php:798 msgctxt "Search Quiz Label" msgid "Search %s" msgstr "" #: includes/class-ld-lms.php:799 msgctxt "No Quiz found Label" msgid "No %s found" msgstr "" #: includes/class-ld-lms.php:800 msgctxt "No Quiz found in Trash Label" msgid "No %s found in Trash" msgstr "" #: includes/class-ld-lms.php:803 msgctxt "Quiz Published" msgid "%s Published" msgstr "" #: includes/class-ld-lms.php:804 msgctxt "Quiz Published Privately" msgid "%s Published Privately" msgstr "" #: includes/class-ld-lms.php:805 msgctxt "Quiz Reverted to Draft" msgid "%s Reverted to Draft" msgstr "" #: includes/class-ld-lms.php:806 msgctxt "Quiz Scheduled" msgid "%s Scheduled" msgstr "" #: includes/class-ld-lms.php:807 msgctxt "Quiz Updated" msgid "%s Updated" msgstr "" #: includes/class-ld-lms.php:816 msgctxt "Add New Question Label" msgid "Add New" msgstr "" #: includes/class-ld-lms.php:817 msgctxt "Add New Question Label" msgid "Add New %s" msgstr "" #: includes/class-ld-lms.php:818 msgctxt "Edit Question Label" msgid "Edit %s" msgstr "" #: includes/class-ld-lms.php:819 msgctxt "New Question Label" msgid "New %s" msgstr "" #: includes/class-ld-lms.php:821 msgctxt "View Question Label" msgid "View %s" msgstr "" #: includes/class-ld-lms.php:822 msgctxt "View Questions Label" msgid "View %s" msgstr "" #: includes/class-ld-lms.php:823 msgctxt "Search Question Label" msgid "Search %s" msgstr "" #: includes/class-ld-lms.php:824 msgctxt "No Question found Label" msgid "No %s found" msgstr "" #: includes/class-ld-lms.php:825 msgctxt "No Question found in Trash Label" msgid "No %s found in Trash" msgstr "" #: includes/class-ld-lms.php:828 msgctxt "Question Published" msgid "%s Published" msgstr "" #: includes/class-ld-lms.php:829 msgctxt "Question Published Privately" msgid "%s Published Privately" msgstr "" #: includes/class-ld-lms.php:830 msgctxt "Question Reverted to Draft" msgid "%s Reverted to Draft" msgstr "" #: includes/class-ld-lms.php:831 msgctxt "Question Scheduled" msgid "%s Scheduled" msgstr "" #: includes/class-ld-lms.php:832 msgctxt "Question Updated" msgid "%s Updated" msgstr "" #: includes/class-ld-lms.php:841 msgctxt "Add New Lesson Label" msgid "Add New" msgstr "" #: includes/class-ld-lms.php:842 msgctxt "Add New Lesson Label" msgid "Add New %s" msgstr "" #: includes/class-ld-lms.php:843 msgctxt "Edit Lesson Label" msgid "Edit %s" msgstr "" #: includes/class-ld-lms.php:844 msgctxt "New Lesson Label" msgid "New %s" msgstr "" #: includes/class-ld-lms.php:846 msgctxt "View Lesson Label" msgid "View %s" msgstr "" #: includes/class-ld-lms.php:847 msgctxt "View Lessons Label" msgid "View %s" msgstr "" #: includes/class-ld-lms.php:848 msgctxt "Search Lesson Label" msgid "Search %s" msgstr "" #: includes/class-ld-lms.php:849 msgctxt "No Lesson found Label" msgid "No %s found" msgstr "" #: includes/class-ld-lms.php:850 msgctxt "No Lesson found in Trash Label" msgid "No %s found in Trash" msgstr "" #: includes/class-ld-lms.php:853 msgctxt "Lesson Published" msgid "%s Published" msgstr "" #: includes/class-ld-lms.php:854 msgctxt "Lesson Published Privately" msgid "%s Published Privately" msgstr "" #: includes/class-ld-lms.php:855 msgctxt "Lesson Reverted to Draft" msgid "%s Reverted to Draft" msgstr "" #: includes/class-ld-lms.php:856 msgctxt "Lesson Scheduled" msgid "%s Scheduled" msgstr "" #: includes/class-ld-lms.php:857 msgctxt "Lesson Updated" msgid "%s Updated" msgstr "" #: includes/class-ld-lms.php:866 msgctxt "Add New Course Label" msgid "Add New" msgstr "" #: includes/class-ld-lms.php:867 msgctxt "Add New Course Label" msgid "Add New %s" msgstr "" #: includes/class-ld-lms.php:868 msgctxt "Edit Course Label" msgid "Edit %s" msgstr "" #: includes/class-ld-lms.php:869 msgctxt "New Course Label" msgid "New %s" msgstr "" #: includes/class-ld-lms.php:871 msgctxt "View Course Label" msgid "View %s" msgstr "" #: includes/class-ld-lms.php:872 msgctxt "View Courses Label" msgid "View %s" msgstr "" #: includes/class-ld-lms.php:873 msgctxt "Search Courses Label" msgid "Search %s" msgstr "" #: includes/class-ld-lms.php:874 msgctxt "No Courses found Label" msgid "No %s found" msgstr "" #: includes/class-ld-lms.php:875 msgctxt "No Courses found in Trash Label" msgid "No %s found in Trash" msgstr "" #: includes/class-ld-lms.php:878 msgctxt "Course Published" msgid "%s Published" msgstr "" #: includes/class-ld-lms.php:879 msgctxt "Course Published Privately" msgid "%s Published Privately" msgstr "" #: includes/class-ld-lms.php:880 msgctxt "Course Reverted to Draft" msgid "%s Reverted to Draft" msgstr "" #: includes/class-ld-lms.php:881 msgctxt "Course Scheduled" msgid "%s Scheduled" msgstr "" #: includes/class-ld-lms.php:882 msgctxt "Course Updated" msgid "%s Updated" msgstr "" #. translators: placeholder: Course. #: includes/class-ld-lms.php:950 #: includes/class-ld-lms.php:960 #: includes/settings/settings-sections/class-ld-settings-section-courses-taxonomies.php:98 msgctxt "placeholder: Course" msgid "%s Categories" msgstr "" #: includes/class-ld-lms.php:951 msgctxt "placeholder: Course" msgid "%s Category" msgstr "" #: includes/class-ld-lms.php:952 msgctxt "placeholder: Course" msgid "Search %s Categories" msgstr "" #: includes/class-ld-lms.php:953 msgctxt "placeholder: Course" msgid "All %s Categories" msgstr "" #: includes/class-ld-lms.php:954 msgctxt "placeholder: Course" msgid "Parent %s Category" msgstr "" #: includes/class-ld-lms.php:955 msgctxt "placeholder: Course" msgid "Parent %s Category:" msgstr "" #: includes/class-ld-lms.php:956 msgctxt "placeholder: Course" msgid "Edit %s Category" msgstr "" #: includes/class-ld-lms.php:957 msgctxt "placeholder: Course" msgid "Update %s Category" msgstr "" #: includes/class-ld-lms.php:958 msgctxt "placeholder: Course" msgid "Add New %s Category" msgstr "" #: includes/class-ld-lms.php:959 msgctxt "placeholder: Course" msgid "New %s Category Name" msgstr "" #. translators: placeholder: Course. #: includes/class-ld-lms.php:978 #: includes/class-ld-lms.php:988 #: includes/settings/settings-sections/class-ld-settings-section-courses-taxonomies.php:116 msgctxt "placeholder: Course" msgid "%s Tags" msgstr "" #: includes/class-ld-lms.php:979 msgctxt "placeholder: Course" msgid "%s Tag" msgstr "" #: includes/class-ld-lms.php:980 msgctxt "placeholder: Course" msgid "Search %s Tag" msgstr "" #: includes/class-ld-lms.php:981 msgctxt "placeholder: Course" msgid "All %s Tags" msgstr "" #: includes/class-ld-lms.php:982 msgctxt "placeholder: Course" msgid "Parent %s Tag" msgstr "" #: includes/class-ld-lms.php:983 msgctxt "placeholder: Course" msgid "Parent %s Tag:" msgstr "" #: includes/class-ld-lms.php:984 msgctxt "placeholder: Course" msgid "Edit %s Tag" msgstr "" #: includes/class-ld-lms.php:985 msgctxt "placeholder: Course" msgid "Update %s Tag" msgstr "" #: includes/class-ld-lms.php:986 msgctxt "placeholder: Course" msgid "Add New %s Tag" msgstr "" #: includes/class-ld-lms.php:987 msgctxt "placeholder: Course" msgid "New %s Tag Name" msgstr "" #. translators: placeholder: Lesson. #: includes/class-ld-lms.php:1021 #: includes/class-ld-lms.php:1031 #: includes/settings/settings-sections/class-ld-settings-section-lessons-taxonomies.php:97 msgctxt "placeholder: Lesson" msgid "%s Categories" msgstr "" #: includes/class-ld-lms.php:1022 msgctxt "placeholder: Lesson" msgid "%s Category" msgstr "" #: includes/class-ld-lms.php:1023 msgctxt "placeholder: Lesson" msgid "Search %s Categories" msgstr "" #: includes/class-ld-lms.php:1024 msgctxt "placeholder: Lesson" msgid "All %s Categories" msgstr "" #: includes/class-ld-lms.php:1025 msgctxt "placeholder: Lesson" msgid "Parent %s Category" msgstr "" #: includes/class-ld-lms.php:1026 msgctxt "placeholder: Lesson" msgid "Parent %s Category:" msgstr "" #: includes/class-ld-lms.php:1027 msgctxt "placeholder: Lesson" msgid "Edit %s Category" msgstr "" #: includes/class-ld-lms.php:1028 msgctxt "placeholder: Lesson" msgid "Update %s Category" msgstr "" #: includes/class-ld-lms.php:1029 msgctxt "placeholder: Lesson" msgid "Add New %s Category" msgstr "" #: includes/class-ld-lms.php:1030 msgctxt "placeholder: Lesson" msgid "New %s Category Name" msgstr "" #. translators: placeholder: Lesson. #: includes/class-ld-lms.php:1049 #: includes/class-ld-lms.php:1059 #: includes/settings/settings-sections/class-ld-settings-section-lessons-taxonomies.php:115 msgctxt "placeholder: Lesson" msgid "%s Tags" msgstr "" #: includes/class-ld-lms.php:1050 msgctxt "placeholder: Lesson" msgid "%s Tag" msgstr "" #: includes/class-ld-lms.php:1051 msgctxt "placeholder: Lesson" msgid "Search %s Tag" msgstr "" #: includes/class-ld-lms.php:1052 msgctxt "placeholder: Lesson" msgid "All %s Tags" msgstr "" #: includes/class-ld-lms.php:1053 msgctxt "placeholder: Lesson" msgid "Parent %s Tag" msgstr "" #: includes/class-ld-lms.php:1054 msgctxt "placeholder: Lesson" msgid "Parent %s Tag:" msgstr "" #: includes/class-ld-lms.php:1055 msgctxt "placeholder: Lesson" msgid "Edit %s Tag" msgstr "" #: includes/class-ld-lms.php:1056 msgctxt "placeholder: Lesson" msgid "Update %s Tag" msgstr "" #: includes/class-ld-lms.php:1057 msgctxt "placeholder: Lesson" msgid "Add New %s Tag" msgstr "" #: includes/class-ld-lms.php:1058 msgctxt "placeholder: Lesson" msgid "New %s Tag Name" msgstr "" #. translators: placeholder: Topic. #: includes/class-ld-lms.php:1092 #: includes/class-ld-lms.php:1102 #: includes/settings/settings-sections/class-ld-settings-section-topics-taxonomies.php:97 msgctxt "placeholder: Topic" msgid "%s Categories" msgstr "" #: includes/class-ld-lms.php:1093 msgctxt "placeholder: Topic" msgid "%s Category" msgstr "" #: includes/class-ld-lms.php:1094 msgctxt "placeholder: Topic" msgid "Search %s Categories" msgstr "" #: includes/class-ld-lms.php:1095 msgctxt "placeholder: Topic" msgid "All %s Categories" msgstr "" #: includes/class-ld-lms.php:1096 msgctxt "placeholder: Topic" msgid "Parent %s Category" msgstr "" #: includes/class-ld-lms.php:1097 msgctxt "placeholder: Topic" msgid "Parent %s Category:" msgstr "" #: includes/class-ld-lms.php:1098 msgctxt "placeholder: Topic" msgid "Edit %s Category" msgstr "" #: includes/class-ld-lms.php:1099 msgctxt "placeholder: Topic" msgid "Update %s Category" msgstr "" #: includes/class-ld-lms.php:1100 msgctxt "placeholder: Topic" msgid "Add New %s Category" msgstr "" #: includes/class-ld-lms.php:1101 msgctxt "placeholder: Topic" msgid "New %s Category Name" msgstr "" #. translators: placeholder: Topic. #: includes/class-ld-lms.php:1120 #: includes/class-ld-lms.php:1130 #: includes/settings/settings-sections/class-ld-settings-section-topics-taxonomies.php:115 msgctxt "placeholder: Topic" msgid "%s Tags" msgstr "" #: includes/class-ld-lms.php:1121 msgctxt "placeholder: Topic" msgid "%s Tag" msgstr "" #: includes/class-ld-lms.php:1122 msgctxt "placeholder: Topic" msgid "Search %s Tag" msgstr "" #: includes/class-ld-lms.php:1123 msgctxt "placeholder: Topic" msgid "All %s Tags" msgstr "" #: includes/class-ld-lms.php:1124 msgctxt "placeholder: Topic" msgid "Parent %s Tag" msgstr "" #: includes/class-ld-lms.php:1125 msgctxt "placeholder: Topic" msgid "Parent %s Tag:" msgstr "" #: includes/class-ld-lms.php:1126 msgctxt "placeholder: Topic" msgid "Edit %s Tag" msgstr "" #: includes/class-ld-lms.php:1127 msgctxt "placeholder: Topic" msgid "Update %s Tag" msgstr "" #: includes/class-ld-lms.php:1128 msgctxt "placeholder: Topic" msgid "Add New %s Tag" msgstr "" #: includes/class-ld-lms.php:1129 msgctxt "placeholder: Topic" msgid "New %s Tag Name" msgstr "" #. translators: placeholder: Quiz. #: includes/class-ld-lms.php:1155 #: includes/class-ld-lms.php:1165 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-taxonomies.php:100 msgctxt "placeholder: Quiz" msgid "%s Categories" msgstr "" #: includes/class-ld-lms.php:1156 msgctxt "placeholder: Quiz" msgid "%s Category" msgstr "" #: includes/class-ld-lms.php:1157 msgctxt "placeholder: Quiz" msgid "Search %s Categories" msgstr "" #: includes/class-ld-lms.php:1158 msgctxt "placeholder: Quiz" msgid "All %s Categories" msgstr "" #: includes/class-ld-lms.php:1159 msgctxt "placeholder: Quiz" msgid "Parent %s Category" msgstr "" #: includes/class-ld-lms.php:1160 msgctxt "placeholder: Quiz" msgid "Parent %s Category:" msgstr "" #: includes/class-ld-lms.php:1161 msgctxt "placeholder: Quiz" msgid "Edit %s Category" msgstr "" #: includes/class-ld-lms.php:1162 msgctxt "placeholder: Quiz" msgid "Update %s Category" msgstr "" #: includes/class-ld-lms.php:1163 msgctxt "placeholder: Quiz" msgid "Add New %s Category" msgstr "" #: includes/class-ld-lms.php:1164 msgctxt "placeholder: Quiz" msgid "New %s Category Name" msgstr "" #. translators: placeholder: Quiz. #: includes/class-ld-lms.php:1183 #: includes/class-ld-lms.php:1193 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-taxonomies.php:118 msgctxt "placeholder: Quiz" msgid "%s Tags" msgstr "" #: includes/class-ld-lms.php:1184 msgctxt "placeholder: Quiz" msgid "%s Tag" msgstr "" #: includes/class-ld-lms.php:1185 msgctxt "placeholder: Quiz" msgid "Search %s Tag" msgstr "" #: includes/class-ld-lms.php:1186 msgctxt "placeholder: Quiz" msgid "All %s Tags" msgstr "" #: includes/class-ld-lms.php:1187 msgctxt "placeholder: Quiz" msgid "Parent %s Tag" msgstr "" #: includes/class-ld-lms.php:1188 msgctxt "placeholder: Quiz" msgid "Parent %s Tag:" msgstr "" #: includes/class-ld-lms.php:1189 msgctxt "placeholder: Quiz" msgid "Edit %s Tag" msgstr "" #: includes/class-ld-lms.php:1190 msgctxt "placeholder: Quiz" msgid "Update %s Tag" msgstr "" #: includes/class-ld-lms.php:1191 msgctxt "placeholder: Quiz" msgid "Add New %s Tag" msgstr "" #: includes/class-ld-lms.php:1192 msgctxt "placeholder: Quiz" msgid "New %s Tag Name" msgstr "" #. translators: placeholder: Question. #: includes/class-ld-lms.php:1226 #: includes/class-ld-lms.php:1236 #: includes/settings/settings-sections/class-ld-settings-section-questions-taxonomies.php:187 msgctxt "placeholder: Question" msgid "%s Categories" msgstr "" #: includes/class-ld-lms.php:1228 msgctxt "placeholder: Question" msgid "Search %s Categories" msgstr "" #: includes/class-ld-lms.php:1229 msgctxt "placeholder: Question" msgid "All %s Categories" msgstr "" #: includes/class-ld-lms.php:1230 msgctxt "placeholder: Question" msgid "Parent %s Category" msgstr "" #: includes/class-ld-lms.php:1231 msgctxt "placeholder: Question" msgid "Parent %s Category:" msgstr "" #: includes/class-ld-lms.php:1232 msgctxt "placeholder: Question" msgid "Edit %s Category" msgstr "" #: includes/class-ld-lms.php:1233 msgctxt "placeholder: Question" msgid "Update %s Category" msgstr "" #: includes/class-ld-lms.php:1234 msgctxt "placeholder: Question" msgid "Add New %s Category" msgstr "" #: includes/class-ld-lms.php:1235 msgctxt "placeholder: Question" msgid "New %s Category Name" msgstr "" #: includes/class-ld-lms.php:1254 #: includes/class-ld-lms.php:1264 msgctxt "placeholder: Question" msgid "%s Tags" msgstr "" #: includes/class-ld-lms.php:1255 msgctxt "placeholder: Question" msgid "%s Tag" msgstr "" #: includes/class-ld-lms.php:1256 msgctxt "placeholder: Question" msgid "Search %s Tag" msgstr "" #: includes/class-ld-lms.php:1257 msgctxt "placeholder: Question" msgid "All %s Tags" msgstr "" #: includes/class-ld-lms.php:1258 msgctxt "placeholder: Question" msgid "Parent %s Tag" msgstr "" #: includes/class-ld-lms.php:1259 msgctxt "placeholder: Question" msgid "Parent %s Tag:" msgstr "" #: includes/class-ld-lms.php:1260 msgctxt "placeholder: Question" msgid "Edit %s Tag" msgstr "" #: includes/class-ld-lms.php:1261 msgctxt "placeholder: Question" msgid "Update %s Tag" msgstr "" #: includes/class-ld-lms.php:1262 msgctxt "placeholder: Question" msgid "Add New %s Tag" msgstr "" #: includes/class-ld-lms.php:1263 msgctxt "placeholder: Question" msgid "New %s Tag Name" msgstr "" #. translators: placeholder: Course. #: includes/class-ld-lms.php:1308 msgctxt "placeholder: Course" msgid "LearnDash %s Settings" msgstr "" #. translators: Course Materials Label. #: includes/class-ld-lms.php:1313 #: themes/legacy/templates/course.php:102 msgctxt "Course Materials Label" msgid "%s Materials" msgstr "" #: includes/class-ld-lms.php:1315 msgctxt "Options for course materials" msgid "Options for %s materials" msgstr "" #: includes/class-ld-lms.php:1324 msgctxt "Course Price Type Label" msgid "%s Price Type" msgstr "" #: includes/class-ld-lms.php:1327 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:287 msgid "Open" msgstr "" #: includes/class-ld-lms.php:1328 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:329 #: themes/ld30/templates/modules/infobar/course.php:130 msgid "Closed" msgstr "" #: includes/class-ld-lms.php:1329 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:295 #: themes/ld30/templates/modules/infobar/course.php:130 msgid "Free" msgstr "" #: includes/class-ld-lms.php:1330 msgid "Buy Now" msgstr "" #: includes/class-ld-lms.php:1331 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:316 msgid "Recurring" msgstr "" #: includes/class-ld-lms.php:1334 msgid "Is it open to all, free join, one time purchase, or a recurring subscription?" msgstr "" #: includes/class-ld-lms.php:1351 msgid "Custom Button Label" msgstr "" #: includes/class-ld-lms.php:1353 #: includes/class-ld-lms.php:1359 msgid "Optional" msgstr "" #: includes/class-ld-lms.php:1357 msgid "Custom Button URL" msgstr "" #: includes/class-ld-lms.php:1360 msgctxt "placeholders: \"Take This Course\" button label" msgid "Entering a URL in this field will enable the \"%s\" button. The button will not display if this field is left empty. Relative URL beginning with a slash is acceptable." msgstr "" #: includes/class-ld-lms.php:1364 msgctxt "Course Price Label" msgid "%s Price" msgstr "" #: includes/class-ld-lms.php:1366 msgctxt "Enter course price here. Leave empty if the course is free." msgid "Enter %s price here. Leave empty if the %s is free." msgstr "" #: includes/class-ld-lms.php:1370 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:223 msgid "Billing Cycle" msgstr "" #: includes/class-ld-lms.php:1373 msgid "Billing Cycle for the recurring payments in case of a subscription." msgstr "" #: includes/class-ld-lms.php:1377 msgctxt "Course Access List Label" msgid "%s Access List" msgstr "" #: includes/class-ld-lms.php:1379 msgid "This field is auto-populated with the UserIDs of those who have access to this course." msgstr "" #: includes/class-ld-lms.php:1383 msgctxt "Sort Lesson By Label" msgid "Sort %s By" msgstr "" #: includes/class-ld-lms.php:1386 #: includes/class-ld-lms.php:1399 #: includes/class-ld-lms.php:1412 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:309 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:323 msgid "Use Default" msgstr "" #: includes/class-ld-lms.php:1392 #: includes/class-ld-lms.php:1404 msgctxt "Choose the sort order of lessons in this course." msgid "Choose the sort order of %1$s in this %2$s." msgstr "" #: includes/class-ld-lms.php:1396 msgctxt "Sort Lesson Direction Label" msgid "Sort %s Direction" msgstr "" #: includes/class-ld-lms.php:1409 msgctxt "placeholder: Lessons" msgid "%s Per Page" msgstr "" #: includes/class-ld-lms.php:1413 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:75 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-management-display.php:350 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-management-display.php:367 msgid "Custom" msgstr "" #: includes/class-ld-lms.php:1416 msgctxt "Choose the per page of lessons in this course." msgid "Choose the per page of %s in this %s." msgstr "" #: includes/class-ld-lms.php:1420 msgctxt "Custom lessons per page" msgid "Custom %s Per Page" msgstr "" #: includes/class-ld-lms.php:1423 msgctxt "Enter lesson per page value. Set to zero for no paging" msgid "Enter %s per page value. Set to zero for no paging" msgstr "" #: includes/class-ld-lms.php:1429 msgctxt "placeholder: Course" msgid "Enable %s Prerequisites" msgstr "" #: includes/class-ld-lms.php:1432 msgid "Leave this field unchecked if prerequisite not used." msgstr "" #: includes/class-ld-lms.php:1442 msgctxt "Course prerequisites Label" msgid "%s Prerequisites" msgstr "" #: includes/class-ld-lms.php:1444 msgctxt "Select one or more course as prerequisites to view this course" msgid "Select one or more %1$s as prerequisites to view this %2$s" msgstr "" #: includes/class-ld-lms.php:1457 msgctxt "Course Prerequisites Compare Label" msgid "%s Prerequisites Compare" msgstr "" #: includes/class-ld-lms.php:1460 msgid "ANY (default) - The student must complete at least one of the prerequisites" msgstr "" #: includes/class-ld-lms.php:1461 msgid "ALL - The student must complete all the prerequisites" msgstr "" #: includes/class-ld-lms.php:1464 msgctxt "pleaceholder: Course" msgid "Select how to compare the selected prerequisite %s." msgstr "" #: includes/class-ld-lms.php:1468 msgctxt "placeholder: Course" msgid "Enable %s Points" msgstr "" #: includes/class-ld-lms.php:1470 msgid "Leave this field unchecked if points not used." msgstr "" #: includes/class-ld-lms.php:1479 msgctxt "Course Points" msgid "%s Points" msgstr "" #: includes/class-ld-lms.php:1483 msgctxt "placeholder: course" msgid "Enter the number of points a user will receive for this %s." msgstr "" #: includes/class-ld-lms.php:1487 msgctxt "Course Points Access" msgid "%s Points Access" msgstr "" #: includes/class-ld-lms.php:1491 msgctxt "placeholder: course" msgid "Enter the number of points a user must have to access this %s." msgstr "" #: includes/class-ld-lms.php:1495 msgctxt "Disable Lesson Progression Label" msgid "Disable %s Progression" msgstr "" #: includes/class-ld-lms.php:1498 msgctxt "Disable the feature that allows attempting lessons only in allowed order." msgid "Disable the feature that allows attempting %s only in allowed order." msgstr "" #: includes/class-ld-lms.php:1502 msgid "Expire Access" msgstr "" #: includes/class-ld-lms.php:1504 msgid "Leave this field unchecked if access never expires." msgstr "" #: includes/class-ld-lms.php:1508 msgid "Expire Access After (days)" msgstr "" #: includes/class-ld-lms.php:1511 msgctxt "Enter the number of days a user has access to this course." msgid "Enter the number of days a user has access to this %s." msgstr "" #: includes/class-ld-lms.php:1515 msgctxt "Delete Course and Quiz Data After Expiration Label" msgid "Delete %1$s and %2$s Data After Expiration" msgstr "" #: includes/class-ld-lms.php:1517 msgctxt "placeholder: course" msgid "Select this option if you want the user's %s progress to be deleted when their access expires." msgstr "" #: includes/class-ld-lms.php:1521 msgctxt "Hide Course Content Table Label" msgid "Hide %s Content Table" msgstr "" #: includes/class-ld-lms.php:1524 msgctxt "Hide Course Content table when user is not enrolled." msgid "Hide %s Content table when user is not enrolled." msgstr "" #: includes/class-ld-lms.php:1529 #: includes/class-ld-lms.php:1955 msgid "Associated Certificate" msgstr "" #: includes/class-ld-lms.php:1531 msgctxt "Select a certificate to be awarded upon course completion (optional)." msgid "Select a certificate to be awarded upon %s completion (optional)." msgstr "" #. translators: placeholder: Lesson. #: includes/class-ld-lms.php:1560 msgctxt "placeholder: Lesson" msgid "LearnDash %s Settings" msgstr "" #: includes/class-ld-lms.php:1565 #: themes/legacy/templates/lesson.php:64 msgctxt "Lesson Materials Label" msgid "%s Materials" msgstr "" #: includes/class-ld-lms.php:1567 msgctxt "Options for lesson materials" msgid "Options for %s materials" msgstr "" #. translators: Associated Course Label. #. translators: placeholders: course. #: includes/class-ld-lms.php:1576 #: includes/class-ld-lms.php:1755 #: includes/class-ld-lms.php:1941 #: includes/ld-assignment-uploads.php:1040 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-access-settings.php:226 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-access-settings.php:148 msgctxt "Associated Course Label" msgid "Associated %s" msgstr "" #: includes/class-ld-lms.php:1579 msgctxt "Associate this lesson with a course." msgid "Associate this %1$s with a %2$s." msgstr "" #. translators: Forced Lesson Timer Label. #: includes/class-ld-lms.php:1585 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:562 msgctxt "Forced Lesson Timer Label" msgid "Forced %s Timer" msgstr "" #: includes/class-ld-lms.php:1587 msgctxt "placeholder: Lesson" msgid "Minimum time a user has to spend on %s page before it can be marked complete. Examples: 40 (for 40 seconds), 20s, 45sec, 2m 30s, 2min 30sec, 1h 5m 10s, 1hr 5min 10sec" msgstr "" #: includes/class-ld-lms.php:1592 #: includes/class-ld-lms.php:1780 #: themes/ld30/templates/assignment/upload.php:79 #: themes/legacy/templates/learndash_lesson_assignment_upload_form.php:51 msgid "Upload Assignment" msgstr "" #: includes/class-ld-lms.php:1594 #: includes/class-ld-lms.php:1782 msgid "Check this if you want to make it mandatory to upload assignment" msgstr "" #: includes/class-ld-lms.php:1599 #: includes/class-ld-lms.php:1787 msgid "Auto Approve Assignment" msgstr "" #: includes/class-ld-lms.php:1601 #: includes/class-ld-lms.php:1789 msgid "Check this if you want to auto-approve the uploaded assignment" msgstr "" #: includes/class-ld-lms.php:1606 #: includes/class-ld-lms.php:1794 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:291 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:283 msgid "Limit number of uploaded files" msgstr "" #: includes/class-ld-lms.php:1608 #: includes/class-ld-lms.php:1796 msgid "Default is 1" msgstr "" #: includes/class-ld-lms.php:1609 #: includes/class-ld-lms.php:1797 msgid "Enter the maximum number of assignment uploads allowed. Default is 1. Use 0 to unlimited." msgstr "" #: includes/class-ld-lms.php:1616 #: includes/class-ld-lms.php:1618 #: includes/class-ld-lms.php:1804 #: includes/class-ld-lms.php:1806 msgid "Allow Student to Delete own Assignment(s)" msgstr "" #: includes/class-ld-lms.php:1624 #: includes/class-ld-lms.php:1811 msgid "Award Points for Assignment" msgstr "" #: includes/class-ld-lms.php:1626 #: includes/class-ld-lms.php:1813 msgid "Allow this assignment to be assigned points when it is approved." msgstr "" #: includes/class-ld-lms.php:1631 #: includes/class-ld-lms.php:1818 msgid "Set Number of Points for Assignment" msgstr "" #: includes/class-ld-lms.php:1634 #: includes/class-ld-lms.php:1821 msgid "Assign the max amount of points someone can earn for this assignment." msgstr "" #: includes/class-ld-lms.php:1639 #: includes/class-ld-lms.php:1827 msgid "Allowed File Extensions" msgstr "" #: includes/class-ld-lms.php:1641 msgid "Example: pdf, xls, zip" msgstr "" #: includes/class-ld-lms.php:1642 msgid "Enter comma-separated list of allowed file extensions: pdf, xls, zip or leave blank for any." msgstr "" #: includes/class-ld-lms.php:1647 #: includes/class-ld-lms.php:1835 msgid "Allowed File Size" msgstr "" #. translators: placeholder: PHP file upload size #: includes/class-ld-lms.php:1649 #: includes/class-ld-lms.php:1837 #: themes/ld30/templates/assignment/upload.php:40 #: themes/legacy/templates/learndash_lesson_assignment_upload_form.php:29 msgctxt "placeholder: PHP file upload size" msgid "Maximum upload file size: %s" msgstr "" #: includes/class-ld-lms.php:1650 #: includes/class-ld-lms.php:1838 msgctxt "placeholder: PHP file upload size" msgid "Enter maximim file upload size. Example: 100KB, 2M, 2MB, 1G. Maximum upload file size: %s" msgstr "" #. translators: placeholder: Lesson. #: includes/class-ld-lms.php:1656 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-access-settings.php:172 msgctxt "placeholder: Lesson" msgid "Sample %s" msgstr "" #: includes/class-ld-lms.php:1658 msgctxt "Check this if you want this lesson and all its topics to be available for free." msgid "Check this if you want this %1$s and all its %2$s to be available for free." msgstr "" #: includes/class-ld-lms.php:1662 msgctxt "Make Lesson Visible X Days After Sign-up" msgid "Make %s visible X Days After Sign-up" msgstr "" #: includes/class-ld-lms.php:1666 msgctxt "Make lesson visible ____ days after sign-up" msgid "Make %s visible ____ days after sign-up" msgstr "" #: includes/class-ld-lms.php:1671 msgctxt "Make Lesson Visible on Specific Date" msgid "Make %s Visible on Specific Date" msgstr "" #: includes/class-ld-lms.php:1674 msgctxt "Set the date that you would like this lesson to become available." msgid "Set the date that you would like this %s to become available." msgstr "" #: includes/class-ld-lms.php:1716 msgctxt "Lesson Topic Label" msgid "%1$s %2$s" msgstr "" #. translators: placeholder: Topic. #: includes/class-ld-lms.php:1738 msgctxt "placeholder: Topic" msgid "LearnDash %s Settings" msgstr "" #: includes/class-ld-lms.php:1743 #: themes/legacy/templates/topic.php:121 msgctxt "Topic Materials Label" msgid "%s Materials" msgstr "" #: includes/class-ld-lms.php:1745 msgctxt "Options for topic materials" msgid "Options for %s materials" msgstr "" #: includes/class-ld-lms.php:1758 msgctxt "placeholders: topic, course" msgid "Associate this %s with a %s." msgstr "" #: includes/class-ld-lms.php:1764 #: includes/class-ld-lms.php:1949 #: includes/ld-assignment-uploads.php:1087 msgctxt "Associated Lesson Label" msgid "Associated %s" msgstr "" #: includes/class-ld-lms.php:1767 msgctxt "Associate this topic with a lesson." msgid "Associate this %1$s with a %2$s." msgstr "" #: includes/class-ld-lms.php:1773 msgctxt "Forced Topic Timer Label" msgid "Forced %s Timer" msgstr "" #: includes/class-ld-lms.php:1775 msgctxt "Minimum time a user has to spend on Topic page Label" msgid "Minimum time a user has to spend on %s page before it can be marked complete. Examples: 40 (for 40 seconds), 20s, 45sec, 2m 30s, 2min 30sec, 1h 5m 10s, 1hr 5min 10sec" msgstr "" #: includes/class-ld-lms.php:1829 msgid "Example: pdf,xls,zip" msgstr "" #: includes/class-ld-lms.php:1830 msgid "Enter comma-separated list of allowed file extensions: pdf,xls,zip or leave blank for any." msgstr "" #. translators: placeholder: Quiz. #: includes/class-ld-lms.php:1904 msgctxt "placeholder: Quiz" msgid "LearnDash %s Settings" msgstr "" #: includes/class-ld-lms.php:1909 #: themes/legacy/templates/quiz.php:76 msgctxt "Quiz Materials Label" msgid "%s Materials" msgstr "" #: includes/class-ld-lms.php:1911 msgctxt "Options for quiz materials" msgid "Options for %s materials" msgstr "" #: includes/class-ld-lms.php:1921 msgid "Repeats" msgstr "" #: includes/class-ld-lms.php:1923 msgctxt "Number of repeats allowed for quiz" msgid "Number of repeats allowed for %s. Blank = unlimited attempts. 0 = 1 attempt, 1 = 2 attempts, etc." msgstr "" #: includes/class-ld-lms.php:1927 msgid "Certificate Threshold" msgstr "" #: includes/class-ld-lms.php:1929 msgid "Minimum score required to award a certificate, between 0 and 1 where 1 = 100%." msgstr "" #: includes/class-ld-lms.php:1934 msgid "Passing Percentage" msgstr "" #: includes/class-ld-lms.php:1936 msgctxt "Passing percentage required to pass the quiz (number only). e.g. 80 for 80%." msgid "Passing percentage required to pass the %s (number only). e.g. 80 for 80%%." msgstr "" #: includes/class-ld-lms.php:1944 msgctxt "Associate this %s with a course." msgid "Associate this %s with a %s." msgstr "" #: includes/class-ld-lms.php:1951 msgctxt "Associate this quiz with a lesson." msgid "Associate this %s with a %s." msgstr "" #: includes/class-ld-lms.php:1957 msgctxt "Optionally associate a quiz with a certificate." msgid "Optionally associate a %s with a certificate." msgstr "" #: includes/class-ld-lms.php:1962 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:744 msgid "Associated Settings" msgstr "" #: includes/class-ld-lms.php:1964 msgctxt "If you imported a quiz, use this field to select it. Otherwise, create new settings below. After saving or publishing, you will be able to add questions." msgid "If you imported a %s, use this field to select it. Otherwise, create new settings below. After saving or publishing, you will be able to add questions." msgstr "" #: includes/class-ld-lms.php:1964 #: includes/gutenberg/blocks/ld-certificate/index.js:148 #: includes/gutenberg/blocks/ld-course-content/index.js:100 #: includes/gutenberg/blocks/ld-course-expire-status/index.js:134 #: includes/gutenberg/blocks/ld-course-info/index.js:352 #: includes/gutenberg/blocks/ld-course-list/index.js:430 #: includes/gutenberg/blocks/ld-course-progress/index.js:105 #: includes/gutenberg/blocks/ld-course-resume/index.js:137 #: includes/gutenberg/blocks/ld-courseinfo/index.js:243 #: includes/gutenberg/blocks/ld-lesson-list/index.js:379 #: includes/gutenberg/blocks/ld-login/index.js:218 #: includes/gutenberg/blocks/ld-payment-buttons/index.js:79 #: includes/gutenberg/blocks/ld-profile/index.js:190 #: includes/gutenberg/blocks/ld-quiz-list/index.js:388 #: includes/gutenberg/blocks/ld-topic-list/index.js:389 #: includes/gutenberg/blocks/ld-user-course-points/index.js:79 #: includes/gutenberg/blocks/ld-user-groups/index.js:78 #: includes/gutenberg/blocks/ld-usermeta/index.js:126 msgid "Preview" msgstr "" #. translators: placeholder: Question #: includes/class-ld-lms.php:2022 msgctxt "placeholder: Question" msgid "LearnDash %s Settings" msgstr "" #: includes/class-ld-lms.php:2027 msgctxt "Associated Quiz Label" msgid "Associated %s" msgstr "" #: includes/class-ld-lms.php:2030 msgctxt "Associate this question with a quiz." msgid "Associate this %1$s with a %2$s." msgstr "" #: includes/class-ld-lms.php:2056 msgctxt "Add New Certificate Label" msgid "Add New" msgstr "" #: includes/class-ld-lms.php:2057 msgctxt "Add New Certificate Label" msgid "Add New %s" msgstr "" #: includes/class-ld-lms.php:2058 msgctxt "Edit Certificate Label" msgid "Edit %s" msgstr "" #: includes/class-ld-lms.php:2059 msgctxt "New Certificate Label" msgid "New %s" msgstr "" #: includes/class-ld-lms.php:2061 msgctxt "View Certificate Label" msgid "View %s" msgstr "" #: includes/class-ld-lms.php:2062 msgctxt "Search Certificate Label" msgid "Search %s" msgstr "" #: includes/class-ld-lms.php:2063 msgctxt "No Certificate found Label" msgid "No %s found" msgstr "" #: includes/class-ld-lms.php:2064 msgctxt "No Certificates found in Trash Label" msgid "No %s found in Trash" msgstr "" #: includes/class-ld-lms.php:2067 msgctxt "Certificate Published" msgid "%s Published" msgstr "" #: includes/class-ld-lms.php:2068 msgctxt "Certificate Published Privately" msgid "%s Published Privately" msgstr "" #: includes/class-ld-lms.php:2069 msgctxt "Certificate Reverted to Draft" msgid "%s Reverted to Draft" msgstr "" #: includes/class-ld-lms.php:2070 msgctxt "Certificate Scheduled" msgid "%s Scheduled" msgstr "" #: includes/class-ld-lms.php:2071 msgctxt "Certificate Updated" msgid "%s Updated" msgstr "" #: includes/class-ld-lms.php:2075 #: includes/settings/settings-pages/class-ld-settings-page-overview.php:1032 #: themes/ld30/templates/shortcodes/profile.php:102 msgid "Certificates" msgstr "" #: includes/class-ld-lms.php:2080 msgid "LearnDash Certificates Options" msgstr "" #: includes/class-ld-lms.php:2100 msgid "Transactions" msgstr "" #: includes/class-ld-lms.php:2104 msgid "LearnDash Transactions Options" msgstr "" #: includes/class-ld-lms.php:2118 msgid "Click the Export button below to export the transaction list." msgstr "" #: includes/class-ld-lms.php:2714 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-access-settings.php:129 msgid "day(s)" msgstr "" #: includes/class-ld-lms.php:2715 msgid "week(s)" msgstr "" #: includes/class-ld-lms.php:2716 msgid "month(s)" msgstr "" #: includes/class-ld-lms.php:2717 msgid "year(s)" msgstr "" #: includes/class-ld-lms.php:2873 #: includes/class-ld-lms.php:2917 #: includes/class-ld-lms.php:3208 #: includes/class-ld-lms.php:3224 msgid "No attempts" msgstr "" #: includes/class-ld-lms.php:2911 #: includes/class-ld-lms.php:2996 #: includes/class-ld-lms.php:3289 #: includes/class-ld-semper-fi-module.php:1722 msgid "Security Check - If you receive this in error, log out and back in to WordPress" msgstr "" #: includes/class-ld-lms.php:2962 msgctxt "Export User Course Data Label" msgid "Export User %s Data »" msgstr "" #: includes/class-ld-lms.php:3264 msgctxt "Export Quiz Data Label" msgid "Export %s Data »" msgstr "" #: includes/class-ld-lms.php:3355 msgid "Export »" msgstr "" #: includes/class-ld-lms.php:3407 #: includes/class-ld-lms.php:3513 #: includes/class-ld-lms.php:4096 msgid "-- Select a Certificate --" msgstr "" #: includes/class-ld-lms.php:3457 #: includes/class-ld-lms.php:4063 #: includes/class-ld-lms.php:4160 #: includes/class-ld-lms.php:4244 #: includes/ld-assignment-uploads.php:1046 msgctxt "Select a Course Label" msgid "-- Select a %s --" msgstr "" #: includes/class-ld-lms.php:3494 msgctxt "Select a Lesson or Topic Label" msgid "-- Select a %s or %s --" msgstr "" #: includes/class-ld-lms.php:3525 msgid "-- Select Settings --" msgstr "" #: includes/class-ld-lms.php:3593 msgctxt "Select a Quiz Label" msgid "-- Select a %s --" msgstr "" #. translators: placeholder: Lesson, Topic Labels. #: includes/class-ld-lms.php:3771 msgctxt "placeholder: Lesson, Topic Labels" msgid "Search or select a %1$s or %2$s…" msgstr "" #. translators: placeholder: Lesson, Topic Labels. #: includes/class-ld-lms.php:3780 msgctxt "placeholder: Lesson, Topic Labels" msgid "Select a %1$s or %2$s" msgstr "" #. translators: placeholder: Lesson Label. #: includes/class-ld-lms.php:3791 msgctxt "placeholder: Lesson Label" msgid "Search or select a %s…" msgstr "" #. translators: placeholder: Lesson Label. #: includes/class-ld-lms.php:3799 msgctxt "placeholder: Lesson Labels" msgid "Select a %s" msgstr "" #. translators: placeholder: Lesson. #: includes/class-ld-lms.php:3915 msgctxt "placeholder: Lesson" msgid "Search or select a %s" msgstr "" #. translators: placeholder: Lesson. #: includes/class-ld-lms.php:3923 msgctxt "placeholder: Lesson" msgid "Select a %s" msgstr "" #: includes/class-ld-lms.php:4282 #: includes/class-ld-semper-fi-module.php:645 #: includes/ld-assignment-uploads.php:1093 msgctxt "Select a Lesson Label" msgid "-- Select a %s --" msgstr "" #: includes/class-ld-semper-fi-module.php:196 msgctxt "placeholder: method name" msgid "Method %s doesn't exist" msgstr "" #: includes/class-ld-semper-fi-module.php:643 msgid "LearnDash Categories" msgstr "" #: includes/class-ld-semper-fi-module.php:644 msgid "Loading..." msgstr "" #: includes/class-ld-semper-fi-module.php:646 msgctxt "Select a Lesson Topic Label" msgid "-- Select a %s or %s --" msgstr "" #: includes/class-ld-semper-fi-module.php:648 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:79 msgid "Valid range is 1 to 90 when the Billing Cycle is set to days." msgstr "" #: includes/class-ld-semper-fi-module.php:649 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:80 msgid "Valid range is 1 to 52 when the Billing Cycle is set to weeks." msgstr "" #: includes/class-ld-semper-fi-module.php:650 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:81 msgid "Valid range is 1 to 24 when the Billing Cycle is set to months." msgstr "" #: includes/class-ld-semper-fi-module.php:651 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:82 msgid "Valid range is 1 to 5 when the Billing Cycle is set to years." msgstr "" #: includes/class-ld-semper-fi-module.php:1186 #: includes/settings/class-ld-settings-fields.php:270 msgid "Required" msgstr "" #: includes/class-ld-semper-fi-module.php:1313 msgid "Upload Image" msgstr "" #: includes/class-ld-semper-fi-module.php:1368 #: includes/settings/settings-fields/class-ld-settings-fields-date-entry.php:70 #: themes/legacy/templates/course_details_admin.php:47 msgid "Month" msgstr "" #. translators: 1: month number (01, 02, etc.), 2: month abbreviation #: includes/class-ld-semper-fi-module.php:1374 #: includes/settings/settings-fields/class-ld-settings-fields-date-entry.php:76 #: themes/legacy/templates/course_details_admin.php:56 msgctxt "placeholder: month number, month text" msgid "%1$s-%2$s" msgstr "" #: includes/class-ld-semper-fi-module.php:1378 #: includes/settings/settings-fields/class-ld-settings-fields-date-entry.php:80 #: themes/legacy/templates/course_details_admin.php:60 msgid "Day" msgstr "" #: includes/class-ld-semper-fi-module.php:1379 #: includes/settings/settings-fields/class-ld-settings-fields-date-entry.php:81 #: themes/legacy/templates/course_details_admin.php:62 msgid "Year" msgstr "" #: includes/class-ld-semper-fi-module.php:1380 #: includes/settings/settings-fields/class-ld-settings-fields-date-entry.php:82 #: includes/settings/settings-fields/class-ld-settings-fields-timer-entry.php:54 #: themes/legacy/templates/course_details_admin.php:64 msgid "Hour" msgstr "" #: includes/class-ld-semper-fi-module.php:1381 #: includes/settings/settings-fields/class-ld-settings-fields-date-entry.php:83 #: includes/settings/settings-fields/class-ld-settings-fields-timer-entry.php:56 #: themes/legacy/templates/course_details_admin.php:66 msgid "Minute" msgstr "" #: includes/class-ld-semper-fi-module.php:1402 msgid " characters. Most search engines use a maximum of %s chars for the %s." msgstr "" #: includes/class-ld-semper-fi-module.php:1466 #: includes/ld-assignment-uploads.php:1040 #: includes/ld-assignment-uploads.php:1087 #: includes/ld-assignment-uploads.php:1117 #: includes/ld-assignment-uploads.php:1139 #: includes/ld-assignment-uploads.php:1170 #: includes/settings/class-ld-settings-fields.php:255 msgid "Click for Help!" msgstr "" #: includes/class-ld-semper-fi-module.php:1726 msgid "Options Reset." msgstr "" #: includes/class-ld-semper-fi-module.php:1743 msgid "Options Updated." msgstr "" #: includes/class-ld-semper-fi-module.php:1883 msgid "Update Options" msgstr "" #: includes/class-ld-semper-fi-module.php:1888 msgid "Reset to Defaults" msgstr "" #. translators: placeholders: Language Name, Language code. #: includes/class-ld-translations.php:237 msgctxt "placeholders: Language Name, Language code" msgid "Translation installed: %1$s (%2$s)" msgstr "" #. translators: placeholders: Language Name, Language code. #: includes/class-ld-translations.php:344 msgctxt "placeholders: Language Name, Language code" msgid "Translation updated: %1$s (%2$s)" msgstr "" #. translators: placeholders: Language Name, Language code. #: includes/class-ld-translations.php:383 msgctxt "placeholders: Language Name, Language code" msgid "Translation removed: %1$s (%2$s)" msgstr "" #: includes/class-ld-translations.php:421 msgid "No translations available for this plugin." msgstr "" #: includes/class-ld-translations.php:501 msgid "Download the original strings (POT) File." msgstr "" #: includes/class-ld-translations.php:503 msgid "Download POT File from your server." msgstr "" #: includes/class-ld-translations.php:503 msgid "POT" msgstr "" #: includes/class-ld-translations.php:510 msgid "Installed Translations" msgstr "" #: includes/class-ld-translations.php:513 msgid "Locale" msgstr "" #: includes/class-ld-translations.php:514 msgid "Name / Native" msgstr "" #: includes/class-ld-translations.php:515 #: includes/ld-assignment-uploads.php:817 #: includes/ld-assignment-uploads.php:1177 #: includes/quiz/ld-quiz-essays.php:500 #: themes/legacy/templates/learndash_lesson_assignment_uploads_list.php:57 msgid "Download" msgstr "" #: includes/class-ld-translations.php:545 msgid "No Translations installed" msgstr "" #. translators: placeholder: Language directory. #: includes/class-ld-translations.php:555 msgctxt "placeholder: Language directory" msgid "All translations are stored into the directory: %s" msgstr "" #: includes/class-ld-translations.php:562 msgid "The language directory is not writable" msgstr "" #: includes/class-ld-translations.php:587 msgid "Not from LearnDash" msgstr "" #: includes/class-ld-translations.php:595 msgid "Download PO File from your server." msgstr "" #: includes/class-ld-translations.php:595 msgid "PO" msgstr "" #: includes/class-ld-translations.php:601 msgid "Remove translation from server" msgstr "" #: includes/class-ld-translations.php:607 msgid "Update translation from LearnDash" msgstr "" #: includes/class-ld-translations.php:607 #: includes/ld-assignment-uploads.php:1149 #: includes/quiz/ld-quiz-essays.php:1009 #: includes/quiz/ld-quiz-essays.php:1010 #: includes/settings/settings-sections/class-ld-settings-section-questions-management-display.php:103 #: includes/settings/settings-sections/class-ld-settings-section-questions-taxonomies.php:217 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-management-display.php:413 msgid "Update" msgstr "" #: includes/class-ld-translations.php:661 msgid "Available Translations" msgstr "" #: includes/class-ld-translations.php:663 msgid "-- Install Translation --" msgstr "" #: includes/class-ld-translations.php:672 msgid "Recommended" msgstr "" #: includes/class-ld-translations.php:690 msgid "Available" msgstr "" #: includes/class-ld-translations.php:706 msgid "Install" msgstr "" #: includes/course/ld-course-functions.php:458 msgctxt "Your access to this course has expired." msgid "Your access to this %s has expired." msgstr "" #: includes/course/ld-course-info-widget.php:25 msgctxt "placeholders: course" msgid "LearnDash - %s attempt and score information of users. Visible only to users logged in." msgstr "" #: includes/course/ld-course-info-widget.php:28 msgctxt "Course Information" msgid "%s Information" msgstr "" #: includes/course/ld-course-info-widget.php:191 #: themes/ld30/includes/helpers.php:1257 msgid "Registered show thumbnail:" msgstr "" #: includes/course/ld-course-info-widget.php:193 #: includes/settings/shortcodes-sections/course_complete.php:88 #: includes/settings/shortcodes-sections/course_inprogress.php:60 #: includes/settings/shortcodes-sections/course_notstarted.php:60 #: includes/settings/shortcodes-sections/ld_course_expire_status.php:71 #: includes/settings/shortcodes-sections/ld_course_info.php:36 #: includes/settings/shortcodes-sections/ld_course_list.php:94 #: includes/settings/shortcodes-sections/ld_course_list.php:106 #: includes/settings/shortcodes-sections/ld_course_resume.php:71 #: includes/settings/shortcodes-sections/ld_group.php:53 #: includes/settings/shortcodes-sections/ld_lesson_list.php:76 #: includes/settings/shortcodes-sections/ld_lesson_list.php:88 #: includes/settings/shortcodes-sections/ld_quiz_complete.php:89 #: includes/settings/shortcodes-sections/ld_quiz_list.php:122 #: includes/settings/shortcodes-sections/ld_quiz_list.php:134 #: includes/settings/shortcodes-sections/ld_topic_list.php:86 #: includes/settings/shortcodes-sections/ld_topic_list.php:98 #: includes/settings/shortcodes-sections/student.php:53 #: includes/settings/shortcodes-sections/visitor.php:44 #: themes/ld30/includes/helpers.php:1259 msgid "Yes (default)" msgstr "" #: includes/course/ld-course-info-widget.php:194 #: includes/lib/wp-pro-quiz/lib/model/WpProQuiz_Model_Form.php:100 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:729 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:734 #: includes/quiz/ld-quiz-info-shortcode.php:110 #: includes/settings/settings-sections/class-ld-settings-section-support-database-tables.php:110 #: includes/settings/settings-sections/class-ld-settings-section-support-learndash.php:153 #: includes/settings/settings-sections/class-ld-settings-section-support-learndash.php:344 #: includes/settings/settings-sections/class-ld-settings-section-support-learndash.php:354 #: includes/settings/settings-sections/class-ld-settings-section-support-learndash.php:361 #: includes/settings/settings-sections/class-ld-settings-section-support-learndash.php:372 #: includes/settings/settings-sections/class-ld-settings-section-support-learndash.php:383 #: includes/settings/settings-sections/class-ld-settings-section-support-learndash.php:389 #: includes/settings/settings-sections/class-ld-settings-section-support-learndash.php:437 #: includes/settings/settings-sections/class-ld-settings-section-support-learndash.php:449 #: includes/settings/settings-sections/class-ld-settings-section-support-server.php:166 #: includes/settings/settings-sections/class-ld-settings-section-support-server.php:217 #: includes/settings/settings-sections/class-ld-settings-section-support-wordpress.php:100 #: includes/settings/settings-sections/class-ld-settings-section-support-wordpress.php:113 #: includes/settings/settings-sections/class-ld-settings-section-support-wordpress.php:126 #: includes/settings/shortcodes-sections/course_complete.php:89 #: includes/settings/shortcodes-sections/course_inprogress.php:61 #: includes/settings/shortcodes-sections/course_notstarted.php:61 #: includes/settings/shortcodes-sections/ld_course_expire_status.php:72 #: includes/settings/shortcodes-sections/ld_course_info.php:37 #: includes/settings/shortcodes-sections/ld_course_list.php:95 #: includes/settings/shortcodes-sections/ld_course_list.php:107 #: includes/settings/shortcodes-sections/ld_course_resume.php:72 #: includes/settings/shortcodes-sections/ld_group.php:54 #: includes/settings/shortcodes-sections/ld_lesson_list.php:77 #: includes/settings/shortcodes-sections/ld_lesson_list.php:89 #: includes/settings/shortcodes-sections/ld_profile.php:69 #: includes/settings/shortcodes-sections/ld_profile.php:85 #: includes/settings/shortcodes-sections/ld_profile.php:99 #: includes/settings/shortcodes-sections/ld_profile.php:111 #: includes/settings/shortcodes-sections/ld_profile.php:123 #: includes/settings/shortcodes-sections/ld_profile.php:137 #: includes/settings/shortcodes-sections/ld_quiz_complete.php:90 #: includes/settings/shortcodes-sections/ld_quiz_list.php:123 #: includes/settings/shortcodes-sections/ld_quiz_list.php:135 #: includes/settings/shortcodes-sections/ld_topic_list.php:87 #: includes/settings/shortcodes-sections/ld_topic_list.php:99 #: includes/settings/shortcodes-sections/student.php:54 #: includes/settings/shortcodes-sections/visitor.php:45 #: themes/ld30/includes/helpers.php:1260 #: includes/gutenberg/blocks/ld-course-resume/index.js:115 msgid "No" msgstr "" #: includes/course/ld-course-info-widget.php:199 #: themes/ld30/includes/helpers.php:1265 msgid "Registered per page:" msgstr "" #. translators: placeholders: Default amount shown per page #: includes/course/ld-course-info-widget.php:201 #: includes/course/ld-course-info-widget.php:225 #: includes/course/ld-course-info-widget.php:247 #: themes/ld30/includes/helpers.php:1271 msgctxt "placeholders: default per page" msgid "Default is %d. Set to zero for no pagination." msgstr "" #: includes/course/ld-course-info-widget.php:205 #: themes/ld30/includes/helpers.php:1279 msgid "Registered order by:" msgstr "" #: includes/course/ld-course-info-widget.php:207 #: includes/course/ld-course-info-widget.php:230 #: includes/settings/shortcodes-sections/ld_course_info.php:62 #: includes/settings/shortcodes-sections/ld_course_info.php:102 #: themes/ld30/includes/helpers.php:1281 msgid "Title (default) - Order by post title" msgstr "" #: includes/course/ld-course-info-widget.php:208 #: includes/course/ld-course-info-widget.php:231 #: includes/course/ld-course-info-widget.php:254 #: includes/settings/shortcodes-sections/ld_course_info.php:63 #: includes/settings/shortcodes-sections/ld_course_info.php:103 #: includes/settings/shortcodes-sections/ld_course_info.php:145 #: themes/ld30/includes/helpers.php:1282 msgid "ID - Order by post id" msgstr "" #: includes/course/ld-course-info-widget.php:209 #: includes/course/ld-course-info-widget.php:232 #: includes/course/ld-course-info-widget.php:255 #: includes/settings/shortcodes-sections/ld_course_info.php:64 #: includes/settings/shortcodes-sections/ld_course_info.php:104 #: includes/settings/shortcodes-sections/ld_course_info.php:146 #: includes/settings/shortcodes-sections/ld_course_list.php:28 #: includes/settings/shortcodes-sections/ld_lesson_list.php:38 #: includes/settings/shortcodes-sections/ld_profile.php:43 #: includes/settings/shortcodes-sections/ld_quiz_list.php:84 #: includes/settings/shortcodes-sections/ld_topic_list.php:48 #: themes/ld30/includes/helpers.php:1283 #: includes/gutenberg/blocks/ld-course-info/index.js:193 #: includes/gutenberg/blocks/ld-course-info/index.js:252 #: includes/gutenberg/blocks/ld-course-info/index.js:314 #: includes/gutenberg/blocks/ld-course-list/index.js:222 #: includes/gutenberg/blocks/ld-lesson-list/index.js:214 #: includes/gutenberg/blocks/ld-profile/index.js:131 #: includes/gutenberg/blocks/ld-quiz-list/index.js:223 #: includes/gutenberg/blocks/ld-topic-list/index.js:224 msgid "Date - Order by post date" msgstr "" #: includes/course/ld-course-info-widget.php:210 #: includes/course/ld-course-info-widget.php:233 #: includes/course/ld-course-info-widget.php:256 #: includes/settings/shortcodes-sections/ld_course_info.php:65 #: includes/settings/shortcodes-sections/ld_course_info.php:105 #: includes/settings/shortcodes-sections/ld_course_info.php:147 #: includes/settings/shortcodes-sections/ld_course_list.php:29 #: includes/settings/shortcodes-sections/ld_lesson_list.php:39 #: includes/settings/shortcodes-sections/ld_profile.php:44 #: includes/settings/shortcodes-sections/ld_quiz_list.php:85 #: includes/settings/shortcodes-sections/ld_topic_list.php:49 #: themes/ld30/includes/helpers.php:1284 #: includes/gutenberg/blocks/ld-course-info/index.js:197 #: includes/gutenberg/blocks/ld-course-info/index.js:256 #: includes/gutenberg/blocks/ld-course-info/index.js:318 #: includes/gutenberg/blocks/ld-course-list/index.js:226 #: includes/gutenberg/blocks/ld-lesson-list/index.js:218 #: includes/gutenberg/blocks/ld-profile/index.js:135 #: includes/gutenberg/blocks/ld-quiz-list/index.js:227 #: includes/gutenberg/blocks/ld-topic-list/index.js:228 msgid "Menu - Order by Page Order Value" msgstr "" #: includes/course/ld-course-info-widget.php:214 #: themes/ld30/includes/helpers.php:1288 msgid "Registered order:" msgstr "" #: includes/course/ld-course-info-widget.php:216 #: includes/course/ld-course-info-widget.php:239 #: includes/settings/shortcodes-sections/ld_course_info.php:76 #: includes/settings/shortcodes-sections/ld_course_info.php:116 #: themes/ld30/includes/helpers.php:1290 msgid "ASC (default) - lowest to highest values" msgstr "" #: includes/course/ld-course-info-widget.php:217 #: includes/course/ld-course-info-widget.php:240 #: includes/settings/shortcodes-sections/ld_course_info.php:77 #: includes/settings/shortcodes-sections/ld_course_info.php:117 #: includes/settings/shortcodes-sections/ld_lesson_list.php:51 #: includes/settings/shortcodes-sections/ld_quiz_list.php:97 #: includes/settings/shortcodes-sections/ld_topic_list.php:61 #: themes/ld30/includes/helpers.php:1291 msgid "DESC - highest to lowest values" msgstr "" #: includes/course/ld-course-info-widget.php:223 msgctxt "placeholder: course" msgid "%s progress per page:" msgstr "" #: includes/course/ld-course-info-widget.php:228 msgid "Progress order by:" msgstr "" #: includes/course/ld-course-info-widget.php:237 msgid "Progress order:" msgstr "" #: includes/course/ld-course-info-widget.php:245 msgctxt "placeholder: quizzes" msgid "%s per page:" msgstr "" #: includes/course/ld-course-info-widget.php:250 msgctxt "placeholder: quizzes" msgid "%s order by:" msgstr "" #: includes/course/ld-course-info-widget.php:252 #: includes/settings/shortcodes-sections/ld_course_info.php:143 #: includes/gutenberg/blocks/ld-course-info/index.js:303 msgid "Date Taken (default) - Order by date taken" msgstr "" #: includes/course/ld-course-info-widget.php:253 #: includes/settings/shortcodes-sections/ld_course_info.php:144 #: includes/settings/shortcodes-sections/ld_course_list.php:27 #: includes/settings/shortcodes-sections/ld_lesson_list.php:37 #: includes/settings/shortcodes-sections/ld_profile.php:42 #: includes/settings/shortcodes-sections/ld_quiz_list.php:83 #: includes/settings/shortcodes-sections/ld_topic_list.php:47 #: includes/gutenberg/blocks/ld-course-info/index.js:189 #: includes/gutenberg/blocks/ld-course-info/index.js:248 #: includes/gutenberg/blocks/ld-course-info/index.js:307 #: includes/gutenberg/blocks/ld-course-list/index.js:218 #: includes/gutenberg/blocks/ld-lesson-list/index.js:210 #: includes/gutenberg/blocks/ld-profile/index.js:127 #: includes/gutenberg/blocks/ld-quiz-list/index.js:219 #: includes/gutenberg/blocks/ld-topic-list/index.js:220 msgid "Title - Order by post title" msgstr "" #: includes/course/ld-course-info-widget.php:260 msgctxt "placeholder: quizzes" msgid "%s order:" msgstr "" #: includes/course/ld-course-info-widget.php:262 #: includes/settings/shortcodes-sections/ld_course_info.php:158 msgid "DESC (default) - highest to lowest values" msgstr "" #: includes/course/ld-course-info-widget.php:263 #: includes/settings/shortcodes-sections/ld_course_info.php:159 #: includes/settings/shortcodes-sections/ld_course_list.php:41 #: includes/settings/shortcodes-sections/ld_lesson_list.php:52 #: includes/settings/shortcodes-sections/ld_profile.php:56 #: includes/settings/shortcodes-sections/ld_quiz_list.php:98 #: includes/settings/shortcodes-sections/ld_topic_list.php:62 #: includes/gutenberg/blocks/ld-course-info/index.js:213 #: includes/gutenberg/blocks/ld-course-info/index.js:272 #: includes/gutenberg/blocks/ld-course-info/index.js:334 #: includes/gutenberg/blocks/ld-course-list/index.js:242 #: includes/gutenberg/blocks/ld-lesson-list/index.js:234 #: includes/gutenberg/blocks/ld-profile/index.js:151 #: includes/gutenberg/blocks/ld-quiz-list/index.js:243 #: includes/gutenberg/blocks/ld-topic-list/index.js:244 msgid "ASC - lowest to highest values" msgstr "" #: includes/course/ld-course-info-widget.php:284 msgctxt "LearnDash - Course Navigation. Shows lessons and topics on the current course." msgid "LearnDash - %s Navigation. Shows lessons and topics on the current course." msgstr "" #: includes/course/ld-course-info-widget.php:287 msgctxt "Course Navigation Label" msgid "%s Navigation" msgstr "" #: includes/course/ld-course-info-widget.php:443 msgctxt "Show Course Quizzes?" msgid "Show %1$s %2$s?" msgstr "" #: includes/course/ld-course-info-widget.php:447 msgctxt "Show Lesson Quizzes" msgid "Show %1$s %2$s?" msgstr "" #: includes/course/ld-course-info-widget.php:451 msgctxt "Show Topic Quizzes?" msgid "Show %1$s %2$s?" msgstr "" #. translators: placeholders: Course. #: includes/course/ld-course-info-widget.php:742 msgctxt "placeholder: Course" msgid "No associated %s" msgstr "" #: includes/course/ld-course-list-shortcode.php:916 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1261 #: themes/ld30/templates/shortcodes/course-listing.php:865 #: themes/legacy/templates/quiz_result_categories_email.php:15 msgid "Categories" msgstr "" #: includes/course/ld-course-list-shortcode.php:918 #: themes/ld30/templates/shortcodes/course-listing.php:867 msgid "Select category" msgstr "" #. translators: placeholder Category label #: includes/course/ld-course-list-shortcode.php:947 #: themes/ld30/templates/shortcodes/course-listing.php:898 msgctxt "placeholder: LD Category label" msgid "Select %s" msgstr "" #: includes/course/ld-course-list-shortcode.php:1583 #: includes/course/ld-course-progress.php:1420 #: includes/settings/shortcodes-sections/ld_course_list.php:80 #: sfwd_lms.php:552 #: includes/gutenberg/blocks/ld-course-list/index.js:284 msgid "Not Started" msgstr "" #: includes/course/ld-course-list-shortcode.php:1615 msgctxt "Course access will expire on:" msgid "%s access will expire on:" msgstr "" #: includes/course/ld-course-list-shortcode.php:1616 msgctxt "Course access expired on:" msgid "%s access expired on:" msgstr "" #. translators: placeholder: completed steps, total steps. #: includes/course/ld-course-progress.php:1550 #: themes/legacy/templates/course_progress_widget.php:11 #: themes/legacy/templates/profile.php:125 msgctxt "placeholder: completed steps, total steps" msgid "%1$d out of %2$d steps completed" msgstr "" #: includes/course/ld-course-progress.php:2005 msgctxt "placeholders: course" msgid "LearnDash %s progress bar" msgstr "" #: includes/course/ld-course-progress.php:2008 msgctxt "Course Progress Bar Label" msgid "%s Progress Bar" msgstr "" #: includes/course/ld-course-video.php:44 #: includes/course/ld-course-video.php:106 msgid "Enable Video Progression" msgstr "" #: includes/course/ld-course-video.php:46 #: includes/course/ld-course-video.php:108 msgid "Check this if you want to show a video as part of the progression." msgstr "" #: includes/course/ld-course-video.php:50 #: includes/course/ld-course-video.php:112 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:390 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:382 msgid "Video URL" msgstr "" #: includes/course/ld-course-video.php:52 msgctxt "placeholder: Lesson, admin URL to [ld_video] shortcode." msgid "URL to video. The video will be added above the %s content. Use the shortcode %s to position the player within content. Supported URL formats are YouTube (youtu.be, youtube.com), Vimeo (vimeo.com), Wistia (wistia.com), or Local videos. The value for this field can be a simple URL to the video, an iframe or either [video] or [embed] shortcodes." msgstr "" #: includes/course/ld-course-video.php:56 #: includes/course/ld-course-video.php:118 msgid "Auto Start Video" msgstr "" #: includes/course/ld-course-video.php:58 #: includes/course/ld-course-video.php:120 msgid "Check this if you want the video to auto-start on page load." msgstr "" #: includes/course/ld-course-video.php:62 #: includes/course/ld-course-video.php:124 msgid "Show Video Controls" msgstr "" #: includes/course/ld-course-video.php:64 #: includes/course/ld-course-video.php:126 msgid "Show Video Controls. By default controls are disabled. Only used for YouTube and local videos." msgstr "" #: includes/course/ld-course-video.php:68 #: includes/course/ld-course-video.php:130 msgid "When to show video" msgstr "" #: includes/course/ld-course-video.php:71 msgid "Before (default) - Video is shown before completing sub-steps" msgstr "" #: includes/course/ld-course-video.php:72 msgid "After - Video is shown after completing sub-steps" msgstr "" #: includes/course/ld-course-video.php:75 #: includes/course/ld-course-video.php:137 msgid "Select when to show video in relation to sub-steps." msgstr "" #: includes/course/ld-course-video.php:78 msgctxt "placeholder: Lesson" msgid "Auto Complete %s" msgstr "" #: includes/course/ld-course-video.php:80 msgctxt "placeholder: Lesson" msgid "Check this if you want the %s to auto-complete after the video completes." msgstr "" #: includes/course/ld-course-video.php:84 #: includes/course/ld-course-video.php:147 msgid "Auto Complete Delay" msgstr "" #: includes/course/ld-course-video.php:88 #: includes/course/ld-course-video.php:151 msgid "Time delay in second between the time the video finishes and the auto complete occurs. Example 0 no delay, 5 for five seconds." msgstr "" #: includes/course/ld-course-video.php:92 #: includes/course/ld-course-video.php:155 msgid "Hide Complete Button" msgstr "" #: includes/course/ld-course-video.php:94 #: includes/course/ld-course-video.php:157 msgid "Check this to hide the complete button." msgstr "" #: includes/course/ld-course-video.php:114 msgctxt "placeholder: Topic, admin URL to [ld_video] shortcode." msgid "URL to video. The video will be added above the %s content. Use the shortcode %s to position the player within content. Supported URL formats are YouTube (youtu.be, youtube.com), Vimeo (vimeo.com), Wistia (wistia.com), or Local videos. The value for this field can be a simple URL to the video, an iframe or either [video] or [embed] shortcodes." msgstr "" #: includes/course/ld-course-video.php:133 msgid "After (default) - Video is shown after completing sub-steps" msgstr "" #: includes/course/ld-course-video.php:134 msgid "Before - Video is shown before completing sub-steps" msgstr "" #: includes/course/ld-course-video.php:141 msgctxt "placeholder: Topic" msgid "Auto Complete %s" msgstr "" #: includes/course/ld-course-video.php:143 msgctxt "placeholder: Topic" msgid "Check this if you want the %s to auto-complete after the video completes." msgstr "" #: includes/course/ld-course-video.php:541 msgctxt "placeholders: 1. Lesson or Topic label, 2. span for counter" msgid "

%s will auto complete in %s seconds

" msgstr "" #. translators: placeholder: Course, Quiz, Course. #: includes/gutenberg/blocks/ld-certificate/index.php:107 msgctxt "placeholder: Course, Quiz, Course" msgid "%1$s ID or %2$s ID is required when not used within a %3$s." msgstr "" #. translators: placeholder: Course, Course. #: includes/gutenberg/blocks/ld-course-content/index.php:84 #: includes/gutenberg/blocks/ld-course-expire-status/index.php:115 #: includes/gutenberg/blocks/ld-course-progress/index.php:90 #: includes/gutenberg/blocks/ld-courseinfo/index.php:85 #: includes/gutenberg/blocks/ld-payment-buttons/index.php:76 msgctxt "placeholder: Course, Course" msgid "%1$s ID is required when not used within a %2$s." msgstr "" #. translators: placeholder: Course. #: includes/gutenberg/blocks/ld-course-content/index.php:94 #: includes/gutenberg/blocks/ld-course-expire-status/index.php:125 #: includes/gutenberg/blocks/ld-course-progress/index.php:100 #: includes/gutenberg/blocks/ld-courseinfo/index.php:95 #: includes/gutenberg/blocks/ld-payment-buttons/index.php:87 msgctxt "placeholder: Course" msgid "Invalid %1$s ID." msgstr "" #: includes/gutenberg/blocks/ld-course-info/index.php:170 msgid "Please enable one or more 'Show' options within the Block Settings." msgstr "" #. translators: placeholder: Course, Course. #: includes/gutenberg/blocks/ld-course-resume/index.php:102 msgctxt "placeholder: Course, QCourse" msgid "%1$s ID is required when not used within a %2$s." msgstr "" #. translators: placeholder: Course. #: includes/gutenberg/blocks/ld-payment-buttons/index.php:100 msgctxt "placeholder: Course" msgid "%s Price Type must be Free, PayNow or Subscribe." msgstr "" #. translators: placeholder: Quiz, Quiz. #: includes/gutenberg/blocks/ld-quiz-complete/index.php:95 msgctxt "placeholder: Quiz, Quiz" msgid "%1$s ID is required when not used within a %2$s." msgstr "" #: includes/gutenberg/lib/class-ld-rest-gutenberg-posts-controller.php:30 #: includes/rest-api/v1/class-ld-rest-courses-controller.php:27 #: includes/rest-api/v1/class-ld-rest-courses-enroll-controller.php:25 #: includes/rest-api/v1/class-ld-rest-courses-groups-controller.php:39 #: includes/rest-api/v1/class-ld-rest-courses-steps-controller.php:31 #: includes/rest-api/v1/class-ld-rest-courses-users-controller.php:35 #: includes/rest-api/v1/class-ld-rest-groups-controller.php:27 #: includes/rest-api/v1/class-ld-rest-groups-courses-controller.php:39 #: includes/rest-api/v1/class-ld-rest-groups-leaders-controller.php:33 #: includes/rest-api/v1/class-ld-rest-groups-users-controller.php:34 #: includes/rest-api/v1/class-ld-rest-lessons-controller.php:46 #: includes/rest-api/v1/class-ld-rest-quizzes-controller.php:27 #: includes/rest-api/v1/class-ld-rest-topics-controller.php:46 msgid "The password for the post if it is password protected." msgstr "" #: includes/gutenberg/lib/class-ld-rest-gutenberg-posts-controller.php:38 #: includes/rest-api/v1/class-ld-rest-courses-controller.php:58 #: includes/rest-api/v1/class-ld-rest-groups-controller.php:58 #: includes/rest-api/v1/class-ld-rest-lessons-controller.php:56 #: includes/rest-api/v1/class-ld-rest-topics-controller.php:56 msgid "Unique identifier for the object." msgstr "" #: includes/gutenberg/lib/class-ld-rest-gutenberg-posts-controller.php:62 #: includes/rest-api/v1/class-ld-rest-courses-controller.php:83 #: includes/rest-api/v1/class-ld-rest-groups-controller.php:83 #: includes/rest-api/v1/class-ld-rest-lessons-controller.php:80 #: includes/rest-api/v1/class-ld-rest-quizzes-controller.php:83 #: includes/rest-api/v1/class-ld-rest-topics-controller.php:80 msgid "Whether to bypass trash and force deletion." msgstr "" #: includes/gutenberg/lib/enqueue-scripts.php:242 #: includes/gutenberg/lib/enqueue-scripts.php:251 msgid "LearnDash LMS Blocks" msgstr "" #: includes/ld-assignment-uploads.php:81 msgid "Assignment successfully deleted." msgstr "" #: includes/ld-assignment-uploads.php:378 msgid "Assignment successfully uploaded." msgstr "" #: includes/ld-assignment-uploads.php:514 #: includes/quiz/ld-quiz-essays.php:1581 msgid "Unable to write to UPLOADS directory. Is this directory writable by the server?" msgstr "" #: includes/ld-assignment-uploads.php:543 #: includes/quiz/ld-quiz-essays.php:1612 msgid "Unable to write to directory. Is this directory writable by the server?" msgstr "" #: includes/ld-assignment-uploads.php:606 #: includes/ld-assignment-uploads.php:823 #: includes/ld-assignment-uploads.php:1129 #: includes/ld-assignment-uploads.php:1221 #: includes/quiz/ld-quiz-essays.php:471 msgid "Approve" msgstr "" #: includes/ld-assignment-uploads.php:1017 #: includes/ld-assignment-uploads.php:1292 msgid "Assignment" msgstr "" #: includes/ld-assignment-uploads.php:1082 msgctxt "Associate with a course." msgid "Associate with a %s." msgstr "" #: includes/ld-assignment-uploads.php:1112 #: includes/ld-assignment-uploads.php:1134 msgctxt "Associate with a lesson." msgid "Associate with a %s." msgstr "" #: includes/ld-assignment-uploads.php:1149 msgid "Update & Approve" msgstr "" #: includes/ld-assignment-uploads.php:1152 msgid "Awarded Points (Out of %d):" msgstr "" #: includes/ld-assignment-uploads.php:1157 msgid "Points not enabled" msgstr "" #: includes/ld-assignment-uploads.php:1161 msgid "Assignment Points." msgstr "" #: includes/ld-assignment-uploads.php:1179 msgid "Assignment download." msgstr "" #: includes/ld-assignment-uploads.php:1291 #: includes/ld-assignment-uploads.php:1300 #: themes/ld30/templates/assignment/listing.php:131 #: themes/ld30/templates/shortcodes/profile/assignments.php:7 msgid "Assignments" msgstr "" #: includes/ld-assignment-uploads.php:1293 msgid "Edit Assignment" msgstr "" #: includes/ld-assignment-uploads.php:1294 msgid "View Assignment" msgstr "" #: includes/ld-assignment-uploads.php:1295 msgid "View Assignments" msgstr "" #: includes/ld-assignment-uploads.php:1296 msgid "Search Assignments" msgstr "" #: includes/ld-assignment-uploads.php:1297 msgid "No assignment found" msgstr "" #: includes/ld-assignment-uploads.php:1298 msgid "No assignment found in Trash" msgstr "" #: includes/ld-assignment-uploads.php:1299 msgid "Parent:" msgstr "" #. translators: placeholdeR: points awarded values (30/100) 30%. #: includes/ld-assignment-uploads.php:1448 msgctxt "placeholder: points awarded values (30/100) 30%" msgid "Points Awarded: %s" msgstr "" #: includes/ld-assignment-uploads.php:1473 msgctxt "Assignment upload default value for points" msgid "Pending" msgstr "" #: includes/ld-assignment-uploads.php:1579 msgid "Uploaded file size exceeds allowed limit." msgstr "" #: includes/ld-assignment-uploads.php:1620 msgid "The uploaded file type is not allowed." msgstr "" #: includes/ld-assignment-uploads.php:1639 msgid "Number of allowed assignment uploads reached." msgstr "" #. translators: placeholders: Plugin name. Plugin update link. #: includes/ld-autoupdate.php:231 msgctxt "placeholders: Plugin name. Plugin update link." msgid "License of your plugin %1$s is invalid or incomplete. Please click %2$s and update your license." msgstr "" #: includes/ld-autoupdate.php:233 msgid "here" msgstr "" #: includes/ld-autoupdate.php:664 #: includes/settings/settings-pages/class-ld-settings-page-license.php:22 msgid "License Settings" msgstr "" #: includes/ld-autoupdate.php:670 #: includes/settings/settings-pages/class-ld-settings-page-overview.php:405 msgid "Your license is valid." msgstr "" #. translators: placeholder: link to purchase LearnDash. #: includes/ld-autoupdate.php:680 msgctxt "placeholder: link to purchase LearnDash" msgid "Please enter a valid license or %s one now." msgstr "" #. translators: placeholder: link to purchase LearnDash. #. translators: placeholder: Link to purchase LearnDash. #: includes/ld-autoupdate.php:681 #: includes/settings/settings-pages/class-ld-settings-page-overview.php:277 #: includes/settings/settings-pages/class-ld-settings-page-overview.php:400 msgid "buy" msgstr "" #: includes/ld-autoupdate.php:689 msgid "Email:" msgstr "" #: includes/ld-autoupdate.php:702 msgid "License Key:" msgstr "" #: includes/ld-autoupdate.php:706 msgid "Update License" msgstr "" #: includes/ld-certificates.php:117 #: includes/ld-certificates.php:218 #: includes/quiz/ld-quiz-pro.php:1288 #: themes/legacy/templates/course.php:69 msgid "PRINT YOUR CERTIFICATE" msgstr "" #: includes/ld-certificates.php:281 msgid "LearnDash Certificate Options" msgstr "" #: includes/ld-certificates.php:311 msgid "Letter / USLetter (default)" msgstr "" #: includes/ld-certificates.php:312 msgid "A4" msgstr "" #: includes/ld-certificates.php:317 msgid "Landscape (default)" msgstr "" #: includes/ld-certificates.php:318 msgid "Portrait" msgstr "" #: includes/ld-certificates.php:324 msgid "PDF Page Size" msgstr "" #: includes/ld-certificates.php:339 msgid "PDF Page Orientation" msgstr "" #: includes/ld-certificates.php:406 msgid "" "Certificate published.

\r\n" "\tTo view the certificate, you must assign it to a quiz or course.
\r\n" "\tOnce you complete the assigned milestone, you can generate the certificate.

\r\n" "\tClick here to read more about this topic: Previewing Certificates." msgstr "" #: includes/ld-certificates.php:411 msgid "" "Certificate updated.

\r\n" "\tTo view the certificate, you must assign it to a quiz or course.
\r\n" "\tOnce you complete the assigned milestone, you can generate the certificate.

\t\r\n" "\tClick here to read more about this topic: Previewing Certificates." msgstr "" #: includes/ld-certificates.php:419 #: includes/ld-misc-functions.php:1276 msgid "Custom field updated." msgstr "" #: includes/ld-certificates.php:420 #: includes/ld-misc-functions.php:1277 msgid "Custom field deleted." msgstr "" #. translators: %s: date and time of the revision #: includes/ld-certificates.php:423 msgid "Certificate restored to revision from %s" msgstr "" #: includes/ld-certificates.php:425 msgid "Certificate saved." msgstr "" #: includes/ld-certificates.php:426 msgid "Certificate submitted." msgstr "" #: includes/ld-certificates.php:428 msgid "Certificate scheduled for: %1$s." msgstr "" #: includes/ld-certificates.php:432 msgid "Certificate draft updated." msgstr "" #: includes/ld-convert-post-pdf.php:106 msgid "Post does not exist." msgstr "" #: includes/ld-convert-post-pdf.php:616 msgid "Generating completed successfully.

Post/Page title: " msgstr "" #: includes/ld-convert-post-pdf.php:616 msgid "
Output path: " msgstr "" #: includes/ld-convert-post-pdf.php:616 msgid "

Go back to " msgstr "" #: includes/ld-convert-post-pdf.php:616 msgid "the setting panel." msgstr "" #: includes/ld-convert-post-pdf.php:616 msgid "POST2PDF Converter" msgstr "" #: includes/ld-groups.php:101 msgid "Error: Email(s) not sent. Please try again or check with your hosting provider.
wp_mail() returned %d.
Error: %s
" msgstr "" #: includes/ld-groups.php:107 msgid "Success: Email sent to %d group users." msgstr "" #: includes/ld-groups.php:114 msgid "Mail Args empty. Unepected condition from filter: ld_group_email_users_args" msgstr "" #: includes/ld-groups.php:121 msgid "No users in group." msgstr "" #: includes/ld-groups.php:142 #: includes/settings/shortcodes-sections/ld_group.php:9 msgid "Group" msgstr "" #: includes/ld-groups.php:144 msgid "Add New Group" msgstr "" #: includes/ld-groups.php:146 msgid "New Group" msgstr "" #: includes/ld-groups.php:148 msgid "Group Updated." msgstr "" #: includes/ld-groups.php:149 msgid "View Group" msgstr "" #: includes/ld-groups.php:150 msgid "View Groups" msgstr "" #: includes/ld-groups.php:151 msgid "Search Group" msgstr "" #: includes/ld-groups.php:152 msgid "No Group found" msgstr "" #: includes/ld-groups.php:153 msgid "No Group found in the Trash" msgstr "" #: includes/ld-groups.php:156 msgid "Group Published" msgstr "" #: includes/ld-groups.php:157 msgid "Group Published Privately" msgstr "" #: includes/ld-groups.php:158 msgid "Group Reverted to Draft" msgstr "" #: includes/ld-groups.php:159 msgid "Group Scheduled" msgstr "" #: includes/ld-groups.php:160 msgid "Group Updated" msgstr "" #: includes/ld-groups.php:189 msgid "Holds LearnDash user Groups" msgstr "" #: includes/ld-groups.php:351 #: includes/ld-groups.php:360 msgid "S. No." msgstr "" #: includes/ld-groups.php:355 #: includes/ld-groups.php:364 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_AdminToplist.php:99 msgid "Action" msgstr "" #: includes/ld-groups.php:386 msgid "No users." msgstr "" #: includes/ld-misc-functions.php:404 #: includes/ld-misc-functions.php:414 #: includes/lib/paypal/enhanced-paypal-shortcodes.php:266 msgid "Complete Your Purchase" msgstr "" #: includes/ld-misc-functions.php:449 msgid "Use Paypal" msgstr "" #: includes/ld-misc-functions.php:1275 #: includes/ld-misc-functions.php:1278 msgctxt "placeholder: Post Type Singlular Label" msgid "%s updated." msgstr "" #. translators: %s: date and time of the revision #: includes/ld-misc-functions.php:1280 msgctxt "placeholder: Post Type Singular Label, Revision Title" msgid "%1$s restored to revision from %2$s." msgstr "" #: includes/ld-misc-functions.php:1281 msgctxt "placeholder: Post Type Singlular Label" msgid "%s published." msgstr "" #: includes/ld-misc-functions.php:1282 msgctxt "placeholder: Post Type Singlular Label" msgid "%s saved." msgstr "" #: includes/ld-misc-functions.php:1283 msgctxt "placeholder: Post Type Singlular Label" msgid "%s submitted." msgstr "" #: includes/ld-misc-functions.php:1284 msgctxt "placeholder: Post Type Singlular Label, scheduled date" msgid "%1$s scheduled for: %2$s." msgstr "" #: includes/ld-misc-functions.php:1285 msgctxt "placeholder: Post Type Singlular Label" msgid "%s draft updated." msgstr "" #: includes/ld-misc-functions.php:1571 #: themes/ld30/includes/shortcodes.php:38 #: themes/ld30/includes/shortcodes.php:85 #: themes/ld30/templates/focus/masthead.php:176 #: includes/gutenberg/blocks/ld-login/index.js:236 msgid "Logout" msgstr "" #: includes/ld-misc-functions.php:1583 #: themes/ld30/includes/shortcodes.php:31 #: themes/ld30/includes/shortcodes.php:152 #: themes/ld30/templates/modules/infobar/course.php:199 #: themes/ld30/templates/modules/login-modal.php:39 #: includes/gutenberg/blocks/ld-login/index.js:232 msgid "Login" msgstr "" #: includes/ld-users.php:966 #: includes/gutenberg/blocks/ld-usermeta/index.js:75 msgid "User Login" msgstr "" #: includes/ld-users.php:967 #: includes/gutenberg/blocks/ld-usermeta/index.js:79 msgid "User Display Name" msgstr "" #: includes/ld-users.php:968 #: includes/gutenberg/blocks/ld-usermeta/index.js:83 msgid "User Nicename" msgstr "" #: includes/ld-users.php:969 #: includes/gutenberg/blocks/ld-usermeta/index.js:87 msgid "User First Name" msgstr "" #: includes/ld-users.php:970 #: includes/gutenberg/blocks/ld-usermeta/index.js:91 msgid "User Last Name" msgstr "" #: includes/ld-users.php:971 #: includes/gutenberg/blocks/ld-usermeta/index.js:95 msgid "User Nickname" msgstr "" #: includes/ld-users.php:972 #: includes/gutenberg/blocks/ld-usermeta/index.js:99 msgid "User Email" msgstr "" #: includes/ld-users.php:973 #: includes/gutenberg/blocks/ld-usermeta/index.js:103 msgid "User URL" msgstr "" #: includes/ld-users.php:974 #: includes/gutenberg/blocks/ld-usermeta/index.js:107 msgid "User Description" msgstr "" #: includes/lib/paypal/enhanced-paypal-shortcodes.php:543 #: includes/lib/paypal/enhanced-paypal-shortcodes.php:737 msgid "PayPal - The safer, easier way to pay online." msgstr "" #: includes/lib/tcpdf/config/tcpdf_config.php:41 msgid "You are not allowed to access this file." msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Admin.php:122 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Toplist.php:185 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Toplist.php:204 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Toplist.php:249 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Toplist.php:253 msgid "An error has occurred." msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Admin.php:174 msgctxt "Do you really want to delete the quiz/question?" msgid "Do you really want to delete the %s/question?" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Admin.php:175 msgid "Title is not filled!" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Admin.php:176 msgid "No question deposited!" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Admin.php:177 msgid "Correct answer was not selected!" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Admin.php:178 msgid "No answer deposited!" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Admin.php:179 msgctxt "No quiz description filled!" msgid "No %s description filled!" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Admin.php:180 msgid "The percent values in result text are incorrect." msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Admin.php:181 msgid "No number in the field \"Points\" or less than 1" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Admin.php:182 msgid "No number in the field \"Points\" or less than 0" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Admin.php:183 msgctxt "No quiz selected" msgid "No %s selected" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Admin.php:184 msgid "Do you really want to reset the statistic?" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Admin.php:185 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontToplist.php:26 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionOverall.php:107 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizOverall.php:135 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:37 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:782 msgid "No data available" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Admin.php:186 msgid "No sort element in the criterion" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Admin.php:187 msgid "\"Different points for every answer\" is not possible at \"Free\" choice" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Admin.php:188 msgid "You must specify a name." msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Admin.php:189 msgid "This entry should really be deleted?" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Admin.php:190 msgid "Not all fields completed." msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Admin.php:191 msgid "You must specify a template name." msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Admin.php:192 msgid "Cannot delete only answer" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Admin.php:195 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:180 #: includes/quiz/ld-quiz-pro.php:1511 msgid "Close" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Admin.php:196 msgid "Today" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Admin.php:228 msgctxt "Advanced Quiz" msgid "Advanced %s" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Front.php:58 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Front.php:89 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Preview.php:17 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_AdminToplist.php:47 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:511 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionOverall.php:140 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:46 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:72 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:148 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:186 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:232 #: includes/quiz/ld-quiz-pro.php:1517 msgid "Loading" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Front.php:59 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Front.php:90 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Preview.php:18 msgid "You must answer this question." msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Front.php:60 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Front.php:91 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Preview.php:19 msgctxt "You must answer all questions before you can complete the quiz." msgid "You must answer all questions before you can complete the %s." msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Front.php:61 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Front.php:92 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Preview.php:20 msgid "All fields have to be filled." msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_ImportExport.php:92 #: includes/lib/wp-pro-quiz/lib/helper/WpProQuiz_Helper_Import.php:61 #: includes/lib/wp-pro-quiz/lib/helper/WpProQuiz_Helper_Import.php:70 #: includes/lib/wp-pro-quiz/lib/helper/WpProQuiz_Helper_Import.php:77 msgid "File cannot be processed" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Question.php:10 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Question.php:21 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Quiz.php:81 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Quiz.php:221 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Quiz.php:649 msgctxt "Quiz not found" msgid "%s not found" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Question.php:67 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Question.php:71 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Question.php:204 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Question.php:283 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Question.php:298 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Question.php:371 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Question.php:543 msgid "You do not have sufficient permissions to access this page." msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Question.php:81 msgid "Question not found" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Question.php:104 msgid "Click here to add another question." msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Question.php:127 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Question.php:311 msgid "Edit question" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Question.php:127 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Question.php:385 msgid "New question" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Question.php:173 msgctxt "placeholder: question count" msgid "Question: %d" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Question.php:339 msgid "Question: %d" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Quiz.php:181 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Quiz.php:388 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Quiz.php:642 msgctxt "Edit quiz" msgid "Edit %s" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Quiz.php:181 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Quiz.php:388 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Quiz.php:720 msgctxt "Create quiz" msgid "Create %s" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Quiz.php:1262 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_QuizCompleted.php:249 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1276 msgid "Not categorized" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Statistics.php:576 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Statistics.php:627 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Statistics.php:809 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:791 msgid "Anonymous" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Statistics.php:629 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Statistics.php:817 msgid "Deleted user" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Statistics.php:785 #: includes/quiz/ld-quiz-essays.php:828 msgid "Graded" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Statistics.php:788 msgid "Ungraded" msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Toplist.php:84 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Toplist.php:284 msgid "No name or e-mail entered." msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Toplist.php:177 msgid "You signed up successfully." msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Toplist.php:271 #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Toplist.php:280 msgid "You can not enter again." msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Toplist.php:288 msgid "Your name can not exceed 15 characters." msgstr "" #: includes/lib/wp-pro-quiz/lib/controller/WpProQuiz_Controller_Toplist.php:296 msgid "You entered wrong captcha code." msgstr "" #: includes/lib/wp-pro-quiz/lib/helper/WpProQuiz_Helper_Import.php:11 #: includes/lib/wp-pro-quiz/lib/helper/WpProQuiz_Helper_ImportXml.php:9 msgid "File was not uploaded" msgstr "" #: includes/lib/wp-pro-quiz/lib/helper/WpProQuiz_Helper_Import.php:42 msgid "File have wrong format" msgstr "" #: includes/lib/wp-pro-quiz/lib/helper/WpProQuiz_Helper_Import.php:47 msgid "File is not compatible with the current version" msgstr "" #: includes/lib/wp-pro-quiz/lib/helper/WpProQuiz_Helper_ImportXml.php:32 #: includes/lib/wp-pro-quiz/lib/helper/WpProQuiz_Helper_ImportXml.php:45 msgid "XML could not be loaded." msgstr "" #: includes/lib/wp-pro-quiz/lib/model/WpProQuiz_Model_Form.php:96 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:731 msgid "ticked" msgstr "" #: includes/lib/wp-pro-quiz/lib/model/WpProQuiz_Model_Form.php:96 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:731 msgid "not ticked" msgstr "" #: includes/lib/wp-pro-quiz/lib/model/WpProQuiz_Model_Form.php:100 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:724 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:734 #: includes/quiz/ld-quiz-info-shortcode.php:110 #: includes/settings/settings-sections/class-ld-settings-section-paypal.php:160 #: includes/settings/settings-sections/class-ld-settings-section-permalinks.php:201 #: includes/settings/settings-sections/class-ld-settings-section-questions-taxonomies.php:192 #: includes/settings/settings-sections/class-ld-settings-section-support-database-tables.php:107 #: includes/settings/settings-sections/class-ld-settings-section-support-learndash.php:142 #: includes/settings/settings-sections/class-ld-settings-section-support-learndash.php:344 #: includes/settings/settings-sections/class-ld-settings-section-support-learndash.php:354 #: includes/settings/settings-sections/class-ld-settings-section-support-learndash.php:361 #: includes/settings/settings-sections/class-ld-settings-section-support-learndash.php:372 #: includes/settings/settings-sections/class-ld-settings-section-support-learndash.php:383 #: includes/settings/settings-sections/class-ld-settings-section-support-learndash.php:389 #: includes/settings/settings-sections/class-ld-settings-section-support-learndash.php:437 #: includes/settings/settings-sections/class-ld-settings-section-support-learndash.php:449 #: includes/settings/settings-sections/class-ld-settings-section-support-server.php:170 #: includes/settings/settings-sections/class-ld-settings-section-support-server.php:217 #: includes/settings/settings-sections/class-ld-settings-section-support-wordpress.php:100 #: includes/settings/settings-sections/class-ld-settings-section-support-wordpress.php:110 #: includes/settings/settings-sections/class-ld-settings-section-support-wordpress.php:126 #: includes/settings/shortcodes-sections/ld_course_list.php:154 #: includes/settings/shortcodes-sections/ld_course_list.php:209 #: includes/settings/shortcodes-sections/ld_lesson_list.php:152 #: includes/settings/shortcodes-sections/ld_lesson_list.php:207 #: includes/settings/shortcodes-sections/ld_profile.php:68 #: includes/settings/shortcodes-sections/ld_profile.php:84 #: includes/settings/shortcodes-sections/ld_profile.php:98 #: includes/settings/shortcodes-sections/ld_profile.php:110 #: includes/settings/shortcodes-sections/ld_profile.php:122 #: includes/settings/shortcodes-sections/ld_profile.php:138 #: includes/settings/shortcodes-sections/ld_quiz_list.php:194 #: includes/settings/shortcodes-sections/ld_quiz_list.php:248 #: includes/settings/shortcodes-sections/ld_topic_list.php:162 #: includes/settings/shortcodes-sections/ld_topic_list.php:218 #: includes/gutenberg/blocks/ld-course-resume/index.js:111 msgid "Yes" msgstr "" #: includes/lib/wp-pro-quiz/lib/model/WpProQuiz_Model_GlobalSettingsMapper.php:67 #: includes/lib/wp-pro-quiz/lib/model/WpProQuiz_Model_GlobalSettingsMapper.php:99 msgctxt "LearnDash Quiz: One user completed a quiz" msgid "LearnDash %1$s: One user completed a %2$s" msgstr "" #: includes/lib/wp-pro-quiz/lib/model/WpProQuiz_Model_GlobalSettingsMapper.php:69 msgctxt "placeholders: Quiz, quiz" msgid "" "LearnDash %s\n" "\n" "The user \"$username\" has completed \"$quizname\" the %s.\n" "\n" "Points: $points\n" "Result: $result\n" "\n" "" msgstr "" #: includes/lib/wp-pro-quiz/lib/model/WpProQuiz_Model_GlobalSettingsMapper.php:101 msgctxt "placeholders: Quiz, quiz" msgid "" "LearnDash %s\n" "\t\t\t\n" "You have completed the %s \"$quizname\".\n" "\n" "Points: $points\n" "Result: $result\n" "\n" "" msgstr "" #: includes/lib/wp-pro-quiz/lib/plugin/WpProQuiz_Plugin_BpAchievementsV2.php:33 #: includes/lib/wp-pro-quiz/lib/plugin/WpProQuiz_Plugin_BpAchievementsV3.php:6 msgctxt "The user completed a quiz." msgid "The user completed a %s." msgstr "" #: includes/lib/wp-pro-quiz/lib/plugin/WpProQuiz_Plugin_BpAchievementsV3.php:7 msgctxt "The user completed a quiz with 100 percent." msgid "The user completed a %s with 100 percent." msgstr "" #: includes/lib/wp-pro-quiz/lib/plugin/WpProQuiz_Plugin_BpAchievementsV3.php:18 msgctxt "A powerful and beautiful quiz plugin for WordPress." msgid "A powerful and beautiful %s plugin for WordPress." msgstr "" #: includes/lib/wp-pro-quiz/lib/plugin/WpProQuiz_Plugin_BpAchievementsV3.php:21 msgid "WP-Pro-Quiz" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_AdminToplist.php:16 msgid "Sort by:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_AdminToplist.php:18 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:936 msgid "best user" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_AdminToplist.php:19 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:940 msgid "newest entry" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_AdminToplist.php:20 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:944 msgid "oldest entry" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_AdminToplist.php:26 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:220 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:303 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:119 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:211 msgid "How many entries should be shown on one page:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_AdminToplist.php:38 msgid "UR = unregistered user, R = registered user" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_AdminToplist.php:55 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:239 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:770 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:106 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:666 msgid "User" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_AdminToplist.php:56 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:523 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:524 msgid "E-Mail" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_AdminToplist.php:58 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontToplist.php:16 msgid "Entered on" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_AdminToplist.php:60 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1097 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1122 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:111 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:245 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:324 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:31 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:126 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:776 msgid "Results" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_AdminToplist.php:75 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_AdminToplist.php:100 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:139 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:170 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:203 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionOverall.php:80 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1208 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:47 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:816 #: includes/settings/settings-sections/class-ld-settings-section-questions-management-display.php:102 #: includes/settings/settings-sections/class-ld-settings-section-questions-taxonomies.php:216 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-management-display.php:412 msgid "Delete" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_AdminToplist.php:80 msgid "save" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_AdminToplist.php:81 msgid "cancel" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_AdminToplist.php:102 msgid "Apply" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_AdminToplist.php:103 msgid "Delete all entries" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:238 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:372 msgid "Uploading" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:246 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:380 msgid "Success" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:254 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:389 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:828 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1081 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:2016 msgctxt "Quiz Summary" msgid "%s Summary" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:261 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:396 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:879 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:908 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:2028 msgctxt "Finish Quiz Button Label" msgid "Finish %s" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:503 msgid "Would you like to submit your quiz result to the leaderboard?" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:532 msgid "Captcha" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:639 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:738 msgid "You must fill out this field." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:642 msgid "You must specify a number." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:643 msgid "You must specify a text." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:644 msgid "You must specify an email address." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:645 msgid "You must specify a date." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:766 msgctxt "You have already completed the quiz before. Hence you can not start it again." msgid "You have already completed the %s before. Hence you can not start it again." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:788 msgctxt "You must sign in or sign up to start the quiz." msgid "You must sign in or sign up to start the %s." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:811 msgid "You must first complete the following:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:843 msgctxt "placeholders: quiz count completed, quiz count total" msgid "%1$s of %2$s questions completed" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:865 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:890 msgid "Information" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:936 msgctxt "Start Quiz Button Label" msgid "Start %s" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:979 msgctxt "Start Quiz Statistics Button Label" msgid "View %s Statistics" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1009 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:126 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:131 msgid "Time limit" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1040 msgid "Answered" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1053 msgid "Review" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1069 msgid "Review question" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1107 msgctxt "Quiz complete. Results are being recorded." msgid "%s complete. Results are being recorded." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1131 msgctxt "placeholder: correct answer, question count" msgid "%1$s of %2$s questions answered correctly" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1146 msgctxt "placeholder: quiz time." msgid "Your time: %s" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1160 msgid "Time has elapsed" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1174 msgctxt "placeholder: points earned, points total" msgid "You have reached %1$s of %2$s point(s), (%3$s)" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1187 msgctxt "placeholder: points earned, points total, points percentage" msgid "Earned Point(s): %1$s of %2$s, (%3$s)" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1198 msgctxt "placeholder: number of essays, possible points " msgid "%1$s Essay(s) Pending (Possible Point(s): %2$s)" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1224 msgid "Average score" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1240 msgid "Your score" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1330 msgctxt "Restart Quiz Button Label" msgid "Restart %s" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1343 msgctxt "View Questions Button Label" msgid "View %s" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1356 msgid "Show leaderboard" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1433 msgctxt "placeholder: question number, questions total" msgid "Question %1$s of %2$s" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1462 msgctxt "placeholder: total quiz points" msgid "%s point(s)" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1479 msgctxt "placeholder: Quiz Category" msgid "Category: %s" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1513 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:354 msgid "Sort elements" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1717 msgid "Type your response here" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1729 msgid "Upload your answer to this question." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1736 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:512 #: themes/ld30/templates/assignment/upload.php:100 #: themes/legacy/templates/learndash_lesson_assignment_upload_form.php:60 msgid "Upload" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1742 msgid "Essay type not found" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1753 msgid "This response will be awarded full points automatically, but it can be reviewed and adjusted after submission." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1764 msgid "This response will be awarded full points automatically, but it will be reviewed and possibly adjusted after submission." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1775 msgid "This response will be reviewed and graded after submission." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1826 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1880 msgid "Grading can be reviewed and adjusted." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1855 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1892 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:107 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:242 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:29 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:122 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:773 msgid "Incorrect" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1930 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:414 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:419 msgid "Skip question" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1972 msgid "Check" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:1985 msgid "Next" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:2003 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:2006 msgid "Page %d" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontQuiz.php:2050 msgctxt "quiz is loading... Label" msgid "%s is loading..." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontToplist.php:11 msgid "maximum of %s points" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontToplist.php:14 msgid "Pos." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontToplist.php:18 msgid "Result" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_FrontToplist.php:23 msgid "Table is loading" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:7 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:12 msgctxt "Quiz Options" msgid "%s Options" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:9 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:29 msgid "back to overview" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:13 msgid "E-Mail settings" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:14 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:427 msgid "Settings in case of problems" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:42 msgid "Global settings" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:48 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:53 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-management-display.php:376 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-management-display.php:377 msgid "Leaderboard time format" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:79 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:113 msgid "Documentation on date and time formatting" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:87 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:92 msgid "Statistic time format" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:96 msgid "Select example:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:109 msgid "Time format:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:122 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:127 msgid "Question Category management" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:130 msgid "Select Question Category" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:139 msgid "Delete selected Question Category" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:140 msgid "Save changed to selected Question Category" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:140 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:171 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:204 #: includes/settings/class-ld-settings-pages.php:400 msgid "Save Changes" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:142 msgid "Question Category Saved" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:143 msgid "Question Category Deleted" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:152 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:157 msgctxt "Quiz template management" msgid "%s template management" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:160 msgctxt "Select Quiz template" msgid "Select %s template" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:170 msgctxt "Delete selected Quiz template" msgid "Delete selected %s template" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:171 msgctxt "Save changed to selected Quiz template" msgid "Save changed to selected %s template" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:173 msgctxt "Quiz template Saved" msgid "%s template Saved" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:174 msgctxt "Quiz template Deleted" msgid "%s template Deleted" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:184 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:189 msgid "Question template management" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:192 msgid "Select Question template" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:203 msgid "Delete selected Question template" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:204 msgid "Save changed to selected Question template" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:206 msgid "Question template Saved" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:207 msgid "Question template Deleted" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:224 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:552 msgid "Admin e-mail settings" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:230 msgid "To:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:237 msgid "Separate multiple email addresses with a comma, e.g. wp@test.com, test@test.com" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:243 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:331 msgid "From Name:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:249 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:338 msgid "This is the email name of the sender. If not provided will default to the system email name." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:254 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:344 msgid "From Email:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:259 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:349 msgid "The value entered is not a valid email address" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:266 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:356 msgid "This is the email address of the sender. If not provided the admin email (%s) will be used." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:272 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:362 msgid "Subject:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:282 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:372 msgid "HTML" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:286 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:376 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:442 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:464 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:511 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:27 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:46 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:65 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:84 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:100 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:116 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:171 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:210 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:233 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:291 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:320 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:381 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:472 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:494 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:513 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:592 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:611 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:630 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:649 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:668 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:698 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:717 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:736 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:774 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:794 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:813 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:832 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:861 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:894 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:908 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:956 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1032 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1033 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1034 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1035 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1117 msgid "Activate" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:292 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:382 msgid "Message body:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:300 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:390 msgid "Allowed variables" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:302 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:392 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-email-settings.php:166 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-email-settings.php:223 msgid "User-ID" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:304 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:394 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-email-settings.php:168 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-email-settings.php:225 msgid "Quiz-Name" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:305 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:395 msgid "Result in precent" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:306 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:396 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-email-settings.php:170 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-email-settings.php:227 msgid "Reached points" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:307 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:397 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-email-settings.php:171 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-email-settings.php:228 msgid "IP-address of the user" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:308 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:398 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-email-settings.php:172 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-email-settings.php:229 msgid "Category-Overview" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:325 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:553 msgid "User e-mail settings" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:413 msgid "to activate" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:415 msgid "not to activate" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:421 msgid "Please note" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:423 msgid "These settings should only be set in cases of problems with LD Advanced Quiz." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:433 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:438 msgid "Automatically add [raw] shortcode" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:442 msgid "It is recommended %s this option on your system." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:445 msgid "If this option is activated, a [raw] shortcode is automatically set around LDAdvQuiz shortcode ( [LDAdvQuiz X] ) into [raw] [LDAdvQuiz X] [/raw]" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:448 msgid "Own themes changes internal order of filters, what causes the problems. With additional shortcode [raw] this is prevented." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:455 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:460 msgid "Do not load the Javascript-files in the footer" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:467 msgid "Generally all LDAdvQuiz-Javascript files are loaded in the footer and only when they are really needed." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:470 msgid "In very old Wordpress themes this can lead to problems." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:473 msgid "If you activate this option, all LDAdvQuiz-Javascript files are loaded in the header even if they are not needed." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:480 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:485 msgid "Touch Library" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:489 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:404 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:423 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:442 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:755 msgid "Deactivate" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:492 msgid "In Version 0.13 a new Touch Library was added for mobile devices." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:495 msgid "If you have any problems with the Touch Library, please deactivate it." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:502 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:507 msgid "jQuery support cors" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:514 msgid "Is required only in rare cases." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:517 msgid "If you have problems with the front ajax, please activate it." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:520 msgid "e.g. Domain with special characters in combination with IE" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:527 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:532 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:534 msgid "Repair database" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_GobalSettings.php:536 msgid "No data will be deleted. Only LDAdvQuiz tables will be repaired." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Import.php:21 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizOverall.php:164 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizOverall.php:186 msgid "Import" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Import.php:25 msgid "Error" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Import.php:32 msgid "Successfully" msgstr "" #. translators: placeholder: Quiz Title. #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Import.php:40 msgctxt "placeholder: Quiz Title" msgid "%s" msgstr "" #. translators: placeholder: link to Imported Quiz #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Import.php:48 msgctxt "placeholder: link to Imported Quiz." msgid "Import completed successfully: %s" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Import.php:72 msgctxt "Quiz name" msgid "%s name" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Import.php:98 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizOverall.php:197 msgid "Start import" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:24 msgid "Return to Questions Overview" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:43 msgctxt "placeholders: quiz" msgid "The title is used for overview, it is not visible in %s. If you leave the title field empty, a title will be generated." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:80 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionOverall.php:43 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:124 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:138 msgid "Category" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:118 msgid "Message with the correct / incorrect answer" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:120 msgctxt "Deactivated in quiz settings." msgid "Deactivated in %s settings." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:181 #: sfwd_lms.php:558 msgid "Single choice" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:185 #: sfwd_lms.php:559 msgid "Multiple choice" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:189 #: sfwd_lms.php:560 msgid "\"Free\" choice" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:193 #: sfwd_lms.php:561 msgid "\"Sorting\" choice" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:197 #: sfwd_lms.php:562 msgid "\"Matrix Sorting\" choice" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:201 #: sfwd_lms.php:563 msgid "Fill in the blank" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:205 #: sfwd_lms.php:564 msgid "Assessment" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:209 #: sfwd_lms.php:565 msgid "Essay / Open Answer" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:273 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:557 msgid "template name" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:283 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:567 msgid "Save as template" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:302 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:352 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:405 msgid "Options" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:303 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:406 msgid "Answer" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:335 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:390 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:432 msgid "Delete answer" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:336 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:391 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:433 msgid "Add Media" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:353 msgid "Criterion" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:445 msgid "correct answers (one per line) (answers will be converted to lower case)" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:458 msgid "Enclose the searched words with { } e.g. \"I {play} soccer\". Capital and small letters will be ignored." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:461 msgid "You can specify multiple options for a search word. Enclose the word with [ ] e.g. \"I {[play][love][hate]} soccer\" . In this case answers play, love OR hate are correct." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:464 msgid "If mode \"Different points for every answer\" is activated, you can assign points with |POINTS. Otherwise 1 point will be awarded for every answer." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:467 msgid "e.g. \"I {play} soccer, with a {ball|3}\" - \"play\" gives 1 point and \"ball\" 3 points." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:479 msgid "Here you can create an assessment question." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:482 msgid "Enclose a assesment with {}. The individual assessments are marked with []." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:484 msgid "The number of options in the maximum score." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:487 msgid "Examples:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:489 msgid "less true { [1] [2] [3] [4] [5] } more true" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:493 msgid "less true { [a] [b] [c] } more true" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:511 msgid "Text Box" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:521 msgid "-- Select --" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:522 msgid "Not Graded, No Points Awarded" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:523 msgid "Not Graded, Full Points Awarded" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionEdit.php:524 msgid "Graded, Full Points Awarded" msgstr "" #. translators: placeholder: Questions. #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionOverall.php:21 msgctxt "placeholder: Questions" msgid "%s sorted" msgstr "" #. translators: placeholder: Question. #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionOverall.php:31 msgctxt "placeholder: Question" msgid "Add %s" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionOverall.php:116 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:169 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:298 msgid "Total" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionOverall.php:126 msgid "Add question" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionOverall.php:127 msgid "Save order" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionOverall.php:128 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionOverall.php:135 msgctxt "Copy questions from another Quiz" msgid "Copy questions from another %s" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionOverall.php:136 msgctxt "placeholders: quiz, quiz" msgid "Here you can copy questions from another %s into this %s. (Multiple selection enabled)" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuestionOverall.php:148 msgid "Copy questions" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:18 msgctxt "Hide quiz title" msgid "Hide %s title" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:23 msgid "Hide title" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:30 msgctxt "The title serves as quiz heading." msgid "The title serves as %s heading." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:37 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:42 msgctxt "Hide \"Restart quiz\" button" msgid "Hide \"Restart %s\" button" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:49 msgctxt "Hide the \"Restart quiz\" button in the Frontend." msgid "Hide the \"Restart %s\" button in the Frontend." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:56 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:61 msgid "Hide \"View question\" button" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:68 msgid "Hide the \"View question\" button in the Frontend." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:75 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:80 msgid "Display question randomly" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:91 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:96 msgid "Display answers randomly" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:107 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:112 msgid "Sort questions by category" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:119 msgid "Also works in conjunction with the \"display randomly question\" option." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:134 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:152 #: includes/settings/settings-fields/class-ld-settings-fields-timer-entry.php:58 msgid "Seconds" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:137 msgid "0 = no limit" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:144 msgctxt "Protect Quiz Answers in Browser Cookie" msgid "Protect %s Answers in Browser Cookie" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:149 msgctxt "Use cookies for Quiz Answers" msgid "Use cookies for %s Answers" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:155 msgctxt "placeholders: Quiz" msgid "0 = Don't save answers. This option will save the user's answers into a browser cookie until the %s is submitted." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:174 msgctxt "placeholders: quiz" msgid "Statistics about right or wrong answers. Statistics will be saved by completed %s, not after every question. The statistics is only visible over administration menu. (internal statistics)" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:181 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:186 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:623 msgid "Statistics IP-lock" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:190 msgid "in minutes (recommended 1440 minutes = 1 day)" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:193 msgid "Protect the statistics from spam. Result will only be saved every X minutes from same IP. (0 = deactivated)" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:201 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:206 msgid "View Profile Statistics" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:213 msgctxt "placeholders: quiz" msgid "Enable user to view statistics for this %s on their profile." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:222 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:228 msgctxt "Execute quiz only once" msgid "Execute %s only once" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:236 msgctxt "placeholders: quiz, quiz" msgid "If you activate this option, the user can complete the %1$s only once. Afterwards the %2$s is blocked for this user." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:240 msgid "This option applies to:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:248 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:872 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:101 msgid "all users" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:252 msgid "registered useres only" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:256 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:880 msgid "anonymous users only" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:262 msgid "user identification by cookie" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:265 msgid "If you activate this option, a cookie is set additionally for unregistrated (anonymous) users. This ensures a longer assignment of the user than the simple assignment by the IP address." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:270 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php:340 msgid "Reset the user identification" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:271 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php:340 msgid "User identification has been reset." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:273 msgid "Resets user identification for all users." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:282 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:287 msgid "Show only specific number of questions" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:294 msgid "If you enable this option, maximum number of displayed questions will be X from X questions. (The output of questions is random)" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:298 msgid "How many questions should be displayed simultaneously:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:303 msgid "in percent" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:311 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:316 msgid "Prerequisites" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:323 msgctxt "placeholders: quiz, quiz" msgid "If you enable this option, you can choose %1$s, which user have to finish before he can start this %2$s." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:326 msgctxt "placeholders: quizzes" msgid "In all selected %s statistic function have to be active. If it is not it will be activated automatically." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:331 msgctxt "Quiz" msgid "%s" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:333 msgctxt "Prerequisites (This quiz has to be finished)" msgid "Prerequisites (This %s has to be finished)" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:372 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:377 msgid "Question overview" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:384 msgid "Add at the top of the quiz a question overview, which allows easy navigation. Additional questions can be marked \"to review\"." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:387 msgctxt "placeholders: quiz, quiz" msgid "Additional %s overview will be displayed, before %s is finished." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:395 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:400 msgctxt "Quiz-summary" msgid "%s-summary" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:407 msgctxt "placeholders: quiz, quiz" msgid "If you enable this option, no %1$s overview will be displayed, before finishing %2$s." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:426 msgid "If you enable this option, user won't be able to skip question. (only in \"Overview -> next\" mode). User still will be able to navigate over \"Question-Overview\"" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:433 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:438 msgid "Admin e-mail notification" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:446 msgid "for registered users only" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:450 msgid "for all users" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:453 msgctxt "placeholders: quiz" msgid "If you enable this option, you will be informed if a user completes this %s." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:456 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:478 msgid "E-Mail settings can be edited in global settings." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:463 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:468 msgid "User e-mail notification" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:475 msgctxt "placeholders: quiz" msgid "If you enable this option, an email is sent with his %s result to the user. (only registered users)" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:485 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:490 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:435 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:430 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:427 msgid "Autostart" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:497 msgctxt "placeholders: quiz" msgid "If you enable this option, the %s will start automatically after the page is loaded." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:504 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:509 msgctxt "placeholders: quiz" msgid "Only registered users are allowed to start the %s" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:516 msgctxt "placeholders: quiz" msgid "If you enable this option, only registered users allowed start the %s." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:542 msgid "Select Template" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:583 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:588 msgid "Show average points" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:595 msgid "Statistics-function must be enabled." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:602 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:607 msgid "Show category score" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:614 msgid "If you enable this option, the results of each category is displayed on the results page." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:621 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:626 msgid "Hide correct questions - display" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:633 msgid "If you select this option, no longer the number of correctly answered questions are displayed on the results page." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:640 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:645 msgctxt "Hide quiz time - display" msgid "Hide %s time - display" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:652 msgctxt "placeholders: quiz" msgid "If you enable this option, the time for finishing the %s won't be displayed on the results page anymore." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:659 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:664 msgid "Hide score - display" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:671 msgid "If you enable this option, final score won't be displayed on the results page anymore." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:689 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:694 msgid "Show points" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:701 msgctxt "placeholders: quiz" msgid "Shows in %s, how many points are reachable for respective question." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:708 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:713 msgid "Number answers" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:720 msgid "If this option is activated, all answers are numbered (only single and multiple choice)" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:727 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:732 msgid "Hide correct- and incorrect message" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:739 msgid "If you enable this option, no correct- or incorrect message will be displayed." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:746 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:751 msgid "Correct and incorrect answer mark" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:758 msgid "If you enable this option, answers won't be color highlighted as correct or incorrect. " msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:765 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:770 msgid "Force user to answer each question" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:777 msgid "If you enable this option, the user is forced to answer each question." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:778 msgid "If the option \"Question overview\" is activated, this notification will appear after end of the quiz, otherwise after each question." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:785 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:790 msgid "Hide question position overview" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:797 msgid "If you enable this option, the question position overview is hidden." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:804 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:809 msgid "Hide question numbering" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:816 msgid "If you enable this option, the question numbering is hidden." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:823 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:828 msgid "Display category" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:835 msgid "If you enable this option, category will be displayed in the question." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:850 msgid "The leaderboard allows users to enter results in public list and to share the result this way." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:851 msgid "The leaderboard works independent from internal statistics function." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:867 msgid "Who can sign up to the list" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:876 msgid "registered users only" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:883 msgid "Not registered users have to enter name and e-mail (e-mail won't be displayed)" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:889 msgid "insert automatically" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:897 msgid "If you enable this option, logged in users will be automatically entered into leaderboard" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:903 msgid "display captcha" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:911 msgid "If you enable this option, additional captcha will be displayed for users who are not registered." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:914 msgid "This option requires additional plugin:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:919 msgid "Plugin has been detected." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:923 msgid "Plugin is not installed." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:931 msgid "Sort list by" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:950 msgid "Users can apply multiple times" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:961 msgid "User can apply after:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:963 msgid "minute" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:970 msgid "How many entries should be displayed" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:976 msgid "Entries" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:983 msgctxt "Automatically display leaderboard in quiz result" msgid "Automatically display leaderboard in %s result" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:987 msgid "Where should leaderboard be displayed:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:990 msgid "don't display" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:994 msgid "below the \"result text\"" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:999 msgid "in a button" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1024 msgid "Normal" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1025 msgid "Normal + Back-Button" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1026 msgid "Check -> continue" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1027 msgid "Questions below each other" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1039 msgctxt "placeholders: quiz" msgid "Displays all questions sequentially, \"right\" or \"false\" will be displayed at the end of the %s." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1042 msgid "Allows to use the back button in a question." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1045 msgid "Shows \"right or wrong\" after each question." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1048 msgid "If this option is activated, all answers are displayed below each other, i.e. all questions are on a single page." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1070 msgid "How many questions to be displayed on a page:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1073 msgid "(0 = All on one page)" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1098 msgid "You can create custom fields, e.g. to request the name or the e-mail address of the users." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1101 msgid "The statistic function have to be enabled." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1108 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1113 msgid "Custom fields enable" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1120 msgid "If you enable this option, custom fields are enabled." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1127 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1132 msgid "Display position" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1134 msgid "Where should the fields be displayed:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1137 msgctxt "On the quiz startpage" msgid "On the %s startpage" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1144 msgctxt "At the end of the quiz (before the quiz result)" msgid "At the end of the %s (before the %s result)" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1160 #: includes/settings/settings-fields/class-ld-settings-fields-quiz-custom-fields.php:56 msgid "Field name" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1162 #: includes/settings/settings-fields/class-ld-settings-fields-quiz-custom-fields.php:58 msgid "Required?" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1182 #: includes/settings/settings-fields/class-ld-settings-fields-quiz-custom-fields.php:86 msgid "Text" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1183 msgid "TextArea" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1184 #: includes/settings/settings-fields/class-ld-settings-fields-quiz-custom-fields.php:90 msgid "Checkbox" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1185 #: includes/settings/settings-fields/class-ld-settings-fields-quiz-custom-fields.php:92 msgid "Drop-Down menu" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1186 #: includes/settings/settings-fields/class-ld-settings-fields-quiz-custom-fields.php:94 msgid "Radio" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1187 #: includes/settings/settings-fields/class-ld-settings-fields-quiz-custom-fields.php:96 msgid "Number" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1189 #: includes/settings/settings-fields/class-ld-settings-fields-quiz-custom-fields.php:100 msgid "Yes/No" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1193 #: includes/settings/settings-fields/class-ld-settings-fields-quiz-custom-fields.php:105 msgid "Edit list" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1196 #: includes/settings/settings-fields/class-ld-settings-fields-quiz-custom-fields.php:108 msgid "One entry per line" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1201 #: includes/settings/settings-fields/class-ld-settings-fields-quiz-custom-fields.php:120 msgid "OK" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1220 #: includes/settings/settings-fields/class-ld-settings-fields-quiz-custom-fields.php:150 msgid "Add field" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1231 msgid "Results text" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1234 msgctxt "placeholders: quiz" msgid "This text will be displayed at the end of the %s (in results). (this text is optional)" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1238 msgid "Activate graduation" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1244 msgid "Hint:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1246 msgid "Maximal 15 levels" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1248 msgctxt "placeholders: quiz, question points, question count" msgid "Percentages refer to the total score of the %1$s. (Current total %2d points in %3$d questions.)" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1250 msgid "Values can also be mixed up" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1251 msgid "10,15% or 10.15% allowed (max. two digits after the decimal point)" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1267 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1278 msgid "from:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1267 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1278 msgid "percent" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1267 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1278 msgid "(Will be displayed, when result-percent is >= %s%%)" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1268 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1279 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:559 msgid "Delete graduation" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizEdit.php:1286 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:581 msgid "Add graduation" msgstr "" #. translators: placeholder: Quiz. #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizOverall.php:39 msgctxt "placeholder: Quiz" msgid "%s Import/Export" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizOverall.php:172 msgid "Choose the respective Quiz, which you would like to export and press on \"Start export\"" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizOverall.php:176 msgid "Format:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizOverall.php:177 msgid "*.wpq" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizOverall.php:178 #: themes/ld30/templates/modules/infobar/course.php:197 msgid "or" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizOverall.php:179 msgid "*.xml" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizOverall.php:181 msgid "Start export" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizOverall.php:187 msgid "Import only *.wpq or *.xml files from known and trusted sources." msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_QuizOverall.php:195 msgid "Maximal %d MiB" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:28 msgctxt "placeholders: Quiz, Quiz Name/Title" msgid "%1$s: %2$s - Statistics" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:33 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:60 msgid "Stats not enabled" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:34 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:61 msgid "Activate statistics" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:39 msgid "Users" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:41 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:364 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:705 msgid "Custom fields" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:68 msgid "Please select user name:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:72 msgid "Select a test:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:82 msgid "Anonymous user" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:91 msgid "average" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:108 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:243 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:123 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:774 msgid "Hints used" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:109 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:244 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:124 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:775 msgid "Time" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:110 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:125 msgid "Points scored" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:148 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:266 msgid "Sub-Total: " msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:183 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:268 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:343 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:312 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:162 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:246 #: includes/settings/settings-sections/class-ld-settings-section-translations-refresh.php:58 msgid "Refresh" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:187 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:316 msgid "Reset statistics" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:188 msgid "Reset user statistics" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:189 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:270 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:345 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:164 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:248 msgid "Reset entire statistic" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:214 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:205 msgctxt "Show only users, who solved the quiz:" msgid "Show only users, who solved the %s:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:293 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:98 msgid "Which users should be displayed:" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:295 msgid "all" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:296 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:102 msgid "only registered users" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_Statistics.php:297 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:103 msgid "only anonymous users" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:89 msgctxt "placeholder: user name" msgid "User statistics: %s" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:178 #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:189 msgid "(view)" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:538 msgid "Status: Graded" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsAjax.php:540 msgid "Status: Not Graded" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:66 msgid "History" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:100 msgid "special filter" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StatisticsNew.php:135 msgid "Search to date limit from %s to %s" msgstr "" #: includes/lib/wp-pro-quiz/lib/view/WpProQuiz_View_StyleManager.php:15 msgid "Front" msgstr "" #: includes/quiz/ld-quiz-essays.php:22 msgctxt "Post Type General Name" msgid "Submitted Essays" msgstr "" #: includes/quiz/ld-quiz-essays.php:23 msgctxt "Post Type Singular Name" msgid "Submitted Essay" msgstr "" #: includes/quiz/ld-quiz-essays.php:24 #: includes/quiz/ld-quiz-essays.php:25 msgid "Submitted Essays" msgstr "" #: includes/quiz/ld-quiz-essays.php:26 msgid "Parent Submitted Essay:" msgstr "" #: includes/quiz/ld-quiz-essays.php:27 msgid "All Submitted Essays" msgstr "" #: includes/quiz/ld-quiz-essays.php:28 msgid "Add New Submitted Essay" msgstr "" #: includes/quiz/ld-quiz-essays.php:30 msgid "New Submitted Essay" msgstr "" #: includes/quiz/ld-quiz-essays.php:31 msgid "Edit Submitted Essay" msgstr "" #: includes/quiz/ld-quiz-essays.php:32 msgid "Update Submitted Essay" msgstr "" #: includes/quiz/ld-quiz-essays.php:33 msgid "View Submitted Essay" msgstr "" #: includes/quiz/ld-quiz-essays.php:34 msgid "View Submitted Essays" msgstr "" #: includes/quiz/ld-quiz-essays.php:35 msgid "Search Submitted Essays" msgstr "" #: includes/quiz/ld-quiz-essays.php:36 msgid "Submitted Essay Not found" msgstr "" #: includes/quiz/ld-quiz-essays.php:37 msgid "Submitted Essay Not found in Trash" msgstr "" #: includes/quiz/ld-quiz-essays.php:38 msgid "Submitted Essay Published" msgstr "" #: includes/quiz/ld-quiz-essays.php:39 msgid "Submitted Essay Published Privately" msgstr "" #: includes/quiz/ld-quiz-essays.php:40 msgid "Submitted Essay Reverted to Draft" msgstr "" #: includes/quiz/ld-quiz-essays.php:41 msgid "Submitted Essay Scheduled" msgstr "" #: includes/quiz/ld-quiz-essays.php:42 msgid "Submitted Essay Updated" msgstr "" #: includes/quiz/ld-quiz-essays.php:65 msgid "sfwd-essays" msgstr "" #: includes/quiz/ld-quiz-essays.php:66 msgid "Submitted essays via a quiz question." msgstr "" #: includes/quiz/ld-quiz-essays.php:217 msgctxt "Custom Essay post type status: Graded" msgid "Graded" msgstr "" #: includes/quiz/ld-quiz-essays.php:222 msgid "Graded (%s)" msgid_plural "Graded (%s)" msgstr[0] "" msgstr[1] "" #: includes/quiz/ld-quiz-essays.php:226 msgctxt "Custom Essay post type status: Not Graded" msgid "Not Graded" msgstr "" #: includes/quiz/ld-quiz-essays.php:231 msgid "Not Graded (%s)" msgid_plural "Not Graded (%s)" msgstr[0] "" msgstr[1] "" #: includes/quiz/ld-quiz-essays.php:262 msgid "View uploaded file" msgstr "" #: includes/quiz/ld-quiz-essays.php:289 msgid "Essay Question Title" msgstr "" #: includes/quiz/ld-quiz-essays.php:291 msgid "Submitted By" msgstr "" #: includes/quiz/ld-quiz-essays.php:297 msgctxt "Assigned Lesson" msgid "Assigned %s" msgstr "" #: includes/quiz/ld-quiz-essays.php:298 msgctxt "Assigned Quiz" msgid "Assigned %s" msgstr "" #: includes/quiz/ld-quiz-essays.php:355 msgctxt "placeholders: input points / maximum point for essay" msgid "%1$s / %2$d" msgstr "" #: includes/quiz/ld-quiz-essays.php:357 msgctxt "placeholders: current awarded points / maximum point for essay" msgid "%1$d / %2$d" msgstr "" #: includes/quiz/ld-quiz-essays.php:590 msgid "See upload below." msgstr "" #: includes/quiz/ld-quiz-essays.php:657 msgid "Essay Upload" msgstr "" #: includes/quiz/ld-quiz-essays.php:666 #: includes/settings/settings-sections/class-ld-settings-section-courses-cpt.php:167 #: includes/settings/settings-sections/class-ld-settings-section-lessons-cpt.php:167 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-cpt.php:166 #: includes/settings/settings-sections/class-ld-settings-section-topics-cpt.php:167 #: themes/ld30/templates/shortcodes/profile/quiz-row.php:139 msgid "Comments" msgstr "" #: includes/quiz/ld-quiz-essays.php:685 msgid "Upload was not provided for this question" msgstr "" #: includes/quiz/ld-quiz-essays.php:701 msgid "Your Response to Submitted Essay (optional)" msgstr "" #: includes/quiz/ld-quiz-essays.php:778 msgid "Essay Grading Status" msgstr "" #: includes/quiz/ld-quiz-essays.php:826 msgid "Not Graded" msgstr "" #: includes/quiz/ld-quiz-essays.php:838 msgid "Essay Question" msgstr "" #: includes/quiz/ld-quiz-essays.php:864 msgid "Points available" msgstr "" #: includes/quiz/ld-quiz-essays.php:866 msgid "Points awarded" msgstr "" #: includes/quiz/ld-quiz-essays.php:873 msgid "We could not find the essay question for this response" msgstr "" #: includes/quiz/ld-quiz-essays.php:897 #: includes/quiz/ld-quiz-essays.php:917 msgctxt "Essay Quiz" msgid "Essay %s" msgstr "" #: includes/quiz/ld-quiz-essays.php:899 msgctxt "No Quiz" msgid "No %s" msgstr "" #: includes/quiz/ld-quiz-essays.php:930 msgctxt "Essay Course" msgid "Essay %s" msgstr "" #: includes/quiz/ld-quiz-essays.php:943 msgctxt "Essay Lesson" msgid "Essay %s" msgstr "" #: includes/quiz/ld-quiz-essays.php:961 msgid "Submitted on: %1$s" msgstr "" #: includes/quiz/ld-quiz-essays.php:996 msgid "Delete Permanently" msgstr "" #: includes/quiz/ld-quiz-essays.php:998 msgid "Move to Trash" msgstr "" #: includes/quiz/ld-quiz-essays.php:1562 msgid "Invalid essay uploaded file type." msgstr "" #. translators: placeholders: Questions. #: includes/quiz/ld-quiz-functions.php:478 #: includes/quiz/ld-quiz-functions.php:573 msgctxt "placeholder: Questions" msgid "No associated %s" msgstr "" #: includes/quiz/ld-quiz-pro.php:1209 msgid "Certificate Pending - Questions still need to be graded, please check your profile for the status." msgstr "" #: includes/quiz/ld-quiz-pro.php:1558 msgctxt "Previous Quiz Button Label" msgid "View Previous Answers" msgstr "" #: includes/rest-api/v1/class-ld-rest-courses-enroll-controller.php:36 #: includes/rest-api/v1/class-ld-rest-courses-steps-controller.php:42 msgid "Course ID to enroll user into." msgstr "" #: includes/rest-api/v1/class-ld-rest-courses-enroll-controller.php:65 #: includes/rest-api/v1/class-ld-rest-courses-enroll-controller.php:97 #: includes/rest-api/v1/class-ld-rest-courses-steps-controller.php:118 #: includes/rest-api/v1/class-ld-rest-courses-steps-controller.php:149 msgid "You are not currently logged in." msgstr "" #: includes/rest-api/v1/class-ld-rest-courses-groups-controller.php:51 msgid "Course ID to enroll into." msgstr "" #: includes/rest-api/v1/class-ld-rest-courses-groups-controller.php:68 msgid "Group IDs to enroll into Course." msgstr "" #: includes/rest-api/v1/class-ld-rest-courses-groups-controller.php:83 msgid "Group IDs to remove from Course." msgstr "" #: includes/rest-api/v1/class-ld-rest-courses-groups-controller.php:118 #: includes/rest-api/v1/class-ld-rest-courses-groups-controller.php:147 #: includes/rest-api/v1/class-ld-rest-courses-groups-controller.php:175 #: includes/rest-api/v1/class-ld-rest-courses-users-controller.php:113 #: includes/rest-api/v1/class-ld-rest-courses-users-controller.php:141 #: includes/rest-api/v1/class-ld-rest-courses-users-controller.php:170 #: includes/rest-api/v1/class-ld-rest-lessons-controller.php:140 #: includes/rest-api/v1/class-ld-rest-lessons-controller.php:173 #: includes/rest-api/v1/class-ld-rest-lessons-controller.php:179 #: includes/rest-api/v1/class-ld-rest-quizzes-controller.php:171 #: includes/rest-api/v1/class-ld-rest-quizzes-controller.php:205 #: includes/rest-api/v1/class-ld-rest-quizzes-controller.php:229 #: includes/rest-api/v1/class-ld-rest-quizzes-controller.php:233 #: includes/rest-api/v1/class-ld-rest-quizzes-controller.php:238 #: includes/rest-api/v1/class-ld-rest-topics-controller.php:152 #: includes/rest-api/v1/class-ld-rest-topics-controller.php:185 #: includes/rest-api/v1/class-ld-rest-topics-controller.php:199 msgid "Invalid Course ID." msgstr "" #: includes/rest-api/v1/class-ld-rest-courses-groups-controller.php:123 #: includes/rest-api/v1/class-ld-rest-courses-groups-controller.php:152 #: includes/rest-api/v1/class-ld-rest-users-groups-controller.php:125 #: includes/rest-api/v1/class-ld-rest-users-groups-controller.php:153 msgid "Missing Group IDs." msgstr "" #: includes/rest-api/v1/class-ld-rest-courses-groups-controller.php:186 #: includes/rest-api/v1/class-ld-rest-groups-courses-controller.php:182 #: includes/rest-api/v1/class-ld-rest-users-course-progress-controller.php:127 #: includes/rest-api/v1/class-ld-rest-users-courses-controller.php:188 #: includes/rest-api/v1/class-ld-rest-users-groups-controller.php:187 msgid "You need to define a search term to order by relevance." msgstr "" #: includes/rest-api/v1/class-ld-rest-courses-groups-controller.php:191 #: includes/rest-api/v1/class-ld-rest-groups-courses-controller.php:187 #: includes/rest-api/v1/class-ld-rest-users-course-progress-controller.php:132 #: includes/rest-api/v1/class-ld-rest-users-courses-controller.php:193 #: includes/rest-api/v1/class-ld-rest-users-groups-controller.php:192 msgid "You need to define an include parameter to order by include." msgstr "" #: includes/rest-api/v1/class-ld-rest-courses-groups-controller.php:305 #: includes/rest-api/v1/class-ld-rest-groups-courses-controller.php:299 #: includes/rest-api/v1/class-ld-rest-users-course-progress-controller.php:323 #: includes/rest-api/v1/class-ld-rest-users-courses-controller.php:307 #: includes/rest-api/v1/class-ld-rest-users-groups-controller.php:306 msgid "The page number requested is larger than the number of pages available." msgstr "" #: includes/rest-api/v1/class-ld-rest-courses-groups-controller.php:344 #: includes/rest-api/v1/class-ld-rest-courses-users-controller.php:312 #: includes/rest-api/v1/class-ld-rest-groups-courses-controller.php:335 #: includes/rest-api/v1/class-ld-rest-groups-leaders-controller.php:307 #: includes/rest-api/v1/class-ld-rest-groups-users-controller.php:319 #: includes/rest-api/v1/class-ld-rest-users-courses-controller.php:345 #: includes/rest-api/v1/class-ld-rest-users-groups-controller.php:344 msgid "Returned values." msgstr "" #: includes/rest-api/v1/class-ld-rest-courses-steps-controller.php:71 msgid "Filter returned results by step type." msgstr "" #: includes/rest-api/v1/class-ld-rest-courses-users-controller.php:46 msgid "Course ID." msgstr "" #: includes/rest-api/v1/class-ld-rest-courses-users-controller.php:63 msgid "User IDs to enroll into Course. Limit 50 per request." msgstr "" #: includes/rest-api/v1/class-ld-rest-courses-users-controller.php:78 msgid "User IDs to remove from Group. Limit 50 per request." msgstr "" #: includes/rest-api/v1/class-ld-rest-courses-users-controller.php:118 #: includes/rest-api/v1/class-ld-rest-courses-users-controller.php:146 #: includes/rest-api/v1/class-ld-rest-groups-users-controller.php:262 #: includes/rest-api/v1/class-ld-rest-groups-users-controller.php:290 msgid "Missing User IDs." msgstr "" #: includes/rest-api/v1/class-ld-rest-groups-courses-controller.php:50 msgid "Group ID to enroll into." msgstr "" #: includes/rest-api/v1/class-ld-rest-groups-courses-controller.php:67 msgid "Course IDs to enroll into Group." msgstr "" #: includes/rest-api/v1/class-ld-rest-groups-courses-controller.php:82 msgid "Course IDs to remove from Group." msgstr "" #: includes/rest-api/v1/class-ld-rest-groups-courses-controller.php:110 #: includes/rest-api/v1/class-ld-rest-groups-courses-controller.php:144 #: includes/rest-api/v1/class-ld-rest-groups-courses-controller.php:172 #: includes/rest-api/v1/class-ld-rest-groups-leaders-controller.php:110 #: includes/rest-api/v1/class-ld-rest-groups-leaders-controller.php:138 #: includes/rest-api/v1/class-ld-rest-groups-leaders-controller.php:167 #: includes/rest-api/v1/class-ld-rest-groups-users-controller.php:110 #: includes/rest-api/v1/class-ld-rest-groups-users-controller.php:257 #: includes/rest-api/v1/class-ld-rest-groups-users-controller.php:285 msgid "Invalid group ID." msgstr "" #: includes/rest-api/v1/class-ld-rest-groups-courses-controller.php:115 #: includes/rest-api/v1/class-ld-rest-users-courses-controller.php:126 #: includes/rest-api/v1/class-ld-rest-users-courses-controller.php:154 msgid "Missing Course IDs." msgstr "" #: includes/rest-api/v1/class-ld-rest-groups-courses-controller.php:149 msgid "Missing Course ID." msgstr "" #: includes/rest-api/v1/class-ld-rest-groups-leaders-controller.php:44 #: includes/rest-api/v1/class-ld-rest-groups-users-controller.php:45 msgid "Group ID to enroll group leader into." msgstr "" #: includes/rest-api/v1/class-ld-rest-groups-leaders-controller.php:61 msgid "Group Leader User IDs to enroll into Group." msgstr "" #: includes/rest-api/v1/class-ld-rest-groups-leaders-controller.php:76 msgid "Group Leader User IDs to remove from Group." msgstr "" #: includes/rest-api/v1/class-ld-rest-groups-leaders-controller.php:115 #: includes/rest-api/v1/class-ld-rest-groups-leaders-controller.php:143 msgid "Missing Group Leader User IDs." msgstr "" #: includes/rest-api/v1/class-ld-rest-groups-users-controller.php:62 msgid "User IDs to enroll into Group." msgstr "" #: includes/rest-api/v1/class-ld-rest-groups-users-controller.php:77 msgid "User IDs to remove from Group." msgstr "" #. translators: placeholder: course. #: includes/rest-api/v1/class-ld-rest-lessons-controller.php:96 #: includes/rest-api/v1/class-ld-rest-quizzes-controller.php:99 #: includes/rest-api/v1/class-ld-rest-topics-controller.php:96 msgctxt "placeholder: course" msgid "Limit results to be within a specific %s. Required for non-admin users." msgstr "" #: includes/rest-api/v1/class-ld-rest-lessons-controller.php:121 #: includes/rest-api/v1/class-ld-rest-lessons-controller.php:126 #: includes/rest-api/v1/class-ld-rest-lessons-controller.php:131 #: includes/rest-api/v1/class-ld-rest-lessons-controller.php:144 #: includes/rest-api/v1/class-ld-rest-lessons-controller.php:150 #: includes/rest-api/v1/class-ld-rest-lessons-controller.php:154 #: includes/rest-api/v1/class-ld-rest-lessons-controller.php:181 #: includes/rest-api/v1/class-ld-rest-quizzes-controller.php:154 #: includes/rest-api/v1/class-ld-rest-quizzes-controller.php:159 #: includes/rest-api/v1/class-ld-rest-quizzes-controller.php:164 #: includes/rest-api/v1/class-ld-rest-quizzes-controller.php:175 #: includes/rest-api/v1/class-ld-rest-quizzes-controller.php:181 #: includes/rest-api/v1/class-ld-rest-quizzes-controller.php:185 #: includes/rest-api/v1/class-ld-rest-quizzes-controller.php:243 #: includes/rest-api/v1/class-ld-rest-topics-controller.php:135 #: includes/rest-api/v1/class-ld-rest-topics-controller.php:140 #: includes/rest-api/v1/class-ld-rest-topics-controller.php:145 #: includes/rest-api/v1/class-ld-rest-topics-controller.php:156 #: includes/rest-api/v1/class-ld-rest-topics-controller.php:162 #: includes/rest-api/v1/class-ld-rest-topics-controller.php:166 #: includes/rest-api/v1/class-ld-rest-topics-controller.php:201 msgid "Sorry, you are not allowed to view this item." msgstr "" #. translators: placeholder: Question label. #: includes/rest-api/v1/class-ld-rest-questions-controller.php:137 msgctxt "placeholder: Question label" msgid "Could not delete the %s." msgstr "" #: includes/rest-api/v1/class-ld-rest-questions-controller.php:185 msgid "Could not update the %s." msgstr "" #: includes/rest-api/v1/class-ld-rest-quizzes-controller.php:59 msgid "Unique identifier for the Quiz object." msgstr "" #. translators: placeholder: lesson, course, quizzes. #: includes/rest-api/v1/class-ld-rest-quizzes-controller.php:113 msgctxt "placeholder: lesson, course, quizzes" msgid "Limit results to be within a specific %1$s. Pass zero to show global %2$s %3$s. Must be used with course parameter." msgstr "" #. translators: placeholder: topic. #: includes/rest-api/v1/class-ld-rest-quizzes-controller.php:129 msgctxt "placeholder: topic" msgid "Limit results to be within a specific %s. Must be used with course parameter." msgstr "" #: includes/rest-api/v1/class-ld-rest-quizzes-controller.php:213 #: includes/rest-api/v1/class-ld-rest-topics-controller.php:193 msgid "Invalid Lesson ID." msgstr "" #: includes/rest-api/v1/class-ld-rest-quizzes-controller.php:221 msgid "Invalid Topic ID." msgstr "" #. translators: placeholder: lesson. #: includes/rest-api/v1/class-ld-rest-topics-controller.php:110 msgctxt "placeholder: lesson" msgid "Limit results to be within a specific %s. Must be used with course parameter." msgstr "" #: includes/rest-api/v1/class-ld-rest-users-course-progress-controller.php:36 #: includes/rest-api/v1/class-ld-rest-users-quiz-attempts-controller.php:45 msgid "User ID to show course progress" msgstr "" #: includes/rest-api/v1/class-ld-rest-users-course-progress-controller.php:94 #: includes/rest-api/v1/class-ld-rest-users-courses-controller.php:177 #: includes/rest-api/v1/class-ld-rest-users-groups-controller.php:176 #: includes/rest-api/v1/class-ld-rest-users-quiz-attempts-controller.php:89 #: includes/rest-api/v1/class-ld-rest-users-quiz-attempts-controller.php:116 msgid "Invalid user ID. #1" msgstr "" #: includes/rest-api/v1/class-ld-rest-users-courses-controller.php:48 msgid "User ID to enroll user into." msgstr "" #: includes/rest-api/v1/class-ld-rest-users-courses-controller.php:65 msgid "Courses IDs to add to User." msgstr "" #: includes/rest-api/v1/class-ld-rest-users-courses-controller.php:80 msgid "Course IDs to remove from User." msgstr "" #: includes/rest-api/v1/class-ld-rest-users-courses-controller.php:121 #: includes/rest-api/v1/class-ld-rest-users-courses-controller.php:149 #: includes/rest-api/v1/class-ld-rest-users-groups-controller.php:120 #: includes/rest-api/v1/class-ld-rest-users-groups-controller.php:148 msgid "Invalid User ID." msgstr "" #: includes/rest-api/v1/class-ld-rest-users-groups-controller.php:48 #: includes/settings/shortcodes-sections/courseinfo.php:138 #: includes/settings/shortcodes-sections/course_complete.php:75 #: includes/settings/shortcodes-sections/course_inprogress.php:47 #: includes/settings/shortcodes-sections/course_notstarted.php:47 #: includes/settings/shortcodes-sections/ld_certificate.php:59 #: includes/settings/shortcodes-sections/ld_course_expire_status.php:40 #: includes/settings/shortcodes-sections/ld_course_info.php:22 #: includes/settings/shortcodes-sections/ld_course_resume.php:50 #: includes/settings/shortcodes-sections/ld_group.php:40 #: includes/settings/shortcodes-sections/ld_quiz_complete.php:76 #: includes/settings/shortcodes-sections/ld_user_course_points.php:22 #: includes/settings/shortcodes-sections/learndash_course_progress.php:31 #: includes/settings/shortcodes-sections/quizinfo.php:79 #: includes/settings/shortcodes-sections/student.php:40 #: includes/settings/shortcodes-sections/usermeta.php:31 #: includes/settings/shortcodes-sections/user_groups.php:22 #: includes/gutenberg/blocks/ld-certificate/index.js:117 #: includes/gutenberg/blocks/ld-certificate/index.js:171 #: includes/gutenberg/blocks/ld-course-complete/index.js:76 #: includes/gutenberg/blocks/ld-course-expire-status/index.js:108 #: includes/gutenberg/blocks/ld-course-expire-status/index.js:150 #: includes/gutenberg/blocks/ld-course-info/index.js:135 #: includes/gutenberg/blocks/ld-course-info/index.js:361 #: includes/gutenberg/blocks/ld-course-inprogress/index.js:75 #: includes/gutenberg/blocks/ld-course-list/index.js:439 #: includes/gutenberg/blocks/ld-course-notstarted/index.js:76 #: includes/gutenberg/blocks/ld-course-progress/index.js:98 #: includes/gutenberg/blocks/ld-course-progress/index.js:121 #: includes/gutenberg/blocks/ld-course-resume/index.js:100 #: includes/gutenberg/blocks/ld-course-resume/index.js:153 #: includes/gutenberg/blocks/ld-courseinfo/index.js:187 #: includes/gutenberg/blocks/ld-courseinfo/index.js:252 #: includes/gutenberg/blocks/ld-group/index.js:72 #: includes/gutenberg/blocks/ld-profile/index.js:199 #: includes/gutenberg/blocks/ld-quiz-complete/index.js:83 #: includes/gutenberg/blocks/ld-student/index.js:75 #: includes/gutenberg/blocks/ld-user-course-points/index.js:72 #: includes/gutenberg/blocks/ld-user-groups/index.js:71 #: includes/gutenberg/blocks/ld-user-groups/index.js:87 #: includes/gutenberg/blocks/ld-usermeta/index.js:117 #: includes/gutenberg/blocks/ld-usermeta/index.js:135 msgid "User ID" msgstr "" #: includes/rest-api/v1/class-ld-rest-users-groups-controller.php:65 msgid "Group IDs to add to User." msgstr "" #: includes/rest-api/v1/class-ld-rest-users-groups-controller.php:80 msgid "Group IDs to remove from User." msgstr "" #: includes/rest-api/v1/class-ld-rest-users-quiz-attempts-controller.php:99 msgid "Invalid user ID." msgstr "" #: includes/rest-api/v1/class-ld-rest-users-quiz-attempts-controller.php:105 msgid "Sorry, you are not allowed to edit this user." msgstr "" #: includes/settings/class-ld-settings-pages.php:504 msgid "You have errors on the following settings" msgstr "" #: includes/settings/class-ld-settings-sections.php:430 msgid "Reset Settings" msgstr "" #: includes/settings/class-ld-shortcodes-sections.php:163 msgid "Insert Shortcode" msgstr "" #: includes/settings/settings-fields/class-ld-settings-fields-date-entry.php:70 msgid "MM" msgstr "" #: includes/settings/settings-fields/class-ld-settings-fields-media-upload.php:69 msgid "remove image" msgstr "" #: includes/settings/settings-fields/class-ld-settings-fields-media-upload.php:69 msgctxt "placeholder: clear image" msgid "X" msgstr "" #: includes/settings/settings-fields/class-ld-settings-fields-media-upload.php:70 msgid "Select/upload image" msgstr "" #: includes/settings/settings-fields/class-ld-settings-fields-media-upload.php:70 msgid "Select image" msgstr "" #: includes/settings/settings-fields/class-ld-settings-fields-quiz-custom-fields.php:55 msgid "ID" msgstr "" #: includes/settings/settings-fields/class-ld-settings-fields-quiz-custom-fields.php:88 msgid "Textarea" msgstr "" #: includes/settings/settings-fields/class-ld-settings-fields-quiz-templates-load.php:105 msgid "Search or select a template…" msgstr "" #. translators: placeholder: Course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:28 msgctxt "placeholder: Course" msgid "%s Access Settings" msgstr "" #. translators: placeholder: course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:34 msgctxt "placeholder: course" msgid "Controls how users will gain access to the %s" msgstr "" #. translators: placeholder: course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:172 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-access-settings.php:106 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-access-settings.php:136 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-access-settings.php:94 msgctxt "placeholder: course" msgid "Search or select a %s…" msgstr "" #. translators: placeholder: course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:179 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-access-settings.php:114 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-access-settings.php:144 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-access-settings.php:102 msgctxt "placeholder: course" msgid "Select %s" msgstr "" #. translators: placeholder: Course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:196 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:213 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:247 #: includes/settings/shortcodes-sections/courseinfo.php:48 #: includes/gutenberg/blocks/ld-courseinfo/index.js:106 msgctxt "placeholder: Course" msgid "%s Price" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:257 msgid "Button URL" msgstr "" #. translators: placeholder: "Take this Course" button label #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:263 msgctxt "placeholder: \"Take this Course\" button label" msgid "Redirect the \"%s\" button to a specific URL." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:281 msgid "Access Mode" msgstr "" #. translators: placeholder: course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:290 msgctxt "placeholder: course" msgid "The %s is not protected. Any user can access its content without the need to be logged-in or enrolled." msgstr "" #. translators: placeholder: course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:298 msgctxt "placeholder: course" msgid "The %s is protected. Registration and enrollment are required in order to access the content." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:303 msgid "Buy now" msgstr "" #. translators: placeholder: course, course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:306 msgctxt "placeholder: course, course" msgid "The %1$s is protected via the LearnDash built-in PayPal and/or Stripe. Users need to purchase the %2$s (one-time fee) in order to gain access." msgstr "" #. translators: placeholder: course, course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:319 msgctxt "placeholder: course, course" msgid "The %1$s is protected via the LearnDash built-in PayPal and/or Stripe. Users need to purchase the %2$s (recurring fee) in order to gain access." msgstr "" #. translators: placeholder: course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:332 msgctxt "placeholder: course" msgid "The %s can only be accessed through admin enrollment (manual), group enrollment, or integration (shopping cart or membership) enrollment. No enrollment button will be displayed, unless a URL is set (optional)." msgstr "" #. translators: placeholder: Course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:346 msgctxt "placeholder: Course" msgid "%s Prerequisites" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:359 msgid "Compare Mode" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:365 msgid "Any Selected" msgstr "" #. translators: placeholder: courses, course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:368 msgctxt "placeholder: course, course" msgid "The user must complete any one of the selected %1$s in order to access this %2$s" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:374 msgid "All Selected" msgstr "" #. translators: placeholder: course, course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:377 msgctxt "placeholder: course, course" msgid "The user must complete all selected %1$s in order to access this %2$s" msgstr "" #. translators: placeholder: Courses. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:395 msgctxt "placeholder: courses" msgid "%s to Complete" msgstr "" #. translators: placeholder: Course #. translators: placeholder: Course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:405 #: includes/settings/shortcodes-sections/courseinfo.php:42 #: includes/gutenberg/blocks/ld-courseinfo/index.js:102 msgctxt "placeholder: Course" msgid "%s Points" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:417 msgid "Required for Access" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:422 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:447 msgid "point(s)" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:423 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:454 msgid "Value should be zero or greater with up to 2 decimal places." msgstr "" #. translators: placeholder: course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:434 msgctxt "placeholder: course." msgid "Number of points required in order to gain access to this %s." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:440 msgid "Awarded on Completion" msgstr "" #. translators: placeholder: course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:451 msgctxt "placeholder: course." msgid "Number of points awarded for completing this %s." msgstr "" #. translators: placeholder: Course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:468 msgctxt "placeholder: Course" msgid "%s Access Expiration" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:480 msgid "Access Period" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:485 msgid "days" msgstr "" #. translators: placeholder: course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:489 msgctxt "placeholder: course." msgid "Set the number of days a user will have access to the %s from enrollment date." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:495 msgid "Data Deletion" msgstr "" #. translators: placeholder: course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:500 msgctxt "placeholder: course." msgid "All user %s data will be deleted upon access expiration" msgstr "" #. translators: placeholder: course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:509 msgctxt "placeholder: course, quiz, course." msgid "Delete the user's %1$s and %2$s data when the %3$s access expires." msgstr "" #. translators: placeholder: Course #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:519 msgctxt "placeholder: Course" msgid "Alter %s Access List" msgstr "" #. translators: placeholder: Course #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:526 msgctxt "placeholder: Course" msgid "You can change the LD-%s enrollees by user ID (Proceed with caution)" msgstr "" #. translators: placeholder: course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:536 msgctxt "placeholder: course." msgid "Displays a list of %s enrollees by user ID. Note that not all enrollees may be reflected. We do not recommend editing this field." msgstr "" #. translators: placeholder: course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php:548 msgctxt "placeholder: course" msgid "Add a comma-list of user IDs to grant access to this %s" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:26 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:26 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:32 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:26 msgid "Display and Content Options" msgstr "" #. translators: placeholder: course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:31 msgctxt "placeholder: course" msgid "Controls the look and feel of the %s and optional content settings" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:131 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php:157 msgid "Search or select a certificate…" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:135 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php:161 msgid "Select Certificate" msgstr "" #. translators: placeholder: Course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:151 msgctxt "placeholder: Course" msgid "%s Materials" msgstr "" #. translators: placeholder: course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:156 msgctxt "placeholder: course" msgid "List and display support materials for the %s. This is visible to all users (including non-enrollees) by default." msgstr "" #. translators: placeholder: Course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:164 msgctxt "placeholder: Course" msgid "Any content added below is displayed on the main %s page" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:178 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:352 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:420 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:344 msgid "Add a list of needed documents or URLs. This field supports HTML." msgstr "" #. translators: placeholder: Course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:189 msgctxt "placeholder: Course" msgid "%s Certificate" msgstr "" #. translators: placeholder: Course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:200 #: includes/settings/shortcodes-sections/course_content.php:11 msgctxt "placeholder: Course" msgid "%s Content" msgstr "" #. translators: placeholder: Course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:207 msgctxt "placeholder: Course" msgid "Choose whether to display the %s content table to ALL users or only enrollees" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:211 msgid "Always visible" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:212 msgid "Only visible to enrollees" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:219 msgid "Custom Pagination" msgstr "" #. translators: placeholders: course, course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:223 msgctxt "placeholders: course, course" msgid "Customize the pagination options for this %1$s content table and %2$s navigation widget." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:228 msgid "Currently showing default pagination" msgstr "" #. translators: placeholder: Lessons per page. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:240 msgctxt "placeholder: Lessons per page" msgid "%s" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:243 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:261 #: includes/settings/settings-sections/class-ld-settings-section-courses-management-display.php:185 #: includes/settings/settings-sections/class-ld-settings-section-courses-management-display.php:268 #: includes/settings/settings-sections/class-ld-settings-section-courses-management-display.php:285 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-management-display.php:207 #: includes/gutenberg/blocks/ld-course-info/index.js:172 #: includes/gutenberg/blocks/ld-course-info/index.js:231 #: includes/gutenberg/blocks/ld-course-info/index.js:290 msgid "per page" msgstr "" #. translators: placeholder: Topics per page. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:258 msgctxt "placeholder: Topics per page" msgid "%s" msgstr "" #. translators: placeholder: Lesson. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:275 msgctxt "placeholder: Lesson" msgid "Custom %s Order" msgstr "" #. translators: placeholders: lessons, topics. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:281 msgctxt "placeholders: lessons, topics" msgid "Customize the display order of %1$s and %2$s." msgstr "" #. translators: placeholder: lesson order by, lesson order direction labels. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:288 msgctxt "placeholder: lesson order by, lesson order direction labels" msgid "Using default sorting by %1$s in %2$s order" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php:320 #: includes/settings/settings-sections/class-ld-settings-section-courses-management-display.php:349 msgid "Order Direction" msgstr "" #. translators: placeholder: course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-navigation-settings.php:28 msgctxt "placeholder: course" msgid "%s Navigation Settings" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-navigation-settings.php:32 msgid "Controls how users interact with the content and their navigational experience" msgstr "" #. translators: placeholder: Course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-navigation-settings.php:64 msgctxt "placeholder: Course" msgid "%s Progression" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-navigation-settings.php:70 msgid "Linear" msgstr "" #. translators: placeholder: Course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-navigation-settings.php:73 msgctxt "placeholder: Course" msgid "Requires the user to progress through the %s in the designated step sequence" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-navigation-settings.php:78 msgid "Free form" msgstr "" #. translators: placeholder: Course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-navigation-settings.php:81 msgctxt "placeholder: Course" msgid "Allows the user to move freely through the %s without following the designated step sequence" msgstr "" #. translators: placeholder: Course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-users.php:28 msgctxt "placeholder: Course" msgid "%s Users" msgstr "" #. translators: placeholder: Course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-users.php:99 msgctxt "placeholder: Course" msgid "Users enrolled via Groups using this %s are excluded from the listings below and should be manage via the Group admin screen." msgstr "" #. translators: placeholder: Course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-course-users.php:119 msgctxt "placeholder: Course" msgid "The %s price type is set to \"open\". This means ALL are automatically enrolled." msgstr "" #. translators: placeholder: Lesson. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-access-settings.php:28 msgctxt "placeholder: Lesson" msgid "%s Access Settings" msgstr "" #. translators: placeholder: lessons. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-access-settings.php:34 msgctxt "placeholder: lessons" msgid "Controls the timing and way %s can be accessed." msgstr "" #. Translators: placeholder: Course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-access-settings.php:158 msgctxt "placeholder: Course" msgid "Associated %s" msgstr "" #. Translators: placeholder: lesson, course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-access-settings.php:180 msgctxt "placeholder: lesson, course" msgid "This %1$s is accessible to all visitors regardless of %2$s enrollment" msgstr "" #. Translators: placeholder: Lesson. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-access-settings.php:191 msgctxt "placeholder: Lessons" msgid "%s Release Schedule" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-access-settings.php:198 msgid "Immediately" msgstr "" #. translators: placeholder: lesson, course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-access-settings.php:201 msgctxt "placeholder: lesson, course" msgid "The %1$s is made available on %2$s enrollment." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-access-settings.php:207 msgid "Enrollment-based" msgstr "" #. translators: placeholder: lesson, course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-access-settings.php:210 msgctxt "placeholder: lesson, course." msgid "The %1$s will be available X days after %2$s enrollment." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-access-settings.php:220 msgid "Specific date" msgstr "" #. translators: placeholders: lesson. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-access-settings.php:223 msgctxt "placeholders: lesson" msgid "The %s will be available on a specific date." msgstr "" #. translators: placeholder: lesson. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:31 msgctxt "placeholder: lesson" msgid "Controls the look and feel of the %s and optional content settings" msgstr "" #. translators: placeholder: Lesson. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:235 msgctxt "placeholder: Lesson" msgid "%s auto-completion" msgstr "" #. translators: placeholder: lesson. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:246 msgctxt "placeholder: lesson" msgid " Automatically mark the %s as completed once the user has watched the full video." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:252 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:244 msgid "Completion delay" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:261 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:397 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:253 msgid "seconds" msgstr "" #. translators: placeholder: lesson. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:264 msgctxt "placeholder: lesson" msgid "Specify a delay between video completion and %s completion." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:271 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:263 msgid "Mark Complete Button" msgstr "" #. translators: placeholder: lesson. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:276 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:267 msgctxt "placeholder: lesson" msgid "Display the Mark Complete button on a %s even if not yet clickable." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:296 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:288 msgid "file(s) maximum" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:301 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:293 msgid "Specify the maximum number of files a user can upload for this assignment." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:305 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:297 msgid "Allow file deletion" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:309 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:301 msgid "Allow the user to delete their own uploaded files. This is only possible up until the assignment has been approved." msgstr "" #. translators: placeholder: Lesson. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:325 msgctxt "placeholder: Lesson" msgid "%s Materials" msgstr "" #. translators: placeholder: lesson, lesson. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:330 msgctxt "placeholder: lesson, lesson" msgid "List and display support materials for the %1$s. This is visible to any user having access to the %2$s." msgstr "" #. translators: placeholder: Lesson. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:339 msgctxt "placeholder: Lesson" msgid "Any content added below is displayed on the %s page" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:361 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:353 msgid "Video Progression" msgstr "" #. translators: placeholder: Course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:365 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:357 msgctxt "placeholder: Course" msgid "Require users to watch the full video as part of the %s progression. Use shortcode [ld_video] to move within the post content." msgstr "" #. translators: placeholder: Course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:376 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:367 msgctxt "placeholder: Course" msgid "The below video is tied to %s progression" msgstr "" #. translators: placeholder: Lesson. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:381 msgctxt "placeholder: Lesson" msgid "Cannot be enabled while %s timer or Assignments are enabled" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:395 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:387 msgid "Input URL, iFrame, or shortcode here." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:404 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:396 msgid "Display Timing" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:411 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:403 msgid "Before completed sub-steps" msgstr "" #. translators: placeholder: Lesson. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:414 msgctxt "placeholder: Lesson" msgid "The video will be shown and must be fully watched before the user can access the %s’s associated steps." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:419 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:411 msgid "After completing sub-steps" msgstr "" #. translators: placeholder: Lesson, Lesson. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:422 msgctxt "placeholder: Lesson, Lesson" msgid "The video will be visible after the user has completed the %1$s’s associated steps. The full video must be watched in order to complete the %2$s." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:438 msgid "Video may not autostart for mobile users. Check with the video provider for details." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:441 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:432 msgid "The video now starts automatically on page load" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:448 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:439 msgid "Video Controls Display" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:450 msgid "Only available for YouTube and local videos. Vimeo supported if autostart is enabled." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:455 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:446 msgid "Users can pause, move backward and forward within the video" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:462 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:453 msgid "Assignment Uploads" msgstr "" #. translators: placeholder: Lesson. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:472 msgctxt "placeholder: Lesson" msgid "Cannot be enabled while %s timer or Video progression are enabled" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:481 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:472 msgid "File Extensions" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:483 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:474 msgid "pdf, xls, zip" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:484 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:475 msgid "Specify the type of files users can upload. Leave blank for any." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:492 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:483 msgid "File Size Limit" msgstr "" #. translators: placeholder: PHP file upload size. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:497 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:488 msgctxt "placeholder: PHP file upload size" msgid "%s" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:500 msgid "Default maximum file size supported is controlled by your host." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:513 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:508 msgid "Award points for submitting assignments" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:529 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:524 msgid "available point(s)" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:535 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:530 msgid "Grading Type" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:540 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:536 msgid "Auto-approve" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:541 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:537 msgid "No grading or approval needed. The assignment will be automatically approved and full points will be awarded." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:544 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:540 msgid "Manually grade" msgstr "" #. translators: placeholder: lesson. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:547 msgctxt "placeholder: lesson" msgid "Admin or group leader approval and grading required. The %s cannot be completed until the assignment is approved." msgstr "" #. translators: placeholder: topic. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:570 msgctxt "placeholder: Lesson" msgid "The %s cannot be marked as completed until the set time has elapsed." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php:577 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:573 msgid "Cannot be enabled while Video progression or Assignments are enabled" msgstr "" #. translators: placeholder: Quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-access-settings.php:28 msgctxt "placeholder: Quiz" msgid "%s Access Settings" msgstr "" #. translators: placeholder: quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-access-settings.php:34 msgctxt "placeholder: quiz" msgid "Controls the requirements for accessing the %s" msgstr "" #. translators: placeholder: Lesson, Topic. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-access-settings.php:155 msgctxt "placeholder: Lesson, Topic" msgid "Search or select a %1$s or %2$s…" msgstr "" #. translators: placeholder: Lesson, Topic. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-access-settings.php:164 msgctxt "placeholder: Lesson, Topic" msgid "Select a %1$s or %2$s" msgstr "" #. translators: placeholder: Quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-access-settings.php:191 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-access-settings.php:199 msgctxt "placeholder: Quiz." msgid "No previous %s required" msgstr "" #. translators: placeholder: Lesson. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-access-settings.php:242 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-access-settings.php:171 msgctxt "placeholder: Lesson" msgid "Associated %s" msgstr "" #. translators: placeholder: Quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-access-settings.php:261 msgctxt "placeholder: Quiz" msgid "%s Prerequisites" msgstr "" #. translators: placeholderss: quizzes, quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-access-settings.php:266 msgctxt "placeholderss: Quizzes Quiz" msgid "Select one or more %1$s that must be completed prior to taking this %2$s." msgstr "" #. translators: placeholder: Quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-access-settings.php:272 msgctxt "placeholder: Quiz" msgid "No previous %s required" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-access-settings.php:283 msgid "Allowed Users" msgstr "" #. translators: placeholders: quizzes, courses, quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-access-settings.php:287 msgctxt "placeholders: quizzes, courses, quiz." msgid "This option is especially useful if administering %1$s via shortcodes on non-course pages, or if your %2$s are open but you wish only authenticated users to take the %3$s." msgstr "" #. translators: placeholder: quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-access-settings.php:296 msgctxt "placeholder: quiz" msgid "Only registered users can take this quiz" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:27 msgid "Administrative and Data Handling Settings" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:29 msgid "Controls data handling options, notifications and templates." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:299 msgid "Select a ProQuiz association" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:300 msgid "New ProQuiz association" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:307 msgid "Re-apply after" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:312 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:349 msgid "minutes" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:331 msgid "Below the result text" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:332 msgid "In a button" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:343 msgid "IP-lock time limit" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:344 msgid "Protect the statistics from spam. Results will only be saved every X minutes." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:363 msgid "Email trigger" msgstr "" #. translators: placeholder: quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:367 msgctxt "placeholder: quiz" msgid "The admin will receive an email notification when the following users have taken the %s." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:375 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php:319 msgid "All users" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:376 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:495 #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php:320 msgid "Registered users only" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:387 msgid "Cookie time limit" msgstr "" #. translators: placeholder: Quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:390 msgctxt "placeholder: Quiz" msgid "Save the user’s answers into a browser cookie until the %s is submitted" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:414 msgid "Associated Quiz Database Table" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:431 #: includes/settings/settings-sections/class-ld-settings-section-courses-cpt.php:168 #: includes/settings/settings-sections/class-ld-settings-section-lessons-cpt.php:168 #: includes/settings/settings-sections/class-ld-settings-section-quizzes-cpt.php:167 #: includes/settings/settings-sections/class-ld-settings-section-topics-cpt.php:168 msgid "Custom Fields" msgstr "" #. translators: placeholder: quiz, Quiz #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:436 msgctxt "placeholder: quiz, Quiz" msgid "Enable this option to gather data from your users before or after the %1$s. All data is stored in the %2$s Statistics." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:457 msgid "Display Position" msgstr "" #. translators: placeholder: quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:464 msgctxt "placeholder: quiz." msgid "On the %s startpage" msgstr "" #. translators: placeholder: quiz, quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:469 msgctxt "placeholder: quiz, quiz" msgid "At the end of the %1$s (before the %2$s result)" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:491 msgid "Who can apply?" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:494 msgid "All user" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:496 msgid "Anonymous users only" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:504 msgid "Multiple Applications per user" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:510 msgid "Users can apply more than once to the leaderboard" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:521 msgid "Automatic user entry" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:532 msgid "Number of displayed entries" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:547 msgid "Sort list by?" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:552 msgid "Best user" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:553 msgid "Newest entry" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:554 msgid "Oldest entry" msgstr "" #. translators: placeholder: Quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:562 msgctxt "placeholder: Quiz." msgid "Display on %s results page" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:580 msgid "Really Simple CAPTCHA" msgstr "" #. translators: placeholder: links to Real Simple CAPTCHA. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:583 msgctxt "placeholder: links to Real Simple CAPTCHA" msgid "This option requires additional plugin: %s" msgstr "" #. translators: placeholder: Quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:599 msgctxt "placeholder: Quiz." msgid "%s Statistics" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:612 msgid "Front-end Profile Display" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:639 msgid "Email Notifications" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:651 msgid "Admin" msgstr "" #. translators: placeholder: Quiz #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:680 msgctxt "placeholder: Quiz" msgid "%s Templates" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:723 msgid "Browser Cookie Answer Protection" msgstr "" #. translators: placeholder: quizzes #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php:727 msgctxt "placeholder: quizzes" msgid "Browser cookies have limited memory. This may not work with large %s." msgstr "" #. translators: placeholder: quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:37 msgctxt "placeholder: quiz" msgid "Controls how the %s will look and what will be displayed" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:307 msgid "Display Back button" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:324 msgid "Display results at the end only" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:331 msgid "Display results after each submitted answer" msgstr "" #. translators: placeholder: questions. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:348 msgctxt "placeholder: questions" msgid "%s per page (0 = all)" msgstr "" #. translators: placeholder: questions. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:371 msgctxt "placeholder: count of questions, questions label." msgid "out of %1$d %2$s." msgstr "" #. translators: placeholder: Quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:393 msgctxt "placeholder: Quiz" msgid "%s Materials" msgstr "" #. translators: placeholder: quiz, quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:398 msgctxt "placeholder: quiz, quiz" msgid "List and display support materials for the %1$s. This is visible to any user having access to the %2$s." msgstr "" #. translators: placeholder: Quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:407 msgctxt "placeholder: Quiz" msgid "Any content added below is displayed on the %s page" msgstr "" #. translators: placeholder: Quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:436 msgctxt "placeholder: Quiz" msgid "Start automatically, without the \"Start %s\" button" msgstr "" #. translators: placeholder: Question. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:446 msgctxt "placeholder: Question" msgid "%s Display" msgstr "" #. translators: placeholder: question. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:456 msgctxt "placeholder: question" msgid "One %s at a time" msgstr "" #. translators: placeholder: questions. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:467 msgctxt "placeholder: questions" msgid "All %s at once (or paginated)" msgstr "" #. translators: placeholder: Question. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:483 msgctxt "placeholder: Question" msgid "%s Overview Table" msgstr "" #. translators: placeholder: Quiz, Questions. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:492 msgctxt "placeholder: Questions" msgid "An overview table will be shown for all %s." msgstr "" #. translators: placeholder: Quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:503 msgctxt "placeholder: Quiz" msgid "%s Summary" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:510 msgid "Display a summary table before submission" msgstr "" #. translators: placeholder: Question. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:519 msgctxt "placeholder: Question" msgid "Skip %s" msgstr "" #. translators: placeholder: Question. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:535 msgctxt "placeholder: Question" msgid "Custom %s Ordering" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:548 msgid "Sort by Category" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:559 msgid "Randomize Order" msgstr "" #. translators: placeholder: questions. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:579 msgctxt "placeholder: questions" msgid "Display all %s" msgstr "" #. translators: placeholder: questions. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:586 msgctxt "placeholder: questions" msgid "Display subset of %s" msgstr "" #. translators: placeholder: Question. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:603 msgctxt "placeholder: Question" msgid "Additional %s Options" msgstr "" #. translators: placeholder: Question. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:612 msgctxt "placeholder: Question" msgid "Any enabled elements below will be displayed in each %s" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:622 msgid "Point Value" msgstr "" #. translators: placeholder: Question. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:650 msgctxt "placeholder: Question" msgid "%s Position" msgstr "" #. translators: placeholder: Question. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:666 msgctxt "placeholder: Question" msgid "%s Numbering" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:679 msgid "Number Answers" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:690 msgid "Randomize Answers" msgstr "" #. translators: placeholder: question. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:693 msgctxt "placeholder: question." msgid "Answer display will be randomized within any given %s." msgstr "" #. translators: placeholder: Quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:709 #: includes/settings/shortcodes-sections/quizinfo.php:35 #: includes/settings/shortcodes-sections/quizinfo.php:36 msgctxt "placeholder: Quiz" msgid "%s Title" msgstr "" #. translators: placeholder: quiz, Quiz, Quizzes. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:716 msgctxt "placeholder: quiz, Quiz, Quizzes." msgid "A second %1$s title will be displayed on the %2$s Post. This option is recommended if displaying %3$s via Shortcode." msgstr "" #. translators: placeholder: Quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:724 msgctxt "placeholder: Quiz" msgid "Only the %s Post title is shown" msgstr "" #. translators: placeholder: Quiz, Quiz, quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php:729 msgctxt "placeholder: Quiz, Quiz, quiz" msgid "The %1$s Title is displayed in addition to the %2$s Post title. Recommended for %3$s shortcode usage." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php:27 msgid "Progression and Restriction Settings" msgstr "" #. translators: placeholder: quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php:31 msgctxt "placeholder: quiz" msgid "Controls the requirement for accessing and completing the %s" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php:235 msgid "Passing Score" msgstr "" #. translators: placeholder: Quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php:252 msgctxt "placeholder: Quiz" msgid " %s Certificate" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php:262 msgid "Certificate Awarded for" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php:267 msgid "Set the score needed to receive a certificate. This can be different from the \"Passing Score\"." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php:268 msgid "% score" msgstr "" #. translators: placeholder: Quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php:283 msgctxt "placeholder: Quiz" msgid "Restrict %s Retakes" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php:296 msgid "Number of Retries Allowed" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php:297 msgid "You must input a whole number value or leave blank to default to 0." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php:314 msgid "Retries Applicable to" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php:321 msgid "Anonymous user only" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php:330 msgid "Use a cookie to restrict ALL users, including anonymous visitors" msgstr "" #. translators: placeholder: Question. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php:349 msgctxt "placeholder: Question" msgid "%s Completion" msgstr "" #. translators: placeholder: Questions. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php:356 msgctxt "placeholder: Questions" msgid "All %s required to complete" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php:365 msgid "Time Limit" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php:377 msgid "Automatically Submit After" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php:380 msgid "e.g. 0" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:27 msgid "Results Page Display" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:29 msgid "Controls how the results page will look" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:208 msgid "Result Message(s)" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:211 msgid "When enabled, the first message will be diplayed to ALL users. To customize the message based on earned score, add new Graduation Levels and set the 'From' field to the desired grade." msgstr "" #. translators: placeholder: Quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:216 msgctxt "placeholder: Quiz" msgid "The message below is displayed on the %s results page." msgstr "" #. translators: placeholder: Quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:237 msgctxt "placeholder: Quiz" msgid "Restart %s button" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:250 msgid "Custom Results Display" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:255 msgid "Enable the items you wish to display on the Result Page" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:263 msgid "Average Score" msgstr "" #. translators: placeholder: quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:266 msgctxt "placeholder: quiz" msgid "Display the average score of all users who took the %s" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:280 msgid "Category Score" msgstr "" #. translators: placeholder: Question. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:283 msgctxt "placeholder: Question" msgid "Display the score achieved for each %s Category" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:297 msgid "Overall Score" msgstr "" #. translators: placeholder: Quiz. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:305 msgctxt "placeholder: Quiz" msgid "The achieved %s score is NOT be displayed on the Results page" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:313 msgid "No. of Correct Answers" msgstr "" #. translators: placeholder: Questions. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:321 msgctxt "placeholder: Questions" msgid "The number of correctly answered %s is NOT displayed on the Results page." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:330 #: includes/settings/shortcodes-sections/quizinfo.php:37 msgid "Time Spent" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:342 msgid "Custom Answer Feedback" msgstr "" #. translators: placeholder: questions. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:345 msgctxt "placeholder: questions" msgid "Select which data users should be able to view when reviewing their submitted %s." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:359 msgid "Correct / Incorrect Messages" msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:370 msgid "Correct / Incorrect Answer Marks" msgstr "" #. translators: placeholder: Questions. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:383 msgctxt "placeholder: Questions" msgid "View %s Button" msgstr "" #. translators: placeholder: input form field. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php:551 msgctxt "placeholder: input form field" msgid "From %s %% score, display this message:" msgstr "" #. translators: placeholder: Topic. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-access-settings.php:28 msgctxt "placeholder: Topic" msgid "%s Access Settings" msgstr "" #. translators: placeholder: topic. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-access-settings.php:34 msgctxt "placeholder: topic" msgid "Controls how, where, and when the %s can be accessed." msgstr "" #. translators: placeholder: Lesson. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-access-settings.php:113 msgctxt "placeholder: Lesson" msgid "Search or select a %s…" msgstr "" #. translators: placeholder: Lesson. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-access-settings.php:121 msgctxt "placeholder: Lesson" msgid "Select %s" msgstr "" #. translators: placeholders: Topic, Course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-access-settings.php:155 msgctxt "placeholder: Topic, Course." msgid "Associate this %1$s with a %2$s." msgstr "" #. translators: placeholders: Lesson, Course. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-access-settings.php:178 msgctxt "placeholders: Lesson, Course" msgid "Associate this %1$s with a %2$s." msgstr "" #. translators: placeholder: topic. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:31 msgctxt "placeholder: topic" msgid "Controls the look and feel of the %s and optional content settings" msgstr "" #. translators: placeholder: Topic. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:227 msgctxt "placeholder: Topic" msgid "%s auto-completion" msgstr "" #. translators: placeholder: topic. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:238 msgctxt "placeholder: topic" msgid " Automatically mark the %s as completed once the user has watched the full video." msgstr "" #. translators: placeholder: topic. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:256 msgctxt "placeholder: topic" msgid "Specify a delay between video completion and %s completion." msgstr "" #. translators: placeholder: Topic. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:317 msgctxt "placeholder: Topic" msgid "%s Materials" msgstr "" #. translators: placeholder: topic, topic. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:322 msgctxt "placeholder: topic, topic" msgid "List and display support materials for the %1$s. This is visible to any user having access to the %2$s." msgstr "" #. translators: placeholder: topic. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:331 msgctxt "placeholder: topic" msgid "Any content added below is displayed on the %s page" msgstr "" #. translators: placeholder: Topic. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:373 msgctxt "placeholder: Topic" msgid "Cannot be enabled while %s timer or Assignments are enabled" msgstr "" #. translators: placeholder: topic. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:406 msgctxt "placeholder: topic" msgid "The video will be shown and must be fully watched before the user can access the %s’s associated steps." msgstr "" #. translators: placeholder: topic, topic. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:414 msgctxt "placeholder: topic, topic" msgid "The video will be visible after the user has completed the %1$s’s associated steps. The full video must be watched in order to complete the %2$s." msgstr "" #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:441 msgid "Only available for YouTube and local videos." msgstr "" #. translators: placeholder: topic. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:463 msgctxt "placeholder: toic" msgid "Cannot be enabled while %s timer or Video progression are enabled" msgstr "" #. translators: placeholder: PHP file upload size. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:493 msgctxt "placeholder: PHP file upload size" msgid "Default maximum file size supported is: %s" msgstr "" #. translators: placeholder: topic. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:543 msgctxt "placeholder: topic" msgid "Admin or group leader approval and grading required. The %s cannot be completed until the assignment is approved." msgstr "" #. translators: placeholder: Topic. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:558 msgctxt "placeholder: Topic" msgid "%s Timer" msgstr "" #. translators: placeholder: topic. #: includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php:566 msgctxt "placeholder: topic" msgid "The %s cannot be marked as completed until the set time has elapsed." msgstr "" #: includes/settings/settings-pages/class-ld-settings-page-addons.php:24 #: includes/settings/settings-pages/class-ld-settings-page-overview.php:964 msgid "LearnDash Add-ons" msgstr "" #: includes/settings/settings-pages/class-ld-settings-page-addons.php:25 #: includes/settings/settings-pages/class-ld-settings-page-overview.php:1041 msgid "Add-ons" msgstr "" #: includes/settings/settings-pages/class-ld-settings-page-addons.php:251 msgctxt "Plugin installer section title" msgid "Description" msgstr "" #: includes/settings/settings-pages/class-ld-settings-page-addons.php:252 msgctxt "Plugin installer section title" msgid "Installation" msgstr "" #: includes/settings/settings-pages/class-ld-settings-page-addons.php:253 msgctxt "Plugin installer section title" msgid "FAQ" msgstr "" #: includes/settings/settings-pages/class-ld-settings-page-addons.php:254 msgctxt "Plugin installer section title" msgid "Screenshots" msgstr "" #: includes/settings/settings-pages/class-ld-settings-page-addons.php:255 msgctxt "Plugin installer section title" msgid "Changelog" msgstr "" #: includes/settings/settings-pages/class-ld-settings-page-addons.php:256 msgctxt "Plugin installer section title" msgid "Reviews" msgstr "" #: includes/settings/settings-pages/class-ld-settings-page-addons.php:257 msgctxt "Plugin installer section title" msgid "Other Notes" msgstr "" #: includes/settings/settings-pages/class-ld-settings-page-addons.php:290 msgid "Plugin Installation" msgstr "" #: includes/settings/settings-pages/class-ld-settings-page-addons.php:346 msgid "Version:" msgstr "" #: includes/settings/settings-pages/class-ld-settings-page-addons.php:348 msgid "Author:" msgstr "" #: includes/settings/settings-pages/class-ld-settings-page-addons.php:350 msgid "Last Updated:" msgstr "" #: includes/settings/settings-pages/class-ld-settings-page-certificate-shortcodes.php:22 #: includes/settings/settings-pages/class-ld-settings-page-overview.php:1038 msgid "Shortcodes" msgstr "" #: includes/settings/settings-pages/class-ld-settings-page-certificate-shortcodes.php:79 msgid "Certificate Shortcodes" msgstr "" #: includes/settings/settings-pages/class-ld-settings-page-certificate-shortcodes.php:84 msgid "" "Shortcode Options

You may use shortcodes to customize the display of your certificates. Provided is a built-in shortcode for displaying user information.


\n" "\t\t\t\t\t\t\t

[usermeta]

\n" "\t\t\t\t\t\t

This shortcode takes a parameter named field, which is the name of the user meta data field to be displayed.

Example: [usermeta field=\"display_name\"] would display the user's Display Name.

See the full list of available fields here." msgstr "" #. translators: placeholder: quiz. #: includes/settings/settings-pages/class-ld-settings-page-certificate-shortcodes.php:91 #: includes/settings/shortcodes-sections/quizinfo.php:11 msgctxt "placeholders: quiz" msgid "This shortcode displays information regarding %s attempts on the certificate. This shortcode can use the following parameters:" msgstr "" #: includes/settings/settings-pages/class-ld-settings-page-certificate-shortcodes.php:95 msgctxt "placeholder: quiz" msgid "" "This parameter determines the information to be shown by the shortcode. Possible values are:\n" "\t\t\t\t\t\t\t\t\t

'; } ?>

' ) ) { echo '' . __( 'Untested with your version of WordPress', 'default' ) . ''; } elseif ( ! empty( $plugin['requires'] ) && version_compare( substr( $wp_version, 0, strlen( $plugin['requires'] ) ), $plugin['requires'], '<' ) ) { echo '' . __( 'Incompatible with your version of WordPress', 'default' ) . ''; } else { echo '' . __( 'Compatible with your version of WordPress', 'default' ) . ''; } ?>
'; } } /** * display_tablenav. */ protected function display_tablenav( $which ) { // Empty function } /** * Get Views. * @global array $tabs * @global string $tab * * @return array */ protected function get_views() { $display_tabs = array(); $this->tabs = apply_filters( 'learndash_addon_tabs', $this->tabs ); foreach ( (array) $this->tabs as $action => $tab_set ) { $current_link_attributes = ( $action === $this->current_tab ) ? ' class="current" aria-current="page"' : ''; $new_tab = ( ( isset( $tab_set['new_tab'] ) ) && ( true === $tab_set['new_tab'] ) ) ? ' target="_blank" ' : ''; $display_tabs['plugin-install-' . $action] = '' . $tab_set['label'] . ''; } return $display_tabs; } /** * Override parent views so we can use the filter bar display. */ public function views() { $views = $this->get_views(); /** This filter is documented in wp-admin/inclues/class-wp-list-table.php */ $views = apply_filters( "views_{$this->screen->id}", $views ); $this->screen->render_screen_reader_content( 'heading_views' ); ?>
current_tab ) { $this->show_update_button(); } ?>
esc_attr( $_GET['page'] ), 'repo_reset' => '1', ), 'admin.php' ); echo ''. __( 'Check Updates', 'learndash' ) . ''; } } } includes/admin/class-learndash-admin-user-profile-edit.php000066600000064067152141567370017676 0ustar00script_data ) ) { $data = $this->script_data; } if ( ! isset( $data['ajaxurl'] ) ) { $data['ajaxurl'] = admin_url( 'admin-ajax.php' ); } $data = array( 'json' => json_encode( $data ) ); wp_localize_script( 'sfwd-module-script', 'sfwd_data', $data ); wp_enqueue_style( 'learndash-admin-binary-selector-style', LEARNDASH_LMS_PLUGIN_URL . 'assets/css/learndash-admin-binary-selector' . leardash_min_asset() . '.css', array(), LEARNDASH_SCRIPT_VERSION_TOKEN ); wp_style_add_data( 'learndash-admin-binary-selector-style', 'rtl', 'replace' ); $learndash_assets_loaded['styles']['learndash-admin-binary-selector-style'] = __FUNCTION__; } /** * Function called to show / edit WP user profile. * Fires on action 'show_user_profile' * Fires on action 'edit_user_profile' * * @param WP_User $user User object instance. */ public function show_user_profile( WP_User $user ) { $this->show_user_courses( $user ); $this->show_user_groups( $user ); $this->show_leader_groups( $user ); $this->show_user_course_info( $user ); //$this->show_user_course_progress( $user ); //$this->show_user_upgrade_data_link( $user ); $this->show_user_delete_data_link( $user ); //$user_couses = get_user_meta( $user->ID, '_sfwd-course_progress', true ); //error_log( 'user_couses
'. print_r( $user_couses, true ) .'
' ); //$user_quizzes = get_user_meta( $user->ID, '_sfwd-quizzes', true ); //error_log( 'user_quizzes
'. print_r( $user_quizzes, true ) .'
' ); } /** * Displays users course information at bottom of profile * called by show_user_profile(). * * @since 2.1.0 * * @param WP_User $user wp user object. */ private function show_user_course_info( WP_User $user ) { $user_id = $user->ID; echo '

' . sprintf( // translators: placeholder: Course. esc_html_x( '%s Info', 'Course Info Label', 'learndash' ), LearnDash_Custom_Label::get_label( 'course' ) ) . '

'; $atts = array( 'progress_num' => LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Section_General_Per_Page', 'progress_num' ), 'progress_orderby' => 'title', 'progress_order' => 'ASC', 'quiz_num' => LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Section_General_Per_Page', 'quiz_num' ), 'quiz_orderby' => 'taken', 'quiz_order' => 'DESC', ); $atts = apply_filters( 'learndash_profile_course_info_atts', $atts, $user ); echo SFWD_LMS::get_course_info( $user_id, $atts ); } /* function show_user_upgrade_data_link( $user ) { ?>

prepare( "SELECT quiz_id as proquiz_id FROM " . LDLMS_DB::get_table_name( 'quiz_lock' ) . " WHERE user_id=%d", $user->ID ); $proquiz_ids = $wpdb->get_col( $sql_str ); if ( ! empty( $proquiz_ids ) ) { $quiz_ids = array(); foreach ( $proquiz_ids as $proquiz_id ) { $quiz_id = learndash_get_quiz_id_by_pro_quiz_id( $proquiz_id ); if ( ! empty( $quiz_id ) ) { $quiz_ids[] = $quiz_id; } } if ( ! empty( $quiz_ids ) ) { $quiz_query_args = array( 'post_type' => 'sfwd-quiz', 'post_status' => array( 'publish' ), 'post__in' => $quiz_ids, 'nopaging' => true, 'orderby' => 'title', 'order' => 'ASC', ); $quiz_query = new WP_Query( $quiz_query_args ); if ( ! empty( $quiz_query->posts ) ) { ?>

ID ) ) { /** * See example if 'learndash_override_course_auto_enroll' filter * https://bitbucket.org/snippets/learndash/kon6y * * @since 2.3 */ $course_autoenroll_admin = LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Section_General_Admin_User', 'courses_autoenroll_admin_users' ); if ( 'yes' === $course_autoenroll_admin ) { $course_autoenroll_admin = true; } else { $course_autoenroll_admin = false; } $course_autoenroll_admin_filtered = apply_filters( 'learndash_override_course_auto_enroll', $course_autoenroll_admin, $user->ID ); if ( $course_autoenroll_admin_filtered ) { ?>

$user->ID, 'selected_ids' => learndash_user_get_enrolled_courses( $user->ID, array(), true ), ) ); $ld_binary_selector_user_courses->show(); } } /** * Show User Enrolled Groups Binary Selector. * called by show_user_profile(). * * @param WP_User $user wp_user object. */ private function show_user_groups( WP_User $user ) { if ( current_user_can( 'edit_users' ) ) { $ld_binary_selector_user_groups = new Learndash_Binary_Selector_User_Groups( array( 'user_id' => $user->ID, 'selected_ids' => learndash_get_users_group_ids( $user->ID, true ), ) ); $ld_binary_selector_user_groups->show(); } } /** * Show User Leader of Groups Binary Selector. * called by show_user_profile(). * * @param WP_User $user wp_user object. */ private function show_leader_groups( WP_User $user ) { if ( current_user_can( 'edit_users' ) ) { if ( learndash_is_group_leader_user( $user->ID ) ) { $ld_binary_selector_leader_groups = new Learndash_Binary_Selector_Leader_Groups( array( 'user_id' => $user->ID, 'selected_ids' => learndash_get_administrators_group_ids( $user->ID, true ), ) ); $ld_binary_selector_leader_groups->show(); } } } /** * Show User Courses Progress. * called by show_user_profile(). * * @param WP_User $user wp_user object. */ private function show_user_course_progress( WP_User $user ) { if ( current_user_can( 'edit_users' ) ) { $user_courses_registered = ld_get_mycourses( $user->ID ); $user_courses_registered = ! empty( $user_courses_registered ) ? $user_courses_registered : array(); $user_course_progress = get_user_meta( $user->ID, '_sfwd-course_progress', true ); $user_course_progress = ! empty( $user_course_progress ) ? $user_course_progress : array(); $courses_ids = array_merge( $user_courses_registered, array_keys( $user_course_progress ) ); if ( ! empty( $courses_ids ) ) { $course_query_args = array( 'post_type' => 'sfwd-courses', 'post_status' => 'publish', 'fields' => 'ids', 'nopaging' => true, 'orderby' => 'title', 'order' => 'ASC', 'post__in' => $courses_ids, ); $course_query = new WP_Query( $course_query_args ); if ( ( isset( $course_query->posts ) ) && ( ! empty( $course_query->posts ) ) ) { ?>

Course Progress

posts as $course_id ) { $course = get_post( $course_id ); $course_edit_permalink = ''; if ( current_user_can( 'edit_courses', $course->ID ) ) { $course_edit_permalink = get_permalink( $course->ID ); } ?> ID ); ?> ID, $course_id, $coursep ); $completed_on = get_user_meta( $user->ID, 'course_completed_' . $course_id, true ); if ( ! empty( $completed_on ) ) { $coursep['completed'] = $course_steps_count; $coursep['total'] = $course_steps_count; } else { $coursep['total'] = $course_steps_count; $coursep['completed'] = $course_steps_completed; if ( $coursep['completed'] > $coursep['total'] ) { $coursep['completed'] = $coursep['total']; } } } ?>
ID ) ?>
edit | |
ID, $user->ID ); if ( ! empty( $since ) ) { if ( ! empty( $output_str ) ) { $output_str .= '
'; } $output_str .= sprintf( // translators: placeholder: Started Date. esc_html_x( 'Started: %s', 'placeholder: Started date', 'learndash' ), learndash_adjust_date_time_display( $since ) ); } else { $since = learndash_user_group_enrolled_to_course_from( $user->ID, $course->ID ); if ( ! empty( $since ) ) { if ( !empty( $output_str ) ) { $output_str .= '
'; } $output_str .= sprintf( // translators: placeholder: Started Group Date. esc_html_x( 'Started: %s (Group Access)', 'placeholder: Started Group date','learndash' ), learndash_adjust_date_time_display( $since ) ); } } // Display the Course Access if expired or expiring. $expire_access = learndash_get_setting( $course_id, 'expire_access' ); if ( ! empty( $expire_access ) ) { $expired = ld_course_access_expired( $course_id, $user->ID ); if ( $expired ) { if ( ! empty( $output_str ) ) { $output_str .= '
'; } $output_str .= esc_html__( '(access expired)', 'learndash' ); } else { $expired_on = ld_course_access_expires_on( $course_id, $user->ID); if (!empty( $expired_on ) ) { if ( ! empty( $output_str ) ) { $output_str .= '
'; } $output_str .= sprintf( // translators: placeholder: Course Expires Date. esc_html_x( 'Expires: %s', 'Course Expires on date', 'learndash'), learndash_adjust_date_time_display( $expired_on ) ); } } } $completed = get_user_meta( $user->ID, 'course_completed_' . $course->ID, true ); if ( ! empty( $completed ) ) { if ( ! empty( $output_str ) ) { $output_str .= '
'; } $output_str .= sprintf( // translators: placeholder: Course Completed Data. esc_html_x( 'Completed: %s', 'placeholder: Completed date', 'learndash' ), learndash_adjust_date_time_display( $completed ) ); } echo $output_str; ?>
$quiz_time ) ); if ( ! empty( $user_quizzes ) ) { foreach ( $user_quizzes as $q_idx => $q_item ) { if ( wp_verify_nonce( $quiz_nonce, 'remove_quiz_' . $user_id . '_' . $q_item['quiz'] . '_' . $q_item['time'] ) ) { learndash_remove_user_quiz_attempt( $user_id, array( 'time' => $q_item['time'] ) ); } } } } echo wp_json_encode( $data ); die(); } // End of functions. } } includes/admin/ld-course-builder-helpers.php000066600000012371152141567370015157 0ustar00 0 ) ); $output_lessons = []; $lesson_topics = []; if ( ( is_array( $lessons ) ) && ( ! empty( $lessons ) ) ) { // Loop course's lessons. foreach ( $lessons as $lesson ) { $post = $lesson['post']; // Get lesson's topics. $topics = learndash_topic_dots( $post->ID, false, 'array', null, $course_id ); $output_topics = []; if ( ( is_array( $topics ) ) && ( ! empty( $topics ) ) ) { // Loop Topics. foreach ( $topics as $topic ) { // Get topic's quizzes. $topic_quizzes = learndash_get_lesson_quiz_list( $topic->ID, null, $course_id ); $output_topic_quizzes = []; if ( ( is_array( $topic_quizzes ) ) && ( ! empty( $topic_quizzes ) ) ) { // Loop Topic's Quizzes. foreach ( $topic_quizzes as $quiz ) { $quiz_post = $quiz['post']; $output_topic_quizzes[] = [ 'ID' => $quiz_post->ID, 'expanded' => true, 'post_title' => $quiz_post->post_title, 'type' => $quiz_post->post_type, 'url' => learndash_get_step_permalink( $quiz_post->ID, $course_id ), 'edit_link' => get_edit_post_link( $quiz_post->ID, '' ), 'tree' => [], ]; } } $output_topics[] = [ 'ID' => $topic->ID, 'expanded' => true, 'post_title' => $topic->post_title, 'type' => $topic->post_type, 'url' => learndash_get_step_permalink( $topic->ID, $course_id ), 'edit_link' => get_edit_post_link( $topic->ID, '' ), 'tree' => $output_topic_quizzes, ]; } } // Get lesson's quizzes. $quizzes = learndash_get_lesson_quiz_list( $post->ID, null, $course_id ); $output_quizzes = []; if ( ( is_array( $quizzes ) ) && ( ! empty( $quizzes ) ) ) { // Loop lesson's quizzes. foreach ( $quizzes as $quiz ) { $quiz_post = $quiz['post']; $output_quizzes[] = [ 'ID' => $quiz_post->ID, 'expanded' => true, 'post_title' => $quiz_post->post_title, 'type' => $quiz_post->post_type, 'url' => learndash_get_step_permalink( $quiz_post->ID, $course_id ), 'edit_link' => get_edit_post_link( $quiz_post->ID, '' ), 'tree' => [], ]; } } // Output lesson with child tree. $output_lessons[] = [ 'ID' => $post->ID, 'expanded' => false, 'post_title' => $post->post_title, 'type' => $post->post_type, 'url' => $lesson['permalink'], 'edit_link' => get_edit_post_link( $post->ID, '' ), 'tree' => array_merge( $output_topics, $output_quizzes ), ]; } } // Get a list of quizzes to loop. $quizzes = learndash_get_course_quiz_list( $course_id ); $output_quizzes = []; if ( ( is_array( $quizzes ) ) && ( ! empty( $quizzes ) ) ) { // Loop course's quizzes. foreach ( $quizzes as $quiz ) { $post = $quiz['post']; $output_quizzes[] = [ 'ID' => $post->ID, 'expanded' => true, 'post_title' => $post->post_title, 'type' => $post->post_type, 'url' => learndash_get_step_permalink( $post->ID, $course_id ), 'edit_link' => get_edit_post_link( $post->ID, '' ), 'tree' => [], ]; } } // Merge sections at Outline. $sections_raw = get_post_meta( $course_id, 'course_sections', true ); $sections = ! empty( $sections_raw ) ? json_decode( $sections_raw ) : []; if ( ( is_array( $sections ) ) && ( ! empty( $sections ) ) ) { foreach ( $sections as $section ) { array_splice( $output_lessons, (int) $section->order, 0, [ $section ] ); } } } } // Output data. $data['outline'] = [ 'lessons' => $output_lessons, 'quizzes' => $output_quizzes, 'sections' => $sections, ]; return $data; } //add_filter( 'learndash_header_data', 'LearnDash\Admin\CourseBuilderHelpers\get_course_data', 100 ); /** * Checks if course builder should be enqueued. * * @return bool */ function should_enqueue_assets() { $screen = get_current_screen(); $course_id = isset( $_GET['course_id'] ) ? absint( $_GET['course_id'] ) : get_the_ID(); // Enqueue course builder assets only when required. if ( ( 'post' === $screen->base && 'sfwd-courses' === get_post_type( $course_id ) ) || 'sfwd-courses_page_courses-builder' === $screen->id ) { return true; } return false; } includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-quizzes.php000066600000055441152141567370027122 0ustar00data_slug] = array( 'class' => get_class( $this ), 'instance' => $this, 'slug' => $this->data_slug ); $this->set_report_headers(); return $report_actions; } function show_report_action() { ?> init_process_times(); if ( !isset( $data['total_count'] ) ) $data['total_count'] = 0; if ( !isset( $data['result_count'] ) ) $data['result_count'] = 0; if ( !isset( $data['progress_percent'] ) ) $data['progress_percent'] = 0; if ( !isset( $data['progress_label'] ) ) $data['progress_label'] = ''; $_DOING_INIT = false; require_once( LEARNDASH_LMS_LIBRARY_DIR . '/parsecsv.lib.php' ); $this->csv_parse = new lmsParseCSV(); if ( ( isset( $data['nonce'] ) ) && ( !empty( $data['nonce'] ) ) ) { if ( wp_verify_nonce( $data['nonce'], 'learndash-data-reports-'. $this->data_slug .'-'. get_current_user_id() ) ) { $this->transient_key = $this->data_slug .'_'. $data['nonce']; // On the 'init' (the first call via AJAX we load up the transient with the user_ids) if ( ( isset( $data['init'] ) ) && ( $data['init'] == 1 ) ) { $_DOING_INIT = true; unset( $data['init'] ); $this->transient_data = array(); if ( ( isset( $data['filters'] ) ) && ( !empty( $data['filters'] ) ) ) { //error_log('before: transient_data
'. print_r($this->transient_data, true ) .'
'); $this->transient_data = $query = wp_parse_args( $this->transient_data, $data['filters'] ); //error_log('after: transient_data
'. print_r($this->transient_data, true ) .'
'); //die(); } else { if ( ( isset( $data['group_id'] ) ) && ( !empty( $data['group_id'] ) ) ) { $this->transient_data['users_ids'] = learndash_get_groups_user_ids( intval( $data['group_id'] ) ); //$this->transient_data['posts_ids'] = learndash_get_group_course_quiz_ids( intval( $data['group_id'] ) ); $this->transient_data['course_ids'] = learndash_group_enrolled_courses( intval( intval( $data['group_id'] ) ) ); if ( empty( $this->transient_data['course_ids'] ) ) return $data; } else { $this->transient_data['posts_ids'] = ''; //$this->transient_data = array_merge( $this->transient_data, learndash_get_report_user_ids() ); $this->transient_data['users_ids'] = learndash_get_report_user_ids(); } } $this->transient_data['total_users'] = count( $this->transient_data['users_ids'] ); $this->set_report_filenames( $data ); //$this->report_filename = ABSPATH . $this->transient_data['report_filename']; $this->report_filename = $this->transient_data['report_filename']; $data['report_download_link'] = $this->transient_data['report_url']; $data['total_count'] = $this->transient_data['total_users']; // Clear out any previous file $reports_fp = fopen( $this->report_filename, 'w' ); fclose($reports_fp); $this->set_option_cache( $this->transient_key, $this->transient_data ); $this->send_report_headers_to_csv(); } else { //$this->transient_data = LDLMS_Transients::get( $this->transient_key ); $this->transient_data = $this->get_transient( $this->transient_key ); //$this->report_filename = ABSPATH . $this->transient_data['report_filename']; $this->report_filename = $this->transient_data['report_filename']; } if ( !empty( $this->transient_data['users_ids'] ) ) { // If we are doing the initial 'init' then we return so we can show the progress meter. if ( $_DOING_INIT != true) { $activity_query_args = array( 'post_types' => 'sfwd-quiz', 'activity_types' => 'quiz', 'activity_status' => array('IN_PROGRESS', 'COMPLETED'), 'orderby_order' => 'users.display_name, posts.post_title ASC', 'date_format' => 'F j, Y H:i:s', 'per_page' => '' ); $course_progress_data = array(); foreach( $this->transient_data['users_ids'] as $user_id_idx => $user_id ) { unset( $this->transient_data['users_ids'][$user_id_idx] ); $this->set_option_cache( $this->transient_key, $this->transient_data ); $report_user = get_user_by('id', $user_id); if ( $report_user !== false ) { $activity_query_args['user_ids'] = array( $user_id ); if ( ( isset( $this->transient_data['posts_ids'] ) ) && ( !empty( $this->transient_data['posts_ids'] ) ) ) { $post_ids = $this->transient_data['posts_ids']; $activity_query_args['post_ids'] = $post_ids; } if ( ( isset( $this->transient_data['course_ids'] ) ) && ( !empty( $this->transient_data['course_ids'] ) ) ) { $activity_query_args['course_ids'] = $this->transient_data['course_ids']; } $user_courses_reports = learndash_reports_get_activity( $activity_query_args ); if ( !empty( $user_courses_reports['results'] ) ) { foreach( $user_courses_reports['results'] as $result ) { $row = array(); foreach( $this->data_headers as $header_key => $header_data ) { if ( ( isset( $header_data['display'] ) ) && ( !empty( $header_data['display'] ) ) ) { $row[$header_key] = call_user_func_array( $header_data['display'], array( 'header_value' => $header_data['default'], 'header_key' => $header_key, 'item' => $result, 'report_user' => $report_user, ) ); } else if ( ( isset( $header_data['default'] ) ) && ( !empty( $header_data['default'] ) ) ) { $row[$header_key] = $header_data['default']; } else { $row[$header_key] = ''; } } if ( !empty($row ) ) { $course_progress_data[] = $row; } } } else { /* $row = array(); foreach( $this->data_headers as $header_key => $header_data ) { if ( ( isset( $header_data['display'] ) ) && ( !empty( $header_data['display'] ) ) ) { $row[$header_key] = call_user_func_array( $header_data['display'], array( 'header_value' => $header_data['default'], 'header_key' => $header_key, 'item' => new stdClass(), 'report_user' => $report_user, ) ); } else if ( ( isset( $header_data['default'] ) ) && ( !empty( $header_data['default'] ) ) ) { $row[$header_key] = $header_data['default']; } else { $row[$header_key] = ''; } } if ( !empty($row ) ) { $course_progress_data[] = $row; } */ } } if ( $this->out_of_timer() ) { break; } } if ( !empty( $course_progress_data ) ) { $this->csv_parse->file = $this->report_filename; $this->csv_parse->output_filename = $this->report_filename; // legacy $this->csv_parse = apply_filters('learndash_csv_object', $this->csv_parse, 'quizzes' ); /** * Filter to override CSV object attributes * @since 2.4.7 * This is basically the same as the above line with the exeption of the last param used * being the proper data slug instead of just 'courses'. */ $this->csv_parse = apply_filters('learndash_csv_object', $this->csv_parse, $this->data_slug ); $course_progress_data = apply_filters('learndash_csv_data', $course_progress_data, $this->data_slug ); $this->csv_parse->save( $this->report_filename, $course_progress_data, true, wp_list_pluck( $this->data_headers, 'label' ) ); } } $data['result_count'] = $data['total_count'] - count( $this->transient_data['users_ids'] ); $data['progress_percent'] = ( $data['result_count'] / $data['total_count'] ) * 100; $data['progress_label'] = sprintf( esc_html_x('%1$d of %2$s Users', 'placeholders: result count, total count', 'learndash'), $data['result_count'], $data['total_count']); } } } return $data; } function set_report_headers() { $this->data_headers = array(); $this->data_headers['user_id'] = array( 'label' => esc_html__( 'user_id', 'learndash' ), 'default' => '', 'display' => array( $this, 'report_column' ) ); $this->data_headers['user_name'] = array( 'label' => esc_html__( 'name', 'learndash' ), 'default' => '', 'display' => array( $this, 'report_column' ) ); $this->data_headers['user_email'] = array( 'label' => esc_html__( 'email', 'learndash' ), 'default' => '', 'display' => array( $this, 'report_column' ) ); $this->data_headers['quiz_id'] = array( 'label' => esc_html__( 'quiz_id', 'learndash' ), 'default' => '', 'display' => array( $this, 'report_column' ) ); $this->data_headers['quiz_title'] = array( 'label' => esc_html__( 'quiz_title', 'learndash' ), 'default' => '', 'display' => array( $this, 'report_column' ) ); /* $this->data_headers['quiz_rank'] = array( 'label' => 'rank', 'default' => '', 'display' => array( $this, 'report_column' ) ); */ $this->data_headers['quiz_score'] = array( 'label' => esc_html__( 'score', 'learndash' ), 'default' => '0', 'display' => array( $this, 'report_column' ) ); $this->data_headers['quiz_total'] = array( 'label' => esc_html__( 'total', 'learndash' ), 'default' => '0', 'display' => array( $this, 'report_column' ) ); $this->data_headers['quiz_date'] = array( 'label' => esc_html__( 'date', 'learndash' ), 'default' => '', 'display' => array( $this, 'report_column' ) ); $this->data_headers['quiz_points'] = array( 'label' => esc_html__( 'points', 'learndash' ), 'default' => '0', 'display' => array( $this, 'report_column' ) ); $this->data_headers['quiz_points_total'] = array( 'label' => esc_html__( 'points_total', 'learndash' ), 'default' => '0', 'display' => array( $this, 'report_column' ) ); $this->data_headers['quiz_percentage'] = array( 'label' => esc_html__( 'percentage', 'learndash' ), 'default' => '0', 'display' => array( $this, 'report_column' ) ); $this->data_headers['quiz_time_spent'] = array( 'label' => esc_html__( 'time_spent', 'learndash' ), 'default' => '0', 'display' => array( $this, 'report_column' ) ); $this->data_headers['quiz_passed'] = array( 'label' => esc_html__( 'passed', 'learndash' ), 'default' => esc_html_x('NO', 'Quiz Passed Report label: NO', 'learndash'), 'display' => array( $this, 'report_column' ) ); $this->data_headers['course_id'] = array( 'label' => esc_html__( 'course_id', 'learndash' ), 'default' => '', 'display' => array( $this, 'report_column' ) ); $this->data_headers['course_title'] = array( 'label' => esc_html__( 'course_title', 'learndash' ), 'default' => '', 'display' => array( $this, 'report_column' ) ); $this->data_headers = apply_filters('learndash_data_reports_headers', $this->data_headers, $this->data_slug ); } function send_report_headers_to_csv() { if ( !empty( $this->data_headers ) ) { $this->csv_parse->file = $this->report_filename; $this->csv_parse->output_filename = $this->report_filename; $this->csv_parse = apply_filters('learndash_csv_object', $this->csv_parse, 'quizzes' ); /** * Filter to override CSV object attributes * @since 2.4.7 * This is basically the same as the above line with the exeption of the last param used * being the proper data slug instead of just 'courses'. */ $this->csv_parse = apply_filters('learndash_csv_object', $this->csv_parse, $this->data_slug ); $this->data_headers = apply_filters('learndash_csv_data', $this->data_headers, $this->data_slug ); $this->csv_parse->save( $this->report_filename, array(), false, wp_list_pluck( $this->data_headers, 'label' ) ); } } function set_report_filenames( $data ) { $wp_upload_dir = wp_upload_dir(); //$wp_upload_dir['basedir'] = str_replace('\\', '/', $wp_upload_dir['basedir']); $ld_file_part = '/learndash/reports/learndash_reports_'. str_replace( array('ld_data_reports_', '-'), array('', '_'), $this->transient_key ) .'.csv'; $ld_wp_upload_filename = $wp_upload_dir['basedir'] . $ld_file_part; if ( wp_mkdir_p( dirname( $ld_wp_upload_filename ) ) === false ) { $data['error_message'] = esc_html__("ERROR: Cannot create working folder. Check that the parent folder is writable", 'learndash') ." ". $ld_wp_upload_dir; return $data; } file_put_contents( trailingslashit( dirname( $ld_wp_upload_filename ) ) .'index.php', '// nothing to see here'); // Because we on;y want to store the relative path //$ld_wp_upload_filename = str_replace( ABSPATH, '', $ld_wp_upload_filename ); $this->transient_data['report_filename'] = apply_filters( 'learndash_report_filename', $ld_wp_upload_filename, $this->data_slug ); //$this->transient_data['report_url'] = $wp_upload_dir['baseurl'] . $ld_file_part; $this->transient_data['report_url'] = add_query_arg( array( 'data-slug' => $this->data_slug, 'data-nonce' => $data['nonce'], 'ld-report-download' => 1 ), admin_url() //get_option('home') ); } function report_column( $column_value = '', $column_key, $report_item, $report_user ) { switch( $column_key ) { case 'user_id': if ( $report_user instanceof WP_User ) { $column_value = $report_user->ID; } break; case 'user_name': if ( $report_user instanceof WP_User ) { $column_value = $report_user->display_name; $column_value = str_replace("’", "'", $column_value ); } break; case 'user_email': if ( $report_user instanceof WP_User ) { $column_value = $report_user->user_email; } break; case 'quiz_id': if ( property_exists( $report_item, 'post_id' ) ) { $column_value = $report_item->post_id; } break; case 'quiz_title': if ( property_exists( $report_item, 'post_title' ) ) { $column_value = $report_item->post_title; $column_value = str_replace("’", "'", $column_value ); } break; case 'quiz_rank': if ( ( property_exists( $report_item, 'activity_meta' ) ) && ( !empty( $report_item->activity_meta ) ) ) { if ( ( isset( $report_item->activity_meta['rank'] ) ) && (!empty( $report_item->activity_meta['rank'] ) ) ) { $column_value = $report_item->activity_meta['rank']; } } break; case 'quiz_score': if ( ( property_exists( $report_item, 'activity_meta' ) ) && ( !empty( $report_item->activity_meta ) ) ) { if ( ( isset( $report_item->activity_meta['score'] ) ) && (!empty( $report_item->activity_meta['score'] ) ) ) { $column_value = $report_item->activity_meta['score']; } else { $column_value = '0'; } } break; case 'quiz_total': if ( ( property_exists( $report_item, 'activity_meta' ) ) && ( !empty( $report_item->activity_meta ) ) ) { if ( ( isset( $report_item->activity_meta['question_show_count'] ) ) && (!empty( $report_item->activity_meta['question_show_count'] ) ) ) { $column_value = $report_item->activity_meta['question_show_count']; } else if ( ( isset( $report_item->activity_meta['count'] ) ) && (!empty( $report_item->activity_meta['count'] ) ) ) { $column_value = $report_item->activity_meta['count']; } } break; case 'quiz_date': if ( ( property_exists( $report_item, 'activity_completed' ) ) && ( !empty( $report_item->activity_completed ) ) ) { $column_value = learndash_adjust_date_time_display( $report_item->activity_completed, 'Y-m-d' ); } break; case 'quiz_points': if ( ( property_exists( $report_item, 'activity_meta' ) ) && ( !empty( $report_item->activity_meta ) ) ) { if ( ( isset( $report_item->activity_meta['points'] ) ) && (!empty( $report_item->activity_meta['points'] ) ) ) { $column_value = $report_item->activity_meta['points']; } } break; case 'quiz_points_total': if ( ( property_exists( $report_item, 'activity_meta' ) ) && ( !empty( $report_item->activity_meta ) ) ) { if ( ( isset( $report_item->activity_meta['total_points'] ) ) && (!empty( $report_item->activity_meta['total_points'] ) ) ) { $column_value = $report_item->activity_meta['total_points']; } } break; case 'quiz_percentage': if ( ( property_exists( $report_item, 'activity_meta' ) ) && ( !empty( $report_item->activity_meta ) ) ) { if ( ( isset( $report_item->activity_meta['percentage'] ) ) && (!empty( $report_item->activity_meta['percentage'] ) ) ) { $column_value = number_format(round(floatval($report_item->activity_meta['percentage']), 2), 2); } } break; case 'quiz_time_spent': if ( ( property_exists( $report_item, 'activity_meta' ) ) && ( !empty( $report_item->activity_meta ) ) ) { if ( ( isset( $report_item->activity_meta['timespent'] ) ) && (!empty( $report_item->activity_meta['timespent'] ) ) ) { //$column_value = abs(round($report_item->activity_meta['timespent'])); $timespent = abs(round($report_item->activity_meta['timespent'])); $column_value = ''; if ( $timespent > 86400 ) { if ( !empty( $column_value ) ) $column_value .= ' '; $column_value .= floor($timespent / 86400) .'d'; $timespent %= 86400; } if ( $timespent > 3600 ) { if ( !empty( $column_value ) ) $column_value .= ' '; $column_value .= floor( $timespent / 3600 ) .'h'; $timespent %= 3600; } if ( $timespent > 60 ) { if ( !empty( $column_value ) ) $column_value .= ' '; $column_value .= floor( $timespent / 60 ) .'m'; $timespent %= 60; } if ( $timespent > 0 ) { if ( !empty( $column_value ) ) $column_value .= ' '; $column_value .= $timespent .'s'; } } } break; case 'quiz_passed': //$column_value = esc_html_x('NO', 'Quiz Passed Report label: NO', 'learndash'); if ( ( property_exists( $report_item, 'activity_meta' ) ) && ( !empty( $report_item->activity_meta ) ) ) { if ( ( isset( $report_item->activity_meta['pass'] ) ) && ( $report_item->activity_meta['pass'] == 1 ) ) { $column_value = esc_html_x('YES', 'Quiz Passed Report label: YES', 'learndash'); } } break; case 'course_id': if ( property_exists( $report_item, 'activity_course_id' ) ) { $course_id = intval( $report_item->activity_course_id ); if ( !empty( $course_id ) ) $column_value = $course_id; else $column_value = ''; } break; case 'course_title': if ( property_exists( $report_item, 'activity_course_id' ) ) { $course_id = intval( $report_item->activity_course_id ); if ( !empty( $course_id ) ) $column_value = get_the_title( $course_id ); else $column_value = ''; } break; default: break; } /** * Allow filtering of the report column data * @since 2.4.7 */ return apply_filters('learndash_report_column_item', $column_value, $column_key, $report_item, $report_user ); } // End of functions } } //new Learndash_Admin_Data_Reports_Quizzes(); includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-courses.php000066600000051050152141567370027063 0ustar00data_slug] = array( 'class' => get_class( $this ), 'instance' => $this, 'slug' => $this->data_slug ); $this->set_report_headers(); return $report_actions; } function show_report_action() { ?> init_process_times(); if ( !isset( $data['total_count'] ) ) $data['total_count'] = 0; if ( !isset( $data['result_count'] ) ) $data['result_count'] = 0; if ( !isset( $data['progress_percent'] ) ) $data['progress_percent'] = 0; if ( !isset( $data['progress_label'] ) ) $data['progress_label'] = ''; $_DOING_INIT = false; require_once( LEARNDASH_LMS_LIBRARY_DIR . '/parsecsv.lib.php' ); if ( ( isset( $data['nonce'] ) ) && ( !empty( $data['nonce'] ) ) ) { if ( wp_verify_nonce( $data['nonce'], 'learndash-data-reports-'. $this->data_slug .'-'. get_current_user_id() ) ) { $this->transient_key = $this->data_slug .'_'. $data['nonce']; $this->csv_parse = new lmsParseCSV(); // On the 'init' (the first call via AJAX we load up the transient with the user_ids) if ( ( isset( $data['init'] ) ) && ( $data['init'] == 1 ) ) { $_DOING_INIT = true; unset( $data['init'] ); $this->transient_data = array(); //$this->transient_data['activity_status'] = array('NOT_STARTED' , 'IN_PROGRESS', 'COMPLETED'); if ( ( isset( $data['filters'] ) ) && ( !empty( $data['filters'] ) ) ) { //error_log('before: transient_data
'. print_r($this->transient_data, true ) .'
'); $this->transient_data = $query = wp_parse_args( $this->transient_data, $data['filters'] ); //error_log('after: transient_data
'. print_r($this->transient_data, true ) .'
'); //die(); } else { $this->transient_data['activity_status'] = array('NOT_STARTED' , 'IN_PROGRESS', 'COMPLETED'); if ( ( isset( $data['group_id'] ) ) && ( !empty( $data['group_id'] ) ) ) { $this->transient_data['users_ids'] = learndash_get_groups_user_ids( intval( $data['group_id'] ) ); $this->transient_data['posts_ids'] = learndash_group_enrolled_courses( intval( $data['group_id'] ) ); } else { $this->transient_data['posts_ids'] = ''; //$this->transient_data = array_merge( $this->transient_data, learndash_get_report_user_ids() ); $this->transient_data['users_ids'] = learndash_get_report_user_ids(); } //$this->transient_data['users_ids'] = array(6); //if ( !empty( $activity_query_args['post_ids'] ) ) { $this->transient_data['activity_status'] = array('NOT_STARTED', 'IN_PROGRESS', 'COMPLETED'); //} else { // $this->transient_data['activity_status'] = array('IN_PROGRESS', 'COMPLETED'); //} } $this->transient_data['total_users'] = count( $this->transient_data['users_ids'] ); $this->set_report_filenames( $data ); //$this->report_filename = ABSPATH . $this->transient_data['report_filename']; $this->report_filename = $this->transient_data['report_filename']; $data['report_download_link'] = $this->transient_data['report_url']; $data['total_count'] = $this->transient_data['total_users']; // Clear out any previous file $reports_fp = fopen( $this->report_filename, 'w' ); fclose($reports_fp); $this->set_option_cache( $this->transient_key, $this->transient_data ); $this->send_report_headers_to_csv(); } else { $this->transient_data = $this->get_transient( $this->transient_key ); //$this->report_filename = ABSPATH . $this->transient_data['report_filename']; $this->report_filename = $this->transient_data['report_filename']; } if ( !empty( $this->transient_data['users_ids'] ) ) { // If we are doing the initial 'init' then we return so we can show the progress meter. if ( $_DOING_INIT != true) { $course_query_args = array( 'orderby' => 'title', 'order' => 'ASC', 'nopaging' => true ); $activity_query_args = array( 'post_types' => 'sfwd-courses', 'activity_types' => 'course', 'activity_status' => $this->transient_data['activity_status'], 'orderby_order' => 'users.ID, posts.post_title', 'date_format' => 'F j, Y H:i:s', 'per_page' => '' ); $course_progress_data = array(); foreach( $this->transient_data['users_ids'] as $user_id_idx => $user_id ) { unset( $this->transient_data['users_ids'][$user_id_idx] ); $this->set_option_cache( $this->transient_key, $this->transient_data ); $report_user = get_user_by('id', $user_id); if ( $report_user !== false ) { if ( ( isset( $this->transient_data['course_ids'] ) ) && ( !empty( $this->transient_data['course_ids'] ) ) ) { $post_ids = $this->transient_data['course_ids']; } else if ( ( isset( $this->transient_data['posts_ids'] ) ) && ( !empty( $this->transient_data['posts_ids'] ) ) ) { $post_ids = $this->transient_data['posts_ids']; } else { $post_ids = learndash_user_get_enrolled_courses( intval( $user_id ), $course_query_args, true ); } if ( !empty( $post_ids ) ) { $activity_query_args['user_ids'] = array( $user_id ); $activity_query_args['post_ids'] = $post_ids; //error_log('activity_query_args
'. print_r($activity_query_args, true) .'
'); $user_courses_reports = learndash_reports_get_activity( $activity_query_args ); if ( !empty( $user_courses_reports['results'] ) ) { foreach( $user_courses_reports['results'] as $result ) { $row = array(); foreach( $this->data_headers as $header_key => $header_data ) { if ( ( isset( $header_data['display'] ) ) && ( !empty( $header_data['display'] ) ) ) { $row[$header_key] = call_user_func_array( $header_data['display'], array( 'header_value' => $header_data['default'], 'header_key' => $header_key, 'item' => $result, 'report_user' => $report_user, ) ); } else if ( ( isset( $header_data['default'] ) ) && ( !empty( $header_data['default'] ) ) ) { $row[$header_key] = $header_data['default']; } else { $row[$header_key] = ''; } } if ( !empty($row ) ) { $course_progress_data[] = $row; } } } else { //error_log('user_courses_reports
'. print_r($user_courses_reports, true) .'
'); if ( ( is_array( $this->transient_data['activity_status'] ) ) && ( count( $this->transient_data['activity_status'] ) > 1 ) && ( in_array('NOT_STARTED', $this->transient_data['activity_status'] ) ) ) { $row = array(); foreach( $this->data_headers as $header_key => $header_data ) { if ( ( isset( $header_data['display'] ) ) && ( !empty( $header_data['display'] ) ) ) { $row[$header_key] = call_user_func_array( $header_data['display'], array( 'header_value' => $header_data['default'], 'header_key' => $header_key, 'item' => new stdClass(), 'report_user' => $report_user, ) ); } else if ( ( isset( $header_data['default'] ) ) && ( !empty( $header_data['default'] ) ) ) { $row[$header_key] = $header_data['default']; } else { $row[$header_key] = ''; } } if ( !empty($row ) ) { $course_progress_data[] = $row; } } } } } if ( $this->out_of_timer() ) { break; } } if ( !empty( $course_progress_data ) ) { $this->csv_parse->file = $this->report_filename; $this->csv_parse->output_filename = $this->report_filename; // legacy $this->csv_parse = apply_filters('learndash_csv_object', $this->csv_parse, 'courses' ); /** * Filter to override CSV object attributes * @since 2.4.7 * This is basically the same as the above line with the exeption of the last param used * being the proper data slug instead of just 'courses'. */ $this->csv_parse = apply_filters('learndash_csv_object', $this->csv_parse, $this->data_slug ); $course_progress_data = apply_filters('learndash_csv_data', $course_progress_data, $this->data_slug ); $save_ret = $this->csv_parse->save( $this->report_filename, $course_progress_data, true, wp_list_pluck( $this->data_headers, 'label' ) ); } } $data['result_count'] = $data['total_count'] - count( $this->transient_data['users_ids'] ); $data['progress_percent'] = ( $data['result_count'] / $data['total_count'] ) * 100; $data['progress_label'] = sprintf( esc_html_x('%1$d of %2$s Users', 'placeholders: result count, total count', 'learndash'), $data['result_count'], $data['total_count']); } } } return $data; } function set_report_headers() { $this->data_headers = array(); $this->data_headers['user_id'] = array( 'label' => esc_html__( 'user_id', 'learndash' ), 'default' => '', 'display' => array( $this, 'report_column' ) ); $this->data_headers['user_name'] = array( 'label' => esc_html__( 'name', 'learndash' ), 'default' => '', 'display' => array( $this, 'report_column' ) ); $this->data_headers['user_email'] = array( 'label' => esc_html__( 'email', 'learndash' ), 'default' => '', 'display' => array( $this, 'report_column' ) ); $this->data_headers['course_id'] = array( 'label' => esc_html__( 'course_id', 'learndash' ), 'default' => '', 'display' => array( $this, 'report_column' ) ); $this->data_headers['course_title'] = array( 'label' => esc_html__( 'course_title', 'learndash' ), 'default' => '', 'display' => array( $this, 'report_column' ) ); $this->data_headers['course_steps_completed'] = array( 'label' => esc_html__( 'steps_completed', 'learndash' ), 'default' => '', 'display' => array( $this, 'report_column' ) ); $this->data_headers['course_steps_total'] = array( 'label' => esc_html__( 'steps_total', 'learndash' ), 'default' => '', 'display' => array( $this, 'report_column' ) ); $this->data_headers['course_completed'] = array( 'label' => esc_html__( 'course_completed', 'learndash' ), 'default' => '', 'display' => array( $this, 'report_column' ) ); $this->data_headers['course_completed_on'] = array( 'label' => esc_html__( 'course_completed_on', 'learndash' ), 'default' => '', 'display' => array( $this, 'report_column' ) ); $this->data_headers = apply_filters('learndash_data_reports_headers', $this->data_headers, $this->data_slug ); } function send_report_headers_to_csv() { if ( !empty( $this->data_headers ) ) { $this->csv_parse->file = $this->report_filename; $this->csv_parse->output_filename = $this->report_filename; // legacy $this->csv_parse = apply_filters('learndash_csv_object', $this->csv_parse, 'courses' ); /** * Filter to override CSV object attributes * @since 2.4.7 * This is basically the same as the above line with the exeption of the last param used * being the proper data slug instead of just 'courses'. */ $this->csv_parse = apply_filters('learndash_csv_object', $this->csv_parse, $this->data_slug ); $this->data_headers = apply_filters('learndash_csv_data', $this->data_headers, $this->data_slug ); $this->csv_parse->save( $this->report_filename, array(), false, wp_list_pluck( $this->data_headers, 'label' ) ); } } function set_report_filenames( $data ) { $wp_upload_dir = wp_upload_dir(); //$wp_upload_dir['basedir'] = str_replace('\\', '/', $wp_upload_dir['basedir']); $ld_file_part = '/learndash/reports/learndash_reports_'. str_replace( array('ld_data_reports_', '-'), array('', '_'), $this->transient_key ) .'.csv'; $ld_wp_upload_filename = $wp_upload_dir['basedir'] . $ld_file_part; if ( wp_mkdir_p( dirname( $ld_wp_upload_filename ) ) === false ) { $data['error_message'] = esc_html__("ERROR: Cannot create working folder. Check that the parent folder is writable", 'learndash') ." ". $ld_wp_upload_dir; return $data; } file_put_contents( trailingslashit( dirname( $ld_wp_upload_filename ) ) .'index.php', '// nothing to see here'); // Because we on;y want to store the relative path //$ld_wp_upload_filename = str_replace( ABSPATH, '', $ld_wp_upload_filename ); $this->transient_data['report_filename'] = apply_filters( 'learndash_report_filename', $ld_wp_upload_filename, $this->data_slug ); //$this->transient_data['report_url'] = $wp_upload_dir['baseurl'] . $ld_file_part; $this->transient_data['report_url'] = add_query_arg( array( 'data-slug' => $this->data_slug, 'data-nonce' => $data['nonce'], 'ld-report-download' => 1 ), admin_url() //get_option('home') ); } function report_column( $column_value = '', $column_key, $report_item, $report_user ) { switch( $column_key ) { case 'user_id': if ( $report_user instanceof WP_User ) { $column_value = $report_user->ID; } break; case 'user_name': if ( $report_user instanceof WP_User ) { $column_value = $report_user->display_name; $column_value = str_replace("’", "'", $column_value ); } break; case 'user_email': if ( $report_user instanceof WP_User ) { $column_value = $report_user->user_email; } break; case 'course_id': if ( property_exists( $report_item, 'post_id' ) ) { $column_value = $report_item->post_id; } break; case 'course_title': if ( property_exists( $report_item, 'post_title' ) ) { $column_value = $report_item->post_title; $column_value = str_replace("’", "'", $column_value ); } break; case 'course_steps_total': $column_value = '0'; //if ( ( property_exists( $report_item, 'activity_meta' ) ) && ( !empty( $report_item->activity_meta ) ) ) { // if ( ( isset( $report_item->activity_meta['steps_total'] ) ) && (!empty( $report_item->activity_meta['steps_total'] ) ) ) { // $column_value = $report_item->activity_meta['steps_total']; // } //} else if ( ( property_exists( $report_item, 'post_id' ) ) && ( !empty( $report_item->post_id ) ) ) { // $column_value = learndash_get_course_steps_count( $report_item->post_id ); //} $column_value = learndash_get_course_steps_count( $report_item->post_id ); break; case 'course_steps_completed': $column_value = '0'; // First check if the user previously completed the course $user_completed_course = false; $completed_on = get_user_meta( $report_item->user_id, 'course_completed_' . $report_item->post_id, true ); if ( !empty( $completed_on ) ) { $user_completed_course = true; } else if ( property_exists( $report_item, 'activity_status' ) ) { if ( $report_item->activity_status == true ) { $user_completed_course = true; } } if ( $user_completed_course == true ) { // IF the user completed the course we set the user's completed steps to the number of steps in the course. $column_value = learndash_get_course_steps_count( $report_item->post_id ); } else if ( ( property_exists( $report_item, 'activity_meta' ) ) && ( !empty( $report_item->activity_meta ) ) ) { if ( ( isset( $report_item->activity_meta['steps_completed'] ) ) && (!empty( $report_item->activity_meta['steps_completed'] ) ) ) { $column_value = $report_item->activity_meta['steps_completed']; $course_steps_count = learndash_get_course_steps_count( $report_item->post_id ); if ( $column_value > $course_steps_count ) { $column_value = $course_steps_count; } } } break; case 'course_completed': $column_value = esc_html_x('NO', 'Course Complete Report label: NO', 'learndash'); $completed_on = get_user_meta( $report_item->user_id, 'course_completed_' . $report_item->post_id, true ); if ( !empty( $completed_on ) ) { $column_value = esc_html_x('YES', 'Course Complete Report label: YES', 'learndash'); } else if ( property_exists( $report_item, 'activity_status' ) ) { if ( $report_item->activity_status == true ) { $column_value = esc_html_x('YES', 'Course Complete Report label: YES', 'learndash'); } } break; case 'course_completed_on': $completed_on = get_user_meta( $report_item->user_id, 'course_completed_' . $report_item->post_id, true ); if ( !empty( $completed_on ) ) { return learndash_adjust_date_time_display( $completed_on, 'Y-m-d' ); } else if ( property_exists( $report_item, 'activity_status' ) ) { if ( $report_item->activity_status == true ) { if ( ( property_exists( $report_item, 'activity_completed' ) ) && ( !empty( $report_item->activity_completed ) ) ) { return learndash_adjust_date_time_display( $report_item->activity_completed, 'Y-m-d' ); } } } break; default: break; } /** * Allow filtering of the report column data * @since 2.4.7 */ return apply_filters('learndash_report_column_item', $column_value, $column_key, $report_item, $report_user, $this->data_slug ); } // End of functions } } includes/admin/class-learndash-admin-data-upgrades.php000066600000042136152141567370017051 0ustar00meta_key = $this->transient_prefix . $this->data_slug; add_action( 'admin_init', array( $this, 'admin_init' ) ); if ( ! defined( 'LEARNDASH_PROCESS_TIME_PERCENT' ) ) { define( 'LEARNDASH_PROCESS_TIME_PERCENT', apply_filters( 'learndash_process_time_percent', 80 ) ); } if ( ! defined( 'LEARNDASH_PROCESS_TIME_SECONDS' ) ) { define( 'LEARNDASH_PROCESS_TIME_SECONDS', apply_filters( 'learndash_process_time_seconds', 10 ) ); } } /** * Get the current instance of this class or new. * * @since 2.3 * * @param string $instance_key Unique identifier for instance. * @return object instance of class. */ public static function get_instance( $instance_key = '' ) { if ( ! empty( $instance_key ) ) { if ( isset( self::$_instances[ $instance_key ] ) ) { return self::$_instances[ $instance_key ]; } } else { if ( null === self::$instance ) { self::$instance = new static(); } return self::$instance; } } /** * Add instance to static tracking array * * @since 2.4.0 */ final public static function add_instance() { $section = get_called_class(); if ( ! isset( self::$_instances[ $section ] ) ) { self::$_instances[ $section ] = new $section(); } } /** * Register the data upgrade action. * * @since 2.3 */ public function register_upgrade_action() { // Add ourselved to the upgrade actions. if ( ! isset( self::$upgrade_actions[ $this->data_slug ] ) ) { self::$upgrade_actions[ $this->data_slug ] = array( 'class' => get_called_class(), 'instance' => $this, 'slug' => $this->data_slug, ); } } /** * Initialize the LearnDash Settings array * * @since 2.3 * * @param bool $force_reload optional to force reload from database. * @return void. */ private function init_data_settings( $force_reload = false ) { if ( ( true !== $this->data_settings_loaded ) || ( true === $force_reload ) ) { $this->data_settings_loaded = true; $this->data_settings = get_option( 'learndash_data_settings', array() ); $data_settings_changed = false; if ( ! isset( $this->data_settings['db_version'] ) ) { $this->data_settings['db_version'] = 0; } if ( ! isset( $this->data_settings['version_history'] ) ) { $this->data_settings['version_history'] = array(); } if ( ! isset( $this->data_settings['prior_version'] ) ) { $this->data_settings['prior_version'] = ''; } if ( empty( $this->data_settings['prior_version'] ) ) { if ( get_option( 'learndash_quiz_migration_completed' ) ) { // If we have a prior version of LD. $this->data_settings['prior_version'] = '0.0.0.0'; } else { // Else we have a new install $this->data_settings['prior_version'] = 'new'; } $this->data_settings['version_history'][0] = $this->data_settings['prior_version']; $data_settings_changed = true; } if ( ! isset( $this->data_settings['current_version'] ) ) { $this->data_settings['current_version'] = 0; } if ( version_compare( LEARNDASH_VERSION, $this->data_settings['current_version'], 'ne' ) ) { if ( ! empty( $this->data_settings['current_version'] ) ) { $this->data_settings['prior_version'] = $this->data_settings['current_version']; if ( ! isset( $this->data_settings['version_history'][0] ) ) { $this->data_settings['version_history'][0] = $this->data_settings['prior_version']; } } $this->data_settings['current_version'] = LEARNDASH_VERSION; $this->data_settings['version_history'][ time() ] = LEARNDASH_VERSION; $data_settings_changed = true; } if ( empty( $this->data_settings['version_history'] ) ) { $this->data_settings['version_history'][ time() ] = $this->data_settings['current_version']; $this->data_settings['version_history'][0] = $this->data_settings['prior_version']; $data_settings_changed = true; } if ( true === $data_settings_changed ) { krsort( $this->data_settings['version_history'] ); $this->data_settings['version_history'] = array_slice( $this->data_settings['version_history'], 0, 25, true ); update_option( 'learndash_data_settings', $this->data_settings ); } } } /** * Get the LearnDash Settings array * * @since 2.3 * * @param string $key optional to return only specifc key value. * @return mixed. */ public function get_data_settings( $key = '' ) { $this->init_data_settings( true ); if ( ! empty( $key ) ) { if ( isset( $this->data_settings[ $key ] ) ) { return $this->data_settings[ $key ]; } } else { return $this->data_settings; } } /** * Set data upgrade option for instance. * * @since 2.3 * * @param string $key Key to data upgrade instance. * @param string $value Value for key iinstance. */ public function set_data_settings( $key = '', $value = '' ) { if ( empty( $key ) ) { return; } $this->init_data_settings( true ); $this->data_settings[ $key ] = $value; return update_option( 'learndash_data_settings', $this->data_settings ); } /** * General admin_init hook function to check admin notices. * * @since 2.3 */ public function admin_init() { $this->init_data_settings(); if ( true === $this->check_upgrade_admin_notice() ) { add_action( 'admin_notices', array( $this, 'show_upgrade_admin_notice' ) ); } } /** * Shows Data Upgrade admin notice. * * @version 2.3 */ public function show_upgrade_admin_notice() { if ( true !== self::$admin_notice_shown ) { self::$admin_notice_shown = true; $admin_notice_message = sprintf( // translators: placeholder: link to LearnDash Data Upgrade admin page. esc_html_x( 'LearnDash Notice: Please perform a %s. This is a required step to ensure accurate reporting.', 'placeholder: link to LearnDash Data Upgrade admin page', 'learndash' ), '' . esc_html__( 'LearnDash Data Upgrade', 'learndash' ) . '' ); ?>

data_settings['user-meta-courses']['version'] ) ) && ( $this->data_settings['user-meta-courses']['version'] < LEARNDASH_SETTINGS_TRIGGER_UPGRADE_VERSION ) ) { $show_admin_notice = true; } if ( ( isset( $this->data_settings['user-meta-quizzes']['version'] ) ) && ( $this->data_settings['user-meta-quizzes']['version'] < LEARNDASH_SETTINGS_TRIGGER_UPGRADE_VERSION ) ) { $show_admin_notice = true; } return $show_admin_notice; } /** * Show the admin page content. * * @since 2.3 */ public function admin_page() { ?> $upgrade_action ) { $upgrade_action['instance']->show_upgrade_action(); } ?>
time(), 'user_id' => get_current_user_id(), 'version' => LEARNDASH_SETTINGS_TRIGGER_UPGRADE_VERSION, ), $data ); $data_settings = array_diff_key( $data_settings, array( 'nonce' => '', 'slug' => '', 'continue' => '', 'progress_label' => '', 'result_count' => '', 'progress_percent' => '', ) ); $this->set_data_settings( $this->data_slug, $data_settings ); } /** * Return the last run details for the last completed data upgrade for the instance. * * @since 2.3 */ public function get_last_run_info() { $last_run_info = ''; $data_settings = $this->get_data_settings( $this->data_slug ); $last_run_info = esc_html__( 'Last run: none', 'learndash' ); if ( ! empty( $data_settings ) ) { if ( isset( $data_settings['user_id'] ) ) { $user = get_user_by( 'id', $data_settings['user_id'] ); if ( ( $user ) && ( is_a( $user, 'WP_User' ) ) ) { $last_run_info = sprintf( // translators: placeholders: date/time, user name. _x( 'Last run: %1$s by %2$s', 'placeholders: date/time, user name', 'learndash' ), learndash_adjust_date_time_display( $data_settings['last_run'] ), $user->display_name ); } } } return $last_run_info; } /** * Entry point to perform data upgrade for instance. * * @since 2.3 * * @param array $post_data Array of post dats sent via AJAX. * @param array $reply_data Array of return data returned to browser. * * @return array $reply_data. */ public function do_data_upgrades( $post_data = array(), $reply_data = array() ) { if ( ( isset( $post_data['slug'] ) ) && ( ! empty( $post_data['slug'] ) ) ) { $post_data_slug = esc_attr( $post_data['slug'] ); if ( isset( self::$upgrade_actions[ $post_data_slug ] ) ) { if ( isset( $post_data['data'] ) ) { $data = $post_data['data']; } else { $data = array(); } $reply_data = self::$upgrade_actions[ $post_data_slug ]['instance']->process_upgrade_action( $post_data ); } } return $reply_data; } /** * Initialize the processing timer. * * @since 2.3 */ protected function init_process_times() { $this->process_times['started'] = time(); $this->process_times['limit'] = intval( ini_get( 'max_execution_time' ) ); if ( empty( $this->process_times['limit'] ) ) { $this->process_times['limit'] = 60; } } /** * Check if the process timer is out of time. * * @since 2.3 */ protected function out_of_timer() { $this->process_times['current_time'] = time(); $this->process_times['ticks'] = $this->process_times['current_time'] - $this->process_times['started']; $this->process_times['percent'] = ( $this->process_times['ticks'] / $this->process_times['limit'] ) * 100; // If we are over 80% of the allowed processing time or over 10 seconds then finish up and return. if ( ( $this->process_times['percent'] >= LEARNDASH_PROCESS_TIME_PERCENT ) || ( $this->process_times['ticks'] > LEARNDASH_PROCESS_TIME_SECONDS ) ) { return true; } return false; } /** * Remove the processing transient for instance. * * @since 2.3 * * @param string $transient_key Transient key to identify transient. */ protected function remove_transient( $transient_key = '' ) { if ( ! empty( $transient_key ) ) { $options_key = $this->transient_prefix . $transient_key; $options_key = str_replace( '-', '_', $options_key ); return delete_option( $options_key ); } } /** * Get the processing transient for instance. * * @since 2.3 * * @param string $transient_key Transient key to identify transient. * @return mixed transient data. */ protected function get_transient( $transient_key = '' ) { if ( ! empty( $transient_key ) ) { $options_key = $this->transient_prefix . $transient_key; $options_key = str_replace( '-', '_', $options_key ); return get_option( $options_key ); } } /** * Set the processing transient for instance. * * @since 2.3 * * @param string $transient_key Transient key to identify transient. * @param array $transient_data Array for transient data. */ protected function set_option_cache( $transient_key = '', $transient_data = '' ) { if ( ! empty( $transient_key ) ) { $options_key = $this->transient_prefix . $transient_key; $options_key = str_replace( '-', '_', $options_key ); if ( ! empty( $transient_data ) ) { update_option( $options_key, $transient_data ); } else { delete_option( $options_key ); } } } // End of functions. } } // Go ahead and inlcude out User Meta Courses upgrade class. require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-translations.php'; require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-group-leader-role.php'; require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-user-activity-db-table.php'; require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-user-meta-courses.php'; require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-user-meta-quizzes.php'; //require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-course-access-list.php'; require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-quiz-questions.php'; require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-course-access-list-convert.php'; require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/admin/classes-data-uprades-actions/class-learndash-admin-data-upgrades-rename_wpproquiz-tables.php'; /** * Action to let other. * * @since 2.6.0 */ do_action( 'learndash_data_upgrades_init' ); /** * AJAX function to handle calls from browser on Data Upgrade cycles. */ function learndash_data_upgrades_ajax() { $reply_data = array( 'status' => false ); if ( isset( $_POST['data'] ) ) { $post_data = $_POST['data']; } else { $post_data = array(); } if ( learndash_is_admin_user() ) { $ld_admin_data_upgrades = Learndash_Admin_Data_Upgrades::get_instance(); $reply_data['data'] = $ld_admin_data_upgrades->do_data_upgrades( $post_data, $reply_data ); if ( ! empty( $reply_data ) ) { echo json_encode( $reply_data ); } } wp_die(); } add_action( 'wp_ajax_learndash-data-upgrades', 'learndash_data_upgrades_ajax' ); /** * Utility function to check if the data upgrade for Quiz Questions has been run. * * @since 2.6.0 * @return boolean true if has been run. */ function is_data_upgrade_quiz_questions_updated() { $data_settings_quiz_questions = learndash_data_upgrades_setting( 'pro-quiz-questions' ); if ( ( isset( $data_settings_quiz_questions['last_run'] ) ) && ( ! empty( $data_settings_quiz_questions['last_run'] ) ) ) { return true; } } function learndash_data_upgrades_setting( $settings_key = '' ) { $element = Learndash_Admin_Data_Upgrades::get_instance(); if ( ( $element ) && ( is_a( $element, 'Learndash_Admin_Data_Upgrades' ) ) ) { return $element->get_data_settings( $settings_key ); } } includes/admin/ld-gutenberg.php000066600000001412152141567370012547 0ustar00builder_assets[ $this->builder_post_type ] ) ) { $this->builder_assets[ $this->builder_post_type ] = array( 'post_data' => array(), 'messages' => array(), ); } add_action( 'admin_footer', array( $this, 'builder_admin_footer' ), 1 ); if ( ! empty( $course_id ) ) { $this->builder_post_id = intval( $course_id ); } } /** * Add instance to static tracking array * * @since 2.4.0 */ final public static function add_instance() { $called_class = get_called_class(); if ( is_subclass_of( $called_class, __CLASS__ ) ) { if ( ! isset( self::$_instances[ $called_class ] ) ) { self::$_instances[ $called_class ] = new $called_class(); if ( is_a( self::$_instances[ $called_class ], $called_class ) ) { return self::$_instances[ $called_class ]; } } else { return self::$_instances[ $called_class ]; } } } /** * Get the current instance of this class or new. * * @since 2.3 * * @param string $called_class Class for instance. * @return object instance of class. */ public static function get_instance( $called_class = '' ) { if ( ! empty( $called_class ) ) { if ( isset( self::$_instances[ $called_class ] ) ) { return self::$_instances[ $called_class ]; } else { self::add_instance(); if ( ( isset( self::$_instances[ $called_class ] ) ) && ( is_a( self::$_instances[ $called_class ], $called_class ) ) ) { return self::$_instances[ $called_class ]; } } } else { if ( null === self::$instance ) { self::$instance = new static(); } return self::$instance; } } /** * Call via the WordPress load sequence for admin pages. */ public function builder_on_load() { } /** * Call via the WordPress admin_footer action hook. */ public function builder_admin_footer() { global $post; wp_enqueue_style( 'learndash-new-builder-style', LEARNDASH_LMS_PLUGIN_URL . 'assets/js/builder/dist/builder' . leardash_min_builder_asset() . '.css', array( 'wp-editor' ), LEARNDASH_SCRIPT_VERSION_TOKEN ); wp_style_add_data( 'learndash-new-builder-style', 'rtl', 'replace' ); wp_enqueue_script( 'learndash-new-builder-script', LEARNDASH_LMS_PLUGIN_URL . 'assets/js/builder/dist/builder' . leardash_min_builder_asset() . '.js', array( 'wp-i18n', 'learndash-new-header-script', 'wp-data' ), LEARNDASH_SCRIPT_VERSION_TOKEN, true ); // Make sure some metaboxes can't be toggled off wp_enqueue_script( 'learndash-force-metaboxes', LEARNDASH_LMS_PLUGIN_URL . 'assets/js/builder/dist/metaboxes' . leardash_min_builder_asset() . '.js', array( 'wp-data', 'jquery' ), LEARNDASH_SCRIPT_VERSION_TOKEN, true ); $metaboxes = array(); if ( ( function_exists( 'use_block_editor_for_post' ) ) && ( use_block_editor_for_post( $post ) ) ) { $this->builder_assets[ $this->builder_post_type ]['post_data']['builder_editor'] = 'block'; $metaboxes['editor'] = 'block'; } else { $this->builder_assets[ $this->builder_post_type ]['post_data']['builder_editor'] = 'classic'; $metaboxes['editor'] = 'classic'; } $this->builder_assets[ $this->builder_post_type ]['post_data']['builder_class'] = get_called_class(); $this->builder_assets[ $this->builder_post_type ]['post_data']['builder_post_id'] = $this->builder_post_id; $this->builder_assets[ $this->builder_post_type ]['post_data']['builder_post_title'] = get_the_title( $this->builder_post_id ); $this->builder_assets[ $this->builder_post_type ]['post_data']['builder_post_type'] = $this->builder_post_type; wp_localize_script( 'learndash-new-builder-script', 'learndash_builder_assets', $this->builder_assets ); wp_localize_script( 'learndash-force-metaboxes', 'learndash_builder_metaboxes', $metaboxes ); } /** * Prints content for Course Builder meta box for admin * This function is called from other add_meta_box functions * * @since 2.5 * * @param object $post WP_Post. * @return string meta box HTML output. */ public function show_builder_box( $post ) { // Use nonce for verification. wp_nonce_field( $this->builder_prefix . '_' . $this->builder_post_type . '_' . $this->builder_post_id . '_nonce', $this->builder_prefix . '_nonce' ); ?>
|
show_builder_selectors(); ?>
show_builder_headers(); ?> build_course_steps_html(); ?>

show_builder_header_left(); $this->show_builder_header_right(); } public function show_builder_header_left() { ?>
get_build_items_count(); ?>
|
get_label_for_post_type( $this->builder_post_type ); foreach ( $this->selector_post_types as $selector_post_type ) { $post_type_object = get_post_type_object( $selector_post_type ); if ( is_a( $post_type_object, 'WP_Post_Type' ) ) { $this->builder_assets[ $this->builder_post_type ]['messages'][ 'confirm_remove_' . $selector_post_type ] = sprintf( // translators: 'placeholders: will be post type labels like Course, Lesson, Topic'. esc_html_x( 'Are you sure you want to remove this %1$s from the %2$s? (This will also remove all sub-items)', 'placeholders: will be post type labels like Course, Lesson, Topic', 'learndash' ), LearnDash_Custom_Label::get_label( $this->get_label_for_post_type( $selector_post_type ) ), LearnDash_Custom_Label::get_label( $builder_post_type_label ) ); $this->builder_assets[ $this->builder_post_type ]['messages'][ 'confirm_trash_' . $selector_post_type ] = sprintf( // translators: placeholder: will be post type label like Course, Lesson, Topic. esc_html_x( 'Are you sure you want to move this %s to Trash?', 'placeholder: will be post type label like Course, Lesson, Topic', 'learndash' ), LearnDash_Custom_Label::get_label( $this->get_label_for_post_type( $selector_post_type ) ) ); $post_type_query_args = $this->build_selector_query( array( 'post_type' => $selector_post_type, ) ); if ( ! empty( $post_type_query_args ) ) { $post_type_query = new WP_Query( $post_type_query_args ); $selector_post_type_steps = $this->get_selector_selected_steps( $selector_post_type ); $selector_post_type_steps = htmlspecialchars( json_encode( $selector_post_type_steps ) ); ?>

get_label_for_post_type( $selector_post_type, false ) ); ?>

build_selector_row_single( null, $selector_post_type ); if ( ! empty( $row_single ) ) { ?>

build_selector_pages_buttons( $post_type_query ); ?>

    have_posts() ) { echo $this->build_selector_rows( $post_type_query ); } ?>
query['paged'] ); $last_page = intval( $post_type_query->max_num_pages ); if ( empty( $last_page ) ) { $last_page = 1; } if ( $current_page <= 1 ) { $prev_page = 1; $prev_disabled = ' disabled="disabled" '; } else { $prev_page = $current_page - 1; $prev_disabled = ''; } if ( $current_page >= $last_page ) { $next_page = $last_page; $next_disabled = ' disabled="disabled" '; } else { $next_page = $current_page + 1; $next_disabled = ''; } $pager_buttons .= ''; $pager_buttons .= ''; $pager_buttons .= '' . $current_page . ' / ' . $last_page . ''; $pager_buttons .= ''; $pager_buttons .= ''; } return $pager_buttons; } /** * Show selector rows. * * @since 2.5.0 * @param object $post_type_query WP_Query instance. */ protected function build_selector_rows( $post_type_query ) { $selector_rows = ''; if ( $post_type_query instanceof WP_Query ) { $selector_post_type = $post_type_query->query['post_type']; $selector_post_type_object = get_post_type_object( $selector_post_type ); $selector_label = $selector_post_type_object->label; $selector_slug = $this->get_label_for_post_type( $selector_post_type ); foreach ( $post_type_query->posts as $p ) { $selector_rows .= $this->build_selector_row_single( $p, $selector_post_type ); } } return $selector_rows; } /** * Build Course Steps HTML. */ public function build_course_steps_html() { $steps_html = ''; $course_steps = $this->ld_course_steps_object->get_steps(); if ( ! empty( $course_steps ) ) { $steps_html .= $this->process_course_steps( $course_steps ); } return $steps_html; } // End of functions. } } if ( ( defined( 'LEARNDASH_COURSE_BUILDER' ) ) && ( LEARNDASH_COURSE_BUILDER === true ) ) { require_once LEARNDASH_LMS_PLUGIN_DIR . '/includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php'; } if ( ( defined( 'LEARNDASH_QUIZ_BUILDER' ) ) && ( LEARNDASH_QUIZ_BUILDER === true ) ) { require_once LEARNDASH_LMS_PLUGIN_DIR . '/includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php'; } add_action( 'wp_ajax_learndash_builder_selector_pager', function() { if ( ! current_user_can( 'read' ) ) { echo wp_json_encode( array() ); wp_die(); } // @codingStandardsIgnoreStart if ( ( ! isset( $_POST['builder_data'] ) ) || ( empty( $_POST['builder_data'] ) ) ) { echo wp_json_encode( array() ); wp_die(); } $builder_data = $_POST['builder_data']; if ( ( ! isset( $_POST['builder_query_args'] ) ) || ( empty( $_POST['builder_query_args'] ) ) ) { echo wp_json_encode( array() ); wp_die(); } $builder_query_args = $_POST['builder_query_args']; // @codingStandardsIgnoreEnd $builder_data = learndash_verify_builder_data( $builder_data ); $builder_instance = $builder_data['builder_class']::add_instance(); if ( is_a( $builder_instance, $builder_data['builder_class'] ) ) { $builder_instance->builder_init( $builder_data['builder_post_id'] ); $builder_instance->learndash_builder_selector_pager( $builder_query_args ); } echo json_encode( array() ); wp_die(); /* if ( ( isset( $_POST['builder_data'] ) ) && ( ! empty( $_POST['builder_data'] ) ) ) { if ( ( isset( $_POST['builder_data']['builder_class'] ) ) && ( ! empty( $_POST['builder_data']['builder_class'] ) ) ) { $builder_class = esc_attr( $_POST['builder_data']['builder_class'] ); $builder_instance = $builder_class::add_instance(); if ( is_a( $builder_instance, $builder_class ) ) { if ( ( isset( $_POST['builder_data']['builder_post_id'] ) ) && ( ! empty( $_POST['builder_data']['builder_post_id'] ) ) ) { $builder_instance->builder_init( $_POST['builder_data']['builder_post_id'] ); if ( ( isset( $_POST['builder_query_args'] ) ) && ( ! empty( $_POST['builder_query_args'] ) ) ) { $builder_instance->learndash_builder_selector_pager( $_POST['builder_query_args'] ); } } } } } echo json_encode( array() ); wp_die(); */ } ); add_action( 'wp_ajax_learndash_builder_selector_search', function() { if ( ! current_user_can( 'read' ) ) { echo wp_json_encode( array() ); wp_die(); } // @codingStandardsIgnoreStart if ( ( ! isset( $_POST['builder_data'] ) ) || ( empty( $_POST['builder_data'] ) ) ) { echo wp_json_encode( array() ); wp_die(); } $builder_data = $_POST['builder_data']; if ( ( ! isset( $_POST['builder_query_args'] ) ) || ( empty( $_POST['builder_query_args'] ) ) ) { echo wp_json_encode( array() ); wp_die(); } $builder_query_args = $_POST['builder_query_args']; // @codingStandardsIgnoreEnd $builder_data = learndash_verify_builder_data( $builder_data ); $builder_instance = $builder_data['builder_class']::add_instance(); if ( is_a( $builder_instance, $builder_data['builder_class'] ) ) { $builder_instance->builder_init( $builder_data['builder_post_id'] ); $builder_instance->learndash_builder_selector_search( $builder_query_args ); } echo json_encode( array() ); wp_die(); /* if ( ( isset( $_POST['builder_data'] ) ) && ( ! empty( $_POST['builder_data'] ) ) ) { if ( ( isset( $_POST['builder_data']['builder_class'] ) ) && ( ! empty( $_POST['builder_data']['builder_class'] ) ) ) { $builder_class = esc_attr( $_POST['builder_data']['builder_class'] ); $builder_instance = $builder_class::add_instance(); if ( is_a( $builder_instance, $builder_class ) ) { if ( ( isset( $_POST['builder_data']['builder_post_id'] ) ) && ( ! empty( $_POST['builder_data']['builder_post_id'] ) ) ) { $builder_instance->builder_init( $_POST['builder_data']['builder_post_id'] ); if ( ( isset( $_POST['builder_query_args'] ) ) && ( ! empty( $_POST['builder_query_args'] ) ) ) { $builder_instance->learndash_builder_selector_search( $_POST['builder_query_args'] ); } } } } } echo json_encode( array() ); wp_die(); */ } ); add_action( 'wp_ajax_learndash_builder_selector_step_trash', function() { if ( ! current_user_can( 'edit_courses' ) ) { echo wp_json_encode( array() ); wp_die(); } // @codingStandardsIgnoreStart if ( ( ! isset( $_POST['builder_data'] ) ) || ( empty( $_POST['builder_data'] ) ) ) { echo wp_json_encode( array() ); wp_die(); } $builder_data = $_POST['builder_data']; if ( ( ! isset( $_POST['builder_query_args'] ) ) || ( empty( $_POST['builder_query_args'] ) ) ) { echo wp_json_encode( array() ); wp_die(); } $builder_query_args = $_POST['builder_query_args']; // @codingStandardsIgnoreEnd $builder_data = learndash_verify_builder_data( $builder_data ); $builder_instance = $builder_data['builder_class']::add_instance(); if ( is_a( $builder_instance, $builder_data['builder_class'] ) ) { $builder_instance->builder_init( $builder_data['builder_post_id'] ); $builder_instance->learndash_builder_selector_step_trash( $builder_query_args ); } echo json_encode( array() ); wp_die(); /* if ( ( isset( $_POST['builder_data'] ) ) && ( ! empty( $_POST['builder_data'] ) ) ) { if ( ( isset( $_POST['builder_data']['builder_class'] ) ) && ( ! empty( $_POST['builder_data']['builder_class'] ) ) ) { $builder_class = esc_attr( $_POST['builder_data']['builder_class'] ); $builder_instance = $builder_class::add_instance(); if ( is_a( $builder_instance, $builder_class ) ) { if ( ( isset( $_POST['builder_data']['builder_post_id'] ) ) && ( ! empty( $_POST['builder_data']['builder_post_id'] ) ) ) { $builder_instance->builder_init( $_POST['builder_data']['builder_post_id'] ); if ( ( isset( $_POST['builder_query_args'] ) ) && ( ! empty( $_POST['builder_query_args'] ) ) ) { $builder_instance->learndash_builder_selector_step_trash( $_POST['builder_query_args'] ); } } } } } echo json_encode( array() ); wp_die(); */ } ); add_action( 'wp_ajax_learndash_builder_selector_step_new', function() { if ( ! current_user_can( 'edit_courses' ) ) { echo wp_json_encode( array() ); wp_die(); } // @codingStandardsIgnoreStart if ( ( ! isset( $_POST['builder_data'] ) ) || ( empty( $_POST['builder_data'] ) ) ) { echo wp_json_encode( array() ); wp_die(); } $builder_data = $_POST['builder_data']; if ( ( ! isset( $_POST['builder_query_args'] ) ) || ( empty( $_POST['builder_query_args'] ) ) ) { echo wp_json_encode( array() ); wp_die(); } $builder_query_args = $_POST['builder_query_args']; // @codingStandardsIgnoreEnd $builder_data = learndash_verify_builder_data( $builder_data ); $builder_instance = $builder_data['builder_class']::add_instance(); if ( is_a( $builder_instance, $builder_data['builder_class'] ) ) { $builder_instance->builder_init( $builder_data['builder_post_id'] ); $builder_instance->learndash_builder_selector_step_new( $builder_query_args ); } echo json_encode( array() ); wp_die(); /* if ( ( isset( $_POST['builder_data'] ) ) && ( ! empty( $_POST['builder_data'] ) ) ) { if ( ( isset( $_POST['builder_data']['builder_class'] ) ) && ( ! empty( $_POST['builder_data']['builder_class'] ) ) ) { $builder_class = esc_attr( $_POST['builder_data']['builder_class'] ); $builder_instance = $builder_class::add_instance(); if ( is_a( $builder_instance, $builder_class ) ) { if ( ( isset( $_POST['builder_data']['builder_post_id'] ) ) && ( ! empty( $_POST['builder_data']['builder_post_id'] ) ) ) { $builder_instance->builder_init( $_POST['builder_data']['builder_post_id'] ); if ( ( isset( $_POST['builder_query_args'] ) ) && ( ! empty( $_POST['builder_query_args'] ) ) ) { $builder_instance->learndash_builder_selector_step_new( $_POST['builder_query_args'] ); } } } } } echo json_encode( array() ); wp_die(); */ } ); add_action( 'wp_ajax_learndash_builder_selector_step_title', function() { if ( ! current_user_can( 'edit_courses' ) ) { echo wp_json_encode( array() ); wp_die(); } // @codingStandardsIgnoreStart if ( ( ! isset( $_POST['builder_data'] ) ) || ( empty( $_POST['builder_data'] ) ) ) { echo wp_json_encode( array() ); wp_die(); } $builder_data = $_POST['builder_data']; if ( ( ! isset( $_POST['builder_query_args'] ) ) || ( empty( $_POST['builder_query_args'] ) ) ) { echo wp_json_encode( array() ); wp_die(); } $builder_query_args = $_POST['builder_query_args']; // @codingStandardsIgnoreEnd $builder_data = learndash_verify_builder_data( $builder_data ); $builder_instance = $builder_data['builder_class']::add_instance(); if ( is_a( $builder_instance, $builder_data['builder_class'] ) ) { $builder_instance->builder_init( $builder_data['builder_post_id'] ); $builder_instance->learndash_builder_selector_step_title( $builder_query_args ); } echo json_encode( array() ); wp_die(); /* if ( ( isset( $_POST['builder_data'] ) ) && ( ! empty( $_POST['builder_data'] ) ) ) { if ( ( isset( $_POST['builder_data']['builder_class'] ) ) && ( ! empty( $_POST['builder_data']['builder_class'] ) ) ) { $builder_class = esc_attr( $_POST['builder_data']['builder_class'] ); $builder_instance = $builder_class::add_instance(); if ( is_a( $builder_instance, $builder_class ) ) { if ( ( isset( $_POST['builder_data']['builder_post_id'] ) ) && ( ! empty( $_POST['builder_data']['builder_post_id'] ) ) ) { $builder_instance->builder_init( $_POST['builder_data']['builder_post_id'] ); if ( ( isset( $_POST['builder_query_args'] ) ) && ( ! empty( $_POST['builder_query_args'] ) ) ) { $builder_instance->learndash_builder_selector_step_title( $_POST['builder_query_args'] ); } } } } } echo json_encode( array() ); wp_die(); */ } ); function learndash_verify_builder_data( $builder_data = array() ) { if ( empty( $builder_data ) ) { echo wp_json_encode( array() ); wp_die(); } if ( ( ! isset( $builder_data['builder_class'] ) ) || ( empty( $builder_data['builder_class'] ) ) ) { echo wp_json_encode( array() ); wp_die(); } $builder_data['builder_class'] = esc_attr( $builder_data['builder_class'] ); if ( ! is_subclass_of( $builder_data['builder_class'], 'Learndash_Admin_Builder' ) ) { echo wp_json_encode( array() ); wp_die(); } if ( ( ! isset( $builder_data['builder_post_type'] ) ) || ( empty( $builder_data['builder_post_type'] ) ) ) { echo wp_json_encode( array() ); wp_die(); } $builder_data['builder_post_type'] = esc_attr( $builder_data['builder_post_type'] ); if ( ( ! isset( $builder_data['builder_post_id'] ) ) || ( empty( $builder_data['builder_post_id'] ) ) ) { echo wp_json_encode( array() ); wp_die(); } $builder_data['builder_post_id'] = absint( $builder_data['builder_post_id'] ); if ( ( ! isset( $builder_data['builder_nonce'] ) ) || ( empty( $builder_data['builder_nonce'] ) ) ) { echo wp_json_encode( array() ); wp_die(); } //See nonce field build out in show_builder_box() of this file. //wp_nonce_field( $this->builder_prefix . '_' . $this->builder_post_type . '_' . $this->builder_post_id . '_nonce', $this->builder_prefix . '_nonce' ); $nonce_field_value = 'learndash_builder_' . $builder_data['builder_post_type'] . '_' . $builder_data['builder_post_id'] . '_nonce'; if ( ! wp_verify_nonce( $builder_data['builder_nonce'], $nonce_field_value ) ) { echo wp_json_encode( array() ); wp_die(); } return $builder_data; } includes/admin/ld-admin.php000066600000232476152141567370011675 0ustar00 id, $learndash_post_types ) ) { $class .= ' learndash-post-type ' . $screen->post_type; } if ( in_array( $screen->post_type, $learndash_post_types ) ) { $class .= ' learndash-screen'; } if ( learndash_is_group_leader_user() ) { $class .= ' learndash-user-group-leader'; } else { $class .= ' learndash-user-admin'; } return $class; } add_filter( 'admin_body_class', 'learndash_admin_body_class' ); /** * Hide top level menu when there are no submenus * * @since 2.1.0 */ function learndash_hide_menu_when_not_required() { ?> post_type, $learndash_post_types ) ) ) { $is_ld_pagenow = true; } $load_admin_assets = false; if ( ( true === $is_ld_page ) || ( true === $is_ld_post_type ) || ( true === $is_ld_pagenow ) ) { $load_admin_assets = true; } return apply_filters( 'learndash_load_admin_assets', $load_admin_assets ); } /** * Scripts/styles for admin * * @since 2.1.0 */ function learndash_load_admin_resources() { global $pagenow, $post, $typenow; //global $learndash_post_types, $learndash_pages; global $learndash_assets_loaded; wp_enqueue_style( 'learndash-admin-menu-style', LEARNDASH_LMS_PLUGIN_URL . 'assets/css/learndash-admin-menu' . leardash_min_asset() . '.css', array(), LEARNDASH_SCRIPT_VERSION_TOKEN ); wp_style_add_data( 'learndash-admin-menu-style', 'rtl', 'replace' ); $learndash_assets_loaded['styles']['learndash-admin-menu-style'] = __FUNCTION__; wp_enqueue_script( 'learndash-admin-menu-script', LEARNDASH_LMS_PLUGIN_URL . 'assets/js/learndash-admin-menu' . leardash_min_asset() . '.js', array( 'jquery' ), LEARNDASH_SCRIPT_VERSION_TOKEN, true ); wp_style_add_data( 'learndash-admin-menu-script', 'rtl', 'replace' ); $learndash_assets_loaded['scripts']['learndash-admin-menu-script'] = __FUNCTION__; if ( learndash_should_load_admin_assets() ) { /** * Needed for standalone Builders. */ // to get the tinyMCE editor wp_enqueue_editor(); // for media uploads wp_enqueue_media(); wp_enqueue_style( 'learndash_style', LEARNDASH_LMS_PLUGIN_URL . 'assets/css/style' . leardash_min_asset() . '.css', array(), LEARNDASH_SCRIPT_VERSION_TOKEN ); wp_style_add_data( 'learndash_style', 'rtl', 'replace' ); $learndash_assets_loaded['styles']['learndash_style'] = __FUNCTION__; wp_enqueue_style( 'learndash-admin-style', LEARNDASH_LMS_PLUGIN_URL . 'assets/css/learndash-admin-style' . leardash_min_asset() . '.css', array(), LEARNDASH_SCRIPT_VERSION_TOKEN ); wp_style_add_data( 'learndash-admin-style', 'rtl', 'replace' ); $learndash_assets_loaded['styles']['learndash-admin-style'] = __FUNCTION__; wp_enqueue_style( 'sfwd-module-style', LEARNDASH_LMS_PLUGIN_URL . 'assets/css/sfwd_module' . leardash_min_asset() . '.css', array(), LEARNDASH_SCRIPT_VERSION_TOKEN ); wp_style_add_data( 'sfwd-module-style', 'rtl', 'replace' ); $learndash_assets_loaded['styles']['sfwd-module-style'] = __FUNCTION__; if ( ( $pagenow == 'edit.php' ) && ( in_array( $typenow, array( 'sfwd-essays', 'sfwd-assignment', 'sfwd-topic', 'sfwd-quiz' ) ) ) ) { wp_enqueue_script( 'sfwd-module-script', LEARNDASH_LMS_PLUGIN_URL . 'assets/js/sfwd_module' . leardash_min_asset() . '.js', array( 'jquery' ), LEARNDASH_SCRIPT_VERSION_TOKEN, true ); $learndash_assets_loaded['scripts']['sfwd-module-script'] = __FUNCTION__; wp_localize_script( 'sfwd-module-script', 'sfwd_data', array() ); } } if ( ( in_array( $pagenow, array( 'post.php', 'post-new.php' ) ) ) && ( $post->post_type == 'sfwd-quiz' ) ) { wp_enqueue_script( 'wpProQuiz_admin_javascript', plugins_url( 'js/wpProQuiz_admin' . leardash_min_asset() . '.js', WPPROQUIZ_FILE ), array( 'jquery' ), LEARNDASH_SCRIPT_VERSION_TOKEN, true ); $learndash_assets_loaded['scripts']['wpProQuiz_admin_javascript'] = __FUNCTION__; } if ( ( in_array( $pagenow, array( 'post.php', 'post-new.php' ) ) ) && ( $post->post_type == 'sfwd-lessons' ) ) { wp_enqueue_style( 'ld-datepicker-ui-css', LEARNDASH_LMS_PLUGIN_URL . 'assets/css/jquery-ui' . leardash_min_asset() . '.css', array(), LEARNDASH_SCRIPT_VERSION_TOKEN ); wp_style_add_data( 'ld-datepicker-ui-css', 'rtl', 'replace' ); $learndash_assets_loaded['styles']['ld-datepicker-ui-css'] = __FUNCTION__; } if ( ( ( $pagenow == 'admin.php' ) && ( isset( $_GET['page'] ) ) && ( $_GET['page'] == 'ldAdvQuiz' ) ) && ( ( isset( $_GET['module'] ) ) && ( $_GET['module'] == 'statistics' ) ) ) { wp_enqueue_style( 'ld-datepicker-ui-css', LEARNDASH_LMS_PLUGIN_URL . 'assets/css/jquery-ui' . leardash_min_asset() . '.css', array(), LEARNDASH_SCRIPT_VERSION_TOKEN ); wp_style_add_data( 'ld-datepicker-ui-css', 'rtl', 'replace' ); $learndash_assets_loaded['styles']['ld-datepicker-ui-css'] = __FUNCTION__; } } add_action( 'admin_enqueue_scripts', 'learndash_load_admin_resources' ); /** * Change label in admin bar on single topic to 'Edit Topic' * * @todo consider for deprecation, action is commented * * @since 2.1.0 */ function learndash_admin_bar_link() { global $wp_admin_bar; global $post; if ( ! is_super_admin() || ! is_admin_bar_showing() ) { return; } if ( is_single() && $post->post_type == 'sfwd-topic' ) { $wp_admin_bar->add_menu( array( 'id' => 'edit_fixed', 'parent' => false, 'title' => sprintf( esc_html_x( 'Edit %s', 'Edit Topic Label', 'learndash' ), LearnDash_Custom_Label::get_label( 'topic' ) ), 'href' => get_edit_post_link( $post->id ), ) ); } } /** * Output Reports Page * * @since 2.1.0 */ function learndash_lms_reports_page() { ?>


esc_html__( 'Shortcode', 'learndash' ) ), array_slice( $cols, 3 ) ); } /** * Assigned Course columns in admin for Lessons and Quizes * * @since 2.1.0 * * @param array $cols admin columns for post type * @return array $cols admin columns for post type */ function add_course_data_columns( $cols ) { global $typenow; $new_columns = array(); if ( in_array( $typenow, array( 'sfwd-assignment' ) ) !== false ) { $new_columns = array( 'course' => sprintf( esc_html_x( 'Assigned %s', 'Assigned Course Label', 'learndash' ), LearnDash_Custom_Label::get_label( 'course' ) ), 'lesson' => sprintf( esc_html_x( 'Assigned %s', 'Assigned Lesson Label', 'learndash' ), LearnDash_Custom_Label::get_label( 'lesson' ) ), ); } else { if ( LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Courses_Builder', 'shared_steps' ) != 'yes' ) { $new_columns = array( 'course' => sprintf( esc_html_x( 'Assigned %s', 'Assigned Course Label', 'learndash' ), LearnDash_Custom_Label::get_label( 'course' ) ), ); } } if ( ! empty( $new_columns ) ) { $cols = array_merge( array_slice( $cols, 0, 3 ), $new_columns, array_slice( $cols, 3 ) ); } return $cols; } /** * Assigned Lesson & Assigned Course columns in admin for Topics and Assignments * * @since 2.1.0 * * @param array $cols admin columns for post type * @return array $cols admin columns for post type */ function add_lesson_data_columns( $cols ) { if ( LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Courses_Builder', 'shared_steps' ) != 'yes' ) { $cols = array_merge( array_slice( $cols, 0, 3 ), array( 'course' => sprintf( esc_html_x( 'Assigned %s', 'Assigned Course Label', 'learndash' ), LearnDash_Custom_Label::get_label( 'course' ) ), 'lesson' => sprintf( esc_html_x( 'Assigned %s', 'Assigned Lesson Label', 'learndash' ), LearnDash_Custom_Label::get_label( 'lesson' ) ), ), array_slice( $cols, 3 ) ); } return $cols; } /** * Status columns in admin for Assignments * * @since 2.1.0 * * @param array $cols admin columns for post type * @return array $cols admin columns for post type */ function add_assignment_data_columns( $cols ) { return array_merge( array_slice( $cols, 0, 3 ), array( 'approval_status' => esc_html__( 'Status', 'learndash' ), 'approval_points' => esc_html__( 'Points', 'learndash' ), ), array_slice( $cols, 3 ) ); } /** * Remove tags column for quizzes * * @since 2.1.0 * * @param array $cols admin columns for post type * @return array $cols admin columns for post type */ function remove_tags_column( $cols ) { unset( $cols['tags'] ); return $cols; } /** * Remove categories column for quizzes * * @since 2.1.0 * * @param array $cols admin columns for post type * @return array $cols admin columns for post type */ function remove_categories_column( $cols ) { unset( $cols['categories'] ); return $cols; } /** * Output approval status for assignment in admin column * * @since 2.1.0 * * @param string $column_name Name of the column. * @param int $assignment_id ID of the assigment. */ function manage_asigned_assignment_columns( $column_name, $assignment_id ) { switch ( $column_name ) { case 'approval_status': $assignment_lesson_id = intval( get_post_meta( $assignment_id, 'lesson_id', true ) ); if ( ! empty( $assignment_lesson_id ) ) { $approval_status_flag = learndash_is_assignment_approved_by_meta( $assignment_id ); if ( 1 == $approval_status_flag ) { $approval_status_label = _x( 'Approved', 'Assignment approval status', 'learndash' ); } else { $approval_status_flag = 0; $approval_status_label = _x( 'Not Approved', 'Assignment approval status', 'learndash' ); } $approval_status_url = admin_url( 'edit.php?post_type=' . @$_GET['post_type'] . '&approval_status=' . $approval_status_flag ); echo '' . esc_html( $approval_status_label ) . ''; if ( 1 != $approval_status_flag ) { ?> '; } else { $current_points = '0'; } } echo sprintf( _x( '%1$s / %2$s', 'placeholders: current points / maximum point for assignment', 'learndash' ), $current_points, $max_points ); } else { esc_html_x( 'Not Enabled', 'Points for assignment not enabled', 'learndash' ); } break; default: break; } } /** * Output values for Assigned Courses in admin columns * for lessons, quizzes, topics, assignments * * @since 2.1.0 * * @param string $column_name * @param int $id */ function manage_asigned_course_columns( $column_name, $id ) { global $typenow; switch ( $column_name ) { case 'shortcode': $valid_quiz = false; $quiz_pro_id = learndash_get_setting( $id, 'quiz_pro', true ); $quiz_pro_id = absint( $quiz_pro_id ); if ( ! empty( $quiz_pro_id ) ) { $quiz_mapper = new WpProQuiz_Model_QuizMapper(); $quiz_pro = $quiz_mapper->fetch( $quiz_pro_id ); if ( ( is_a( $quiz_pro, 'WpProQuiz_Model_Quiz' ) ) && ( $quiz_pro_id === $quiz_pro->getId() ) ) { $valid_quiz = true; echo '[ld_quiz quiz_id="' . $id . '"]'; echo '
[LDAdvQuiz ' . $quiz_pro_id . ']'; echo '
[LDAdvQuiz_toplist ' . $quiz_pro_id . ']'; } } if ( false === $valid_quiz ) { ?> ' . get_the_title( $course_id ) . ''; $row_actions['edit'] = '' . esc_html__( 'edit', 'learndash' ) . ''; $row_actions['filter_post'] = '' . esc_html__( 'filter', 'learndash' ) . ''; echo learndash_list_table_row_actions( $row_actions ); } else { if ( LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Courses_Builder', 'shared_steps' ) != 'yes' ) { if ( get_post_type( $id ) === 'sfwd-quiz' ) { echo '—'; } else { echo ''; } } else { echo '—'; } } break; case 'lesson': if ( LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Courses_Builder', 'shared_steps' ) == 'yes' ) { if ( in_array( $typenow, array( 'sfwd-assignment' ) ) ) { $course_id = get_post_meta( $id, 'course_id', true ); $lesson_id = get_post_meta( $id, 'lesson_id', true ); } elseif ( ( isset( $_GET['course_id'] ) ) && ( ! empty( $_GET['course_id'] ) ) ) { $course_id = intval( $_GET['course_id'] ); $lesson_id = learndash_course_get_single_parent_step( $course_id, $id ); } else { $lesson_id = get_post_meta( $id, 'lesson_id', true ); } } else { //$lesson_id = learndash_get_setting( $id, 'lesson' ); $lesson_id = get_post_meta( $id, 'lesson_id', true ); //$course_id = learndash_get_setting( $id, 'course' ); $course_id = get_post_meta( $id, 'course_id', true ); } if ( ! empty( $lesson_id ) ) { $row_actions = array(); $edit_url = get_edit_post_link( $lesson_id ); $filter_url = add_query_arg( 'lesson_id', $lesson_id ); //$course_id = get_post_meta( $id, 'course_id', true ); if ( ! empty( $course_id ) ) { // For the filter URL we always add the course if available. $filter_url = add_query_arg( 'course_id', $course_id, $filter_url ); if ( LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Courses_Builder', 'shared_steps' ) == 'yes' ) { $edit_url = add_query_arg( 'course_id', $course_id, $edit_url ); } else { $edit_url = remove_query_arg( 'course_id', $edit_url ); } } else { $filter_url = remove_query_arg( 'course_id', $filter_url ); $edit_url = remove_query_arg( 'course_id', $edit_url ); } echo '' . get_the_title( $lesson_id ) . ''; $row_actions['edit'] = '' . esc_html__( 'edit', 'learndash' ) . ''; $row_actions['filter_post'] = '' . esc_html__( 'filter', 'learndash' ) . ''; echo learndash_list_table_row_actions( $row_actions ); } else { if ( LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Courses_Builder', 'shared_steps' ) != 'yes' ) { if ( get_post_type( $id ) === 'sfwd-quiz' ) { echo '—'; } else { echo ''; } } else { echo '—'; } } break; default: break; } } function learndash_list_table_row_actions( $actions, $always_visible = false ) { $action_count = count( $actions ); $i = 0; if ( ! $action_count ) { return ''; } $out = '
'; foreach ( $actions as $action => $link ) { ++$i; ( $i == $action_count ) ? $sep = '' : $sep = ' | '; $out .= "$link$sep"; } $out .= '
'; $out .= ''; return $out; } /** * Output select dropdown before the filter button to filter post listing * by course * * @since 2.1.0 */ function restrict_listings_by_course( $post_type, $location = '' ) { global $pagenow, $sfwd_lms; $ld_post_types = array( //'sfwd-courses', //'sfwd-lessons', //'sfwd-topic', //'sfwd-quiz', 'sfwd-certificates', 'groups', 'sfwd-assignment', 'sfwd-transactions', 'sfwd-essays', ); if ( ! is_admin() ) { return; } if ( 'edit.php' !== $pagenow ) { return; } if ( ( isset( $_GET['post_status'] ) ) && ( 'trash' === $_GET['post_status'] ) ) { return; } if ( ( ! isset( $post_type ) ) || ( ! in_array( $post_type, $ld_post_types ) ) ) { return; } // First we display the object taxonomies if ( ! in_array( $post_type, array( 'sfwd-quiz' ) ) ) { $object_taxonomies = get_object_taxonomies( $post_type ); if ( ( ! empty( $object_taxonomies ) ) && ( is_array( $object_taxonomies ) ) ) { // We remove 'category' from the object taxonomies because by now WP has already output it. // Maybe at some point we can move the filter earlier $object_taxonomies = array_diff( $object_taxonomies, array( 'category' ) ); } $object_taxonomies = apply_filters( 'learndash-admin-taxonomy-filters-display', $object_taxonomies, $post_type ); if ( ( ! empty( $object_taxonomies ) ) && ( is_array( $object_taxonomies ) ) ) { foreach ( $object_taxonomies as $taxonomy_slug ) { if ( isset( $_GET[ $taxonomy_slug ] ) ) { $selected = esc_attr( $_GET[ $taxonomy_slug ] ); } else { $selected = false; } //if ( $taxonomy_slug == 'post_tag' ) // $taxonomy_slug_name = 'tag'; //else $taxonomy_slug_name = $taxonomy_slug; $dropdown_options = array( 'taxonomy' => $taxonomy_slug, 'name' => $taxonomy_slug_name, //'show_option_all' => get_taxonomy( $taxonomy_slug )->labels->all_items, 'show_option_none' => get_taxonomy( $taxonomy_slug )->labels->all_items, 'option_none_value' => '', 'hide_empty' => 0, 'hierarchical' => get_taxonomy( $taxonomy_slug )->hierarchical, 'show_count' => 0, 'orderby' => 'name', 'value_field' => 'slug', 'selected' => $selected, ); echo ''; wp_dropdown_categories( $dropdown_options ); } } } $cpt_filters_shown['sfwd-courses'] = array( 'sfwd-lessons', 'sfwd-topic', 'sfwd-assignment', 'sfwd-quiz', 'sfwd-essays', /* 'sfwd-certificates', */ 'groups', 'sfwd-transactions' ); $cpt_filters_shown['sfwd-lessons'] = array( 'sfwd-topic', 'sfwd-assignment', 'sfwd-quiz', 'sfwd-essays' ); $cpt_filters_shown['sfwd-topic'] = array(); $cpt_filters_shown['sfwd-quiz'] = array( 'sfwd-essays' /* 'sfwd-certificates' */ ); $cpt_filters_shown = apply_filters( 'learndash-admin-cpt-filters-display', $cpt_filters_shown ); $course_ids = array(); $lesson_ids = array(); $group_ids = array(); // Courses filter if ( in_array( $_GET['post_type'], $cpt_filters_shown['sfwd-courses'] ) ) { $query_options_course = array( 'post_type' => 'sfwd-courses', 'post_status' => 'any', 'posts_per_page' => -1, 'orderby' => 'title', 'order' => 'ASC', ); if ( learndash_is_group_leader_user( get_current_user_id() ) ) { $group_ids = learndash_get_administrators_group_ids( get_current_user_id() ); if ( ! empty( $group_ids ) && is_array( $group_ids ) ) { foreach ( $group_ids as $group_id ) { $group_course_ids = learndash_group_enrolled_courses( $group_id ); if ( ! empty( $group_course_ids ) && is_array( $group_course_ids ) ) { $course_ids = array_merge( $course_ids, $group_course_ids ); } } } if ( ! empty( $course_ids ) && count( $course_ids ) ) { $query_options_course['post__in'] = $course_ids; } } $lazy_load = apply_filters( 'learndash_element_lazy_load_admin', true ); if ( true == $lazy_load ) { $lazy_load = apply_filters( 'learndash_element_lazy_load_admin_' . $_GET['post_type'] . '_filters', true ); if ( true == $lazy_load ) { $query_options_course['paged'] = 1; $query_options_course['posts_per_page'] = apply_filters( 'learndash_element_lazy_load_per_page', LEARNDASH_LMS_DEFAULT_LAZY_LOAD_PER_PAGE, $_GET['post_type'] ); } } $query_options_course = apply_filters( 'learndash_course_post_options_filter', $query_options_course, $_GET['post_type'] ); $query_posts_course = new WP_Query( $query_options_course ); if ( ! empty( $query_posts_course->posts ) ) { if ( count( $query_posts_course->posts ) >= $query_posts_course->found_posts ) { // If the number of returned posts is equal or greater then found_posts then no need to run lazy load $lazy_load = false; } $post_type_nonce = wp_create_nonce( 'sfwd-courses' ); if ( true == $lazy_load ) { $lazy_load_data = array(); $lazy_load_data['query_vars'] = $query_options_course; $lazy_load_data['query_type'] = 'WP_Query'; $lazy_load_data['nonce'] = $post_type_nonce; if ( ( isset( $_GET['course_id'] ) ) && ( ! empty( $_GET['course_id'] ) ) ) { $lazy_load_data['value'] = intval( $_GET['course_id'] ); } else { $lazy_load_data['value'] = 0; } $lazy_load_data = ' learndash_lazy_load_data="' . htmlspecialchars( json_encode( $lazy_load_data ) ) . '" '; } else { $lazy_load_data = ''; } echo ''; $lazy_load_spinner = ''; echo $lazy_load_spinner; } } // Lessons filter if ( in_array( $_GET['post_type'], $cpt_filters_shown['sfwd-lessons'] ) ) { echo "'; } // Topicss filter if ( in_array( $_GET['post_type'], $cpt_filters_shown['sfwd-topic'] ) ) { $query_options_topic = array( 'post_type' => 'sfwd-topic', 'post_status' => 'any', 'posts_per_page' => -1, 'orderby' => 'title', 'order' => 'ASC', ); // If the course_id is selected we limit the lesson selector to only those related to course_id // @since 2.3 if ( ( isset( $_GET['lesson_id'] ) ) && ( ! empty( $_GET['lesson_id'] ) ) ) { $query_options_topic['meta_key'] = 'lesson_id'; $query_options_topic['meta_value'] = intval( $_GET['lesson_id'] ); $query_options_topic['meta_compare'] = '='; } else { if ( ! empty( $lesson_ids ) && count( $lesson_ids ) ) { if ( ! isset( $query_options_topic['meta_query'] ) ) { $query_options_topic['meta_query'] = array(); } $query_options_topic['meta_query'][] = array( 'key' => 'lesson_id', 'value' => $lesson_ids, 'compare' => 'IN', ); } } $lazy_load = apply_filters( 'learndash_element_lazy_load_admin', true ); if ( $lazy_load == true ) { $lazy_load = apply_filters( 'learndash_element_lazy_load_admin_' . $_GET['post_type'] . '_filters', true ); if ( $lazy_load == true ) { $query_options_topic['paged'] = 1; $query_options_topic['posts_per_page'] = apply_filters( 'learndash_element_lazy_load_per_page', LEARNDASH_LMS_DEFAULT_LAZY_LOAD_PER_PAGE, $_GET['post_type'] ); } } $query_options_topic = apply_filters( 'learndash_lesson_post_options_filter', $query_options_topic, $_GET['post_type'] ); $query_posts_topic = new WP_Query( $query_options_topic ); if ( ! empty( $query_posts_topic->posts ) ) { if ( count( $query_posts_topic->posts ) >= $query_posts_topic->found_posts ) { // If the number of returned posts is equal or greater then found_posts then no need to run lazy load $lazy_load = false; } $post_type_nonce = wp_create_nonce( 'sfwd-topic' ); if ( $lazy_load == true ) { $lazy_load_data = array(); $lazy_load_data['query_vars'] = $query_options_topic; $lazy_load_data['query_type'] = 'WP_Query'; $lazy_load_data['nonce'] = $post_type_nonce; if ( isset( $_GET['topic_id'] ) ) { $lazy_load_data['value'] = intval( $_GET['topic_id'] ); } else { $lazy_load_data['value'] = 0; } $lazy_load_data = ' learndash_lazy_load_data="' . htmlspecialchars( json_encode( $lazy_load_data ) ) . '" '; } else { $lazy_load_data = ''; } echo ''; } } // Quiz Filters if ( in_array( $_GET['post_type'], $cpt_filters_shown['sfwd-quiz'] ) ) { //$quiz = new WpProQuiz_Model_QuizMapper(); //$quizzes = $quiz->fetchAll(); //echo "'; $query_options_quiz = array( 'post_type' => 'sfwd-quiz', 'post_status' => 'any', 'posts_per_page' => -1, 'orderby' => 'title', 'order' => 'ASC', ); // If the course_id is selected we limit the lesson selector to only those related to course_id // @since 2.3 if ( ( isset( $_GET['course_id'] ) ) && ( ! empty( $_GET['course_id'] ) ) ) { $query_options_quiz['meta_key'] = 'course_id'; $query_options_quiz['meta_value'] = intval( $_GET['course_id'] ); } else { if ( ! empty( $course_ids ) && count( $course_ids ) ) { if ( ! isset( $query_options_quiz['meta_query'] ) ) { $query_options_quiz['meta_query'] = array(); } $query_options_quiz['meta_query'][] = array( 'key' => 'course_id', 'value' => $course_ids, 'compare' => 'IN', ); } } $query_options_quiz = apply_filters( 'learndash_lesson_post_options_filter', $query_options_quiz, $_GET['post_type'] ); $query_posts_quiz = new WP_Query( $query_options_quiz ); if ( ! empty( $query_posts_quiz->posts ) ) { if ( count( $query_posts_quiz->posts ) >= $query_posts_quiz->found_posts ) { // If the number of returned posts is equal or greater then found_posts then no need to run lazy load $lazy_load = false; } $post_type_nonce = wp_create_nonce( 'sfwd-quiz' ); if ( $lazy_load == true ) { $lazy_load_data = array(); $lazy_load_data['query_vars'] = $query_options_quiz; $lazy_load_data['query_type'] = 'WP_Query'; $lazy_load_data['nonce'] = $post_type_nonce; if ( isset( $_GET['quiz_id'] ) ) { $lazy_load_data['value'] = intval( $_GET['quiz_id'] ); } else { $lazy_load_data['value'] = 0; } $lazy_load_data = ' learndash_lazy_load_data="' . htmlspecialchars( json_encode( $lazy_load_data ) ) . '" '; } else { $lazy_load_data = ''; } echo ''; } else { echo "'; } } if ( $_GET['post_type'] == 'sfwd-assignment' ) { $selected_1 = ''; $selected_0 = ''; if ( isset( $_GET['approval_status'] ) ) { if ( $_GET['approval_status'] == 1 ) { $selected_1 = 'selected="selected"'; $selected_0 = ''; } if ( $_GET['approval_status'] == 0 ) { $selected_0 = 'selected="selected"'; $selected_1 = ''; } } elseif ( ( isset( $_GET['approval_status'] ) ) && ( $_GET['approval_status'] == 0 ) ) { $selected_0 = 'selected="selected"'; $selected_1 = ''; } elseif ( ! isset( $_GET['approval_status'] ) ) { $selected_0 = ''; $selected_1 = ''; } ?> query_vars; if ( ! is_admin() ) { return; } if ( $pagenow != 'edit.php' ) { return; } if ( ! $query->is_main_query() ) { return; } if ( empty( $typenow ) ) { return; } /* if ( ( isset( $_GET['course_id'] ) ) && ( !empty( $_GET['course_id'] ) ) && ( $typenow == 'sfwd-lessons' || $typenow == 'sfwd-topic' || $typenow == 'sfwd-quiz' || $typenow == 'sfwd-assignment' || $typenow == 'sfwd-essays' ) ) { $q_vars['meta_query'][] = array( 'key' => 'course_id', 'value' => $_GET['course_id'], ); } if ( ( isset($_GET['lesson_id'] ) ) && ( !empty( $_GET['lesson_id'] ) ) && ( $typenow == 'sfwd-topic' || $typenow == 'sfwd-assignment' || $typenow == 'sfwd-essays' ) ) { $q_vars['meta_query'][] = array( 'key' => 'lesson_id', 'value' => $_GET['lesson_id'], ); } if ( ( isset( $_GET['quiz_id'] ) ) && ( !empty( $_GET['quiz_id'] ) ) && ( $typenow == 'sfwd-essays' ) ) { $q_vars['meta_query'][] = array( 'key' => 'quiz_id', 'value' => intval( $_GET['quiz_id'] ), ); } // set custom post status anytime we are looking at essays with no particular post status if ( ( isset( $_GET['post_status'] ) ) && ( !isset( $_GET['post_status'] ) ) && ( $typenow == 'sfwd-essays' ) ) { $q_vars['post_status'] = array( 'graded', 'not_graded' ); } if ( ( isset( $_GET['approval_status'] ) ) && ( $typenow == 'sfwd-topic' || $typenow == 'sfwd-assignment' ) ) { if ( $_GET['approval_status'] == 1 ) { $q_vars['meta_query'][] = array( 'key' => 'approval_status', 'value' => 1, ); } else if ( $_GET['approval_status'] == 0 ) { $q_vars['meta_query'][] = array( 'key' => 'approval_status', 'compare' => 'NOT EXISTS', ); } } } */ if ( $typenow == 'sfwd-courses' ) { if ( ( isset( $_GET['post_tag'] ) ) && ( ! empty( $_GET['post_tag'] ) ) ) { $post_tag = esc_attr( $_GET['post_tag'] ); if ( $post_tag != '0' ) { $post_tag_term = get_term_by( 'slug', $post_tag, 'post_tag' ); if ( ( ! empty( $post_tag_term ) ) && ( $post_tag_term instanceof WP_Term ) ) { $q_vars['tag_id'] = $post_tag_term->term_id; } } } } elseif ( $typenow == 'sfwd-lessons' ) { if ( ( isset( $_GET['course_id'] ) ) && ( ! empty( $_GET['course_id'] ) ) ) { if ( LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Courses_Builder', 'shared_steps' ) == 'yes' ) { $course_steps_by_type = learndash_course_get_steps_by_type( intval( $_GET['course_id'] ), $typenow ); if ( ! empty( $course_steps_by_type ) ) { $q_vars['post__in'] = $course_steps_by_type; $q_vars['orderby'] = 'post__in'; } } else { if ( ! isset( $q_vars['meta_query'] ) ) { $q_vars['meta_query'] = array(); } $q_vars['meta_query'][] = array( 'key' => 'course_id', 'value' => intval( $_GET['course_id'] ), ); } } if ( ( isset( $_GET['post_tag'] ) ) && ( ! empty( $_GET['post_tag'] ) ) ) { $post_tag = esc_attr( $_GET['post_tag'] ); if ( $post_tag != '0' ) { $post_tag_term = get_term_by( 'slug', $post_tag, 'post_tag' ); if ( ( ! empty( $post_tag_term ) ) && ( $post_tag_term instanceof WP_Term ) ) { $q_vars['tag_id'] = $post_tag_term->term_id; } } } } elseif ( $typenow == 'sfwd-topic' ) { if ( ( isset( $_GET['post_tag'] ) ) && ( ! empty( $_GET['post_tag'] ) ) ) { $post_tag = esc_attr( $_GET['post_tag'] ); if ( $post_tag != '0' ) { $post_tag_term = get_term_by( 'slug', $post_tag, 'post_tag' ); if ( ( ! empty( $post_tag_term ) ) && ( $post_tag_term instanceof WP_Term ) ) { $q_vars['tag_id'] = $post_tag_term->term_id; } } } if ( ( isset( $_GET['course_id'] ) ) && ( ! empty( $_GET['course_id'] ) ) ) { if ( LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Courses_Builder', 'shared_steps' ) == 'yes' ) { $course_steps_by_type = learndash_course_get_steps_by_type( intval( $_GET['course_id'] ), $typenow ); if ( ! empty( $course_steps_by_type ) ) { $q_vars['post__in'] = $course_steps_by_type; $q_vars['orderby'] = 'post__in'; } } else { if ( ! isset( $q_vars['meta_query'] ) ) { $q_vars['meta_query'] = array(); } $q_vars['meta_query'][] = array( 'key' => 'course_id', 'value' => intval( $_GET['course_id'] ), ); } } if ( ( isset( $_GET['lesson_id'] ) ) && ( ! empty( $_GET['lesson_id'] ) ) ) { if ( LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Courses_Builder', 'shared_steps' ) == 'yes' ) { $lesson_topics = learndash_course_get_children_of_step( intval( $_GET['course_id'] ), intval( $_GET['lesson_id'] ), $typenow ); if ( ! empty( $lesson_topics ) ) { $HAS_LESSONS = true; $q_vars['post__in'] = $lesson_topics; } } else { if ( ! isset( $q_vars['meta_query'] ) ) { $q_vars['meta_query'] = array(); } $q_vars['meta_query'][] = array( 'key' => 'lesson_id', 'value' => intval( $_GET['lesson_id'] ), ); } } $q_vars['relation'] = 'AND'; } elseif ( $typenow == 'sfwd-quiz' ) { if ( LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Courses_Builder', 'shared_steps' ) == 'yes' ) { if ( ( isset( $_GET['course_id'] ) ) && ( ! empty( $_GET['course_id'] ) ) ) { $quiz_ids = array(); if ( ( isset( $_GET['lesson_id'] ) ) && ( ! empty( $_GET['lesson_id'] ) ) ) { $quiz_ids = learndash_course_get_children_of_step( intval( $_GET['course_id'] ), intval( $_GET['lesson_id'] ), 'sfwd-quiz' ); } else { $quiz_ids = learndash_course_get_steps_by_type( intval( $_GET['course_id'] ), 'sfwd-quiz' ); } if ( ! empty( $quiz_ids ) ) { $q_vars['post__in'] = $quiz_ids; } else { $q_vars['post__in'] = array( 0 ); } } } else { if ( ( isset( $_GET['course_id'] ) ) && ( ! empty( $_GET['course_id'] ) ) ) { if ( ! isset( $q_vars['meta_query'] ) ) { $q_vars['meta_query'] = array(); } $q_vars['meta_query'][] = array( 'key' => 'course_id', 'value' => intval( $_GET['course_id'] ), ); } if ( ( isset( $_GET['lesson_id'] ) ) && ( ! empty( $_GET['lesson_id'] ) ) ) { if ( ! isset( $q_vars['meta_query'] ) ) { $q_vars['meta_query'] = array(); } $q_vars['meta_query'][] = array( 'key' => 'lesson_id', 'value' => intval( $_GET['lesson_id'] ), ); } } } elseif ( $typenow == 'sfwd-assignment' ) { if ( ( isset( $_GET['approval_status'] ) ) && ( $_GET['approval_status'] == 1 ) ) { if ( ! isset( $q_vars['meta_query'] ) ) { $q_vars['meta_query'] = array(); } $q_vars['meta_query'][] = array( 'key' => 'approval_status', 'value' => 1, ); } elseif ( ( isset( $_GET['approval_status'] ) ) && ( $_GET['approval_status'] == 0 ) ) { if ( ! isset( $q_vars['meta_query'] ) ) { $q_vars['meta_query'] = array(); } $q_vars['meta_query'][] = array( 'key' => 'approval_status', 'compare' => 'NOT EXISTS', ); } elseif ( ! isset( $_GET['approval_status'] ) ) { /// } if ( ( isset( $_GET['course_id'] ) ) && ( ! empty( $_GET['course_id'] ) ) ) { if ( ! isset( $q_vars['meta_query'] ) ) { $q_vars['meta_query'] = array(); } $q_vars['meta_query'][] = array( 'key' => 'course_id', 'value' => intval( $_GET['course_id'] ), ); } if ( ( isset( $_GET['lesson_id'] ) ) && ( ! empty( $_GET['lesson_id'] ) ) ) { if ( ! isset( $q_vars['meta_query'] ) ) { $q_vars['meta_query'] = array(); } $q_vars['meta_query'][] = array( 'key' => 'lesson_id', 'value' => intval( $_GET['lesson_id'] ), ); } } elseif ( $typenow == 'groups' ) { if ( ( isset( $_GET['course_id'] ) ) && ( ! empty( $_GET['course_id'] ) ) ) { $groups = learndash_get_course_groups( intval( $_GET['course_id'] ), true ); if ( ! empty( $groups ) ) { $q_vars['post__in'] = $groups; } else { $q_vars['post__in'] = array( -1 ); } } } elseif ( $typenow == 'sfwd-essays' ) { if ( ( isset( $_GET['course_id'] ) ) && ( ! empty( $_GET['course_id'] ) ) ) { if ( ! isset( $q_vars['meta_query'] ) ) { $q_vars['meta_query'] = array(); } $q_vars['meta_query'][] = array( 'key' => 'course_id', 'value' => intval( $_GET['course_id'] ), ); } if ( ( isset( $_GET['lesson_id'] ) ) && ( ! empty( $_GET['lesson_id'] ) ) ) { if ( ! isset( $q_vars['meta_query'] ) ) { $q_vars['meta_query'] = array(); } $q_vars['meta_query'][] = array( 'key' => 'lesson_id', 'value' => intval( $_GET['lesson_id'] ), ); } if ( ( isset( $_GET['quiz_id'] ) ) && ( ! empty( $_GET['quiz_id'] ) ) ) { if ( ! isset( $q_vars['meta_query'] ) ) { $q_vars['meta_query'] = array(); } $q_vars['meta_query'][] = array( 'key' => 'quiz_id', 'value' => intval( $_GET['quiz_id'] ), ); } } elseif ( $typenow == 'sfwd-transactions' ) { if ( ( isset( $_GET['course_id'] ) ) && ( ! empty( $_GET['course_id'] ) ) ) { if ( ! isset( $q_vars['meta_query'] ) ) { $q_vars['meta_query'] = array(); } $q_vars['meta_query'][] = array( 'key' => 'course_id', 'value' => intval( $_GET['course_id'] ), ); } } // if ( isset( $q_vars['meta_query'] ) ) { // error_log('meta_query
'. print_r( $q_vars['meta_query'], true ) .'
'); // } else { // error_log('meta_query not set'); // } } /** * Generate lesson id's and course id's once for all existing lessons, quizzes and topics * * @since 2.1.0 */ function learndash_generate_patent_course_and_lesson_id_onetime() { if ( isset( $_GET['learndash_generate_patent_course_and_lesson_ids_onetime'] ) || get_option( 'learndash_generate_patent_course_and_lesson_ids_onetime', 'yes' ) == 'yes' ) { $quizzes = get_posts( 'post_type=sfwd-quiz&posts_per_page=-1' ); if ( ! empty( $quizzes ) ) { foreach ( $quizzes as $quiz ) { update_post_meta( $quiz->ID, 'course_id', learndash_get_course_id( $quiz->ID ) ); $meta = get_post_meta( $quiz->ID, '_sfwd-quiz', true ); if ( ! empty( $meta['sfwd-quiz_lesson'] ) ) { update_post_meta( $quiz->ID, 'lesson_id', $meta['sfwd-quiz_lesson'] ); } }//exit; } $topics = get_posts( 'post_type=sfwd-topic&posts_per_page=-1' ); if ( ! empty( $topics ) ) { foreach ( $topics as $topic ) { update_post_meta( $topic->ID, 'course_id', learndash_get_course_id( $topic->ID ) ); $meta = get_post_meta( $topic->ID, '_sfwd-topic', true ); if ( ! empty( $meta['sfwd-topic_lesson'] ) ) { update_post_meta( $topic->ID, 'lesson_id', $meta['sfwd-topic_lesson'] ); } } } $lessons = get_posts( 'post_type=sfwd-lessons&posts_per_page=-1' ); if ( ! empty( $lessons ) ) { foreach ( $lessons as $lesson ) { update_post_meta( $lesson->ID, 'course_id', learndash_get_course_id( $lesson->ID ) ); } } update_option( 'learndash_generate_patent_course_and_lesson_ids_onetime', 'no' ); } } add_action( 'admin_init', 'learndash_generate_patent_course_and_lesson_id_onetime' ); /** * On post save, update post id's that maintain relationships between * courses, lessons, topics, and quizzes * * @since 2.1.0 * * @param int $post_id */ function learndash_patent_course_and_lesson_id_save( $post_id ) { if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { return; } if ( empty( $post_id ) || empty( $_POST['post_type'] ) ) { return ''; } // Check permissions if ( 'page' == $_POST['post_type'] ) { if ( ! current_user_can( 'edit_page', $post_id ) ) { return; } } else { if ( ! current_user_can( 'edit_post', $post_id ) ) { return; } } if ( 'sfwd-lessons' == $_POST['post_type'] || 'sfwd-quiz' == $_POST['post_type'] || 'sfwd-topic' == $_POST['post_type'] ) { if ( isset( $_POST[ $_POST['post_type'] . '_course' ] ) ) { update_post_meta( $post_id, 'course_id', (int) $_POST[ $_POST['post_type'] . '_course' ] ); } } if ( 'sfwd-topic' == $_POST['post_type'] || 'sfwd-quiz' == $_POST['post_type'] ) { if ( isset( $_POST[ $_POST['post_type'] . '_lesson' ] ) ) { update_post_meta( $post_id, 'lesson_id', (int) $_POST[ $_POST['post_type'] . '_lesson' ] ); } } if ( 'sfwd-lessons' == $_POST['post_type'] || 'sfwd-topic' == $_POST['post_type'] ) { global $wpdb; if ( isset( $_POST[ $_POST['post_type'] . '_course' ] ) ) { $course_id = (int) get_post_meta( $post_id, 'course_id', true ); } if ( ! empty( $course_id ) ) { $posts_with_lesson = $wpdb->get_col( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key = 'lesson_id' AND meta_value = '%d'", $post_id ) ); if ( ! empty( $posts_with_lesson ) && ! empty( $posts_with_lesson[0] ) ) { foreach ( $posts_with_lesson as $post_with_lesson ) { $post_course_id = learndash_get_setting( $post_with_lesson, 'course' ); if ( $post_course_id != $course_id ) { learndash_update_setting( $post_with_lesson, 'course', (int) $course_id ); $quizzes_under_lesson_topic = $wpdb->get_col( $wpdb->prepare( 'SELECT post_id FROM ' . $wpdb->postmeta . ' WHERE meta_key = %s AND meta_value = %d', 'lesson_id', $posts_with_lesson ) ); if ( ! empty( $quizzes_under_lesson_topic ) && ! empty( $quizzes_under_lesson_topic[0] ) ) { foreach ( $quizzes_under_lesson_topic as $quiz_post_id ) { $quiz_course_id = learndash_get_setting( $quiz_post_id, 'course' ); if ( $course_id != $quiz_course_id ) { learndash_update_setting( $quiz_course_id, 'course', (int) $course_id ); } } } } } } } } } function learndash_patent_course_and_lesson_id_save_NEW( $post_id ) { if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { return; } if ( empty( $post_id ) || empty( $_POST['post_type'] ) ) { return ''; } // Check permissions // if ( 'page' == $_POST['post_type'] ) { // if ( ! current_user_can( 'edit_page', $post_id ) ) { // return; // } // } else { // if ( ! current_user_can( 'edit_post', $post_id ) ) { // return; // } // } if ( in_array( $_POST['post_type'], array( 'sfwd-lessons', 'sfwd-topic', 'sfwd-quiz' ) ) !== false ) { if ( current_user_can( 'edit_course', $post_id ) ) { // Update the associated course ID $course_id = 0; if ( isset( $_POST[ $_POST['post_type'] . '_course' ] ) ) { $course_id = intval( $_POST[ $_POST['post_type'] . '_course' ] ); } update_post_meta( $post_id, 'course_id', $course_id ); // Update the associated lesson ID if ( in_array( $_POST['post_type'], array( 'sfwd-topic', 'sfwd-quiz' ) ) !== false ) { $lesson_id = 0; if ( isset( $_POST[ $_POST['post_type'] . '_lesson' ] ) ) { $lesson_id = intval( $_POST[ $_POST['post_type'] . '_lesson' ] ); } update_post_meta( $post_id, 'lesson_id', $lesson_id ); } // If here the course_id was changes on a lesson or topic. So we now need to update any sub items (referenced by the post meta lesson_id) if ( in_array( $_POST['post_type'], array( 'sfwd-lessons', 'sfwd-topic' ) ) !== false ) { global $wpdb; if ( isset( $_POST[ $_POST['post_type'] . '_course' ] ) ) { $course_id = get_post_meta( $post_id, 'course_id', true ); } if ( ! empty( $course_id ) ) { $posts_with_lesson = $wpdb->get_col( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key = 'lesson_id' AND meta_value = '%d'", $post_id ) ); if ( ! empty( $posts_with_lesson ) && ! empty( $posts_with_lesson[0] ) ) { foreach ( $posts_with_lesson as $post_with_lesson ) { $post_course_id = learndash_get_setting( $post_with_lesson, 'course' ); if ( $post_course_id != $course_id ) { learndash_update_setting( $post_with_lesson, 'course', $course_id ); $quizzes_under_lesson_topic = $wpdb->get_col( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key = 'lesson_id' AND meta_value = '%d'", $posts_with_lesson ) ); if ( ! empty( $quizzes_under_lesson_topic ) && ! empty( $quizzes_under_lesson_topic[0] ) ) { foreach ( $quizzes_under_lesson_topic as $quiz_post_id ) { $quiz_course_id = learndash_get_setting( $quiz_post_id, 'course' ); if ( $course_id != $quiz_course_id ) { learndash_update_setting( $quiz_course_id, 'course', $course_id ); } } } } } } } } } } } add_action( 'save_post', 'learndash_patent_course_and_lesson_id_save' ); function learndash_element_lazy_loader() { $reply_data = array(); if ( ( current_user_can( 'read' ) ) && ( isset( $_POST['query_data'] ) ) && ( ! empty( $_POST['query_data'] ) ) ) { if ( ( isset( $_POST['query_data']['query_vars'] ) ) && ( ! empty( $_POST['query_data']['query_vars'] ) ) ) { $reply_data['query_data'] = $_POST['query_data']; if ( isset( $_POST['query_data']['query_type'] ) ) { switch ( $_POST['query_data']['query_type'] ) { case 'WP_Query': $query = new WP_Query( $_POST['query_data']['query_vars'] ); if ( $query instanceof WP_Query ) { if ( ! empty( $query->posts ) ) { $reply_data['html_options'] = ''; foreach ( $query->posts as $p ) { if ( intval( $p->ID ) == intval( $_POST['query_data']['value'] ) ) { $selected = ' selected="selected" '; } else { $selected = ''; } $reply_data['html_options'] .= ''; } } } break; case 'WP_User_Query': $query = new WP_User_Query( $_POST['query_data']['query_vars'] ); break; default: break; } } } } echo json_encode( $reply_data ); wp_die(); // this is required to terminate immediately and return a proper response } add_action( 'wp_ajax_learndash_element_lazy_loader', 'learndash_element_lazy_loader' ); add_filter( 'views_edit-sfwd-essays', 'learndash_edit_list_table_views', 10, 1 ); add_filter( 'views_edit-sfwd-assignment', 'learndash_edit_list_table_views', 10, 1 ); function learndash_edit_list_table_views( $views = array() ) { if ( ! learndash_is_admin_user() ) { $views = array(); } return $views; } add_filter( 'plugin_row_meta', 'learndash_plugin_row_meta', 10, 4 ); function learndash_plugin_row_meta( $plugin_meta, $plugin_file, $plugin_data, $status ) { if ( $plugin_file == LEARNDASH_LMS_PLUGIN_KEY ) { if ( ! isset( $plugin_meta['changelog'] ) ) { $plugin_meta['changelog'] = '' . esc_html__( 'Changelog', 'learndash' ) . ''; } } return $plugin_meta; } // Override the post_tag edit-tags.php 'Count' column to show only the related count for the LD post_type function learndash_manage_edit_post_tag_columns( $columns = array() ) { if ( ( isset( $_GET['post_type'] ) ) && ( ! empty( $_GET['post_type'] ) ) ) { if ( in_array( $_GET['post_type'], array( 'sfwd-courses', 'sfwd-lessons', 'sfwd-topic' ) ) ) { if ( isset( $columns['posts'] ) ) { unset( $columns['posts'] ); } $columns['ld_posts'] = esc_html__( 'Count', 'learndash' ); } } return $columns; } add_filter( 'manage_edit-post_tag_columns', 'learndash_manage_edit_post_tag_columns' ); //function learndash_manage_edit_category_columns( $columns = array() ) { // //error_log('columns
'. print_r($columns, true) .'
'); // if ( ( isset( $_GET['post_type'] ) ) && ( !empty( $_GET['post_type'] ) ) ) { // if ( isset( $columns['posts'] ) ) unset( $columns['posts'] ); // // $columns['ld_posts'] = esc_html__( 'Count', 'learndash' ); // } // // return $columns; //} add_filter( 'manage_edit-category_columns', 'learndash_manage_edit_post_tag_columns' ); function learndash_manage_post_tag_custom_column( $column_content = '', $column_name, $term_id ) { if ( $column_name == 'ld_posts' ) { if ( ( isset( $_GET['post_type'] ) ) && ( ! empty( $_GET['post_type'] ) ) ) { if ( in_array( $_GET['post_type'], array( 'sfwd-courses', 'sfwd-lessons', 'sfwd-topic' ) ) ) { $query_args = array( 'post_type' => esc_attr( $_GET['post_type'] ), 'post_status' => 'publish', 'tag_id' => $term_id, 'fields' => 'ids', 'nopaging' => true, ); $query_results = new WP_Query( $query_args ); if ( ! is_wp_error( $query_results ) ) { $count = count( $query_results->posts ); if ( $count > 0 ) { $term = get_term_by( 'id', $term_id, 'category' ); $column_content = " esc_attr( $_GET['post_type'] ), 'taxonomy' => 'post_tag', 'post_tag' => $term->slug, ), 'edit.php' ) ) . "'>" . count( $query_results->posts ) . ''; } else { $column_content = 0; } } } } } return $column_content; } add_filter( 'manage_post_tag_custom_column', 'learndash_manage_post_tag_custom_column', 10, 3 ); // Override the category edit-tags.php 'Count' column to show only the related count for the LD post_type function learndash_manage_category_custom_column( $column_content = '', $column_name, $term_id ) { if ( $column_name == 'ld_posts' ) { if ( ( isset( $_GET['post_type'] ) ) && ( ! empty( $_GET['post_type'] ) ) ) { if ( in_array( $_GET['post_type'], array( 'sfwd-courses', 'sfwd-lessons', 'sfwd-topic' ) ) ) { $query_args = array( 'post_type' => esc_attr( $_GET['post_type'] ), 'post_status' => 'publish', 'cat' => $term_id, 'fields' => 'ids', 'nopaging' => true, ); $query_results = new WP_Query( $query_args ); if ( ! is_wp_error( $query_results ) ) { $count = count( $query_results->posts ); if ( $count > 0 ) { //$term = get_term_by('id', $term_id, 'category'); $column_content = " esc_attr( $_GET['post_type'] ), 'taxonomy' => 'category', 'cat' => $term_id, ), 'edit.php' ) ) . "'>" . count( $query_results->posts ) . ''; } else { $column_content = 0; } } } } } return $column_content; } add_filter( 'manage_category_custom_column', 'learndash_manage_category_custom_column', 10, 3 ); function learndash_delete_all_data() { global $wpdb, $learndash_post_types, $learndash_taxonomies; /** * Under Multisite we don't even want to remove user data. This is because users and usermeta * is shared. Removing the LD user data could result in lost information for other sites. */ if ( ! is_multisite() ) { // USER META SETTINGS ////////////////////////////// $wpdb->query( 'DELETE FROM ' . $wpdb->usermeta . " WHERE meta_key='_sfwd-course_progress'" ); $wpdb->query( 'DELETE FROM ' . $wpdb->usermeta . " WHERE meta_key='_sfwd-quizzes'" ); $wpdb->query( 'DELETE FROM ' . $wpdb->usermeta . " WHERE meta_key LIKE 'completed_%'" ); $wpdb->query( 'DELETE FROM ' . $wpdb->usermeta . " WHERE meta_key LIKE 'course_%_access_from'" ); $wpdb->query( 'DELETE FROM ' . $wpdb->usermeta . " WHERE meta_key LIKE 'course_completed_%'" ); $wpdb->query( 'DELETE FROM ' . $wpdb->usermeta . " WHERE meta_key LIKE 'learndash_course_expired_%'" ); $wpdb->query( 'DELETE FROM ' . $wpdb->usermeta . " WHERE meta_key LIKE 'learndash_group_users_%'" ); $wpdb->query( 'DELETE FROM ' . $wpdb->usermeta . " WHERE meta_key LIKE 'learndash_group_leaders_%'" ); $wpdb->query( 'DELETE FROM ' . $wpdb->usermeta . " WHERE meta_key = 'ld-upgraded-user-meta-courses'" ); $wpdb->query( 'DELETE FROM ' . $wpdb->usermeta . " WHERE meta_key = 'ld-upgraded-user-meta-quizzes'" ); $wpdb->query( 'DELETE FROM ' . $wpdb->usermeta . " WHERE meta_key = 'course_points'" ); } // CUSTOM OPTIONS ////////////////////////////// $wpdb->query( 'DELETE FROM ' . $wpdb->options . " WHERE option_name LIKE 'learndash_%'" ); $wpdb->query( 'DELETE FROM ' . $wpdb->options . " WHERE option_name LIKE 'wpProQuiz_%'" ); // CUSTOMER POST TYPES ////////////////////////////// $ld_post_types = ''; foreach ( $learndash_post_types as $post_type ) { if ( ! empty( $ld_post_types ) ) { $ld_post_types .= ','; } $ld_post_types .= "'" . $post_type . "'"; } $post_ids = $wpdb->get_col( 'SELECT ID FROM ' . $wpdb->posts . ' WHERE post_type IN (' . $ld_post_types . ')' ); if ( ! empty( $post_ids ) ) { $offset = 0; while ( true ) { $post_ids_part = array_slice( $post_ids, $offset, 1000 ); if ( empty( $post_ids_part ) ) { break; } else { $wpdb->query( 'DELETE FROM ' . $wpdb->postmeta . ' WHERE post_id IN (' . implode( ',', $post_ids ) . ')' ); $wpdb->query( 'DELETE FROM ' . $wpdb->posts . ' WHERE post_parent IN (' . implode( ',', $post_ids ) . ')' ); $wpdb->query( 'DELETE FROM ' . $wpdb->posts . ' WHERE ID IN (' . implode( ',', $post_ids ) . ')' ); $offset += 1000; } } } // CUSTOM TAXONOMIES & TERMS ////////////////////////////// foreach ( $learndash_taxonomies as $taxonomy ) { // Prepare & excecute SQL $terms = $wpdb->get_results( $wpdb->prepare( "SELECT t.*, tt.* FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy IN ('%s') ORDER BY t.name ASC", $taxonomy ) ); // Delete Terms if ( $terms ) { foreach ( $terms as $term ) { $wpdb->delete( $wpdb->term_taxonomy, array( 'term_taxonomy_id' => $term->term_taxonomy_id ) ); $wpdb->delete( $wpdb->terms, array( 'term_id' => $term->term_id ) ); } } // Delete Taxonomy $wpdb->delete( $wpdb->term_taxonomy, array( 'taxonomy' => $taxonomy ), array( '%s' ) ); } // CUSTOM DB TABLES ////////////////////////////// $learndash_db_tables = LDLMS_DB::get_tables(); if ( ! empty( $learndash_db_tables ) ) { foreach ( $learndash_db_tables as $table_name ) { //$table_name = $wpdb->prefix . $table_name; if ( $wpdb->get_var( "SHOW TABLES LIKE '$table_name'" ) == $table_name ) { $wpdb->query( 'DROP TABLE ' . $table_name ); } } } // USER ROLES AND CAPABILITIES ////////////////////////////// remove_role( 'group_leader' ); // Remove any user/role capabilities we added $roles = get_editable_roles(); if ( ! empty( $roles ) ) { foreach ( $roles as $role_name => $role_info ) { $role = get_role( $role_name ); if ( ( $role ) && ( $role instanceof WP_Role ) ) { $role->remove_cap( 'read_assignment' ); $role->remove_cap( 'edit_assignment' ); $role->remove_cap( 'edit_assignments' ); $role->remove_cap( 'edit_others_assignments' ); $role->remove_cap( 'publish_assignments' ); $role->remove_cap( 'read_assignment' ); $role->remove_cap( 'read_private_assignments' ); $role->remove_cap( 'delete_assignment' ); $role->remove_cap( 'edit_published_assignments' ); $role->remove_cap( 'delete_others_assignments' ); $role->remove_cap( 'delete_published_assignments' ); $role->remove_cap( 'group_leader' ); $role->remove_cap( 'enroll_users' ); $role->remove_cap( 'edit_essays' ); $role->remove_cap( 'edit_others_essays' ); $role->remove_cap( 'publish_essays' ); $role->remove_cap( 'read_essays' ); $role->remove_cap( 'read_private_essays' ); $role->remove_cap( 'delete_essays' ); $role->remove_cap( 'edit_published_essays' ); $role->remove_cap( 'delete_others_essays' ); $role->remove_cap( 'delete_published_essays' ); $role->remove_cap( 'wpProQuiz_show' ); $role->remove_cap( 'wpProQuiz_add_quiz' ); $role->remove_cap( 'wpProQuiz_edit_quiz' ); $role->remove_cap( 'wpProQuiz_delete_quiz' ); $role->remove_cap( 'wpProQuiz_show_statistics' ); $role->remove_cap( 'wpProQuiz_reset_statistics' ); $role->remove_cap( 'wpProQuiz_import' ); $role->remove_cap( 'wpProQuiz_export' ); $role->remove_cap( 'wpProQuiz_change_settings' ); $role->remove_cap( 'wpProQuiz_toplist_edit' ); $role->remove_cap( 'wpProQuiz_toplist_edit' ); } } } // ASSIGNMENT & ESSAY UPLOADS ////////////////////////////// $url_link_arr = wp_upload_dir(); $assignment_dir = $url_link_arr['basedir'] . '/assignments'; learndash_recursive_rmdir( $assignment_dir ); $essays_dir = $url_link_arr['basedir'] . '/essays'; learndash_recursive_rmdir( $essays_dir ); $ld_template_dir = $url_link_arr['basedir'] . '/template'; learndash_recursive_rmdir( $ld_template_dir ); } function learndash_user_list_columns( $columns = array() ) { if ( ! isset( $columns['courses'] ) ) { $columns['courses'] = LearnDash_Custom_Label::get_label( 'Courses' ); } if ( ! isset( $columns['groups'] ) ) { $columns['groups'] = esc_html__( 'Groups', 'learndash' ); } return $columns; } add_filter( 'manage_users_columns', 'learndash_user_list_columns' ); function learndash_user_list_column_content( $column_content = '', $column_name = '', $user_id = 0 ) { switch ( $column_name ) { case 'courses': $user_courses = learndash_user_get_enrolled_courses( $user_id ); if ( empty( $user_courses ) ) { $user_courses = array(); } if ( ! empty( $user_courses ) ) { $column_content .= sprintf( __( 'Total %s', 'learndash' ), count( $user_courses ) ); $course_names = ''; if ( count( $user_courses ) > 5 ) { $user_courses = array_slice( $user_courses, 0, 5 ); } foreach ( $user_courses as $course_id ) { $course = get_post( $course_id ); if ( ! empty( $course_names ) ) { $course_names .= ', '; } $course_names .= '' . get_the_title( $course_id ) . ''; } if ( ! empty( $course_names ) ) { $column_content .= '
' . $course_names; } } break; case 'groups': $user_groups = learndash_get_users_group_ids( $user_id, true ); if ( empty( $user_groups ) ) { $user_groups = array(); } if ( ! empty( $user_groups ) ) { $column_content .= sprintf( __( 'Total %s', 'learndash' ), count( $user_groups ) ); $groups_names = ''; if ( count( $user_groups ) > 5 ) { $user_groups = array_slice( $user_groups, 0, 5 ); } foreach ( $user_groups as $group_id ) { $group = get_post( $group_id ); if ( ! empty( $groups_names ) ) { $groups_names .= ', '; } $groups_names .= '' . get_the_title( $group_id ) . ''; } if ( ! empty( $groups_names ) ) { $column_content .= '
' . $groups_names; } } break; default: } return $column_content; } add_filter( 'manage_users_custom_column', 'learndash_user_list_column_content', 10, 3 ); function learndash_add_user_nav_filter( $which = '' ) { $filter_output = ''; if ( $which === 'top' ) { $SHOW_USER_COURSES_FILTER = true; $query_options_course = array( 'post_type' => 'sfwd-courses', 'post_status' => 'any', 'posts_per_page' => -1, 'orderby' => 'title', 'order' => 'ASC', ); if ( learndash_is_group_leader_user( get_current_user_id() ) ) { $group_ids = learndash_get_administrators_group_ids( get_current_user_id() ); if ( ! empty( $group_ids ) && is_array( $group_ids ) ) { $course_ids = array(); foreach ( $group_ids as $group_id ) { $group_course_ids = learndash_group_enrolled_courses( $group_id ); if ( ! empty( $group_course_ids ) && is_array( $group_course_ids ) ) { $course_ids = array_merge( $course_ids, $group_course_ids ); } } if ( ! empty( $course_ids ) && count( $course_ids ) ) { $query_options_course['post__in'] = $course_ids; } else { $SHOW_USER_COURSES_FILTER = false; } } else { $SHOW_USER_COURSES_FILTER = false; } } $lazy_load = apply_filters( 'learndash_element_lazy_load_admin', true ); if ( $lazy_load == true ) { $lazy_load = apply_filters( 'learndash_element_lazy_load_admin_users_filters', true ); if ( $lazy_load == true ) { $query_options_course['paged'] = 1; $query_options_course['posts_per_page'] = apply_filters( 'learndash_element_lazy_load_per_page', LEARNDASH_LMS_DEFAULT_LAZY_LOAD_PER_PAGE, 'sfwd-courses' ); } } $query_options_course = apply_filters( 'learndash_user_courses_options_filter', $query_options_course, 'sfwd-courses' ); $query_posts_course = new WP_Query( $query_options_course ); if ( ! empty( $query_posts_course->posts ) ) { if ( count( $query_posts_course->posts ) >= $query_posts_course->found_posts ) { // If the number of returned posts is equal or greater then found_posts then no need to run lazy load $lazy_load = false; } $post_type_nonce = wp_create_nonce( 'sfwd-courses' ); if ( $lazy_load == true ) { $lazy_load_data = array(); $lazy_load_data['query_vars'] = $query_options_course; $lazy_load_data['query_type'] = 'WP_Query'; $lazy_load_data['nonce'] = $post_type_nonce; if ( ( isset( $_GET['course_id'] ) ) && ( ! empty( $_GET['course_id'] ) ) ) { $lazy_load_data['value'] = intval( $_GET['course_id'] ); } else { $lazy_load_data['value'] = 0; } $lazy_load_data = ' learndash_lazy_load_data="' . htmlspecialchars( json_encode( $lazy_load_data ) ) . '" '; } else { $lazy_load_data = ''; } $filter_output .= ''; $lazy_load_spinner = ''; $filter_output .= $lazy_load_spinner; } $SHOW_USER_GROUPS_FILTER = true; $query_options_group = array( 'post_type' => 'groups', 'post_status' => 'any', 'posts_per_page' => -1, 'orderby' => 'title', 'order' => 'ASC', ); if ( learndash_is_group_leader_user( get_current_user_id() ) ) { $group_ids = learndash_get_administrators_group_ids( get_current_user_id() ); if ( ! empty( $group_ids ) && count( $group_ids ) ) { $query_options_group['post__in'] = $group_ids; } else { $SHOW_USER_GROUPS_FILTER = false; } } if ( $SHOW_USER_GROUPS_FILTER === true ) { $lazy_load = apply_filters( 'learndash_element_lazy_load_admin', true ); if ( $lazy_load == true ) { $lazy_load = apply_filters( 'learndash_element_lazy_load_admin_users_filters', true ); if ( $lazy_load == true ) { $query_options_group['paged'] = 1; $query_options_group['posts_per_page'] = apply_filters( 'learndash_element_lazy_load_per_page', LEARNDASH_LMS_DEFAULT_LAZY_LOAD_PER_PAGE, 'groups' ); } } $query_options_group = apply_filters( 'learndash_user_groups_options_filter', $query_options_group, 'groups' ); $query_user_groups = new WP_Query( $query_options_group ); if ( ! empty( $query_user_groups->posts ) ) { if ( count( $query_user_groups->posts ) >= $query_user_groups->found_posts ) { // If the number of returned posts is equal or greater then found_posts then no need to run lazy load $lazy_load = false; } $post_type_nonce = wp_create_nonce( 'sfwd-courses' ); if ( $lazy_load == true ) { $lazy_load_data = array(); $lazy_load_data['query_vars'] = $query_options_group; $lazy_load_data['query_type'] = 'WP_Query'; $lazy_load_data['nonce'] = $post_type_nonce; if ( ( isset( $_GET['group_id'] ) ) && ( ! empty( $_GET['group_id'] ) ) ) { $lazy_load_data['value'] = intval( $_GET['group_id'] ); } else { $lazy_load_data['value'] = 0; } $lazy_load_data = ' learndash_lazy_load_data="' . htmlspecialchars( json_encode( $lazy_load_data ) ) . '" '; } else { $lazy_load_data = ''; } $filter_output .= ''; $lazy_load_spinner = ''; $filter_output .= $lazy_load_spinner; } } if ( ( $SHOW_USER_GROUPS_FILTER === true ) || ( $SHOW_USER_COURSES_FILTER === true ) ) { $button_id = 'bottom' === $which ? 'ld_submit' : 'ld_submit_bottom'; $filter_output .= get_submit_button( esc_html__( 'Filter', 'learndash' ), 'learndash', $button_id, false ); } if ( ! empty( $filter_output ) ) { $filter_output = '
' . $filter_output . ''; echo $filter_output; } } } //add_action( 'manage_users_extra_tablenav', 'learndash_add_user_nav_filter' ); add_action( 'restrict_manage_users', 'learndash_add_user_nav_filter', 99 ); function learndash_filter_users_listing( $query ) { global $pagenow; remove_filter( 'pre_get_users', 'learndash_filter_users_listing' ); if ( is_admin() && 'users.php' == $pagenow ) { if ( isset( $_GET['group_id'] ) ) { $filter_group_id = intval( $_GET['group_id'] ); if ( ! empty( $filter_group_id ) ) { if ( learndash_is_group_leader_user( get_current_user_id() ) ) { $group_ids = learndash_get_administrators_group_ids( get_current_user_id() ); // If the Group Leader doesn't have groups or not a managed group them clear our selected group_id if ( ( empty( $group_ids ) ) || ( in_array( $filter_group_id, $group_ids ) === false ) ) { $filter_group_id = 0; } } if ( ! empty( $filter_group_id ) ) { $query->set( 'meta_key', 'learndash_group_users_' . $filter_group_id ); $query->set( 'meta_value', $filter_group_id ); $query->set( 'meta_compare', '=' ); } } } // @TODO : Need to figure out how to force no results on when no users are found for a course. // @TODO : How to filter all users not enrolled in at least on course. if ( isset( $_GET['course_id'] ) ) { $filter_course_id = intval( $_GET['course_id'] ); if ( ! empty( $filter_course_id ) ) { if ( learndash_is_group_leader_user( get_current_user_id() ) ) { $group_ids = learndash_get_administrators_group_ids( get_current_user_id() ); if ( ! empty( $group_ids ) && is_array( $group_ids ) ) { $course_ids = array(); foreach ( $group_ids as $group_id ) { $group_course_ids = learndash_group_enrolled_courses( $group_id ); if ( ! empty( $group_course_ids ) && is_array( $group_course_ids ) ) { $course_ids = array_merge( $course_ids, $group_course_ids ); } } if ( empty( $course_ids ) ) { $filter_course_id = 0; } } } if ( ! empty( $filter_course_id ) ) { $course_users_query = learndash_get_users_for_course( $filter_course_id, array(), false ); if ( ( $course_users_query instanceof WP_User_Query ) && ( property_exists( $course_users_query, 'results' ) ) && ( ! empty( $course_users_query->results ) ) ) { $user_ids = $course_users_query->get_results(); if ( ! empty( $user_ids ) ) { $query->set( 'include', $user_ids ); } } else { $query->set( 'include', array( 0 ) ); } } } } } } add_filter( 'pre_get_users', 'learndash_filter_users_listing' ); /** * Load the plugin translations into wp.i18n for use in JavaScript markers * * @since 3.0 */ function learndash_load_inline_script_locale_data() { static $loaded = false; if ( false === $loaded ) { $loaded = true; $locale_data = learndash_get_jed_locale_data( LEARNDASH_LMS_TEXT_DOMAIN ); wp_add_inline_script( 'wp-i18n', 'wp.i18n.setLocaleData( ' . json_encode( $locale_data ) . ', "learndash" );' ); } } /** * Load the translations MO file into memory. * * @since 3.0 * @return array Array of transated strings. */ function learndash_get_jed_locale_data() { $translations = get_translations_for_domain( LEARNDASH_LMS_TEXT_DOMAIN ); $locale = array( '' => array( 'domain' => LEARNDASH_LMS_TEXT_DOMAIN, 'lang' => is_admin() ? get_user_locale() : get_locale(), ), ); if ( ! empty( $translations->headers['Plural-Forms'] ) ) { $locale['']['plural_forms'] = $translations->headers['Plural-Forms']; } foreach ( $translations->entries as $msgid => $entry ) { $locale[ $msgid ] = $entry->translations; } return $locale; } includes/admin/class-learndash-admin-groups-users-list.php000066600000027366152141567370017767 0ustar00current_action = esc_attr( $_GET['action'] ); //$this->current_action = $this->list_table->current_action(); } if ( ( isset( $_GET['group_id'] ) ) && ( ! empty( $_GET['group_id'] ) ) ) { $this->group_id = intval( $_GET['group_id'] ); } if ( ( isset( $_GET['user_id'] ) ) && ( ! empty( $_GET['user_id'] ) ) ) { $this->user_id = intval( $_GET['user_id'] ); } wp_enqueue_style( 'sfwd-module-style', LEARNDASH_LMS_PLUGIN_URL . '/assets/css/sfwd_module' . leardash_min_asset() . '.css', array(), LEARNDASH_SCRIPT_VERSION_TOKEN ); wp_style_add_data( 'sfwd-module-style', 'rtl', 'replace' ); $learndash_assets_loaded['styles']['sfwd-module-style'] = __FUNCTION__; wp_enqueue_script( 'sfwd-module-script', LEARNDASH_LMS_PLUGIN_URL . '/assets/js/sfwd_module' . leardash_min_asset() . '.js', array( 'jquery' ), LEARNDASH_SCRIPT_VERSION_TOKEN, true ); $learndash_assets_loaded['scripts']['sfwd-module-script'] = __FUNCTION__; // Because we need the ajaxurl for the pagination AJAX $data = array(); if ( ! isset( $data['ajaxurl'] ) ) { $data['ajaxurl'] = admin_url( 'admin-ajax.php' ); } $data = array( 'json' => json_encode( $data ) ); wp_localize_script( 'sfwd-module-script', 'sfwd_data', $data ); $filepath = SFWD_LMS::get_template( 'learndash_pager.css', null, null, true ); if ( ! empty( $filepath ) ) { wp_enqueue_style( 'learndash_pager_css', learndash_template_url_from_path( $filepath ), array(), LEARNDASH_SCRIPT_VERSION_TOKEN ); $learndash_assets_loaded['styles']['learndash_pager_css'] = __FUNCTION__; } $filepath = SFWD_LMS::get_template( 'learndash_pager.js', null, null, true ); if ( ! empty( $filepath ) ) { wp_enqueue_script( 'learndash_pager_js', learndash_template_url_from_path( $filepath ), array( 'jquery' ), LEARNDASH_SCRIPT_VERSION_TOKEN, true ); $learndash_assets_loaded['scripts']['learndash_pager_js'] = __FUNCTION__; } if ( empty( $this->current_action ) ) { require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/admin/class-learndash-admin-groups-users-list-table.php'; $this->list_table = new Learndash_Admin_Groups_Users_List_Table(); $screen = get_current_screen(); $screen_key = $screen->id; if ( ! empty( $this->group_id ) ) { $screen_key .= '_users'; } else { $screen_key .= '_groups'; } $screen_key .= '_per_page'; $screen_per_page_option = str_replace( '-', '_', $screen_key ); if ( isset( $_POST['wp_screen_options']['option'] ) ) { if ( isset( $_POST['wp_screen_options']['value'] ) ) { $per_page = intval( $_POST['wp_screen_options']['value'] ); if ( ( ! $per_page ) || ( $per_page < 1 ) ) { $per_page = 20; } update_user_meta( get_current_user_id(), $screen_per_page_option, $per_page ); } } $per_page = get_user_meta( get_current_user_id(), $screen_per_page_option, true ); if ( ( ! $per_page ) || ( empty( $per_page ) ) || ( $per_page < 1 ) ) { $per_page = 20; } $this->title = ''; $this->list_table->per_page = $per_page; add_screen_option( 'per_page', array( 'label' => esc_html__( 'per Page', 'learndash' ), 'default' => $per_page, ) ); if ( ( ! empty( $this->group_id ) ) && ( ! empty( $this->user_id ) ) ) { $this->on_process_actions_list(); $this->form_method = 'post'; $user = get_user_by( 'id', $this->user_id ); return; } elseif ( ! empty( $this->group_id ) ) { $group_post = get_post( $this->group_id ); if ( $group_post ) { $this->list_table->group_id = $this->group_id; $this->list_table->columns['username'] = esc_html__( 'Username', 'learndash' ); $this->list_table->columns['name'] = esc_html__( 'Name', 'learndash' ); $this->list_table->columns['email'] = esc_html__( 'Email', 'learndash' ); $this->list_table->columns['user_actions'] = esc_html__( 'Actions', 'learndash' ); return; } } } elseif ( $this->current_action == 'learndash-group-email' ) { $group_post = get_post( $this->group_id ); if ( $group_post ) { return; } } //$this->title = esc_html__( 'Group Administration', 'learndash' ); $this->list_table->columns['group_name'] = esc_html__( 'Group Name', 'learndash' ); $this->list_table->columns['group_actions'] = esc_html__( 'Actions', 'learndash' ); } public function show_page() { ?>

title ) ) { ?>

title; ?>

current_action == 'learndash-group-email' ) { ?>
true, 'wpautop' => true, ) ); ?>


list_table->views(); ?>
user_id ) ) { ?> list_table->check_table_filters(); $this->list_table->prepare_items(); if ( ! empty( $this->group_id ) ) { ?> list_table->search_box( esc_html__( 'Search Users', 'learndash' ), 'users' ); } else { $this->list_table->search_box( esc_html__( 'Search Groups', 'learndash' ), 'groups' ); } wp_nonce_field( 'ld-group-list-view-nonce', 'ld-group-list-view-nonce' ); $this->list_table->display(); } else { $group_user_ids = learndash_get_groups_user_ids( $this->group_id ); if ( ! empty( $group_user_ids ) ) { if ( in_array( $this->user_id, $group_user_ids ) ) { $atts = array( 'user_id' => $this->user_id, 'group_id' => $this->group_id, 'progress_num' => LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Section_General_Per_Page', 'progress_num' ), 'progress_orderby' => 'title', 'progress_order' => 'ASC', 'quiz_num' => LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Section_General_Per_Page', 'quiz_num' ), 'quiz_orderby' => 'taken', 'quiz_order' => 'DESC', ); /** * Allow filtering of group admininstration output * * @since 2.5.7 */ $atts = apply_filters( 'learndash_group_administration_course_info_atts', $atts, get_user_by( 'id', $this->user_id ) ); echo learndash_course_info_shortcode( $atts ); if ( learndash_show_user_course_complete( $this->user_id ) ) { echo submit_button( esc_html__( 'Update User', 'learndash' ) ); } } } } ?>
user_id ) ) { learndash_save_user_course_complete( $this->user_id ); } } // End of functions } } function learndash_data_group_reports_ajax() { $reply_data = array( 'status' => false ); if ( ( learndash_is_admin_user() ) || ( learndash_is_group_leader_user() ) ) { if ( isset( $_POST['data'] ) ) { $post_data = $_POST['data']; } else { $post_data = array(); } $ld_admin_settings_data_reports = new Learndash_Admin_Settings_Data_Reports(); $reply_data['data'] = $ld_admin_settings_data_reports->do_data_reports( $post_data, $reply_data ); } if ( ! empty( $reply_data ) ) { echo wp_json_encode( $reply_data ); } wp_die(); // this is required to terminate immediately and return a proper response } add_action( 'wp_ajax_learndash_data_group_reports', 'learndash_data_group_reports_ajax' ); includes/admin/class-learndash-admin-settings-data-reports.php000066600000023414152141567370020571 0ustar00parent_menu_page_url = 'admin.php?page=learndash-lms-reports'; $this->menu_page_capability = LEARNDASH_ADMIN_CAPABILITY_CHECK; $this->settings_page_id = 'learndash-lms-reports'; $this->settings_page_title = esc_html_x( 'Reports', 'Learndash Report Menu Label', 'learndash' ); $this->settings_tab_title = $this->settings_page_title; $this->settings_tab_priority = 0; add_action( 'init', array( $this, 'init_check_for_download_request' ) ); add_action( 'admin_menu', array( $this, 'admin_menu' ) ); if ( ! defined( 'LEARNDASH_PROCESS_TIME_PERCENT' ) ) { define( 'LEARNDASH_PROCESS_TIME_PERCENT', apply_filters( 'learndash_process_time_percent', 80 ) ); } if ( ! defined( 'LEARNDASH_PROCESS_TIME_SECONDS' ) ) { define( 'LEARNDASH_PROCESS_TIME_SECONDS', apply_filters( 'learndash_process_time_seconds', 10 ) ); } } public function init_check_for_download_request() { if ( isset( $_GET['ld-report-download'] ) ) { if ( ( isset( $_GET['data-nonce'] ) ) && ( ! empty( $_GET['data-nonce'] ) ) && ( isset( $_GET['data-slug'] ) ) && ( ! empty( $_GET['data-slug'] ) ) ) { if ( wp_verify_nonce( esc_attr( $_GET['data-nonce'] ), 'learndash-data-reports-' . esc_attr( $_GET['data-slug'] ) . '-' . get_current_user_id() ) ) { $transient_key = esc_attr( $_GET['data-slug'] ) . '_' . esc_attr( $_GET['data-nonce'] ); $transient_data = $this->get_transient( $transient_key ); if ( ( isset( $transient_data['report_filename'] ) ) && ( ! empty( $transient_data['report_filename'] ) ) ) { //$report_filename = ABSPATH . $transient_data['report_filename']; $report_filename = $transient_data['report_filename']; if ( ( file_exists( $report_filename ) ) && ( is_readable( $report_filename ) ) ) { $http_headers = array( 'Content-Encoding: ' . DB_CHARSET, 'Content-type: text/csv; charset=' . DB_CHARSET, 'Content-Disposition: attachment; filename=' . basename( $report_filename ), 'Pragma: no-cache', 'Expires: 0', ); $http_headers = apply_filters( 'learndash_csv_download_headers', $http_headers, $transient_data, esc_attr( $_GET['data-slug'] ) ); if ( ! empty( $http_headers ) ) { foreach ( $http_headers as $http_header ) { header( $http_header ); } } do_action( 'learndash_csv_download_after_headers' ); echo file_get_contents( $report_filename ); } } } } die(); } } /** * Register settings page */ public function admin_menu() { $data_settings_courses = learndash_data_upgrades_setting( 'user-meta-courses' ); $data_settings_quizzes = learndash_data_upgrades_setting( 'user-meta-quizzes' ); if ( ( ! empty( $data_settings_courses ) ) && ( ! empty( $data_settings_quizzes ) ) ) { $this->settings_page_id = add_submenu_page( 'learndash-lms', $this->settings_page_title, $this->settings_page_title, $this->menu_page_capability, $this->settings_page_id, array( $this, 'admin_page' ) ); add_action( 'load-' . $this->settings_page_id, array( $this, 'on_load_panel' ) ); } else { // If the data upgreades have not been performed then we call the old Reports page output in ld-admin.php $this->settings_page_id = add_submenu_page( 'learndash-lms', $this->settings_page_title, $this->settings_page_title, LEARNDASH_ADMIN_CAPABILITY_CHECK, 'learndash-lms-reports', 'learndash_lms_reports_page' ); } } public function admin_tabs( $admin_menu_section, $ld_admin_tabs ) { if ( $admin_menu_section == $this->parent_menu_page_url ) { $ld_admin_tabs->add_admin_tab_item( $admin_menu_section, array( 'id' => $this->settings_page_id, 'link' => add_query_arg( array( 'page' => $this->settings_page_id ), 'admin.php' ), 'name' => $this->settings_tab_title, ), $this->settings_tab_priority ); } } public function on_load_panel() { wp_enqueue_style( 'learndash_style', LEARNDASH_LMS_PLUGIN_URL . 'assets/css/style' . leardash_min_asset() . '.css', array(), LEARNDASH_SCRIPT_VERSION_TOKEN ); wp_style_add_data( 'learndash_style', 'rtl', 'replace' ); $learndash_assets_loaded['styles']['learndash_style'] = __FUNCTION__; wp_enqueue_style( 'sfwd-module-style', LEARNDASH_LMS_PLUGIN_URL . 'assets/css/sfwd_module' . leardash_min_asset() . '.css', array(), LEARNDASH_SCRIPT_VERSION_TOKEN ); wp_style_add_data( 'sfwd-module-style', 'rtl', 'replace' ); $learndash_assets_loaded['styles']['sfwd-module-style'] = __FUNCTION__; wp_enqueue_script( 'learndash-admin-settings-data-reports-script', LEARNDASH_LMS_PLUGIN_URL . 'assets/js/learndash-admin-settings-data-reports' . leardash_min_asset() . '.js', array( 'jquery' ), LEARNDASH_SCRIPT_VERSION_TOKEN, true ); $learndash_assets_loaded['scripts']['learndash-admin-settings-data-reports-script'] = __FUNCTION__; $this->init_report_actions(); } public function init_report_actions() { $this->report_actions = apply_filters( 'learndash_admin_report_register_actions', $this->report_actions ); } public function admin_page() { do_action( 'learndash_settings_page_before_content' ); ?>


'. print_r($this->report_actions, true) .''); foreach ( $this->report_actions as $report_action_slug => $report_action ) { $report_action['instance']->show_report_action(); } ?>
init_report_actions(); if ( ( isset( $post_data['slug'] ) ) && ( ! empty( $post_data['slug'] ) ) ) { $post_data_slug = esc_attr( $post_data['slug'] ); if ( isset( $this->report_actions[ $post_data_slug ] ) ) { $reply_data = $this->report_actions[ $post_data_slug ]['instance']->process_report_action( $post_data ); } } return $reply_data; } public function init_process_times() { $this->process_times['started'] = time(); $this->process_times['limit'] = ini_get( 'max_execution_time' ); $this->process_times['limit'] = intval( $this->process_times['limit'] ); if ( empty( $this->process_times['limit'] ) ) { $this->process_times['limit'] = 30; } } public function out_of_timer() { $this->process_times['current_time'] = time(); $this->process_times['ticks'] = $this->process_times['current_time'] - $this->process_times['started']; $this->process_times['percent'] = ( $this->process_times['ticks'] / $this->process_times['limit'] ) * 100; // If we are over 80% of the allowed processing time or over 10 seconds then finish up and return if ( ( $this->process_times['percent'] >= LEARNDASH_PROCESS_TIME_PERCENT ) || ( $this->process_times['ticks'] > LEARNDASH_PROCESS_TIME_SECONDS ) ) { return true; } return false; } public function get_transient( $transient_key = '' ) { if ( ! empty( $transient_key ) ) { $options_key = 'learndash_reports_' . $transient_key; $options_key = str_replace( '-', '_', $options_key ); return get_option( $options_key ); } } public function set_option_cache( $transient_key = '', $transient_data = '' ) { if ( ! empty( $transient_key ) ) { $options_key = 'learndash_reports_' . $transient_key; $options_key = str_replace( '-', '_', $options_key ); if ( ! empty( $transient_data ) ) { update_option( $options_key, $transient_data ); } else { delete_option( $options_key ); } } } // End of functions } } // Go ahead and inlcude out User Meta Courses upgrade class require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-courses.php'; require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/admin/classes-data-reports-actions/class-learndash-admin-data-reports-user-quizzes.php'; add_action( 'plugins_loaded', function() { new Learndash_Admin_Data_Reports_Courses(); new Learndash_Admin_Data_Reports_Quizzes(); } ); function learndash_data_reports_ajax() { $reply_data = array( 'status' => false ); if ( current_user_can( 'read' ) ) { if ( isset( $_POST['data'] ) ) { $post_data = $_POST['data']; } else { $post_data = array(); } $ld_admin_settings_data_reports = new Learndash_Admin_Settings_Data_Reports(); $reply_data['data'] = $ld_admin_settings_data_reports->do_data_reports( $post_data, $reply_data ); } if ( ! empty( $reply_data ) ) { echo json_encode( $reply_data ); } wp_die(); // this is required to terminate immediately and return a proper response } add_action( 'wp_ajax_learndash-data-reports', 'learndash_data_reports_ajax' ); includes/admin/class-learndash-admin-groups-edit.php000066600000030436152141567370016572 0ustar00groups_type ) ) { return; } wp_enqueue_script( 'learndash-admin-binary-selector-script', LEARNDASH_LMS_PLUGIN_URL . 'assets/js/learndash-admin-binary-selector' . leardash_min_asset() . '.js', array( 'jquery' ), LEARNDASH_SCRIPT_VERSION_TOKEN, true ); wp_enqueue_style( 'learndash-admin-binary-selector-style', LEARNDASH_LMS_PLUGIN_URL . 'assets/css/learndash-admin-binary-selector' . leardash_min_asset() . '.css', array(), LEARNDASH_SCRIPT_VERSION_TOKEN ); wp_style_add_data( 'learndash-admin-binary-selector-style', 'rtl', 'replace' ); // Add Metabox and hook for saving post metabox. add_action( 'add_meta_boxes', array( $this, 'learndash_groups_add_custom_box' ) ); add_action( 'save_post', array( $this, 'learndash_groups_save_postdata' ) ); } /** * Register Groups meta box for admin * * Managed enrolled groups, users and group leaders * * @since 2.1.2 */ public function learndash_groups_add_custom_box() { add_meta_box( 'learndash_groups', esc_html__( 'LearnDash Group Admin', 'learndash' ), array( $this, 'learndash_groups_page_box' ), $this->groups_type ); } /** * Prints content for Groups meta box for admin * * @since 2.1.2 * * @param WP_Post $post WP_Post object of group. * @return string meta box HTML output. */ public function learndash_groups_page_box( WP_Post $post ) { global $wpdb; $post_id = $post->ID; // Use nonce for verification. wp_nonce_field( plugin_basename( __FILE__ ), 'learndash_groups_nonce' ); ?>

/>

$post_id, 'selected_ids' => learndash_group_enrolled_courses( $post_id, true ), ) ); $ld_binary_selector_group_courses->show(); /** * Set the included users IDs to be user for the Group Leader selector * As of LD v2.3 we include users in the group_leader and administrator roles. */ $gl_included_ids = array(); $group_leader_query = new WP_User_Query( array( 'role__in' => array( 'group_leader', 'administrator' ), 'fields' => 'ID' ) ); $gl_included_ids = $group_leader_query->get_results(); if ( ! empty( $gl_included_ids ) ) { $ld_binary_selector_group_leaders = new Learndash_Binary_Selector_Group_Leaders( array( 'group_id' => $post_id, 'selected_ids' => learndash_get_groups_administrator_ids( $post_id, true ), 'included_ids' => $gl_included_ids, ) ); $ld_binary_selector_group_leaders->show(); } $ld_binary_selector_group_users = new Learndash_Binary_Selector_Group_Users( array( 'group_id' => $post_id, 'selected_ids' => learndash_get_groups_user_ids( $post_id, true ), ) ); $ld_binary_selector_group_users->show(); ?>
$col_label ) { if ( 'date' == $col_key ) { $columns_new['groups_group_leaders'] = esc_html__( 'Group Leaders', 'learndash' ); $columns_new['groups_group_courses'] = sprintf( // translators: placeholder: Courses. esc_html_x( 'Group %s', 'Group Courses', 'learndash' ), LearnDash_Custom_Label::get_label( 'courses' ) ); $columns_new['groups_group_users'] = esc_html__( 'Group Users', 'learndash' ); } $columns_new[ $col_key ] = $col_label; } return $columns_new; } /** * Display Group columns. * * @param string $column_name Column being displayed. * @param integer $group_id ID of Group (post) being displayed. */ public function display_groups_columns( $column_name = '', $group_id = 0 ) { switch ( $column_name ) { case 'groups_group_leaders': $group_leaders = learndash_get_groups_administrator_ids( $group_id ); if ( ( empty( $group_leaders ) ) || ( ! is_array( $group_leaders ) ) ) { $group_leaders = array(); } printf( // translators: placeholder: Group Leaders Count. esc_html_x( 'Total %d', 'Group Leaders Count', 'learndash' ), count( $group_leaders ) ); if ( ! empty( $group_leaders ) ) { $user_names = ''; if ( count( $group_leaders ) > 5 ) { $group_leaders = array_slice( $group_leaders, 0, 5 ); } foreach ( $group_leaders as $user_id ) { $user = get_user_by( 'id', $user_id ); if ( ! empty( $user_names ) ) { $user_names .= ', '; } $user_names .= '' . $user->display_name . ' (' . $user->user_login . ')' . ''; } if ( ! empty( $user_names ) ) { echo '
' . $user_names; } } break; case 'groups_group_users': $group_users = learndash_get_groups_user_ids( $group_id ); if ( ( empty( $group_users ) ) || ( ! is_array( $group_users ) ) ) { $group_users = array(); } echo sprintf( // translators: placeholder: Group Users Count. esc_html_x( 'Total %d', 'Group Users Count', 'learndash' ), count( $group_users ) ); if ( ! empty( $group_users ) ) { $user_names = ''; if ( count( $group_users ) > 5 ) { $group_users = array_slice( $group_users, 0, 5 ); } foreach ( $group_users as $user_id ) { $user = get_user_by( 'id', $user_id ); if ( ! empty( $user_names ) ) { $user_names .= ', '; } $user_names .= '' . $user->display_name . ' (' . $user->user_login . ')' . ''; } if ( ! empty( $user_names ) ) { echo '
' . $user_names; } } break; case 'groups_group_courses': $group_courses = learndash_group_enrolled_courses( $group_id ); if ( ( empty( $group_courses ) ) || ( ! is_array( $group_courses ) ) ) { $group_courses = array(); } echo sprintf( // translators: placeholder: Goup Courses Count. esc_html_x( 'Total %d', 'Group Courses Count', 'learndash' ), count( $group_courses ) ); if ( ! empty( $group_courses ) ) { $course_names = ''; if ( count( $group_courses ) > 5 ) { $group_courses = array_slice( $group_courses, 0, 5 ); } foreach ( $group_courses as $course_id ) { if ( ! empty( $course_names ) ) { $course_names .= ', '; } $course_names .= '' . get_the_title( $course_id ) . ''; } if ( ! empty( $course_names ) ) { echo '
' . $course_names; } } break; } } // End of functions. } } includes/admin/class-learndash-admin-posts-listing.php000066600000035772152141567370017157 0ustar00post_type ) ) { return; } add_filter( 'post_row_actions', array( $this, 'post_row_actions' ), 20, 2 ); add_filter( 'manage_edit-' . $this->post_type . '_columns', array( $this, 'manage_column_headers' ), 50, 1 ); add_action( 'manage_' . $this->post_type . '_posts_custom_column', array( $this, 'manage_column_rows' ), 50, 3 ); add_action( 'restrict_manage_posts', array( $this, 'restrict_manage_posts_action' ), 50, 2 ); add_filter( 'parse_query', array( $this, 'parse_query_table_filter' ), 50, 1 ); } /** * Call via the WordPress load sequence for admin pages. */ public function on_load_post() { global $typenow, $post; if ( ( empty( $typenow ) ) || ( $typenow !== $this->post_type ) ) { return; } add_action( 'before_delete_post', array( $this, 'before_delete_post' ), 50, 1 ); add_action( 'deleted_post', array( $this, 'deleted_post' ), 50, 1 ); } /** * Display options above table listing to allow filtering. * * @since 2.6.0 * @param string $post_type Post Type being displayed. * @param string $location Location of filter displayed. Will normally be 'top'. */ public function restrict_manage_posts_action( $post_type = '', $location = '' ) { global $pagenow, $sfwd_lms; if ( ( empty( $post_type ) ) || ( $post_type !== $this->post_type ) ) { return; } if ( ! is_admin() ) { return; } if ( 'edit.php' !== $pagenow ) { return; } if ( 'top' !== $location ) { return; } if ( ( isset( $_GET['post_status'] ) ) && ( 'trash' === $_GET['post_status'] ) ) { return; } $this->show_early_selectors(); $this->show_taxonomy_selectors(); $this->show_post_type_selectors(); $this->show_late_selectors(); } /** * Output custom column row data * * @since 2.6.0 * * @param string $column_name Column slug or row being displayed. * @param integer $post_id Post ID of row being displayed. */ public function manage_column_rows( $column_name = '', $post_id = 0 ) { } /** * Add post type column headers. * * @since 2.6.0 * @param array $columns Columns array passed from WordPress. * @return array $colums modified array with new columns. */ public function manage_column_headers( $columns = array() ) { if ( ! empty( $this->columns ) ) { $columns = array_merge( array_slice( $columns, 0, 2 ), $this->columns, array_slice( $columns, 2 ) ); } return $columns; } /** * Function to show selectors before the post_type selectors. */ protected function show_early_selectors() {} /** * Function to show selectors after the taxonomy selectors. */ protected function show_late_selectors() {} /** * Display post type selectors for post type. * * @since 2.6.0 */ protected function show_post_type_selectors() { if ( ! empty( $this->post_type_selectors ) ) { foreach ( $this->post_type_selectors as $selector_slug => $selector_args ) { if ( isset( $_GET[ $selector_slug ] ) ) { $selector_args['selected'] = esc_attr( $_GET[ $selector_slug ] ); } else { $selector_args['selected'] = 0; } $this->show_post_type_selector( $selector_args ); } } } /** * Display taxonomy selectors for post type. * * @since 2.6.0 */ protected function show_taxonomy_selectors() { $object_taxonomies = get_object_taxonomies( $this->post_type ); // We remove 'category' from the object taxonomies because by now WP has already output it. // Maybe at some point we can move the filter earlier $object_taxonomies = array_diff( $object_taxonomies, array( 'category' ) ); $object_taxonomies = apply_filters( 'learndash-admin-taxonomy-filters-display', $object_taxonomies, $this->post_type ); if ( ( ! empty( $object_taxonomies ) ) && ( is_array( $object_taxonomies ) ) ) { foreach ( $object_taxonomies as $taxonomy_slug ) { if ( isset( $_GET[ $taxonomy_slug ] ) ) { $selected = esc_attr( $_GET[ $taxonomy_slug ] ); } else { $selected = false; } $taxonomy_slug_name = $taxonomy_slug; $dropdown_options = array( 'taxonomy' => $taxonomy_slug, 'name' => $taxonomy_slug_name, 'show_option_none' => get_taxonomy( $taxonomy_slug )->labels->all_items, 'option_none_value' => '', 'hide_empty' => 0, 'hierarchical' => get_taxonomy( $taxonomy_slug )->hierarchical, 'show_count' => 0, 'orderby' => 'name', 'value_field' => 'slug', 'selected' => $selected, ); echo ''; wp_dropdown_categories( $dropdown_options ); } } } /** * Utility display function to show a post title with row actions. * * @since 2.6.0 * @param integer $post_id Post ID of post to show title of. */ protected function show_post_link( $post_id = 0 ) { $post_link = ''; if ( ! empty( $post_id ) ) { $post_link = '' . get_the_title( $post_id ) . ''; } echo $post_link; } /** * Add Course Builder link to Courses row action array. * * @since 3.0 * * @param array $row_actions Existing Row actions for course. * @param WP_Post $course_post Course Post object for current row. * * @return array $row_actions */ public function post_row_actions( $row_actions = array(), $course_post = null ) { return $row_actions; } /** * Utility function to show the row actions hover links on certain rows. * * @since 2.6.0 * @param array $actions Row actions to display. Must be key => label pairs. * @param boolean $always_visible Flag to have actions always show (true) or show on hover (false). */ protected function show_row_actions( $actions, $always_visible = false ) { $actions_out = ''; if ( ! empty( $actions ) ) { $action_count = count( $actions ); $i = 0; $actions_out .= '
'; foreach ( $actions as $action => $link ) { ++$i; ( $i == $action_count ) ? $sep = '' : $sep = ' | '; $actions_out .= '' . $link . $sep . ''; } $actions_out .= '
'; $actions_out .= ''; } echo $actions_out; } /** * Shows post type filters above the table listing. * * @since 2.6.0 * @param array $selector_args Array of attributes used to display the filter selector. */ protected function show_post_type_selector( $selector_args = array() ) { $query_args_default = array( 'post_type' => '', 'post_status' => 'any', 'posts_per_page' => -1, 'orderby' => 'title', 'order' => 'ASC', ); if ( ( ! isset( $selector_args['query_args'] ) ) || ( ! is_array( $selector_args['query_args'] ) ) ) { $selector_args['query_args'] = array(); } $selector_args['query_args'] = wp_parse_args( $selector_args['query_args'], $query_args_default ); if ( learndash_check_query_post_type( $selector_args['query_args'] ) ) { $post_type_nonce = wp_create_nonce( $selector_args['query_args']['post_type'] ); if ( ( ! isset( $selector_args['lazy_load'] ) ) || ( false !== $selector_args['lazy_load'] ) && ( true === apply_filters( 'learndash_element_lazy_load_admin', $selector_args['lazy_load'] ) ) ) { $posts_per_page = apply_filters( 'learndash_element_lazy_load_per_page', LEARNDASH_LMS_DEFAULT_LAZY_LOAD_PER_PAGE, $selector_args['query_args']['post_type'], $this->post_type ); if ( $posts_per_page < 1 ) { $posts_per_page = -1; $this->lazy_load = false; } else { $posts_per_page = absint( $posts_per_page ); $selector_args['query_args']['posts_per_page'] = $posts_per_page; $selector_args['query_args']['paged'] = 1; $lazy_load_data = array(); $lazy_load_data['query_vars'] = $selector_args['query_args']; $lazy_load_data['query_type'] = 'WP_Query'; $lazy_load_data['value'] = $selector_args['selected']; $lazy_load_data['nonce'] = $post_type_nonce; $lazy_load_data = ' learndash_lazy_load_data="' . htmlspecialchars( json_encode( $lazy_load_data ) ) . '" '; } } else { $posts_per_page = -1; $selector_args['query_args']['posts_per_page'] = $posts_per_page; $selector_args['query_args']['nopaging'] = true; $lazy_load_data = ''; } $selector_args['query_args'] = apply_filters( 'learndash_show_post_type_selector_filter', $selector_args['query_args'], $this->post_type ); $query_results = new WP_Query( $selector_args['query_args'] ); echo ''; } } /** * This function fill filter the table listing items based on filters selected. * Called via 'parse_query' filter from WP. * * @since 2.6.0 * @param object $query WP_Query instance. */ public function parse_query_table_filter( $query ) { } /** * Initial hook for deleting a post. * * This function will register a record of the post meta to be rmeoved via the delete_post action hook. * * @since 2.6.5 * @param integer $post_id $Post ID to be deleted. */ public function before_delete_post( $post_id = 0 ) { global $post_type, $post_type_object; if ( ( ! is_admin() ) || ( $post_type !== $this->post_type ) ) { return; } $post_id = absint( $post_id ); if ( ( ! empty( $post_id ) ) && ( current_user_can( 'delete_post', $post_id ) ) && ( ! isset( $this->posts_to_delete[ $post_id ] ) ) ) { $this->posts_to_delete[ $post_id ] = $post_id; } } /** * Called after the post has been deleted. * * Uses registered delete post ID * * @since 2.6.5 * @param integer $post_id $Post ID to be deleted. */ public function deleted_post( $post_id = 0 ) { global $post_type, $post_type_object; if ( ( ! is_admin() ) || ( $post_type !== $this->post_type ) ) { return; } if ( ( ! empty( $post_id ) ) && ( current_user_can( 'delete_post', $post_id ) ) && ( isset( $this->posts_to_delete[ $post_id ] ) ) ) { unset( $this->posts_to_delete[ $post_id ] ); } } // End of functions. } } // Incldue the LearnDash table listing files here. require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/admin/classes-posts-listings/class-learndash-admin-courses-listing.php'; require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/admin/classes-posts-listings/class-learndash-admin-lessons-listing.php'; require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/admin/classes-posts-listings/class-learndash-admin-topics-listing.php'; require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/admin/classes-posts-listings/class-learndash-admin-quizzes-listing.php'; require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/admin/classes-posts-listings/class-learndash-admin-questions-listing.php'; includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php000066600000076121152141567370023034 0ustar00post_type = learndash_get_post_type_slug( 'question' ); parent::__construct(); } /** * On Load handler function for this post type edit. * This function is called by a WP action when the admin * page 'post.php' or 'post-new.php' are loaded. */ public function on_load() { if ( $this->post_type_check() ) { parent::on_load(); wp_enqueue_script( 'media-upload' ); wp_enqueue_script( 'thickbox' ); $wpproquiz_controller_admin = new WpProQuiz_Controller_Admin(); $wpproquiz_controller_admin->enqueueScript(); add_action( 'admin_footer', array( $this, 'admin_footer' ) ); } } /** * Hook into the WP admin footer logic to add custom JavaScript to replce the default page title. */ public function admin_footer() { global $post_type, $post_type_object; if ( ( ! is_admin() ) || ( $post_type !== $this->post_type ) ) { return; } if ( isset( $_GET['quiz_id'] ) ) { $quiz_id = absint( $_GET['quiz_id'] ); if ( ! empty( $quiz_id ) ) { $quizzes_url = add_query_arg( 'post_type', learndash_get_post_type_slug( 'quiz' ), admin_url( 'edit.php' ) ); $new_title = '' . LearnDash_Custom_Label::get_label( 'quizzes' ) . ' > ' . get_the_title( $quiz_id ) . ' '; $post_new_file = add_query_arg( array( 'post_type' => $post_type, 'quiz_id' => $quiz_id, ), 'post-new.php' ); $add_new_url = admin_url( $post_new_file ); ?> post_type . '_quiz' ] = $quiz_id; } } return $options; } /** * Initialize the ProQuiz Question being edited. * * @since 2.6.0 * @param object $post WP_Post Question being edited. */ public function init_question_edit( $post ) { global $pagenow; if ( 'post-new.php' === $pagenow ) { add_filter( $this->post_type .'_display_options', array( $this, 'display_options' ) ); } if ( is_null( $this->pro_question_edit ) ) { $question_pro_id = (int) get_post_meta( $post->ID, 'question_pro_id', true ); $question_mapper = new WpProQuiz_Model_QuestionMapper(); if ( ! empty( $question_pro_id ) ) { $this->pro_question_edit = $question_mapper->fetch( $question_pro_id ); if ( ( $this->pro_question_edit ) && is_a( $this->pro_question_edit, 'WpProQuiz_Model_Question' ) ) { $post->post_title = $this->pro_question_edit->getTitle(); $post->post_content = $this->pro_question_edit->getQuestion(); } } else { $this->pro_question_edit = $question_mapper->fetch( null ); } if ( ( isset( $_GET['templateLoadId'] ) ) && ( ! empty( $_GET['templateLoadId'] ) ) ) { $template_mapper = new WpProQuiz_Model_TemplateMapper(); $template = $template_mapper->fetchById( absint( $_GET['templateLoadId'] ) ); if ( ( $template ) && ( is_a( $template, 'WpProQuiz_Model_Template' ) ) ) { $data = $template->getData(); if ( $data !== null ) { $data['question']->setId( $this->pro_question_edit->getId() ); $data['question']->setQuizId( $this->pro_question_edit->getQuizId() ); $this->pro_question_edit = $data['question']; $post->post_title = $this->pro_question_edit->getTitle(); $post->post_content = $this->pro_question_edit->getQuestion(); } } } } } /** * Save Question handler function. * * @since 2.6.0 * @param integer $post_id Post ID Question being edited. * @param object $post WP_Post Question being edited. * @param boolean $update If update true, else false. */ public function save_post( $post_id = 0, $post = null, $update = false ) { if ( ! $this->post_type_check( $post ) ) { return false; } if ( ! parent::save_post( $post_id, $post, $update ) ) { return false; } $post_data = $this->clear_request_data( $_POST ); $question_pro_id = get_post_meta( $post_id, 'question_pro_id', true ); if ( ! empty( $question_pro_id ) ) { $question_pro_id = absint( $question_pro_id ); } else { $question_pro_id = 0; } $question_pro_id_new = learndash_update_pro_question( $question_pro_id, $post_data ); if ( ( ! empty( $question_pro_id_new ) ) && ( ( absint( $question_pro_id_new ) ) !== ( absint( $question_pro_id ) ) ) ) { update_post_meta( $post_id, 'question_pro_id', absint( $question_pro_id_new ) ); learndash_set_question_quizzes_dirty( $post_id ); } learndash_proquiz_sync_question_fields( $post_id, $question_pro_id_new ); learndash_proquiz_sync_question_category( $post_id, $question_pro_id_new ); } /** * Register metaboxes for Question edit. * * @since 2.6.0 * * @param string $post_type Port Type being edited. */ public function add_metaboxes( $post_type = '' ) { global $post; if ( $this->post_type_check( $post_type ) ) { parent::add_metaboxes( $post_type ); $this->init_question_edit( $post ); add_meta_box( 'learndash_question_category_proquiz', sprintf( // translators: placeholders: Question. esc_html_x( '%s Category', 'placeholders: Question', 'learndash' ), LearnDash_Custom_Label::get_label( 'question' ) ) . ' ' . esc_html__( '(optional)', 'learndash' ), array( $this, 'question_category_proquiz_page_box' ), $this->post_type, 'side', 'high' ); add_meta_box( 'learndash_question_type', esc_html__( 'Answer type', 'learndash' ), array( $this, 'question_type_page_box' ), $this->post_type, 'side', 'default' ); add_meta_box( 'learndash_question_points', esc_html__( 'Points', 'learndash' ) . ' ' . esc_html__( '(required)', 'learndash' ), array( $this, 'question_points_page_box' ), $this->post_type, 'side', 'default' ); add_meta_box( 'learndash_question_answers', esc_html__( 'Answers', 'learndash' ) . ' ' . esc_html__( '(required)', 'learndash' ), array( $this, 'question_answers_page_box' ), $this->post_type, 'normal', 'high' ); add_meta_box( 'learndash_question_single_choice_options', esc_html__( 'Single choice options', 'learndash' ) . ' ' . esc_html__( '(optional)', 'learndash' ), array( $this, 'question_single_choice_options' ), $this->post_type, 'normal', 'high' ); add_meta_box( 'learndash_question_message_correct_answer', esc_html__( 'Message with the correct answer', 'learndash' ) . ' ' . esc_html__( '(optional)', 'learndash' ), array( $this, 'question_message_correct_answer_page_box' ), $this->post_type, 'normal', 'high' ); add_meta_box( 'learndash_question_message_incorrect_answer', esc_html__( 'Message with the incorrect answer', 'learndash' ) . ' ' . esc_html__( '(optional)', 'learndash' ), array( $this, 'question_message_incorrect_answer_page_box' ), $this->post_type, 'normal', 'high' ); add_meta_box( 'learndash_question_hint', esc_html__( 'Hint', 'learndash' ) . ' ' . esc_html__( '(optional)', 'learndash' ), array( $this, 'question_hint_page_box' ), $this->post_type, 'normal', 'high' ); add_meta_box( 'learndash_question_template', esc_html__( 'Template', 'learndash' ), array( $this, 'question_template_page_box' ), $this->post_type, 'normal', 'high' ); global $wp_meta_boxes; if ( isset( $wp_meta_boxes[ $this->post_type ]['normal']['high']['learndash_question_answers'] ) ) { $learndash_question_answers = $wp_meta_boxes[ $this->post_type ]['normal']['high']['learndash_question_answers']; unset( $wp_meta_boxes[ $this->post_type ]['normal']['high']['learndash_question_answers'] ); } else { $learndash_question_answers = null; } if ( isset( $wp_meta_boxes[ $this->post_type ]['normal']['high']['learndash_question_single_choice_options'] ) ) { $learndash_question_single_choice_options = $wp_meta_boxes[ $this->post_type ]['normal']['high']['learndash_question_single_choice_options']; unset( $wp_meta_boxes[ $this->post_type ]['normal']['high']['learndash_question_single_choice_options'] ); } else { $learndash_question_single_choice_options = null; } $question_metaboxes_new = array(); if ( ! is_null( $learndash_question_answers ) ) { $question_metaboxes_new = array_merge( $question_metaboxes_new, array( 'learndash_question_answers' => $learndash_question_answers ) ); } if ( ! is_null( $learndash_question_single_choice_options ) ) { $question_metaboxes_new = array_merge( $question_metaboxes_new, array( 'learndash_question_single_choice_options' => $learndash_question_single_choice_options ) ); } if ( ! empty( $question_metaboxes_new ) ) { $wp_meta_boxes[ $this->post_type ]['normal']['high'] = array_merge( $question_metaboxes_new, $wp_meta_boxes[ $this->post_type ]['normal']['high'] ); } /** * Check if the editor is classic or new Gutenberg Block editor and hide non-important metaboxes */ if ( ( $post ) && ( is_a( $post, 'WP_Post' ) ) ) { $user_closed_postboxes = get_user_meta( get_current_user_id(), 'closedpostboxes_' . $this->post_type, true ); if ( ( is_string( $user_closed_postboxes ) ) && ( '' === $user_closed_postboxes ) ) { if ( ( function_exists( 'use_block_editor_for_post' ) ) && ( use_block_editor_for_post( $post ) ) ) { $all_postboxes = array( 'sfwd-question', 'learndash_question_single_choice_options', 'learndash_question_message_correct_answer', 'learndash_question_message_incorrect_answer', 'learndash_question_hint', 'learndash_question_template', ); } else { $all_postboxes = array( 'learndash_question_message_correct_answer', 'learndash_question_message_incorrect_answer', 'learndash_question_hint', 'learndash_question_template', ); } update_user_meta( get_current_user_id(), 'closedpostboxes_' . $this->post_type, $all_postboxes ); } } } } /** * Shows the Question Types metabox. * * @since 2.6.0 * @param object $post WP_Post Question being edited. */ public function question_type_page_box( $post ) { global $learndash_question_types; if ( ( $this->pro_question_edit ) && is_a( $this->pro_question_edit, 'WpProQuiz_Model_Question' ) ) { $question_type = $this->pro_question_edit->getAnswerType(); } else { $question_type = 'single'; } ?>
    $q_label ) { ?>
  • />
pro_question_edit ) && is_a( $this->pro_question_edit, 'WpProQuiz_Model_Question' ) ) { $question_category_id = $this->pro_question_edit->getCategoryId(); } else { $question_category_id = 0; } $categoryMapper = new WpProQuiz_Model_CategoryMapper(); $allCategories = $categoryMapper->fetchAll(); ?>

pro_question_edit ) && is_a( $this->pro_question_edit, 'WpProQuiz_Model_Question' ) ) { $question_points = $this->pro_question_edit->getPoints(); } else { $question_points = 1; } ?>

pro_question_edit ) && is_a( $this->pro_question_edit, 'WpProQuiz_Model_Question' ) ) { $question_correct_same_text = checked( '1', $this->pro_question_edit->isCorrectSameText(), false ); $question_correct_message = $this->pro_question_edit->getCorrectMsg(); } else { $question_correct_same_text = ''; $question_correct_message = ''; } ?>

3 ) ); } /** * Shows the Question Incorrect Answer Message metabox. * * @since 2.6.0 * @param object $post WP_Post Question being edited. */ public function question_message_incorrect_answer_page_box( $post ) { if ( ( $this->pro_question_edit ) && is_a( $this->pro_question_edit, 'WpProQuiz_Model_Question' ) ) { $question_incorrect_message = $this->pro_question_edit->getIncorrectMsg(); } else { $question_incorrect_message = ''; } ?>

3 ) ); } /** * Shows the Question Hint metabox. * * @since 2.6.0 * @param object $post WP_Post Question being edited. */ public function question_hint_page_box( $post ) { if ( ( $this->pro_question_edit ) && is_a( $this->pro_question_edit, 'WpProQuiz_Model_Question' ) ) { $question_hint_enabled = checked( '1', $this->pro_question_edit->isTipEnabled(), false ); $question_hint_message = $this->pro_question_edit->getTipMsg(); } else { $question_hint_enabled = ''; $question_hint_message = ''; } ?>

3 ) ); ?>

This changes the calculation of the points', 'learndash' ) ); ?>




answerPointDia(); ?>
pro_question_edit ) && is_a( $this->pro_question_edit, 'WpProQuiz_Model_Question' ) ) { $pro_question_data = $proquiz_controller_question->setAnswerObject( $this->pro_question_edit ); } else { $pro_question_data = $proquiz_controller_question->setAnswerObject(); } $this->view = new WpProQuiz_View_QuestionEdit(); ?>
view->freeChoice( $pro_question_data['free_answer'] ); ?>

    view->sortingChoice( $pro_question_data['sort_answer'] ); ?>
    view->singleMultiCoice( $pro_question_data['classic_answer']); ?>



    view->matrixSortingChoice( $pro_question_data['matrix_sort_answer'] ); ?>
view->clozeChoice( $pro_question_data['cloze_answer'] ); ?>
view->assessmentChoice( $pro_question_data['assessment_answer'] ); ?>
view->essayChoice( $pro_question_data['essay'] ); ?>
fetchAll( WpProQuiz_Model_Template::TEMPLATE_TYPE_QUESTION, false ); $template_loaded_id = ''; if ( ( isset( $_GET['templateLoadId'] ) ) && ( ! empty( $_GET['templateLoadId'] ) ) ) { $template_loaded_id = intval( $_GET['templateLoadId'] ); } ?>



post_type = learndash_get_post_type_slug( 'quiz' ); parent::__construct(); } /** * Initialize the ProQuiz Quiz being edited. * * @since 2.6.0 * @param object $post WP_Post Question being edited. */ public function init_quiz_edit( $post ) { if ( is_null( $this->pro_quiz_edit ) ) { $quiz_pro_id = (int) learndash_get_setting( $post->ID, 'quiz_pro' ); $this->_post = array( '1' ); $this->_get = array( 'action' => 'getEdit', 'quizId' => $quiz_pro_id, 'post_id' => $post->ID, ); if ( ( isset( $_GET['templateLoadId'] ) ) && ( ! empty( $_GET['templateLoadId'] ) ) ) { $this->_get['templateLoad'] = 'yes'; $this->_get['templateLoadId'] = $_GET['templateLoadId']; } $pro_quiz = new WpProQuiz_Controller_Quiz(); $this->pro_quiz_edit = $pro_quiz->route( $this->_get, $this->_post ); } } /** * On Load handler function for this post type edit. * This function is called by a WP action when the admin * page 'post.php' or 'post-new.php' are loaded. */ public function on_load() { if ( $this->post_type_check() ) { if ( ! apply_filters( 'learndash_settings_metaboxes_legacy_quiz', LEARNDASH_SETTINGS_METABOXES_LEGACY_QUIZ, $this->post_type ) ) { require_once LEARNDASH_LMS_PLUGIN_DIR . '/includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-access-settings.php'; require_once LEARNDASH_LMS_PLUGIN_DIR . '/includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-progress-settings.php'; require_once LEARNDASH_LMS_PLUGIN_DIR . '/includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-display-content.php'; require_once LEARNDASH_LMS_PLUGIN_DIR . '/includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-results-display-content-options.php'; require_once LEARNDASH_LMS_PLUGIN_DIR . '/includes/settings/settings-metaboxes/class-ld-settings-metabox-quiz-admin-data-handling-settings.php'; } parent::on_load(); if ( LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Quizzes_Builder', 'enabled' ) == 'yes' ) { $this->use_quiz_builder = true; if ( apply_filters( 'learndash_show_quiz_builder', $this->use_quiz_builder ) === true ) { $this->quiz_builder = Learndash_Admin_Metabox_Quiz_Builder::add_instance(); $this->quiz_builder->builder_on_load(); } } add_filter( 'learndash_header_data', 'LearnDash\Admin\QuizBuilderHelpers\get_quiz_data', 100 ); } } /** * Save metabox handler function. * * @param integer $post_id Post ID Question being edited. * @param object $post WP_Post Question being edited. * @param boolean $update If update true, else false. */ public function save_post( $post_id = 0, $post = null, $update = false ) { if ( ! $this->post_type_check( $post ) ) { return false; } if ( ! parent::save_post( $post_id, $post, $update ) ) { return false; } // Check the Quiz custom fields to see if they need to be reformatted. if ( isset( $_POST['form'] ) ) { $form = $_POST['form']; if ( 1 === count( $form[0] ) ) { $form_items = array(); $form_item = array(); foreach ( $form as $form_ele ) { foreach ( $form_ele as $form_ele_name => $form_ele_value ) { if ( 'fieldname' === $form_ele_name ) { if ( ! empty( $form_item ) ) { $form_items[] = $form_item; } $form_item = array(); } $form_item[ $form_ele_name ] = $form_ele_value; } } if ( ! empty( $form_item ) ) { $form_items[] = $form_item; } $form_item = array(); $_POST['form'] = $form_items; } } $this->init_quiz_edit( $post ); /** * Save Quiz Builder * Within CB will be security checks. */ if ( apply_filters( 'learndash_show_quiz_builder', $this->use_quiz_builder ) === true ) { $this->quiz_builder = Learndash_Admin_Metabox_Quiz_Builder::add_instance(); $this->quiz_builder->save_course_builder( $post_id, $post, $update ); } if ( ! empty( $this->_metaboxes ) ) { foreach ( $this->_metaboxes as $_metaboxes_instance ) { $settings_fields = array(); $settings_fields = $_metaboxes_instance->get_post_settings_field_updates( $post_id, $post, $update ); $_metaboxes_instance->save_post_meta_box( $post_id, $post, $update, $settings_fields ); $_metaboxes_instance->save_fields_to_post( $this->pro_quiz_edit, $settings_fields ); } } $quizId = absint( learndash_get_setting( $post_id, 'quiz_pro', true ) ); $pro_quiz = new WpProQuiz_Controller_Quiz(); $pro_quiz->route( array( 'action' => 'addUpdateQuiz', 'quizId' => $quizId, 'post_id' => $post_id, ) ); } /** * Register metaboxes for Quiz edit. * * @since 2.6.0 * @param string $post_type Port Type being edited. */ public function add_metaboxes( $post_type = '', $post = null ) { global $learndash_metaboxes; if ( $this->post_type_check( $post_type ) ) { parent::add_metaboxes( $post_type ); if ( apply_filters( 'learndash_disable_advance_quiz', false, $post->ID ) ) { return; } /** * Add Quiz Builder metabox. * * @since 2.6.0 */ if ( true === apply_filters( 'learndash_show_quiz_builder', $this->use_quiz_builder ) ) { $data_settings = learndash_data_upgrades_setting( 'pro-quiz-questions' ); $quiz_questions_data_upgrade_link = ''; if ( ( isset( $data_settings['last_run'] ) ) && ( ! empty( $data_settings['last_run'] ) ) ) { $admin_url = admin_url( 'admin.php?page=learndash_data_upgrades' ); $admin_url = add_query_arg( 'quiz_id', $post->ID, $admin_url ); } add_meta_box( 'learndash_quiz_builder', sprintf( // translators: placeholder: Quiz. esc_html_x( 'LearnDash %s Builder', 'placeholder: Quiz', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ) ) . $quiz_questions_data_upgrade_link, array( $this->quiz_builder, 'show_builder_box' ), $this->post_type, 'normal', 'high' ); } if ( apply_filters( 'learndash_settings_metaboxes_legacy_quiz', LEARNDASH_SETTINGS_METABOXES_LEGACY_QUIZ, $this->post_type ) ) { add_meta_box( 'learndash_quiz_advanced_aggregated', // translators: placeholder: Quiz. sprintf( esc_html_x( 'LearnDash %s Advanced Settings', 'placeholder: Quiz', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ) ), array( $this, 'quiz_advanced_page_box_advanced_settings' ), $this->post_type, 'normal', 'high' ); } /* global $wp_meta_boxes; if ( isset( $wp_meta_boxes[ $this->post_type ]['normal']['high']['learndash_quiz_builder'] ) ) { $quiz_builder_metabox = $wp_meta_boxes[ $this->post_type ]['normal']['high']['learndash_quiz_builder']; unset( $wp_meta_boxes[ $this->post_type ]['normal']['high']['learndash_quiz_builder'] ); $wp_meta_boxes[ $this->post_type ]['normal']['high'] = array_merge( array( 'learndash_quiz_builder' => $quiz_builder_metabox ), $wp_meta_boxes[ $this->post_type ]['normal']['high'] ); } */ /** * Check if the editor is classic or new Gutenberg Block editor and hide non-important metaboxes */ /* if ( ( $post ) && ( is_a( $post, 'WP_Post' ) ) ) { $user_closed_postboxes = get_user_meta( get_current_user_id(), 'closedpostboxes_' . $this->post_type, true ); if ( ( is_string( $user_closed_postboxes ) ) && ( '' === $user_closed_postboxes ) ) { if ( ( function_exists( 'use_block_editor_for_post' ) ) && ( use_block_editor_for_post( $post ) ) ) { $all_postboxes = array( 'sfwd-quiz', 'learndash_quiz_advanced', 'learndash_quiz_question_settings', 'learndash_quiz_result_options', 'learndash_quiz_mode_options', 'learndash_quiz_result_text_options', 'learndash_quiz_templates', 'learndash_quiz_leaderboard_options', 'learndash_quiz_custom_fields_options', ); } else { $all_postboxes = array( 'learndash_quiz_question_settings', 'learndash_quiz_result_options', 'learndash_quiz_mode_options', 'learndash_quiz_result_text_options', 'learndash_quiz_templates', 'learndash_quiz_leaderboard_options', 'learndash_quiz_custom_fields_options', ); } update_user_meta( get_current_user_id(), 'closedpostboxes_' . $this->post_type, $all_postboxes ); } } */ } } /** * Shows the Quiz Settings metabo. * * @since 2.6.0 * @param object $post WP_Post Question being edited. */ public function quiz_advanced_page_box_advanced_settings( $post ) { // Advanced Settings. $this->quiz_advanced_open_wrapper(); $this->quiz_advanced_section_header( sprintf( // translators: placeholder: Quiz. esc_html_x( 'LearnDash %s Advanced Settings', 'placeholder: Quiz', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ) ) ); $this->quiz_advanced_page_box( $post ); $this->quiz_advanced_close_wrapper(); $this->quiz_advanced_hr(); // Question Settings. $this->quiz_advanced_open_wrapper(); $this->quiz_advanced_section_header( sprintf( // translators: placeholder: Quiz. esc_html_x( 'LearnDash %s Question Settings', 'placeholder: Quiz', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ) ) ); $this->quiz_question_options_page_box( $post ); $this->quiz_advanced_close_wrapper(); $this->quiz_advanced_hr(); // Result Settings. $this->quiz_advanced_open_wrapper(); $this->quiz_advanced_section_header( sprintf( // translators: placeholder: Quiz. esc_html_x( 'LearnDash %s Result Settings', 'placeholder: Quiz', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ) ) ); $this->quiz_result_options_page_box( $post ); $this->quiz_advanced_close_wrapper(); $this->quiz_advanced_hr(); // Mode Settings. $this->quiz_advanced_open_wrapper(); $this->quiz_advanced_section_header( sprintf( // translators: placeholder: Quiz. esc_html_x( 'LearnDash %s Mode Settings', 'placeholder: Quiz', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ) ) ); $this->quiz_mode_options_page_box( $post ); $this->quiz_advanced_close_wrapper(); $this->quiz_advanced_hr(); // Result Text Setings. $this->quiz_advanced_open_wrapper(); $this->quiz_advanced_section_header( sprintf( // translators: placeholder: Quiz. esc_html_x( 'LearnDash %s Result Text Settings', 'placeholder: Quiz', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ) ) ); $this->quiz_custom_result_text_page_box( $post ); $this->quiz_advanced_close_wrapper(); $this->quiz_advanced_hr(); // Template Settings. $this->quiz_advanced_open_wrapper(); $this->quiz_advanced_section_header( sprintf( // translators: placeholder: Quiz. esc_html_x( 'LearnDash %s Template Settings', 'placeholder: Quiz', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ) ) ); $this->quiz_templates_page_box( $post ); $this->quiz_advanced_close_wrapper(); $this->quiz_advanced_hr(); // Leaderboard Settings. $this->quiz_advanced_open_wrapper(); $this->quiz_advanced_section_header( sprintf( // translators: placeholder: Quiz. esc_html_x( 'LearnDash %s Leaderboard Settings', 'placeholder: Quiz', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ) ) ); $this->quiz_leaderboard_options_page_box( $post ); $this->quiz_advanced_close_wrapper(); $this->quiz_advanced_hr(); // Custom Fields Settings. $this->quiz_advanced_open_wrapper(); $this->quiz_advanced_section_header( sprintf( // translators: placeholder: Quiz. esc_html_x( 'LearnDash %s Custom Fields Settings', 'placeholder: Quiz', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ) ) ); $this->quiz_custom_fields_options_page_box( $post ); $this->quiz_advanced_close_wrapper(); } /** * Display a horizontal separator. * * @since 2.6.0 */ public function quiz_advanced_hr() { ?>
init_quiz_edit( $post ); if ( ( $this->pro_quiz_edit ) && is_a( $this->pro_quiz_edit, 'WpProQuiz_View_QuizEdit' ) ) { $this->pro_quiz_edit->show_advanced( $this->_get ); } } /** * Display section header. * * @param string $title The title to be displayed. * @return void */ public function quiz_advanced_section_header( $title ) { ?>

init_quiz_edit( $post ); //if ( ( $this->pro_quiz_edit ) && is_a( $this->pro_quiz_edit, 'WpProQuiz_View_QuizEdit' ) ) { // $this->pro_quiz_edit->show_templates( $this->_get ); //} $template_mapper = new WpProQuiz_Model_TemplateMapper(); $templates = $template_mapper->fetchAll( WpProQuiz_Model_Template::TEMPLATE_TYPE_QUIZ, false ); $template_loaded_id = ''; if ( ( isset( $_GET['templateLoadId'] ) ) && ( ! empty( $_GET['templateLoadId'] ) ) ) { $template_loaded_id = intval( $_GET['templateLoadId'] ); } ?>



init_quiz_edit( $post ); if ( ( $this->pro_quiz_edit ) && is_a( $this->pro_quiz_edit, 'WpProQuiz_View_QuizEdit' ) ) { $this->pro_quiz_edit->questionOptions( $this->_get ); } } /** * Shows the Quiz Result Options metabox. * * @since 2.6.0 * @param object $post WP_Post Question being edited. */ public function quiz_result_options_page_box( $post ) { $this->init_quiz_edit( $post ); if ( ( $this->pro_quiz_edit ) && is_a( $this->pro_quiz_edit, 'WpProQuiz_View_QuizEdit' ) ) { $this->pro_quiz_edit->resultOptions( $this->_get ); } } /** * Shows the Quiz Mode Options metabox. * * @since 2.6.0 * @param object $post WP_Post Question being edited. */ public function quiz_mode_options_page_box( $post ) { $this->init_quiz_edit( $post ); if ( ( $this->pro_quiz_edit ) && is_a( $this->pro_quiz_edit, 'WpProQuiz_View_QuizEdit' ) ) { $this->pro_quiz_edit->quizMode( $this->_get ); } } /** * Shows the Quiz Leaderbord Options metabox. * * @since 2.6.0 * @param object $post WP_Post Question being edited. */ public function quiz_leaderboard_options_page_box( $post ) { $this->init_quiz_edit( $post ); if ( ( $this->pro_quiz_edit ) && is_a( $this->pro_quiz_edit, 'WpProQuiz_View_QuizEdit' ) ) { $this->pro_quiz_edit->leaderboardOptions( $this->_get ); } } /** * Shows the Quiz Custom Fields Options metabox. * * @since 2.6.0 * @param object $post WP_Post Question being edited. */ public function quiz_custom_fields_options_page_box( $post ) { $this->init_quiz_edit( $post ); if ( ( $this->pro_quiz_edit ) && is_a( $this->pro_quiz_edit, 'WpProQuiz_View_QuizEdit' ) ) { $this->pro_quiz_edit->form( $this->_get ); } } /** * Shows the Quiz Result Text metabox. * * @since 2.6.0 * @param object $post WP_Post Question being edited. */ public function quiz_custom_result_text_page_box( $post ) { $this->init_quiz_edit( $post ); if ( ( $this->pro_quiz_edit ) && is_a( $this->pro_quiz_edit, 'WpProQuiz_View_QuizEdit' ) ) { $this->pro_quiz_edit->resultText( $this->_get ); } } // End of functions. } } new Learndash_Admin_Quiz_Edit(); includes/admin/classes-posts-edits/class-learndash-admin-topic-edit.php000066600000003612152141567370022276 0ustar00post_type = learndash_get_post_type_slug( 'topic' ); parent::__construct(); } /** * On Load handler function for this post type edit. * This function is called by a WP action when the admin * page 'post.php' or 'post-new.php' are loaded. */ public function on_load() { if ( $this->post_type_check() ) { require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-display-content.php'; require_once LEARNDASH_LMS_PLUGIN_DIR . '/includes/settings/settings-metaboxes/class-ld-settings-metabox-topic-access-settings.php'; parent::on_load(); } } /** * Save metabox handler function. * * @param integer $post_id Post ID Question being edited. * @param object $post WP_Post Question being edited. * @param boolean $update If update true, else false. */ public function save_post( $post_id = 0, $post = null, $update = false ) { if ( ! $this->post_type_check( $post ) ) { return false; } if ( ! parent::save_post( $post_id, $post, $update ) ) { return false; } if ( ! empty( $this->_metaboxes ) ) { foreach ( $this->_metaboxes as $_metaboxes_instance ) { $settings_fields = array(); $settings_fields = $_metaboxes_instance->get_post_settings_field_updates( $post_id, $post, $update ); $_metaboxes_instance->save_post_meta_box( $post_id, $post, $update, $settings_fields ); } } } // End of functions. } } new Learndash_Admin_Topic_Edit(); includes/admin/classes-posts-edits/class-learndash-admin-lesson-edit.php000066600000004244152141567370022465 0ustar00post_type = learndash_get_post_type_slug( 'lesson' ); parent::__construct(); } /** * On Load handler function for this post type edit. * This function is called by a WP action when the admin * page 'post.php' or 'post-new.php' are loaded. */ public function on_load() { if ( $this->post_type_check() ) { require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-display-content.php'; require_once LEARNDASH_LMS_PLUGIN_DIR . '/includes/settings/settings-metaboxes/class-ld-settings-metabox-lesson-access-settings.php'; /** * Keep for now in case we want to access the legacy metabox logic. */ //$cpt_instance = SFWD_CPT_Instance::$instances[ $this->post_type ]; //error_log( 'cpt_instance
'. print_r( $cpt_instance, true ) .'
' ); parent::on_load(); } } /** * Save metabox handler function. * * @param integer $post_id Post ID Question being edited. * @param object $post WP_Post Question being edited. * @param boolean $update If update true, else false. */ public function save_post( $post_id = 0, $post = null, $update = false ) { if ( ! $this->post_type_check( $post ) ) { return false; } if ( ! parent::save_post( $post_id, $post, $update ) ) { return false; } if ( ! empty( $this->_metaboxes ) ) { foreach ( $this->_metaboxes as $_metaboxes_instance ) { $settings_fields = array(); $settings_fields = array_merge( $settings_fields, $_metaboxes_instance->get_post_settings_field_updates( $post_id, $post, $update ) ); $_metaboxes_instance->save_post_meta_box( $post_id, $post, $update, $settings_fields ); } } } // End of functions. } } new Learndash_Admin_Lesson_Edit(); includes/admin/classes-posts-edits/class-learndash-admin-course-edit.php000066600000017432152141567370022465 0ustar00post_type = learndash_get_post_type_slug( 'course' ); parent::__construct(); } /** * On Load handler function for this post type edit. * This function is called by a WP action when the admin * page 'post.php' or 'post-new.php' are loaded. */ public function on_load() { if ( $this->post_type_check() ) { require_once LEARNDASH_LMS_PLUGIN_DIR . '/includes/settings/settings-metaboxes/class-ld-settings-metabox-course-display-content.php'; require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/settings/settings-metaboxes/class-ld-settings-metabox-course-access-settings.php'; require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/settings/settings-metaboxes/class-ld-settings-metabox-course-navigation-settings.php'; if ( false === learndash_use_legacy_course_access_list() ) { if ( true === apply_filters( 'learndash_show_metabox_course_users', true ) ) { require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/settings/settings-metaboxes/class-ld-settings-metabox-course-users.php'; } } parent::on_load(); if ( LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Courses_Builder', 'enabled' ) == 'yes' ) { $this->use_course_builder = true; if ( apply_filters( 'learndash_show_course_builder', $this->use_course_builder ) === true ) { $this->course_builder = Learndash_Admin_Metabox_Course_Builder::add_instance( 'Learndash_Admin_Metabox_Course_Builder' ); $this->course_builder->builder_on_load(); } } $this->_metaboxes = apply_filters( 'learndash_post_settings_metaboxes_init_' . $this->post_type, $this->_metaboxes ); add_filter( 'learndash_header_data', 'LearnDash\Admin\CourseBuilderHelpers\get_course_data', 100 ); } } /** * Register Groups meta box for admin * Managed enrolled groups, users and group leaders * * @since 2.1.2 * @param string $post_type Port Type being edited. */ public function add_metaboxes( $post_type = '', $post = null ) { if ( $this->post_type_check( $post_type ) ) { //learndash_transition_course_shared_steps( $post->ID ); /** * Add Course Builder metabox. * * @since 2.5 */ if ( true === apply_filters( 'learndash_show_course_builder', $this->use_course_builder ) ) { add_meta_box( 'learndash_course_builder', sprintf( // translators: placeholder: Course. esc_html_x( 'LearnDash %s Builder', 'placeholder: Course', 'learndash' ), LearnDash_Custom_Label::get_label( 'course' ) ), array( $this->course_builder, 'show_builder_box' ), $this->post_type, 'normal', 'high' ); } parent::add_metaboxes( $post_type ); if ( current_user_can( 'edit_groups' ) ) { if ( true === apply_filters( 'learndash_show_metabox_course_groups', true ) ) { add_meta_box( 'learndash_course_groups', sprintf( // translators: placeholder: Course. esc_html_x( 'LearnDash %s Groups', 'LearnDash Course Groups', 'learndash' ), LearnDash_Custom_Label::get_label( 'course' ) ), array( $this, 'course_groups_page_box' ), $this->post_type, 'normal', 'high' ); } } } } /** * Prints content for Groups meta box for admin * * @since 2.1.2 * * @param object $post WP_Post. */ public function course_groups_page_box( $post ) { $this->course_id = $post->ID; $group_post_type = learndash_get_post_type_slug( 'group' ); ?>
course_id, 'learndash_course_groups_nonce' ); $ld_binary_selector_course_groups = new Learndash_Binary_Selector_Course_Groups( array( 'html_title' => '', 'course_id' => $this->course_id, 'selected_ids' => learndash_get_course_groups( $this->course_id, true ), 'search_posts_per_page' => 100, ) ); $ld_binary_selector_course_groups->show(); } else { // If there's an onboarding page, we render it. if ( file_exists( LEARNDASH_LMS_PLUGIN_DIR . "/includes/admin/onboarding-templates/onboarding-{$group_post_type}.php" ) ) { include_once LEARNDASH_LMS_PLUGIN_DIR . "/includes/admin/onboarding-templates/onboarding-{$group_post_type}.php"; } } ?>
post_type_check( $post ) ) { return false; } if ( ! parent::save_post( $post_id, $post, $update ) ) { return false; } /** * Verify this came from the our screen and with proper authorization, * because save_post can be triggered at other times. */ if ( ( isset( $_POST['learndash_course_groups_nonce'] ) ) && ( wp_verify_nonce( $_POST['learndash_course_groups_nonce'], 'learndash_course_groups_nonce_' . $post_id ) ) ) { if ( ( isset( $_POST['learndash_course_groups'] ) ) && ( isset( $_POST['learndash_course_groups'][ $post_id ] ) ) && ( ! empty( $_POST['learndash_course_groups'][ $post_id ] ) ) ) { $course_groups = (array) json_decode( stripslashes( $_POST['learndash_course_groups'][ $post_id ] ) ); learndash_set_course_groups( $post_id, $course_groups ); } } /* if ( ( isset( $_POST['learndash_course_users_nonce'] ) ) && ( wp_verify_nonce( $_POST['learndash_course_users_nonce'], 'learndash_course_users_nonce_' . $post_id ) ) ) { if ( ( isset( $_POST['learndash_course_users'] ) ) && ( isset( $_POST['learndash_course_users'][ $post_id ] ) ) && ( ! empty( $_POST['learndash_course_users'][ $post_id ] ) ) ) { $course_users = (array) json_decode( stripslashes( $_POST['learndash_course_users'][ $post_id ] ) ); learndash_set_users_for_course( $post_id, $course_users ); } } */ //error_log('_metaboxes
'. print_r($this->_metaboxes, true) .'
'); if ( ! empty( $this->_metaboxes ) ) { foreach ( $this->_metaboxes as $_metaboxes_instance ) { $settings_fields = array(); $settings_fields = $_metaboxes_instance->get_post_settings_field_updates( $post_id, $post, $update ); $_metaboxes_instance->save_post_meta_box( $post_id, $post, $update, $settings_fields ); } } /** * Save Course Builder * Within CB will be security checks. */ if ( apply_filters( 'learndash_show_course_builder', $this->use_course_builder ) === true ) { $this->course_builder->save_course_builder( $post_id, $post, $update ); } } // End of functions. } } new Learndash_Admin_Course_Edit(); includes/admin/ld-admin-columns.php000066600000003745152141567370013346 0ustar00 array( 'post_type' => 'sfwd-courses', '' 'label' => sprintf( // translators: placeholder: Course. esc_html_x( '%s', 'placeholder: Course', 'learndash' ), LearnDash_Custom_Label::get_label( 'course' ), ), ) ); */ } // End of functions. } // End of Class. }includes/admin/class-learndash-admin-posts-edit.php000066600000034626152141567370016430 0ustar00post_type === $edit_post->post_type ) ) { return true; } elseif ( ( is_string( $edit_post ) ) && ( $this->post_type === $edit_post ) ) { return true; } } elseif ( ( ! empty( $typenow ) ) && ( $typenow === $this->post_type ) ) { return true; } return false; } /** * On Load handler function for this post type edit. * This function is called by a WP action when the admin * page 'post.php' or 'post-new.php' are loaded. */ public function on_load() { global $sfwd_lms; global $learndash_assets_loaded; if ( $this->post_type_check() ) { $this->_metaboxes = apply_filters( 'learndash_post_settings_metaboxes_init_' . $this->post_type, $this->_metaboxes ); if ( ( isset( $_GET['post'] ) ) && ( ! empty( $_GET['post'] ) ) ) { $this->post_id = absint( $_GET['post'] ); } if ( ( ! empty( $this->_metaboxes ) ) && ( ! empty( $this->post_id ) ) ) { $sfwd_lms_instance_fields = $sfwd_lms->get_post_args_section( $this->post_type, 'fields' ); if ( ( is_array( $sfwd_lms_instance_fields ) ) && ( ! empty( $sfwd_lms_instance_fields ) ) ) { foreach ( $this->_metaboxes as $_metaboxes_instance ) { $sfwd_lms_instance_fields = $_metaboxes_instance->check_legacy_metabox_fields( $sfwd_lms_instance_fields ); } } if ( empty( $sfwd_lms_instance_fields ) ) { global $wp_meta_boxes; if ( isset( $wp_meta_boxes[ $this->post_type ] ) ) { foreach ( $wp_meta_boxes[ $this->post_type ] as &$m_sections ) { if ( ! empty( $m_sections ) ) { foreach ( $m_sections as $m_priority => &$m_boxes ) { if ( isset( $m_boxes[ $this->post_type ] ) ) { unset( $m_boxes[ $this->post_type ] ); } } } } } } else { $screen = get_current_screen(); global $learndash_metaboxes; if ( ! isset( $learndash_metaboxes[ $screen->id ] ) ) { $learndash_metaboxes[ $screen->id ] = array(); } $learndash_metaboxes[ $screen->id ][ $screen->id ] = $screen->id; } } if ( ! isset( $learndash_assets_loaded['styles']['learndash-admin-binary-selector-script'] ) ) { wp_enqueue_script( 'learndash-admin-binary-selector-script', LEARNDASH_LMS_PLUGIN_URL . 'assets/js/learndash-admin-binary-selector' . leardash_min_asset() . '.js', array( 'jquery' ), LEARNDASH_SCRIPT_VERSION_TOKEN, true ); $learndash_assets_loaded['styles']['learndash-admin-binary-selector-script'] = __FUNCTION__; } if ( ! isset( $learndash_assets_loaded['styles']['learndash-admin-binary-selector-style'] ) ) { wp_enqueue_style( 'learndash-admin-binary-selector-style', LEARNDASH_LMS_PLUGIN_URL . 'assets/css/learndash-admin-binary-selector' . leardash_min_asset() . '.css', array(), LEARNDASH_SCRIPT_VERSION_TOKEN ); wp_style_add_data( 'learndash-admin-binary-selector-style', 'rtl', 'replace' ); $learndash_assets_loaded['styles']['learndash-admin-binary-selector-style'] = __FUNCTION__; } learndash_admin_settings_page_assets(); if ( ! isset( $learndash_assets_loaded['styles']['learndash-admin-style'] ) ) { wp_enqueue_style( 'learndash-admin-style', LEARNDASH_LMS_PLUGIN_URL . 'assets/css/learndash-admin-style' . leardash_min_asset() . '.css', array(), LEARNDASH_SCRIPT_VERSION_TOKEN ); wp_style_add_data( 'learndash-admin-style', 'rtl', 'replace' ); $learndash_assets_loaded['styles']['learndash-admin-style'] = __FUNCTION__; } $filepath = SFWD_LMS::get_template( 'learndash_pager.css', null, null, true ); if ( ( ! empty( $filepath ) ) && ( ! isset( $learndash_assets_loaded['styles']['learndash_pager_css'] ) ) ) { wp_enqueue_style( 'learndash_pager_css', learndash_template_url_from_path( $filepath ), array(), LEARNDASH_SCRIPT_VERSION_TOKEN ); wp_style_add_data( 'learndash_pager_css', 'rtl', 'replace' ); $learndash_assets_loaded['styles']['learndash_pager_css'] = __FUNCTION__; } $filepath = SFWD_LMS::get_template( 'learndash_pager.js', null, null, true ); if ( ( ! empty( $filepath ) ) && ( ! isset( $learndash_assets_loaded['scripts']['learndash_pager_js'] ) ) ) { wp_enqueue_script( 'learndash_pager_js', learndash_template_url_from_path( $filepath ), array( 'jquery' ), LEARNDASH_SCRIPT_VERSION_TOKEN, true ); $learndash_assets_loaded['scripts']['learndash_pager_js'] = __FUNCTION__; } if ( isset( $_GET['ld_reset_metaboxes'] ) ) { delete_user_meta( get_current_user_id(), 'closedpostboxes_' . $this->post_type ); delete_user_meta( get_current_user_id(), 'metaboxhidden_' . $this->post_type ); delete_user_meta( get_current_user_id(), 'meta-box-order_' . $this->post_type ); } // Add Metabox and hook for saving post metabox. add_action( 'add_meta_boxes', array( $this, 'add_metaboxes' ), 30, 2 ); } } /** * Check superglobal data. * * @since 2.6.0 * @param mixed $data Array data or null. * @return array filtered data. */ protected function clear_request_data( $data = null ) { if ( null !== $data ) { $data = stripslashes_deep( $data ); } return $data; } /** * Called from WP at the start of the post edit
tag. Allows us * to inject needed support fields. * * @since 3.0 * @param object $post WP Post object instance being edited. */ public function edit_form_top( $post ) { if ( $this->post_type_check() ) { $current_tab = ''; if ( isset( $_GET['currentTab'] ) ) { $current_tab = esc_attr( $_GET['currentTab'] ); } echo ''; } } /** * Called from WP when saving a post edit form. This filter allows us * to interject a 'currentTab' query string variable. * * @since 3.0 * @param string $location URL to redirect to after edit post processing. * @param integer $post_id Post ID of item being edited. * @return string $location URL. */ public function redirect_post_location( $location = '', $post_id = 0 ) { if ( ( ! empty( $location ) ) && ( ! empty( $post_id ) ) ) { $post_type = get_post_type( $post_id ); if ( $this->post_type_check( $post_type ) ) { if ( ( isset( $_POST['ld_post_edit_current_tab'] ) ) && ( ! empty( $_POST['ld_post_edit_current_tab'] ) ) ) { $current_tab = esc_attr( $_POST['ld_post_edit_current_tab'] ); $location = add_query_arg( 'currentTab', $current_tab, $location ); } } return $location; } } /** * Override Gutenberg placeholder title shown when adding new post. * * @since 2.6.0 * @param string $placeholder_title Placeholder title to be shown. Default is 'Add title'. * @param object $post WP_Post instance of post_type being added. * @return string $placeholder_title. */ public function gutenberg_placeholder_enter_title_here( $placeholder_title = '', $post = null ) { if ( $this->post_type_check( $post ) ) { $post_type_object = get_post_type_object( $post->post_type ); $placeholder_title = sprintf( // translators: placeholders: Post Type singular label. esc_html_x( 'Add %s title', 'placeholders: Post Type singular label', 'learndash' ), $post_type_object->labels->singular_name ); } // Always return $placeholder_text. return $placeholder_title; } /** * Override Gutenberg placeholder text shown when adding new post. * * @since 2.6.0 * @param string $placeholder_text Placeholder text to be shown. Default is 'Write your story'. * @param object $post WP_Post instance of post_type being added. * @return string $placeholder_text. */ public function gutenberg_placeholder_write_your_story( $placeholder_text = ' ', $post = null ) { if ( $this->post_type_check( $post ) ) { $post_type_object = get_post_type_object( $post->post_type ); $placeholder_text = sprintf( // translators: placeholders: Post Type singular label. esc_html_x( 'Add %s content.', 'placeholders: Post Type singular label', 'learndash' ), $post_type_object->labels->singular_name ); } // Always return $placeholder_text. return $placeholder_text; } /** * Save Question handler function. * * @since 2.6.0 * @param integer $post_id Post ID Question being edited. * @param object $post WP_Post Question being edited. * @param boolean $update If update true, else false. */ public function save_post( $post_id = 0, $post = null, $update = false ) { if ( ! $this->post_type_check() ) { return false; } // If this is just a revision, don't send the email. if ( wp_is_post_revision( $post_id ) ) { return false; } if ( ! isset( $_POST['post_type'] ) ) { return false; } if ( $_POST['post_type'] !== $this->post_type ) { return false; } // Check permissions. if ( ! current_user_can( 'edit_courses', $post_id ) ) { return false; } // Clear the oEmbed post cache. $this->post_clear_oembed_cache( $post_id ); return true; } /** * Filter post_parent before update/insert. Ensure the post_parent fiel is zero for course post types. * @since 3.1 * @param integer $post_parent Post Parent post ID. * @param integer $post_id Post ID being edited. * @param array $new_postarr Array of updated POST fields to be saved. * @param array $postarr Array of previous POST fields to be saved. * @return integer $post_parent */ public function filter_post_parent( $post_parent = 0, $post_id = 0, $new_postarr = array(), $postarr = array() ) { if ( $this->post_type_check() ) { $course_post_types = LDLMS_Post_Types::get_post_types( 'course' ); if ( ( ! empty( $course_post_types ) ) && ( in_array( $this->post_type, $course_post_types ) ) ) { $post_parent = 0; } } return $post_parent; } /** * Register metaboxes for Question edit. * * @since 2.6.0 * @param string $post_type Port Type being edited. */ public function add_metaboxes( $post_type = '' ) { if ( $this->post_type_check( $post_type ) ) { // If we are showing a course or related 'step' we show the Assoc Content metabox. $course_post_types = LDLMS_Post_Types::get_post_types( 'course' ); if ( ( ! empty( $course_post_types ) ) && ( in_array( $this->post_type, $course_post_types ) ) ) { add_meta_box( 'learndash_course_navigation_admin_meta', esc_html__( 'Associated Content', 'learndash' ), 'learndash_course_navigation_admin_box_content', $this->post_type, 'side', 'high' ); } if ( ( true === is_data_upgrade_quiz_questions_updated() ) && ( LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Quizzes_Builder', 'enabled' ) === 'yes' ) ) { // If we are showing a Quiz or Question we show the Quiz Questions metabox. $quiz_post_types = LDLMS_Post_Types::get_post_types( 'quiz' ); if ( ( ! empty( $quiz_post_types ) ) && ( in_array( $this->post_type, $quiz_post_types ) ) ) { add_meta_box( 'learndash_admin_quiz_navigation', sprintf( // translators: placeholders: Quiz, Questions. esc_html_x( '%1$s %2$s %3$s', 'placeholders: Quiz, Questions', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ), LearnDash_Custom_Label::get_label( 'questions' ), '' ), 'learndash_quiz_navigation_admin_box_content', $this->post_type, 'side', 'high' ); } } } } /** * Clear the Post oEmbed cache. * * This is mostly needed for Lessons and Topics when * using the Video Progression logic. But we are * supporting this on all LD post types. * * @since 3.1.4 * @param integer $post_id ID of Post to clear cache for. */ public function post_clear_oembed_cache( $post_id = 0 ) { if ( ! empty( $post_id ) ) { $wp_embed = new WP_Embed(); $wp_embed->delete_oembed_caches( $post_id ); } } // End of functions. } } // Incldue the LearnDash table listing files here. require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/admin/classes-posts-edits/class-learndash-admin-course-edit.php'; require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/admin/classes-posts-edits/class-learndash-admin-lesson-edit.php'; require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/admin/classes-posts-edits/class-learndash-admin-topic-edit.php'; require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/admin/classes-posts-edits/class-learndash-admin-quiz-edit.php'; require_once LEARNDASH_LMS_PLUGIN_DIR . 'includes/admin/classes-posts-edits/class-learndash-admin-question-edit.php'; includes/admin/ld-quiz-builder-helpers.php000066600000014451152141567370014650 0ustar00fetch( $question_pro_id ); } else { $question_model = $question_mapper->fetch( null ); } $question_data = $question_model->get_object_as_array(); $controller_question = new \WpProQuiz_Controller_Question(); if ( $question_model && is_a( $question_model, 'WpProQuiz_Model_Question' ) ) { $answers_data = $controller_question->setAnswerObject( $question_model ); } else { $answers_data = $controller_question->setAnswerObject(); } // Store answers in our format used at FE. $processed_answers = []; foreach ( $answers_data as $answer_type => $answers ) { foreach ( $answers as $answer ) { $processed_answers[ $answer_type ][] = [ 'answer' => $answer->getAnswer(), 'html' => $answer->isHtml(), 'points' => $answer->getPoints(), 'correct' => $answer->isCorrect(), 'sortString' => $answer->getSortString(), 'sortStringHtml' => $answer->isSortStringHtml(), 'graded' => $answer->isGraded(), 'gradingProgression' => $answer->getGradingProgression(), 'gradedType' => $answer->getGradedType(), 'type' => 'answer', ]; } } // Output question's data and answers. $output_questions[] = [ 'ID' => $question_id, 'expanded' => false, 'post_title' => $question_data['_title'], 'post_content' => $question_data['_question'], 'edit_link' => get_edit_post_link( $question_id, '' ), 'type' => get_post_type( $question_id ), 'question_type' => $question_data['_answerType'], 'points' => $question_data['_points'], 'answers' => $processed_answers, 'correctMsg' => $question_data['_correctMsg'], 'incorrectMsg' => $question_data['_incorrectMsg'], 'correctSameText' => $question_data['_correctSameText'], 'tipEnabled' => $question_data['_tipEnabled'], 'tipMsg' => $question_data['_tipMsg'], ]; } } } // Output all the quiz's questions. $data['outline'] = [ 'questions' => $output_questions, ]; // Add labels and data to Quiz Builder at FE. $data['labels']['questions_types'] = $GLOBALS['learndash_question_types']; $data['questions_types_map'] = [ 'single' => 'classic_answer', 'multiple' => 'classic_answer', 'sort_answer' => 'sort_answer', 'matrix_sort_answer' => 'matrix_sort_answer', 'cloze_answer' => 'cloze_answer', 'free_answer' => 'free_answer', 'assessment_answer' => 'assessment_answer', 'essay' => 'essay', ]; $data['labels']['points'] = [ 'singular' => esc_html__( 'point', 'learndash' ), 'plural' => esc_html__( 'points', 'learndash' ), ]; $data['labels']['questions_types_description'] = [ 'free_answer' => esc_html_x( 'correct answers (one per line) (answers will be converted to lower case)', 'Question type description for Free Answers', 'learndash' ), 'sort_answer' => esc_html_x( 'Please sort the answers in the right order with the "move" button. The answers will be displayed randomly.', 'Question type description for Sort Answers', 'learndash' ), 'cloze_answer' => [ wp_kses_post( __( 'Use { } to mark a gap and correct answer:
I {play} soccer.', 'learndash' ) ), wp_kses_post( __( 'Use [ ] to mark multiple correct answers:
I {[love][hate]} soccer.', 'learndash' ) ), ], 'essay' => [ esc_html__( 'How should the user submit their answer?', 'learndash' ), sprintf( // translators: placeholders: course esc_html_x( 'This is a question that can be graded and potentially prevent a user from progressing to the next step of the %s.', 'placeholders: course', 'learndash' ), \learndash_get_custom_label_lower( 'course' ) ), esc_html__( 'The user can only progress if the essay is marked as "Graded" and if the user has enough points to move on.', 'learndash' ), sprintf( // translators: placeholders: quiz esc_html_x( 'How should the answer to this question be marked and graded upon %s submission?', 'placeholders: quiz', 'learndash' ), \learndash_get_custom_label_lower( 'quiz' ) ), ], 'assessment_answer' => [ wp_kses_post( __( 'Use { } to mark an assessment:
Less true { [1] [2] [3] [4] [5] } More true', 'learndash' ) ), wp_kses_post( __( 'Use [ ] to mark selectable items:
Less true { [A] [B] [C] } More true', 'learndash' ) ), ], ]; return $data; } //add_filter( 'learndash_header_data', 'LearnDash\Admin\QuizBuilderHelpers\get_quiz_data', 100 ); includes/admin/classes-posts-listings/class-learndash-admin-topics-listing.php000066600000011461152141567370023732 0ustar00post_type = 'sfwd-topic'; parent::__construct(); } /** * Call via the WordPress load sequence for admin pages. */ public function on_load_edit() { global $typenow, $post; if ( ( empty( $typenow ) ) || ( $typenow !== $this->post_type ) ) { return; } $this->post_type_selectors = array( 'course_id' => array( 'query_args' => array( 'post_type' => learndash_get_post_type_slug( 'course' ), ), 'query_arg' => 'course_id', 'selected' => 0, 'field_name' => 'course_id', 'field_id' => 'course_id', 'show_all_value' => '', 'show_all_label' => sprintf( // translators: placeholder: Courses. esc_html_x( 'Show All %s', 'placeholder: Courses', 'learndash' ), LearnDash_Custom_Label::get_label( 'courses' ) ), 'lazy_load' => true, //'show_empty_value' => 'empty', //'show_empty_label' => sprintf( // // translators: placeholder: Courses. // esc_html_x( '-- No %s --', 'placeholder: Courses', 'learndash' ), // LearnDash_Custom_Label::get_label( 'courses' ) //), ), 'lesson_id' => array( 'query_args' => array( 'post_type' => learndash_get_post_type_slug( 'lesson' ), ), 'query_arg' => 'lesson_id', 'selected' => 0, 'field_name' => 'lesson_id', 'field_id' => 'lesson_id', 'show_all_value' => '', 'show_all_label' => sprintf( // translators: placeholder: Lessons. esc_html_x( 'Show All %s', 'placeholder: Lessons', 'learndash' ), LearnDash_Custom_Label::get_label( 'lessons' ) ), 'lazy_load' => false, ), ); parent::on_load_edit(); add_filter( 'learndash_show_post_type_selector_filter', array( $this, 'filter_quiz_lesson_selector' ), 30, 2 ); //add_action( 'learndash_post_listing_after_option', array( $this, 'learndash_post_listing_after_option' ), 30, 3 ); } /** * Filter the selector filters. * * @param array $query_args Query Args for Selector. * @param string $post_type Post Type slug for selector. */ public function filter_quiz_lesson_selector( $query_args = array(), $post_type = '' ) { global $sfwd_lms; // Check that the selector post type matches for out listing post type. if ( $post_type === $this->post_type ) { if ( isset( $query_args['post_type'] ) ) { if ( ( ( is_string( $query_args['post_type'] ) ) && ( learndash_get_post_type_slug( 'lesson' ) === $query_args['post_type'] ) ) || ( ( is_array( $query_args['post_type'] ) ) && ( in_array( learndash_get_post_type_slug( 'lesson' ), $query_args['post_type'] ) ) ) ) { if ( ( isset( $_GET['course_id'] ) ) && ( ! empty( $_GET['course_id'] ) ) ) { $lessons_items = $sfwd_lms->select_a_lesson_or_topic( absint( $_GET['course_id'] ), false, false ); if ( ! empty( $lessons_items ) ) { $query_args['post__in'] = array_keys( $lessons_items ); $query_args['orderby'] = 'post__in'; } else { $query_args['post__in'] = array( 0 ); } } else { $query_args['post__in'] = array( 0 ); } } } } return $query_args; } public function learndash_post_listing_after_option( $post, $query_args = array(), $post_type = '' ) { global $sfwd_lms; // Check that the selector post type matches for out listing post type. if ( $post_type === $this->post_type ) { if ( ( ( is_string( $query_args['post_type'] ) ) && ( learndash_get_post_type_slug( 'lesson' ) === $query_args['post_type'] ) ) || ( ( is_array( $query_args['post_type'] ) ) && ( in_array( learndash_get_post_type_slug( 'lesson' ), $query_args['post_type'] ) ) ) ) { if ( ( isset( $_GET['course_id'] ) ) && ( ! empty( $_GET['course_id'] ) ) ) { $lessons_topics = learndash_get_topic_list( $post->ID, absint( $_GET['course_id'] ) ); if ( ! empty( $lessons_topics ) ) { foreach ( $lessons_topics as $topic ) { $selected = ''; if ( ( isset( $_GET['lesson_id'] ) ) && ( ! empty( $_GET['lesson_id']) ) ) { $selected = selected( absint( $_GET['lesson_id'] ), $topic->ID, false ); } echo ''; } } } } } } // End of functions. } } new Learndash_Admin_Topics_Listing(); includes/admin/classes-posts-listings/class-learndash-admin-lessons-listing.php000066600000010505152141567370024115 0ustar00post_type = 'sfwd-lessons'; parent::__construct(); } /** * Call via the WordPress load sequence for admin pages. */ public function on_load_edit() { global $typenow, $post; if ( ( empty( $typenow ) ) || ( $typenow !== $this->post_type ) ) { return; } $this->post_type_selectors = array( 'course_id' => array( 'query_args' => array( 'post_type' => learndash_get_post_type_slug( 'course' ), ), 'query_arg' => 'course_id', 'selected' => ( isset( $_GET['course_id'] ) ) ? absint( $_GET['course_id'] ) : 0, 'field_name' => 'course_id', 'field_id' => 'course_id', 'show_all_value' => '', 'show_all_label' => sprintf( // translators: placeholder: Courses. esc_html_x( 'Show All %s', 'placeholder: Courses', 'learndash' ), LearnDash_Custom_Label::get_label( 'courses' ) ), 'lazy_load' => true, //'show_empty_value' => 'empty', //'show_empty_label' => sprintf( // // translators: placeholder: Courses. // esc_html_x( '-- No %s --', 'placeholder: Courses', 'learndash' ), // LearnDash_Custom_Label::get_label( 'courses' ) //), ), ); parent::on_load_edit(); add_filter( 'learndash_show_post_type_selector_filter', array( $this, 'filter_quiz_lesson_selector' ), 30, 2 ); //add_action( 'learndash_post_listing_after_option', array( $this, 'learndash_post_listing_after_option' ), 30, 3 ); } /** * Filter the selector filters. * * @param array $query_args Query Args for Selector. * @param string $post_type Post Type slug for selector. */ public function filter_quiz_lesson_selector( $query_args = array(), $post_type = '' ) { global $sfwd_lms; // Check that the selector post type matches for out listing post type. if ( $post_type === $this->post_type ) { if ( isset( $query_args['post_type'] ) ) { if ( ( ( is_string( $query_args['post_type'] ) ) && ( learndash_get_post_type_slug( 'lesson' ) === $query_args['post_type'] ) ) || ( ( is_array( $query_args['post_type'] ) ) && ( in_array( learndash_get_post_type_slug( 'lesson' ), $query_args['post_type'] ) ) ) ) { if ( ( isset( $_GET['course_id'] ) ) && ( ! empty( $_GET['course_id'] ) ) ) { $lessons_items = $sfwd_lms->select_a_lesson_or_topic( absint( $_GET['course_id'] ), false, false ); if ( ! empty( $lessons_items ) ) { $query_args['post__in'] = array_keys( $lessons_items ); $query_args['orderby'] = 'post__in'; } else { $query_args['post__in'] = array( 0 ); } } else { $query_args['post__in'] = array( 0 ); } } } } return $query_args; } public function learndash_post_listing_after_option( $post, $query_args = array(), $post_type = '' ) { global $sfwd_lms; // Check that the selector post type matches for out listing post type. if ( $post_type === $this->post_type ) { if ( ( ( is_string( $query_args['post_type'] ) ) && ( learndash_get_post_type_slug( 'lesson' ) === $query_args['post_type'] ) ) || ( ( is_array( $query_args['post_type'] ) ) && ( in_array( learndash_get_post_type_slug( 'lesson' ), $query_args['post_type'] ) ) ) ) { if ( ( isset( $_GET['course_id'] ) ) && ( ! empty( $_GET['course_id'] ) ) ) { $lessons_topics = learndash_get_topic_list( $post->ID, absint( $_GET['course_id'] ) ); if ( ! empty( $lessons_topics ) ) { foreach ( $lessons_topics as $topic ) { $selected = ''; if ( ( isset( $_GET['lesson_id'] ) ) && ( ! empty( $_GET['lesson_id'] ) ) ) { $selected = selected( absint( $_GET['lesson_id'] ), $topic->ID, false ); } echo ''; } } } } } } // End of functions. } } new Learndash_Admin_Lessons_Listing(); includes/admin/classes-posts-listings/class-learndash-admin-courses-listing.php000066600000004255152141567370024117 0ustar00post_type = 'sfwd-courses'; parent::__construct(); } /** * Call via the WordPress load sequence for admin pages. */ public function on_load_edit() { global $typenow, $post; if ( ( empty( $typenow ) ) || ( $typenow !== $this->post_type ) ) { return; } add_filter( 'post_row_actions', array( $this, 'post_row_actions' ), 20, 2 ); parent::on_load_edit(); } /** * Add Course Builder link to Courses row action array. * * @since 2.5.0 * * @param array $row_actions Existing Row actions for course. * @param WP_Post $course_post Course Post object for current row. * * @return array $row_actions */ public function post_row_actions( $row_actions = array(), $course_post = null ) { global $typenow, $post; if ( ( $typenow === $this->post_type ) && ( LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Courses_Builder', 'enabled' ) == 'yes' ) && ( ! isset( $row_actions['ld-course-builder'] ) ) ) { if ( apply_filters( 'learndash_show_course_builder_row_actions', true, $course_post ) === true ) { $course_label = sprintf( // translators: placeholder: Course. esc_html_x( 'Use %s Builder', 'placeholder: Course', 'learndash' ), LearnDash_Custom_Label::get_label( 'course' ) ); $row_actions['ld-course-builder'] = sprintf( '%s', add_query_arg( array( 'currentTab' => 'learndash_course_builder', ), get_edit_post_link( $course_post->ID ) ), esc_attr( $course_label ), esc_html__( 'Builder', 'learndash' ) ); } } return $row_actions; } // End of functions. } } new Learndash_Admin_Courses_Listing(); includes/admin/classes-posts-listings/class-learndash-admin-questions-listing.php000066600000036367152141567370024477 0ustar00post_type = 'sfwd-question'; parent::__construct(); } /** * Call via the WordPress load sequence for admin pages. */ public function on_load_edit() { global $typenow, $post; if ( ( empty( $typenow ) ) || ( $typenow !== $this->post_type ) ) { return; } $this->columns = array( 'question_type' => esc_html__( 'Type', 'learndash' ), 'question_points' => esc_html__( 'Points', 'learndash' ), 'question_quiz' => sprintf( // translators: placeholder: Quiz. esc_html_x( 'Assigned %s', 'placeholder: Quiz', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ) ), ); if ( LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Quizzes_Builder', 'shared_questions' ) == 'yes' ) { unset( $this->columns['question_quiz'] ); } if ( LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Questions_Taxonomies', 'proquiz_question_category' ) == 'yes' ) { $this->columns['proquiz_question_category'] = sprintf( // translators: placeholder: Question. esc_html_x( '%s Category', 'placeholder: Question', 'learndash' ), LearnDash_Custom_Label::get_label( 'question' ) ); } $this->post_type_selectors = array( 'quiz_id' => array( 'query_args' => array( 'post_type' => 'sfwd-quiz', ), 'query_arg' => 'quiz_id', 'selected' => 0, 'field_name' => 'quiz_id', 'field_id' => 'quiz_id', 'show_all_value' => '', 'show_all_label' => sprintf( // translators: placeholder: Quizzes. esc_html_x( 'Show All %s', 'placeholder: Quizzes', 'learndash' ), LearnDash_Custom_Label::get_label( 'quizzes' ) ), 'show_empty_value' => 'empty', 'show_empty_label' => sprintf( // translators: placeholder: Quiz. esc_html_x( '-- No %s --', 'placeholder: Quiz', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ) ), ), ); add_action( 'admin_footer', array( $this, 'admin_footer' ) ); parent::on_load_edit(); } /** * Hook into the WP admin footer logic to add custom JavaScript to replce the default page title. */ public function admin_footer() { global $post_type, $post_type_object; if ( ( ! is_admin() ) || ( $post_type !== $this->post_type ) ) { return; } if ( isset( $_GET['quiz_id'] ) ) { $quiz_id = absint( $_GET['quiz_id'] ); if ( ! empty( $quiz_id ) ) { $quizzes_url = add_query_arg( 'post_type', learndash_get_post_type_slug( 'quiz' ), admin_url( 'edit.php' ) ); $new_title = '' . LearnDash_Custom_Label::get_label( 'quizzes' ) . ' > ' . get_the_title( $quiz_id ) . ' - ' . esc_html( $post_type_object->labels->name ); $post_new_file = add_query_arg( array( 'post_type' => $post_type, 'quiz_id' => $quiz_id, ), 'post-new.php' ); $add_new_url = admin_url( $post_new_file ); ?> '', 'answer_type' => 'single', 'category_id' => 0, 'category_name' => '', ); } } if ( ( ! empty( $column_name ) ) && ( ! empty( $post_id ) ) ) { switch ( $column_name ) { case 'question_type': if ( ( ! isset( $field_values[ $post_id ]['answer_type'] ) ) || ( empty( $field_values[ $post_id ]['answer_type'] ) ) || ( ! isset( $learndash_question_types[ $field_values[ $post_id ]['answer_type'] ] ) ) ) { $field_values[ $post_id ]['answer_type'] = 'single'; } echo esc_attr( $learndash_question_types[ $field_values[ $post_id ]['answer_type'] ] ); break; case 'question_points': if ( ( ! isset( $field_values[ $post_id ]['points'] ) ) || ( empty( $field_values[ $post_id ]['points'] ) ) ) { $question_points = 1; } echo absint( $field_values[ $post_id ]['points'] ); break; case 'question_quiz': $quiz_post_ids = get_post_meta( $post_id, 'quiz_id' ); if ( ! empty( $quiz_post_ids ) ) { if ( 1 === count( $quiz_post_ids ) ) { $row_actions = array(); foreach ( $quiz_post_ids as $quiz_post_id ) { $quiz_post_id = absint( $quiz_post_id ); if ( ! empty( $quiz_post_id ) ) { $this->show_post_link( $quiz_post_id ); $row_actions['edit'] = '' . esc_html__( 'edit', 'learndash' ) . ''; $row_actions['filter_posts'] = '' . esc_html__( 'filter', 'learndash' ) . ''; $this->show_row_actions( $row_actions ); } } } else { printf( // translators: placeholder: Group Leaders Count. esc_html_x( 'Total %d', 'Quizzes Count', 'learndash' ), count( $quiz_post_ids ) ); $quiz_names = ''; if ( count( $quiz_post_ids ) > 5 ) { $quiz_post_ids = array_slice( $quiz_post_ids, 0, 5 ); } foreach ( $quiz_post_ids as $quiz_post_id ) { $quiz_post_id = absint( $quiz_post_id ); if ( ! empty( $quiz_post_id ) ) { if ( ! empty( $quiz_names ) ) { $quiz_names .= ', '; } $quiz_names .= '' . get_the_title( $quiz_post_id ) . ''; } } if ( ! empty( $quiz_names ) ) { echo '
' . $quiz_names; } } } break; case 'proquiz_question_category': if ( ( isset( $field_values[ $post_id ]['category_id'] ) ) && ( ! empty( $field_values[ $post_id ]['category_id'] ) ) ) { $category_mapper = new WpProQuiz_Model_CategoryMapper(); $cat = $category_mapper->fetchById( $field_values[ $post_id ]['category_id'] ); if ( ( $cat ) && ( is_a( $cat, 'WpProQuiz_Model_Category' ) ) ) { echo '' . stripslashes( $cat->getCategoryName() ) . ''; } } break; } } } /** * Function to show selectors before the post_type selectors. */ protected function show_early_selectors() { global $learndash_question_types; /** * Filter selector for Question Types. */ if ( ! empty( $learndash_question_types ) ) { echo ''; } /** * Filter selector for legacy ProQuiz Question Categories. */ $categoryMapper = new WpProQuiz_Model_CategoryMapper(); $question_pro_categories = $categoryMapper->fetchAll(); if ( ! empty( $question_pro_categories ) ) { if ( ( isset( $_GET['question_pro_category'] ) ) && ( ! empty( $_GET['question_pro_category'] ) ) ) { $selected_question_pro_category = esc_attr( $_GET['question_pro_category'] ); } else { $selected_question_pro_category = ''; } echo ''; } } /** * This function fill filter the table listing items based on filters selected. * Called via 'parse_query' filter from WP. * * @since 2.6.0 * @param object $query WP_Query instance. */ public function parse_query_table_filter( $query ) { global $typenow, $post; if ( ( empty( $typenow ) ) || ( $typenow !== $this->post_type ) ) { return; } if ( ! $query->is_main_query() ) { return; } parent::parse_query_table_filter( $query ); // Holds the included question ids. $questions_include = ''; if ( ( isset( $_GET['quiz_id'] ) ) && ( ! empty( $_GET['quiz_id'] ) ) ) { $question_ids = array(); if ( $this->post_type_selectors['quiz_id']['show_empty_value'] === $_GET['quiz_id'] ) { $query_args = array( 'post_type' => learndash_get_post_type_slug( 'question' ), 'posts_per_page' => -1, 'post_status' => 'publish', 'fields' => 'ids', 'orderby' => 'title', 'order' => 'ASC', 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'quiz_id', 'compare' => 'NOT EXISTS', ), array( 'key' => 'quiz_id', 'value' => '0', 'compare' => '=', ), ), ); $query_results = new WP_Query( $query_args ); if ( ( is_a( $query_results, 'WP_Query' ) ) && ( property_exists( $query_results, 'posts' ) ) ) { if ( ! empty( $query_results->posts ) ) { $questions_include = $query_results->posts; $query->query_vars['post__in'] = $query_results->posts; $query->query_vars['orderby'] = 'post__in'; } else { $query->query_vars['post__in'] = array( 0 ); } } else { $query->query_vars['post__in'] = array( 0 ); } } else { $questions_include = array(); $ld_quiz_questions_object = LDLMS_Factory_Post::quiz_questions( absint( $_GET['quiz_id'] ) ); $question_post_ids = $ld_quiz_questions_object->get_questions(); if ( ! empty( $question_post_ids ) ) { $questions_include = array_keys( $question_post_ids ); } $questions_query_args = array( 'post_type' => learndash_get_post_type_slug( 'question' ), 'posts_per_page' => -1, 'fields' => 'ids', 'orderby' => 'menu_order', 'order' => 'ASC', 'meta_query' => array( array( 'key' => 'quiz_id', 'value' => absint( $_GET['quiz_id'] ), 'compare' => '=', ), ), ); if ( ( isset( $question_post_ids ) ) && ( ! empty( $question_post_ids ) ) ) { $questions_query_args['post__not_in'] = $question_post_ids; } $questions_query = new WP_Query( $questions_query_args ); if ( ( is_a( $questions_query, 'WP_Query' ) ) && ( property_exists( $questions_query, 'posts' ) ) && ( ! empty( $questions_query->posts ) ) ) { $questions_include = array_merge( $questions_include, $questions_query->posts ); } if ( ! empty( $questions_include ) ) { $query->query_vars['post__in'] = $questions_include; $query->query_vars['orderby'] = 'post__in'; } else { $query->query_vars['post__in'] = array( 0 ); } } } if ( ( isset( $_GET['question_type'] ) ) && ( ! empty( $_GET['question_type'] ) ) ) { if ( ! isset( $query->query_vars['meta_query'] ) ) { $query->query_vars['meta_query'] = array(); } $query->query_vars['meta_query'][] = array( 'key' => 'question_type', 'value' => esc_attr( $_GET['question_type'] ), 'compare' => '=', ); } if ( ( isset( $_GET['question_pro_category'] ) ) && ( ! empty( $_GET['question_pro_category'] ) ) ) { if ( ! isset( $query->query_vars['meta_query'] ) ) { $query->query_vars['meta_query'] = array(); } $query->query_vars['meta_query'][] = array( 'key' => 'question_pro_category', 'value' => esc_attr( $_GET['question_pro_category'] ), 'compare' => '=', ); } } /** * Initial hook for deleting a post. * * For the Questions post type we want to also remove the ProQuiz Question. So we grab * the reference from the post meta for 'question_pro_id'. * * @since 2.6.5 * @param integer $post_id $Post ID to be deleted. */ public function before_delete_post( $post_id = 0 ) { global $post_type, $post_type_object; if ( ( ! is_admin() ) || ( $post_type !== $this->post_type ) ) { return; } $post_id = absint( $post_id ); if ( ( ! empty( $post_id ) ) && ( current_user_can( 'delete_post', $post_id ) ) && ( ! isset( $this->posts_to_delete[ $post_id ] ) ) ) { $question_pro_id = get_post_meta( $post_id, 'question_pro_id', true ); if ( ! empty( $question_pro_id ) ) { $this->posts_to_delete[ $post_id ] = absint( $question_pro_id ); } } } /** * Called after the post ha been deleted. * * Uses registered delete post ID * * @since 2.6.5 * @param integer $post_id $Post ID to be deleted. */ public function deleted_post( $post_id = 0 ) { global $post_type, $post_type_object; if ( ( ! is_admin() ) || ( $post_type !== $this->post_type ) ) { return; } if ( ( ! empty( $post_id ) ) && ( current_user_can( 'delete_post', $post_id ) ) && ( isset( $this->posts_to_delete[ $post_id ] ) ) ) { global $wpdb; $wpdb->delete( LDLMS_DB::get_table_name( 'quiz_question' ), array( 'id' => $this->posts_to_delete[ $post_id ], ), array( '%d' ) ); unset( $this->posts_to_delete[ $post_id ] ); } } // End of functions. } } new Learndash_Admin_Questions_Listing(); includes/admin/classes-posts-listings/class-learndash-admin-quizzes-listing.php000066600000024404152141567370024144 0ustar00post_type = 'sfwd-quiz'; parent::__construct(); } /** * Call via the WordPress load sequence for admin pages. */ public function on_load_edit() { global $typenow, $post; if ( ( empty( $typenow ) ) || ( $typenow !== $this->post_type ) ) { return; } add_filter( 'post_row_actions', array( $this, 'post_row_actions' ), 20, 2 ); $this->post_type_selectors = array( 'course_id' => array( 'query_args' => array( 'post_type' => learndash_get_post_type_slug( 'course' ), ), 'query_arg' => 'course_id', 'selected' => 0, 'field_name' => 'course_id', 'field_id' => 'course_id', 'show_all_value' => '', 'show_all_label' => sprintf( // translators: placeholder: Courses. esc_html_x( 'Show All %s', 'placeholder: Courses', 'learndash' ), LearnDash_Custom_Label::get_label( 'courses' ) ), 'lazy_load' => true, //'show_empty_value' => 'empty', //'show_empty_label' => sprintf( // // translators: placeholder: Courses. // esc_html_x( '-- No %s --', 'placeholder: Courses', 'learndash' ), // LearnDash_Custom_Label::get_label( 'courses' ) //), ), 'lesson_id' => array( 'query_args' => array( 'post_type' => learndash_get_post_type_slug( 'lesson' ), ), 'query_arg' => 'lesson_id', 'selected' => 0, 'field_name' => 'lesson_id', 'field_id' => 'lesson_id', 'show_all_value' => '', 'show_all_label' => sprintf( // translators: placeholder: Lessons. esc_html_x( 'Show All %s', 'placeholder: Lessons', 'learndash' ), LearnDash_Custom_Label::get_label( 'lessons' ) ), 'lazy_load' => false, //'show_empty_value' => 'empty', /*'show_empty_label' => sprintf( // translators: placeholder: Lessons. esc_html_x( '-- No %s --', 'placeholder: Lessons', 'learndash' ), LearnDash_Custom_Label::get_label( 'lessons' ) ),*/ ), ); parent::on_load_edit(); add_filter( 'learndash_show_post_type_selector_filter', array( $this, 'filter_quiz_lesson_selector' ), 30, 2 ); add_action( 'learndash_post_listing_after_option', array( $this, 'learndash_post_listing_after_option' ), 30, 3 ); } /** * Add Course Builder link to Courses row action array. * * @since 2.5.0 * * @param array $row_actions Existing Row actions for course. * @param WP_Post $course_post Course Post object for current row. * * @return array $row_actions */ public function post_row_actions( $row_actions = array(), $quiz_post = null ) { global $typenow, $post; if ( ( $typenow === $this->post_type ) && ( 'yes' === LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Courses_Builder', 'enabled' ) ) && ( ! isset( $row_actions['ld-course-builder'] ) ) ) { if ( ( 'yes' === LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Quizzes_Builder', 'enabled' ) ) && ( ! isset( $row_actions['ld-quiz-builder'] ) ) ) { if ( apply_filters( 'learndash_show_quiz_builder_row_actions', true, $quiz_post ) === true ) { $quiz_label = sprintf( // translators: placeholder: Quiz. esc_html_x( 'Use %s Builder', 'placeholder: Quiz', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ) ); $builder_link = add_query_arg( array( 'currentTab' => 'learndash_quiz_builder', ), get_edit_post_link( $quiz_post->ID ) ); $row_actions['ld-quiz-builder'] = sprintf( '%s', $builder_link, esc_attr( $quiz_label ), esc_html__( 'Builder', 'learndash' ) ); } } $pro_quiz_id = learndash_get_setting( $quiz_post, 'quiz_pro', true ); if ( ! empty( $pro_quiz_id ) ) { if ( ( ! isset( $row_actions['questions'] ) ) || ( empty( $row_actions['questions'] ) ) ) { if ( ( true === is_data_upgrade_quiz_questions_updated() ) && ( LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Quizzes_Builder', 'enabled' ) === 'yes' ) ) { $questions_link = add_query_arg( array( 'post_type' => learndash_get_post_type_slug( 'question' ), 'quiz_id' => $quiz_post->ID, ), admin_url( 'edit.php' ) ); } else { $questions_link = add_query_arg( array( 'page' => 'ldAdvQuiz', 'module' => 'question', 'quiz_id' => $pro_quiz_id, 'post_id' => $post->ID, ), admin_url( 'admin.php' ) ); } $questions_label = sprintf( // translators: placeholder: Quiz. esc_html_x( 'Show %s Questions', 'placeholder: Quiz', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ) ); $row_actions['questions'] = sprintf( '%s', $questions_link, esc_attr( $questions_label ), esc_html__( 'Questions', 'learndash' ) ); } if ( ( ! isset( $row_actions['statistics'] ) ) || ( empty( $row_actions['statistics'] ) ) ) { $statistics_link = add_query_arg( array( 'page' => 'ldAdvQuiz', 'module' => 'statistics', 'id' => $pro_quiz_id, 'post_id' => $quiz_post->ID, 'currentTab' => 'statistics', ), admin_url( 'admin.php?' ) ); $statistics_label = sprintf( // translators: placeholder: Quiz. esc_html_x( 'Show %s Statistics', 'placeholder: Quiz', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ) ); $row_actions['statistics'] = sprintf( '%s', $statistics_link, esc_attr( $statistics_label ), esc_html__( 'Statistics', 'learndash' ) ); } if ( ( ! isset( $row_actions['leaderboard'] ) ) || ( empty( $row_actions['leaderboard'] ) ) ) { $leaderboard_link = add_query_arg( array( 'page' => 'ldAdvQuiz', 'module' => 'toplist', 'id' => $pro_quiz_id, 'post_id' => $post->ID, 'currentTab' => 'leaderboard', ), admin_url( 'admin.php' ) ); $leaderboard_label = sprintf( // translators: placeholder: Quiz. esc_html_x( 'Show %s Leaderboard', 'placeholder: Quiz', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ) ); $row_actions['leaderboard'] = sprintf( '%s', $leaderboard_link, esc_attr( $leaderboard_label ), esc_html__( 'Leaderboard', 'learndash' ) ); } if ( ( current_user_can('wpProQuiz_export') ) && ( ! isset( $row_actions['export'] ) ) || ( empty( $row_actions['export'] ) ) ) { $export_link = add_query_arg( array( 'page' => 'ldAdvQuiz', 'quiz_id' => $post->ID, ), admin_url( 'admin.php' ) ); $export_label = sprintf( // translators: placeholder: Quiz. esc_html_x( 'Export %s', 'placeholder: Quiz', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ) ); $row_actions['export'] = sprintf( '%s', $export_link, esc_attr( $export_label ), esc_html__( 'Export', 'learndash' ) ); } } } return $row_actions; } /** * Filter the selector filters. * * @param array $query_args Query Args for Selector. * @param string $post_type Post Type slug for selector. */ public function filter_quiz_lesson_selector( $query_args = array(), $post_type = '' ) { global $sfwd_lms; // Check that the selector post type matches for out listing post type. if ( $post_type === $this->post_type ) { if ( isset( $query_args['post_type'] ) ) { if ( ( ( is_string( $query_args['post_type'] ) ) && ( learndash_get_post_type_slug( 'lesson' ) === $query_args['post_type'] ) ) || ( ( is_array( $query_args['post_type'] ) ) && ( in_array( learndash_get_post_type_slug( 'lesson' ), $query_args['post_type'] ) ) ) ) { if ( ( isset( $_GET['course_id'] ) ) && ( ! empty( $_GET['course_id'] ) ) ) { $lessons_items = $sfwd_lms->select_a_lesson_or_topic( absint( $_GET['course_id'] ), false, false ); if ( ! empty( $lessons_items ) ) { $query_args['post__in'] = array_keys( $lessons_items ); $query_args['orderby'] = 'post__in'; } else { $query_args['post__in'] = array( 0 ); } } else { $query_args['post__in'] = array( 0 ); } } } } return $query_args; } public function learndash_post_listing_after_option( $post, $query_args = array(), $post_type = '' ) { global $sfwd_lms; // Check that the selector post type matches for out listing post type. if ( $post_type === $this->post_type ) { if ( ( ( is_string( $query_args['post_type'] ) ) && ( learndash_get_post_type_slug( 'lesson' ) === $query_args['post_type'] ) ) || ( ( is_array( $query_args['post_type'] ) ) && ( in_array( learndash_get_post_type_slug( 'lesson' ), $query_args['post_type'] ) ) ) ) { if ( ( isset( $_GET['course_id'] ) ) && ( ! empty( $_GET['course_id'] ) ) ) { $lessons_topics = learndash_get_topic_list( $post->ID, absint( $_GET['course_id'] ) ); if ( ! empty( $lessons_topics ) ) { foreach ( $lessons_topics as $topic ) { $selected = ''; if ( ( isset( $_GET['lesson_id'] ) ) && ( ! empty( $_GET['lesson_id']) ) ) { $selected = selected( absint( $_GET['lesson_id'] ), $topic->ID, false ); } echo ''; } } } } } } // End of functions. } } new Learndash_Admin_Quizzes_Listing(); includes/admin/class-learndash-admin-menus-tabs.php000066600000243245152141567370016412 0ustar00 0, 'high' => 10, 'normal' => 20, 'taxonomy' => 30, 'misc' => 100, ); /** * Public constructor for class */ public function __construct() { // We first add this hook so we are calling 'admin_menu' early. add_action( 'admin_menu', array( $this, 'learndash_admin_menu_early' ), 0 ); /** * Then within the 'wp_loaded' handler we add another hook into * 'admin_menu' to be in the last-est position where we add all * the misc menu items. */ add_action( 'wp_loaded', array( $this, 'wp_loaded' ), 1000 ); //add_action( 'all_admin_notices', array( $this, 'learndash_admin_tabs' ), 20 ); add_action( 'in_admin_header', array( $this, 'learndash_admin_tabs' ), 20 ); } public static function get_instance() { if ( null === self::$instance ) { self::$instance = new static(); } return self::$instance; } /** * We hook into the 'wp_loaded' action which comes just before the * 'admin_menu' action. The reason for this we want to add a special * 'admin_menu' and ensure it is the last action taken on the menu. */ public function wp_loaded() { global $wp_filter; /*********************************************************************** admin_menu ************************************************************************/ // Set a default priority. $top_priority = 100; if ( defined( 'LEARNDASH_SUBMENU_SETTINGS_PRIORITY' ) ) { $top_priority = intval( LEARNDASH_SUBMENU_SETTINGS_PRIORITY ); } $top_priority = apply_filters( 'learndash_submenu_settings_priority', $top_priority ); add_action( 'admin_menu', array( $this, 'learndash_admin_menu_last' ), $top_priority ); } public function learndash_menu_args( $menu_args = array() ) { if ( ( is_array( $menu_args['admin_tabs'] ) ) && ( ! empty( $menu_args['admin_tabs'] ) ) ) { foreach ( $menu_args['admin_tabs'] as &$admin_tab_item ) { // Similar to the logic from admin_menu above. // We need to convert the 'edit.php?post_type=sfwd-courses&page=sfwd-lms_sfwd_lms.php_post_type_sfwd-courses' // menu_links to 'admin.php?page=learndash_lms_settings' so all the LearnDash > Settings tabs connect // to that menu instead. if ( 'edit.php?post_type=sfwd-courses&page=sfwd-lms_sfwd_lms.php_post_type_sfwd-courses' === $admin_tab_item['menu_link'] ) { $admin_tab_item['menu_link'] = 'admin.php?page=learndash_lms_settings'; } } } $menu_args['admin_tabs_on_page']['admin_page_learndash_lms_settings'] = $menu_args['admin_tabs_on_page']['sfwd-courses_page_sfwd-lms_sfwd_lms_post_type_sfwd-courses']; $menu_args['admin_tabs_on_page']['sfwd-courses_page_sfwd-lms_sfwd_lms_post_type_sfwd-courses'] = $menu_args['admin_tabs_on_page']['edit-sfwd-courses']; return $menu_args; } public function learndash_admin_menu_tabs( $menu_args = array() ) { $menu_item_tabs = array(); // Now we take the current page id and collect all the tab items. This is the newer // form of the tab logic instead of them being global. $current_page_id = $menu_args['current_page_id']; if ( isset( $menu_args['admin_tabs_on_page'][ $current_page_id ] ) ) { $menu_link = ''; foreach ( $menu_args['admin_tabs_on_page'][ $current_page_id ] as $admin_tabs_on_page_id ) { if ( isset( $menu_args['admin_tabs'][ $admin_tabs_on_page_id ] ) ) { if ( empty( $menu_link ) ) { $menu_link = $menu_args['admin_tabs'][ $admin_tabs_on_page_id ]['menu_link']; } $menu_item_tabs[ $admin_tabs_on_page_id ] = $menu_args['admin_tabs'][ $admin_tabs_on_page_id ]; } } foreach ( $menu_args['admin_tabs'] as $admin_tab_id => $admin_tab ) { if ( $admin_tab['menu_link'] == $menu_link ) { if ( ! isset( $menu_item_tabs[ $admin_tab_id ] ) ) { $menu_item_tabs[ $admin_tab_id ] = $admin_tab; } } } } return $menu_item_tabs; } public function add_admin_tab_set( $menu_slug, $menu_item ) { global $learndash_post_types, $learndash_taxonomies; $url_parts = wp_parse_url( $menu_slug ); if ( ( isset( $url_parts['path'] ) ) && ( 'edit.php' === $url_parts['path'] ) && ( isset( $url_parts['query'] ) ) && ( ! empty( $url_parts['query'] ) ) ) { $menu_query_args = array(); parse_str( $url_parts['query'], $menu_query_args ); if ( ( isset( $menu_query_args['post_type'] ) ) && ( in_array( $menu_query_args['post_type'], $learndash_post_types, true ) ) ) { if ( ! isset( $admin_tab_sets[ $menu_slug ] ) ) { $admin_tab_sets[ $menu_slug ] = array(); } foreach ( $menu_item as $menu_item_section ) { $url_parts = wp_parse_url( html_entity_decode( $menu_item_section[2] ) ); if ( ( isset( $url_parts['query'] ) ) && ( ! empty( $url_parts['query'] ) ) ) { parse_str( $url_parts['query'], $link_params ); } else { $link_params = array( 'post_type' => $menu_query_args['post_type'], 'taxonomy' => '', ); } // Edit - We add in the 1 position if ( substr( $menu_item_section[2], 0, strlen( 'edit.php?' ) ) == 'edit.php?' ) { $all_title = $menu_item_section[0]; if ( ( isset( $link_params['post_type'] ) ) && ( ! empty( $link_params['post_type'] ) ) ) { $post_type_object = get_post_type_object( $link_params['post_type'] ); if ( $post_type_object ) { $all_title = sprintf( // translators: placeholder: Post Type Plural Name. esc_html_x( 'All %s', 'placeholder: Post Type Plural Name', 'learndash' ), $post_type_object->labels->name ); } } $this->admin_tab_sets[ $menu_slug ][1] = array( 'id' => 'edit-' . $link_params['post_type'], 'name' => $all_title, 'cap' => $menu_item_section[1], 'link' => $menu_item_section[2], ); } elseif ( 'edit-tags.php?' === substr( $menu_item_section[2], 0, strlen( 'edit-tags.php?' ) ) ) { $menu_priority = 50; if ( 'sfwd-quiz' === $menu_query_args['post_type'] ) { $menu_priority = 23; } elseif ( ( isset( $link_params['taxonomy'] ) ) && ( ! empty( $link_params['taxonomy'] ) ) ) { if ( in_array( $link_params['taxonomy'], $learndash_taxonomies ) ) { $menu_priority = 40; } } $this->add_admin_tab_item( $menu_slug, array( 'id' => 'edit-' . $link_params['taxonomy'], 'name' => $menu_item_section[0], 'cap' => $menu_item_section[1], 'link' => $menu_item_section[2], ), $menu_priority ); } } } } } public function add_admin_tab_item( $menu_slug, $menu_item, $menu_priority = 20 ) { if ( ! isset( $this->admin_tab_sets[ $menu_slug ] ) ) { $this->admin_tab_sets[ $menu_slug ] = array(); } else { ksort( $this->admin_tab_sets[ $menu_slug ] ); } if ( ! isset( $menu_item['cap'] ) ) { $menu_item['cap'] = LEARNDASH_ADMIN_CAPABILITY_CHECK; } while ( true ) { if ( ! isset( $this->admin_tab_sets[ $menu_slug ][ $menu_priority ] ) ) { $this->admin_tab_sets[ $menu_slug ][ $menu_priority ] = $menu_item; break; } $menu_priority++; } } /* The purpose of this early function is to setup the main 'learndash-lms' menu page. Then * re-position the various custom post type submenu items to be found under it. */ public function learndash_admin_menu_early() { if ( ! is_admin() ) { return; } global $submenu, $menu; $add_submenu = array(); if ( current_user_can( 'edit_courses' ) ) { if ( isset( $submenu['edit.php?post_type=sfwd-courses'] ) ) { $add_submenu['sfwd-courses'] = array( 'name' => LearnDash_Custom_Label::get_label( 'courses' ), 'cap' => 'edit_courses', 'link' => 'edit.php?post_type=sfwd-courses', 'class' => 'submenu-ldlms-courses', ); $this->add_admin_tab_set( 'edit.php?post_type=sfwd-courses', $submenu['edit.php?post_type=sfwd-courses'] ); } if ( isset( $submenu['edit.php?post_type=sfwd-lessons'] ) ) { $add_submenu['sfwd-lessons'] = array( 'name' => LearnDash_Custom_Label::get_label( 'lessons' ), 'cap' => 'edit_courses', 'link' => 'edit.php?post_type=sfwd-lessons', 'class' => 'submenu-ldlms-lessons', ); $this->add_admin_tab_set( 'edit.php?post_type=sfwd-lessons', $submenu['edit.php?post_type=sfwd-lessons'] ); } if ( isset( $submenu['edit.php?post_type=sfwd-topic'] ) ) { $add_submenu['sfwd-topic'] = array( 'name' => LearnDash_Custom_Label::get_label( 'topics' ), 'cap' => 'edit_courses', 'link' => 'edit.php?post_type=sfwd-topic', 'class' => 'submenu-ldlms-topics', ); $this->add_admin_tab_set( 'edit.php?post_type=sfwd-topic', $submenu['edit.php?post_type=sfwd-topic'] ); } if ( isset( $submenu['edit.php?post_type=sfwd-quiz'] ) ) { $add_submenu['sfwd-quiz'] = array( 'name' => LearnDash_Custom_Label::get_label( 'quizzes' ), 'cap' => 'edit_courses', 'link' => 'edit.php?post_type=sfwd-quiz', 'class' => 'submenu-ldlms-quizzes', ); $this->add_admin_tab_set( 'edit.php?post_type=sfwd-quiz', $submenu['edit.php?post_type=sfwd-quiz'] ); } if ( ( true === is_data_upgrade_quiz_questions_updated() ) && ( LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Quizzes_Builder', 'enabled' ) === 'yes' ) ) { if ( isset( $submenu[ 'edit.php?post_type=' . learndash_get_post_type_slug( 'question' ) ] ) ) { $add_submenu['sfwd-question'] = array( 'name' => LearnDash_Custom_Label::get_label( 'questions' ), 'cap' => 'edit_courses', 'link' => add_query_arg( 'post_type', learndash_get_post_type_slug( 'question' ), 'edit.php' ), 'class' => 'submenu-ldlms-questions', ); if ( isset( $_GET['quiz_id'] ) ) { $quiz_id = absint( $_GET['quiz_id'] ); if ( ! empty( $quiz_id ) ) { foreach ( $submenu[ 'edit.php?post_type=' . learndash_get_post_type_slug( 'question' ) ] as &$link ) { $link[2] = add_query_arg( 'quiz_id', $quiz_id, $link[2] ); } } } $this->add_admin_tab_set( add_query_arg( 'post_type', learndash_get_post_type_slug( 'question' ), 'edit.php' ), $submenu[ 'edit.php?post_type=' . learndash_get_post_type_slug( 'question' ) ] ); } } if ( isset( $submenu['edit.php?post_type=sfwd-certificates'] ) ) { $add_submenu['sfwd-certificates'] = array( 'name' => esc_html_x( 'Certificates', 'Certificates Menu Label', 'learndash' ), 'cap' => 'edit_courses', 'link' => 'edit.php?post_type=sfwd-certificates', 'class' => 'submenu-ldlms-certificates', ); $this->add_admin_tab_set( 'edit.php?post_type=sfwd-certificates', $submenu['edit.php?post_type=sfwd-certificates'] ); } } if ( current_user_can( 'edit_assignments' ) ) { if ( isset( $submenu['edit.php?post_type=sfwd-assignment'] ) ) { $add_submenu['sfwd-assignment'] = array( 'name' => esc_html_x( 'Assignments', 'Assignments Menu Label', 'learndash' ), 'cap' => 'edit_assignments', 'link' => 'edit.php?post_type=sfwd-assignment', 'class' => 'submenu-ldlms-assignments', ); $this->add_admin_tab_set( 'edit.php?post_type=sfwd-assignment', $submenu['edit.php?post_type=sfwd-assignment'] ); } } if ( current_user_can( 'edit_groups' ) ) { if ( isset( $submenu['edit.php?post_type=groups'] ) ) { $add_submenu['groups'] = array( 'name' => esc_html_x( 'Groups', 'Groups Menu Label', 'learndash' ), 'cap' => 'edit_groups', 'link' => 'edit.php?post_type=groups', 'class' => 'submenu-ldlms-groups', ); $this->add_admin_tab_set( 'edit.php?post_type=groups', $submenu['edit.php?post_type=groups'] ); } } if ( learndash_is_group_leader_user() ) { $add_submenu['sfwd-essays'] = array( 'name' => esc_html_x( 'Submitted Essays', 'Submitted Essays Menu Label', 'learndash' ), 'cap' => 'group_leader', 'link' => 'edit.php?post_type=sfwd-essays', 'class' => 'submenu-ldlms-essays', ); } /** * Filter submenu array before it is registered. * * @since 2.1.0 * * @param array $add_submenu */ $add_submenu = apply_filters( 'learndash_submenu', $add_submenu ); if ( ! empty( $add_submenu ) ) { $menu_position = 2; if ( defined( 'LEARNDASH_MENU_POSITION' ) ) { $menu_position = intval( LEARNDASH_MENU_POSITION ); } $menu_position = apply_filters( 'learndash-menu-position', $menu_position ); $menu_icon = ' '; add_menu_page( esc_html__( 'LearnDash LMS', 'learndash' ), esc_html__( 'LearnDash LMS', 'learndash' ), 'read', 'learndash-lms', null, 'data:image/svg+xml;base64,' . base64_encode( $menu_icon ), $menu_position ); $location = 0; foreach ( $add_submenu as $key => $add_submenu_item ) { if ( current_user_can( $add_submenu_item['cap'] ) ) { $_tmp_menu_item = array( $add_submenu_item['name'], $add_submenu_item['cap'], $add_submenu_item['link'] ); if ( ( isset( $add_submenu_item['class'] ) ) && ( ! empty( $add_submenu_item['class'] ) ) ) { $_tmp_menu_item[4] = $add_submenu_item['class']; } $submenu['learndash-lms'][ $location++ ] = $_tmp_menu_item; } } /** * Action added to trigger add-ons when LD menu and submenu items have been added to the system. * This works better than trying to fiddle with priority on WP 'admin_menu' hook. * * @since 2.4.0 * * @param string LD menu parent slug 'learndash-lms'. */ do_action( 'learndash_admin_menu', 'learndash-lms' ); } global $learndash_post_types; foreach ( $learndash_post_types as $ld_post_type ) { $menu_slug = 'edit.php?post_type=' . $ld_post_type; if ( isset( $submenu[ $menu_slug ] ) ) { remove_menu_page( $menu_slug ); } } } public function learndash_admin_menu_last() { global $submenu, $menu, $_wp_real_parent_file, $_wp_submenu_nopriv, $_registered_pages, $_parent_pages; $_parent_file = get_admin_page_parent(); $add_submenu = array(); if ( ( isset( $submenu['learndash-lms-non-existant'] ) ) && ( ! empty( $submenu['learndash-lms-non-existant'] ) ) ) { foreach ( $submenu['learndash-lms-non-existant'] as $submenu_idx => $submenu_item ) { if ( isset( $_parent_pages[ $submenu_item[2] ] ) ) { $_parent_pages[ $submenu_item[2] ] = 'admin.php?page=learndash_lms_settings'; $submenu['admin.php?page=learndash_lms_settings'][] = $submenu_item; } } } /** * Allow add-ons and other LD core menus to be added to the bottom of the sub-menu. * * @since 2.5.6 */ $add_submenu = apply_filters( 'learndash_submenu_last', $add_submenu ); $add_submenu['settings'] = array( 'name' => esc_html_x( 'Settings', 'Settings Menu Label', 'learndash' ), 'cap' => LEARNDASH_ADMIN_CAPABILITY_CHECK, 'link' => 'admin.php?page=learndash_lms_settings', ); foreach ( $add_submenu as $key => $add_submenu_item ) { if ( current_user_can( $add_submenu_item['cap'] ) ) { $submenu['learndash-lms'][] = array( $add_submenu_item['name'], $add_submenu_item['cap'], $add_submenu_item['link'] ); } } } /** * Set up admin tabs for each admin menu page under LearnDash * * @since 2.1.0 */ public function learndash_admin_tabs() { if ( ! is_admin() ) { return; } global $submenu, $menu, $parent_file; global $learndash_current_page_link; $learndash_current_page_link = ''; $current_screen = get_current_screen(); $current_page_id = $current_screen->id; //$current_screen_parent_file = $current_screen->parent_file; if ( $parent_file ) { $current_screen_parent_file = $parent_file; } else { $current_screen_parent_file = $current_screen->parent_file; } if ( 'learndash-lms' === $current_screen_parent_file ) { if ( 'learndash-lms_page_learndash-lms-reports' === $current_screen->id ) { $current_screen_parent_file = 'admin.php?page=learndash-lms-reports'; } /** * The above IF should work. However what we are seeing in LEARNDASH-3661 is * due to the translation of 'LearnDash LMS' the screen ID gets changed by WP * to something like 'lms-learndash_page_learndash-lms-reports' in the French * or something entirely different in other languages. So we add a secondary * check on the 'page' query string param. * @since 3.0.7 */ else if ( ( isset( $_GET['page'] ) ) && ( 'learndash-lms-reports' === $_GET['page'] ) ) { $current_screen_parent_file = 'admin.php?page=learndash-lms-reports'; } // See LEARNDASH-581: // In a normal case when viewing the LearnDash > Courses > All Courses tab the screen ID is set to 'edit-sfwd-courses' and the parent_file is set ''edit.php?post_type=sfwd-courses'. // However when the Admin Menu Editor plugin is installed it somehow sets the parent_file to 'learndash-lms'. So below we need to change the value back. Note this is just for the // listing URL. The Add New and other tabs are not effected. if ( 'edit-sfwd-courses' === $current_screen->id ) { $current_screen_parent_file = 'edit.php?post_type=sfwd-courses'; } if ( 'edit-sfwd-lessons' === $current_screen->id ) { $current_screen_parent_file = 'edit.php?post_type=sfwd-lessons'; } if ( 'edit-sfwd-topic' === $current_screen->id ) { $current_screen_parent_file = 'edit.php?post_type=sfwd-topic'; } if ( 'edit-sfwd-quiz' === $current_screen->id ) { $current_screen_parent_file = 'edit.php?post_type=sfwd-quiz'; } if ( 'edit-sfwd-question' === $current_screen->id ) { $current_screen_parent_file = 'edit.php?post_type=sfwd-question'; } if ( 'edit-sfwd-certificates' === $current_screen->id ) { $current_screen_parent_file = 'edit.php?post_type=sfwd-certificates'; } if ( 'edit-groups' === $current_screen->id ) { $current_screen_parent_file = 'edit.php?post_type=groups'; } if ( 'edit-sfwd-assignment' === $current_screen->id ) { $current_screen_parent_file = 'edit.php?post_type=sfwd-assignment'; } if ( learndash_is_group_leader_user() ) { if ( 'edit-sfwd-essays' === $current_screen->id ) { $current_screen_parent_file = 'edit.php?post_type=sfwd-essays'; } } } if ( ( 'edit.php?post_type=sfwd-quiz' === $current_screen_parent_file ) || ( 'edit.php?post_type=sfwd-essays' === $current_screen_parent_file ) ) { $post_id = ! empty( $_GET['post_id'] ) ? $_GET['post_id'] : ( empty( $_GET['post'] ) ? 0 : $_GET['post'] ); if ( ! empty( $_GET['module'] ) ) { $current_page_id = $current_page_id . '_' . esc_attr( $_GET['module'] ); } elseif ( ! empty( $post_id ) ) { $current_page_id = $current_page_id . '_edit'; } if ( learndash_is_admin_user() ) { $menu_user_cap = LEARNDASH_ADMIN_CAPABILITY_CHECK; $menu_parent = 'edit.php?post_type=sfwd-quiz'; } elseif ( learndash_is_group_leader_user() ) { $menu_user_cap = LEARNDASH_GROUP_LEADER_CAPABILITY_CHECK; $menu_parent = 'learndash-lms'; } $this->add_admin_tab_item( 'edit.php?post_type=sfwd-quiz', array( 'link' => 'edit.php?post_type=sfwd-essays', 'name' => esc_html_x( 'Submitted Essays', 'Quiz Submitted Essays Tab Label', 'learndash' ), 'id' => 'edit-sfwd-essays', 'cap' => $menu_user_cap, 'parent_menu_link' => $menu_parent, ), $this->admin_tab_priorities['normal'] ); } // Somewhat of a kludge. The essays are shown within the quiz post type menu section. So we can't just use // the default logic. But we can (below) copy the quiz tab items to a new tab set for essays. if ( 'edit.php?post_type=sfwd-essays' === $current_screen_parent_file ) { if ( 'admin.php?page=learndash_lms_settings' !== $current_screen_parent_file ) { do_action( 'learndash_admin_tabs_set', $current_screen_parent_file, $this ); } $post_id = ! empty( $_GET['post_id'] ) ? $_GET['post_id'] : ( empty( $_GET['post'] ) ? 0 : $_GET['post'] ); if ( ! empty( $post_id ) ) { $current_page_id = 'edit-sfwd-essays'; //. $current_page_id; } $this->admin_tab_sets['edit.php?post_type=sfwd-essays'] = array(); foreach ( $this->admin_tab_sets['edit.php?post_type=sfwd-quiz'] as $menu_key => $menu_item ) { $this->admin_tab_sets['edit.php?post_type=sfwd-essays'][ $menu_key ] = $menu_item; } } if ( 'edit.php?post_type=sfwd-quiz' === $current_screen_parent_file ) { if ( ( empty( $post_id ) ) && ( ! empty( $_GET['quiz_id'] ) ) && ( 'admin_page_ldAdvQuiz' === $current_page_id ) ) { $post_id = learndash_get_quiz_id_by_pro_quiz_id( $_GET['quiz_id'] ); } if ( ! empty( $post_id ) ) { $quiz_id = learndash_get_setting( $post_id, 'quiz_pro', true ); if ( ! empty( $quiz_id ) ) { $this->add_admin_tab_item( $current_screen->parent_file, array( 'link' => 'post.php?post=' . $post_id . '&action=edit', 'name' => sprintf( // translators: placeholder: Edit Quiz Label. esc_html_x( 'Edit %s', 'Edit Quiz Label', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ) ), 'id' => 'sfwd-quiz_edit', ), $this->admin_tab_priorities['misc'] ); if ( ( true === is_data_upgrade_quiz_questions_updated() ) && ( LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Quizzes_Builder', 'enabled' ) === 'yes' ) ) { $question_tab_url = add_query_arg( array( 'post_type' => learndash_get_post_type_slug( 'question' ), 'quiz_id' => $post_id, ), 'edit.php' ); } else { $question_tab_url = add_query_arg( array( 'page' => 'ldAdvQuiz', 'module' => 'question', 'quiz_id' => $quiz_id, 'post_id' => $post_id, ), 'admin.php' ); } $this->add_admin_tab_item( $current_screen->parent_file, array( 'link' => 'admin.php?page=ldAdvQuiz&module=statistics&id=' . $quiz_id . '&post_id=' . $post_id, 'name' => esc_html_x( 'Statistics', 'Quiz Statistics Tab Label', 'learndash' ), 'id' => 'sfwd-quiz_page_ldAdvQuiz_statistics', ), $this->admin_tab_priorities['misc'] ); $this->add_admin_tab_item( $current_screen->parent_file, array( 'link' => 'admin.php?page=ldAdvQuiz&module=toplist&id=' . $quiz_id . '&post_id=' . $post_id, 'name' => esc_html_x( 'Leaderboard', 'Quiz Leaderboard Tab Label', 'learndash' ), 'id' => 'sfwd-quiz_page_ldAdvQuiz_toplist', ), $this->admin_tab_priorities['misc'] ); } } } if ( ( 'admin.php?page=learndash-lms-reports' === $current_screen_parent_file ) || ( 'edit.php?post_type=sfwd-transactions' === $current_screen_parent_file ) ) { $this->add_admin_tab_item( $current_screen_parent_file, array( 'id' => 'learndash-lms_page_learndash-lms-reports', 'name' => esc_html_x( 'Reports', 'Reports Menu Label', 'learndash' ), 'link' => 'admin.php?page=learndash-lms-reports', 'cap' => LEARNDASH_ADMIN_CAPABILITY_CHECK, ), $this->admin_tab_priorities['high'] ); $this->add_admin_tab_item( $current_screen_parent_file, array( 'id' => 'edit-sfwd-transactions', 'name' => esc_html_x( 'Transactions', 'Transactions Tab Label', 'learndash' ), 'link' => 'edit.php?post_type=sfwd-transactions', 'parent_menu_link' => 'admin.php?page=learndash-lms-reports', ), $this->admin_tab_priorities['high'] ); if ( 'edit.php?post_type=sfwd-transactions' === $current_screen_parent_file ) { $post_id = ! empty( $_GET['post_id'] ) ? $_GET['post_id'] : ( empty( $_GET['post'] ) ? 0 : $_GET['post'] ); if ( ! empty( $post_id ) ) { $current_page_id = 'edit-sfwd-transactions'; } } } if ( 'edit.php?post_type=groups' === $current_screen_parent_file ) { if ( learndash_is_admin_user() ) { $user_group_ids = learndash_get_administrators_group_ids( get_current_user_id(), true ); if ( ! empty( $user_group_ids ) ) { $this->add_admin_tab_item( $current_screen_parent_file, array( 'id' => 'groups_page_group_admin_page', 'name' => esc_html__( 'Group Administration', 'learndash' ), 'link' => 'admin.php?page=group_admin_page', 'cap' => LEARNDASH_ADMIN_CAPABILITY_CHECK, ), $this->admin_tab_priorities['high'] ); } } } if ( 'learndash-lms_page_group_admin_page' === $current_screen->id ) { $this->add_admin_tab_item( $current_screen_parent_file, array( 'id' => 'learndash-lms_page_group_admin_page', 'name' => esc_html__( 'Group Administration', 'learndash' ), 'link' => 'admin.php?page=group_admin_page', 'cap' => LEARNDASH_GROUP_LEADER_CAPABILITY_CHECK, ), $this->admin_tab_priorities['high'] ); } $admin_tabs_legacy = apply_filters( 'learndash_admin_tabs', array() ); foreach ( $admin_tabs_legacy as $tab_idx => $tab_item ) { if ( empty( $tab_item ) ) { unset( $admin_tabs_legacy[ $tab_idx ] ); } else { if ( 'edit.php?post_type=sfwd-courses&page=sfwd-lms_sfwd_lms.php_post_type_sfwd-courses' === $admin_tabs_legacy[ $tab_idx ]['menu_link'] ) { $admin_tabs_legacy[ $tab_idx ]['menu_link'] = 'admin.php?page=learndash_lms_settings'; } } } if ( 'learndash-lms-non-existant' === $current_screen_parent_file ) { $menu_link = ''; foreach ( $admin_tabs_legacy as $tab_idx => $tab_item ) { if ( $tab_item['id'] === $current_page_id ) { $current_screen_parent_file = $tab_item['menu_link']; break; } } } if ( 'admin.php?page=learndash_lms_settings' === $current_screen_parent_file ) { $this->add_admin_tab_item( 'admin.php?page=learndash_lms_settings', array( 'link' => 'admin.php?page=nss_plugin_license-sfwd_lms-settings', 'name' => esc_html_x( 'LMS License', 'LMS License Tab Label', 'learndash' ), 'id' => 'admin_page_nss_plugin_license-sfwd_lms-settings', ), 50 ); do_action( 'learndash_admin_tabs_set', $current_screen_parent_file, $this ); // Here we add the legacy tabs to the end of the existing tabs. if ( ! empty( $admin_tabs_legacy ) ) { foreach ( $admin_tabs_legacy as $tab_idx => $tab_item ) { if ( $tab_item['menu_link'] === $current_screen_parent_file ) { $this->add_admin_tab_item( $current_screen_parent_file, $tab_item, 80 ); } } } } if ( ( 'edit.php?post_type=sfwd-essays' !== $current_screen_parent_file ) && ( 'admin.php?page=learndash_lms_settings' !== $current_screen_parent_file ) ) { do_action( 'learndash_admin_tabs_set', $current_screen_parent_file, $this ); } $admin_tabs_on_page_legacy = array(); $admin_tabs_on_page_legacy['sfwd-courses_page_sfwd-lms_sfwd_lms_post_type_sfwd-courses'] = array(); $admin_tabs_on_page_legacy = apply_filters( 'learndash_admin_tabs_on_page', $admin_tabs_on_page_legacy, array(), $current_page_id ); foreach ( $admin_tabs_on_page_legacy as $tab_idx => $tab_set ) { if ( empty( $tab_set ) ) { unset( $admin_tabs_on_page_legacy[ $tab_idx ] ); } } if ( isset( $admin_tabs_on_page_legacy[ $current_page_id ] ) ) { $admin_tabs_on_page_legacy_set = $admin_tabs_on_page_legacy[ $current_page_id ]; if ( ( ! empty( $admin_tabs_on_page_legacy_set ) ) && ( is_array( $admin_tabs_on_page_legacy_set ) ) ) { foreach ( $admin_tabs_on_page_legacy_set as $admin_tab_idx ) { if ( isset( $admin_tabs_legacy[ $admin_tab_idx ] ) ) { $admin_tab_item = $admin_tabs_legacy[ $admin_tab_idx ]; $current_screen_parent_file = $admin_tab_item['menu_link']; $this->add_admin_tab_item( $admin_tab_item['menu_link'], $admin_tab_item, 80 ); unset( $admin_tabs_legacy[ $admin_tab_idx ] ); } unset( $admin_tabs_on_page_legacy_set[ $admin_tab_idx ] ); } } } // Get tabs data to new tabs system. $this->show_admin_tabs( $current_screen_parent_file, $current_page_id ); } /** * Get admin tabs data to new tabs system. * * @param string $menu_tab_key The menu tab key. * @param string $current_page_id The current page id. * @return array */ public function get_admin_tabs( $menu_tab_key = '', $current_page_id = '' ) { if ( isset( $this->admin_tab_sets[ $menu_tab_key ] ) ) { if ( ! empty( $this->admin_tab_sets[ $menu_tab_key ] ) ) { ksort( $this->admin_tab_sets[ $menu_tab_key ] ); /** * Filter for current admin tab set. * * @since 3.0 */ $this->admin_tab_sets[ $menu_tab_key ] = apply_filters( 'learndash_admin_tab_sets', $this->admin_tab_sets[ $menu_tab_key ], $menu_tab_key, $current_page_id ); if ( ! empty( $this->admin_tab_sets[ $menu_tab_key ] ) ) { global $learndash_current_page_link; if ( ( isset( $admin_tab_item['parent_menu_link'] ) ) && ( ! empty( $admin_tab_item['parent_menu_link'] ) ) ) { $learndash_current_page_link = trim( $admin_tab_item['parent_menu_link'] ); } else { $learndash_current_page_link = $menu_tab_key; } add_action( 'admin_footer', 'learndash_select_menu' ); return $this->admin_tab_sets[ $menu_tab_key ]; } } } return []; } public function show_admin_tabs( $menu_tab_key = '', $current_page_id = '' ) { /** * Control if admin tabs should be displayed. * * @param array $flag Defines if tabs should be displayed. */ if ( isset( $this->admin_tab_sets[ $menu_tab_key ] ) ) { if ( ! empty( $this->admin_tab_sets[ $menu_tab_key ] ) ) { ksort( $this->admin_tab_sets[ $menu_tab_key ] ); /** * Filter for current admin tab set * @since 2.5 */ $this->admin_tab_sets[ $menu_tab_key ] = apply_filters( 'learndash_admin_tab_sets', $this->admin_tab_sets[ $menu_tab_key ], $menu_tab_key, $current_page_id ); if ( ! empty( $this->admin_tab_sets[ $menu_tab_key ] ) ) { global $learndash_current_page_link; if ( ( isset( $admin_tab_item['parent_menu_link'] ) ) && ( ! empty( $admin_tab_item['parent_menu_link'] ) ) ) { $learndash_current_page_link = trim( $admin_tab_item['parent_menu_link'] ); } else { if ( 'edit.php?post_type=sfwd-essays' === $menu_tab_key ) { if ( true === learndash_is_group_leader_user() ) { // Nothing here. } else { $learndash_current_page_link = 'edit.php?post_type=sfwd-quiz'; } } elseif ( 'edit.php?post_type=sfwd-transactions' === $menu_tab_key ) { $learndash_current_page_link = 'admin.php?page=learndash-lms-reports'; } else { $learndash_current_page_link = $menu_tab_key; } } add_action( 'admin_footer', 'learndash_select_menu' ); if ( ( defined( 'LEARNDASH_SETTINGS_HEADER_PANEL' ) ) && ( true === apply_filters( 'learndash_settings_header_panel', LEARNDASH_SETTINGS_HEADER_PANEL ) ) ) { $this->admin_header_panel( $menu_tab_key ); } else { echo '

'; $post_id = ! empty( $_GET['post_id'] ) ? $_GET['post_id'] : ( empty( $_GET['post'] ) ? 0 : $_GET['post'] ); foreach ( $this->admin_tab_sets[ $menu_tab_key ] as $admin_tab_item ) { if ( ! isset( $admin_tab_item['id'] ) ) { $admin_tab_item['id'] = ''; } if ( ! empty( $admin_tab_item['id'] ) ) { if ( $admin_tab_item['id'] == $current_page_id ) { $class = 'nav-tab nav-tab-active'; global $learndash_current_page_link; if ( ( isset( $admin_tab_item['parent_menu_link'] ) ) && ( ! empty( $admin_tab_item['parent_menu_link'] ) ) ) { $learndash_current_page_link = trim( $admin_tab_item['parent_menu_link'] ); } else { $learndash_current_page_link = $menu_tab_key; } add_action( 'admin_footer', 'learndash_select_menu' ); } else { $class = 'nav-tab'; } $target = ! empty( $admin_tab_item['target'] ) ? 'target="' . $admin_tab_item['target'] . '"' : ''; $url = ''; if ( ( isset( $admin_tab_item['external_link'] ) ) && ( ! empty( $admin_tab_item['external_link'] ) ) ) { $url = $admin_tab_item['external_link']; } elseif ( ( isset( $admin_tab_item['link'] ) ) && ( ! empty( $admin_tab_item['link'] ) ) ) { $url = $admin_tab_item['link']; } else { if ( false !== ( $pos = strpos( $admin_tab_item['id'], 'learndash-lms_page_' ) ) ) { $url_page = str_replace( 'learndash-lms_page_', '', $admin_tab_item['id'] ); $url = add_query_arg( array( 'page' => $url_page ), 'admin.php' ); } } if ( ! empty( $url ) ) { echo '' . $admin_tab_item['name'] . ''; } } } echo '

'; } } } } } /** * Show the new Admin header panel * * @since 3.0 * @param string $menu_tab_key Current tab key to show. */ protected function admin_header_panel( $menu_tab_key = '' ) { global $pagenow, $post, $typenow; global $learndash_assets_loaded; global $learndash_metaboxes; if ( ( empty( $menu_tab_key ) ) || ( ! isset( $this->admin_tab_sets[ $menu_tab_key ] ) ) || ( empty( $this->admin_tab_sets[ $menu_tab_key ] ) ) ) { return; } $screen = get_current_screen(); $header_data = array( 'tabs' => array(), 'currentTab' => $screen->id, 'editing' => 1, 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'adminurl' => admin_url( 'edit.php' ), 'quizImportUrl' => admin_url( 'admin.php?page=ldAdvQuiz' ), 'postadminurl' => admin_url( 'post.php' ), 'back_to_title' => '', 'back_to_url' => '', 'error_messages' => array( 'builder' => esc_html__( 'There was an unexpected error while loading. Please try refreshing the page. If the error continues, contact LearnDash support.', 'learndash' ), 'header' => esc_html__( 'There was an unexpected error while loading. Please try refreshing the page. If the error continues, contact LearnDash support.', 'learndash' ), ), 'labels' => array( 'section-heading' => esc_html__( 'Section Heading', 'learndash' ), 'section-headings' => esc_html__( 'Section Headings', 'learndash' ), 'answer' => esc_html__( 'answer', 'learndash' ), 'answers' => esc_html__( 'answers', 'learndash' ), 'course' => \LearnDash_Custom_Label::get_label( 'course' ), 'courses' => \LearnDash_Custom_Label::get_label( 'courses' ), 'lesson' => \LearnDash_Custom_Label::get_label( 'lesson' ), 'lessons' => \LearnDash_Custom_Label::get_label( 'lessons' ), 'topic' => \LearnDash_Custom_Label::get_label( 'topic' ), 'topics' => \LearnDash_Custom_Label::get_label( 'topics' ), 'quiz' => \LearnDash_Custom_Label::get_label( 'quiz' ), 'quizzes' => \LearnDash_Custom_Label::get_label( 'quizzes' ), 'question' => \LearnDash_Custom_Label::get_label( 'question' ), 'questions' => \LearnDash_Custom_Label::get_label( 'questions' ), 'sfwd-course' => \LearnDash_Custom_Label::get_label( 'course' ), 'sfwd-courses' => \LearnDash_Custom_Label::get_label( 'courses' ), 'sfwd-lesson' => \LearnDash_Custom_Label::get_label( 'lesson' ), 'sfwd-lessons' => \LearnDash_Custom_Label::get_label( 'lessons' ), 'sfwd-topic' => \LearnDash_Custom_Label::get_label( 'topic' ), 'sfwd-topics' => \LearnDash_Custom_Label::get_label( 'topics' ), 'sfwd-quiz' => \LearnDash_Custom_Label::get_label( 'quiz' ), 'sfwd-quizzes' => \LearnDash_Custom_Label::get_label( 'quizzes' ), 'sfwd-courses' => \LearnDash_Custom_Label::get_label( 'courses' ), 'sfwd-question' => \LearnDash_Custom_Label::get_label( 'question' ), 'start-adding-lesson' => sprintf( // translators: placeholder: Lesson. esc_html_x( 'Start by adding a %s.', 'placeholder: Lesson', 'learndash' ), \LearnDash_Custom_Label::get_label( 'lesson' ) ), ), 'sfwdMap' => array( 'lesson' => 'sfwd-lessons', 'topic' => 'sfwd-topic', 'quiz' => 'sfwd-quiz', 'question' => 'sfwd-question', ), 'rest' => array( 'namespace' => LEARNDASH_REST_API_NAMESPACE . '/v1', 'base' => array( 'lessons' => \LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Section_General_REST_API', 'sfwd-lessons' ), 'topic' => \LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Section_General_REST_API', 'sfwd-topic' ), 'quiz' => \LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Section_General_REST_API', 'sfwd-quiz' ), 'question' => 'sfwd-questions', ), 'root' => esc_url_raw( rest_url() ), 'nonce' => wp_create_nonce( 'wp_rest' ), ), 'post_data' => array( 'builder_post_id' => 0, 'builder_post_title' => '', 'builder_post_type' => '', ), 'posts_per_page' => 0, 'lessons' => array(), 'topics' => array(), 'quizzes' => array(), 'questions' => array(), 'i18n' => array( 'back_to' => esc_html_x( 'Back to', 'Link back to the post type overview', 'learndash' ), 'actions' => esc_html_x( 'Actions', 'Builder actions dropdown', 'learndash' ), 'expand' => esc_html_x( 'Expand All', 'Builder elements', 'learndash' ), 'collapse' => esc_html_x( 'Collapse All', 'Builder elements', 'learndash' ), 'error' => esc_html__( 'An error occurred while submitting your request. Please try again.', 'learndash' ), 'cancel' => esc_html__( 'Cancel', 'learndash' ), 'edit' => esc_html__( 'Edit', 'learndash' ), 'remove' => esc_html__( 'Remove', 'learndash' ), 'save' => esc_html__( 'Save', 'learndash' ), 'settings' => esc_html__( 'Settings', 'learndash' ), 'edit_question' => esc_html__( 'Click here to edit the question', 'learndash' ), 'correct_answer_message' => esc_html__( 'Message for correct answer - optional', 'learndash' ), 'different_incorrect_answer_message' => esc_html__( 'Use different message for incorrect answer', 'learndash' ), 'same_answer_message' => esc_html__( 'Currently same message is displayed as above.', 'learndash' ), 'incorrect_answer_message' => esc_html__( 'Message for incorrect answer - optional', 'learndash' ), 'solution_hint' => esc_html__( 'Solution hint', 'learndash' ), 'points' => esc_html__( 'points', 'learndash' ), 'edit_answer' => esc_html__( 'Click here to edit the answer', 'learndash' ), 'update_answer' => esc_html__( 'Update Answer', 'learndash' ), 'answer_missing' => esc_html__( 'Answer is missing', 'learndash' ), 'allow_html' => esc_html__( 'Allow HTML', 'learndash' ), 'correct' => esc_html__( 'Correct', 'learndash' ), 'correct_1st' => wp_kses_post( _x( '1st', 'First sort answer correct', 'learndash' ) ), 'correct_2nd' => wp_kses_post( _x( '2nd', 'Second sort answer correct', 'learndash' ) ), 'correct_3rd' => wp_kses_post( _x( '3rd', 'Third sort answer correct', 'learndash' ) ), 'correct_nth' => wp_kses_post( _x( 'th', 'nth sort answer correct', 'learndash' ) ), 'answer_updated' => esc_html__( 'Answer updated', 'learndash' ), 'edit_answer_settings' => esc_html__( 'Edit answer settings', 'learndash' ), 'answer' => esc_html__( 'Answer:', 'learndash' ), 'edit_matrix' => esc_html__( 'Click here to edit the matrix', 'learndash' ), 'new_element_labels' => array( 'question' => sprintf( /* translators: placeholders: Question */ esc_html_x( 'New %1$s', 'placeholder: Question', 'learndash' ), LearnDash_Custom_Label::get_label( 'question' ) ), 'quiz' => sprintf( /* translators: placeholders: Quiz */ esc_html_x( 'New %1$s', 'placeholder: Quiz', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ) ), 'topic' => sprintf( /* translators: placeholders: Topic */ esc_html_x( 'New %1$s', 'placeholder: Topic', 'learndash' ), LearnDash_Custom_Label::get_label( 'topic' ) ), 'lesson' => sprintf( /* translators: placeholders: Lesson */ esc_html_x( 'New %1$s', 'placeholder: Lesson', 'learndash' ), LearnDash_Custom_Label::get_label( 'lesson' ) ), 'answer' => esc_html__( 'New answer', 'learndash' ), 'section-heading' => esc_html__( 'New Section Heading', 'learndash' ), ), 'enter_title' => esc_html_x( 'Enter a title', 'Title for the new course, lesson, quiz', 'learndash' ), 'enter_answer' => esc_html_x( 'Enter an answer', 'Answer for a question', 'learndash' ), 'please_wait' => esc_html_x( 'Please wait...', 'Please wait while the form is loading', 'learndash' ), 'add_element' => esc_html_x( 'Add', 'Add lesson, topic, quiz...', 'learndash' ), 'add_element_labels' => array( 'question' => sprintf( /* translators: placeholders: Question */ esc_html_x( 'Add %1$s', 'placeholder: Question', 'learndash' ), LearnDash_Custom_Label::get_label( 'question' ) ), 'questions' => sprintf( /* translators: placeholders: Question */ esc_html_x( 'Add %1$s', 'placeholder: Questions', 'learndash' ), LearnDash_Custom_Label::get_label( 'questions' ) ), 'quiz' => sprintf( /* translators: placeholders: Quiz */ esc_html_x( 'Add %1$s', 'placeholder: Quiz', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ) ), 'topic' => sprintf( /* translators: placeholders: Topic */ esc_html_x( 'Add %1$s', 'placeholder: Topic', 'learndash' ), LearnDash_Custom_Label::get_label( 'topic' ) ), 'lesson' => sprintf( /* translators: placeholders: Lesson */ esc_html_x( 'Add %1$s', 'placeholder: Lesson', 'learndash' ), LearnDash_Custom_Label::get_label( 'lesson' ) ), 'answer' => esc_html__( 'Add answer', 'learndash' ), 'section-heading' => esc_html__( 'Add Section Heading', 'learndash' ), ), 'move_up' => esc_html_x( 'Move up', 'Move the current element up in the builder interface', 'learndash' ), 'question_empty' => sprintf( /* translators: placeholders: question */ esc_html_x( 'The %s is empty.', 'Warning when no question was entered', 'learndash' ), learndash_get_custom_label_lower( 'question' ) ), 'move_down' => esc_html_x( 'Move down', 'Move the current element down in the builder interface', 'learndash' ), 'rename' => esc_html_x( 'Rename', 'Rename the current element in the builder interface', 'learndash' ), 'search_element_labels' => array( 'lesson' => sprintf( /* translators: placeholders: lessons */ esc_html_x( 'Search %1$s', 'placeholders: lessons', 'learndash' ), LearnDash_Custom_Label::get_label( 'lessons' ) ), 'quiz' => sprintf( /* translators: placeholders: quizzes */ esc_html_x( 'Search %1$s', 'placeholders: quizzes', 'learndash' ), LearnDash_Custom_Label::get_label( 'quizzes' ) ), 'topic' => sprintf( /* translators: placeholders: topics */ esc_html_x( 'Search %1$s', 'placeholders: topics', 'learndash' ), LearnDash_Custom_Label::get_label( 'topics' ) ), 'question' => sprintf( /* translators: placeholders: questions */ esc_html_x( 'Search %1$s', 'placeholders: questions', 'learndash' ), LearnDash_Custom_Label::get_label( 'questions' ) ), ), 'recent' => esc_html_x( 'Recent', 'List of recent lessons, topics, quizzes or questions', 'learndash' ), 'view_all' => esc_html_x( 'View all', 'Lesson, Topic, Quiz or Question posts', 'learndash' ), 'start_adding_element_labels' => array( 'lesson' => sprintf( /* translators: placeholders: Lesson*/ esc_html_x( 'Start adding your first %1$s', 'placeholders: Lesson', 'learndash' ), LearnDash_Custom_Label::get_label( 'lesson' ) ), 'quiz' => sprintf( /* translators: placeholders: Quiz*/ esc_html_x( 'Start adding your first %1$s', 'placeholders: Quiz', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ) ), 'topic' => sprintf( /* translators: placeholders: Topic*/ esc_html_x( 'Start adding your first %1$s', 'placeholders: Topic', 'learndash' ), LearnDash_Custom_Label::get_label( 'topic' ) ), 'question' => sprintf( /* translators: placeholders: Question*/ esc_html_x( 'Start adding your first %1$s', 'placeholders: Question', 'learndash' ), LearnDash_Custom_Label::get_label( 'question' ) ), ), 'all_elements_added_labels' => array( 'lesson' => sprintf( /* translators: placeholders: Lessons*/ esc_html_x( 'All available %1$s have been added.', 'placeholders: Lessons', 'learndash' ), LearnDash_Custom_Label::get_label( 'lessons' ) ), 'quiz' => sprintf( /* translators: placeholders: Quizzes */ esc_html_x( 'All available %1$s have been added.', 'placeholders: Quizzes', 'learndash' ), LearnDash_Custom_Label::get_label( 'quizzes' ) ), 'topic' => sprintf( /* translators: placeholders: Topics */ esc_html_x( 'All available %1$s have been added.', 'placeholders: Topics', 'learndash' ), LearnDash_Custom_Label::get_label( 'topics' ) ), 'question' => sprintf( /* translators: placeholders: Questions */ esc_html_x( 'All available %1$s have been added.', 'placeholders: Questions', 'learndash' ), LearnDash_Custom_Label::get_label( 'questions' ) ), ), 'start_adding' => esc_html_x( 'Start adding your first', 'Lesson, Topic, Quiz or Question', 'learndash' ), 'refresh' => esc_html_x( 'Refresh', 'Builder - Refresh list of Lessons, Topics, Quizzes or Questions', 'learndash' ), 'load_more' => esc_html_x( 'Load More', 'Builder - Load more Lessons, Topics, Quizzes or Questions', 'learndash' ), 'add_selected' => esc_html_x( 'Add Selected', 'Builder - Add selected Lessons, Topics, Quizzes or Questions', 'learndash' ), 'undo' => esc_html_x( 'Undo', 'Undo action in the builder', 'learndash' ), 'criterion' => esc_html_x( 'Criterion', 'Matrix answer Criteroion', 'learndash' ), 'sort_element' => esc_html_x( 'Sort element', 'Sort matrix answer element', 'learndash' ), 'question_settings' => esc_html_x( 'Settings', 'Question settings. Placeholder in JavaScript', 'learndash' ), 'select_option' => esc_html_x( 'Select', 'Select an option', 'learndash' ), 'nothing_found' => esc_html_x( 'Nothing matches your search', 'No matching Lesson, Topic, Quiz or Question found', 'learndash' ), 'drop_lessons' => sprintf( /* translators: placeholders: Lessons */ esc_html_x( 'Drop %1$s here', 'placeholder: Lessons', 'learndash' ), LearnDash_Custom_Label::get_label( 'lessons' ) ), 'drop_question' => sprintf( /* translators: placeholders: Question */ esc_html_x( 'Drop %1$s here', 'placeholder: Question', 'learndash' ), LearnDash_Custom_Label::get_label( 'question' ) ), 'drop_quizzes' => sprintf( /* translators: placeholders: Quizzes */ esc_html_x( 'Drop %1$s here', 'placeholder: Quizzes', 'learndash' ), LearnDash_Custom_Label::get_label( 'quizzes' ) ), 'drop_quizzes_topics' => sprintf( /* translators: placeholders: %1$s: Topics, %2$s: Quizzes */ esc_html_x( 'Drop %1$s or %2$s here', 'placeholder: %1$s: Topics, %2$s: Quizzes', 'learndash' ), LearnDash_Custom_Label::get_label( 'topics' ), LearnDash_Custom_Label::get_label( 'quizzes' ) ), 'step' => esc_html_x( 'step', 'singular - Amount of steps in a course or quiz', 'learndash' ), 'steps' => esc_html_x( 'steps', 'plural - Amount of steps in a course or quiz', 'learndash' ), 'in_this' => esc_html_x( 'in this', 'Amount of steps in this course or quiz', 'learndash' ), 'final_quiz' => esc_html_x( 'Final', 'Builder - Final quiz. Placeholder in JavaScript', 'learndash' ), 'quiz_no_questions' => sprintf( // translators: placeholders: %1$s: Quiz, %2$s: Questions esc_html_x( 'This %1$s has no %2$s yet', 'This quiz has no questions.', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ), LearnDash_Custom_Label::get_label( 'questions' ) ), 'question_empty_edit' => sprintf( /* translators: placeholders: question */ esc_html_x( 'The %s is empty, click here to edit it.', 'Warning when no question was entered', 'learndash' ), learndash_get_custom_label_lower( 'question' ) ), 'unsaved_chages' => esc_html( 'You have unsaved changes. If you proceed, they will be lost.', 'learndash' ), 'manage_questions_builder' => sprintf( /* translators: placeholders: Questions */ esc_html_x( 'Manage %1$s in builder', 'Manage Questions in builder', 'learndash' ), LearnDash_Custom_Label::get_label( 'questions' ) ), 'total_points' => esc_html_x( 'TOTAL:', 'Total points', 'learndash' ), 'no_content' => esc_html_x( 'has no content yet.', 'Displayed when the post type, e.g. course, has no content', 'learndash' ), 'add_content' => esc_html_x( 'Add a new', 'Content type, e.g. lesson', 'learndash' ), 'add_from_sidebar' => esc_html_x( 'or add an existing one from the sidebar', 'Content type, e.g. lesson', 'learndash' ), 'essay_answer_format' => esc_html_x( 'Answer format', 'Type of essay answer', 'learndash' ), 'essay_text_answer' => esc_html_x( 'Text entry', 'Submit essay answer in a text box', 'learndash' ), 'essay_file_upload_answer' => esc_html_x( 'File upload', 'Submit essay answer as an upload', 'learndash' ), 'essay_after_submission' => esc_html_x( 'What should happen on quiz submission?', 'What grading options should be used after essay submission', 'learndash' ), 'essay_not_graded_no_points' => esc_html_x( 'Not Graded, No Points Awarded', 'Essay answer grading option', 'learndash' ), 'essay_not_graded_full_points' => esc_html_x( 'Not Graded, Full Points Awarded', 'Essay answer grading option', 'learndash' ), 'essay_graded_full_points' => esc_html_x( 'Graded, Full Points Awarded', 'Essay answer grading option', 'learndash' ), 'essay_not_set' => esc_html_x( 'Not set', 'Essay answer grading option has not been set', 'learndash' ), ), ); $action_menu = array(); $screen_post_type = ''; if ( ! empty( $typenow ) ) { $screen_post_type = $typenow; } else { $menu_tab_parts = wp_parse_url( $menu_tab_key ); if ( ( isset( $menu_tab_parts['query'] ) ) && ( ! empty( $menu_tab_parts['query'] ) ) ) { parse_str( $menu_tab_parts['query'], $menu_tab_url_parts ); if ( ( isset( $menu_tab_url_parts['post_type'] ) ) && ( ! empty( $menu_tab_url_parts['post_type'] ) ) ) { $screen_post_type = $menu_tab_url_parts['post_type']; } } } if ( ! empty( $screen_post_type ) ) { $screen_post_type_object = get_post_type_object( $screen_post_type ); } $header_data['post_data']['builder_post_id'] = get_the_ID(); if ( ! empty( $header_data['post_data']['builder_post_id'] ) ) { $header_data['post_data']['builder_post_title'] = get_the_title( $header_data['post_data']['builder_post_id'] ); } $header_data['post_data']['builder_post_type'] = $screen_post_type; $logic_control = ''; if ( ( isset( $_GET['page'] ) ) && ( strtolower( $_GET['page'] ) === strtolower( 'ldAdvQuiz' ) ) ) { $logic_control = 'post'; } elseif ( 'sfwd-courses_page_courses-builder' === $screen->id ) { $header_data['currentTab'] = 'learndash_course_builder'; $header_data['tabs'] = []; $header_data['back_to_title'] = learndash_get_label_course_step_back( learndash_get_post_type_slug( 'course' ), true ); $header_data['back_to_url'] = admin_url( 'edit.php?post_type=sfwd-courses' ); if ( isset( $_GET['course_id'] ) ) { $header_data['tabs'][] = [ 'id' => 'post-body-content', 'name' => learndash_get_label_course_step_page( learndash_get_post_type_slug( 'course' ) ), 'link' => get_edit_post_link( absint( $_GET['course_id'] ) ), 'isExternal' => 'true', ]; } if ( 'yes' === LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Courses_Builder', 'enabled' ) ) { $header_data['tabs'][] = [ 'id' => 'learndash_course_builder', 'name' => esc_html__( 'Builder', 'learndash' ), 'metaboxes' => [ 'learndash_courses_builder_courses_builder' ], ]; } if ( isset( $_GET['course_id'] ) ) { $header_data['tabs'][] = [ 'id' => 'sfwd-courses', 'name' => esc_html__( 'Settings', 'learndash' ), 'link' => get_edit_post_link( absint( $_GET['course_id'] ) ) . '¤tTab=sfwd-courses', 'isExternal' => 'true', ]; } } elseif ( in_array( $pagenow, array( 'edit.php', 'edit-tags.php', 'admin.php', 'options-general.php' ) ) ) { $logic_control = 'archive'; } elseif ( in_array( $pagenow, array( 'post.php', 'post-new.php' ) ) ) { $logic_control = 'post'; } if ( 'archive' === $logic_control ) { if ( learndash_is_admin_user() ) { $header_data['back_to_title'] = esc_html__( 'Overview', 'learndash' ); $header_data['back_to_url'] = admin_url( 'admin.php?page=learndash_lms_overview' ); } else { $header_data['back_to_title'] = ''; $header_data['back_to_url'] = ''; } if ( 'admin.php?page=learndash_lms_settings' === $screen->parent_file ) { $header_data['post_data']['builder_post_title'] = esc_html__( 'Settings', 'learndash' ); } if ( learndash_get_post_type_slug( 'essay' ) === $screen_post_type ) { if ( learndash_is_group_leader_user() ) { $header_data['post_data']['builder_post_title'] = sprintf( // translators: placeholder: Essays. esc_html_x( '%s', 'placeholder: Essays', 'learndash' ), $screen_post_type_object->labels->name ); } else { $header_data['post_data']['builder_post_title'] = sprintf( // translators: placeholder: Quizzes. esc_html_x( '%s', 'placeholder: Quizzes', 'learndash' ), learndash_get_custom_label( 'quizzes' ) ); } } elseif ( ( isset( $screen_post_type_object ) ) && ( is_a( $screen_post_type_object, 'WP_Post_Type' ) ) ) { $header_data['post_data']['builder_post_title'] = sprintf( // translators: placeholder: Post Type Plural Name. esc_html_x( '%s', 'placeholder: Post Type Plural Name', 'learndash' ), $screen_post_type_object->labels->name ); } if ( learndash_get_post_type_slug( 'quiz' ) === $screen_post_type ) { $action_menu[] = array( 'title' => esc_html_x( 'Import/Export', 'Quiz Import/Export Tab Label', 'learndash' ), 'link' => 'admin.php?page=ldAdvQuiz', 'isExternal' => 'false', ); } if ( ( 'groups_page_group_admin_page' === $screen->id ) || ( 'learndash-lms_page_group_admin_page' === $screen->id ) ) { if ( ( isset( $_GET['group_id'] ) ) && ( ! empty( $_GET['group_id'] ) ) ) { if ( ( isset( $_GET['user_id'] ) ) && ( ! empty( $_GET['user_id'] ) ) ) { $user = get_user_by( 'id', absint( $_GET['user_id'] ) ); if ( ( $user ) && ( is_a( $user, 'WP_User' ) ) ) { if ( ! empty( $user->display_name ) ) { $user_name = $user->display_name; } else { $user_name = $user->first_name . ' ' . $user->last_name; } $header_data['post_data']['builder_post_title'] = $user_name; $header_data['back_to_title'] = get_the_title( absint( $_GET['group_id'] ) ); $header_data['back_to_url'] = add_query_arg( array( 'group_id' => absint( $_GET['group_id'] ), 'page' => 'group_admin_page', ), admin_url( 'admin.php' ) ); } } else { $header_data['post_data']['builder_post_title'] = get_the_title( absint( $_GET['group_id'] ) ); $header_data['back_to_title'] = esc_html__( 'Group Administration', 'learndash' ); $header_data['back_to_url'] = add_query_arg( array( 'page' => 'group_admin_page', ), admin_url( 'admin.php' ) ); } } else { $header_data['post_data']['builder_post_title'] = esc_html__( 'Group Administration', 'learndash' ); } } foreach ( $this->admin_tab_sets[ $menu_tab_key ] as $menu_item ) { if ( ( isset( $menu_item['link'] ) ) && ( ! empty( $menu_item['link'] ) ) ) { $link_parts = wp_parse_url( $menu_item['link'] ); if ( ( ! isset( $menu_item['cap'] ) ) || ( ! current_user_can( $menu_item['cap'] ) ) ) { continue; } if ( ( isset( $learndash_metaboxes[ $screen->id ] ) ) && ( ! empty( $learndash_metaboxes[ $screen->id ] ) ) ) { $metaboxes = array_keys( $learndash_metaboxes[ $screen->id ] ); } else { $metaboxes = []; } if ( ( isset( $link_parts['path'] ) ) && ( ! empty( $link_parts['path'] ) ) ) { if ( 'edit.php' === $link_parts['path'] ) { $header_data['tabs'][] = array( 'id' => $menu_item['id'], 'name' => $menu_item['name'], 'link' => admin_url( $menu_item['link'] ), 'isExternal' => 'true', 'actions' => array(), 'metaboxes' => $metaboxes, ); } elseif ( ( 'admin.php' === $link_parts['path'] ) || ( 'options-general.php' === $link_parts['path'] ) ) { $header_data['tabs'][] = array( 'id' => $menu_item['id'], 'name' => $menu_item['name'], 'link' => admin_url( $menu_item['link'] ), 'isExternal' => 'true', 'actions' => array(), 'metaboxes' => $metaboxes, ); } elseif ( 'edit-tags.php' === $link_parts['path'] ) { $action_menu[] = array( 'title' => $menu_item['name'], 'link' => $menu_item['link'], 'isExternal' => 'false', 'metaboxes' => $metaboxes, ); } } } } if ( ( 'learndash-lms_page_learndash-lms-reports' === $screen->id ) || ( ( isset( $_GET['page'] ) ) && ( 'learndash-lms-reports' === $_GET['page'] ) ) ) { if ( isset( $header_data['tabs'][0] ) ) { $header_data['currentTab'] = $header_data['tabs'][0]['id']; } } } elseif ( 'post' === $logic_control ) { $header_data['back_to_title'] = esc_html__( 'Back', 'learndash' ); $header_data['back_to_url'] = admin_url( 'edit.php?post_type=' . $screen_post_type ); if ( ( isset( $_GET['currentTab'] ) ) && ( ! empty( $_GET['currentTab'] ) ) ) { $header_data['currentTab'] = esc_attr( $_GET['currentTab'] ); } else { $header_data['currentTab'] = 'post-body-content'; } $header_data['post_data']['builder_post_id'] = get_the_ID(); if ( ! $header_data['post_data']['builder_post_id'] ) { if ( ( isset( $_GET['post'] ) ) && ( ! empty( $_GET['post'] ) ) ) { $post_id = absint( $_GET['post'] ); if ( get_post_type( $post_id ) === learndash_get_post_type_slug( 'quiz' ) ) { $header_data['post_data']['builder_post_id'] = $post_id; } } else { if ( ( isset( $_GET['post_id'] ) ) && ( ! empty( $_GET['post_id'] ) ) ) { $post_id = absint( $_GET['post_id'] ); if ( get_post_type( $post_id ) === learndash_get_post_type_slug( 'quiz' ) ) { $header_data['post_data']['builder_post_id'] = $post_id; } } } } $header_data['post_data']['builder_post_title'] = ''; if ( ! empty( $header_data['post_data']['builder_post_id'] ) ) { $header_data['post_data']['builder_post_title'] = get_the_title( $header_data['post_data']['builder_post_id'] ); } $header_data['post_data']['builder_post_type'] = $screen_post_type; $header_data['back_to_title'] = learndash_get_label_course_step_back( $screen_post_type, true ); $header_data['tabs'] = array( array( 'id' => 'post-body-content', 'name' => learndash_get_label_course_step_page( $screen_post_type ), 'actions' => array(), ), ); if ( ( isset( $_GET['page'] ) ) && ( 'ldAdvQuiz' === $_GET['page'] ) ) { if ( ( isset( $_GET['post_id'] ) ) && ( ! empty( $_GET['post_id'] ) ) ) { if ( ( isset( $_GET['module'] ) ) && ( 'question' === $_GET['module'] ) ) { if ( ( isset( $_GET['action'] ) ) && ( 'addEdit' === $_GET['action'] ) ) { $header_data['currentTab'] = $screen->id; $header_data['back_to_title'] = learndash_get_label_course_step_back( learndash_get_post_type_slug( 'question' ), true ); $header_data['back_to_url'] = add_query_arg( array( 'page' => 'ldAdvQuiz', 'module' => 'question', 'quiz_id' => $_GET['quiz_id'], 'post_id' => $_GET['post_id'], ), 'admin.php' ); $header_data['currentTab'] = $screen->id; $header_data['tabs'] = array( array( 'id' => $screen->id, 'name' => learndash_get_label_course_step_page( learndash_get_post_type_slug( 'question' ) ), 'actions' => array(), ), ); } else { $header_data['back_to_title'] = learndash_get_label_course_step_back( learndash_get_post_type_slug( 'quiz' ), true ); $header_data['back_to_url'] = admin_url( 'edit.php?post_type=' . learndash_get_post_type_slug( 'quiz' ) ); $header_data['currentTab'] = $screen->id; $header_data['tabs'] = array( array( 'id' => $screen->id, 'name' => sprintf( // translators: placeholder: Questions. esc_html_x( '%s', 'placeholder: Questions', 'learndash' ), learndash_get_custom_label( 'questions' ) ), 'actions' => array(), ), ); } } else { $header_data['back_to_title'] = learndash_get_label_course_step_page( learndash_get_post_type_slug( 'quiz' ) ); $header_data['back_to_url'] = get_edit_post_link( absint( $_GET['post_id'] ) ); $header_data['currentTab'] = $screen->id; } } else { // Quiz Import.Export page. $header_data['currentTab'] = 'import-export'; $header_data['tabs'] = array( array( 'id' => $header_data['currentTab'], 'name' => 'Import/Export Page', 'link' => admin_url( 'admin.php?page=ldAdvQuiz' ), 'isExternal' => 'true', 'actions' => array(), ), ); } if ( ( isset( $_GET['post'] ) ) && ( ! empty( $_GET['post'] ) ) ) { $action_menu = array_merge( $action_menu, array( array( 'title' => sprintf( // translators: placeholders: Quiz, Questions. esc_html_x( 'Reprocess %1$s %2$s', 'placeholders: Quiz, Questions', 'learndash' ), LearnDash_Custom_Label::get_label( 'Quiz' ), LearnDash_Custom_Label::get_label( 'Questions' ) ), 'link' => add_query_arg( 'quiz_id', absint( $_GET['post'] ), admin_url( 'admin.php?page=learndash_data_upgrades' ) ), 'isExternal' => 'true', ) ) ); if ( current_user_can('wpProQuiz_export') ) { $action_menu = array_merge( $action_menu, array( array( 'title' => sprintf( // translators: placeholder: Quiz. esc_html_x( 'Export %s', 'placeholder: Quiz', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ) ), 'link' => add_query_arg( array( 'page' => 'ldAdvQuiz', 'quiz_id' => absint( $_GET['post'] ), ), admin_url( 'admin.php' ) ), 'isExternal' => 'true', ) ) ); } $action_menu = array_merge( $action_menu, array( array( 'title' => esc_html__( 'Statistics', 'learndash' ), 'link' => add_query_arg( array( 'module' => 'statistics', 'currentTab' => 'statistics', ), $this->get_quiz_base_url() ), 'isExternal' => 'false', ), array( 'title' => esc_html__( 'Leaderboard', 'learndash' ), 'link' => add_query_arg( array( 'module' => 'toplist', 'currentTab' => 'leaderboard', ), $this->get_quiz_base_url() ), 'isExternal' => 'false', ), ) ); } if ( ( isset( $_GET['module'] ) ) && ( 'statistics' === $_GET['module'] ) ) { $header_data['tabs'] = array( array( 'id' => $screen->id, 'name' => esc_html__( 'Statistics', 'learndash' ), 'actions' => $action_menu, ), ); } elseif ( ( isset( $_GET['module'] ) ) && ( 'toplist' === $_GET['module'] ) ) { $header_data['tabs'] = array( array( 'id' => $screen->id, 'name' => esc_html__( 'Leaderboard', 'learndash' ), 'actions' => $action_menu, ), ); } } elseif ( learndash_get_post_type_slug( 'course' ) === $screen_post_type ) { if ( 'yes' === LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Courses_Builder', 'enabled' ) ) { $header_data['tabs'] = array_merge( $header_data['tabs'], array( array( 'id' => 'learndash_course_builder', 'name' => esc_html__( 'Builder', 'learndash' ), ), ) ); } if ( current_user_can( 'edit_groups' ) ) { if ( true === apply_filters( 'learndash_show_metabox_course_groups', true ) ) { $header_data['tabs'] = array_merge( $header_data['tabs'], array( array( 'id' => $screen_post_type . '-settings', 'name' => esc_html__( 'Settings', 'learndash' ), 'metaboxes' => [ 'sfwd-courses', 'learndash-course-display-content-settings', 'learndash-course-access-settings', 'learndash-course-navigation-settings', 'learndash-course-users-settings', 'learndash-course-grid-meta-box' ], 'showDocumentSidebar' => 'false', ), array( 'id' => 'learndash_course_groups', 'name' => esc_html__( 'Groups', 'learndash' ), 'metaboxes' => [ 'learndash_course_groups' ], 'showDocumentSidebar' => 'false', ), ) ); } } } elseif ( learndash_get_post_type_slug( 'quiz' ) === $screen_post_type ) { if ( ( true === is_data_upgrade_quiz_questions_updated() ) && ( LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Quizzes_Builder', 'enabled' ) === 'yes' ) ) { $header_data['tabs'] = array_merge( $header_data['tabs'], array( array( 'id' => 'learndash_quiz_builder', 'name' => esc_html__( 'Builder', 'learndash' ), ), ) ); } $header_data['tabs'] = array_merge( $header_data['tabs'], array( array( 'id' => $screen_post_type . '-settings', 'name' => esc_html__( 'Settings', 'learndash' ), 'metaboxes' => [ $screen_post_type, 'learndash-quiz-access-settings', 'learndash-quiz-progress-settings', 'learndash-quiz-display-content-settings', 'learndash-quiz-results-options', 'learndash-quiz-admin-data-handling-settings', 'learndash-course-grid-meta-box' ], 'showDocumentSidebar' => 'false', ), ) ); if ( ( true !== is_data_upgrade_quiz_questions_updated() ) || ( LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Quizzes_Builder', 'enabled' ) !== 'yes' ) ) { $pro_quiz_id = learndash_get_setting( get_the_ID(), 'quiz_pro', true ); if ( ! empty( $pro_quiz_id ) ) { $header_data['tabs'] = array_merge( $header_data['tabs'], array( array( 'id' => 'learndash_quiz_questions', 'name' => esc_html__( 'Questions', 'learndash' ), 'link' => add_query_arg( array( 'page' => 'ldAdvQuiz', 'module' => 'question', 'quiz_id' => $pro_quiz_id, 'post_id' => absint( $_GET['post'] ), ), admin_url( 'admin.php' ) ), 'isExternal' => 'true', ), ) ); } } if ( apply_filters( 'learndash_settings_metaboxes_legacy_quiz', LEARNDASH_SETTINGS_METABOXES_LEGACY_QUIZ, $screen_post_type ) ) { $header_data['tabs'] = array_merge( $header_data['tabs'], array( array( 'id' => 'learndash_quiz_advanced_aggregated', 'name' => esc_html__( 'Advanced Settings', 'learndash' ), 'metaboxes' => [ 'learndash_quiz_advanced_aggregated' ], 'showDocumentSidebar' => 'false', ), ) ); } $action_menu = array_merge( $action_menu, array( array( 'title' => sprintf( // translators: placeholders: Quiz, Questions. esc_html_x( 'Reprocess %1$s %2$s', 'placeholders: Quiz, Questions', 'learndash' ), LearnDash_Custom_Label::get_label( 'Quiz' ), LearnDash_Custom_Label::get_label( 'Questions' ) ), 'link' => add_query_arg( 'quiz_id', $post->ID, admin_url( 'admin.php?page=learndash_data_upgrades' ) ), 'isExternal' => 'true', ), ) ); if ( current_user_can('wpProQuiz_export') ) { $action_menu = array_merge( $action_menu, array( array( 'title' => sprintf( // translators: placeholder: Quiz. esc_html_x( 'Export %s', 'placeholder: Quiz', 'learndash' ), LearnDash_Custom_Label::get_label( 'quiz' ) ), 'link' => add_query_arg( array( 'page' => 'ldAdvQuiz', 'quiz_id' => $post->ID, ), admin_url( 'admin.php' ) ), 'isExternal' => 'true', ) ) ); } $action_menu = array_merge( $action_menu, array( array( 'title' => esc_html__( 'Statistics', 'learndash' ), 'link' => add_query_arg( array( 'module' => 'statistics', 'currentTab' => 'statistics', ), $this->get_quiz_base_url() ), 'isExternal' => 'false', ), array( 'title' => esc_html__( 'Leaderboard', 'learndash' ), 'link' => add_query_arg( array( 'module' => 'toplist', 'currentTab' => 'leaderboard', ), $this->get_quiz_base_url() ), 'isExternal' => 'false', ), ) ); } elseif ( in_array( $screen_post_type, array( learndash_get_post_type_slug( 'lesson' ), learndash_get_post_type_slug( 'topic' ), learndash_get_post_type_slug( 'question' ), ), true ) ) { $post_settings_metaboxes = array(); switch ( $screen_post_type ) { case learndash_get_post_type_slug( 'lesson' ): $post_settings_metaboxes = array_merge( $post_settings_metaboxes, [ $screen_post_type, 'learndash-lesson-display-content-settings', 'learndash-lesson-access-settings', 'learndash-course-grid-meta-box', ] ); break; case learndash_get_post_type_slug( 'topic' ): $post_settings_metaboxes = array_merge( $post_settings_metaboxes, [ $screen_post_type, 'learndash-topic-display-content-settings', 'learndash-topic-access-settings', 'learndash-course-grid-meta-box', ] ); break; case learndash_get_post_type_slug( 'question' ): if ( LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Quizzes_Builder', 'shared_questions' ) !== 'yes' ) { $post_settings_metaboxes = array_merge( $post_settings_metaboxes, [ $screen_post_type, ] ); } break; } if ( ! empty( $post_settings_metaboxes ) ) { $header_data['tabs'] = array_merge( $header_data['tabs'], array( array( 'id' => $screen_post_type . '-settings', 'name' => esc_html__( 'Settings', 'learndash' ), 'metaboxes' => $post_settings_metaboxes, 'showDocumentSidebar' => 'false', ), ) ); } } } $action_menu = apply_filters( 'learndash_header_action_menu', $action_menu, $menu_tab_key, $screen_post_type, $header_data['tabs'] ); if ( ! empty( $action_menu ) ) { if ( ! empty( $header_data['tabs'] ) ) { foreach ( $header_data['tabs'] as &$header_menu_item ) { $header_menu_item['actions'] = $action_menu; } } } $header_data['tabs'] = apply_filters( 'learndash_header_tab_menu', $header_data['tabs'], $menu_tab_key, $screen_post_type ); if ( 'sfwd-courses' === $screen_post_type ) { $header_data['posts_per_page'] = \LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Courses_Builder', 'per_page' ); } elseif ( 'sfwd-quiz' === $screen_post_type ) { $header_data['posts_per_page'] = \LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Quizzes_Builder', 'per_page' ); } else { $header_data['posts_per_page'] = get_option( 'posts_per_page' ); } // Load the MO file translations into wp.i18n script hook. learndash_load_inline_script_locale_data(); /** * Localize dynamic data to LearnDashData global at front-end. * * @param array $data Default global data. */ $learndash_data = apply_filters( 'learndash_header_data', $header_data, $menu_tab_key, $this->admin_tab_sets[ $menu_tab_key ] ); if ( ! empty( $learndash_data ) ) { echo '
'; if ( ( ! empty( $screen_post_type ) ) && ( in_array( $screen_post_type, LDLMS_Post_Types::get_post_types(), true ) ) && ( 'edit-' . $screen_post_type === $screen->id ) ) { if ( learndash_get_total_post_count( $screen_post_type ) === 0 ) { // If there's an onboarding page, we render it. if ( file_exists( LEARNDASH_LMS_PLUGIN_DIR . "/includes/admin/onboarding-templates/onboarding-{$screen_post_type}.php" ) ) { include_once LEARNDASH_LMS_PLUGIN_DIR . "/includes/admin/onboarding-templates/onboarding-{$screen_post_type}.php"; } } } if ( ! isset( $learndash_assets_loaded['styles']['learndash-new-header-style'] ) ) { wp_enqueue_style( 'learndash-new-header-style', LEARNDASH_LMS_PLUGIN_URL . 'assets/js/builder/dist/header' . leardash_min_builder_asset() . '.css', array(), LEARNDASH_SCRIPT_VERSION_TOKEN ); wp_style_add_data( 'learndash-new-header-style', 'rtl', 'replace' ); $learndash_assets_loaded['styles']['learndash-new-header-style'] = __FUNCTION__; } $css_lesson_label = \LearnDash_Custom_Label::get_label( 'lesson' )[0]; $css_topic_label = \LearnDash_Custom_Label::get_label( 'topic' )[0]; $css_quiz_label = \LearnDash_Custom_Label::get_label( 'quiz' )[0]; $css_question_label = \LearnDash_Custom_Label::get_label( 'question' )[0]; $learndash_custom_css = " .learndash_navigation_lesson_topics_list .lesson > a:before, #sfwd-course-lessons h2:before { content: '{$css_lesson_label}'; } .learndash_navigation_lesson_topics_list .topic_item > a > span:before, #sfwd-course-topics h2:before { content: '{$css_topic_label}'; } .learndash_navigation_lesson_topics_list .quiz_list_item .lesson > a:before, #sfwd-course-quizzes h2:before { content: '{$css_quiz_label}'; } #sfwd-quiz-questions h2:before, .ld-question-overview-widget-item:before { content: '{$css_question_label}'; } "; wp_add_inline_style( 'learndash-new-header-style', $learndash_custom_css ); if ( ! isset( $learndash_assets_loaded['scripts']['learndash-new-header-script'] ) ) { wp_enqueue_script( 'learndash-new-header-script', LEARNDASH_LMS_PLUGIN_URL . 'assets/js/builder/dist/header' . leardash_min_builder_asset() . '.js', array( 'wp-i18n' ), LEARNDASH_SCRIPT_VERSION_TOKEN, true ); $learndash_assets_loaded['scripts']['learndash-new-header-script'] = __FUNCTION__; wp_localize_script( 'learndash-new-header-script', 'LearnDashData', $learndash_data ); } } } public function get_quiz_base_url() { $quiz_post_id = get_the_ID(); if ( ! $quiz_post_id ) { if ( ( isset( $_GET['post'] ) ) && ( ! empty( $_GET['post'] ) ) ) { $post_id = absint( $_GET['post'] ); if ( get_post_type( $post_id ) === learndash_get_post_type_slug( 'quiz' ) ) { $quiz_post_id = $post_id; } } else { if ( ( isset( $_GET['post_id'] ) ) && ( ! empty( $_GET['post_id'] ) ) ) { $post_id = absint( $_GET['post_id'] ); if ( get_post_type( $post_id ) === learndash_get_post_type_slug( 'quiz' ) ) { $header_data['post_data']['builder_post_id'] = $post_id; } } } } $quiz_id = 0; if ( ! empty( $quiz_post_id ) ) { $quiz_id = learndash_get_setting( $quiz_post_id, 'quiz_pro' ); } $url_params = array( 'page' => 'ldAdvQuiz', 'id' => $quiz_id, 'post_id' => $quiz_post_id, 'post' => $quiz_post_id, ); return add_query_arg( $url_params, admin_url( 'admin.php' ) ); } // End of methods } } $ld_admin_menus_tabs = Learndash_Admin_Menus_Tabs::get_instance(); function learndash_add_admin_tab_item( $menu_slug, $menu_item, $menu_priority ) { Learndash_Admin_Menus_Tabs::get_instance()->add_admin_tab_item( $menu_slug, $menu_item, $menu_priority ); } /** * Get current admin tabs set. * * @return array */ function learndash_get_current_tabs_set() { return Learndash_Admin_Menus_Tabs::get_instance()->learndash_admin_tabs(); } includes/admin/class-learndash-admin-binary-selector.php000066600000124355152141567370017436 0ustar00defaults = array( 'html_title' => '', 'html_id' => '', 'html_name' => '', 'html_class' => '', 'selected_ids' => array(), 'included_ids' => array(), 'max_height' => '250px', 'min_height' => '250px', 'lazy_load' => false, 'search_label_left' => esc_html__( 'Search:', 'learndash' ), 'search_label_right' => esc_html__( 'Search:', 'learndash' ), 'is_search' => false, 'is_pager' => false, ); $this->args = wp_parse_args( $args, $this->defaults ); $this->args['html_slug'] = sanitize_title_with_dashes( $this->args['html_id'] ); // We want to conver this to an array. if ( ( ! empty( $this->args['selected_ids'] ) ) && ( is_string( $this->args['selected_ids'] ) ) ) { $this->args['selected_ids'] = explode( ',', $this->args['selected_ids'] ); } elseif ( ( empty( $this->args['selected_ids'] ) ) && ( is_string( $this->args['selected_ids'] ) ) ) { $this->args['selected_ids'] = array(); } // If for some reason the 'include' element is passed in we convert it to our 'included_ids'. if ( ( isset( $this->args['include'] ) ) && ( ! empty( $this->args['include'] ) ) && ( empty( $this->args['included_ids'] ) ) ) { $this->args['included_ids'] = $this->args['include']; unset( $this->args['include'] ); } if ( ( ! empty( $this->args['included_ids'] ) ) && ( is_string( $this->args['included_ids'] ) ) ) { $this->args['included_ids'] = explode( ',', $this->args['included_ids'] ); } // Let the outside world override some settings. $this->args = apply_filters( 'learndash_binary_selector_args', $this->args, $this->selector_class ); $this->element_items['left'] = array(); $this->element_items['right'] = array(); $this->element_queries['left'] = array(); $this->element_queries['right'] = array(); } /** * Show function for selector. */ public function show() { $this->query_selection_section_items( 'left' ); $this->query_selection_section_items( 'right' ); // If we don't have items for the left (All items) then something is wrong. Abort. if ( ( empty( $this->element_items['left'] ) ) && ( empty( $this->element_items['right'] ) ) ) { return; } // Before we add our data element we remove all the unneeded keys. Just to keep it small. $element_data = $this->element_data; foreach ( $this->defaults as $key => $val ) { if ( isset( $element_data['query_vars'][ $key ] ) ) { unset( $element_data['query_vars'][ $key ] ); } } // Aware of the PHP post number vars limit we convert the inlcude and exclude arrays to json so they are sent back as strings. if ( ( isset( $element_data['query_vars']['include'] ) ) && ( ! empty( $element_data['query_vars']['include'] ) ) ) { $element_data['query_vars']['include'] = wp_json_encode( $element_data['query_vars']['include'], JSON_FORCE_OBJECT ); } if ( ( isset( $element_data['query_vars']['exclude'] ) ) && ( ! empty( $element_data['query_vars']['exclude'] ) ) ) { $element_data['query_vars']['exclude'] = wp_json_encode( $element_data['query_vars']['exclude'], JSON_FORCE_OBJECT ); } ?>
show_selections_title(); ?> show_selections_section( 'left' ); $this->show_selections_section_controls(); $this->show_selections_section( 'right' ); ?>
args['max_height'] ) ) && ( ! empty( $this->args['max_height'] ) ) ) { ?> args['min_height'] ) ) && ( ! empty( $this->args['min_height'] ) ) ) { ?>
args['html_title'] ) ) { echo $this->args['html_title']; } } /** * Show Selector Controls. * * Shows the Add/Remove buttons which lives betweeen the left/right side selectors. */ protected function show_selections_section_controls() { ?>
    show_selections_section_pager( $position ); ?>
is_valid_position( $position ) ) { echo $this->build_options_html( $position ); } } /** * Show selector section legend. * * @param string $position Value for 'left' or 'right' position. */ protected function show_selections_section_legend( $position = '' ) { if ( $this->is_valid_position( $position ) ) { if ( 'left' === $position ) { ?> is_valid_position( $position ) ) { ?>
  • is_valid_position( $position ) ) { if ( isset( $this->args[ 'search_label_' . $position ] ) ) { return $this->args[ 'search_label_' . $position ]; } elseif ( isset( $this->args['search_label'] ) ) { return $this->args['search_label']; } else { return esc_html__( 'Search', 'learndash' ); } } } /** * Get selector section pager data. * * @param string $position Value for 'left' or 'right' position. */ protected function get_pager_data( $position = '' ) { } /** * Get selector section items. * * @param string $position Value for 'left' or 'right' position. */ protected function query_selection_section_items( $position = '' ) { } /** * Process selector section query. * * @param array $query_args Array of query args. * @param string $position Value for 'left' or 'right' position. */ protected function process_query( $query_args = array(), $position = '' ) { } /** * Load selector section page AJAX. * * @param string $position Value for 'left' or 'right' position. */ public function load_pager_ajax( $position = '' ) { $reply_data['html_options'] = ''; if ( $this->is_valid_position( $position ) ) { $this->query_selection_section_items( $position ); $reply_data = $this->element_data[ $position ]; $reply_data['html_options'] = $this->build_options_html( $position ); } return $reply_data; } /** * Load selector section search AJAX. * * @param string $position Value for 'left' or 'right' position. */ public function load_search_ajax( $position = '' ) { $reply_data['html_options'] = ''; if ( $this->is_valid_position( $position ) ) { $this->args['is_search'] = true; $this->query_selection_section_items( $position ); if ( isset( $this->element_data[ $position ] ) ) { $reply_data = $this->element_data[ $position ]; $reply_data['html_options'] = $this->build_options_html( $position ); } } return $reply_data; } /** * Get selector section nonce. */ protected function get_nonce_data() { return wp_create_nonce( $this->selector_class . '-' . $this->args['html_id'] ); } /** * Validate selector section nonce. * * @param string $nonce Nonce value to validate. */ public function validate_nonce_data( $nonce = '' ) { if ( ! empty( $nonce ) ) { return wp_verify_nonce( $nonce, $this->selector_class . '-' . $this->args['html_id'] ); } } /** * Utility function to check and validate the $postition * variable. It should be only 'left' or 'right'. * * @since 2.6.0 * * @param string $position Should have value 'left' or 'right'. * @return true if valid. */ public function is_valid_position( $position = '' ) { if ( ! empty( $position ) ) { $position = esc_attr( $position ); if ( ( 'left' === $position ) || ( 'right' === $position ) ) { return true; } } return false; } } } if ( ( ! class_exists( 'Learndash_Binary_Selector_Users' ) ) && ( class_exists( 'Learndash_Binary_Selector' ) ) ) { /** * Class for LearnDash Binary Selector or Users. */ class Learndash_Binary_Selector_Users extends Learndash_Binary_Selector { /** * Public constructor for class. * * @param array $args Array of arguments for class. */ public function __construct( $args = array() ) { // Set up the defaut query args for the Users. $defaults = array( 'paged' => 1, 'number' => get_option( 'posts_per_page' ), //'search_number' => get_option( 'posts_per_page' ), 'fields' => array( 'ID', 'display_name', 'user_login' ), 'orderby' => 'display_name', 'order' => 'ASC', 'search' => '', ); if ( ( ! isset( $args['number'] ) ) && ( isset( $args['per_page'] ) ) && ( ! empty( $args['per_page'] ) ) ) { $args['number'] = $args['per_page']; } $args = wp_parse_args( $args, $defaults ); parent::__construct( $args ); if ( ( isset( $this->args['included_ids'] ) ) && ( ! empty( $this->args['included_ids'] ) ) ) { $this->query_args['include'] = $this->args['included_ids']; } if ( ( isset( $this->args['excluded_ids'] ) ) && ( ! empty( $this->args['excluded_ids'] ) ) ) { $this->query_args['exclude'] = $this->args['excluded_ids']; } } /** * Get selector section pager data. * * @param string $position Value for 'left' or 'right' position. */ protected function get_pager_data( $position = '' ) { $pager = array(); if ( $this->is_valid_position( $position ) ) { if ( isset( $this->element_queries[ $position ] ) ) { if ( isset( $this->element_queries[ $position ]->query_vars['paged'] ) ) { $pager['current_page'] = intval( $this->element_queries[ $position ]->query_vars['paged'] ); } else { $pager['current_page'] = 0; } if ( isset( $this->element_queries[ $position ]->query_vars['number'] ) ) { $pager['per_page'] = intval( $this->element_queries[ $position ]->query_vars['number'] ); } else { $pager['per_page'] = 0; } if ( isset( $this->element_queries[ $position ]->total_users ) ) { $pager['total_items'] = intval( $this->element_queries[ $position ]->total_users ); } else { $pager['total_items'] = 0; } if ( ( ! empty( $pager['per_page'] ) ) && ( ! empty( $pager['total_items'] ) ) ) { $pager['total_pages'] = ceil( intval( $this->element_queries[ $position ]->total_users ) / intval( $this->element_queries[ $position ]->query_vars['number'] ) ); } else { $pager['total_pages'] = 0; } } } return $pager; } /** * Build selector section options HTML. * * @param string $position Value for 'left' or 'right' position. */ protected function build_options_html( $position = '' ) { $options_html = ''; if ( $this->is_valid_position( $position ) ) { if ( ! empty( $this->element_items[ $position ] ) ) { foreach ( $this->element_items[ $position ] as $user ) { $user_name = apply_filters( 'learndash_binary_selector_item', $user->display_name . ' (' . $user->user_login . ')', $user, $position, $this->selector_class ); if ( ! empty( $user_name ) ) { $user_name = strip_tags( $user_name ); } else { $user_name = $user->display_name . ' (' . $user->user_login . ')'; } $disabled_class = ''; $disabled_state = ''; if ( ( is_array( $this->args['selected_ids'] ) ) && ( ! empty( $this->args['selected_ids'] ) ) ) { if ( in_array( $user->ID, $this->args['selected_ids'] ) ) { $disabled_class = 'learndash-binary-selector-item-disabled'; if ( 'left' === $position ) { $disabled_state = ' disabled="disabled" '; } } } $options_html .= ''; } } } return $options_html; } /** Query selector section items. * * @param string $position Value for 'left' or 'right' position. */ protected function query_selection_section_items( $position = '' ) { if ( $this->is_valid_position( $position ) ) { if ( 'left' === $position ) { if ( ! empty( $this->args['included_ids'] ) ) { $this->args['include'] = $this->args['included_ids']; } if ( ( isset( $this->args['excluded_ids'] ) ) && ( ! empty( $this->args['excluded_ids'] ) ) ) { $this->args['exclude'] = $this->args['excluded_ids']; } if ( true === $this->args['is_search'] ) { if ( ( isset( $this->args['selected_ids'] ) ) && ( ! empty( $this->args['selected_ids'] ) ) ) { if ( ! isset( $this->args['exclude'] ) ) { $this->args['exclude'] = array(); } $this->args['exclude'] = array_merge( $this->args['exclude'], $this->args['selected_ids'] ); } } } elseif ( 'right' === $position ) { if ( ! empty( $this->args['selected_ids'] ) ) { $this->args['include'] = $this->args['selected_ids']; } else { $this->args['include'] = array( 0 ); } if ( ( isset( $this->args['excluded_ids'] ) ) && ( ! empty( $this->args['excluded_ids'] ) ) ) { $this->args['exclude'] = $this->args['excluded_ids']; } } $this->process_query( $this->args, $position ); if ( isset( $this->args['include'] ) ) { unset( $this->args['include'] ); } } } /** * Process selector section query. * * @param array $query_args Array of query args. * @param string $position Value for 'left' or 'right' position. */ public function process_query( $query_args = array(), $position = '' ) { if ( $this->is_valid_position( $position ) ) { $query = new WP_User_Query( $query_args ); $items = $query->get_results(); if ( ! empty( $items ) ) { $this->element_queries[ $position ] = $query; $this->element_items[ $position ] = $items; // We only need to store one reference to the query as the left and right will share this. Plus // the query on the right side may/will have the 'include' elements and we store this as 'selected_ids' key. if ( 'left' === $position ) { $this->element_data['query_vars'] = $query_args; } $this->element_data['selector_class'] = $this->selector_class; $this->element_data['selector_nonce'] = $this->get_nonce_data(); $this->element_data[ $position ]['position'] = $position; $this->element_data[ $position ]['pager'] = $this->get_pager_data( $position ); } } } /** * Load selector section search AJAX. * * @param string $position Value for 'left' or 'right' position. */ public function load_search_ajax( $position = '' ) { $reply_data = array(); if ( $this->is_valid_position( $position ) ) { if ( ( isset( $this->args['search'] ) ) && ( ! empty( $this->args['search'] ) ) ) { // For user searching Users we must include the beginning and ending '*' for wildcard matches. $this->args['search'] = '*' . $this->args['search'] . '*'; // Now call the parent function to perform the actual search. $reply_data = parent::load_search_ajax( $position ); } } return $reply_data; } } } if ( ( ! class_exists( 'Learndash_Binary_Selector_Course_Users' ) ) && ( class_exists( 'Learndash_Binary_Selector_Users' ) ) ) { /** * Class for LearnDash Binary Selector Course Users. */ class Learndash_Binary_Selector_Course_Users extends Learndash_Binary_Selector_Users { /** * Public constructor for class * * @param array $args Array of arguments for class. */ public function __construct( $args = array() ) { $this->selector_class = get_class( $this ); $defaults = array( 'course_id' => 0, 'html_title' => '

    ' . // translators: placeholder: Course. esc_html_x( '%s Users', 'Course Users Label', 'learndash' ) . '

    ', 'html_title' => '

    ' . // translators: placeholder: Course. sprintf( esc_html_x( '%s Users', 'Course Users label', 'learndash' ), LearnDash_Custom_Label::get_label( 'course' ) ) . '

    ', 'html_id' => 'learndash_course_users', 'html_class' => 'learndash_course_users', 'html_name' => 'learndash_course_users', 'search_label_left' => sprintf( // translators: placeholder: Course. esc_html_x( 'Search All %s Users', 'Search All Course Users', 'learndash' ), LearnDash_Custom_Label::get_label( 'course' ) ), 'search_label_right' => sprintf( // translators: placeholder: Course. esc_html_x( 'Search Assigned %s Users', 'Search Assigned Course Users', 'learndash' ), LearnDash_Custom_Label::get_label( 'course' ) ), ); $args = wp_parse_args( $args, $defaults ); $args['html_id'] = $args['html_id'] . '-' . $args['course_id']; $args['html_name'] = $args['html_name'] . '[' . $args['course_id'] . ']'; parent::__construct( $args ); } } } if ( ( ! class_exists( 'Learndash_Binary_Selector_Group_Users' ) ) && ( class_exists( 'Learndash_Binary_Selector_Users' ) ) ) { /** * Class for LearnDash Binary Selector Group Users. */ class Learndash_Binary_Selector_Group_Users extends Learndash_Binary_Selector_Users { /** * Public constructor for class * * @param array $args Array of arguments for class. */ public function __construct( $args = array() ) { $this->selector_class = get_class( $this ); $defaults = array( 'group_id' => 0, 'html_title' => '

    ' . esc_html__( 'Group Users', 'learndash' ) . '

    ', 'html_id' => 'learndash_group_users', 'html_class' => 'learndash_group_users', 'html_name' => 'learndash_group_users', 'search_label_left' => esc_html__( 'Search All Group Users', 'learndash' ), 'search_label_right' => esc_html__( 'Search Assigned Group Users', 'learndash' ), ); $args = wp_parse_args( $args, $defaults ); $args['html_id'] = $args['html_id'] . '-' . $args['group_id']; $args['html_name'] = $args['html_name'] . '[' . $args['group_id'] . ']'; parent::__construct( $args ); } } } if ( ( ! class_exists( 'Learndash_Binary_Selector_Group_Leaders' ) ) && ( class_exists( 'Learndash_Binary_Selector_Users' ) ) ) { /** * Class for LearnDash Binary Selector Group Leaders. */ class Learndash_Binary_Selector_Group_Leaders extends Learndash_Binary_Selector_Users { /** * Public constructor for class * * @param array $args Array of arguments for class. */ public function __construct( $args = array() ) { $this->selector_class = get_class( $this ); $defaults = array( 'group_id' => 0, 'html_title' => '

    ' . esc_html__( 'Group Leaders', 'learndash' ) . '

    ', 'html_id' => 'learndash_group_leaders', 'html_class' => 'learndash_group_leaders', 'html_name' => 'learndash_group_leaders', 'search_label_left' => esc_html__( 'Search All Group Leaders', 'learndash' ), 'search_label_right' => esc_html__( 'Search Assigned Group Leaders', 'learndash' ), ); $args = wp_parse_args( $args, $defaults ); $args['html_id'] = $args['html_id'] . '-' . $args['group_id']; $args['html_name'] = $args['html_name'] . '[' . $args['group_id'] . ']'; if ( ( ! isset( $args['included_ids'] ) ) || ( empty( $args['included_ids'] ) ) ) { $args['role__in'] = array( 'group_leader', 'administrator' ); } parent::__construct( $args ); } } } if ( ( ! class_exists( 'Learndash_Binary_Selector_Posts' ) ) && ( class_exists( 'Learndash_Binary_Selector' ) ) ) { /** * Class for LearnDash Binary Selector Posts. */ class Learndash_Binary_Selector_Posts extends Learndash_Binary_Selector { /** * Public constructor for class * * @param array $args Array of arguments for class. */ public function __construct( $args = array() ) { // Set up the defaut query args for the Users. $defaults = array( 'paged' => 1, 'post_status' => array( 'publish' ), 'posts_per_page' => get_option( 'posts_per_page' ), //'search_posts_per_page' => get_option( 'posts_per_page' ), 'orderby' => 'title', 'order' => 'ASC', 'ignore_sticky_posts' => true, 'search' => '', ); if ( ( ! isset( $args['posts_per_page'] ) ) && ( isset( $args['number'] ) ) && ( ! empty( $args['number'] ) ) ) { $args['posts_per_page'] = $args['number']; } $args = wp_parse_args( $args, $defaults ); parent::__construct( $args ); if ( ( isset( $this->args['included_ids'] ) ) && ( ! empty( $this->args['included_ids'] ) ) ) { $this->query_args['include'] = $this->args['included_ids']; } } /** * Get selector section items. * * @param string $position Value for 'left' or 'right' position. */ protected function query_selection_section_items( $position = '' ) { if ( $this->is_valid_position( $position ) ) { if ( 'left' === $position ) { if ( ! empty( $this->args['included_ids'] ) ) { $this->args['post__in'] = $this->args['included_ids']; } if ( true === $this->args['is_search'] ) { if ( ( isset( $this->args['selected_ids'] ) ) && ( ! empty( $this->args['selected_ids'] ) ) ) { if ( ! isset( $this->args['post__not_in'] ) ) { $this->args['post__not_in'] = array(); } $this->args['post__not_in'] = array_merge( $this->args['post__not_in'], $this->args['selected_ids'] ); } } } else if ( 'right' === $position ) { if ( ! empty( $this->args['selected_ids'] ) ) { $this->args['post__in'] = $this->args['selected_ids']; } else { $this->args['post__in'] = array( 0 ); } } $this->process_query( $this->args, $position ); if ( isset( $this->args['post__in'] ) ) { unset( $this->args['post__in'] ); } } } /** * Process selector section query. * * @param array $query_args Array of query args. * @param string $position Value for 'left' or 'right' position. */ protected function process_query( $query_args = array(), $position = '' ) { if ( $this->is_valid_position( $position ) ) { $query = new WP_Query( $query_args ); if ( ( isset( $query->posts ) ) && ( ! empty( $query->posts ) ) ) { $this->element_queries[ $position ] = $query; if ( 'left' === $position ) { $this->element_data['query_vars'] = $query_args; } $this->element_items[ $position ] = $query->posts; $this->element_data['selector_class'] = $this->selector_class; $this->element_data['selector_nonce'] = $this->get_nonce_data(); $this->element_data[ $position ]['position'] = $position; $this->element_data[ $position ]['pager'] = $this->get_pager_data( $position ); } } } /** * Get selector section pager data. * * @param string $position Value for 'left' or 'right' position. */ protected function get_pager_data( $position = '' ) { $pager = array(); if ( $this->is_valid_position( $position ) ) { if ( isset( $this->element_queries[ $position ] ) ) { if ( isset( $this->element_queries[ $position ]->query_vars['paged'] ) ) { $pager['current_page'] = intval( $this->element_queries[ $position ]->query_vars['paged'] ); } else { $pager['current_page'] = 0; } if ( isset( $this->element_queries[ $position ]->query_vars['posts_per_page'] ) ) { $pager['per_page'] = intval( $this->element_queries[ $position ]->query_vars['posts_per_page'] ); } else { $pager['per_page'] = 0; } if ( isset( $this->element_queries[ $position ]->found_posts ) ) { $pager['total_items'] = intval( $this->element_queries[ $position ]->found_posts ); } else { $pager['total_items'] = 0; } if ( ( ! empty( $pager['per_page'] ) ) && ( ! empty( $pager['total_items'] ) ) ) { $pager['total_pages'] = ceil( intval( $pager['total_items'] ) / intval( $pager['per_page'] ) ); } else { $pager['total_pages'] = 0; } } } return $pager; } /** * Build selector section options HTML. * * @param string $position Value for 'left' or 'right' position. */ protected function build_options_html( $position = '' ) { $options_html = ''; if ( $this->is_valid_position( $position ) ) { if ( ! empty( $this->element_items[ $position ] ) ) { foreach ( $this->element_items[ $position ] as $post ) { $disabled_class = ''; $disabled_state = ''; $item_title = apply_filters( 'learndash_binary_selector_item', $post->post_title, $post, $position, $this->selector_class ); if ( ! empty( $item_title ) ) { $item_title = strip_tags( $item_title ); } else { $item_title = $post->post_title; } if ( ( is_array( $this->args['selected_ids'] ) ) && ( ! empty( $this->args['selected_ids'] ) ) ) { if ( in_array( $post->ID, $this->args['selected_ids'] ) ) { $disabled_class = 'learndash-binary-selector-item-disabled'; if ( 'left' == $position ) { $disabled_state = ' disabled="disabled" '; } } } $options_html .= ''; } } } return $options_html; } /** * Load selector section search AJAX. * * @param string $position Value for 'left' or 'right' position. */ public function load_search_ajax( $position = '' ) { $reply_data = array(); if ( $this->is_valid_position( $position ) ) { if ( ( ! isset( $this->args['s'] ) ) && ( isset( $this->args['search'] ) ) ) { $this->args['s'] = $this->args['search']; unset( $this->args['search'] ); } if ( ( isset( $this->args['s'] ) ) && ( ! empty( $this->args['s'] ) ) ) { $this->args['s'] = '"' . $this->args['s'] . '"'; add_filter( 'posts_search', array( $this, 'search_filter_by_title' ), 10, 2 ); $reply_data = parent::load_search_ajax( $position ); remove_filter( 'posts_search', array( $this, 'search_filter_by_title' ), 10, 2 ); } } return $reply_data; } /** * Search filter by Title. * * @param string $search Search pattern. * @param WP_Query $wp_query WP_Query object. */ public function search_filter_by_title( $search = '', WP_Query $wp_query ) { if ( ! empty( $search ) && ! empty( $wp_query->query_vars['search_terms'] ) ) { global $wpdb; $q = $wp_query->query_vars; $n = ! empty( $q['exact'] ) ? '' : '%'; $search = array(); foreach ( (array) $q['search_terms'] as $term ) { $search[] = $wpdb->prepare( "$wpdb->posts.post_title LIKE %s", $n . $wpdb->esc_like( $term ) . $n ); } if ( ! is_user_logged_in() ) { $search[] = "$wpdb->posts.post_password = ''"; } $search = ' AND ' . implode( ' AND ', $search ); } return $search; } } } if ( ( ! class_exists( 'Learndash_Binary_Selector_Group_Courses' ) ) && ( class_exists( 'Learndash_Binary_Selector_Posts' ) ) ) { /** * Class for LearnDash binary Selector Group Courses. */ class Learndash_Binary_Selector_Group_Courses extends Learndash_Binary_Selector_Posts { /** * Public constructor for class * * @param array $args Array of arguments for class. */ public function __construct( $args = array() ) { $this->selector_class = get_class( $this ); $defaults = array( 'group_id' => 0, 'post_type' => 'sfwd-courses', 'html_title' => '

    ' . sprintf( // translators: placeholder: courses. esc_html_x( 'Group %s', 'Group Courses label', 'learndash' ), LearnDash_Custom_Label::get_label( 'courses' ) ) . '

    ', 'html_id' => 'learndash_group_courses', 'html_class' => 'learndash_group_courses', 'html_name' => 'learndash_group_courses', 'search_label_left' => sprintf( // translators: placeholder: courses. esc_html_x( 'Search All Group %s', 'Search All Group Courses Label', 'learndash' ), LearnDash_Custom_Label::get_label( 'courses' ) ), 'search_label_right' => sprintf( // translators: placeholder: courses. esc_html_x( 'Search Assigned Group %s', 'Search Assigned Group Courses Label', 'learndash' ), LearnDash_Custom_Label::get_label( 'courses' ) ), ); $args = wp_parse_args( $args, $defaults ); $args['html_id'] = $args['html_id'] . '-' . $args['group_id']; $args['html_name'] = $args['html_name'] . '[' . $args['group_id'] . ']'; parent::__construct( $args ); } } } if ( ( ! class_exists( 'Learndash_Binary_Selector_Course_Groups' ) ) && ( class_exists( 'Learndash_Binary_Selector_Posts' ) ) ) { /** * Class for LearnDash binary Selector Course Groups */ class Learndash_Binary_Selector_Course_Groups extends Learndash_Binary_Selector_Posts { /** * Public constructor for class * * @param array $args Array of arguments for class. */ public function __construct( $args = array() ) { $this->selector_class = get_class( $this ); $defaults = array( 'course_id' => 0, 'post_type' => 'groups', 'html_title' => '

    ' . sprintf( // translators: placeholder: Course. esc_html_x( 'Groups Using %s', 'Groups Using Course Label', 'learndash' ), LearnDash_Custom_Label::get_label( 'course' ) ) . '

    ', 'html_id' => 'learndash_course_groups', 'html_class' => 'learndash_course_groups', 'html_name' => 'learndash_course_groups', 'search_label_left' => esc_html__( 'Search All Groups', 'learndash' ), 'search_label_right' => sprintf( // translators: placeholder: Course. esc_html_x( 'Search %s Groups', 'Search Course Groups Label', 'learndash' ), LearnDash_Custom_Label::get_label( 'course' ) ), ); $args = wp_parse_args( $args, $defaults ); $args['html_id'] = $args['html_id'] . '-' . $args['course_id']; $args['html_name'] = $args['html_name'] . '[' . $args['course_id'] . ']'; parent::__construct( $args ); } } } if ( ( ! class_exists( 'Learndash_Binary_Selector_User_Courses' ) ) && ( class_exists( 'Learndash_Binary_Selector_Posts' ) ) ) { /** * Class for LearnDash binary Selector User Courses. */ class Learndash_Binary_Selector_User_Courses extends Learndash_Binary_Selector_Posts { /** * Public constructor for class * * @param array $args Array of arguments for class. */ public function __construct( $args = array() ) { $this->selector_class = get_class( $this ); $defaults = array( 'user_id' => 0, 'post_type' => 'sfwd-courses', 'html_title' => '

    ' . sprintf( // translators: placeholder: Courses. esc_html_x( 'User Enrolled in %s', 'User Enrolled in Courses Label', 'learndash' ), LearnDash_Custom_Label::get_label( 'courses' ) ) . '

    ', 'html_id' => 'learndash_user_courses', 'html_class' => 'learndash_user_courses', 'html_name' => 'learndash_user_courses', 'search_label_left' => sprintf( // translators: placeholder: Courses. esc_html_x( 'Search All %s', 'Search All Courses Label', 'learndash' ), LearnDash_Custom_Label::get_label( 'courses' ) ), 'search_label_right' => sprintf( // translators: placeholder: Courses. esc_html_x( 'Search Enrolled %s', 'Search Enrolled Courses Label', 'learndash' ), LearnDash_Custom_Label::get_label( 'courses' ) ), ); $args = wp_parse_args( $args, $defaults ); $args['html_id'] = $args['html_id'] . '-' . $args['user_id']; $args['html_name'] = $args['html_name'] . '[' . $args['user_id'] . ']'; parent::__construct( $args ); } } } if ( ( ! class_exists( 'Learndash_Binary_Selector_User_Groups' ) ) && ( class_exists( 'Learndash_Binary_Selector_Posts' ) ) ) { /** * Class for LearnDash binary Selector User Groups. */ class Learndash_Binary_Selector_User_Groups extends Learndash_Binary_Selector_Posts { /** * Public constructor for class * * @param array $args Array of arguments for class. */ public function __construct( $args = array() ) { $this->selector_class = get_class( $this ); $defaults = array( 'user_id' => 0, 'post_type' => 'groups', 'html_title' => '

    ' . esc_html__( 'User Enrolled in Groups', 'learndash' ) . '

    ', 'html_id' => 'learndash_user_groups', 'html_class' => 'learndash_user_groups', 'html_name' => 'learndash_user_groups', 'search_label_left' => esc_html__( 'Search All Groups', 'learndash' ), 'search_label_right' => esc_html__( 'Search Enrolled Groups', 'learndash' ), ); $args = wp_parse_args( $args, $defaults ); $args['html_id'] = $args['html_id'] . '-' . $args['user_id']; $args['html_name'] = $args['html_name'] . '[' . $args['user_id'] . ']'; parent::__construct( $args ); } } } if ( ( ! class_exists( 'Learndash_Binary_Selector_Leader_Groups' ) ) && ( class_exists( 'Learndash_Binary_Selector_Posts' ) ) ) { /** * Class for LearnDash binary Selector Leader Groups. */ class Learndash_Binary_Selector_Leader_Groups extends Learndash_Binary_Selector_Posts { /** * Public constructor for class * * @param array $args Array of arguments for class. */ public function __construct( $args = array() ) { $this->selector_class = get_class( $this ); $defaults = array( 'user_id' => 0, 'post_type' => 'groups', 'html_title' => '

    ' . esc_html__( 'Leader of Groups', 'learndash' ) . '

    ', 'html_id' => 'learndash_leader_groups', 'html_class' => 'learndash_leader_groups', 'html_name' => 'learndash_leader_groups', 'search_label_left' => esc_html__( 'Search All Groups', 'learndash' ), 'search_label_right' => esc_html__( 'Search Leader Groups', 'learndash' ), ); $args = wp_parse_args( $args, $defaults ); $args['html_id'] = $args['html_id'] . '-' . $args['user_id']; $args['html_name'] = $args['html_name'] . '[' . $args['user_id'] . ']'; parent::__construct( $args ); } } } /** * Handler function for AJAX pager. */ function learndash_binary_selector_pager_ajax() { $reply_data = array( 'status' => false ); if ( ( isset( $_POST['query_data'] ) ) && ( ! empty( $_POST['query_data'] ) ) ) { if ( ( isset( $_POST['query_data']['query_vars'] ) ) && ( ! empty( $_POST['query_data']['query_vars'] ) ) ) { $args = $_POST['query_data']['query_vars']; if ( ( isset( $args['include'] ) ) && ( ! empty( $args['include'] ) ) ) { if ( learndash_is_valid_JSON( stripslashes( $args['include'] ) ) ) { $args['include'] = (array)json_decode( stripslashes( $args['include'] ) ); } } if ( ( isset( $args['exclude'] ) ) && ( ! empty( $args['exclude'] ) ) ) { if ( learndash_is_valid_JSON( stripslashes( $args['exclude'] ) ) ) { $args['exclude'] = (array)json_decode( stripslashes( $args['exclude'] ) ); } } if ( ( isset( $_POST['query_data']['selected_ids'] ) ) && ( ! empty( $_POST['query_data']['selected_ids'] ) ) ) { $args['selected_ids'] = (array) json_decode( stripslashes( $_POST['query_data']['selected_ids'] ) ); } // Set our reference flag so other functions know we are running pager. $args['is_pager'] = true; if ( ( isset( $_POST['query_data']['selector_class'] ) ) && ( class_exists( $_POST['query_data']['selector_class'] ) ) && ( is_subclass_of( $_POST['query_data']['selector_class'], 'Learndash_Binary_Selector' ) ) ) { $selector = new $_POST['query_data']['selector_class']( $args ); if ( ( isset( $_POST['query_data']['selector_nonce'] ) ) && ( ! empty( $_POST['query_data']['selector_nonce'] ) ) ) { if ( $selector->validate_nonce_data( $_POST['query_data']['selector_nonce'] ) ) { if ( ( isset( $_POST['query_data']['position'] ) ) && ( ! empty( $_POST['query_data']['position'] ) ) ) { if ( ( isset( $_POST['query_data']['query_vars']['search'] ) ) && ( ! empty( $_POST['query_data']['query_vars']['search'] ) ) ) { //$selector->is_search = true; $reply_data = $selector->load_search_ajax( esc_attr( $_POST['query_data']['position'] ) ); } else { $reply_data = $selector->load_pager_ajax( esc_attr( $_POST['query_data']['position'] ) ); } } } } } } } if ( ! empty( $reply_data ) ) { echo json_encode( $reply_data ); } wp_die(); // this is required to terminate immediately and return a proper response. } add_action( 'wp_ajax_learndash_binary_selector_pager', 'learndash_binary_selector_pager_ajax' ); includes/admin/classes-builders/class-learndash-admin-course-builder-metabox.php000066600000133206152141567370024154 0ustar00builder_post_type = 'sfwd-courses'; $this->selector_post_types = array( learndash_get_post_type_slug( 'lesson' ), learndash_get_post_type_slug( 'topic' ), learndash_get_post_type_slug( 'quiz' ), ); $this->builder_init(); parent::__construct(); } /** * Iniitialize builder for specific Course Item. * * @since 2.6.0 * @param integer $post_id Post ID to load. */ public function builder_init( $post_id = 0 ) { if ( ! empty( $post_id ) ) { $this->builder_post_id = intval( $post_id ); $this->ld_course_steps_object = LDLMS_Factory_Post::course_steps( $this->builder_post_id ); } } /** * Call via the WordPress load sequence for admin pages. */ public function builder_on_load() { parent::builder_on_load(); } /** * Prints content for Course Builder meta box for admin * This function is called from other add_meta_box functions * * @since 2.5 * * @param object $post WP_Post. */ public function show_builder_box( $post ) { if ( ( is_a( $post, 'WP_Post' ) ) && ( $this->builder_post_type === $post->post_type ) ) { $this->builder_init( $post->ID ); parent::show_builder_box( $post ); ?> ld_course_steps_object->get_steps( 't' ); if ( ( isset( $course_steps[ $selector_post_type ] ) ) && ( !empty( $course_steps[ $selector_post_type ] ) ) ) { $selector_post_type_steps = $course_steps[ $selector_post_type ]; } } return $selector_post_type_steps; } /** * Get the number of current items in the builder. */ public function get_build_items_count() { ?> ' . intval( $this->ld_course_steps_object->get_steps_count() ) . '' ); ?> get_label_for_post_type( $this->builder_post_type ); $this->builder_assets[ $this->builder_post_type ]['messages']['learndash_unload_message'] = sprintf( // translators: placeholder: Course. esc_html_x( 'You have unsaved %s Builder changes. Are you sure you want to leave?', 'placeholder: Course' ), LearnDash_Custom_Label::get_label( $builder_post_type_label ) ); foreach ( $this->selector_post_types as $selector_post_type ) { $post_type_object = get_post_type_object( $selector_post_type ); if ( is_a( $post_type_object, 'WP_Post_Type' ) ) { $this->builder_assets[ $this->builder_post_type ]['messages'][ 'confirm_remove_' . $selector_post_type ] = sprintf( // translators: 'placeholders: will be post type labels like Course, Lesson, Topic'. esc_html_x( 'Are you sure you want to remove this %1$s from the %2$s? (This will also remove all sub-items)', 'placeholders: will be post type labels like Course, Lesson, Topic', 'learndash' ), LearnDash_Custom_Label::get_label( $this->get_label_for_post_type( $selector_post_type ) ), LearnDash_Custom_Label::get_label( $builder_post_type_label ) ); $this->builder_assets[ $this->builder_post_type ]['messages'][ 'confirm_trash_' . $selector_post_type ] = sprintf( // translators: placeholder: will be post type label like Course, Lesson, Topic. esc_html_x( 'Are you sure you want to move this %s to Trash?', 'placeholder: will be post type label like Course, Lesson, Topic', 'learndash' ), LearnDash_Custom_Label::get_label( $this->get_label_for_post_type( $selector_post_type ) ) ); } } parent::builder_admin_footer(); } /** * Utility function to get the label for Post Type. * * @since 2.5.0 * * @param string $post_type Post Type slug. * @param boolean $singular True if singular label needed. False for plural. * @return string. */ public function get_label_for_post_type( $post_type = '', $singular = true ) { switch ( $post_type ) { case 'sfwd-courses': if ( true === $singular ) { return 'course'; } else { return 'courses'; } break; case 'sfwd-lessons': if ( true === $singular ) { return 'lesson'; } else { return 'lessons'; } break; case 'sfwd-topic': if ( true === $singular ) { return 'topic'; } else { return 'topics'; } break; case 'sfwd-quiz': if ( true === $singular ) { return 'quiz'; } else { return 'quizzes'; } break; } } /** Utility function to build the selector query args array. * * @since 2.5.0 * * @param array $args Array of query args. * @return array */ public function build_selector_query( $args = array() ) { $per_page = LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Courses_Builder', 'per_page' ); if ( empty( $per_page ) ) { $per_page = 10; } $defaults = array( 'post_status' => array( 'publish' ), 'posts_per_page' => $per_page, 'paged' => 1, 'orderby' => 'title', 'order' => 'ASC', ); $args = wp_parse_args( $args, $defaults ); /** * If we are not sharing steps then we limit the query results to only show items associated with the course or items * not associated with any course. */ if ( LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Courses_Builder', 'shared_steps' ) !== 'yes' ) { $m_include_ids = array(); $m_args = array( 'posts_per_page' => -1 ); if ( isset( $args['post_type'] ) ) { $m_args['post_type'] = $args['post_type']; } if ( isset( $args['post_status'] ) ) { $m_args['post_status'] = $args['post_status']; } else { $m_args['post_status'] = array( 'public' ); } $m_args['fields'] = 'ids'; if ( ( isset( $args['post__not_in'] ) ) && ( ! empty( $args['post__not_in'] ) ) ) { $m_args['post__not_in'] = $args['post__not_in']; unset( $args['post__not_in'] ); } // First get all the items related to the course ID or if course_id is present but zero. $m_args['meta_query'] = array( array( 'key' => 'course_id', 'value' => $this->builder_post_id, 'compare' => '=', ), ); $m_post_type_query = new WP_Query( $m_args ); if ( ( property_exists( $m_post_type_query, 'posts' ) ) && ( ! empty( $m_post_type_query->posts ) ) ) { $m_include_ids = array_merge( $m_include_ids, $m_post_type_query->posts ); if ( ! isset( $m_args['post__not_in'] ) ) { $m_args['post__not_in'] = array(); } $m_args['post__not_in'] = array_merge( $m_args['post__not_in'], $m_include_ids ); } //if ( isset( $m_args['post__not_in'] ) ) { // unset( $m_args['post__not_in'] ); //} /** * Allow externals to control inclusion of orphaned steps. * Orphaned steps are those not attached to a course. * * @since 2.5.9 * * @param boolean true The default value is true to include orphaned steps. * @param array $args The current query args array. * * @return the external filters should return: * true - Yes include orphaned steps. * false - No do not inclide orphaned steps. */ $include_orphaned_steps = apply_filters( 'learndash_course_builder_include_orphaned_steps', true, $args ); if ( true === $include_orphaned_steps ) { $m_args['meta_query'] = array( 'relation' => 'OR', array( 'key' => 'course_id', 'value' => 0, 'compare' => '=', ), array( 'key' => 'course_id', 'value' => -1, 'compare' => '=', ), ); $m_post_type_query = new WP_Query( $m_args ); if ( ( property_exists( $m_post_type_query, 'posts' ) ) && ( ! empty( $m_post_type_query->posts ) ) ) { $m_include_ids = array_merge( $m_include_ids, $m_post_type_query->posts ); if ( ! isset( $m_args['post__not_in'] ) ) { $m_args['post__not_in'] = array(); } $m_args['post__not_in'] = array_merge( $m_args['post__not_in'], $m_include_ids ); } $m_args['meta_query'] = array( array( 'key' => 'course_id', 'compare' => 'NOT EXISTS', ), ); $m_post_type_query = new WP_Query( $m_args ); if ( ( property_exists( $m_post_type_query, 'posts' ) ) && ( ! empty( $m_post_type_query->posts ) ) ) { $m_include_ids = array_merge( $m_include_ids, $m_post_type_query->posts ); if ( ! isset( $m_args['post__not_in'] ) ) { $m_args['post__not_in'] = array(); } $m_args['post__not_in'] = array_merge( $m_args['post__not_in'], $m_include_ids ); } } if ( ! empty( $m_include_ids ) ) { $args['post__in'] = $m_include_ids; } else { $args['post__in'] = array( 0 ); } } return apply_filters( 'learndash_course_builder_selector_args', $args ); } /** * Common function to show Selector pager buttons. * * @since 2.5.0 * @param object $post_type_query WP_Query instance. * @return string Button(s) HTML. */ public function build_selector_pages_buttons( $post_type_query ) { $pager_buttons = ''; if ( $post_type_query instanceof WP_Query ) { $first_page = 1; $current_page = intval( $post_type_query->query['paged'] ); $last_page = intval( $post_type_query->max_num_pages ); if ( empty( $last_page ) ) { $last_page = 1; } if ( $current_page <= 1 ) { $prev_page = 1; $prev_disabled = ' disabled="disabled" '; } else { $prev_page = $current_page - 1; $prev_disabled = ''; } if ( $current_page >= $last_page ) { $next_page = $last_page; $next_disabled = ' disabled="disabled" '; } else { $next_page = $current_page + 1; $next_disabled = ''; } $pager_buttons .= ''; $pager_buttons .= ''; $pager_buttons .= '' . $current_page . ' / ' . $last_page . ''; $pager_buttons .= ''; $pager_buttons .= ''; } return $pager_buttons; } /** * Common function to show Selector pager buttons. * * @since 2.5.0 * @param object $post_type_query WP_Query instance. * @return string Button(s) HTML. */ public function build_selector_pages_buttons_json( $post_type_query ) { $pager_buttons = [ 'first_page' => 1, 'last_page' => 1, 'prev_page' => null, 'prev_disabled' => false, 'next_page' => null, 'next_disabled' => false, 'current_page' => null, ]; if ( $post_type_query instanceof WP_Query ) { $pager_buttons['first_page'] = 1; $current_page = intval( $post_type_query->query['paged'] ); $last_page = intval( $post_type_query->max_num_pages ); $pager_buttons['current_page'] = $current_page; if ( empty( $last_page ) ) { $pager_buttons['last_page'] = 1; } if ( $current_page <= 1 ) { $pager_buttons['prev_page'] = 1; $pager_buttons['has_prev'] = false; } else { $pager_buttons['prev_page'] = $current_page - 1; $pager_buttons['has_prev'] = true; } if ( $current_page >= $last_page ) { $pager_buttons['next_page'] = $last_page; $pager_buttons['has_next'] = false; } else { $pager_buttons['next_page'] = $current_page + 1; $pager_buttons['has_next'] = true; } } return $pager_buttons; } /** * Show selector rows. * * @since 2.5.0 * @param object $post_type_query WP_Query instance. */ public function build_selector_rows( $post_type_query ) { $selector_rows = ''; if ( $post_type_query instanceof WP_Query ) { $selector_post_type = $post_type_query->query['post_type']; $selector_post_type_object = get_post_type_object( $selector_post_type ); $selector_label = $selector_post_type_object->label; $selector_slug = $this->get_label_for_post_type( $selector_post_type ); foreach ( $post_type_query->posts as $p ) { $selector_rows .= $this->build_selector_row_single( $p, $selector_post_type ); } } return $selector_rows; } /** * Show selector rows. * * @since 2.5.0 * @param object $post_type_query WP_Query instance. */ public function build_selector_rows_json( $post_type_query ) { $selector_rows = []; if ( $post_type_query instanceof WP_Query ) { $selector_post_type = $post_type_query->query['post_type']; foreach ( $post_type_query->posts as $p ) { $selector_rows[] = [ 'ID' => $p->ID, 'post_title' => get_the_title( $p->ID ), 'type' => $selector_post_type, 'edit_link' => get_edit_post_link( $p->ID, '' ) ]; } } return $selector_rows; } /** * Show selector single row. * * @since 2.5.0 * @param object $p WP_Post object to show. * @param string $selector_post_type Post type slug. * @return string Row HTML. */ protected function build_selector_row_single( $p = null, $selector_post_type = '' ) { $selector_row = ''; if ( empty( $selector_post_type ) ) { return $selector_row; } $selector_post_type_object = get_post_type_object( $selector_post_type ); $selector_label = $selector_post_type_object->label; $selector_slug = $this->get_label_for_post_type( $selector_post_type ); $selector_sub_actions = ''; $p_id = ''; $p_title = ''; $edit_post_link = ''; $view_post_link = ''; if ( $p ) { $p_id = $p->ID; $p_title = get_the_title( $p->ID ); //$view_post_link = learndash_get_step_permalink( $p->ID, $this->builder_post_id ); /** * We add this to force the course_id to zero for the selectors as we don't * want the the 'view' URL to reflect the nested course. */ add_filter( 'learndash_post_link_course_id', function( $course_id ) { return 0; } ); $view_post_link = get_permalink( $p->ID ); if ( current_user_can( 'edit_courses' ) ) { $edit_post_link = get_edit_post_link( $p->ID ); $edit_post_link = remove_query_arg( 'course_id', $edit_post_link ); } } else { // We need a unique ID. $p_id = $selector_post_type . '-placeholder'; $p_title = $selector_post_type_object->labels->singular_name; } $selector_sub_actions .= '' . sprintf( // translators: placeholder: will contain post type label. esc_html_x( 'Edit %s Settings (new window)', 'placeholder: will contain post type label', 'learndash' ), LearnDash_Custom_Label::get_label( $selector_slug ) ) . ''; $selector_sub_actions .= '' . sprintf( // translators: placeholder: will contain post type label. esc_html_x( 'View %s (new window)', 'placeholder: will contain post type label', 'learndash' ), LearnDash_Custom_Label::get_label( $selector_slug ) ) . ''; if ( current_user_can( 'delete_courses' ) ) { $selector_sub_actions .= ''; } $selector_sub_actions .= ''; $selector_sub_items = ''; $selector_action_expand = ''; if ( 'sfwd-lessons' === $selector_post_type ) { $selector_sub_items .= '
    '; $selector_sub_items .= '
    '; $selector_action_expand = ''; } elseif ( 'sfwd-topic' === $selector_post_type ) { $selector_sub_items .= '
    '; $selector_action_expand = ''; } elseif ( 'sfwd-quiz' === $selector_post_type ) { // Nothing here. } $selector_row .= '
  • ' . $selector_sub_actions . ' ' . $p_title . ' ' . $selector_action_expand . '
  • '; return $selector_row; } /** * Build Course Steps HTML. */ public function build_course_steps_html() { $steps_html = ''; $course_steps = $this->ld_course_steps_object->get_steps(); //if ( ! empty( $course_steps ) ) { $steps_html .= $this->process_course_steps( $course_steps ); //} return $steps_html; } /** * Build course steps HTML. * * @since 2.5.0 * @param array $steps Array of current course steps. * @param string $steps_parent_type Parent post type slug. Default is 'sfwd-courses'. * @return string Steps HTML. */ protected function process_course_steps( $steps = array(), $steps_parent_type = 'sfwd-courses' ) { $steps_section_html = ''; if ( ! empty( $steps ) ) { foreach ( $steps as $steps_type => $steps_items ) { $steps_section_items_html = ''; if ( ! empty( $steps_items ) ) { foreach ( $steps_items as $steps_id => $steps_set ) { $steps_section_item_html = $this->process_course_steps( $steps_set, $steps_type ); $edit_post_link = get_edit_post_link( $steps_id ); $edit_post_link = add_query_arg( 'course_id', $this->builder_post_id, $edit_post_link ); $view_post_link = learndash_get_step_permalink( $steps_id, $this->builder_post_id ); if ( $steps_type == 'sfwd-lessons' ) { $steps_section_item_html = '
    '; } else if ( 'sfwd-topic' === $steps_type ) { $steps_section_item_html = '
    '; } else if ( 'sfwd-quiz' === $steps_type ) { $steps_section_item_html = '
    '; } $steps_section_items_html .= $steps_section_item_html; } } if ( 'sfwd-courses' === $steps_parent_type ) { if ( 'sfwd-lessons' === $steps_type ) { $steps_section_html = '
    ' . $steps_section_items_html . '
    '; } elseif ( 'sfwd-quiz' === $steps_type ) { $steps_section_html .= '
    ' . $steps_section_items_html . '
    '; } } else if ( 'sfwd-lessons' === $steps_parent_type ) { if ( $steps_type == 'sfwd-topic' ) { $steps_section_html = '
    ' . $steps_section_items_html . '
    '; } else if ( 'sfwd-quiz' === $steps_type ) { $steps_section_html .= '
    ' . $steps_section_items_html . '
    '; } } else if ( 'sfwd-topic' === $steps_parent_type ) { if ( 'sfwd-quiz' === $steps_type ) { $steps_section_html = '
    ' . $steps_section_items_html . '
    '; } } } } else { if ( 'sfwd-courses' === $steps_parent_type ) { $steps_section_html .= '
    '; $steps_section_html .= '
    '; } } return $steps_section_html; } /** Save Course Builder steps * * @since 2.5.0 * @param integer $post_id Post ID of course being saved. * @param object $post WP_Post object instance being saved. * @param boolean $update False is an update. True if new post. */ public function save_course_builder( $post_id, $post, $update ) { $return_status = false; $cb_nonce_key = $this->builder_prefix . '_nonce'; $cb_nonce_value = $this->builder_prefix . '_' . $post->post_type . '_' . $post_id . '_nonce'; if ( ( isset( $_POST[ $cb_nonce_key ] ) ) && ( wp_verify_nonce( $_POST[ $cb_nonce_key ], $cb_nonce_value ) ) ) { if ( isset( $_POST[ $this->builder_prefix ][ $this->builder_post_type ][ $post_id ] ) ) { $course_builder_data = $_POST[ $this->builder_prefix ][ $this->builder_post_type ][ $post_id ]; if ( '' !== $course_builder_data ) { $this->ld_course_steps_object = LDLMS_Factory_Post::course_steps( $post_id ); $course_steps = (array) json_decode( stripslashes( $course_builder_data ), true ); if ( ( is_array( $course_steps ) ) && ( ! empty( $course_steps ) ) ) { $course_steps_split = LDLMS_Course_Steps::steps_split_keys( $course_steps ); } else { $course_steps_split = array(); } $this->ld_course_steps_object->set_steps( $course_steps_split ); $return_status = true; } } } return $return_status; } /** * Handle AJAX pager requests. * * @param array $query_args array of values for AJAX request. */ public function learndash_builder_selector_pager( $query_args = array() ) { $reply_data = array(); if ( isset( $query_args['format'] ) && 'json' === $query_args['format'] ) { $reply_data['selector_pager'] = []; $reply_data['selector_rows'] = []; } else { $reply_data['selector_pager'] = ''; $reply_data['selector_rows'] = ''; } if ( ! empty( $query_args ) ) { $post_type_query_args = $this->build_selector_query( $query_args ); if ( ! empty( $post_type_query_args ) ) { $post_type_query = new WP_Query( $post_type_query_args ); if ( $post_type_query->have_posts() ) { if ( isset( $query_args['format'] ) && 'json' === $query_args['format'] ) { $reply_data['selector_pager'] = $this->build_selector_pages_buttons_json( $post_type_query ); $reply_data['selector_rows'] = $this->build_selector_rows_json( $post_type_query ); } else { $reply_data['selector_pager'] = $this->build_selector_pages_buttons( $post_type_query ); $reply_data['selector_rows'] = $this->build_selector_rows( $post_type_query ); } } } } echo json_encode( $reply_data ); wp_die(); } /** * Handle AJAX search requests. * * @param array $query_args array of values for AJAX request. */ public function learndash_builder_selector_search( $query_args = array() ) { $reply_data = array(); if ( isset( $query_args['format'] ) && 'json' === $query_args['format'] ) { $reply_data['selector_pager'] = []; $reply_data['selector_rows'] = []; } else { $reply_data['selector_pager'] = ''; $reply_data['selector_rows'] = ''; } if ( ! empty( $query_args ) ) { $post_type_query_args = $this->build_selector_query( $query_args ); if ( ! empty( $post_type_query_args ) ) { $post_type_query = new WP_Query( $post_type_query_args ); if ( $post_type_query->have_posts() ) { if ( isset( $query_args['format'] ) && 'json' === $query_args['format'] ) { $reply_data['selector_pager'] = $this->build_selector_pages_buttons_json( $post_type_query ); $reply_data['selector_rows'] = $this->build_selector_rows_json( $post_type_query ); } else { $reply_data['selector_pager'] = $this->build_selector_pages_buttons( $post_type_query ); $reply_data['selector_rows'] = $this->build_selector_rows( $post_type_query ); } } } } echo json_encode( $reply_data ); wp_die(); } /** * Handle AJAX new step requests. * * @param array $query_args array of values for AJAX request. */ public function learndash_builder_selector_step_new( $query_args = array() ) { global $wpdb; $reply_data = array(); $reply_data['new_steps'] = array(); if ( ( isset( $query_args['new_steps'] ) ) && ( ! empty( $query_args['new_steps'] ) ) ) { foreach ( $query_args['new_steps'] as $old_step_id => $step_set ) { if ( ( isset( $step_set['post_type'] ) ) && ( ! empty( $step_set['post_type'] ) ) && ( false !== in_array( $step_set['post_type'], array( 'sfwd-lessons', 'sfwd-topic', 'sfwd-quiz' ) ) ) ) { $post_args = array( 'post_type' => esc_attr( $step_set['post_type'] ), 'post_status' => 'publish', 'post_title' => '', 'post_content' => '', ); if ( ( isset( $step_set['post_title'] ) ) && ( ! empty( $step_set['post_title'] ) ) ) { $post_args['post_title'] = $step_set['post_title']; } else { $post_type_object = get_post_type_object( $step_set['post_type'] ); if ( $post_type_object ) { $post_args['post_title'] = $post_type_object->labels->singular_name; } } $new_step_id = wp_insert_post( apply_filters( 'course_builder_selector_new_step_post_args', $post_args ) ); if ( $new_step_id ) { /** * We have to set the guid manually because the one assigned within wp_insert_post is non-unique. * See LEARNDASH-3853 */ $wpdb->update( $wpdb->posts, array( 'guid' => add_query_arg( array( 'post_type' => $step_set['post_type'], 'p' => $new_step_id ), home_url() ) ), array( 'ID' => $new_step_id ) ); $reply_data['status'] = true; $reply_data['new_steps'][ $old_step_id ] = array(); $reply_data['new_steps'][ $old_step_id ]['post_id'] = $new_step_id; $reply_data['new_steps'][ $old_step_id ]['view_url'] = get_permalink( $new_step_id ); $reply_data['new_steps'][ $old_step_id ]['edit_url'] = get_edit_post_link( $new_step_id ); if ( $post_args['post_type'] == 'sfwd-quiz' ) { // This form element is required when creating a new Quiz in WPProQuiz. Don't ask. //$_POST['form'] = array(); //$_POST['name'] = $post_args['post_title']; //$_POST['text'] = 'AAZZAAZZ'; //$pro_quiz = new WpProQuiz_Controller_Quiz(); //ob_start(); //$pro_quiz->route( // array( // 'action' => 'addEdit', // 'quizId' => 0, // 'post_id' => $new_step_id, // ) //); //ob_get_clean(); //$quiz_id = learndash_get_setting( $new_step_id, 'quiz_pro' ); //$quiz_meta = SFWD_CPT_Instance::$instances['sfwd-quiz']->get_settings_values( 'sfwd-quiz' ); //if ( ! empty( $quiz_meta ) ) { // $quiz_meta_values = wp_list_pluck( $quiz_meta, 'value' ); // if ( ! empty( $quiz_id ) ) { // $quiz_meta_values['sfwd-quiz_quiz_pro'] = intval( $quiz_id ); // //update_post_meta( $new_step_id, 'quiz_pro_id_' . $quiz_id, $quiz_id ); // //update_post_meta( $new_step_id, 'quiz_pro_id', $quiz_id ); // learndash_update_setting( $new_step_id, 'quiz_pro', $quiz_id ); // // // Set the 'View Statistics on Profile' for the new quiz. // update_post_meta( $new_step_id, '_viewProfileStatistics', 1 ); // } // update_post_meta( $new_step_id, '_sfwd-quiz', $quiz_meta_values ); //} $quiz_mapper = new WpProQuiz_Model_QuizMapper(); $quiz_pro = new WpProQuiz_Model_Quiz(); $quiz_pro->setName( $post_args['post_title'] ); $quiz_pro->setText( 'AAZZAAZZ' ); $quiz_pro = $quiz_mapper->save( $quiz_pro ); $quiz_pro_id = $quiz_pro->getId(); $quiz_pro_id = absint( $quiz_pro_id ); learndash_update_setting( $new_step_id, 'quiz_pro', $quiz_pro_id ); // Set the 'View Statistics on Profile' for the new quiz. update_post_meta( $new_step_id, '_viewProfileStatistics', 1 ); } learndash_update_setting( $new_step_id, 'course', '0' ); update_post_meta( $new_step_id, 'course_id', '0' ); if ( in_array( $step_set['post_type'], array( 'sfwd-topic', 'sfwd-quiz' ) ) ) { learndash_update_setting( $new_step_id, 'lesson', '0' ); update_post_meta( $new_step_id, 'lesson_id', '0' ); } } } } } echo json_encode( $reply_data ); wp_die(); } /** * Handle AJAX trash step requests. * * @param array $query_args array of values for AJAX request. */ public function learndash_builder_selector_step_trash( $query_args = array() ) { $reply_data = array(); $post_args = array( 'post_id' => 0, 'post_type' => '', ); $post_args = wp_parse_args( $query_args, $post_args ); $post_args['post_id'] = intval( $query_args['post_id'] ); $post_args['post_type'] = esc_attr( $query_args['post_type'] ); if ( ( empty( $post_args['post_type'] ) ) || ( empty( $post_args['post_id'] ) ) ) { $reply_data['status'] = false; $reply_data['error_message'] = esc_html__( '#1: Invalid post data', 'learndash' ); } else if ( in_array( $post_args['post_type'], $this->selector_post_types ) === false ) { $reply_data['status'] = false; $reply_data['error_message'] = esc_html__( '#2: Invalid post data', 'learndash' ); } else { $new_step_id = wp_trash_post( $post_args['post_id'] ); $reply_data['status'] = true; } echo json_encode( $reply_data ); wp_die(); } /** * Handle AJAX set title requests. * * @param array $query_args array of values for AJAX request. */ public function learndash_builder_selector_step_title( $query_args = array() ) { $reply_data = array(); $post_args = array( 'post_title' => '', 'post_id' => 0, 'post_type' => '', ); $post_args = wp_parse_args( $query_args, $post_args ); $post_args['post_id'] = absint( $query_args['post_id'] ); $post_args['post_type'] = esc_attr( $query_args['post_type'] ); $post_args['post_title'] = wp_unslash( sanitize_post_field( 'post_title', $query_args['new_title'], $post_args['post_id'], 'db' ) ); if ( ( empty( $post_args['post_title'] ) ) || ( empty( $post_args['post_type'] ) ) || ( empty( $post_args['post_id'] ) ) ) { $reply_data['status'] = false; $reply_data['error_message'] = esc_html__( '#1: Invalid post data', 'learndash' ); } else if ( in_array( $post_args['post_type'], $this->selector_post_types ) === false ) { $reply_data['status'] = false; $reply_data['error_message'] = esc_html__( '#2: Invalid post data', 'learndash' ); } else { $edit_post = array( 'ID' => $post_args['post_id'], 'post_title' => $post_args['post_title'], 'post_name' => '', ); wp_update_post( $edit_post ); $reply_data['status'] = true; if ( 'sfwd-quiz' === $post_args['post_type'] ) { $quiz_id = get_post_meta( $post_args['post_id'], 'quiz_pro_id', true ); if ( ! empty( $quiz_id ) ) { $quizMapper = new WpProQuiz_Model_QuizMapper(); $quiz = $quizMapper->fetch( $quiz_id ); if ( is_a( $quiz, 'WpProQuiz_Model_Quiz' ) ) { $quiz->setName( $post_args['post_title'] ); $quizMapper->save( $quiz ); } } } } echo json_encode( $reply_data ); wp_die(); } // End of functions. } } add_action( 'learndash_builders_init', function() { Learndash_Admin_Metabox_Course_Builder::add_instance(); } ); includes/admin/classes-builders/class-learndash-admin-quiz-builder-metabox.php000066600000114650152141567370023646 0ustar00builder_post_type = 'sfwd-quiz'; $this->selector_post_types = array( learndash_get_post_type_slug( 'question' ), ); $this->builder_init(); parent::__construct(); } /** * Iniitialize builder for specific Quiz Item. * * @since 2.6.0 * @param integer $post_id Post ID to load. */ public function builder_init( $post_id = 0 ) { if ( ! empty( $post_id ) ) { $this->builder_post_id = intval( $post_id ); $this->ld_quiz_questions_object = LDLMS_Factory_Post::quiz_questions( $this->builder_post_id ); //$this->ld_quiz_questions_object = LDLMS_Factory_Post::quiz_questions( $this->builder_post_id ); } } /** * Call via the WordPress load sequence for admin pages. */ public function builder_on_load() { parent::builder_on_load(); } /** * Prints content for Quiz Builder meta box for admin * This function is called from other add_meta_box functions * * @since 2.5 * * @param object $post WP_Post. */ public function show_builder_box( $post ) { if ( ( is_a( $post, 'WP_Post' ) ) && ( $this->builder_post_type === $post->post_type ) ) { $this->builder_init( $post->ID ); parent::show_builder_box( $post ); ?> ld_quiz_questions_object->get_questions( 'post_ids' ); if ( ! empty( $questions ) ) { $selector_post_type_steps = array_keys( $questions ); } //if ( ( isset( $course_steps[ $selector_post_type ] ) ) && ( !empty( $course_steps[ $selector_post_type ] ) ) ) { // $selector_post_type_steps = $course_steps[ $selector_post_type ]; //} } return $selector_post_type_steps; } /** * Get the number of current items in the builder. */ public function get_build_items_count() { ?> ' . intval( $this->ld_quiz_questions_object->get_questions_count() ) . '' ); ?> get_label_for_post_type( $this->builder_post_type ); $this->builder_assets[ $this->builder_post_type ]['messages']['learndash_unload_message'] = sprintf( // translators: placeholder: Quiz. esc_html_x( 'You have unsaved %s Builder changes. Are you sure you want to leave?', 'placeholder: Quiz' ), LearnDash_Custom_Label::get_label( $builder_post_type_label ) ); foreach ( $this->selector_post_types as $selector_post_type ) { $post_type_object = get_post_type_object( $selector_post_type ); if ( is_a( $post_type_object, 'WP_Post_Type' ) ) { $this->builder_assets[ $this->builder_post_type ]['messages'][ 'confirm_remove_' . $selector_post_type ] = sprintf( // translators: placeholders: post type labels like Question, second Quiz. esc_html_x( 'Are you sure you want to remove this %1$s from the %2$s?', 'placeholders: post type labels like Question, second Quiz', 'learndash' ), LearnDash_Custom_Label::get_label( $this->get_label_for_post_type( $selector_post_type ) ), LearnDash_Custom_Label::get_label( $builder_post_type_label ) ); $this->builder_assets[ $this->builder_post_type ]['messages'][ 'confirm_trash_' . $selector_post_type ] = sprintf( // translators: placeholders: post type labels like Question. esc_html_x( 'Are you sure you want to move this %s to Trash?', 'placeholders: post type labels like Question', 'learndash' ), LearnDash_Custom_Label::get_label( $this->get_label_for_post_type( $selector_post_type ) ) ); } } parent::builder_admin_footer(); } /** * Utility function to get the label for Post Type. * * @since 2.5.0 * * @param string $post_type Post Type slug. * @param boolean $singular True if singular label needed. False for plural. * @return string. */ public function get_label_for_post_type( $post_type = '', $singular = true ) { switch ( $post_type ) { case 'sfwd-quiz': if ( true === $singular ) { return 'quiz'; } else { return 'quizzes'; } break; case 'sfwd-question': if ( true === $singular ) { return 'question'; } else { return 'questions'; } break; } } /** Utility function to build the selector query args array. * * @since 2.5.0 * * @param array $args Array of query args. * @return array */ public function build_selector_query( $args = array() ) { $per_page = LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Quizzes_Builder', 'per_page' ); if ( empty( $per_page ) ) { $per_page = 10; } $defaults = array( 'post_status' => array( 'publish' ), 'posts_per_page' => $per_page, 'paged' => 1, 'orderby' => 'title', 'order' => 'ASC', ); $args = wp_parse_args( $args, $defaults ); /** * If we are not sharing steps then we limit the query results to only show items associated with the quiz or items * not associated with any quiz. */ if ( LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Quizzes_Builder', 'shared_questions' ) !== 'yes' ) { $m_include_ids = array(); $m_args = array( 'posts_per_page' => -1 ); if ( isset( $args['post_type'] ) ) { $m_args['post_type'] = $args['post_type']; } if ( isset( $args['post_status'] ) ) { $m_args['post_status'] = $args['post_status']; } else { $m_args['post_status'] = array( 'public' ); } $m_args['fields'] = 'ids'; if ( ( isset( $args['post__not_in'] ) ) && ( ! empty( $args['post__not_in'] ) ) ) { $m_args['post__not_in'] = $args['post__not_in']; unset( $args['post__not_in'] ); } $m_args['meta_query'] = array(); // First get all the items related to the quiz ID. $m_args['meta_query'] = array( array( 'key' => 'quiz_id', 'value' => $this->builder_post_id, 'compare' => '=', ), ); $m_post_type_query = new WP_Query( $m_args ); if ( ( property_exists( $m_post_type_query, 'posts' ) ) && ( ! empty( $m_post_type_query->posts ) ) ) { $m_include_ids = array_merge( $m_include_ids, $m_post_type_query->posts ); if ( ! isset( $m_args['post__not_in'] ) ) { $m_args['post__not_in'] = array(); } $m_args['post__not_in'] = array_merge( $m_args['post__not_in'], $m_include_ids ); } /** * Allow externals to control inclusion of orphaned steps. * Orphaned steps are those not attached to a quiz. * * @since 2.5.9 * * @param boolean true The default value is true to include orphaned steps. * @param array $args The current query args array. * * @return the external filters should return: * true - Yes include orphaned steps. * false - No do not inclide orphaned steps. */ $include_orphaned_questions = apply_filters( 'learndash_quiz_builder_include_orphaned_questions', true, $args ); if ( true === $include_orphaned_questions ) { // Next get any quiz where the 'quiz_id' is zero. $m_args['meta_query'] = array( array( 'key' => 'quiz_id', 'value' => 0, 'compare' => '=', ) ); $m_post_type_query = new WP_Query( $m_args ); if ( ( property_exists( $m_post_type_query, 'posts' ) ) && ( ! empty( $m_post_type_query->posts ) ) ) { $m_include_ids = array_merge( $m_include_ids, $m_post_type_query->posts ); if ( ! isset( $m_args['post__not_in'] ) ) { $m_args['post__not_in'] = array(); } $m_args['post__not_in'] = array_merge( $m_args['post__not_in'], $m_include_ids ); } // Finally get any quiz where the 'quiz_id' does not exist. $m_args['meta_query'] = array( array( 'key' => 'quiz_id', 'compare' => 'NOT EXISTS', ), ); $m_post_type_query = new WP_Query( $m_args ); if ( ( property_exists( $m_post_type_query, 'posts' ) ) && ( ! empty( $m_post_type_query->posts ) ) ) { $m_include_ids = array_merge( $m_include_ids, $m_post_type_query->posts ); if ( ! isset( $m_args['post__not_in'] ) ) { $m_args['post__not_in'] = array(); } $m_args['post__not_in'] = array_merge( $m_args['post__not_in'], $m_include_ids ); } } if ( ! empty( $m_include_ids ) ) { $args['post__in'] = $m_include_ids; } else { $args['post__in'] = array( 0 ); } } return apply_filters( 'learndash_quiz_builder_selector_args', $args ); } /** * Common function to show Selector pager buttons. * * @since 2.5.0 * @param object $post_type_query WP_Query instance. * @return string Button(s) HTML. */ public function build_selector_pages_buttons( $post_type_query ) { $pager_buttons = ''; if ( $post_type_query instanceof WP_Query ) { $first_page = 1; $current_page = intval( $post_type_query->query['paged'] ); $last_page = intval( $post_type_query->max_num_pages ); if ( empty( $last_page ) ) { $last_page = 1; } if ( $current_page <= 1 ) { $prev_page = 1; $prev_disabled = ' disabled="disabled" '; } else { $prev_page = $current_page - 1; $prev_disabled = ''; } if ( $current_page >= $last_page ) { $next_page = $last_page; $next_disabled = ' disabled="disabled" '; } else { $next_page = $current_page + 1; $next_disabled = ''; } $pager_buttons .= ''; $pager_buttons .= ''; $pager_buttons .= '' . $current_page . ' / ' . $last_page . ''; $pager_buttons .= ''; $pager_buttons .= ''; } return $pager_buttons; } /** * Common function to show Selector pager buttons. * * @since 2.5.0 * @param object $post_type_query WP_Query instance. * @return string Button(s) HTML. */ public function build_selector_pages_buttons_json( $post_type_query ) { $pager_buttons = [ 'first_page' => 1, 'last_page' => 1, 'prev_page' => null, 'prev_disabled' => false, 'next_page' => null, 'next_disabled' => false, 'current_page' => null, ]; if ( $post_type_query instanceof WP_Query ) { $pager_buttons['first_page'] = 1; $current_page = intval( $post_type_query->query['paged'] ); $last_page = intval( $post_type_query->max_num_pages ); $pager_buttons['current_page'] = $current_page; if ( empty( $last_page ) ) { $pager_buttons['last_page'] = 1; } if ( $current_page <= 1 ) { $pager_buttons['prev_page'] = 1; $pager_buttons['has_prev'] = false; } else { $pager_buttons['prev_page'] = $current_page - 1; $pager_buttons['has_prev'] = true; } if ( $current_page >= $last_page ) { $pager_buttons['next_page'] = $last_page; $pager_buttons['has_next'] = false; } else { $pager_buttons['next_page'] = $current_page + 1; $pager_buttons['has_next'] = true; } } return $pager_buttons; } /** * Show selector rows. * * @since 2.5.0 * @param object $post_type_query WP_Query instance. */ public function build_selector_rows( $post_type_query ) { $selector_rows = ''; if ( $post_type_query instanceof WP_Query ) { $selector_post_type = $post_type_query->query['post_type']; $selector_post_type_object = get_post_type_object( $selector_post_type ); $selector_label = $selector_post_type_object->label; $selector_slug = $this->get_label_for_post_type( $selector_post_type ); foreach ( $post_type_query->posts as $p ) { $selector_rows .= $this->build_selector_row_single( $p, $selector_post_type ); } } return $selector_rows; } /** * Show selector rows. * * @since 2.5.0 * @param object $post_type_query WP_Query instance. */ public function build_selector_rows_json( $post_type_query ) { $selector_rows = []; if ( $post_type_query instanceof WP_Query ) { $selector_post_type = $post_type_query->query['post_type']; foreach ( $post_type_query->posts as $p ) { // Get Answers from Question. $question_pro_id = (int) get_post_meta( $p->ID, 'question_pro_id', true ); $question_mapper = new \WpProQuiz_Model_QuestionMapper(); if ( ! empty( $question_pro_id ) ) { $answers_raw = $question_mapper->fetch( $question_pro_id ); } else { $answers_raw = $question_mapper->fetch( null ); } $question_data = $answers_raw->get_object_as_array(); $controller_question = new \WpProQuiz_Controller_Question(); if ( ( $answers_raw ) && is_a( $answers_raw, 'WpProQuiz_Model_Question' ) ) { $answers_data = $controller_question->setAnswerObject( $answers_raw ); } else { $answers_data = $controller_question->setAnswerObject(); } $processed_answers = []; foreach ( $answers_data as $answer_type => $answers ) { foreach ( $answers as $answer ) { $processed_answers[ $answer_type ][] = [ 'answer' => $answer->getAnswer(), 'html' => $answer->isHtml(), 'points' => $answer->getPoints(), 'correct' => $answer->isCorrect(), 'sortString' => $answer->getSortString(), 'sortStringHtml' => $answer->isSortStringHtml(), 'graded' => $answer->isGraded(), 'gradingProgression' => $answer->getGradingProgression(), 'gradedType' => $answer->getGradedType(), 'type' => 'answer', ]; } } $question_type = get_post_meta( $p->ID, 'question_type', true ); $points = (int) get_post_meta( $p->ID, 'question_points', true ); $selector_rows[] = [ 'ID' => $p->ID, 'expanded' => false, 'post_title' => $question_data['_title'], 'post_content' => $question_data['_question'], 'edit_link' => get_edit_post_link( $p->ID, '' ), 'type' => $selector_post_type, 'question_type' => $question_data['_answerType'], 'points' => $question_data['_points'], 'answers' => $processed_answers, 'correctMsg' => $question_data['_correctMsg'], 'incorrectMsg' => $question_data['_incorrectMsg'], 'correctSameText' => $question_data['_correctSameText'], 'tipEnabled' => $question_data['_tipEnabled'], 'tipMsg' => $question_data['_tipMsg'], ]; } } return $selector_rows; } /** * Show selector single row. * * @since 2.5.0 * @param object $p WP_Post object to show. * @param string $selector_post_type Post type slug. * @return string Row HTML. */ protected function build_selector_row_single( $p = null, $selector_post_type = '' ) { global $learndash_question_types; $selector_row = ''; if ( empty( $selector_post_type ) ) { return $selector_row; } $selector_post_type_object = get_post_type_object( $selector_post_type ); $selector_label = $selector_post_type_object->label; $selector_slug = $this->get_label_for_post_type( $selector_post_type ); $selector_sub_actions = ''; $p_id = ''; $p_title = ''; $edit_post_link = ''; $view_post_link = ''; if ( $p ) { $p_id = $p->ID; $p_title = get_the_title( $p->ID ); //$view_post_link = learndash_get_step_permalink( $p->ID, $this->builder_post_id ); /** * We add this to force the quiz_id to zero for the selectors as we don't * want the the 'view' URL to reflect the nested quiz. */ add_filter( 'learndash_post_link_course_id', function( $course_id ) { return 0; } ); $view_post_link = get_permalink( $p->ID ); if ( current_user_can( 'edit_courses' ) ) { $edit_post_link = get_edit_post_link( $p->ID ); $edit_post_link = remove_query_arg( 'quiz_id', $edit_post_link ); } } else { // We need a unique ID. $p_id = $selector_post_type . '-placeholder'; $p_title = $selector_post_type_object->labels->singular_name; } $question_pro_id = get_post_meta( $p_id, 'question_pro_id', true ); if ( ! empty( $question_pro_id ) ) { $question_pro_fields = leandash_get_question_pro_fields( $question_pro_id, array( 'quiz_id', 'points', 'answer_type' ) ); } $question_type_string = ''; if ( ( ! isset( $question_pro_fields['answer_type'] ) ) || ( empty( $question_pro_fields['answer_type'] ) ) || ( ! isset( $learndash_question_types[ $question_pro_fields['answer_type'] ] ) ) ) { $question_pro_fields['answer_type'] = 'single'; } // translators: placeholder: Question Type. $question_type_string = sprintf( _x('%s', 'placeholder: Question Type', 'learndash' ), $learndash_question_types[ $question_pro_fields['answer_type'] ] ); $question_points_string = ''; if ( ( isset( $question_pro_fields['points'] ) ) && ( ! empty( $question_pro_fields['points'] ) ) ) { $question_points = absint( $question_pro_fields['points'] ); } else { $question_points = 1; } // translators: placeholder: Question Points. $question_points_string = sprintf( _nx( '(%dpt)', '(%dpts)', $question_points, 'placeholder: Question Points', 'learndash' ), number_format_i18n( $question_points ) ); $selector_sub_actions .= '' . sprintf( // translators: placeholder: will contain post type label. esc_html_x( 'Edit %s Settings (new window)', 'placeholder: will contain post type label', 'learndash' ), LearnDash_Custom_Label::get_label( $selector_slug ) ) . ''; if ( current_user_can( 'delete_courses' ) ) { $selector_sub_actions .= ''; } $selector_sub_actions .= ''; $selector_action_expand = ''; $selector_row .= '
  • ' . $selector_sub_actions . ' ' . $p_title . ' ' . $question_type_string . ' ' . $question_points_string . '
  • '; return $selector_row; } /** * This function is empty on purpose and overrides the parent function * with the same name. The purpose is to prevent the default output. */ public function show_builder_header_right() { $total_question_points = 0; $quiz_questions = $this->ld_quiz_questions_object->get_questions( 'post_ids' ); if ( ! empty( $quiz_questions ) ) { $quiz_mapper = new WpProQuiz_Model_QuizMapper(); $total_question_points = $quiz_mapper->sumQuestionPointsFromArray( $quiz_questions ); } ?>
    ' . $total_question_points . '' ); ?>
    ld_quiz_questions_object->get_questions( 'post_ids' ); //if ( ! empty( $quiz_questions ) ) { $questions_html .= $this->process_quiz_questions( $quiz_questions ); //} return $questions_html; } /** * Build course steps HTML. * * @since 2.5.0 * @param array $questions Array of current Quiz questions. * @return string Steps HTML. */ protected function process_quiz_questions( $questions = array() ) { global $learndash_question_types; $questions_section_html = ''; $steps_type = 'sfwd-question'; if ( ! empty( $questions ) ) { foreach ( $questions as $question_id => $q_pro_id ) { $edit_post_link = get_edit_post_link( $question_id ); $edit_post_link = add_query_arg( 'quiz_id', $this->builder_post_id, $edit_post_link ); $view_post_link = learndash_get_step_permalink( $question_id, $this->builder_post_id ); //$question_pro_id = get_post_meta( $question_id, 'question_pro_id', true ); //if ( ! empty( $question_pro_id ) ) { // $question_pro_fields = leandash_get_question_pro_fields( $question_pro_id, array( 'quiz_id', 'points', 'answer_type' ) ); //} $question_pro_fields = leandash_get_question_pro_fields( $q_pro_id, array( 'quiz_id', 'points', 'answer_type' ) ); $question_type_string = ''; if ( ( ! isset( $question_pro_fields['answer_type'] ) ) || ( empty( $question_pro_fields['answer_type'] ) ) || ( ! isset( $learndash_question_types[ $question_pro_fields['answer_type'] ] ) ) ) { $question_pro_fields['answer_type'] = 'single'; } // translators: placeholder: Question Type. $question_type_string = sprintf( _x('%s', 'placeholder: Question Type', 'learndash' ), $learndash_question_types[ $question_pro_fields['answer_type'] ] ); $question_points_string = ''; if ( ( isset( $question_pro_fields['points'] ) ) && ( ! empty( $question_pro_fields['points'] ) ) ) { $question_points = absint( $question_pro_fields['points'] ); } else { $question_points = 1; } // translators: placeholder: Question Points. $question_points_string = sprintf( _nx( '(%dpt)', '(%dpts)', $question_points, 'placeholder: Question Points', 'learndash' ), number_format_i18n( $question_points ) ); $questions_section_item_html = '
    '; $questions_section_html .= $questions_section_item_html; } } $questions_section_html = '
    '. $questions_section_html .'
    '; return $questions_section_html; } /** Save Course Builder steps * * @since 2.5.0 * @param integer $post_id Post ID of course being saved. * @param object $post WP_Post object instance being saved. * @param boolean $update False is an update. True if new post. */ public function save_course_builder( $post_id, $post, $update ) { $return_status = false; $cb_nonce_key = $this->builder_prefix . '_nonce'; $cb_nonce_value = $this->builder_prefix . '_' . $post->post_type . '_' . $post_id . '_nonce'; if ( ( isset( $_POST[ $cb_nonce_key ] ) ) && ( wp_verify_nonce( $_POST[ $cb_nonce_key ], $cb_nonce_value ) ) ) { if ( isset( $_POST[ $this->builder_prefix ][ $this->builder_post_type ][ $post_id ] ) ) { $quiz_questions_data = $_POST[ $this->builder_prefix ][ $this->builder_post_type ][ $post_id ]; if ( '' !== $quiz_questions_data ) { //$this->ld_quiz_questions_object = LDLMS_Factory_Post::course_steps( $post_id ); $this->ld_quiz_questions_object = LDLMS_Factory_Post::quiz_questions( $post_id ); $quiz_questions = (array) json_decode( stripslashes( $quiz_questions_data ), true ); if ( ( is_array( $quiz_questions ) ) && ( ! empty( $quiz_questions ) ) ) { $quiz_questions_split = LDLMS_Quiz_Questions::questions_split_keys( $quiz_questions ); } else { $quiz_questions_split = array(); } $this->ld_quiz_questions_object->set_questions( $quiz_questions_split ); $return_status = true; } } } return $return_status; } /** * Handle AJAX pager requests. * * @param array $query_args array of values for AJAX request. */ public function learndash_builder_selector_pager( $query_args = array() ) { $reply_data = array(); if ( isset( $query_args['format'] ) && 'json' === $query_args['format'] ) { $reply_data['selector_pager'] = []; $reply_data['selector_rows'] = []; } else { $reply_data['selector_pager'] = ''; $reply_data['selector_rows'] = ''; } if ( ! empty( $query_args ) ) { $post_type_query_args = $this->build_selector_query( $query_args ); if ( ! empty( $post_type_query_args ) ) { $post_type_query = new WP_Query( $post_type_query_args ); if ( $post_type_query->have_posts() ) { if ( isset( $query_args['format'] ) && 'json' === $query_args['format'] ) { $reply_data['selector_pager'] = $this->build_selector_pages_buttons_json( $post_type_query ); $reply_data['selector_rows'] = $this->build_selector_rows_json( $post_type_query ); } else { $reply_data['selector_pager'] = $this->build_selector_pages_buttons( $post_type_query ); $reply_data['selector_rows'] = $this->build_selector_rows( $post_type_query ); } } } } echo json_encode( $reply_data ); wp_die(); } /** * Handle AJAX search requests. * * @param array $query_args array of values for AJAX request. */ public function learndash_builder_selector_search( $query_args = array() ) { $reply_data = array(); if ( isset( $query_args['format'] ) && 'json' === $query_args['format'] ) { $reply_data['selector_pager'] = []; $reply_data['selector_rows'] = []; } else { $reply_data['selector_pager'] = ''; $reply_data['selector_rows'] = ''; } if ( ! empty( $query_args ) ) { $post_type_query_args = $this->build_selector_query( $query_args ); if ( ! empty( $post_type_query_args ) ) { $post_type_query = new WP_Query( $post_type_query_args ); if ( $post_type_query->have_posts() ) { if ( isset( $query_args['format'] ) && 'json' === $query_args['format'] ) { $reply_data['selector_pager'] = $this->build_selector_pages_buttons_json( $post_type_query ); $reply_data['selector_rows'] = $this->build_selector_rows_json( $post_type_query ); } else { $reply_data['selector_pager'] = $this->build_selector_pages_buttons( $post_type_query ); $reply_data['selector_rows'] = $this->build_selector_rows( $post_type_query ); } } } } echo json_encode( $reply_data ); wp_die(); } /** * Handle AJAX new step requests. * * @param array $query_args array of values for AJAX request. */ public function learndash_builder_selector_step_new( $query_args = array() ) { global $wpdb; $reply_data = array(); $reply_data['new_steps'] = array(); if ( ( isset( $query_args['new_steps'] ) ) && ( ! empty( $query_args['new_steps'] ) ) ) { foreach ( $query_args['new_steps'] as $old_step_id => $step_set ) { if ( ( isset( $step_set['post_type'] ) ) && ( ! empty( $step_set['post_type'] ) ) && ( false !== in_array( $step_set['post_type'], array( 'sfwd-question' ) ) ) ) { $post_args = array( 'action' => 'new_step', 'post_type' => esc_attr( $step_set['post_type'] ), 'post_status' => 'publish', 'post_title' => '', 'post_content' => '', ); if ( ( isset( $step_set['post_title'] ) ) && ( ! empty( $step_set['post_title'] ) ) ) { $post_args['post_title'] = $step_set['post_title']; } else { $post_type_object = get_post_type_object( $step_set['post_type'] ); if ( $post_type_object ) { $post_args['post_title'] = $post_type_object->labels->singular_name; } } $new_step_id = wp_insert_post( apply_filters( 'course_builder_selector_new_step_post_args', $post_args ) ); if ( $new_step_id ) { /** * We have to set the guid manually because the one assigned within wp_insert_post is non-unique. * See LEARNDASH-3853 */ $wpdb->update( $wpdb->posts, array( 'guid' => add_query_arg( array( 'post_type' => $step_set['post_type'], 'p' => $new_step_id ), home_url() ) ), array( 'ID' => $new_step_id ) ); if ( 'sfwd-question' === $post_args['post_type'] ) { $question_pro_id = learndash_update_pro_question( 0, $post_args ); if ( ! empty( $question_pro_id ) ) { update_post_meta( $new_step_id, 'question_pro_id', absint( $question_pro_id ) ); learndash_proquiz_sync_question_fields( $new_step_id, $question_pro_id ); } } $reply_data['status'] = true; $reply_data['new_steps'][ $old_step_id ] = array(); $reply_data['new_steps'][ $old_step_id ]['post_id'] = $new_step_id; $reply_data['new_steps'][ $old_step_id ]['view_url'] = get_permalink( $new_step_id ); $reply_data['new_steps'][ $old_step_id ]['edit_url'] = get_edit_post_link( $new_step_id ); learndash_update_setting( $new_step_id, 'quiz', '0' ); update_post_meta( $new_step_id, 'quiz_id', '0' ); } } } } echo json_encode( $reply_data ); wp_die(); } /** * Handle AJAX trash step requests. * * @param array $query_args array of values for AJAX request. */ public function learndash_builder_selector_step_trash( $query_args = array() ) { $reply_data = array(); $post_args = array( 'post_id' => 0, 'post_type' => '', ); $post_args = wp_parse_args( $query_args, $post_args ); $post_args['post_id'] = intval( $query_args['post_id'] ); $post_args['post_type'] = esc_attr( $query_args['post_type'] ); if ( ( empty( $post_args['post_type'] ) ) || ( empty( $post_args['post_id'] ) ) ) { $reply_data['status'] = false; $reply_data['error_message'] = esc_html__( '#1: Invalid post data', 'learndash' ); } else if ( in_array( $post_args['post_type'], $this->selector_post_types ) === false ) { $reply_data['status'] = false; $reply_data['error_message'] = esc_html__( '#2: Invalid post data', 'learndash' ); } else { $new_step_id = wp_trash_post( $post_args['post_id'] ); $reply_data['status'] = true; } echo json_encode( $reply_data ); wp_die(); } /** * Handle AJAX set title requests. * * @param array $query_args array of values for AJAX request. */ public function learndash_builder_selector_step_title( $query_args = array() ) { $reply_data = array(); $post_args = array( 'action' => 'edit_title', 'post_title' => '', 'post_id' => 0, 'post_type' => '', ); $post_args = wp_parse_args( $query_args, $post_args ); $post_args['action'] = 'edit_title'; $post_args['post_id'] = absint( $query_args['post_id'] ); $post_args['post_type'] = esc_attr( $query_args['post_type'] ); $post_args['post_title'] = wp_unslash( sanitize_post_field( 'post_title', $query_args['new_title'], $post_args['post_id'], 'db' ) ); if ( ( empty( $post_args['post_title'] ) ) || ( empty( $post_args['post_type'] ) ) || ( empty( $post_args['post_id'] ) ) ) { $reply_data['status'] = false; $reply_data['error_message'] = esc_html__( '#1: Invalid post data', 'learndash' ); } else if ( in_array( $post_args['post_type'], $this->selector_post_types ) === false ) { $reply_data['status'] = false; $reply_data['error_message'] = esc_html__( '#2: Invalid post data', 'learndash' ); } else { $edit_post = array( 'ID' => $post_args['post_id'], 'post_title' => $post_args['post_title'], 'post_name' => '', ); wp_update_post( $edit_post ); $reply_data['status'] = true; if ( 'sfwd-question' === $post_args['post_type'] ) { $question_pro_id = get_post_meta( $post_args['post_id'], 'question_pro_id', true ); if ( ! empty( $question_pro_id ) ) { $question_pro_id = absint( $question_pro_id ); } else { $question_pro_id = 0; } $question_pro_id_new = learndash_update_pro_question( $question_pro_id, $post_args ); $question_pro_id_new = absint( $question_pro_id_new ); if ( ( ! empty( $question_pro_id_new ) ) && ( $question_pro_id_new !== $question_pro_id ) ) { update_post_meta( $post_args['post_id'], 'question_pro_id', absint( $question_pro_id_new ) ); learndash_set_question_quizzes_dirty( $post_args['post_id'] ); } } } echo json_encode( $reply_data ); wp_die(); } // End of functions. } } add_action( 'learndash_builders_init', function() { Learndash_Admin_Metabox_Quiz_Builder::add_instance(); } ); sfwd_lms.php000066600000036431152141567370007121 0ustar00 esc_html__( 'Not Started', 'learndash' ), 'in_progress' => esc_html__( 'In Progress', 'learndash' ), 'complete' => esc_html__( 'Completed', 'learndash' ), ); $learndash_question_types = array( 'single' => esc_html__( 'Single choice', 'learndash' ), 'multiple' => esc_html__( 'Multiple choice', 'learndash' ), 'free_answer' => esc_html__( '"Free" choice', 'learndash' ), 'sort_answer' => esc_html__( '"Sorting" choice', 'learndash' ), 'matrix_sort_answer' => esc_html__( '"Matrix Sorting" choice', 'learndash' ), 'cloze_answer' => esc_html__( 'Fill in the blank', 'learndash' ), 'assessment_answer' => esc_html__( 'Assessment', 'learndash' ), 'essay' => esc_html__( 'Essay / Open Answer', 'learndash' ), ); // This is a global variable which is set in any of the shortcode handler functions. // The purpose is to let the plugin know when and if the any of the shortcodes were used. global $learndash_shortcode_used; $learndash_shortcode_used = false; global $learndash_shortcode_atts; $learndash_shortcode_atts = array(); /** * Metaboxes registered for settings pages etc. */ global $learndash_metaboxes; $learndash_metaboxes = array(); global $learndash_assets_loaded; $learndash_assets_loaded = array(); $learndash_assets_loaded['styles'] = array(); $learndash_assets_loaded['scripts'] = array();