Version Description
(2022-08-03) = ~ Modified: read items, read sections of course. (optimize read speed). ~ Modified: 'set_viewing_item' method. ~ Modified: set thumbnail image size on the 'Profile Page' by width setting on 'Avatar Dimensions'. ~ Fixed: error search no courses but return all (Archive courses). ~ Fixed: error LP_Shortcode_Course_Curriculum with Elementor. ~ Sanitize, ESC. ~ Deleted: folder attributes, files: 'class-lp-gdpr.php', 'class-lp-hard-cache.php', 'class-lp-repair-database.php', 'class-lp-utils.php'. ~ Clear, optimize codes. ~ Added: hook do_action 'lp/background/course/save'. ~ Added: hooks for addon LP - WPML. ~ Deprecated: methods 'load_curriculum'. ~ Style: FAQs on single course, spacing items progress, space in single tab. ~ Change: 'Course Item Per Page' set default is 10.
Release Info
Developer | ThimPress |
Plugin | LearnPress – WordPress LMS Plugin |
Version | 4.1.6.9 |
Comparing to | |
See all releases |
Code changes from version 4.1.6.8 to 4.1.6.9
- assets/css/learnpress-rtl.css +16 -15
- assets/css/learnpress-rtl.min.css +1 -1
- assets/css/learnpress.css +16 -15
- assets/css/learnpress.min.css +1 -1
- assets/js/dist/frontend/courses.js +2 -4
- assets/js/dist/frontend/courses.min.js +1 -1
- assets/src/apps/js/frontend/courses.js +2 -4
- assets/src/apps/js/frontend/single-course/student-list.js +96 -0
- config/settings/course.php +2 -2
- inc/abstracts/abstract-addon.php +1 -1
- inc/abstracts/abstract-shortcode-courses.php +1 -1
- inc/admin/class-lp-admin-ajax.php +13 -11
- inc/admin/class-lp-admin-dashboard.php +2 -2
- inc/admin/class-lp-admin.php +35 -29
- inc/admin/class-lp-install-sample-data.php +2 -38
- inc/admin/class-lp-modal-search-items.php +0 -3
- inc/admin/class-lp-plugin-install-list-table.php +4 -4
- inc/admin/class-lp-post-type-actions.php +7 -7
- inc/admin/class-lp-reset-data.php +16 -13
- inc/admin/dashboard-statistics/index.php +1 -1
- inc/admin/editor/class-lp-admin-editor-course.php +27 -20
- inc/admin/index.php +1 -1
- inc/admin/lp-admin-actions.php +39 -39
- inc/admin/lp-admin-functions.php +36 -10
- inc/admin/meta-box/fields/checkbox.php +4 -4
- inc/admin/meta-box/fields/custom-fields.php +3 -3
- inc/admin/meta-box/fields/email-content.php +7 -7
- inc/admin/meta-box/fields/html.php +8 -2
- inc/admin/meta-box/fields/image-advanced.php +2 -2
- inc/admin/meta-box/fields/list-emails.php +5 -5
- inc/admin/meta-box/fields/pages-dropdown.php +1 -1
- inc/admin/meta-box/fields/payment-order.php +3 -3
- inc/admin/meta-box/fields/radio.php +2 -2
- inc/admin/meta-box/fields/select-page.php +2 -2
- inc/admin/meta-box/fields/select.php +14 -14
- inc/admin/meta-box/fields/textarea.php +4 -4
- inc/admin/settings/class-lp-settings-advanced.php +2 -2
- inc/admin/settings/class-lp-settings-emails.php +0 -7
- inc/admin/settings/email-groups/class-lp-settings-emails-group.php +3 -3
- inc/admin/settings/index.php +1 -1
- inc/admin/sub-menus/abstract-submenu.php +11 -11
- inc/admin/sub-menus/index.php +1 -1
- inc/admin/views/addons/html-plugins-more.php +12 -12
- inc/admin/views/backend-user-profile.php +6 -3
- inc/admin/views/index.php +1 -1
- inc/admin/views/meta-boxes/course/settings.php +1 -1
- inc/admin/views/meta-boxes/fields/extra-faq.php +2 -2
- inc/admin/views/meta-boxes/fields/select.php +4 -4
- inc/admin/views/meta-boxes/order/actions.php +1 -1
- inc/admin/views/meta-boxes/order/content-tab-preview-exports-invoice.php +61 -59
- inc/admin/views/meta-boxes/order/details.php +4 -4
- inc/admin/views/meta-boxes/order/index.php +1 -1
- inc/admin/views/meta-boxes/question/settings.php +2 -2
- inc/admin/views/meta-boxes/quiz/settings.php +1 -1
- inc/admin/views/modal-search-items.php +3 -3
- inc/admin/views/modal-search-users.php +3 -3
- inc/admin/views/setup/content.php +2 -2
- inc/admin/views/setup/setup-paypal.php +3 -2
- inc/admin/views/setup/steps/currency.php +51 -40
- inc/admin/views/setup/steps/emails.php +4 -4
- inc/admin/views/setup/steps/payment.php +9 -9
- inc/admin/views/setup/steps/welcome.php +1 -1
- inc/admin/views/statistics/courses.php +0 -7
- inc/admin/views/statistics/general.php +0 -7
- inc/admin/views/statistics/index.php +1 -1
- inc/admin/views/statistics/orders.php +0 -5
- inc/admin/views/statistics/users.php +0 -5
- inc/admin/views/svg-icon.php +1 -1
- inc/admin/views/tools/course/html-install-sample-data.php +16 -23
- inc/admin/views/tools/course/html-user-item.php +71 -71
- inc/admin/views/tools/course/html-user.php +1 -1
- inc/admin/views/tools/database/html-clean-database.php +4 -1
- inc/admin/views/tools/html-course.php +4 -4
- inc/admin/views/tools/html-template.php +5 -5
- inc/admin/views/updates/html-upgrade-message-3.0.0.php +12 -12
- inc/admin/views/user/courses.php +5 -104
- inc/attributes/course.php +0 -408
- inc/attributes/lp-attributes-functions.php +0 -218
- inc/background-process/class-lp-background-single-course.php +71 -2
- inc/background-process/class-lp-background-single-order.php +0 -2
- inc/cache.php +8 -6
- inc/cache/class-lp-cache.php +1 -9
- inc/cart/index.php +1 -1
- inc/class-lp-ajax.php +6 -3
- inc/class-lp-checkout.php +1 -1
- inc/class-lp-compress-string.php +72 -77
- inc/class-lp-datetime.php +1 -1
- inc/class-lp-gdpr.php +0 -609
- inc/class-lp-hard-cache.php +0 -255
- inc/class-lp-helper.php +2 -18
- inc/class-lp-nonce-helper.php +13 -9
- inc/class-lp-page-controller.php +19 -76
- inc/class-lp-query-list-table.php +2 -2
- inc/class-lp-query.php +4 -4
- inc/class-lp-repair-database.php +0 -1014
- inc/class-lp-request-handler.php +2 -0
- inc/class-lp-utils.php +0 -162
- inc/class-lp-widget.php +11 -11
- inc/course/abstract-course.php +36 -837
- inc/course/class-lp-course-item-quiz.php +1 -1
- inc/course/class-lp-course-item.php +10 -9
- inc/course/class-lp-course-section.php +24 -27
- inc/course/class-lp-course-utils.php +2 -0
- inc/course/class-lp-course.php +280 -39
- inc/course/index.php +1 -1
- inc/course/lp-course-functions.php +34 -64
- inc/curds/class-lp-course-curd.php +146 -246
- inc/curds/class-lp-helper-curd.php +6 -3
- inc/curds/class-lp-lesson-curd.php +3 -4
- inc/curds/class-lp-question-curd.php +2 -0
- inc/curds/class-lp-quiz-curd.php +2 -0
- inc/curds/class-lp-section-curd.php +51 -48
- inc/curds/class-lp-user-curd.php +171 -164
- inc/curds/class-lp-user-item-curd.php +1 -1
- inc/custom-post-types/abstract.php +138 -5
- inc/custom-post-types/course.php +5 -23
- inc/custom-post-types/index.php +1 -1
- inc/custom-post-types/lesson.php +2 -6
- inc/custom-post-types/order.php +5 -2
- inc/custom-post-types/question.php +2 -2
- inc/custom-post-types/quiz.php +1 -1
- inc/databases/class-lp-course-db.php +91 -9
- inc/databases/class-lp-db.php +2 -0
- inc/databases/class-lp-section-db.php +25 -2
- inc/databases/class-lp-user-items-db.php +74 -0
- inc/emails/class-lp-email.php +5 -6
- inc/emails/index.php +1 -1
- inc/external-plugin/elementor/widgets/list-courses.php +2 -1
- inc/external-plugin/polylang/class-lp-polylang.php +1 -1
- inc/filters/class-lp-user-items-filter.php +8 -0
- inc/gateways/index.php +1 -1
- inc/gateways/paypal/index.php +1 -1
- inc/gateways/paypal/paypal-ipn/cert/index.php +1 -1
- inc/gateways/paypal/paypal-ipn/index.php +1 -1
- inc/gateways/paypal/paypal-ipn/ipn.php +10 -10
- inc/gateways/paypal/paypal-ipn/ipnlistener.php +19 -16
- inc/index.php +1 -1
- inc/jwt/includes/php-jwt/BeforeValidException.php +2 -2
- inc/jwt/includes/php-jwt/ExpiredException.php +2 -2
- inc/jwt/includes/php-jwt/JWT.php +187 -214
@@ -2370,18 +2370,21 @@ body.learnpress .learn-press-tabs .learn-press-tabs__tab, body.learnpress .attac
|
|
2370 |
background: #fff;
|
2371 |
}
|
2372 |
|
|
|
|
|
|
|
|
|
2373 |
.course-tab-panel {
|
2374 |
display: none;
|
2375 |
-
padding-top: 30px;
|
2376 |
}
|
2377 |
.course-tab-panel.active {
|
2378 |
display: block;
|
2379 |
}
|
2380 |
-
.course-tab-panel
|
2381 |
-
|
2382 |
-
|
2383 |
-
|
2384 |
-
|
2385 |
}
|
2386 |
.course-tab-panel .course-description h4 {
|
2387 |
margin-top: 0;
|
@@ -2391,10 +2394,7 @@ body.learnpress .learn-press-tabs .learn-press-tabs__tab, body.learnpress .attac
|
|
2391 |
font-weight: 500;
|
2392 |
}
|
2393 |
.course-tab-panel .course-description p {
|
2394 |
-
|
2395 |
-
font-size: 16px;
|
2396 |
-
font-weight: 300;
|
2397 |
-
line-height: 26px;
|
2398 |
}
|
2399 |
.course-tab-panel .course-description img {
|
2400 |
max-width: 100%;
|
@@ -3383,8 +3383,8 @@ input[name=course-extra-box-ratio]:checked + .course-extra-box .course-extra-box
|
|
3383 |
display: block;
|
3384 |
position: relative;
|
3385 |
margin: 0;
|
3386 |
-
padding: 25px
|
3387 |
-
font-size: 1rem;
|
3388 |
font-weight: 500;
|
3389 |
line-height: 1.7;
|
3390 |
cursor: pointer;
|
@@ -3413,9 +3413,9 @@ input[name=course-extra-box-ratio]:checked + .course-extra-box .course-extra-box
|
|
3413 |
display: none;
|
3414 |
}
|
3415 |
.course-tab-panel-faqs .course-faqs-box__content-inner {
|
3416 |
-
padding: 0
|
3417 |
color: #666;
|
3418 |
-
font-size:
|
3419 |
font-weight: 300;
|
3420 |
line-height: 26px;
|
3421 |
-webkit-animation-name: course-faqs-box__content-inner-transform;
|
@@ -5306,7 +5306,7 @@ a {
|
|
5306 |
}
|
5307 |
.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist::before {
|
5308 |
font-family: "Font Awesome 5 Free";
|
5309 |
-
font-size:
|
5310 |
font-weight: 900;
|
5311 |
content: "\f004";
|
5312 |
}
|
@@ -6136,6 +6136,7 @@ input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20)::before {
|
|
6136 |
display: flex;
|
6137 |
justify-content: center;
|
6138 |
align-items: center;
|
|
|
6139 |
}
|
6140 |
@media (max-width: 768px) {
|
6141 |
#popup-course #popup-header .items-progress {
|
2370 |
background: #fff;
|
2371 |
}
|
2372 |
|
2373 |
+
.course-tab-panels .course-tab-panel {
|
2374 |
+
padding-top: 30px;
|
2375 |
+
}
|
2376 |
+
|
2377 |
.course-tab-panel {
|
2378 |
display: none;
|
|
|
2379 |
}
|
2380 |
.course-tab-panel.active {
|
2381 |
display: block;
|
2382 |
}
|
2383 |
+
.course-tab-panel .course-description {
|
2384 |
+
color: #666;
|
2385 |
+
font-size: 16px;
|
2386 |
+
font-weight: 300;
|
2387 |
+
line-height: 26px;
|
2388 |
}
|
2389 |
.course-tab-panel .course-description h4 {
|
2390 |
margin-top: 0;
|
2394 |
font-weight: 500;
|
2395 |
}
|
2396 |
.course-tab-panel .course-description p {
|
2397 |
+
line-height: inherit;
|
|
|
|
|
|
|
2398 |
}
|
2399 |
.course-tab-panel .course-description img {
|
2400 |
max-width: 100%;
|
3383 |
display: block;
|
3384 |
position: relative;
|
3385 |
margin: 0;
|
3386 |
+
padding: 20px 25px 20px 45px;
|
3387 |
+
font-size: 1.1rem;
|
3388 |
font-weight: 500;
|
3389 |
line-height: 1.7;
|
3390 |
cursor: pointer;
|
3413 |
display: none;
|
3414 |
}
|
3415 |
.course-tab-panel-faqs .course-faqs-box__content-inner {
|
3416 |
+
padding: 0 25px 25px 25px;
|
3417 |
color: #666;
|
3418 |
+
font-size: 1rem;
|
3419 |
font-weight: 300;
|
3420 |
line-height: 26px;
|
3421 |
-webkit-animation-name: course-faqs-box__content-inner-transform;
|
5306 |
}
|
5307 |
.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist::before {
|
5308 |
font-family: "Font Awesome 5 Free";
|
5309 |
+
font-size: 16px;
|
5310 |
font-weight: 900;
|
5311 |
content: "\f004";
|
5312 |
}
|
6136 |
display: flex;
|
6137 |
justify-content: center;
|
6138 |
align-items: center;
|
6139 |
+
column-gap: 10px;
|
6140 |
}
|
6141 |
@media (max-width: 768px) {
|
6142 |
#popup-course #popup-header .items-progress {
|
@@ -1 +1 @@
|
|
1 |
-
@charset "UTF-8";@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}@keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}.learn-press-message{position:relative;margin:0 0 20px 0;padding:10px 15px 10px 50px;border-top:5px solid #00adff;border-radius:0 0 5px 5px;background:#f5f5f5;width:100%}.learn-press-message.icon{padding-right:45px}.learn-press-message.icon::before{background:#00adff}.learn-press-message.icon::after{position:absolute;top:50%;right:15px;width:10px;height:10px;margin-top:-13px;margin-left:10px;border-radius:50%;color:#fff;background:#00adff;font-family:"Font Awesome 5 Free";font-size:20px;line-height:26px;text-align:center;vertical-align:baseline;content:"\f129"}.learn-press-message::before,.learn-press-message::after{position:absolute;top:0;content:""}.learn-press-message::before{left:20px;width:20px;height:30px;background:#00adff}.learn-press-message::after{top:10px;left:20px;width:0;height:0;border:10px solid transparent;border-bottom-color:#f5f5f5}.learn-press-message.error{border-color:#d85554}.learn-press-message.error::before{background:#d85554}.learn-press-message.error.icon::before,.learn-press-message.error.icon::after{background:#d85554}.learn-press-message.error.icon::after{content:"\f00d"}.learn-press-message.warning{border-color:#ffc107}.learn-press-message.warning::before{background:#ffc107}.learn-press-message.warning.icon::before,.learn-press-message.warning.icon::after{background:#ffc107}.learn-press-message.warning.icon::after{content:"\f00d"}.learn-press-message.success{border-color:#059601}.learn-press-message.success::before{background:#059601}.learn-press-message.success.icon::before,.learn-press-message.success.icon::after{background:#059601}.learn-press-message.success.icon::after{content:"\f129"}.learn-press-message a{text-decoration:underline}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}.ajaxload{display:inline-block;position:relative;width:30px;height:30px;background:#7b7b7b;content:"";-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.ajaxload::after{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;display:inline-block;position:absolute;top:2px;right:50%;width:6px;height:6px;margin-right:-3px;background:#dedede;content:""}.lp-ajaxload-style-1{display:inline-block;position:relative;width:32px;height:32px}.lp-ajaxload-style-1::before,.lp-ajaxload-style-1::after{position:absolute;top:0;right:0;width:100%;height:100%;border:3px solid #ddd;content:""}.lp-ajaxload-style-1::after{clip:rect(0,32px,16px,16px);border-color:#2fa7ff;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.learn-press-tabs{margin-bottom:34px;background:#f1f2f8}.learn-press-tabs .learn-press-tabs__checker{display:none}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10)::after{background:#fff}.learn-press-tabs .learn-press-tabs__nav{display:flex;margin:0;padding:0;border:1px solid #e5e7f2;list-style:none}.learn-press-tabs .learn-press-tabs__tab{position:relative;margin:0;border-left:1px solid #e5e7f2;background:#f1f2f8;list-style:none}.learn-press-tabs .learn-press-tabs__tab:last-child{border-left:0}.learn-press-tabs .learn-press-tabs__tab>label{display:block;margin:0;padding:18px 65px;font-size:18px;line-height:1;font-weight:600;text-align:center;text-transform:capitalize;cursor:pointer}.learn-press-tabs .learn-press-tabs__tab>label a{color:#333}.learn-press-tabs .learn-press-tabs__tab>label a:focus{outline:0;text-decoration:none}@media(max-width:767px){.learn-press-tabs .learn-press-tabs__tab>label{padding:20px 50px 14px 50px}}.learn-press-tabs .learn-press-tabs__tab::before{position:absolute;top:-1px;right:0;width:100%;height:4px;background:transparent;content:""}.learn-press-tabs .learn-press-tabs__tab::after{position:absolute;bottom:-1px;right:0;width:100%;height:4px;background:transparent;content:""}.learn-press-tabs .learn-press-tabs__tab:first-child.active label{position:relative}.learn-press-tabs .learn-press-tabs__tab:first-child.active label::before{position:absolute;top:0;right:-1px;width:1px;height:100%;background:#fff;content:""}.learn-press-tabs.stretch .learn-press-tabs__tab{flex:1}.learn-press-tabs.stretch .learn-press-tabs__tab>label{padding:18px 10px}.learn-press-filters{display:flex;margin-bottom:30px;margin-right:0;list-style:none}.learn-press-filters>li{margin:0;font-size:16px;line-height:24px}@media(max-width:767px){.learn-press-filters>li{margin-left:30px;margin-right:0}.learn-press-filters>li:last-child{margin-left:0}}.learn-press-filters>li>a,.learn-press-filters>li>span{display:inline-block;font-weight:600}.learn-press-filters>li>span.count{font-weight:400}.learn-press-filters>li>span.count::before,.learn-press-filters>li>span.count::after{display:inline-block}.learn-press-filters>li>span.count::before{content:"("}.learn-press-filters>li>span.count::after{content:")"}.learn-press-filters>li span{color:#ffb606}.learn-press-filters>li span+span{color:#ffb606}.learn-press-filters>li span+span::before,.learn-press-filters>li span+span::after{color:#ffb606}.learn-press-filters>li a{color:#333;cursor:pointer}.learn-press-filters>li a+span{color:#333}.learn-press-filters>li a+span::before,.learn-press-filters>li a+span::after{color:#333}.learn-press-filters>li::after{margin:0 35px;color:#ccc;content:"|"}@media(max-width:767px){.learn-press-filters>li::after{display:none}}.learn-press-filters>li:last-child::after{display:none}.lp-checkout-form__before,.lp-checkout-form__after{width:45%;width:-webkit-calc(50% - 30px);width:-moz-calc(50% - 30px);width:calc(50% - 30px);margin:0 15px 40px 15px}.lp-checkout-form__before .lp-checkout-block h4,.lp-checkout-form__after .lp-checkout-block h4{margin-top:0;margin-bottom:18px;color:#333;font-size:24px;font-weight:600;line-height:1;font-family:var(--wp--preset--font-family--system-font)}@media(max-width:815px){.lp-checkout-form__before,.lp-checkout-form__after{width:100%;margin:0 0 40px 0}}.lp-checkout-form__before{float:left}.lp-checkout-form__before #checkout-order{width:100%}.lp-checkout-form .lp-checkout-form__after{float:right}.lp-checkout-form .lp-checkout-remember{letter-spacing:0;margin-top:0}.lp-checkout-form .lp-checkout-remember label{width:auto;color:#666;font-size:16px;font-weight:300;line-height:26px}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]{position:relative;top:3px;width:19px;height:19px;margin:0 0 0 4px;border:1px solid #ccc;cursor:pointer;-webkit-appearance:none}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]:focus{outline:0}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]:checked::after{position:absolute;top:2px;right:2px;color:#41abec;font-family:"Font Awesome 5 Free";font-size:14px;font-weight:900;line-height:1;content:"\f00c"}.lp-checkout-form .lp-checkout-remember a{color:#666;font-size:16px;font-weight:300;line-height:26px;text-decoration:underline;text-decoration-color:#ccc}.lp-checkout-form .lp-checkout-remember a:hover{color:var(--lp-primary-color);text-decoration-color:var(--lp-primary-color)}.lp-checkout-form .lp-form-fields{padding:0 0 14px 0}.lp-checkout-form .lp-form-fields label{display:block;margin-bottom:10px;font-size:16px}.lp-checkout-form .lp-form-fields input{height:44px;line-height:normal;width:100%;padding:0 15px;border:1px solid #ccc}.lp-checkout-form .rwmb-input input:not([type=checkbox]){width:100%;height:43px;padding:0 22px;border:1px solid #ccc;border-radius:3px;background-color:#fff;font-size:14px;font-weight:300;font-style:italic;line-height:43px}.lp-checkout-form .rwmb-input input:not([type=checkbox]):focus{border-color:var(--lp-primary-color);outline:0;color:#222}.lp-checkout-form .rwmb-input ::placeholder{opacity:1;color:#999}.lp-checkout-form .rwmb-input :-ms-input-placeholder{color:#999}.lp-checkout-form .rwmb-input ::-ms-input-placeholder{color:#999}.lp-checkout-form .rwmb-input input:-webkit-autofill,.lp-checkout-form .rwmb-input input:-webkit-autofill:hover,.lp-checkout-form .rwmb-input input:-webkit-autofill:focus{-webkit-box-shadow:0 0 0 1000px #fff inset;-webkit-text-fill-color:#999 !important}.lp-checkout-form{margin:0 -15px;margin-top:50px}@media(max-width:815px){.lp-checkout-form{display:flex;flex-direction:column-reverse;margin:0}}.lp-checkout-form #btn-checkout-account-switch-to-guest{margin-bottom:60px}.lp-checkout-form .description{float:right}.lp-checkout-form a{color:#41abec}.lp-checkout-form a label{display:inline-block;color:inherit;font-weight:normal;cursor:pointer}.lp-checkout-form a:hover{color:#ffb606}.lp-checkout-form #checkout-account-guest{width:100%;margin-bottom:35px;padding-bottom:19px;border-bottom:1px solid rgba(204,204,204,0.3)}.lp-checkout-form #checkout-account-guest .lp-form-fields,.lp-checkout-form #checkout-account-guest .form-field{margin-bottom:0;padding-bottom:0}.lp-checkout-form div.lp-guest-checkout-output{margin-top:10px;padding:8px 20px;border:2px solid #41abec;border-radius:4px;font-size:16px;transition:all .2s ease}.lp-checkout-form label.lp-guest-checkout-output{margin-top:10px;cursor:pointer;user-select:none}.lp-checkout-form .lp-guest-checkout-notice{margin:30px 0 0 0}.lp-checkout-form .lp-guest-switch-login{margin-top:1em;color:#666;font-size:16px;font-weight:400}.lp-checkout-form input[name=checkout-account-switch-form]{display:none}.lp-checkout-form input[name=checkout-account-switch-form]:not(:checked)+.lp-checkout-block{display:none;overflow:hidden;height:0;margin:0;padding:0;border:0;opacity:0}.lp-checkout-form input[name=checkout-account-switch-form]:not(:checked)+.lp-checkout-block>*{overflow:hidden;height:0}.lp-checkout-form input[name=checkout-account-switch-form]:checked+.lp-checkout-block{display:block;overflow:auto;height:auto}.lp-checkout-form input[name=checkout-account-switch-form][value=guest]:checked ~ #btn-checkout-account-switch-to-guest{display:none}.lp-checkout-form::after{display:block;clear:both;content:""}.lp-checkout-form:focus{outline:0}#checkout-order .lp-checkout-order__inner{padding:0 20px;border:1px solid #ccc;border-radius:4px}#checkout-order table{width:100%;margin:0;border:0}#checkout-order td,#checkout-order th{box-sizing:content-box;border:1px solid rgba(204,204,204,0.3);border-top:0;border-left:0;border-right:0;background:unset;line-height:1;text-align:right;vertical-align:inherit}#checkout-order td:last-child,#checkout-order th:last-child{padding-left:0}#checkout-order .course-name{font-size:16px;font-weight:600;line-height:26px}#checkout-order .course-name a{display:-webkit-box;overflow:hidden;color:#000;-webkit-line-clamp:1;-webkit-box-orient:vertical}#checkout-order .course-name a:hover{color:var(--lp-primary-color)}#checkout-order .col-number{min-width:50px;color:#666;font-size:16px;font-weight:600;line-height:26px;text-align:left}#checkout-order .order-total>th{padding:24px 0 24px 20px}#checkout-order .order-total .col-number{color:#333;font-size:26px}#checkout-order tfoot .cart-subtotal{color:#666;font-size:16px;font-weight:600;line-height:26px}#checkout-order tfoot .cart-subtotal>th{padding:20px 0 17px 20px}#checkout-order tfoot .order-total th{color:#333;font-size:16px;font-weight:600;line-height:26px}#checkout-order tfoot tr:last-child{border-width:0}#checkout-order tfoot tr:last-child td,#checkout-order tfoot tr:last-child th{border-width:0}#checkout-order .course-thumbnail{width:80px;padding:20px 0 18px 13px}#checkout-order .course-thumbnail>img{width:100px;max-width:100% !important;height:auto !important}#checkout-account-register,#checkout-account-login{width:100%;margin-bottom:35px;padding-bottom:19px;border-bottom:1px solid rgba(204,204,204,0.3)}#checkout-account-register .form-field .rwmb-label,#checkout-account-register .form-field .rwmb-input .description,#checkout-account-login .form-field .rwmb-label,#checkout-account-login .form-field .rwmb-input .description{display:none}#checkout-account-register .lp-checkout-remember label,#checkout-account-login .lp-checkout-remember label{display:inline-block}#checkout-account-register .lp-checkout-remember a,#checkout-account-login .lp-checkout-remember a{float:left}#checkout-account-register .lp-checkout-sign-in-link,#checkout-account-register .lp-checkout-sign-up-link,#checkout-account-login .lp-checkout-sign-in-link,#checkout-account-login .lp-checkout-sign-up-link{display:flex;margin:0;color:#666;font-size:16px;font-weight:400}#checkout-account-register .lp-checkout-sign-in-link a,#checkout-account-register .lp-checkout-sign-up-link a,#checkout-account-login .lp-checkout-sign-in-link a,#checkout-account-login .lp-checkout-sign-up-link a{margin-right:5px;color:#41abec;cursor:pointer}#checkout-account-register .lp-checkout-sign-in-link a:hover,#checkout-account-register .lp-checkout-sign-up-link a:hover,#checkout-account-login .lp-checkout-sign-in-link a:hover,#checkout-account-login .lp-checkout-sign-up-link a:hover{color:var(--lp-primary-color)}#checkout-account-register .lp-checkout-sign-in-link a label,#checkout-account-register .lp-checkout-sign-up-link a label,#checkout-account-login .lp-checkout-sign-in-link a label,#checkout-account-login .lp-checkout-sign-up-link a label{display:inline-block;float:left;color:inherit;font-weight:normal;cursor:pointer}#checkout-payment{width:100%;margin-bottom:25px}#checkout-payment h4{margin-bottom:24px}#checkout-payment .secure-connection{float:left;margin-top:5px;color:#999;font-size:12px;font-weight:normal}#checkout-payment .secure-connection i{margin-left:5px;color:#ccc;font-size:18px}@media(max-width:767px){#checkout-payment .secure-connection{margin-top:0}}#checkout-payment .payment-methods{margin:0 0 24px 0;padding:0;list-style:none}#checkout-payment .lp-payment-method{position:relative;margin:0}#checkout-payment .lp-payment-method>label{display:flex;align-items:center}#checkout-payment .lp-payment-method .gateway-input,#checkout-payment .lp-payment-method .gateway-icon{vertical-align:middle}#checkout-payment .lp-payment-method .gateway-icon{max-height:32px}#checkout-payment .lp-payment-method .gateway-input{position:relative;width:20px;height:20px;margin:0 0 0 8px;border:1px solid #ccc;background:#fff;-webkit-appearance:none;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}#checkout-payment .lp-payment-method .gateway-input::before{position:absolute;top:50%;right:50%;width:6px;height:6px;background:#41abec;transform:translate(50%,-50%);-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}#checkout-payment .lp-payment-method .gateway-input:checked::before{content:""}#checkout-payment .lp-payment-method .gateway-input:focus{outline:0}#checkout-payment #checkout-order-action button{width:100%;border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color);font-weight:500}#checkout-payment #checkout-order-action button:hover{border-color:var(--lp-primary-color);opacity:.5;background:var(--lp-primary-color)}#checkout-payment #checkout-order-action button.loading::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.lp-terms-and-conditions{color:#666;font-size:16px;font-weight:300;line-height:26px}.lp-terms-and-conditions a{color:#41abec}.lp-terms-and-conditions a:hover{color:var(--lp-primary-color)}.learn-press-checkout.guest-checkout{display:none}.button-continue-guest-checkout{clear:both}#learn-press-checkout .payment-methods{margin:0;padding:0;list-style:none}#learn-press-checkout .payment-methods .lp-payment-method{margin-bottom:20px}#learn-press-checkout .payment-methods .lp-payment-method>label{display:flex;flex-flow:row nowrap;padding:10px 20px;background:#f5f5f5;line-height:40px;cursor:pointer}#learn-press-checkout .payment-methods .lp-payment-method>label img{vertical-align:middle}#learn-press-checkout .payment-methods .lp-payment-method.selected>label{background:#d4d4d4}#learn-press-checkout .payment-methods .payment-method-form{display:none;padding:15px 20px;border-top:1px solid #ddd;background:#f9f9f9}#learn-press-checkout-login,#learn-press-checkout-register{margin-bottom:1.5em;padding:20px 20px 0 20px;border:1px solid #ddd;background:#fff}#learn-press-order-review,.learn-press-checkout-comment{margin-bottom:20px}#checkout-form-login,#checkout-form-register{_display:none}#checkout-form-login .learn-press-form-register,#checkout-form-login .learn-press-form-login,#checkout-form-register .learn-press-form-register,#checkout-form-register .learn-press-form-login{display:none}#checkout-guest-email{margin:0 0 20px 0}#checkout-guest-email .form-heading{margin:0}#checkout-guest-email #checkout-guest-options{margin:0;list-style:none}#checkout-guest-email #checkout-existing-account,#checkout-guest-email #checkout-new-account{display:none;margin:0}#checkout-guest-email.email-exists #checkout-existing-account{display:block}#checkout-guest-email.email-exists #checkout-new-account{display:none}.lp-list-table{width:100%;margin-bottom:20px}.lp-list-table th,.lp-list-table td{padding:20px;border:0 solid rgba(204,204,204,0.3);border-bottom-width:1px;background:#fff;font-size:16px;line-height:1;text-align:right}@media(max-width:767px){.lp-list-table th,.lp-list-table td{padding:15px}}.lp-list-table thead{box-sizing:border-box;border:1px solid #e5e7f2}.lp-list-table thead tr th{height:60px;border-bottom:0;color:#333;background:#f1f2f8;font-size:18px}.lp-list-table tbody,.lp-list-table tfoot{box-sizing:border-box;border:1px solid rgba(204,204,204,0.3);border-top:0}.lp-list-table tbody tr td,.lp-list-table tbody tr th,.lp-list-table tfoot tr td,.lp-list-table tfoot tr th{height:62px;color:#666;background:#fff;font-size:16px;font-weight:300}.lp-list-table tbody tr td a,.lp-list-table tbody tr th a,.lp-list-table tfoot tr td a,.lp-list-table tfoot tr th a{border-bottom:0;color:#666;text-decoration:none}.lp-list-table tbody tr td a:hover,.lp-list-table tbody tr th a:hover,.lp-list-table tfoot tr td a:hover,.lp-list-table tfoot tr th a:hover{color:var(--lp-primary-color)}.lp-list-table tbody tr .column-status .result-percent,.lp-list-table tfoot tr .column-status .result-percent{font-weight:500}.lp-list-table tbody tr .column-status .lp-label,.lp-list-table tfoot tr .column-status .lp-label{font-weight:600}.lp-list-table tbody tr:nth-child(odd),.lp-list-table tfoot tr:nth-child(odd){background:#f5f5f5}.lp-list-table .list-table-nav td{font-size:14px}.lp-list-table .list-table-nav td.nav-text{text-align:right}.lp-list-table .list-table-nav td.nav-pages{text-align:left}.lp-list-table .list-table-nav td.nav-pages .learn-press-pagination{text-align:left}.lp-list-table .list-table-nav td.nav-pages .page-numbers{margin-bottom:0}.lp-label{display:inline-block;color:#666;font-size:16px;font-weight:300;line-height:1}.learn-press-form .form-fields{margin:0;padding:0;list-style:none}.learn-press-form .form-fields .form-field{margin:0 0 20px 0}.learn-press-form .form-fields .form-field label{display:block;margin:0 0 10px 0}.learn-press-form .form-fields .form-field input[type=text],.learn-press-form .form-fields .form-field input[type=email],.learn-press-form .form-fields .form-field input[type=number],.learn-press-form .form-fields .form-field input[type=password],.learn-press-form .form-fields .form-field textarea{width:100%;padding:8px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.learn-press-form .form-fields .form-field .description{margin-top:10px;font-size:14px;font-style:italic;line-height:1.4}.learn-press-form .form-fields .form-field .asterisk{color:red}.learn-press-form-login,.learn-press-form-register{max-width:600px;margin-left:auto;margin-bottom:60px;margin-right:auto;padding:40px;border:1px solid #eee;border-radius:6px;box-shadow:0 4px 6px -1px rgba(0,0,0,0.1),0 2px 4px -1px rgba(0,0,0,0.06) !important}.learn-press-form-login h3,.learn-press-form-register h3{margin-bottom:20px;font-size:28px;line-height:1.4}.learn-press-form-login .form-fields .form-field label,.learn-press-form-register .form-fields .form-field label{font-size:16px;font-weight:400;user-select:none}.learn-press-form-login .form-fields .form-field input[type=text],.learn-press-form-login .form-fields .form-field input[type=password],.learn-press-form-login .form-fields .form-field input[type=tel],.learn-press-form-login .form-fields .form-field input[type=url],.learn-press-form-login .form-fields .form-field input[type=number],.learn-press-form-register .form-fields .form-field input[type=text],.learn-press-form-register .form-fields .form-field input[type=password],.learn-press-form-register .form-fields .form-field input[type=tel],.learn-press-form-register .form-fields .form-field input[type=url],.learn-press-form-register .form-fields .form-field input[type=number]{height:42px;border:1px solid #bbb;border-radius:4px;line-height:42px}.learn-press-form-login .form-fields .form-field input[type=text]:focus,.learn-press-form-login .form-fields .form-field input[type=password]:focus,.learn-press-form-login .form-fields .form-field input[type=tel]:focus,.learn-press-form-login .form-fields .form-field input[type=url]:focus,.learn-press-form-login .form-fields .form-field input[type=number]:focus,.learn-press-form-register .form-fields .form-field input[type=text]:focus,.learn-press-form-register .form-fields .form-field input[type=password]:focus,.learn-press-form-register .form-fields .form-field input[type=tel]:focus,.learn-press-form-register .form-fields .form-field input[type=url]:focus,.learn-press-form-register .form-fields .form-field input[type=number]:focus{border:0;outline:2px solid transparent !important;outline-offset:2px;box-shadow:0 0 0 2px #666 !important}.learn-press-form-login .form-fields .form-field.required label::after,.learn-press-form-register .form-fields .form-field.required label::after{content:" *";display:inline}.learn-press-form-login form[name=learn-press-login]>p>label,.learn-press-form-register form[name=learn-press-login]>p>label{color:#666;font-size:16px;cursor:pointer;user-select:none}.learn-press-form-login form[name=learn-press-login]>p>a,.learn-press-form-register form[name=learn-press-login]>p>a{color:#666;font-size:16px;line-height:1}.learn-press-form-login form[name=learn-press-login]>p:last-child,.learn-press-form-register form[name=learn-press-login]>p:last-child{margin-bottom:0}.learn-press-form-login button[type=submit],.learn-press-form-register button[type=submit]{width:100%;height:50px;border-radius:3px;outline:0;color:#fff;background:var(--lp-primary-color);box-shadow:none;font-size:16px;line-height:1;vertical-align:middle;text-decoration:none}.required label{font-weight:bold}.required label:after{content:" *";display:inline}.lp-password-input{display:flex;flex-direction:column;justify-content:center;position:relative}.lp-password-input input[type=password]{padding-left:2.5rem}.lp-password-input input::-ms-reveal{display:none}.lp-password-input .lp-show-password-input{position:absolute;top:8px;left:10px;cursor:pointer}.lp-password-input .lp-show-password-input::after{font-family:"Font Awesome 5 Free";font-weight:900;content:"\f06e"}.lp-password-input .lp-show-password-input.display-password::after{color:#585858;content:"\f070"}.form-desc{font-size:smaller;font-style:italic}.become-teacher-form{width:90%;max-width:500px;margin:0 auto}.become-teacher-form .form-field input[type=text],.become-teacher-form .form-field input[type=email],.become-teacher-form .form-field input[type=number],.become-teacher-form .form-field input[type=password]{width:100%}body div.entry-content>div.learnpress{--responsive--aligndefault-width:100%;max-width:var(--lp-content-width,100%)}.lp-user-profile{position:relative;background:#fff}.lp-user-profile .lp-user-profile-avatar img{position:relative;width:100%;height:auto;border-radius:unset;display:block}.lp-user-profile .lp-user-profile-avatar+.lp-user-profile-socials{margin-top:10px;margin-bottom:5px}.lp-user-profile .lp-user-profile-socials{display:flex;position:relative;z-index:1;justify-content:center;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.lp-user-profile .lp-user-profile-socials a{display:inline-flex;align-items:center;justify-content:center;width:35px;height:35px;margin:0 7px;border:1px solid #cfcfcf;color:#666;background:#fff;font-size:14px;line-height:35px;text-align:center;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.lp-user-profile .lp-user-profile-socials a:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.lp-user-profile .wrapper-profile-header{color:#fff;background:var(--lp-secondary-color);position:relative}@media(max-width:990px){.lp-user-profile .wrapper-profile-header .lp-profile-content-area{min-height:inherit;padding:50px 15px}.lp-user-profile .wrapper-profile-header .lp-profile-left{float:right;position:static}.lp-user-profile .wrapper-profile-header .lp-profile-right{float:left;width:calc(100% - 270px);margin-right:0}}@media(max-width:768px){.lp-user-profile .wrapper-profile-header .lp-profile-left{width:220px}.lp-user-profile .wrapper-profile-header .lp-profile-right{width:calc(100% - 220px)}.lp-user-profile .wrapper-profile-header .lp-user-profile-socials{margin-left:-5px;margin-right:-5px}.lp-user-profile .wrapper-profile-header .lp-user-profile-socials a{width:36px;height:36px;margin:0 5px;line-height:36px}}@media(max-width:500px){.lp-user-profile .wrapper-profile-header .lp-profile-left{float:none;margin:0 auto}.lp-user-profile .wrapper-profile-header .lp-profile-right{width:100%;padding-top:30px;text-align:center}}.lp-user-profile .wrapper-profile-header::before{left:100%;right:auto}.lp-user-profile .wrapper-profile-header::after{right:100%;left:auto}.lp-user-profile .lp-profile-content-area{position:relative;padding-top:50px;padding-bottom:50px;display:flex;align-items:center}@media(max-width:650px){.lp-user-profile .lp-profile-content-area{flex-direction:column}.lp-user-profile .lp-profile-content-area .lp-profile-right{text-align:center;width:100%;padding:50px 15px 0}}.lp-user-profile .lp-profile-left{min-width:270px;max-width:270px;padding:5px;border:2px solid #eaeaea;border-radius:3px}.lp-user-profile .lp-profile-right{padding-left:15px;padding-right:35px}.lp-user-profile .lp-profile-username{padding-bottom:10px;font-size:18px;font-weight:500;text-transform:capitalize}.lp-user-profile .lp-profile-username::before,.lp-user-profile .lp-profile-username::after{content:"";width:30px;height:1px;background-color:white;display:inline-block;vertical-align:middle;margin:0}.lp-user-profile .lp-profile-username::before{margin-left:5px}.lp-user-profile .lp-profile-username::after{margin-right:5px}.lp-user-profile .lp-profile-user-bio{font-size:16px;font-weight:300;line-height:26px}.lp-user-profile #profile-sidebar{float:right;width:270px;margin-top:0;border:1px solid rgba(0,0,0,0.1);border-top:0;background:#fff;margin-top:58px}@media(max-width:990px){.lp-user-profile #profile-sidebar{width:100%}.lp-user-profile #profile-sidebar .lp-user-profile-avatar{max-width:150px}}.lp-user-profile #profile-nav .lp-profile-nav-tabs{margin:0;padding:0;list-style:none}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li{position:relative;margin:0;border-top:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li a{display:block;padding:0 20px;color:#333;font-size:16px;font-weight:500;line-height:50px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a{padding:0 52px 0 20px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a>i{display:inline-block;position:absolute;right:24px;width:28px;color:var(--lp-primary-color);font-size:12px;line-height:53px;text-align:right}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a::after{float:left;margin-left:4px;color:#999;font-family:"Font Awesome 5 Free";font-size:10px;font-weight:900;content:"\f054"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li{margin:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li a{border-bottom:1px solid #f9f9f9}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li a:hover{color:var(--lp-primary-color);background:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li:hover>a i{color:var(--lp-primary-color);background:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active,.lp-user-profile #profile-nav .lp-profile-nav-tabs>li:hover{background:var(--lp-primary-color)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active>a::after,.lp-user-profile #profile-nav .lp-profile-nav-tabs>li:hover>a::after{content:"\f053"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active a{padding-right:52px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.wishlist>a::before{position:absolute;right:25px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:12px;font-weight:900;content:"\f004"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.wishlist:hover a::before{color:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.logout>a::after{display:none}.lp-user-profile #profile-nav .lp-profile-nav-tabs li>a{box-sizing:border-box;height:50px}.lp-user-profile #profile-nav .lp-profile-nav-tabs li>ul{display:none;position:absolute;z-index:1000;top:0;right:100%;min-width:150px;margin:0;padding:0;background:#fff;box-shadow:0 15px 20px 0 rgba(0,0,0,0.05);list-style:none}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>a,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>a{color:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>a i,.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>a::after,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>a i,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>a::after{color:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>ul{display:block}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul{position:relative;right:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul .active{background:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul .active>a{color:#ffb606}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul .active>a i{color:#ffb606}@media(max-width:990px){.lp-user-profile #profile-nav{overflow-x:scroll;border-top:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs{width:max-content}.lp-user-profile #profile-nav .lp-profile-nav-tabs::after{display:table;clear:both;content:""}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li{float:right;border:0;border-left:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a{height:auto;padding:0 45px 0 20px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a::after{margin-right:10px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.has-child a::after{content:"\f077"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active a{padding-right:45px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active a::after{content:"\f078"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul{display:none;width:max-content;transform:translateX(20%)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul::after{display:table;clear:both;box-shadow:0 0;content:""}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul li{float:right;border-left:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul li:last-child{border-left:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul li a{padding:0 10px}.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover ul{display:none !important}.lp-user-profile #profile-nav .lp-profile-nav-tabs li:not(.has-child)>a::after{display:none}}@media(max-width:560px){.lp-user-profile #profile-nav .lp-profile-nav-tabs>li{max-width:80px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a{font-size:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a::after{margin-right:0}}.lp-user-profile .lp-profile-content{float:left;width:calc(100% - 300px);margin-bottom:60px;padding-top:58px}@media(max-width:990px){.lp-user-profile .lp-profile-content{width:100%}}@media(max-width:767px){.lp-user-profile .lp-profile-content .learn-press-tabs__nav{display:block;width:100%;border:0}.lp-user-profile .lp-profile-content .learn-press-tabs__nav::after{display:table;clear:both;content:""}.lp-user-profile .lp-profile-content .learn-press-tabs__tab{float:right;border-left:0}.lp-user-profile .lp-profile-content .learn-press-tabs__tab label{padding-left:25px;padding-right:25px}.lp-user-profile .lp-profile-content .profile-orders{overflow-x:scroll}}.lp-user-profile .lp-profile-content .course-categories,.lp-user-profile .lp-profile-content .course-instructor{margin-bottom:14px}.lp-user-profile .lp-profile-content .course-categories{padding:0}.lp-user-profile .lp-profile-content .lp-button{display:block;margin:0 auto 52px auto;padding:13px 34px;border-color:var(--lp-secondary-color);font-size:14px;font-weight:500;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.lp-user-profile .lp-profile-content .lp-button:hover{border-color:var(--lp-primary-color)}.lp-user-profile ul.learn-press-courses .course{margin:0 0 40px 0}.lp-user-profile .profile-orders .profile-heading{display:none}.lp-user-profile .profile-orders table{margin-top:0}.lp-user-profile .profile-orders .column-order-actions a{margin-left:6px;color:black;text-decoration:underline;font-weight:500}.lp-user-profile .profile-orders .column-order-actions a:hover,.lp-user-profile .profile-orders .column-order-actions a:focus{color:var(--lp-primary-color)}.lp-user-profile #dashboard-general-statistic{margin-bottom:55px;padding-bottom:20px;border-bottom:1px solid #ddd}.lp-user-profile .dashboard-general-statistic__row{display:flex;margin:0 -15px;justify-content:center;flex-wrap:wrap}.lp-user-profile .dashboard-general-statistic__row .statistic-box{min-width:200px;max-width:270px;margin:0 15px 40px 15px;padding:15px 20px;border:1px solid #ccc;border-radius:4px;background:#f9fafc;text-align:center}@media(max-width:990px){.lp-user-profile .dashboard-general-statistic__row .statistic-box{width:45%}}@media(max-width:767px){.lp-user-profile .dashboard-general-statistic__row .statistic-box{width:100%;margin:0 15px 15px}}.lp-user-profile .dashboard-general-statistic__row .statistic-box:hover{background:#eaeaea}.lp-user-profile .dashboard-general-statistic__row[data-col="2"] .statistic-box{width:50%}.lp-user-profile .dashboard-general-statistic__row[data-col="4"] .statistic-box{width:25%}.lp-user-profile .dashboard-general-statistic__row[data-col="5"] .statistic-box{width:20%}.lp-user-profile .statistic-box .statistic-box__text{margin:0 0 7px 0;padding:0;color:#666;font-size:18px;font-weight:400;line-height:1}.lp-user-profile .statistic-box .statistic-box__number{color:#333;font-size:18px;font-weight:500;line-height:1}.lp-user-profile .profile-courses>h3{margin-top:0;margin-bottom:36px;color:#333;font-size:30px;font-weight:600;line-height:1;text-transform:capitalize}.lp-profile-content table.lp-list-table{border-spacing:0;border-top:1px solid #ccc;border-right:1px solid #ccc;margin-bottom:40px}.lp-profile-content table.lp-list-table tr th,.lp-profile-content table.lp-list-table tr td{border-left:1px solid #ccc;border-bottom:1px solid #ccc;text-align:center}.lp-profile-content table.lp-list-table tr td a{color:var(--wp--preset--color--foreground);font-weight:400}.lp-profile-content table.lp-list-table tr td a:hover{color:var(--lp-primary-color)}.lp-profile-content #profile-content-order-details h3{margin-top:0;font-size:30px;line-height:1.5;font-weight:500;margin-bottom:15px;font-family:var(--wp--preset--font-family--system-font)}.profile-basic-information .form-field,form[name=profile-change-password] .form-field{margin:0 10px 24px 10px}.profile-basic-information .form-field>label,form[name=profile-change-password] .form-field>label{margin:0 0 12px 0;color:#333;font-size:16px;font-weight:500;font-style:italic}.profile-basic-information .form-field .form-field-input input,form[name=profile-change-password] .form-field .form-field-input input{height:43px;padding:8px 20px;font-weight:400}.profile-basic-information .form-field .form-field-input input[type=password],form[name=profile-change-password] .form-field .form-field-input input[type=password]{padding:8px 20px}.profile-basic-information .form-field .form-field-input textarea,form[name=profile-change-password] .form-field .form-field-input textarea{padding:9px 20px 16px 20px;font-weight:300;line-height:24px}.profile-basic-information .form-field .form-field-input input,.profile-basic-information .form-field .form-field-input textarea,form[name=profile-change-password] .form-field .form-field-input input,form[name=profile-change-password] .form-field .form-field-input textarea{border:1px solid #ccc;color:#999;font-size:14px;font-style:italic}.profile-basic-information .form-field .form-field-input input:focus,.profile-basic-information .form-field .form-field-input textarea:focus,form[name=profile-change-password] .form-field .form-field-input input:focus,form[name=profile-change-password] .form-field .form-field-input textarea:focus{border-color:var(--lp-primary-color);outline:0;color:#222}.profile-basic-information .form-field .form-field-input ::placeholder,form[name=profile-change-password] .form-field .form-field-input ::placeholder{opacity:1;color:#999}.profile-basic-information .form-field .form-field-input :-ms-input-placeholder,form[name=profile-change-password] .form-field .form-field-input :-ms-input-placeholder{color:#999}.profile-basic-information .form-field .form-field-input ::-ms-input-placeholder,form[name=profile-change-password] .form-field .form-field-input ::-ms-input-placeholder{color:#999}.profile-basic-information .form-field .form-field-input .description,form[name=profile-change-password] .form-field .form-field-input .description{margin-top:15px}@media(max-width:767px){.profile-basic-information .form-field,form[name=profile-change-password] .form-field{margin:0 0 24px 0}}.profile-basic-information .form-field__50,form[name=profile-change-password] .form-field__50{float:right;width:calc(50% - 20px);margin-left:10px}@media(max-width:767px){.profile-basic-information .form-field__50,form[name=profile-change-password] .form-field__50{float:unset;width:100%;margin:0 0 24px 0}}.profile-basic-information .form-field__clear,form[name=profile-change-password] .form-field__clear{clear:both}.profile-basic-information button,form[name=profile-change-password] button{padding:16px 24px;border:0;border-radius:3px;color:#fff;background:var(--lp-primary-color);font-size:16px;font-weight:400;line-height:1}.profile-basic-information button:hover,form[name=profile-change-password] button:hover{opacity:.5;background:var(--lp-primary-color)}.profile-basic-information p,form[name=profile-change-password] p{margin:0}#learn-press-profile-basic-information .form-fields::after{display:block;clear:both;content:""}@media(max-width:767px){#learn-press-profile-basic-information .form-fields{margin:0}}#learn-press-profile-basic-information button[type=submit]{padding:0 15px;height:40px;line-height:40px;border:0;display:inline-flex;align-items:center;justify-content:center;background-color:var(--lp-primary-color);color:white;font-size:16px;font-weight:400;-webkit-transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;transition:.3s;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}#learn-press-profile-basic-information button[type=submit]:hover{opacity:.5;background-color:var(--lp-primary-color)}.recover-order__title{margin-bottom:5px}.recover-order__description{margin-bottom:20px;color:#999;font-size:.8em;font-style:italic}div.order-recover{display:flex}div.order-recover>.button-recover-order{margin:0;margin-right:20px;flex:0 0 auto}div.order-recover>.button-recover-order.loading::before{display:inline-block;margin-left:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";animation:lp-rotating 1s linear infinite}div.order-recover input[type=text]{width:100%;height:43px;margin-left:10px;padding:0 22px;border:1px solid #ccc;border-radius:3px;background-color:#fff;font-size:14px;font-weight:300;font-style:italic;line-height:43px;flex:1 1 auto}.learn-press-profile-course__progress .lp_profile_course_progress{border:1px solid #eee;border-top:0;overflow-x:auto}.learn-press-profile-course__progress .lp_profile_course_progress__item{display:grid;align-items:center;padding:15px;border-top:1px solid #eee;grid-template-columns:90px 1fr 80px 190px 140px;column-gap:20px}.learn-press-profile-course__progress .lp_profile_course_progress__item div img{max-width:60px;height:auto}@media(max-width:575px){.learn-press-profile-course__progress .lp_profile_course_progress__item div img{max-width:100%}}@media(max-width:575px){.learn-press-profile-course__progress .lp_profile_course_progress__item{display:block}}.learn-press-profile-course__progress .lp_profile_course_progress__header{background-color:#eee}@media(max-width:575px){.learn-press-profile-course__progress .lp_profile_course_progress__header{display:flex;overflow-x:auto;white-space:nowrap;justify-content:flex-end}}.lp_profile_course_progress__nav button.loading::before{display:inline-block;margin-left:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.entry-content ul.learn-press-profile-course__tab__inner{padding:0}.content ul.learn-press-courses{margin-right:-15px;margin-left:-15px}.content ul.learn-press-courses[data-layout=list]{margin:0}.learn-press-profile-course__tab__inner{display:flex;margin:40px 0 0 0 !important;padding:0 !important;background:#eee;list-style:none !important}.learn-press-profile-course__tab__inner>li{list-style:none;margin:0 !important}.learn-press-profile-course__tab__inner>li:hover{cursor:pointer}.learn-press-profile-course__tab__inner a{display:inline-block;padding:15px 30px;font-weight:600;position:relative}.learn-press-profile-course__tab__inner a.active{color:var(--lp-primary-color);background:#fff}.learn-press-profile-course__tab__inner a.active::before{content:"";height:4px;width:100%;background-color:var(--lp-primary-color);position:absolute;top:0;right:0;left:auto}.learn-press-course-tab-filters .learn-press-filters{margin-top:20px;margin-right:0;padding:0;list-style:none}.learn-press-course-tab-filters .learn-press-filters a.active{color:var(--lp-primary-color)}.lp-profile-content ul{list-style:none !important;padding:0 !important}.learnpress_avatar__form label{display:inline-block}.learnpress_avatar__form input[type=file]{display:none}.learnpress_avatar__form__upload{display:flex;width:200px;height:200px;border:1px dashed #ccc;border-radius:3px;background-color:#fafafa;font-size:14px;font-weight:300;font-style:italic;line-height:43px;text-align:center;cursor:pointer;align-items:center;justify-content:center}.learnpress_avatar__form__upload div{line-height:1.4}.learnpress_avatar__button--loading::before{display:inline-block;margin-left:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}button.learnpress_avatar__button{height:40px;padding:0 15px;border:0;background:var(--lp-primary-color);color:white;margin-top:15px;border-radius:3px}button.learnpress_avatar__button+button{margin-right:15px;margin-left:0}#primary .learn-press-courses[data-size="3"] .course{width:50%}body.learnpress .learn-press-tabs .learn-press-tabs__tab,body.learnpress .attachment-recent-works-thumbnail{border-radius:0}#learn-press-course-tabs.show-all .course-tab-panel{margin-bottom:40px}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .course-tab-panels .course-tab-panel:nth-child(1){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .learn-press-nav-tabs .course-nav:nth-child(1){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .learn-press-nav-tabs .course-nav:nth-child(1) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .course-tab-panels .course-tab-panel:nth-child(2){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .learn-press-nav-tabs .course-nav:nth-child(2){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .learn-press-nav-tabs .course-nav:nth-child(2) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .course-tab-panels .course-tab-panel:nth-child(3){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .learn-press-nav-tabs .course-nav:nth-child(3){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .learn-press-nav-tabs .course-nav:nth-child(3) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .course-tab-panels .course-tab-panel:nth-child(4){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .learn-press-nav-tabs .course-nav:nth-child(4){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .learn-press-nav-tabs .course-nav:nth-child(4) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .course-tab-panels .course-tab-panel:nth-child(5){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .learn-press-nav-tabs .course-nav:nth-child(5){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .learn-press-nav-tabs .course-nav:nth-child(5) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .course-tab-panels .course-tab-panel:nth-child(6){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .learn-press-nav-tabs .course-nav:nth-child(6){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .learn-press-nav-tabs .course-nav:nth-child(6) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .course-tab-panels .course-tab-panel:nth-child(7){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .learn-press-nav-tabs .course-nav:nth-child(7){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .learn-press-nav-tabs .course-nav:nth-child(7) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .course-tab-panels .course-tab-panel:nth-child(8){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .learn-press-nav-tabs .course-nav:nth-child(8){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .learn-press-nav-tabs .course-nav:nth-child(8) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .course-tab-panels .course-tab-panel:nth-child(9){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .learn-press-nav-tabs .course-nav:nth-child(9){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .learn-press-nav-tabs .course-nav:nth-child(9) label{color:var(--lp-primary-color);background:#fff}.course-tab-panel{display:none;padding-top:30px}.course-tab-panel.active{display:block}.course-tab-panel.course-tab-panel-instructor,.course-tab-panel.course-tab-panel-faqs{padding-top:30px}.course-tab-panel.course-tab-panel-reviews{padding:56px 0 0 0}.course-tab-panel .course-description h4{margin-top:0;margin-bottom:1.125rem;color:#333;font-size:18px;font-weight:500}.course-tab-panel .course-description p{color:#666;font-size:16px;font-weight:300;line-height:26px}.course-tab-panel .course-description img{max-width:100%;height:auto;vertical-align:middle}.course-tab-panel .lp-course-author{display:flex;margin-bottom:40px}@media(max-width:767px){.course-tab-panel .lp-course-author{flex-direction:column}}.course-tab-panel .lp-course-author .course-author__pull-left{margin-left:30px;text-align:center;align-items:center}@media(max-width:767px){.course-tab-panel .lp-course-author .course-author__pull-left{margin-left:0;margin-bottom:30px}}.course-tab-panel .lp-course-author img{width:50px;height:50px;margin-bottom:20px;border-radius:50%;object-fit:cover;object-position:center}.course-tab-panel .lp-course-author .course-author__pull-right{flex:1}@media(max-width:767px){.course-tab-panel .lp-course-author .course-author__pull-right{width:100%;text-align:center}}.course-tab-panel .lp-course-author .author-title{margin-bottom:18px}.course-tab-panel .lp-course-author .author-title a{color:#333;box-shadow:none;font-size:18px;font-weight:500;text-transform:capitalize}.course-tab-panel .lp-course-author .author-title a:hover{color:var(--lp-primary-color)}.course-tab-panel .lp-course-author .author-description{color:#666;font-size:16px;font-weight:300;line-height:26px}.course-tab-panel .lp-course-author .author-socials{display:grid;grid-template-columns:repeat(4,33px);gap:10px;justify-content:center}.course-tab-panel .lp-course-author .author-socials>a{display:inline-block;width:33px;height:33px;margin:0;border:1px solid #ededed;border-radius:50%;color:#878787;box-shadow:none;font-size:14px;line-height:33px;text-align:center;vertical-align:middle;transition:all .3s}.course-tab-panel .lp-course-author .author-socials>a:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.course-tab-panel .lp-course-author .author-socials .fa-googleplus::before{content:"\f0d5"}.course-summary div.lp-list-co-instructor{display:grid;grid-template-columns:repeat(2,1fr);gap:40px}.course-summary div.lp-list-co-instructor__item{display:flex;column-gap:30px}@media(max-width:767px){.course-summary div.lp-list-co-instructor__item{align-items:center;flex-direction:column;padding:0 15px;column-gap:0;row-gap:10px}}.course-summary div.lp-list-co-instructor__avatar>img{width:100%;max-width:96px;border-radius:999px}.course-summary div.lp-list-co-instructor__bio{flex:1}.course-summary div.lp-list-co-instructor__bio__top>a{font-size:18px;font-weight:600}.course-summary div.lp-list-co-instructor__bio__description{font-size:1rem}.course-summary .course-price{margin-bottom:10px}.course-summary .course-price .origin-price,.course-summary .course-price .price{vertical-align:middle}.course-summary .course-price .origin-price{margin-left:10px;font-size:18px;font-style:italic;text-decoration:line-through}.course-summary .course-price .price{font-size:24px}.course-summary .course-summary-sidebar .lp-course-buttons{margin-bottom:20px}.course-summary .course-featured-review .featured-review__title{margin-top:0;margin-bottom:6px;font-size:1.2rem;font-weight:500}.course-summary .course-featured-review .featured-review__stars{padding-bottom:12px;color:var(--lp-primary-color);font-size:16px}.course-summary .course-featured-review .featured-review__content{position:relative;color:#666;font-size:1rem;font-style:italic;line-height:24px}.course-summary .course-featured-review .featured-review__content::after{position:absolute;top:-42px;left:-15px;color:rgba(102,102,102,0.1);font-family:Arial;font-size:180px;font-weight:700;font-style:normal;content:"‘‘";transform:rotate(-180deg)}.course-summary .course-tags a{display:inline-block;padding:3px 5px;border-radius:4px;color:#fff;background:#9aa5ab;font-size:12px;line-height:1}.edit-content{margin-right:5px}ul.learn-press-nav-tabs{display:flex;margin:0;padding:0;border:1px solid rgba(204,204,204,0.3);border-bottom:0;background:#f1f2f8;list-style:none}ul.learn-press-nav-tabs .course-nav{float:right;position:relative;margin:0;border-left:1px solid rgba(204,204,204,0.3);border-bottom:1px solid rgba(204,204,204,0.3);list-style:none}ul.learn-press-nav-tabs .course-nav:first-child.active::after{position:absolute;top:-1px;right:-1px;width:1px;height:100%;background:#fff;content:""}ul.learn-press-nav-tabs .course-nav:last-child{border-left:0}ul.learn-press-nav-tabs .course-nav:last-child.active::after{position:absolute;top:-1px;left:-2px;width:2px;height:100%;background:#fff;content:""}ul.learn-press-nav-tabs .course-nav.active{border-bottom:0}ul.learn-press-nav-tabs .course-nav.active::before{position:absolute;top:-1px;right:0;width:100%;height:4px;background:var(--lp-primary-color);content:""}ul.learn-press-nav-tabs .course-nav.active label{color:var(--lp-primary-color);background-color:white}ul.learn-press-nav-tabs .course-nav a{display:inline-block;padding:10px 20px;border-bottom:0;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}ul.learn-press-nav-tabs .course-nav a:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}ul.learn-press-nav-tabs[data-tabs] .course-nav{flex:1}ul.learn-press-nav-tabs[data-tabs] .course-nav a{width:100%;text-align:center}ul.learn-press-nav-tabs::after{display:block;clear:both;content:""}@media(max-width:767px){ul.learn-press-nav-tabs{display:grid;grid-template-columns:repeat(2,1fr);max-height:none}}.course-item-popup #tab-curriculum{display:block}.course-curriculum ul.curriculum-sections{position:relative;z-index:499;margin:0;padding:0;list-style:none}.course-curriculum ul.curriculum-sections .closed .section-item__loadmore{display:none}.course-curriculum ul.curriculum-sections .section{margin:0;padding:0;flex-wrap:wrap}.course-curriculum ul.curriculum-sections .section:last-child{padding:0}.course-curriculum ul.curriculum-sections .section.section-empty .section-header{margin-bottom:20px}.course-curriculum ul.curriculum-sections .section.section-empty .learn-press-message{margin-left:15px;margin-right:15px}.course-curriculum ul.curriculum-sections .section-title.c+.section-desc{display:block}.course-curriculum ul.curriculum-sections .section-title.c span.show-desc::before{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg);top:0}.course-curriculum ul.curriculum-sections .item-meta.duration{background:#d9e0f1}.course-curriculum .section-item__loadmore{display:flex;justify-content:center;align-items:center}.course-curriculum .section-item__loadmore button{display:inline-flex;margin-top:10px;margin-left:auto;margin-right:auto;padding:10px 20px;border:1px solid #ccc;border-radius:4px;outline:0;color:#222;background:#f7f7f7;box-shadow:none;font-weight:500;justify-content:center;align-items:center;cursor:pointer;font-size:1rem;font-family:sans-serif}.course-curriculum .section-item__loadmore.loading button::before{display:inline-block;margin-left:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.course-curriculum .section-header{display:table;width:100%;padding:0 0 26px 0;border-bottom:0;border-bottom:1px solid #d9e0f1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-curriculum .section-header .section-title,.course-curriculum .section-header .section-desc{margin:0}.course-curriculum .section-header span.show-desc{display:inline-block;position:absolute;top:50%;left:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-header span.show-desc::before{font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f107"}.course-curriculum .section-header span.show-desc:hover::before{border-top-color:#ccc}.course-curriculum .section-header .section-desc{margin:0;margin-top:10px;font-size:14px;line-height:21px;color:#999;font-style:italic}.course-curriculum .section-header .section-meta{display:block;padding-top:17px;padding-bottom:15px;font-size:14px;text-align:left;vertical-align:middle;white-space:nowrap}.course-curriculum .section-item{width:100%}.course-curriculum .section-content{margin:0 0 15px 0;padding:0;list-style:none}.course-curriculum .section-content .course-item-meta{display:table-cell;padding:10px 0;text-align:left;vertical-align:middle;white-space:nowrap}.course-curriculum .section-content .course-item-meta .item-meta{display:inline-block;margin-right:14px;border-radius:3px;color:#fff;font-size:14px;line-height:23px;text-align:center;vertical-align:middle;padding:0 8px}.course-curriculum .section-content .course-item-meta .item-meta.final-quiz{background:#14c4ff}.course-curriculum .section-content .course-item-meta .item-meta.trans{padding:0}.course-curriculum .section-content .course-item-meta .count-questions{background:#9672cf}.course-curriculum .section-content .course-item-meta .duration{background:silver}.course-curriculum .section-content .course-item-meta .course-item-status{padding:0;color:#999;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-curriculum .section-content .course-item-meta .course-item-status::before{font-family:"Font Awesome 5 Free";font-size:14px;font-weight:900;vertical-align:middle;text-transform:lowercase;content:"\f00c"}.course-curriculum .section-content .course-item-preview{font-style:normal;padding:0}.course-curriculum .section-content .course-item-preview::before{color:#fff;padding:0 8px;background:#00adff;display:inline-flex;align-items:center;justify-content:center;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;vertical-align:baseline;content:attr(data-preview)}.course-curriculum .course-item{display:flex;position:relative;margin:0 0 2px 0;padding:0 30px 0 15px;background:rgba(241,242,248,0.4);font-size:14px;transition:padding-right linear .15s}@media(max-width:767px){.course-curriculum .course-item{padding:0 15px 0 0}}.course-curriculum .course-item>span{display:flex;width:28px;color:#666;font-size:16px;font-weight:300;align-items:center}.course-curriculum .course-item .section-item-link{display:table;padding-left:15px;padding-right:0;border-bottom:0;outline:0;box-shadow:none;line-height:1.5;color:#777;text-decoration:none}.course-curriculum .course-item .section-item-link:hover .item-name{color:var(--lp-primary-color)}.course-curriculum .course-item .section-item-link::before{display:table-cell;display:table-cell;right:0;width:20px;padding:15px 0;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:18px;font-weight:400;vertical-align:middle;transition:right linear .15s}.course-curriculum .course-item .item-icon,.course-curriculum .course-item .item-name{display:table-cell;padding:17px 16px;color:#333;font-size:16px;font-weight:600;vertical-align:middle}.course-curriculum .course-item .item-icon::before{font-size:18px}.course-curriculum .course-item .item-icon.icon-lock{float:left;margin-top:15px}.course-curriculum .course-item.course-item-lp_quiz .section-item-link::before{content:"\f059"}.course-curriculum .course-item.course-item-lp_lesson .section-item-link::before{content:"\f15b"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-video .section-item-link::before{content:"\f03d"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-audio .section-item-link::before{content:"\f028"}.course-curriculum .course-item.item-locked .course-item-status::before{color:var(--lp-secondary-color);content:"\f023"}.course-curriculum .course-item.has-status{padding-top:1px}.course-curriculum .course-item.has-status.status-completed .course-item-status::before,.course-curriculum .course-item.has-status.status-evaluated .course-item-status::before{color:#3bb54a}.course-curriculum .course-item.has-status.item-failed .course-item-status::before,.course-curriculum .course-item.has-status.failed .course-item-status::before{border-color:#f02425;color:#f02425;content:"\f00d"}.course-curriculum .course-item::before{position:absolute;top:50%;right:0;width:3px;height:0;background:#00adff;content:"";transition:height linear .15s,top linear .15s}.course-curriculum .course-item.current{padding-right:10px;background:#f9f9f9}.course-curriculum .course-item.current a::before{right:10px}.course-curriculum .course-item.current::before{top:0;height:100%}.course-curriculum .section-left{vertical-align:top}.course-curriculum .section-left .section-title{padding:0;color:#666;font-size:1.4rem;letter-spacing:0;text-transform:capitalize;display:block}.course-curriculum .curriculum-more__button{display:flex;width:100%;margin-top:20px;margin-bottom:20px;padding:10px 0;border:0;outline:0;color:#fff;background:#333;box-shadow:none;justify-content:center;align-items:center;cursor:pointer;font-size:1rem;font-family:sans-serif}.course-curriculum .curriculum-more__button.loading::before{display:inline-block;margin-left:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}body.course-item-popupx{overflow:hidden;_opacity:0}body.course-item-popupx #learn-press-course-curriculum{overflow:auto;position:fixed;z-index:9999;top:32px;bottom:0;right:0;width:400px;border-left:1px solid #ddd;background:#fff}body.course-item-popupx #learn-press-course-curriculum .section-header{padding:0 15px}body.course-item-popupx #learn-press-course-curriculum .section-header .section-desc{margin:-10px 0 5px}body.course-item-popupx #learn-press-course-curriculum .course-item{padding-left:15px;padding-right:15px}body.course-item-popupx #learn-press-course-curriculum .course-item a::before{right:15px}body.course-item-popupx #learn-press-content-item{overflow:hidden;position:fixed;z-index:9999;top:32px;left:0;bottom:0;right:400px;background:#fff}body.course-item-popupx #learn-press-content-item .content-item-wrap{max-width:900px;margin:10px auto}body.course-item-popupx #learn-press-content-item .course-item-title{font-size:1.4rem}body.course-item-popupx #learn-press-content-item .content-question-summary .review-heading{text-align:center}body.course-item-popupx #learn-press-content-item .content-question-summary .question-title{margin-bottom:10px;font-size:1.2rem}body.course-item-popupx #content-item-nav{position:fixed;z-index:99999;left:0;bottom:0;right:400px;height:60px;border-top:1px solid #ddd;background:#f5f5f5}body.course-item-popupx #content-item-nav .content-item-nav-wrap{max-width:900px;margin:10px auto}body.course-item-popupx #content-item-nav button{height:40px;padding:0 20px;line-height:40px}body.course-item-popupx .comment-form-textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body.course-item-popupx.wpadminbar #learn-press-course-curriculum,body.course-item-popupx.wpadminbar #learn-press-content-item{top:92px}body.course-item-popupx.wpadminbar .content-item-description{margin-bottom:20px}body.course-item-popupx .content-item-summary{margin-bottom:50px}body.course-item-popupx .content-item-summary>h3{margin-bottom:20px}body.course-item-popupx .content-item-summary.content-item-video .entry-video{position:absolute;top:0;right:0;width:100%;background:#000;line-height:1}body.course-item-popupx .content-item-summary.content-item-video .entry-video iframe{width:100%;max-width:900px;margin-bottom:0;vertical-align:top}body.course-item-popupx .learn-press-content-protected-message{margin-bottom:50px;padding:20px;background:#ffe0e0}body.course-item-popupx.content-only #learn-press-content-item{z-index:9999999;top:0;bottom:0;right:0}body.course-item-popupx.content-only #learn-press-content-item .content-item-scrollable{bottom:0}body #ifr-course-item{position:absolute;z-index:999999;top:0;right:0;width:100%;height:100%;background:#fff}body .content-item-summary .form-button-finish-course,body .lp-quiz-buttons .form-button-finish-course{float:left}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{top:2px;font-family:"Font Awesome 5 Free"}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before{content:"\f017"}#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before{content:"\f15c"}#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{content:"\f29c"}.scroll-wrapper{overflow:hidden;opacity:0}.scroll-wrapper .scroll-element{background:transparent}.scroll-wrapper .scroll-element.scroll-y.scroll-scrolly_visible{transition:opacity .25s}.scroll-wrapper:hover .scroll-element.scroll-y.scroll-scrolly_visible{opacity:.7}.course-remaining-time .label-enrolled{font-size:inherit}.learn-press-form.completed button::before{margin-left:10px;font-family:"Font Awesome 5 Free";font-size:18px;content:"\f00c"}.lp-course-progress{position:relative}.lp-course-progress .lp-passing-conditional{position:absolute;top:0;width:3px;height:6px;margin-right:-1px;background:var(--lp-secondary-color)}.viewing-course-item .section-header .section-desc{display:none}.viewing-course-item .content-item-wrap{margin-top:50px}.course-meta{display:flex;margin-bottom:40px}.course-meta .course-meta__pull-left,.course-meta .course-meta__pull-right{display:flex;flex-wrap:wrap}.course-meta .course-meta__pull-left{flex:1}.course-meta .course-meta__pull-left .meta-item{margin-left:10px}.course-meta .course-meta__pull-right{flex:0 0 50%}.course-meta .course-meta__pull-right .meta-item{margin-right:10px}.course-meta.course-meta-primary .meta-item{flex:1}.course-meta.two-columns .course-meta{flex:1}.course-extra-box{margin-bottom:3px;border:1px solid rgba(204,204,204,0.3);border-radius:5px}.course-extra-box__title{--extra-height:50px;display:flex;align-items:center;position:relative;height:var(--extra-height);margin:0 !important;padding:0 38px 0 45px;background:rgba(181,187,211,0.15);font-size:1.1rem;font-weight:600;cursor:pointer}@media(max-width:767px){.course-extra-box__title{padding-right:15px}}.course-extra-box__title::after{position:absolute;top:0;left:20px;color:#666;font-family:"Font Awesome 5 Free";line-height:var(--extra-height);content:"\f0d7"}.course-extra-box__content{display:none}.course-extra-box__content-inner{-webkit-animation-name:course-extra-box__content-inner-transform;animation-name:course-extra-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}.course-extra-box__content ul,.course-extra-box__content li{list-style:none}.course-extra-box__content ul{margin:0;padding:0}.course-extra-box__content li{margin:0;padding:10px 38px;border-bottom:1px solid rgba(204,204,204,0.3);color:#666;font-size:16px;font-weight:300}@media(max-width:767px){.course-extra-box__content li{padding-right:30px;padding-left:30px}}.course-extra-box__content li::before{margin-left:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900;content:"\f00c"}.course-extra-box__content li:last-child{border-bottom:0}.course-extra-box:last-child{margin-bottom:60px}.course-extra-box.active .course-extra-box__title::after{content:"\f0d8"}.course-extra-box+.comment-respond,.course-extra-box+.comments-area{margin-top:60px;margin-bottom:30px}.course-extra-box+.course-tabs{margin-top:60px}input[name=course-extra-box-ratio]{display:none}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content{display:block}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content .course-extra-box__content-inner{transform:scale(1)}@-webkit-keyframes course-extra-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(-5%);-moz-transform:translateX(-5%);-ms-transform:translateX(-5%);-o-transform:translateX(-5%);transform:translateX(-5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes course-extra-box__content-inner-transform{from{opacity:0;transform:translateX(-5%)}to{opacity:1;transform:translateX(0)}}.course-tab-panel-faqs{padding-top:64px}.course-tab-panel-faqs .course-faqs-box{margin-bottom:20px;border:1px solid rgba(204,204,204,0.6);border-radius:5px}.course-tab-panel-faqs .course-faqs-box__title{display:block;position:relative;margin:0;padding:25px 30px 25px 45px;font-size:1rem;font-weight:500;line-height:1.7;cursor:pointer}.course-tab-panel-faqs .course-faqs-box__title::after{position:absolute;top:50%;left:28px;color:#6c6c6c;font-family:"Font Awesome 5 Free";font-size:12px;font-weight:900;content:"\f078";transform:translateY(-50%)}.course-tab-panel-faqs .course-faqs-box:last-child{margin-bottom:40px}.course-tab-panel-faqs .course-faqs-box:hover{background:rgba(241,242,248,0.4)}.course-tab-panel-faqs .course-faqs-box:hover .course-faqs-box__title{color:var(--lp-primary-color)}.course-tab-panel-faqs .course-faqs-box__content{display:none}.course-tab-panel-faqs .course-faqs-box__content-inner{padding:0 28px 33px 28px;color:#666;font-size:16px;font-weight:300;line-height:26px;-webkit-animation-name:course-faqs-box__content-inner-transform;animation-name:course-faqs-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}input[name=course-faqs-box-ratio]{display:none}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__content{display:block}input[name=course-faqs-box-ratio]:checked+.course-faqs-box{background:rgba(241,242,248,0.4)}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title{color:var(--lp-primary-color)}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title::after{content:"\f077"}@-webkit-keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(-5%);-moz-transform:translateX(-5%);-ms-transform:translateX(-5%);-o-transform:translateX(-5%);transform:translateX(-5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(-5%);-moz-transform:translateX(-5%);-ms-transform:translateX(-5%);-o-transform:translateX(-5%);transform:translateX(-5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@media screen and (max-width:1300px){body.course-item-popup #learn-press-course-curriculum{width:300px}body.course-item-popup #learn-press-course-curriculum .progress-bg{width:40px}body.course-item-popup #content-item-nav{right:300px}body.course-item-popup .section-desc{display:none}}@media screen and (max-width:1200px){body.course-item-popupx #learn-press-course-curriculum{width:300px}body.course-item-popupx #content-item-nav{right:300px}body.course-item-popupx #learn-press-content-item .content-item-nav-wrap,body.course-item-popupx #learn-press-content-item .content-item-wrap{width:90%}}@media screen and (max-width:768px){body.course-item-popup .course-curriculum{width:200px}body.course-item-popup #content-item-nav{right:200px}body.course-item-popup #learn-press-content-item .content-item-nav-wrap,body.course-item-popup #learn-press-content-item .content-item-wrap{width:90%}body.course-item-popup.wpadminbar #learn-press-content-item,body.course-item-popup.wpadminbar #learn-press-course-curriculum{top:106px}.learn-press-course-results-progress{margin-left:0}.learn-press-course-results-progress .items-progress,.learn-press-course-results-progress .course-progress{float:none;width:100%;margin-left:0;margin-bottom:20px}}.lp-quiz-buttons{margin-bottom:20px;display:block;clear:both;content:""}.quiz-progress{margin-bottom:30px;background:#e7f7ff}.quiz-progress .progress-items{display:flex}.quiz-progress .progress-items .progress-item{position:relative;color:#777;font-size:15px;flex:1}.quiz-progress .progress-items .progress-item .progress-number,.quiz-progress .progress-items .progress-item .progress-label{display:block;line-height:1;text-align:center}.quiz-progress .progress-items .progress-item .progress-number{margin:15px 0 10px 0;font-size:20px}.quiz-progress .progress-items .progress-item .progress-label{margin-bottom:15px;font-size:14px}.quiz-progress .progress-items .progress-item i{display:none;float:right;width:60px;height:60px;color:#fff;background:#00adff;font-size:30px;line-height:60px;text-align:center}.quiz-progress .progress-items .progress-item::after{display:block;clear:both;content:""}.answer-options{margin:0;padding:0;list-style:none}.answer-options .answer-option{display:flex;overflow:hidden;position:relative;margin:0 0 18px 0;padding:10px;color:#777;background:#f5f5f5;font-size:20px;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-transition:background linear .25s;-moz-transition:background linear .25s;-ms-transition:background linear .25s;-o-transition:background linear .25s;transition:background linear .25s}.answer-options .answer-option .option-title{display:table-cell;font-size:smaller}.answer-options .answer-option .option-title .option-title-content{display:inline-block;vertical-align:middle}.answer-options .answer-option .option-title::before{position:absolute;top:0;bottom:0;right:0;width:3px;background:#ddd;content:"";-webkit-transition:background linear .25s;-moz-transition:background linear .25s;-ms-transition:background linear .25s;-o-transition:background linear .25s;transition:background linear .25s}.answer-options .answer-option input[type=checkbox],.answer-options .answer-option input[type=radio]{-webkit-appearance:initial;-moz-appearance:initial;position:relative;z-index:10;width:35px;min-width:35px;height:35px;margin:0 3px 0 10px;border:1px solid #cfcfcf;background:#f9fafc;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.answer-options .answer-option input[type=checkbox]:focus,.answer-options .answer-option input[type=radio]:focus{outline:0}.answer-options .answer-option input[type=checkbox]::after,.answer-options .answer-option input[type=radio]::after{margin-top:-10px;position:absolute;top:18px;right:9px;box-sizing:content-box;opacity:0;color:#3db748;font-family:"Font Awesome 5 Free";font-weight:900;font-size:16px;content:"\f00c"}.answer-options .answer-option input[type=checkbox]:checked ~ .option-title .option-title-content,.answer-options .answer-option input[type=radio]:checked ~ .option-title .option-title-content{position:relative}.answer-options .answer-option input[type=checkbox]:checked ~ .option-title::before,.answer-options .answer-option input[type=radio]:checked ~ .option-title::before{background:#00adff}.answer-options .answer-option input[type=checkbox]:checked::after,.answer-options .answer-option input[type=radio]:checked::after{opacity:1}.answer-options .answer-option input[type=checkbox]::after{margin-top:0;top:50%;right:50%;-webkit-transform:translate(50%,-50%);-moz-transform:translate(50%,-50%);-ms-transform:translate(50%,-50%);-o-transform:translate(50%,-50%);transform:translate(50%,-50%)}.answer-options .answer-option input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.answer-options .answer-option input[type=radio]::before{border-radius:50%}.answer-options .answer-option .option-title{margin:0}.answer-options .answer-option:hover{background:#e1f5ff}.answer-options .answer-option.answer-correct{background:#e1f5ff}.answer-options .answer-option.answer-correct input[type=radio]:checked ~ .option-title::before,.answer-options .answer-option.answer-correct input[type=checkbox]:checked ~ .option-title::before{background:#e1f5ff}.answer-options .answer-option.answered-correct input[type=radio]:checked ~ .option-title::before,.answer-options .answer-option.answered-correct input[type=checkbox]:checked ~ .option-title::before{background:#00adff}.answer-options .answer-option.answered-wrong input[type=radio]::before,.answer-options .answer-option.answered-wrong input[type=radio]::after,.answer-options .answer-option.answered-wrong input[type=checkbox]::before,.answer-options .answer-option.answered-wrong input[type=checkbox]::after{border-color:red}.answer-options .answer-option.answered-wrong input[type=radio]:checked ~ .option-title::before,.answer-options .answer-option.answered-wrong input[type=checkbox]:checked ~ .option-title::before{background:red}button[data-counter]{position:relative}button[data-counter]::after{padding-right:5px;content:"(+" attr(data-counter) ")"}.quiz-result{max-width:320px;margin:20px auto 48px;text-align:center}.quiz-result .result-heading{display:none}.quiz-result.passed .result-message{background:#3bb54a}.quiz-result.passed .result-message::after{content:"\f00c"}.quiz-result .result-message{margin-bottom:30px;padding:10px 0 !important;color:#fff;background:#f02425;font-size:16px;line-height:22px;font-weight:400;display:flex;align-items:center;justify-content:center;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.quiz-result .result-message::after{margin-right:10px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f00d"}.quiz-result .result-grade .result-achieved,.quiz-result .result-grade .result-require{display:inline-block;margin:0 auto}.quiz-result .result-grade .result-achieved{padding-bottom:7px;border-bottom:1px solid #999;color:#333;font-size:28px;font-weight:500;line-height:1}.quiz-result .result-grade .result-require{display:block;padding-top:5px;color:#666;font-size:16px;font-weight:400;line-height:1}.quiz-result .result-grade .result-message{font-size:14px}.quiz-result.passed .result-achieved{color:#04adff}.quiz-result.passed .result-message strong{color:#04adff}.quiz-result .result-statistic{margin:0;padding:0;text-align:right;list-style:none}.quiz-result .result-statistic .result-statistic-field{display:flex;margin:0}.quiz-result .result-statistic .result-statistic-field+li{border-top:1px dashed #ccc}.quiz-result .result-statistic .result-statistic-field span,.quiz-result .result-statistic .result-statistic-field p{margin:0;flex:1}.quiz-result .result-statistic .result-statistic-field span{color:#666;font-size:16px;font-weight:400;line-height:35px}.quiz-result .result-statistic .result-statistic-field span::before{display:inline-block;width:15px;margin-left:10px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900}.quiz-result .result-statistic .result-statistic-field p{color:#333;font-size:16px;font-weight:500;line-height:35px;text-align:left}.quiz-result .result-statistic .result-statistic-field.result-time-spend label::before{font-weight:400;content:"\f017"}.quiz-result .result-statistic .result-statistic-field.result-point label::before{font-weight:400;content:"\f005"}.quiz-result .result-statistic .result-statistic-field.result-questions label::before{font-weight:400;content:"\f059"}.quiz-result .result-statistic .result-statistic-field.result-questions-correct label::before{color:#3db748;content:"\f00c"}.quiz-result .result-statistic .result-statistic-field.result-questions-wrong label::before{color:#f02425;content:"\f00d"}.quiz-result .result-statistic .result-statistic-field.result-questions-skipped label::before{color:#ddd;content:"\f2f5"}.quiz-status{position:sticky;z-index:99;top:0;left:0;right:0;margin:0 0 35px 0}.quiz-status>div{display:flex;box-sizing:border-box;width:100%;max-width:792px;height:60px;margin:0 auto;padding:5px 30px 5px 10px;border-radius:4px;background:var(--lp-primary-color);justify-content:center;align-items:center}@media(max-width:480px){.quiz-status>div{display:block;height:auto;text-align:center;padding:15px}.quiz-status>div .questions-index{margin-bottom:10px}}.quiz-status>div>div{display:flex;flex-direction:row-reverse;flex:0 0 50%;align-items:center}@media(max-width:480px){.quiz-status>div>div{justify-content:center}}.quiz-status>div .current-point{display:none}.quiz-status .questions-index{display:inline-block;color:#666;font-size:16px;font-weight:400;line-height:26px}.quiz-status .questions-index span{color:#333;font-weight:500}.quiz-status .countdown{position:relative;min-width:120px;margin-left:5px;padding:12px 29px;color:#333;background:#fff;font-size:14px;font-weight:400;line-height:1;text-align:center}.quiz-status .countdown .fas{position:absolute;top:50%;right:10px;color:#333;font-size:14px;transform:translateY(-50%)}.quiz-status .countdown .clock{display:none;width:40px;height:40px}.quiz-status .countdown .clock::before{position:absolute;width:40px;height:40px;border:4px solid #b1c1e6;border-radius:50%;content:"";-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.quiz-status .countdown .clock .circle-progress-bar{display:inline-block;position:relative;width:40px;height:40px;stroke:#5383f7}.quiz-status .countdown .clock .circle-progress-bar .circle-progress-bar__circle{transition:.35s stroke-dashoffset;transform:rotate(90deg);transform-origin:50% 50%}.quiz-status .countdown .clock.x .circle-progress-bar__circle{stroke:red}.quiz-status .submit-quiz button{margin:0 10px 0 0;border:0;border-radius:0;background:#fff;text-transform:uppercase}.quiz-status .submit-quiz button:hover{background:var(--lp-secondary-color)}.quiz-status.submitting .submit-quiz button{background:#ddd}.question-numbers{text-align:center;list-style:none}.question-numbers li{display:inline-block;position:relative;margin-bottom:3px}.question-numbers li a{display:block;min-width:20px;padding:8px;border:1px solid #ddd;color:#999;background:#f5f5f5;box-shadow:none;font-size:12px;line-height:1}.question-numbers li a span{vertical-align:middle}.question-numbers li a:hover{border:1px solid #3880a2;color:#fff;background:#00adff}.question-numbers li.current a{border-color:#3880a2;color:#fff !important;background:#00adff}.question-numbers li.current.skipped::after{background:#fff}.question-numbers li.answered a::after{margin-right:3px;font-family:"Font Awesome 5 Free";font-size:8px;vertical-align:middle}.question-numbers li.answered.answered-wrong a{color:red}.question-numbers li.answered.answered-true a{color:#00adff}.question-numbers li.answered.answered-true.current a{color:#fff}.question-numbers li.skipped::after{position:absolute;bottom:3px;right:50%;width:10px;height:4px;margin-right:-5px;border-radius:2px;background:#aaa;content:""}.quiz-intro{display:flex;margin:0 0 20px;padding:0;list-style:none;flex-flow:row wrap}@media(max-width:768px){.quiz-intro{padding-left:10px;padding-right:10px;justify-content:space-between}}.quiz-intro-item{display:flex;margin:0 0 0 40px;align-items:center}@media(max-width:768px){.quiz-intro-item{margin:0 0 0 20px}}.quiz-intro-item::before{position:relative;top:-2px;margin-left:10px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900}.quiz-intro-item--passing-grade{order:2}.quiz-intro-item--passing-grade::before{content:"\f012"}.quiz-intro-item--questions-count{order:1}.quiz-intro-item--questions-count::before{content:"\f12e"}.quiz-intro-item--duration{order:2}.quiz-intro-item--duration::before{content:"\f017"}.quiz-intro-item__title{margin:0;padding:0 0 0 8px;color:#333;font-size:16px;font-weight:300;line-height:1.7}.quiz-intro-item__content{color:#222;font-size:16px;font-weight:400}.question-explanation-content,.question-hint-content{margin-bottom:20px;padding:10px 15px;background:#f5f5f5}.redo-quiz button[type=submit]{content:attr(data-counter)}.circle-bar{position:relative;width:300px;height:300px;border-color:#ddd}.circle-bar::before{position:absolute;z-index:0;top:0;right:0;box-sizing:border-box;width:100%;height:100%;border:10px solid #ddd;border-radius:50%;content:""}.circle-bar .before,.circle-bar .after{position:absolute;z-index:0;top:0;right:0;box-sizing:border-box;width:100%;height:100%;border:10px solid #14c4ff;border-radius:50%;transform:rotate(-45deg)}.circle-bar .before{border-bottom-color:transparent;border-right-color:transparent;transform:rotate(-45deg)}.circle-bar .after{border-color:#14c4ff;border-top-color:transparent;border-left-color:transparent;transform:rotate(-45deg)}.circle-bar.bg50 .after{z-index:10;border-bottom-color:inherit;border-right-color:inherit;transform:rotate(-45deg)}.lp-quiz-buttons .complete-quiz,.lp-quiz-buttons .back-quiz,.lp-quiz-buttons .review-quiz{float:left}.quiz-result .result-grade{display:flex;flex-direction:column;position:relative;box-sizing:border-box;height:200px;margin-bottom:30px;padding:50px;justify-content:center;align-items:center;-webkit-transform:none !important;-moz-transform:none !important;-ms-transform:none !important;-o-transform:none !important;transform:none !important}.quiz-result .result-grade::before,.quiz-result .result-grade svg{position:absolute;top:0;right:50%;width:200px;height:200px;margin-right:-100px;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.quiz-result .result-grade::before{box-sizing:border-box;padding:30px;border:10px solid #ccc;content:""}.quiz-result .result-grade svg{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.quiz-result .result-grade svg circle{stroke:var(--lp-primary-color)}.quiz-result.passed .result-grade svg{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.quiz-result.passed .result-grade .result-achieved{color:#333}.quiz-result.passed .result-grade .result-message strong{color:#4caf50}.quiz-questions .question{margin-bottom:60px}.question .answer-option{padding:0;_border:2px solid #d9e0f1;background:#fff}.question .answer-option input[type=radio],.question .answer-option input[type=checkbox]{position:absolute;top:50%;margin:-19px 10px 0 0;border-color:#d9e0f1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question .answer-option input[type=radio]::after,.question .answer-option input[type=checkbox]::after{border-color:#d9e0f1}.question .answer-option input[type=radio]:disabled,.question .answer-option input[type=checkbox]:disabled{border-color:#ddd;background:#f9f9f9}.question .answer-option input[type=radio]:disabled::after,.question .answer-option input[type=checkbox]:disabled::after{border-color:#ddd}.question .answer-option input[type=radio]:checked:not(:disabled)::after,.question .answer-option input[type=checkbox]:checked:not(:disabled)::after{border-color:#99aee4}.question .answer-option input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.question .answer-option input[type=radio]::before{border-radius:50%}.question .answer-option .option-title{display:flex;width:100%;margin:0;padding:14px 65px 11px 10px;border:1px solid #ccc;color:#666;background:#fff;font-size:16px;font-weight:300;line-height:26px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question .answer-option .option-title::after{display:inline-block;visibility:hidden !important;content:"."}.question .answer-option .option-title:hover{background:#f9f9f9}.question .answer-option .option-title::before{display:none}.question .answer-option.answer-correct .option-title{border-color:#4caf50}.question .answer-option.answered-wrong .option-title{border-color:#ff6423}.question .question-title{display:block;margin-top:0;margin-bottom:18px;color:#333;font-size:18px;font-weight:500}.question .question-title .edit-link{float:left;font-size:14px;font-weight:normal}.question .question-content{margin-bottom:30px;color:#666;font-size:16px;font-weight:300;line-height:26px}.question .question-content img{width:100%;max-width:100%}.question .question-response{margin-bottom:10px;font-size:14px}.question .question-response .label{display:inline-block;margin:0 0 0 5px;padding:8px 10px;border-radius:4px;color:#fff;line-height:1}.question .question-response .point{display:inline-block}.question .question-response.correct .label{background:#4caf50}.question .question-response.incorrect .label{background:#ff6423}.question .question-index{display:inline-block;margin:0 0 0 5px}.question .btn-show-hint{position:relative;margin:0 10px 0 0;padding:0;outline:0;color:#00adff;background:transparent;font-size:0;text-decoration:none}.question .btn-show-hint::before{font-family:"Font Awesome 5 Free";font-size:18px;content:"\f059"}.question .btn-show-hint:hover span{position:absolute;bottom:100%;right:0;width:auto;padding:6px 9px;border-radius:2px;color:#333;background:#eee;font-size:14px;font-weight:400;line-height:1;white-space:nowrap;text-transform:none}.question.question-fill_in_blanks .blanks .blank-input-wrap{display:inline-block}.question.question-fill_in_blanks .blanks .blank-block{margin-bottom:20px}.question.question-fill_in_blanks .blanks .blank-input{display:inline-block;width:auto;min-width:50px;margin:0 10px;padding:0 10px;border:0;border-bottom:1px dashed #ddd;text-align:center;white-space:nowrap}.question.question-fill_in_blanks .blanks .blank-input br{display:none}.question.question-fill_in_blanks .blanks .blank-input>*{display:inline;white-space:nowrap}.question.question-fill_in_blanks .blanks .blank-select{display:inline-block;height:30px;margin-right:4px;padding:1px}.question.question-fill_in_blanks .blanks .blank-fills{display:inline-block}.question.question-fill_in_blanks .blanks .blank-fills code{margin:0 5px;padding:0 6px;background:#ddd;line-height:1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question.question-fill_in_blanks .blanks.ordered{list-style-position:inside}.question.question-fill_in_blanks .blanks.one-paragraph{line-height:3}.lp-sort-bg label.option-title{background:rgba(255,182,6,0.68) !important}.learn-press-message.fixed{position:fixed;top:32px;right:0;left:0;background:rgba(0,173,255,0.6);text-align:center;z-index:100;color:#FFF;padding:10px}.learn-press-message.fixed[data-delay-in]{display:none}.lp-archive-courses ul{list-style-type:revert;padding:0 1em 23px 0}.lp-archive-courses ul.learn-press-breadcrumb,.lp-archive-courses ul.course-nav-tabs{list-style:none;padding:0}@media(max-width:768px){.lp-archive-courses ul.learn-press-breadcrumb,.lp-archive-courses ul.course-nav-tabs{padding-right:15px;padding-left:15px}}.lp-archive-courses ul,.lp-archive-courses ol{list-style-type:decimal;list-style-position:inside;padding:0 0 23px}.lp-archive-courses ol ul{padding:2px 35px 2px 0}.lp-archive-courses ol ol{padding:2px 20px 2px 0}.lp-archive-courses thead th,.lp-archive-courses tr th{padding:9px 24px}.lp-archive-courses tr td{border-top:1px solid #eee;padding:6px 24px}.learnpress #left-area ul,.learnpress .entry-content ul,.learnpress .et-l--body ul,.learnpress .et-l--footer ul,.learnpress .et-l--header ul{padding:0 !important;list-style:none !important}.learnpress.dt-the7 .learn-press-filters{margin-bottom:20px}.learnpress.dt-the7 .learn-press-courses[data-size="3"] .course{width:50%}.bridge.learnpress .lp-archive-courses{margin-top:100px}.bridge.learnpress .lp-archive-courses ul.learn-press-breadcrumb{padding-top:45px}.bridge.learnpress .content{z-index:110}.bridge.learnpress .comment-respond .comment-form{margin:0}.bridge.learnpress .comment-respond .comment-form>p,.bridge.learnpress .comment-respond .comment-form>div{padding:0}.bridge.learnpress.learnpress-profile .content{z-index:100}.bridge.learnpress #learn-press-item-comments{background:#f6f6f6}.learnpress.ast-separate-container .ast-article-single{padding-right:15px;padding-left:15px}body.learnpress-page.twentysixteen #primary .lp-entry-content{float:none;width:auto;margin:0 15%}body.learnpress-page.twentyfifteen .course-summary-sidebar .widget{width:100%;padding:0}body.learnpress-page.twentysixteen .entry-footer{display:none}body.learnpress-page.twentysixteen .lp-entry-content{float:none;width:auto}body.learnpress-page.twentyseventeen #primary article.type-page{width:100%}@media screen and (min-width:61.5625em){body.twentysixteen.learnpress-page .entry-footer{display:none}body.twentysixteen.learnpress-page .lp-entry-content{float:none;width:auto}body:not(.search-results) article:not(.type-page) .entry-footer{display:none}body:not(.search-results) article:not(.type-page) .lp-entry-content{float:none;width:auto}}body.twentyseventeen.learnpress-page #primary article.page .entry-header,body.twentyseventeen.learnpress-page #primary article.page .lp-entry-content{width:100%;float:none}@media screen and (min-width:48em){body.twentyseventeen.learnpress-page #primary article.page .entry-header,body.twentyseventeen.learnpress-page #primary article.page .lp-entry-content{width:100%;float:none}}.learn-press-tip{display:none;margin:0 5px;color:#444;font-size:13px;font-style:normal;line-height:1;vertical-align:baseline;cursor:pointer}.learn-press-tip.ready{display:inline-block}.learn-press-tip::before{font-family:"Font Awesome 5 Free";content:"\f059"}.learn-press-tip:hover{opacity:.8}.learn-press-tip-floating{position:absolute;z-index:9999999;min-width:20px;margin-right:-1px;padding:.618em 1em;color:#fff;background:#383838;font-size:12px;line-height:1.2em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.learn-press-tip-floating>*{font-size:12px}.learn-press-tip-floating .close{display:inline-block;position:absolute;top:-8px;left:-8px;width:16px;height:16px;border:1px solid #fff;color:#fff;background:#468fbc;line-height:16px;text-align:center;cursor:pointer;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.learn-press-tip-floating .close::before{font-family:"Font Awesome 5 Free";content:"\f00d"}.learn-press-tip-floating p{margin:0}.learn-press-tip-floating::before{position:absolute;bottom:-6px;right:50%;width:0;height:0;margin-right:-6px;border:6px solid transparent;border-top-color:#383838;border-bottom-width:0;content:""}body.lp-preview.admin-bar #learn-press-content-item{top:32px !important}body.lp-preview #learn-press-course-curriculum{display:none}body.lp-preview #learn-press-content-item{top:0 !important;right:0 !important}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}@keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}#popup_container{opacity:0;transform:scale(0.5)}body.confirm #popup_overlay{z-index:999998 !important}body.confirm #popup_container{z-index:999999 !important;max-width:90% !important;min-width:300px !important;padding:10px !important;background:#f5f5f5;transition:opacity .25s;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body.confirm #popup_container #popup_title{display:none !important}body.confirm #popup_container #popup_message{margin:-10px;background:#FFF;padding:20px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body.confirm #popup_container .close{position:absolute;top:3px;left:10px}body.confirm #popup_container #popup_panel{margin-top:20px;text-align:center}body.confirm #popup_container #popup_panel button,body.confirm #popup_container #popup_panel input[type=button],body.confirm #popup_container #popup_panel input[type=submit]{height:30px;line-height:30px;padding:0 25px}body.confirm #popup_container #popup_cancel{display:none}body.confirm #popup_container.ready{opacity:1;transform:scale(1)}a{text-decoration:none}.lp-content-area{width:100%;max-width:1170px;margin:0 auto}@media(max-width:1024px){.lp-content-area{padding-left:15px;padding-right:15px}}.lp-content-area::after,.lp-content-area::before{display:table;clear:both;content:""}.lp-archive-courses{width:100%;scroll-margin:30px}.lp-archive-courses.loading ul.learn-press-courses{position:relative}.lp-archive-courses.loading ul.learn-press-courses::before,.lp-archive-courses.loading ul.learn-press-courses::after{content:"";position:absolute;top:0;bottom:0;right:15px;left:15px}.lp-archive-courses.loading ul.learn-press-courses::after{z-index:3;background:#f3f3f3;background:linear-gradient(-90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}.lp-archive-courses.loading ul.learn-press-courses::before{z-index:2;opacity:.8%;background:#fff}.lp-archive-courses form[name=search-course]{position:relative;margin-bottom:20px}.lp-archive-courses form[name=search-course] .search-course-input{width:100%;padding:12px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lp-archive-courses form[name=search-course] .search-course-button{position:absolute;top:1px;left:1px;bottom:1px;height:auto;padding:15px;line-height:1px}.lp-archive-courses .learn-press-courses-header{float:right;padding-top:4px}.lp-archive-courses .learn-press-courses-header h1{margin:0;font-size:30px;font-weight:600}@media(max-width:767px){.lp-archive-courses .learn-press-courses-header{margin-bottom:20px}}.lp-archive-courses .course-item{flex-direction:column;display:flex;transition:all .3s}.lp-archive-courses .course-item:hover .course-thumbnail .thumbnail::before{opacity:1}.lp-archive-courses .course-item:hover .course-thumbnail a img{transform:scale(1.05)}.lp-archive-courses .course-item:hover .course-wishlist{opacity:1}.lp-archive-courses .course-item .course-wishlist.filled{opacity:1}.lp-archive-courses .course-item .course-instructor{float:right;margin-bottom:16px;font-size:14px;font-weight:300;line-height:25px;text-transform:capitalize}.lp-archive-courses .course-item .course-instructor a{color:#059de9}.lp-archive-courses .course-item .course-instructor a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-content{position:relative;border-top:0}.lp-archive-courses .course-content .course-permalink{display:-webkit-box;clear:both;overflow:hidden;position:relative;border:0;color:#fff;text-decoration:none;text-transform:none;-webkit-line-clamp:2;-webkit-box-orient:vertical;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-archive-courses .course-content .course-permalink:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-archive-courses .course-content .course-review{display:none}.lp-archive-courses .course-content .course-categories,.lp-archive-courses .course-content .course-tags{display:block;font-size:14px;font-weight:300}.lp-archive-courses .course-content .course-categories{float:right;position:relative;margin-left:10px;margin-bottom:16px}.lp-archive-courses .course-content .course-categories a{display:inline-block;display:none;margin:0 10px;color:#fff;text-decoration:none}.lp-archive-courses .course-content .course-categories a:first-child{display:block;margin-right:0;padding:2px 16px;background:var(--lp-primary-color)}.lp-archive-courses .course-content .course-categories a:hover{color:#333}.lp-archive-courses .course-content .course-categories::after{position:absolute;top:50%;left:-2px;width:1px;height:12px;opacity:.5;background:#999;content:"";transform:translate(0,-50%)}.lp-archive-courses .course-content .course-info{color:#666;font-size:14px;font-weight:300}.lp-archive-courses .course-content .course-info>span{display:block}.lp-archive-courses .course-content .course-info .course-price{float:left}.lp-archive-courses .course-content .course-info .course-price .origin-price,.lp-archive-courses .course-content .course-info .course-price .price{color:#333;font-size:16px;font-weight:600}.lp-archive-courses .course-content .course-info .course-price .origin-price{margin-left:10px;color:#666;font-size:14px;font-weight:300;text-decoration:line-through}.lp-archive-courses .course-content .course-info .course-instructor{float:left}.lp-archive-courses .course-content .course-info::after{display:block;clear:both;content:""}.lp-archive-courses .course-content .course-excerpt{display:-webkit-box;overflow:hidden;margin-bottom:28px;color:#666;font-size:16px;font-weight:300;line-height:26px;-webkit-line-clamp:2;-webkit-box-orient:vertical}.lp-archive-courses .course-content .separator{display:none}.lp-archive-courses .course-wrap-thumbnail{overflow:hidden;position:relative}.lp-archive-courses .course-wrap-thumbnail .lp-badge.featured{position:absolute;z-index:100;top:28px;right:-110px;width:300px;text-align:center;transform:rotate(45deg)}.lp-archive-courses .course-wrap-thumbnail .course-wishlist{position:absolute;z-index:2;top:6px;left:6px;opacity:0;color:#fff;cursor:pointer}.lp-archive-courses .course-wrap-thumbnail .course-wishlist::before{font-family:"Font Awesome 5 Free";font-weight:900;content:"\f004"}.lp-archive-courses .course-wrap-thumbnail .course-wishlist .course-wishlist__btn{display:none}.lp-archive-courses .course-wrap-thumbnail .course-wishlist:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-wrap-thumbnail:hover::before{opacity:1}.lp-archive-courses .course-wrap-thumbnail:hover .course-thumbnail a img{transform:scale(1.05)}.lp-archive-courses .course-wrap-thumbnail:hover .course-wishlist{opacity:1}.lp-archive-courses .course-thumbnail a{display:block;overflow:hidden}.lp-archive-courses .course-thumbnail .thumbnail{margin:0;padding:0;border:0;border-radius:unset;line-height:unset}.lp-archive-courses .course-thumbnail .thumbnail::before{position:absolute;z-index:1;top:0;left:0;bottom:0;right:0;opacity:0;background:rgba(0,0,0,0.5);content:"";transition:all .3s}.lp-archive-courses .course-thumbnail img{display:block;width:100%;height:auto;transition:all .5s ease;transform:scale(1)}.lp-archive-courses .course-title{margin:0;padding:0;color:#333;font-size:16px;font-weight:600;line-height:24px}.lp-archive-courses .course-title:hover{color:var(--lp-primary-color)}@media(min-width:769px){.lp-archive-courses .course-summary-content .course-info-left{width:calc(100% - 330px)}}.lp-archive-courses .course-summary-content .course-title{margin-bottom:42px;color:#fff;font-size:1.5rem;font-weight:500;line-height:1}.lp-archive-courses .course-summary-content .course-meta.course-meta-secondary{margin-bottom:0}@media(max-width:768px){.lp-archive-courses .course-summary-content{width:100%}}.lp-archive-courses .course-detail-info{padding:40px 0 10px 0;color:#fff;background:var(--lp-secondary-color);position:relative}.lp-archive-courses .course-detail-info::before,.lp-archive-courses .course-detail-info::after{content:"";width:50%;height:100%;background:var(--lp-secondary-color);position:absolute;top:0}.lp-archive-courses .course-detail-info::before{left:100%;right:auto}.lp-archive-courses .course-detail-info::after{right:100%;left:auto}.lp-archive-courses .course-meta__pull-left .meta-item{display:flex;height:46px;margin-left:50px;font-size:16px;font-weight:300;text-transform:capitalize}.lp-archive-courses .course-meta__pull-left .meta-item span{padding-left:4px;padding-right:0}.lp-archive-courses .course-meta__pull-left .meta-item:last-child{margin-left:0}.lp-archive-courses .course-meta__pull-left .meta-item::before{margin-left:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900}.lp-archive-courses .course-meta__pull-left .meta-item .meta-item__image{margin-left:10px;flex:0 0 46px}.lp-archive-courses .course-meta__pull-left .meta-item .meta-item__image img{overflow:hidden;position:relative;width:46px;height:46px;border-radius:50%}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-duration::before{content:"\f017"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-level::before{content:"\f012"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-lesson::before{content:"\f0c5"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-quiz::before{content:"\f12e"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-student::before{content:"\f501"}@media(max-width:1024px){.lp-archive-courses .course-meta__pull-left .meta-item{margin-left:30px}}@media(max-width:767px){.lp-archive-courses .course-meta__pull-left .meta-item{margin-left:0}}.lp-archive-courses .course-meta__pull-left .meta-item__value label{margin:0;color:#999;font-size:14px;font-weight:300;line-height:1.5}.lp-archive-courses .course-meta__pull-left .meta-item__value>div{line-height:1.5}.lp-archive-courses .course-meta__pull-left .meta-item__value>div a{color:#fff;font-size:16px;font-weight:400;text-transform:capitalize}.lp-archive-courses .course-meta__pull-left .meta-item__value>div a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-meta__pull-left .meta-item-categories{align-items:center}.lp-archive-courses .course-meta__pull-left .meta-item-categories::before{margin-left:10px;font-size:36px;content:"\f02e"}.lp-archive-courses .course-meta__pull-left .meta-item-categories .meta-item__value div span{padding:0 5px}.lp-archive-courses .course-meta__pull-left .meta-item-categories .meta-item__value div a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-meta__pull-left .meta-item-review .meta-item__value{display:flex;flex-direction:column-reverse;justify-content:flex-end;align-items:flex-end}.lp-archive-courses .course-meta__pull-left .meta-item-review .meta-item__value .review-stars-rated{margin-bottom:0;line-height:1}@media(max-width:767px){.lp-archive-courses .course-meta__pull-left{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:20px}}.lp-archive-courses .course-meta-primary{margin-bottom:36px}.lp-archive-courses .course-meta-primary .meta-item-categories::before{font-weight:400}.lp-archive-courses .lp-entry-content{display:flex;flex-direction:row}.lp-archive-courses .lp-entry-content .entry-content-left{width:calc(100% - 300px);max-width:100%;margin:0;padding-left:40px;padding-top:60px}@media(max-width:768px){.lp-archive-courses .lp-entry-content .entry-content-left{width:100%;padding-left:0;margin-bottom:50px}}@media(max-width:768px){.lp-archive-courses .lp-entry-content{flex-direction:column}}.lp-archive-courses .course-summary-sidebar{width:300px;max-width:100%;margin-top:-272px}@media(max-width:768px){.lp-archive-courses .course-summary-sidebar{width:100%;margin-top:0}.lp-archive-courses .course-summary-sidebar .course-summary-sidebar__inner{width:100%}}@media(max-width:767px){.lp-archive-courses .course-summary-sidebar{width:100%;padding-right:0}}.lp-archive-courses .course-summary-sidebar__inner{width:300px}.lp-archive-courses .course-summary-sidebar__inner .course-sidebar-top{box-shadow:0 15px 20px 0 rgba(0,0,0,0.05)}.lp-archive-courses .course-summary-sidebar__inner .course-sidebar-secondary{margin-top:30px;padding:0}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist{color:#fff;background:transparent !important;font-size:0}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist.on,.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist::before{font-family:"Font Awesome 5 Free";font-size:26px;font-weight:900;content:"\f004"}.lp-archive-courses .course-summary-sidebar__inner>div{overflow:hidden;padding:20px;background:#fff}.lp-archive-courses .course-summary-sidebar__inner>div ul{list-style:none}.lp-archive-courses .course-summary-sidebar__inner>div ul li a{color:#666;font-size:16px;font-weight:300;line-height:24px}.lp-archive-courses .course-summary-sidebar__inner>div ul li a:hover{color:var(--lp-primary-color);box-shadow:unset}.learn-press-courses{clear:both;margin:0 -15px;padding:0 !important;min-height:300px;list-style:none;position:relative;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-moz-flex;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}.learn-press-courses .course{width:25%;margin:0 0 60px 0;box-shadow:none;list-style:none}.learn-press-courses[data-layout=list]{margin:0}.learn-press-courses[data-layout=list] .course{display:flex;width:100%;padding:24px;border:1px solid rgba(204,204,204,0.3);border-radius:4px;flex-wrap:wrap;justify-content:flex-end}@media(max-width:767px){.learn-press-courses[data-layout=list] .course{padding:15px}}.learn-press-courses[data-layout=list] .course-item{flex-direction:row;width:100%;border:unset;justify-content:space-between}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-item{flex-direction:column}}.learn-press-courses[data-layout=list] .course-content{float:left;width:calc(64.2% - 76px);padding-top:5px}@media(max-width:1200px){.learn-press-courses[data-layout=list] .course-content{width:calc(64.2% - 40px)}}@media(max-width:1200px){.learn-press-courses[data-layout=list] .course-content{width:calc(64.2% - 25px)}}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content{width:100%;padding-top:20px}}.learn-press-courses[data-layout=list] .course-content .course-categories a{position:relative;padding:2px 15px 2px 20px;-webkit-clip-path:polygon(0 0,100% 0,88% 50%,100% 100%,0 100%);clip-path:polygon(0 0,100% 0,88% 50%,100% 100%,0 100%)}.learn-press-courses[data-layout=list] .course-content .course-permalink{height:25px;margin-bottom:5px;-webkit-line-clamp:1}.learn-press-courses[data-layout=list] .course-content .course-tags a{margin:0 0 10px 10px;padding:3px 5px;border-radius:3px;color:#fff;background:#e4a2a2;line-height:1}.learn-press-courses[data-layout=list] .course-content .course-footer{float:right;margin-left:20px}.learn-press-courses[data-layout=list] .course-content .course-footer .course-students{display:none}.learn-press-courses[data-layout=list] .course-content .course-footer .course-price{float:unset}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content .course-footer{margin-bottom:30px}}.learn-press-courses[data-layout=list] .course-content .course-readmore{float:left;position:relative;left:4px}.learn-press-courses[data-layout=list] .course-content .course-readmore a{padding:9px 24px;border-radius:3px;color:#fff;background:var(--lp-primary-color);font-weight:400;line-height:1;transition:all .3s;display:block}.learn-press-courses[data-layout=list] .course-content .course-readmore a:hover{opacity:.5;background:var(--lp-primary-color)}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content .course-readmore{display:flex;float:unset;clear:both}}.learn-press-courses[data-layout=list] .course-wrap-meta{display:flex;padding-top:12px;padding-bottom:18px;color:#333;font-size:14px;font-weight:400}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item{padding-left:28px;text-transform:capitalize}@media(max-width:1024px){.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item{padding-left:20px}}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item::before{position:relative;top:-1px;margin-left:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-level::before{content:"\f012"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-duration::before{content:"\f017"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-lesson::before{content:"\f0c5"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-quiz::before{content:"\f12e"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-student::before{content:"\f501"}@media(max-width:815px){.learn-press-courses[data-layout=list] .course-wrap-meta{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:15px}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item{padding-left:15px}}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-wrap-meta{grid-template-columns:repeat(3,1fr)}}.learn-press-courses[data-layout=list] .course-wrap-thumbnail{float:right;width:35.8%}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-wrap-thumbnail{width:100%}}.learn-press-courses[data-layout=list] .course-title{font-size:18px}.learn-press-courses[data-layout=grid] .course{padding:0 15px}@media(max-width:992px){.learn-press-courses[data-layout=grid] .course{width:50%}}@media(max-width:767px){.learn-press-courses[data-layout=grid] .course{width:100%}}.learn-press-courses[data-layout=grid] .course-item:hover{box-shadow:0 15px 20px 0 rgba(0,0,0,0.2)}.learn-press-courses[data-layout=grid] .course-item .course-instructor{margin-bottom:7px}.learn-press-courses[data-layout=grid] .course-content{padding:15px 20px 12px 20px;border:1px solid #f0f0f0;border-top:0;flex-grow:1}.learn-press-courses[data-layout=grid] .course-content .course-categories{float:left;position:absolute;z-index:1;top:-34px;left:-1px;margin-left:0}.learn-press-courses[data-layout=grid] .course-content .course-categories::after{display:none}.learn-press-courses[data-layout=grid] .course-content .course-categories a{position:relative;margin:0;padding:2px 22px 2px 12px;-webkit-clip-path:polygon(0 0,100% 0,100% 100%,0 100%,12px 50%);clip-path:polygon(0 0,100% 0,100% 100%,0 100%,12px 50%)}.learn-press-courses[data-layout=grid] .course-content .course-permalink{height:48px;margin-bottom:20px}.learn-press-courses[data-layout=grid] .course-content .course-info{display:flex;flex-direction:column;flex-grow:1}.learn-press-courses[data-layout=grid] .course-content .course-wrap-meta,.learn-press-courses[data-layout=grid] .course-content .course-excerpt,.learn-press-courses[data-layout=grid] .course-content .course-readmore{display:none}.learn-press-courses[data-layout=grid] .course-content .course-footer{padding-top:18px;border-top:1px solid rgba(153,153,153,0.2)}.learn-press-courses[data-layout=grid] .course-content .course-footer .course-students{float:right;text-transform:capitalize}.learn-press-courses[data-layout=grid] .course-content .course-footer .course-students::before{position:relative;top:-1px;margin-left:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900;content:"\f501"}.learn-press-courses[data-layout=grid] .learn-press-message{margin-right:15px;margin-left:15px}.learn-press-courses[data-size="3"] .course{width:33.3333%}@media(max-width:767px){.learn-press-courses[data-size="3"] .course{width:100%}}.learn-press-courses .lp-archive-course-skeleton{position:absolute;height:100%;background:linear-gradient(-90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);animation:lp-skeleton-loading 1.4s ease infinite;background-size:400% 100%}.learn-press-courses .lp-archive-course-skeleton li{display:none}.lp-courses-bar{display:flex;float:left;margin-bottom:48px}@media(max-width:767px){.lp-courses-bar{flex-direction:row;width:100%;justify-content:space-between}}.lp-courses-bar .search-courses{position:relative;width:306px;max-width:100%;margin-left:20px;line-height:1;flex:1}.lp-courses-bar .search-courses input[type=text]{width:100%;height:44px;padding:6px 18px 6px 32px;border:1px solid #ccc;border-radius:5px;background:#fff;font-size:14px;font-style:italic;line-height:1}.lp-courses-bar .search-courses input[type=text]:focus{border-color:var(--lp-primary-color);outline:0}.lp-courses-bar .search-courses button{position:absolute;top:50%;left:12px;width:30px;height:30px;padding:0;border:0;color:#333;background:transparent;font-size:16px;line-height:1;transform:translate(0,-50%)}.lp-courses-bar .search-courses button:focus{border:0;outline:0}.lp-courses-bar .search-courses button.loading>i::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.lp-courses-bar .search-courses ::-webkit-input-placeholder{color:#999}.lp-courses-bar .search-courses :-ms-input-placeholder{color:#999}.lp-courses-bar .search-courses ::placeholder{color:#999}@media(max-width:767px){.lp-courses-bar .search-courses{width:100%}}.lp-courses-bar .switch-layout{display:flex;height:44px;line-height:1;text-align:left;flex:0 0 40px;align-items:center;justify-content:center}.lp-courses-bar .switch-layout input[type=radio]{display:none}.lp-courses-bar .switch-layout .switch-btn{display:block;width:40px;height:40px;margin:0;padding:0;border-radius:5px;font-size:16px;line-height:40px;text-align:center;cursor:pointer}.lp-courses-bar .switch-layout .switch-btn::before{display:inline-block;margin:8px 6px;color:#333;font-family:"Font Awesome 5 Free";font-weight:900;line-height:1}.lp-courses-bar .switch-layout .switch-btn.grid::before{content:"\f00a"}.lp-courses-bar .switch-layout .switch-btn.list{margin-right:3px}.lp-courses-bar .switch-layout .switch-btn.list::before{content:"\f03a"}input[type=radio]:nth-child(1):checked ~ .switch-btn:nth-child(2){background:#f5f5f5}input[type=radio]:nth-child(1):checked ~ .switch-btn:nth-child(2)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(3):checked ~ .switch-btn:nth-child(4){background:#f5f5f5}input[type=radio]:nth-child(3):checked ~ .switch-btn:nth-child(4)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(5):checked ~ .switch-btn:nth-child(6){background:#f5f5f5}input[type=radio]:nth-child(5):checked ~ .switch-btn:nth-child(6)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(7):checked ~ .switch-btn:nth-child(8){background:#f5f5f5}input[type=radio]:nth-child(7):checked ~ .switch-btn:nth-child(8)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(9):checked ~ .switch-btn:nth-child(10){background:#f5f5f5}input[type=radio]:nth-child(9):checked ~ .switch-btn:nth-child(10)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(11):checked ~ .switch-btn:nth-child(12){background:#f5f5f5}input[type=radio]:nth-child(11):checked ~ .switch-btn:nth-child(12)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(13):checked ~ .switch-btn:nth-child(14){background:#f5f5f5}input[type=radio]:nth-child(13):checked ~ .switch-btn:nth-child(14)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(15):checked ~ .switch-btn:nth-child(16){background:#f5f5f5}input[type=radio]:nth-child(15):checked ~ .switch-btn:nth-child(16)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(17):checked ~ .switch-btn:nth-child(18){background:#f5f5f5}input[type=radio]:nth-child(17):checked ~ .switch-btn:nth-child(18)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20){background:#f5f5f5}input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20)::before{color:var(--lp-primary-color)}.lp_allow_repuchase_select{padding:20px;background:#f7f7f7}.lp_allow_repuchase_select>ul{padding:0;list-style:none}.lp_allow_repuchase_select>a{display:inline-block;margin-top:10px;color:#fff;background-color:#222}.comment-respond .comment-reply-title{font-size:30px;font-weight:500;line-height:1.2;margin-bottom:15px}.comment-respond .comment-form{margin:0 -15px}.comment-respond .comment-form>p label{display:block;margin-bottom:10px;font-size:16px;font-weight:500}.comment-respond .comment-form>p.comment-notes,.comment-respond .comment-form>p.logged-in-as{color:#666;font-size:16px}.comment-respond .comment-form>p.logged-in-as a{color:#666;text-decoration:underline}.comment-respond .comment-form>p.logged-in-as a:hover,.comment-respond .comment-form>p.logged-in-as a:focus{color:var(--lp-primary-color)}.comment-respond .comment-form>p.comment-form-cookies-consent{clear:both}.comment-respond .comment-form>p.comment-form-cookies-consent input{padding:0;margin-left:8px}.comment-respond .comment-form>p.comment-form-cookies-consent label{display:inline}.comment-respond .comment-form>p,.comment-respond .comment-form>div{padding:0 15px;margin-bottom:15px}.comment-respond .comment-form input[type=text],.comment-respond .comment-form input[type=email],.comment-respond .comment-form input[type=url]{height:40px;line-height:normal;width:100% !important;margin-bottom:15px}.comment-respond .comment-form input[type=submit]{background-color:var(--lp-primary-color);border:0;min-height:40px;line-height:40px;padding:0 15px;font-size:16px;text-transform:capitalize;font-weight:500;margin-top:15px;cursor:pointer;color:white}.comment-respond .comment-form .comment-form-author,.comment-respond .comment-form .comment-form-email,.comment-respond .comment-form .comment-form-url{width:33.33%;float:right}@media(max-width:575px){.comment-respond .comment-form .comment-form-author,.comment-respond .comment-form .comment-form-email,.comment-respond .comment-form .comment-form-url{width:100%;float:unset}}.comment-respond .comment-form textarea,.comment-respond .comment-form input{border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;max-width:100%}.comment-respond .comment-form textarea{width:100%;display:block;padding:20px 15px;resize:none}.course-summary-sidebar .course-sidebar-preview{margin-bottom:35px;background:#fff}.course-summary-sidebar .lp-course-buttons{margin-bottom:34px}.course-summary-sidebar .lp-course-buttons>*{margin-bottom:10px}.course-summary-sidebar .lp-course-buttons>*:last-child{margin-bottom:0}.course-summary-sidebar .lp-course-buttons form,.course-summary-sidebar .lp-course-buttons button{width:100%;text-decoration:none}.course-summary-sidebar .lp-course-buttons button{font-weight:500}.course-summary-sidebar .lp-course-buttons button:hover{border-color:var(--lp-primary-color)}.course-summary-sidebar .lp-course-buttons button.button-enroll-course{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.course-summary-sidebar .lp-course-buttons button.button-enroll-course:hover{opacity:.5;background:var(--lp-primary-color)}.course-summary-sidebar .lp-course-buttons button.button-enroll-course.loading::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";animation:lp-rotating 1s linear infinite}.course-summary-sidebar .lp-course-buttons button ~ .lp-enroll-notice{margin-top:20px;padding:20px;border:2px solid #059601;border-radius:9px;font-size:15px;line-height:1.4}.course-summary-sidebar .lp-course-buttons button ~ .lp-enroll-notice.error{border-color:#d85554}.course-summary-sidebar .course-results-progress .items-progress,.course-summary-sidebar .course-results-progress .course-progress{display:flex;flex-direction:row;margin:0 0 5px;padding:0;justify-content:space-between;flex-wrap:wrap}.course-summary-sidebar .course-results-progress .items-progress__heading,.course-summary-sidebar .course-results-progress .course-progress__heading{margin:0;margin-bottom:7px;padding:0;color:#333;font-size:1rem;font-weight:500;flex:1 1 auto;width:auto}.course-summary-sidebar .course-results-progress .items-progress .learn-press-progress,.course-summary-sidebar .course-results-progress .course-progress .learn-press-progress{clear:both;width:100%}.course-summary-sidebar .course-results-progress .number{display:block;margin:0;color:#666;font-size:16px;font-weight:300;line-height:16px;text-align:left}.course-sidebar-preview .course-price{text-align:center}.course-sidebar-preview .course-price .origin-price{color:#666;font-size:18px;font-weight:300;font-style:unset}.course-sidebar-preview .course-price .price{color:#333;font-size:1.8rem;font-weight:500}.course-sidebar-preview .media-preview{overflow:hidden;position:relative;margin:-20px -20px 20px}.course-sidebar-preview .media-preview img{max-width:100%;height:auto;vertical-align:top}.course-sidebar-preview .course-time{margin-bottom:28px;padding-bottom:8px;border-bottom:1px solid rgba(204,204,204,0.3)}.course-sidebar-preview .course-time-row{display:flex;color:#666;font-size:16px;font-weight:300;justify-content:space-between}.course-sidebar-preview .course-time-row strong{color:#333;font-weight:500}.course-sidebar-preview .course-time-row time{color:#666;font-size:1rem;font-weight:300;line-height:24px}.course-sidebar-preview>*:last-child{margin-bottom:0}.learnpress-page .lp-button.secondary{background:#9198ab}.learnpress-page .lp-button.secondary:hover{background:#9ba6c5}.learnpress-page .lp-button:disabled,.learnpress-page .lp-button[disabled]{background:#ddd;pointer-events:none}.learnpress-page:hover{text-decoration:none}#popup-course{display:flex;position:fixed;z-index:99999;top:0;left:0;bottom:0;right:0;background:#fff}#popup-course .back-course{padding-right:30px;padding-left:30px;line-height:70px;background:rgba(255,255,255,0.1);color:#fff}#popup-course .back-course:hover{background:rgba(255,255,255,0.15)}@media(max-width:768px){#popup-course .back-course{background:transparent;opacity:.6;padding-right:15px;padding-left:15px}#popup-course .back-course:hover{background:transparent;opacity:1}}#popup-course #popup-header{display:flex;position:fixed;z-index:100;left:0;right:475px;padding:0;border-bottom:1px solid #d9e0f1;background:var(--lp-secondary-color);-webkit-transition:right .25s;-moz-transition:right .25s;-ms-transition:right .25s;-o-transition:right .25s;transition:right .25s}#popup-course #popup-header .course-title{margin:0;padding:0;line-height:70px;letter-spacing:unset}#popup-course #popup-header .course-title a{display:-webkit-box;overflow:hidden;color:#fff;font-size:16px;font-weight:400;text-overflow:ellipsis;-webkit-line-clamp:1;-webkit-box-orient:vertical}#popup-course #popup-header .course-title a:hover{color:var(--lp-primary-color)}@media(max-width:768px){#popup-course #popup-header .course-title{flex:1}}#popup-course #popup-header .items-progress{display:flex;justify-content:center;align-items:center}@media(max-width:768px){#popup-course #popup-header .items-progress{flex:1}}@media(max-width:767px){#popup-course #popup-header .items-progress{padding-bottom:20px;justify-content:end}}#popup-course #popup-header .number{padding-left:10px;color:#fff;font-size:14px;font-weight:300}#popup-course #popup-header .lp-button{display:flex;position:relative;height:40px;margin:9px;border:0;color:#fff;background:var(--lp-primary-color);font-size:14px;font-weight:400;justify-content:center;line-height:40px;align-items:center}#popup-course #popup-header .lp-button:hover{opacity:.8}#popup-course #popup-header .lp-button-back{float:left;margin:9px 10px}#popup-course #popup-header .lp-button-back button::before,#popup-course #popup-header .lp-button-back button::after{content:""}#popup-course #popup-header .lp-button-back button::before{border:1px solid #ddd}#popup-course #popup-header .lp-button-back button::after{border:1px solid #ddd}#popup-course .popup-header__inner{display:flex;width:792px;margin:0 auto;justify-content:space-between;align-items:center;padding-right:15px;padding-left:15px}@media(max-width:1024px){#popup-course .popup-header__inner{width:100%}}@media(max-width:767px){#popup-course .popup-header__inner{flex-direction:column}}#popup-course #popup-sidebar{overflow:auto;position:relative;box-shadow:0 15px 30px 0 rgba(0,0,0,0.1);flex:0 0 475px;-webkit-transition:.25s;-moz-transition:.25s;-ms-transition:.25s;-o-transition:.25s;transition:.25s}#popup-course #popup-sidebar .search-course{display:flex;position:relative;height:70px;background:#f9fafc}#popup-course #popup-sidebar .search-course input[name=s]{display:block;width:100%;margin:6px 0;padding-right:20px;border:0;color:#999;background:transparent;box-shadow:none;font-size:14px;line-height:1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#popup-course #popup-sidebar .search-course input[name=s]::-webkit-input-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]::-moz-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]:-ms-input-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]:-moz-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]::placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]::-webkit-input-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]::-moz-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]:-ms-input-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]:-moz-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]::placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]:focus{outline:0;color:#222}#popup-course #popup-sidebar .search-course button{position:absolute;top:0;left:10px;width:16px;height:70px;margin:0 10px;padding:0;border:0;background:transparent;line-height:1px}#popup-course #popup-sidebar .search-course button::before{color:#666;font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900;content:"\f002"}#popup-course #popup-sidebar .search-course button.clear{display:none}#popup-course #popup-sidebar .search-course button.clear::before{content:"\f00d"}#popup-course #popup-sidebar .search-course .search-results{display:none;overflow:auto;position:fixed;z-index:99999999;top:92px;bottom:0;right:0;width:400px;margin:0;border-top-color:transparent;border-left:1px solid #d9e0f1;background:#fbfcff}#popup-course #popup-sidebar .search-course .search-results .search-results__item{border-bottom:1px solid #d9e0f1;background:#fff}#popup-course #popup-sidebar .search-course .search-results .search-results__item img{position:absolute;right:10px;width:40px;height:40px}#popup-course #popup-sidebar .search-course .search-results .search-results__item a{display:-webkit-box;overflow:hidden;position:relative;box-sizing:content-box;height:40px;padding:10px 60px 10px 10px;color:#777;text-overflow:ellipsis;-webkit-line-clamp:1;-webkit-box-orient:vertical}#popup-course #popup-sidebar .search-course .search-results .search-results__item:hover{background:#d9e0f1}#popup-course #popup-sidebar .search-course .search-results .search-results__item-title{overflow:hidden;margin:0 0 -2px 0;padding:0;font-size:16px;font-weight:normal}#popup-course #popup-sidebar .search-course .search-results .search-results__item-author{font-size:12px}#popup-course #popup-sidebar .search-course .search-results .course-price{position:absolute;left:10px;bottom:10px;font-size:12px}#popup-course #popup-sidebar .search-course .search-results .course-price .origin-price{font-size:smaller;text-decoration:line-through}#popup-course #popup-sidebar .search-course .search-results .search-results__not-found{padding:10px;color:#777}#popup-course #popup-sidebar .search-course .search-results .search-results__pagination{padding:10px;text-align:center}#popup-course #popup-sidebar .search-course .search-results .search-results__pagination a,#popup-course #popup-sidebar .search-course .search-results .search-results__pagination span{display:inline-block;margin:0 2px 10px 3px;padding:5px 8px;border:1px solid #d9e0f1;border-radius:4px;color:#777;font-size:14px;line-height:1;cursor:pointer}#popup-course #popup-sidebar .search-course .search-results .search-results__pagination span{color:#999;background:#d9e0f1}#popup-course #popup-sidebar .search-course.searching .search-results{display:block}#popup-course #popup-sidebar .search-course.searching .clear{display:block}#popup-course #popup-sidebar .search-course.searching button{display:none}#popup-course #popup-sidebar .search-course.searching::after{position:absolute;z-index:1;bottom:0;right:50%;width:0;height:0;margin-right:-10px;border:10px solid transparent;border-bottom-color:#fff;content:""}#popup-course #popup-sidebar .course-curriculum{overflow:auto;position:absolute;top:70px;bottom:0;width:475px}#popup-course #popup-sidebar .course-curriculum::-webkit-scrollbar-thumb{background:#ccc}#popup-course #popup-sidebar .course-curriculum::-webkit-scrollbar{width:6px}#popup-course #popup-sidebar .course-curriculum::-webkit-scrollbar-track{background:#f5f5f5}#popup-course #popup-sidebar .section{position:relative;padding:0 0 4px 0}#popup-course #popup-sidebar .section .circle-progress{display:inline-block;position:absolute;top:50%;left:10px;width:24px;height:24px;margin-top:-12px;border:3px solid #d9e0f1;border-radius:50%}#popup-course #popup-sidebar .section.section-empty .section-header{margin:0}#popup-course #popup-sidebar .section.section-empty .learn-press-message{margin:0;padding:10px;border-bottom:1px solid #d9e0f1;border-radius:0;color:#999;background:#f5f5f5;font-size:14px}#popup-course #popup-sidebar .section.section-empty .learn-press-message::before,#popup-course #popup-sidebar .section.section-empty .learn-press-message::after{position:absolute;z-index:9999;top:-16px;right:10px;width:0;height:0;border:8px solid transparent;border-bottom-color:#f5f5f5;background:transparent;content:"";-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}#popup-course #popup-sidebar .section.section-empty .learn-press-message::after{z-index:9998;top:-20px;right:8px;border-width:10px;border-bottom-color:#d9e0f1}#popup-course #popup-sidebar .section-header{position:sticky;z-index:1000;top:0;height:94px;padding:38px 20px 20px 20px;cursor:pointer;background-color:white}#popup-course #popup-sidebar .section-header .section-title{padding:0 0 4px 0;color:#000;font-size:20px;font-weight:500}#popup-course #popup-sidebar .section-header .section-title .show-desc::before{font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f0d7"}#popup-course #popup-sidebar .section-header .section-toggle{justify-content:flex-end;flex:0}#popup-course #popup-sidebar .section-header .section-toggle i{color:#666}#popup-course #popup-sidebar .section-header .section-meta{padding-top:6px;padding-bottom:0}#popup-course #popup-sidebar .section-content{margin-bottom:0}#popup-course #popup-sidebar .course-item{min-height:50px;margin-bottom:4px;padding:5px 20px;background:#f9fafc;align-items:center}#popup-course #popup-sidebar .course-item>span{display:none}#popup-course #popup-sidebar .course-item::before{top:-1px;bottom:-1px;height:auto;background:transparent}#popup-course #popup-sidebar .course-item::after{content:""}#popup-course #popup-sidebar .course-item.current{background:#eaeaea}#popup-course #popup-sidebar .course-item.has-status.failed .trans{color:#f02425}#popup-course #popup-sidebar .course-item.status-completed .trans{color:#3bb54a}#popup-course #popup-sidebar .section-item-link{line-height:1;padding-left:0}#popup-course #popup-sidebar .section-item-link::before{padding:12px 0;vertical-align:unset}#popup-course #popup-sidebar .section-item-link .item-name{width:100%;padding:0 17px 0 10px;font-size:14px;line-height:21px;font-weight:500}#popup-course #popup-sidebar .course-item-meta{padding:0}#popup-course #popup-sidebar .course-item-meta .item-meta{padding:0;color:#999;background:transparent;font-size:12px;line-height:1.5;height:auto}#popup-course #popup-sidebar .course-item-meta .item-meta:first-child{margin-right:0}#popup-course #popup-sidebar .course-item-meta .item-meta::before{font-size:12px;line-height:21px}#popup-course #popup-content{overflow:auto;position:relative;margin:70px 0 50px 0;flex:1;padding-right:15px;padding-left:15px}#popup-course #popup-content .lp-button{position:relative;margin:0 0 0 10px;padding:12px 29px;border-color:var(--lp-secondary-color);font-size:14px}#popup-course #popup-content .lp-button.instant-check .instant-check__icon{margin-left:5px}#popup-course #popup-content .lp-button.instant-check .instant-check__icon::before{font-family:"Font Awesome 5 Free";content:"\f058"}#popup-course #popup-content .lp-button.instant-check .instant-check__info{visibility:hidden;position:absolute;top:100%;right:0;margin-top:3px;padding:11px 20px;border-radius:3px;background:#eee;white-space:nowrap;text-transform:none}#popup-course #popup-content .lp-button.instant-check:hover .instant-check__info{visibility:visible;position:absolute;top:100%;right:0;margin-top:3px;padding:11px 11px;border-radius:3px;color:#333;background:#eee;white-space:nowrap}#popup-course #popup-content .lp-button.instant-check.loading .instant-check__icon{display:inline-block;animation:lp-rotating 1s linear infinite}#popup-course #popup-content .lp-button.instant-check.loading .instant-check__icon::before{font-weight:800;content:"\f110"}#popup-course #popup-content .lp-button:hover{border-color:var(--lp-primary-color)}#popup-course #popup-content .lp-button.completed{display:flex;flex-direction:row-reverse;margin-top:32px;border-color:transparent;color:#fff;background:#3db748;font-size:16px;align-items:center;justify-content:center}#popup-course #popup-content .lp-button.completed i{margin-right:9px;font-size:14px}#popup-course #popup-content.fixed-quiz-status .quiz-status{background:var(--lp-primary-color)}#popup-course #popup-content.fixed-quiz-status .quiz-status>div{padding:0}@media(max-width:767px){#popup-course #popup-content{margin-top:113px}}#popup-course #popup-footer{position:fixed;z-index:999;left:0;bottom:0;right:475px;width:100%;max-width:792px;height:50px;margin:0 auto;border-top:1px solid #ebebeb;background:#fff;-webkit-transition:right .25s;-moz-transition:right .25s;-ms-transition:right .25s;-o-transition:right .25s;transition:right .25s}@media(max-width:1024px){#popup-course #popup-footer{width:auto;padding:0 15px}}#popup-course #popup-footer .course-item-nav{justify-content:space-between}#popup-course #popup-footer .course-item-nav .prev,#popup-course #popup-footer .course-item-nav .next{display:flex;line-height:50px}#popup-course #popup-footer .course-item-nav .prev a,#popup-course #popup-footer .course-item-nav .next a{display:block;color:#666;font-size:16px}#popup-course #popup-footer .course-item-nav .prev::before,#popup-course #popup-footer .course-item-nav .next::before{color:#999;font-family:"Font Awesome 5 Free";font-size:12px;font-weight:900}#popup-course #popup-footer .course-item-nav .prev:hover a,#popup-course #popup-footer .course-item-nav .prev:hover::before,#popup-course #popup-footer .course-item-nav .next:hover a,#popup-course #popup-footer .course-item-nav .next:hover::before{color:var(--lp-primary-color)}#popup-course #popup-footer .course-item-nav .prev:hover .course-item-nav__name,#popup-course #popup-footer .course-item-nav .next:hover .course-item-nav__name{display:block}#popup-course #popup-footer .course-item-nav .next{flex-direction:row-reverse}#popup-course #popup-footer .course-item-nav .next::before{margin-right:10px;content:"\f0da"}#popup-course #popup-footer .course-item-nav[data-nav=next]{justify-content:flex-end}#popup-course #popup-footer .prev::before{margin-left:10px;content:"\f0d9"}#popup-course #popup-footer .prev .course-item-nav__name{left:auto;right:-30px}#popup-course #popup-footer .prev .course-item-nav__name::before{left:auto;right:5px}@media(max-width:1024px){#popup-course #popup-footer .prev .course-item-nav__name{right:15px}}#popup-course #popup-footer .course-item-nav__name{display:none;position:absolute;top:-20px;left:-30px;width:auto;padding:10px 15px;color:#666;background:#ccc;font-size:14px;font-weight:300;line-height:1}@media(max-width:1024px){#popup-course #popup-footer .course-item-nav__name{top:-25px;left:15px;right:auto}}#popup-course #sidebar-toggle{display:inline-block;position:absolute;z-index:100;top:198px;right:475px;width:25px;height:56px;margin:0;background:#fff;box-shadow:0 0 20px 0 rgba(0,0,0,0.15);cursor:pointer;transition:.25s;-webkit-appearance:none;border:0}#popup-course #sidebar-toggle:after{display:none}#popup-course #sidebar-toggle::before{display:inline-block;position:absolute;top:50%;right:50%;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f0d9";transition:.25s;transform:translate(50%,-50%)}#popup-course #sidebar-toggle:focus{border:0;outline:0}#popup-course .lp-quiz-buttons .complete-quiz,#popup-course .lp-quiz-buttons .back-quiz,#popup-course .lp-quiz-buttons .review-quiz{float:left}#popup-course .quiz-results,#popup-course .quiz-content,#popup-course .quiz-questions,#popup-course .quiz-buttons,#popup-course .quiz-attempts{margin-bottom:60px}#popup-course .quiz-questions .lp-fib-content{margin-bottom:20px;padding:20px;border:2px solid #f5f5f5;border-radius:6px;line-height:1.6}#popup-course .quiz-questions .lp-fib-input{display:inline-block;width:auto;max-width:none}#popup-course .quiz-questions .lp-fib-input>input{height:36px;padding:6px 16px;border:1px solid #222;line-height:36px}#popup-course .quiz-questions .lp-fib-answered{padding:0 10px;background:#ececec;white-space:nowrap}#popup-course .quiz-questions .lp-fib-answered.fail{border:2px solid #d85554}#popup-course .quiz-questions .lp-fib-answered.fail .lp-fib-answered__answer{text-decoration:line-through}#popup-course .quiz-questions .lp-fib-answered.correct{border:2px solid #00adff}#popup-course .quiz-questions .lp-fib-note{display:flex;margin-right:10px;font-size:14px;font-weight:400;align-items:center}#popup-course .quiz-questions .lp-fib-note>span{display:inline-block;width:20px;height:20px;margin:0 0 0 5px}#popup-course .quiz-questions .lp-sorting-choice__check-answer{padding:5px 20px;border:2px solid #059601;border-radius:5px;font-size:1rem}#popup-course .question .answer-option input[type=radio],#popup-course .question .answer-option input[type=checkbox]{-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);margin:0 10px 0 0}#popup-course .question .answer-option input[type=radio]::before{border-radius:50%}#popup-course .question .question-response{display:flex;align-items:center;justify-content:flex-start}#popup-course .scrollbar-light>.scroll-element{z-index:9999}#popup-course .scrollbar-light>.scroll-element.scroll-y{display:none}#popup-course .scrollbar-light>.scroll-element.scroll-y .scroll-bar{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body.admin-bar #popup-course{top:32px}body.lp-sidebar-toggle__close #popup-course>#sidebar-toggle{right:0}body.lp-sidebar-toggle__close #popup-course>#sidebar-toggle::before{content:"\f0da"}body.lp-sidebar-toggle__close #popup-course #popup-sidebar{flex:0}body.lp-sidebar-toggle__close #popup-course #popup-header,body.lp-sidebar-toggle__close #popup-course #popup-footer{right:0}@media(max-width:768px){body:not(.lp-sidebar-toggle__open) #popup-course>#sidebar-toggle{right:0}body:not(.lp-sidebar-toggle__open) #popup-course>#sidebar-toggle::before{content:"\f0da"}body:not(.lp-sidebar-toggle__open) #popup-course #popup-sidebar{flex:0}}.course-curriculum .section-header .section-meta{position:relative}@media screen and (max-width:1280px){#popup-course #popup-sidebar{flex-basis:300px}#popup-course #popup-sidebar .course-curriculum{width:300px}#popup-course #popup-header,#popup-course #popup-footer{right:300px}#popup-course #sidebar-toggle{right:299px}}@media screen and (max-width:782px){body.admin-bar #popup-course{top:46px}#popup-course #popup-sidebar{flex-basis:250px}#popup-course #popup-sidebar .course-curriculum{width:250px}#popup-course #popup-header,#popup-course #popup-footer{right:250px}#popup-course #sidebar-toggle{right:249px}#popup-course #sidebar-toggle:checked ~ #popup-sidebar{flex-basis:0}#popup-course .course-item-meta .item-meta.count-questions,#popup-course .course-item-meta .item-meta.duration{display:none}}.content-item-wrap{width:792px;max-width:100%;margin:0 auto;padding-bottom:80px}@media(max-width:1024px){.content-item-wrap{width:100%}}.content-item-wrap .course-item-title{margin-top:0;margin-bottom:24px;color:#333;font-size:30px;font-weight:600}@media(max-width:767px){.content-item-wrap .course-item-title{text-align:center}}.content-item-wrap h4{font-size:1.5rem;font-weight:500;line-height:1.5}.content-item-wrap .content-item-summary{padding-top:50px}.content-item-wrap .content-item-description{margin-bottom:30px}.content-item-wrap .content-item-description h2,.content-item-wrap .content-item-description h3,.content-item-wrap .content-item-description h4,.content-item-wrap .content-item-description h5,.content-item-wrap .content-item-description h6{margin-top:0;margin-bottom:18px;font-size:18px;letter-spacing:unset}.content-item-wrap .content-item-description p{margin:0 0 18px 0;color:#666;font-size:16px;font-weight:300;line-height:26px}.content-item-wrap .content-item-description img{max-width:100%;height:auto;vertical-align:middle}.content-item-wrap #learn-press-quiz-app{margin-bottom:40px}.content-item-wrap .quiz-content{margin-bottom:40px;color:#666;font-size:16px;font-weight:300;line-height:26px}.content-item-wrap .quiz-content img{max-width:100%;height:auto;vertical-align:middle}.content-item-wrap .quiz-buttons{display:flex;justify-content:center;text-align:center}.content-item-wrap .quiz-buttons .button-right .lp-button{margin:0 15px 0 0}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav]{margin:0;border:1px solid #d9e0f1;color:#777;background:#fbfcff}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav]::before{display:inline-block;width:15px;height:15px;border:2px solid #d9e0f1;border-top-color:transparent;border-right-color:transparent;content:"";-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav].prev::before{margin-right:7px;-webkit-transform:rotate(-135deg);-moz-transform:rotate(-135deg);-ms-transform:rotate(-135deg);-o-transform:rotate(-135deg);transform:rotate(-135deg)}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav].next{margin-right:-1px}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav].next::before{margin-left:7px}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav]:hover{background:#fff}.content-item-wrap .quiz-buttons.align-center{display:block;text-align:center}.content-item-wrap .quiz-buttons.align-center .button-left{text-align:center}.content-item-wrap .quiz-buttons.align-center .button-left.fixed{position:fixed;z-index:99999;bottom:0;right:50%;width:100%;max-width:792px;height:49px;margin-right:237px;transform:translateX(50%)}@media(max-width:768px){.content-item-wrap .quiz-buttons.align-center .button-left.fixed{width:100% !important}}.content-item-wrap .quiz-buttons.align-center .button-left.nav-center{height:50px;margin-right:0 !important}.content-item-wrap .quiz-buttons:not(.infinity).is-first .prev{display:none}.content-item-wrap .quiz-buttons:not(.infinity).is-last .next{display:none}.content-item-wrap .quiz-buttons:not(.is-first):not(.is-last) .prev{border-top-left-radius:0;border-bottom-left-radius:0}.content-item-wrap .quiz-buttons:not(.is-first):not(.is-last) .next{border-top-right-radius:0;border-bottom-right-radius:0}.content-item-wrap .questions-pagination{height:33px;padding:8px 0;background:#fff;text-align:center}.content-item-wrap .questions-pagination .nav-links{text-align:center}.content-item-wrap .questions-pagination .nav-links .page-numbers{display:inline-block;vertical-align:middle;margin:0 3px 3px;padding:10px 16px;color:#666;background-color:transparent;font-size:16px;font-weight:300;line-height:1;border:1px solid;cursor:pointer}.content-item-wrap .questions-pagination .nav-links .page-numbers.next,.content-item-wrap .questions-pagination .nav-links .page-numbers.prev{display:inline-block;padding:10px;background:transparent;font-size:16px;text-align:center;text-decoration:none;text-transform:none;border:1px solid}.content-item-wrap .questions-pagination .nav-links .page-numbers.current,.content-item-wrap .questions-pagination .nav-links .page-numbers:hover{color:var(--lp-primary-color)}.course-curriculum .section-title{position:relative;margin-bottom:0;padding:8px 0;color:#5383f7;font-size:16px;font-weight:normal;line-height:1}.course-curriculum .section-title span.show-desc{display:inline-block;position:absolute;top:50%;left:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-title span.show-desc::before{font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f107"}.course-curriculum .section-title span.show-desc:hover::before{border-top-color:#ccc}.lp-overlay{display:none;position:fixed;z-index:99999;top:0;left:0;bottom:0;right:0;width:100%;height:100%;background-color:rgba(209,213,219,0.8);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms;transition-property:opacity}.wp-admin .lp-modal-dialog .lp-modal-header{padding:2em}.wp-admin .lp-modal-dialog .lp-modal-header h3{font-size:1.4em}.lp-modal-dialog{display:flex;position:fixed;z-index:9999;top:0;left:0;right:0;width:100%;min-height:100vh;text-align:center;align-items:center;justify-content:center}.lp-modal-dialog .lp-modal-content{display:inline-block;overflow:hidden;z-index:2;width:auto;max-width:600px;border-radius:8px;text-align:right;vertical-align:middle;background:white;color:black}.lp-modal-dialog .lp-modal-header{background:#7c60d9;border-bottom:1px solid #eee;padding:1em}.lp-modal-dialog .lp-modal-header h3{margin:0;color:white;font-size:inherit;font-weight:400}.lp-modal-dialog .lp-modal-body .main-content{max-height:500px;overflow:auto}.lp-modal-dialog .lp-modal-body .main-content h3,.lp-modal-dialog .lp-modal-body .main-content h2,.lp-modal-dialog .lp-modal-body .main-content .pd-2em{padding:1em}.lp-modal-dialog .lp-modal-footer{padding:20px;padding-top:0;background-color:#f9fafb;text-align:left}.lp-modal-dialog .btn-yes{color:#fff;background-color:#7c60d9}#lp-modal-overlay{display:none;position:fixed;z-index:999999;top:0;left:0;bottom:0;right:0;opacity:.5;background:#000}#lp-modal-window{display:none;position:fixed;z-index:999999;top:50%;right:50%;padding:35px 60px 28px 60px;background:#fff;transform:translate(50%,-50%);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#lp-modal-window #lp-modal-content{margin:0 0 24px 0;color:#333;font-size:16px;font-weight:400;line-height:26px;text-align:center}#lp-modal-window #lp-modal-content>*{margin:0 0 .5em}#lp-modal-window #lp-modal-buttons{display:flex;flex-direction:row-reverse;align-items:center;justify-content:center}#lp-modal-window #lp-modal-buttons .lp-button{position:relative;margin:0 10px 0 10px}.learn-press-comments{width:792px;max-width:100%;margin:0 auto}@media(max-width:1024px){.learn-press-comments{width:100%}}.learn-press-progress{overflow:hidden;position:relative;width:80px;height:6px;border-radius:3px}.learn-press-progress .learn-press-progress__active{position:absolute;z-index:1;right:-100%;width:100%;height:100%;border-radius:3px;background:var(--lp-primary-color);-webkit-transition:.5s;-moz-transition:.5s;-ms-transition:.5s;-o-transition:.5s;transition:.5s}.learn-press-progress::before{display:block;position:absolute;z-index:0;top:0;width:100%;height:100%;background:#ccc;content:""}.course-curriculum .section-header .section-left{display:flex}.course-curriculum .section-header .section-left .section-title{flex:1}.course-curriculum .section-header .section-left .section-toggle{flex:0 0 40px;align-items:center;text-align:center;cursor:pointer}.course-curriculum .section-header .section-left .section-toggle .fa-caret-down{display:none}.course-curriculum .section-header .learn-press-progress{width:80px}.course-curriculum .section.closed .section-toggle .fa-caret-down{display:block}.course-curriculum .section.closed .section-toggle .fa-caret-up{display:none}.course-curriculum .section.closed .section-content{overflow:hidden;height:0}*{box-sizing:border-box;margin:0;padding:0}button{cursor:pointer}input,button,select,textarea{outline:0}html{overflow-x:hidden}a{-webkit-transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;transition:.3s}.lp-skeleton-animation{margin:0;padding:0;list-style:none}.lp-skeleton-animation>li{width:100%;height:16px;margin-top:15px;border-radius:2px;background:linear-gradient(-90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}@keyframes lp-skeleton-loading{0%{background-position:0 50%}to{background-position:100% 50%}}.learnpress.theme-twentytwentytwo .wp-site-blocks,.learnpress.twentytwentytwo .wp-site-blocks{max-width:none;padding-left:0;padding-right:0}.learnpress.theme-twentytwentytwo .wp-site-blocks>.wp-block-group,.learnpress.twentytwentytwo .wp-site-blocks>.wp-block-group{max-width:none;margin-left:auto;margin-right:auto}.learnpress.theme-twentytwentytwo .lp-archive-courses,.learnpress.twentytwentytwo .lp-archive-courses{max-width:none}.learnpress.twentytwentytwo .wp-container-11 .alignfull,.learnpress.twentytwentytwo .wp-container-9 .alignfull,.learnpress.twentytwentytwo .wp-container-12 .alignfull{max-width:100%;margin-right:0 !important;margin-left:0 !important;padding-right:0 !important;padding-left:0 !important}@media(max-width:1199px){.learnpress.twentytwentytwo .wp-site-blocks .wp-block-template-part{padding-right:15px;padding-left:15px}}input[type=text],input[type=email],input[type=number],input[type=password]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;box-shadow:unset}body{background:#fff}body.learnpress-page{overflow-x:hidden}.wrap-fullwidth a:focus,.wrap-fullwidth button:focus,.wrap-fullwidth input:focus,.wrap-fullwidth textarea:focus{border:0;outline:0}.wrap-fullwidth a:hover{text-decoration:none}.wrap-fullwidth p{word-break:break-word}.wrap-fullwidth p:last-child{margin-bottom:0}.wrap-fullwidth label{display:block;margin:0;outline:0}.wrap-fullwidth img{max-width:100%;height:auto}.wrap-fullwidth form{margin:0}.wrap-fullwidth .col-full{box-sizing:border-box;max-width:100%;padding:0}.wrap-fullwidth .col-full .woocommerce-breadcrumb{display:none}footer{clear:both}.margin-bottom{margin-bottom:20px}.hide-if-js{display:none !important}.clearfix::after{display:block;clear:both;content:""}.lp-form-fields{margin:0;padding:0;list-style:none}.lp-form-fields .form-field{margin:0 0 20px 0;list-style:none}.lp-content-wrap{width:1170px;max-width:90%;margin:0 auto}.lp-content-wrap>h2{margin-top:0;margin-bottom:26px;color:#333;font-size:30px;font-weight:600}.learn-press-breadcrumb{max-width:1170px;width:100%;margin:0 auto 45px auto;padding:0;color:#333;font-size:14px;font-weight:400;list-style:none}.learn-press-breadcrumb li{display:inline-block;margin:0}.learn-press-breadcrumb li a:hover{color:var(--lp-primary-color)}.learn-press-breadcrumb i{margin:0 5px;color:#666;font-size:12px}@media(max-width:1024px){.learn-press-breadcrumb{padding-left:15px;padding-right:15px}}.learn-press-breadcrumb a{color:#666;font-weight:500}.learnpress-page .lp-button,.learnpress-page #lp-button{padding:16px 24px;border:1px solid #ccc;color:#333;background:transparent;box-shadow:unset;font-family:inherit;font-size:16px;font-weight:400;line-height:1;text-align:center;vertical-align:middle;text-decoration:none;text-transform:capitalize;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.learnpress-page .lp-button.large,.learnpress-page #lp-button.large{height:52px;padding:18px 30px;font-size:18px}.learnpress-page .lp-button:hover,.learnpress-page #lp-button:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.learnpress-page .lp-button.btn-ajax-off .icon,.learnpress-page #lp-button.btn-ajax-off .icon{display:none}.learnpress-page .lp-button.btn-ajax-on .icon,.learnpress-page #lp-button.btn-ajax-on .icon{display:inline-block;margin-left:5px;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.learnpress-page .lp-button:focus,.learnpress-page #lp-button:focus{outline:0}.learnpress-page .lp-button.loading::before,.learnpress-page #lp-button.loading::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";animation:lp-rotating 1s linear infinite}.learnpress-page .rwmb-field .description{margin-top:8px;color:#999;font-size:smaller;font-style:italic}.btn-base{border-color:var(--lp-primary-color);color:white;background-color:var(--lp-primary-color)}.lp-ajax-message{display:none;margin-top:20px;padding:20px;border:2px solid #059601;border-radius:9px;font-size:15px;line-height:1.4}.lp-ajax-message.error{border-color:#d85554}.course-meta{margin-bottom:14px}.course-meta .course-students::before{font-family:"Font Awesome 5 Free";content:""}.lp-entry-content .course-tabs{margin-bottom:60px}.learn-press-checkout-comment h4{display:none}.order-comments{width:100%;padding:15px;min-height:150px;border:1px solid #ccc;resize:none}.learn-press-progress .progress-bg{overflow:hidden;position:relative;height:6px;background:#ccc;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.learn-press-progress .progress-bg .progress-active{position:absolute;right:50%;width:100%;height:100%;margin-right:-100%;background:var(--lp-primary-color);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.retake-course,.enroll-course,.purchase-course{display:inline-block}.table-orders{font-size:16px}.table-orders th,.table-orders td{padding:5px 10px}.form-button{display:inline-block}.learn-press-pagination{padding-bottom:20px;text-align:center}.learn-press-pagination .page-numbers{display:inline-block;margin:0;padding:0;border:0;outline:0;background:transparent;list-style:none}.learn-press-pagination .page-numbers>li{display:inline-block;margin:0;padding:0 14px}.learn-press-pagination .page-numbers>li .page-numbers{float:unset;padding:0;color:#666;background:transparent;font-size:16px;font-weight:300}.learn-press-pagination .page-numbers>li .page-numbers.current{color:var(--lp-primary-color);font-weight:400}.learn-press-pagination .page-numbers>li .page-numbers:hover{color:var(--lp-primary-color)}ul.list-table-nav{display:flex;margin-right:0;list-style:none}ul.list-table-nav .nav-text{text-align:right;flex:1}ul.list-table-nav .nav-pages{text-align:left;flex:1}ul.list-table-nav .nav-pages .learn-press-pagination{display:inline-block;margin-bottom:0}.primary-color{color:#00adff}.primary-color-before::before{color:#00adff}.primary-color-after::after{color:#00adff}.primary-background-color{background:#00adff}.primary-background-color{background:#00adff}.course-origin-price{margin-left:5px;font-size:85%;text-decoration:line-through}.course-item-nav{display:flex}.course-item-nav .prev span,.course-item-nav .next span{display:block;font-weight:bold}.course-item-nav .prev a,.course-item-nav .next a{color:#999}.course-item-nav .next{text-align:left}.content-item-wrap #comments{margin-left:0;margin-right:0}.content-item-wrap #comments #comment{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-summary-sidebar{position:relative}@media(min-width:769px){.course-summary-sidebar.slide-down .course-summary-sidebar__inner{position:fixed;top:0}}@media(min-width:1200px){.course-summary-sidebar.slide-top .course-summary-sidebar__inner{position:absolute}}.course-graduation span{color:#999}.course-graduation .icon{margin-left:5px;font-size:20px}.course-graduation.passed .icon{color:#059601}.course-graduation.error .icon{color:#d85554}.learn-press-template-warning::before{color:#ffc107;font-family:"Font Awesome 5 Free";content:"\f071"}.lp-badge{display:flex;height:30px;padding:0;line-height:1;align-items:center;justify-content:center}.lp-badge::before,.lp-badge::after{content:""}.lp-badge::before{display:inline-block;position:relative;z-index:10;color:#fff;font-weight:bold;line-height:1}.lp-badge.featured-course{position:absolute;z-index:1;top:25px;right:-110px;width:300px;background:#93f;text-align:center;transform:rotate(45deg)}.lp-badge.featured-course::before{font-size:12px;text-transform:uppercase;content:attr(data-text)}@media(min-width:769px){#learn-press-item-comments{padding-bottom:50px}}.course-tabs input[name=learn-press-course-tab-radio],.course-tabs .course-tab-panel{display:none}.course-tabs .course-nav label{display:flex;align-items:center;justify-content:center;margin:0;padding:17px 10px;font-size:16px;line-height:1;font-weight:600;text-transform:capitalize;cursor:pointer}.no-event{pointer-events:none}@media screen and (max-width:768px){ul.learn-press-courses .course{width:48%}}@media screen and (max-width:600px){ul.learn-press-courses .course{width:100%;margin-left:0}}.course-price:empty{display:none !important}.quiz-attempts .attempts-heading{margin-bottom:15px}.quiz-attempts table{border-spacing:0;border-right:1px solid var(--lp-secondary-color);border-top:1px solid var(--lp-secondary-color);width:100%}.quiz-attempts table tr th,.quiz-attempts table tr td{border-left:1px solid var(--lp-secondary-color);border-bottom:1px solid var(--lp-secondary-color);padding:5px 15px;text-align:center}.quiz-attempts table tr th{font-weight:500}@media(max-width:575px){#popup-course .quiz-attempts{overflow-x:auto}}
|
1 |
+
@charset "UTF-8";@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}@keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}.learn-press-message{position:relative;margin:0 0 20px 0;padding:10px 15px 10px 50px;border-top:5px solid #00adff;border-radius:0 0 5px 5px;background:#f5f5f5;width:100%}.learn-press-message.icon{padding-right:45px}.learn-press-message.icon::before{background:#00adff}.learn-press-message.icon::after{position:absolute;top:50%;right:15px;width:10px;height:10px;margin-top:-13px;margin-left:10px;border-radius:50%;color:#fff;background:#00adff;font-family:"Font Awesome 5 Free";font-size:20px;line-height:26px;text-align:center;vertical-align:baseline;content:"\f129"}.learn-press-message::before,.learn-press-message::after{position:absolute;top:0;content:""}.learn-press-message::before{left:20px;width:20px;height:30px;background:#00adff}.learn-press-message::after{top:10px;left:20px;width:0;height:0;border:10px solid transparent;border-bottom-color:#f5f5f5}.learn-press-message.error{border-color:#d85554}.learn-press-message.error::before{background:#d85554}.learn-press-message.error.icon::before,.learn-press-message.error.icon::after{background:#d85554}.learn-press-message.error.icon::after{content:"\f00d"}.learn-press-message.warning{border-color:#ffc107}.learn-press-message.warning::before{background:#ffc107}.learn-press-message.warning.icon::before,.learn-press-message.warning.icon::after{background:#ffc107}.learn-press-message.warning.icon::after{content:"\f00d"}.learn-press-message.success{border-color:#059601}.learn-press-message.success::before{background:#059601}.learn-press-message.success.icon::before,.learn-press-message.success.icon::after{background:#059601}.learn-press-message.success.icon::after{content:"\f129"}.learn-press-message a{text-decoration:underline}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}.ajaxload{display:inline-block;position:relative;width:30px;height:30px;background:#7b7b7b;content:"";-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.ajaxload::after{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;display:inline-block;position:absolute;top:2px;right:50%;width:6px;height:6px;margin-right:-3px;background:#dedede;content:""}.lp-ajaxload-style-1{display:inline-block;position:relative;width:32px;height:32px}.lp-ajaxload-style-1::before,.lp-ajaxload-style-1::after{position:absolute;top:0;right:0;width:100%;height:100%;border:3px solid #ddd;content:""}.lp-ajaxload-style-1::after{clip:rect(0,32px,16px,16px);border-color:#2fa7ff;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.learn-press-tabs{margin-bottom:34px;background:#f1f2f8}.learn-press-tabs .learn-press-tabs__checker{display:none}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10)::after{background:#fff}.learn-press-tabs .learn-press-tabs__nav{display:flex;margin:0;padding:0;border:1px solid #e5e7f2;list-style:none}.learn-press-tabs .learn-press-tabs__tab{position:relative;margin:0;border-left:1px solid #e5e7f2;background:#f1f2f8;list-style:none}.learn-press-tabs .learn-press-tabs__tab:last-child{border-left:0}.learn-press-tabs .learn-press-tabs__tab>label{display:block;margin:0;padding:18px 65px;font-size:18px;line-height:1;font-weight:600;text-align:center;text-transform:capitalize;cursor:pointer}.learn-press-tabs .learn-press-tabs__tab>label a{color:#333}.learn-press-tabs .learn-press-tabs__tab>label a:focus{outline:0;text-decoration:none}@media(max-width:767px){.learn-press-tabs .learn-press-tabs__tab>label{padding:20px 50px 14px 50px}}.learn-press-tabs .learn-press-tabs__tab::before{position:absolute;top:-1px;right:0;width:100%;height:4px;background:transparent;content:""}.learn-press-tabs .learn-press-tabs__tab::after{position:absolute;bottom:-1px;right:0;width:100%;height:4px;background:transparent;content:""}.learn-press-tabs .learn-press-tabs__tab:first-child.active label{position:relative}.learn-press-tabs .learn-press-tabs__tab:first-child.active label::before{position:absolute;top:0;right:-1px;width:1px;height:100%;background:#fff;content:""}.learn-press-tabs.stretch .learn-press-tabs__tab{flex:1}.learn-press-tabs.stretch .learn-press-tabs__tab>label{padding:18px 10px}.learn-press-filters{display:flex;margin-bottom:30px;margin-right:0;list-style:none}.learn-press-filters>li{margin:0;font-size:16px;line-height:24px}@media(max-width:767px){.learn-press-filters>li{margin-left:30px;margin-right:0}.learn-press-filters>li:last-child{margin-left:0}}.learn-press-filters>li>a,.learn-press-filters>li>span{display:inline-block;font-weight:600}.learn-press-filters>li>span.count{font-weight:400}.learn-press-filters>li>span.count::before,.learn-press-filters>li>span.count::after{display:inline-block}.learn-press-filters>li>span.count::before{content:"("}.learn-press-filters>li>span.count::after{content:")"}.learn-press-filters>li span{color:#ffb606}.learn-press-filters>li span+span{color:#ffb606}.learn-press-filters>li span+span::before,.learn-press-filters>li span+span::after{color:#ffb606}.learn-press-filters>li a{color:#333;cursor:pointer}.learn-press-filters>li a+span{color:#333}.learn-press-filters>li a+span::before,.learn-press-filters>li a+span::after{color:#333}.learn-press-filters>li::after{margin:0 35px;color:#ccc;content:"|"}@media(max-width:767px){.learn-press-filters>li::after{display:none}}.learn-press-filters>li:last-child::after{display:none}.lp-checkout-form__before,.lp-checkout-form__after{width:45%;width:-webkit-calc(50% - 30px);width:-moz-calc(50% - 30px);width:calc(50% - 30px);margin:0 15px 40px 15px}.lp-checkout-form__before .lp-checkout-block h4,.lp-checkout-form__after .lp-checkout-block h4{margin-top:0;margin-bottom:18px;color:#333;font-size:24px;font-weight:600;line-height:1;font-family:var(--wp--preset--font-family--system-font)}@media(max-width:815px){.lp-checkout-form__before,.lp-checkout-form__after{width:100%;margin:0 0 40px 0}}.lp-checkout-form__before{float:left}.lp-checkout-form__before #checkout-order{width:100%}.lp-checkout-form .lp-checkout-form__after{float:right}.lp-checkout-form .lp-checkout-remember{letter-spacing:0;margin-top:0}.lp-checkout-form .lp-checkout-remember label{width:auto;color:#666;font-size:16px;font-weight:300;line-height:26px}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]{position:relative;top:3px;width:19px;height:19px;margin:0 0 0 4px;border:1px solid #ccc;cursor:pointer;-webkit-appearance:none}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]:focus{outline:0}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]:checked::after{position:absolute;top:2px;right:2px;color:#41abec;font-family:"Font Awesome 5 Free";font-size:14px;font-weight:900;line-height:1;content:"\f00c"}.lp-checkout-form .lp-checkout-remember a{color:#666;font-size:16px;font-weight:300;line-height:26px;text-decoration:underline;text-decoration-color:#ccc}.lp-checkout-form .lp-checkout-remember a:hover{color:var(--lp-primary-color);text-decoration-color:var(--lp-primary-color)}.lp-checkout-form .lp-form-fields{padding:0 0 14px 0}.lp-checkout-form .lp-form-fields label{display:block;margin-bottom:10px;font-size:16px}.lp-checkout-form .lp-form-fields input{height:44px;line-height:normal;width:100%;padding:0 15px;border:1px solid #ccc}.lp-checkout-form .rwmb-input input:not([type=checkbox]){width:100%;height:43px;padding:0 22px;border:1px solid #ccc;border-radius:3px;background-color:#fff;font-size:14px;font-weight:300;font-style:italic;line-height:43px}.lp-checkout-form .rwmb-input input:not([type=checkbox]):focus{border-color:var(--lp-primary-color);outline:0;color:#222}.lp-checkout-form .rwmb-input ::placeholder{opacity:1;color:#999}.lp-checkout-form .rwmb-input :-ms-input-placeholder{color:#999}.lp-checkout-form .rwmb-input ::-ms-input-placeholder{color:#999}.lp-checkout-form .rwmb-input input:-webkit-autofill,.lp-checkout-form .rwmb-input input:-webkit-autofill:hover,.lp-checkout-form .rwmb-input input:-webkit-autofill:focus{-webkit-box-shadow:0 0 0 1000px #fff inset;-webkit-text-fill-color:#999 !important}.lp-checkout-form{margin:0 -15px;margin-top:50px}@media(max-width:815px){.lp-checkout-form{display:flex;flex-direction:column-reverse;margin:0}}.lp-checkout-form #btn-checkout-account-switch-to-guest{margin-bottom:60px}.lp-checkout-form .description{float:right}.lp-checkout-form a{color:#41abec}.lp-checkout-form a label{display:inline-block;color:inherit;font-weight:normal;cursor:pointer}.lp-checkout-form a:hover{color:#ffb606}.lp-checkout-form #checkout-account-guest{width:100%;margin-bottom:35px;padding-bottom:19px;border-bottom:1px solid rgba(204,204,204,0.3)}.lp-checkout-form #checkout-account-guest .lp-form-fields,.lp-checkout-form #checkout-account-guest .form-field{margin-bottom:0;padding-bottom:0}.lp-checkout-form div.lp-guest-checkout-output{margin-top:10px;padding:8px 20px;border:2px solid #41abec;border-radius:4px;font-size:16px;transition:all .2s ease}.lp-checkout-form label.lp-guest-checkout-output{margin-top:10px;cursor:pointer;user-select:none}.lp-checkout-form .lp-guest-checkout-notice{margin:30px 0 0 0}.lp-checkout-form .lp-guest-switch-login{margin-top:1em;color:#666;font-size:16px;font-weight:400}.lp-checkout-form input[name=checkout-account-switch-form]{display:none}.lp-checkout-form input[name=checkout-account-switch-form]:not(:checked)+.lp-checkout-block{display:none;overflow:hidden;height:0;margin:0;padding:0;border:0;opacity:0}.lp-checkout-form input[name=checkout-account-switch-form]:not(:checked)+.lp-checkout-block>*{overflow:hidden;height:0}.lp-checkout-form input[name=checkout-account-switch-form]:checked+.lp-checkout-block{display:block;overflow:auto;height:auto}.lp-checkout-form input[name=checkout-account-switch-form][value=guest]:checked ~ #btn-checkout-account-switch-to-guest{display:none}.lp-checkout-form::after{display:block;clear:both;content:""}.lp-checkout-form:focus{outline:0}#checkout-order .lp-checkout-order__inner{padding:0 20px;border:1px solid #ccc;border-radius:4px}#checkout-order table{width:100%;margin:0;border:0}#checkout-order td,#checkout-order th{box-sizing:content-box;border:1px solid rgba(204,204,204,0.3);border-top:0;border-left:0;border-right:0;background:unset;line-height:1;text-align:right;vertical-align:inherit}#checkout-order td:last-child,#checkout-order th:last-child{padding-left:0}#checkout-order .course-name{font-size:16px;font-weight:600;line-height:26px}#checkout-order .course-name a{display:-webkit-box;overflow:hidden;color:#000;-webkit-line-clamp:1;-webkit-box-orient:vertical}#checkout-order .course-name a:hover{color:var(--lp-primary-color)}#checkout-order .col-number{min-width:50px;color:#666;font-size:16px;font-weight:600;line-height:26px;text-align:left}#checkout-order .order-total>th{padding:24px 0 24px 20px}#checkout-order .order-total .col-number{color:#333;font-size:26px}#checkout-order tfoot .cart-subtotal{color:#666;font-size:16px;font-weight:600;line-height:26px}#checkout-order tfoot .cart-subtotal>th{padding:20px 0 17px 20px}#checkout-order tfoot .order-total th{color:#333;font-size:16px;font-weight:600;line-height:26px}#checkout-order tfoot tr:last-child{border-width:0}#checkout-order tfoot tr:last-child td,#checkout-order tfoot tr:last-child th{border-width:0}#checkout-order .course-thumbnail{width:80px;padding:20px 0 18px 13px}#checkout-order .course-thumbnail>img{width:100px;max-width:100% !important;height:auto !important}#checkout-account-register,#checkout-account-login{width:100%;margin-bottom:35px;padding-bottom:19px;border-bottom:1px solid rgba(204,204,204,0.3)}#checkout-account-register .form-field .rwmb-label,#checkout-account-register .form-field .rwmb-input .description,#checkout-account-login .form-field .rwmb-label,#checkout-account-login .form-field .rwmb-input .description{display:none}#checkout-account-register .lp-checkout-remember label,#checkout-account-login .lp-checkout-remember label{display:inline-block}#checkout-account-register .lp-checkout-remember a,#checkout-account-login .lp-checkout-remember a{float:left}#checkout-account-register .lp-checkout-sign-in-link,#checkout-account-register .lp-checkout-sign-up-link,#checkout-account-login .lp-checkout-sign-in-link,#checkout-account-login .lp-checkout-sign-up-link{display:flex;margin:0;color:#666;font-size:16px;font-weight:400}#checkout-account-register .lp-checkout-sign-in-link a,#checkout-account-register .lp-checkout-sign-up-link a,#checkout-account-login .lp-checkout-sign-in-link a,#checkout-account-login .lp-checkout-sign-up-link a{margin-right:5px;color:#41abec;cursor:pointer}#checkout-account-register .lp-checkout-sign-in-link a:hover,#checkout-account-register .lp-checkout-sign-up-link a:hover,#checkout-account-login .lp-checkout-sign-in-link a:hover,#checkout-account-login .lp-checkout-sign-up-link a:hover{color:var(--lp-primary-color)}#checkout-account-register .lp-checkout-sign-in-link a label,#checkout-account-register .lp-checkout-sign-up-link a label,#checkout-account-login .lp-checkout-sign-in-link a label,#checkout-account-login .lp-checkout-sign-up-link a label{display:inline-block;float:left;color:inherit;font-weight:normal;cursor:pointer}#checkout-payment{width:100%;margin-bottom:25px}#checkout-payment h4{margin-bottom:24px}#checkout-payment .secure-connection{float:left;margin-top:5px;color:#999;font-size:12px;font-weight:normal}#checkout-payment .secure-connection i{margin-left:5px;color:#ccc;font-size:18px}@media(max-width:767px){#checkout-payment .secure-connection{margin-top:0}}#checkout-payment .payment-methods{margin:0 0 24px 0;padding:0;list-style:none}#checkout-payment .lp-payment-method{position:relative;margin:0}#checkout-payment .lp-payment-method>label{display:flex;align-items:center}#checkout-payment .lp-payment-method .gateway-input,#checkout-payment .lp-payment-method .gateway-icon{vertical-align:middle}#checkout-payment .lp-payment-method .gateway-icon{max-height:32px}#checkout-payment .lp-payment-method .gateway-input{position:relative;width:20px;height:20px;margin:0 0 0 8px;border:1px solid #ccc;background:#fff;-webkit-appearance:none;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}#checkout-payment .lp-payment-method .gateway-input::before{position:absolute;top:50%;right:50%;width:6px;height:6px;background:#41abec;transform:translate(50%,-50%);-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}#checkout-payment .lp-payment-method .gateway-input:checked::before{content:""}#checkout-payment .lp-payment-method .gateway-input:focus{outline:0}#checkout-payment #checkout-order-action button{width:100%;border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color);font-weight:500}#checkout-payment #checkout-order-action button:hover{border-color:var(--lp-primary-color);opacity:.5;background:var(--lp-primary-color)}#checkout-payment #checkout-order-action button.loading::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.lp-terms-and-conditions{color:#666;font-size:16px;font-weight:300;line-height:26px}.lp-terms-and-conditions a{color:#41abec}.lp-terms-and-conditions a:hover{color:var(--lp-primary-color)}.learn-press-checkout.guest-checkout{display:none}.button-continue-guest-checkout{clear:both}#learn-press-checkout .payment-methods{margin:0;padding:0;list-style:none}#learn-press-checkout .payment-methods .lp-payment-method{margin-bottom:20px}#learn-press-checkout .payment-methods .lp-payment-method>label{display:flex;flex-flow:row nowrap;padding:10px 20px;background:#f5f5f5;line-height:40px;cursor:pointer}#learn-press-checkout .payment-methods .lp-payment-method>label img{vertical-align:middle}#learn-press-checkout .payment-methods .lp-payment-method.selected>label{background:#d4d4d4}#learn-press-checkout .payment-methods .payment-method-form{display:none;padding:15px 20px;border-top:1px solid #ddd;background:#f9f9f9}#learn-press-checkout-login,#learn-press-checkout-register{margin-bottom:1.5em;padding:20px 20px 0 20px;border:1px solid #ddd;background:#fff}#learn-press-order-review,.learn-press-checkout-comment{margin-bottom:20px}#checkout-form-login,#checkout-form-register{_display:none}#checkout-form-login .learn-press-form-register,#checkout-form-login .learn-press-form-login,#checkout-form-register .learn-press-form-register,#checkout-form-register .learn-press-form-login{display:none}#checkout-guest-email{margin:0 0 20px 0}#checkout-guest-email .form-heading{margin:0}#checkout-guest-email #checkout-guest-options{margin:0;list-style:none}#checkout-guest-email #checkout-existing-account,#checkout-guest-email #checkout-new-account{display:none;margin:0}#checkout-guest-email.email-exists #checkout-existing-account{display:block}#checkout-guest-email.email-exists #checkout-new-account{display:none}.lp-list-table{width:100%;margin-bottom:20px}.lp-list-table th,.lp-list-table td{padding:20px;border:0 solid rgba(204,204,204,0.3);border-bottom-width:1px;background:#fff;font-size:16px;line-height:1;text-align:right}@media(max-width:767px){.lp-list-table th,.lp-list-table td{padding:15px}}.lp-list-table thead{box-sizing:border-box;border:1px solid #e5e7f2}.lp-list-table thead tr th{height:60px;border-bottom:0;color:#333;background:#f1f2f8;font-size:18px}.lp-list-table tbody,.lp-list-table tfoot{box-sizing:border-box;border:1px solid rgba(204,204,204,0.3);border-top:0}.lp-list-table tbody tr td,.lp-list-table tbody tr th,.lp-list-table tfoot tr td,.lp-list-table tfoot tr th{height:62px;color:#666;background:#fff;font-size:16px;font-weight:300}.lp-list-table tbody tr td a,.lp-list-table tbody tr th a,.lp-list-table tfoot tr td a,.lp-list-table tfoot tr th a{border-bottom:0;color:#666;text-decoration:none}.lp-list-table tbody tr td a:hover,.lp-list-table tbody tr th a:hover,.lp-list-table tfoot tr td a:hover,.lp-list-table tfoot tr th a:hover{color:var(--lp-primary-color)}.lp-list-table tbody tr .column-status .result-percent,.lp-list-table tfoot tr .column-status .result-percent{font-weight:500}.lp-list-table tbody tr .column-status .lp-label,.lp-list-table tfoot tr .column-status .lp-label{font-weight:600}.lp-list-table tbody tr:nth-child(odd),.lp-list-table tfoot tr:nth-child(odd){background:#f5f5f5}.lp-list-table .list-table-nav td{font-size:14px}.lp-list-table .list-table-nav td.nav-text{text-align:right}.lp-list-table .list-table-nav td.nav-pages{text-align:left}.lp-list-table .list-table-nav td.nav-pages .learn-press-pagination{text-align:left}.lp-list-table .list-table-nav td.nav-pages .page-numbers{margin-bottom:0}.lp-label{display:inline-block;color:#666;font-size:16px;font-weight:300;line-height:1}.learn-press-form .form-fields{margin:0;padding:0;list-style:none}.learn-press-form .form-fields .form-field{margin:0 0 20px 0}.learn-press-form .form-fields .form-field label{display:block;margin:0 0 10px 0}.learn-press-form .form-fields .form-field input[type=text],.learn-press-form .form-fields .form-field input[type=email],.learn-press-form .form-fields .form-field input[type=number],.learn-press-form .form-fields .form-field input[type=password],.learn-press-form .form-fields .form-field textarea{width:100%;padding:8px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.learn-press-form .form-fields .form-field .description{margin-top:10px;font-size:14px;font-style:italic;line-height:1.4}.learn-press-form .form-fields .form-field .asterisk{color:red}.learn-press-form-login,.learn-press-form-register{max-width:600px;margin-left:auto;margin-bottom:60px;margin-right:auto;padding:40px;border:1px solid #eee;border-radius:6px;box-shadow:0 4px 6px -1px rgba(0,0,0,0.1),0 2px 4px -1px rgba(0,0,0,0.06) !important}.learn-press-form-login h3,.learn-press-form-register h3{margin-bottom:20px;font-size:28px;line-height:1.4}.learn-press-form-login .form-fields .form-field label,.learn-press-form-register .form-fields .form-field label{font-size:16px;font-weight:400;user-select:none}.learn-press-form-login .form-fields .form-field input[type=text],.learn-press-form-login .form-fields .form-field input[type=password],.learn-press-form-login .form-fields .form-field input[type=tel],.learn-press-form-login .form-fields .form-field input[type=url],.learn-press-form-login .form-fields .form-field input[type=number],.learn-press-form-register .form-fields .form-field input[type=text],.learn-press-form-register .form-fields .form-field input[type=password],.learn-press-form-register .form-fields .form-field input[type=tel],.learn-press-form-register .form-fields .form-field input[type=url],.learn-press-form-register .form-fields .form-field input[type=number]{height:42px;border:1px solid #bbb;border-radius:4px;line-height:42px}.learn-press-form-login .form-fields .form-field input[type=text]:focus,.learn-press-form-login .form-fields .form-field input[type=password]:focus,.learn-press-form-login .form-fields .form-field input[type=tel]:focus,.learn-press-form-login .form-fields .form-field input[type=url]:focus,.learn-press-form-login .form-fields .form-field input[type=number]:focus,.learn-press-form-register .form-fields .form-field input[type=text]:focus,.learn-press-form-register .form-fields .form-field input[type=password]:focus,.learn-press-form-register .form-fields .form-field input[type=tel]:focus,.learn-press-form-register .form-fields .form-field input[type=url]:focus,.learn-press-form-register .form-fields .form-field input[type=number]:focus{border:0;outline:2px solid transparent !important;outline-offset:2px;box-shadow:0 0 0 2px #666 !important}.learn-press-form-login .form-fields .form-field.required label::after,.learn-press-form-register .form-fields .form-field.required label::after{content:" *";display:inline}.learn-press-form-login form[name=learn-press-login]>p>label,.learn-press-form-register form[name=learn-press-login]>p>label{color:#666;font-size:16px;cursor:pointer;user-select:none}.learn-press-form-login form[name=learn-press-login]>p>a,.learn-press-form-register form[name=learn-press-login]>p>a{color:#666;font-size:16px;line-height:1}.learn-press-form-login form[name=learn-press-login]>p:last-child,.learn-press-form-register form[name=learn-press-login]>p:last-child{margin-bottom:0}.learn-press-form-login button[type=submit],.learn-press-form-register button[type=submit]{width:100%;height:50px;border-radius:3px;outline:0;color:#fff;background:var(--lp-primary-color);box-shadow:none;font-size:16px;line-height:1;vertical-align:middle;text-decoration:none}.required label{font-weight:bold}.required label:after{content:" *";display:inline}.lp-password-input{display:flex;flex-direction:column;justify-content:center;position:relative}.lp-password-input input[type=password]{padding-left:2.5rem}.lp-password-input input::-ms-reveal{display:none}.lp-password-input .lp-show-password-input{position:absolute;top:8px;left:10px;cursor:pointer}.lp-password-input .lp-show-password-input::after{font-family:"Font Awesome 5 Free";font-weight:900;content:"\f06e"}.lp-password-input .lp-show-password-input.display-password::after{color:#585858;content:"\f070"}.form-desc{font-size:smaller;font-style:italic}.become-teacher-form{width:90%;max-width:500px;margin:0 auto}.become-teacher-form .form-field input[type=text],.become-teacher-form .form-field input[type=email],.become-teacher-form .form-field input[type=number],.become-teacher-form .form-field input[type=password]{width:100%}body div.entry-content>div.learnpress{--responsive--aligndefault-width:100%;max-width:var(--lp-content-width,100%)}.lp-user-profile{position:relative;background:#fff}.lp-user-profile .lp-user-profile-avatar img{position:relative;width:100%;height:auto;border-radius:unset;display:block}.lp-user-profile .lp-user-profile-avatar+.lp-user-profile-socials{margin-top:10px;margin-bottom:5px}.lp-user-profile .lp-user-profile-socials{display:flex;position:relative;z-index:1;justify-content:center;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.lp-user-profile .lp-user-profile-socials a{display:inline-flex;align-items:center;justify-content:center;width:35px;height:35px;margin:0 7px;border:1px solid #cfcfcf;color:#666;background:#fff;font-size:14px;line-height:35px;text-align:center;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.lp-user-profile .lp-user-profile-socials a:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.lp-user-profile .wrapper-profile-header{color:#fff;background:var(--lp-secondary-color);position:relative}@media(max-width:990px){.lp-user-profile .wrapper-profile-header .lp-profile-content-area{min-height:inherit;padding:50px 15px}.lp-user-profile .wrapper-profile-header .lp-profile-left{float:right;position:static}.lp-user-profile .wrapper-profile-header .lp-profile-right{float:left;width:calc(100% - 270px);margin-right:0}}@media(max-width:768px){.lp-user-profile .wrapper-profile-header .lp-profile-left{width:220px}.lp-user-profile .wrapper-profile-header .lp-profile-right{width:calc(100% - 220px)}.lp-user-profile .wrapper-profile-header .lp-user-profile-socials{margin-left:-5px;margin-right:-5px}.lp-user-profile .wrapper-profile-header .lp-user-profile-socials a{width:36px;height:36px;margin:0 5px;line-height:36px}}@media(max-width:500px){.lp-user-profile .wrapper-profile-header .lp-profile-left{float:none;margin:0 auto}.lp-user-profile .wrapper-profile-header .lp-profile-right{width:100%;padding-top:30px;text-align:center}}.lp-user-profile .wrapper-profile-header::before{left:100%;right:auto}.lp-user-profile .wrapper-profile-header::after{right:100%;left:auto}.lp-user-profile .lp-profile-content-area{position:relative;padding-top:50px;padding-bottom:50px;display:flex;align-items:center}@media(max-width:650px){.lp-user-profile .lp-profile-content-area{flex-direction:column}.lp-user-profile .lp-profile-content-area .lp-profile-right{text-align:center;width:100%;padding:50px 15px 0}}.lp-user-profile .lp-profile-left{min-width:270px;max-width:270px;padding:5px;border:2px solid #eaeaea;border-radius:3px}.lp-user-profile .lp-profile-right{padding-left:15px;padding-right:35px}.lp-user-profile .lp-profile-username{padding-bottom:10px;font-size:18px;font-weight:500;text-transform:capitalize}.lp-user-profile .lp-profile-username::before,.lp-user-profile .lp-profile-username::after{content:"";width:30px;height:1px;background-color:white;display:inline-block;vertical-align:middle;margin:0}.lp-user-profile .lp-profile-username::before{margin-left:5px}.lp-user-profile .lp-profile-username::after{margin-right:5px}.lp-user-profile .lp-profile-user-bio{font-size:16px;font-weight:300;line-height:26px}.lp-user-profile #profile-sidebar{float:right;width:270px;margin-top:0;border:1px solid rgba(0,0,0,0.1);border-top:0;background:#fff;margin-top:58px}@media(max-width:990px){.lp-user-profile #profile-sidebar{width:100%}.lp-user-profile #profile-sidebar .lp-user-profile-avatar{max-width:150px}}.lp-user-profile #profile-nav .lp-profile-nav-tabs{margin:0;padding:0;list-style:none}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li{position:relative;margin:0;border-top:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li a{display:block;padding:0 20px;color:#333;font-size:16px;font-weight:500;line-height:50px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a{padding:0 52px 0 20px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a>i{display:inline-block;position:absolute;right:24px;width:28px;color:var(--lp-primary-color);font-size:12px;line-height:53px;text-align:right}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a::after{float:left;margin-left:4px;color:#999;font-family:"Font Awesome 5 Free";font-size:10px;font-weight:900;content:"\f054"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li{margin:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li a{border-bottom:1px solid #f9f9f9}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li a:hover{color:var(--lp-primary-color);background:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li:hover>a i{color:var(--lp-primary-color);background:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active,.lp-user-profile #profile-nav .lp-profile-nav-tabs>li:hover{background:var(--lp-primary-color)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active>a::after,.lp-user-profile #profile-nav .lp-profile-nav-tabs>li:hover>a::after{content:"\f053"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active a{padding-right:52px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.wishlist>a::before{position:absolute;right:25px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:12px;font-weight:900;content:"\f004"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.wishlist:hover a::before{color:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.logout>a::after{display:none}.lp-user-profile #profile-nav .lp-profile-nav-tabs li>a{box-sizing:border-box;height:50px}.lp-user-profile #profile-nav .lp-profile-nav-tabs li>ul{display:none;position:absolute;z-index:1000;top:0;right:100%;min-width:150px;margin:0;padding:0;background:#fff;box-shadow:0 15px 20px 0 rgba(0,0,0,0.05);list-style:none}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>a,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>a{color:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>a i,.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>a::after,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>a i,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>a::after{color:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>ul{display:block}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul{position:relative;right:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul .active{background:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul .active>a{color:#ffb606}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul .active>a i{color:#ffb606}@media(max-width:990px){.lp-user-profile #profile-nav{overflow-x:scroll;border-top:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs{width:max-content}.lp-user-profile #profile-nav .lp-profile-nav-tabs::after{display:table;clear:both;content:""}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li{float:right;border:0;border-left:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a{height:auto;padding:0 45px 0 20px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a::after{margin-right:10px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.has-child a::after{content:"\f077"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active a{padding-right:45px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active a::after{content:"\f078"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul{display:none;width:max-content;transform:translateX(20%)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul::after{display:table;clear:both;box-shadow:0 0;content:""}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul li{float:right;border-left:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul li:last-child{border-left:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul li a{padding:0 10px}.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover ul{display:none !important}.lp-user-profile #profile-nav .lp-profile-nav-tabs li:not(.has-child)>a::after{display:none}}@media(max-width:560px){.lp-user-profile #profile-nav .lp-profile-nav-tabs>li{max-width:80px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a{font-size:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a::after{margin-right:0}}.lp-user-profile .lp-profile-content{float:left;width:calc(100% - 300px);margin-bottom:60px;padding-top:58px}@media(max-width:990px){.lp-user-profile .lp-profile-content{width:100%}}@media(max-width:767px){.lp-user-profile .lp-profile-content .learn-press-tabs__nav{display:block;width:100%;border:0}.lp-user-profile .lp-profile-content .learn-press-tabs__nav::after{display:table;clear:both;content:""}.lp-user-profile .lp-profile-content .learn-press-tabs__tab{float:right;border-left:0}.lp-user-profile .lp-profile-content .learn-press-tabs__tab label{padding-left:25px;padding-right:25px}.lp-user-profile .lp-profile-content .profile-orders{overflow-x:scroll}}.lp-user-profile .lp-profile-content .course-categories,.lp-user-profile .lp-profile-content .course-instructor{margin-bottom:14px}.lp-user-profile .lp-profile-content .course-categories{padding:0}.lp-user-profile .lp-profile-content .lp-button{display:block;margin:0 auto 52px auto;padding:13px 34px;border-color:var(--lp-secondary-color);font-size:14px;font-weight:500;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.lp-user-profile .lp-profile-content .lp-button:hover{border-color:var(--lp-primary-color)}.lp-user-profile ul.learn-press-courses .course{margin:0 0 40px 0}.lp-user-profile .profile-orders .profile-heading{display:none}.lp-user-profile .profile-orders table{margin-top:0}.lp-user-profile .profile-orders .column-order-actions a{margin-left:6px;color:black;text-decoration:underline;font-weight:500}.lp-user-profile .profile-orders .column-order-actions a:hover,.lp-user-profile .profile-orders .column-order-actions a:focus{color:var(--lp-primary-color)}.lp-user-profile #dashboard-general-statistic{margin-bottom:55px;padding-bottom:20px;border-bottom:1px solid #ddd}.lp-user-profile .dashboard-general-statistic__row{display:flex;margin:0 -15px;justify-content:center;flex-wrap:wrap}.lp-user-profile .dashboard-general-statistic__row .statistic-box{min-width:200px;max-width:270px;margin:0 15px 40px 15px;padding:15px 20px;border:1px solid #ccc;border-radius:4px;background:#f9fafc;text-align:center}@media(max-width:990px){.lp-user-profile .dashboard-general-statistic__row .statistic-box{width:45%}}@media(max-width:767px){.lp-user-profile .dashboard-general-statistic__row .statistic-box{width:100%;margin:0 15px 15px}}.lp-user-profile .dashboard-general-statistic__row .statistic-box:hover{background:#eaeaea}.lp-user-profile .dashboard-general-statistic__row[data-col="2"] .statistic-box{width:50%}.lp-user-profile .dashboard-general-statistic__row[data-col="4"] .statistic-box{width:25%}.lp-user-profile .dashboard-general-statistic__row[data-col="5"] .statistic-box{width:20%}.lp-user-profile .statistic-box .statistic-box__text{margin:0 0 7px 0;padding:0;color:#666;font-size:18px;font-weight:400;line-height:1}.lp-user-profile .statistic-box .statistic-box__number{color:#333;font-size:18px;font-weight:500;line-height:1}.lp-user-profile .profile-courses>h3{margin-top:0;margin-bottom:36px;color:#333;font-size:30px;font-weight:600;line-height:1;text-transform:capitalize}.lp-profile-content table.lp-list-table{border-spacing:0;border-top:1px solid #ccc;border-right:1px solid #ccc;margin-bottom:40px}.lp-profile-content table.lp-list-table tr th,.lp-profile-content table.lp-list-table tr td{border-left:1px solid #ccc;border-bottom:1px solid #ccc;text-align:center}.lp-profile-content table.lp-list-table tr td a{color:var(--wp--preset--color--foreground);font-weight:400}.lp-profile-content table.lp-list-table tr td a:hover{color:var(--lp-primary-color)}.lp-profile-content #profile-content-order-details h3{margin-top:0;font-size:30px;line-height:1.5;font-weight:500;margin-bottom:15px;font-family:var(--wp--preset--font-family--system-font)}.profile-basic-information .form-field,form[name=profile-change-password] .form-field{margin:0 10px 24px 10px}.profile-basic-information .form-field>label,form[name=profile-change-password] .form-field>label{margin:0 0 12px 0;color:#333;font-size:16px;font-weight:500;font-style:italic}.profile-basic-information .form-field .form-field-input input,form[name=profile-change-password] .form-field .form-field-input input{height:43px;padding:8px 20px;font-weight:400}.profile-basic-information .form-field .form-field-input input[type=password],form[name=profile-change-password] .form-field .form-field-input input[type=password]{padding:8px 20px}.profile-basic-information .form-field .form-field-input textarea,form[name=profile-change-password] .form-field .form-field-input textarea{padding:9px 20px 16px 20px;font-weight:300;line-height:24px}.profile-basic-information .form-field .form-field-input input,.profile-basic-information .form-field .form-field-input textarea,form[name=profile-change-password] .form-field .form-field-input input,form[name=profile-change-password] .form-field .form-field-input textarea{border:1px solid #ccc;color:#999;font-size:14px;font-style:italic}.profile-basic-information .form-field .form-field-input input:focus,.profile-basic-information .form-field .form-field-input textarea:focus,form[name=profile-change-password] .form-field .form-field-input input:focus,form[name=profile-change-password] .form-field .form-field-input textarea:focus{border-color:var(--lp-primary-color);outline:0;color:#222}.profile-basic-information .form-field .form-field-input ::placeholder,form[name=profile-change-password] .form-field .form-field-input ::placeholder{opacity:1;color:#999}.profile-basic-information .form-field .form-field-input :-ms-input-placeholder,form[name=profile-change-password] .form-field .form-field-input :-ms-input-placeholder{color:#999}.profile-basic-information .form-field .form-field-input ::-ms-input-placeholder,form[name=profile-change-password] .form-field .form-field-input ::-ms-input-placeholder{color:#999}.profile-basic-information .form-field .form-field-input .description,form[name=profile-change-password] .form-field .form-field-input .description{margin-top:15px}@media(max-width:767px){.profile-basic-information .form-field,form[name=profile-change-password] .form-field{margin:0 0 24px 0}}.profile-basic-information .form-field__50,form[name=profile-change-password] .form-field__50{float:right;width:calc(50% - 20px);margin-left:10px}@media(max-width:767px){.profile-basic-information .form-field__50,form[name=profile-change-password] .form-field__50{float:unset;width:100%;margin:0 0 24px 0}}.profile-basic-information .form-field__clear,form[name=profile-change-password] .form-field__clear{clear:both}.profile-basic-information button,form[name=profile-change-password] button{padding:16px 24px;border:0;border-radius:3px;color:#fff;background:var(--lp-primary-color);font-size:16px;font-weight:400;line-height:1}.profile-basic-information button:hover,form[name=profile-change-password] button:hover{opacity:.5;background:var(--lp-primary-color)}.profile-basic-information p,form[name=profile-change-password] p{margin:0}#learn-press-profile-basic-information .form-fields::after{display:block;clear:both;content:""}@media(max-width:767px){#learn-press-profile-basic-information .form-fields{margin:0}}#learn-press-profile-basic-information button[type=submit]{padding:0 15px;height:40px;line-height:40px;border:0;display:inline-flex;align-items:center;justify-content:center;background-color:var(--lp-primary-color);color:white;font-size:16px;font-weight:400;-webkit-transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;transition:.3s;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}#learn-press-profile-basic-information button[type=submit]:hover{opacity:.5;background-color:var(--lp-primary-color)}.recover-order__title{margin-bottom:5px}.recover-order__description{margin-bottom:20px;color:#999;font-size:.8em;font-style:italic}div.order-recover{display:flex}div.order-recover>.button-recover-order{margin:0;margin-right:20px;flex:0 0 auto}div.order-recover>.button-recover-order.loading::before{display:inline-block;margin-left:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";animation:lp-rotating 1s linear infinite}div.order-recover input[type=text]{width:100%;height:43px;margin-left:10px;padding:0 22px;border:1px solid #ccc;border-radius:3px;background-color:#fff;font-size:14px;font-weight:300;font-style:italic;line-height:43px;flex:1 1 auto}.learn-press-profile-course__progress .lp_profile_course_progress{border:1px solid #eee;border-top:0;overflow-x:auto}.learn-press-profile-course__progress .lp_profile_course_progress__item{display:grid;align-items:center;padding:15px;border-top:1px solid #eee;grid-template-columns:90px 1fr 80px 190px 140px;column-gap:20px}.learn-press-profile-course__progress .lp_profile_course_progress__item div img{max-width:60px;height:auto}@media(max-width:575px){.learn-press-profile-course__progress .lp_profile_course_progress__item div img{max-width:100%}}@media(max-width:575px){.learn-press-profile-course__progress .lp_profile_course_progress__item{display:block}}.learn-press-profile-course__progress .lp_profile_course_progress__header{background-color:#eee}@media(max-width:575px){.learn-press-profile-course__progress .lp_profile_course_progress__header{display:flex;overflow-x:auto;white-space:nowrap;justify-content:flex-end}}.lp_profile_course_progress__nav button.loading::before{display:inline-block;margin-left:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.entry-content ul.learn-press-profile-course__tab__inner{padding:0}.content ul.learn-press-courses{margin-right:-15px;margin-left:-15px}.content ul.learn-press-courses[data-layout=list]{margin:0}.learn-press-profile-course__tab__inner{display:flex;margin:40px 0 0 0 !important;padding:0 !important;background:#eee;list-style:none !important}.learn-press-profile-course__tab__inner>li{list-style:none;margin:0 !important}.learn-press-profile-course__tab__inner>li:hover{cursor:pointer}.learn-press-profile-course__tab__inner a{display:inline-block;padding:15px 30px;font-weight:600;position:relative}.learn-press-profile-course__tab__inner a.active{color:var(--lp-primary-color);background:#fff}.learn-press-profile-course__tab__inner a.active::before{content:"";height:4px;width:100%;background-color:var(--lp-primary-color);position:absolute;top:0;right:0;left:auto}.learn-press-course-tab-filters .learn-press-filters{margin-top:20px;margin-right:0;padding:0;list-style:none}.learn-press-course-tab-filters .learn-press-filters a.active{color:var(--lp-primary-color)}.lp-profile-content ul{list-style:none !important;padding:0 !important}.learnpress_avatar__form label{display:inline-block}.learnpress_avatar__form input[type=file]{display:none}.learnpress_avatar__form__upload{display:flex;width:200px;height:200px;border:1px dashed #ccc;border-radius:3px;background-color:#fafafa;font-size:14px;font-weight:300;font-style:italic;line-height:43px;text-align:center;cursor:pointer;align-items:center;justify-content:center}.learnpress_avatar__form__upload div{line-height:1.4}.learnpress_avatar__button--loading::before{display:inline-block;margin-left:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}button.learnpress_avatar__button{height:40px;padding:0 15px;border:0;background:var(--lp-primary-color);color:white;margin-top:15px;border-radius:3px}button.learnpress_avatar__button+button{margin-right:15px;margin-left:0}#primary .learn-press-courses[data-size="3"] .course{width:50%}body.learnpress .learn-press-tabs .learn-press-tabs__tab,body.learnpress .attachment-recent-works-thumbnail{border-radius:0}#learn-press-course-tabs.show-all .course-tab-panel{margin-bottom:40px}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .course-tab-panels .course-tab-panel:nth-child(1){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .learn-press-nav-tabs .course-nav:nth-child(1){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .learn-press-nav-tabs .course-nav:nth-child(1) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .course-tab-panels .course-tab-panel:nth-child(2){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .learn-press-nav-tabs .course-nav:nth-child(2){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .learn-press-nav-tabs .course-nav:nth-child(2) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .course-tab-panels .course-tab-panel:nth-child(3){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .learn-press-nav-tabs .course-nav:nth-child(3){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .learn-press-nav-tabs .course-nav:nth-child(3) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .course-tab-panels .course-tab-panel:nth-child(4){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .learn-press-nav-tabs .course-nav:nth-child(4){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .learn-press-nav-tabs .course-nav:nth-child(4) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .course-tab-panels .course-tab-panel:nth-child(5){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .learn-press-nav-tabs .course-nav:nth-child(5){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .learn-press-nav-tabs .course-nav:nth-child(5) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .course-tab-panels .course-tab-panel:nth-child(6){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .learn-press-nav-tabs .course-nav:nth-child(6){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .learn-press-nav-tabs .course-nav:nth-child(6) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .course-tab-panels .course-tab-panel:nth-child(7){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .learn-press-nav-tabs .course-nav:nth-child(7){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .learn-press-nav-tabs .course-nav:nth-child(7) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .course-tab-panels .course-tab-panel:nth-child(8){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .learn-press-nav-tabs .course-nav:nth-child(8){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .learn-press-nav-tabs .course-nav:nth-child(8) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .course-tab-panels .course-tab-panel:nth-child(9){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .learn-press-nav-tabs .course-nav:nth-child(9){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .learn-press-nav-tabs .course-nav:nth-child(9) label{color:var(--lp-primary-color);background:#fff}.course-tab-panels .course-tab-panel{padding-top:30px}.course-tab-panel{display:none}.course-tab-panel.active{display:block}.course-tab-panel .course-description{color:#666;font-size:16px;font-weight:300;line-height:26px}.course-tab-panel .course-description h4{margin-top:0;margin-bottom:1.125rem;color:#333;font-size:18px;font-weight:500}.course-tab-panel .course-description p{line-height:inherit}.course-tab-panel .course-description img{max-width:100%;height:auto;vertical-align:middle}.course-tab-panel .lp-course-author{display:flex;margin-bottom:40px}@media(max-width:767px){.course-tab-panel .lp-course-author{flex-direction:column}}.course-tab-panel .lp-course-author .course-author__pull-left{margin-left:30px;text-align:center;align-items:center}@media(max-width:767px){.course-tab-panel .lp-course-author .course-author__pull-left{margin-left:0;margin-bottom:30px}}.course-tab-panel .lp-course-author img{width:50px;height:50px;margin-bottom:20px;border-radius:50%;object-fit:cover;object-position:center}.course-tab-panel .lp-course-author .course-author__pull-right{flex:1}@media(max-width:767px){.course-tab-panel .lp-course-author .course-author__pull-right{width:100%;text-align:center}}.course-tab-panel .lp-course-author .author-title{margin-bottom:18px}.course-tab-panel .lp-course-author .author-title a{color:#333;box-shadow:none;font-size:18px;font-weight:500;text-transform:capitalize}.course-tab-panel .lp-course-author .author-title a:hover{color:var(--lp-primary-color)}.course-tab-panel .lp-course-author .author-description{color:#666;font-size:16px;font-weight:300;line-height:26px}.course-tab-panel .lp-course-author .author-socials{display:grid;grid-template-columns:repeat(4,33px);gap:10px;justify-content:center}.course-tab-panel .lp-course-author .author-socials>a{display:inline-block;width:33px;height:33px;margin:0;border:1px solid #ededed;border-radius:50%;color:#878787;box-shadow:none;font-size:14px;line-height:33px;text-align:center;vertical-align:middle;transition:all .3s}.course-tab-panel .lp-course-author .author-socials>a:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.course-tab-panel .lp-course-author .author-socials .fa-googleplus::before{content:"\f0d5"}.course-summary div.lp-list-co-instructor{display:grid;grid-template-columns:repeat(2,1fr);gap:40px}.course-summary div.lp-list-co-instructor__item{display:flex;column-gap:30px}@media(max-width:767px){.course-summary div.lp-list-co-instructor__item{align-items:center;flex-direction:column;padding:0 15px;column-gap:0;row-gap:10px}}.course-summary div.lp-list-co-instructor__avatar>img{width:100%;max-width:96px;border-radius:999px}.course-summary div.lp-list-co-instructor__bio{flex:1}.course-summary div.lp-list-co-instructor__bio__top>a{font-size:18px;font-weight:600}.course-summary div.lp-list-co-instructor__bio__description{font-size:1rem}.course-summary .course-price{margin-bottom:10px}.course-summary .course-price .origin-price,.course-summary .course-price .price{vertical-align:middle}.course-summary .course-price .origin-price{margin-left:10px;font-size:18px;font-style:italic;text-decoration:line-through}.course-summary .course-price .price{font-size:24px}.course-summary .course-summary-sidebar .lp-course-buttons{margin-bottom:20px}.course-summary .course-featured-review .featured-review__title{margin-top:0;margin-bottom:6px;font-size:1.2rem;font-weight:500}.course-summary .course-featured-review .featured-review__stars{padding-bottom:12px;color:var(--lp-primary-color);font-size:16px}.course-summary .course-featured-review .featured-review__content{position:relative;color:#666;font-size:1rem;font-style:italic;line-height:24px}.course-summary .course-featured-review .featured-review__content::after{position:absolute;top:-42px;left:-15px;color:rgba(102,102,102,0.1);font-family:Arial;font-size:180px;font-weight:700;font-style:normal;content:"‘‘";transform:rotate(-180deg)}.course-summary .course-tags a{display:inline-block;padding:3px 5px;border-radius:4px;color:#fff;background:#9aa5ab;font-size:12px;line-height:1}.edit-content{margin-right:5px}ul.learn-press-nav-tabs{display:flex;margin:0;padding:0;border:1px solid rgba(204,204,204,0.3);border-bottom:0;background:#f1f2f8;list-style:none}ul.learn-press-nav-tabs .course-nav{float:right;position:relative;margin:0;border-left:1px solid rgba(204,204,204,0.3);border-bottom:1px solid rgba(204,204,204,0.3);list-style:none}ul.learn-press-nav-tabs .course-nav:first-child.active::after{position:absolute;top:-1px;right:-1px;width:1px;height:100%;background:#fff;content:""}ul.learn-press-nav-tabs .course-nav:last-child{border-left:0}ul.learn-press-nav-tabs .course-nav:last-child.active::after{position:absolute;top:-1px;left:-2px;width:2px;height:100%;background:#fff;content:""}ul.learn-press-nav-tabs .course-nav.active{border-bottom:0}ul.learn-press-nav-tabs .course-nav.active::before{position:absolute;top:-1px;right:0;width:100%;height:4px;background:var(--lp-primary-color);content:""}ul.learn-press-nav-tabs .course-nav.active label{color:var(--lp-primary-color);background-color:white}ul.learn-press-nav-tabs .course-nav a{display:inline-block;padding:10px 20px;border-bottom:0;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}ul.learn-press-nav-tabs .course-nav a:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}ul.learn-press-nav-tabs[data-tabs] .course-nav{flex:1}ul.learn-press-nav-tabs[data-tabs] .course-nav a{width:100%;text-align:center}ul.learn-press-nav-tabs::after{display:block;clear:both;content:""}@media(max-width:767px){ul.learn-press-nav-tabs{display:grid;grid-template-columns:repeat(2,1fr);max-height:none}}.course-item-popup #tab-curriculum{display:block}.course-curriculum ul.curriculum-sections{position:relative;z-index:499;margin:0;padding:0;list-style:none}.course-curriculum ul.curriculum-sections .closed .section-item__loadmore{display:none}.course-curriculum ul.curriculum-sections .section{margin:0;padding:0;flex-wrap:wrap}.course-curriculum ul.curriculum-sections .section:last-child{padding:0}.course-curriculum ul.curriculum-sections .section.section-empty .section-header{margin-bottom:20px}.course-curriculum ul.curriculum-sections .section.section-empty .learn-press-message{margin-left:15px;margin-right:15px}.course-curriculum ul.curriculum-sections .section-title.c+.section-desc{display:block}.course-curriculum ul.curriculum-sections .section-title.c span.show-desc::before{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg);top:0}.course-curriculum ul.curriculum-sections .item-meta.duration{background:#d9e0f1}.course-curriculum .section-item__loadmore{display:flex;justify-content:center;align-items:center}.course-curriculum .section-item__loadmore button{display:inline-flex;margin-top:10px;margin-left:auto;margin-right:auto;padding:10px 20px;border:1px solid #ccc;border-radius:4px;outline:0;color:#222;background:#f7f7f7;box-shadow:none;font-weight:500;justify-content:center;align-items:center;cursor:pointer;font-size:1rem;font-family:sans-serif}.course-curriculum .section-item__loadmore.loading button::before{display:inline-block;margin-left:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.course-curriculum .section-header{display:table;width:100%;padding:0 0 26px 0;border-bottom:0;border-bottom:1px solid #d9e0f1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-curriculum .section-header .section-title,.course-curriculum .section-header .section-desc{margin:0}.course-curriculum .section-header span.show-desc{display:inline-block;position:absolute;top:50%;left:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-header span.show-desc::before{font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f107"}.course-curriculum .section-header span.show-desc:hover::before{border-top-color:#ccc}.course-curriculum .section-header .section-desc{margin:0;margin-top:10px;font-size:14px;line-height:21px;color:#999;font-style:italic}.course-curriculum .section-header .section-meta{display:block;padding-top:17px;padding-bottom:15px;font-size:14px;text-align:left;vertical-align:middle;white-space:nowrap}.course-curriculum .section-item{width:100%}.course-curriculum .section-content{margin:0 0 15px 0;padding:0;list-style:none}.course-curriculum .section-content .course-item-meta{display:table-cell;padding:10px 0;text-align:left;vertical-align:middle;white-space:nowrap}.course-curriculum .section-content .course-item-meta .item-meta{display:inline-block;margin-right:14px;border-radius:3px;color:#fff;font-size:14px;line-height:23px;text-align:center;vertical-align:middle;padding:0 8px}.course-curriculum .section-content .course-item-meta .item-meta.final-quiz{background:#14c4ff}.course-curriculum .section-content .course-item-meta .item-meta.trans{padding:0}.course-curriculum .section-content .course-item-meta .count-questions{background:#9672cf}.course-curriculum .section-content .course-item-meta .duration{background:silver}.course-curriculum .section-content .course-item-meta .course-item-status{padding:0;color:#999;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-curriculum .section-content .course-item-meta .course-item-status::before{font-family:"Font Awesome 5 Free";font-size:14px;font-weight:900;vertical-align:middle;text-transform:lowercase;content:"\f00c"}.course-curriculum .section-content .course-item-preview{font-style:normal;padding:0}.course-curriculum .section-content .course-item-preview::before{color:#fff;padding:0 8px;background:#00adff;display:inline-flex;align-items:center;justify-content:center;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;vertical-align:baseline;content:attr(data-preview)}.course-curriculum .course-item{display:flex;position:relative;margin:0 0 2px 0;padding:0 30px 0 15px;background:rgba(241,242,248,0.4);font-size:14px;transition:padding-right linear .15s}@media(max-width:767px){.course-curriculum .course-item{padding:0 15px 0 0}}.course-curriculum .course-item>span{display:flex;width:28px;color:#666;font-size:16px;font-weight:300;align-items:center}.course-curriculum .course-item .section-item-link{display:table;padding-left:15px;padding-right:0;border-bottom:0;outline:0;box-shadow:none;line-height:1.5;color:#777;text-decoration:none}.course-curriculum .course-item .section-item-link:hover .item-name{color:var(--lp-primary-color)}.course-curriculum .course-item .section-item-link::before{display:table-cell;display:table-cell;right:0;width:20px;padding:15px 0;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:18px;font-weight:400;vertical-align:middle;transition:right linear .15s}.course-curriculum .course-item .item-icon,.course-curriculum .course-item .item-name{display:table-cell;padding:17px 16px;color:#333;font-size:16px;font-weight:600;vertical-align:middle}.course-curriculum .course-item .item-icon::before{font-size:18px}.course-curriculum .course-item .item-icon.icon-lock{float:left;margin-top:15px}.course-curriculum .course-item.course-item-lp_quiz .section-item-link::before{content:"\f059"}.course-curriculum .course-item.course-item-lp_lesson .section-item-link::before{content:"\f15b"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-video .section-item-link::before{content:"\f03d"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-audio .section-item-link::before{content:"\f028"}.course-curriculum .course-item.item-locked .course-item-status::before{color:var(--lp-secondary-color);content:"\f023"}.course-curriculum .course-item.has-status{padding-top:1px}.course-curriculum .course-item.has-status.status-completed .course-item-status::before,.course-curriculum .course-item.has-status.status-evaluated .course-item-status::before{color:#3bb54a}.course-curriculum .course-item.has-status.item-failed .course-item-status::before,.course-curriculum .course-item.has-status.failed .course-item-status::before{border-color:#f02425;color:#f02425;content:"\f00d"}.course-curriculum .course-item::before{position:absolute;top:50%;right:0;width:3px;height:0;background:#00adff;content:"";transition:height linear .15s,top linear .15s}.course-curriculum .course-item.current{padding-right:10px;background:#f9f9f9}.course-curriculum .course-item.current a::before{right:10px}.course-curriculum .course-item.current::before{top:0;height:100%}.course-curriculum .section-left{vertical-align:top}.course-curriculum .section-left .section-title{padding:0;color:#666;font-size:1.4rem;letter-spacing:0;text-transform:capitalize;display:block}.course-curriculum .curriculum-more__button{display:flex;width:100%;margin-top:20px;margin-bottom:20px;padding:10px 0;border:0;outline:0;color:#fff;background:#333;box-shadow:none;justify-content:center;align-items:center;cursor:pointer;font-size:1rem;font-family:sans-serif}.course-curriculum .curriculum-more__button.loading::before{display:inline-block;margin-left:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}body.course-item-popupx{overflow:hidden;_opacity:0}body.course-item-popupx #learn-press-course-curriculum{overflow:auto;position:fixed;z-index:9999;top:32px;bottom:0;right:0;width:400px;border-left:1px solid #ddd;background:#fff}body.course-item-popupx #learn-press-course-curriculum .section-header{padding:0 15px}body.course-item-popupx #learn-press-course-curriculum .section-header .section-desc{margin:-10px 0 5px}body.course-item-popupx #learn-press-course-curriculum .course-item{padding-left:15px;padding-right:15px}body.course-item-popupx #learn-press-course-curriculum .course-item a::before{right:15px}body.course-item-popupx #learn-press-content-item{overflow:hidden;position:fixed;z-index:9999;top:32px;left:0;bottom:0;right:400px;background:#fff}body.course-item-popupx #learn-press-content-item .content-item-wrap{max-width:900px;margin:10px auto}body.course-item-popupx #learn-press-content-item .course-item-title{font-size:1.4rem}body.course-item-popupx #learn-press-content-item .content-question-summary .review-heading{text-align:center}body.course-item-popupx #learn-press-content-item .content-question-summary .question-title{margin-bottom:10px;font-size:1.2rem}body.course-item-popupx #content-item-nav{position:fixed;z-index:99999;left:0;bottom:0;right:400px;height:60px;border-top:1px solid #ddd;background:#f5f5f5}body.course-item-popupx #content-item-nav .content-item-nav-wrap{max-width:900px;margin:10px auto}body.course-item-popupx #content-item-nav button{height:40px;padding:0 20px;line-height:40px}body.course-item-popupx .comment-form-textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body.course-item-popupx.wpadminbar #learn-press-course-curriculum,body.course-item-popupx.wpadminbar #learn-press-content-item{top:92px}body.course-item-popupx.wpadminbar .content-item-description{margin-bottom:20px}body.course-item-popupx .content-item-summary{margin-bottom:50px}body.course-item-popupx .content-item-summary>h3{margin-bottom:20px}body.course-item-popupx .content-item-summary.content-item-video .entry-video{position:absolute;top:0;right:0;width:100%;background:#000;line-height:1}body.course-item-popupx .content-item-summary.content-item-video .entry-video iframe{width:100%;max-width:900px;margin-bottom:0;vertical-align:top}body.course-item-popupx .learn-press-content-protected-message{margin-bottom:50px;padding:20px;background:#ffe0e0}body.course-item-popupx.content-only #learn-press-content-item{z-index:9999999;top:0;bottom:0;right:0}body.course-item-popupx.content-only #learn-press-content-item .content-item-scrollable{bottom:0}body #ifr-course-item{position:absolute;z-index:999999;top:0;right:0;width:100%;height:100%;background:#fff}body .content-item-summary .form-button-finish-course,body .lp-quiz-buttons .form-button-finish-course{float:left}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{top:2px;font-family:"Font Awesome 5 Free"}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before{content:"\f017"}#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before{content:"\f15c"}#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{content:"\f29c"}.scroll-wrapper{overflow:hidden;opacity:0}.scroll-wrapper .scroll-element{background:transparent}.scroll-wrapper .scroll-element.scroll-y.scroll-scrolly_visible{transition:opacity .25s}.scroll-wrapper:hover .scroll-element.scroll-y.scroll-scrolly_visible{opacity:.7}.course-remaining-time .label-enrolled{font-size:inherit}.learn-press-form.completed button::before{margin-left:10px;font-family:"Font Awesome 5 Free";font-size:18px;content:"\f00c"}.lp-course-progress{position:relative}.lp-course-progress .lp-passing-conditional{position:absolute;top:0;width:3px;height:6px;margin-right:-1px;background:var(--lp-secondary-color)}.viewing-course-item .section-header .section-desc{display:none}.viewing-course-item .content-item-wrap{margin-top:50px}.course-meta{display:flex;margin-bottom:40px}.course-meta .course-meta__pull-left,.course-meta .course-meta__pull-right{display:flex;flex-wrap:wrap}.course-meta .course-meta__pull-left{flex:1}.course-meta .course-meta__pull-left .meta-item{margin-left:10px}.course-meta .course-meta__pull-right{flex:0 0 50%}.course-meta .course-meta__pull-right .meta-item{margin-right:10px}.course-meta.course-meta-primary .meta-item{flex:1}.course-meta.two-columns .course-meta{flex:1}.course-extra-box{margin-bottom:3px;border:1px solid rgba(204,204,204,0.3);border-radius:5px}.course-extra-box__title{--extra-height:50px;display:flex;align-items:center;position:relative;height:var(--extra-height);margin:0 !important;padding:0 38px 0 45px;background:rgba(181,187,211,0.15);font-size:1.1rem;font-weight:600;cursor:pointer}@media(max-width:767px){.course-extra-box__title{padding-right:15px}}.course-extra-box__title::after{position:absolute;top:0;left:20px;color:#666;font-family:"Font Awesome 5 Free";line-height:var(--extra-height);content:"\f0d7"}.course-extra-box__content{display:none}.course-extra-box__content-inner{-webkit-animation-name:course-extra-box__content-inner-transform;animation-name:course-extra-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}.course-extra-box__content ul,.course-extra-box__content li{list-style:none}.course-extra-box__content ul{margin:0;padding:0}.course-extra-box__content li{margin:0;padding:10px 38px;border-bottom:1px solid rgba(204,204,204,0.3);color:#666;font-size:16px;font-weight:300}@media(max-width:767px){.course-extra-box__content li{padding-right:30px;padding-left:30px}}.course-extra-box__content li::before{margin-left:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900;content:"\f00c"}.course-extra-box__content li:last-child{border-bottom:0}.course-extra-box:last-child{margin-bottom:60px}.course-extra-box.active .course-extra-box__title::after{content:"\f0d8"}.course-extra-box+.comment-respond,.course-extra-box+.comments-area{margin-top:60px;margin-bottom:30px}.course-extra-box+.course-tabs{margin-top:60px}input[name=course-extra-box-ratio]{display:none}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content{display:block}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content .course-extra-box__content-inner{transform:scale(1)}@-webkit-keyframes course-extra-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(-5%);-moz-transform:translateX(-5%);-ms-transform:translateX(-5%);-o-transform:translateX(-5%);transform:translateX(-5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes course-extra-box__content-inner-transform{from{opacity:0;transform:translateX(-5%)}to{opacity:1;transform:translateX(0)}}.course-tab-panel-faqs{padding-top:64px}.course-tab-panel-faqs .course-faqs-box{margin-bottom:20px;border:1px solid rgba(204,204,204,0.6);border-radius:5px}.course-tab-panel-faqs .course-faqs-box__title{display:block;position:relative;margin:0;padding:20px 25px 20px 45px;font-size:1.1rem;font-weight:500;line-height:1.7;cursor:pointer}.course-tab-panel-faqs .course-faqs-box__title::after{position:absolute;top:50%;left:28px;color:#6c6c6c;font-family:"Font Awesome 5 Free";font-size:12px;font-weight:900;content:"\f078";transform:translateY(-50%)}.course-tab-panel-faqs .course-faqs-box:last-child{margin-bottom:40px}.course-tab-panel-faqs .course-faqs-box:hover{background:rgba(241,242,248,0.4)}.course-tab-panel-faqs .course-faqs-box:hover .course-faqs-box__title{color:var(--lp-primary-color)}.course-tab-panel-faqs .course-faqs-box__content{display:none}.course-tab-panel-faqs .course-faqs-box__content-inner{padding:0 25px 25px 25px;color:#666;font-size:1rem;font-weight:300;line-height:26px;-webkit-animation-name:course-faqs-box__content-inner-transform;animation-name:course-faqs-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}input[name=course-faqs-box-ratio]{display:none}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__content{display:block}input[name=course-faqs-box-ratio]:checked+.course-faqs-box{background:rgba(241,242,248,0.4)}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title{color:var(--lp-primary-color)}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title::after{content:"\f077"}@-webkit-keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(-5%);-moz-transform:translateX(-5%);-ms-transform:translateX(-5%);-o-transform:translateX(-5%);transform:translateX(-5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(-5%);-moz-transform:translateX(-5%);-ms-transform:translateX(-5%);-o-transform:translateX(-5%);transform:translateX(-5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@media screen and (max-width:1300px){body.course-item-popup #learn-press-course-curriculum{width:300px}body.course-item-popup #learn-press-course-curriculum .progress-bg{width:40px}body.course-item-popup #content-item-nav{right:300px}body.course-item-popup .section-desc{display:none}}@media screen and (max-width:1200px){body.course-item-popupx #learn-press-course-curriculum{width:300px}body.course-item-popupx #content-item-nav{right:300px}body.course-item-popupx #learn-press-content-item .content-item-nav-wrap,body.course-item-popupx #learn-press-content-item .content-item-wrap{width:90%}}@media screen and (max-width:768px){body.course-item-popup .course-curriculum{width:200px}body.course-item-popup #content-item-nav{right:200px}body.course-item-popup #learn-press-content-item .content-item-nav-wrap,body.course-item-popup #learn-press-content-item .content-item-wrap{width:90%}body.course-item-popup.wpadminbar #learn-press-content-item,body.course-item-popup.wpadminbar #learn-press-course-curriculum{top:106px}.learn-press-course-results-progress{margin-left:0}.learn-press-course-results-progress .items-progress,.learn-press-course-results-progress .course-progress{float:none;width:100%;margin-left:0;margin-bottom:20px}}.lp-quiz-buttons{margin-bottom:20px;display:block;clear:both;content:""}.quiz-progress{margin-bottom:30px;background:#e7f7ff}.quiz-progress .progress-items{display:flex}.quiz-progress .progress-items .progress-item{position:relative;color:#777;font-size:15px;flex:1}.quiz-progress .progress-items .progress-item .progress-number,.quiz-progress .progress-items .progress-item .progress-label{display:block;line-height:1;text-align:center}.quiz-progress .progress-items .progress-item .progress-number{margin:15px 0 10px 0;font-size:20px}.quiz-progress .progress-items .progress-item .progress-label{margin-bottom:15px;font-size:14px}.quiz-progress .progress-items .progress-item i{display:none;float:right;width:60px;height:60px;color:#fff;background:#00adff;font-size:30px;line-height:60px;text-align:center}.quiz-progress .progress-items .progress-item::after{display:block;clear:both;content:""}.answer-options{margin:0;padding:0;list-style:none}.answer-options .answer-option{display:flex;overflow:hidden;position:relative;margin:0 0 18px 0;padding:10px;color:#777;background:#f5f5f5;font-size:20px;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-transition:background linear .25s;-moz-transition:background linear .25s;-ms-transition:background linear .25s;-o-transition:background linear .25s;transition:background linear .25s}.answer-options .answer-option .option-title{display:table-cell;font-size:smaller}.answer-options .answer-option .option-title .option-title-content{display:inline-block;vertical-align:middle}.answer-options .answer-option .option-title::before{position:absolute;top:0;bottom:0;right:0;width:3px;background:#ddd;content:"";-webkit-transition:background linear .25s;-moz-transition:background linear .25s;-ms-transition:background linear .25s;-o-transition:background linear .25s;transition:background linear .25s}.answer-options .answer-option input[type=checkbox],.answer-options .answer-option input[type=radio]{-webkit-appearance:initial;-moz-appearance:initial;position:relative;z-index:10;width:35px;min-width:35px;height:35px;margin:0 3px 0 10px;border:1px solid #cfcfcf;background:#f9fafc;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.answer-options .answer-option input[type=checkbox]:focus,.answer-options .answer-option input[type=radio]:focus{outline:0}.answer-options .answer-option input[type=checkbox]::after,.answer-options .answer-option input[type=radio]::after{margin-top:-10px;position:absolute;top:18px;right:9px;box-sizing:content-box;opacity:0;color:#3db748;font-family:"Font Awesome 5 Free";font-weight:900;font-size:16px;content:"\f00c"}.answer-options .answer-option input[type=checkbox]:checked ~ .option-title .option-title-content,.answer-options .answer-option input[type=radio]:checked ~ .option-title .option-title-content{position:relative}.answer-options .answer-option input[type=checkbox]:checked ~ .option-title::before,.answer-options .answer-option input[type=radio]:checked ~ .option-title::before{background:#00adff}.answer-options .answer-option input[type=checkbox]:checked::after,.answer-options .answer-option input[type=radio]:checked::after{opacity:1}.answer-options .answer-option input[type=checkbox]::after{margin-top:0;top:50%;right:50%;-webkit-transform:translate(50%,-50%);-moz-transform:translate(50%,-50%);-ms-transform:translate(50%,-50%);-o-transform:translate(50%,-50%);transform:translate(50%,-50%)}.answer-options .answer-option input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.answer-options .answer-option input[type=radio]::before{border-radius:50%}.answer-options .answer-option .option-title{margin:0}.answer-options .answer-option:hover{background:#e1f5ff}.answer-options .answer-option.answer-correct{background:#e1f5ff}.answer-options .answer-option.answer-correct input[type=radio]:checked ~ .option-title::before,.answer-options .answer-option.answer-correct input[type=checkbox]:checked ~ .option-title::before{background:#e1f5ff}.answer-options .answer-option.answered-correct input[type=radio]:checked ~ .option-title::before,.answer-options .answer-option.answered-correct input[type=checkbox]:checked ~ .option-title::before{background:#00adff}.answer-options .answer-option.answered-wrong input[type=radio]::before,.answer-options .answer-option.answered-wrong input[type=radio]::after,.answer-options .answer-option.answered-wrong input[type=checkbox]::before,.answer-options .answer-option.answered-wrong input[type=checkbox]::after{border-color:red}.answer-options .answer-option.answered-wrong input[type=radio]:checked ~ .option-title::before,.answer-options .answer-option.answered-wrong input[type=checkbox]:checked ~ .option-title::before{background:red}button[data-counter]{position:relative}button[data-counter]::after{padding-right:5px;content:"(+" attr(data-counter) ")"}.quiz-result{max-width:320px;margin:20px auto 48px;text-align:center}.quiz-result .result-heading{display:none}.quiz-result.passed .result-message{background:#3bb54a}.quiz-result.passed .result-message::after{content:"\f00c"}.quiz-result .result-message{margin-bottom:30px;padding:10px 0 !important;color:#fff;background:#f02425;font-size:16px;line-height:22px;font-weight:400;display:flex;align-items:center;justify-content:center;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.quiz-result .result-message::after{margin-right:10px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f00d"}.quiz-result .result-grade .result-achieved,.quiz-result .result-grade .result-require{display:inline-block;margin:0 auto}.quiz-result .result-grade .result-achieved{padding-bottom:7px;border-bottom:1px solid #999;color:#333;font-size:28px;font-weight:500;line-height:1}.quiz-result .result-grade .result-require{display:block;padding-top:5px;color:#666;font-size:16px;font-weight:400;line-height:1}.quiz-result .result-grade .result-message{font-size:14px}.quiz-result.passed .result-achieved{color:#04adff}.quiz-result.passed .result-message strong{color:#04adff}.quiz-result .result-statistic{margin:0;padding:0;text-align:right;list-style:none}.quiz-result .result-statistic .result-statistic-field{display:flex;margin:0}.quiz-result .result-statistic .result-statistic-field+li{border-top:1px dashed #ccc}.quiz-result .result-statistic .result-statistic-field span,.quiz-result .result-statistic .result-statistic-field p{margin:0;flex:1}.quiz-result .result-statistic .result-statistic-field span{color:#666;font-size:16px;font-weight:400;line-height:35px}.quiz-result .result-statistic .result-statistic-field span::before{display:inline-block;width:15px;margin-left:10px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900}.quiz-result .result-statistic .result-statistic-field p{color:#333;font-size:16px;font-weight:500;line-height:35px;text-align:left}.quiz-result .result-statistic .result-statistic-field.result-time-spend label::before{font-weight:400;content:"\f017"}.quiz-result .result-statistic .result-statistic-field.result-point label::before{font-weight:400;content:"\f005"}.quiz-result .result-statistic .result-statistic-field.result-questions label::before{font-weight:400;content:"\f059"}.quiz-result .result-statistic .result-statistic-field.result-questions-correct label::before{color:#3db748;content:"\f00c"}.quiz-result .result-statistic .result-statistic-field.result-questions-wrong label::before{color:#f02425;content:"\f00d"}.quiz-result .result-statistic .result-statistic-field.result-questions-skipped label::before{color:#ddd;content:"\f2f5"}.quiz-status{position:sticky;z-index:99;top:0;left:0;right:0;margin:0 0 35px 0}.quiz-status>div{display:flex;box-sizing:border-box;width:100%;max-width:792px;height:60px;margin:0 auto;padding:5px 30px 5px 10px;border-radius:4px;background:var(--lp-primary-color);justify-content:center;align-items:center}@media(max-width:480px){.quiz-status>div{display:block;height:auto;text-align:center;padding:15px}.quiz-status>div .questions-index{margin-bottom:10px}}.quiz-status>div>div{display:flex;flex-direction:row-reverse;flex:0 0 50%;align-items:center}@media(max-width:480px){.quiz-status>div>div{justify-content:center}}.quiz-status>div .current-point{display:none}.quiz-status .questions-index{display:inline-block;color:#666;font-size:16px;font-weight:400;line-height:26px}.quiz-status .questions-index span{color:#333;font-weight:500}.quiz-status .countdown{position:relative;min-width:120px;margin-left:5px;padding:12px 29px;color:#333;background:#fff;font-size:14px;font-weight:400;line-height:1;text-align:center}.quiz-status .countdown .fas{position:absolute;top:50%;right:10px;color:#333;font-size:14px;transform:translateY(-50%)}.quiz-status .countdown .clock{display:none;width:40px;height:40px}.quiz-status .countdown .clock::before{position:absolute;width:40px;height:40px;border:4px solid #b1c1e6;border-radius:50%;content:"";-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.quiz-status .countdown .clock .circle-progress-bar{display:inline-block;position:relative;width:40px;height:40px;stroke:#5383f7}.quiz-status .countdown .clock .circle-progress-bar .circle-progress-bar__circle{transition:.35s stroke-dashoffset;transform:rotate(90deg);transform-origin:50% 50%}.quiz-status .countdown .clock.x .circle-progress-bar__circle{stroke:red}.quiz-status .submit-quiz button{margin:0 10px 0 0;border:0;border-radius:0;background:#fff;text-transform:uppercase}.quiz-status .submit-quiz button:hover{background:var(--lp-secondary-color)}.quiz-status.submitting .submit-quiz button{background:#ddd}.question-numbers{text-align:center;list-style:none}.question-numbers li{display:inline-block;position:relative;margin-bottom:3px}.question-numbers li a{display:block;min-width:20px;padding:8px;border:1px solid #ddd;color:#999;background:#f5f5f5;box-shadow:none;font-size:12px;line-height:1}.question-numbers li a span{vertical-align:middle}.question-numbers li a:hover{border:1px solid #3880a2;color:#fff;background:#00adff}.question-numbers li.current a{border-color:#3880a2;color:#fff !important;background:#00adff}.question-numbers li.current.skipped::after{background:#fff}.question-numbers li.answered a::after{margin-right:3px;font-family:"Font Awesome 5 Free";font-size:8px;vertical-align:middle}.question-numbers li.answered.answered-wrong a{color:red}.question-numbers li.answered.answered-true a{color:#00adff}.question-numbers li.answered.answered-true.current a{color:#fff}.question-numbers li.skipped::after{position:absolute;bottom:3px;right:50%;width:10px;height:4px;margin-right:-5px;border-radius:2px;background:#aaa;content:""}.quiz-intro{display:flex;margin:0 0 20px;padding:0;list-style:none;flex-flow:row wrap}@media(max-width:768px){.quiz-intro{padding-left:10px;padding-right:10px;justify-content:space-between}}.quiz-intro-item{display:flex;margin:0 0 0 40px;align-items:center}@media(max-width:768px){.quiz-intro-item{margin:0 0 0 20px}}.quiz-intro-item::before{position:relative;top:-2px;margin-left:10px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900}.quiz-intro-item--passing-grade{order:2}.quiz-intro-item--passing-grade::before{content:"\f012"}.quiz-intro-item--questions-count{order:1}.quiz-intro-item--questions-count::before{content:"\f12e"}.quiz-intro-item--duration{order:2}.quiz-intro-item--duration::before{content:"\f017"}.quiz-intro-item__title{margin:0;padding:0 0 0 8px;color:#333;font-size:16px;font-weight:300;line-height:1.7}.quiz-intro-item__content{color:#222;font-size:16px;font-weight:400}.question-explanation-content,.question-hint-content{margin-bottom:20px;padding:10px 15px;background:#f5f5f5}.redo-quiz button[type=submit]{content:attr(data-counter)}.circle-bar{position:relative;width:300px;height:300px;border-color:#ddd}.circle-bar::before{position:absolute;z-index:0;top:0;right:0;box-sizing:border-box;width:100%;height:100%;border:10px solid #ddd;border-radius:50%;content:""}.circle-bar .before,.circle-bar .after{position:absolute;z-index:0;top:0;right:0;box-sizing:border-box;width:100%;height:100%;border:10px solid #14c4ff;border-radius:50%;transform:rotate(-45deg)}.circle-bar .before{border-bottom-color:transparent;border-right-color:transparent;transform:rotate(-45deg)}.circle-bar .after{border-color:#14c4ff;border-top-color:transparent;border-left-color:transparent;transform:rotate(-45deg)}.circle-bar.bg50 .after{z-index:10;border-bottom-color:inherit;border-right-color:inherit;transform:rotate(-45deg)}.lp-quiz-buttons .complete-quiz,.lp-quiz-buttons .back-quiz,.lp-quiz-buttons .review-quiz{float:left}.quiz-result .result-grade{display:flex;flex-direction:column;position:relative;box-sizing:border-box;height:200px;margin-bottom:30px;padding:50px;justify-content:center;align-items:center;-webkit-transform:none !important;-moz-transform:none !important;-ms-transform:none !important;-o-transform:none !important;transform:none !important}.quiz-result .result-grade::before,.quiz-result .result-grade svg{position:absolute;top:0;right:50%;width:200px;height:200px;margin-right:-100px;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.quiz-result .result-grade::before{box-sizing:border-box;padding:30px;border:10px solid #ccc;content:""}.quiz-result .result-grade svg{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.quiz-result .result-grade svg circle{stroke:var(--lp-primary-color)}.quiz-result.passed .result-grade svg{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.quiz-result.passed .result-grade .result-achieved{color:#333}.quiz-result.passed .result-grade .result-message strong{color:#4caf50}.quiz-questions .question{margin-bottom:60px}.question .answer-option{padding:0;_border:2px solid #d9e0f1;background:#fff}.question .answer-option input[type=radio],.question .answer-option input[type=checkbox]{position:absolute;top:50%;margin:-19px 10px 0 0;border-color:#d9e0f1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question .answer-option input[type=radio]::after,.question .answer-option input[type=checkbox]::after{border-color:#d9e0f1}.question .answer-option input[type=radio]:disabled,.question .answer-option input[type=checkbox]:disabled{border-color:#ddd;background:#f9f9f9}.question .answer-option input[type=radio]:disabled::after,.question .answer-option input[type=checkbox]:disabled::after{border-color:#ddd}.question .answer-option input[type=radio]:checked:not(:disabled)::after,.question .answer-option input[type=checkbox]:checked:not(:disabled)::after{border-color:#99aee4}.question .answer-option input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.question .answer-option input[type=radio]::before{border-radius:50%}.question .answer-option .option-title{display:flex;width:100%;margin:0;padding:14px 65px 11px 10px;border:1px solid #ccc;color:#666;background:#fff;font-size:16px;font-weight:300;line-height:26px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question .answer-option .option-title::after{display:inline-block;visibility:hidden !important;content:"."}.question .answer-option .option-title:hover{background:#f9f9f9}.question .answer-option .option-title::before{display:none}.question .answer-option.answer-correct .option-title{border-color:#4caf50}.question .answer-option.answered-wrong .option-title{border-color:#ff6423}.question .question-title{display:block;margin-top:0;margin-bottom:18px;color:#333;font-size:18px;font-weight:500}.question .question-title .edit-link{float:left;font-size:14px;font-weight:normal}.question .question-content{margin-bottom:30px;color:#666;font-size:16px;font-weight:300;line-height:26px}.question .question-content img{width:100%;max-width:100%}.question .question-response{margin-bottom:10px;font-size:14px}.question .question-response .label{display:inline-block;margin:0 0 0 5px;padding:8px 10px;border-radius:4px;color:#fff;line-height:1}.question .question-response .point{display:inline-block}.question .question-response.correct .label{background:#4caf50}.question .question-response.incorrect .label{background:#ff6423}.question .question-index{display:inline-block;margin:0 0 0 5px}.question .btn-show-hint{position:relative;margin:0 10px 0 0;padding:0;outline:0;color:#00adff;background:transparent;font-size:0;text-decoration:none}.question .btn-show-hint::before{font-family:"Font Awesome 5 Free";font-size:18px;content:"\f059"}.question .btn-show-hint:hover span{position:absolute;bottom:100%;right:0;width:auto;padding:6px 9px;border-radius:2px;color:#333;background:#eee;font-size:14px;font-weight:400;line-height:1;white-space:nowrap;text-transform:none}.question.question-fill_in_blanks .blanks .blank-input-wrap{display:inline-block}.question.question-fill_in_blanks .blanks .blank-block{margin-bottom:20px}.question.question-fill_in_blanks .blanks .blank-input{display:inline-block;width:auto;min-width:50px;margin:0 10px;padding:0 10px;border:0;border-bottom:1px dashed #ddd;text-align:center;white-space:nowrap}.question.question-fill_in_blanks .blanks .blank-input br{display:none}.question.question-fill_in_blanks .blanks .blank-input>*{display:inline;white-space:nowrap}.question.question-fill_in_blanks .blanks .blank-select{display:inline-block;height:30px;margin-right:4px;padding:1px}.question.question-fill_in_blanks .blanks .blank-fills{display:inline-block}.question.question-fill_in_blanks .blanks .blank-fills code{margin:0 5px;padding:0 6px;background:#ddd;line-height:1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question.question-fill_in_blanks .blanks.ordered{list-style-position:inside}.question.question-fill_in_blanks .blanks.one-paragraph{line-height:3}.lp-sort-bg label.option-title{background:rgba(255,182,6,0.68) !important}.learn-press-message.fixed{position:fixed;top:32px;right:0;left:0;background:rgba(0,173,255,0.6);text-align:center;z-index:100;color:#FFF;padding:10px}.learn-press-message.fixed[data-delay-in]{display:none}.lp-archive-courses ul{list-style-type:revert;padding:0 1em 23px 0}.lp-archive-courses ul.learn-press-breadcrumb,.lp-archive-courses ul.course-nav-tabs{list-style:none;padding:0}@media(max-width:768px){.lp-archive-courses ul.learn-press-breadcrumb,.lp-archive-courses ul.course-nav-tabs{padding-right:15px;padding-left:15px}}.lp-archive-courses ul,.lp-archive-courses ol{list-style-type:decimal;list-style-position:inside;padding:0 0 23px}.lp-archive-courses ol ul{padding:2px 35px 2px 0}.lp-archive-courses ol ol{padding:2px 20px 2px 0}.lp-archive-courses thead th,.lp-archive-courses tr th{padding:9px 24px}.lp-archive-courses tr td{border-top:1px solid #eee;padding:6px 24px}.learnpress #left-area ul,.learnpress .entry-content ul,.learnpress .et-l--body ul,.learnpress .et-l--footer ul,.learnpress .et-l--header ul{padding:0 !important;list-style:none !important}.learnpress.dt-the7 .learn-press-filters{margin-bottom:20px}.learnpress.dt-the7 .learn-press-courses[data-size="3"] .course{width:50%}.bridge.learnpress .lp-archive-courses{margin-top:100px}.bridge.learnpress .lp-archive-courses ul.learn-press-breadcrumb{padding-top:45px}.bridge.learnpress .content{z-index:110}.bridge.learnpress .comment-respond .comment-form{margin:0}.bridge.learnpress .comment-respond .comment-form>p,.bridge.learnpress .comment-respond .comment-form>div{padding:0}.bridge.learnpress.learnpress-profile .content{z-index:100}.bridge.learnpress #learn-press-item-comments{background:#f6f6f6}.learnpress.ast-separate-container .ast-article-single{padding-right:15px;padding-left:15px}body.learnpress-page.twentysixteen #primary .lp-entry-content{float:none;width:auto;margin:0 15%}body.learnpress-page.twentyfifteen .course-summary-sidebar .widget{width:100%;padding:0}body.learnpress-page.twentysixteen .entry-footer{display:none}body.learnpress-page.twentysixteen .lp-entry-content{float:none;width:auto}body.learnpress-page.twentyseventeen #primary article.type-page{width:100%}@media screen and (min-width:61.5625em){body.twentysixteen.learnpress-page .entry-footer{display:none}body.twentysixteen.learnpress-page .lp-entry-content{float:none;width:auto}body:not(.search-results) article:not(.type-page) .entry-footer{display:none}body:not(.search-results) article:not(.type-page) .lp-entry-content{float:none;width:auto}}body.twentyseventeen.learnpress-page #primary article.page .entry-header,body.twentyseventeen.learnpress-page #primary article.page .lp-entry-content{width:100%;float:none}@media screen and (min-width:48em){body.twentyseventeen.learnpress-page #primary article.page .entry-header,body.twentyseventeen.learnpress-page #primary article.page .lp-entry-content{width:100%;float:none}}.learn-press-tip{display:none;margin:0 5px;color:#444;font-size:13px;font-style:normal;line-height:1;vertical-align:baseline;cursor:pointer}.learn-press-tip.ready{display:inline-block}.learn-press-tip::before{font-family:"Font Awesome 5 Free";content:"\f059"}.learn-press-tip:hover{opacity:.8}.learn-press-tip-floating{position:absolute;z-index:9999999;min-width:20px;margin-right:-1px;padding:.618em 1em;color:#fff;background:#383838;font-size:12px;line-height:1.2em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.learn-press-tip-floating>*{font-size:12px}.learn-press-tip-floating .close{display:inline-block;position:absolute;top:-8px;left:-8px;width:16px;height:16px;border:1px solid #fff;color:#fff;background:#468fbc;line-height:16px;text-align:center;cursor:pointer;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.learn-press-tip-floating .close::before{font-family:"Font Awesome 5 Free";content:"\f00d"}.learn-press-tip-floating p{margin:0}.learn-press-tip-floating::before{position:absolute;bottom:-6px;right:50%;width:0;height:0;margin-right:-6px;border:6px solid transparent;border-top-color:#383838;border-bottom-width:0;content:""}body.lp-preview.admin-bar #learn-press-content-item{top:32px !important}body.lp-preview #learn-press-course-curriculum{display:none}body.lp-preview #learn-press-content-item{top:0 !important;right:0 !important}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}@keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}#popup_container{opacity:0;transform:scale(0.5)}body.confirm #popup_overlay{z-index:999998 !important}body.confirm #popup_container{z-index:999999 !important;max-width:90% !important;min-width:300px !important;padding:10px !important;background:#f5f5f5;transition:opacity .25s;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body.confirm #popup_container #popup_title{display:none !important}body.confirm #popup_container #popup_message{margin:-10px;background:#FFF;padding:20px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body.confirm #popup_container .close{position:absolute;top:3px;left:10px}body.confirm #popup_container #popup_panel{margin-top:20px;text-align:center}body.confirm #popup_container #popup_panel button,body.confirm #popup_container #popup_panel input[type=button],body.confirm #popup_container #popup_panel input[type=submit]{height:30px;line-height:30px;padding:0 25px}body.confirm #popup_container #popup_cancel{display:none}body.confirm #popup_container.ready{opacity:1;transform:scale(1)}a{text-decoration:none}.lp-content-area{width:100%;max-width:1170px;margin:0 auto}@media(max-width:1024px){.lp-content-area{padding-left:15px;padding-right:15px}}.lp-content-area::after,.lp-content-area::before{display:table;clear:both;content:""}.lp-archive-courses{width:100%;scroll-margin:30px}.lp-archive-courses.loading ul.learn-press-courses{position:relative}.lp-archive-courses.loading ul.learn-press-courses::before,.lp-archive-courses.loading ul.learn-press-courses::after{content:"";position:absolute;top:0;bottom:0;right:15px;left:15px}.lp-archive-courses.loading ul.learn-press-courses::after{z-index:3;background:#f3f3f3;background:linear-gradient(-90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}.lp-archive-courses.loading ul.learn-press-courses::before{z-index:2;opacity:.8%;background:#fff}.lp-archive-courses form[name=search-course]{position:relative;margin-bottom:20px}.lp-archive-courses form[name=search-course] .search-course-input{width:100%;padding:12px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lp-archive-courses form[name=search-course] .search-course-button{position:absolute;top:1px;left:1px;bottom:1px;height:auto;padding:15px;line-height:1px}.lp-archive-courses .learn-press-courses-header{float:right;padding-top:4px}.lp-archive-courses .learn-press-courses-header h1{margin:0;font-size:30px;font-weight:600}@media(max-width:767px){.lp-archive-courses .learn-press-courses-header{margin-bottom:20px}}.lp-archive-courses .course-item{flex-direction:column;display:flex;transition:all .3s}.lp-archive-courses .course-item:hover .course-thumbnail .thumbnail::before{opacity:1}.lp-archive-courses .course-item:hover .course-thumbnail a img{transform:scale(1.05)}.lp-archive-courses .course-item:hover .course-wishlist{opacity:1}.lp-archive-courses .course-item .course-wishlist.filled{opacity:1}.lp-archive-courses .course-item .course-instructor{float:right;margin-bottom:16px;font-size:14px;font-weight:300;line-height:25px;text-transform:capitalize}.lp-archive-courses .course-item .course-instructor a{color:#059de9}.lp-archive-courses .course-item .course-instructor a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-content{position:relative;border-top:0}.lp-archive-courses .course-content .course-permalink{display:-webkit-box;clear:both;overflow:hidden;position:relative;border:0;color:#fff;text-decoration:none;text-transform:none;-webkit-line-clamp:2;-webkit-box-orient:vertical;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-archive-courses .course-content .course-permalink:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-archive-courses .course-content .course-review{display:none}.lp-archive-courses .course-content .course-categories,.lp-archive-courses .course-content .course-tags{display:block;font-size:14px;font-weight:300}.lp-archive-courses .course-content .course-categories{float:right;position:relative;margin-left:10px;margin-bottom:16px}.lp-archive-courses .course-content .course-categories a{display:inline-block;display:none;margin:0 10px;color:#fff;text-decoration:none}.lp-archive-courses .course-content .course-categories a:first-child{display:block;margin-right:0;padding:2px 16px;background:var(--lp-primary-color)}.lp-archive-courses .course-content .course-categories a:hover{color:#333}.lp-archive-courses .course-content .course-categories::after{position:absolute;top:50%;left:-2px;width:1px;height:12px;opacity:.5;background:#999;content:"";transform:translate(0,-50%)}.lp-archive-courses .course-content .course-info{color:#666;font-size:14px;font-weight:300}.lp-archive-courses .course-content .course-info>span{display:block}.lp-archive-courses .course-content .course-info .course-price{float:left}.lp-archive-courses .course-content .course-info .course-price .origin-price,.lp-archive-courses .course-content .course-info .course-price .price{color:#333;font-size:16px;font-weight:600}.lp-archive-courses .course-content .course-info .course-price .origin-price{margin-left:10px;color:#666;font-size:14px;font-weight:300;text-decoration:line-through}.lp-archive-courses .course-content .course-info .course-instructor{float:left}.lp-archive-courses .course-content .course-info::after{display:block;clear:both;content:""}.lp-archive-courses .course-content .course-excerpt{display:-webkit-box;overflow:hidden;margin-bottom:28px;color:#666;font-size:16px;font-weight:300;line-height:26px;-webkit-line-clamp:2;-webkit-box-orient:vertical}.lp-archive-courses .course-content .separator{display:none}.lp-archive-courses .course-wrap-thumbnail{overflow:hidden;position:relative}.lp-archive-courses .course-wrap-thumbnail .lp-badge.featured{position:absolute;z-index:100;top:28px;right:-110px;width:300px;text-align:center;transform:rotate(45deg)}.lp-archive-courses .course-wrap-thumbnail .course-wishlist{position:absolute;z-index:2;top:6px;left:6px;opacity:0;color:#fff;cursor:pointer}.lp-archive-courses .course-wrap-thumbnail .course-wishlist::before{font-family:"Font Awesome 5 Free";font-weight:900;content:"\f004"}.lp-archive-courses .course-wrap-thumbnail .course-wishlist .course-wishlist__btn{display:none}.lp-archive-courses .course-wrap-thumbnail .course-wishlist:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-wrap-thumbnail:hover::before{opacity:1}.lp-archive-courses .course-wrap-thumbnail:hover .course-thumbnail a img{transform:scale(1.05)}.lp-archive-courses .course-wrap-thumbnail:hover .course-wishlist{opacity:1}.lp-archive-courses .course-thumbnail a{display:block;overflow:hidden}.lp-archive-courses .course-thumbnail .thumbnail{margin:0;padding:0;border:0;border-radius:unset;line-height:unset}.lp-archive-courses .course-thumbnail .thumbnail::before{position:absolute;z-index:1;top:0;left:0;bottom:0;right:0;opacity:0;background:rgba(0,0,0,0.5);content:"";transition:all .3s}.lp-archive-courses .course-thumbnail img{display:block;width:100%;height:auto;transition:all .5s ease;transform:scale(1)}.lp-archive-courses .course-title{margin:0;padding:0;color:#333;font-size:16px;font-weight:600;line-height:24px}.lp-archive-courses .course-title:hover{color:var(--lp-primary-color)}@media(min-width:769px){.lp-archive-courses .course-summary-content .course-info-left{width:calc(100% - 330px)}}.lp-archive-courses .course-summary-content .course-title{margin-bottom:42px;color:#fff;font-size:1.5rem;font-weight:500;line-height:1}.lp-archive-courses .course-summary-content .course-meta.course-meta-secondary{margin-bottom:0}@media(max-width:768px){.lp-archive-courses .course-summary-content{width:100%}}.lp-archive-courses .course-detail-info{padding:40px 0 10px 0;color:#fff;background:var(--lp-secondary-color);position:relative}.lp-archive-courses .course-detail-info::before,.lp-archive-courses .course-detail-info::after{content:"";width:50%;height:100%;background:var(--lp-secondary-color);position:absolute;top:0}.lp-archive-courses .course-detail-info::before{left:100%;right:auto}.lp-archive-courses .course-detail-info::after{right:100%;left:auto}.lp-archive-courses .course-meta__pull-left .meta-item{display:flex;height:46px;margin-left:50px;font-size:16px;font-weight:300;text-transform:capitalize}.lp-archive-courses .course-meta__pull-left .meta-item span{padding-left:4px;padding-right:0}.lp-archive-courses .course-meta__pull-left .meta-item:last-child{margin-left:0}.lp-archive-courses .course-meta__pull-left .meta-item::before{margin-left:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900}.lp-archive-courses .course-meta__pull-left .meta-item .meta-item__image{margin-left:10px;flex:0 0 46px}.lp-archive-courses .course-meta__pull-left .meta-item .meta-item__image img{overflow:hidden;position:relative;width:46px;height:46px;border-radius:50%}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-duration::before{content:"\f017"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-level::before{content:"\f012"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-lesson::before{content:"\f0c5"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-quiz::before{content:"\f12e"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-student::before{content:"\f501"}@media(max-width:1024px){.lp-archive-courses .course-meta__pull-left .meta-item{margin-left:30px}}@media(max-width:767px){.lp-archive-courses .course-meta__pull-left .meta-item{margin-left:0}}.lp-archive-courses .course-meta__pull-left .meta-item__value label{margin:0;color:#999;font-size:14px;font-weight:300;line-height:1.5}.lp-archive-courses .course-meta__pull-left .meta-item__value>div{line-height:1.5}.lp-archive-courses .course-meta__pull-left .meta-item__value>div a{color:#fff;font-size:16px;font-weight:400;text-transform:capitalize}.lp-archive-courses .course-meta__pull-left .meta-item__value>div a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-meta__pull-left .meta-item-categories{align-items:center}.lp-archive-courses .course-meta__pull-left .meta-item-categories::before{margin-left:10px;font-size:36px;content:"\f02e"}.lp-archive-courses .course-meta__pull-left .meta-item-categories .meta-item__value div span{padding:0 5px}.lp-archive-courses .course-meta__pull-left .meta-item-categories .meta-item__value div a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-meta__pull-left .meta-item-review .meta-item__value{display:flex;flex-direction:column-reverse;justify-content:flex-end;align-items:flex-end}.lp-archive-courses .course-meta__pull-left .meta-item-review .meta-item__value .review-stars-rated{margin-bottom:0;line-height:1}@media(max-width:767px){.lp-archive-courses .course-meta__pull-left{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:20px}}.lp-archive-courses .course-meta-primary{margin-bottom:36px}.lp-archive-courses .course-meta-primary .meta-item-categories::before{font-weight:400}.lp-archive-courses .lp-entry-content{display:flex;flex-direction:row}.lp-archive-courses .lp-entry-content .entry-content-left{width:calc(100% - 300px);max-width:100%;margin:0;padding-left:40px;padding-top:60px}@media(max-width:768px){.lp-archive-courses .lp-entry-content .entry-content-left{width:100%;padding-left:0;margin-bottom:50px}}@media(max-width:768px){.lp-archive-courses .lp-entry-content{flex-direction:column}}.lp-archive-courses .course-summary-sidebar{width:300px;max-width:100%;margin-top:-272px}@media(max-width:768px){.lp-archive-courses .course-summary-sidebar{width:100%;margin-top:0}.lp-archive-courses .course-summary-sidebar .course-summary-sidebar__inner{width:100%}}@media(max-width:767px){.lp-archive-courses .course-summary-sidebar{width:100%;padding-right:0}}.lp-archive-courses .course-summary-sidebar__inner{width:300px}.lp-archive-courses .course-summary-sidebar__inner .course-sidebar-top{box-shadow:0 15px 20px 0 rgba(0,0,0,0.05)}.lp-archive-courses .course-summary-sidebar__inner .course-sidebar-secondary{margin-top:30px;padding:0}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist{color:#fff;background:transparent !important;font-size:0}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist.on,.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist::before{font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900;content:"\f004"}.lp-archive-courses .course-summary-sidebar__inner>div{overflow:hidden;padding:20px;background:#fff}.lp-archive-courses .course-summary-sidebar__inner>div ul{list-style:none}.lp-archive-courses .course-summary-sidebar__inner>div ul li a{color:#666;font-size:16px;font-weight:300;line-height:24px}.lp-archive-courses .course-summary-sidebar__inner>div ul li a:hover{color:var(--lp-primary-color);box-shadow:unset}.learn-press-courses{clear:both;margin:0 -15px;padding:0 !important;min-height:300px;list-style:none;position:relative;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-moz-flex;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}.learn-press-courses .course{width:25%;margin:0 0 60px 0;box-shadow:none;list-style:none}.learn-press-courses[data-layout=list]{margin:0}.learn-press-courses[data-layout=list] .course{display:flex;width:100%;padding:24px;border:1px solid rgba(204,204,204,0.3);border-radius:4px;flex-wrap:wrap;justify-content:flex-end}@media(max-width:767px){.learn-press-courses[data-layout=list] .course{padding:15px}}.learn-press-courses[data-layout=list] .course-item{flex-direction:row;width:100%;border:unset;justify-content:space-between}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-item{flex-direction:column}}.learn-press-courses[data-layout=list] .course-content{float:left;width:calc(64.2% - 76px);padding-top:5px}@media(max-width:1200px){.learn-press-courses[data-layout=list] .course-content{width:calc(64.2% - 40px)}}@media(max-width:1200px){.learn-press-courses[data-layout=list] .course-content{width:calc(64.2% - 25px)}}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content{width:100%;padding-top:20px}}.learn-press-courses[data-layout=list] .course-content .course-categories a{position:relative;padding:2px 15px 2px 20px;-webkit-clip-path:polygon(0 0,100% 0,88% 50%,100% 100%,0 100%);clip-path:polygon(0 0,100% 0,88% 50%,100% 100%,0 100%)}.learn-press-courses[data-layout=list] .course-content .course-permalink{height:25px;margin-bottom:5px;-webkit-line-clamp:1}.learn-press-courses[data-layout=list] .course-content .course-tags a{margin:0 0 10px 10px;padding:3px 5px;border-radius:3px;color:#fff;background:#e4a2a2;line-height:1}.learn-press-courses[data-layout=list] .course-content .course-footer{float:right;margin-left:20px}.learn-press-courses[data-layout=list] .course-content .course-footer .course-students{display:none}.learn-press-courses[data-layout=list] .course-content .course-footer .course-price{float:unset}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content .course-footer{margin-bottom:30px}}.learn-press-courses[data-layout=list] .course-content .course-readmore{float:left;position:relative;left:4px}.learn-press-courses[data-layout=list] .course-content .course-readmore a{padding:9px 24px;border-radius:3px;color:#fff;background:var(--lp-primary-color);font-weight:400;line-height:1;transition:all .3s;display:block}.learn-press-courses[data-layout=list] .course-content .course-readmore a:hover{opacity:.5;background:var(--lp-primary-color)}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content .course-readmore{display:flex;float:unset;clear:both}}.learn-press-courses[data-layout=list] .course-wrap-meta{display:flex;padding-top:12px;padding-bottom:18px;color:#333;font-size:14px;font-weight:400}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item{padding-left:28px;text-transform:capitalize}@media(max-width:1024px){.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item{padding-left:20px}}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item::before{position:relative;top:-1px;margin-left:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-level::before{content:"\f012"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-duration::before{content:"\f017"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-lesson::before{content:"\f0c5"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-quiz::before{content:"\f12e"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-student::before{content:"\f501"}@media(max-width:815px){.learn-press-courses[data-layout=list] .course-wrap-meta{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:15px}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item{padding-left:15px}}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-wrap-meta{grid-template-columns:repeat(3,1fr)}}.learn-press-courses[data-layout=list] .course-wrap-thumbnail{float:right;width:35.8%}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-wrap-thumbnail{width:100%}}.learn-press-courses[data-layout=list] .course-title{font-size:18px}.learn-press-courses[data-layout=grid] .course{padding:0 15px}@media(max-width:992px){.learn-press-courses[data-layout=grid] .course{width:50%}}@media(max-width:767px){.learn-press-courses[data-layout=grid] .course{width:100%}}.learn-press-courses[data-layout=grid] .course-item:hover{box-shadow:0 15px 20px 0 rgba(0,0,0,0.2)}.learn-press-courses[data-layout=grid] .course-item .course-instructor{margin-bottom:7px}.learn-press-courses[data-layout=grid] .course-content{padding:15px 20px 12px 20px;border:1px solid #f0f0f0;border-top:0;flex-grow:1}.learn-press-courses[data-layout=grid] .course-content .course-categories{float:left;position:absolute;z-index:1;top:-34px;left:-1px;margin-left:0}.learn-press-courses[data-layout=grid] .course-content .course-categories::after{display:none}.learn-press-courses[data-layout=grid] .course-content .course-categories a{position:relative;margin:0;padding:2px 22px 2px 12px;-webkit-clip-path:polygon(0 0,100% 0,100% 100%,0 100%,12px 50%);clip-path:polygon(0 0,100% 0,100% 100%,0 100%,12px 50%)}.learn-press-courses[data-layout=grid] .course-content .course-permalink{height:48px;margin-bottom:20px}.learn-press-courses[data-layout=grid] .course-content .course-info{display:flex;flex-direction:column;flex-grow:1}.learn-press-courses[data-layout=grid] .course-content .course-wrap-meta,.learn-press-courses[data-layout=grid] .course-content .course-excerpt,.learn-press-courses[data-layout=grid] .course-content .course-readmore{display:none}.learn-press-courses[data-layout=grid] .course-content .course-footer{padding-top:18px;border-top:1px solid rgba(153,153,153,0.2)}.learn-press-courses[data-layout=grid] .course-content .course-footer .course-students{float:right;text-transform:capitalize}.learn-press-courses[data-layout=grid] .course-content .course-footer .course-students::before{position:relative;top:-1px;margin-left:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900;content:"\f501"}.learn-press-courses[data-layout=grid] .learn-press-message{margin-right:15px;margin-left:15px}.learn-press-courses[data-size="3"] .course{width:33.3333%}@media(max-width:767px){.learn-press-courses[data-size="3"] .course{width:100%}}.learn-press-courses .lp-archive-course-skeleton{position:absolute;height:100%;background:linear-gradient(-90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);animation:lp-skeleton-loading 1.4s ease infinite;background-size:400% 100%}.learn-press-courses .lp-archive-course-skeleton li{display:none}.lp-courses-bar{display:flex;float:left;margin-bottom:48px}@media(max-width:767px){.lp-courses-bar{flex-direction:row;width:100%;justify-content:space-between}}.lp-courses-bar .search-courses{position:relative;width:306px;max-width:100%;margin-left:20px;line-height:1;flex:1}.lp-courses-bar .search-courses input[type=text]{width:100%;height:44px;padding:6px 18px 6px 32px;border:1px solid #ccc;border-radius:5px;background:#fff;font-size:14px;font-style:italic;line-height:1}.lp-courses-bar .search-courses input[type=text]:focus{border-color:var(--lp-primary-color);outline:0}.lp-courses-bar .search-courses button{position:absolute;top:50%;left:12px;width:30px;height:30px;padding:0;border:0;color:#333;background:transparent;font-size:16px;line-height:1;transform:translate(0,-50%)}.lp-courses-bar .search-courses button:focus{border:0;outline:0}.lp-courses-bar .search-courses button.loading>i::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.lp-courses-bar .search-courses ::-webkit-input-placeholder{color:#999}.lp-courses-bar .search-courses :-ms-input-placeholder{color:#999}.lp-courses-bar .search-courses ::placeholder{color:#999}@media(max-width:767px){.lp-courses-bar .search-courses{width:100%}}.lp-courses-bar .switch-layout{display:flex;height:44px;line-height:1;text-align:left;flex:0 0 40px;align-items:center;justify-content:center}.lp-courses-bar .switch-layout input[type=radio]{display:none}.lp-courses-bar .switch-layout .switch-btn{display:block;width:40px;height:40px;margin:0;padding:0;border-radius:5px;font-size:16px;line-height:40px;text-align:center;cursor:pointer}.lp-courses-bar .switch-layout .switch-btn::before{display:inline-block;margin:8px 6px;color:#333;font-family:"Font Awesome 5 Free";font-weight:900;line-height:1}.lp-courses-bar .switch-layout .switch-btn.grid::before{content:"\f00a"}.lp-courses-bar .switch-layout .switch-btn.list{margin-right:3px}.lp-courses-bar .switch-layout .switch-btn.list::before{content:"\f03a"}input[type=radio]:nth-child(1):checked ~ .switch-btn:nth-child(2){background:#f5f5f5}input[type=radio]:nth-child(1):checked ~ .switch-btn:nth-child(2)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(3):checked ~ .switch-btn:nth-child(4){background:#f5f5f5}input[type=radio]:nth-child(3):checked ~ .switch-btn:nth-child(4)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(5):checked ~ .switch-btn:nth-child(6){background:#f5f5f5}input[type=radio]:nth-child(5):checked ~ .switch-btn:nth-child(6)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(7):checked ~ .switch-btn:nth-child(8){background:#f5f5f5}input[type=radio]:nth-child(7):checked ~ .switch-btn:nth-child(8)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(9):checked ~ .switch-btn:nth-child(10){background:#f5f5f5}input[type=radio]:nth-child(9):checked ~ .switch-btn:nth-child(10)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(11):checked ~ .switch-btn:nth-child(12){background:#f5f5f5}input[type=radio]:nth-child(11):checked ~ .switch-btn:nth-child(12)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(13):checked ~ .switch-btn:nth-child(14){background:#f5f5f5}input[type=radio]:nth-child(13):checked ~ .switch-btn:nth-child(14)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(15):checked ~ .switch-btn:nth-child(16){background:#f5f5f5}input[type=radio]:nth-child(15):checked ~ .switch-btn:nth-child(16)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(17):checked ~ .switch-btn:nth-child(18){background:#f5f5f5}input[type=radio]:nth-child(17):checked ~ .switch-btn:nth-child(18)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20){background:#f5f5f5}input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20)::before{color:var(--lp-primary-color)}.lp_allow_repuchase_select{padding:20px;background:#f7f7f7}.lp_allow_repuchase_select>ul{padding:0;list-style:none}.lp_allow_repuchase_select>a{display:inline-block;margin-top:10px;color:#fff;background-color:#222}.comment-respond .comment-reply-title{font-size:30px;font-weight:500;line-height:1.2;margin-bottom:15px}.comment-respond .comment-form{margin:0 -15px}.comment-respond .comment-form>p label{display:block;margin-bottom:10px;font-size:16px;font-weight:500}.comment-respond .comment-form>p.comment-notes,.comment-respond .comment-form>p.logged-in-as{color:#666;font-size:16px}.comment-respond .comment-form>p.logged-in-as a{color:#666;text-decoration:underline}.comment-respond .comment-form>p.logged-in-as a:hover,.comment-respond .comment-form>p.logged-in-as a:focus{color:var(--lp-primary-color)}.comment-respond .comment-form>p.comment-form-cookies-consent{clear:both}.comment-respond .comment-form>p.comment-form-cookies-consent input{padding:0;margin-left:8px}.comment-respond .comment-form>p.comment-form-cookies-consent label{display:inline}.comment-respond .comment-form>p,.comment-respond .comment-form>div{padding:0 15px;margin-bottom:15px}.comment-respond .comment-form input[type=text],.comment-respond .comment-form input[type=email],.comment-respond .comment-form input[type=url]{height:40px;line-height:normal;width:100% !important;margin-bottom:15px}.comment-respond .comment-form input[type=submit]{background-color:var(--lp-primary-color);border:0;min-height:40px;line-height:40px;padding:0 15px;font-size:16px;text-transform:capitalize;font-weight:500;margin-top:15px;cursor:pointer;color:white}.comment-respond .comment-form .comment-form-author,.comment-respond .comment-form .comment-form-email,.comment-respond .comment-form .comment-form-url{width:33.33%;float:right}@media(max-width:575px){.comment-respond .comment-form .comment-form-author,.comment-respond .comment-form .comment-form-email,.comment-respond .comment-form .comment-form-url{width:100%;float:unset}}.comment-respond .comment-form textarea,.comment-respond .comment-form input{border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;max-width:100%}.comment-respond .comment-form textarea{width:100%;display:block;padding:20px 15px;resize:none}.course-summary-sidebar .course-sidebar-preview{margin-bottom:35px;background:#fff}.course-summary-sidebar .lp-course-buttons{margin-bottom:34px}.course-summary-sidebar .lp-course-buttons>*{margin-bottom:10px}.course-summary-sidebar .lp-course-buttons>*:last-child{margin-bottom:0}.course-summary-sidebar .lp-course-buttons form,.course-summary-sidebar .lp-course-buttons button{width:100%;text-decoration:none}.course-summary-sidebar .lp-course-buttons button{font-weight:500}.course-summary-sidebar .lp-course-buttons button:hover{border-color:var(--lp-primary-color)}.course-summary-sidebar .lp-course-buttons button.button-enroll-course{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.course-summary-sidebar .lp-course-buttons button.button-enroll-course:hover{opacity:.5;background:var(--lp-primary-color)}.course-summary-sidebar .lp-course-buttons button.button-enroll-course.loading::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";animation:lp-rotating 1s linear infinite}.course-summary-sidebar .lp-course-buttons button ~ .lp-enroll-notice{margin-top:20px;padding:20px;border:2px solid #059601;border-radius:9px;font-size:15px;line-height:1.4}.course-summary-sidebar .lp-course-buttons button ~ .lp-enroll-notice.error{border-color:#d85554}.course-summary-sidebar .course-results-progress .items-progress,.course-summary-sidebar .course-results-progress .course-progress{display:flex;flex-direction:row;margin:0 0 5px;padding:0;justify-content:space-between;flex-wrap:wrap}.course-summary-sidebar .course-results-progress .items-progress__heading,.course-summary-sidebar .course-results-progress .course-progress__heading{margin:0;margin-bottom:7px;padding:0;color:#333;font-size:1rem;font-weight:500;flex:1 1 auto;width:auto}.course-summary-sidebar .course-results-progress .items-progress .learn-press-progress,.course-summary-sidebar .course-results-progress .course-progress .learn-press-progress{clear:both;width:100%}.course-summary-sidebar .course-results-progress .number{display:block;margin:0;color:#666;font-size:16px;font-weight:300;line-height:16px;text-align:left}.course-sidebar-preview .course-price{text-align:center}.course-sidebar-preview .course-price .origin-price{color:#666;font-size:18px;font-weight:300;font-style:unset}.course-sidebar-preview .course-price .price{color:#333;font-size:1.8rem;font-weight:500}.course-sidebar-preview .media-preview{overflow:hidden;position:relative;margin:-20px -20px 20px}.course-sidebar-preview .media-preview img{max-width:100%;height:auto;vertical-align:top}.course-sidebar-preview .course-time{margin-bottom:28px;padding-bottom:8px;border-bottom:1px solid rgba(204,204,204,0.3)}.course-sidebar-preview .course-time-row{display:flex;color:#666;font-size:16px;font-weight:300;justify-content:space-between}.course-sidebar-preview .course-time-row strong{color:#333;font-weight:500}.course-sidebar-preview .course-time-row time{color:#666;font-size:1rem;font-weight:300;line-height:24px}.course-sidebar-preview>*:last-child{margin-bottom:0}.learnpress-page .lp-button.secondary{background:#9198ab}.learnpress-page .lp-button.secondary:hover{background:#9ba6c5}.learnpress-page .lp-button:disabled,.learnpress-page .lp-button[disabled]{background:#ddd;pointer-events:none}.learnpress-page:hover{text-decoration:none}#popup-course{display:flex;position:fixed;z-index:99999;top:0;left:0;bottom:0;right:0;background:#fff}#popup-course .back-course{padding-right:30px;padding-left:30px;line-height:70px;background:rgba(255,255,255,0.1);color:#fff}#popup-course .back-course:hover{background:rgba(255,255,255,0.15)}@media(max-width:768px){#popup-course .back-course{background:transparent;opacity:.6;padding-right:15px;padding-left:15px}#popup-course .back-course:hover{background:transparent;opacity:1}}#popup-course #popup-header{display:flex;position:fixed;z-index:100;left:0;right:475px;padding:0;border-bottom:1px solid #d9e0f1;background:var(--lp-secondary-color);-webkit-transition:right .25s;-moz-transition:right .25s;-ms-transition:right .25s;-o-transition:right .25s;transition:right .25s}#popup-course #popup-header .course-title{margin:0;padding:0;line-height:70px;letter-spacing:unset}#popup-course #popup-header .course-title a{display:-webkit-box;overflow:hidden;color:#fff;font-size:16px;font-weight:400;text-overflow:ellipsis;-webkit-line-clamp:1;-webkit-box-orient:vertical}#popup-course #popup-header .course-title a:hover{color:var(--lp-primary-color)}@media(max-width:768px){#popup-course #popup-header .course-title{flex:1}}#popup-course #popup-header .items-progress{display:flex;justify-content:center;align-items:center;column-gap:10px}@media(max-width:768px){#popup-course #popup-header .items-progress{flex:1}}@media(max-width:767px){#popup-course #popup-header .items-progress{padding-bottom:20px;justify-content:end}}#popup-course #popup-header .number{padding-left:10px;color:#fff;font-size:14px;font-weight:300}#popup-course #popup-header .lp-button{display:flex;position:relative;height:40px;margin:9px;border:0;color:#fff;background:var(--lp-primary-color);font-size:14px;font-weight:400;justify-content:center;line-height:40px;align-items:center}#popup-course #popup-header .lp-button:hover{opacity:.8}#popup-course #popup-header .lp-button-back{float:left;margin:9px 10px}#popup-course #popup-header .lp-button-back button::before,#popup-course #popup-header .lp-button-back button::after{content:""}#popup-course #popup-header .lp-button-back button::before{border:1px solid #ddd}#popup-course #popup-header .lp-button-back button::after{border:1px solid #ddd}#popup-course .popup-header__inner{display:flex;width:792px;margin:0 auto;justify-content:space-between;align-items:center;padding-right:15px;padding-left:15px}@media(max-width:1024px){#popup-course .popup-header__inner{width:100%}}@media(max-width:767px){#popup-course .popup-header__inner{flex-direction:column}}#popup-course #popup-sidebar{overflow:auto;position:relative;box-shadow:0 15px 30px 0 rgba(0,0,0,0.1);flex:0 0 475px;-webkit-transition:.25s;-moz-transition:.25s;-ms-transition:.25s;-o-transition:.25s;transition:.25s}#popup-course #popup-sidebar .search-course{display:flex;position:relative;height:70px;background:#f9fafc}#popup-course #popup-sidebar .search-course input[name=s]{display:block;width:100%;margin:6px 0;padding-right:20px;border:0;color:#999;background:transparent;box-shadow:none;font-size:14px;line-height:1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#popup-course #popup-sidebar .search-course input[name=s]::-webkit-input-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]::-moz-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]:-ms-input-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]:-moz-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]::placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]::-webkit-input-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]::-moz-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]:-ms-input-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]:-moz-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]::placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]:focus{outline:0;color:#222}#popup-course #popup-sidebar .search-course button{position:absolute;top:0;left:10px;width:16px;height:70px;margin:0 10px;padding:0;border:0;background:transparent;line-height:1px}#popup-course #popup-sidebar .search-course button::before{color:#666;font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900;content:"\f002"}#popup-course #popup-sidebar .search-course button.clear{display:none}#popup-course #popup-sidebar .search-course button.clear::before{content:"\f00d"}#popup-course #popup-sidebar .search-course .search-results{display:none;overflow:auto;position:fixed;z-index:99999999;top:92px;bottom:0;right:0;width:400px;margin:0;border-top-color:transparent;border-left:1px solid #d9e0f1;background:#fbfcff}#popup-course #popup-sidebar .search-course .search-results .search-results__item{border-bottom:1px solid #d9e0f1;background:#fff}#popup-course #popup-sidebar .search-course .search-results .search-results__item img{position:absolute;right:10px;width:40px;height:40px}#popup-course #popup-sidebar .search-course .search-results .search-results__item a{display:-webkit-box;overflow:hidden;position:relative;box-sizing:content-box;height:40px;padding:10px 60px 10px 10px;color:#777;text-overflow:ellipsis;-webkit-line-clamp:1;-webkit-box-orient:vertical}#popup-course #popup-sidebar .search-course .search-results .search-results__item:hover{background:#d9e0f1}#popup-course #popup-sidebar .search-course .search-results .search-results__item-title{overflow:hidden;margin:0 0 -2px 0;padding:0;font-size:16px;font-weight:normal}#popup-course #popup-sidebar .search-course .search-results .search-results__item-author{font-size:12px}#popup-course #popup-sidebar .search-course .search-results .course-price{position:absolute;left:10px;bottom:10px;font-size:12px}#popup-course #popup-sidebar .search-course .search-results .course-price .origin-price{font-size:smaller;text-decoration:line-through}#popup-course #popup-sidebar .search-course .search-results .search-results__not-found{padding:10px;color:#777}#popup-course #popup-sidebar .search-course .search-results .search-results__pagination{padding:10px;text-align:center}#popup-course #popup-sidebar .search-course .search-results .search-results__pagination a,#popup-course #popup-sidebar .search-course .search-results .search-results__pagination span{display:inline-block;margin:0 2px 10px 3px;padding:5px 8px;border:1px solid #d9e0f1;border-radius:4px;color:#777;font-size:14px;line-height:1;cursor:pointer}#popup-course #popup-sidebar .search-course .search-results .search-results__pagination span{color:#999;background:#d9e0f1}#popup-course #popup-sidebar .search-course.searching .search-results{display:block}#popup-course #popup-sidebar .search-course.searching .clear{display:block}#popup-course #popup-sidebar .search-course.searching button{display:none}#popup-course #popup-sidebar .search-course.searching::after{position:absolute;z-index:1;bottom:0;right:50%;width:0;height:0;margin-right:-10px;border:10px solid transparent;border-bottom-color:#fff;content:""}#popup-course #popup-sidebar .course-curriculum{overflow:auto;position:absolute;top:70px;bottom:0;width:475px}#popup-course #popup-sidebar .course-curriculum::-webkit-scrollbar-thumb{background:#ccc}#popup-course #popup-sidebar .course-curriculum::-webkit-scrollbar{width:6px}#popup-course #popup-sidebar .course-curriculum::-webkit-scrollbar-track{background:#f5f5f5}#popup-course #popup-sidebar .section{position:relative;padding:0 0 4px 0}#popup-course #popup-sidebar .section .circle-progress{display:inline-block;position:absolute;top:50%;left:10px;width:24px;height:24px;margin-top:-12px;border:3px solid #d9e0f1;border-radius:50%}#popup-course #popup-sidebar .section.section-empty .section-header{margin:0}#popup-course #popup-sidebar .section.section-empty .learn-press-message{margin:0;padding:10px;border-bottom:1px solid #d9e0f1;border-radius:0;color:#999;background:#f5f5f5;font-size:14px}#popup-course #popup-sidebar .section.section-empty .learn-press-message::before,#popup-course #popup-sidebar .section.section-empty .learn-press-message::after{position:absolute;z-index:9999;top:-16px;right:10px;width:0;height:0;border:8px solid transparent;border-bottom-color:#f5f5f5;background:transparent;content:"";-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}#popup-course #popup-sidebar .section.section-empty .learn-press-message::after{z-index:9998;top:-20px;right:8px;border-width:10px;border-bottom-color:#d9e0f1}#popup-course #popup-sidebar .section-header{position:sticky;z-index:1000;top:0;height:94px;padding:38px 20px 20px 20px;cursor:pointer;background-color:white}#popup-course #popup-sidebar .section-header .section-title{padding:0 0 4px 0;color:#000;font-size:20px;font-weight:500}#popup-course #popup-sidebar .section-header .section-title .show-desc::before{font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f0d7"}#popup-course #popup-sidebar .section-header .section-toggle{justify-content:flex-end;flex:0}#popup-course #popup-sidebar .section-header .section-toggle i{color:#666}#popup-course #popup-sidebar .section-header .section-meta{padding-top:6px;padding-bottom:0}#popup-course #popup-sidebar .section-content{margin-bottom:0}#popup-course #popup-sidebar .course-item{min-height:50px;margin-bottom:4px;padding:5px 20px;background:#f9fafc;align-items:center}#popup-course #popup-sidebar .course-item>span{display:none}#popup-course #popup-sidebar .course-item::before{top:-1px;bottom:-1px;height:auto;background:transparent}#popup-course #popup-sidebar .course-item::after{content:""}#popup-course #popup-sidebar .course-item.current{background:#eaeaea}#popup-course #popup-sidebar .course-item.has-status.failed .trans{color:#f02425}#popup-course #popup-sidebar .course-item.status-completed .trans{color:#3bb54a}#popup-course #popup-sidebar .section-item-link{line-height:1;padding-left:0}#popup-course #popup-sidebar .section-item-link::before{padding:12px 0;vertical-align:unset}#popup-course #popup-sidebar .section-item-link .item-name{width:100%;padding:0 17px 0 10px;font-size:14px;line-height:21px;font-weight:500}#popup-course #popup-sidebar .course-item-meta{padding:0}#popup-course #popup-sidebar .course-item-meta .item-meta{padding:0;color:#999;background:transparent;font-size:12px;line-height:1.5;height:auto}#popup-course #popup-sidebar .course-item-meta .item-meta:first-child{margin-right:0}#popup-course #popup-sidebar .course-item-meta .item-meta::before{font-size:12px;line-height:21px}#popup-course #popup-content{overflow:auto;position:relative;margin:70px 0 50px 0;flex:1;padding-right:15px;padding-left:15px}#popup-course #popup-content .lp-button{position:relative;margin:0 0 0 10px;padding:12px 29px;border-color:var(--lp-secondary-color);font-size:14px}#popup-course #popup-content .lp-button.instant-check .instant-check__icon{margin-left:5px}#popup-course #popup-content .lp-button.instant-check .instant-check__icon::before{font-family:"Font Awesome 5 Free";content:"\f058"}#popup-course #popup-content .lp-button.instant-check .instant-check__info{visibility:hidden;position:absolute;top:100%;right:0;margin-top:3px;padding:11px 20px;border-radius:3px;background:#eee;white-space:nowrap;text-transform:none}#popup-course #popup-content .lp-button.instant-check:hover .instant-check__info{visibility:visible;position:absolute;top:100%;right:0;margin-top:3px;padding:11px 11px;border-radius:3px;color:#333;background:#eee;white-space:nowrap}#popup-course #popup-content .lp-button.instant-check.loading .instant-check__icon{display:inline-block;animation:lp-rotating 1s linear infinite}#popup-course #popup-content .lp-button.instant-check.loading .instant-check__icon::before{font-weight:800;content:"\f110"}#popup-course #popup-content .lp-button:hover{border-color:var(--lp-primary-color)}#popup-course #popup-content .lp-button.completed{display:flex;flex-direction:row-reverse;margin-top:32px;border-color:transparent;color:#fff;background:#3db748;font-size:16px;align-items:center;justify-content:center}#popup-course #popup-content .lp-button.completed i{margin-right:9px;font-size:14px}#popup-course #popup-content.fixed-quiz-status .quiz-status{background:var(--lp-primary-color)}#popup-course #popup-content.fixed-quiz-status .quiz-status>div{padding:0}@media(max-width:767px){#popup-course #popup-content{margin-top:113px}}#popup-course #popup-footer{position:fixed;z-index:999;left:0;bottom:0;right:475px;width:100%;max-width:792px;height:50px;margin:0 auto;border-top:1px solid #ebebeb;background:#fff;-webkit-transition:right .25s;-moz-transition:right .25s;-ms-transition:right .25s;-o-transition:right .25s;transition:right .25s}@media(max-width:1024px){#popup-course #popup-footer{width:auto;padding:0 15px}}#popup-course #popup-footer .course-item-nav{justify-content:space-between}#popup-course #popup-footer .course-item-nav .prev,#popup-course #popup-footer .course-item-nav .next{display:flex;line-height:50px}#popup-course #popup-footer .course-item-nav .prev a,#popup-course #popup-footer .course-item-nav .next a{display:block;color:#666;font-size:16px}#popup-course #popup-footer .course-item-nav .prev::before,#popup-course #popup-footer .course-item-nav .next::before{color:#999;font-family:"Font Awesome 5 Free";font-size:12px;font-weight:900}#popup-course #popup-footer .course-item-nav .prev:hover a,#popup-course #popup-footer .course-item-nav .prev:hover::before,#popup-course #popup-footer .course-item-nav .next:hover a,#popup-course #popup-footer .course-item-nav .next:hover::before{color:var(--lp-primary-color)}#popup-course #popup-footer .course-item-nav .prev:hover .course-item-nav__name,#popup-course #popup-footer .course-item-nav .next:hover .course-item-nav__name{display:block}#popup-course #popup-footer .course-item-nav .next{flex-direction:row-reverse}#popup-course #popup-footer .course-item-nav .next::before{margin-right:10px;content:"\f0da"}#popup-course #popup-footer .course-item-nav[data-nav=next]{justify-content:flex-end}#popup-course #popup-footer .prev::before{margin-left:10px;content:"\f0d9"}#popup-course #popup-footer .prev .course-item-nav__name{left:auto;right:-30px}#popup-course #popup-footer .prev .course-item-nav__name::before{left:auto;right:5px}@media(max-width:1024px){#popup-course #popup-footer .prev .course-item-nav__name{right:15px}}#popup-course #popup-footer .course-item-nav__name{display:none;position:absolute;top:-20px;left:-30px;width:auto;padding:10px 15px;color:#666;background:#ccc;font-size:14px;font-weight:300;line-height:1}@media(max-width:1024px){#popup-course #popup-footer .course-item-nav__name{top:-25px;left:15px;right:auto}}#popup-course #sidebar-toggle{display:inline-block;position:absolute;z-index:100;top:198px;right:475px;width:25px;height:56px;margin:0;background:#fff;box-shadow:0 0 20px 0 rgba(0,0,0,0.15);cursor:pointer;transition:.25s;-webkit-appearance:none;border:0}#popup-course #sidebar-toggle:after{display:none}#popup-course #sidebar-toggle::before{display:inline-block;position:absolute;top:50%;right:50%;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f0d9";transition:.25s;transform:translate(50%,-50%)}#popup-course #sidebar-toggle:focus{border:0;outline:0}#popup-course .lp-quiz-buttons .complete-quiz,#popup-course .lp-quiz-buttons .back-quiz,#popup-course .lp-quiz-buttons .review-quiz{float:left}#popup-course .quiz-results,#popup-course .quiz-content,#popup-course .quiz-questions,#popup-course .quiz-buttons,#popup-course .quiz-attempts{margin-bottom:60px}#popup-course .quiz-questions .lp-fib-content{margin-bottom:20px;padding:20px;border:2px solid #f5f5f5;border-radius:6px;line-height:1.6}#popup-course .quiz-questions .lp-fib-input{display:inline-block;width:auto;max-width:none}#popup-course .quiz-questions .lp-fib-input>input{height:36px;padding:6px 16px;border:1px solid #222;line-height:36px}#popup-course .quiz-questions .lp-fib-answered{padding:0 10px;background:#ececec;white-space:nowrap}#popup-course .quiz-questions .lp-fib-answered.fail{border:2px solid #d85554}#popup-course .quiz-questions .lp-fib-answered.fail .lp-fib-answered__answer{text-decoration:line-through}#popup-course .quiz-questions .lp-fib-answered.correct{border:2px solid #00adff}#popup-course .quiz-questions .lp-fib-note{display:flex;margin-right:10px;font-size:14px;font-weight:400;align-items:center}#popup-course .quiz-questions .lp-fib-note>span{display:inline-block;width:20px;height:20px;margin:0 0 0 5px}#popup-course .quiz-questions .lp-sorting-choice__check-answer{padding:5px 20px;border:2px solid #059601;border-radius:5px;font-size:1rem}#popup-course .question .answer-option input[type=radio],#popup-course .question .answer-option input[type=checkbox]{-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);margin:0 10px 0 0}#popup-course .question .answer-option input[type=radio]::before{border-radius:50%}#popup-course .question .question-response{display:flex;align-items:center;justify-content:flex-start}#popup-course .scrollbar-light>.scroll-element{z-index:9999}#popup-course .scrollbar-light>.scroll-element.scroll-y{display:none}#popup-course .scrollbar-light>.scroll-element.scroll-y .scroll-bar{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body.admin-bar #popup-course{top:32px}body.lp-sidebar-toggle__close #popup-course>#sidebar-toggle{right:0}body.lp-sidebar-toggle__close #popup-course>#sidebar-toggle::before{content:"\f0da"}body.lp-sidebar-toggle__close #popup-course #popup-sidebar{flex:0}body.lp-sidebar-toggle__close #popup-course #popup-header,body.lp-sidebar-toggle__close #popup-course #popup-footer{right:0}@media(max-width:768px){body:not(.lp-sidebar-toggle__open) #popup-course>#sidebar-toggle{right:0}body:not(.lp-sidebar-toggle__open) #popup-course>#sidebar-toggle::before{content:"\f0da"}body:not(.lp-sidebar-toggle__open) #popup-course #popup-sidebar{flex:0}}.course-curriculum .section-header .section-meta{position:relative}@media screen and (max-width:1280px){#popup-course #popup-sidebar{flex-basis:300px}#popup-course #popup-sidebar .course-curriculum{width:300px}#popup-course #popup-header,#popup-course #popup-footer{right:300px}#popup-course #sidebar-toggle{right:299px}}@media screen and (max-width:782px){body.admin-bar #popup-course{top:46px}#popup-course #popup-sidebar{flex-basis:250px}#popup-course #popup-sidebar .course-curriculum{width:250px}#popup-course #popup-header,#popup-course #popup-footer{right:250px}#popup-course #sidebar-toggle{right:249px}#popup-course #sidebar-toggle:checked ~ #popup-sidebar{flex-basis:0}#popup-course .course-item-meta .item-meta.count-questions,#popup-course .course-item-meta .item-meta.duration{display:none}}.content-item-wrap{width:792px;max-width:100%;margin:0 auto;padding-bottom:80px}@media(max-width:1024px){.content-item-wrap{width:100%}}.content-item-wrap .course-item-title{margin-top:0;margin-bottom:24px;color:#333;font-size:30px;font-weight:600}@media(max-width:767px){.content-item-wrap .course-item-title{text-align:center}}.content-item-wrap h4{font-size:1.5rem;font-weight:500;line-height:1.5}.content-item-wrap .content-item-summary{padding-top:50px}.content-item-wrap .content-item-description{margin-bottom:30px}.content-item-wrap .content-item-description h2,.content-item-wrap .content-item-description h3,.content-item-wrap .content-item-description h4,.content-item-wrap .content-item-description h5,.content-item-wrap .content-item-description h6{margin-top:0;margin-bottom:18px;font-size:18px;letter-spacing:unset}.content-item-wrap .content-item-description p{margin:0 0 18px 0;color:#666;font-size:16px;font-weight:300;line-height:26px}.content-item-wrap .content-item-description img{max-width:100%;height:auto;vertical-align:middle}.content-item-wrap #learn-press-quiz-app{margin-bottom:40px}.content-item-wrap .quiz-content{margin-bottom:40px;color:#666;font-size:16px;font-weight:300;line-height:26px}.content-item-wrap .quiz-content img{max-width:100%;height:auto;vertical-align:middle}.content-item-wrap .quiz-buttons{display:flex;justify-content:center;text-align:center}.content-item-wrap .quiz-buttons .button-right .lp-button{margin:0 15px 0 0}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav]{margin:0;border:1px solid #d9e0f1;color:#777;background:#fbfcff}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav]::before{display:inline-block;width:15px;height:15px;border:2px solid #d9e0f1;border-top-color:transparent;border-right-color:transparent;content:"";-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav].prev::before{margin-right:7px;-webkit-transform:rotate(-135deg);-moz-transform:rotate(-135deg);-ms-transform:rotate(-135deg);-o-transform:rotate(-135deg);transform:rotate(-135deg)}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav].next{margin-right:-1px}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav].next::before{margin-left:7px}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav]:hover{background:#fff}.content-item-wrap .quiz-buttons.align-center{display:block;text-align:center}.content-item-wrap .quiz-buttons.align-center .button-left{text-align:center}.content-item-wrap .quiz-buttons.align-center .button-left.fixed{position:fixed;z-index:99999;bottom:0;right:50%;width:100%;max-width:792px;height:49px;margin-right:237px;transform:translateX(50%)}@media(max-width:768px){.content-item-wrap .quiz-buttons.align-center .button-left.fixed{width:100% !important}}.content-item-wrap .quiz-buttons.align-center .button-left.nav-center{height:50px;margin-right:0 !important}.content-item-wrap .quiz-buttons:not(.infinity).is-first .prev{display:none}.content-item-wrap .quiz-buttons:not(.infinity).is-last .next{display:none}.content-item-wrap .quiz-buttons:not(.is-first):not(.is-last) .prev{border-top-left-radius:0;border-bottom-left-radius:0}.content-item-wrap .quiz-buttons:not(.is-first):not(.is-last) .next{border-top-right-radius:0;border-bottom-right-radius:0}.content-item-wrap .questions-pagination{height:33px;padding:8px 0;background:#fff;text-align:center}.content-item-wrap .questions-pagination .nav-links{text-align:center}.content-item-wrap .questions-pagination .nav-links .page-numbers{display:inline-block;vertical-align:middle;margin:0 3px 3px;padding:10px 16px;color:#666;background-color:transparent;font-size:16px;font-weight:300;line-height:1;border:1px solid;cursor:pointer}.content-item-wrap .questions-pagination .nav-links .page-numbers.next,.content-item-wrap .questions-pagination .nav-links .page-numbers.prev{display:inline-block;padding:10px;background:transparent;font-size:16px;text-align:center;text-decoration:none;text-transform:none;border:1px solid}.content-item-wrap .questions-pagination .nav-links .page-numbers.current,.content-item-wrap .questions-pagination .nav-links .page-numbers:hover{color:var(--lp-primary-color)}.course-curriculum .section-title{position:relative;margin-bottom:0;padding:8px 0;color:#5383f7;font-size:16px;font-weight:normal;line-height:1}.course-curriculum .section-title span.show-desc{display:inline-block;position:absolute;top:50%;left:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-title span.show-desc::before{font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f107"}.course-curriculum .section-title span.show-desc:hover::before{border-top-color:#ccc}.lp-overlay{display:none;position:fixed;z-index:99999;top:0;left:0;bottom:0;right:0;width:100%;height:100%;background-color:rgba(209,213,219,0.8);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms;transition-property:opacity}.wp-admin .lp-modal-dialog .lp-modal-header{padding:2em}.wp-admin .lp-modal-dialog .lp-modal-header h3{font-size:1.4em}.lp-modal-dialog{display:flex;position:fixed;z-index:9999;top:0;left:0;right:0;width:100%;min-height:100vh;text-align:center;align-items:center;justify-content:center}.lp-modal-dialog .lp-modal-content{display:inline-block;overflow:hidden;z-index:2;width:auto;max-width:600px;border-radius:8px;text-align:right;vertical-align:middle;background:white;color:black}.lp-modal-dialog .lp-modal-header{background:#7c60d9;border-bottom:1px solid #eee;padding:1em}.lp-modal-dialog .lp-modal-header h3{margin:0;color:white;font-size:inherit;font-weight:400}.lp-modal-dialog .lp-modal-body .main-content{max-height:500px;overflow:auto}.lp-modal-dialog .lp-modal-body .main-content h3,.lp-modal-dialog .lp-modal-body .main-content h2,.lp-modal-dialog .lp-modal-body .main-content .pd-2em{padding:1em}.lp-modal-dialog .lp-modal-footer{padding:20px;padding-top:0;background-color:#f9fafb;text-align:left}.lp-modal-dialog .btn-yes{color:#fff;background-color:#7c60d9}#lp-modal-overlay{display:none;position:fixed;z-index:999999;top:0;left:0;bottom:0;right:0;opacity:.5;background:#000}#lp-modal-window{display:none;position:fixed;z-index:999999;top:50%;right:50%;padding:35px 60px 28px 60px;background:#fff;transform:translate(50%,-50%);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#lp-modal-window #lp-modal-content{margin:0 0 24px 0;color:#333;font-size:16px;font-weight:400;line-height:26px;text-align:center}#lp-modal-window #lp-modal-content>*{margin:0 0 .5em}#lp-modal-window #lp-modal-buttons{display:flex;flex-direction:row-reverse;align-items:center;justify-content:center}#lp-modal-window #lp-modal-buttons .lp-button{position:relative;margin:0 10px 0 10px}.learn-press-comments{width:792px;max-width:100%;margin:0 auto}@media(max-width:1024px){.learn-press-comments{width:100%}}.learn-press-progress{overflow:hidden;position:relative;width:80px;height:6px;border-radius:3px}.learn-press-progress .learn-press-progress__active{position:absolute;z-index:1;right:-100%;width:100%;height:100%;border-radius:3px;background:var(--lp-primary-color);-webkit-transition:.5s;-moz-transition:.5s;-ms-transition:.5s;-o-transition:.5s;transition:.5s}.learn-press-progress::before{display:block;position:absolute;z-index:0;top:0;width:100%;height:100%;background:#ccc;content:""}.course-curriculum .section-header .section-left{display:flex}.course-curriculum .section-header .section-left .section-title{flex:1}.course-curriculum .section-header .section-left .section-toggle{flex:0 0 40px;align-items:center;text-align:center;cursor:pointer}.course-curriculum .section-header .section-left .section-toggle .fa-caret-down{display:none}.course-curriculum .section-header .learn-press-progress{width:80px}.course-curriculum .section.closed .section-toggle .fa-caret-down{display:block}.course-curriculum .section.closed .section-toggle .fa-caret-up{display:none}.course-curriculum .section.closed .section-content{overflow:hidden;height:0}*{box-sizing:border-box;margin:0;padding:0}button{cursor:pointer}input,button,select,textarea{outline:0}html{overflow-x:hidden}a{-webkit-transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;transition:.3s}.lp-skeleton-animation{margin:0;padding:0;list-style:none}.lp-skeleton-animation>li{width:100%;height:16px;margin-top:15px;border-radius:2px;background:linear-gradient(-90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}@keyframes lp-skeleton-loading{0%{background-position:0 50%}to{background-position:100% 50%}}.learnpress.theme-twentytwentytwo .wp-site-blocks,.learnpress.twentytwentytwo .wp-site-blocks{max-width:none;padding-left:0;padding-right:0}.learnpress.theme-twentytwentytwo .wp-site-blocks>.wp-block-group,.learnpress.twentytwentytwo .wp-site-blocks>.wp-block-group{max-width:none;margin-left:auto;margin-right:auto}.learnpress.theme-twentytwentytwo .lp-archive-courses,.learnpress.twentytwentytwo .lp-archive-courses{max-width:none}.learnpress.twentytwentytwo .wp-container-11 .alignfull,.learnpress.twentytwentytwo .wp-container-9 .alignfull,.learnpress.twentytwentytwo .wp-container-12 .alignfull{max-width:100%;margin-right:0 !important;margin-left:0 !important;padding-right:0 !important;padding-left:0 !important}@media(max-width:1199px){.learnpress.twentytwentytwo .wp-site-blocks .wp-block-template-part{padding-right:15px;padding-left:15px}}input[type=text],input[type=email],input[type=number],input[type=password]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;box-shadow:unset}body{background:#fff}body.learnpress-page{overflow-x:hidden}.wrap-fullwidth a:focus,.wrap-fullwidth button:focus,.wrap-fullwidth input:focus,.wrap-fullwidth textarea:focus{border:0;outline:0}.wrap-fullwidth a:hover{text-decoration:none}.wrap-fullwidth p{word-break:break-word}.wrap-fullwidth p:last-child{margin-bottom:0}.wrap-fullwidth label{display:block;margin:0;outline:0}.wrap-fullwidth img{max-width:100%;height:auto}.wrap-fullwidth form{margin:0}.wrap-fullwidth .col-full{box-sizing:border-box;max-width:100%;padding:0}.wrap-fullwidth .col-full .woocommerce-breadcrumb{display:none}footer{clear:both}.margin-bottom{margin-bottom:20px}.hide-if-js{display:none !important}.clearfix::after{display:block;clear:both;content:""}.lp-form-fields{margin:0;padding:0;list-style:none}.lp-form-fields .form-field{margin:0 0 20px 0;list-style:none}.lp-content-wrap{width:1170px;max-width:90%;margin:0 auto}.lp-content-wrap>h2{margin-top:0;margin-bottom:26px;color:#333;font-size:30px;font-weight:600}.learn-press-breadcrumb{max-width:1170px;width:100%;margin:0 auto 45px auto;padding:0;color:#333;font-size:14px;font-weight:400;list-style:none}.learn-press-breadcrumb li{display:inline-block;margin:0}.learn-press-breadcrumb li a:hover{color:var(--lp-primary-color)}.learn-press-breadcrumb i{margin:0 5px;color:#666;font-size:12px}@media(max-width:1024px){.learn-press-breadcrumb{padding-left:15px;padding-right:15px}}.learn-press-breadcrumb a{color:#666;font-weight:500}.learnpress-page .lp-button,.learnpress-page #lp-button{padding:16px 24px;border:1px solid #ccc;color:#333;background:transparent;box-shadow:unset;font-family:inherit;font-size:16px;font-weight:400;line-height:1;text-align:center;vertical-align:middle;text-decoration:none;text-transform:capitalize;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.learnpress-page .lp-button.large,.learnpress-page #lp-button.large{height:52px;padding:18px 30px;font-size:18px}.learnpress-page .lp-button:hover,.learnpress-page #lp-button:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.learnpress-page .lp-button.btn-ajax-off .icon,.learnpress-page #lp-button.btn-ajax-off .icon{display:none}.learnpress-page .lp-button.btn-ajax-on .icon,.learnpress-page #lp-button.btn-ajax-on .icon{display:inline-block;margin-left:5px;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.learnpress-page .lp-button:focus,.learnpress-page #lp-button:focus{outline:0}.learnpress-page .lp-button.loading::before,.learnpress-page #lp-button.loading::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";animation:lp-rotating 1s linear infinite}.learnpress-page .rwmb-field .description{margin-top:8px;color:#999;font-size:smaller;font-style:italic}.btn-base{border-color:var(--lp-primary-color);color:white;background-color:var(--lp-primary-color)}.lp-ajax-message{display:none;margin-top:20px;padding:20px;border:2px solid #059601;border-radius:9px;font-size:15px;line-height:1.4}.lp-ajax-message.error{border-color:#d85554}.course-meta{margin-bottom:14px}.course-meta .course-students::before{font-family:"Font Awesome 5 Free";content:""}.lp-entry-content .course-tabs{margin-bottom:60px}.learn-press-checkout-comment h4{display:none}.order-comments{width:100%;padding:15px;min-height:150px;border:1px solid #ccc;resize:none}.learn-press-progress .progress-bg{overflow:hidden;position:relative;height:6px;background:#ccc;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.learn-press-progress .progress-bg .progress-active{position:absolute;right:50%;width:100%;height:100%;margin-right:-100%;background:var(--lp-primary-color);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.retake-course,.enroll-course,.purchase-course{display:inline-block}.table-orders{font-size:16px}.table-orders th,.table-orders td{padding:5px 10px}.form-button{display:inline-block}.learn-press-pagination{padding-bottom:20px;text-align:center}.learn-press-pagination .page-numbers{display:inline-block;margin:0;padding:0;border:0;outline:0;background:transparent;list-style:none}.learn-press-pagination .page-numbers>li{display:inline-block;margin:0;padding:0 14px}.learn-press-pagination .page-numbers>li .page-numbers{float:unset;padding:0;color:#666;background:transparent;font-size:16px;font-weight:300}.learn-press-pagination .page-numbers>li .page-numbers.current{color:var(--lp-primary-color);font-weight:400}.learn-press-pagination .page-numbers>li .page-numbers:hover{color:var(--lp-primary-color)}ul.list-table-nav{display:flex;margin-right:0;list-style:none}ul.list-table-nav .nav-text{text-align:right;flex:1}ul.list-table-nav .nav-pages{text-align:left;flex:1}ul.list-table-nav .nav-pages .learn-press-pagination{display:inline-block;margin-bottom:0}.primary-color{color:#00adff}.primary-color-before::before{color:#00adff}.primary-color-after::after{color:#00adff}.primary-background-color{background:#00adff}.primary-background-color{background:#00adff}.course-origin-price{margin-left:5px;font-size:85%;text-decoration:line-through}.course-item-nav{display:flex}.course-item-nav .prev span,.course-item-nav .next span{display:block;font-weight:bold}.course-item-nav .prev a,.course-item-nav .next a{color:#999}.course-item-nav .next{text-align:left}.content-item-wrap #comments{margin-left:0;margin-right:0}.content-item-wrap #comments #comment{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-summary-sidebar{position:relative}@media(min-width:769px){.course-summary-sidebar.slide-down .course-summary-sidebar__inner{position:fixed;top:0}}@media(min-width:1200px){.course-summary-sidebar.slide-top .course-summary-sidebar__inner{position:absolute}}.course-graduation span{color:#999}.course-graduation .icon{margin-left:5px;font-size:20px}.course-graduation.passed .icon{color:#059601}.course-graduation.error .icon{color:#d85554}.learn-press-template-warning::before{color:#ffc107;font-family:"Font Awesome 5 Free";content:"\f071"}.lp-badge{display:flex;height:30px;padding:0;line-height:1;align-items:center;justify-content:center}.lp-badge::before,.lp-badge::after{content:""}.lp-badge::before{display:inline-block;position:relative;z-index:10;color:#fff;font-weight:bold;line-height:1}.lp-badge.featured-course{position:absolute;z-index:1;top:25px;right:-110px;width:300px;background:#93f;text-align:center;transform:rotate(45deg)}.lp-badge.featured-course::before{font-size:12px;text-transform:uppercase;content:attr(data-text)}@media(min-width:769px){#learn-press-item-comments{padding-bottom:50px}}.course-tabs input[name=learn-press-course-tab-radio],.course-tabs .course-tab-panel{display:none}.course-tabs .course-nav label{display:flex;align-items:center;justify-content:center;margin:0;padding:17px 10px;font-size:16px;line-height:1;font-weight:600;text-transform:capitalize;cursor:pointer}.no-event{pointer-events:none}@media screen and (max-width:768px){ul.learn-press-courses .course{width:48%}}@media screen and (max-width:600px){ul.learn-press-courses .course{width:100%;margin-left:0}}.course-price:empty{display:none !important}.quiz-attempts .attempts-heading{margin-bottom:15px}.quiz-attempts table{border-spacing:0;border-right:1px solid var(--lp-secondary-color);border-top:1px solid var(--lp-secondary-color);width:100%}.quiz-attempts table tr th,.quiz-attempts table tr td{border-left:1px solid var(--lp-secondary-color);border-bottom:1px solid var(--lp-secondary-color);padding:5px 15px;text-align:center}.quiz-attempts table tr th{font-weight:500}@media(max-width:575px){#popup-course .quiz-attempts{overflow-x:auto}}
|
@@ -2370,18 +2370,21 @@ body.learnpress .learn-press-tabs .learn-press-tabs__tab, body.learnpress .attac
|
|
2370 |
background: #fff;
|
2371 |
}
|
2372 |
|
|
|
|
|
|
|
|
|
2373 |
.course-tab-panel {
|
2374 |
display: none;
|
2375 |
-
padding-top: 30px;
|
2376 |
}
|
2377 |
.course-tab-panel.active {
|
2378 |
display: block;
|
2379 |
}
|
2380 |
-
.course-tab-panel
|
2381 |
-
|
2382 |
-
|
2383 |
-
|
2384 |
-
|
2385 |
}
|
2386 |
.course-tab-panel .course-description h4 {
|
2387 |
margin-top: 0;
|
@@ -2391,10 +2394,7 @@ body.learnpress .learn-press-tabs .learn-press-tabs__tab, body.learnpress .attac
|
|
2391 |
font-weight: 500;
|
2392 |
}
|
2393 |
.course-tab-panel .course-description p {
|
2394 |
-
|
2395 |
-
font-size: 16px;
|
2396 |
-
font-weight: 300;
|
2397 |
-
line-height: 26px;
|
2398 |
}
|
2399 |
.course-tab-panel .course-description img {
|
2400 |
max-width: 100%;
|
@@ -3383,8 +3383,8 @@ input[name=course-extra-box-ratio]:checked + .course-extra-box .course-extra-box
|
|
3383 |
display: block;
|
3384 |
position: relative;
|
3385 |
margin: 0;
|
3386 |
-
padding:
|
3387 |
-
font-size: 1rem;
|
3388 |
font-weight: 500;
|
3389 |
line-height: 1.7;
|
3390 |
cursor: pointer;
|
@@ -3413,9 +3413,9 @@ input[name=course-extra-box-ratio]:checked + .course-extra-box .course-extra-box
|
|
3413 |
display: none;
|
3414 |
}
|
3415 |
.course-tab-panel-faqs .course-faqs-box__content-inner {
|
3416 |
-
padding: 0
|
3417 |
color: #666;
|
3418 |
-
font-size:
|
3419 |
font-weight: 300;
|
3420 |
line-height: 26px;
|
3421 |
-webkit-animation-name: course-faqs-box__content-inner-transform;
|
@@ -5306,7 +5306,7 @@ a {
|
|
5306 |
}
|
5307 |
.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist::before {
|
5308 |
font-family: "Font Awesome 5 Free";
|
5309 |
-
font-size:
|
5310 |
font-weight: 900;
|
5311 |
content: "\f004";
|
5312 |
}
|
@@ -6136,6 +6136,7 @@ input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20)::before {
|
|
6136 |
display: flex;
|
6137 |
justify-content: center;
|
6138 |
align-items: center;
|
|
|
6139 |
}
|
6140 |
@media (max-width: 768px) {
|
6141 |
#popup-course #popup-header .items-progress {
|
2370 |
background: #fff;
|
2371 |
}
|
2372 |
|
2373 |
+
.course-tab-panels .course-tab-panel {
|
2374 |
+
padding-top: 30px;
|
2375 |
+
}
|
2376 |
+
|
2377 |
.course-tab-panel {
|
2378 |
display: none;
|
|
|
2379 |
}
|
2380 |
.course-tab-panel.active {
|
2381 |
display: block;
|
2382 |
}
|
2383 |
+
.course-tab-panel .course-description {
|
2384 |
+
color: #666;
|
2385 |
+
font-size: 16px;
|
2386 |
+
font-weight: 300;
|
2387 |
+
line-height: 26px;
|
2388 |
}
|
2389 |
.course-tab-panel .course-description h4 {
|
2390 |
margin-top: 0;
|
2394 |
font-weight: 500;
|
2395 |
}
|
2396 |
.course-tab-panel .course-description p {
|
2397 |
+
line-height: inherit;
|
|
|
|
|
|
|
2398 |
}
|
2399 |
.course-tab-panel .course-description img {
|
2400 |
max-width: 100%;
|
3383 |
display: block;
|
3384 |
position: relative;
|
3385 |
margin: 0;
|
3386 |
+
padding: 20px 45px 20px 25px;
|
3387 |
+
font-size: 1.1rem;
|
3388 |
font-weight: 500;
|
3389 |
line-height: 1.7;
|
3390 |
cursor: pointer;
|
3413 |
display: none;
|
3414 |
}
|
3415 |
.course-tab-panel-faqs .course-faqs-box__content-inner {
|
3416 |
+
padding: 0 25px 25px 25px;
|
3417 |
color: #666;
|
3418 |
+
font-size: 1rem;
|
3419 |
font-weight: 300;
|
3420 |
line-height: 26px;
|
3421 |
-webkit-animation-name: course-faqs-box__content-inner-transform;
|
5306 |
}
|
5307 |
.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist::before {
|
5308 |
font-family: "Font Awesome 5 Free";
|
5309 |
+
font-size: 16px;
|
5310 |
font-weight: 900;
|
5311 |
content: "\f004";
|
5312 |
}
|
6136 |
display: flex;
|
6137 |
justify-content: center;
|
6138 |
align-items: center;
|
6139 |
+
column-gap: 10px;
|
6140 |
}
|
6141 |
@media (max-width: 768px) {
|
6142 |
#popup-course #popup-header .items-progress {
|
@@ -1 +1 @@
|
|
1 |
-
@charset "UTF-8";@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(360deg);-moz-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}@keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}.learn-press-message{position:relative;margin:0 0 20px 0;padding:10px 50px 10px 15px;border-top:5px solid #00adff;border-radius:0 0 5px 5px;background:#f5f5f5;width:100%}.learn-press-message.icon{padding-left:45px}.learn-press-message.icon::before{background:#00adff}.learn-press-message.icon::after{position:absolute;top:50%;left:15px;width:10px;height:10px;margin-top:-13px;margin-right:10px;border-radius:50%;color:#fff;background:#00adff;font-family:"Font Awesome 5 Free";font-size:20px;line-height:26px;text-align:center;vertical-align:baseline;content:"\f129"}.learn-press-message::before,.learn-press-message::after{position:absolute;top:0;content:""}.learn-press-message::before{right:20px;width:20px;height:30px;background:#00adff}.learn-press-message::after{top:10px;right:20px;width:0;height:0;border:10px solid transparent;border-bottom-color:#f5f5f5}.learn-press-message.error{border-color:#d85554}.learn-press-message.error::before{background:#d85554}.learn-press-message.error.icon::before,.learn-press-message.error.icon::after{background:#d85554}.learn-press-message.error.icon::after{content:"\f00d"}.learn-press-message.warning{border-color:#ffc107}.learn-press-message.warning::before{background:#ffc107}.learn-press-message.warning.icon::before,.learn-press-message.warning.icon::after{background:#ffc107}.learn-press-message.warning.icon::after{content:"\f00d"}.learn-press-message.success{border-color:#059601}.learn-press-message.success::before{background:#059601}.learn-press-message.success.icon::before,.learn-press-message.success.icon::after{background:#059601}.learn-press-message.success.icon::after{content:"\f129"}.learn-press-message a{text-decoration:underline}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}.ajaxload{display:inline-block;position:relative;width:30px;height:30px;background:#7b7b7b;content:"";-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.ajaxload::after{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;display:inline-block;position:absolute;top:2px;left:50%;width:6px;height:6px;margin-left:-3px;background:#dedede;content:""}.lp-ajaxload-style-1{display:inline-block;position:relative;width:32px;height:32px}.lp-ajaxload-style-1::before,.lp-ajaxload-style-1::after{position:absolute;top:0;left:0;width:100%;height:100%;border:3px solid #ddd;content:""}.lp-ajaxload-style-1::after{clip:rect(0,32px,16px,16px);border-color:#2fa7ff;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.learn-press-tabs{margin-bottom:34px;background:#f1f2f8}.learn-press-tabs .learn-press-tabs__checker{display:none}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10)::after{background:#fff}.learn-press-tabs .learn-press-tabs__nav{display:flex;margin:0;padding:0;border:1px solid #e5e7f2;list-style:none}.learn-press-tabs .learn-press-tabs__tab{position:relative;margin:0;border-right:1px solid #e5e7f2;background:#f1f2f8;list-style:none}.learn-press-tabs .learn-press-tabs__tab:last-child{border-right:0}.learn-press-tabs .learn-press-tabs__tab>label{display:block;margin:0;padding:18px 65px;font-size:18px;line-height:1;font-weight:600;text-align:center;text-transform:capitalize;cursor:pointer}.learn-press-tabs .learn-press-tabs__tab>label a{color:#333}.learn-press-tabs .learn-press-tabs__tab>label a:focus{outline:0;text-decoration:none}@media(max-width:767px){.learn-press-tabs .learn-press-tabs__tab>label{padding:20px 50px 14px 50px}}.learn-press-tabs .learn-press-tabs__tab::before{position:absolute;top:-1px;left:0;width:100%;height:4px;background:transparent;content:""}.learn-press-tabs .learn-press-tabs__tab::after{position:absolute;bottom:-1px;left:0;width:100%;height:4px;background:transparent;content:""}.learn-press-tabs .learn-press-tabs__tab:first-child.active label{position:relative}.learn-press-tabs .learn-press-tabs__tab:first-child.active label::before{position:absolute;top:0;left:-1px;width:1px;height:100%;background:#fff;content:""}.learn-press-tabs.stretch .learn-press-tabs__tab{flex:1}.learn-press-tabs.stretch .learn-press-tabs__tab>label{padding:18px 10px}.learn-press-filters{display:flex;margin-bottom:30px;margin-left:0;list-style:none}.learn-press-filters>li{margin:0;font-size:16px;line-height:24px}@media(max-width:767px){.learn-press-filters>li{margin-right:30px;margin-left:0}.learn-press-filters>li:last-child{margin-right:0}}.learn-press-filters>li>a,.learn-press-filters>li>span{display:inline-block;font-weight:600}.learn-press-filters>li>span.count{font-weight:400}.learn-press-filters>li>span.count::before,.learn-press-filters>li>span.count::after{display:inline-block}.learn-press-filters>li>span.count::before{content:"("}.learn-press-filters>li>span.count::after{content:")"}.learn-press-filters>li span{color:#ffb606}.learn-press-filters>li span+span{color:#ffb606}.learn-press-filters>li span+span::before,.learn-press-filters>li span+span::after{color:#ffb606}.learn-press-filters>li a{color:#333;cursor:pointer}.learn-press-filters>li a+span{color:#333}.learn-press-filters>li a+span::before,.learn-press-filters>li a+span::after{color:#333}.learn-press-filters>li::after{margin:0 35px;color:#ccc;content:"|"}@media(max-width:767px){.learn-press-filters>li::after{display:none}}.learn-press-filters>li:last-child::after{display:none}.lp-checkout-form__before,.lp-checkout-form__after{width:45%;width:-webkit-calc(50% - 30px);width:-moz-calc(50% - 30px);width:calc(50% - 30px);margin:0 15px 40px 15px}.lp-checkout-form__before .lp-checkout-block h4,.lp-checkout-form__after .lp-checkout-block h4{margin-top:0;margin-bottom:18px;color:#333;font-size:24px;font-weight:600;line-height:1;font-family:var(--wp--preset--font-family--system-font)}@media(max-width:815px){.lp-checkout-form__before,.lp-checkout-form__after{width:100%;margin:0 0 40px 0}}.lp-checkout-form__before{float:right}.lp-checkout-form__before #checkout-order{width:100%}.lp-checkout-form .lp-checkout-form__after{float:left}.lp-checkout-form .lp-checkout-remember{letter-spacing:0;margin-top:0}.lp-checkout-form .lp-checkout-remember label{width:auto;color:#666;font-size:16px;font-weight:300;line-height:26px}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]{position:relative;top:3px;width:19px;height:19px;margin:0 4px 0 0;border:1px solid #ccc;cursor:pointer;-webkit-appearance:none}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]:focus{outline:0}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]:checked::after{position:absolute;top:2px;left:2px;color:#41abec;font-family:"Font Awesome 5 Free";font-size:14px;font-weight:900;line-height:1;content:"\f00c"}.lp-checkout-form .lp-checkout-remember a{color:#666;font-size:16px;font-weight:300;line-height:26px;text-decoration:underline;text-decoration-color:#ccc}.lp-checkout-form .lp-checkout-remember a:hover{color:var(--lp-primary-color);text-decoration-color:var(--lp-primary-color)}.lp-checkout-form .lp-form-fields{padding:0 0 14px 0}.lp-checkout-form .lp-form-fields label{display:block;margin-bottom:10px;font-size:16px}.lp-checkout-form .lp-form-fields input{height:44px;line-height:normal;width:100%;padding:0 15px;border:1px solid #ccc}.lp-checkout-form .rwmb-input input:not([type=checkbox]){width:100%;height:43px;padding:0 22px;border:1px solid #ccc;border-radius:3px;background-color:#fff;font-size:14px;font-weight:300;font-style:italic;line-height:43px}.lp-checkout-form .rwmb-input input:not([type=checkbox]):focus{border-color:var(--lp-primary-color);outline:0;color:#222}.lp-checkout-form .rwmb-input ::placeholder{opacity:1;color:#999}.lp-checkout-form .rwmb-input :-ms-input-placeholder{color:#999}.lp-checkout-form .rwmb-input ::-ms-input-placeholder{color:#999}.lp-checkout-form .rwmb-input input:-webkit-autofill,.lp-checkout-form .rwmb-input input:-webkit-autofill:hover,.lp-checkout-form .rwmb-input input:-webkit-autofill:focus{-webkit-box-shadow:0 0 0 1000px #fff inset;-webkit-text-fill-color:#999 !important}.lp-checkout-form{margin:0 -15px;margin-top:50px}@media(max-width:815px){.lp-checkout-form{display:flex;flex-direction:column-reverse;margin:0}}.lp-checkout-form #btn-checkout-account-switch-to-guest{margin-bottom:60px}.lp-checkout-form .description{float:left}.lp-checkout-form a{color:#41abec}.lp-checkout-form a label{display:inline-block;color:inherit;font-weight:normal;cursor:pointer}.lp-checkout-form a:hover{color:#ffb606}.lp-checkout-form #checkout-account-guest{width:100%;margin-bottom:35px;padding-bottom:19px;border-bottom:1px solid rgba(204,204,204,0.3)}.lp-checkout-form #checkout-account-guest .lp-form-fields,.lp-checkout-form #checkout-account-guest .form-field{margin-bottom:0;padding-bottom:0}.lp-checkout-form div.lp-guest-checkout-output{margin-top:10px;padding:8px 20px;border:2px solid #41abec;border-radius:4px;font-size:16px;transition:all .2s ease}.lp-checkout-form label.lp-guest-checkout-output{margin-top:10px;cursor:pointer;user-select:none}.lp-checkout-form .lp-guest-checkout-notice{margin:30px 0 0 0}.lp-checkout-form .lp-guest-switch-login{margin-top:1em;color:#666;font-size:16px;font-weight:400}.lp-checkout-form input[name=checkout-account-switch-form]{display:none}.lp-checkout-form input[name=checkout-account-switch-form]:not(:checked)+.lp-checkout-block{display:none;overflow:hidden;height:0;margin:0;padding:0;border:0;opacity:0}.lp-checkout-form input[name=checkout-account-switch-form]:not(:checked)+.lp-checkout-block>*{overflow:hidden;height:0}.lp-checkout-form input[name=checkout-account-switch-form]:checked+.lp-checkout-block{display:block;overflow:auto;height:auto}.lp-checkout-form input[name=checkout-account-switch-form][value=guest]:checked ~ #btn-checkout-account-switch-to-guest{display:none}.lp-checkout-form::after{display:block;clear:both;content:""}.lp-checkout-form:focus{outline:0}#checkout-order .lp-checkout-order__inner{padding:0 20px;border:1px solid #ccc;border-radius:4px}#checkout-order table{width:100%;margin:0;border:0}#checkout-order td,#checkout-order th{box-sizing:content-box;border:1px solid rgba(204,204,204,0.3);border-top:0;border-right:0;border-left:0;background:unset;line-height:1;text-align:left;vertical-align:inherit}#checkout-order td:last-child,#checkout-order th:last-child{padding-right:0}#checkout-order .course-name{font-size:16px;font-weight:600;line-height:26px}#checkout-order .course-name a{display:-webkit-box;overflow:hidden;color:#000;-webkit-line-clamp:1;-webkit-box-orient:vertical}#checkout-order .course-name a:hover{color:var(--lp-primary-color)}#checkout-order .col-number{min-width:50px;color:#666;font-size:16px;font-weight:600;line-height:26px;text-align:right}#checkout-order .order-total>th{padding:24px 20px 24px 0}#checkout-order .order-total .col-number{color:#333;font-size:26px}#checkout-order tfoot .cart-subtotal{color:#666;font-size:16px;font-weight:600;line-height:26px}#checkout-order tfoot .cart-subtotal>th{padding:20px 20px 17px 0}#checkout-order tfoot .order-total th{color:#333;font-size:16px;font-weight:600;line-height:26px}#checkout-order tfoot tr:last-child{border-width:0}#checkout-order tfoot tr:last-child td,#checkout-order tfoot tr:last-child th{border-width:0}#checkout-order .course-thumbnail{width:80px;padding:20px 13px 18px 0}#checkout-order .course-thumbnail>img{width:100px;max-width:100% !important;height:auto !important}#checkout-account-register,#checkout-account-login{width:100%;margin-bottom:35px;padding-bottom:19px;border-bottom:1px solid rgba(204,204,204,0.3)}#checkout-account-register .form-field .rwmb-label,#checkout-account-register .form-field .rwmb-input .description,#checkout-account-login .form-field .rwmb-label,#checkout-account-login .form-field .rwmb-input .description{display:none}#checkout-account-register .lp-checkout-remember label,#checkout-account-login .lp-checkout-remember label{display:inline-block}#checkout-account-register .lp-checkout-remember a,#checkout-account-login .lp-checkout-remember a{float:right}#checkout-account-register .lp-checkout-sign-in-link,#checkout-account-register .lp-checkout-sign-up-link,#checkout-account-login .lp-checkout-sign-in-link,#checkout-account-login .lp-checkout-sign-up-link{display:flex;margin:0;color:#666;font-size:16px;font-weight:400}#checkout-account-register .lp-checkout-sign-in-link a,#checkout-account-register .lp-checkout-sign-up-link a,#checkout-account-login .lp-checkout-sign-in-link a,#checkout-account-login .lp-checkout-sign-up-link a{margin-left:5px;color:#41abec;cursor:pointer}#checkout-account-register .lp-checkout-sign-in-link a:hover,#checkout-account-register .lp-checkout-sign-up-link a:hover,#checkout-account-login .lp-checkout-sign-in-link a:hover,#checkout-account-login .lp-checkout-sign-up-link a:hover{color:var(--lp-primary-color)}#checkout-account-register .lp-checkout-sign-in-link a label,#checkout-account-register .lp-checkout-sign-up-link a label,#checkout-account-login .lp-checkout-sign-in-link a label,#checkout-account-login .lp-checkout-sign-up-link a label{display:inline-block;float:right;color:inherit;font-weight:normal;cursor:pointer}#checkout-payment{width:100%;margin-bottom:25px}#checkout-payment h4{margin-bottom:24px}#checkout-payment .secure-connection{float:right;margin-top:5px;color:#999;font-size:12px;font-weight:normal}#checkout-payment .secure-connection i{margin-right:5px;color:#ccc;font-size:18px}@media(max-width:767px){#checkout-payment .secure-connection{margin-top:0}}#checkout-payment .payment-methods{margin:0 0 24px 0;padding:0;list-style:none}#checkout-payment .lp-payment-method{position:relative;margin:0}#checkout-payment .lp-payment-method>label{display:flex;align-items:center}#checkout-payment .lp-payment-method .gateway-input,#checkout-payment .lp-payment-method .gateway-icon{vertical-align:middle}#checkout-payment .lp-payment-method .gateway-icon{max-height:32px}#checkout-payment .lp-payment-method .gateway-input{position:relative;width:20px;height:20px;margin:0 8px 0 0;border:1px solid #ccc;background:#fff;-webkit-appearance:none;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}#checkout-payment .lp-payment-method .gateway-input::before{position:absolute;top:50%;left:50%;width:6px;height:6px;background:#41abec;transform:translate(-50%,-50%);-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}#checkout-payment .lp-payment-method .gateway-input:checked::before{content:""}#checkout-payment .lp-payment-method .gateway-input:focus{outline:0}#checkout-payment #checkout-order-action button{width:100%;border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color);font-weight:500}#checkout-payment #checkout-order-action button:hover{border-color:var(--lp-primary-color);opacity:.5;background:var(--lp-primary-color)}#checkout-payment #checkout-order-action button.loading::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.lp-terms-and-conditions{color:#666;font-size:16px;font-weight:300;line-height:26px}.lp-terms-and-conditions a{color:#41abec}.lp-terms-and-conditions a:hover{color:var(--lp-primary-color)}.learn-press-checkout.guest-checkout{display:none}.button-continue-guest-checkout{clear:both}#learn-press-checkout .payment-methods{margin:0;padding:0;list-style:none}#learn-press-checkout .payment-methods .lp-payment-method{margin-bottom:20px}#learn-press-checkout .payment-methods .lp-payment-method>label{display:flex;flex-flow:row nowrap;padding:10px 20px;background:#f5f5f5;line-height:40px;cursor:pointer}#learn-press-checkout .payment-methods .lp-payment-method>label img{vertical-align:middle}#learn-press-checkout .payment-methods .lp-payment-method.selected>label{background:#d4d4d4}#learn-press-checkout .payment-methods .payment-method-form{display:none;padding:15px 20px;border-top:1px solid #ddd;background:#f9f9f9}#learn-press-checkout-login,#learn-press-checkout-register{margin-bottom:1.5em;padding:20px 20px 0 20px;border:1px solid #ddd;background:#fff}#learn-press-order-review,.learn-press-checkout-comment{margin-bottom:20px}#checkout-form-login,#checkout-form-register{_display:none}#checkout-form-login .learn-press-form-register,#checkout-form-login .learn-press-form-login,#checkout-form-register .learn-press-form-register,#checkout-form-register .learn-press-form-login{display:none}#checkout-guest-email{margin:0 0 20px 0}#checkout-guest-email .form-heading{margin:0}#checkout-guest-email #checkout-guest-options{margin:0;list-style:none}#checkout-guest-email #checkout-existing-account,#checkout-guest-email #checkout-new-account{display:none;margin:0}#checkout-guest-email.email-exists #checkout-existing-account{display:block}#checkout-guest-email.email-exists #checkout-new-account{display:none}.lp-list-table{width:100%;margin-bottom:20px}.lp-list-table th,.lp-list-table td{padding:20px;border:0 solid rgba(204,204,204,0.3);border-bottom-width:1px;background:#fff;font-size:16px;line-height:1;text-align:left}@media(max-width:767px){.lp-list-table th,.lp-list-table td{padding:15px}}.lp-list-table thead{box-sizing:border-box;border:1px solid #e5e7f2}.lp-list-table thead tr th{height:60px;border-bottom:0;color:#333;background:#f1f2f8;font-size:18px}.lp-list-table tbody,.lp-list-table tfoot{box-sizing:border-box;border:1px solid rgba(204,204,204,0.3);border-top:0}.lp-list-table tbody tr td,.lp-list-table tbody tr th,.lp-list-table tfoot tr td,.lp-list-table tfoot tr th{height:62px;color:#666;background:#fff;font-size:16px;font-weight:300}.lp-list-table tbody tr td a,.lp-list-table tbody tr th a,.lp-list-table tfoot tr td a,.lp-list-table tfoot tr th a{border-bottom:0;color:#666;text-decoration:none}.lp-list-table tbody tr td a:hover,.lp-list-table tbody tr th a:hover,.lp-list-table tfoot tr td a:hover,.lp-list-table tfoot tr th a:hover{color:var(--lp-primary-color)}.lp-list-table tbody tr .column-status .result-percent,.lp-list-table tfoot tr .column-status .result-percent{font-weight:500}.lp-list-table tbody tr .column-status .lp-label,.lp-list-table tfoot tr .column-status .lp-label{font-weight:600}.lp-list-table tbody tr:nth-child(odd),.lp-list-table tfoot tr:nth-child(odd){background:#f5f5f5}.lp-list-table .list-table-nav td{font-size:14px}.lp-list-table .list-table-nav td.nav-text{text-align:left}.lp-list-table .list-table-nav td.nav-pages{text-align:right}.lp-list-table .list-table-nav td.nav-pages .learn-press-pagination{text-align:right}.lp-list-table .list-table-nav td.nav-pages .page-numbers{margin-bottom:0}.lp-label{display:inline-block;color:#666;font-size:16px;font-weight:300;line-height:1}.learn-press-form .form-fields{margin:0;padding:0;list-style:none}.learn-press-form .form-fields .form-field{margin:0 0 20px 0}.learn-press-form .form-fields .form-field label{display:block;margin:0 0 10px 0}.learn-press-form .form-fields .form-field input[type=text],.learn-press-form .form-fields .form-field input[type=email],.learn-press-form .form-fields .form-field input[type=number],.learn-press-form .form-fields .form-field input[type=password],.learn-press-form .form-fields .form-field textarea{width:100%;padding:8px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.learn-press-form .form-fields .form-field .description{margin-top:10px;font-size:14px;font-style:italic;line-height:1.4}.learn-press-form .form-fields .form-field .asterisk{color:red}.learn-press-form-login,.learn-press-form-register{max-width:600px;margin-right:auto;margin-bottom:60px;margin-left:auto;padding:40px;border:1px solid #eee;border-radius:6px;box-shadow:0 4px 6px -1px rgba(0,0,0,0.1),0 2px 4px -1px rgba(0,0,0,0.06) !important}.learn-press-form-login h3,.learn-press-form-register h3{margin-bottom:20px;font-size:28px;line-height:1.4}.learn-press-form-login .form-fields .form-field label,.learn-press-form-register .form-fields .form-field label{font-size:16px;font-weight:400;user-select:none}.learn-press-form-login .form-fields .form-field input[type=text],.learn-press-form-login .form-fields .form-field input[type=password],.learn-press-form-login .form-fields .form-field input[type=tel],.learn-press-form-login .form-fields .form-field input[type=url],.learn-press-form-login .form-fields .form-field input[type=number],.learn-press-form-register .form-fields .form-field input[type=text],.learn-press-form-register .form-fields .form-field input[type=password],.learn-press-form-register .form-fields .form-field input[type=tel],.learn-press-form-register .form-fields .form-field input[type=url],.learn-press-form-register .form-fields .form-field input[type=number]{height:42px;border:1px solid #bbb;border-radius:4px;line-height:42px}.learn-press-form-login .form-fields .form-field input[type=text]:focus,.learn-press-form-login .form-fields .form-field input[type=password]:focus,.learn-press-form-login .form-fields .form-field input[type=tel]:focus,.learn-press-form-login .form-fields .form-field input[type=url]:focus,.learn-press-form-login .form-fields .form-field input[type=number]:focus,.learn-press-form-register .form-fields .form-field input[type=text]:focus,.learn-press-form-register .form-fields .form-field input[type=password]:focus,.learn-press-form-register .form-fields .form-field input[type=tel]:focus,.learn-press-form-register .form-fields .form-field input[type=url]:focus,.learn-press-form-register .form-fields .form-field input[type=number]:focus{border:0;outline:2px solid transparent !important;outline-offset:2px;box-shadow:0 0 0 2px #666 !important}.learn-press-form-login .form-fields .form-field.required label::after,.learn-press-form-register .form-fields .form-field.required label::after{content:" *";display:inline}.learn-press-form-login form[name=learn-press-login]>p>label,.learn-press-form-register form[name=learn-press-login]>p>label{color:#666;font-size:16px;cursor:pointer;user-select:none}.learn-press-form-login form[name=learn-press-login]>p>a,.learn-press-form-register form[name=learn-press-login]>p>a{color:#666;font-size:16px;line-height:1}.learn-press-form-login form[name=learn-press-login]>p:last-child,.learn-press-form-register form[name=learn-press-login]>p:last-child{margin-bottom:0}.learn-press-form-login button[type=submit],.learn-press-form-register button[type=submit]{width:100%;height:50px;border-radius:3px;outline:0;color:#fff;background:var(--lp-primary-color);box-shadow:none;font-size:16px;line-height:1;vertical-align:middle;text-decoration:none}.required label{font-weight:bold}.required label:after{content:" *";display:inline}.lp-password-input{display:flex;flex-direction:column;justify-content:center;position:relative}.lp-password-input input[type=password]{padding-right:2.5rem}.lp-password-input input::-ms-reveal{display:none}.lp-password-input .lp-show-password-input{position:absolute;top:8px;right:10px;cursor:pointer}.lp-password-input .lp-show-password-input::after{font-family:"Font Awesome 5 Free";font-weight:900;content:"\f06e"}.lp-password-input .lp-show-password-input.display-password::after{color:#585858;content:"\f070"}.form-desc{font-size:smaller;font-style:italic}.become-teacher-form{width:90%;max-width:500px;margin:0 auto}.become-teacher-form .form-field input[type=text],.become-teacher-form .form-field input[type=email],.become-teacher-form .form-field input[type=number],.become-teacher-form .form-field input[type=password]{width:100%}body div.entry-content>div.learnpress{--responsive--aligndefault-width:100%;max-width:var(--lp-content-width,100%)}.lp-user-profile{position:relative;background:#fff}.lp-user-profile .lp-user-profile-avatar img{position:relative;width:100%;height:auto;border-radius:unset;display:block}.lp-user-profile .lp-user-profile-avatar+.lp-user-profile-socials{margin-top:10px;margin-bottom:5px}.lp-user-profile .lp-user-profile-socials{display:flex;position:relative;z-index:1;justify-content:center;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.lp-user-profile .lp-user-profile-socials a{display:inline-flex;align-items:center;justify-content:center;width:35px;height:35px;margin:0 7px;border:1px solid #cfcfcf;color:#666;background:#fff;font-size:14px;line-height:35px;text-align:center;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.lp-user-profile .lp-user-profile-socials a:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.lp-user-profile .wrapper-profile-header{color:#fff;background:var(--lp-secondary-color);position:relative}@media(max-width:990px){.lp-user-profile .wrapper-profile-header .lp-profile-content-area{min-height:inherit;padding:50px 15px}.lp-user-profile .wrapper-profile-header .lp-profile-left{float:left;position:static}.lp-user-profile .wrapper-profile-header .lp-profile-right{float:right;width:calc(100% - 270px);margin-left:0}}@media(max-width:768px){.lp-user-profile .wrapper-profile-header .lp-profile-left{width:220px}.lp-user-profile .wrapper-profile-header .lp-profile-right{width:calc(100% - 220px)}.lp-user-profile .wrapper-profile-header .lp-user-profile-socials{margin-right:-5px;margin-left:-5px}.lp-user-profile .wrapper-profile-header .lp-user-profile-socials a{width:36px;height:36px;margin:0 5px;line-height:36px}}@media(max-width:500px){.lp-user-profile .wrapper-profile-header .lp-profile-left{float:none;margin:0 auto}.lp-user-profile .wrapper-profile-header .lp-profile-right{width:100%;padding-top:30px;text-align:center}}.lp-user-profile .wrapper-profile-header::before{right:100%;left:auto}.lp-user-profile .wrapper-profile-header::after{left:100%;right:auto}.lp-user-profile .lp-profile-content-area{position:relative;padding-top:50px;padding-bottom:50px;display:flex;align-items:center}@media(max-width:650px){.lp-user-profile .lp-profile-content-area{flex-direction:column}.lp-user-profile .lp-profile-content-area .lp-profile-right{text-align:center;width:100%;padding:50px 15px 0}}.lp-user-profile .lp-profile-left{min-width:270px;max-width:270px;padding:5px;border:2px solid #eaeaea;border-radius:3px}.lp-user-profile .lp-profile-right{padding-right:15px;padding-left:35px}.lp-user-profile .lp-profile-username{padding-bottom:10px;font-size:18px;font-weight:500;text-transform:capitalize}.lp-user-profile .lp-profile-username::before,.lp-user-profile .lp-profile-username::after{content:"";width:30px;height:1px;background-color:white;display:inline-block;vertical-align:middle;margin:0}.lp-user-profile .lp-profile-username::before{margin-right:5px}.lp-user-profile .lp-profile-username::after{margin-left:5px}.lp-user-profile .lp-profile-user-bio{font-size:16px;font-weight:300;line-height:26px}.lp-user-profile #profile-sidebar{float:left;width:270px;margin-top:0;border:1px solid rgba(0,0,0,0.1);border-top:0;background:#fff;margin-top:58px}@media(max-width:990px){.lp-user-profile #profile-sidebar{width:100%}.lp-user-profile #profile-sidebar .lp-user-profile-avatar{max-width:150px}}.lp-user-profile #profile-nav .lp-profile-nav-tabs{margin:0;padding:0;list-style:none}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li{position:relative;margin:0;border-top:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li a{display:block;padding:0 20px;color:#333;font-size:16px;font-weight:500;line-height:50px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a{padding:0 20px 0 52px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a>i{display:inline-block;position:absolute;left:24px;width:28px;color:var(--lp-primary-color);font-size:12px;line-height:53px;text-align:left}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a::after{float:right;margin-right:4px;color:#999;font-family:"Font Awesome 5 Free";font-size:10px;font-weight:900;content:"\f054"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li{margin:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li a{border-bottom:1px solid #f9f9f9}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li a:hover{color:var(--lp-primary-color);background:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li:hover>a i{color:var(--lp-primary-color);background:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active,.lp-user-profile #profile-nav .lp-profile-nav-tabs>li:hover{background:var(--lp-primary-color)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active>a::after,.lp-user-profile #profile-nav .lp-profile-nav-tabs>li:hover>a::after{content:"\f053"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active a{padding-left:52px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.wishlist>a::before{position:absolute;left:25px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:12px;font-weight:900;content:"\f004"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.wishlist:hover a::before{color:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.logout>a::after{display:none}.lp-user-profile #profile-nav .lp-profile-nav-tabs li>a{box-sizing:border-box;height:50px}.lp-user-profile #profile-nav .lp-profile-nav-tabs li>ul{display:none;position:absolute;z-index:1000;top:0;left:100%;min-width:150px;margin:0;padding:0;background:#fff;box-shadow:0 15px 20px 0 rgba(0,0,0,0.05);list-style:none}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>a,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>a{color:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>a i,.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>a::after,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>a i,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>a::after{color:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>ul{display:block}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul{position:relative;left:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul .active{background:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul .active>a{color:#ffb606}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul .active>a i{color:#ffb606}@media(max-width:990px){.lp-user-profile #profile-nav{overflow-x:scroll;border-top:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs{width:max-content}.lp-user-profile #profile-nav .lp-profile-nav-tabs::after{display:table;clear:both;content:""}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li{float:left;border:0;border-right:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a{height:auto;padding:0 20px 0 45px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a::after{margin-left:10px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.has-child a::after{content:"\f077"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active a{padding-left:45px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active a::after{content:"\f078"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul{display:none;width:max-content;transform:translateX(-20%)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul::after{display:table;clear:both;box-shadow:0 0;content:""}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul li{float:left;border-right:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul li:last-child{border-right:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul li a{padding:0 10px}.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover ul{display:none !important}.lp-user-profile #profile-nav .lp-profile-nav-tabs li:not(.has-child)>a::after{display:none}}@media(max-width:560px){.lp-user-profile #profile-nav .lp-profile-nav-tabs>li{max-width:80px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a{font-size:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a::after{margin-left:0}}.lp-user-profile .lp-profile-content{float:right;width:calc(100% - 300px);margin-bottom:60px;padding-top:58px}@media(max-width:990px){.lp-user-profile .lp-profile-content{width:100%}}@media(max-width:767px){.lp-user-profile .lp-profile-content .learn-press-tabs__nav{display:block;width:100%;border:0}.lp-user-profile .lp-profile-content .learn-press-tabs__nav::after{display:table;clear:both;content:""}.lp-user-profile .lp-profile-content .learn-press-tabs__tab{float:left;border-right:0}.lp-user-profile .lp-profile-content .learn-press-tabs__tab label{padding-right:25px;padding-left:25px}.lp-user-profile .lp-profile-content .profile-orders{overflow-x:scroll}}.lp-user-profile .lp-profile-content .course-categories,.lp-user-profile .lp-profile-content .course-instructor{margin-bottom:14px}.lp-user-profile .lp-profile-content .course-categories{padding:0}.lp-user-profile .lp-profile-content .lp-button{display:block;margin:0 auto 52px auto;padding:13px 34px;border-color:var(--lp-secondary-color);font-size:14px;font-weight:500;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.lp-user-profile .lp-profile-content .lp-button:hover{border-color:var(--lp-primary-color)}.lp-user-profile ul.learn-press-courses .course{margin:0 0 40px 0}.lp-user-profile .profile-orders .profile-heading{display:none}.lp-user-profile .profile-orders table{margin-top:0}.lp-user-profile .profile-orders .column-order-actions a{margin-right:6px;color:black;text-decoration:underline;font-weight:500}.lp-user-profile .profile-orders .column-order-actions a:hover,.lp-user-profile .profile-orders .column-order-actions a:focus{color:var(--lp-primary-color)}.lp-user-profile #dashboard-general-statistic{margin-bottom:55px;padding-bottom:20px;border-bottom:1px solid #ddd}.lp-user-profile .dashboard-general-statistic__row{display:flex;margin:0 -15px;justify-content:center;flex-wrap:wrap}.lp-user-profile .dashboard-general-statistic__row .statistic-box{min-width:200px;max-width:270px;margin:0 15px 40px 15px;padding:15px 20px;border:1px solid #ccc;border-radius:4px;background:#f9fafc;text-align:center}@media(max-width:990px){.lp-user-profile .dashboard-general-statistic__row .statistic-box{width:45%}}@media(max-width:767px){.lp-user-profile .dashboard-general-statistic__row .statistic-box{width:100%;margin:0 15px 15px}}.lp-user-profile .dashboard-general-statistic__row .statistic-box:hover{background:#eaeaea}.lp-user-profile .dashboard-general-statistic__row[data-col="2"] .statistic-box{width:50%}.lp-user-profile .dashboard-general-statistic__row[data-col="4"] .statistic-box{width:25%}.lp-user-profile .dashboard-general-statistic__row[data-col="5"] .statistic-box{width:20%}.lp-user-profile .statistic-box .statistic-box__text{margin:0 0 7px 0;padding:0;color:#666;font-size:18px;font-weight:400;line-height:1}.lp-user-profile .statistic-box .statistic-box__number{color:#333;font-size:18px;font-weight:500;line-height:1}.lp-user-profile .profile-courses>h3{margin-top:0;margin-bottom:36px;color:#333;font-size:30px;font-weight:600;line-height:1;text-transform:capitalize}.lp-profile-content table.lp-list-table{border-spacing:0;border-top:1px solid #ccc;border-left:1px solid #ccc;margin-bottom:40px}.lp-profile-content table.lp-list-table tr th,.lp-profile-content table.lp-list-table tr td{border-right:1px solid #ccc;border-bottom:1px solid #ccc;text-align:center}.lp-profile-content table.lp-list-table tr td a{color:var(--wp--preset--color--foreground);font-weight:400}.lp-profile-content table.lp-list-table tr td a:hover{color:var(--lp-primary-color)}.lp-profile-content #profile-content-order-details h3{margin-top:0;font-size:30px;line-height:1.5;font-weight:500;margin-bottom:15px;font-family:var(--wp--preset--font-family--system-font)}.profile-basic-information .form-field,form[name=profile-change-password] .form-field{margin:0 10px 24px 10px}.profile-basic-information .form-field>label,form[name=profile-change-password] .form-field>label{margin:0 0 12px 0;color:#333;font-size:16px;font-weight:500;font-style:italic}.profile-basic-information .form-field .form-field-input input,form[name=profile-change-password] .form-field .form-field-input input{height:43px;padding:8px 20px;font-weight:400}.profile-basic-information .form-field .form-field-input input[type=password],form[name=profile-change-password] .form-field .form-field-input input[type=password]{padding:8px 20px}.profile-basic-information .form-field .form-field-input textarea,form[name=profile-change-password] .form-field .form-field-input textarea{padding:9px 20px 16px 20px;font-weight:300;line-height:24px}.profile-basic-information .form-field .form-field-input input,.profile-basic-information .form-field .form-field-input textarea,form[name=profile-change-password] .form-field .form-field-input input,form[name=profile-change-password] .form-field .form-field-input textarea{border:1px solid #ccc;color:#999;font-size:14px;font-style:italic}.profile-basic-information .form-field .form-field-input input:focus,.profile-basic-information .form-field .form-field-input textarea:focus,form[name=profile-change-password] .form-field .form-field-input input:focus,form[name=profile-change-password] .form-field .form-field-input textarea:focus{border-color:var(--lp-primary-color);outline:0;color:#222}.profile-basic-information .form-field .form-field-input ::placeholder,form[name=profile-change-password] .form-field .form-field-input ::placeholder{opacity:1;color:#999}.profile-basic-information .form-field .form-field-input :-ms-input-placeholder,form[name=profile-change-password] .form-field .form-field-input :-ms-input-placeholder{color:#999}.profile-basic-information .form-field .form-field-input ::-ms-input-placeholder,form[name=profile-change-password] .form-field .form-field-input ::-ms-input-placeholder{color:#999}.profile-basic-information .form-field .form-field-input .description,form[name=profile-change-password] .form-field .form-field-input .description{margin-top:15px}@media(max-width:767px){.profile-basic-information .form-field,form[name=profile-change-password] .form-field{margin:0 0 24px 0}}.profile-basic-information .form-field__50,form[name=profile-change-password] .form-field__50{float:left;width:calc(50% - 20px);margin-right:10px}@media(max-width:767px){.profile-basic-information .form-field__50,form[name=profile-change-password] .form-field__50{float:unset;width:100%;margin:0 0 24px 0}}.profile-basic-information .form-field__clear,form[name=profile-change-password] .form-field__clear{clear:both}.profile-basic-information button,form[name=profile-change-password] button{padding:16px 24px;border:0;border-radius:3px;color:#fff;background:var(--lp-primary-color);font-size:16px;font-weight:400;line-height:1}.profile-basic-information button:hover,form[name=profile-change-password] button:hover{opacity:.5;background:var(--lp-primary-color)}.profile-basic-information p,form[name=profile-change-password] p{margin:0}#learn-press-profile-basic-information .form-fields::after{display:block;clear:both;content:""}@media(max-width:767px){#learn-press-profile-basic-information .form-fields{margin:0}}#learn-press-profile-basic-information button[type=submit]{padding:0 15px;height:40px;line-height:40px;border:0;display:inline-flex;align-items:center;justify-content:center;background-color:var(--lp-primary-color);color:white;font-size:16px;font-weight:400;-webkit-transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;transition:.3s;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}#learn-press-profile-basic-information button[type=submit]:hover{opacity:.5;background-color:var(--lp-primary-color)}.recover-order__title{margin-bottom:5px}.recover-order__description{margin-bottom:20px;color:#999;font-size:.8em;font-style:italic}div.order-recover{display:flex}div.order-recover>.button-recover-order{margin:0;margin-left:20px;flex:0 0 auto}div.order-recover>.button-recover-order.loading::before{display:inline-block;margin-right:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";animation:lp-rotating 1s linear infinite}div.order-recover input[type=text]{width:100%;height:43px;margin-right:10px;padding:0 22px;border:1px solid #ccc;border-radius:3px;background-color:#fff;font-size:14px;font-weight:300;font-style:italic;line-height:43px;flex:1 1 auto}.learn-press-profile-course__progress .lp_profile_course_progress{border:1px solid #eee;border-top:0;overflow-x:auto}.learn-press-profile-course__progress .lp_profile_course_progress__item{display:grid;align-items:center;padding:15px;border-top:1px solid #eee;grid-template-columns:90px 1fr 80px 190px 140px;column-gap:20px}.learn-press-profile-course__progress .lp_profile_course_progress__item div img{max-width:60px;height:auto}@media(max-width:575px){.learn-press-profile-course__progress .lp_profile_course_progress__item div img{max-width:100%}}@media(max-width:575px){.learn-press-profile-course__progress .lp_profile_course_progress__item{display:block}}.learn-press-profile-course__progress .lp_profile_course_progress__header{background-color:#eee}@media(max-width:575px){.learn-press-profile-course__progress .lp_profile_course_progress__header{display:flex;overflow-x:auto;white-space:nowrap;justify-content:flex-end}}.lp_profile_course_progress__nav button.loading::before{display:inline-block;margin-right:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.entry-content ul.learn-press-profile-course__tab__inner{padding:0}.content ul.learn-press-courses{margin-left:-15px;margin-right:-15px}.content ul.learn-press-courses[data-layout=list]{margin:0}.learn-press-profile-course__tab__inner{display:flex;margin:40px 0 0 0 !important;padding:0 !important;background:#eee;list-style:none !important}.learn-press-profile-course__tab__inner>li{list-style:none;margin:0 !important}.learn-press-profile-course__tab__inner>li:hover{cursor:pointer}.learn-press-profile-course__tab__inner a{display:inline-block;padding:15px 30px;font-weight:600;position:relative}.learn-press-profile-course__tab__inner a.active{color:var(--lp-primary-color);background:#fff}.learn-press-profile-course__tab__inner a.active::before{content:"";height:4px;width:100%;background-color:var(--lp-primary-color);position:absolute;top:0;left:0;right:auto}.learn-press-course-tab-filters .learn-press-filters{margin-top:20px;margin-left:0;padding:0;list-style:none}.learn-press-course-tab-filters .learn-press-filters a.active{color:var(--lp-primary-color)}.lp-profile-content ul{list-style:none !important;padding:0 !important}.learnpress_avatar__form label{display:inline-block}.learnpress_avatar__form input[type=file]{display:none}.learnpress_avatar__form__upload{display:flex;width:200px;height:200px;border:1px dashed #ccc;border-radius:3px;background-color:#fafafa;font-size:14px;font-weight:300;font-style:italic;line-height:43px;text-align:center;cursor:pointer;align-items:center;justify-content:center}.learnpress_avatar__form__upload div{line-height:1.4}.learnpress_avatar__button--loading::before{display:inline-block;margin-right:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}button.learnpress_avatar__button{height:40px;padding:0 15px;border:0;background:var(--lp-primary-color);color:white;margin-top:15px;border-radius:3px}button.learnpress_avatar__button+button{margin-left:15px;margin-right:0}#primary .learn-press-courses[data-size="3"] .course{width:50%}body.learnpress .learn-press-tabs .learn-press-tabs__tab,body.learnpress .attachment-recent-works-thumbnail{border-radius:0}#learn-press-course-tabs.show-all .course-tab-panel{margin-bottom:40px}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .course-tab-panels .course-tab-panel:nth-child(1){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .learn-press-nav-tabs .course-nav:nth-child(1){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .learn-press-nav-tabs .course-nav:nth-child(1) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .course-tab-panels .course-tab-panel:nth-child(2){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .learn-press-nav-tabs .course-nav:nth-child(2){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .learn-press-nav-tabs .course-nav:nth-child(2) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .course-tab-panels .course-tab-panel:nth-child(3){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .learn-press-nav-tabs .course-nav:nth-child(3){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .learn-press-nav-tabs .course-nav:nth-child(3) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .course-tab-panels .course-tab-panel:nth-child(4){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .learn-press-nav-tabs .course-nav:nth-child(4){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .learn-press-nav-tabs .course-nav:nth-child(4) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .course-tab-panels .course-tab-panel:nth-child(5){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .learn-press-nav-tabs .course-nav:nth-child(5){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .learn-press-nav-tabs .course-nav:nth-child(5) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .course-tab-panels .course-tab-panel:nth-child(6){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .learn-press-nav-tabs .course-nav:nth-child(6){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .learn-press-nav-tabs .course-nav:nth-child(6) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .course-tab-panels .course-tab-panel:nth-child(7){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .learn-press-nav-tabs .course-nav:nth-child(7){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .learn-press-nav-tabs .course-nav:nth-child(7) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .course-tab-panels .course-tab-panel:nth-child(8){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .learn-press-nav-tabs .course-nav:nth-child(8){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .learn-press-nav-tabs .course-nav:nth-child(8) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .course-tab-panels .course-tab-panel:nth-child(9){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .learn-press-nav-tabs .course-nav:nth-child(9){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .learn-press-nav-tabs .course-nav:nth-child(9) label{color:var(--lp-primary-color);background:#fff}.course-tab-panel{display:none;padding-top:30px}.course-tab-panel.active{display:block}.course-tab-panel.course-tab-panel-instructor,.course-tab-panel.course-tab-panel-faqs{padding-top:30px}.course-tab-panel.course-tab-panel-reviews{padding:56px 0 0 0}.course-tab-panel .course-description h4{margin-top:0;margin-bottom:1.125rem;color:#333;font-size:18px;font-weight:500}.course-tab-panel .course-description p{color:#666;font-size:16px;font-weight:300;line-height:26px}.course-tab-panel .course-description img{max-width:100%;height:auto;vertical-align:middle}.course-tab-panel .lp-course-author{display:flex;margin-bottom:40px}@media(max-width:767px){.course-tab-panel .lp-course-author{flex-direction:column}}.course-tab-panel .lp-course-author .course-author__pull-left{margin-right:30px;text-align:center;align-items:center}@media(max-width:767px){.course-tab-panel .lp-course-author .course-author__pull-left{margin-right:0;margin-bottom:30px}}.course-tab-panel .lp-course-author img{width:50px;height:50px;margin-bottom:20px;border-radius:50%;object-fit:cover;object-position:center}.course-tab-panel .lp-course-author .course-author__pull-right{flex:1}@media(max-width:767px){.course-tab-panel .lp-course-author .course-author__pull-right{width:100%;text-align:center}}.course-tab-panel .lp-course-author .author-title{margin-bottom:18px}.course-tab-panel .lp-course-author .author-title a{color:#333;box-shadow:none;font-size:18px;font-weight:500;text-transform:capitalize}.course-tab-panel .lp-course-author .author-title a:hover{color:var(--lp-primary-color)}.course-tab-panel .lp-course-author .author-description{color:#666;font-size:16px;font-weight:300;line-height:26px}.course-tab-panel .lp-course-author .author-socials{display:grid;grid-template-columns:repeat(4,33px);gap:10px;justify-content:center}.course-tab-panel .lp-course-author .author-socials>a{display:inline-block;width:33px;height:33px;margin:0;border:1px solid #ededed;border-radius:50%;color:#878787;box-shadow:none;font-size:14px;line-height:33px;text-align:center;vertical-align:middle;transition:all .3s}.course-tab-panel .lp-course-author .author-socials>a:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.course-tab-panel .lp-course-author .author-socials .fa-googleplus::before{content:"\f0d5"}.course-summary div.lp-list-co-instructor{display:grid;grid-template-columns:repeat(2,1fr);gap:40px}.course-summary div.lp-list-co-instructor__item{display:flex;column-gap:30px}@media(max-width:767px){.course-summary div.lp-list-co-instructor__item{align-items:center;flex-direction:column;padding:0 15px;column-gap:0;row-gap:10px}}.course-summary div.lp-list-co-instructor__avatar>img{width:100%;max-width:96px;border-radius:999px}.course-summary div.lp-list-co-instructor__bio{flex:1}.course-summary div.lp-list-co-instructor__bio__top>a{font-size:18px;font-weight:600}.course-summary div.lp-list-co-instructor__bio__description{font-size:1rem}.course-summary .course-price{margin-bottom:10px}.course-summary .course-price .origin-price,.course-summary .course-price .price{vertical-align:middle}.course-summary .course-price .origin-price{margin-right:10px;font-size:18px;font-style:italic;text-decoration:line-through}.course-summary .course-price .price{font-size:24px}.course-summary .course-summary-sidebar .lp-course-buttons{margin-bottom:20px}.course-summary .course-featured-review .featured-review__title{margin-top:0;margin-bottom:6px;font-size:1.2rem;font-weight:500}.course-summary .course-featured-review .featured-review__stars{padding-bottom:12px;color:var(--lp-primary-color);font-size:16px}.course-summary .course-featured-review .featured-review__content{position:relative;color:#666;font-size:1rem;font-style:italic;line-height:24px}.course-summary .course-featured-review .featured-review__content::after{position:absolute;top:-42px;right:-15px;color:rgba(102,102,102,0.1);font-family:Arial;font-size:180px;font-weight:700;font-style:normal;content:"‘‘";transform:rotate(180deg)}.course-summary .course-tags a{display:inline-block;padding:3px 5px;border-radius:4px;color:#fff;background:#9aa5ab;font-size:12px;line-height:1}.edit-content{margin-left:5px}ul.learn-press-nav-tabs{display:flex;margin:0;padding:0;border:1px solid rgba(204,204,204,0.3);border-bottom:0;background:#f1f2f8;list-style:none}ul.learn-press-nav-tabs .course-nav{float:left;position:relative;margin:0;border-right:1px solid rgba(204,204,204,0.3);border-bottom:1px solid rgba(204,204,204,0.3);list-style:none}ul.learn-press-nav-tabs .course-nav:first-child.active::after{position:absolute;top:-1px;left:-1px;width:1px;height:100%;background:#fff;content:""}ul.learn-press-nav-tabs .course-nav:last-child{border-right:0}ul.learn-press-nav-tabs .course-nav:last-child.active::after{position:absolute;top:-1px;right:-2px;width:2px;height:100%;background:#fff;content:""}ul.learn-press-nav-tabs .course-nav.active{border-bottom:0}ul.learn-press-nav-tabs .course-nav.active::before{position:absolute;top:-1px;left:0;width:100%;height:4px;background:var(--lp-primary-color);content:""}ul.learn-press-nav-tabs .course-nav.active label{color:var(--lp-primary-color);background-color:white}ul.learn-press-nav-tabs .course-nav a{display:inline-block;padding:10px 20px;border-bottom:0;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}ul.learn-press-nav-tabs .course-nav a:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}ul.learn-press-nav-tabs[data-tabs] .course-nav{flex:1}ul.learn-press-nav-tabs[data-tabs] .course-nav a{width:100%;text-align:center}ul.learn-press-nav-tabs::after{display:block;clear:both;content:""}@media(max-width:767px){ul.learn-press-nav-tabs{display:grid;grid-template-columns:repeat(2,1fr);max-height:none}}.course-item-popup #tab-curriculum{display:block}.course-curriculum ul.curriculum-sections{position:relative;z-index:499;margin:0;padding:0;list-style:none}.course-curriculum ul.curriculum-sections .closed .section-item__loadmore{display:none}.course-curriculum ul.curriculum-sections .section{margin:0;padding:0;flex-wrap:wrap}.course-curriculum ul.curriculum-sections .section:last-child{padding:0}.course-curriculum ul.curriculum-sections .section.section-empty .section-header{margin-bottom:20px}.course-curriculum ul.curriculum-sections .section.section-empty .learn-press-message{margin-right:15px;margin-left:15px}.course-curriculum ul.curriculum-sections .section-title.c+.section-desc{display:block}.course-curriculum ul.curriculum-sections .section-title.c span.show-desc::before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);top:0}.course-curriculum ul.curriculum-sections .item-meta.duration{background:#d9e0f1}.course-curriculum .section-item__loadmore{display:flex;justify-content:center;align-items:center}.course-curriculum .section-item__loadmore button{display:inline-flex;margin-top:10px;margin-right:auto;margin-left:auto;padding:10px 20px;border:1px solid #ccc;border-radius:4px;outline:0;color:#222;background:#f7f7f7;box-shadow:none;font-weight:500;justify-content:center;align-items:center;cursor:pointer;font-size:1rem;font-family:sans-serif}.course-curriculum .section-item__loadmore.loading button::before{display:inline-block;margin-right:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.course-curriculum .section-header{display:table;width:100%;padding:0 0 26px 0;border-bottom:0;border-bottom:1px solid #d9e0f1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-curriculum .section-header .section-title,.course-curriculum .section-header .section-desc{margin:0}.course-curriculum .section-header span.show-desc{display:inline-block;position:absolute;top:50%;right:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-header span.show-desc::before{font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f107"}.course-curriculum .section-header span.show-desc:hover::before{border-top-color:#ccc}.course-curriculum .section-header .section-desc{margin:0;margin-top:10px;font-size:14px;line-height:21px;color:#999;font-style:italic}.course-curriculum .section-header .section-meta{display:block;padding-top:17px;padding-bottom:15px;font-size:14px;text-align:right;vertical-align:middle;white-space:nowrap}.course-curriculum .section-item{width:100%}.course-curriculum .section-content{margin:0 0 15px 0;padding:0;list-style:none}.course-curriculum .section-content .course-item-meta{display:table-cell;padding:10px 0;text-align:right;vertical-align:middle;white-space:nowrap}.course-curriculum .section-content .course-item-meta .item-meta{display:inline-block;margin-left:14px;border-radius:3px;color:#fff;font-size:14px;line-height:23px;text-align:center;vertical-align:middle;padding:0 8px}.course-curriculum .section-content .course-item-meta .item-meta.final-quiz{background:#14c4ff}.course-curriculum .section-content .course-item-meta .item-meta.trans{padding:0}.course-curriculum .section-content .course-item-meta .count-questions{background:#9672cf}.course-curriculum .section-content .course-item-meta .duration{background:silver}.course-curriculum .section-content .course-item-meta .course-item-status{padding:0;color:#999;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-curriculum .section-content .course-item-meta .course-item-status::before{font-family:"Font Awesome 5 Free";font-size:14px;font-weight:900;vertical-align:middle;text-transform:lowercase;content:"\f00c"}.course-curriculum .section-content .course-item-preview{font-style:normal;padding:0}.course-curriculum .section-content .course-item-preview::before{color:#fff;padding:0 8px;background:#00adff;display:inline-flex;align-items:center;justify-content:center;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;vertical-align:baseline;content:attr(data-preview)}.course-curriculum .course-item{display:flex;position:relative;margin:0 0 2px 0;padding:0 15px 0 30px;background:rgba(241,242,248,0.4);font-size:14px;transition:padding-left linear .15s}@media(max-width:767px){.course-curriculum .course-item{padding:0 0 0 15px}}.course-curriculum .course-item>span{display:flex;width:28px;color:#666;font-size:16px;font-weight:300;align-items:center}.course-curriculum .course-item .section-item-link{display:table;padding-right:15px;padding-left:0;border-bottom:0;outline:0;box-shadow:none;line-height:1.5;color:#777;text-decoration:none}.course-curriculum .course-item .section-item-link:hover .item-name{color:var(--lp-primary-color)}.course-curriculum .course-item .section-item-link::before{display:table-cell;display:table-cell;left:0;width:20px;padding:15px 0;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:18px;font-weight:400;vertical-align:middle;transition:left linear .15s}.course-curriculum .course-item .item-icon,.course-curriculum .course-item .item-name{display:table-cell;padding:17px 16px;color:#333;font-size:16px;font-weight:600;vertical-align:middle}.course-curriculum .course-item .item-icon::before{font-size:18px}.course-curriculum .course-item .item-icon.icon-lock{float:right;margin-top:15px}.course-curriculum .course-item.course-item-lp_quiz .section-item-link::before{content:"\f059"}.course-curriculum .course-item.course-item-lp_lesson .section-item-link::before{content:"\f15b"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-video .section-item-link::before{content:"\f03d"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-audio .section-item-link::before{content:"\f028"}.course-curriculum .course-item.item-locked .course-item-status::before{color:var(--lp-secondary-color);content:"\f023"}.course-curriculum .course-item.has-status{padding-top:1px}.course-curriculum .course-item.has-status.status-completed .course-item-status::before,.course-curriculum .course-item.has-status.status-evaluated .course-item-status::before{color:#3bb54a}.course-curriculum .course-item.has-status.item-failed .course-item-status::before,.course-curriculum .course-item.has-status.failed .course-item-status::before{border-color:#f02425;color:#f02425;content:"\f00d"}.course-curriculum .course-item::before{position:absolute;top:50%;left:0;width:3px;height:0;background:#00adff;content:"";transition:height linear .15s,top linear .15s}.course-curriculum .course-item.current{padding-left:10px;background:#f9f9f9}.course-curriculum .course-item.current a::before{left:10px}.course-curriculum .course-item.current::before{top:0;height:100%}.course-curriculum .section-left{vertical-align:top}.course-curriculum .section-left .section-title{padding:0;color:#666;font-size:1.4rem;letter-spacing:0;text-transform:capitalize;display:block}.course-curriculum .curriculum-more__button{display:flex;width:100%;margin-top:20px;margin-bottom:20px;padding:10px 0;border:0;outline:0;color:#fff;background:#333;box-shadow:none;justify-content:center;align-items:center;cursor:pointer;font-size:1rem;font-family:sans-serif}.course-curriculum .curriculum-more__button.loading::before{display:inline-block;margin-right:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}body.course-item-popupx{overflow:hidden;_opacity:0}body.course-item-popupx #learn-press-course-curriculum{overflow:auto;position:fixed;z-index:9999;top:32px;bottom:0;left:0;width:400px;border-right:1px solid #ddd;background:#fff}body.course-item-popupx #learn-press-course-curriculum .section-header{padding:0 15px}body.course-item-popupx #learn-press-course-curriculum .section-header .section-desc{margin:-10px 0 5px}body.course-item-popupx #learn-press-course-curriculum .course-item{padding-right:15px;padding-left:15px}body.course-item-popupx #learn-press-course-curriculum .course-item a::before{left:15px}body.course-item-popupx #learn-press-content-item{overflow:hidden;position:fixed;z-index:9999;top:32px;right:0;bottom:0;left:400px;background:#fff}body.course-item-popupx #learn-press-content-item .content-item-wrap{max-width:900px;margin:10px auto}body.course-item-popupx #learn-press-content-item .course-item-title{font-size:1.4rem}body.course-item-popupx #learn-press-content-item .content-question-summary .review-heading{text-align:center}body.course-item-popupx #learn-press-content-item .content-question-summary .question-title{margin-bottom:10px;font-size:1.2rem}body.course-item-popupx #content-item-nav{position:fixed;z-index:99999;right:0;bottom:0;left:400px;height:60px;border-top:1px solid #ddd;background:#f5f5f5}body.course-item-popupx #content-item-nav .content-item-nav-wrap{max-width:900px;margin:10px auto}body.course-item-popupx #content-item-nav button{height:40px;padding:0 20px;line-height:40px}body.course-item-popupx .comment-form-textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body.course-item-popupx.wpadminbar #learn-press-course-curriculum,body.course-item-popupx.wpadminbar #learn-press-content-item{top:92px}body.course-item-popupx.wpadminbar .content-item-description{margin-bottom:20px}body.course-item-popupx .content-item-summary{margin-bottom:50px}body.course-item-popupx .content-item-summary>h3{margin-bottom:20px}body.course-item-popupx .content-item-summary.content-item-video .entry-video{position:absolute;top:0;left:0;width:100%;background:#000;line-height:1}body.course-item-popupx .content-item-summary.content-item-video .entry-video iframe{width:100%;max-width:900px;margin-bottom:0;vertical-align:top}body.course-item-popupx .learn-press-content-protected-message{margin-bottom:50px;padding:20px;background:#ffe0e0}body.course-item-popupx.content-only #learn-press-content-item{z-index:9999999;top:0;bottom:0;left:0}body.course-item-popupx.content-only #learn-press-content-item .content-item-scrollable{bottom:0}body #ifr-course-item{position:absolute;z-index:999999;top:0;left:0;width:100%;height:100%;background:#fff}body .content-item-summary .form-button-finish-course,body .lp-quiz-buttons .form-button-finish-course{float:right}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{top:2px;font-family:"Font Awesome 5 Free"}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before{content:"\f017"}#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before{content:"\f15c"}#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{content:"\f29c"}.scroll-wrapper{overflow:hidden;opacity:0}.scroll-wrapper .scroll-element{background:transparent}.scroll-wrapper .scroll-element.scroll-y.scroll-scrolly_visible{transition:opacity .25s}.scroll-wrapper:hover .scroll-element.scroll-y.scroll-scrolly_visible{opacity:.7}.course-remaining-time .label-enrolled{font-size:inherit}.learn-press-form.completed button::before{margin-right:10px;font-family:"Font Awesome 5 Free";font-size:18px;content:"\f00c"}.lp-course-progress{position:relative}.lp-course-progress .lp-passing-conditional{position:absolute;top:0;width:3px;height:6px;margin-left:-1px;background:var(--lp-secondary-color)}.viewing-course-item .section-header .section-desc{display:none}.viewing-course-item .content-item-wrap{margin-top:50px}.course-meta{display:flex;margin-bottom:40px}.course-meta .course-meta__pull-left,.course-meta .course-meta__pull-right{display:flex;flex-wrap:wrap}.course-meta .course-meta__pull-left{flex:1}.course-meta .course-meta__pull-left .meta-item{margin-right:10px}.course-meta .course-meta__pull-right{flex:0 0 50%}.course-meta .course-meta__pull-right .meta-item{margin-left:10px}.course-meta.course-meta-primary .meta-item{flex:1}.course-meta.two-columns .course-meta{flex:1}.course-extra-box{margin-bottom:3px;border:1px solid rgba(204,204,204,0.3);border-radius:5px}.course-extra-box__title{--extra-height:50px;display:flex;align-items:center;position:relative;height:var(--extra-height);margin:0 !important;padding:0 45px 0 38px;background:rgba(181,187,211,0.15);font-size:1.1rem;font-weight:600;cursor:pointer}@media(max-width:767px){.course-extra-box__title{padding-left:15px}}.course-extra-box__title::after{position:absolute;top:0;right:20px;color:#666;font-family:"Font Awesome 5 Free";line-height:var(--extra-height);content:"\f0d7"}.course-extra-box__content{display:none}.course-extra-box__content-inner{-webkit-animation-name:course-extra-box__content-inner-transform;animation-name:course-extra-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}.course-extra-box__content ul,.course-extra-box__content li{list-style:none}.course-extra-box__content ul{margin:0;padding:0}.course-extra-box__content li{margin:0;padding:10px 38px;border-bottom:1px solid rgba(204,204,204,0.3);color:#666;font-size:16px;font-weight:300}@media(max-width:767px){.course-extra-box__content li{padding-left:30px;padding-right:30px}}.course-extra-box__content li::before{margin-right:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900;content:"\f00c"}.course-extra-box__content li:last-child{border-bottom:0}.course-extra-box:last-child{margin-bottom:60px}.course-extra-box.active .course-extra-box__title::after{content:"\f0d8"}.course-extra-box+.comment-respond,.course-extra-box+.comments-area{margin-top:60px;margin-bottom:30px}.course-extra-box+.course-tabs{margin-top:60px}input[name=course-extra-box-ratio]{display:none}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content{display:block}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content .course-extra-box__content-inner{transform:scale(1)}@-webkit-keyframes course-extra-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(5%);-moz-transform:translateX(5%);-ms-transform:translateX(5%);-o-transform:translateX(5%);transform:translateX(5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes course-extra-box__content-inner-transform{from{opacity:0;transform:translateX(5%)}to{opacity:1;transform:translateX(0)}}.course-tab-panel-faqs{padding-top:64px}.course-tab-panel-faqs .course-faqs-box{margin-bottom:20px;border:1px solid rgba(204,204,204,0.6);border-radius:5px}.course-tab-panel-faqs .course-faqs-box__title{display:block;position:relative;margin:0;padding:25px 45px 25px 30px;font-size:1rem;font-weight:500;line-height:1.7;cursor:pointer}.course-tab-panel-faqs .course-faqs-box__title::after{position:absolute;top:50%;right:28px;color:#6c6c6c;font-family:"Font Awesome 5 Free";font-size:12px;font-weight:900;content:"\f078";transform:translateY(-50%)}.course-tab-panel-faqs .course-faqs-box:last-child{margin-bottom:40px}.course-tab-panel-faqs .course-faqs-box:hover{background:rgba(241,242,248,0.4)}.course-tab-panel-faqs .course-faqs-box:hover .course-faqs-box__title{color:var(--lp-primary-color)}.course-tab-panel-faqs .course-faqs-box__content{display:none}.course-tab-panel-faqs .course-faqs-box__content-inner{padding:0 28px 33px 28px;color:#666;font-size:16px;font-weight:300;line-height:26px;-webkit-animation-name:course-faqs-box__content-inner-transform;animation-name:course-faqs-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}input[name=course-faqs-box-ratio]{display:none}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__content{display:block}input[name=course-faqs-box-ratio]:checked+.course-faqs-box{background:rgba(241,242,248,0.4)}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title{color:var(--lp-primary-color)}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title::after{content:"\f077"}@-webkit-keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(5%);-moz-transform:translateX(5%);-ms-transform:translateX(5%);-o-transform:translateX(5%);transform:translateX(5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(5%);-moz-transform:translateX(5%);-ms-transform:translateX(5%);-o-transform:translateX(5%);transform:translateX(5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@media screen and (max-width:1300px){body.course-item-popup #learn-press-course-curriculum{width:300px}body.course-item-popup #learn-press-course-curriculum .progress-bg{width:40px}body.course-item-popup #content-item-nav{left:300px}body.course-item-popup .section-desc{display:none}}@media screen and (max-width:1200px){body.course-item-popupx #learn-press-course-curriculum{width:300px}body.course-item-popupx #content-item-nav{left:300px}body.course-item-popupx #learn-press-content-item .content-item-nav-wrap,body.course-item-popupx #learn-press-content-item .content-item-wrap{width:90%}}@media screen and (max-width:768px){body.course-item-popup .course-curriculum{width:200px}body.course-item-popup #content-item-nav{left:200px}body.course-item-popup #learn-press-content-item .content-item-nav-wrap,body.course-item-popup #learn-press-content-item .content-item-wrap{width:90%}body.course-item-popup.wpadminbar #learn-press-content-item,body.course-item-popup.wpadminbar #learn-press-course-curriculum{top:106px}.learn-press-course-results-progress{margin-right:0}.learn-press-course-results-progress .items-progress,.learn-press-course-results-progress .course-progress{float:none;width:100%;margin-right:0;margin-bottom:20px}}.lp-quiz-buttons{margin-bottom:20px;display:block;clear:both;content:""}.quiz-progress{margin-bottom:30px;background:#e7f7ff}.quiz-progress .progress-items{display:flex}.quiz-progress .progress-items .progress-item{position:relative;color:#777;font-size:15px;flex:1}.quiz-progress .progress-items .progress-item .progress-number,.quiz-progress .progress-items .progress-item .progress-label{display:block;line-height:1;text-align:center}.quiz-progress .progress-items .progress-item .progress-number{margin:15px 0 10px 0;font-size:20px}.quiz-progress .progress-items .progress-item .progress-label{margin-bottom:15px;font-size:14px}.quiz-progress .progress-items .progress-item i{display:none;float:left;width:60px;height:60px;color:#fff;background:#00adff;font-size:30px;line-height:60px;text-align:center}.quiz-progress .progress-items .progress-item::after{display:block;clear:both;content:""}.answer-options{margin:0;padding:0;list-style:none}.answer-options .answer-option{display:flex;overflow:hidden;position:relative;margin:0 0 18px 0;padding:10px;color:#777;background:#f5f5f5;font-size:20px;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-transition:background linear .25s;-moz-transition:background linear .25s;-ms-transition:background linear .25s;-o-transition:background linear .25s;transition:background linear .25s}.answer-options .answer-option .option-title{display:table-cell;font-size:smaller}.answer-options .answer-option .option-title .option-title-content{display:inline-block;vertical-align:middle}.answer-options .answer-option .option-title::before{position:absolute;top:0;bottom:0;left:0;width:3px;background:#ddd;content:"";-webkit-transition:background linear .25s;-moz-transition:background linear .25s;-ms-transition:background linear .25s;-o-transition:background linear .25s;transition:background linear .25s}.answer-options .answer-option input[type=checkbox],.answer-options .answer-option input[type=radio]{-webkit-appearance:initial;-moz-appearance:initial;position:relative;z-index:10;width:35px;min-width:35px;height:35px;margin:0 10px 0 3px;border:1px solid #cfcfcf;background:#f9fafc;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.answer-options .answer-option input[type=checkbox]:focus,.answer-options .answer-option input[type=radio]:focus{outline:0}.answer-options .answer-option input[type=checkbox]::after,.answer-options .answer-option input[type=radio]::after{margin-top:-10px;position:absolute;top:18px;left:9px;box-sizing:content-box;opacity:0;color:#3db748;font-family:"Font Awesome 5 Free";font-weight:900;font-size:16px;content:"\f00c"}.answer-options .answer-option input[type=checkbox]:checked ~ .option-title .option-title-content,.answer-options .answer-option input[type=radio]:checked ~ .option-title .option-title-content{position:relative}.answer-options .answer-option input[type=checkbox]:checked ~ .option-title::before,.answer-options .answer-option input[type=radio]:checked ~ .option-title::before{background:#00adff}.answer-options .answer-option input[type=checkbox]:checked::after,.answer-options .answer-option input[type=radio]:checked::after{opacity:1}.answer-options .answer-option input[type=checkbox]::after{margin-top:0;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.answer-options .answer-option input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.answer-options .answer-option input[type=radio]::before{border-radius:50%}.answer-options .answer-option .option-title{margin:0}.answer-options .answer-option:hover{background:#e1f5ff}.answer-options .answer-option.answer-correct{background:#e1f5ff}.answer-options .answer-option.answer-correct input[type=radio]:checked ~ .option-title::before,.answer-options .answer-option.answer-correct input[type=checkbox]:checked ~ .option-title::before{background:#e1f5ff}.answer-options .answer-option.answered-correct input[type=radio]:checked ~ .option-title::before,.answer-options .answer-option.answered-correct input[type=checkbox]:checked ~ .option-title::before{background:#00adff}.answer-options .answer-option.answered-wrong input[type=radio]::before,.answer-options .answer-option.answered-wrong input[type=radio]::after,.answer-options .answer-option.answered-wrong input[type=checkbox]::before,.answer-options .answer-option.answered-wrong input[type=checkbox]::after{border-color:red}.answer-options .answer-option.answered-wrong input[type=radio]:checked ~ .option-title::before,.answer-options .answer-option.answered-wrong input[type=checkbox]:checked ~ .option-title::before{background:red}button[data-counter]{position:relative}button[data-counter]::after{padding-left:5px;content:"(+" attr(data-counter) ")"}.quiz-result{max-width:320px;margin:20px auto 48px;text-align:center}.quiz-result .result-heading{display:none}.quiz-result.passed .result-message{background:#3bb54a}.quiz-result.passed .result-message::after{content:"\f00c"}.quiz-result .result-message{margin-bottom:30px;padding:10px 0 !important;color:#fff;background:#f02425;font-size:16px;line-height:22px;font-weight:400;display:flex;align-items:center;justify-content:center;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.quiz-result .result-message::after{margin-left:10px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f00d"}.quiz-result .result-grade .result-achieved,.quiz-result .result-grade .result-require{display:inline-block;margin:0 auto}.quiz-result .result-grade .result-achieved{padding-bottom:7px;border-bottom:1px solid #999;color:#333;font-size:28px;font-weight:500;line-height:1}.quiz-result .result-grade .result-require{display:block;padding-top:5px;color:#666;font-size:16px;font-weight:400;line-height:1}.quiz-result .result-grade .result-message{font-size:14px}.quiz-result.passed .result-achieved{color:#04adff}.quiz-result.passed .result-message strong{color:#04adff}.quiz-result .result-statistic{margin:0;padding:0;text-align:left;list-style:none}.quiz-result .result-statistic .result-statistic-field{display:flex;margin:0}.quiz-result .result-statistic .result-statistic-field+li{border-top:1px dashed #ccc}.quiz-result .result-statistic .result-statistic-field span,.quiz-result .result-statistic .result-statistic-field p{margin:0;flex:1}.quiz-result .result-statistic .result-statistic-field span{color:#666;font-size:16px;font-weight:400;line-height:35px}.quiz-result .result-statistic .result-statistic-field span::before{display:inline-block;width:15px;margin-right:10px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900}.quiz-result .result-statistic .result-statistic-field p{color:#333;font-size:16px;font-weight:500;line-height:35px;text-align:right}.quiz-result .result-statistic .result-statistic-field.result-time-spend label::before{font-weight:400;content:"\f017"}.quiz-result .result-statistic .result-statistic-field.result-point label::before{font-weight:400;content:"\f005"}.quiz-result .result-statistic .result-statistic-field.result-questions label::before{font-weight:400;content:"\f059"}.quiz-result .result-statistic .result-statistic-field.result-questions-correct label::before{color:#3db748;content:"\f00c"}.quiz-result .result-statistic .result-statistic-field.result-questions-wrong label::before{color:#f02425;content:"\f00d"}.quiz-result .result-statistic .result-statistic-field.result-questions-skipped label::before{color:#ddd;content:"\f2f5"}.quiz-status{position:sticky;z-index:99;top:0;right:0;left:0;margin:0 0 35px 0}.quiz-status>div{display:flex;box-sizing:border-box;width:100%;max-width:792px;height:60px;margin:0 auto;padding:5px 10px 5px 30px;border-radius:4px;background:var(--lp-primary-color);justify-content:center;align-items:center}@media(max-width:480px){.quiz-status>div{display:block;height:auto;text-align:center;padding:15px}.quiz-status>div .questions-index{margin-bottom:10px}}.quiz-status>div>div{display:flex;flex-direction:row-reverse;flex:0 0 50%;align-items:center}@media(max-width:480px){.quiz-status>div>div{justify-content:center}}.quiz-status>div .current-point{display:none}.quiz-status .questions-index{display:inline-block;color:#666;font-size:16px;font-weight:400;line-height:26px}.quiz-status .questions-index span{color:#333;font-weight:500}.quiz-status .countdown{position:relative;min-width:120px;margin-right:5px;padding:12px 29px;color:#333;background:#fff;font-size:14px;font-weight:400;line-height:1;text-align:center}.quiz-status .countdown .fas{position:absolute;top:50%;left:10px;color:#333;font-size:14px;transform:translateY(-50%)}.quiz-status .countdown .clock{display:none;width:40px;height:40px}.quiz-status .countdown .clock::before{position:absolute;width:40px;height:40px;border:4px solid #b1c1e6;border-radius:50%;content:"";-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.quiz-status .countdown .clock .circle-progress-bar{display:inline-block;position:relative;width:40px;height:40px;stroke:#5383f7}.quiz-status .countdown .clock .circle-progress-bar .circle-progress-bar__circle{transition:.35s stroke-dashoffset;transform:rotate(-90deg);transform-origin:50% 50%}.quiz-status .countdown .clock.x .circle-progress-bar__circle{stroke:red}.quiz-status .submit-quiz button{margin:0 0 0 10px;border:0;border-radius:0;background:#fff;text-transform:uppercase}.quiz-status .submit-quiz button:hover{background:var(--lp-secondary-color)}.quiz-status.submitting .submit-quiz button{background:#ddd}.question-numbers{text-align:center;list-style:none}.question-numbers li{display:inline-block;position:relative;margin-bottom:3px}.question-numbers li a{display:block;min-width:20px;padding:8px;border:1px solid #ddd;color:#999;background:#f5f5f5;box-shadow:none;font-size:12px;line-height:1}.question-numbers li a span{vertical-align:middle}.question-numbers li a:hover{border:1px solid #3880a2;color:#fff;background:#00adff}.question-numbers li.current a{border-color:#3880a2;color:#fff !important;background:#00adff}.question-numbers li.current.skipped::after{background:#fff}.question-numbers li.answered a::after{margin-left:3px;font-family:"Font Awesome 5 Free";font-size:8px;vertical-align:middle}.question-numbers li.answered.answered-wrong a{color:red}.question-numbers li.answered.answered-true a{color:#00adff}.question-numbers li.answered.answered-true.current a{color:#fff}.question-numbers li.skipped::after{position:absolute;bottom:3px;left:50%;width:10px;height:4px;margin-left:-5px;border-radius:2px;background:#aaa;content:""}.quiz-intro{display:flex;margin:0 0 20px;padding:0;list-style:none;flex-flow:row wrap}@media(max-width:768px){.quiz-intro{padding-right:10px;padding-left:10px;justify-content:space-between}}.quiz-intro-item{display:flex;margin:0 40px 0 0;align-items:center}@media(max-width:768px){.quiz-intro-item{margin:0 20px 0 0}}.quiz-intro-item::before{position:relative;top:-2px;margin-right:10px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900}.quiz-intro-item--passing-grade{order:2}.quiz-intro-item--passing-grade::before{content:"\f012"}.quiz-intro-item--questions-count{order:1}.quiz-intro-item--questions-count::before{content:"\f12e"}.quiz-intro-item--duration{order:2}.quiz-intro-item--duration::before{content:"\f017"}.quiz-intro-item__title{margin:0;padding:0 8px 0 0;color:#333;font-size:16px;font-weight:300;line-height:1.7}.quiz-intro-item__content{color:#222;font-size:16px;font-weight:400}.question-explanation-content,.question-hint-content{margin-bottom:20px;padding:10px 15px;background:#f5f5f5}.redo-quiz button[type=submit]{content:attr(data-counter)}.circle-bar{position:relative;width:300px;height:300px;border-color:#ddd}.circle-bar::before{position:absolute;z-index:0;top:0;left:0;box-sizing:border-box;width:100%;height:100%;border:10px solid #ddd;border-radius:50%;content:""}.circle-bar .before,.circle-bar .after{position:absolute;z-index:0;top:0;left:0;box-sizing:border-box;width:100%;height:100%;border:10px solid #14c4ff;border-radius:50%;transform:rotate(45deg)}.circle-bar .before{border-bottom-color:transparent;border-left-color:transparent;transform:rotate(45deg)}.circle-bar .after{border-color:#14c4ff;border-top-color:transparent;border-right-color:transparent;transform:rotate(45deg)}.circle-bar.bg50 .after{z-index:10;border-bottom-color:inherit;border-left-color:inherit;transform:rotate(45deg)}.lp-quiz-buttons .complete-quiz,.lp-quiz-buttons .back-quiz,.lp-quiz-buttons .review-quiz{float:right}.quiz-result .result-grade{display:flex;flex-direction:column;position:relative;box-sizing:border-box;height:200px;margin-bottom:30px;padding:50px;justify-content:center;align-items:center;-webkit-transform:none !important;-moz-transform:none !important;-ms-transform:none !important;-o-transform:none !important;transform:none !important}.quiz-result .result-grade::before,.quiz-result .result-grade svg{position:absolute;top:0;left:50%;width:200px;height:200px;margin-left:-100px;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.quiz-result .result-grade::before{box-sizing:border-box;padding:30px;border:10px solid #ccc;content:""}.quiz-result .result-grade svg{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.quiz-result .result-grade svg circle{stroke:var(--lp-primary-color)}.quiz-result.passed .result-grade svg{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.quiz-result.passed .result-grade .result-achieved{color:#333}.quiz-result.passed .result-grade .result-message strong{color:#4caf50}.quiz-questions .question{margin-bottom:60px}.question .answer-option{padding:0;_border:2px solid #d9e0f1;background:#fff}.question .answer-option input[type=radio],.question .answer-option input[type=checkbox]{position:absolute;top:50%;margin:-19px 0 0 10px;border-color:#d9e0f1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question .answer-option input[type=radio]::after,.question .answer-option input[type=checkbox]::after{border-color:#d9e0f1}.question .answer-option input[type=radio]:disabled,.question .answer-option input[type=checkbox]:disabled{border-color:#ddd;background:#f9f9f9}.question .answer-option input[type=radio]:disabled::after,.question .answer-option input[type=checkbox]:disabled::after{border-color:#ddd}.question .answer-option input[type=radio]:checked:not(:disabled)::after,.question .answer-option input[type=checkbox]:checked:not(:disabled)::after{border-color:#99aee4}.question .answer-option input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.question .answer-option input[type=radio]::before{border-radius:50%}.question .answer-option .option-title{display:flex;width:100%;margin:0;padding:14px 10px 11px 65px;border:1px solid #ccc;color:#666;background:#fff;font-size:16px;font-weight:300;line-height:26px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question .answer-option .option-title::after{display:inline-block;visibility:hidden !important;content:"."}.question .answer-option .option-title:hover{background:#f9f9f9}.question .answer-option .option-title::before{display:none}.question .answer-option.answer-correct .option-title{border-color:#4caf50}.question .answer-option.answered-wrong .option-title{border-color:#ff6423}.question .question-title{display:block;margin-top:0;margin-bottom:18px;color:#333;font-size:18px;font-weight:500}.question .question-title .edit-link{float:right;font-size:14px;font-weight:normal}.question .question-content{margin-bottom:30px;color:#666;font-size:16px;font-weight:300;line-height:26px}.question .question-content img{width:100%;max-width:100%}.question .question-response{margin-bottom:10px;font-size:14px}.question .question-response .label{display:inline-block;margin:0 5px 0 0;padding:8px 10px;border-radius:4px;color:#fff;line-height:1}.question .question-response .point{display:inline-block}.question .question-response.correct .label{background:#4caf50}.question .question-response.incorrect .label{background:#ff6423}.question .question-index{display:inline-block;margin:0 5px 0 0}.question .btn-show-hint{position:relative;margin:0 0 0 10px;padding:0;outline:0;color:#00adff;background:transparent;font-size:0;text-decoration:none}.question .btn-show-hint::before{font-family:"Font Awesome 5 Free";font-size:18px;content:"\f059"}.question .btn-show-hint:hover span{position:absolute;bottom:100%;left:0;width:auto;padding:6px 9px;border-radius:2px;color:#333;background:#eee;font-size:14px;font-weight:400;line-height:1;white-space:nowrap;text-transform:none}.question.question-fill_in_blanks .blanks .blank-input-wrap{display:inline-block}.question.question-fill_in_blanks .blanks .blank-block{margin-bottom:20px}.question.question-fill_in_blanks .blanks .blank-input{display:inline-block;width:auto;min-width:50px;margin:0 10px;padding:0 10px;border:0;border-bottom:1px dashed #ddd;text-align:center;white-space:nowrap}.question.question-fill_in_blanks .blanks .blank-input br{display:none}.question.question-fill_in_blanks .blanks .blank-input>*{display:inline;white-space:nowrap}.question.question-fill_in_blanks .blanks .blank-select{display:inline-block;height:30px;margin-left:4px;padding:1px}.question.question-fill_in_blanks .blanks .blank-fills{display:inline-block}.question.question-fill_in_blanks .blanks .blank-fills code{margin:0 5px;padding:0 6px;background:#ddd;line-height:1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question.question-fill_in_blanks .blanks.ordered{list-style-position:inside}.question.question-fill_in_blanks .blanks.one-paragraph{line-height:3}.lp-sort-bg label.option-title{background:rgba(255,182,6,0.68) !important}.learn-press-message.fixed{position:fixed;top:32px;left:0;right:0;background:rgba(0,173,255,0.6);text-align:center;z-index:100;color:#FFF;padding:10px}.learn-press-message.fixed[data-delay-in]{display:none}.lp-archive-courses ul{list-style-type:revert;padding:0 0 23px 1em}.lp-archive-courses ul.learn-press-breadcrumb,.lp-archive-courses ul.course-nav-tabs{list-style:none;padding:0}@media(max-width:768px){.lp-archive-courses ul.learn-press-breadcrumb,.lp-archive-courses ul.course-nav-tabs{padding-left:15px;padding-right:15px}}.lp-archive-courses ul,.lp-archive-courses ol{list-style-type:decimal;list-style-position:inside;padding:0 0 23px}.lp-archive-courses ol ul{padding:2px 0 2px 35px}.lp-archive-courses ol ol{padding:2px 0 2px 20px}.lp-archive-courses thead th,.lp-archive-courses tr th{padding:9px 24px}.lp-archive-courses tr td{border-top:1px solid #eee;padding:6px 24px}.learnpress #left-area ul,.learnpress .entry-content ul,.learnpress .et-l--body ul,.learnpress .et-l--footer ul,.learnpress .et-l--header ul{padding:0 !important;list-style:none !important}.learnpress.dt-the7 .learn-press-filters{margin-bottom:20px}.learnpress.dt-the7 .learn-press-courses[data-size="3"] .course{width:50%}.bridge.learnpress .lp-archive-courses{margin-top:100px}.bridge.learnpress .lp-archive-courses ul.learn-press-breadcrumb{padding-top:45px}.bridge.learnpress .content{z-index:110}.bridge.learnpress .comment-respond .comment-form{margin:0}.bridge.learnpress .comment-respond .comment-form>p,.bridge.learnpress .comment-respond .comment-form>div{padding:0}.bridge.learnpress.learnpress-profile .content{z-index:100}.bridge.learnpress #learn-press-item-comments{background:#f6f6f6}.learnpress.ast-separate-container .ast-article-single{padding-left:15px;padding-right:15px}body.learnpress-page.twentysixteen #primary .lp-entry-content{float:none;width:auto;margin:0 15%}body.learnpress-page.twentyfifteen .course-summary-sidebar .widget{width:100%;padding:0}body.learnpress-page.twentysixteen .entry-footer{display:none}body.learnpress-page.twentysixteen .lp-entry-content{float:none;width:auto}body.learnpress-page.twentyseventeen #primary article.type-page{width:100%}@media screen and (min-width:61.5625em){body.twentysixteen.learnpress-page .entry-footer{display:none}body.twentysixteen.learnpress-page .lp-entry-content{float:none;width:auto}body:not(.search-results) article:not(.type-page) .entry-footer{display:none}body:not(.search-results) article:not(.type-page) .lp-entry-content{float:none;width:auto}}body.twentyseventeen.learnpress-page #primary article.page .entry-header,body.twentyseventeen.learnpress-page #primary article.page .lp-entry-content{width:100%;float:none}@media screen and (min-width:48em){body.twentyseventeen.learnpress-page #primary article.page .entry-header,body.twentyseventeen.learnpress-page #primary article.page .lp-entry-content{width:100%;float:none}}.learn-press-tip{display:none;margin:0 5px;color:#444;font-size:13px;font-style:normal;line-height:1;vertical-align:baseline;cursor:pointer}.learn-press-tip.ready{display:inline-block}.learn-press-tip::before{font-family:"Font Awesome 5 Free";content:"\f059"}.learn-press-tip:hover{opacity:.8}.learn-press-tip-floating{position:absolute;z-index:9999999;min-width:20px;margin-left:-1px;padding:.618em 1em;color:#fff;background:#383838;font-size:12px;line-height:1.2em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.learn-press-tip-floating>*{font-size:12px}.learn-press-tip-floating .close{display:inline-block;position:absolute;top:-8px;right:-8px;width:16px;height:16px;border:1px solid #fff;color:#fff;background:#468fbc;line-height:16px;text-align:center;cursor:pointer;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.learn-press-tip-floating .close::before{font-family:"Font Awesome 5 Free";content:"\f00d"}.learn-press-tip-floating p{margin:0}.learn-press-tip-floating::before{position:absolute;bottom:-6px;left:50%;width:0;height:0;margin-left:-6px;border:6px solid transparent;border-top-color:#383838;border-bottom-width:0;content:""}body.lp-preview.admin-bar #learn-press-content-item{top:32px !important}body.lp-preview #learn-press-course-curriculum{display:none}body.lp-preview #learn-press-content-item{top:0 !important;left:0 !important}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(360deg);-moz-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}@keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}#popup_container{opacity:0;transform:scale(0.5)}body.confirm #popup_overlay{z-index:999998 !important}body.confirm #popup_container{z-index:999999 !important;max-width:90% !important;min-width:300px !important;padding:10px !important;background:#f5f5f5;transition:opacity .25s;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body.confirm #popup_container #popup_title{display:none !important}body.confirm #popup_container #popup_message{margin:-10px;background:#FFF;padding:20px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body.confirm #popup_container .close{position:absolute;top:3px;right:10px}body.confirm #popup_container #popup_panel{margin-top:20px;text-align:center}body.confirm #popup_container #popup_panel button,body.confirm #popup_container #popup_panel input[type=button],body.confirm #popup_container #popup_panel input[type=submit]{height:30px;line-height:30px;padding:0 25px}body.confirm #popup_container #popup_cancel{display:none}body.confirm #popup_container.ready{opacity:1;transform:scale(1)}a{text-decoration:none}.lp-content-area{width:100%;max-width:1170px;margin:0 auto}@media(max-width:1024px){.lp-content-area{padding-right:15px;padding-left:15px}}.lp-content-area::after,.lp-content-area::before{display:table;clear:both;content:""}.lp-archive-courses{width:100%;scroll-margin:30px}.lp-archive-courses.loading ul.learn-press-courses{position:relative}.lp-archive-courses.loading ul.learn-press-courses::before,.lp-archive-courses.loading ul.learn-press-courses::after{content:"";position:absolute;top:0;bottom:0;left:15px;right:15px}.lp-archive-courses.loading ul.learn-press-courses::after{z-index:3;background:#f3f3f3;background:linear-gradient(90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}.lp-archive-courses.loading ul.learn-press-courses::before{z-index:2;opacity:.8%;background:#fff}.lp-archive-courses form[name=search-course]{position:relative;margin-bottom:20px}.lp-archive-courses form[name=search-course] .search-course-input{width:100%;padding:12px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lp-archive-courses form[name=search-course] .search-course-button{position:absolute;top:1px;right:1px;bottom:1px;height:auto;padding:15px;line-height:1px}.lp-archive-courses .learn-press-courses-header{float:left;padding-top:4px}.lp-archive-courses .learn-press-courses-header h1{margin:0;font-size:30px;font-weight:600}@media(max-width:767px){.lp-archive-courses .learn-press-courses-header{margin-bottom:20px}}.lp-archive-courses .course-item{flex-direction:column;display:flex;transition:all .3s}.lp-archive-courses .course-item:hover .course-thumbnail .thumbnail::before{opacity:1}.lp-archive-courses .course-item:hover .course-thumbnail a img{transform:scale(1.05)}.lp-archive-courses .course-item:hover .course-wishlist{opacity:1}.lp-archive-courses .course-item .course-wishlist.filled{opacity:1}.lp-archive-courses .course-item .course-instructor{float:left;margin-bottom:16px;font-size:14px;font-weight:300;line-height:25px;text-transform:capitalize}.lp-archive-courses .course-item .course-instructor a{color:#059de9}.lp-archive-courses .course-item .course-instructor a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-content{position:relative;border-top:0}.lp-archive-courses .course-content .course-permalink{display:-webkit-box;clear:both;overflow:hidden;position:relative;border:0;color:#fff;text-decoration:none;text-transform:none;-webkit-line-clamp:2;-webkit-box-orient:vertical;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-archive-courses .course-content .course-permalink:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-archive-courses .course-content .course-review{display:none}.lp-archive-courses .course-content .course-categories,.lp-archive-courses .course-content .course-tags{display:block;font-size:14px;font-weight:300}.lp-archive-courses .course-content .course-categories{float:left;position:relative;margin-right:10px;margin-bottom:16px}.lp-archive-courses .course-content .course-categories a{display:inline-block;display:none;margin:0 10px;color:#fff;text-decoration:none}.lp-archive-courses .course-content .course-categories a:first-child{display:block;margin-left:0;padding:2px 16px;background:var(--lp-primary-color)}.lp-archive-courses .course-content .course-categories a:hover{color:#333}.lp-archive-courses .course-content .course-categories::after{position:absolute;top:50%;right:-2px;width:1px;height:12px;opacity:.5;background:#999;content:"";transform:translate(0,-50%)}.lp-archive-courses .course-content .course-info{color:#666;font-size:14px;font-weight:300}.lp-archive-courses .course-content .course-info>span{display:block}.lp-archive-courses .course-content .course-info .course-price{float:right}.lp-archive-courses .course-content .course-info .course-price .origin-price,.lp-archive-courses .course-content .course-info .course-price .price{color:#333;font-size:16px;font-weight:600}.lp-archive-courses .course-content .course-info .course-price .origin-price{margin-right:10px;color:#666;font-size:14px;font-weight:300;text-decoration:line-through}.lp-archive-courses .course-content .course-info .course-instructor{float:right}.lp-archive-courses .course-content .course-info::after{display:block;clear:both;content:""}.lp-archive-courses .course-content .course-excerpt{display:-webkit-box;overflow:hidden;margin-bottom:28px;color:#666;font-size:16px;font-weight:300;line-height:26px;-webkit-line-clamp:2;-webkit-box-orient:vertical}.lp-archive-courses .course-content .separator{display:none}.lp-archive-courses .course-wrap-thumbnail{overflow:hidden;position:relative}.lp-archive-courses .course-wrap-thumbnail .lp-badge.featured{position:absolute;z-index:100;top:28px;left:-110px;width:300px;text-align:center;transform:rotate(-45deg)}.lp-archive-courses .course-wrap-thumbnail .course-wishlist{position:absolute;z-index:2;top:6px;right:6px;opacity:0;color:#fff;cursor:pointer}.lp-archive-courses .course-wrap-thumbnail .course-wishlist::before{font-family:"Font Awesome 5 Free";font-weight:900;content:"\f004"}.lp-archive-courses .course-wrap-thumbnail .course-wishlist .course-wishlist__btn{display:none}.lp-archive-courses .course-wrap-thumbnail .course-wishlist:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-wrap-thumbnail:hover::before{opacity:1}.lp-archive-courses .course-wrap-thumbnail:hover .course-thumbnail a img{transform:scale(1.05)}.lp-archive-courses .course-wrap-thumbnail:hover .course-wishlist{opacity:1}.lp-archive-courses .course-thumbnail a{display:block;overflow:hidden}.lp-archive-courses .course-thumbnail .thumbnail{margin:0;padding:0;border:0;border-radius:unset;line-height:unset}.lp-archive-courses .course-thumbnail .thumbnail::before{position:absolute;z-index:1;top:0;right:0;bottom:0;left:0;opacity:0;background:rgba(0,0,0,0.5);content:"";transition:all .3s}.lp-archive-courses .course-thumbnail img{display:block;width:100%;height:auto;transition:all .5s ease;transform:scale(1)}.lp-archive-courses .course-title{margin:0;padding:0;color:#333;font-size:16px;font-weight:600;line-height:24px}.lp-archive-courses .course-title:hover{color:var(--lp-primary-color)}@media(min-width:769px){.lp-archive-courses .course-summary-content .course-info-left{width:calc(100% - 330px)}}.lp-archive-courses .course-summary-content .course-title{margin-bottom:42px;color:#fff;font-size:1.5rem;font-weight:500;line-height:1}.lp-archive-courses .course-summary-content .course-meta.course-meta-secondary{margin-bottom:0}@media(max-width:768px){.lp-archive-courses .course-summary-content{width:100%}}.lp-archive-courses .course-detail-info{padding:40px 0 10px 0;color:#fff;background:var(--lp-secondary-color);position:relative}.lp-archive-courses .course-detail-info::before,.lp-archive-courses .course-detail-info::after{content:"";width:50%;height:100%;background:var(--lp-secondary-color);position:absolute;top:0}.lp-archive-courses .course-detail-info::before{right:100%;left:auto}.lp-archive-courses .course-detail-info::after{left:100%;right:auto}.lp-archive-courses .course-meta__pull-left .meta-item{display:flex;height:46px;margin-right:50px;font-size:16px;font-weight:300;text-transform:capitalize}.lp-archive-courses .course-meta__pull-left .meta-item span{padding-right:4px;padding-left:0}.lp-archive-courses .course-meta__pull-left .meta-item:last-child{margin-right:0}.lp-archive-courses .course-meta__pull-left .meta-item::before{margin-right:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900}.lp-archive-courses .course-meta__pull-left .meta-item .meta-item__image{margin-right:10px;flex:0 0 46px}.lp-archive-courses .course-meta__pull-left .meta-item .meta-item__image img{overflow:hidden;position:relative;width:46px;height:46px;border-radius:50%}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-duration::before{content:"\f017"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-level::before{content:"\f012"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-lesson::before{content:"\f0c5"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-quiz::before{content:"\f12e"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-student::before{content:"\f501"}@media(max-width:1024px){.lp-archive-courses .course-meta__pull-left .meta-item{margin-right:30px}}@media(max-width:767px){.lp-archive-courses .course-meta__pull-left .meta-item{margin-right:0}}.lp-archive-courses .course-meta__pull-left .meta-item__value label{margin:0;color:#999;font-size:14px;font-weight:300;line-height:1.5}.lp-archive-courses .course-meta__pull-left .meta-item__value>div{line-height:1.5}.lp-archive-courses .course-meta__pull-left .meta-item__value>div a{color:#fff;font-size:16px;font-weight:400;text-transform:capitalize}.lp-archive-courses .course-meta__pull-left .meta-item__value>div a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-meta__pull-left .meta-item-categories{align-items:center}.lp-archive-courses .course-meta__pull-left .meta-item-categories::before{margin-right:10px;font-size:36px;content:"\f02e"}.lp-archive-courses .course-meta__pull-left .meta-item-categories .meta-item__value div span{padding:0 5px}.lp-archive-courses .course-meta__pull-left .meta-item-categories .meta-item__value div a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-meta__pull-left .meta-item-review .meta-item__value{display:flex;flex-direction:column-reverse;justify-content:flex-end;align-items:flex-end}.lp-archive-courses .course-meta__pull-left .meta-item-review .meta-item__value .review-stars-rated{margin-bottom:0;line-height:1}@media(max-width:767px){.lp-archive-courses .course-meta__pull-left{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:20px}}.lp-archive-courses .course-meta-primary{margin-bottom:36px}.lp-archive-courses .course-meta-primary .meta-item-categories::before{font-weight:400}.lp-archive-courses .lp-entry-content{display:flex;flex-direction:row}.lp-archive-courses .lp-entry-content .entry-content-left{width:calc(100% - 300px);max-width:100%;margin:0;padding-right:40px;padding-top:60px}@media(max-width:768px){.lp-archive-courses .lp-entry-content .entry-content-left{width:100%;padding-right:0;margin-bottom:50px}}@media(max-width:768px){.lp-archive-courses .lp-entry-content{flex-direction:column}}.lp-archive-courses .course-summary-sidebar{width:300px;max-width:100%;margin-top:-272px}@media(max-width:768px){.lp-archive-courses .course-summary-sidebar{width:100%;margin-top:0}.lp-archive-courses .course-summary-sidebar .course-summary-sidebar__inner{width:100%}}@media(max-width:767px){.lp-archive-courses .course-summary-sidebar{width:100%;padding-left:0}}.lp-archive-courses .course-summary-sidebar__inner{width:300px}.lp-archive-courses .course-summary-sidebar__inner .course-sidebar-top{box-shadow:0 15px 20px 0 rgba(0,0,0,0.05)}.lp-archive-courses .course-summary-sidebar__inner .course-sidebar-secondary{margin-top:30px;padding:0}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist{color:#fff;background:transparent !important;font-size:0}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist.on,.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist::before{font-family:"Font Awesome 5 Free";font-size:26px;font-weight:900;content:"\f004"}.lp-archive-courses .course-summary-sidebar__inner>div{overflow:hidden;padding:20px;background:#fff}.lp-archive-courses .course-summary-sidebar__inner>div ul{list-style:none}.lp-archive-courses .course-summary-sidebar__inner>div ul li a{color:#666;font-size:16px;font-weight:300;line-height:24px}.lp-archive-courses .course-summary-sidebar__inner>div ul li a:hover{color:var(--lp-primary-color);box-shadow:unset}.learn-press-courses{clear:both;margin:0 -15px;padding:0 !important;min-height:300px;list-style:none;position:relative;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-moz-flex;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}.learn-press-courses .course{width:25%;margin:0 0 60px 0;box-shadow:none;list-style:none}.learn-press-courses[data-layout=list]{margin:0}.learn-press-courses[data-layout=list] .course{display:flex;width:100%;padding:24px;border:1px solid rgba(204,204,204,0.3);border-radius:4px;flex-wrap:wrap;justify-content:flex-end}@media(max-width:767px){.learn-press-courses[data-layout=list] .course{padding:15px}}.learn-press-courses[data-layout=list] .course-item{flex-direction:row;width:100%;border:unset;justify-content:space-between}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-item{flex-direction:column}}.learn-press-courses[data-layout=list] .course-content{float:right;width:calc(64.2% - 76px);padding-top:5px}@media(max-width:1200px){.learn-press-courses[data-layout=list] .course-content{width:calc(64.2% - 40px)}}@media(max-width:1200px){.learn-press-courses[data-layout=list] .course-content{width:calc(64.2% - 25px)}}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content{width:100%;padding-top:20px}}.learn-press-courses[data-layout=list] .course-content .course-categories a{position:relative;padding:2px 20px 2px 15px;-webkit-clip-path:polygon(0 0,100% 0,88% 50%,100% 100%,0 100%);clip-path:polygon(0 0,100% 0,88% 50%,100% 100%,0 100%)}.learn-press-courses[data-layout=list] .course-content .course-permalink{height:25px;margin-bottom:5px;-webkit-line-clamp:1}.learn-press-courses[data-layout=list] .course-content .course-tags a{margin:0 10px 10px 0;padding:3px 5px;border-radius:3px;color:#fff;background:#e4a2a2;line-height:1}.learn-press-courses[data-layout=list] .course-content .course-footer{float:left;margin-right:20px}.learn-press-courses[data-layout=list] .course-content .course-footer .course-students{display:none}.learn-press-courses[data-layout=list] .course-content .course-footer .course-price{float:unset}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content .course-footer{margin-bottom:30px}}.learn-press-courses[data-layout=list] .course-content .course-readmore{float:right;position:relative;right:4px}.learn-press-courses[data-layout=list] .course-content .course-readmore a{padding:9px 24px;border-radius:3px;color:#fff;background:var(--lp-primary-color);font-weight:400;line-height:1;transition:all .3s;display:block}.learn-press-courses[data-layout=list] .course-content .course-readmore a:hover{opacity:.5;background:var(--lp-primary-color)}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content .course-readmore{display:flex;float:unset;clear:both}}.learn-press-courses[data-layout=list] .course-wrap-meta{display:flex;padding-top:12px;padding-bottom:18px;color:#333;font-size:14px;font-weight:400}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item{padding-right:28px;text-transform:capitalize}@media(max-width:1024px){.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item{padding-right:20px}}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item::before{position:relative;top:-1px;margin-right:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-level::before{content:"\f012"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-duration::before{content:"\f017"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-lesson::before{content:"\f0c5"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-quiz::before{content:"\f12e"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-student::before{content:"\f501"}@media(max-width:815px){.learn-press-courses[data-layout=list] .course-wrap-meta{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:15px}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item{padding-right:15px}}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-wrap-meta{grid-template-columns:repeat(3,1fr)}}.learn-press-courses[data-layout=list] .course-wrap-thumbnail{float:left;width:35.8%}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-wrap-thumbnail{width:100%}}.learn-press-courses[data-layout=list] .course-title{font-size:18px}.learn-press-courses[data-layout=grid] .course{padding:0 15px}@media(max-width:992px){.learn-press-courses[data-layout=grid] .course{width:50%}}@media(max-width:767px){.learn-press-courses[data-layout=grid] .course{width:100%}}.learn-press-courses[data-layout=grid] .course-item:hover{box-shadow:0 15px 20px 0 rgba(0,0,0,0.2)}.learn-press-courses[data-layout=grid] .course-item .course-instructor{margin-bottom:7px}.learn-press-courses[data-layout=grid] .course-content{padding:15px 20px 12px 20px;border:1px solid #f0f0f0;border-top:0;flex-grow:1}.learn-press-courses[data-layout=grid] .course-content .course-categories{float:right;position:absolute;z-index:1;top:-34px;right:-1px;margin-right:0}.learn-press-courses[data-layout=grid] .course-content .course-categories::after{display:none}.learn-press-courses[data-layout=grid] .course-content .course-categories a{position:relative;margin:0;padding:2px 12px 2px 22px;-webkit-clip-path:polygon(0 0,100% 0,100% 100%,0 100%,12px 50%);clip-path:polygon(0 0,100% 0,100% 100%,0 100%,12px 50%)}.learn-press-courses[data-layout=grid] .course-content .course-permalink{height:48px;margin-bottom:20px}.learn-press-courses[data-layout=grid] .course-content .course-info{display:flex;flex-direction:column;flex-grow:1}.learn-press-courses[data-layout=grid] .course-content .course-wrap-meta,.learn-press-courses[data-layout=grid] .course-content .course-excerpt,.learn-press-courses[data-layout=grid] .course-content .course-readmore{display:none}.learn-press-courses[data-layout=grid] .course-content .course-footer{padding-top:18px;border-top:1px solid rgba(153,153,153,0.2)}.learn-press-courses[data-layout=grid] .course-content .course-footer .course-students{float:left;text-transform:capitalize}.learn-press-courses[data-layout=grid] .course-content .course-footer .course-students::before{position:relative;top:-1px;margin-right:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900;content:"\f501"}.learn-press-courses[data-layout=grid] .learn-press-message{margin-left:15px;margin-right:15px}.learn-press-courses[data-size="3"] .course{width:33.3333%}@media(max-width:767px){.learn-press-courses[data-size="3"] .course{width:100%}}.learn-press-courses .lp-archive-course-skeleton{position:absolute;height:100%;background:linear-gradient(90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);animation:lp-skeleton-loading 1.4s ease infinite;background-size:400% 100%}.learn-press-courses .lp-archive-course-skeleton li{display:none}.lp-courses-bar{display:flex;float:right;margin-bottom:48px}@media(max-width:767px){.lp-courses-bar{flex-direction:row;width:100%;justify-content:space-between}}.lp-courses-bar .search-courses{position:relative;width:306px;max-width:100%;margin-right:20px;line-height:1;flex:1}.lp-courses-bar .search-courses input[type=text]{width:100%;height:44px;padding:6px 32px 6px 18px;border:1px solid #ccc;border-radius:5px;background:#fff;font-size:14px;font-style:italic;line-height:1}.lp-courses-bar .search-courses input[type=text]:focus{border-color:var(--lp-primary-color);outline:0}.lp-courses-bar .search-courses button{position:absolute;top:50%;right:12px;width:30px;height:30px;padding:0;border:0;color:#333;background:transparent;font-size:16px;line-height:1;transform:translate(0,-50%)}.lp-courses-bar .search-courses button:focus{border:0;outline:0}.lp-courses-bar .search-courses button.loading>i::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.lp-courses-bar .search-courses ::-webkit-input-placeholder{color:#999}.lp-courses-bar .search-courses :-ms-input-placeholder{color:#999}.lp-courses-bar .search-courses ::placeholder{color:#999}@media(max-width:767px){.lp-courses-bar .search-courses{width:100%}}.lp-courses-bar .switch-layout{display:flex;height:44px;line-height:1;text-align:right;flex:0 0 40px;align-items:center;justify-content:center}.lp-courses-bar .switch-layout input[type=radio]{display:none}.lp-courses-bar .switch-layout .switch-btn{display:block;width:40px;height:40px;margin:0;padding:0;border-radius:5px;font-size:16px;line-height:40px;text-align:center;cursor:pointer}.lp-courses-bar .switch-layout .switch-btn::before{display:inline-block;margin:8px 6px;color:#333;font-family:"Font Awesome 5 Free";font-weight:900;line-height:1}.lp-courses-bar .switch-layout .switch-btn.grid::before{content:"\f00a"}.lp-courses-bar .switch-layout .switch-btn.list{margin-left:3px}.lp-courses-bar .switch-layout .switch-btn.list::before{content:"\f03a"}input[type=radio]:nth-child(1):checked ~ .switch-btn:nth-child(2){background:#f5f5f5}input[type=radio]:nth-child(1):checked ~ .switch-btn:nth-child(2)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(3):checked ~ .switch-btn:nth-child(4){background:#f5f5f5}input[type=radio]:nth-child(3):checked ~ .switch-btn:nth-child(4)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(5):checked ~ .switch-btn:nth-child(6){background:#f5f5f5}input[type=radio]:nth-child(5):checked ~ .switch-btn:nth-child(6)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(7):checked ~ .switch-btn:nth-child(8){background:#f5f5f5}input[type=radio]:nth-child(7):checked ~ .switch-btn:nth-child(8)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(9):checked ~ .switch-btn:nth-child(10){background:#f5f5f5}input[type=radio]:nth-child(9):checked ~ .switch-btn:nth-child(10)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(11):checked ~ .switch-btn:nth-child(12){background:#f5f5f5}input[type=radio]:nth-child(11):checked ~ .switch-btn:nth-child(12)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(13):checked ~ .switch-btn:nth-child(14){background:#f5f5f5}input[type=radio]:nth-child(13):checked ~ .switch-btn:nth-child(14)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(15):checked ~ .switch-btn:nth-child(16){background:#f5f5f5}input[type=radio]:nth-child(15):checked ~ .switch-btn:nth-child(16)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(17):checked ~ .switch-btn:nth-child(18){background:#f5f5f5}input[type=radio]:nth-child(17):checked ~ .switch-btn:nth-child(18)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20){background:#f5f5f5}input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20)::before{color:var(--lp-primary-color)}.lp_allow_repuchase_select{padding:20px;background:#f7f7f7}.lp_allow_repuchase_select>ul{padding:0;list-style:none}.lp_allow_repuchase_select>a{display:inline-block;margin-top:10px;color:#fff;background-color:#222}.comment-respond .comment-reply-title{font-size:30px;font-weight:500;line-height:1.2;margin-bottom:15px}.comment-respond .comment-form{margin:0 -15px}.comment-respond .comment-form>p label{display:block;margin-bottom:10px;font-size:16px;font-weight:500}.comment-respond .comment-form>p.comment-notes,.comment-respond .comment-form>p.logged-in-as{color:#666;font-size:16px}.comment-respond .comment-form>p.logged-in-as a{color:#666;text-decoration:underline}.comment-respond .comment-form>p.logged-in-as a:hover,.comment-respond .comment-form>p.logged-in-as a:focus{color:var(--lp-primary-color)}.comment-respond .comment-form>p.comment-form-cookies-consent{clear:both}.comment-respond .comment-form>p.comment-form-cookies-consent input{padding:0;margin-right:8px}.comment-respond .comment-form>p.comment-form-cookies-consent label{display:inline}.comment-respond .comment-form>p,.comment-respond .comment-form>div{padding:0 15px;margin-bottom:15px}.comment-respond .comment-form input[type=text],.comment-respond .comment-form input[type=email],.comment-respond .comment-form input[type=url]{height:40px;line-height:normal;width:100% !important;margin-bottom:15px}.comment-respond .comment-form input[type=submit]{background-color:var(--lp-primary-color);border:0;min-height:40px;line-height:40px;padding:0 15px;font-size:16px;text-transform:capitalize;font-weight:500;margin-top:15px;cursor:pointer;color:white}.comment-respond .comment-form .comment-form-author,.comment-respond .comment-form .comment-form-email,.comment-respond .comment-form .comment-form-url{width:33.33%;float:left}@media(max-width:575px){.comment-respond .comment-form .comment-form-author,.comment-respond .comment-form .comment-form-email,.comment-respond .comment-form .comment-form-url{width:100%;float:unset}}.comment-respond .comment-form textarea,.comment-respond .comment-form input{border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;max-width:100%}.comment-respond .comment-form textarea{width:100%;display:block;padding:20px 15px;resize:none}.course-summary-sidebar .course-sidebar-preview{margin-bottom:35px;background:#fff}.course-summary-sidebar .lp-course-buttons{margin-bottom:34px}.course-summary-sidebar .lp-course-buttons>*{margin-bottom:10px}.course-summary-sidebar .lp-course-buttons>*:last-child{margin-bottom:0}.course-summary-sidebar .lp-course-buttons form,.course-summary-sidebar .lp-course-buttons button{width:100%;text-decoration:none}.course-summary-sidebar .lp-course-buttons button{font-weight:500}.course-summary-sidebar .lp-course-buttons button:hover{border-color:var(--lp-primary-color)}.course-summary-sidebar .lp-course-buttons button.button-enroll-course{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.course-summary-sidebar .lp-course-buttons button.button-enroll-course:hover{opacity:.5;background:var(--lp-primary-color)}.course-summary-sidebar .lp-course-buttons button.button-enroll-course.loading::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";animation:lp-rotating 1s linear infinite}.course-summary-sidebar .lp-course-buttons button ~ .lp-enroll-notice{margin-top:20px;padding:20px;border:2px solid #059601;border-radius:9px;font-size:15px;line-height:1.4}.course-summary-sidebar .lp-course-buttons button ~ .lp-enroll-notice.error{border-color:#d85554}.course-summary-sidebar .course-results-progress .items-progress,.course-summary-sidebar .course-results-progress .course-progress{display:flex;flex-direction:row;margin:0 0 5px;padding:0;justify-content:space-between;flex-wrap:wrap}.course-summary-sidebar .course-results-progress .items-progress__heading,.course-summary-sidebar .course-results-progress .course-progress__heading{margin:0;margin-bottom:7px;padding:0;color:#333;font-size:1rem;font-weight:500;flex:1 1 auto;width:auto}.course-summary-sidebar .course-results-progress .items-progress .learn-press-progress,.course-summary-sidebar .course-results-progress .course-progress .learn-press-progress{clear:both;width:100%}.course-summary-sidebar .course-results-progress .number{display:block;margin:0;color:#666;font-size:16px;font-weight:300;line-height:16px;text-align:right}.course-sidebar-preview .course-price{text-align:center}.course-sidebar-preview .course-price .origin-price{color:#666;font-size:18px;font-weight:300;font-style:unset}.course-sidebar-preview .course-price .price{color:#333;font-size:1.8rem;font-weight:500}.course-sidebar-preview .media-preview{overflow:hidden;position:relative;margin:-20px -20px 20px}.course-sidebar-preview .media-preview img{max-width:100%;height:auto;vertical-align:top}.course-sidebar-preview .course-time{margin-bottom:28px;padding-bottom:8px;border-bottom:1px solid rgba(204,204,204,0.3)}.course-sidebar-preview .course-time-row{display:flex;color:#666;font-size:16px;font-weight:300;justify-content:space-between}.course-sidebar-preview .course-time-row strong{color:#333;font-weight:500}.course-sidebar-preview .course-time-row time{color:#666;font-size:1rem;font-weight:300;line-height:24px}.course-sidebar-preview>*:last-child{margin-bottom:0}.learnpress-page .lp-button.secondary{background:#9198ab}.learnpress-page .lp-button.secondary:hover{background:#9ba6c5}.learnpress-page .lp-button:disabled,.learnpress-page .lp-button[disabled]{background:#ddd;pointer-events:none}.learnpress-page:hover{text-decoration:none}#popup-course{display:flex;position:fixed;z-index:99999;top:0;right:0;bottom:0;left:0;background:#fff}#popup-course .back-course{padding-left:30px;padding-right:30px;line-height:70px;background:rgba(255,255,255,0.1);color:#fff}#popup-course .back-course:hover{background:rgba(255,255,255,0.15)}@media(max-width:768px){#popup-course .back-course{background:transparent;opacity:.6;padding-left:15px;padding-right:15px}#popup-course .back-course:hover{background:transparent;opacity:1}}#popup-course #popup-header{display:flex;position:fixed;z-index:100;right:0;left:475px;padding:0;border-bottom:1px solid #d9e0f1;background:var(--lp-secondary-color);-webkit-transition:left .25s;-moz-transition:left .25s;-ms-transition:left .25s;-o-transition:left .25s;transition:left .25s}#popup-course #popup-header .course-title{margin:0;padding:0;line-height:70px;letter-spacing:unset}#popup-course #popup-header .course-title a{display:-webkit-box;overflow:hidden;color:#fff;font-size:16px;font-weight:400;text-overflow:ellipsis;-webkit-line-clamp:1;-webkit-box-orient:vertical}#popup-course #popup-header .course-title a:hover{color:var(--lp-primary-color)}@media(max-width:768px){#popup-course #popup-header .course-title{flex:1}}#popup-course #popup-header .items-progress{display:flex;justify-content:center;align-items:center}@media(max-width:768px){#popup-course #popup-header .items-progress{flex:1}}@media(max-width:767px){#popup-course #popup-header .items-progress{padding-bottom:20px;justify-content:end}}#popup-course #popup-header .number{padding-right:10px;color:#fff;font-size:14px;font-weight:300}#popup-course #popup-header .lp-button{display:flex;position:relative;height:40px;margin:9px;border:0;color:#fff;background:var(--lp-primary-color);font-size:14px;font-weight:400;justify-content:center;line-height:40px;align-items:center}#popup-course #popup-header .lp-button:hover{opacity:.8}#popup-course #popup-header .lp-button-back{float:right;margin:9px 10px}#popup-course #popup-header .lp-button-back button::before,#popup-course #popup-header .lp-button-back button::after{content:""}#popup-course #popup-header .lp-button-back button::before{border:1px solid #ddd}#popup-course #popup-header .lp-button-back button::after{border:1px solid #ddd}#popup-course .popup-header__inner{display:flex;width:792px;margin:0 auto;justify-content:space-between;align-items:center;padding-left:15px;padding-right:15px}@media(max-width:1024px){#popup-course .popup-header__inner{width:100%}}@media(max-width:767px){#popup-course .popup-header__inner{flex-direction:column}}#popup-course #popup-sidebar{overflow:auto;position:relative;box-shadow:0 15px 30px 0 rgba(0,0,0,0.1);flex:0 0 475px;-webkit-transition:.25s;-moz-transition:.25s;-ms-transition:.25s;-o-transition:.25s;transition:.25s}#popup-course #popup-sidebar .search-course{display:flex;position:relative;height:70px;background:#f9fafc}#popup-course #popup-sidebar .search-course input[name=s]{display:block;width:100%;margin:6px 0;padding-left:20px;border:0;color:#999;background:transparent;box-shadow:none;font-size:14px;line-height:1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#popup-course #popup-sidebar .search-course input[name=s]::-webkit-input-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]::-moz-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]:-ms-input-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]:-moz-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]::placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]::-webkit-input-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]::-moz-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]:-ms-input-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]:-moz-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]::placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]:focus{outline:0;color:#222}#popup-course #popup-sidebar .search-course button{position:absolute;top:0;right:10px;width:16px;height:70px;margin:0 10px;padding:0;border:0;background:transparent;line-height:1px}#popup-course #popup-sidebar .search-course button::before{color:#666;font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900;content:"\f002"}#popup-course #popup-sidebar .search-course button.clear{display:none}#popup-course #popup-sidebar .search-course button.clear::before{content:"\f00d"}#popup-course #popup-sidebar .search-course .search-results{display:none;overflow:auto;position:fixed;z-index:99999999;top:92px;bottom:0;left:0;width:400px;margin:0;border-top-color:transparent;border-right:1px solid #d9e0f1;background:#fbfcff}#popup-course #popup-sidebar .search-course .search-results .search-results__item{border-bottom:1px solid #d9e0f1;background:#fff}#popup-course #popup-sidebar .search-course .search-results .search-results__item img{position:absolute;left:10px;width:40px;height:40px}#popup-course #popup-sidebar .search-course .search-results .search-results__item a{display:-webkit-box;overflow:hidden;position:relative;box-sizing:content-box;height:40px;padding:10px 10px 10px 60px;color:#777;text-overflow:ellipsis;-webkit-line-clamp:1;-webkit-box-orient:vertical}#popup-course #popup-sidebar .search-course .search-results .search-results__item:hover{background:#d9e0f1}#popup-course #popup-sidebar .search-course .search-results .search-results__item-title{overflow:hidden;margin:0 0 -2px 0;padding:0;font-size:16px;font-weight:normal}#popup-course #popup-sidebar .search-course .search-results .search-results__item-author{font-size:12px}#popup-course #popup-sidebar .search-course .search-results .course-price{position:absolute;right:10px;bottom:10px;font-size:12px}#popup-course #popup-sidebar .search-course .search-results .course-price .origin-price{font-size:smaller;text-decoration:line-through}#popup-course #popup-sidebar .search-course .search-results .search-results__not-found{padding:10px;color:#777}#popup-course #popup-sidebar .search-course .search-results .search-results__pagination{padding:10px;text-align:center}#popup-course #popup-sidebar .search-course .search-results .search-results__pagination a,#popup-course #popup-sidebar .search-course .search-results .search-results__pagination span{display:inline-block;margin:0 3px 10px 2px;padding:5px 8px;border:1px solid #d9e0f1;border-radius:4px;color:#777;font-size:14px;line-height:1;cursor:pointer}#popup-course #popup-sidebar .search-course .search-results .search-results__pagination span{color:#999;background:#d9e0f1}#popup-course #popup-sidebar .search-course.searching .search-results{display:block}#popup-course #popup-sidebar .search-course.searching .clear{display:block}#popup-course #popup-sidebar .search-course.searching button{display:none}#popup-course #popup-sidebar .search-course.searching::after{position:absolute;z-index:1;bottom:0;left:50%;width:0;height:0;margin-left:-10px;border:10px solid transparent;border-bottom-color:#fff;content:""}#popup-course #popup-sidebar .course-curriculum{overflow:auto;position:absolute;top:70px;bottom:0;width:475px}#popup-course #popup-sidebar .course-curriculum::-webkit-scrollbar-thumb{background:#ccc}#popup-course #popup-sidebar .course-curriculum::-webkit-scrollbar{width:6px}#popup-course #popup-sidebar .course-curriculum::-webkit-scrollbar-track{background:#f5f5f5}#popup-course #popup-sidebar .section{position:relative;padding:0 0 4px 0}#popup-course #popup-sidebar .section .circle-progress{display:inline-block;position:absolute;top:50%;right:10px;width:24px;height:24px;margin-top:-12px;border:3px solid #d9e0f1;border-radius:50%}#popup-course #popup-sidebar .section.section-empty .section-header{margin:0}#popup-course #popup-sidebar .section.section-empty .learn-press-message{margin:0;padding:10px;border-bottom:1px solid #d9e0f1;border-radius:0;color:#999;background:#f5f5f5;font-size:14px}#popup-course #popup-sidebar .section.section-empty .learn-press-message::before,#popup-course #popup-sidebar .section.section-empty .learn-press-message::after{position:absolute;z-index:9999;top:-16px;left:10px;width:0;height:0;border:8px solid transparent;border-bottom-color:#f5f5f5;background:transparent;content:"";-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}#popup-course #popup-sidebar .section.section-empty .learn-press-message::after{z-index:9998;top:-20px;left:8px;border-width:10px;border-bottom-color:#d9e0f1}#popup-course #popup-sidebar .section-header{position:sticky;z-index:1000;top:0;height:94px;padding:38px 20px 20px 20px;cursor:pointer;background-color:white}#popup-course #popup-sidebar .section-header .section-title{padding:0 0 4px 0;color:#000;font-size:20px;font-weight:500}#popup-course #popup-sidebar .section-header .section-title .show-desc::before{font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f0d7"}#popup-course #popup-sidebar .section-header .section-toggle{justify-content:flex-end;flex:0}#popup-course #popup-sidebar .section-header .section-toggle i{color:#666}#popup-course #popup-sidebar .section-header .section-meta{padding-top:6px;padding-bottom:0}#popup-course #popup-sidebar .section-content{margin-bottom:0}#popup-course #popup-sidebar .course-item{min-height:50px;margin-bottom:4px;padding:5px 20px;background:#f9fafc;align-items:center}#popup-course #popup-sidebar .course-item>span{display:none}#popup-course #popup-sidebar .course-item::before{top:-1px;bottom:-1px;height:auto;background:transparent}#popup-course #popup-sidebar .course-item::after{content:""}#popup-course #popup-sidebar .course-item.current{background:#eaeaea}#popup-course #popup-sidebar .course-item.has-status.failed .trans{color:#f02425}#popup-course #popup-sidebar .course-item.status-completed .trans{color:#3bb54a}#popup-course #popup-sidebar .section-item-link{line-height:1;padding-right:0}#popup-course #popup-sidebar .section-item-link::before{padding:12px 0;vertical-align:unset}#popup-course #popup-sidebar .section-item-link .item-name{width:100%;padding:0 10px 0 17px;font-size:14px;line-height:21px;font-weight:500}#popup-course #popup-sidebar .course-item-meta{padding:0}#popup-course #popup-sidebar .course-item-meta .item-meta{padding:0;color:#999;background:transparent;font-size:12px;line-height:1.5;height:auto}#popup-course #popup-sidebar .course-item-meta .item-meta:first-child{margin-left:0}#popup-course #popup-sidebar .course-item-meta .item-meta::before{font-size:12px;line-height:21px}#popup-course #popup-content{overflow:auto;position:relative;margin:70px 0 50px 0;flex:1;padding-left:15px;padding-right:15px}#popup-course #popup-content .lp-button{position:relative;margin:0 10px 0 0;padding:12px 29px;border-color:var(--lp-secondary-color);font-size:14px}#popup-course #popup-content .lp-button.instant-check .instant-check__icon{margin-right:5px}#popup-course #popup-content .lp-button.instant-check .instant-check__icon::before{font-family:"Font Awesome 5 Free";content:"\f058"}#popup-course #popup-content .lp-button.instant-check .instant-check__info{visibility:hidden;position:absolute;top:100%;left:0;margin-top:3px;padding:11px 20px;border-radius:3px;background:#eee;white-space:nowrap;text-transform:none}#popup-course #popup-content .lp-button.instant-check:hover .instant-check__info{visibility:visible;position:absolute;top:100%;left:0;margin-top:3px;padding:11px 11px;border-radius:3px;color:#333;background:#eee;white-space:nowrap}#popup-course #popup-content .lp-button.instant-check.loading .instant-check__icon{display:inline-block;animation:lp-rotating 1s linear infinite}#popup-course #popup-content .lp-button.instant-check.loading .instant-check__icon::before{font-weight:800;content:"\f110"}#popup-course #popup-content .lp-button:hover{border-color:var(--lp-primary-color)}#popup-course #popup-content .lp-button.completed{display:flex;flex-direction:row-reverse;margin-top:32px;border-color:transparent;color:#fff;background:#3db748;font-size:16px;align-items:center;justify-content:center}#popup-course #popup-content .lp-button.completed i{margin-left:9px;font-size:14px}#popup-course #popup-content.fixed-quiz-status .quiz-status{background:var(--lp-primary-color)}#popup-course #popup-content.fixed-quiz-status .quiz-status>div{padding:0}@media(max-width:767px){#popup-course #popup-content{margin-top:113px}}#popup-course #popup-footer{position:fixed;z-index:999;right:0;bottom:0;left:475px;width:100%;max-width:792px;height:50px;margin:0 auto;border-top:1px solid #ebebeb;background:#fff;-webkit-transition:left .25s;-moz-transition:left .25s;-ms-transition:left .25s;-o-transition:left .25s;transition:left .25s}@media(max-width:1024px){#popup-course #popup-footer{width:auto;padding:0 15px}}#popup-course #popup-footer .course-item-nav{justify-content:space-between}#popup-course #popup-footer .course-item-nav .prev,#popup-course #popup-footer .course-item-nav .next{display:flex;line-height:50px}#popup-course #popup-footer .course-item-nav .prev a,#popup-course #popup-footer .course-item-nav .next a{display:block;color:#666;font-size:16px}#popup-course #popup-footer .course-item-nav .prev::before,#popup-course #popup-footer .course-item-nav .next::before{color:#999;font-family:"Font Awesome 5 Free";font-size:12px;font-weight:900}#popup-course #popup-footer .course-item-nav .prev:hover a,#popup-course #popup-footer .course-item-nav .prev:hover::before,#popup-course #popup-footer .course-item-nav .next:hover a,#popup-course #popup-footer .course-item-nav .next:hover::before{color:var(--lp-primary-color)}#popup-course #popup-footer .course-item-nav .prev:hover .course-item-nav__name,#popup-course #popup-footer .course-item-nav .next:hover .course-item-nav__name{display:block}#popup-course #popup-footer .course-item-nav .next{flex-direction:row-reverse}#popup-course #popup-footer .course-item-nav .next::before{margin-left:10px;content:"\f0da"}#popup-course #popup-footer .course-item-nav[data-nav=next]{justify-content:flex-end}#popup-course #popup-footer .prev::before{margin-right:10px;content:"\f0d9"}#popup-course #popup-footer .prev .course-item-nav__name{right:auto;left:-30px}#popup-course #popup-footer .prev .course-item-nav__name::before{right:auto;left:5px}@media(max-width:1024px){#popup-course #popup-footer .prev .course-item-nav__name{left:15px}}#popup-course #popup-footer .course-item-nav__name{display:none;position:absolute;top:-20px;right:-30px;width:auto;padding:10px 15px;color:#666;background:#ccc;font-size:14px;font-weight:300;line-height:1}@media(max-width:1024px){#popup-course #popup-footer .course-item-nav__name{top:-25px;right:15px;left:auto}}#popup-course #sidebar-toggle{display:inline-block;position:absolute;z-index:100;top:198px;left:475px;width:25px;height:56px;margin:0;background:#fff;box-shadow:0 0 20px 0 rgba(0,0,0,0.15);cursor:pointer;transition:.25s;-webkit-appearance:none;border:0}#popup-course #sidebar-toggle:after{display:none}#popup-course #sidebar-toggle::before{display:inline-block;position:absolute;top:50%;left:50%;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f0d9";transition:.25s;transform:translate(-50%,-50%)}#popup-course #sidebar-toggle:focus{border:0;outline:0}#popup-course .lp-quiz-buttons .complete-quiz,#popup-course .lp-quiz-buttons .back-quiz,#popup-course .lp-quiz-buttons .review-quiz{float:right}#popup-course .quiz-results,#popup-course .quiz-content,#popup-course .quiz-questions,#popup-course .quiz-buttons,#popup-course .quiz-attempts{margin-bottom:60px}#popup-course .quiz-questions .lp-fib-content{margin-bottom:20px;padding:20px;border:2px solid #f5f5f5;border-radius:6px;line-height:1.6}#popup-course .quiz-questions .lp-fib-input{display:inline-block;width:auto;max-width:none}#popup-course .quiz-questions .lp-fib-input>input{height:36px;padding:6px 16px;border:1px solid #222;line-height:36px}#popup-course .quiz-questions .lp-fib-answered{padding:0 10px;background:#ececec;white-space:nowrap}#popup-course .quiz-questions .lp-fib-answered.fail{border:2px solid #d85554}#popup-course .quiz-questions .lp-fib-answered.fail .lp-fib-answered__answer{text-decoration:line-through}#popup-course .quiz-questions .lp-fib-answered.correct{border:2px solid #00adff}#popup-course .quiz-questions .lp-fib-note{display:flex;margin-left:10px;font-size:14px;font-weight:400;align-items:center}#popup-course .quiz-questions .lp-fib-note>span{display:inline-block;width:20px;height:20px;margin:0 5px 0 0}#popup-course .quiz-questions .lp-sorting-choice__check-answer{padding:5px 20px;border:2px solid #059601;border-radius:5px;font-size:1rem}#popup-course .question .answer-option input[type=radio],#popup-course .question .answer-option input[type=checkbox]{-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);margin:0 0 0 10px}#popup-course .question .answer-option input[type=radio]::before{border-radius:50%}#popup-course .question .question-response{display:flex;align-items:center;justify-content:flex-start}#popup-course .scrollbar-light>.scroll-element{z-index:9999}#popup-course .scrollbar-light>.scroll-element.scroll-y{display:none}#popup-course .scrollbar-light>.scroll-element.scroll-y .scroll-bar{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body.admin-bar #popup-course{top:32px}body.lp-sidebar-toggle__close #popup-course>#sidebar-toggle{left:0}body.lp-sidebar-toggle__close #popup-course>#sidebar-toggle::before{content:"\f0da"}body.lp-sidebar-toggle__close #popup-course #popup-sidebar{flex:0}body.lp-sidebar-toggle__close #popup-course #popup-header,body.lp-sidebar-toggle__close #popup-course #popup-footer{left:0}@media(max-width:768px){body:not(.lp-sidebar-toggle__open) #popup-course>#sidebar-toggle{left:0}body:not(.lp-sidebar-toggle__open) #popup-course>#sidebar-toggle::before{content:"\f0da"}body:not(.lp-sidebar-toggle__open) #popup-course #popup-sidebar{flex:0}}.course-curriculum .section-header .section-meta{position:relative}@media screen and (max-width:1280px){#popup-course #popup-sidebar{flex-basis:300px}#popup-course #popup-sidebar .course-curriculum{width:300px}#popup-course #popup-header,#popup-course #popup-footer{left:300px}#popup-course #sidebar-toggle{left:299px}}@media screen and (max-width:782px){body.admin-bar #popup-course{top:46px}#popup-course #popup-sidebar{flex-basis:250px}#popup-course #popup-sidebar .course-curriculum{width:250px}#popup-course #popup-header,#popup-course #popup-footer{left:250px}#popup-course #sidebar-toggle{left:249px}#popup-course #sidebar-toggle:checked ~ #popup-sidebar{flex-basis:0}#popup-course .course-item-meta .item-meta.count-questions,#popup-course .course-item-meta .item-meta.duration{display:none}}.content-item-wrap{width:792px;max-width:100%;margin:0 auto;padding-bottom:80px}@media(max-width:1024px){.content-item-wrap{width:100%}}.content-item-wrap .course-item-title{margin-top:0;margin-bottom:24px;color:#333;font-size:30px;font-weight:600}@media(max-width:767px){.content-item-wrap .course-item-title{text-align:center}}.content-item-wrap h4{font-size:1.5rem;font-weight:500;line-height:1.5}.content-item-wrap .content-item-summary{padding-top:50px}.content-item-wrap .content-item-description{margin-bottom:30px}.content-item-wrap .content-item-description h2,.content-item-wrap .content-item-description h3,.content-item-wrap .content-item-description h4,.content-item-wrap .content-item-description h5,.content-item-wrap .content-item-description h6{margin-top:0;margin-bottom:18px;font-size:18px;letter-spacing:unset}.content-item-wrap .content-item-description p{margin:0 0 18px 0;color:#666;font-size:16px;font-weight:300;line-height:26px}.content-item-wrap .content-item-description img{max-width:100%;height:auto;vertical-align:middle}.content-item-wrap #learn-press-quiz-app{margin-bottom:40px}.content-item-wrap .quiz-content{margin-bottom:40px;color:#666;font-size:16px;font-weight:300;line-height:26px}.content-item-wrap .quiz-content img{max-width:100%;height:auto;vertical-align:middle}.content-item-wrap .quiz-buttons{display:flex;justify-content:center;text-align:center}.content-item-wrap .quiz-buttons .button-right .lp-button{margin:0 0 0 15px}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav]{margin:0;border:1px solid #d9e0f1;color:#777;background:#fbfcff}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav]::before{display:inline-block;width:15px;height:15px;border:2px solid #d9e0f1;border-top-color:transparent;border-left-color:transparent;content:"";-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav].prev::before{margin-left:7px;-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);-ms-transform:rotate(135deg);-o-transform:rotate(135deg);transform:rotate(135deg)}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav].next{margin-left:-1px}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav].next::before{margin-right:7px}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav]:hover{background:#fff}.content-item-wrap .quiz-buttons.align-center{display:block;text-align:center}.content-item-wrap .quiz-buttons.align-center .button-left{text-align:center}.content-item-wrap .quiz-buttons.align-center .button-left.fixed{position:fixed;z-index:99999;bottom:0;left:50%;width:100%;max-width:792px;height:49px;margin-left:237px;transform:translateX(-50%)}@media(max-width:768px){.content-item-wrap .quiz-buttons.align-center .button-left.fixed{width:100% !important}}.content-item-wrap .quiz-buttons.align-center .button-left.nav-center{height:50px;margin-left:0 !important}.content-item-wrap .quiz-buttons:not(.infinity).is-first .prev{display:none}.content-item-wrap .quiz-buttons:not(.infinity).is-last .next{display:none}.content-item-wrap .quiz-buttons:not(.is-first):not(.is-last) .prev{border-top-right-radius:0;border-bottom-right-radius:0}.content-item-wrap .quiz-buttons:not(.is-first):not(.is-last) .next{border-top-left-radius:0;border-bottom-left-radius:0}.content-item-wrap .questions-pagination{height:33px;padding:8px 0;background:#fff;text-align:center}.content-item-wrap .questions-pagination .nav-links{text-align:center}.content-item-wrap .questions-pagination .nav-links .page-numbers{display:inline-block;vertical-align:middle;margin:0 3px 3px;padding:10px 16px;color:#666;background-color:transparent;font-size:16px;font-weight:300;line-height:1;border:1px solid;cursor:pointer}.content-item-wrap .questions-pagination .nav-links .page-numbers.next,.content-item-wrap .questions-pagination .nav-links .page-numbers.prev{display:inline-block;padding:10px;background:transparent;font-size:16px;text-align:center;text-decoration:none;text-transform:none;border:1px solid}.content-item-wrap .questions-pagination .nav-links .page-numbers.current,.content-item-wrap .questions-pagination .nav-links .page-numbers:hover{color:var(--lp-primary-color)}.course-curriculum .section-title{position:relative;margin-bottom:0;padding:8px 0;color:#5383f7;font-size:16px;font-weight:normal;line-height:1}.course-curriculum .section-title span.show-desc{display:inline-block;position:absolute;top:50%;right:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-title span.show-desc::before{font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f107"}.course-curriculum .section-title span.show-desc:hover::before{border-top-color:#ccc}.lp-overlay{display:none;position:fixed;z-index:99999;top:0;right:0;bottom:0;left:0;width:100%;height:100%;background-color:rgba(209,213,219,0.8);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms;transition-property:opacity}.wp-admin .lp-modal-dialog .lp-modal-header{padding:2em}.wp-admin .lp-modal-dialog .lp-modal-header h3{font-size:1.4em}.lp-modal-dialog{display:flex;position:fixed;z-index:9999;top:0;right:0;left:0;width:100%;min-height:100vh;text-align:center;align-items:center;justify-content:center}.lp-modal-dialog .lp-modal-content{display:inline-block;overflow:hidden;z-index:2;width:auto;max-width:600px;border-radius:8px;text-align:left;vertical-align:middle;background:white;color:black}.lp-modal-dialog .lp-modal-header{background:#7c60d9;border-bottom:1px solid #eee;padding:1em}.lp-modal-dialog .lp-modal-header h3{margin:0;color:white;font-size:inherit;font-weight:400}.lp-modal-dialog .lp-modal-body .main-content{max-height:500px;overflow:auto}.lp-modal-dialog .lp-modal-body .main-content h3,.lp-modal-dialog .lp-modal-body .main-content h2,.lp-modal-dialog .lp-modal-body .main-content .pd-2em{padding:1em}.lp-modal-dialog .lp-modal-footer{padding:20px;padding-top:0;background-color:#f9fafb;text-align:right}.lp-modal-dialog .btn-yes{color:#fff;background-color:#7c60d9}#lp-modal-overlay{display:none;position:fixed;z-index:999999;top:0;right:0;bottom:0;left:0;opacity:.5;background:#000}#lp-modal-window{display:none;position:fixed;z-index:999999;top:50%;left:50%;padding:35px 60px 28px 60px;background:#fff;transform:translate(-50%,-50%);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#lp-modal-window #lp-modal-content{margin:0 0 24px 0;color:#333;font-size:16px;font-weight:400;line-height:26px;text-align:center}#lp-modal-window #lp-modal-content>*{margin:0 0 .5em}#lp-modal-window #lp-modal-buttons{display:flex;flex-direction:row-reverse;align-items:center;justify-content:center}#lp-modal-window #lp-modal-buttons .lp-button{position:relative;margin:0 10px 0 10px}.learn-press-comments{width:792px;max-width:100%;margin:0 auto}@media(max-width:1024px){.learn-press-comments{width:100%}}.learn-press-progress{overflow:hidden;position:relative;width:80px;height:6px;border-radius:3px}.learn-press-progress .learn-press-progress__active{position:absolute;z-index:1;left:-100%;width:100%;height:100%;border-radius:3px;background:var(--lp-primary-color);-webkit-transition:.5s;-moz-transition:.5s;-ms-transition:.5s;-o-transition:.5s;transition:.5s}.learn-press-progress::before{display:block;position:absolute;z-index:0;top:0;width:100%;height:100%;background:#ccc;content:""}.course-curriculum .section-header .section-left{display:flex}.course-curriculum .section-header .section-left .section-title{flex:1}.course-curriculum .section-header .section-left .section-toggle{flex:0 0 40px;align-items:center;text-align:center;cursor:pointer}.course-curriculum .section-header .section-left .section-toggle .fa-caret-down{display:none}.course-curriculum .section-header .learn-press-progress{width:80px}.course-curriculum .section.closed .section-toggle .fa-caret-down{display:block}.course-curriculum .section.closed .section-toggle .fa-caret-up{display:none}.course-curriculum .section.closed .section-content{overflow:hidden;height:0}*{box-sizing:border-box;margin:0;padding:0}button{cursor:pointer}input,button,select,textarea{outline:0}html{overflow-x:hidden}a{-webkit-transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;transition:.3s}.lp-skeleton-animation{margin:0;padding:0;list-style:none}.lp-skeleton-animation>li{width:100%;height:16px;margin-top:15px;border-radius:2px;background:linear-gradient(90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}@keyframes lp-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.learnpress.theme-twentytwentytwo .wp-site-blocks,.learnpress.twentytwentytwo .wp-site-blocks{max-width:none;padding-right:0;padding-left:0}.learnpress.theme-twentytwentytwo .wp-site-blocks>.wp-block-group,.learnpress.twentytwentytwo .wp-site-blocks>.wp-block-group{max-width:none;margin-right:auto;margin-left:auto}.learnpress.theme-twentytwentytwo .lp-archive-courses,.learnpress.twentytwentytwo .lp-archive-courses{max-width:none}.learnpress.twentytwentytwo .wp-container-11 .alignfull,.learnpress.twentytwentytwo .wp-container-9 .alignfull,.learnpress.twentytwentytwo .wp-container-12 .alignfull{max-width:100%;margin-left:0 !important;margin-right:0 !important;padding-left:0 !important;padding-right:0 !important}@media(max-width:1199px){.learnpress.twentytwentytwo .wp-site-blocks .wp-block-template-part{padding-left:15px;padding-right:15px}}input[type=text],input[type=email],input[type=number],input[type=password]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;box-shadow:unset}body{background:#fff}body.learnpress-page{overflow-x:hidden}.wrap-fullwidth a:focus,.wrap-fullwidth button:focus,.wrap-fullwidth input:focus,.wrap-fullwidth textarea:focus{border:0;outline:0}.wrap-fullwidth a:hover{text-decoration:none}.wrap-fullwidth p{word-break:break-word}.wrap-fullwidth p:last-child{margin-bottom:0}.wrap-fullwidth label{display:block;margin:0;outline:0}.wrap-fullwidth img{max-width:100%;height:auto}.wrap-fullwidth form{margin:0}.wrap-fullwidth .col-full{box-sizing:border-box;max-width:100%;padding:0}.wrap-fullwidth .col-full .woocommerce-breadcrumb{display:none}footer{clear:both}.margin-bottom{margin-bottom:20px}.hide-if-js{display:none !important}.clearfix::after{display:block;clear:both;content:""}.lp-form-fields{margin:0;padding:0;list-style:none}.lp-form-fields .form-field{margin:0 0 20px 0;list-style:none}.lp-content-wrap{width:1170px;max-width:90%;margin:0 auto}.lp-content-wrap>h2{margin-top:0;margin-bottom:26px;color:#333;font-size:30px;font-weight:600}.learn-press-breadcrumb{max-width:1170px;width:100%;margin:0 auto 45px auto;padding:0;color:#333;font-size:14px;font-weight:400;list-style:none}.learn-press-breadcrumb li{display:inline-block;margin:0}.learn-press-breadcrumb li a:hover{color:var(--lp-primary-color)}.learn-press-breadcrumb i{margin:0 5px;color:#666;font-size:12px}@media(max-width:1024px){.learn-press-breadcrumb{padding-right:15px;padding-left:15px}}.learn-press-breadcrumb a{color:#666;font-weight:500}.learnpress-page .lp-button,.learnpress-page #lp-button{padding:16px 24px;border:1px solid #ccc;color:#333;background:transparent;box-shadow:unset;font-family:inherit;font-size:16px;font-weight:400;line-height:1;text-align:center;vertical-align:middle;text-decoration:none;text-transform:capitalize;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.learnpress-page .lp-button.large,.learnpress-page #lp-button.large{height:52px;padding:18px 30px;font-size:18px}.learnpress-page .lp-button:hover,.learnpress-page #lp-button:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.learnpress-page .lp-button.btn-ajax-off .icon,.learnpress-page #lp-button.btn-ajax-off .icon{display:none}.learnpress-page .lp-button.btn-ajax-on .icon,.learnpress-page #lp-button.btn-ajax-on .icon{display:inline-block;margin-right:5px;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.learnpress-page .lp-button:focus,.learnpress-page #lp-button:focus{outline:0}.learnpress-page .lp-button.loading::before,.learnpress-page #lp-button.loading::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";animation:lp-rotating 1s linear infinite}.learnpress-page .rwmb-field .description{margin-top:8px;color:#999;font-size:smaller;font-style:italic}.btn-base{border-color:var(--lp-primary-color);color:white;background-color:var(--lp-primary-color)}.lp-ajax-message{display:none;margin-top:20px;padding:20px;border:2px solid #059601;border-radius:9px;font-size:15px;line-height:1.4}.lp-ajax-message.error{border-color:#d85554}.course-meta{margin-bottom:14px}.course-meta .course-students::before{font-family:"Font Awesome 5 Free";content:""}.lp-entry-content .course-tabs{margin-bottom:60px}.learn-press-checkout-comment h4{display:none}.order-comments{width:100%;padding:15px;min-height:150px;border:1px solid #ccc;resize:none}.learn-press-progress .progress-bg{overflow:hidden;position:relative;height:6px;background:#ccc;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.learn-press-progress .progress-bg .progress-active{position:absolute;left:50%;width:100%;height:100%;margin-left:-100%;background:var(--lp-primary-color);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.retake-course,.enroll-course,.purchase-course{display:inline-block}.table-orders{font-size:16px}.table-orders th,.table-orders td{padding:5px 10px}.form-button{display:inline-block}.learn-press-pagination{padding-bottom:20px;text-align:center}.learn-press-pagination .page-numbers{display:inline-block;margin:0;padding:0;border:0;outline:0;background:transparent;list-style:none}.learn-press-pagination .page-numbers>li{display:inline-block;margin:0;padding:0 14px}.learn-press-pagination .page-numbers>li .page-numbers{float:unset;padding:0;color:#666;background:transparent;font-size:16px;font-weight:300}.learn-press-pagination .page-numbers>li .page-numbers.current{color:var(--lp-primary-color);font-weight:400}.learn-press-pagination .page-numbers>li .page-numbers:hover{color:var(--lp-primary-color)}ul.list-table-nav{display:flex;margin-left:0;list-style:none}ul.list-table-nav .nav-text{text-align:left;flex:1}ul.list-table-nav .nav-pages{text-align:right;flex:1}ul.list-table-nav .nav-pages .learn-press-pagination{display:inline-block;margin-bottom:0}.primary-color{color:#00adff}.primary-color-before::before{color:#00adff}.primary-color-after::after{color:#00adff}.primary-background-color{background:#00adff}.primary-background-color{background:#00adff}.course-origin-price{margin-right:5px;font-size:85%;text-decoration:line-through}.course-item-nav{display:flex}.course-item-nav .prev span,.course-item-nav .next span{display:block;font-weight:bold}.course-item-nav .prev a,.course-item-nav .next a{color:#999}.course-item-nav .next{text-align:right}.content-item-wrap #comments{margin-right:0;margin-left:0}.content-item-wrap #comments #comment{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-summary-sidebar{position:relative}@media(min-width:769px){.course-summary-sidebar.slide-down .course-summary-sidebar__inner{position:fixed;top:0}}@media(min-width:1200px){.course-summary-sidebar.slide-top .course-summary-sidebar__inner{position:absolute}}.course-graduation span{color:#999}.course-graduation .icon{margin-right:5px;font-size:20px}.course-graduation.passed .icon{color:#059601}.course-graduation.error .icon{color:#d85554}.learn-press-template-warning::before{color:#ffc107;font-family:"Font Awesome 5 Free";content:"\f071"}.lp-badge{display:flex;height:30px;padding:0;line-height:1;align-items:center;justify-content:center}.lp-badge::before,.lp-badge::after{content:""}.lp-badge::before{display:inline-block;position:relative;z-index:10;color:#fff;font-weight:bold;line-height:1}.lp-badge.featured-course{position:absolute;z-index:1;top:25px;left:-110px;width:300px;background:#93f;text-align:center;transform:rotate(-45deg)}.lp-badge.featured-course::before{font-size:12px;text-transform:uppercase;content:attr(data-text)}@media(min-width:769px){#learn-press-item-comments{padding-bottom:50px}}.course-tabs input[name=learn-press-course-tab-radio],.course-tabs .course-tab-panel{display:none}.course-tabs .course-nav label{display:flex;align-items:center;justify-content:center;margin:0;padding:17px 10px;font-size:16px;line-height:1;font-weight:600;text-transform:capitalize;cursor:pointer}.no-event{pointer-events:none}@media screen and (max-width:768px){ul.learn-press-courses .course{width:48%}}@media screen and (max-width:600px){ul.learn-press-courses .course{width:100%;margin-right:0}}.course-price:empty{display:none !important}.quiz-attempts .attempts-heading{margin-bottom:15px}.quiz-attempts table{border-spacing:0;border-left:1px solid var(--lp-secondary-color);border-top:1px solid var(--lp-secondary-color);width:100%}.quiz-attempts table tr th,.quiz-attempts table tr td{border-right:1px solid var(--lp-secondary-color);border-bottom:1px solid var(--lp-secondary-color);padding:5px 15px;text-align:center}.quiz-attempts table tr th{font-weight:500}@media(max-width:575px){#popup-course .quiz-attempts{overflow-x:auto}}
|
1 |
+
@charset "UTF-8";@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(360deg);-moz-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}@keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}.learn-press-message{position:relative;margin:0 0 20px 0;padding:10px 50px 10px 15px;border-top:5px solid #00adff;border-radius:0 0 5px 5px;background:#f5f5f5;width:100%}.learn-press-message.icon{padding-left:45px}.learn-press-message.icon::before{background:#00adff}.learn-press-message.icon::after{position:absolute;top:50%;left:15px;width:10px;height:10px;margin-top:-13px;margin-right:10px;border-radius:50%;color:#fff;background:#00adff;font-family:"Font Awesome 5 Free";font-size:20px;line-height:26px;text-align:center;vertical-align:baseline;content:"\f129"}.learn-press-message::before,.learn-press-message::after{position:absolute;top:0;content:""}.learn-press-message::before{right:20px;width:20px;height:30px;background:#00adff}.learn-press-message::after{top:10px;right:20px;width:0;height:0;border:10px solid transparent;border-bottom-color:#f5f5f5}.learn-press-message.error{border-color:#d85554}.learn-press-message.error::before{background:#d85554}.learn-press-message.error.icon::before,.learn-press-message.error.icon::after{background:#d85554}.learn-press-message.error.icon::after{content:"\f00d"}.learn-press-message.warning{border-color:#ffc107}.learn-press-message.warning::before{background:#ffc107}.learn-press-message.warning.icon::before,.learn-press-message.warning.icon::after{background:#ffc107}.learn-press-message.warning.icon::after{content:"\f00d"}.learn-press-message.success{border-color:#059601}.learn-press-message.success::before{background:#059601}.learn-press-message.success.icon::before,.learn-press-message.success.icon::after{background:#059601}.learn-press-message.success.icon::after{content:"\f129"}.learn-press-message a{text-decoration:underline}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}.ajaxload{display:inline-block;position:relative;width:30px;height:30px;background:#7b7b7b;content:"";-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.ajaxload::after{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;display:inline-block;position:absolute;top:2px;left:50%;width:6px;height:6px;margin-left:-3px;background:#dedede;content:""}.lp-ajaxload-style-1{display:inline-block;position:relative;width:32px;height:32px}.lp-ajaxload-style-1::before,.lp-ajaxload-style-1::after{position:absolute;top:0;left:0;width:100%;height:100%;border:3px solid #ddd;content:""}.lp-ajaxload-style-1::after{clip:rect(0,32px,16px,16px);border-color:#2fa7ff;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.learn-press-tabs{margin-bottom:34px;background:#f1f2f8}.learn-press-tabs .learn-press-tabs__checker{display:none}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10)::after{background:#fff}.learn-press-tabs .learn-press-tabs__nav{display:flex;margin:0;padding:0;border:1px solid #e5e7f2;list-style:none}.learn-press-tabs .learn-press-tabs__tab{position:relative;margin:0;border-right:1px solid #e5e7f2;background:#f1f2f8;list-style:none}.learn-press-tabs .learn-press-tabs__tab:last-child{border-right:0}.learn-press-tabs .learn-press-tabs__tab>label{display:block;margin:0;padding:18px 65px;font-size:18px;line-height:1;font-weight:600;text-align:center;text-transform:capitalize;cursor:pointer}.learn-press-tabs .learn-press-tabs__tab>label a{color:#333}.learn-press-tabs .learn-press-tabs__tab>label a:focus{outline:0;text-decoration:none}@media(max-width:767px){.learn-press-tabs .learn-press-tabs__tab>label{padding:20px 50px 14px 50px}}.learn-press-tabs .learn-press-tabs__tab::before{position:absolute;top:-1px;left:0;width:100%;height:4px;background:transparent;content:""}.learn-press-tabs .learn-press-tabs__tab::after{position:absolute;bottom:-1px;left:0;width:100%;height:4px;background:transparent;content:""}.learn-press-tabs .learn-press-tabs__tab:first-child.active label{position:relative}.learn-press-tabs .learn-press-tabs__tab:first-child.active label::before{position:absolute;top:0;left:-1px;width:1px;height:100%;background:#fff;content:""}.learn-press-tabs.stretch .learn-press-tabs__tab{flex:1}.learn-press-tabs.stretch .learn-press-tabs__tab>label{padding:18px 10px}.learn-press-filters{display:flex;margin-bottom:30px;margin-left:0;list-style:none}.learn-press-filters>li{margin:0;font-size:16px;line-height:24px}@media(max-width:767px){.learn-press-filters>li{margin-right:30px;margin-left:0}.learn-press-filters>li:last-child{margin-right:0}}.learn-press-filters>li>a,.learn-press-filters>li>span{display:inline-block;font-weight:600}.learn-press-filters>li>span.count{font-weight:400}.learn-press-filters>li>span.count::before,.learn-press-filters>li>span.count::after{display:inline-block}.learn-press-filters>li>span.count::before{content:"("}.learn-press-filters>li>span.count::after{content:")"}.learn-press-filters>li span{color:#ffb606}.learn-press-filters>li span+span{color:#ffb606}.learn-press-filters>li span+span::before,.learn-press-filters>li span+span::after{color:#ffb606}.learn-press-filters>li a{color:#333;cursor:pointer}.learn-press-filters>li a+span{color:#333}.learn-press-filters>li a+span::before,.learn-press-filters>li a+span::after{color:#333}.learn-press-filters>li::after{margin:0 35px;color:#ccc;content:"|"}@media(max-width:767px){.learn-press-filters>li::after{display:none}}.learn-press-filters>li:last-child::after{display:none}.lp-checkout-form__before,.lp-checkout-form__after{width:45%;width:-webkit-calc(50% - 30px);width:-moz-calc(50% - 30px);width:calc(50% - 30px);margin:0 15px 40px 15px}.lp-checkout-form__before .lp-checkout-block h4,.lp-checkout-form__after .lp-checkout-block h4{margin-top:0;margin-bottom:18px;color:#333;font-size:24px;font-weight:600;line-height:1;font-family:var(--wp--preset--font-family--system-font)}@media(max-width:815px){.lp-checkout-form__before,.lp-checkout-form__after{width:100%;margin:0 0 40px 0}}.lp-checkout-form__before{float:right}.lp-checkout-form__before #checkout-order{width:100%}.lp-checkout-form .lp-checkout-form__after{float:left}.lp-checkout-form .lp-checkout-remember{letter-spacing:0;margin-top:0}.lp-checkout-form .lp-checkout-remember label{width:auto;color:#666;font-size:16px;font-weight:300;line-height:26px}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]{position:relative;top:3px;width:19px;height:19px;margin:0 4px 0 0;border:1px solid #ccc;cursor:pointer;-webkit-appearance:none}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]:focus{outline:0}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]:checked::after{position:absolute;top:2px;left:2px;color:#41abec;font-family:"Font Awesome 5 Free";font-size:14px;font-weight:900;line-height:1;content:"\f00c"}.lp-checkout-form .lp-checkout-remember a{color:#666;font-size:16px;font-weight:300;line-height:26px;text-decoration:underline;text-decoration-color:#ccc}.lp-checkout-form .lp-checkout-remember a:hover{color:var(--lp-primary-color);text-decoration-color:var(--lp-primary-color)}.lp-checkout-form .lp-form-fields{padding:0 0 14px 0}.lp-checkout-form .lp-form-fields label{display:block;margin-bottom:10px;font-size:16px}.lp-checkout-form .lp-form-fields input{height:44px;line-height:normal;width:100%;padding:0 15px;border:1px solid #ccc}.lp-checkout-form .rwmb-input input:not([type=checkbox]){width:100%;height:43px;padding:0 22px;border:1px solid #ccc;border-radius:3px;background-color:#fff;font-size:14px;font-weight:300;font-style:italic;line-height:43px}.lp-checkout-form .rwmb-input input:not([type=checkbox]):focus{border-color:var(--lp-primary-color);outline:0;color:#222}.lp-checkout-form .rwmb-input ::placeholder{opacity:1;color:#999}.lp-checkout-form .rwmb-input :-ms-input-placeholder{color:#999}.lp-checkout-form .rwmb-input ::-ms-input-placeholder{color:#999}.lp-checkout-form .rwmb-input input:-webkit-autofill,.lp-checkout-form .rwmb-input input:-webkit-autofill:hover,.lp-checkout-form .rwmb-input input:-webkit-autofill:focus{-webkit-box-shadow:0 0 0 1000px #fff inset;-webkit-text-fill-color:#999 !important}.lp-checkout-form{margin:0 -15px;margin-top:50px}@media(max-width:815px){.lp-checkout-form{display:flex;flex-direction:column-reverse;margin:0}}.lp-checkout-form #btn-checkout-account-switch-to-guest{margin-bottom:60px}.lp-checkout-form .description{float:left}.lp-checkout-form a{color:#41abec}.lp-checkout-form a label{display:inline-block;color:inherit;font-weight:normal;cursor:pointer}.lp-checkout-form a:hover{color:#ffb606}.lp-checkout-form #checkout-account-guest{width:100%;margin-bottom:35px;padding-bottom:19px;border-bottom:1px solid rgba(204,204,204,0.3)}.lp-checkout-form #checkout-account-guest .lp-form-fields,.lp-checkout-form #checkout-account-guest .form-field{margin-bottom:0;padding-bottom:0}.lp-checkout-form div.lp-guest-checkout-output{margin-top:10px;padding:8px 20px;border:2px solid #41abec;border-radius:4px;font-size:16px;transition:all .2s ease}.lp-checkout-form label.lp-guest-checkout-output{margin-top:10px;cursor:pointer;user-select:none}.lp-checkout-form .lp-guest-checkout-notice{margin:30px 0 0 0}.lp-checkout-form .lp-guest-switch-login{margin-top:1em;color:#666;font-size:16px;font-weight:400}.lp-checkout-form input[name=checkout-account-switch-form]{display:none}.lp-checkout-form input[name=checkout-account-switch-form]:not(:checked)+.lp-checkout-block{display:none;overflow:hidden;height:0;margin:0;padding:0;border:0;opacity:0}.lp-checkout-form input[name=checkout-account-switch-form]:not(:checked)+.lp-checkout-block>*{overflow:hidden;height:0}.lp-checkout-form input[name=checkout-account-switch-form]:checked+.lp-checkout-block{display:block;overflow:auto;height:auto}.lp-checkout-form input[name=checkout-account-switch-form][value=guest]:checked ~ #btn-checkout-account-switch-to-guest{display:none}.lp-checkout-form::after{display:block;clear:both;content:""}.lp-checkout-form:focus{outline:0}#checkout-order .lp-checkout-order__inner{padding:0 20px;border:1px solid #ccc;border-radius:4px}#checkout-order table{width:100%;margin:0;border:0}#checkout-order td,#checkout-order th{box-sizing:content-box;border:1px solid rgba(204,204,204,0.3);border-top:0;border-right:0;border-left:0;background:unset;line-height:1;text-align:left;vertical-align:inherit}#checkout-order td:last-child,#checkout-order th:last-child{padding-right:0}#checkout-order .course-name{font-size:16px;font-weight:600;line-height:26px}#checkout-order .course-name a{display:-webkit-box;overflow:hidden;color:#000;-webkit-line-clamp:1;-webkit-box-orient:vertical}#checkout-order .course-name a:hover{color:var(--lp-primary-color)}#checkout-order .col-number{min-width:50px;color:#666;font-size:16px;font-weight:600;line-height:26px;text-align:right}#checkout-order .order-total>th{padding:24px 20px 24px 0}#checkout-order .order-total .col-number{color:#333;font-size:26px}#checkout-order tfoot .cart-subtotal{color:#666;font-size:16px;font-weight:600;line-height:26px}#checkout-order tfoot .cart-subtotal>th{padding:20px 20px 17px 0}#checkout-order tfoot .order-total th{color:#333;font-size:16px;font-weight:600;line-height:26px}#checkout-order tfoot tr:last-child{border-width:0}#checkout-order tfoot tr:last-child td,#checkout-order tfoot tr:last-child th{border-width:0}#checkout-order .course-thumbnail{width:80px;padding:20px 13px 18px 0}#checkout-order .course-thumbnail>img{width:100px;max-width:100% !important;height:auto !important}#checkout-account-register,#checkout-account-login{width:100%;margin-bottom:35px;padding-bottom:19px;border-bottom:1px solid rgba(204,204,204,0.3)}#checkout-account-register .form-field .rwmb-label,#checkout-account-register .form-field .rwmb-input .description,#checkout-account-login .form-field .rwmb-label,#checkout-account-login .form-field .rwmb-input .description{display:none}#checkout-account-register .lp-checkout-remember label,#checkout-account-login .lp-checkout-remember label{display:inline-block}#checkout-account-register .lp-checkout-remember a,#checkout-account-login .lp-checkout-remember a{float:right}#checkout-account-register .lp-checkout-sign-in-link,#checkout-account-register .lp-checkout-sign-up-link,#checkout-account-login .lp-checkout-sign-in-link,#checkout-account-login .lp-checkout-sign-up-link{display:flex;margin:0;color:#666;font-size:16px;font-weight:400}#checkout-account-register .lp-checkout-sign-in-link a,#checkout-account-register .lp-checkout-sign-up-link a,#checkout-account-login .lp-checkout-sign-in-link a,#checkout-account-login .lp-checkout-sign-up-link a{margin-left:5px;color:#41abec;cursor:pointer}#checkout-account-register .lp-checkout-sign-in-link a:hover,#checkout-account-register .lp-checkout-sign-up-link a:hover,#checkout-account-login .lp-checkout-sign-in-link a:hover,#checkout-account-login .lp-checkout-sign-up-link a:hover{color:var(--lp-primary-color)}#checkout-account-register .lp-checkout-sign-in-link a label,#checkout-account-register .lp-checkout-sign-up-link a label,#checkout-account-login .lp-checkout-sign-in-link a label,#checkout-account-login .lp-checkout-sign-up-link a label{display:inline-block;float:right;color:inherit;font-weight:normal;cursor:pointer}#checkout-payment{width:100%;margin-bottom:25px}#checkout-payment h4{margin-bottom:24px}#checkout-payment .secure-connection{float:right;margin-top:5px;color:#999;font-size:12px;font-weight:normal}#checkout-payment .secure-connection i{margin-right:5px;color:#ccc;font-size:18px}@media(max-width:767px){#checkout-payment .secure-connection{margin-top:0}}#checkout-payment .payment-methods{margin:0 0 24px 0;padding:0;list-style:none}#checkout-payment .lp-payment-method{position:relative;margin:0}#checkout-payment .lp-payment-method>label{display:flex;align-items:center}#checkout-payment .lp-payment-method .gateway-input,#checkout-payment .lp-payment-method .gateway-icon{vertical-align:middle}#checkout-payment .lp-payment-method .gateway-icon{max-height:32px}#checkout-payment .lp-payment-method .gateway-input{position:relative;width:20px;height:20px;margin:0 8px 0 0;border:1px solid #ccc;background:#fff;-webkit-appearance:none;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}#checkout-payment .lp-payment-method .gateway-input::before{position:absolute;top:50%;left:50%;width:6px;height:6px;background:#41abec;transform:translate(-50%,-50%);-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}#checkout-payment .lp-payment-method .gateway-input:checked::before{content:""}#checkout-payment .lp-payment-method .gateway-input:focus{outline:0}#checkout-payment #checkout-order-action button{width:100%;border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color);font-weight:500}#checkout-payment #checkout-order-action button:hover{border-color:var(--lp-primary-color);opacity:.5;background:var(--lp-primary-color)}#checkout-payment #checkout-order-action button.loading::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.lp-terms-and-conditions{color:#666;font-size:16px;font-weight:300;line-height:26px}.lp-terms-and-conditions a{color:#41abec}.lp-terms-and-conditions a:hover{color:var(--lp-primary-color)}.learn-press-checkout.guest-checkout{display:none}.button-continue-guest-checkout{clear:both}#learn-press-checkout .payment-methods{margin:0;padding:0;list-style:none}#learn-press-checkout .payment-methods .lp-payment-method{margin-bottom:20px}#learn-press-checkout .payment-methods .lp-payment-method>label{display:flex;flex-flow:row nowrap;padding:10px 20px;background:#f5f5f5;line-height:40px;cursor:pointer}#learn-press-checkout .payment-methods .lp-payment-method>label img{vertical-align:middle}#learn-press-checkout .payment-methods .lp-payment-method.selected>label{background:#d4d4d4}#learn-press-checkout .payment-methods .payment-method-form{display:none;padding:15px 20px;border-top:1px solid #ddd;background:#f9f9f9}#learn-press-checkout-login,#learn-press-checkout-register{margin-bottom:1.5em;padding:20px 20px 0 20px;border:1px solid #ddd;background:#fff}#learn-press-order-review,.learn-press-checkout-comment{margin-bottom:20px}#checkout-form-login,#checkout-form-register{_display:none}#checkout-form-login .learn-press-form-register,#checkout-form-login .learn-press-form-login,#checkout-form-register .learn-press-form-register,#checkout-form-register .learn-press-form-login{display:none}#checkout-guest-email{margin:0 0 20px 0}#checkout-guest-email .form-heading{margin:0}#checkout-guest-email #checkout-guest-options{margin:0;list-style:none}#checkout-guest-email #checkout-existing-account,#checkout-guest-email #checkout-new-account{display:none;margin:0}#checkout-guest-email.email-exists #checkout-existing-account{display:block}#checkout-guest-email.email-exists #checkout-new-account{display:none}.lp-list-table{width:100%;margin-bottom:20px}.lp-list-table th,.lp-list-table td{padding:20px;border:0 solid rgba(204,204,204,0.3);border-bottom-width:1px;background:#fff;font-size:16px;line-height:1;text-align:left}@media(max-width:767px){.lp-list-table th,.lp-list-table td{padding:15px}}.lp-list-table thead{box-sizing:border-box;border:1px solid #e5e7f2}.lp-list-table thead tr th{height:60px;border-bottom:0;color:#333;background:#f1f2f8;font-size:18px}.lp-list-table tbody,.lp-list-table tfoot{box-sizing:border-box;border:1px solid rgba(204,204,204,0.3);border-top:0}.lp-list-table tbody tr td,.lp-list-table tbody tr th,.lp-list-table tfoot tr td,.lp-list-table tfoot tr th{height:62px;color:#666;background:#fff;font-size:16px;font-weight:300}.lp-list-table tbody tr td a,.lp-list-table tbody tr th a,.lp-list-table tfoot tr td a,.lp-list-table tfoot tr th a{border-bottom:0;color:#666;text-decoration:none}.lp-list-table tbody tr td a:hover,.lp-list-table tbody tr th a:hover,.lp-list-table tfoot tr td a:hover,.lp-list-table tfoot tr th a:hover{color:var(--lp-primary-color)}.lp-list-table tbody tr .column-status .result-percent,.lp-list-table tfoot tr .column-status .result-percent{font-weight:500}.lp-list-table tbody tr .column-status .lp-label,.lp-list-table tfoot tr .column-status .lp-label{font-weight:600}.lp-list-table tbody tr:nth-child(odd),.lp-list-table tfoot tr:nth-child(odd){background:#f5f5f5}.lp-list-table .list-table-nav td{font-size:14px}.lp-list-table .list-table-nav td.nav-text{text-align:left}.lp-list-table .list-table-nav td.nav-pages{text-align:right}.lp-list-table .list-table-nav td.nav-pages .learn-press-pagination{text-align:right}.lp-list-table .list-table-nav td.nav-pages .page-numbers{margin-bottom:0}.lp-label{display:inline-block;color:#666;font-size:16px;font-weight:300;line-height:1}.learn-press-form .form-fields{margin:0;padding:0;list-style:none}.learn-press-form .form-fields .form-field{margin:0 0 20px 0}.learn-press-form .form-fields .form-field label{display:block;margin:0 0 10px 0}.learn-press-form .form-fields .form-field input[type=text],.learn-press-form .form-fields .form-field input[type=email],.learn-press-form .form-fields .form-field input[type=number],.learn-press-form .form-fields .form-field input[type=password],.learn-press-form .form-fields .form-field textarea{width:100%;padding:8px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.learn-press-form .form-fields .form-field .description{margin-top:10px;font-size:14px;font-style:italic;line-height:1.4}.learn-press-form .form-fields .form-field .asterisk{color:red}.learn-press-form-login,.learn-press-form-register{max-width:600px;margin-right:auto;margin-bottom:60px;margin-left:auto;padding:40px;border:1px solid #eee;border-radius:6px;box-shadow:0 4px 6px -1px rgba(0,0,0,0.1),0 2px 4px -1px rgba(0,0,0,0.06) !important}.learn-press-form-login h3,.learn-press-form-register h3{margin-bottom:20px;font-size:28px;line-height:1.4}.learn-press-form-login .form-fields .form-field label,.learn-press-form-register .form-fields .form-field label{font-size:16px;font-weight:400;user-select:none}.learn-press-form-login .form-fields .form-field input[type=text],.learn-press-form-login .form-fields .form-field input[type=password],.learn-press-form-login .form-fields .form-field input[type=tel],.learn-press-form-login .form-fields .form-field input[type=url],.learn-press-form-login .form-fields .form-field input[type=number],.learn-press-form-register .form-fields .form-field input[type=text],.learn-press-form-register .form-fields .form-field input[type=password],.learn-press-form-register .form-fields .form-field input[type=tel],.learn-press-form-register .form-fields .form-field input[type=url],.learn-press-form-register .form-fields .form-field input[type=number]{height:42px;border:1px solid #bbb;border-radius:4px;line-height:42px}.learn-press-form-login .form-fields .form-field input[type=text]:focus,.learn-press-form-login .form-fields .form-field input[type=password]:focus,.learn-press-form-login .form-fields .form-field input[type=tel]:focus,.learn-press-form-login .form-fields .form-field input[type=url]:focus,.learn-press-form-login .form-fields .form-field input[type=number]:focus,.learn-press-form-register .form-fields .form-field input[type=text]:focus,.learn-press-form-register .form-fields .form-field input[type=password]:focus,.learn-press-form-register .form-fields .form-field input[type=tel]:focus,.learn-press-form-register .form-fields .form-field input[type=url]:focus,.learn-press-form-register .form-fields .form-field input[type=number]:focus{border:0;outline:2px solid transparent !important;outline-offset:2px;box-shadow:0 0 0 2px #666 !important}.learn-press-form-login .form-fields .form-field.required label::after,.learn-press-form-register .form-fields .form-field.required label::after{content:" *";display:inline}.learn-press-form-login form[name=learn-press-login]>p>label,.learn-press-form-register form[name=learn-press-login]>p>label{color:#666;font-size:16px;cursor:pointer;user-select:none}.learn-press-form-login form[name=learn-press-login]>p>a,.learn-press-form-register form[name=learn-press-login]>p>a{color:#666;font-size:16px;line-height:1}.learn-press-form-login form[name=learn-press-login]>p:last-child,.learn-press-form-register form[name=learn-press-login]>p:last-child{margin-bottom:0}.learn-press-form-login button[type=submit],.learn-press-form-register button[type=submit]{width:100%;height:50px;border-radius:3px;outline:0;color:#fff;background:var(--lp-primary-color);box-shadow:none;font-size:16px;line-height:1;vertical-align:middle;text-decoration:none}.required label{font-weight:bold}.required label:after{content:" *";display:inline}.lp-password-input{display:flex;flex-direction:column;justify-content:center;position:relative}.lp-password-input input[type=password]{padding-right:2.5rem}.lp-password-input input::-ms-reveal{display:none}.lp-password-input .lp-show-password-input{position:absolute;top:8px;right:10px;cursor:pointer}.lp-password-input .lp-show-password-input::after{font-family:"Font Awesome 5 Free";font-weight:900;content:"\f06e"}.lp-password-input .lp-show-password-input.display-password::after{color:#585858;content:"\f070"}.form-desc{font-size:smaller;font-style:italic}.become-teacher-form{width:90%;max-width:500px;margin:0 auto}.become-teacher-form .form-field input[type=text],.become-teacher-form .form-field input[type=email],.become-teacher-form .form-field input[type=number],.become-teacher-form .form-field input[type=password]{width:100%}body div.entry-content>div.learnpress{--responsive--aligndefault-width:100%;max-width:var(--lp-content-width,100%)}.lp-user-profile{position:relative;background:#fff}.lp-user-profile .lp-user-profile-avatar img{position:relative;width:100%;height:auto;border-radius:unset;display:block}.lp-user-profile .lp-user-profile-avatar+.lp-user-profile-socials{margin-top:10px;margin-bottom:5px}.lp-user-profile .lp-user-profile-socials{display:flex;position:relative;z-index:1;justify-content:center;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.lp-user-profile .lp-user-profile-socials a{display:inline-flex;align-items:center;justify-content:center;width:35px;height:35px;margin:0 7px;border:1px solid #cfcfcf;color:#666;background:#fff;font-size:14px;line-height:35px;text-align:center;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.lp-user-profile .lp-user-profile-socials a:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.lp-user-profile .wrapper-profile-header{color:#fff;background:var(--lp-secondary-color);position:relative}@media(max-width:990px){.lp-user-profile .wrapper-profile-header .lp-profile-content-area{min-height:inherit;padding:50px 15px}.lp-user-profile .wrapper-profile-header .lp-profile-left{float:left;position:static}.lp-user-profile .wrapper-profile-header .lp-profile-right{float:right;width:calc(100% - 270px);margin-left:0}}@media(max-width:768px){.lp-user-profile .wrapper-profile-header .lp-profile-left{width:220px}.lp-user-profile .wrapper-profile-header .lp-profile-right{width:calc(100% - 220px)}.lp-user-profile .wrapper-profile-header .lp-user-profile-socials{margin-right:-5px;margin-left:-5px}.lp-user-profile .wrapper-profile-header .lp-user-profile-socials a{width:36px;height:36px;margin:0 5px;line-height:36px}}@media(max-width:500px){.lp-user-profile .wrapper-profile-header .lp-profile-left{float:none;margin:0 auto}.lp-user-profile .wrapper-profile-header .lp-profile-right{width:100%;padding-top:30px;text-align:center}}.lp-user-profile .wrapper-profile-header::before{right:100%;left:auto}.lp-user-profile .wrapper-profile-header::after{left:100%;right:auto}.lp-user-profile .lp-profile-content-area{position:relative;padding-top:50px;padding-bottom:50px;display:flex;align-items:center}@media(max-width:650px){.lp-user-profile .lp-profile-content-area{flex-direction:column}.lp-user-profile .lp-profile-content-area .lp-profile-right{text-align:center;width:100%;padding:50px 15px 0}}.lp-user-profile .lp-profile-left{min-width:270px;max-width:270px;padding:5px;border:2px solid #eaeaea;border-radius:3px}.lp-user-profile .lp-profile-right{padding-right:15px;padding-left:35px}.lp-user-profile .lp-profile-username{padding-bottom:10px;font-size:18px;font-weight:500;text-transform:capitalize}.lp-user-profile .lp-profile-username::before,.lp-user-profile .lp-profile-username::after{content:"";width:30px;height:1px;background-color:white;display:inline-block;vertical-align:middle;margin:0}.lp-user-profile .lp-profile-username::before{margin-right:5px}.lp-user-profile .lp-profile-username::after{margin-left:5px}.lp-user-profile .lp-profile-user-bio{font-size:16px;font-weight:300;line-height:26px}.lp-user-profile #profile-sidebar{float:left;width:270px;margin-top:0;border:1px solid rgba(0,0,0,0.1);border-top:0;background:#fff;margin-top:58px}@media(max-width:990px){.lp-user-profile #profile-sidebar{width:100%}.lp-user-profile #profile-sidebar .lp-user-profile-avatar{max-width:150px}}.lp-user-profile #profile-nav .lp-profile-nav-tabs{margin:0;padding:0;list-style:none}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li{position:relative;margin:0;border-top:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li a{display:block;padding:0 20px;color:#333;font-size:16px;font-weight:500;line-height:50px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a{padding:0 20px 0 52px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a>i{display:inline-block;position:absolute;left:24px;width:28px;color:var(--lp-primary-color);font-size:12px;line-height:53px;text-align:left}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a::after{float:right;margin-right:4px;color:#999;font-family:"Font Awesome 5 Free";font-size:10px;font-weight:900;content:"\f054"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li{margin:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li a{border-bottom:1px solid #f9f9f9}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li a:hover{color:var(--lp-primary-color);background:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li:hover>a i{color:var(--lp-primary-color);background:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active,.lp-user-profile #profile-nav .lp-profile-nav-tabs>li:hover{background:var(--lp-primary-color)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active>a::after,.lp-user-profile #profile-nav .lp-profile-nav-tabs>li:hover>a::after{content:"\f053"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active a{padding-left:52px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.wishlist>a::before{position:absolute;left:25px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:12px;font-weight:900;content:"\f004"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.wishlist:hover a::before{color:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.logout>a::after{display:none}.lp-user-profile #profile-nav .lp-profile-nav-tabs li>a{box-sizing:border-box;height:50px}.lp-user-profile #profile-nav .lp-profile-nav-tabs li>ul{display:none;position:absolute;z-index:1000;top:0;left:100%;min-width:150px;margin:0;padding:0;background:#fff;box-shadow:0 15px 20px 0 rgba(0,0,0,0.05);list-style:none}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>a,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>a{color:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>a i,.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>a::after,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>a i,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>a::after{color:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>ul{display:block}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul{position:relative;left:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul .active{background:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul .active>a{color:#ffb606}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul .active>a i{color:#ffb606}@media(max-width:990px){.lp-user-profile #profile-nav{overflow-x:scroll;border-top:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs{width:max-content}.lp-user-profile #profile-nav .lp-profile-nav-tabs::after{display:table;clear:both;content:""}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li{float:left;border:0;border-right:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a{height:auto;padding:0 20px 0 45px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a::after{margin-left:10px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.has-child a::after{content:"\f077"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active a{padding-left:45px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active a::after{content:"\f078"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul{display:none;width:max-content;transform:translateX(-20%)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul::after{display:table;clear:both;box-shadow:0 0;content:""}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul li{float:left;border-right:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul li:last-child{border-right:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul li a{padding:0 10px}.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover ul{display:none !important}.lp-user-profile #profile-nav .lp-profile-nav-tabs li:not(.has-child)>a::after{display:none}}@media(max-width:560px){.lp-user-profile #profile-nav .lp-profile-nav-tabs>li{max-width:80px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a{font-size:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a::after{margin-left:0}}.lp-user-profile .lp-profile-content{float:right;width:calc(100% - 300px);margin-bottom:60px;padding-top:58px}@media(max-width:990px){.lp-user-profile .lp-profile-content{width:100%}}@media(max-width:767px){.lp-user-profile .lp-profile-content .learn-press-tabs__nav{display:block;width:100%;border:0}.lp-user-profile .lp-profile-content .learn-press-tabs__nav::after{display:table;clear:both;content:""}.lp-user-profile .lp-profile-content .learn-press-tabs__tab{float:left;border-right:0}.lp-user-profile .lp-profile-content .learn-press-tabs__tab label{padding-right:25px;padding-left:25px}.lp-user-profile .lp-profile-content .profile-orders{overflow-x:scroll}}.lp-user-profile .lp-profile-content .course-categories,.lp-user-profile .lp-profile-content .course-instructor{margin-bottom:14px}.lp-user-profile .lp-profile-content .course-categories{padding:0}.lp-user-profile .lp-profile-content .lp-button{display:block;margin:0 auto 52px auto;padding:13px 34px;border-color:var(--lp-secondary-color);font-size:14px;font-weight:500;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.lp-user-profile .lp-profile-content .lp-button:hover{border-color:var(--lp-primary-color)}.lp-user-profile ul.learn-press-courses .course{margin:0 0 40px 0}.lp-user-profile .profile-orders .profile-heading{display:none}.lp-user-profile .profile-orders table{margin-top:0}.lp-user-profile .profile-orders .column-order-actions a{margin-right:6px;color:black;text-decoration:underline;font-weight:500}.lp-user-profile .profile-orders .column-order-actions a:hover,.lp-user-profile .profile-orders .column-order-actions a:focus{color:var(--lp-primary-color)}.lp-user-profile #dashboard-general-statistic{margin-bottom:55px;padding-bottom:20px;border-bottom:1px solid #ddd}.lp-user-profile .dashboard-general-statistic__row{display:flex;margin:0 -15px;justify-content:center;flex-wrap:wrap}.lp-user-profile .dashboard-general-statistic__row .statistic-box{min-width:200px;max-width:270px;margin:0 15px 40px 15px;padding:15px 20px;border:1px solid #ccc;border-radius:4px;background:#f9fafc;text-align:center}@media(max-width:990px){.lp-user-profile .dashboard-general-statistic__row .statistic-box{width:45%}}@media(max-width:767px){.lp-user-profile .dashboard-general-statistic__row .statistic-box{width:100%;margin:0 15px 15px}}.lp-user-profile .dashboard-general-statistic__row .statistic-box:hover{background:#eaeaea}.lp-user-profile .dashboard-general-statistic__row[data-col="2"] .statistic-box{width:50%}.lp-user-profile .dashboard-general-statistic__row[data-col="4"] .statistic-box{width:25%}.lp-user-profile .dashboard-general-statistic__row[data-col="5"] .statistic-box{width:20%}.lp-user-profile .statistic-box .statistic-box__text{margin:0 0 7px 0;padding:0;color:#666;font-size:18px;font-weight:400;line-height:1}.lp-user-profile .statistic-box .statistic-box__number{color:#333;font-size:18px;font-weight:500;line-height:1}.lp-user-profile .profile-courses>h3{margin-top:0;margin-bottom:36px;color:#333;font-size:30px;font-weight:600;line-height:1;text-transform:capitalize}.lp-profile-content table.lp-list-table{border-spacing:0;border-top:1px solid #ccc;border-left:1px solid #ccc;margin-bottom:40px}.lp-profile-content table.lp-list-table tr th,.lp-profile-content table.lp-list-table tr td{border-right:1px solid #ccc;border-bottom:1px solid #ccc;text-align:center}.lp-profile-content table.lp-list-table tr td a{color:var(--wp--preset--color--foreground);font-weight:400}.lp-profile-content table.lp-list-table tr td a:hover{color:var(--lp-primary-color)}.lp-profile-content #profile-content-order-details h3{margin-top:0;font-size:30px;line-height:1.5;font-weight:500;margin-bottom:15px;font-family:var(--wp--preset--font-family--system-font)}.profile-basic-information .form-field,form[name=profile-change-password] .form-field{margin:0 10px 24px 10px}.profile-basic-information .form-field>label,form[name=profile-change-password] .form-field>label{margin:0 0 12px 0;color:#333;font-size:16px;font-weight:500;font-style:italic}.profile-basic-information .form-field .form-field-input input,form[name=profile-change-password] .form-field .form-field-input input{height:43px;padding:8px 20px;font-weight:400}.profile-basic-information .form-field .form-field-input input[type=password],form[name=profile-change-password] .form-field .form-field-input input[type=password]{padding:8px 20px}.profile-basic-information .form-field .form-field-input textarea,form[name=profile-change-password] .form-field .form-field-input textarea{padding:9px 20px 16px 20px;font-weight:300;line-height:24px}.profile-basic-information .form-field .form-field-input input,.profile-basic-information .form-field .form-field-input textarea,form[name=profile-change-password] .form-field .form-field-input input,form[name=profile-change-password] .form-field .form-field-input textarea{border:1px solid #ccc;color:#999;font-size:14px;font-style:italic}.profile-basic-information .form-field .form-field-input input:focus,.profile-basic-information .form-field .form-field-input textarea:focus,form[name=profile-change-password] .form-field .form-field-input input:focus,form[name=profile-change-password] .form-field .form-field-input textarea:focus{border-color:var(--lp-primary-color);outline:0;color:#222}.profile-basic-information .form-field .form-field-input ::placeholder,form[name=profile-change-password] .form-field .form-field-input ::placeholder{opacity:1;color:#999}.profile-basic-information .form-field .form-field-input :-ms-input-placeholder,form[name=profile-change-password] .form-field .form-field-input :-ms-input-placeholder{color:#999}.profile-basic-information .form-field .form-field-input ::-ms-input-placeholder,form[name=profile-change-password] .form-field .form-field-input ::-ms-input-placeholder{color:#999}.profile-basic-information .form-field .form-field-input .description,form[name=profile-change-password] .form-field .form-field-input .description{margin-top:15px}@media(max-width:767px){.profile-basic-information .form-field,form[name=profile-change-password] .form-field{margin:0 0 24px 0}}.profile-basic-information .form-field__50,form[name=profile-change-password] .form-field__50{float:left;width:calc(50% - 20px);margin-right:10px}@media(max-width:767px){.profile-basic-information .form-field__50,form[name=profile-change-password] .form-field__50{float:unset;width:100%;margin:0 0 24px 0}}.profile-basic-information .form-field__clear,form[name=profile-change-password] .form-field__clear{clear:both}.profile-basic-information button,form[name=profile-change-password] button{padding:16px 24px;border:0;border-radius:3px;color:#fff;background:var(--lp-primary-color);font-size:16px;font-weight:400;line-height:1}.profile-basic-information button:hover,form[name=profile-change-password] button:hover{opacity:.5;background:var(--lp-primary-color)}.profile-basic-information p,form[name=profile-change-password] p{margin:0}#learn-press-profile-basic-information .form-fields::after{display:block;clear:both;content:""}@media(max-width:767px){#learn-press-profile-basic-information .form-fields{margin:0}}#learn-press-profile-basic-information button[type=submit]{padding:0 15px;height:40px;line-height:40px;border:0;display:inline-flex;align-items:center;justify-content:center;background-color:var(--lp-primary-color);color:white;font-size:16px;font-weight:400;-webkit-transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;transition:.3s;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}#learn-press-profile-basic-information button[type=submit]:hover{opacity:.5;background-color:var(--lp-primary-color)}.recover-order__title{margin-bottom:5px}.recover-order__description{margin-bottom:20px;color:#999;font-size:.8em;font-style:italic}div.order-recover{display:flex}div.order-recover>.button-recover-order{margin:0;margin-left:20px;flex:0 0 auto}div.order-recover>.button-recover-order.loading::before{display:inline-block;margin-right:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";animation:lp-rotating 1s linear infinite}div.order-recover input[type=text]{width:100%;height:43px;margin-right:10px;padding:0 22px;border:1px solid #ccc;border-radius:3px;background-color:#fff;font-size:14px;font-weight:300;font-style:italic;line-height:43px;flex:1 1 auto}.learn-press-profile-course__progress .lp_profile_course_progress{border:1px solid #eee;border-top:0;overflow-x:auto}.learn-press-profile-course__progress .lp_profile_course_progress__item{display:grid;align-items:center;padding:15px;border-top:1px solid #eee;grid-template-columns:90px 1fr 80px 190px 140px;column-gap:20px}.learn-press-profile-course__progress .lp_profile_course_progress__item div img{max-width:60px;height:auto}@media(max-width:575px){.learn-press-profile-course__progress .lp_profile_course_progress__item div img{max-width:100%}}@media(max-width:575px){.learn-press-profile-course__progress .lp_profile_course_progress__item{display:block}}.learn-press-profile-course__progress .lp_profile_course_progress__header{background-color:#eee}@media(max-width:575px){.learn-press-profile-course__progress .lp_profile_course_progress__header{display:flex;overflow-x:auto;white-space:nowrap;justify-content:flex-end}}.lp_profile_course_progress__nav button.loading::before{display:inline-block;margin-right:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.entry-content ul.learn-press-profile-course__tab__inner{padding:0}.content ul.learn-press-courses{margin-left:-15px;margin-right:-15px}.content ul.learn-press-courses[data-layout=list]{margin:0}.learn-press-profile-course__tab__inner{display:flex;margin:40px 0 0 0 !important;padding:0 !important;background:#eee;list-style:none !important}.learn-press-profile-course__tab__inner>li{list-style:none;margin:0 !important}.learn-press-profile-course__tab__inner>li:hover{cursor:pointer}.learn-press-profile-course__tab__inner a{display:inline-block;padding:15px 30px;font-weight:600;position:relative}.learn-press-profile-course__tab__inner a.active{color:var(--lp-primary-color);background:#fff}.learn-press-profile-course__tab__inner a.active::before{content:"";height:4px;width:100%;background-color:var(--lp-primary-color);position:absolute;top:0;left:0;right:auto}.learn-press-course-tab-filters .learn-press-filters{margin-top:20px;margin-left:0;padding:0;list-style:none}.learn-press-course-tab-filters .learn-press-filters a.active{color:var(--lp-primary-color)}.lp-profile-content ul{list-style:none !important;padding:0 !important}.learnpress_avatar__form label{display:inline-block}.learnpress_avatar__form input[type=file]{display:none}.learnpress_avatar__form__upload{display:flex;width:200px;height:200px;border:1px dashed #ccc;border-radius:3px;background-color:#fafafa;font-size:14px;font-weight:300;font-style:italic;line-height:43px;text-align:center;cursor:pointer;align-items:center;justify-content:center}.learnpress_avatar__form__upload div{line-height:1.4}.learnpress_avatar__button--loading::before{display:inline-block;margin-right:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}button.learnpress_avatar__button{height:40px;padding:0 15px;border:0;background:var(--lp-primary-color);color:white;margin-top:15px;border-radius:3px}button.learnpress_avatar__button+button{margin-left:15px;margin-right:0}#primary .learn-press-courses[data-size="3"] .course{width:50%}body.learnpress .learn-press-tabs .learn-press-tabs__tab,body.learnpress .attachment-recent-works-thumbnail{border-radius:0}#learn-press-course-tabs.show-all .course-tab-panel{margin-bottom:40px}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .course-tab-panels .course-tab-panel:nth-child(1){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .learn-press-nav-tabs .course-nav:nth-child(1){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .learn-press-nav-tabs .course-nav:nth-child(1) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .course-tab-panels .course-tab-panel:nth-child(2){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .learn-press-nav-tabs .course-nav:nth-child(2){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .learn-press-nav-tabs .course-nav:nth-child(2) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .course-tab-panels .course-tab-panel:nth-child(3){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .learn-press-nav-tabs .course-nav:nth-child(3){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .learn-press-nav-tabs .course-nav:nth-child(3) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .course-tab-panels .course-tab-panel:nth-child(4){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .learn-press-nav-tabs .course-nav:nth-child(4){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .learn-press-nav-tabs .course-nav:nth-child(4) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .course-tab-panels .course-tab-panel:nth-child(5){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .learn-press-nav-tabs .course-nav:nth-child(5){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .learn-press-nav-tabs .course-nav:nth-child(5) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .course-tab-panels .course-tab-panel:nth-child(6){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .learn-press-nav-tabs .course-nav:nth-child(6){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .learn-press-nav-tabs .course-nav:nth-child(6) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .course-tab-panels .course-tab-panel:nth-child(7){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .learn-press-nav-tabs .course-nav:nth-child(7){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .learn-press-nav-tabs .course-nav:nth-child(7) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .course-tab-panels .course-tab-panel:nth-child(8){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .learn-press-nav-tabs .course-nav:nth-child(8){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .learn-press-nav-tabs .course-nav:nth-child(8) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .course-tab-panels .course-tab-panel:nth-child(9){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .learn-press-nav-tabs .course-nav:nth-child(9){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .learn-press-nav-tabs .course-nav:nth-child(9) label{color:var(--lp-primary-color);background:#fff}.course-tab-panels .course-tab-panel{padding-top:30px}.course-tab-panel{display:none}.course-tab-panel.active{display:block}.course-tab-panel .course-description{color:#666;font-size:16px;font-weight:300;line-height:26px}.course-tab-panel .course-description h4{margin-top:0;margin-bottom:1.125rem;color:#333;font-size:18px;font-weight:500}.course-tab-panel .course-description p{line-height:inherit}.course-tab-panel .course-description img{max-width:100%;height:auto;vertical-align:middle}.course-tab-panel .lp-course-author{display:flex;margin-bottom:40px}@media(max-width:767px){.course-tab-panel .lp-course-author{flex-direction:column}}.course-tab-panel .lp-course-author .course-author__pull-left{margin-right:30px;text-align:center;align-items:center}@media(max-width:767px){.course-tab-panel .lp-course-author .course-author__pull-left{margin-right:0;margin-bottom:30px}}.course-tab-panel .lp-course-author img{width:50px;height:50px;margin-bottom:20px;border-radius:50%;object-fit:cover;object-position:center}.course-tab-panel .lp-course-author .course-author__pull-right{flex:1}@media(max-width:767px){.course-tab-panel .lp-course-author .course-author__pull-right{width:100%;text-align:center}}.course-tab-panel .lp-course-author .author-title{margin-bottom:18px}.course-tab-panel .lp-course-author .author-title a{color:#333;box-shadow:none;font-size:18px;font-weight:500;text-transform:capitalize}.course-tab-panel .lp-course-author .author-title a:hover{color:var(--lp-primary-color)}.course-tab-panel .lp-course-author .author-description{color:#666;font-size:16px;font-weight:300;line-height:26px}.course-tab-panel .lp-course-author .author-socials{display:grid;grid-template-columns:repeat(4,33px);gap:10px;justify-content:center}.course-tab-panel .lp-course-author .author-socials>a{display:inline-block;width:33px;height:33px;margin:0;border:1px solid #ededed;border-radius:50%;color:#878787;box-shadow:none;font-size:14px;line-height:33px;text-align:center;vertical-align:middle;transition:all .3s}.course-tab-panel .lp-course-author .author-socials>a:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.course-tab-panel .lp-course-author .author-socials .fa-googleplus::before{content:"\f0d5"}.course-summary div.lp-list-co-instructor{display:grid;grid-template-columns:repeat(2,1fr);gap:40px}.course-summary div.lp-list-co-instructor__item{display:flex;column-gap:30px}@media(max-width:767px){.course-summary div.lp-list-co-instructor__item{align-items:center;flex-direction:column;padding:0 15px;column-gap:0;row-gap:10px}}.course-summary div.lp-list-co-instructor__avatar>img{width:100%;max-width:96px;border-radius:999px}.course-summary div.lp-list-co-instructor__bio{flex:1}.course-summary div.lp-list-co-instructor__bio__top>a{font-size:18px;font-weight:600}.course-summary div.lp-list-co-instructor__bio__description{font-size:1rem}.course-summary .course-price{margin-bottom:10px}.course-summary .course-price .origin-price,.course-summary .course-price .price{vertical-align:middle}.course-summary .course-price .origin-price{margin-right:10px;font-size:18px;font-style:italic;text-decoration:line-through}.course-summary .course-price .price{font-size:24px}.course-summary .course-summary-sidebar .lp-course-buttons{margin-bottom:20px}.course-summary .course-featured-review .featured-review__title{margin-top:0;margin-bottom:6px;font-size:1.2rem;font-weight:500}.course-summary .course-featured-review .featured-review__stars{padding-bottom:12px;color:var(--lp-primary-color);font-size:16px}.course-summary .course-featured-review .featured-review__content{position:relative;color:#666;font-size:1rem;font-style:italic;line-height:24px}.course-summary .course-featured-review .featured-review__content::after{position:absolute;top:-42px;right:-15px;color:rgba(102,102,102,0.1);font-family:Arial;font-size:180px;font-weight:700;font-style:normal;content:"‘‘";transform:rotate(180deg)}.course-summary .course-tags a{display:inline-block;padding:3px 5px;border-radius:4px;color:#fff;background:#9aa5ab;font-size:12px;line-height:1}.edit-content{margin-left:5px}ul.learn-press-nav-tabs{display:flex;margin:0;padding:0;border:1px solid rgba(204,204,204,0.3);border-bottom:0;background:#f1f2f8;list-style:none}ul.learn-press-nav-tabs .course-nav{float:left;position:relative;margin:0;border-right:1px solid rgba(204,204,204,0.3);border-bottom:1px solid rgba(204,204,204,0.3);list-style:none}ul.learn-press-nav-tabs .course-nav:first-child.active::after{position:absolute;top:-1px;left:-1px;width:1px;height:100%;background:#fff;content:""}ul.learn-press-nav-tabs .course-nav:last-child{border-right:0}ul.learn-press-nav-tabs .course-nav:last-child.active::after{position:absolute;top:-1px;right:-2px;width:2px;height:100%;background:#fff;content:""}ul.learn-press-nav-tabs .course-nav.active{border-bottom:0}ul.learn-press-nav-tabs .course-nav.active::before{position:absolute;top:-1px;left:0;width:100%;height:4px;background:var(--lp-primary-color);content:""}ul.learn-press-nav-tabs .course-nav.active label{color:var(--lp-primary-color);background-color:white}ul.learn-press-nav-tabs .course-nav a{display:inline-block;padding:10px 20px;border-bottom:0;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}ul.learn-press-nav-tabs .course-nav a:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}ul.learn-press-nav-tabs[data-tabs] .course-nav{flex:1}ul.learn-press-nav-tabs[data-tabs] .course-nav a{width:100%;text-align:center}ul.learn-press-nav-tabs::after{display:block;clear:both;content:""}@media(max-width:767px){ul.learn-press-nav-tabs{display:grid;grid-template-columns:repeat(2,1fr);max-height:none}}.course-item-popup #tab-curriculum{display:block}.course-curriculum ul.curriculum-sections{position:relative;z-index:499;margin:0;padding:0;list-style:none}.course-curriculum ul.curriculum-sections .closed .section-item__loadmore{display:none}.course-curriculum ul.curriculum-sections .section{margin:0;padding:0;flex-wrap:wrap}.course-curriculum ul.curriculum-sections .section:last-child{padding:0}.course-curriculum ul.curriculum-sections .section.section-empty .section-header{margin-bottom:20px}.course-curriculum ul.curriculum-sections .section.section-empty .learn-press-message{margin-right:15px;margin-left:15px}.course-curriculum ul.curriculum-sections .section-title.c+.section-desc{display:block}.course-curriculum ul.curriculum-sections .section-title.c span.show-desc::before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);top:0}.course-curriculum ul.curriculum-sections .item-meta.duration{background:#d9e0f1}.course-curriculum .section-item__loadmore{display:flex;justify-content:center;align-items:center}.course-curriculum .section-item__loadmore button{display:inline-flex;margin-top:10px;margin-right:auto;margin-left:auto;padding:10px 20px;border:1px solid #ccc;border-radius:4px;outline:0;color:#222;background:#f7f7f7;box-shadow:none;font-weight:500;justify-content:center;align-items:center;cursor:pointer;font-size:1rem;font-family:sans-serif}.course-curriculum .section-item__loadmore.loading button::before{display:inline-block;margin-right:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.course-curriculum .section-header{display:table;width:100%;padding:0 0 26px 0;border-bottom:0;border-bottom:1px solid #d9e0f1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-curriculum .section-header .section-title,.course-curriculum .section-header .section-desc{margin:0}.course-curriculum .section-header span.show-desc{display:inline-block;position:absolute;top:50%;right:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-header span.show-desc::before{font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f107"}.course-curriculum .section-header span.show-desc:hover::before{border-top-color:#ccc}.course-curriculum .section-header .section-desc{margin:0;margin-top:10px;font-size:14px;line-height:21px;color:#999;font-style:italic}.course-curriculum .section-header .section-meta{display:block;padding-top:17px;padding-bottom:15px;font-size:14px;text-align:right;vertical-align:middle;white-space:nowrap}.course-curriculum .section-item{width:100%}.course-curriculum .section-content{margin:0 0 15px 0;padding:0;list-style:none}.course-curriculum .section-content .course-item-meta{display:table-cell;padding:10px 0;text-align:right;vertical-align:middle;white-space:nowrap}.course-curriculum .section-content .course-item-meta .item-meta{display:inline-block;margin-left:14px;border-radius:3px;color:#fff;font-size:14px;line-height:23px;text-align:center;vertical-align:middle;padding:0 8px}.course-curriculum .section-content .course-item-meta .item-meta.final-quiz{background:#14c4ff}.course-curriculum .section-content .course-item-meta .item-meta.trans{padding:0}.course-curriculum .section-content .course-item-meta .count-questions{background:#9672cf}.course-curriculum .section-content .course-item-meta .duration{background:silver}.course-curriculum .section-content .course-item-meta .course-item-status{padding:0;color:#999;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-curriculum .section-content .course-item-meta .course-item-status::before{font-family:"Font Awesome 5 Free";font-size:14px;font-weight:900;vertical-align:middle;text-transform:lowercase;content:"\f00c"}.course-curriculum .section-content .course-item-preview{font-style:normal;padding:0}.course-curriculum .section-content .course-item-preview::before{color:#fff;padding:0 8px;background:#00adff;display:inline-flex;align-items:center;justify-content:center;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;vertical-align:baseline;content:attr(data-preview)}.course-curriculum .course-item{display:flex;position:relative;margin:0 0 2px 0;padding:0 15px 0 30px;background:rgba(241,242,248,0.4);font-size:14px;transition:padding-left linear .15s}@media(max-width:767px){.course-curriculum .course-item{padding:0 0 0 15px}}.course-curriculum .course-item>span{display:flex;width:28px;color:#666;font-size:16px;font-weight:300;align-items:center}.course-curriculum .course-item .section-item-link{display:table;padding-right:15px;padding-left:0;border-bottom:0;outline:0;box-shadow:none;line-height:1.5;color:#777;text-decoration:none}.course-curriculum .course-item .section-item-link:hover .item-name{color:var(--lp-primary-color)}.course-curriculum .course-item .section-item-link::before{display:table-cell;display:table-cell;left:0;width:20px;padding:15px 0;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:18px;font-weight:400;vertical-align:middle;transition:left linear .15s}.course-curriculum .course-item .item-icon,.course-curriculum .course-item .item-name{display:table-cell;padding:17px 16px;color:#333;font-size:16px;font-weight:600;vertical-align:middle}.course-curriculum .course-item .item-icon::before{font-size:18px}.course-curriculum .course-item .item-icon.icon-lock{float:right;margin-top:15px}.course-curriculum .course-item.course-item-lp_quiz .section-item-link::before{content:"\f059"}.course-curriculum .course-item.course-item-lp_lesson .section-item-link::before{content:"\f15b"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-video .section-item-link::before{content:"\f03d"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-audio .section-item-link::before{content:"\f028"}.course-curriculum .course-item.item-locked .course-item-status::before{color:var(--lp-secondary-color);content:"\f023"}.course-curriculum .course-item.has-status{padding-top:1px}.course-curriculum .course-item.has-status.status-completed .course-item-status::before,.course-curriculum .course-item.has-status.status-evaluated .course-item-status::before{color:#3bb54a}.course-curriculum .course-item.has-status.item-failed .course-item-status::before,.course-curriculum .course-item.has-status.failed .course-item-status::before{border-color:#f02425;color:#f02425;content:"\f00d"}.course-curriculum .course-item::before{position:absolute;top:50%;left:0;width:3px;height:0;background:#00adff;content:"";transition:height linear .15s,top linear .15s}.course-curriculum .course-item.current{padding-left:10px;background:#f9f9f9}.course-curriculum .course-item.current a::before{left:10px}.course-curriculum .course-item.current::before{top:0;height:100%}.course-curriculum .section-left{vertical-align:top}.course-curriculum .section-left .section-title{padding:0;color:#666;font-size:1.4rem;letter-spacing:0;text-transform:capitalize;display:block}.course-curriculum .curriculum-more__button{display:flex;width:100%;margin-top:20px;margin-bottom:20px;padding:10px 0;border:0;outline:0;color:#fff;background:#333;box-shadow:none;justify-content:center;align-items:center;cursor:pointer;font-size:1rem;font-family:sans-serif}.course-curriculum .curriculum-more__button.loading::before{display:inline-block;margin-right:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}body.course-item-popupx{overflow:hidden;_opacity:0}body.course-item-popupx #learn-press-course-curriculum{overflow:auto;position:fixed;z-index:9999;top:32px;bottom:0;left:0;width:400px;border-right:1px solid #ddd;background:#fff}body.course-item-popupx #learn-press-course-curriculum .section-header{padding:0 15px}body.course-item-popupx #learn-press-course-curriculum .section-header .section-desc{margin:-10px 0 5px}body.course-item-popupx #learn-press-course-curriculum .course-item{padding-right:15px;padding-left:15px}body.course-item-popupx #learn-press-course-curriculum .course-item a::before{left:15px}body.course-item-popupx #learn-press-content-item{overflow:hidden;position:fixed;z-index:9999;top:32px;right:0;bottom:0;left:400px;background:#fff}body.course-item-popupx #learn-press-content-item .content-item-wrap{max-width:900px;margin:10px auto}body.course-item-popupx #learn-press-content-item .course-item-title{font-size:1.4rem}body.course-item-popupx #learn-press-content-item .content-question-summary .review-heading{text-align:center}body.course-item-popupx #learn-press-content-item .content-question-summary .question-title{margin-bottom:10px;font-size:1.2rem}body.course-item-popupx #content-item-nav{position:fixed;z-index:99999;right:0;bottom:0;left:400px;height:60px;border-top:1px solid #ddd;background:#f5f5f5}body.course-item-popupx #content-item-nav .content-item-nav-wrap{max-width:900px;margin:10px auto}body.course-item-popupx #content-item-nav button{height:40px;padding:0 20px;line-height:40px}body.course-item-popupx .comment-form-textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body.course-item-popupx.wpadminbar #learn-press-course-curriculum,body.course-item-popupx.wpadminbar #learn-press-content-item{top:92px}body.course-item-popupx.wpadminbar .content-item-description{margin-bottom:20px}body.course-item-popupx .content-item-summary{margin-bottom:50px}body.course-item-popupx .content-item-summary>h3{margin-bottom:20px}body.course-item-popupx .content-item-summary.content-item-video .entry-video{position:absolute;top:0;left:0;width:100%;background:#000;line-height:1}body.course-item-popupx .content-item-summary.content-item-video .entry-video iframe{width:100%;max-width:900px;margin-bottom:0;vertical-align:top}body.course-item-popupx .learn-press-content-protected-message{margin-bottom:50px;padding:20px;background:#ffe0e0}body.course-item-popupx.content-only #learn-press-content-item{z-index:9999999;top:0;bottom:0;left:0}body.course-item-popupx.content-only #learn-press-content-item .content-item-scrollable{bottom:0}body #ifr-course-item{position:absolute;z-index:999999;top:0;left:0;width:100%;height:100%;background:#fff}body .content-item-summary .form-button-finish-course,body .lp-quiz-buttons .form-button-finish-course{float:right}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{top:2px;font-family:"Font Awesome 5 Free"}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before{content:"\f017"}#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before{content:"\f15c"}#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{content:"\f29c"}.scroll-wrapper{overflow:hidden;opacity:0}.scroll-wrapper .scroll-element{background:transparent}.scroll-wrapper .scroll-element.scroll-y.scroll-scrolly_visible{transition:opacity .25s}.scroll-wrapper:hover .scroll-element.scroll-y.scroll-scrolly_visible{opacity:.7}.course-remaining-time .label-enrolled{font-size:inherit}.learn-press-form.completed button::before{margin-right:10px;font-family:"Font Awesome 5 Free";font-size:18px;content:"\f00c"}.lp-course-progress{position:relative}.lp-course-progress .lp-passing-conditional{position:absolute;top:0;width:3px;height:6px;margin-left:-1px;background:var(--lp-secondary-color)}.viewing-course-item .section-header .section-desc{display:none}.viewing-course-item .content-item-wrap{margin-top:50px}.course-meta{display:flex;margin-bottom:40px}.course-meta .course-meta__pull-left,.course-meta .course-meta__pull-right{display:flex;flex-wrap:wrap}.course-meta .course-meta__pull-left{flex:1}.course-meta .course-meta__pull-left .meta-item{margin-right:10px}.course-meta .course-meta__pull-right{flex:0 0 50%}.course-meta .course-meta__pull-right .meta-item{margin-left:10px}.course-meta.course-meta-primary .meta-item{flex:1}.course-meta.two-columns .course-meta{flex:1}.course-extra-box{margin-bottom:3px;border:1px solid rgba(204,204,204,0.3);border-radius:5px}.course-extra-box__title{--extra-height:50px;display:flex;align-items:center;position:relative;height:var(--extra-height);margin:0 !important;padding:0 45px 0 38px;background:rgba(181,187,211,0.15);font-size:1.1rem;font-weight:600;cursor:pointer}@media(max-width:767px){.course-extra-box__title{padding-left:15px}}.course-extra-box__title::after{position:absolute;top:0;right:20px;color:#666;font-family:"Font Awesome 5 Free";line-height:var(--extra-height);content:"\f0d7"}.course-extra-box__content{display:none}.course-extra-box__content-inner{-webkit-animation-name:course-extra-box__content-inner-transform;animation-name:course-extra-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}.course-extra-box__content ul,.course-extra-box__content li{list-style:none}.course-extra-box__content ul{margin:0;padding:0}.course-extra-box__content li{margin:0;padding:10px 38px;border-bottom:1px solid rgba(204,204,204,0.3);color:#666;font-size:16px;font-weight:300}@media(max-width:767px){.course-extra-box__content li{padding-left:30px;padding-right:30px}}.course-extra-box__content li::before{margin-right:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900;content:"\f00c"}.course-extra-box__content li:last-child{border-bottom:0}.course-extra-box:last-child{margin-bottom:60px}.course-extra-box.active .course-extra-box__title::after{content:"\f0d8"}.course-extra-box+.comment-respond,.course-extra-box+.comments-area{margin-top:60px;margin-bottom:30px}.course-extra-box+.course-tabs{margin-top:60px}input[name=course-extra-box-ratio]{display:none}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content{display:block}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content .course-extra-box__content-inner{transform:scale(1)}@-webkit-keyframes course-extra-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(5%);-moz-transform:translateX(5%);-ms-transform:translateX(5%);-o-transform:translateX(5%);transform:translateX(5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes course-extra-box__content-inner-transform{from{opacity:0;transform:translateX(5%)}to{opacity:1;transform:translateX(0)}}.course-tab-panel-faqs{padding-top:64px}.course-tab-panel-faqs .course-faqs-box{margin-bottom:20px;border:1px solid rgba(204,204,204,0.6);border-radius:5px}.course-tab-panel-faqs .course-faqs-box__title{display:block;position:relative;margin:0;padding:20px 45px 20px 25px;font-size:1.1rem;font-weight:500;line-height:1.7;cursor:pointer}.course-tab-panel-faqs .course-faqs-box__title::after{position:absolute;top:50%;right:28px;color:#6c6c6c;font-family:"Font Awesome 5 Free";font-size:12px;font-weight:900;content:"\f078";transform:translateY(-50%)}.course-tab-panel-faqs .course-faqs-box:last-child{margin-bottom:40px}.course-tab-panel-faqs .course-faqs-box:hover{background:rgba(241,242,248,0.4)}.course-tab-panel-faqs .course-faqs-box:hover .course-faqs-box__title{color:var(--lp-primary-color)}.course-tab-panel-faqs .course-faqs-box__content{display:none}.course-tab-panel-faqs .course-faqs-box__content-inner{padding:0 25px 25px 25px;color:#666;font-size:1rem;font-weight:300;line-height:26px;-webkit-animation-name:course-faqs-box__content-inner-transform;animation-name:course-faqs-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}input[name=course-faqs-box-ratio]{display:none}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__content{display:block}input[name=course-faqs-box-ratio]:checked+.course-faqs-box{background:rgba(241,242,248,0.4)}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title{color:var(--lp-primary-color)}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title::after{content:"\f077"}@-webkit-keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(5%);-moz-transform:translateX(5%);-ms-transform:translateX(5%);-o-transform:translateX(5%);transform:translateX(5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(5%);-moz-transform:translateX(5%);-ms-transform:translateX(5%);-o-transform:translateX(5%);transform:translateX(5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@media screen and (max-width:1300px){body.course-item-popup #learn-press-course-curriculum{width:300px}body.course-item-popup #learn-press-course-curriculum .progress-bg{width:40px}body.course-item-popup #content-item-nav{left:300px}body.course-item-popup .section-desc{display:none}}@media screen and (max-width:1200px){body.course-item-popupx #learn-press-course-curriculum{width:300px}body.course-item-popupx #content-item-nav{left:300px}body.course-item-popupx #learn-press-content-item .content-item-nav-wrap,body.course-item-popupx #learn-press-content-item .content-item-wrap{width:90%}}@media screen and (max-width:768px){body.course-item-popup .course-curriculum{width:200px}body.course-item-popup #content-item-nav{left:200px}body.course-item-popup #learn-press-content-item .content-item-nav-wrap,body.course-item-popup #learn-press-content-item .content-item-wrap{width:90%}body.course-item-popup.wpadminbar #learn-press-content-item,body.course-item-popup.wpadminbar #learn-press-course-curriculum{top:106px}.learn-press-course-results-progress{margin-right:0}.learn-press-course-results-progress .items-progress,.learn-press-course-results-progress .course-progress{float:none;width:100%;margin-right:0;margin-bottom:20px}}.lp-quiz-buttons{margin-bottom:20px;display:block;clear:both;content:""}.quiz-progress{margin-bottom:30px;background:#e7f7ff}.quiz-progress .progress-items{display:flex}.quiz-progress .progress-items .progress-item{position:relative;color:#777;font-size:15px;flex:1}.quiz-progress .progress-items .progress-item .progress-number,.quiz-progress .progress-items .progress-item .progress-label{display:block;line-height:1;text-align:center}.quiz-progress .progress-items .progress-item .progress-number{margin:15px 0 10px 0;font-size:20px}.quiz-progress .progress-items .progress-item .progress-label{margin-bottom:15px;font-size:14px}.quiz-progress .progress-items .progress-item i{display:none;float:left;width:60px;height:60px;color:#fff;background:#00adff;font-size:30px;line-height:60px;text-align:center}.quiz-progress .progress-items .progress-item::after{display:block;clear:both;content:""}.answer-options{margin:0;padding:0;list-style:none}.answer-options .answer-option{display:flex;overflow:hidden;position:relative;margin:0 0 18px 0;padding:10px;color:#777;background:#f5f5f5;font-size:20px;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-transition:background linear .25s;-moz-transition:background linear .25s;-ms-transition:background linear .25s;-o-transition:background linear .25s;transition:background linear .25s}.answer-options .answer-option .option-title{display:table-cell;font-size:smaller}.answer-options .answer-option .option-title .option-title-content{display:inline-block;vertical-align:middle}.answer-options .answer-option .option-title::before{position:absolute;top:0;bottom:0;left:0;width:3px;background:#ddd;content:"";-webkit-transition:background linear .25s;-moz-transition:background linear .25s;-ms-transition:background linear .25s;-o-transition:background linear .25s;transition:background linear .25s}.answer-options .answer-option input[type=checkbox],.answer-options .answer-option input[type=radio]{-webkit-appearance:initial;-moz-appearance:initial;position:relative;z-index:10;width:35px;min-width:35px;height:35px;margin:0 10px 0 3px;border:1px solid #cfcfcf;background:#f9fafc;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.answer-options .answer-option input[type=checkbox]:focus,.answer-options .answer-option input[type=radio]:focus{outline:0}.answer-options .answer-option input[type=checkbox]::after,.answer-options .answer-option input[type=radio]::after{margin-top:-10px;position:absolute;top:18px;left:9px;box-sizing:content-box;opacity:0;color:#3db748;font-family:"Font Awesome 5 Free";font-weight:900;font-size:16px;content:"\f00c"}.answer-options .answer-option input[type=checkbox]:checked ~ .option-title .option-title-content,.answer-options .answer-option input[type=radio]:checked ~ .option-title .option-title-content{position:relative}.answer-options .answer-option input[type=checkbox]:checked ~ .option-title::before,.answer-options .answer-option input[type=radio]:checked ~ .option-title::before{background:#00adff}.answer-options .answer-option input[type=checkbox]:checked::after,.answer-options .answer-option input[type=radio]:checked::after{opacity:1}.answer-options .answer-option input[type=checkbox]::after{margin-top:0;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.answer-options .answer-option input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.answer-options .answer-option input[type=radio]::before{border-radius:50%}.answer-options .answer-option .option-title{margin:0}.answer-options .answer-option:hover{background:#e1f5ff}.answer-options .answer-option.answer-correct{background:#e1f5ff}.answer-options .answer-option.answer-correct input[type=radio]:checked ~ .option-title::before,.answer-options .answer-option.answer-correct input[type=checkbox]:checked ~ .option-title::before{background:#e1f5ff}.answer-options .answer-option.answered-correct input[type=radio]:checked ~ .option-title::before,.answer-options .answer-option.answered-correct input[type=checkbox]:checked ~ .option-title::before{background:#00adff}.answer-options .answer-option.answered-wrong input[type=radio]::before,.answer-options .answer-option.answered-wrong input[type=radio]::after,.answer-options .answer-option.answered-wrong input[type=checkbox]::before,.answer-options .answer-option.answered-wrong input[type=checkbox]::after{border-color:red}.answer-options .answer-option.answered-wrong input[type=radio]:checked ~ .option-title::before,.answer-options .answer-option.answered-wrong input[type=checkbox]:checked ~ .option-title::before{background:red}button[data-counter]{position:relative}button[data-counter]::after{padding-left:5px;content:"(+" attr(data-counter) ")"}.quiz-result{max-width:320px;margin:20px auto 48px;text-align:center}.quiz-result .result-heading{display:none}.quiz-result.passed .result-message{background:#3bb54a}.quiz-result.passed .result-message::after{content:"\f00c"}.quiz-result .result-message{margin-bottom:30px;padding:10px 0 !important;color:#fff;background:#f02425;font-size:16px;line-height:22px;font-weight:400;display:flex;align-items:center;justify-content:center;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.quiz-result .result-message::after{margin-left:10px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f00d"}.quiz-result .result-grade .result-achieved,.quiz-result .result-grade .result-require{display:inline-block;margin:0 auto}.quiz-result .result-grade .result-achieved{padding-bottom:7px;border-bottom:1px solid #999;color:#333;font-size:28px;font-weight:500;line-height:1}.quiz-result .result-grade .result-require{display:block;padding-top:5px;color:#666;font-size:16px;font-weight:400;line-height:1}.quiz-result .result-grade .result-message{font-size:14px}.quiz-result.passed .result-achieved{color:#04adff}.quiz-result.passed .result-message strong{color:#04adff}.quiz-result .result-statistic{margin:0;padding:0;text-align:left;list-style:none}.quiz-result .result-statistic .result-statistic-field{display:flex;margin:0}.quiz-result .result-statistic .result-statistic-field+li{border-top:1px dashed #ccc}.quiz-result .result-statistic .result-statistic-field span,.quiz-result .result-statistic .result-statistic-field p{margin:0;flex:1}.quiz-result .result-statistic .result-statistic-field span{color:#666;font-size:16px;font-weight:400;line-height:35px}.quiz-result .result-statistic .result-statistic-field span::before{display:inline-block;width:15px;margin-right:10px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900}.quiz-result .result-statistic .result-statistic-field p{color:#333;font-size:16px;font-weight:500;line-height:35px;text-align:right}.quiz-result .result-statistic .result-statistic-field.result-time-spend label::before{font-weight:400;content:"\f017"}.quiz-result .result-statistic .result-statistic-field.result-point label::before{font-weight:400;content:"\f005"}.quiz-result .result-statistic .result-statistic-field.result-questions label::before{font-weight:400;content:"\f059"}.quiz-result .result-statistic .result-statistic-field.result-questions-correct label::before{color:#3db748;content:"\f00c"}.quiz-result .result-statistic .result-statistic-field.result-questions-wrong label::before{color:#f02425;content:"\f00d"}.quiz-result .result-statistic .result-statistic-field.result-questions-skipped label::before{color:#ddd;content:"\f2f5"}.quiz-status{position:sticky;z-index:99;top:0;right:0;left:0;margin:0 0 35px 0}.quiz-status>div{display:flex;box-sizing:border-box;width:100%;max-width:792px;height:60px;margin:0 auto;padding:5px 10px 5px 30px;border-radius:4px;background:var(--lp-primary-color);justify-content:center;align-items:center}@media(max-width:480px){.quiz-status>div{display:block;height:auto;text-align:center;padding:15px}.quiz-status>div .questions-index{margin-bottom:10px}}.quiz-status>div>div{display:flex;flex-direction:row-reverse;flex:0 0 50%;align-items:center}@media(max-width:480px){.quiz-status>div>div{justify-content:center}}.quiz-status>div .current-point{display:none}.quiz-status .questions-index{display:inline-block;color:#666;font-size:16px;font-weight:400;line-height:26px}.quiz-status .questions-index span{color:#333;font-weight:500}.quiz-status .countdown{position:relative;min-width:120px;margin-right:5px;padding:12px 29px;color:#333;background:#fff;font-size:14px;font-weight:400;line-height:1;text-align:center}.quiz-status .countdown .fas{position:absolute;top:50%;left:10px;color:#333;font-size:14px;transform:translateY(-50%)}.quiz-status .countdown .clock{display:none;width:40px;height:40px}.quiz-status .countdown .clock::before{position:absolute;width:40px;height:40px;border:4px solid #b1c1e6;border-radius:50%;content:"";-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.quiz-status .countdown .clock .circle-progress-bar{display:inline-block;position:relative;width:40px;height:40px;stroke:#5383f7}.quiz-status .countdown .clock .circle-progress-bar .circle-progress-bar__circle{transition:.35s stroke-dashoffset;transform:rotate(-90deg);transform-origin:50% 50%}.quiz-status .countdown .clock.x .circle-progress-bar__circle{stroke:red}.quiz-status .submit-quiz button{margin:0 0 0 10px;border:0;border-radius:0;background:#fff;text-transform:uppercase}.quiz-status .submit-quiz button:hover{background:var(--lp-secondary-color)}.quiz-status.submitting .submit-quiz button{background:#ddd}.question-numbers{text-align:center;list-style:none}.question-numbers li{display:inline-block;position:relative;margin-bottom:3px}.question-numbers li a{display:block;min-width:20px;padding:8px;border:1px solid #ddd;color:#999;background:#f5f5f5;box-shadow:none;font-size:12px;line-height:1}.question-numbers li a span{vertical-align:middle}.question-numbers li a:hover{border:1px solid #3880a2;color:#fff;background:#00adff}.question-numbers li.current a{border-color:#3880a2;color:#fff !important;background:#00adff}.question-numbers li.current.skipped::after{background:#fff}.question-numbers li.answered a::after{margin-left:3px;font-family:"Font Awesome 5 Free";font-size:8px;vertical-align:middle}.question-numbers li.answered.answered-wrong a{color:red}.question-numbers li.answered.answered-true a{color:#00adff}.question-numbers li.answered.answered-true.current a{color:#fff}.question-numbers li.skipped::after{position:absolute;bottom:3px;left:50%;width:10px;height:4px;margin-left:-5px;border-radius:2px;background:#aaa;content:""}.quiz-intro{display:flex;margin:0 0 20px;padding:0;list-style:none;flex-flow:row wrap}@media(max-width:768px){.quiz-intro{padding-right:10px;padding-left:10px;justify-content:space-between}}.quiz-intro-item{display:flex;margin:0 40px 0 0;align-items:center}@media(max-width:768px){.quiz-intro-item{margin:0 20px 0 0}}.quiz-intro-item::before{position:relative;top:-2px;margin-right:10px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900}.quiz-intro-item--passing-grade{order:2}.quiz-intro-item--passing-grade::before{content:"\f012"}.quiz-intro-item--questions-count{order:1}.quiz-intro-item--questions-count::before{content:"\f12e"}.quiz-intro-item--duration{order:2}.quiz-intro-item--duration::before{content:"\f017"}.quiz-intro-item__title{margin:0;padding:0 8px 0 0;color:#333;font-size:16px;font-weight:300;line-height:1.7}.quiz-intro-item__content{color:#222;font-size:16px;font-weight:400}.question-explanation-content,.question-hint-content{margin-bottom:20px;padding:10px 15px;background:#f5f5f5}.redo-quiz button[type=submit]{content:attr(data-counter)}.circle-bar{position:relative;width:300px;height:300px;border-color:#ddd}.circle-bar::before{position:absolute;z-index:0;top:0;left:0;box-sizing:border-box;width:100%;height:100%;border:10px solid #ddd;border-radius:50%;content:""}.circle-bar .before,.circle-bar .after{position:absolute;z-index:0;top:0;left:0;box-sizing:border-box;width:100%;height:100%;border:10px solid #14c4ff;border-radius:50%;transform:rotate(45deg)}.circle-bar .before{border-bottom-color:transparent;border-left-color:transparent;transform:rotate(45deg)}.circle-bar .after{border-color:#14c4ff;border-top-color:transparent;border-right-color:transparent;transform:rotate(45deg)}.circle-bar.bg50 .after{z-index:10;border-bottom-color:inherit;border-left-color:inherit;transform:rotate(45deg)}.lp-quiz-buttons .complete-quiz,.lp-quiz-buttons .back-quiz,.lp-quiz-buttons .review-quiz{float:right}.quiz-result .result-grade{display:flex;flex-direction:column;position:relative;box-sizing:border-box;height:200px;margin-bottom:30px;padding:50px;justify-content:center;align-items:center;-webkit-transform:none !important;-moz-transform:none !important;-ms-transform:none !important;-o-transform:none !important;transform:none !important}.quiz-result .result-grade::before,.quiz-result .result-grade svg{position:absolute;top:0;left:50%;width:200px;height:200px;margin-left:-100px;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.quiz-result .result-grade::before{box-sizing:border-box;padding:30px;border:10px solid #ccc;content:""}.quiz-result .result-grade svg{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.quiz-result .result-grade svg circle{stroke:var(--lp-primary-color)}.quiz-result.passed .result-grade svg{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.quiz-result.passed .result-grade .result-achieved{color:#333}.quiz-result.passed .result-grade .result-message strong{color:#4caf50}.quiz-questions .question{margin-bottom:60px}.question .answer-option{padding:0;_border:2px solid #d9e0f1;background:#fff}.question .answer-option input[type=radio],.question .answer-option input[type=checkbox]{position:absolute;top:50%;margin:-19px 0 0 10px;border-color:#d9e0f1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question .answer-option input[type=radio]::after,.question .answer-option input[type=checkbox]::after{border-color:#d9e0f1}.question .answer-option input[type=radio]:disabled,.question .answer-option input[type=checkbox]:disabled{border-color:#ddd;background:#f9f9f9}.question .answer-option input[type=radio]:disabled::after,.question .answer-option input[type=checkbox]:disabled::after{border-color:#ddd}.question .answer-option input[type=radio]:checked:not(:disabled)::after,.question .answer-option input[type=checkbox]:checked:not(:disabled)::after{border-color:#99aee4}.question .answer-option input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.question .answer-option input[type=radio]::before{border-radius:50%}.question .answer-option .option-title{display:flex;width:100%;margin:0;padding:14px 10px 11px 65px;border:1px solid #ccc;color:#666;background:#fff;font-size:16px;font-weight:300;line-height:26px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question .answer-option .option-title::after{display:inline-block;visibility:hidden !important;content:"."}.question .answer-option .option-title:hover{background:#f9f9f9}.question .answer-option .option-title::before{display:none}.question .answer-option.answer-correct .option-title{border-color:#4caf50}.question .answer-option.answered-wrong .option-title{border-color:#ff6423}.question .question-title{display:block;margin-top:0;margin-bottom:18px;color:#333;font-size:18px;font-weight:500}.question .question-title .edit-link{float:right;font-size:14px;font-weight:normal}.question .question-content{margin-bottom:30px;color:#666;font-size:16px;font-weight:300;line-height:26px}.question .question-content img{width:100%;max-width:100%}.question .question-response{margin-bottom:10px;font-size:14px}.question .question-response .label{display:inline-block;margin:0 5px 0 0;padding:8px 10px;border-radius:4px;color:#fff;line-height:1}.question .question-response .point{display:inline-block}.question .question-response.correct .label{background:#4caf50}.question .question-response.incorrect .label{background:#ff6423}.question .question-index{display:inline-block;margin:0 5px 0 0}.question .btn-show-hint{position:relative;margin:0 0 0 10px;padding:0;outline:0;color:#00adff;background:transparent;font-size:0;text-decoration:none}.question .btn-show-hint::before{font-family:"Font Awesome 5 Free";font-size:18px;content:"\f059"}.question .btn-show-hint:hover span{position:absolute;bottom:100%;left:0;width:auto;padding:6px 9px;border-radius:2px;color:#333;background:#eee;font-size:14px;font-weight:400;line-height:1;white-space:nowrap;text-transform:none}.question.question-fill_in_blanks .blanks .blank-input-wrap{display:inline-block}.question.question-fill_in_blanks .blanks .blank-block{margin-bottom:20px}.question.question-fill_in_blanks .blanks .blank-input{display:inline-block;width:auto;min-width:50px;margin:0 10px;padding:0 10px;border:0;border-bottom:1px dashed #ddd;text-align:center;white-space:nowrap}.question.question-fill_in_blanks .blanks .blank-input br{display:none}.question.question-fill_in_blanks .blanks .blank-input>*{display:inline;white-space:nowrap}.question.question-fill_in_blanks .blanks .blank-select{display:inline-block;height:30px;margin-left:4px;padding:1px}.question.question-fill_in_blanks .blanks .blank-fills{display:inline-block}.question.question-fill_in_blanks .blanks .blank-fills code{margin:0 5px;padding:0 6px;background:#ddd;line-height:1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question.question-fill_in_blanks .blanks.ordered{list-style-position:inside}.question.question-fill_in_blanks .blanks.one-paragraph{line-height:3}.lp-sort-bg label.option-title{background:rgba(255,182,6,0.68) !important}.learn-press-message.fixed{position:fixed;top:32px;left:0;right:0;background:rgba(0,173,255,0.6);text-align:center;z-index:100;color:#FFF;padding:10px}.learn-press-message.fixed[data-delay-in]{display:none}.lp-archive-courses ul{list-style-type:revert;padding:0 0 23px 1em}.lp-archive-courses ul.learn-press-breadcrumb,.lp-archive-courses ul.course-nav-tabs{list-style:none;padding:0}@media(max-width:768px){.lp-archive-courses ul.learn-press-breadcrumb,.lp-archive-courses ul.course-nav-tabs{padding-left:15px;padding-right:15px}}.lp-archive-courses ul,.lp-archive-courses ol{list-style-type:decimal;list-style-position:inside;padding:0 0 23px}.lp-archive-courses ol ul{padding:2px 0 2px 35px}.lp-archive-courses ol ol{padding:2px 0 2px 20px}.lp-archive-courses thead th,.lp-archive-courses tr th{padding:9px 24px}.lp-archive-courses tr td{border-top:1px solid #eee;padding:6px 24px}.learnpress #left-area ul,.learnpress .entry-content ul,.learnpress .et-l--body ul,.learnpress .et-l--footer ul,.learnpress .et-l--header ul{padding:0 !important;list-style:none !important}.learnpress.dt-the7 .learn-press-filters{margin-bottom:20px}.learnpress.dt-the7 .learn-press-courses[data-size="3"] .course{width:50%}.bridge.learnpress .lp-archive-courses{margin-top:100px}.bridge.learnpress .lp-archive-courses ul.learn-press-breadcrumb{padding-top:45px}.bridge.learnpress .content{z-index:110}.bridge.learnpress .comment-respond .comment-form{margin:0}.bridge.learnpress .comment-respond .comment-form>p,.bridge.learnpress .comment-respond .comment-form>div{padding:0}.bridge.learnpress.learnpress-profile .content{z-index:100}.bridge.learnpress #learn-press-item-comments{background:#f6f6f6}.learnpress.ast-separate-container .ast-article-single{padding-left:15px;padding-right:15px}body.learnpress-page.twentysixteen #primary .lp-entry-content{float:none;width:auto;margin:0 15%}body.learnpress-page.twentyfifteen .course-summary-sidebar .widget{width:100%;padding:0}body.learnpress-page.twentysixteen .entry-footer{display:none}body.learnpress-page.twentysixteen .lp-entry-content{float:none;width:auto}body.learnpress-page.twentyseventeen #primary article.type-page{width:100%}@media screen and (min-width:61.5625em){body.twentysixteen.learnpress-page .entry-footer{display:none}body.twentysixteen.learnpress-page .lp-entry-content{float:none;width:auto}body:not(.search-results) article:not(.type-page) .entry-footer{display:none}body:not(.search-results) article:not(.type-page) .lp-entry-content{float:none;width:auto}}body.twentyseventeen.learnpress-page #primary article.page .entry-header,body.twentyseventeen.learnpress-page #primary article.page .lp-entry-content{width:100%;float:none}@media screen and (min-width:48em){body.twentyseventeen.learnpress-page #primary article.page .entry-header,body.twentyseventeen.learnpress-page #primary article.page .lp-entry-content{width:100%;float:none}}.learn-press-tip{display:none;margin:0 5px;color:#444;font-size:13px;font-style:normal;line-height:1;vertical-align:baseline;cursor:pointer}.learn-press-tip.ready{display:inline-block}.learn-press-tip::before{font-family:"Font Awesome 5 Free";content:"\f059"}.learn-press-tip:hover{opacity:.8}.learn-press-tip-floating{position:absolute;z-index:9999999;min-width:20px;margin-left:-1px;padding:.618em 1em;color:#fff;background:#383838;font-size:12px;line-height:1.2em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.learn-press-tip-floating>*{font-size:12px}.learn-press-tip-floating .close{display:inline-block;position:absolute;top:-8px;right:-8px;width:16px;height:16px;border:1px solid #fff;color:#fff;background:#468fbc;line-height:16px;text-align:center;cursor:pointer;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.learn-press-tip-floating .close::before{font-family:"Font Awesome 5 Free";content:"\f00d"}.learn-press-tip-floating p{margin:0}.learn-press-tip-floating::before{position:absolute;bottom:-6px;left:50%;width:0;height:0;margin-left:-6px;border:6px solid transparent;border-top-color:#383838;border-bottom-width:0;content:""}body.lp-preview.admin-bar #learn-press-content-item{top:32px !important}body.lp-preview #learn-press-course-curriculum{display:none}body.lp-preview #learn-press-content-item{top:0 !important;left:0 !important}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(360deg);-moz-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}@keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}#popup_container{opacity:0;transform:scale(0.5)}body.confirm #popup_overlay{z-index:999998 !important}body.confirm #popup_container{z-index:999999 !important;max-width:90% !important;min-width:300px !important;padding:10px !important;background:#f5f5f5;transition:opacity .25s;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body.confirm #popup_container #popup_title{display:none !important}body.confirm #popup_container #popup_message{margin:-10px;background:#FFF;padding:20px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body.confirm #popup_container .close{position:absolute;top:3px;right:10px}body.confirm #popup_container #popup_panel{margin-top:20px;text-align:center}body.confirm #popup_container #popup_panel button,body.confirm #popup_container #popup_panel input[type=button],body.confirm #popup_container #popup_panel input[type=submit]{height:30px;line-height:30px;padding:0 25px}body.confirm #popup_container #popup_cancel{display:none}body.confirm #popup_container.ready{opacity:1;transform:scale(1)}a{text-decoration:none}.lp-content-area{width:100%;max-width:1170px;margin:0 auto}@media(max-width:1024px){.lp-content-area{padding-right:15px;padding-left:15px}}.lp-content-area::after,.lp-content-area::before{display:table;clear:both;content:""}.lp-archive-courses{width:100%;scroll-margin:30px}.lp-archive-courses.loading ul.learn-press-courses{position:relative}.lp-archive-courses.loading ul.learn-press-courses::before,.lp-archive-courses.loading ul.learn-press-courses::after{content:"";position:absolute;top:0;bottom:0;left:15px;right:15px}.lp-archive-courses.loading ul.learn-press-courses::after{z-index:3;background:#f3f3f3;background:linear-gradient(90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}.lp-archive-courses.loading ul.learn-press-courses::before{z-index:2;opacity:.8%;background:#fff}.lp-archive-courses form[name=search-course]{position:relative;margin-bottom:20px}.lp-archive-courses form[name=search-course] .search-course-input{width:100%;padding:12px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lp-archive-courses form[name=search-course] .search-course-button{position:absolute;top:1px;right:1px;bottom:1px;height:auto;padding:15px;line-height:1px}.lp-archive-courses .learn-press-courses-header{float:left;padding-top:4px}.lp-archive-courses .learn-press-courses-header h1{margin:0;font-size:30px;font-weight:600}@media(max-width:767px){.lp-archive-courses .learn-press-courses-header{margin-bottom:20px}}.lp-archive-courses .course-item{flex-direction:column;display:flex;transition:all .3s}.lp-archive-courses .course-item:hover .course-thumbnail .thumbnail::before{opacity:1}.lp-archive-courses .course-item:hover .course-thumbnail a img{transform:scale(1.05)}.lp-archive-courses .course-item:hover .course-wishlist{opacity:1}.lp-archive-courses .course-item .course-wishlist.filled{opacity:1}.lp-archive-courses .course-item .course-instructor{float:left;margin-bottom:16px;font-size:14px;font-weight:300;line-height:25px;text-transform:capitalize}.lp-archive-courses .course-item .course-instructor a{color:#059de9}.lp-archive-courses .course-item .course-instructor a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-content{position:relative;border-top:0}.lp-archive-courses .course-content .course-permalink{display:-webkit-box;clear:both;overflow:hidden;position:relative;border:0;color:#fff;text-decoration:none;text-transform:none;-webkit-line-clamp:2;-webkit-box-orient:vertical;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-archive-courses .course-content .course-permalink:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-archive-courses .course-content .course-review{display:none}.lp-archive-courses .course-content .course-categories,.lp-archive-courses .course-content .course-tags{display:block;font-size:14px;font-weight:300}.lp-archive-courses .course-content .course-categories{float:left;position:relative;margin-right:10px;margin-bottom:16px}.lp-archive-courses .course-content .course-categories a{display:inline-block;display:none;margin:0 10px;color:#fff;text-decoration:none}.lp-archive-courses .course-content .course-categories a:first-child{display:block;margin-left:0;padding:2px 16px;background:var(--lp-primary-color)}.lp-archive-courses .course-content .course-categories a:hover{color:#333}.lp-archive-courses .course-content .course-categories::after{position:absolute;top:50%;right:-2px;width:1px;height:12px;opacity:.5;background:#999;content:"";transform:translate(0,-50%)}.lp-archive-courses .course-content .course-info{color:#666;font-size:14px;font-weight:300}.lp-archive-courses .course-content .course-info>span{display:block}.lp-archive-courses .course-content .course-info .course-price{float:right}.lp-archive-courses .course-content .course-info .course-price .origin-price,.lp-archive-courses .course-content .course-info .course-price .price{color:#333;font-size:16px;font-weight:600}.lp-archive-courses .course-content .course-info .course-price .origin-price{margin-right:10px;color:#666;font-size:14px;font-weight:300;text-decoration:line-through}.lp-archive-courses .course-content .course-info .course-instructor{float:right}.lp-archive-courses .course-content .course-info::after{display:block;clear:both;content:""}.lp-archive-courses .course-content .course-excerpt{display:-webkit-box;overflow:hidden;margin-bottom:28px;color:#666;font-size:16px;font-weight:300;line-height:26px;-webkit-line-clamp:2;-webkit-box-orient:vertical}.lp-archive-courses .course-content .separator{display:none}.lp-archive-courses .course-wrap-thumbnail{overflow:hidden;position:relative}.lp-archive-courses .course-wrap-thumbnail .lp-badge.featured{position:absolute;z-index:100;top:28px;left:-110px;width:300px;text-align:center;transform:rotate(-45deg)}.lp-archive-courses .course-wrap-thumbnail .course-wishlist{position:absolute;z-index:2;top:6px;right:6px;opacity:0;color:#fff;cursor:pointer}.lp-archive-courses .course-wrap-thumbnail .course-wishlist::before{font-family:"Font Awesome 5 Free";font-weight:900;content:"\f004"}.lp-archive-courses .course-wrap-thumbnail .course-wishlist .course-wishlist__btn{display:none}.lp-archive-courses .course-wrap-thumbnail .course-wishlist:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-wrap-thumbnail:hover::before{opacity:1}.lp-archive-courses .course-wrap-thumbnail:hover .course-thumbnail a img{transform:scale(1.05)}.lp-archive-courses .course-wrap-thumbnail:hover .course-wishlist{opacity:1}.lp-archive-courses .course-thumbnail a{display:block;overflow:hidden}.lp-archive-courses .course-thumbnail .thumbnail{margin:0;padding:0;border:0;border-radius:unset;line-height:unset}.lp-archive-courses .course-thumbnail .thumbnail::before{position:absolute;z-index:1;top:0;right:0;bottom:0;left:0;opacity:0;background:rgba(0,0,0,0.5);content:"";transition:all .3s}.lp-archive-courses .course-thumbnail img{display:block;width:100%;height:auto;transition:all .5s ease;transform:scale(1)}.lp-archive-courses .course-title{margin:0;padding:0;color:#333;font-size:16px;font-weight:600;line-height:24px}.lp-archive-courses .course-title:hover{color:var(--lp-primary-color)}@media(min-width:769px){.lp-archive-courses .course-summary-content .course-info-left{width:calc(100% - 330px)}}.lp-archive-courses .course-summary-content .course-title{margin-bottom:42px;color:#fff;font-size:1.5rem;font-weight:500;line-height:1}.lp-archive-courses .course-summary-content .course-meta.course-meta-secondary{margin-bottom:0}@media(max-width:768px){.lp-archive-courses .course-summary-content{width:100%}}.lp-archive-courses .course-detail-info{padding:40px 0 10px 0;color:#fff;background:var(--lp-secondary-color);position:relative}.lp-archive-courses .course-detail-info::before,.lp-archive-courses .course-detail-info::after{content:"";width:50%;height:100%;background:var(--lp-secondary-color);position:absolute;top:0}.lp-archive-courses .course-detail-info::before{right:100%;left:auto}.lp-archive-courses .course-detail-info::after{left:100%;right:auto}.lp-archive-courses .course-meta__pull-left .meta-item{display:flex;height:46px;margin-right:50px;font-size:16px;font-weight:300;text-transform:capitalize}.lp-archive-courses .course-meta__pull-left .meta-item span{padding-right:4px;padding-left:0}.lp-archive-courses .course-meta__pull-left .meta-item:last-child{margin-right:0}.lp-archive-courses .course-meta__pull-left .meta-item::before{margin-right:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900}.lp-archive-courses .course-meta__pull-left .meta-item .meta-item__image{margin-right:10px;flex:0 0 46px}.lp-archive-courses .course-meta__pull-left .meta-item .meta-item__image img{overflow:hidden;position:relative;width:46px;height:46px;border-radius:50%}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-duration::before{content:"\f017"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-level::before{content:"\f012"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-lesson::before{content:"\f0c5"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-quiz::before{content:"\f12e"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-student::before{content:"\f501"}@media(max-width:1024px){.lp-archive-courses .course-meta__pull-left .meta-item{margin-right:30px}}@media(max-width:767px){.lp-archive-courses .course-meta__pull-left .meta-item{margin-right:0}}.lp-archive-courses .course-meta__pull-left .meta-item__value label{margin:0;color:#999;font-size:14px;font-weight:300;line-height:1.5}.lp-archive-courses .course-meta__pull-left .meta-item__value>div{line-height:1.5}.lp-archive-courses .course-meta__pull-left .meta-item__value>div a{color:#fff;font-size:16px;font-weight:400;text-transform:capitalize}.lp-archive-courses .course-meta__pull-left .meta-item__value>div a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-meta__pull-left .meta-item-categories{align-items:center}.lp-archive-courses .course-meta__pull-left .meta-item-categories::before{margin-right:10px;font-size:36px;content:"\f02e"}.lp-archive-courses .course-meta__pull-left .meta-item-categories .meta-item__value div span{padding:0 5px}.lp-archive-courses .course-meta__pull-left .meta-item-categories .meta-item__value div a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-meta__pull-left .meta-item-review .meta-item__value{display:flex;flex-direction:column-reverse;justify-content:flex-end;align-items:flex-end}.lp-archive-courses .course-meta__pull-left .meta-item-review .meta-item__value .review-stars-rated{margin-bottom:0;line-height:1}@media(max-width:767px){.lp-archive-courses .course-meta__pull-left{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:20px}}.lp-archive-courses .course-meta-primary{margin-bottom:36px}.lp-archive-courses .course-meta-primary .meta-item-categories::before{font-weight:400}.lp-archive-courses .lp-entry-content{display:flex;flex-direction:row}.lp-archive-courses .lp-entry-content .entry-content-left{width:calc(100% - 300px);max-width:100%;margin:0;padding-right:40px;padding-top:60px}@media(max-width:768px){.lp-archive-courses .lp-entry-content .entry-content-left{width:100%;padding-right:0;margin-bottom:50px}}@media(max-width:768px){.lp-archive-courses .lp-entry-content{flex-direction:column}}.lp-archive-courses .course-summary-sidebar{width:300px;max-width:100%;margin-top:-272px}@media(max-width:768px){.lp-archive-courses .course-summary-sidebar{width:100%;margin-top:0}.lp-archive-courses .course-summary-sidebar .course-summary-sidebar__inner{width:100%}}@media(max-width:767px){.lp-archive-courses .course-summary-sidebar{width:100%;padding-left:0}}.lp-archive-courses .course-summary-sidebar__inner{width:300px}.lp-archive-courses .course-summary-sidebar__inner .course-sidebar-top{box-shadow:0 15px 20px 0 rgba(0,0,0,0.05)}.lp-archive-courses .course-summary-sidebar__inner .course-sidebar-secondary{margin-top:30px;padding:0}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist{color:#fff;background:transparent !important;font-size:0}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist.on,.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist::before{font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900;content:"\f004"}.lp-archive-courses .course-summary-sidebar__inner>div{overflow:hidden;padding:20px;background:#fff}.lp-archive-courses .course-summary-sidebar__inner>div ul{list-style:none}.lp-archive-courses .course-summary-sidebar__inner>div ul li a{color:#666;font-size:16px;font-weight:300;line-height:24px}.lp-archive-courses .course-summary-sidebar__inner>div ul li a:hover{color:var(--lp-primary-color);box-shadow:unset}.learn-press-courses{clear:both;margin:0 -15px;padding:0 !important;min-height:300px;list-style:none;position:relative;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-moz-flex;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}.learn-press-courses .course{width:25%;margin:0 0 60px 0;box-shadow:none;list-style:none}.learn-press-courses[data-layout=list]{margin:0}.learn-press-courses[data-layout=list] .course{display:flex;width:100%;padding:24px;border:1px solid rgba(204,204,204,0.3);border-radius:4px;flex-wrap:wrap;justify-content:flex-end}@media(max-width:767px){.learn-press-courses[data-layout=list] .course{padding:15px}}.learn-press-courses[data-layout=list] .course-item{flex-direction:row;width:100%;border:unset;justify-content:space-between}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-item{flex-direction:column}}.learn-press-courses[data-layout=list] .course-content{float:right;width:calc(64.2% - 76px);padding-top:5px}@media(max-width:1200px){.learn-press-courses[data-layout=list] .course-content{width:calc(64.2% - 40px)}}@media(max-width:1200px){.learn-press-courses[data-layout=list] .course-content{width:calc(64.2% - 25px)}}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content{width:100%;padding-top:20px}}.learn-press-courses[data-layout=list] .course-content .course-categories a{position:relative;padding:2px 20px 2px 15px;-webkit-clip-path:polygon(0 0,100% 0,88% 50%,100% 100%,0 100%);clip-path:polygon(0 0,100% 0,88% 50%,100% 100%,0 100%)}.learn-press-courses[data-layout=list] .course-content .course-permalink{height:25px;margin-bottom:5px;-webkit-line-clamp:1}.learn-press-courses[data-layout=list] .course-content .course-tags a{margin:0 10px 10px 0;padding:3px 5px;border-radius:3px;color:#fff;background:#e4a2a2;line-height:1}.learn-press-courses[data-layout=list] .course-content .course-footer{float:left;margin-right:20px}.learn-press-courses[data-layout=list] .course-content .course-footer .course-students{display:none}.learn-press-courses[data-layout=list] .course-content .course-footer .course-price{float:unset}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content .course-footer{margin-bottom:30px}}.learn-press-courses[data-layout=list] .course-content .course-readmore{float:right;position:relative;right:4px}.learn-press-courses[data-layout=list] .course-content .course-readmore a{padding:9px 24px;border-radius:3px;color:#fff;background:var(--lp-primary-color);font-weight:400;line-height:1;transition:all .3s;display:block}.learn-press-courses[data-layout=list] .course-content .course-readmore a:hover{opacity:.5;background:var(--lp-primary-color)}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content .course-readmore{display:flex;float:unset;clear:both}}.learn-press-courses[data-layout=list] .course-wrap-meta{display:flex;padding-top:12px;padding-bottom:18px;color:#333;font-size:14px;font-weight:400}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item{padding-right:28px;text-transform:capitalize}@media(max-width:1024px){.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item{padding-right:20px}}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item::before{position:relative;top:-1px;margin-right:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-level::before{content:"\f012"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-duration::before{content:"\f017"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-lesson::before{content:"\f0c5"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-quiz::before{content:"\f12e"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-student::before{content:"\f501"}@media(max-width:815px){.learn-press-courses[data-layout=list] .course-wrap-meta{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:15px}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item{padding-right:15px}}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-wrap-meta{grid-template-columns:repeat(3,1fr)}}.learn-press-courses[data-layout=list] .course-wrap-thumbnail{float:left;width:35.8%}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-wrap-thumbnail{width:100%}}.learn-press-courses[data-layout=list] .course-title{font-size:18px}.learn-press-courses[data-layout=grid] .course{padding:0 15px}@media(max-width:992px){.learn-press-courses[data-layout=grid] .course{width:50%}}@media(max-width:767px){.learn-press-courses[data-layout=grid] .course{width:100%}}.learn-press-courses[data-layout=grid] .course-item:hover{box-shadow:0 15px 20px 0 rgba(0,0,0,0.2)}.learn-press-courses[data-layout=grid] .course-item .course-instructor{margin-bottom:7px}.learn-press-courses[data-layout=grid] .course-content{padding:15px 20px 12px 20px;border:1px solid #f0f0f0;border-top:0;flex-grow:1}.learn-press-courses[data-layout=grid] .course-content .course-categories{float:right;position:absolute;z-index:1;top:-34px;right:-1px;margin-right:0}.learn-press-courses[data-layout=grid] .course-content .course-categories::after{display:none}.learn-press-courses[data-layout=grid] .course-content .course-categories a{position:relative;margin:0;padding:2px 12px 2px 22px;-webkit-clip-path:polygon(0 0,100% 0,100% 100%,0 100%,12px 50%);clip-path:polygon(0 0,100% 0,100% 100%,0 100%,12px 50%)}.learn-press-courses[data-layout=grid] .course-content .course-permalink{height:48px;margin-bottom:20px}.learn-press-courses[data-layout=grid] .course-content .course-info{display:flex;flex-direction:column;flex-grow:1}.learn-press-courses[data-layout=grid] .course-content .course-wrap-meta,.learn-press-courses[data-layout=grid] .course-content .course-excerpt,.learn-press-courses[data-layout=grid] .course-content .course-readmore{display:none}.learn-press-courses[data-layout=grid] .course-content .course-footer{padding-top:18px;border-top:1px solid rgba(153,153,153,0.2)}.learn-press-courses[data-layout=grid] .course-content .course-footer .course-students{float:left;text-transform:capitalize}.learn-press-courses[data-layout=grid] .course-content .course-footer .course-students::before{position:relative;top:-1px;margin-right:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900;content:"\f501"}.learn-press-courses[data-layout=grid] .learn-press-message{margin-left:15px;margin-right:15px}.learn-press-courses[data-size="3"] .course{width:33.3333%}@media(max-width:767px){.learn-press-courses[data-size="3"] .course{width:100%}}.learn-press-courses .lp-archive-course-skeleton{position:absolute;height:100%;background:linear-gradient(90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);animation:lp-skeleton-loading 1.4s ease infinite;background-size:400% 100%}.learn-press-courses .lp-archive-course-skeleton li{display:none}.lp-courses-bar{display:flex;float:right;margin-bottom:48px}@media(max-width:767px){.lp-courses-bar{flex-direction:row;width:100%;justify-content:space-between}}.lp-courses-bar .search-courses{position:relative;width:306px;max-width:100%;margin-right:20px;line-height:1;flex:1}.lp-courses-bar .search-courses input[type=text]{width:100%;height:44px;padding:6px 32px 6px 18px;border:1px solid #ccc;border-radius:5px;background:#fff;font-size:14px;font-style:italic;line-height:1}.lp-courses-bar .search-courses input[type=text]:focus{border-color:var(--lp-primary-color);outline:0}.lp-courses-bar .search-courses button{position:absolute;top:50%;right:12px;width:30px;height:30px;padding:0;border:0;color:#333;background:transparent;font-size:16px;line-height:1;transform:translate(0,-50%)}.lp-courses-bar .search-courses button:focus{border:0;outline:0}.lp-courses-bar .search-courses button.loading>i::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.lp-courses-bar .search-courses ::-webkit-input-placeholder{color:#999}.lp-courses-bar .search-courses :-ms-input-placeholder{color:#999}.lp-courses-bar .search-courses ::placeholder{color:#999}@media(max-width:767px){.lp-courses-bar .search-courses{width:100%}}.lp-courses-bar .switch-layout{display:flex;height:44px;line-height:1;text-align:right;flex:0 0 40px;align-items:center;justify-content:center}.lp-courses-bar .switch-layout input[type=radio]{display:none}.lp-courses-bar .switch-layout .switch-btn{display:block;width:40px;height:40px;margin:0;padding:0;border-radius:5px;font-size:16px;line-height:40px;text-align:center;cursor:pointer}.lp-courses-bar .switch-layout .switch-btn::before{display:inline-block;margin:8px 6px;color:#333;font-family:"Font Awesome 5 Free";font-weight:900;line-height:1}.lp-courses-bar .switch-layout .switch-btn.grid::before{content:"\f00a"}.lp-courses-bar .switch-layout .switch-btn.list{margin-left:3px}.lp-courses-bar .switch-layout .switch-btn.list::before{content:"\f03a"}input[type=radio]:nth-child(1):checked ~ .switch-btn:nth-child(2){background:#f5f5f5}input[type=radio]:nth-child(1):checked ~ .switch-btn:nth-child(2)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(3):checked ~ .switch-btn:nth-child(4){background:#f5f5f5}input[type=radio]:nth-child(3):checked ~ .switch-btn:nth-child(4)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(5):checked ~ .switch-btn:nth-child(6){background:#f5f5f5}input[type=radio]:nth-child(5):checked ~ .switch-btn:nth-child(6)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(7):checked ~ .switch-btn:nth-child(8){background:#f5f5f5}input[type=radio]:nth-child(7):checked ~ .switch-btn:nth-child(8)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(9):checked ~ .switch-btn:nth-child(10){background:#f5f5f5}input[type=radio]:nth-child(9):checked ~ .switch-btn:nth-child(10)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(11):checked ~ .switch-btn:nth-child(12){background:#f5f5f5}input[type=radio]:nth-child(11):checked ~ .switch-btn:nth-child(12)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(13):checked ~ .switch-btn:nth-child(14){background:#f5f5f5}input[type=radio]:nth-child(13):checked ~ .switch-btn:nth-child(14)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(15):checked ~ .switch-btn:nth-child(16){background:#f5f5f5}input[type=radio]:nth-child(15):checked ~ .switch-btn:nth-child(16)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(17):checked ~ .switch-btn:nth-child(18){background:#f5f5f5}input[type=radio]:nth-child(17):checked ~ .switch-btn:nth-child(18)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20){background:#f5f5f5}input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20)::before{color:var(--lp-primary-color)}.lp_allow_repuchase_select{padding:20px;background:#f7f7f7}.lp_allow_repuchase_select>ul{padding:0;list-style:none}.lp_allow_repuchase_select>a{display:inline-block;margin-top:10px;color:#fff;background-color:#222}.comment-respond .comment-reply-title{font-size:30px;font-weight:500;line-height:1.2;margin-bottom:15px}.comment-respond .comment-form{margin:0 -15px}.comment-respond .comment-form>p label{display:block;margin-bottom:10px;font-size:16px;font-weight:500}.comment-respond .comment-form>p.comment-notes,.comment-respond .comment-form>p.logged-in-as{color:#666;font-size:16px}.comment-respond .comment-form>p.logged-in-as a{color:#666;text-decoration:underline}.comment-respond .comment-form>p.logged-in-as a:hover,.comment-respond .comment-form>p.logged-in-as a:focus{color:var(--lp-primary-color)}.comment-respond .comment-form>p.comment-form-cookies-consent{clear:both}.comment-respond .comment-form>p.comment-form-cookies-consent input{padding:0;margin-right:8px}.comment-respond .comment-form>p.comment-form-cookies-consent label{display:inline}.comment-respond .comment-form>p,.comment-respond .comment-form>div{padding:0 15px;margin-bottom:15px}.comment-respond .comment-form input[type=text],.comment-respond .comment-form input[type=email],.comment-respond .comment-form input[type=url]{height:40px;line-height:normal;width:100% !important;margin-bottom:15px}.comment-respond .comment-form input[type=submit]{background-color:var(--lp-primary-color);border:0;min-height:40px;line-height:40px;padding:0 15px;font-size:16px;text-transform:capitalize;font-weight:500;margin-top:15px;cursor:pointer;color:white}.comment-respond .comment-form .comment-form-author,.comment-respond .comment-form .comment-form-email,.comment-respond .comment-form .comment-form-url{width:33.33%;float:left}@media(max-width:575px){.comment-respond .comment-form .comment-form-author,.comment-respond .comment-form .comment-form-email,.comment-respond .comment-form .comment-form-url{width:100%;float:unset}}.comment-respond .comment-form textarea,.comment-respond .comment-form input{border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;max-width:100%}.comment-respond .comment-form textarea{width:100%;display:block;padding:20px 15px;resize:none}.course-summary-sidebar .course-sidebar-preview{margin-bottom:35px;background:#fff}.course-summary-sidebar .lp-course-buttons{margin-bottom:34px}.course-summary-sidebar .lp-course-buttons>*{margin-bottom:10px}.course-summary-sidebar .lp-course-buttons>*:last-child{margin-bottom:0}.course-summary-sidebar .lp-course-buttons form,.course-summary-sidebar .lp-course-buttons button{width:100%;text-decoration:none}.course-summary-sidebar .lp-course-buttons button{font-weight:500}.course-summary-sidebar .lp-course-buttons button:hover{border-color:var(--lp-primary-color)}.course-summary-sidebar .lp-course-buttons button.button-enroll-course{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.course-summary-sidebar .lp-course-buttons button.button-enroll-course:hover{opacity:.5;background:var(--lp-primary-color)}.course-summary-sidebar .lp-course-buttons button.button-enroll-course.loading::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";animation:lp-rotating 1s linear infinite}.course-summary-sidebar .lp-course-buttons button ~ .lp-enroll-notice{margin-top:20px;padding:20px;border:2px solid #059601;border-radius:9px;font-size:15px;line-height:1.4}.course-summary-sidebar .lp-course-buttons button ~ .lp-enroll-notice.error{border-color:#d85554}.course-summary-sidebar .course-results-progress .items-progress,.course-summary-sidebar .course-results-progress .course-progress{display:flex;flex-direction:row;margin:0 0 5px;padding:0;justify-content:space-between;flex-wrap:wrap}.course-summary-sidebar .course-results-progress .items-progress__heading,.course-summary-sidebar .course-results-progress .course-progress__heading{margin:0;margin-bottom:7px;padding:0;color:#333;font-size:1rem;font-weight:500;flex:1 1 auto;width:auto}.course-summary-sidebar .course-results-progress .items-progress .learn-press-progress,.course-summary-sidebar .course-results-progress .course-progress .learn-press-progress{clear:both;width:100%}.course-summary-sidebar .course-results-progress .number{display:block;margin:0;color:#666;font-size:16px;font-weight:300;line-height:16px;text-align:right}.course-sidebar-preview .course-price{text-align:center}.course-sidebar-preview .course-price .origin-price{color:#666;font-size:18px;font-weight:300;font-style:unset}.course-sidebar-preview .course-price .price{color:#333;font-size:1.8rem;font-weight:500}.course-sidebar-preview .media-preview{overflow:hidden;position:relative;margin:-20px -20px 20px}.course-sidebar-preview .media-preview img{max-width:100%;height:auto;vertical-align:top}.course-sidebar-preview .course-time{margin-bottom:28px;padding-bottom:8px;border-bottom:1px solid rgba(204,204,204,0.3)}.course-sidebar-preview .course-time-row{display:flex;color:#666;font-size:16px;font-weight:300;justify-content:space-between}.course-sidebar-preview .course-time-row strong{color:#333;font-weight:500}.course-sidebar-preview .course-time-row time{color:#666;font-size:1rem;font-weight:300;line-height:24px}.course-sidebar-preview>*:last-child{margin-bottom:0}.learnpress-page .lp-button.secondary{background:#9198ab}.learnpress-page .lp-button.secondary:hover{background:#9ba6c5}.learnpress-page .lp-button:disabled,.learnpress-page .lp-button[disabled]{background:#ddd;pointer-events:none}.learnpress-page:hover{text-decoration:none}#popup-course{display:flex;position:fixed;z-index:99999;top:0;right:0;bottom:0;left:0;background:#fff}#popup-course .back-course{padding-left:30px;padding-right:30px;line-height:70px;background:rgba(255,255,255,0.1);color:#fff}#popup-course .back-course:hover{background:rgba(255,255,255,0.15)}@media(max-width:768px){#popup-course .back-course{background:transparent;opacity:.6;padding-left:15px;padding-right:15px}#popup-course .back-course:hover{background:transparent;opacity:1}}#popup-course #popup-header{display:flex;position:fixed;z-index:100;right:0;left:475px;padding:0;border-bottom:1px solid #d9e0f1;background:var(--lp-secondary-color);-webkit-transition:left .25s;-moz-transition:left .25s;-ms-transition:left .25s;-o-transition:left .25s;transition:left .25s}#popup-course #popup-header .course-title{margin:0;padding:0;line-height:70px;letter-spacing:unset}#popup-course #popup-header .course-title a{display:-webkit-box;overflow:hidden;color:#fff;font-size:16px;font-weight:400;text-overflow:ellipsis;-webkit-line-clamp:1;-webkit-box-orient:vertical}#popup-course #popup-header .course-title a:hover{color:var(--lp-primary-color)}@media(max-width:768px){#popup-course #popup-header .course-title{flex:1}}#popup-course #popup-header .items-progress{display:flex;justify-content:center;align-items:center;column-gap:10px}@media(max-width:768px){#popup-course #popup-header .items-progress{flex:1}}@media(max-width:767px){#popup-course #popup-header .items-progress{padding-bottom:20px;justify-content:end}}#popup-course #popup-header .number{padding-right:10px;color:#fff;font-size:14px;font-weight:300}#popup-course #popup-header .lp-button{display:flex;position:relative;height:40px;margin:9px;border:0;color:#fff;background:var(--lp-primary-color);font-size:14px;font-weight:400;justify-content:center;line-height:40px;align-items:center}#popup-course #popup-header .lp-button:hover{opacity:.8}#popup-course #popup-header .lp-button-back{float:right;margin:9px 10px}#popup-course #popup-header .lp-button-back button::before,#popup-course #popup-header .lp-button-back button::after{content:""}#popup-course #popup-header .lp-button-back button::before{border:1px solid #ddd}#popup-course #popup-header .lp-button-back button::after{border:1px solid #ddd}#popup-course .popup-header__inner{display:flex;width:792px;margin:0 auto;justify-content:space-between;align-items:center;padding-left:15px;padding-right:15px}@media(max-width:1024px){#popup-course .popup-header__inner{width:100%}}@media(max-width:767px){#popup-course .popup-header__inner{flex-direction:column}}#popup-course #popup-sidebar{overflow:auto;position:relative;box-shadow:0 15px 30px 0 rgba(0,0,0,0.1);flex:0 0 475px;-webkit-transition:.25s;-moz-transition:.25s;-ms-transition:.25s;-o-transition:.25s;transition:.25s}#popup-course #popup-sidebar .search-course{display:flex;position:relative;height:70px;background:#f9fafc}#popup-course #popup-sidebar .search-course input[name=s]{display:block;width:100%;margin:6px 0;padding-left:20px;border:0;color:#999;background:transparent;box-shadow:none;font-size:14px;line-height:1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#popup-course #popup-sidebar .search-course input[name=s]::-webkit-input-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]::-moz-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]:-ms-input-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]:-moz-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]::placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]::-webkit-input-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]::-moz-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]:-ms-input-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]:-moz-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]::placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]:focus{outline:0;color:#222}#popup-course #popup-sidebar .search-course button{position:absolute;top:0;right:10px;width:16px;height:70px;margin:0 10px;padding:0;border:0;background:transparent;line-height:1px}#popup-course #popup-sidebar .search-course button::before{color:#666;font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900;content:"\f002"}#popup-course #popup-sidebar .search-course button.clear{display:none}#popup-course #popup-sidebar .search-course button.clear::before{content:"\f00d"}#popup-course #popup-sidebar .search-course .search-results{display:none;overflow:auto;position:fixed;z-index:99999999;top:92px;bottom:0;left:0;width:400px;margin:0;border-top-color:transparent;border-right:1px solid #d9e0f1;background:#fbfcff}#popup-course #popup-sidebar .search-course .search-results .search-results__item{border-bottom:1px solid #d9e0f1;background:#fff}#popup-course #popup-sidebar .search-course .search-results .search-results__item img{position:absolute;left:10px;width:40px;height:40px}#popup-course #popup-sidebar .search-course .search-results .search-results__item a{display:-webkit-box;overflow:hidden;position:relative;box-sizing:content-box;height:40px;padding:10px 10px 10px 60px;color:#777;text-overflow:ellipsis;-webkit-line-clamp:1;-webkit-box-orient:vertical}#popup-course #popup-sidebar .search-course .search-results .search-results__item:hover{background:#d9e0f1}#popup-course #popup-sidebar .search-course .search-results .search-results__item-title{overflow:hidden;margin:0 0 -2px 0;padding:0;font-size:16px;font-weight:normal}#popup-course #popup-sidebar .search-course .search-results .search-results__item-author{font-size:12px}#popup-course #popup-sidebar .search-course .search-results .course-price{position:absolute;right:10px;bottom:10px;font-size:12px}#popup-course #popup-sidebar .search-course .search-results .course-price .origin-price{font-size:smaller;text-decoration:line-through}#popup-course #popup-sidebar .search-course .search-results .search-results__not-found{padding:10px;color:#777}#popup-course #popup-sidebar .search-course .search-results .search-results__pagination{padding:10px;text-align:center}#popup-course #popup-sidebar .search-course .search-results .search-results__pagination a,#popup-course #popup-sidebar .search-course .search-results .search-results__pagination span{display:inline-block;margin:0 3px 10px 2px;padding:5px 8px;border:1px solid #d9e0f1;border-radius:4px;color:#777;font-size:14px;line-height:1;cursor:pointer}#popup-course #popup-sidebar .search-course .search-results .search-results__pagination span{color:#999;background:#d9e0f1}#popup-course #popup-sidebar .search-course.searching .search-results{display:block}#popup-course #popup-sidebar .search-course.searching .clear{display:block}#popup-course #popup-sidebar .search-course.searching button{display:none}#popup-course #popup-sidebar .search-course.searching::after{position:absolute;z-index:1;bottom:0;left:50%;width:0;height:0;margin-left:-10px;border:10px solid transparent;border-bottom-color:#fff;content:""}#popup-course #popup-sidebar .course-curriculum{overflow:auto;position:absolute;top:70px;bottom:0;width:475px}#popup-course #popup-sidebar .course-curriculum::-webkit-scrollbar-thumb{background:#ccc}#popup-course #popup-sidebar .course-curriculum::-webkit-scrollbar{width:6px}#popup-course #popup-sidebar .course-curriculum::-webkit-scrollbar-track{background:#f5f5f5}#popup-course #popup-sidebar .section{position:relative;padding:0 0 4px 0}#popup-course #popup-sidebar .section .circle-progress{display:inline-block;position:absolute;top:50%;right:10px;width:24px;height:24px;margin-top:-12px;border:3px solid #d9e0f1;border-radius:50%}#popup-course #popup-sidebar .section.section-empty .section-header{margin:0}#popup-course #popup-sidebar .section.section-empty .learn-press-message{margin:0;padding:10px;border-bottom:1px solid #d9e0f1;border-radius:0;color:#999;background:#f5f5f5;font-size:14px}#popup-course #popup-sidebar .section.section-empty .learn-press-message::before,#popup-course #popup-sidebar .section.section-empty .learn-press-message::after{position:absolute;z-index:9999;top:-16px;left:10px;width:0;height:0;border:8px solid transparent;border-bottom-color:#f5f5f5;background:transparent;content:"";-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}#popup-course #popup-sidebar .section.section-empty .learn-press-message::after{z-index:9998;top:-20px;left:8px;border-width:10px;border-bottom-color:#d9e0f1}#popup-course #popup-sidebar .section-header{position:sticky;z-index:1000;top:0;height:94px;padding:38px 20px 20px 20px;cursor:pointer;background-color:white}#popup-course #popup-sidebar .section-header .section-title{padding:0 0 4px 0;color:#000;font-size:20px;font-weight:500}#popup-course #popup-sidebar .section-header .section-title .show-desc::before{font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f0d7"}#popup-course #popup-sidebar .section-header .section-toggle{justify-content:flex-end;flex:0}#popup-course #popup-sidebar .section-header .section-toggle i{color:#666}#popup-course #popup-sidebar .section-header .section-meta{padding-top:6px;padding-bottom:0}#popup-course #popup-sidebar .section-content{margin-bottom:0}#popup-course #popup-sidebar .course-item{min-height:50px;margin-bottom:4px;padding:5px 20px;background:#f9fafc;align-items:center}#popup-course #popup-sidebar .course-item>span{display:none}#popup-course #popup-sidebar .course-item::before{top:-1px;bottom:-1px;height:auto;background:transparent}#popup-course #popup-sidebar .course-item::after{content:""}#popup-course #popup-sidebar .course-item.current{background:#eaeaea}#popup-course #popup-sidebar .course-item.has-status.failed .trans{color:#f02425}#popup-course #popup-sidebar .course-item.status-completed .trans{color:#3bb54a}#popup-course #popup-sidebar .section-item-link{line-height:1;padding-right:0}#popup-course #popup-sidebar .section-item-link::before{padding:12px 0;vertical-align:unset}#popup-course #popup-sidebar .section-item-link .item-name{width:100%;padding:0 10px 0 17px;font-size:14px;line-height:21px;font-weight:500}#popup-course #popup-sidebar .course-item-meta{padding:0}#popup-course #popup-sidebar .course-item-meta .item-meta{padding:0;color:#999;background:transparent;font-size:12px;line-height:1.5;height:auto}#popup-course #popup-sidebar .course-item-meta .item-meta:first-child{margin-left:0}#popup-course #popup-sidebar .course-item-meta .item-meta::before{font-size:12px;line-height:21px}#popup-course #popup-content{overflow:auto;position:relative;margin:70px 0 50px 0;flex:1;padding-left:15px;padding-right:15px}#popup-course #popup-content .lp-button{position:relative;margin:0 10px 0 0;padding:12px 29px;border-color:var(--lp-secondary-color);font-size:14px}#popup-course #popup-content .lp-button.instant-check .instant-check__icon{margin-right:5px}#popup-course #popup-content .lp-button.instant-check .instant-check__icon::before{font-family:"Font Awesome 5 Free";content:"\f058"}#popup-course #popup-content .lp-button.instant-check .instant-check__info{visibility:hidden;position:absolute;top:100%;left:0;margin-top:3px;padding:11px 20px;border-radius:3px;background:#eee;white-space:nowrap;text-transform:none}#popup-course #popup-content .lp-button.instant-check:hover .instant-check__info{visibility:visible;position:absolute;top:100%;left:0;margin-top:3px;padding:11px 11px;border-radius:3px;color:#333;background:#eee;white-space:nowrap}#popup-course #popup-content .lp-button.instant-check.loading .instant-check__icon{display:inline-block;animation:lp-rotating 1s linear infinite}#popup-course #popup-content .lp-button.instant-check.loading .instant-check__icon::before{font-weight:800;content:"\f110"}#popup-course #popup-content .lp-button:hover{border-color:var(--lp-primary-color)}#popup-course #popup-content .lp-button.completed{display:flex;flex-direction:row-reverse;margin-top:32px;border-color:transparent;color:#fff;background:#3db748;font-size:16px;align-items:center;justify-content:center}#popup-course #popup-content .lp-button.completed i{margin-left:9px;font-size:14px}#popup-course #popup-content.fixed-quiz-status .quiz-status{background:var(--lp-primary-color)}#popup-course #popup-content.fixed-quiz-status .quiz-status>div{padding:0}@media(max-width:767px){#popup-course #popup-content{margin-top:113px}}#popup-course #popup-footer{position:fixed;z-index:999;right:0;bottom:0;left:475px;width:100%;max-width:792px;height:50px;margin:0 auto;border-top:1px solid #ebebeb;background:#fff;-webkit-transition:left .25s;-moz-transition:left .25s;-ms-transition:left .25s;-o-transition:left .25s;transition:left .25s}@media(max-width:1024px){#popup-course #popup-footer{width:auto;padding:0 15px}}#popup-course #popup-footer .course-item-nav{justify-content:space-between}#popup-course #popup-footer .course-item-nav .prev,#popup-course #popup-footer .course-item-nav .next{display:flex;line-height:50px}#popup-course #popup-footer .course-item-nav .prev a,#popup-course #popup-footer .course-item-nav .next a{display:block;color:#666;font-size:16px}#popup-course #popup-footer .course-item-nav .prev::before,#popup-course #popup-footer .course-item-nav .next::before{color:#999;font-family:"Font Awesome 5 Free";font-size:12px;font-weight:900}#popup-course #popup-footer .course-item-nav .prev:hover a,#popup-course #popup-footer .course-item-nav .prev:hover::before,#popup-course #popup-footer .course-item-nav .next:hover a,#popup-course #popup-footer .course-item-nav .next:hover::before{color:var(--lp-primary-color)}#popup-course #popup-footer .course-item-nav .prev:hover .course-item-nav__name,#popup-course #popup-footer .course-item-nav .next:hover .course-item-nav__name{display:block}#popup-course #popup-footer .course-item-nav .next{flex-direction:row-reverse}#popup-course #popup-footer .course-item-nav .next::before{margin-left:10px;content:"\f0da"}#popup-course #popup-footer .course-item-nav[data-nav=next]{justify-content:flex-end}#popup-course #popup-footer .prev::before{margin-right:10px;content:"\f0d9"}#popup-course #popup-footer .prev .course-item-nav__name{right:auto;left:-30px}#popup-course #popup-footer .prev .course-item-nav__name::before{right:auto;left:5px}@media(max-width:1024px){#popup-course #popup-footer .prev .course-item-nav__name{left:15px}}#popup-course #popup-footer .course-item-nav__name{display:none;position:absolute;top:-20px;right:-30px;width:auto;padding:10px 15px;color:#666;background:#ccc;font-size:14px;font-weight:300;line-height:1}@media(max-width:1024px){#popup-course #popup-footer .course-item-nav__name{top:-25px;right:15px;left:auto}}#popup-course #sidebar-toggle{display:inline-block;position:absolute;z-index:100;top:198px;left:475px;width:25px;height:56px;margin:0;background:#fff;box-shadow:0 0 20px 0 rgba(0,0,0,0.15);cursor:pointer;transition:.25s;-webkit-appearance:none;border:0}#popup-course #sidebar-toggle:after{display:none}#popup-course #sidebar-toggle::before{display:inline-block;position:absolute;top:50%;left:50%;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f0d9";transition:.25s;transform:translate(-50%,-50%)}#popup-course #sidebar-toggle:focus{border:0;outline:0}#popup-course .lp-quiz-buttons .complete-quiz,#popup-course .lp-quiz-buttons .back-quiz,#popup-course .lp-quiz-buttons .review-quiz{float:right}#popup-course .quiz-results,#popup-course .quiz-content,#popup-course .quiz-questions,#popup-course .quiz-buttons,#popup-course .quiz-attempts{margin-bottom:60px}#popup-course .quiz-questions .lp-fib-content{margin-bottom:20px;padding:20px;border:2px solid #f5f5f5;border-radius:6px;line-height:1.6}#popup-course .quiz-questions .lp-fib-input{display:inline-block;width:auto;max-width:none}#popup-course .quiz-questions .lp-fib-input>input{height:36px;padding:6px 16px;border:1px solid #222;line-height:36px}#popup-course .quiz-questions .lp-fib-answered{padding:0 10px;background:#ececec;white-space:nowrap}#popup-course .quiz-questions .lp-fib-answered.fail{border:2px solid #d85554}#popup-course .quiz-questions .lp-fib-answered.fail .lp-fib-answered__answer{text-decoration:line-through}#popup-course .quiz-questions .lp-fib-answered.correct{border:2px solid #00adff}#popup-course .quiz-questions .lp-fib-note{display:flex;margin-left:10px;font-size:14px;font-weight:400;align-items:center}#popup-course .quiz-questions .lp-fib-note>span{display:inline-block;width:20px;height:20px;margin:0 5px 0 0}#popup-course .quiz-questions .lp-sorting-choice__check-answer{padding:5px 20px;border:2px solid #059601;border-radius:5px;font-size:1rem}#popup-course .question .answer-option input[type=radio],#popup-course .question .answer-option input[type=checkbox]{-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);margin:0 0 0 10px}#popup-course .question .answer-option input[type=radio]::before{border-radius:50%}#popup-course .question .question-response{display:flex;align-items:center;justify-content:flex-start}#popup-course .scrollbar-light>.scroll-element{z-index:9999}#popup-course .scrollbar-light>.scroll-element.scroll-y{display:none}#popup-course .scrollbar-light>.scroll-element.scroll-y .scroll-bar{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body.admin-bar #popup-course{top:32px}body.lp-sidebar-toggle__close #popup-course>#sidebar-toggle{left:0}body.lp-sidebar-toggle__close #popup-course>#sidebar-toggle::before{content:"\f0da"}body.lp-sidebar-toggle__close #popup-course #popup-sidebar{flex:0}body.lp-sidebar-toggle__close #popup-course #popup-header,body.lp-sidebar-toggle__close #popup-course #popup-footer{left:0}@media(max-width:768px){body:not(.lp-sidebar-toggle__open) #popup-course>#sidebar-toggle{left:0}body:not(.lp-sidebar-toggle__open) #popup-course>#sidebar-toggle::before{content:"\f0da"}body:not(.lp-sidebar-toggle__open) #popup-course #popup-sidebar{flex:0}}.course-curriculum .section-header .section-meta{position:relative}@media screen and (max-width:1280px){#popup-course #popup-sidebar{flex-basis:300px}#popup-course #popup-sidebar .course-curriculum{width:300px}#popup-course #popup-header,#popup-course #popup-footer{left:300px}#popup-course #sidebar-toggle{left:299px}}@media screen and (max-width:782px){body.admin-bar #popup-course{top:46px}#popup-course #popup-sidebar{flex-basis:250px}#popup-course #popup-sidebar .course-curriculum{width:250px}#popup-course #popup-header,#popup-course #popup-footer{left:250px}#popup-course #sidebar-toggle{left:249px}#popup-course #sidebar-toggle:checked ~ #popup-sidebar{flex-basis:0}#popup-course .course-item-meta .item-meta.count-questions,#popup-course .course-item-meta .item-meta.duration{display:none}}.content-item-wrap{width:792px;max-width:100%;margin:0 auto;padding-bottom:80px}@media(max-width:1024px){.content-item-wrap{width:100%}}.content-item-wrap .course-item-title{margin-top:0;margin-bottom:24px;color:#333;font-size:30px;font-weight:600}@media(max-width:767px){.content-item-wrap .course-item-title{text-align:center}}.content-item-wrap h4{font-size:1.5rem;font-weight:500;line-height:1.5}.content-item-wrap .content-item-summary{padding-top:50px}.content-item-wrap .content-item-description{margin-bottom:30px}.content-item-wrap .content-item-description h2,.content-item-wrap .content-item-description h3,.content-item-wrap .content-item-description h4,.content-item-wrap .content-item-description h5,.content-item-wrap .content-item-description h6{margin-top:0;margin-bottom:18px;font-size:18px;letter-spacing:unset}.content-item-wrap .content-item-description p{margin:0 0 18px 0;color:#666;font-size:16px;font-weight:300;line-height:26px}.content-item-wrap .content-item-description img{max-width:100%;height:auto;vertical-align:middle}.content-item-wrap #learn-press-quiz-app{margin-bottom:40px}.content-item-wrap .quiz-content{margin-bottom:40px;color:#666;font-size:16px;font-weight:300;line-height:26px}.content-item-wrap .quiz-content img{max-width:100%;height:auto;vertical-align:middle}.content-item-wrap .quiz-buttons{display:flex;justify-content:center;text-align:center}.content-item-wrap .quiz-buttons .button-right .lp-button{margin:0 0 0 15px}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav]{margin:0;border:1px solid #d9e0f1;color:#777;background:#fbfcff}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav]::before{display:inline-block;width:15px;height:15px;border:2px solid #d9e0f1;border-top-color:transparent;border-left-color:transparent;content:"";-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav].prev::before{margin-left:7px;-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);-ms-transform:rotate(135deg);-o-transform:rotate(135deg);transform:rotate(135deg)}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav].next{margin-left:-1px}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav].next::before{margin-right:7px}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav]:hover{background:#fff}.content-item-wrap .quiz-buttons.align-center{display:block;text-align:center}.content-item-wrap .quiz-buttons.align-center .button-left{text-align:center}.content-item-wrap .quiz-buttons.align-center .button-left.fixed{position:fixed;z-index:99999;bottom:0;left:50%;width:100%;max-width:792px;height:49px;margin-left:237px;transform:translateX(-50%)}@media(max-width:768px){.content-item-wrap .quiz-buttons.align-center .button-left.fixed{width:100% !important}}.content-item-wrap .quiz-buttons.align-center .button-left.nav-center{height:50px;margin-left:0 !important}.content-item-wrap .quiz-buttons:not(.infinity).is-first .prev{display:none}.content-item-wrap .quiz-buttons:not(.infinity).is-last .next{display:none}.content-item-wrap .quiz-buttons:not(.is-first):not(.is-last) .prev{border-top-right-radius:0;border-bottom-right-radius:0}.content-item-wrap .quiz-buttons:not(.is-first):not(.is-last) .next{border-top-left-radius:0;border-bottom-left-radius:0}.content-item-wrap .questions-pagination{height:33px;padding:8px 0;background:#fff;text-align:center}.content-item-wrap .questions-pagination .nav-links{text-align:center}.content-item-wrap .questions-pagination .nav-links .page-numbers{display:inline-block;vertical-align:middle;margin:0 3px 3px;padding:10px 16px;color:#666;background-color:transparent;font-size:16px;font-weight:300;line-height:1;border:1px solid;cursor:pointer}.content-item-wrap .questions-pagination .nav-links .page-numbers.next,.content-item-wrap .questions-pagination .nav-links .page-numbers.prev{display:inline-block;padding:10px;background:transparent;font-size:16px;text-align:center;text-decoration:none;text-transform:none;border:1px solid}.content-item-wrap .questions-pagination .nav-links .page-numbers.current,.content-item-wrap .questions-pagination .nav-links .page-numbers:hover{color:var(--lp-primary-color)}.course-curriculum .section-title{position:relative;margin-bottom:0;padding:8px 0;color:#5383f7;font-size:16px;font-weight:normal;line-height:1}.course-curriculum .section-title span.show-desc{display:inline-block;position:absolute;top:50%;right:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-title span.show-desc::before{font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f107"}.course-curriculum .section-title span.show-desc:hover::before{border-top-color:#ccc}.lp-overlay{display:none;position:fixed;z-index:99999;top:0;right:0;bottom:0;left:0;width:100%;height:100%;background-color:rgba(209,213,219,0.8);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms;transition-property:opacity}.wp-admin .lp-modal-dialog .lp-modal-header{padding:2em}.wp-admin .lp-modal-dialog .lp-modal-header h3{font-size:1.4em}.lp-modal-dialog{display:flex;position:fixed;z-index:9999;top:0;right:0;left:0;width:100%;min-height:100vh;text-align:center;align-items:center;justify-content:center}.lp-modal-dialog .lp-modal-content{display:inline-block;overflow:hidden;z-index:2;width:auto;max-width:600px;border-radius:8px;text-align:left;vertical-align:middle;background:white;color:black}.lp-modal-dialog .lp-modal-header{background:#7c60d9;border-bottom:1px solid #eee;padding:1em}.lp-modal-dialog .lp-modal-header h3{margin:0;color:white;font-size:inherit;font-weight:400}.lp-modal-dialog .lp-modal-body .main-content{max-height:500px;overflow:auto}.lp-modal-dialog .lp-modal-body .main-content h3,.lp-modal-dialog .lp-modal-body .main-content h2,.lp-modal-dialog .lp-modal-body .main-content .pd-2em{padding:1em}.lp-modal-dialog .lp-modal-footer{padding:20px;padding-top:0;background-color:#f9fafb;text-align:right}.lp-modal-dialog .btn-yes{color:#fff;background-color:#7c60d9}#lp-modal-overlay{display:none;position:fixed;z-index:999999;top:0;right:0;bottom:0;left:0;opacity:.5;background:#000}#lp-modal-window{display:none;position:fixed;z-index:999999;top:50%;left:50%;padding:35px 60px 28px 60px;background:#fff;transform:translate(-50%,-50%);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#lp-modal-window #lp-modal-content{margin:0 0 24px 0;color:#333;font-size:16px;font-weight:400;line-height:26px;text-align:center}#lp-modal-window #lp-modal-content>*{margin:0 0 .5em}#lp-modal-window #lp-modal-buttons{display:flex;flex-direction:row-reverse;align-items:center;justify-content:center}#lp-modal-window #lp-modal-buttons .lp-button{position:relative;margin:0 10px 0 10px}.learn-press-comments{width:792px;max-width:100%;margin:0 auto}@media(max-width:1024px){.learn-press-comments{width:100%}}.learn-press-progress{overflow:hidden;position:relative;width:80px;height:6px;border-radius:3px}.learn-press-progress .learn-press-progress__active{position:absolute;z-index:1;left:-100%;width:100%;height:100%;border-radius:3px;background:var(--lp-primary-color);-webkit-transition:.5s;-moz-transition:.5s;-ms-transition:.5s;-o-transition:.5s;transition:.5s}.learn-press-progress::before{display:block;position:absolute;z-index:0;top:0;width:100%;height:100%;background:#ccc;content:""}.course-curriculum .section-header .section-left{display:flex}.course-curriculum .section-header .section-left .section-title{flex:1}.course-curriculum .section-header .section-left .section-toggle{flex:0 0 40px;align-items:center;text-align:center;cursor:pointer}.course-curriculum .section-header .section-left .section-toggle .fa-caret-down{display:none}.course-curriculum .section-header .learn-press-progress{width:80px}.course-curriculum .section.closed .section-toggle .fa-caret-down{display:block}.course-curriculum .section.closed .section-toggle .fa-caret-up{display:none}.course-curriculum .section.closed .section-content{overflow:hidden;height:0}*{box-sizing:border-box;margin:0;padding:0}button{cursor:pointer}input,button,select,textarea{outline:0}html{overflow-x:hidden}a{-webkit-transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;transition:.3s}.lp-skeleton-animation{margin:0;padding:0;list-style:none}.lp-skeleton-animation>li{width:100%;height:16px;margin-top:15px;border-radius:2px;background:linear-gradient(90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}@keyframes lp-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.learnpress.theme-twentytwentytwo .wp-site-blocks,.learnpress.twentytwentytwo .wp-site-blocks{max-width:none;padding-right:0;padding-left:0}.learnpress.theme-twentytwentytwo .wp-site-blocks>.wp-block-group,.learnpress.twentytwentytwo .wp-site-blocks>.wp-block-group{max-width:none;margin-right:auto;margin-left:auto}.learnpress.theme-twentytwentytwo .lp-archive-courses,.learnpress.twentytwentytwo .lp-archive-courses{max-width:none}.learnpress.twentytwentytwo .wp-container-11 .alignfull,.learnpress.twentytwentytwo .wp-container-9 .alignfull,.learnpress.twentytwentytwo .wp-container-12 .alignfull{max-width:100%;margin-left:0 !important;margin-right:0 !important;padding-left:0 !important;padding-right:0 !important}@media(max-width:1199px){.learnpress.twentytwentytwo .wp-site-blocks .wp-block-template-part{padding-left:15px;padding-right:15px}}input[type=text],input[type=email],input[type=number],input[type=password]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;box-shadow:unset}body{background:#fff}body.learnpress-page{overflow-x:hidden}.wrap-fullwidth a:focus,.wrap-fullwidth button:focus,.wrap-fullwidth input:focus,.wrap-fullwidth textarea:focus{border:0;outline:0}.wrap-fullwidth a:hover{text-decoration:none}.wrap-fullwidth p{word-break:break-word}.wrap-fullwidth p:last-child{margin-bottom:0}.wrap-fullwidth label{display:block;margin:0;outline:0}.wrap-fullwidth img{max-width:100%;height:auto}.wrap-fullwidth form{margin:0}.wrap-fullwidth .col-full{box-sizing:border-box;max-width:100%;padding:0}.wrap-fullwidth .col-full .woocommerce-breadcrumb{display:none}footer{clear:both}.margin-bottom{margin-bottom:20px}.hide-if-js{display:none !important}.clearfix::after{display:block;clear:both;content:""}.lp-form-fields{margin:0;padding:0;list-style:none}.lp-form-fields .form-field{margin:0 0 20px 0;list-style:none}.lp-content-wrap{width:1170px;max-width:90%;margin:0 auto}.lp-content-wrap>h2{margin-top:0;margin-bottom:26px;color:#333;font-size:30px;font-weight:600}.learn-press-breadcrumb{max-width:1170px;width:100%;margin:0 auto 45px auto;padding:0;color:#333;font-size:14px;font-weight:400;list-style:none}.learn-press-breadcrumb li{display:inline-block;margin:0}.learn-press-breadcrumb li a:hover{color:var(--lp-primary-color)}.learn-press-breadcrumb i{margin:0 5px;color:#666;font-size:12px}@media(max-width:1024px){.learn-press-breadcrumb{padding-right:15px;padding-left:15px}}.learn-press-breadcrumb a{color:#666;font-weight:500}.learnpress-page .lp-button,.learnpress-page #lp-button{padding:16px 24px;border:1px solid #ccc;color:#333;background:transparent;box-shadow:unset;font-family:inherit;font-size:16px;font-weight:400;line-height:1;text-align:center;vertical-align:middle;text-decoration:none;text-transform:capitalize;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.learnpress-page .lp-button.large,.learnpress-page #lp-button.large{height:52px;padding:18px 30px;font-size:18px}.learnpress-page .lp-button:hover,.learnpress-page #lp-button:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.learnpress-page .lp-button.btn-ajax-off .icon,.learnpress-page #lp-button.btn-ajax-off .icon{display:none}.learnpress-page .lp-button.btn-ajax-on .icon,.learnpress-page #lp-button.btn-ajax-on .icon{display:inline-block;margin-right:5px;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.learnpress-page .lp-button:focus,.learnpress-page #lp-button:focus{outline:0}.learnpress-page .lp-button.loading::before,.learnpress-page #lp-button.loading::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";animation:lp-rotating 1s linear infinite}.learnpress-page .rwmb-field .description{margin-top:8px;color:#999;font-size:smaller;font-style:italic}.btn-base{border-color:var(--lp-primary-color);color:white;background-color:var(--lp-primary-color)}.lp-ajax-message{display:none;margin-top:20px;padding:20px;border:2px solid #059601;border-radius:9px;font-size:15px;line-height:1.4}.lp-ajax-message.error{border-color:#d85554}.course-meta{margin-bottom:14px}.course-meta .course-students::before{font-family:"Font Awesome 5 Free";content:""}.lp-entry-content .course-tabs{margin-bottom:60px}.learn-press-checkout-comment h4{display:none}.order-comments{width:100%;padding:15px;min-height:150px;border:1px solid #ccc;resize:none}.learn-press-progress .progress-bg{overflow:hidden;position:relative;height:6px;background:#ccc;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.learn-press-progress .progress-bg .progress-active{position:absolute;left:50%;width:100%;height:100%;margin-left:-100%;background:var(--lp-primary-color);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.retake-course,.enroll-course,.purchase-course{display:inline-block}.table-orders{font-size:16px}.table-orders th,.table-orders td{padding:5px 10px}.form-button{display:inline-block}.learn-press-pagination{padding-bottom:20px;text-align:center}.learn-press-pagination .page-numbers{display:inline-block;margin:0;padding:0;border:0;outline:0;background:transparent;list-style:none}.learn-press-pagination .page-numbers>li{display:inline-block;margin:0;padding:0 14px}.learn-press-pagination .page-numbers>li .page-numbers{float:unset;padding:0;color:#666;background:transparent;font-size:16px;font-weight:300}.learn-press-pagination .page-numbers>li .page-numbers.current{color:var(--lp-primary-color);font-weight:400}.learn-press-pagination .page-numbers>li .page-numbers:hover{color:var(--lp-primary-color)}ul.list-table-nav{display:flex;margin-left:0;list-style:none}ul.list-table-nav .nav-text{text-align:left;flex:1}ul.list-table-nav .nav-pages{text-align:right;flex:1}ul.list-table-nav .nav-pages .learn-press-pagination{display:inline-block;margin-bottom:0}.primary-color{color:#00adff}.primary-color-before::before{color:#00adff}.primary-color-after::after{color:#00adff}.primary-background-color{background:#00adff}.primary-background-color{background:#00adff}.course-origin-price{margin-right:5px;font-size:85%;text-decoration:line-through}.course-item-nav{display:flex}.course-item-nav .prev span,.course-item-nav .next span{display:block;font-weight:bold}.course-item-nav .prev a,.course-item-nav .next a{color:#999}.course-item-nav .next{text-align:right}.content-item-wrap #comments{margin-right:0;margin-left:0}.content-item-wrap #comments #comment{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-summary-sidebar{position:relative}@media(min-width:769px){.course-summary-sidebar.slide-down .course-summary-sidebar__inner{position:fixed;top:0}}@media(min-width:1200px){.course-summary-sidebar.slide-top .course-summary-sidebar__inner{position:absolute}}.course-graduation span{color:#999}.course-graduation .icon{margin-right:5px;font-size:20px}.course-graduation.passed .icon{color:#059601}.course-graduation.error .icon{color:#d85554}.learn-press-template-warning::before{color:#ffc107;font-family:"Font Awesome 5 Free";content:"\f071"}.lp-badge{display:flex;height:30px;padding:0;line-height:1;align-items:center;justify-content:center}.lp-badge::before,.lp-badge::after{content:""}.lp-badge::before{display:inline-block;position:relative;z-index:10;color:#fff;font-weight:bold;line-height:1}.lp-badge.featured-course{position:absolute;z-index:1;top:25px;left:-110px;width:300px;background:#93f;text-align:center;transform:rotate(-45deg)}.lp-badge.featured-course::before{font-size:12px;text-transform:uppercase;content:attr(data-text)}@media(min-width:769px){#learn-press-item-comments{padding-bottom:50px}}.course-tabs input[name=learn-press-course-tab-radio],.course-tabs .course-tab-panel{display:none}.course-tabs .course-nav label{display:flex;align-items:center;justify-content:center;margin:0;padding:17px 10px;font-size:16px;line-height:1;font-weight:600;text-transform:capitalize;cursor:pointer}.no-event{pointer-events:none}@media screen and (max-width:768px){ul.learn-press-courses .course{width:48%}}@media screen and (max-width:600px){ul.learn-press-courses .course{width:100%;margin-right:0}}.course-price:empty{display:none !important}.quiz-attempts .attempts-heading{margin-bottom:15px}.quiz-attempts table{border-spacing:0;border-left:1px solid var(--lp-secondary-color);border-top:1px solid var(--lp-secondary-color);width:100%}.quiz-attempts table tr th,.quiz-attempts table tr td{border-right:1px solid var(--lp-secondary-color);border-bottom:1px solid var(--lp-secondary-color);padding:5px 15px;text-align:center}.quiz-attempts table tr th{font-weight:500}@media(max-width:575px){#popup-course .quiz-attempts{overflow-x:auto}}
|
@@ -41,10 +41,8 @@ const lpArchiveCourse = () => {
|
|
41 |
lpArchiveRequestCourse(filterCourses);
|
42 |
}
|
43 |
|
44 |
-
|
45 |
-
|
46 |
-
lpArchiveSearchCourse();
|
47 |
-
}
|
48 |
};
|
49 |
|
50 |
window.lpArchiveRequestCourse = (args, callBackSuccess) => {
|
41 |
lpArchiveRequestCourse(filterCourses);
|
42 |
}
|
43 |
|
44 |
+
lpArchivePaginationCourse();
|
45 |
+
lpArchiveSearchCourse();
|
|
|
|
|
46 |
};
|
47 |
|
48 |
window.lpArchiveRequestCourse = (args, callBackSuccess) => {
|
@@ -1 +1 @@
|
|
1 |
-
!function(){lpGlobalSettings.courses_url;const e=document.location.href;let t,r,o=JSON.parse(window.localStorage.getItem("lp_filter_courses"))||{},s=!1,n=1,c=null,a=null;lpGlobalSettings.is_course_archive&&(window.location.search.length||-1!==e.search("page")||(o={}));const l=(e,t)=>{const r=new URL(e);return Object.keys(t).forEach((e=>{r.searchParams.set(e,t[e])})),r};window.lpArchiveRequestCourse=(e,o)=>{const c=lpGlobalSettings.lp_rest_url;if(!c)return;if(!t)return;const u=a&&a.querySelector("div.lp-archive-courses .lp-content-area"),p=u&&u.querySelector("ul.learn-press-courses");if(!p)return;if(s)return;s=!0,r?p.append(t):r=t.outerHTML;const d=l(c+"lp/v1/courses/archive-course",{...lpArchiveSkeleton,...e});wp.apiFetch({path:"lp/v1/courses/archive-course"+d.search,method:"GET"}).then((e=>{void 0!==e.data.content&&p&&(p.innerHTML=e.data.content||"");const t=e.data.pagination,r=document.querySelector(".learn-press-pagination");if(r&&r.remove(),void 0!==t){const e=(new DOMParser).parseFromString(t,"text/html").querySelector(".learn-press-pagination");e&&(p.after(e),i())}wp.hooks.doAction("lp-js-get-courses",e),"function"==typeof o&&o(e)})).catch((e=>{p.innerHTML+=`<div class="lp-ajax-message error" style="display:block">${e.message||"Error: Query lp/v1/courses/archive-course"}</div>`})).finally((()=>{if(s=!1,jQuery("form.search-courses button").removeClass("loading"),n)n=0;else{const e={behavior:"smooth"};a.scrollIntoView(e)}window.localStorage.setItem("lp_filter_courses",JSON.stringify(e));const t=l(document.location,e);window.history.pushState("","",t)}))};const i=()=>{const e=document.querySelectorAll(".lp-archive-courses .learn-press-pagination .page-numbers");e.length>0&&e.forEach((r=>r.addEventListener("click",(o=>{if(o.preventDefault(),o.stopPropagation(),!a)return;t&&(t.style.display="block"),a.scrollIntoView({behavior:"smooth"});let s={};if(s=JSON.parse(window.localStorage.getItem("lp_filter_courses"))||{},o.currentTarget.getAttribute("href")){const t=[...e].filter((e=>e.classList.contains("current"))),n=o.currentTarget.textContent||r.classList.contains("next")&&parseInt(t[0].textContent)+1||r.classList.contains("prev")&&parseInt(t[0].textContent)-1;s.paged=n,lpArchiveRequestCourse({...s})}}))))};function u(){a=document.querySelector(".lp-archive-courses"),t=document.querySelector(".lp-archive-course-skeleton"),c=document.querySelector(".no-first-load-ajax"),t&&(t&&!c&&lpArchiveRequestCourse(o),
|
1 |
+
!function(){lpGlobalSettings.courses_url;const e=document.location.href;let t,r,o=JSON.parse(window.localStorage.getItem("lp_filter_courses"))||{},s=!1,n=1,c=null,a=null;lpGlobalSettings.is_course_archive&&(window.location.search.length||-1!==e.search("page")||(o={}));const l=(e,t)=>{const r=new URL(e);return Object.keys(t).forEach((e=>{r.searchParams.set(e,t[e])})),r};window.lpArchiveRequestCourse=(e,o)=>{const c=lpGlobalSettings.lp_rest_url;if(!c)return;if(!t)return;const u=a&&a.querySelector("div.lp-archive-courses .lp-content-area"),p=u&&u.querySelector("ul.learn-press-courses");if(!p)return;if(s)return;s=!0,r?p.append(t):r=t.outerHTML;const d=l(c+"lp/v1/courses/archive-course",{...lpArchiveSkeleton,...e});wp.apiFetch({path:"lp/v1/courses/archive-course"+d.search,method:"GET"}).then((e=>{void 0!==e.data.content&&p&&(p.innerHTML=e.data.content||"");const t=e.data.pagination,r=document.querySelector(".learn-press-pagination");if(r&&r.remove(),void 0!==t){const e=(new DOMParser).parseFromString(t,"text/html").querySelector(".learn-press-pagination");e&&(p.after(e),i())}wp.hooks.doAction("lp-js-get-courses",e),"function"==typeof o&&o(e)})).catch((e=>{p.innerHTML+=`<div class="lp-ajax-message error" style="display:block">${e.message||"Error: Query lp/v1/courses/archive-course"}</div>`})).finally((()=>{if(s=!1,jQuery("form.search-courses button").removeClass("loading"),n)n=0;else{const e={behavior:"smooth"};a.scrollIntoView(e)}window.localStorage.setItem("lp_filter_courses",JSON.stringify(e));const t=l(document.location,e);window.history.pushState("","",t)}))};const i=()=>{const e=document.querySelectorAll(".lp-archive-courses .learn-press-pagination .page-numbers");e.length>0&&e.forEach((r=>r.addEventListener("click",(o=>{if(o.preventDefault(),o.stopPropagation(),!a)return;t&&(t.style.display="block"),a.scrollIntoView({behavior:"smooth"});let s={};if(s=JSON.parse(window.localStorage.getItem("lp_filter_courses"))||{},o.currentTarget.getAttribute("href")){const t=[...e].filter((e=>e.classList.contains("current"))),n=o.currentTarget.textContent||r.classList.contains("next")&&parseInt(t[0].textContent)+1||r.classList.contains("prev")&&parseInt(t[0].textContent)-1;s.paged=n,lpArchiveRequestCourse({...s})}}))))};function u(){a=document.querySelector(".lp-archive-courses"),t=document.querySelector(".lp-archive-course-skeleton"),c=document.querySelector(".no-first-load-ajax"),t&&(t&&!c&&lpArchiveRequestCourse(o),i(),(()=>{const e=document.querySelectorAll("form.search-courses"),r=JSON.parse(window.localStorage.getItem("lp_filter_courses"))||{};e.forEach((e=>{const o=e.querySelector('input[name="c_search"]'),s=e.querySelector('[type="submit"]');let n;o.addEventListener("keyup",(e=>{t&&(t.style.display="block"),e.preventDefault();const o=e.target.value.trim();(!o||o&&o.length>2)&&(void 0!==n&&clearTimeout(n),n=setTimeout((function(){s.classList.add("loading"),r.c_search=o,r.paged=1,lpArchiveRequestCourse({...r})}),800))})),e.addEventListener("submit",(t=>{t.preventDefault();const r=e.querySelector('input[name="c_search"]');r&&r.dispatchEvent(new Event("keyup"))}))}))})()),(()=>{const e=document.querySelectorAll('.lp-archive-courses input[name="lp-switch-layout-btn"]');e.length>0&&e.forEach((e=>e.addEventListener("change",(e=>{e.preventDefault();const t=e.target.value;if(t){const e=document.querySelector(".lp-archive-courses .learn-press-courses[data-layout]");e&&(e.dataset.layout=t),LP.Cookies.set("courses-layout",t)}}))))})(),(()=>{const e=LP.Cookies.get("courses-layout"),t=document.querySelectorAll('.lp-courses-bar .switch-layout [name="lp-switch-layout-btn"]');t.length>0&&[...t].map((t=>t.value===e&&(t.checked=!0)))})()}document.addEventListener("DOMContentLoaded",(function(e){u()}))}();
|
@@ -38,10 +38,8 @@ const lpArchiveCourse = () => {
|
|
38 |
lpArchiveRequestCourse( filterCourses );
|
39 |
}
|
40 |
|
41 |
-
|
42 |
-
|
43 |
-
lpArchiveSearchCourse();
|
44 |
-
}
|
45 |
};
|
46 |
|
47 |
window.lpArchiveRequestCourse = ( args, callBackSuccess ) => {
|
38 |
lpArchiveRequestCourse( filterCourses );
|
39 |
}
|
40 |
|
41 |
+
lpArchivePaginationCourse();
|
42 |
+
lpArchiveSearchCourse();
|
|
|
|
|
43 |
};
|
44 |
|
45 |
window.lpArchiveRequestCourse = ( args, callBackSuccess ) => {
|
@@ -0,0 +1,96 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
const studentListCourse = () => {
|
3 |
+
const elementStudentList = document.querySelector( '.learnpress-course-student-list' );
|
4 |
+
|
5 |
+
if ( ! elementStudentList ) {
|
6 |
+
return;
|
7 |
+
}
|
8 |
+
|
9 |
+
const skeleton = elementStudentList.querySelector( '.lp-skeleton-animation' );
|
10 |
+
const eleParents = elementStudentList.querySelector( '.content-student-list' );
|
11 |
+
|
12 |
+
const Sekeleton = () => {
|
13 |
+
const extraQuery = {
|
14 |
+
status: '',
|
15 |
+
paged: 1,
|
16 |
+
};
|
17 |
+
|
18 |
+
getResponse( eleParents, extraQuery );
|
19 |
+
|
20 |
+
const select = document.querySelector( '.students-list-filter' );
|
21 |
+
|
22 |
+
if ( select != null ) {
|
23 |
+
select.addEventListener( 'change', function() {
|
24 |
+
eleParents.innerHTML = '';
|
25 |
+
skeleton.style.display = 'block';
|
26 |
+
extraQuery.status = this.value;
|
27 |
+
getResponse( eleParents, extraQuery );
|
28 |
+
} );
|
29 |
+
}
|
30 |
+
};
|
31 |
+
|
32 |
+
const getResponse = async ( ele, extraQuery, append = false, viewMoreEle ) => {
|
33 |
+
const courseID = ele.dataset.id;
|
34 |
+
const statusFilter = extraQuery?.status || '';
|
35 |
+
const paged = extraQuery?.paged || 1;
|
36 |
+
|
37 |
+
try {
|
38 |
+
const response = await wp.apiFetch( {
|
39 |
+
path: addQueryArgs( 'lp/v1/lazy-load/student-list', {
|
40 |
+
courseId: courseID || lpGlobalSettings.post_id || '',
|
41 |
+
status: statusFilter,
|
42 |
+
paged,
|
43 |
+
} ),
|
44 |
+
method: 'GET',
|
45 |
+
} );
|
46 |
+
|
47 |
+
const { data, status, message } = response;
|
48 |
+
|
49 |
+
if ( status === 'error' ) {
|
50 |
+
throw new Error( message || 'Error' );
|
51 |
+
}
|
52 |
+
|
53 |
+
if ( append ) {
|
54 |
+
ele.innerHTML += data.content;
|
55 |
+
} else {
|
56 |
+
ele.innerHTML = data.content;
|
57 |
+
}
|
58 |
+
|
59 |
+
if ( viewMoreEle ) {
|
60 |
+
viewMoreEle.classList.remove( 'loading' );
|
61 |
+
|
62 |
+
const paged = viewMoreEle.dataset.paged;
|
63 |
+
const numberPage = viewMoreEle.dataset.number;
|
64 |
+
|
65 |
+
if ( numberPage <= paged ) {
|
66 |
+
viewMoreEle.remove();
|
67 |
+
}
|
68 |
+
|
69 |
+
viewMoreEle.dataset.paged = parseInt( paged ) + 1;
|
70 |
+
}
|
71 |
+
viewMoreStudentList( ele, extraQuery );
|
72 |
+
} catch ( error ) {
|
73 |
+
ele.insertAdjacentHTML( 'beforeend', `<div class="learn-press-message error" style="display:block">${ error.message || 'Error: Query lp/v1/lazy-load/course-student-list' }</div>` );
|
74 |
+
}
|
75 |
+
|
76 |
+
skeleton.style.display = 'none';
|
77 |
+
};
|
78 |
+
|
79 |
+
const viewMoreStudentList = ( ele, extraQuery ) => {
|
80 |
+
const viewMoreEle = ele.querySelector( '.lp_student_list_button button.lp-button' );
|
81 |
+
|
82 |
+
if ( viewMoreEle ) {
|
83 |
+
viewMoreEle.addEventListener( 'click', ( e ) => {
|
84 |
+
e.preventDefault();
|
85 |
+
|
86 |
+
const paged = viewMoreEle && viewMoreEle.dataset.paged;
|
87 |
+
|
88 |
+
viewMoreEle.classList.add( 'loading' );
|
89 |
+
|
90 |
+
getResponse( ele.querySelector( 'ul.students' ), { ...extraQuery, ...{ paged } }, true, viewMoreEle );
|
91 |
+
} );
|
92 |
+
}
|
93 |
+
};
|
94 |
+
|
95 |
+
Sekeleton();
|
96 |
+
};
|
@@ -104,14 +104,14 @@ return apply_filters(
|
|
104 |
array(
|
105 |
'title' => esc_html__( 'Section Per Page', 'learnpress' ),
|
106 |
'id' => 'section_per_page',
|
107 |
-
'default' =>
|
108 |
'type' => 'number',
|
109 |
'desc' => esc_html__( 'Number of sections displayed per page ( Enter -1 for display all sections).', 'learnpress' ),
|
110 |
),
|
111 |
array(
|
112 |
'title' => esc_html__( 'Course Item Per Page', 'learnpress' ),
|
113 |
'id' => 'course_item_per_page',
|
114 |
-
'default' =>
|
115 |
'type' => 'number',
|
116 |
'desc' => esc_html__( 'Number of course items displayed per page in section ( Enter -1 for display all course items).', 'learnpress' ),
|
117 |
),
|
104 |
array(
|
105 |
'title' => esc_html__( 'Section Per Page', 'learnpress' ),
|
106 |
'id' => 'section_per_page',
|
107 |
+
'default' => 1,
|
108 |
'type' => 'number',
|
109 |
'desc' => esc_html__( 'Number of sections displayed per page ( Enter -1 for display all sections).', 'learnpress' ),
|
110 |
),
|
111 |
array(
|
112 |
'title' => esc_html__( 'Course Item Per Page', 'learnpress' ),
|
113 |
'id' => 'course_item_per_page',
|
114 |
+
'default' => 10,
|
115 |
'type' => 'number',
|
116 |
'desc' => esc_html__( 'Number of course items displayed per page in section ( Enter -1 for display all course items).', 'learnpress' ),
|
117 |
),
|
@@ -99,7 +99,7 @@ class LP_Addon {
|
|
99 |
|
100 |
foreach ( self::$_admin_notices as $notice ) {
|
101 |
?>
|
102 |
-
<div class="error"><p><?php echo $notice; ?></p></div>
|
103 |
<?php
|
104 |
}
|
105 |
}
|
99 |
|
100 |
foreach ( self::$_admin_notices as $notice ) {
|
101 |
?>
|
102 |
+
<div class="error"><p><?php echo wp_kses_post( $notice ); ?></p></div>
|
103 |
<?php
|
104 |
}
|
105 |
}
|
@@ -127,7 +127,7 @@ if ( ! class_exists( 'LP_Abstract_Shortcode_Courses' ) ) {
|
|
127 |
$post_ids = array();
|
128 |
}
|
129 |
|
130 |
-
$query = new LP_Query_Course( array( 'post__in' => $post_ids) );
|
131 |
$args = $query->get_wp_query_vars();
|
132 |
|
133 |
$query = new WP_Query( $args );
|
127 |
$post_ids = array();
|
128 |
}
|
129 |
|
130 |
+
$query = new LP_Query_Course( array( 'post__in' => $post_ids ) );
|
131 |
$args = $query->get_wp_query_vars();
|
132 |
|
133 |
$query = new WP_Query( $args );
|
@@ -382,10 +382,10 @@ if ( ! class_exists( 'LP_Admin_Ajax' ) ) {
|
|
382 |
public static function search_course_category() {
|
383 |
global $wpdb;
|
384 |
$sql = 'SELECT `t`.`term_id` as `id`, '
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
$s = '%' . filter_input( INPUT_GET, 'q' ) . '%';
|
390 |
$query = $wpdb->prepare( $sql, $s );
|
391 |
$items = $wpdb->get_results( $query );
|
@@ -516,8 +516,9 @@ if ( ! class_exists( 'LP_Admin_Ajax' ) ) {
|
|
516 |
* @param mixed $params (Optional) List of keys want to get from payload.
|
517 |
*
|
518 |
* @return array|bool|mixed|object
|
|
|
519 |
*/
|
520 |
-
public static function get_php_input( $params = '' ) {
|
521 |
static $data = false;
|
522 |
if ( false === $data ) {
|
523 |
try {
|
@@ -539,15 +540,16 @@ if ( ! class_exists( 'LP_Admin_Ajax' ) ) {
|
|
539 |
}
|
540 |
|
541 |
return $data;
|
542 |
-
}
|
543 |
|
544 |
/**
|
545 |
* Parse request content into var.
|
546 |
* Normally, parse and assign to $_POST or $_GET.
|
547 |
*
|
548 |
* @param $var
|
|
|
549 |
*/
|
550 |
-
public static function parsePhpInput( &$var ) {
|
551 |
$data = self::get_php_input();
|
552 |
|
553 |
if ( $data ) {
|
@@ -555,7 +557,7 @@ if ( ! class_exists( 'LP_Admin_Ajax' ) ) {
|
|
555 |
$var[ $k ] = $v;
|
556 |
}
|
557 |
}
|
558 |
-
}
|
559 |
|
560 |
public static function load_chart() {
|
561 |
if ( ! class_exists( 'LP_Submenu_Statistics' ) ) {
|
@@ -573,7 +575,7 @@ if ( ! class_exists( 'LP_Admin_Ajax' ) ) {
|
|
573 |
if ( method_exists( $wpdb, 'esc_like' ) ) {
|
574 |
$term = $wpdb->esc_like( $term );
|
575 |
} else {
|
576 |
-
$term =
|
577 |
}
|
578 |
|
579 |
$query->query_from .= " INNER JOIN {$wpdb->usermeta} AS user_name ON {$wpdb->users}.ID = user_name.user_id AND ( user_name.meta_key = 'first_name' OR user_name.meta_key = 'last_name' ) ";
|
@@ -666,7 +668,7 @@ if ( ! class_exists( 'LP_Admin_Ajax' ) ) {
|
|
666 |
* @author hungkv
|
667 |
*/
|
668 |
public static function update_order_exports() {
|
669 |
-
$order_id
|
670 |
$order = learn_press_get_order( $order_id );
|
671 |
$currency_symbol = learn_press_get_currency_symbol( $order->get_currency() );
|
672 |
|
@@ -679,7 +681,7 @@ if ( ! class_exists( 'LP_Admin_Ajax' ) ) {
|
|
679 |
)
|
680 |
);
|
681 |
$html = ob_get_clean();
|
682 |
-
echo $html;
|
683 |
die();
|
684 |
}
|
685 |
}
|
382 |
public static function search_course_category() {
|
383 |
global $wpdb;
|
384 |
$sql = 'SELECT `t`.`term_id` as `id`, '
|
385 |
+
. ' `t`.`name` `text` '
|
386 |
+
. " FROM {$wpdb->terms} t "
|
387 |
+
. " INNER JOIN {$wpdb->term_taxonomy} tt ON t.term_id = tt.term_id AND taxonomy='course_category' "
|
388 |
+
. ' WHERE `t`.`name` LIKE %s';
|
389 |
$s = '%' . filter_input( INPUT_GET, 'q' ) . '%';
|
390 |
$query = $wpdb->prepare( $sql, $s );
|
391 |
$items = $wpdb->get_results( $query );
|
516 |
* @param mixed $params (Optional) List of keys want to get from payload.
|
517 |
*
|
518 |
* @return array|bool|mixed|object
|
519 |
+
* @depecated 4.1.6.9
|
520 |
*/
|
521 |
+
/*public static function get_php_input( $params = '' ) {
|
522 |
static $data = false;
|
523 |
if ( false === $data ) {
|
524 |
try {
|
540 |
}
|
541 |
|
542 |
return $data;
|
543 |
+
}*/
|
544 |
|
545 |
/**
|
546 |
* Parse request content into var.
|
547 |
* Normally, parse and assign to $_POST or $_GET.
|
548 |
*
|
549 |
* @param $var
|
550 |
+
* @depecated 4.1.6.9
|
551 |
*/
|
552 |
+
/*public static function parsePhpInput( &$var ) {
|
553 |
$data = self::get_php_input();
|
554 |
|
555 |
if ( $data ) {
|
557 |
$var[ $k ] = $v;
|
558 |
}
|
559 |
}
|
560 |
+
}*/
|
561 |
|
562 |
public static function load_chart() {
|
563 |
if ( ! class_exists( 'LP_Submenu_Statistics' ) ) {
|
575 |
if ( method_exists( $wpdb, 'esc_like' ) ) {
|
576 |
$term = $wpdb->esc_like( $term );
|
577 |
} else {
|
578 |
+
$term = $wpdb->esc_like( $term );
|
579 |
}
|
580 |
|
581 |
$query->query_from .= " INNER JOIN {$wpdb->usermeta} AS user_name ON {$wpdb->users}.ID = user_name.user_id AND ( user_name.meta_key = 'first_name' OR user_name.meta_key = 'last_name' ) ";
|
668 |
* @author hungkv
|
669 |
*/
|
670 |
public static function update_order_exports() {
|
671 |
+
$order_id = absint( $_POST['order_id'] );
|
672 |
$order = learn_press_get_order( $order_id );
|
673 |
$currency_symbol = learn_press_get_currency_symbol( $order->get_currency() );
|
674 |
|
681 |
)
|
682 |
);
|
683 |
$html = ob_get_clean();
|
684 |
+
echo wp_kses_post( $html );
|
685 |
die();
|
686 |
}
|
687 |
}
|
@@ -77,9 +77,9 @@ if ( ! class_exists( 'LP_Admin_Dashboard' ) ) {
|
|
77 |
);
|
78 |
?>
|
79 |
|
80 |
-
<span class="count-rating">(<?php echo $eduma_data['rating']['count']; ?>)</span>
|
81 |
<span>
|
82 |
-
- <?php echo $eduma_data['number_of_sales']
|
83 |
</span>
|
84 |
</div>
|
85 |
<?php endif; ?>
|
77 |
);
|
78 |
?>
|
79 |
|
80 |
+
<span class="count-rating">(<?php echo esc_html( $eduma_data['rating']['count'] ); ?>)</span>
|
81 |
<span>
|
82 |
+
- <?php echo sprintf( '%d %s', esc_html( $eduma_data['number_of_sales'] ), esc_html__( ' sales', 'learnpress' ) ); ?>
|
83 |
</span>
|
84 |
</div>
|
85 |
<?php endif; ?>
|
@@ -375,7 +375,7 @@ if ( ! class_exists( 'LP_Admin' ) ) {
|
|
375 |
switch ( $column_name ) {
|
376 |
case 'lp-page':
|
377 |
if ( ! empty( $pages['learnpress'][ $post ] ) ) {
|
378 |
-
echo $pages['learnpress'][ $post ];
|
379 |
}
|
380 |
|
381 |
foreach ( $pages as $plugin => $plugin_pages ) {
|
@@ -867,48 +867,54 @@ if ( ! class_exists( 'LP_Admin' ) ) {
|
|
867 |
* @param string $new_slug
|
868 |
* @param WP_Post|null $post
|
869 |
*
|
870 |
-
* @return
|
871 |
* @author tungnx
|
872 |
* @since 3.2.7.5
|
|
|
873 |
*/
|
874 |
public function lp_course_set_link_item_backend( $post_link = '', $post_id = 0, $new_title = '', $new_slug = '', $post = null ) {
|
875 |
if ( ! in_array( $post->post_type, learn_press_get_course_item_types() ) ) {
|
876 |
return $post_link;
|
877 |
}
|
878 |
|
879 |
-
|
880 |
-
|
881 |
|
882 |
-
|
883 |
-
|
884 |
|
885 |
-
|
886 |
-
|
887 |
|
888 |
-
|
889 |
-
|
890 |
|
891 |
-
|
892 |
-
|
893 |
-
|
894 |
-
|
895 |
|
896 |
-
|
897 |
-
|
898 |
-
|
899 |
-
|
900 |
-
|
901 |
-
|
902 |
-
|
903 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
904 |
}
|
905 |
-
} else {
|
906 |
-
// $post_link_preview = sprintf( '<a class="button" href="%s" target="_blank">%s</a>', learn_press_get_preview_url( $post_id ), __( 'Preview', 'learnpress' ) );
|
907 |
-
$post_link_message = '<span>' . __(
|
908 |
-
'Permalink only available if the item is already assigned to a course.',
|
909 |
-
'learnpress'
|
910 |
-
) . '</span>';
|
911 |
-
$post_link = sprintf( '<div id="learn-press-box-edit-slug">%s</div>', $post_link_message );
|
912 |
}
|
913 |
|
914 |
return $post_link;
|
375 |
switch ( $column_name ) {
|
376 |
case 'lp-page':
|
377 |
if ( ! empty( $pages['learnpress'][ $post ] ) ) {
|
378 |
+
echo wp_kses_post( $pages['learnpress'][ $post ] );
|
379 |
}
|
380 |
|
381 |
foreach ( $pages as $plugin => $plugin_pages ) {
|
867 |
* @param string $new_slug
|
868 |
* @param WP_Post|null $post
|
869 |
*
|
870 |
+
* @return string
|
871 |
* @author tungnx
|
872 |
* @since 3.2.7.5
|
873 |
+
* @version 4.0.1
|
874 |
*/
|
875 |
public function lp_course_set_link_item_backend( $post_link = '', $post_id = 0, $new_title = '', $new_slug = '', $post = null ) {
|
876 |
if ( ! in_array( $post->post_type, learn_press_get_course_item_types() ) ) {
|
877 |
return $post_link;
|
878 |
}
|
879 |
|
880 |
+
try {
|
881 |
+
$course_id_of_item = LP_Course_DB::getInstance()->get_course_by_item_id( $post->ID );
|
882 |
|
883 |
+
if ( $course_id_of_item ) {
|
884 |
+
$course = learn_press_get_course( $course_id_of_item );
|
885 |
|
886 |
+
if ( $course ) {
|
887 |
+
$link_item = $course->get_item_link( $post->ID );
|
888 |
|
889 |
+
$post_slug = $post->post_name;
|
890 |
+
$link_item_edit_slug = preg_replace( '/' . $post_slug . '$/', '', $link_item );
|
891 |
|
892 |
+
// For update new slug
|
893 |
+
if ( $new_slug ) {
|
894 |
+
$post_slug = $new_slug;
|
895 |
+
}
|
896 |
|
897 |
+
$post_link = '<strong>Permalink: </strong>';
|
898 |
+
$post_link .= '<span id="sample-permalink">';
|
899 |
+
$post_link .= '<a href="' . $link_item . '">' . $link_item_edit_slug . '<span id="editable-post-name">' . $post_slug . '</span>/</a>';
|
900 |
+
$post_link .= '</span>';
|
901 |
+
$post_link .= '‎<span id="edit-slug-buttons">';
|
902 |
+
$post_link .= '<button type="button" class="edit-slug button button-small hide-if-no-js" aria-label="Edit permalink">Edit</button>';
|
903 |
+
$post_link .= '</span>';
|
904 |
+
$post_link .= '<span id="editable-post-name-full">' . $post_slug . '</span>';
|
905 |
+
}
|
906 |
+
} else {
|
907 |
+
// $post_link_preview = sprintf( '<a class="button" href="%s" target="_blank">%s</a>', learn_press_get_preview_url( $post_id ), __( 'Preview', 'learnpress' ) );
|
908 |
+
$post_link_message = '<span>' . __(
|
909 |
+
'Permalink only available if the item is already assigned to a course.',
|
910 |
+
'learnpress'
|
911 |
+
) . '</span>';
|
912 |
+
$post_link = sprintf( '<div id="learn-press-box-edit-slug">%s</div>', $post_link_message );
|
913 |
+
}
|
914 |
+
} catch ( Throwable $e ) {
|
915 |
+
if ( LP_Debug::is_debug() ) {
|
916 |
+
error_log( $e->getMessage() );
|
917 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
918 |
}
|
919 |
|
920 |
return $post_link;
|
@@ -133,39 +133,6 @@ class LP_Install_Sample_Data {
|
|
133 |
throw new Exception( 'Create course failed.' );
|
134 |
}
|
135 |
|
136 |
-
$hooks = LP_Helper::sanitize_params_submitted( $_REQUEST['hooks'] ?? array() );
|
137 |
-
|
138 |
-
if ( ! empty( $hooks ) ) {
|
139 |
-
$hooks = (array) json_decode( $hooks );
|
140 |
-
|
141 |
-
/*$wpml_settings = array();
|
142 |
-
global $wpdb;
|
143 |
-
$wpml = new WPML_Admin_Post_Actions( $wpml_settings, $wpdb );
|
144 |
-
$wpml->save_post_actions( $course_id, get_post( $course_id ) );*/
|
145 |
-
|
146 |
-
$args = array();
|
147 |
-
if ( ! empty( $hooks ) ) {
|
148 |
-
foreach ( $hooks as $hook ) {
|
149 |
-
if ( isset( $hook->class ) && isset( $hook->action ) ) {
|
150 |
-
$class_name = $hook->class;
|
151 |
-
$action_name = $hook->action;
|
152 |
-
|
153 |
-
switch ( $action_name ) {
|
154 |
-
case 'save_post':
|
155 |
-
$args = $course_id;
|
156 |
-
break;
|
157 |
-
default:
|
158 |
-
break;
|
159 |
-
}
|
160 |
-
|
161 |
-
if ( is_callable( array( $class_name, $action_name ) ) ) {
|
162 |
-
call_user_func( array( $class_name, $action_name ), $args );
|
163 |
-
}
|
164 |
-
}
|
165 |
-
}
|
166 |
-
}
|
167 |
-
}
|
168 |
-
|
169 |
$this->create_sections( $course_id );
|
170 |
|
171 |
$price = LP_Request::get( 'course-price' );
|
@@ -182,6 +149,7 @@ class LP_Install_Sample_Data {
|
|
182 |
array(
|
183 |
'handle_name' => 'save_post',
|
184 |
'course_id' => $course_id,
|
|
|
185 |
)
|
186 |
)->dispatch();
|
187 |
?>
|
@@ -199,7 +167,7 @@ class LP_Install_Sample_Data {
|
|
199 |
} catch ( Exception $ex ) {
|
200 |
//LP_Debug::rollbackTransaction();
|
201 |
echo '<div class="lp-install-sample__response fail">';
|
202 |
-
echo $ex->getMessage();
|
203 |
echo '</div>';
|
204 |
}
|
205 |
|
@@ -445,19 +413,15 @@ class LP_Install_Sample_Data {
|
|
445 |
* @param int $course_id
|
446 |
*/
|
447 |
protected function create_sections( $course_id ) {
|
448 |
-
|
449 |
$section_length = call_user_func_array( 'rand', ( self::$section_range ) );
|
450 |
|
451 |
for ( $i = 1; $i <= $section_length; $i ++ ) {
|
452 |
$section_id = $this->create_section( 'Section ' . $i, $course_id );
|
453 |
|
454 |
if ( $section_id ) {
|
455 |
-
|
456 |
$this->create_section_items( $section_id, $course_id );
|
457 |
-
|
458 |
}
|
459 |
}
|
460 |
-
|
461 |
}
|
462 |
|
463 |
/**
|
133 |
throw new Exception( 'Create course failed.' );
|
134 |
}
|
135 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
136 |
$this->create_sections( $course_id );
|
137 |
|
138 |
$price = LP_Request::get( 'course-price' );
|
149 |
array(
|
150 |
'handle_name' => 'save_post',
|
151 |
'course_id' => $course_id,
|
152 |
+
'data' => [ 'data_sample' => 1 ],
|
153 |
)
|
154 |
)->dispatch();
|
155 |
?>
|
167 |
} catch ( Exception $ex ) {
|
168 |
//LP_Debug::rollbackTransaction();
|
169 |
echo '<div class="lp-install-sample__response fail">';
|
170 |
+
echo wp_kses_post( $ex->getMessage() );
|
171 |
echo '</div>';
|
172 |
}
|
173 |
|
413 |
* @param int $course_id
|
414 |
*/
|
415 |
protected function create_sections( $course_id ) {
|
|
|
416 |
$section_length = call_user_func_array( 'rand', ( self::$section_range ) );
|
417 |
|
418 |
for ( $i = 1; $i <= $section_length; $i ++ ) {
|
419 |
$section_id = $this->create_section( 'Section ' . $i, $course_id );
|
420 |
|
421 |
if ( $section_id ) {
|
|
|
422 |
$this->create_section_items( $section_id, $course_id );
|
|
|
423 |
}
|
424 |
}
|
|
|
425 |
}
|
426 |
|
427 |
/**
|
@@ -231,9 +231,6 @@ if ( ! class_exists( 'LP_Modal_Search_Items' ) ) {
|
|
231 |
// @since 3.0.0
|
232 |
$item_not_found = apply_filters( 'learn-press/modal-search-items/not-found', __( 'No item found', 'learnpress' ), $this->_options['type'] );
|
233 |
|
234 |
-
// @deprecated
|
235 |
-
$item_not_found = apply_filters( 'learn_press_modal_search_items_not_found', $item_not_found );
|
236 |
-
|
237 |
echo '<li>' . $item_not_found . '</li>';
|
238 |
}
|
239 |
|
231 |
// @since 3.0.0
|
232 |
$item_not_found = apply_filters( 'learn-press/modal-search-items/not-found', __( 'No item found', 'learnpress' ), $this->_options['type'] );
|
233 |
|
|
|
|
|
|
|
234 |
echo '<li>' . $item_not_found . '</li>';
|
235 |
}
|
236 |
|
@@ -229,7 +229,7 @@ class LP_Plugin_Install_List_Table extends WP_List_Table {
|
|
229 |
?>
|
230 |
<div class="wp-list-table <?php echo implode( ' ', $this->get_table_classes() ); ?>">
|
231 |
|
232 |
-
<div id="the-list"<?php echo $data_attr; ?>>
|
233 |
<?php $this->display_rows_or_placeholder(); ?>
|
234 |
</div>
|
235 |
</div>
|
@@ -450,7 +450,7 @@ class LP_Plugin_Install_List_Table extends WP_List_Table {
|
|
450 |
<div class="plugin-card-top">
|
451 |
<a href="<?php echo esc_url_raw( $details_link ); ?>" class="thickbox plugin-icon"><img src="<?php echo esc_attr( $plugin_icon_url ); ?>" /></a>
|
452 |
<div class="name column-name">
|
453 |
-
<h3><a href="<?php echo esc_url_raw( $details_link ); ?>" class="thickbox"><?php echo $title; ?></a></h3>
|
454 |
</div>
|
455 |
<div class="action-links">
|
456 |
<?php
|
@@ -461,8 +461,8 @@ class LP_Plugin_Install_List_Table extends WP_List_Table {
|
|
461 |
?>
|
462 |
</div>
|
463 |
<div class="desc column-description">
|
464 |
-
<p><?php echo $description; ?></p>
|
465 |
-
<p class="authors"><?php echo $author; ?></p>
|
466 |
</div>
|
467 |
</div>
|
468 |
<div class="plugin-card-bottom">
|
229 |
?>
|
230 |
<div class="wp-list-table <?php echo implode( ' ', $this->get_table_classes() ); ?>">
|
231 |
|
232 |
+
<div id="the-list"<?php echo esc_attr( $data_attr ); ?>>
|
233 |
<?php $this->display_rows_or_placeholder(); ?>
|
234 |
</div>
|
235 |
</div>
|
450 |
<div class="plugin-card-top">
|
451 |
<a href="<?php echo esc_url_raw( $details_link ); ?>" class="thickbox plugin-icon"><img src="<?php echo esc_attr( $plugin_icon_url ); ?>" /></a>
|
452 |
<div class="name column-name">
|
453 |
+
<h3><a href="<?php echo esc_url_raw( $details_link ); ?>" class="thickbox"><?php echo wp_kses_post( $title ); ?></a></h3>
|
454 |
</div>
|
455 |
<div class="action-links">
|
456 |
<?php
|
461 |
?>
|
462 |
</div>
|
463 |
<div class="desc column-description">
|
464 |
+
<p><?php echo wp_kses_post( $description ); ?></p>
|
465 |
+
<p class="authors"><?php echo wp_kses_post( $author ); ?></p>
|
466 |
</div>
|
467 |
</div>
|
468 |
<div class="plugin-card-bottom">
|
@@ -22,8 +22,8 @@ class LP_Post_Type_Actions {
|
|
22 |
*/
|
23 |
protected function __construct() {
|
24 |
//add_action( 'save_post', array( $this, 'save_post' ) );
|
25 |
-
add_action( 'learn-press/added-item-to-section', array( $this, 'added_item_to_section' ), 10, 3 );
|
26 |
-
add_action( 'learn-press/removed-item-from-section', array( $this, 'removed_item_from_section' ), 10, 2 );
|
27 |
|
28 |
add_filter( 'pre_trash_post', array( $this, 'pre_trash_post' ), 10, 2 );
|
29 |
add_filter( 'trashed_post', array( $this, 'trashed_post' ), 1000, 1 );
|
@@ -107,7 +107,7 @@ class LP_Post_Type_Actions {
|
|
107 |
|
108 |
foreach ( $course_ids as $course_id ) {
|
109 |
$curd->remove_item( $post_id, $course_id );
|
110 |
-
do_action( 'learn-press/removed-course-item', $course_id );
|
111 |
}
|
112 |
|
113 |
$this->delete( 'item-courses-' . $post_id );
|
@@ -139,13 +139,13 @@ class LP_Post_Type_Actions {
|
|
139 |
}
|
140 |
}*/
|
141 |
|
142 |
-
public function added_item_to_section( $item, $section_id, $course_id ) {
|
143 |
do_action( 'learn-press/added-course-item', $item['id'], $course_id );
|
144 |
-
}
|
145 |
|
146 |
-
public function removed_item_from_section( $item, $course_id ) {
|
147 |
do_action( 'learn-press/removed-course-item', $course_id );
|
148 |
-
}
|
149 |
|
150 |
/**
|
151 |
* @editor tungnx
|
22 |
*/
|
23 |
protected function __construct() {
|
24 |
//add_action( 'save_post', array( $this, 'save_post' ) );
|
25 |
+
//add_action( 'learn-press/added-item-to-section', array( $this, 'added_item_to_section' ), 10, 3 );
|
26 |
+
//add_action( 'learn-press/removed-item-from-section', array( $this, 'removed_item_from_section' ), 10, 2 );
|
27 |
|
28 |
add_filter( 'pre_trash_post', array( $this, 'pre_trash_post' ), 10, 2 );
|
29 |
add_filter( 'trashed_post', array( $this, 'trashed_post' ), 1000, 1 );
|
107 |
|
108 |
foreach ( $course_ids as $course_id ) {
|
109 |
$curd->remove_item( $post_id, $course_id );
|
110 |
+
//do_action( 'learn-press/removed-course-item', $course_id );
|
111 |
}
|
112 |
|
113 |
$this->delete( 'item-courses-' . $post_id );
|
139 |
}
|
140 |
}*/
|
141 |
|
142 |
+
/*public function added_item_to_section( $item, $section_id, $course_id ) {
|
143 |
do_action( 'learn-press/added-course-item', $item['id'], $course_id );
|
144 |
+
}*/
|
145 |
|
146 |
+
/*public function removed_item_from_section( $item, $course_id ) {
|
147 |
do_action( 'learn-press/removed-course-item', $course_id );
|
148 |
+
}*/
|
149 |
|
150 |
/**
|
151 |
* @editor tungnx
|
@@ -178,10 +178,10 @@ class LP_Reset_Data {
|
|
178 |
}
|
179 |
|
180 |
public static function ajax_reset_user_courses() {
|
181 |
-
$user_id
|
182 |
-
$course_id
|
183 |
$object_reset = LP_Request::get_string( 'object_reset' );
|
184 |
-
$user
|
185 |
if ( ! current_user_can( 'administrator' ) ) {
|
186 |
return;
|
187 |
}
|
@@ -190,10 +190,10 @@ class LP_Reset_Data {
|
|
190 |
|
191 |
// Set status, start_time, end_time of course to enrolled.
|
192 |
$user_course_data->set_status( LP_COURSE_ENROLLED )
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
// Remove items' course user learned.
|
198 |
$filter_remove = new LP_User_Items_Filter();
|
199 |
$filter_remove->parent_id = $user_course_data->get_user_item_id();
|
@@ -203,11 +203,14 @@ class LP_Reset_Data {
|
|
203 |
}
|
204 |
if ( $object_reset == 'all' && $user_id ) {
|
205 |
global $wpdb;
|
206 |
-
$query
|
|
|
207 |
SELECT item_id
|
208 |
FROM {$wpdb->learnpress_user_items}
|
209 |
WHERE user_id = %d AND item_type='lp_course'
|
210 |
-
|
|
|
|
|
211 |
$user_item_ids = $wpdb->get_col( $query );
|
212 |
if ( $user_item_ids ) {
|
213 |
foreach ( $user_item_ids as $user_item_id ) {
|
@@ -216,10 +219,10 @@ class LP_Reset_Data {
|
|
216 |
|
217 |
// Set status, start_time, end_time of course to enrolled.
|
218 |
$user_course_data->set_status( LP_COURSE_ENROLLED )
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
// Remove items' course user learned.
|
224 |
$filter_remove = new LP_User_Items_Filter();
|
225 |
$filter_remove->parent_id = $user_course_data->get_user_item_id();
|
178 |
}
|
179 |
|
180 |
public static function ajax_reset_user_courses() {
|
181 |
+
$user_id = LP_Request::get_int( 'user_id' );
|
182 |
+
$course_id = LP_Request::get_int( 'course_id' );
|
183 |
$object_reset = LP_Request::get_string( 'object_reset' );
|
184 |
+
$user = learn_press_get_user( $user_id );
|
185 |
if ( ! current_user_can( 'administrator' ) ) {
|
186 |
return;
|
187 |
}
|
190 |
|
191 |
// Set status, start_time, end_time of course to enrolled.
|
192 |
$user_course_data->set_status( LP_COURSE_ENROLLED )
|
193 |
+
->set_start_time( current_time( 'mysql', true ) )
|
194 |
+
->set_end_time( '' )
|
195 |
+
->set_graduation( 'in-progress' )
|
196 |
+
->update();
|
197 |
// Remove items' course user learned.
|
198 |
$filter_remove = new LP_User_Items_Filter();
|
199 |
$filter_remove->parent_id = $user_course_data->get_user_item_id();
|
203 |
}
|
204 |
if ( $object_reset == 'all' && $user_id ) {
|
205 |
global $wpdb;
|
206 |
+
$query = $wpdb->prepare(
|
207 |
+
"
|
208 |
SELECT item_id
|
209 |
FROM {$wpdb->learnpress_user_items}
|
210 |
WHERE user_id = %d AND item_type='lp_course'
|
211 |
+
",
|
212 |
+
$user_id
|
213 |
+
);
|
214 |
$user_item_ids = $wpdb->get_col( $query );
|
215 |
if ( $user_item_ids ) {
|
216 |
foreach ( $user_item_ids as $user_item_id ) {
|
219 |
|
220 |
// Set status, start_time, end_time of course to enrolled.
|
221 |
$user_course_data->set_status( LP_COURSE_ENROLLED )
|
222 |
+
->set_start_time( current_time( 'mysql', true ) )
|
223 |
+
->set_end_time( '' )
|
224 |
+
->set_graduation( 'in-progress' )
|
225 |
+
->update();
|
226 |
// Remove items' course user learned.
|
227 |
$filter_remove = new LP_User_Items_Filter();
|
228 |
$filter_remove->parent_id = $user_course_data->get_user_item_id();
|
@@ -1 +1 @@
|
|
1 |
-
<?php // Silence is golden.
|
1 |
+
<?php // Silence is golden.
|
@@ -40,11 +40,11 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
|
|
40 |
$args = wp_parse_args(
|
41 |
$_REQUEST,
|
42 |
array(
|
43 |
-
'id' =>
|
44 |
'type' => '',
|
45 |
)
|
46 |
);
|
47 |
-
$course_id = $args['id'];
|
48 |
$course = learn_press_get_course( $course_id );
|
49 |
|
50 |
if ( ! $course ) {
|
@@ -58,6 +58,9 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
|
|
58 |
|
59 |
$this->call( $args['type'], array( $args ) );
|
60 |
|
|
|
|
|
|
|
61 |
return $this->get_result();
|
62 |
}
|
63 |
|
@@ -110,11 +113,11 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
|
|
110 |
return;
|
111 |
}
|
112 |
|
113 |
-
|
114 |
-
$this->result = $this->section_curd->
|
115 |
|
116 |
// update final quiz
|
117 |
-
|
118 |
}
|
119 |
|
120 |
/**
|
@@ -123,14 +126,18 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
|
|
123 |
* @return mixed
|
124 |
*/
|
125 |
public function update_section( $args = array() ) {
|
126 |
-
$section =
|
127 |
$section = json_decode( wp_unslash( $section ), true );
|
128 |
|
129 |
if ( ! $section ) {
|
130 |
return false;
|
131 |
}
|
132 |
|
133 |
-
$
|
|
|
|
|
|
|
|
|
134 |
'section_id' => $section['id'],
|
135 |
'section_name' => $section['title'],
|
136 |
'section_description' => $section['description'],
|
@@ -138,7 +145,7 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
|
|
138 |
'section_course_id' => $section['course_id'],
|
139 |
);
|
140 |
|
141 |
-
$this->result = $this->section_curd->update( $
|
142 |
|
143 |
return true;
|
144 |
}
|
@@ -166,8 +173,8 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
|
|
166 |
* @return mixed
|
167 |
*/
|
168 |
public function new_section( $args = array() ) {
|
169 |
-
$section_name =
|
170 |
-
$temp_id =
|
171 |
|
172 |
$args = array(
|
173 |
'section_course_id' => $this->course->get_id(),
|
@@ -217,8 +224,8 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
|
|
217 |
* @return mixed
|
218 |
*/
|
219 |
public function remove_section_item( $args = array() ) {
|
220 |
-
$section_id = $args['section_id'] ??
|
221 |
-
$item_id = $args['item_id'] ??
|
222 |
|
223 |
try {
|
224 |
// Instructor only remove item in my item.
|
@@ -246,8 +253,8 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
|
|
246 |
* @return mixed
|
247 |
*/
|
248 |
public function delete_section_item( $args = array() ) {
|
249 |
-
$section_id = $args['section_id'] ??
|
250 |
-
$item_id = $args['item_id'] ??
|
251 |
|
252 |
try {
|
253 |
// Instructor only remove item in my item.
|
@@ -273,8 +280,8 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
|
|
273 |
* @return array|bool
|
274 |
*/
|
275 |
public function new_section_item( $args = array() ) {
|
276 |
-
$section_id =
|
277 |
-
$item =
|
278 |
$item = json_decode( wp_unslash( $item ), true );
|
279 |
|
280 |
if ( ! ( $section_id && $item ) ) {
|
@@ -284,7 +291,7 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
|
|
284 |
// create new lesson, quiz and add to course
|
285 |
$this->result = $this->section_curd->new_item( $section_id, $item );
|
286 |
|
287 |
-
|
288 |
|
289 |
return true;
|
290 |
}
|
@@ -295,8 +302,8 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
|
|
295 |
* @return mixed
|
296 |
*/
|
297 |
public function update_section_items( $args = array() ) {
|
298 |
-
$section_id =
|
299 |
-
$items =
|
300 |
$items = json_decode( wp_unslash( $items ), true );
|
301 |
|
302 |
if ( ! ( $section_id && $items ) ) {
|
@@ -305,7 +312,7 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
|
|
305 |
|
306 |
$this->result = $this->section_curd->update_section_items( $section_id, $items );
|
307 |
|
308 |
-
|
309 |
|
310 |
return true;
|
311 |
}
|
40 |
$args = wp_parse_args(
|
41 |
$_REQUEST,
|
42 |
array(
|
43 |
+
'id' => 0,
|
44 |
'type' => '',
|
45 |
)
|
46 |
);
|
47 |
+
$course_id = $args['id'] ?? 0;
|
48 |
$course = learn_press_get_course( $course_id );
|
49 |
|
50 |
if ( ! $course ) {
|
58 |
|
59 |
$this->call( $args['type'], array( $args ) );
|
60 |
|
61 |
+
$course_post = get_post( $course_id );
|
62 |
+
LP_Course_Post_Type::instance()->save( $course_id, $course_post );
|
63 |
+
|
64 |
return $this->get_result();
|
65 |
}
|
66 |
|
113 |
return;
|
114 |
}
|
115 |
|
116 |
+
//$this->course ? $this->course->get_sections() : '';
|
117 |
+
$this->result = $this->section_curd->update_sections_order( $order );
|
118 |
|
119 |
// update final quiz
|
120 |
+
//$this->section_curd->update_final_item();
|
121 |
}
|
122 |
|
123 |
/**
|
126 |
* @return mixed
|
127 |
*/
|
128 |
public function update_section( $args = array() ) {
|
129 |
+
$section = $args['section'] ?? false;
|
130 |
$section = json_decode( wp_unslash( $section ), true );
|
131 |
|
132 |
if ( ! $section ) {
|
133 |
return false;
|
134 |
}
|
135 |
|
136 |
+
if ( ! isset( $section['course_id'] ) && ! isset( $section['id'] ) ) {
|
137 |
+
return false;
|
138 |
+
}
|
139 |
+
|
140 |
+
$data = array(
|
141 |
'section_id' => $section['id'],
|
142 |
'section_name' => $section['title'],
|
143 |
'section_description' => $section['description'],
|
145 |
'section_course_id' => $section['course_id'],
|
146 |
);
|
147 |
|
148 |
+
$this->result = $this->section_curd->update( $data );
|
149 |
|
150 |
return true;
|
151 |
}
|
173 |
* @return mixed
|
174 |
*/
|
175 |
public function new_section( $args = array() ) {
|
176 |
+
$section_name = $args['section_name'] ?? '';
|
177 |
+
$temp_id = $args['temp_id'] ?? 0;
|
178 |
|
179 |
$args = array(
|
180 |
'section_course_id' => $this->course->get_id(),
|
224 |
* @return mixed
|
225 |
*/
|
226 |
public function remove_section_item( $args = array() ) {
|
227 |
+
$section_id = $args['section_id'] ?? 0;
|
228 |
+
$item_id = $args['item_id'] ?? 0;
|
229 |
|
230 |
try {
|
231 |
// Instructor only remove item in my item.
|
253 |
* @return mixed
|
254 |
*/
|
255 |
public function delete_section_item( $args = array() ) {
|
256 |
+
$section_id = $args['section_id'] ?? 0;
|
257 |
+
$item_id = $args['item_id'] ?? 0;
|
258 |
|
259 |
try {
|
260 |
// Instructor only remove item in my item.
|
280 |
* @return array|bool
|
281 |
*/
|
282 |
public function new_section_item( $args = array() ) {
|
283 |
+
$section_id = $args['section_id'] ?? 0;
|
284 |
+
$item = $args['item'] ?? '';
|
285 |
$item = json_decode( wp_unslash( $item ), true );
|
286 |
|
287 |
if ( ! ( $section_id && $item ) ) {
|
291 |
// create new lesson, quiz and add to course
|
292 |
$this->result = $this->section_curd->new_item( $section_id, $item );
|
293 |
|
294 |
+
//$this->section_curd->update_final_item();
|
295 |
|
296 |
return true;
|
297 |
}
|
302 |
* @return mixed
|
303 |
*/
|
304 |
public function update_section_items( $args = array() ) {
|
305 |
+
$section_id = $args['section_id'] ?? 0;
|
306 |
+
$items = $args['items'] ?? '';
|
307 |
$items = json_decode( wp_unslash( $items ), true );
|
308 |
|
309 |
if ( ! ( $section_id && $items ) ) {
|
312 |
|
313 |
$this->result = $this->section_curd->update_section_items( $section_id, $items );
|
314 |
|
315 |
+
//$this->section_curd->update_final_item();
|
316 |
|
317 |
return true;
|
318 |
}
|
@@ -1 +1 @@
|
|
1 |
-
<?php // Silence is golden.
|
1 |
+
<?php // Silence is golden.
|
@@ -116,45 +116,45 @@ add_action( 'pre_get_posts', '_learn_press_set_user_items', 10 );*/
|
|
116 |
/**
|
117 |
* Update permalink structure for course
|
118 |
*/
|
119 |
-
function learn_press_update_permalink_structure() {
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
}
|
157 |
-
add_action( 'init', 'learn_press_update_permalink_structure' );
|
158 |
|
159 |
/**
|
160 |
* Active Courses menu under LearnPress
|
116 |
/**
|
117 |
* Update permalink structure for course
|
118 |
*/
|
119 |
+
// function learn_press_update_permalink_structure() {
|
120 |
+
// global $pagenow;
|
121 |
+
|
122 |
+
// if ( $pagenow != 'options-permalink.php' ) {
|
123 |
+
// return;
|
124 |
+
// }
|
125 |
+
|
126 |
+
// if ( strtolower( $_SERVER['REQUEST_METHOD'] ) != 'post' ) {
|
127 |
+
// return;
|
128 |
+
// }
|
129 |
+
|
130 |
+
// $rewrite_prefix = '';
|
131 |
+
// $permalink_structure = ! empty( $_REQUEST['permalink_structure'] ) ? $_REQUEST['permalink_structure'] : '';
|
132 |
+
|
133 |
+
// if ( $permalink_structure ) {
|
134 |
+
// $rewrite_prefix = array();
|
135 |
+
// $segs = explode( '/', $permalink_structure );
|
136 |
+
|
137 |
+
// if ( sizeof( $segs ) ) {
|
138 |
+
// foreach ( $segs as $seg ) {
|
139 |
+
// if ( strpos( $seg, '%' ) !== false || $seg == 'archives' ) {
|
140 |
+
// break;
|
141 |
+
// }
|
142 |
+
// $rewrite_prefix[] = $seg;
|
143 |
+
// }
|
144 |
+
// }
|
145 |
+
|
146 |
+
// $rewrite_prefix = array_filter( $rewrite_prefix );
|
147 |
+
|
148 |
+
// if ( sizeof( $rewrite_prefix ) ) {
|
149 |
+
// $rewrite_prefix = join( '/', $rewrite_prefix ) . '/';
|
150 |
+
// } else {
|
151 |
+
// $rewrite_prefix = '';
|
152 |
+
// }
|
153 |
+
// }
|
154 |
+
|
155 |
+
// update_option( 'learn_press_permalink_structure', $rewrite_prefix );
|
156 |
+
// }
|
157 |
+
// add_action( 'init', 'learn_press_update_permalink_structure' );
|
158 |
|
159 |
/**
|
160 |
* Active Courses menu under LearnPress
|
@@ -196,7 +196,7 @@ function learn_press_admin_view( $name, $args = array(), $include_once = false,
|
|
196 |
$output = ob_get_clean();
|
197 |
|
198 |
if ( ! $return ) {
|
199 |
-
|
200 |
}
|
201 |
|
202 |
return $return ? $output : true;
|
@@ -205,6 +205,18 @@ function learn_press_admin_view( $name, $args = array(), $include_once = false,
|
|
205 |
return false;
|
206 |
}
|
207 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
208 |
/**
|
209 |
* List all pages as a dropdown with "Add New Page" option
|
210 |
*
|
@@ -290,12 +302,12 @@ function learn_press_pages_dropdown( $name, $selected = false, $args = array() )
|
|
290 |
|
291 |
<?php echo esc_html( _x( 'or', 'drop down pages', 'learnpress' ) ); ?>
|
292 |
|
293 |
-
<button class="button button-quick-add-page" data-id="<?php echo $id; ?>" type="button">
|
294 |
<?php esc_html_e( 'Create new', 'learnpress' ); ?>
|
295 |
</button>
|
296 |
<?php echo '</div>'; ?>
|
297 |
|
298 |
-
<p class="quick-add-page-inline <?php echo $id; ?> hide-if-js">
|
299 |
<input type="text" placeholder="<?php esc_attr_e( 'New page title', 'learnpress' ); ?>"/>
|
300 |
<button class="button" type="button">
|
301 |
<?php esc_html_e( 'Ok [Enter]', 'learnpress' ); ?>
|
@@ -303,12 +315,12 @@ function learn_press_pages_dropdown( $name, $selected = false, $args = array() )
|
|
303 |
<a href=""><?php esc_html_e( 'Cancel [ESC]', 'learnpress' ); ?></a>
|
304 |
</p>
|
305 |
|
306 |
-
<p class="quick-add-page-actions <?php echo $id; ?><?php echo $selected ? '' : ' hide-if-js'; ?>">
|
307 |
<a class="edit-page" href="<?php echo get_edit_post_link( $selected ); ?>"
|
308 |
-
|
309 |
|
|
310 |
<a class="view-page" href="<?php echo get_permalink( $selected ); ?>"
|
311 |
-
|
312 |
</p>
|
313 |
|
314 |
<?php
|
@@ -320,7 +332,21 @@ function learn_press_pages_dropdown( $name, $selected = false, $args = array() )
|
|
320 |
$output = sprintf( '<div class="learn-press-dropdown-pages">%s</div>', $output );
|
321 |
|
322 |
if ( $echo ) {
|
323 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
324 |
}
|
325 |
|
326 |
return $output;
|
@@ -371,7 +397,7 @@ function learn_press_dropdown_question_types( $args = array() ) {
|
|
371 |
$output .= '</select>';
|
372 |
|
373 |
if ( $args['echo'] ) {
|
374 |
-
echo $output;
|
375 |
}
|
376 |
|
377 |
return $output;
|
@@ -485,7 +511,7 @@ function learn_press_email_formats_dropdown( $args = array() ) {
|
|
485 |
$output .= '</select>';
|
486 |
|
487 |
if ( $args['echo'] ) {
|
488 |
-
echo $output;
|
489 |
}
|
490 |
|
491 |
return $output;
|
@@ -1524,7 +1550,7 @@ function learn_press_process_chart( $chart = array() ) {
|
|
1524 |
'datasets' => $chart['datasets'],
|
1525 |
)
|
1526 |
);
|
1527 |
-
echo $data;
|
1528 |
}
|
1529 |
|
1530 |
/**
|
196 |
$output = ob_get_clean();
|
197 |
|
198 |
if ( ! $return ) {
|
199 |
+
learn_press_echo_vuejs_write_on_php( $output );
|
200 |
}
|
201 |
|
202 |
return $return ? $output : true;
|
205 |
return false;
|
206 |
}
|
207 |
|
208 |
+
/**
|
209 |
+
* Vue write php has script, so when sanitize will error, so use code is mask pass check sanitize, esc
|
210 |
+
*
|
211 |
+
* @param $content
|
212 |
+
*
|
213 |
+
* @return void
|
214 |
+
* @since 4.1.6.9
|
215 |
+
*/
|
216 |
+
function learn_press_echo_vuejs_write_on_php( $content ) {
|
217 |
+
echo ( $content );
|
218 |
+
}
|
219 |
+
|
220 |
/**
|
221 |
* List all pages as a dropdown with "Add New Page" option
|
222 |
*
|
302 |
|
303 |
<?php echo esc_html( _x( 'or', 'drop down pages', 'learnpress' ) ); ?>
|
304 |
|
305 |
+
<button class="button button-quick-add-page" data-id="<?php echo esc_attr( $id ); ?>" type="button">
|
306 |
<?php esc_html_e( 'Create new', 'learnpress' ); ?>
|
307 |
</button>
|
308 |
<?php echo '</div>'; ?>
|
309 |
|
310 |
+
<p class="quick-add-page-inline <?php echo esc_attr( $id ); ?> hide-if-js">
|
311 |
<input type="text" placeholder="<?php esc_attr_e( 'New page title', 'learnpress' ); ?>"/>
|
312 |
<button class="button" type="button">
|
313 |
<?php esc_html_e( 'Ok [Enter]', 'learnpress' ); ?>
|
315 |
<a href=""><?php esc_html_e( 'Cancel [ESC]', 'learnpress' ); ?></a>
|
316 |
</p>
|
317 |
|
318 |
+
<p class="quick-add-page-actions <?php echo esc_attr( $id ); ?><?php echo esc_attr( $selected ? '' : ' hide-if-js' ); ?>">
|
319 |
<a class="edit-page" href="<?php echo get_edit_post_link( $selected ); ?>"
|
320 |
+
target="_blank"><?php esc_html_e( 'Edit page', 'learnpress' ); ?></a>
|
321 |
|
|
322 |
<a class="view-page" href="<?php echo get_permalink( $selected ); ?>"
|
323 |
+
target="_blank"><?php esc_html_e( 'View page', 'learnpress' ); ?></a>
|
324 |
</p>
|
325 |
|
326 |
<?php
|
332 |
$output = sprintf( '<div class="learn-press-dropdown-pages">%s</div>', $output );
|
333 |
|
334 |
if ( $echo ) {
|
335 |
+
$allowed_html = wp_kses_allowed_html( 'post' );
|
336 |
+
$allowed_html['select'] = [
|
337 |
+
'name' => [],
|
338 |
+
];
|
339 |
+
$allowed_html['option'] = [
|
340 |
+
'value' => [],
|
341 |
+
'selected' => [],
|
342 |
+
'class' => [],
|
343 |
+
];
|
344 |
+
$allowed_html['input'] = [
|
345 |
+
'type' => [],
|
346 |
+
'placeholder' => [],
|
347 |
+
];
|
348 |
+
|
349 |
+
echo wp_kses( $output, $allowed_html );
|
350 |
}
|
351 |
|
352 |
return $output;
|
397 |
$output .= '</select>';
|
398 |
|
399 |
if ( $args['echo'] ) {
|
400 |
+
echo wp_kses_post( $output );
|
401 |
}
|
402 |
|
403 |
return $output;
|
511 |
$output .= '</select>';
|
512 |
|
513 |
if ( $args['echo'] ) {
|
514 |
+
echo wp_kses_post( $output );
|
515 |
}
|
516 |
|
517 |
return $output;
|
1550 |
'datasets' => $chart['datasets'],
|
1551 |
)
|
1552 |
);
|
1553 |
+
echo wp_kses_post( $data );
|
1554 |
}
|
1555 |
|
1556 |
/**
|
@@ -18,7 +18,7 @@ if ( isset( $value['show_if_checked'] ) ) {
|
|
18 |
|
19 |
<?php if ( ! isset( $value['checkboxgroup'] ) || 'start' === $value['checkboxgroup'] ) : ?>
|
20 |
<tr class="<?php echo esc_attr( implode( ' ', $visibility_class ) ); ?>">
|
21 |
-
<th scope="row" class="titledesc"><?php echo $value['title']; ?></th>
|
22 |
<td class="forminp forminp-checkbox">
|
23 |
<fieldset>
|
24 |
<?php else : ?>
|
@@ -26,7 +26,7 @@ if ( isset( $value['show_if_checked'] ) ) {
|
|
26 |
<?php endif; ?>
|
27 |
|
28 |
<?php if ( ! empty( $value['title'] ) ) : ?>
|
29 |
-
<legend class="screen-reader-text"><span><?php echo $value['title']; ?></span></legend>
|
30 |
<?php endif; ?>
|
31 |
|
32 |
<label for="<?php echo esc_attr( $value['id'] ); ?>">
|
@@ -38,8 +38,8 @@ if ( isset( $value['show_if_checked'] ) ) {
|
|
38 |
value="1"
|
39 |
<?php checked( $option_value, 'yes' ); ?>
|
40 |
<?php echo implode( ' ', $custom_attributes ?? array() ); ?>
|
41 |
-
/> <?php echo $description ?? ''; ?>
|
42 |
-
</label> <?php echo $tooltip_html ?? ''; ?>
|
43 |
|
44 |
<?php if ( ! isset( $value['checkboxgroup'] ) || 'end' === $value['checkboxgroup'] ) : ?>
|
45 |
</fieldset>
|
18 |
|
19 |
<?php if ( ! isset( $value['checkboxgroup'] ) || 'start' === $value['checkboxgroup'] ) : ?>
|
20 |
<tr class="<?php echo esc_attr( implode( ' ', $visibility_class ) ); ?>">
|
21 |
+
<th scope="row" class="titledesc"><?php echo esc_html( $value['title'] ); ?></th>
|
22 |
<td class="forminp forminp-checkbox">
|
23 |
<fieldset>
|
24 |
<?php else : ?>
|
26 |
<?php endif; ?>
|
27 |
|
28 |
<?php if ( ! empty( $value['title'] ) ) : ?>
|
29 |
+
<legend class="screen-reader-text"><span><?php echo esc_html( $value['title'] ); ?></span></legend>
|
30 |
<?php endif; ?>
|
31 |
|
32 |
<label for="<?php echo esc_attr( $value['id'] ); ?>">
|
38 |
value="1"
|
39 |
<?php checked( $option_value, 'yes' ); ?>
|
40 |
<?php echo implode( ' ', $custom_attributes ?? array() ); ?>
|
41 |
+
/> <?php echo wp_kses_post( $description ?? '' ); ?>
|
42 |
+
</label> <?php echo wp_kses_post( $tooltip_html ?? '' ); ?>
|
43 |
|
44 |
<?php if ( ! isset( $value['checkboxgroup'] ) || 'end' === $value['checkboxgroup'] ) : ?>
|
45 |
</fieldset>
|
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
<tr valign="top">
|
4 |
<th scope="row" class="titledesc">
|
5 |
-
<label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?> <?php echo $tooltip_html; ?></label>
|
6 |
</th>
|
7 |
<td class="forminp forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?> lp-metabox__custom-fields">
|
8 |
<table class="widefat">
|
@@ -13,7 +13,7 @@
|
|
13 |
if ( $value['options'] ) {
|
14 |
foreach ( $value['options'] as $key => $val ) {
|
15 |
?>
|
16 |
-
<th><?php echo $value['options'][ $key ]['title']; ?> <?php echo isset( $value['options'][ $key ]['desc_tip'] ) ? learn_press_quick_tip( $value['options'][ $key ]['desc_tip'], false ) : ''; ?></th>
|
17 |
<?php
|
18 |
}
|
19 |
}
|
@@ -44,6 +44,6 @@
|
|
44 |
</tr>
|
45 |
</tfoot>
|
46 |
</table>
|
47 |
-
<?php echo $description; ?>
|
48 |
</td>
|
49 |
</tr>
|
2 |
|
3 |
<tr valign="top">
|
4 |
<th scope="row" class="titledesc">
|
5 |
+
<label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?> <?php echo wp_kses_post( $tooltip_html ); ?></label>
|
6 |
</th>
|
7 |
<td class="forminp forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?> lp-metabox__custom-fields">
|
8 |
<table class="widefat">
|
13 |
if ( $value['options'] ) {
|
14 |
foreach ( $value['options'] as $key => $val ) {
|
15 |
?>
|
16 |
+
<th><?php echo wp_kses_post( $value['options'][ $key ]['title'] ); ?> <?php echo isset( $value['options'][ $key ]['desc_tip'] ) ? learn_press_quick_tip( $value['options'][ $key ]['desc_tip'], false ) : ''; ?></th>
|
17 |
<?php
|
18 |
}
|
19 |
}
|
44 |
</tr>
|
45 |
</tfoot>
|
46 |
</table>
|
47 |
+
<?php echo wp_kses_post( $description ); ?>
|
48 |
</td>
|
49 |
</tr>
|
@@ -33,7 +33,7 @@ $email_format = $meta['format'];
|
|
33 |
|
34 |
<tr valign="top">
|
35 |
<th scope="row" class="titledesc">
|
36 |
-
<label><?php echo $value['title']; ?> <?php echo $tooltip_html ?? ''; ?></label>
|
37 |
</th>
|
38 |
<td class="forminp lp-metabox-field__email-content forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">‎
|
39 |
<?php
|
@@ -88,7 +88,7 @@ $email_format = $meta['format'];
|
|
88 |
$theme_folder = basename( $theme_dir );
|
89 |
?>
|
90 |
|
91 |
-
<div class="<?php echo implode( ' ', $classes ); ?>">
|
92 |
<?php if ( $has_local_file ) : ?>
|
93 |
<textarea rows="10" style="width: 90%;" readonly="readonly"><?php echo stripslashes( LP_WP_Filesystem::instance()->file_get_contents( $local_file ) ); ?></textarea>
|
94 |
<p class="description">
|
@@ -96,7 +96,7 @@ $email_format = $meta['format'];
|
|
96 |
</p>
|
97 |
<?php endif; ?>
|
98 |
|
99 |
-
<div class="<?php echo $has_local_file ? 'hide-if-js' : ''; ?>">
|
100 |
<?php if ( $template_type == 'html' ) : ?>
|
101 |
<?php
|
102 |
wp_editor(
|
@@ -113,9 +113,9 @@ $email_format = $meta['format'];
|
|
113 |
<div class="editor">
|
114 |
<textarea
|
115 |
id="<?php echo esc_attr( sanitize_key( $field['id'] . '-' . $template_type ) ); ?>"
|
116 |
-
name="<?php echo $field['id'] . '[plain]'; ?>"
|
117 |
class="code" cols="25" rows="20"
|
118 |
-
style="width: 97%;"><?php echo $content_plain; ?>
|
119 |
</textarea>
|
120 |
</div>
|
121 |
<?php endif; ?>
|
@@ -123,11 +123,11 @@ $email_format = $meta['format'];
|
|
123 |
|
124 |
<?php if ( ! $has_local_file ) : ?>
|
125 |
<?php if ( $field['support_variables'] ) : ?>
|
126 |
-
<ol class="learn-press-email-variables<?php echo $template_type == 'html' ? ' has-editor' : ''; ?>"
|
127 |
data-target="<?php echo esc_attr( sanitize_key( $field['id'] . '-' . $template_type ) ); ?>">
|
128 |
<?php foreach ( $field['support_variables'] as $variable ) : ?>
|
129 |
<li data-variable="<?php echo esc_attr( $variable ); ?>">
|
130 |
-
<code><?php echo $variable; ?></code></li>
|
131 |
<?php endforeach; ?>
|
132 |
</ol>
|
133 |
|
33 |
|
34 |
<tr valign="top">
|
35 |
<th scope="row" class="titledesc">
|
36 |
+
<label><?php echo wp_kses_post( $value['title'] ); ?> <?php echo wp_kses_post( $tooltip_html ?? '' ); ?></label>
|
37 |
</th>
|
38 |
<td class="forminp lp-metabox-field__email-content forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">‎
|
39 |
<?php
|
88 |
$theme_folder = basename( $theme_dir );
|
89 |
?>
|
90 |
|
91 |
+
<div class="<?php echo esc_attr( implode( ' ', $classes ) ); ?>">
|
92 |
<?php if ( $has_local_file ) : ?>
|
93 |
<textarea rows="10" style="width: 90%;" readonly="readonly"><?php echo stripslashes( LP_WP_Filesystem::instance()->file_get_contents( $local_file ) ); ?></textarea>
|
94 |
<p class="description">
|
96 |
</p>
|
97 |
<?php endif; ?>
|
98 |
|
99 |
+
<div class="<?php echo esc_attr( $has_local_file ? 'hide-if-js' : '' ); ?>">
|
100 |
<?php if ( $template_type == 'html' ) : ?>
|
101 |
<?php
|
102 |
wp_editor(
|
113 |
<div class="editor">
|
114 |
<textarea
|
115 |
id="<?php echo esc_attr( sanitize_key( $field['id'] . '-' . $template_type ) ); ?>"
|
116 |
+
name="<?php echo esc_attr( $field['id'] . '[plain]' ); ?>"
|
117 |
class="code" cols="25" rows="20"
|
118 |
+
style="width: 97%;"><?php echo wp_kses_post( $content_plain ); ?>
|
119 |
</textarea>
|
120 |
</div>
|
121 |
<?php endif; ?>
|
123 |
|
124 |
<?php if ( ! $has_local_file ) : ?>
|
125 |
<?php if ( $field['support_variables'] ) : ?>
|
126 |
+
<ol class="learn-press-email-variables<?php echo esc_html( $template_type == 'html' ? ' has-editor' : '' ); ?>"
|
127 |
data-target="<?php echo esc_attr( sanitize_key( $field['id'] . '-' . $template_type ) ); ?>">
|
128 |
<?php foreach ( $field['support_variables'] as $variable ) : ?>
|
129 |
<li data-variable="<?php echo esc_attr( $variable ); ?>">
|
130 |
+
<code><?php echo esc_html( $variable ); ?></code></li>
|
131 |
<?php endforeach; ?>
|
132 |
</ol>
|
133 |
|
@@ -1,8 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<tr valign="top">
|
2 |
<th scope="row" class="titledesc">
|
3 |
-
<label><?php echo $value['title']; ?> <?php echo $tooltip_html; ?></label>
|
4 |
</th>
|
5 |
-
<td class="forminp forminp-<?php echo esc_attr(
|
6 |
<?php echo $value['default']; ?>
|
7 |
</td>
|
8 |
</tr>
|
1 |
+
<?php
|
2 |
+
if ( ! isset( $value ) || ! isset( $tooltip_html ) ) {
|
3 |
+
return;
|
4 |
+
}
|
5 |
+
?>
|
6 |
+
|
7 |
<tr valign="top">
|
8 |
<th scope="row" class="titledesc">
|
9 |
+
<label><?php echo wp_kses_post( $value['title'] ); ?> <?php echo wp_kses_post( $tooltip_html ); ?></label>
|
10 |
</th>
|
11 |
+
<td class="forminp forminp-<?php echo esc_attr( $value['type'] ); ?>">
|
12 |
<?php echo $value['default']; ?>
|
13 |
</td>
|
14 |
</tr>
|
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
<tr valign="top">
|
4 |
<th scope="row" class="titledesc">
|
5 |
-
<label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo $value['title']; ?> <?php echo $tooltip_html; ?></label>
|
6 |
</th>
|
7 |
<td class="forminp lp-metabox-field__image-advanced forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">‎
|
8 |
<ul class="lp-metabox-field__image-advanced-images">
|
@@ -20,7 +20,7 @@
|
|
20 |
}
|
21 |
?>
|
22 |
<li class="image" data-attachment_id="<?php echo esc_attr( $attachment_id ); ?>">
|
23 |
-
<?php echo $attachment; ?>
|
24 |
<ul class="actions">
|
25 |
<li><a href="#" class="delete"><?php esc_html_e( 'Delete', 'learnpress' ); ?></a></li>
|
26 |
</ul>
|
2 |
|
3 |
<tr valign="top">
|
4 |
<th scope="row" class="titledesc">
|
5 |
+
<label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo wp_kses_post( $value['title'] ); ?> <?php echo wp_kses_post( $tooltip_html ); ?></label>
|
6 |
</th>
|
7 |
<td class="forminp lp-metabox-field__image-advanced forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">‎
|
8 |
<ul class="lp-metabox-field__image-advanced-images">
|
20 |
}
|
21 |
?>
|
22 |
<li class="image" data-attachment_id="<?php echo esc_attr( $attachment_id ); ?>">
|
23 |
+
<?php echo wp_kses_post( $attachment ); ?>
|
24 |
<ul class="actions">
|
25 |
<li><a href="#" class="delete"><?php esc_html_e( 'Delete', 'learnpress' ); ?></a></li>
|
26 |
</ul>
|
@@ -32,9 +32,9 @@
|
|
32 |
}
|
33 |
?>
|
34 |
|
35 |
-
<tr id="email-<?php echo $email->id; ?>">
|
36 |
-
<td class="status <?php echo $email->enable ? 'enabled' : ''; ?>">
|
37 |
-
<span class="change-email-status dashicons dashicons-yes" data-status="<?php echo $email->enable ? 'on' : 'off'; ?>" data-id="<?php echo $email->id; ?>"></span>
|
38 |
</td>
|
39 |
<td class="name">
|
40 |
<a href="<?php echo esc_url_raw( $url ); ?>">
|
@@ -42,12 +42,12 @@
|
|
42 |
if ( $group ) {
|
43 |
echo join( ' → ', array( $group, $email->title ) );
|
44 |
} else {
|
45 |
-
echo $email->title;
|
46 |
}
|
47 |
?>
|
48 |
</a>
|
49 |
</td>
|
50 |
-
<td class="description"><?php echo $email->description; ?></td>
|
51 |
<td class="manage"><a class="button" href="<?php echo esc_url_raw( $url ); ?>"><?php esc_html_e( 'Manage', 'learnpress' ); ?></a></td>
|
52 |
</tr>
|
53 |
<?php } ?>
|
32 |
}
|
33 |
?>
|
34 |
|
35 |
+
<tr id="email-<?php echo esc_attr( $email->id ); ?>">
|
36 |
+
<td class="status <?php echo esc_attr( $email->enable ? 'enabled' : '' ); ?>">
|
37 |
+
<span class="change-email-status dashicons dashicons-yes" data-status="<?php echo esc_attr( $email->enable ? 'on' : 'off' ); ?>" data-id="<?php echo esc_attr( $email->id ); ?>"></span>
|
38 |
</td>
|
39 |
<td class="name">
|
40 |
<a href="<?php echo esc_url_raw( $url ); ?>">
|
42 |
if ( $group ) {
|
43 |
echo join( ' → ', array( $group, $email->title ) );
|
44 |
} else {
|
45 |
+
echo wp_kses_post( $email->title );
|
46 |
}
|
47 |
?>
|
48 |
</a>
|
49 |
</td>
|
50 |
+
<td class="description"><?php echo wp_kses_post( $email->description ); ?></td>
|
51 |
<td class="manage"><a class="button" href="<?php echo esc_url_raw( $url ); ?>"><?php esc_html_e( 'Manage', 'learnpress' ); ?></a></td>
|
52 |
</tr>
|
53 |
<?php } ?>
|
@@ -10,7 +10,7 @@ $page_dropdown_args = array(
|
|
10 |
|
11 |
<tr valign="top">
|
12 |
<th scope="row" class="titledesc">
|
13 |
-
<label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo $value['title']; ?> <?php echo $tooltip_html; ?></label>
|
14 |
</th>
|
15 |
<td class="forminp forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">‎
|
16 |
<?php learn_press_pages_dropdown( $page_dropdown_args ); ?>
|
10 |
|
11 |
<tr valign="top">
|
12 |
<th scope="row" class="titledesc">
|
13 |
+
<label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo wp_kses_post( $value['title'] ); ?> <?php echo wp_kses_post( $tooltip_html ); ?></label>
|
14 |
</th>
|
15 |
<td class="forminp forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">‎
|
16 |
<?php learn_press_pages_dropdown( $page_dropdown_args ); ?>
|
@@ -20,9 +20,9 @@
|
|
20 |
<?php echo esc_html( $gateway->get_method_title() ); ?>
|
21 |
</a>
|
22 |
</td>
|
23 |
-
<td class="id"><?php echo $gateway->get_id(); ?></td>
|
24 |
-
<td class="description"><?php echo $gateway->get_method_description(); ?></td>
|
25 |
-
<td class="status<?php echo $gateway->is_enabled() ? ' enabled' : ''; ?>">
|
26 |
<span class="dashicons dashicons-yes"></span>
|
27 |
<input type="hidden" name="payment-order" value="<?php echo esc_attr( $gateway->get_id() ); ?>"/>
|
28 |
</td>
|
20 |
<?php echo esc_html( $gateway->get_method_title() ); ?>
|
21 |
</a>
|
22 |
</td>
|
23 |
+
<td class="id"><?php echo esc_html( $gateway->get_id() ); ?></td>
|
24 |
+
<td class="description"><?php echo wp_kses_post( $gateway->get_method_description() ); ?></td>
|
25 |
+
<td class="status<?php echo esc_attr( $gateway->is_enabled() ? ' enabled' : '' ); ?>">
|
26 |
<span class="dashicons dashicons-yes"></span>
|
27 |
<input type="hidden" name="payment-order" value="<?php echo esc_attr( $gateway->get_id() ); ?>"/>
|
28 |
</td>
|
@@ -2,11 +2,11 @@
|
|
2 |
|
3 |
<tr valign="top">
|
4 |
<th scope="row" class="titledesc">
|
5 |
-
<label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?> <?php echo $tooltip_html; ?></label>
|
6 |
</th>
|
7 |
<td class="forminp forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">
|
8 |
<fieldset>
|
9 |
-
<?php echo $description; ?>
|
10 |
<ul>
|
11 |
<?php
|
12 |
foreach ( $value['options'] as $key => $val ) {
|
2 |
|
3 |
<tr valign="top">
|
4 |
<th scope="row" class="titledesc">
|
5 |
+
<label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?> <?php echo wp_kses_post( $tooltip_html ); ?></label>
|
6 |
</th>
|
7 |
<td class="forminp forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">
|
8 |
<fieldset>
|
9 |
+
<?php echo wp_kses_post( $description ); ?>
|
10 |
<ul>
|
11 |
<?php
|
12 |
foreach ( $value['options'] as $key => $val ) {
|
@@ -18,9 +18,9 @@ if ( isset( $value['args'] ) ) {
|
|
18 |
|
19 |
<tr valign="top" class="single_select_page">
|
20 |
<th scope="row" class="titledesc">
|
21 |
-
<label><?php echo esc_html( $value['title'] ); ?> <?php echo $tooltip_html; ?></label>
|
22 |
</th>
|
23 |
<td class="forminp">
|
24 |
-
<?php echo str_replace( ' id=', " data-placeholder='" . esc_attr__( 'Select a page…', 'learnpress' ) . "' style='" . $value['css'] . "' class='" . $value['class'] . "' id=", wp_dropdown_pages( $args ) ); ?> <?php echo $description; ?>
|
25 |
</td>
|
26 |
</tr>
|
18 |
|
19 |
<tr valign="top" class="single_select_page">
|
20 |
<th scope="row" class="titledesc">
|
21 |
+
<label><?php echo esc_html( $value['title'] ); ?> <?php echo wp_kses_post( $tooltip_html ); ?></label>
|
22 |
</th>
|
23 |
<td class="forminp">
|
24 |
+
<?php echo str_replace( ' id=', " data-placeholder='" . esc_attr__( 'Select a page…', 'learnpress' ) . "' style='" . $value['css'] . "' class='" . $value['class'] . "' id=", wp_dropdown_pages( $args ) ); ?> <?php echo wp_kses_post( $description ); ?>
|
25 |
</td>
|
26 |
</tr>
|
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
<tr valign="top">
|
4 |
<th scope="row" class="titledesc">
|
5 |
-
<label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?> <?php echo $tooltip_html; ?></label>
|
6 |
</th>
|
7 |
<td class="forminp forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">
|
8 |
<select
|
@@ -10,24 +10,24 @@
|
|
10 |
id="<?php echo esc_attr( $value['id'] ); ?>"
|
11 |
style="<?php echo esc_attr( $value['css'] ); ?>"
|
12 |
class="<?php echo esc_attr( $value['class'] ); ?>"
|
13 |
-
|
14 |
-
|
15 |
>
|
16 |
-
|
17 |
<option value="<?php echo esc_attr( $key ); ?>"
|
18 |
-
|
19 |
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
|
26 |
-
|
27 |
><?php echo esc_html( $val ); ?></option>
|
28 |
<?php
|
29 |
-
|
30 |
-
|
31 |
-
</select> <?php echo $description; ?>
|
32 |
</td>
|
33 |
</tr>
|
2 |
|
3 |
<tr valign="top">
|
4 |
<th scope="row" class="titledesc">
|
5 |
+
<label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?> <?php echo wp_kses_post( $tooltip_html ); ?></label>
|
6 |
</th>
|
7 |
<td class="forminp forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">
|
8 |
<select
|
10 |
id="<?php echo esc_attr( $value['id'] ); ?>"
|
11 |
style="<?php echo esc_attr( $value['css'] ); ?>"
|
12 |
class="<?php echo esc_attr( $value['class'] ); ?>"
|
13 |
+
<?php echo esc_attr( implode( ' ', $custom_attributes ) ); ?>
|
14 |
+
<?php echo 'multiselect' === $value['type'] ? 'multiple="multiple"' : ''; ?>
|
15 |
>
|
16 |
+
<?php foreach ( $value['options'] as $key => $val ) { ?>
|
17 |
<option value="<?php echo esc_attr( $key ); ?>"
|
18 |
+
<?php
|
19 |
|
20 |
+
if ( is_array( $option_value ) ) {
|
21 |
+
selected( in_array( (string) $key, $option_value, true ), true );
|
22 |
+
} else {
|
23 |
+
selected( $option_value, (string) $key );
|
24 |
+
}
|
25 |
|
26 |
+
?>
|
27 |
><?php echo esc_html( $val ); ?></option>
|
28 |
<?php
|
29 |
+
}
|
30 |
+
?>
|
31 |
+
</select> <?php echo wp_kses_post( $description ); ?>
|
32 |
</td>
|
33 |
</tr>
|
@@ -2,10 +2,10 @@
|
|
2 |
|
3 |
<tr valign="top">
|
4 |
<th scope="row" class="titledesc">
|
5 |
-
<label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?> <?php echo $tooltip_html; ?></label>
|
6 |
</th>
|
7 |
<td class="forminp forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">
|
8 |
-
<?php echo $description; ?>
|
9 |
|
10 |
<textarea
|
11 |
name="<?php echo esc_attr( $value['id'] ); ?>"
|
@@ -13,7 +13,7 @@
|
|
13 |
style="<?php echo esc_attr( $value['css'] ); ?>"
|
14 |
class="<?php echo esc_attr( $value['class'] ); ?>"
|
15 |
placeholder="<?php echo esc_attr( $value['placeholder'] ); ?>"
|
16 |
-
|
17 |
-
><?php echo $option_value; ?></textarea>
|
18 |
</td>
|
19 |
</tr>
|
2 |
|
3 |
<tr valign="top">
|
4 |
<th scope="row" class="titledesc">
|
5 |
+
<label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?> <?php echo wp_kses_post( $tooltip_html ); ?></label>
|
6 |
</th>
|
7 |
<td class="forminp forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">
|
8 |
+
<?php echo wp_kses_post( $description ); ?>
|
9 |
|
10 |
<textarea
|
11 |
name="<?php echo esc_attr( $value['id'] ); ?>"
|
13 |
style="<?php echo esc_attr( $value['css'] ); ?>"
|
14 |
class="<?php echo esc_attr( $value['class'] ); ?>"
|
15 |
placeholder="<?php echo esc_attr( $value['placeholder'] ); ?>"
|
16 |
+
<?php echo esc_attr( implode( ' ', $custom_attributes ) ); ?>
|
17 |
+
><?php echo wp_kses_post( $option_value ); ?></textarea>
|
18 |
</td>
|
19 |
</tr>
|
@@ -99,13 +99,13 @@ class LP_Settings_Advanced extends LP_Abstract_Settings_Page {
|
|
99 |
// 'type' => 'checkbox',
|
100 |
// 'desc' => esc_html__( 'Enable Rest API build for app, mobile...etc.', 'learnpress' ),
|
101 |
// ),
|
102 |
-
array(
|
103 |
'title' => esc_html__( 'Hard Cache', 'learnpress' ),
|
104 |
'id' => 'enable_hard_cache',
|
105 |
'default' => 'no',
|
106 |
'type' => 'checkbox',
|
107 |
'desc' => sprintf( __( 'Enable cache for static content such as content and settings of course, lesson, quiz. <a href="%1$s">%2$s</a>', 'learnpress' ), admin_url( 'admin.php?page=learn-press-tools&tab=cache' ), esc_html__( 'Advanced', 'learnpress' ) ),
|
108 |
-
)
|
109 |
array(
|
110 |
'title' => esc_html__( 'Enable', 'learnpress' ),
|
111 |
'id' => 'navigation_position',
|
99 |
// 'type' => 'checkbox',
|
100 |
// 'desc' => esc_html__( 'Enable Rest API build for app, mobile...etc.', 'learnpress' ),
|
101 |
// ),
|
102 |
+
/*array(
|
103 |
'title' => esc_html__( 'Hard Cache', 'learnpress' ),
|
104 |
'id' => 'enable_hard_cache',
|
105 |
'default' => 'no',
|
106 |
'type' => 'checkbox',
|
107 |
'desc' => sprintf( __( 'Enable cache for static content such as content and settings of course, lesson, quiz. <a href="%1$s">%2$s</a>', 'learnpress' ), admin_url( 'admin.php?page=learn-press-tools&tab=cache' ), esc_html__( 'Advanced', 'learnpress' ) ),
|
108 |
+
),*/
|
109 |
array(
|
110 |
'title' => esc_html__( 'Enable', 'learnpress' ),
|
111 |
'id' => 'navigation_position',
|
@@ -124,13 +124,6 @@ class LP_Settings_Emails extends LP_Abstract_Settings_Page {
|
|
124 |
'type' => 'text',
|
125 |
'css' => 'width:400px',
|
126 |
),
|
127 |
-
// array(
|
128 |
-
// 'title' => esc_html__( '"From" address', 'learnpress' ),
|
129 |
-
// 'id' => 'emails_general[from_email]',
|
130 |
-
// 'default' => get_option( 'admin_email' ),
|
131 |
-
// 'type' => 'email',
|
132 |
-
// 'css' => 'width:400px',
|
133 |
-
// ),
|
134 |
array(
|
135 |
'type' => 'sectionend',
|
136 |
),
|
124 |
'type' => 'text',
|
125 |
'css' => 'width:400px',
|
126 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
array(
|
128 |
'type' => 'sectionend',
|
129 |
),
|
@@ -59,9 +59,9 @@ class LP_Settings_Emails_Group extends LP_Settings {
|
|
59 |
continue;
|
60 |
}
|
61 |
if ( $current == $email->id ) {
|
62 |
-
echo '<li class="active"><span>' . $email . '</span></li>';
|
63 |
} else {
|
64 |
-
echo '<li><a href="' . esc_url_raw( add_query_arg( 'sub-section', $email->id ) ) . '">' . $email . '</a></li>';
|
65 |
}
|
66 |
}
|
67 |
|
@@ -90,7 +90,7 @@ class LP_Settings_Emails_Group extends LP_Settings {
|
|
90 |
public function get_current_section() {
|
91 |
$ids = array_keys( $this->items );
|
92 |
|
93 |
-
return ! empty( $_REQUEST['sub-section'] ) ? $_REQUEST['sub-section'] : reset( $ids );
|
94 |
}
|
95 |
|
96 |
public function __toString() {
|
59 |
continue;
|
60 |
}
|
61 |
if ( $current == $email->id ) {
|
62 |
+
echo '<li class="active"><span>' . wp_kses_post( $email->title ) . '</span></li>';
|
63 |
} else {
|
64 |
+
echo '<li><a href="' . esc_url_raw( add_query_arg( 'sub-section', $email->id ) ) . '">' . wp_kses_post( $email->title ) . '</a></li>';
|
65 |
}
|
66 |
}
|
67 |
|
90 |
public function get_current_section() {
|
91 |
$ids = array_keys( $this->items );
|
92 |
|
93 |
+
return ! empty( $_REQUEST['sub-section'] ) ? sanitize_text_field( $_REQUEST['sub-section'] ) : reset( $ids );
|
94 |
}
|
95 |
|
96 |
public function __toString() {
|
@@ -1 +1 @@
|
|
1 |
-
<?php // Silence is golden.
|
1 |
+
<?php // Silence is golden.
|
@@ -263,7 +263,7 @@ abstract class LP_Abstract_Submenu {
|
|
263 |
*/
|
264 |
public function get_active_page( $prefix = true ) {
|
265 |
if ( false === $this->page ) {
|
266 |
-
$this->page = ! empty( $_REQUEST['page'] ) ? $_REQUEST['page'] : null;
|
267 |
}
|
268 |
|
269 |
return $prefix ? $this->page : str_replace( 'learn-press-', '', $this->page );
|
@@ -299,11 +299,11 @@ abstract class LP_Abstract_Submenu {
|
|
299 |
$classes = array( 'wrap', 'lp-submenu-page', $this->get_id() );
|
300 |
?>
|
301 |
|
302 |
-
<div class="<?php echo implode( ' ', $classes ); ?>">
|
303 |
<?php do_action( 'learn-press/admin/heading-icon', $active_tab ); ?>
|
304 |
|
305 |
<h1 class="wp-heading-inline">
|
306 |
-
<?php echo $this->get_menu_title(); ?>
|
307 |
<?php do_action( 'learn-press/admin/heading-title', $active_tab ); ?>
|
308 |
</h1>
|
309 |
|
@@ -315,8 +315,8 @@ abstract class LP_Abstract_Submenu {
|
|
315 |
|
316 |
if ( is_object( $name ) ) {
|
317 |
$obj_tab = $name;
|
318 |
-
$name
|
319 |
-
$tab
|
320 |
}
|
321 |
|
322 |
$active_class = ( $tab == $active_tab ) ? ' nav-tab-active' : '';
|
@@ -324,9 +324,9 @@ abstract class LP_Abstract_Submenu {
|
|
324 |
?>
|
325 |
|
326 |
<?php if ( $active_class ) { ?>
|
327 |
-
<span class="nav-tab<?php echo esc_attr( $active_class ); ?>"><?php echo $tab_title; ?></span>
|
328 |
<?php } else { ?>
|
329 |
-
<a class="nav-tab" href="?page=<?php echo $this->id; ?>&tab=<?php echo $tab; ?>"><?php echo $tab_title; ?></a>
|
330 |
<?php } ?>
|
331 |
<?php } ?>
|
332 |
</h2>
|
@@ -341,7 +341,7 @@ abstract class LP_Abstract_Submenu {
|
|
341 |
}
|
342 |
?>
|
343 |
|
344 |
-
<form class="<?php echo implode( ' ', $classes ); ?>" method="post" enctype="multipart/form-data">
|
345 |
<?php $this->page_content(); ?>
|
346 |
</form>
|
347 |
</div>
|
@@ -403,11 +403,11 @@ abstract class LP_Abstract_Submenu {
|
|
403 |
$section_title = apply_filters( 'learn-press/admin/submenu-section-title', $section, $slug );
|
404 |
?>
|
405 |
|
406 |
-
<li class="nav-section<?php echo $active_class; ?>">
|
407 |
<?php if ( $active_class ) { ?>
|
408 |
-
<span><?php echo $section_title; ?></span>
|
409 |
<?php } else { ?>
|
410 |
-
<a href="<?php echo esc_url_raw( remove_query_arg( 'sub-section', add_query_arg( 'section', $slug ) ) ); ?>"><?php echo $section_title; ?></a>
|
411 |
<?php } ?>
|
412 |
</li>
|
413 |
<?php } ?>
|
263 |
*/
|
264 |
public function get_active_page( $prefix = true ) {
|
265 |
if ( false === $this->page ) {
|
266 |
+
$this->page = ! empty( $_REQUEST['page'] ) ? sanitize_text_field( $_REQUEST['page'] ) : null;
|
267 |
}
|
268 |
|
269 |
return $prefix ? $this->page : str_replace( 'learn-press-', '', $this->page );
|
299 |
$classes = array( 'wrap', 'lp-submenu-page', $this->get_id() );
|
300 |
?>
|
301 |
|
302 |
+
<div class="<?php echo esc_attr( implode( ' ', $classes ) ); ?>">
|
303 |
<?php do_action( 'learn-press/admin/heading-icon', $active_tab ); ?>
|
304 |
|
305 |
<h1 class="wp-heading-inline">
|
306 |
+
<?php echo wp_kses_post( $this->get_menu_title() ); ?>
|
307 |
<?php do_action( 'learn-press/admin/heading-title', $active_tab ); ?>
|
308 |
</h1>
|
309 |
|
315 |
|
316 |
if ( is_object( $name ) ) {
|
317 |
$obj_tab = $name;
|
318 |
+
$name = $obj_tab->text;
|
319 |
+
$tab = $obj_tab->id;
|
320 |
}
|
321 |
|
322 |
$active_class = ( $tab == $active_tab ) ? ' nav-tab-active' : '';
|
324 |
?>
|
325 |
|
326 |
<?php if ( $active_class ) { ?>
|
327 |
+
<span class="nav-tab<?php echo esc_attr( $active_class ); ?>"><?php echo esc_html( $tab_title ); ?></span>
|
328 |
<?php } else { ?>
|
329 |
+
<a class="nav-tab" href="?page=<?php echo esc_attr( $this->id ); ?>&tab=<?php echo esc_attr( $tab ); ?>"><?php echo esc_html( $tab_title ); ?></a>
|
330 |
<?php } ?>
|
331 |
<?php } ?>
|
332 |
</h2>
|
341 |
}
|
342 |
?>
|
343 |
|
344 |
+
<form class="<?php echo esc_attr( implode( ' ', $classes ) ); ?>" method="post" enctype="multipart/form-data">
|
345 |
<?php $this->page_content(); ?>
|
346 |
</form>
|
347 |
</div>
|
403 |
$section_title = apply_filters( 'learn-press/admin/submenu-section-title', $section, $slug );
|
404 |
?>
|
405 |
|
406 |
+
<li class="nav-section<?php echo esc_attr( $active_class ); ?>">
|
407 |
<?php if ( $active_class ) { ?>
|
408 |
+
<span><?php echo wp_kses_post( $section_title ); ?></span>
|
409 |
<?php } else { ?>
|
410 |
+
<a href="<?php echo esc_url_raw( remove_query_arg( 'sub-section', add_query_arg( 'section', $slug ) ) ); ?>"><?php echo wp_kses_post( $section_title ); ?></a>
|
411 |
<?php } ?>
|
412 |
</li>
|
413 |
<?php } ?>
|
@@ -1 +1 @@
|
|
1 |
-
<?php // Silence is golden.
|
1 |
+
<?php // Silence is golden.
|
@@ -13,7 +13,7 @@ $last_checked = LP_Background_Query_Items::instance()->get_last_checked( 'plugin
|
|
13 |
$check_url = wp_nonce_url( add_query_arg( 'force-check-update', 'yes' ), 'lp-check-updates' );
|
14 |
?>
|
15 |
|
16 |
-
<p><?php printf( __( 'Last checked %s. <a href="%s">Check again</a>', 'learnpress' ), human_time_diff( $last_checked ), $check_url ); ?></p>
|
17 |
|
18 |
<?php
|
19 |
|
@@ -39,23 +39,23 @@ $all_plugins = array(
|
|
39 |
'key' => 'premium',
|
40 |
'title' => __( 'Premium add-ons', 'learnpress' ),
|
41 |
'items' => $tp_plugins,
|
42 |
-
)
|
43 |
);
|
44 |
|
45 |
foreach ( $all_plugins as $plugins ) {
|
46 |
-
if ( $plugins['items'] ) {
|
47 |
-
|
|
|
48 |
<?php echo $plugins['title'] . ' (<span>' . sizeof( $plugins['items'] ) . '</span>)'; ?>
|
49 |
-
|
50 |
-
|
51 |
-
<?php
|
|
|
52 |
include learn_press_get_admin_view( 'addons/html-loop-plugin' );
|
53 |
-
}
|
54 |
-
|
|
|
55 |
<?php
|
56 |
}
|
57 |
}
|
58 |
?>
|
59 |
-
|
60 |
-
|
61 |
-
|
13 |
$check_url = wp_nonce_url( add_query_arg( 'force-check-update', 'yes' ), 'lp-check-updates' );
|
14 |
?>
|
15 |
|
16 |
+
<p><?php printf( __( 'Last checked %1$s. <a href="%2$s">Check again</a>', 'learnpress' ), human_time_diff( $last_checked ), $check_url ); ?></p>
|
17 |
|
18 |
<?php
|
19 |
|
39 |
'key' => 'premium',
|
40 |
'title' => __( 'Premium add-ons', 'learnpress' ),
|
41 |
'items' => $tp_plugins,
|
42 |
+
),
|
43 |
);
|
44 |
|
45 |
foreach ( $all_plugins as $plugins ) {
|
46 |
+
if ( $plugins['items'] ) {
|
47 |
+
?>
|
48 |
+
<h2>
|
49 |
<?php echo $plugins['title'] . ' (<span>' . sizeof( $plugins['items'] ) . '</span>)'; ?>
|
50 |
+
</h2>
|
51 |
+
<ul class="addons-browse widefat">
|
52 |
+
<?php
|
53 |
+
foreach ( $plugins['items'] as $file => $add_on ) {
|
54 |
include learn_press_get_admin_view( 'addons/html-loop-plugin' );
|
55 |
+
}
|
56 |
+
?>
|
57 |
+
</ul>
|
58 |
<?php
|
59 |
}
|
60 |
}
|
61 |
?>
|
|
|
|
|
|
@@ -35,7 +35,7 @@ $custom_profile = lp_get_user_custom_register_fields( $user->ID );
|
|
35 |
?>
|
36 |
<tr>
|
37 |
<th>
|
38 |
-
<label for="learn-press-custom-register-<?php echo $field['id']; ?>"><?php echo esc_html( $field['name'] ); ?></label>
|
39 |
</th>
|
40 |
<td>
|
41 |
<?php
|
@@ -72,10 +72,13 @@ $custom_profile = lp_get_user_custom_register_fields( $user->ID );
|
|
72 |
?>
|
73 |
<tr>
|
74 |
<th>
|
75 |
-
<label for="learn-press-user-profile-<?php echo $key; ?>"><?php echo esc_html( $label ); ?></label>
|
76 |
</th>
|
77 |
<td>
|
78 |
-
<input id="learn-press-user-profile-<?php echo
|
|
|
|
|
|
|
79 |
</td>
|
80 |
</tr>
|
81 |
<?php } ?>
|
35 |
?>
|
36 |
<tr>
|
37 |
<th>
|
38 |
+
<label for="learn-press-custom-register-<?php echo esc_attr( $field['id'] ); ?>"><?php echo esc_html( $field['name'] ); ?></label>
|
39 |
</th>
|
40 |
<td>
|
41 |
<?php
|
72 |
?>
|
73 |
<tr>
|
74 |
<th>
|
75 |
+
<label for="learn-press-user-profile-<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $label ); ?></label>
|
76 |
</th>
|
77 |
<td>
|
78 |
+
<input id="learn-press-user-profile-<?php echo esc_attr( $key ); ?>"
|
79 |
+
class="regular-text" type="<?php echo esc_attr( $type ); ?>"
|
80 |
+
value="<?php echo esc_attr( $extra_profile[ $key ] ?? '' ); ?>"
|
81 |
+
name="_lp_extra_info[<?php echo esc_attr( $key ); ?>]">
|
82 |
</td>
|
83 |
</tr>
|
84 |
<?php } ?>
|
@@ -1 +1 @@
|
|
1 |
-
<?php // Silence is golden.
|
1 |
+
<?php // Silence is golden.
|
@@ -517,7 +517,7 @@ class LP_Meta_Box_Course extends LP_Meta_Box {
|
|
517 |
foreach ( $tab_content['content'] as $meta_key => $object ) {
|
518 |
if ( is_a( $object, 'LP_Meta_Box_Field' ) ) {
|
519 |
$object->id = $meta_key;
|
520 |
-
echo $object->output( $post->ID );
|
521 |
}
|
522 |
}
|
523 |
|
517 |
foreach ( $tab_content['content'] as $meta_key => $object ) {
|
518 |
if ( is_a( $object, 'LP_Meta_Box_Field' ) ) {
|
519 |
$object->id = $meta_key;
|
520 |
+
echo wp_kses_post( $object->output( $post->ID ) );
|
521 |
}
|
522 |
}
|
523 |
|
@@ -27,7 +27,7 @@ class LP_Meta_Box_Extra_Faq_Field extends LP_Meta_Box_Field {
|
|
27 |
?>
|
28 |
|
29 |
<div class="form-field lp_course_faq_meta_box">
|
30 |
-
<label for="_lp_key_features"><?php echo $this->label; ?></label>
|
31 |
<div class="lp_course_faq_meta_box__content">
|
32 |
<div class="lp_course_faq_meta_box__fields">
|
33 |
<?php if ( ! empty( $faqs[0][0] ) ) : ?>
|
@@ -39,7 +39,7 @@ class LP_Meta_Box_Extra_Faq_Field extends LP_Meta_Box_Field {
|
|
39 |
</label>
|
40 |
<label>
|
41 |
<span><?php esc_attr_e( 'Content', 'learnpress' ); ?></span>
|
42 |
-
<textarea name="_lp_faqs_answer[]"><?php echo $faq[1]; ?></textarea>
|
43 |
</label>
|
44 |
<a href="#" class="delete"></a>
|
45 |
<span class="sort"></span>
|
27 |
?>
|
28 |
|
29 |
<div class="form-field lp_course_faq_meta_box">
|
30 |
+
<label for="_lp_key_features"><?php echo wp_kses_post( $this->label ); ?></label>
|
31 |
<div class="lp_course_faq_meta_box__content">
|
32 |
<div class="lp_course_faq_meta_box__fields">
|
33 |
<?php if ( ! empty( $faqs[0][0] ) ) : ?>
|
39 |
</label>
|
40 |
<label>
|
41 |
<span><?php esc_attr_e( 'Content', 'learnpress' ); ?></span>
|
42 |
+
<textarea name="_lp_faqs_answer[]"><?php echo wp_kses_post( $faq[1] ); ?></textarea>
|
43 |
</label>
|
44 |
<a href="#" class="delete"></a>
|
45 |
<span class="sort"></span>
|
@@ -101,6 +101,10 @@ class LP_Meta_Box_Select_Field extends LP_Meta_Box_Field {
|
|
101 |
public function save( $post_id ) {
|
102 |
$multil_meta = isset( $this->extra['multil_meta'] ) ? $this->extra['multil_meta'] : false;
|
103 |
|
|
|
|
|
|
|
|
|
104 |
if ( $multil_meta ) {
|
105 |
$get_values = get_post_meta( $post_id, $this->id, false ) ?? array();
|
106 |
$new_values = isset( $_POST[ $this->id ] ) ? (array) wp_unslash( $_POST[ $this->id ] ) : array();
|
@@ -119,10 +123,6 @@ class LP_Meta_Box_Select_Field extends LP_Meta_Box_Field {
|
|
119 |
add_post_meta( $post_id, $this->id, $level_id, false );
|
120 |
}
|
121 |
} else {
|
122 |
-
if ( ! isset( $_POST[ $this->id ] ) ) {
|
123 |
-
return;
|
124 |
-
}
|
125 |
-
|
126 |
$value = ! empty( $_POST[ $this->id ] ) ? sanitize_text_field( wp_unslash( $_POST[ $this->id ] ) ) : '';
|
127 |
|
128 |
$multilple = ! empty( $this->extra['multiple'] ) ? true : false;
|
101 |
public function save( $post_id ) {
|
102 |
$multil_meta = isset( $this->extra['multil_meta'] ) ? $this->extra['multil_meta'] : false;
|
103 |
|
104 |
+
if ( ! isset( $_POST[ $this->id ] ) ) {
|
105 |
+
return;
|
106 |
+
}
|
107 |
+
|
108 |
if ( $multil_meta ) {
|
109 |
$get_values = get_post_meta( $post_id, $this->id, false ) ?? array();
|
110 |
$new_values = isset( $_POST[ $this->id ] ) ? (array) wp_unslash( $_POST[ $this->id ] ) : array();
|
123 |
add_post_meta( $post_id, $this->id, $level_id, false );
|
124 |
}
|
125 |
} else {
|
|
|
|
|
|
|
|
|
126 |
$value = ! empty( $_POST[ $this->id ] ) ? sanitize_text_field( wp_unslash( $_POST[ $this->id ] ) ) : '';
|
127 |
|
128 |
$multilple = ! empty( $this->extra['multiple'] ) ? true : false;
|
@@ -32,7 +32,7 @@ global $post;
|
|
32 |
}
|
33 |
?>
|
34 |
<a class="submitdelete deletion" href="<?php echo get_delete_post_link( $post->ID ); ?>">
|
35 |
-
<?php echo $delete_text; ?>
|
36 |
</a>
|
37 |
<?php endif; ?>
|
38 |
</div>
|
32 |
}
|
33 |
?>
|
34 |
<a class="submitdelete deletion" href="<?php echo get_delete_post_link( $post->ID ); ?>">
|
35 |
+
<?php echo esc_html( $delete_text ); ?>
|
36 |
</a>
|
37 |
<?php endif; ?>
|
38 |
</div>
|
@@ -19,29 +19,29 @@ wp_enqueue_script( 'learnpress-jspdf' );
|
|
19 |
?>
|
20 |
|
21 |
<div class="lp-invoice__header">
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
<?php
|
27 |
-
if ( ! isset( $_POST['site_title'] ) ||
|
28 |
echo wp_sprintf( '<p>%s</p>', esc_html( get_bloginfo( 'name' ) ) );
|
29 |
}
|
30 |
-
if ( ! isset( $_POST['order_date'] ) ||
|
31 |
-
echo wp_sprintf( '<p class="date">%s: %s</p>', esc_html__( 'Order Date', 'learnpress' ),
|
32 |
}
|
33 |
-
if ( ! isset( $_POST['invoice_no'] ) ||
|
34 |
echo wp_sprintf( '<p class="invoice-no">%s: %s</p>', esc_html__( 'Invoice No.', 'learnpress' ), esc_attr( $order->get_order_number() ) );
|
35 |
}
|
36 |
-
if ( ! isset( $_POST['order_customer'] ) ||
|
37 |
echo wp_sprintf( '<p class="invoice-customer">%s: %s</p>', esc_html__( 'Customer', 'learnpress' ), esc_html( $order->get_customer_name() ) );
|
38 |
}
|
39 |
-
if ( ! isset( $_POST['order_email'] ) ||
|
40 |
echo wp_sprintf( '<p class="invoice-email">%s: %s</p>', esc_html__( 'Email', 'learnpress' ), esc_html( $order->get_user( 'email' ) ) );
|
41 |
}
|
42 |
?>
|
43 |
-
<?php if ( ! isset( $_POST['order_payment'] ) ||
|
44 |
-
|
45 |
<?php
|
46 |
$method_title = $order->get_payment_method_title();
|
47 |
$user_ip = $order->get_user_ip_address();
|
@@ -51,60 +51,62 @@ wp_enqueue_script( 'learnpress-jspdf' );
|
|
51 |
printf( 'Pay via <strong>%s</strong>', apply_filters( 'learn-press/order-payment-method-title', $method_title, $order ) );
|
52 |
} elseif ( $user_ip ) {
|
53 |
printf( 'User IP <strong>%s</strong>', $user_ip );
|
54 |
-
}
|
55 |
-
|
|
|
56 |
<?php endif; ?>
|
57 |
-
|
58 |
</div>
|
59 |
<div class="lp-invoice__body">
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
<?php
|
79 |
$filter = array(
|
80 |
'p' => 0,
|
81 |
-
'limit' => '9999'
|
82 |
);
|
83 |
-
if ( $items = $order->get_items_filter( $filter ) ):
|
|
|
84 |
<?php foreach ( $items as $item ) : ?>
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
<?php endforeach; ?>
|
92 |
<?php endif; ?>
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
</div>
|
19 |
?>
|
20 |
|
21 |
<div class="lp-invoice__header">
|
22 |
+
<div class="lp-invoice__hleft">
|
23 |
+
<h1><?php echo esc_html__( 'Invoice', 'learnpress' ); ?></h1>
|
24 |
+
</div>
|
25 |
+
<div class="lp-invoice__hright">
|
26 |
<?php
|
27 |
+
if ( ! isset( $_POST['site_title'] ) || LP_Helper::sanitize_params_submitted( $_POST['site_title'] ) === 'check' ) {
|
28 |
echo wp_sprintf( '<p>%s</p>', esc_html( get_bloginfo( 'name' ) ) );
|
29 |
}
|
30 |
+
if ( ! isset( $_POST['order_date'] ) || LP_Helper::sanitize_params_submitted( $_POST['order_date'] ) === 'check' ) {
|
31 |
+
echo wp_sprintf( '<p class="date">%s: %s</p>', esc_html__( 'Order Date', 'learnpress' ), gmdate( 'd-m-Y h:i:s', esc_attr( $order->get_order_date( 'timestamp' ) ) ) );
|
32 |
}
|
33 |
+
if ( ! isset( $_POST['invoice_no'] ) || LP_Helper::sanitize_params_submitted( $_POST['invoice_no'] ) === 'check' ) {
|
34 |
echo wp_sprintf( '<p class="invoice-no">%s: %s</p>', esc_html__( 'Invoice No.', 'learnpress' ), esc_attr( $order->get_order_number() ) );
|
35 |
}
|
36 |
+
if ( ! isset( $_POST['order_customer'] ) || LP_Helper::sanitize_params_submitted( $_POST['order_customer'] ) === 'check' ) {
|
37 |
echo wp_sprintf( '<p class="invoice-customer">%s: %s</p>', esc_html__( 'Customer', 'learnpress' ), esc_html( $order->get_customer_name() ) );
|
38 |
}
|
39 |
+
if ( ! isset( $_POST['order_email'] ) || LP_Helper::sanitize_params_submitted( $_POST['order_email'] ) === 'check' ) {
|
40 |
echo wp_sprintf( '<p class="invoice-email">%s: %s</p>', esc_html__( 'Email', 'learnpress' ), esc_html( $order->get_user( 'email' ) ) );
|
41 |
}
|
42 |
?>
|
43 |
+
<?php if ( ! isset( $_POST['order_payment'] ) || LP_Helper::sanitize_params_submitted( $_POST['order_payment'] ) === 'check' ) : ?>
|
44 |
+
<p class="invoice-method">
|
45 |
<?php
|
46 |
$method_title = $order->get_payment_method_title();
|
47 |
$user_ip = $order->get_user_ip_address();
|
51 |
printf( 'Pay via <strong>%s</strong>', apply_filters( 'learn-press/order-payment-method-title', $method_title, $order ) );
|
52 |
} elseif ( $user_ip ) {
|
53 |
printf( 'User IP <strong>%s</strong>', $user_ip );
|
54 |
+
}
|
55 |
+
?>
|
56 |
+
</p>
|
57 |
<?php endif; ?>
|
58 |
+
</div>
|
59 |
</div>
|
60 |
<div class="lp-invoice__body">
|
61 |
+
<h4 class="order-data-heading"><?php echo esc_html__( 'Order details', 'learnpress' ); ?></h4>
|
62 |
+
<div class="order-items">
|
63 |
+
<table id="tab_customers" class="table table-striped list-order-items">
|
64 |
+
<colgroup>
|
65 |
+
<col width="40%">
|
66 |
+
<col width="20%">
|
67 |
+
<col width="20%">
|
68 |
+
<col width="20%">
|
69 |
+
</colgroup>
|
70 |
+
<thead>
|
71 |
+
<tr class='warning'>
|
72 |
+
<th class="column-name"><?php _e( 'Item', 'learnpress' ); ?></th>
|
73 |
+
<th class="column-price"><?php _e( 'Cost', 'learnpress' ); ?></th>
|
74 |
+
<th class="column-quantity"><?php _e( 'Quantity', 'learnpress' ); ?></th>
|
75 |
+
<th class="column-total align-right"><?php _e( 'Amount', 'learnpress' ); ?></th>
|
76 |
+
</tr>
|
77 |
+
</thead>
|
78 |
+
<tbody>
|
79 |
<?php
|
80 |
$filter = array(
|
81 |
'p' => 0,
|
82 |
+
'limit' => '9999',
|
83 |
);
|
84 |
+
if ( $items = $order->get_items_filter( $filter ) ) :
|
85 |
+
?>
|
86 |
<?php foreach ( $items as $item ) : ?>
|
87 |
+
<tr>
|
88 |
+
<td><?php echo esc_html( $item['name'] ); ?></td>
|
89 |
+
<td><?php echo learn_press_format_price( isset( $item['total'] ) ? $item['total'] : 0, isset( $currency_symbol ) ? $currency_symbol : '$' ); ?></td>
|
90 |
+
<td>x <?php echo isset( $item['quantity'] ) ? $item['quantity'] : 0; ?></td>
|
91 |
+
<td><?php echo learn_press_format_price( isset( $item['total'] ) ? $item['total'] : 0, isset( $currency_symbol ) ? $currency_symbol : '$' ); ?></td>
|
92 |
+
</tr>
|
93 |
<?php endforeach; ?>
|
94 |
<?php endif; ?>
|
95 |
+
</tbody>
|
96 |
+
<tfoot>
|
97 |
+
<tr>
|
98 |
+
<td></td>
|
99 |
+
<td></td>
|
100 |
+
<td><?php echo esc_html__( 'Sub Total', 'learnpress' ); ?></td>
|
101 |
+
<td><?php echo learn_press_format_price( $order->order_subtotal, $currency_symbol ); ?></td>
|
102 |
+
</tr>
|
103 |
+
<tr>
|
104 |
+
<td></td>
|
105 |
+
<td></td>
|
106 |
+
<td><?php _e( 'Total', 'learnpress' ); ?></td>
|
107 |
+
<td><?php echo learn_press_format_price( $order->order_total, $currency_symbol ); ?></td>
|
108 |
+
</tr>
|
109 |
+
</tfoot>
|
110 |
+
</table>
|
111 |
+
</div>
|
112 |
+
</div>
|
@@ -81,7 +81,7 @@ $user_ip = $order->get_user_ip_address();
|
|
81 |
<div class="order-users">
|
82 |
<?php if ( $order->is_multi_users() ) : ?>
|
83 |
<label><?php esc_html_e( 'Customers:', 'learnpress' ); ?></label>
|
84 |
-
<ul id="list-users" class="advanced-list <?php echo $order->get_status() === 'completed' ? 'locked' : ''; ?>">
|
85 |
</ul>
|
86 |
|
87 |
<?php if ( 'pending' === $order->get_status() ) : ?>
|
@@ -101,11 +101,11 @@ $user_ip = $order->get_user_ip_address();
|
|
101 |
printf( '<a href="%s">%s</a>', esc_url_raw( add_query_arg( 'user_id', absint( $order->get_user_id( 'edit' ) ), admin_url( 'user-edit.php' ) ) ), esc_html__( 'Profile', 'learnpress' ) );
|
102 |
}
|
103 |
} else {
|
104 |
-
echo $order->get_customer_name();
|
105 |
}
|
106 |
?>
|
107 |
|
108 |
-
<input type="hidden" name="order-customer" id="order-customer" value="<?php echo $order->get_user( 'id' ); ?>"/>
|
109 |
|
110 |
<?php if ( 'pending' === $order->get_status() ) : ?>
|
111 |
<?php echo ' |'; ?>
|
@@ -236,7 +236,7 @@ $user_ip = $order->get_user_ip_address();
|
|
236 |
<div class="order-data-field order-data-user">
|
237 |
<label><?php esc_html_e( 'Customer', 'learnpress' ); ?></label>
|
238 |
<div class="order-users">
|
239 |
-
<ul id="list-users" class="advanced-list <?php echo $order->get_status() === 'completed' ? 'locked' : ''; ?>"></ul>
|
240 |
</div>
|
241 |
<a href="" class="change-user" data-multiple="yes"><?php esc_html_e( 'Add multi users', 'learnpress' ); ?></a>
|
242 |
</div>
|
81 |
<div class="order-users">
|
82 |
<?php if ( $order->is_multi_users() ) : ?>
|
83 |
<label><?php esc_html_e( 'Customers:', 'learnpress' ); ?></label>
|
84 |
+
<ul id="list-users" class="advanced-list <?php echo esc_attr( $order->get_status() === 'completed' ? 'locked' : '' ); ?>">
|
85 |
</ul>
|
86 |
|
87 |
<?php if ( 'pending' === $order->get_status() ) : ?>
|
101 |
printf( '<a href="%s">%s</a>', esc_url_raw( add_query_arg( 'user_id', absint( $order->get_user_id( 'edit' ) ), admin_url( 'user-edit.php' ) ) ), esc_html__( 'Profile', 'learnpress' ) );
|
102 |
}
|
103 |
} else {
|
104 |
+
echo wp_kses_post( $order->get_customer_name() );
|
105 |
}
|
106 |
?>
|
107 |
|
108 |
+
<input type="hidden" name="order-customer" id="order-customer" value="<?php echo esc_attr( $order->get_user( 'id' ) ); ?>"/>
|
109 |
|
110 |
<?php if ( 'pending' === $order->get_status() ) : ?>
|
111 |
<?php echo ' |'; ?>
|
236 |
<div class="order-data-field order-data-user">
|
237 |
<label><?php esc_html_e( 'Customer', 'learnpress' ); ?></label>
|
238 |
<div class="order-users">
|
239 |
+
<ul id="list-users" class="advanced-list <?php echo esc_attr( $order->get_status() === 'completed' ? 'locked' : '' ); ?>"></ul>
|
240 |
</div>
|
241 |
<a href="" class="change-user" data-multiple="yes"><?php esc_html_e( 'Add multi users', 'learnpress' ); ?></a>
|
242 |
</div>
|
@@ -1 +1 @@
|
|
1 |
-
<?php // Silence is golden.
|
1 |
+
<?php // Silence is golden.
|
@@ -54,14 +54,14 @@ class LP_Meta_Box_Question extends LP_Meta_Box {
|
|
54 |
foreach ( $this->metabox( $post->ID ) as $key => $object ) {
|
55 |
if ( is_a( $object, 'LP_Meta_Box_Field' ) ) {
|
56 |
$object->id = $key;
|
57 |
-
echo $object->output( $post->ID );
|
58 |
} elseif ( is_array( $object ) ) {
|
59 |
$is_old = true;
|
60 |
}
|
61 |
}
|
62 |
|
63 |
if ( $is_old ) {
|
64 |
-
lp_meta_box_output( $this->metabox() );
|
65 |
}
|
66 |
|
67 |
do_action( 'learnpress/question-settings/after' );
|
54 |
foreach ( $this->metabox( $post->ID ) as $key => $object ) {
|
55 |
if ( is_a( $object, 'LP_Meta_Box_Field' ) ) {
|
56 |
$object->id = $key;
|
57 |
+
echo wp_kses_post( $object->output( $post->ID ) );
|
58 |
} elseif ( is_array( $object ) ) {
|
59 |
$is_old = true;
|
60 |
}
|
61 |
}
|
62 |
|
63 |
if ( $is_old ) {
|
64 |
+
lp_meta_box_output( $this->metabox( $post->ID ) );
|
65 |
}
|
66 |
|
67 |
do_action( 'learnpress/question-settings/after' );
|
@@ -110,7 +110,7 @@ class LP_Meta_Box_Quiz extends LP_Meta_Box {
|
|
110 |
foreach ( $this->metabox( $post->ID ) as $key => $object ) {
|
111 |
if ( is_a( $object, 'LP_Meta_Box_Field' ) ) {
|
112 |
$object->id = $key;
|
113 |
-
echo $object->output( $post->ID );
|
114 |
} elseif ( is_array( $object ) ) {
|
115 |
$is_old = true;
|
116 |
}
|
110 |
foreach ( $this->metabox( $post->ID ) as $key => $object ) {
|
111 |
if ( is_a( $object, 'LP_Meta_Box_Field' ) ) {
|
112 |
$object->id = $key;
|
113 |
+
echo wp_kses_post( $object->output( $post->ID ) );
|
114 |
} elseif ( is_array( $object ) ) {
|
115 |
$is_old = true;
|
116 |
}
|
@@ -5,7 +5,7 @@
|
|
5 |
</div>
|
6 |
<div class="modal-wrapper">
|
7 |
<div class="modal-container">
|
8 |
-
<header><?php echo $this->_options['title']; ?></header>
|
9 |
<article>
|
10 |
<input type="text" name="search" @keyup="doSearch" ref="term" value="" placeholder="<?php esc_html_e( 'Search items', 'learnpress' ); ?>" autocomplete="off"/>
|
11 |
<ul class="search-results" @click="selectItem"></ul>
|
@@ -14,10 +14,10 @@
|
|
14 |
<div class="search-nav" @click="loadPage" v-if="hasItems">
|
15 |
</div>
|
16 |
<button class="button"
|
17 |
-
@click="close"><?php echo $this->_options['close_button']; ?></button>
|
18 |
<button class="button button-primary"
|
19 |
@click="addItems"
|
20 |
-
v-if="selected.length"><?php echo $this->_options['add_button']; ?></button>
|
21 |
</footer>
|
22 |
</div>
|
23 |
</div>
|
5 |
</div>
|
6 |
<div class="modal-wrapper">
|
7 |
<div class="modal-container">
|
8 |
+
<header><?php echo wp_kses_post( $this->_options['title'] ); ?></header>
|
9 |
<article>
|
10 |
<input type="text" name="search" @keyup="doSearch" ref="term" value="" placeholder="<?php esc_html_e( 'Search items', 'learnpress' ); ?>" autocomplete="off"/>
|
11 |
<ul class="search-results" @click="selectItem"></ul>
|
14 |
<div class="search-nav" @click="loadPage" v-if="hasItems">
|
15 |
</div>
|
16 |
<button class="button"
|
17 |
+
@click="close"><?php echo wp_kses_post( $this->_options['close_button'] ); ?></button>
|
18 |
<button class="button button-primary"
|
19 |
@click="addItems"
|
20 |
+
v-if="selected.length"><?php echo wp_kses_post( $this->_options['add_button'] ); ?></button>
|
21 |
</footer>
|
22 |
</div>
|
23 |
</div>
|
@@ -5,7 +5,7 @@
|
|
5 |
</div>
|
6 |
<div class="modal-wrapper">
|
7 |
<div class="modal-container">
|
8 |
-
<header><?php echo $this->_options['title']; ?></header>
|
9 |
<article>
|
10 |
<input type="text" name="search" @keyup="doSearch" ref="term" placeholder="<?php esc_html_e( 'Search users', 'learnpress' ); ?>" autocomplete="off"/>
|
11 |
<ul class="search-results" @click="selectItem"></ul>
|
@@ -14,10 +14,10 @@
|
|
14 |
<div class="search-nav" @click="loadPage" v-if="hasUsers">
|
15 |
</div>
|
16 |
<button class="button"
|
17 |
-
@click="close"><?php echo $this->_options['close_button']; ?></button>
|
18 |
<button class="button button-primary"
|
19 |
@click="addUsers"
|
20 |
-
v-if="selected.length && multiple"><?php echo $this->_options['add_button']; ?></button>
|
21 |
</footer>
|
22 |
</div>
|
23 |
</div>
|
5 |
</div>
|
6 |
<div class="modal-wrapper">
|
7 |
<div class="modal-container">
|
8 |
+
<header><?php echo wp_kses_post( $this->_options['title'] ); ?></header>
|
9 |
<article>
|
10 |
<input type="text" name="search" @keyup="doSearch" ref="term" placeholder="<?php esc_html_e( 'Search users', 'learnpress' ); ?>" autocomplete="off"/>
|
11 |
<ul class="search-results" @click="selectItem"></ul>
|
14 |
<div class="search-nav" @click="loadPage" v-if="hasUsers">
|
15 |
</div>
|
16 |
<button class="button"
|
17 |
+
@click="close"><?php echo wp_kses_post( $this->_options['close_button'] ); ?></button>
|
18 |
<button class="button button-primary"
|
19 |
@click="addUsers"
|
20 |
+
v-if="selected.length && multiple"><?php echo wp_kses_post( $this->_options['add_button'] ); ?></button>
|
21 |
</footer>
|
22 |
</div>
|
23 |
</div>
|
@@ -45,7 +45,7 @@ if ( ! isset( $steps ) ) {
|
|
45 |
<a class="button button-prev" href="<?php echo esc_url_raw( $wizard->get_prev_url() ); ?>">
|
46 |
<?php
|
47 |
if ( ! empty( $step['next_button'] ) ) {
|
48 |
-
echo $step['back_button'];
|
49 |
} else {
|
50 |
_e( 'Back', 'learnpress' );
|
51 |
}
|
@@ -56,7 +56,7 @@ if ( ! isset( $steps ) ) {
|
|
56 |
<a class="button button-next button-primary" href="<?php echo esc_url_raw( $wizard->get_next_url() ); ?>">
|
57 |
<?php
|
58 |
if ( ! empty( $step['next_button'] ) ) {
|
59 |
-
echo $step['next_button'];
|
60 |
} else {
|
61 |
_e( 'Continue', 'learnpress' );
|
62 |
}
|
45 |
<a class="button button-prev" href="<?php echo esc_url_raw( $wizard->get_prev_url() ); ?>">
|
46 |
<?php
|
47 |
if ( ! empty( $step['next_button'] ) ) {
|
48 |
+
echo wp_kses_post( $step['back_button'] );
|
49 |
} else {
|
50 |
_e( 'Back', 'learnpress' );
|
51 |
}
|
56 |
<a class="button button-next button-primary" href="<?php echo esc_url_raw( $wizard->get_next_url() ); ?>">
|
57 |
<?php
|
58 |
if ( ! empty( $step['next_button'] ) ) {
|
59 |
+
echo wp_kses_post( $step['next_button'] );
|
60 |
} else {
|
61 |
_e( 'Continue', 'learnpress' );
|
62 |
}
|
@@ -16,7 +16,8 @@ $settings = LP_Settings::instance();
|
|
16 |
<tr>
|
17 |
<th><?php _e( 'Paypal Email', 'learnpress' ); ?></th>
|
18 |
<td>
|
19 |
-
<input class="regular-text" type="email" name="settings[paypal][paypal_email]" id="settings-paypal-email"
|
|
|
20 |
<p class="description">
|
21 |
<?php _e( 'Your Paypal email in live mode.', 'learnpress' ); ?>
|
22 |
</p>
|
@@ -34,7 +35,7 @@ $settings = LP_Settings::instance();
|
|
34 |
if ( $payment_currencies ) {
|
35 |
foreach ( $payment_currencies as $code => $symbol ) {
|
36 |
?>
|
37 |
-
<option value="<?php echo $code; ?>" data-symbol="<?php echo learn_press_get_currency_symbol( $code ); ?>" <?php selected( $code == 'USD' ); ?>><?php echo $symbol; ?></option>
|
38 |
<?php
|
39 |
}
|
40 |
}
|
16 |
<tr>
|
17 |
<th><?php _e( 'Paypal Email', 'learnpress' ); ?></th>
|
18 |
<td>
|
19 |
+
<input class="regular-text" type="email" name="settings[paypal][paypal_email]" id="settings-paypal-email"
|
20 |
+
value="<?php echo esc_attr( $settings->get( 'paypal.paypal_email', '' ) ); ?>">
|
21 |
<p class="description">
|
22 |
<?php _e( 'Your Paypal email in live mode.', 'learnpress' ); ?>
|
23 |
</p>
|
35 |
if ( $payment_currencies ) {
|
36 |
foreach ( $payment_currencies as $code => $symbol ) {
|
37 |
?>
|
38 |
+
<option value="<?php echo esc_attr( $code ); ?>" data-symbol="<?php echo learn_press_get_currency_symbol( $code ); ?>" <?php selected( $code == 'USD' ); ?>><?php echo esc_html( $symbol ); ?></option>
|
39 |
<?php
|
40 |
}
|
41 |
}
|
@@ -18,55 +18,66 @@ $preview_price = '';
|
|
18 |
<h2><?php _e( 'Currency', 'learnpress' ); ?></h2>
|
19 |
|
20 |
<table>
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
<?php
|
26 |
-
|
|
|
27 |
foreach ( $payment_currencies as $code => $symbol ) {
|
28 |
?>
|
29 |
-
|
30 |
-
|
|
|
|
|
31 |
<?php
|
32 |
}
|
33 |
-
}
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
|
|
41 |
<?php
|
42 |
$positions = array();
|
43 |
foreach ( learn_press_currency_positions() as $pos => $text ) {
|
44 |
?>
|
45 |
-
|
|
|
46 |
}
|
47 |
?>
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
72 |
</table>
|
18 |
<h2><?php _e( 'Currency', 'learnpress' ); ?></h2>
|
19 |
|
20 |
<table>
|
21 |
+
<tr>
|
22 |
+
<th><?php _e( 'Currency', 'learnpress' ); ?></th>
|
23 |
+
<td>
|
24 |
+
<select id="currency" name="settings[currency][currency]">
|
25 |
<?php
|
26 |
+
$payment_currencies = learn_press_currencies();
|
27 |
+
if ( $payment_currencies ) {
|
28 |
foreach ( $payment_currencies as $code => $symbol ) {
|
29 |
?>
|
30 |
+
<option value="<?php echo esc_attr( $code ); ?>"
|
31 |
+
data-symbol="<?php echo learn_press_get_currency_symbol( $code ); ?>" <?php selected( $code == $currency ); ?>>
|
32 |
+
<?php echo wp_kses_post( $symbol ); ?>
|
33 |
+
</option>
|
34 |
<?php
|
35 |
}
|
36 |
+
}
|
37 |
+
?>
|
38 |
+
</select>
|
39 |
+
</td>
|
40 |
+
</tr>
|
41 |
+
<tr>
|
42 |
+
<th><?php _e( 'Currency position', 'learnpress' ); ?></th>
|
43 |
+
<td>
|
44 |
+
<select id="currency-pos" name="settings[currency][currency_pos]">
|
45 |
<?php
|
46 |
$positions = array();
|
47 |
foreach ( learn_press_currency_positions() as $pos => $text ) {
|
48 |
?>
|
49 |
+
<option value="<?php echo esc_attr( $pos ); ?>"<?php selected( $pos == $settings->get( 'currency_pos' ) ); ?>><?php echo wp_kses_post( $text ); ?></option>
|
50 |
+
<?php
|
51 |
}
|
52 |
?>
|
53 |
+
</select>
|
54 |
+
</td>
|
55 |
+
</tr>
|
56 |
+
<tr>
|
57 |
+
<th><?php _e( 'Thousands Separator', 'learnpress' ); ?></th>
|
58 |
+
<td>
|
59 |
+
<input id="thousands-separator" type="text" name="settings[currency][thousands_separator]"
|
60 |
+
value="<?php echo esc_attr( $settings->get( 'thousands_separator', ',' ) ); ?>">
|
61 |
+
</td>
|
62 |
+
</tr>
|
63 |
+
<tr>
|
64 |
+
<th><?php _e( 'Decimals Separator', 'learnpress' ); ?></th>
|
65 |
+
<td>
|
66 |
+
<input id="decimals-separator" type="text" name="settings[currency][decimals_separator]"
|
67 |
+
value="<?php echo esc_attr( $settings->get( 'decimals_separator', '.' ) ); ?>">
|
68 |
+
</td>
|
69 |
+
</tr>
|
70 |
+
<tr>
|
71 |
+
<th><?php _e( 'Number of Decimals', 'learnpress' ); ?></th>
|
72 |
+
<td>
|
73 |
+
<input id="number-of-decimals" type="text" name="settings[currency][number_of_decimals]"
|
74 |
+
value="<?php echo esc_attr( $settings->get( 'number_of_decimals', '2' ) ); ?>">
|
75 |
+
</td>
|
76 |
+
</tr>
|
77 |
+
<tr>
|
78 |
+
<th></th>
|
79 |
+
<td>
|
80 |
+
<div id="preview-price"><?php echo learn_press_format_price( 1234.56, true ); ?></div>
|
81 |
+
</td>
|
82 |
+
</tr>
|
83 |
</table>
|
@@ -17,8 +17,8 @@ defined( 'ABSPATH' ) or exit;
|
|
17 |
<p><?php _e( 'You can skip to next step if you don’t want to.', 'learnpress' ); ?></p>
|
18 |
|
19 |
<p>
|
20 |
-
|
21 |
-
|
22 |
<?php _e( 'Enable emails', 'learnpress' ); ?>
|
23 |
-
|
24 |
-
</p>
|
17 |
<p><?php _e( 'You can skip to next step if you don’t want to.', 'learnpress' ); ?></p>
|
18 |
|
19 |
<p>
|
20 |
+
<label>
|
21 |
+
<input type="checkbox" name="settings[emails][enable]" value="yes">
|
22 |
<?php _e( 'Enable emails', 'learnpress' ); ?>
|
23 |
+
</label>
|
24 |
+
</p>
|
@@ -19,20 +19,20 @@ $payments = $wizard->get_payments();
|
|
19 |
|
20 |
<ul class="browse-payments">
|
21 |
<?php foreach ( $payments as $slug => $payment ) { ?>
|
22 |
-
|
23 |
-
|
24 |
<?php if ( ! empty( $payment['icon'] ) ) { ?>
|
25 |
-
|
26 |
<?php } else { ?>
|
27 |
-
<?php echo $payment['name']; ?>
|
28 |
<?php } ?>
|
29 |
-
|
30 |
<?php if ( ! empty( $payment['desc'] ) ) { ?>
|
31 |
-
|
32 |
<?php } ?>
|
33 |
-
|
34 |
<?php call_user_func( $payment['callback'] ); ?>
|
35 |
-
|
36 |
-
|
37 |
<?php } ?>
|
38 |
</ul>
|
19 |
|
20 |
<ul class="browse-payments">
|
21 |
<?php foreach ( $payments as $slug => $payment ) { ?>
|
22 |
+
<li class="payment payment-<?php echo esc_attr( $slug ); ?>">
|
23 |
+
<h3 class="payment-name">
|
24 |
<?php if ( ! empty( $payment['icon'] ) ) { ?>
|
25 |
+
<img src="<?php echo esc_url_raw( $payment['icon'] ); ?>">
|
26 |
<?php } else { ?>
|
27 |
+
<?php echo esc_html( $payment['name'] ); ?>
|
28 |
<?php } ?>
|
29 |
+
</h3>
|
30 |
<?php if ( ! empty( $payment['desc'] ) ) { ?>
|
31 |
+
<p class="payment-desc"><?php echo wp_kses_post( $payment['desc'] ); ?></p>
|
32 |
<?php } ?>
|
33 |
+
<div class="payment-settings">
|
34 |
<?php call_user_func( $payment['callback'] ); ?>
|
35 |
+
</div>
|
36 |
+
</li>
|
37 |
<?php } ?>
|
38 |
</ul>
|
@@ -13,4 +13,4 @@ defined( 'ABSPATH' ) or exit;
|
|
13 |
|
14 |
<p class="large-text"><?php _e( 'Thanks for choosing LearnPress to sell your online courses!', 'learnpress' ); ?></p>
|
15 |
|
16 |
-
<p class="large-text"><?php _e( 'The following wizard will help you configure your LMS site and get you started quickly.', 'learnpress' ); ?></p>
|
13 |
|
14 |
<p class="large-text"><?php _e( 'Thanks for choosing LearnPress to sell your online courses!', 'learnpress' ); ?></p>
|
15 |
|
16 |
+
<p class="large-text"><?php _e( 'The following wizard will help you configure your LMS site and get you started quickly.', 'learnpress' ); ?></p>
|
@@ -38,13 +38,6 @@ $count = 0;
|
|
38 |
</li>
|
39 |
</ul>
|
40 |
<div class="clear"></div>
|
41 |
-
<ul class="chart-description">
|
42 |
-
<li class="all"><span><?php _e( 'All', 'learnpress' ); ?></span></li>
|
43 |
-
<li class="free"><span><?php _e( 'Public', 'learnpress' ); ?></span></li>
|
44 |
-
<li class="paid"><span><?php _e( 'Pending', 'learnpress' ); ?></span></li>
|
45 |
-
<li class="all"><span><?php _e( 'Paid', 'learnpress' ); ?></span></li>
|
46 |
-
<li class="free"><span><?php _e( 'Free', 'learnpress' ); ?></span></li>
|
47 |
-
</ul>
|
48 |
<div id="learn-press-chart" class="learn-press-chart">
|
49 |
</div>
|
50 |
|
38 |
</li>
|
39 |
</ul>
|
40 |
<div class="clear"></div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
41 |
<div id="learn-press-chart" class="learn-press-chart">
|
42 |
</div>
|
43 |
|
@@ -55,13 +55,6 @@ learn_press_get_chart_general( null, 'days', 7 );
|
|
55 |
</li>
|
56 |
</ul>
|
57 |
<div class="clear"></div>
|
58 |
-
<ul class="chart-description">
|
59 |
-
<li class="all"><span><?php _e( 'All', 'learnpress' ); ?></span></li>
|
60 |
-
<li class="free"><span><?php _e( 'Public', 'learnpress' ); ?></span></li>
|
61 |
-
<li class="paid"><span><?php _e( 'Pending', 'learnpress' ); ?></span></li>
|
62 |
-
<li class="all"><span><?php _e( 'Paid', 'learnpress' ); ?></span></li>
|
63 |
-
<li class="free"><span><?php _e( 'Free', 'learnpress' ); ?></span></li>
|
64 |
-
</ul>
|
65 |
<div id="learn-press-chart" class="learn-press-chart">
|
66 |
</div>
|
67 |
|
55 |
</li>
|
56 |
</ul>
|
57 |
<div class="clear"></div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
<div id="learn-press-chart" class="learn-press-chart">
|
59 |
</div>
|
60 |
|
@@ -1 +1 @@
|
|
1 |
-
<?php // Silence is golden.
|
1 |
+
<?php // Silence is golden.
|
@@ -59,11 +59,6 @@ $count = 0;
|
|
59 |
</div>
|
60 |
|
61 |
<div class="clear"></div>
|
62 |
-
<ul class="chart-description">
|
63 |
-
<li class="all"><span><?php _e( 'All', 'learnpress' ); ?></span></li>
|
64 |
-
<li class="instructors"><span><?php _e( 'Completed', 'learnpress' ); ?></span></li>
|
65 |
-
<li class="students"><span><?php _e( 'Pending', 'learnpress' ); ?></span></li>
|
66 |
-
</ul>
|
67 |
<div id="learn-press-chart" class="learn-press-chart">
|
68 |
</div>
|
69 |
|
59 |
</div>
|
60 |
|
61 |
<div class="clear"></div>
|
|
|
|
|
|
|
|
|
|
|
62 |
<div id="learn-press-chart" class="learn-press-chart">
|
63 |
</div>
|
64 |
|
@@ -42,11 +42,6 @@ $count = 0;
|
|
42 |
</li>
|
43 |
</ul>
|
44 |
<div class="clear"></div>
|
45 |
-
<ul class="chart-description">
|
46 |
-
<li class="all"><span><?php _e( 'All', 'learnpress' ); ?></span></li>
|
47 |
-
<li class="instructors"><span><?php _e( 'Instructors', 'learnpress' ); ?></span></li>
|
48 |
-
<li class="students"><span><?php _e( 'Students', 'learnpress' ); ?></span></li>
|
49 |
-
</ul>
|
50 |
<div id="learn-press-chart" class="learn-press-chart">
|
51 |
</div>
|
52 |
|
42 |
</li>
|
43 |
</ul>
|
44 |
<div class="clear"></div>
|
|
|
|
|
|
|
|
|
|
|
45 |
<div id="learn-press-chart" class="learn-press-chart">
|
46 |
</div>
|
47 |
|
@@ -12,6 +12,6 @@ $viewbox = isset( $viewbox ) ? $viewbox : '0 0 32 32';
|
|
12 |
$class = isset( $class ) ? $class : 'svg-icon';
|
13 |
?>
|
14 |
|
15 |
-
<svg class="<?php echo $class; ?>" viewBox="<?php echo $viewbox; ?>">
|
16 |
<path d="M 14 5.5 a 3 3 0 1 1 -3 -3 A 3 3 0 0 1 14 5.5 Z m 7 3 a 3 3 0 1 0 -3 -3 A 3 3 0 0 0 21 8.5 Z m -10 4 a 3 3 0 1 0 3 3 A 3 3 0 0 0 11 12.5 Z m 10 0 a 3 3 0 1 0 3 3 A 3 3 0 0 0 21 12.5 Z m -10 10 a 3 3 0 1 0 3 3 A 3 3 0 0 0 11 22.5 Z m 10 0 a 3 3 0 1 0 3 3 A 3 3 0 0 0 21 22.5 Z"></path>
|
17 |
</svg>
|
12 |
$class = isset( $class ) ? $class : 'svg-icon';
|
13 |
?>
|
14 |
|
15 |
+
<svg class="<?php echo esc_attr( $class ); ?>" viewBox="<?php echo esc_attr( $viewbox ); ?>">
|
16 |
<path d="M 14 5.5 a 3 3 0 1 1 -3 -3 A 3 3 0 0 1 14 5.5 Z m 7 3 a 3 3 0 1 0 -3 -3 A 3 3 0 0 0 21 8.5 Z m -10 4 a 3 3 0 1 0 3 3 A 3 3 0 0 0 11 12.5 Z m 10 0 a 3 3 0 1 0 3 3 A 3 3 0 0 0 21 12.5 Z m -10 10 a 3 3 0 1 0 3 3 A 3 3 0 0 0 11 22.5 Z m 10 0 a 3 3 0 1 0 3 3 A 3 3 0 0 0 21 22.5 Z"></path>
|
17 |
</svg>
|
@@ -11,18 +11,6 @@ $section_range = LP_Install_Sample_Data::$section_range;
|
|
11 |
$item_range = LP_Install_Sample_Data::$item_range;
|
12 |
$question_range = LP_Install_Sample_Data::$question_range;
|
13 |
$answer_range = LP_Install_Sample_Data::$answer_range;
|
14 |
-
/**
|
15 |
-
* Format hooks
|
16 |
-
*/
|
17 |
-
$hooks = apply_filters(
|
18 |
-
'lp/install-sample/hooks',
|
19 |
-
array(
|
20 |
-
/*array(
|
21 |
-
'class' => 'class_name',
|
22 |
-
'action' => 'action_name',
|
23 |
-
),*/
|
24 |
-
)
|
25 |
-
);
|
26 |
?>
|
27 |
|
28 |
<div class="lp-install-sample">
|
@@ -38,38 +26,43 @@ $hooks = apply_filters(
|
|
38 |
</li>
|
39 |
<li>
|
40 |
<p><?php esc_html_e( 'Random number of sections in range', 'learnpress' ); ?></p>
|
41 |
-
<input type="number" size="3" value="<?php echo $section_range[0]; ?>" min="1" max="20" name="section-range[]">
|
42 |
-
<input type="number" size="3" value="<?php echo $section_range[1]; ?>" min="1" max="20" name="section-range[]">
|
43 |
</li>
|
44 |
<li>
|
45 |
<p><?php esc_html_e( 'Random number of items in range (each section)', 'learnpress' ); ?></p>
|
46 |
-
<input type="number" size="3" value="<?php echo $item_range[0]; ?>" min="1" max="50" name="item-range[]">
|
47 |
-
<input type="number" size="3" value="<?php echo $item_range[1]; ?>" min="1" max="50" name="item-range[]">
|
48 |
</li>
|
49 |
<li>
|
50 |
<p><?php esc_html_e( 'Random number of questions in range (each quiz)', 'learnpress' ); ?></p>
|
51 |
-
<input type="number" size="3" value="<?php echo $question_range[0]; ?>" min="1" max="50" name="question-range[]">
|
52 |
-
<input type="number" size="3" value="<?php echo $question_range[1]; ?>" min="1" max="50" name="question-range[]">
|
53 |
</li>
|
54 |
<li>
|
55 |
<p><?php esc_html_e( 'Random number of answers in range (each question)', 'learnpress' ); ?></p>
|
56 |
-
<input type="number" size="3" value="<?php echo $answer_range[0]; ?>" min="1" max="10" name="answer-range[]">
|
57 |
-
<input type="number" size="3" value="<?php echo $answer_range[1]; ?>" min="1" max="10" name="answer-range[]">
|
58 |
</li>
|
59 |
<li>
|
60 |
<p><?php esc_html_e( 'Course price', 'learnpress' ); ?></p>
|
61 |
<input type="number" size="3" value="" min="0" name="course-price">
|
62 |
</li>
|
63 |
-
<input name="hooks" type="hidden" value="<?php echo esc_attr( htmlspecialchars( json_encode( $hooks ) ) ); ?>">
|
64 |
</ul>
|
65 |
</fieldset>
|
66 |
|
67 |
<p class="lp-install-sample__buttons">
|
68 |
-
<a class="button button-primary lp-install-sample__install"
|
|
|
|
|
|
|
69 |
<?php esc_html_e( 'Install', 'learnpress' ); ?>
|
70 |
</a>
|
71 |
<a href="" class="lp-install-sample__toggle-options"><?php esc_html_e( 'Show options', 'learnpress' ); ?></a>
|
72 |
-
<a class="button lp-install-sample__uninstall"
|
|
|
|
|
|
|
73 |
<?php esc_html_e( 'Delete sample course', 'learnpress' ); ?>
|
74 |
</a>
|
75 |
</p>
|
11 |
$item_range = LP_Install_Sample_Data::$item_range;
|
12 |
$question_range = LP_Install_Sample_Data::$question_range;
|
13 |
$answer_range = LP_Install_Sample_Data::$answer_range;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
?>
|
15 |
|
16 |
<div class="lp-install-sample">
|
26 |
</li>
|
27 |
<li>
|
28 |
<p><?php esc_html_e( 'Random number of sections in range', 'learnpress' ); ?></p>
|
29 |
+
<input type="number" size="3" value="<?php echo esc_attr( $section_range[0] ); ?>" min="1" max="20" name="section-range[]">
|
30 |
+
<input type="number" size="3" value="<?php echo esc_attr( $section_range[1] ); ?>" min="1" max="20" name="section-range[]">
|
31 |
</li>
|
32 |
<li>
|
33 |
<p><?php esc_html_e( 'Random number of items in range (each section)', 'learnpress' ); ?></p>
|
34 |
+
<input type="number" size="3" value="<?php echo esc_attr( $item_range[0] ); ?>" min="1" max="50" name="item-range[]">
|
35 |
+
<input type="number" size="3" value="<?php echo esc_attr( $item_range[1] ); ?>" min="1" max="50" name="item-range[]">
|
36 |
</li>
|
37 |
<li>
|
38 |
<p><?php esc_html_e( 'Random number of questions in range (each quiz)', 'learnpress' ); ?></p>
|
39 |
+
<input type="number" size="3" value="<?php echo esc_attr( $question_range[0] ); ?>" min="1" max="50" name="question-range[]">
|
40 |
+
<input type="number" size="3" value="<?php echo esc_attr( $question_range[1] ); ?>" min="1" max="50" name="question-range[]">
|
41 |
</li>
|
42 |
<li>
|
43 |
<p><?php esc_html_e( 'Random number of answers in range (each question)', 'learnpress' ); ?></p>
|
44 |
+
<input type="number" size="3" value="<?php echo esc_attr( $answer_range[0] ); ?>" min="1" max="10" name="answer-range[]">
|
45 |
+
<input type="number" size="3" value="<?php echo esc_attr( $answer_range[1] ); ?>" min="1" max="10" name="answer-range[]">
|
46 |
</li>
|
47 |
<li>
|
48 |
<p><?php esc_html_e( 'Course price', 'learnpress' ); ?></p>
|
49 |
<input type="number" size="3" value="" min="0" name="course-price">
|
50 |
</li>
|
|
|
51 |
</ul>
|
52 |
</fieldset>
|
53 |
|
54 |
<p class="lp-install-sample__buttons">
|
55 |
+
<a class="button button-primary lp-install-sample__install"
|
56 |
+
data-text="<?php esc_attr_e( 'Install', 'learnpress' ); ?>"
|
57 |
+
data-installing-text="<?php esc_attr_e( 'Installing...', 'learnpress' ); ?>"
|
58 |
+
href="<?php echo wp_nonce_url( admin_url( 'index.php?page=lp-install-sample-data' ), 'install-sample-course' ); ?>">
|
59 |
<?php esc_html_e( 'Install', 'learnpress' ); ?>
|
60 |
</a>
|
61 |
<a href="" class="lp-install-sample__toggle-options"><?php esc_html_e( 'Show options', 'learnpress' ); ?></a>
|
62 |
+
<a class="button lp-install-sample__uninstall"
|
63 |
+
data-text="<?php esc_attr_e( 'Delete sample course', 'learnpress' ); ?>"
|
64 |
+
data-uninstalling-text="<?php esc_attr_e( 'Deleting...', 'learnpress' ); ?>"
|
65 |
+
href="<?php echo wp_nonce_url( admin_url( 'index.php?page=lp-uninstall-sample-data' ), 'uninstall-sample-course' ); ?>">
|
66 |
<?php esc_html_e( 'Delete sample course', 'learnpress' ); ?>
|
67 |
</a>
|
68 |
</p>
|
@@ -9,88 +9,88 @@ defined( 'ABSPATH' ) or die();
|
|
9 |
|
10 |
?>
|
11 |
<div id="learn-press-reset-user-item" class="card">
|
12 |
-
|
13 |
-
|
14 |
<?php _e( 'This action will reset progress of specific lesson or quiz.', 'learnpress' ); ?>
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
</div>
|
30 |
|
31 |
<?php
|
32 |
|
33 |
// Translation
|
34 |
$localize = array(
|
35 |
-
'reset_course_users' => __( 'Are you sure to reset progress of this item?', 'learnpress' )
|
36 |
);
|
37 |
?>
|
38 |
<script>
|
39 |
-
|
40 |
|
41 |
-
|
42 |
-
|
43 |
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
|
96 |
-
</script>
|
9 |
|
10 |
?>
|
11 |
<div id="learn-press-reset-user-item" class="card">
|
12 |
+
<h2><?php _e( 'Reset item progress for an user', 'learnpress' ); ?></h2>
|
13 |
+
<div class="description">
|
14 |
<?php _e( 'This action will reset progress of specific lesson or quiz.', 'learnpress' ); ?>
|
15 |
+
</div>
|
16 |
+
<table>
|
17 |
+
<tr>
|
18 |
+
<td><strong><?php _e( 'User ID or Email', 'learnpress' ); ?></strong></td>
|
19 |
+
<td><strong><?php _e( 'Item ID (ID of quiz or lesson)', 'learnpress' ); ?></strong></td>
|
20 |
+
</tr>
|
21 |
+
<tr>
|
22 |
+
<td><input type="text" v-model="user_id" @keyup="update($event)"></td>
|
23 |
+
<td><input type="text" v-model="item_id" @keyup="update($event)"></td>
|
24 |
+
</tr>
|
25 |
+
</table>
|
26 |
+
<p v-if="message">{{message}}</p>
|
27 |
+
<button class="button" @click="reset($event)"
|
28 |
+
:disabled="resetting || !isValid()"><?php _e( 'Reset', 'learnpress' ); ?></button>
|
29 |
</div>
|
30 |
|
31 |
<?php
|
32 |
|
33 |
// Translation
|
34 |
$localize = array(
|
35 |
+
'reset_course_users' => __( 'Are you sure to reset progress of this item?', 'learnpress' ),
|
36 |
);
|
37 |
?>
|
38 |
<script>
|
39 |
+
window.$Vue = window.$Vue || Vue;
|
40 |
|
41 |
+
jQuery(function ($) {
|
42 |
+
var js_localize = <?php echo wp_json_encode( $localize ); ?>
|
43 |
|
44 |
+
new $Vue({
|
45 |
+
el: '#learn-press-reset-user-item',
|
46 |
+
data: {
|
47 |
+
user_id: '',
|
48 |
+
item_id: '',
|
49 |
+
resetting: false,
|
50 |
+
message: ''
|
51 |
+
},
|
52 |
+
watch: {},
|
53 |
+
created: function () {
|
54 |
|
55 |
+
},
|
56 |
+
mounted: function () {
|
57 |
+
$(this.$el).closest('form').on('submit', function () {
|
58 |
+
return false;
|
59 |
+
})
|
60 |
+
},
|
61 |
+
methods: {
|
62 |
+
reset: function (e) {
|
63 |
+
e.preventDefault();
|
64 |
+
if (!this.user_id || !this.item_id) {
|
65 |
+
return;
|
66 |
+
}
|
67 |
+
if (!confirm(js_localize.reset_course_users)) {
|
68 |
+
return;
|
69 |
+
}
|
70 |
+
var that = this;
|
71 |
+
this.resetting = true;
|
72 |
+
this.message = '';
|
73 |
+
$.ajax({
|
74 |
+
url: '',
|
75 |
+
data: {
|
76 |
+
'lp-ajax': 'rs-reset-user-item',
|
77 |
+
user_id: this.user_id,
|
78 |
+
item_id: this.item_id
|
79 |
+
},
|
80 |
+
success: function (response) {
|
81 |
+
that.resetting = false;
|
82 |
+
that.message = response;
|
83 |
+
}
|
84 |
+
})
|
85 |
+
},
|
86 |
+
update: function (e) {
|
87 |
+
e.preventDefault();
|
88 |
+
},
|
89 |
+
isValid: function () {
|
90 |
+
return this.user_id && this.item_id;
|
91 |
+
}
|
92 |
+
}
|
93 |
+
});
|
94 |
+
});
|
95 |
|
96 |
+
</script>
|
@@ -53,7 +53,7 @@ defined( 'ABSPATH' ) or die();
|
|
53 |
data-reset="all"
|
54 |
:class="resetActionClass(user)"
|
55 |
@click="reset($event, user);"></a>
|
56 |
-
<span style="font-size: 12px"><?php echo esc_html__('Delete All','learnpress'); ?></span>
|
57 |
</td>
|
58 |
</tr>
|
59 |
</tbody>
|
53 |
data-reset="all"
|
54 |
:class="resetActionClass(user)"
|
55 |
@click="reset($event, user);"></a>
|
56 |
+
<span style="font-size: 12px"><?php echo esc_html__( 'Delete All', 'learnpress' ); ?></span>
|
57 |
</td>
|
58 |
</tr>
|
59 |
</tbody>
|
@@ -33,7 +33,10 @@ $clean_tables = array(
|
|
33 |
?>
|
34 |
<li style="background-color: <?php echo esc_attr( $color_code ); ?>">
|
35 |
<input type="checkbox" id="clean-table__<?php echo esc_attr( $clean_table ); ?>" name="clean-table__<?php echo esc_attr( $clean_table ); ?>" value="<?php echo esc_attr( $clean_table ); ?>" >
|
36 |
-
<label for="clean-table__<?php echo esc_attr( $clean_table ); ?>"
|
|
|
|
|
|
|
37 |
</li>
|
38 |
<?php endforeach; ?>
|
39 |
</ul>
|
33 |
?>
|
34 |
<li style="background-color: <?php echo esc_attr( $color_code ); ?>">
|
35 |
<input type="checkbox" id="clean-table__<?php echo esc_attr( $clean_table ); ?>" name="clean-table__<?php echo esc_attr( $clean_table ); ?>" value="<?php echo esc_attr( $clean_table ); ?>" >
|
36 |
+
<label for="clean-table__<?php echo esc_attr( $clean_table ); ?>">
|
37 |
+
<?php echo sprintf( '%s (%d) %s', $clean_table, $lp_db_sessions->count_row_db_sessions(), __( 'rows expire', 'learnpress' ) ); ?>
|
38 |
+
</label>
|
39 |
+
<br>
|
40 |
</li>
|
41 |
<?php endforeach; ?>
|
42 |
</ul>
|
@@ -1,5 +1,5 @@
|
|
1 |
<?php
|
2 |
-
learn_press_admin_view('tools/course/html-install-sample-data');
|
3 |
-
learn_press_admin_view('tools/course/html-course');
|
4 |
-
learn_press_admin_view('tools/course/html-user');
|
5 |
-
learn_press_admin_view('tools/course/html-user-item');
|
1 |
<?php
|
2 |
+
learn_press_admin_view( 'tools/course/html-install-sample-data' );
|
3 |
+
learn_press_admin_view( 'tools/course/html-course' );
|
4 |
+
learn_press_admin_view( 'tools/course/html-user' );
|
5 |
+
learn_press_admin_view( 'tools/course/html-user-item' );
|
@@ -81,17 +81,17 @@ if ( $template_dir != $stylesheet_dir ) {
|
|
81 |
echo 'data-filter-unversioned="yes"';
|
82 |
}
|
83 |
?>
|
84 |
-
class="template-row <?php echo $template_class; ?>">
|
85 |
-
<td class="template-file"><code><?php echo $template[0]; ?></code></td>
|
86 |
<td class="template-version">
|
87 |
-
<span><?php echo $template[1]; ?></span>
|
88 |
</td>
|
89 |
-
<td class="core-version"><span><?php echo $template[2]; ?></span></td>
|
90 |
</tr>
|
91 |
<?php endforeach; ?>
|
92 |
<?php endif; ?>
|
93 |
|
94 |
-
<tr id="learn-press-no-templates" class="<?php echo $templates ? 'hide-if-js' : ''; ?>">
|
95 |
<td colspan="3">
|
96 |
<p><?php _e( 'There is no template file has overwritten', 'learnpress' ); ?></p>
|
97 |
</td>
|
81 |
echo 'data-filter-unversioned="yes"';
|
82 |
}
|
83 |
?>
|
84 |
+
class="template-row <?php echo esc_attr( $template_class ); ?>">
|
85 |
+
<td class="template-file"><code><?php echo esc_html( $template[0] ); ?></code></td>
|
86 |
<td class="template-version">
|
87 |
+
<span><?php echo esc_html( $template[1] ); ?></span>
|
88 |
</td>
|
89 |
+
<td class="core-version"><span><?php echo esc_html( $template[2] ); ?></span></td>
|
90 |
</tr>
|
91 |
<?php endforeach; ?>
|
92 |
<?php endif; ?>
|
93 |
|
94 |
+
<tr id="learn-press-no-templates" class="<?php echo esc_attr( $templates ? 'hide-if-js' : '' ); ?>">
|
95 |
<td colspan="3">
|
96 |
<p><?php _e( 'There is no template file has overwritten', 'learnpress' ); ?></p>
|
97 |
</td>
|
@@ -11,15 +11,15 @@ defined( 'ABSPATH' ) or die();
|
|
11 |
|
12 |
?>
|
13 |
<div class="notice notice-warning lp-notice lp-upgrade-notice">
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
</div>
|
11 |
|
12 |
?>
|
13 |
<div class="notice notice-warning lp-notice lp-upgrade-notice">
|
14 |
+
<h4><?php printf( __( 'Welcome to LearnPress %s', 'learnpress' ), LEARNPRESS_VERSION ); ?></h4>
|
15 |
+
<p><?php _e( 'This is a <strong>BIG UPDATE</strong> and it allows you to do so much more!', 'learnpress' ); ?></p>
|
16 |
+
<p><?php _e( 'If there\'s any issue, please be sure to backup your site, update your theme, contact supporter.', 'learnpres' ); ?></p>
|
17 |
+
<p>
|
18 |
+
<a class="button"
|
19 |
+
href="https://thimpress.com/learnpress-3-0/"
|
20 |
+
target="_blank"><?php _e( 'Check what\'s new', 'learnpress' ); ?></a>
|
21 |
+
<a class="button" href="https://thimpress.com/help/"
|
22 |
+
target="_blank"><?php _e( 'Get support now', 'learnpress' ); ?></a>
|
23 |
+
</p>
|
24 |
+
<a class="close-notice" href=""><?php _e( 'Got it!', 'learnpress' ); ?></a>
|
25 |
+
</div>
|
@@ -16,108 +16,9 @@ if ( ! isset( $user_id ) ) {
|
|
16 |
$profile = LP_Profile::instance( $user_id );
|
17 |
$user = $profile->get_user();
|
18 |
$slug_profile_courses = LP_Settings::instance()->get( 'profile_endpoints.courses', 'courses' );
|
19 |
-
$link_user_profile =
|
20 |
-
echo wp_sprintf( '<p><b>%s</b> <a href="%s" target="_blank">%s</a></p>', __( 'Course list of user enrolled', 'learnpress' ), $link_user_profile, __( 'View', 'learnpress' ) );
|
21 |
-
|
22 |
-
return;
|
23 |
-
|
24 |
-
$query = $profile->query_courses( 'purchased' );
|
25 |
?>
|
26 |
-
|
27 |
-
<
|
28 |
-
<
|
29 |
-
|
30 |
-
<?php $course_ids = $query->get_items(); ?>
|
31 |
-
|
32 |
-
<?php if ( ! $query || ( ! $course_ids ) ) : ?>
|
33 |
-
<?php esc_html_e( 'No courses.', 'learnpress' ); ?>
|
34 |
-
<?php else : ?>
|
35 |
-
|
36 |
-
<table class="wp-list-table widefat fixed striped courses">
|
37 |
-
<thead>
|
38 |
-
<tr>
|
39 |
-
<th class="manage-column column-course"><?php esc_html_e( 'Course', 'learnpress' ); ?></th>
|
40 |
-
<th class="manage-column column-start-date"><?php esc_html_e( 'Start time', 'learnpress' ); ?></th>
|
41 |
-
<th class="manage-column column-end-date"><?php esc_html_e( 'End time', 'learnpress' ); ?></th>
|
42 |
-
<th class="manage-column column-finished-date"><?php esc_html_e( 'Finished', 'learnpress' ); ?></th>
|
43 |
-
<th class="manage-column column-results"><?php esc_html_e( 'Results', 'learnpress' ); ?></th>
|
44 |
-
</tr>
|
45 |
-
</thead>
|
46 |
-
|
47 |
-
<tbody>
|
48 |
-
<?php foreach ( $course_ids as $course_id ) : ?>
|
49 |
-
<?php
|
50 |
-
$course_id = absint( $course_id->get_id() );
|
51 |
-
$course = learn_press_get_course( $course_id );
|
52 |
-
if ( ! $course ) {
|
53 |
-
continue;
|
54 |
-
}
|
55 |
-
$course_data = $user->get_course_data( $course_id );
|
56 |
-
$course_result = $course_data->get_result();
|
57 |
-
$status = $course_result['status'];
|
58 |
-
$grade = $course_data->get_graduation_text();
|
59 |
-
?>
|
60 |
-
|
61 |
-
<tr>
|
62 |
-
<td class="manage-column column-course">
|
63 |
-
<a href="<?php echo esc_url_raw( $course->get_permalink() ); ?>"><?php echo esc_html( $course->get_title() ); ?></a>
|
64 |
-
</td>
|
65 |
-
|
66 |
-
<td class="manage-column column-start-date">
|
67 |
-
<?php echo $course_data->get_start_time(); ?>
|
68 |
-
</td>
|
69 |
-
|
70 |
-
<td class="manage-column column-end-date">
|
71 |
-
<?php echo $course_data->get_end_time(); ?>
|
72 |
-
</td>
|
73 |
-
|
74 |
-
<td class="manage-column column-finished-date">
|
75 |
-
<?php
|
76 |
-
if ( $status === 'finished' ) {
|
77 |
-
echo $course_data->get_end_time();
|
78 |
-
}
|
79 |
-
|
80 |
-
$icon = '';
|
81 |
-
$label_class = array( $status );
|
82 |
-
|
83 |
-
switch ( $status ) {
|
84 |
-
case 'finished':
|
85 |
-
if ( $grade === 'passed' ) {
|
86 |
-
$icon = '<i class="far fa-check-circle"></i>';
|
87 |
-
$label_class[] = 'success';
|
88 |
-
} elseif ( $grade === 'failed' ) {
|
89 |
-
$icon = '<i class="far fa-times-circle"></i>';
|
90 |
-
$label_class[] = 'error';
|
91 |
-
} else {
|
92 |
-
$icon = '<i class="far fa-check-circle"></i>';
|
93 |
-
$label_class[] = 'warning';
|
94 |
-
}
|
95 |
-
break;
|
96 |
-
case 'in-progress':
|
97 |
-
case 'enrolled':
|
98 |
-
$icon = '<i class="far fa-check-circle"></i>';
|
99 |
-
$label_class[] = 'warning';
|
100 |
-
break;
|
101 |
-
case 'passed':
|
102 |
-
$icon = '<i class="far fa-check-circle"></i>';
|
103 |
-
$label_class[] = 'success';
|
104 |
-
}
|
105 |
-
?>
|
106 |
-
|
107 |
-
<span class="lp-label <?php echo implode( ' ', $label_class ); ?>">
|
108 |
-
<?php
|
109 |
-
echo $icon;
|
110 |
-
echo ucfirst( $grade ? $grade : $status );
|
111 |
-
?>
|
112 |
-
</span>
|
113 |
-
</td>
|
114 |
-
|
115 |
-
<td class="manage-column column-results">
|
116 |
-
<?php learn_press_admin_view( 'user/course-progress', compact( 'user', 'course', 'course_result' ) ); ?>
|
117 |
-
</td>
|
118 |
-
</tr>
|
119 |
-
<?php endforeach; ?>
|
120 |
-
</tbody>
|
121 |
-
</table>
|
122 |
-
<?php endif; ?>
|
123 |
-
</div>
|
16 |
$profile = LP_Profile::instance( $user_id );
|
17 |
$user = $profile->get_user();
|
18 |
$slug_profile_courses = LP_Settings::instance()->get( 'profile_endpoints.courses', 'courses' );
|
19 |
+
$link_user_profile = add_query_arg( [ 'tab' => 'enrolled' ], learn_press_user_profile_link( $user_id ) . $slug_profile_courses );
|
|
|
|
|
|
|
|
|
|
|
20 |
?>
|
21 |
+
<p>
|
22 |
+
<b><?php _e( 'Course list of user enrolled', 'learnpress' ); ?></b>
|
23 |
+
<a href="<?php echo esc_url_raw( $link_user_profile ); ?>" target="_blank"><?php _e( 'View', 'learnpress' ); ?></a>
|
24 |
+
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1,408 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Add attributes feature for course
|
4 |
-
*
|
5 |
-
* @since 2.1.4
|
6 |
-
*/
|
7 |
-
if ( ! class_exists( 'LP_Course_Attributes' ) ) {
|
8 |
-
/**
|
9 |
-
* Class LP_Course_Attributes
|
10 |
-
*/
|
11 |
-
class LP_Course_Attributes {
|
12 |
-
/**
|
13 |
-
* @var string
|
14 |
-
*/
|
15 |
-
private $_tax = '';
|
16 |
-
|
17 |
-
/**
|
18 |
-
* @var bool
|
19 |
-
*/
|
20 |
-
private $_screen = false;
|
21 |
-
|
22 |
-
/**
|
23 |
-
* @var null
|
24 |
-
*/
|
25 |
-
private $_attribute_terms = null;
|
26 |
-
|
27 |
-
/**
|
28 |
-
* LP_Course_Attributes constructor.
|
29 |
-
*/
|
30 |
-
public function __construct() {
|
31 |
-
add_action( 'init', array( $this, 'register' ), 10 );
|
32 |
-
add_action( 'load-edit-tags.php', array( $this, 'ready' ) );
|
33 |
-
add_action( 'pre_delete_term', array( $this, 'pre_delete_term' ), 10, 2 );
|
34 |
-
add_action( 'delete_term', array( $this, 'delete_terms' ), 10, 5 );
|
35 |
-
|
36 |
-
add_filter( 'learn_press_admin_tabs_info', array( $this, 'admin_tab' ) );
|
37 |
-
add_filter( 'course_attribute_row_actions', array( $this, 'row_actions' ), 10, 2 );
|
38 |
-
add_filter( 'terms_clauses', array( $this, 'term_clauses' ), 10, 3 );
|
39 |
-
add_filter( 'learn_press_admin_tabs_on_pages', array( $this, 'admin_tabs_pages' ) );
|
40 |
-
|
41 |
-
add_filter( 'learn_press_lp_course_tabs', array( $this, 'course_attributes_tab' ) );
|
42 |
-
add_action( 'learn_press_admin_load_scripts', array( $this, 'admin_scripts' ) );
|
43 |
-
|
44 |
-
LP_Request_Handler::register(
|
45 |
-
array(
|
46 |
-
array(
|
47 |
-
'priority' => 100,
|
48 |
-
'action' => 'remove-course-attribute-terms',
|
49 |
-
'callback' => array( $this, 'remove_terms' ),
|
50 |
-
),
|
51 |
-
array(
|
52 |
-
'action' => 'add-attribute-to-course',
|
53 |
-
'callback' => array( $this, 'add_attribute_to_course' ),
|
54 |
-
),
|
55 |
-
array(
|
56 |
-
'action' => 'add-attribute-value',
|
57 |
-
'callback' => array( $this, 'add_attribute_value' ),
|
58 |
-
),
|
59 |
-
array(
|
60 |
-
'action' => 'save-attributes',
|
61 |
-
'callback' => array( $this, 'save_attributes' ),
|
62 |
-
),
|
63 |
-
)
|
64 |
-
);
|
65 |
-
}
|
66 |
-
|
67 |
-
public function save_attributes( $course_id ) {
|
68 |
-
$data = learn_press_get_request( 'data' );
|
69 |
-
$attributes = array();
|
70 |
-
parse_str( $data, $attributes );
|
71 |
-
if ( $attributes ) {
|
72 |
-
$attributes = $attributes['course-attribute-values'];
|
73 |
-
foreach ( $attributes as $taxonomy_id => $values ) {
|
74 |
-
if ( ! $values ) {
|
75 |
-
continue;
|
76 |
-
}
|
77 |
-
$taxonomy = get_term( $taxonomy_id, LP_COURSE_ATTRIBUTE );
|
78 |
-
wp_set_object_terms( $course_id, $values, LP_COURSE_ATTRIBUTE . '-' . $taxonomy->slug );
|
79 |
-
}
|
80 |
-
}
|
81 |
-
die();
|
82 |
-
}
|
83 |
-
|
84 |
-
public function add_attribute_value( $course_id ) {
|
85 |
-
|
86 |
-
if ( LP_COURSE_CPT != get_post_type( $course_id ) ) {
|
87 |
-
return;
|
88 |
-
}
|
89 |
-
|
90 |
-
$taxonomy = learn_press_get_request( 'taxonomy' );
|
91 |
-
$name = learn_press_get_request( 'name' );
|
92 |
-
$new = learn_press_add_course_attribute_value( $name, $taxonomy );
|
93 |
-
$response = array();
|
94 |
-
|
95 |
-
if ( ! is_wp_error( $new ) ) {
|
96 |
-
$term = get_term_by( 'term_taxonomy_id', $new['term_taxonomy_id'] );
|
97 |
-
$response['slug'] = $term->slug;
|
98 |
-
$response['name'] = $term->name;
|
99 |
-
|
100 |
-
$response['result'] = 'success';
|
101 |
-
} elseif ( ! $new ) {
|
102 |
-
$response['result'] = 'error';
|
103 |
-
$response['error'] = __( 'Unknown error', 'learnpress' );
|
104 |
-
} else {
|
105 |
-
$response['result'] = 'error';
|
106 |
-
$response['error'] = $new->get_error_messages();
|
107 |
-
}
|
108 |
-
|
109 |
-
learn_press_send_json( $response );
|
110 |
-
die();
|
111 |
-
}
|
112 |
-
|
113 |
-
public function add_attribute_to_course( $course_id ) {
|
114 |
-
$taxonomy = learn_press_get_request( 'taxonomy' );
|
115 |
-
|
116 |
-
if ( LP_COURSE_CPT != get_post_type( $course_id ) ) {
|
117 |
-
return;
|
118 |
-
}
|
119 |
-
|
120 |
-
$attribute = learn_press_add_attribute_to_course( $course_id, $taxonomy );
|
121 |
-
|
122 |
-
if ( $attribute ) {
|
123 |
-
$postId = $course_id;
|
124 |
-
include learn_press_get_admin_view( 'meta-boxes/course/html-course-attribute' );
|
125 |
-
}
|
126 |
-
|
127 |
-
die();
|
128 |
-
}
|
129 |
-
|
130 |
-
public function admin_scripts() {
|
131 |
-
LP_Assets::enqueue_script( 'learn-press-course-attributes' );
|
132 |
-
LP_Assets::enqueue_script( 'select2' );
|
133 |
-
LP_Assets::enqueue_style( 'learn-press-course-attributes' );
|
134 |
-
LP_Assets::enqueue_style( 'learn-press-statistics-select2' );
|
135 |
-
|
136 |
-
}
|
137 |
-
|
138 |
-
public function course_attributes_tab( $tabs ) {
|
139 |
-
$tabs['attributes'] = array(
|
140 |
-
'title' => __( 'Attributes', 'learnpress' ),
|
141 |
-
'callback' => array( $this, 'course_attributes' ),
|
142 |
-
);
|
143 |
-
return $tabs;
|
144 |
-
}
|
145 |
-
|
146 |
-
public function course_attributes() {
|
147 |
-
include learn_press_admin_view( 'meta-boxes/course/attributes' );
|
148 |
-
}
|
149 |
-
|
150 |
-
public function remove_terms( $attribute ) {
|
151 |
-
if ( learn_press_delete_attribute_terms( $attribute ) ) {
|
152 |
-
learn_press_add_notice( 'Deleted attribute terms', 'learnpress' );
|
153 |
-
}
|
154 |
-
wp_redirect( esc_url_raw( remove_query_arg( 'remove-course-attribute-terms' ) ) );
|
155 |
-
}
|
156 |
-
|
157 |
-
/**
|
158 |
-
* @param int $term
|
159 |
-
* @param int $tt_id
|
160 |
-
* @param string $taxonomy
|
161 |
-
* @param WP_Term $deleted_term
|
162 |
-
* @param array $object_ids
|
163 |
-
*
|
164 |
-
* @return array|bool
|
165 |
-
*/
|
166 |
-
public function delete_terms( $term, $tt_id, $taxonomy, $deleted_term, $object_ids ) {
|
167 |
-
if ( LP_COURSE_ATTRIBUTE != $taxonomy ) {
|
168 |
-
return false;
|
169 |
-
}
|
170 |
-
return learn_press_delete_attribute_terms( $deleted_term->slug );
|
171 |
-
}
|
172 |
-
|
173 |
-
public function pre_delete_term( $term, $taxonomy ) {
|
174 |
-
|
175 |
-
}
|
176 |
-
|
177 |
-
/**
|
178 |
-
*
|
179 |
-
*/
|
180 |
-
public function ready() {
|
181 |
-
if ( ! empty( $_REQUEST['taxonomy'] ) && strpos( $_REQUEST['taxonomy'], LP_COURSE_ATTRIBUTE ) !== false ) {
|
182 |
-
$this->_tax = $_REQUEST['taxonomy'];
|
183 |
-
$this->_screen = get_current_screen();
|
184 |
-
if ( $this->_screen->id == 'edit-' . LP_COURSE_ATTRIBUTE ) {
|
185 |
-
add_filter( "manage_{$this->_screen->id}_columns", array( $this, 'columns' ) );
|
186 |
-
add_filter( "manage_{$this->_tax}_custom_column", array( $this, 'column' ), 10, 3 );
|
187 |
-
}
|
188 |
-
}
|
189 |
-
}
|
190 |
-
|
191 |
-
/**
|
192 |
-
* @param $content
|
193 |
-
* @param $column_name
|
194 |
-
* @param $term_id
|
195 |
-
*
|
196 |
-
* @return string
|
197 |
-
*/
|
198 |
-
public function column( $content, $column_name, $term_id ) {
|
199 |
-
if ( $column_name == 'terms' ) {
|
200 |
-
$attribute = get_term( $term_id );
|
201 |
-
|
202 |
-
$terms = learn_press_get_attribute_terms( $term_id );
|
203 |
-
if ( $terms ) {
|
204 |
-
$term_labels = array();
|
205 |
-
|
206 |
-
foreach ( $terms as $term ) {
|
207 |
-
$term_labels[] = sprintf( '<a href="%s">%s</a>', get_edit_term_link( $term->term_id, $term->taxonomy, LP_COURSE_CPT ), $term->name );
|
208 |
-
}
|
209 |
-
$content = join( ', ', $term_labels );
|
210 |
-
|
211 |
-
} else {
|
212 |
-
$content .= __( 'No terms found.', 'learnpress' );
|
213 |
-
}
|
214 |
-
$content .= '<div class="row-actions">' . $this->terms_row_actions( $attribute ) . '</div>';
|
215 |
-
|
216 |
-
}
|
217 |
-
return $content;
|
218 |
-
}
|
219 |
-
|
220 |
-
/**
|
221 |
-
* @param $tax
|
222 |
-
*
|
223 |
-
* @return string
|
224 |
-
*/
|
225 |
-
public function terms_row_actions( $tax ) {
|
226 |
-
$uri = wp_doing_ajax() ? wp_get_referer() : esc_url_raw( $_SERVER['REQUEST_URI'] );
|
227 |
-
$edit_link = esc_url_raw(
|
228 |
-
add_query_arg(
|
229 |
-
'wp_http_referer',
|
230 |
-
urlencode( wp_unslash( $uri ) ),
|
231 |
-
add_query_arg(
|
232 |
-
array(
|
233 |
-
'taxonomy' => LP_COURSE_ATTRIBUTE . '-' . $tax->slug,
|
234 |
-
'post_type' => LP_COURSE_CPT,
|
235 |
-
),
|
236 |
-
admin_url( 'term.php' )
|
237 |
-
)
|
238 |
-
)
|
239 |
-
);
|
240 |
-
$terms_actions = array(
|
241 |
-
'edit' => sprintf(
|
242 |
-
'<a href="%s" aria-label="%s" >%s </a > ',
|
243 |
-
esc_url_raw( $edit_link ),
|
244 |
-
esc_attr( sprintf( __( 'Edit “%s”', 'learnpress' ), $tax->name ) ),
|
245 |
-
__( 'Edit', 'learnpress' )
|
246 |
-
),
|
247 |
-
'delete' => sprintf(
|
248 |
-
'<a href="%s" aria-label="%s" >%s </a > ',
|
249 |
-
esc_url_raw( add_query_arg( 'remove-course-attribute-terms', $tax->term_id ) ),
|
250 |
-
'',
|
251 |
-
__( 'Clear', 'learnpress' )
|
252 |
-
),
|
253 |
-
);
|
254 |
-
return join( ' | ', $terms_actions );
|
255 |
-
}
|
256 |
-
|
257 |
-
/**
|
258 |
-
* @param $columns
|
259 |
-
*
|
260 |
-
* @return mixed
|
261 |
-
*/
|
262 |
-
public function columns( $columns ) {
|
263 |
-
if ( $this->_tax == LP_COURSE_ATTRIBUTE && ! empty( $columns['posts'] ) ) {
|
264 |
-
unset( $columns['posts'] );
|
265 |
-
}
|
266 |
-
$columns['terms'] = __( 'Terms', 'learnpress' );
|
267 |
-
return $columns;
|
268 |
-
}
|
269 |
-
|
270 |
-
/**
|
271 |
-
* @param $pages
|
272 |
-
*
|
273 |
-
* @return array
|
274 |
-
*/
|
275 |
-
public function admin_tabs_pages( $pages ) {
|
276 |
-
if ( ! empty( $_REQUEST['taxonomy'] ) && strpos( $_REQUEST['taxonomy'], LP_COURSE_ATTRIBUTE ) !== false ) {
|
277 |
-
$screen_id = get_current_screen()->id;
|
278 |
-
$pages[] = $screen_id;
|
279 |
-
}
|
280 |
-
return $pages;
|
281 |
-
}
|
282 |
-
|
283 |
-
/**
|
284 |
-
* @param $a
|
285 |
-
* @param $b
|
286 |
-
* @param $c
|
287 |
-
*
|
288 |
-
* @return mixed
|
289 |
-
*/
|
290 |
-
public function term_clauses( $a, $b, $c ) {
|
291 |
-
// print_r( func_get_args() );
|
292 |
-
return $a;
|
293 |
-
}
|
294 |
-
|
295 |
-
/**
|
296 |
-
* @param $tabs
|
297 |
-
*
|
298 |
-
* @return array
|
299 |
-
*/
|
300 |
-
public function admin_tab( $tabs ) {
|
301 |
-
if ( ! empty( $_REQUEST['taxonomy'] ) && strpos( $_REQUEST['taxonomy'], LP_COURSE_ATTRIBUTE ) !== false ) {
|
302 |
-
$screen_id = get_current_screen()->id;
|
303 |
-
} else {
|
304 |
-
$screen_id = 'edit-' . LP_COURSE_ATTRIBUTE;
|
305 |
-
}
|
306 |
-
$tabs[] = array(
|
307 |
-
'link' => 'edit-tags.php?taxonomy=' . LP_COURSE_ATTRIBUTE . '&post_type=lp_course',
|
308 |
-
'name' => __( 'Attributes', 'learnpress' ),
|
309 |
-
'id' => $screen_id,
|
310 |
-
);
|
311 |
-
return $tabs;
|
312 |
-
}
|
313 |
-
|
314 |
-
public function register() {
|
315 |
-
register_taxonomy(
|
316 |
-
LP_COURSE_ATTRIBUTE,
|
317 |
-
array( 'lp_course' ),
|
318 |
-
array(
|
319 |
-
'label' => __( 'Attribute', 'learnpress' ),
|
320 |
-
'labels' => array(
|
321 |
-
'name' => __( 'Attributes', 'learnpress' ),
|
322 |
-
'singular_name' => __( 'Attribute', 'learnpress' ),
|
323 |
-
'menu_name' => __( 'Attributes', 'learnpress' ),
|
324 |
-
'add_new_item' => __( 'Add New Attribute', 'learnpress' ),
|
325 |
-
'all_items' => __( 'All Attributes', 'learnpress' ),
|
326 |
-
),
|
327 |
-
'show_ui' => true,
|
328 |
-
'query_var' => true,
|
329 |
-
'show_in_menu' => 'learn_press',
|
330 |
-
'public' => false,
|
331 |
-
'rewrite' => array(
|
332 |
-
'slug' => LP_COURSE_ATTRIBUTE,
|
333 |
-
'with_front' => false,
|
334 |
-
'hierarchical' => true,
|
335 |
-
),
|
336 |
-
)
|
337 |
-
);
|
338 |
-
|
339 |
-
if ( learn_press_get_attributes() ) {
|
340 |
-
$attributes = learn_press_get_attributes();
|
341 |
-
|
342 |
-
foreach ( $attributes as $attribute ) {
|
343 |
-
$this->_register_custom_attribute( $attribute );
|
344 |
-
}
|
345 |
-
}
|
346 |
-
}
|
347 |
-
|
348 |
-
/**
|
349 |
-
* @param $actions
|
350 |
-
* @param $tag
|
351 |
-
*
|
352 |
-
* @return mixed
|
353 |
-
*/
|
354 |
-
public function row_actions( $actions, $tag ) {
|
355 |
-
|
356 |
-
return $actions;
|
357 |
-
}
|
358 |
-
|
359 |
-
/**
|
360 |
-
* @param $attribute
|
361 |
-
*/
|
362 |
-
private function _register_custom_attribute( $attribute ) {
|
363 |
-
$name = $attribute->name;
|
364 |
-
$singular_name = $attribute->name;
|
365 |
-
$tax_data = array(
|
366 |
-
'hierarchical' => true,
|
367 |
-
'update_count_callback' => '_update_post_term_count',
|
368 |
-
'labels' => array(
|
369 |
-
'name' => $name,
|
370 |
-
'singular_name' => $singular_name,
|
371 |
-
'search_items' => sprintf( __( 'Search Course %s', 'learnpress' ), $name ),
|
372 |
-
'all_items' => sprintf( __( 'All Course %s', 'learnpress' ), $name ),
|
373 |
-
'parent_item' => sprintf( __( 'Parent Course %s', 'learnpress' ), $singular_name ),
|
374 |
-
'parent_item_colon' => sprintf( __( 'Parent Course %s:', 'learnpress' ), $singular_name ),
|
375 |
-
'edit_item' => sprintf( __( 'Edit Course %s', 'learnpress' ), $singular_name ),
|
376 |
-
'update_item' => sprintf( __( 'Update Course %s', 'learnpress' ), $singular_name ),
|
377 |
-
'add_new_item' => sprintf( __( 'Add New Course %s', 'learnpress' ), $singular_name ),
|
378 |
-
'new_item_name' => sprintf( __( 'New Course %s', 'learnpress' ), $singular_name ),
|
379 |
-
'not_found' => sprintf( __( 'No "Course %s" found', 'learnpress' ), $singular_name ),
|
380 |
-
),
|
381 |
-
'show_ui' => true,
|
382 |
-
'show_in_quick_edit' => false,
|
383 |
-
'show_in_menu' => false,
|
384 |
-
'show_in_nav_menus' => false,
|
385 |
-
'meta_box_cb' => false,
|
386 |
-
'query_var' => false,
|
387 |
-
'rewrite' => false,
|
388 |
-
'sort' => false,
|
389 |
-
'public' => false,
|
390 |
-
'show_in_nav_menus' => false,
|
391 |
-
);
|
392 |
-
|
393 |
-
$tax_data['rewrite'] = array(
|
394 |
-
'slug' => $attribute->slug,
|
395 |
-
'with_front' => false,
|
396 |
-
'hierarchical' => true,
|
397 |
-
);
|
398 |
-
|
399 |
-
register_taxonomy(
|
400 |
-
sprintf( '%s-%s', LP_COURSE_ATTRIBUTE, $attribute->slug ),
|
401 |
-
apply_filters( 'learn_press_course_attribute_object_' . $attribute->slug, array( 'lp_course' ) ),
|
402 |
-
apply_filters( 'learn_press_course_attribute_args_' . $attribute->slug, $tax_data )
|
403 |
-
);
|
404 |
-
|
405 |
-
}
|
406 |
-
}
|
407 |
-
}
|
408 |
-
return new LP_Course_Attributes();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1,218 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Course attributes functions
|
4 |
-
*/
|
5 |
-
require_once LP_PLUGIN_PATH . '/inc/attributes/course.php';
|
6 |
-
define( 'LP_COURSE_ATTRIBUTE', 'course_attribute' );
|
7 |
-
|
8 |
-
/**
|
9 |
-
* @return array|int|WP_Error
|
10 |
-
*/
|
11 |
-
function learn_press_get_attributes() {
|
12 |
-
return get_terms(
|
13 |
-
LP_COURSE_ATTRIBUTE,
|
14 |
-
array(
|
15 |
-
'hide_empty' => false,
|
16 |
-
)
|
17 |
-
);
|
18 |
-
}
|
19 |
-
|
20 |
-
/**
|
21 |
-
* @param $attribute
|
22 |
-
*
|
23 |
-
* @return array|int|WP_Error
|
24 |
-
*/
|
25 |
-
function learn_press_get_attribute_terms( $attribute ) {
|
26 |
-
$terms = array();
|
27 |
-
|
28 |
-
if ( is_array( $attribute ) ) {
|
29 |
-
foreach ( $attribute as $attr ) {
|
30 |
-
$_terms = learn_press_get_attribute_terms( $attr );
|
31 |
-
if ( is_array( $terms ) ) {
|
32 |
-
$terms = array_merge( $terms, $_terms );
|
33 |
-
}
|
34 |
-
}
|
35 |
-
} else {
|
36 |
-
$term = get_term( $attribute, LP_COURSE_ATTRIBUTE );
|
37 |
-
if ( is_numeric( $attribute ) && ! is_wp_error( $term ) ) {
|
38 |
-
$attribute = $term->slug;
|
39 |
-
}
|
40 |
-
|
41 |
-
$terms = get_terms( sprintf( '%s-%s', LP_COURSE_ATTRIBUTE, $attribute ), array( 'hide_empty' => false ) );
|
42 |
-
}
|
43 |
-
|
44 |
-
return $terms;
|
45 |
-
}
|
46 |
-
|
47 |
-
/**
|
48 |
-
* @param $attribute
|
49 |
-
*
|
50 |
-
* @return array|bool
|
51 |
-
*/
|
52 |
-
function learn_press_delete_attribute_terms( $attribute ) {
|
53 |
-
$deleted_terms = array();
|
54 |
-
$terms = learn_press_get_attribute_terms( $attribute );
|
55 |
-
|
56 |
-
if ( ! $terms ) {
|
57 |
-
return false;
|
58 |
-
}
|
59 |
-
|
60 |
-
foreach ( $terms as $term ) {
|
61 |
-
$deleted = wp_delete_term( $term->term_id, $term->taxonomy );
|
62 |
-
if ( ! is_wp_error( $deleted ) ) {
|
63 |
-
$deleted_terms[] = $term;
|
64 |
-
}
|
65 |
-
}
|
66 |
-
|
67 |
-
do_action( 'learn_press_deleted_attribute_terms', $attribute, $deleted_terms );
|
68 |
-
|
69 |
-
return $deleted_terms;
|
70 |
-
}
|
71 |
-
|
72 |
-
/**
|
73 |
-
* @param $course_id
|
74 |
-
*
|
75 |
-
* @return mixed
|
76 |
-
*/
|
77 |
-
function learn_press_get_course_attributes( $course_id ) {
|
78 |
-
return get_post_meta( $course_id, '_lp_attributes', true );
|
79 |
-
}
|
80 |
-
|
81 |
-
/**
|
82 |
-
* @param $name
|
83 |
-
* @param $taxonomy
|
84 |
-
*
|
85 |
-
* @return array|bool|WP_Error
|
86 |
-
*/
|
87 |
-
function learn_press_add_course_attribute_value( $name, $taxonomy ) {
|
88 |
-
|
89 |
-
if ( ! $name || term_exists( $name, $taxonomy ) ) {
|
90 |
-
return false;
|
91 |
-
}
|
92 |
-
|
93 |
-
$term = get_term_by( 'slug', $taxonomy, LP_COURSE_ATTRIBUTE );
|
94 |
-
|
95 |
-
if ( ! $term ) {
|
96 |
-
return false;
|
97 |
-
}
|
98 |
-
|
99 |
-
$new_value = wp_insert_term( $name, sprintf( '%s-%s', LP_COURSE_ATTRIBUTE, $term->slug ) );
|
100 |
-
|
101 |
-
return $new_value;
|
102 |
-
}
|
103 |
-
|
104 |
-
/**
|
105 |
-
* @param $name
|
106 |
-
*
|
107 |
-
* @return array|bool|WP_Error
|
108 |
-
*/
|
109 |
-
function learn_press_add_course_attribute( $name ) {
|
110 |
-
|
111 |
-
if ( ! $name || term_exists( $name, LP_COURSE_ATTRIBUTE ) ) {
|
112 |
-
return false;
|
113 |
-
}
|
114 |
-
|
115 |
-
$new_value = wp_insert_term( $name, LP_COURSE_ATTRIBUTE );
|
116 |
-
|
117 |
-
return $new_value;
|
118 |
-
}
|
119 |
-
|
120 |
-
/**
|
121 |
-
* @param $course_id
|
122 |
-
* @param $taxonomy
|
123 |
-
*
|
124 |
-
* @return bool|mixed
|
125 |
-
*/
|
126 |
-
function learn_press_add_attribute_to_course( $course_id, $taxonomy ) {
|
127 |
-
$term = get_term_by( 'slug', $taxonomy, LP_COURSE_ATTRIBUTE );
|
128 |
-
|
129 |
-
if ( ! $term ) {
|
130 |
-
return false;
|
131 |
-
}
|
132 |
-
|
133 |
-
$attributes = get_post_meta( $course_id, '_lp_attributes', true );
|
134 |
-
|
135 |
-
if ( ! is_array( $attributes ) ) {
|
136 |
-
$attributes = array();
|
137 |
-
}
|
138 |
-
|
139 |
-
$attribute = apply_filters(
|
140 |
-
'learn_press_update_course_attribute_data',
|
141 |
-
array(
|
142 |
-
'name' => $term->slug,
|
143 |
-
),
|
144 |
-
$course_id,
|
145 |
-
$term
|
146 |
-
);
|
147 |
-
|
148 |
-
$attributes[ $term->slug ] = $attribute;
|
149 |
-
|
150 |
-
$attributes = apply_filters( 'learn_press_update_course_attributes_data', $attributes, $course_id, $term );
|
151 |
-
|
152 |
-
update_post_meta( $course_id, '_lp_attributes', $attributes );
|
153 |
-
|
154 |
-
return $attribute;
|
155 |
-
}
|
156 |
-
|
157 |
-
/**
|
158 |
-
* @param WP_Query $q
|
159 |
-
*
|
160 |
-
* @return mixed
|
161 |
-
*/
|
162 |
-
function learn_press_filter_courses_by_attributes( $q ) {
|
163 |
-
global $lp_tax_query;
|
164 |
-
|
165 |
-
if ( empty( $_REQUEST['course-filter'] ) ) {
|
166 |
-
return $q;
|
167 |
-
}
|
168 |
-
|
169 |
-
if ( ! $q->is_main_query() ) {
|
170 |
-
return $q;
|
171 |
-
}
|
172 |
-
|
173 |
-
if ( LP_COURSE_CPT != $q->get( 'post_type' ) ) {
|
174 |
-
return $q;
|
175 |
-
}
|
176 |
-
|
177 |
-
$attribute_taxonomies = learn_press_get_attributes();
|
178 |
-
if ( $attribute_taxonomies ) {
|
179 |
-
$attribute_operator = 'and' === strtolower( learn_press_get_request( 'attribute_operator' ) ) ? 'AND' : 'OR';
|
180 |
-
$value_operator = 'and' === strtolower( learn_press_get_request( 'value_operator' ) ) ? 'AND' : 'IN';
|
181 |
-
$tax_query = array(
|
182 |
-
'relation' => $attribute_operator,
|
183 |
-
);
|
184 |
-
|
185 |
-
foreach ( $attribute_taxonomies as $tax ) {
|
186 |
-
$attribute = $tax->slug;
|
187 |
-
$taxonomy = LP_COURSE_ATTRIBUTE . '-' . $attribute;
|
188 |
-
$filter_terms = ! empty( $_GET[ 'filter_' . $attribute ] ) ? explode( ',', $_GET[ 'filter_' . $attribute ] ) : array();
|
189 |
-
|
190 |
-
if ( empty( $filter_terms ) || ! taxonomy_exists( $taxonomy ) ) {
|
191 |
-
continue;
|
192 |
-
}
|
193 |
-
|
194 |
-
$tax_query[] = array(
|
195 |
-
'taxonomy' => $taxonomy,
|
196 |
-
'field' => 'slug',
|
197 |
-
'terms' => $filter_terms,
|
198 |
-
'operator' => $value_operator,
|
199 |
-
'include_children' => false,
|
200 |
-
);
|
201 |
-
}
|
202 |
-
|
203 |
-
$lp_tax_query = $tax_query;
|
204 |
-
$q->set( 'tax_query', $tax_query );
|
205 |
-
}
|
206 |
-
|
207 |
-
return $q;
|
208 |
-
}
|
209 |
-
|
210 |
-
/**
|
211 |
-
* @param WP_Query $q
|
212 |
-
*/
|
213 |
-
add_filter( 'pre_get_posts', 'learn_press_filter_courses_by_attributes', 1000 );
|
214 |
-
|
215 |
-
/**
|
216 |
-
* Register widgets
|
217 |
-
*/
|
218 |
-
LP_Widget::register( array( 'course-attributes', 'course-filters' ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -30,7 +30,6 @@ if ( ! class_exists( 'LP_Background_Single_Course' ) ) {
|
|
30 |
* @see LP_Course_Post_Type::save
|
31 |
*/
|
32 |
protected function handle() {
|
33 |
-
|
34 |
try {
|
35 |
$handle_name = LP_Helper::sanitize_params_submitted( $_POST['handle_name'] ?? '' );
|
36 |
$course_id = intval( $_POST['course_id'] ?? 0 );
|
@@ -67,6 +66,8 @@ if ( ! class_exists( 'LP_Background_Single_Course' ) ) {
|
|
67 |
$this->save_extra_info();
|
68 |
$this->review_post_author();
|
69 |
|
|
|
|
|
70 |
/**
|
71 |
* Clean cache courses
|
72 |
*
|
@@ -82,6 +83,11 @@ if ( ! class_exists( 'LP_Background_Single_Course' ) ) {
|
|
82 |
// End
|
83 |
}
|
84 |
|
|
|
|
|
|
|
|
|
|
|
85 |
protected function save_price() {
|
86 |
$has_sale_price = false;
|
87 |
$regular_price = $this->data['_lp_regular_price'] ?? '';
|
@@ -143,13 +149,23 @@ if ( ! class_exists( 'LP_Background_Single_Course' ) ) {
|
|
143 |
$first_item_id = $lp_course_db->get_first_item_id( $lp_course->get_id() );
|
144 |
$extra_info->first_item_id = $first_item_id;
|
145 |
|
146 |
-
// Get and set total items
|
147 |
// Clean cache
|
148 |
$key_cache_total_items = "$course_id/total_items";
|
149 |
$lp_course_cache->clear( $key_cache_total_items );
|
150 |
$total_items = $lp_course_db->get_total_items( $lp_course->get_id() );
|
151 |
$extra_info->total_items = $total_items;
|
152 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
153 |
// Save post meta
|
154 |
$lp_course->set_info_extra_for_fast_query( $extra_info );
|
155 |
// End set first item id
|
@@ -158,6 +174,59 @@ if ( ! class_exists( 'LP_Background_Single_Course' ) ) {
|
|
158 |
}
|
159 |
}
|
160 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
161 |
/**
|
162 |
* Check user is Instructor and enable review post of Instructor
|
163 |
*
|
30 |
* @see LP_Course_Post_Type::save
|
31 |
*/
|
32 |
protected function handle() {
|
|
|
33 |
try {
|
34 |
$handle_name = LP_Helper::sanitize_params_submitted( $_POST['handle_name'] ?? '' );
|
35 |
$course_id = intval( $_POST['course_id'] ?? 0 );
|
66 |
$this->save_extra_info();
|
67 |
$this->review_post_author();
|
68 |
|
69 |
+
do_action( 'lp/background/course/save', $this->lp_course, $this->data );
|
70 |
+
|
71 |
/**
|
72 |
* Clean cache courses
|
73 |
*
|
83 |
// End
|
84 |
}
|
85 |
|
86 |
+
/**
|
87 |
+
* Save price course
|
88 |
+
*
|
89 |
+
* @return void
|
90 |
+
*/
|
91 |
protected function save_price() {
|
92 |
$has_sale_price = false;
|
93 |
$regular_price = $this->data['_lp_regular_price'] ?? '';
|
149 |
$first_item_id = $lp_course_db->get_first_item_id( $lp_course->get_id() );
|
150 |
$extra_info->first_item_id = $first_item_id;
|
151 |
|
152 |
+
// Get and set total items course
|
153 |
// Clean cache
|
154 |
$key_cache_total_items = "$course_id/total_items";
|
155 |
$lp_course_cache->clear( $key_cache_total_items );
|
156 |
$total_items = $lp_course_db->get_total_items( $lp_course->get_id() );
|
157 |
$extra_info->total_items = $total_items;
|
158 |
|
159 |
+
// Get and set sections, items of course
|
160 |
+
// Clean cache
|
161 |
+
$key_cache_sections_items = "$course_id/sections_items";
|
162 |
+
$lp_course_cache->clear( $key_cache_sections_items );
|
163 |
+
$sections_items = $lp_course->get_sections_and_items_course_from_db_and_sort();
|
164 |
+
$extra_info->sections_items = $sections_items;
|
165 |
+
|
166 |
+
// Check items removed course, will delete on 'learnpress_user_items', 'learnpress_user_item_results' table
|
167 |
+
$this->delete_user_items_data( $sections_items );
|
168 |
+
|
169 |
// Save post meta
|
170 |
$lp_course->set_info_extra_for_fast_query( $extra_info );
|
171 |
// End set first item id
|
174 |
}
|
175 |
}
|
176 |
|
177 |
+
/**
|
178 |
+
* Delete items removed on course on tables:
|
179 |
+
* learnpress_user_items, learnpress_user_itemmeta, learnpress_user_item_results
|
180 |
+
*
|
181 |
+
* @return void
|
182 |
+
* @since 4.1.6.9
|
183 |
+
* @version 1.0.0
|
184 |
+
*/
|
185 |
+
private function delete_user_items_data() {
|
186 |
+
// Get all user_item_id
|
187 |
+
$lp_user_items_db = LP_User_Items_DB::getInstance();
|
188 |
+
$lp_user_item_results_db = LP_User_Items_Result_DB::instance();
|
189 |
+
|
190 |
+
try {
|
191 |
+
$course = $this->lp_course;
|
192 |
+
|
193 |
+
// Get all items of course is attend
|
194 |
+
$filter_user_items = new LP_User_Items_Filter();
|
195 |
+
$filter_user_items->only_fields = [ 'item_id', 'user_item_id' ];
|
196 |
+
$filter_user_items->ref_id = $course->get_id();
|
197 |
+
$filter_user_items->ref_type = LP_COURSE_CPT;
|
198 |
+
$users_items_result = $lp_user_items_db->get_user_items( $filter_user_items );
|
199 |
+
|
200 |
+
$item_ids = $course->get_item_ids();
|
201 |
+
|
202 |
+
$users_items_ids_need_delete = [];
|
203 |
+
foreach ( $users_items_result as $user_item ) {
|
204 |
+
//$users_items[ $user_item->item_id ] = $user_item->user_item_id;
|
205 |
+
$item_id = $user_item->item_id;
|
206 |
+
if ( ! in_array( $item_id, $item_ids ) ) {
|
207 |
+
$users_items_ids_need_delete[] = $user_item->user_item_id;
|
208 |
+
}
|
209 |
+
}
|
210 |
+
|
211 |
+
if ( empty( $users_items_ids_need_delete ) ) {
|
212 |
+
return;
|
213 |
+
}
|
214 |
+
|
215 |
+
// Delete on tb lp_user_items
|
216 |
+
$filter_delete = new LP_User_Items_Filter();
|
217 |
+
$filter_delete->user_item_ids = $users_items_ids_need_delete;
|
218 |
+
$lp_user_items_db->remove_user_item_ids( $filter_delete );
|
219 |
+
|
220 |
+
// Delete user_itemmeta
|
221 |
+
$lp_user_items_db->remove_user_itemmeta( $filter_delete );
|
222 |
+
|
223 |
+
// Delete user_item_results
|
224 |
+
$lp_user_item_results_db->remove_user_item_results( $filter_delete );
|
225 |
+
} catch ( Throwable $e ) {
|
226 |
+
error_log( $e->getMessage() );
|
227 |
+
}
|
228 |
+
}
|
229 |
+
|
230 |
/**
|
231 |
* Check user is Instructor and enable review post of Instructor
|
232 |
*
|
@@ -23,8 +23,6 @@ if ( ! class_exists( 'LP_Background_Order' ) ) {
|
|
23 |
|
24 |
/**
|
25 |
* Get params via $_POST and handle
|
26 |
-
* @in_array
|
27 |
-
* @see LP_Course_Post_Type::save
|
28 |
*/
|
29 |
protected function handle() {
|
30 |
|
23 |
|
24 |
/**
|
25 |
* Get params via $_POST and handle
|
|
|
|
|
26 |
*/
|
27 |
protected function handle() {
|
28 |
|
@@ -345,7 +345,7 @@ class LP_Object_Cache {
|
|
345 |
}
|
346 |
|
347 |
if ( self::_exists( $key, $group ) ) {
|
348 |
-
$found
|
349 |
$self->cache_hits += 1;
|
350 |
if ( is_object( $self->cache[ $group ][ $key ] ) ) {
|
351 |
return clone $self->cache[ $group ][ $key ];
|
@@ -354,7 +354,7 @@ class LP_Object_Cache {
|
|
354 |
}
|
355 |
}
|
356 |
|
357 |
-
$found
|
358 |
$self->cache_misses += 1;
|
359 |
|
360 |
return false;
|
@@ -517,7 +517,7 @@ class LP_Object_Cache {
|
|
517 |
*
|
518 |
* @since 2.0.0
|
519 |
*/
|
520 |
-
public static function stats() {
|
521 |
$self = self::instance();
|
522 |
echo '<p>';
|
523 |
echo "<strong>Cache Hits:</strong> {$self->cache_hits}<br />";
|
@@ -529,7 +529,7 @@ class LP_Object_Cache {
|
|
529 |
2 ) . 'k )</li>';
|
530 |
}
|
531 |
echo '</ul>';
|
532 |
-
}
|
533 |
|
534 |
/**
|
535 |
* Switches the internal blog ID.
|
@@ -561,8 +561,10 @@ class LP_Object_Cache {
|
|
561 |
protected static function _exists( $key, $group ) {
|
562 |
$self = self::instance();
|
563 |
|
564 |
-
return isset( $self->cache[ $group ] ) && ( isset( $self->cache[ $group ][ $key ] ) || array_key_exists(
|
565 |
-
|
|
|
|
|
566 |
}
|
567 |
|
568 |
/**
|
345 |
}
|
346 |
|
347 |
if ( self::_exists( $key, $group ) ) {
|
348 |
+
$found = true;
|
349 |
$self->cache_hits += 1;
|
350 |
if ( is_object( $self->cache[ $group ][ $key ] ) ) {
|
351 |
return clone $self->cache[ $group ][ $key ];
|
354 |
}
|
355 |
}
|
356 |
|
357 |
+
$found = false;
|
358 |
$self->cache_misses += 1;
|
359 |
|
360 |
return false;
|
517 |
*
|
518 |
* @since 2.0.0
|
519 |
*/
|
520 |
+
/*public static function stats() {
|
521 |
$self = self::instance();
|
522 |
echo '<p>';
|
523 |
echo "<strong>Cache Hits:</strong> {$self->cache_hits}<br />";
|
529 |
2 ) . 'k )</li>';
|
530 |
}
|
531 |
echo '</ul>';
|
532 |
+
}*/
|
533 |
|
534 |
/**
|
535 |
* Switches the internal blog ID.
|
561 |
protected static function _exists( $key, $group ) {
|
562 |
$self = self::instance();
|
563 |
|
564 |
+
return isset( $self->cache[ $group ] ) && ( isset( $self->cache[ $group ][ $key ] ) || array_key_exists(
|
565 |
+
$key,
|
566 |
+
$self->cache[ $group ]
|
567 |
+
) );
|
568 |
}
|
569 |
|
570 |
/**
|
@@ -22,10 +22,6 @@ class LP_Cache {
|
|
22 |
* @var string Add key group parent with key group child
|
23 |
*/
|
24 |
protected $key_group = '';
|
25 |
-
/**
|
26 |
-
* @var float|int default expire
|
27 |
-
*/
|
28 |
-
protected $expire = DAY_IN_SECONDS;
|
29 |
|
30 |
protected function __construct() {
|
31 |
$this->key_group = $this->key_group_parent . $this->key_group_child;
|
@@ -33,16 +29,12 @@ class LP_Cache {
|
|
33 |
|
34 |
/**
|
35 |
* Set cache
|
36 |
-
* $expire = -1 is get default expire time on one day(DAY_IN_SECONDS)
|
37 |
*
|
38 |
* @param string $key
|
39 |
* @param mixed $data
|
40 |
* @param int $expire
|
41 |
*/
|
42 |
-
public function set_cache( string $key, $data, int $expire =
|
43 |
-
if ( -1 === $expire ) {
|
44 |
-
$expire = $this->expire;
|
45 |
-
}
|
46 |
wp_cache_set( $key, $data, $this->key_group, $expire );
|
47 |
}
|
48 |
|
22 |
* @var string Add key group parent with key group child
|
23 |
*/
|
24 |
protected $key_group = '';
|
|
|
|
|
|
|
|
|
25 |
|
26 |
protected function __construct() {
|
27 |
$this->key_group = $this->key_group_parent . $this->key_group_child;
|
29 |
|
30 |
/**
|
31 |
* Set cache
|
|
|
32 |
*
|
33 |
* @param string $key
|
34 |
* @param mixed $data
|
35 |
* @param int $expire
|
36 |
*/
|
37 |
+
public function set_cache( string $key, $data, int $expire = 0 ) {
|
|
|
|
|
|
|
38 |
wp_cache_set( $key, $data, $this->key_group, $expire );
|
39 |
}
|
40 |
|
@@ -1 +1 @@
|
|
1 |
-
<?php // Silence is golden.
|
1 |
+
<?php // Silence is golden.
|
@@ -274,14 +274,17 @@ if ( ! class_exists( 'LP_AJAX' ) ) {
|
|
274 |
'redirect' => $course->get_item_link( $item_id ),
|
275 |
);
|
276 |
|
277 |
-
$item = $course->get_item( $item_id );
|
278 |
-
$nonce_action = $item->get_nonce_action( 'complete', $course_id, $user->get_id() );
|
279 |
try {
|
280 |
// security check
|
281 |
if ( ! $post || ( $post && ! wp_verify_nonce( $nonce, 'lesson-complete' ) ) ) {
|
282 |
throw new Exception( __( 'Error! Invalid lesson or failed security check.', 'learnpress' ), 8000 );
|
283 |
}
|
284 |
|
|
|
|
|
|
|
|
|
|
|
285 |
$result = $user->complete_lesson( $item_id );
|
286 |
|
287 |
if ( ! is_wp_error( $result ) ) {
|
@@ -292,7 +295,7 @@ if ( ! class_exists( 'LP_AJAX' ) ) {
|
|
292 |
|
293 |
learn_press_add_message( sprintf( __( 'Congrats! You have completed "%s".', 'learnpress' ), $item->get_title() ) );
|
294 |
} else {
|
295 |
-
|
296 |
}
|
297 |
|
298 |
$response = apply_filters( 'learn-press/user-completed-lesson-result', $response, $item_id, $course_id, $user->get_id() );
|
274 |
'redirect' => $course->get_item_link( $item_id ),
|
275 |
);
|
276 |
|
|
|
|
|
277 |
try {
|
278 |
// security check
|
279 |
if ( ! $post || ( $post && ! wp_verify_nonce( $nonce, 'lesson-complete' ) ) ) {
|
280 |
throw new Exception( __( 'Error! Invalid lesson or failed security check.', 'learnpress' ), 8000 );
|
281 |
}
|
282 |
|
283 |
+
$item = $course->get_item( $item_id );
|
284 |
+
if ( ! $item instanceof LP_Course_Item ) {
|
285 |
+
throw new Exception( 'Item is invalid!' );
|
286 |
+
}
|
287 |
+
|
288 |
$result = $user->complete_lesson( $item_id );
|
289 |
|
290 |
if ( ! is_wp_error( $result ) ) {
|
295 |
|
296 |
learn_press_add_message( sprintf( __( 'Congrats! You have completed "%s".', 'learnpress' ), $item->get_title() ) );
|
297 |
} else {
|
298 |
+
throw new Exception( $result->get_error_message(), 'error' );
|
299 |
}
|
300 |
|
301 |
$response = apply_filters( 'learn-press/user-completed-lesson-result', $response, $item_id, $course_id, $user->get_id() );
|
@@ -748,7 +748,7 @@ class LP_Checkout {
|
|
748 |
$course_id = get_transient( 'checkout_enroll_course_id' );
|
749 |
|
750 |
if ( ! $course_id ) {
|
751 |
-
if (
|
752 |
$course_id = absint( $_REQUEST['enroll-course'] );
|
753 |
}
|
754 |
}
|
748 |
$course_id = get_transient( 'checkout_enroll_course_id' );
|
749 |
|
750 |
if ( ! $course_id ) {
|
751 |
+
if ( ! empty( $_REQUEST['enroll-course'] ) ) {
|
752 |
$course_id = absint( $_REQUEST['enroll-course'] );
|
753 |
}
|
754 |
}
|
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
-
class LP_Compress_String{
|
3 |
public static function decompressString( $compressed ) {
|
4 |
-
$compressed = explode(
|
5 |
$dictSize = 256;
|
6 |
$dictionary = array();
|
7 |
for ( $i = 1; $i < 256; $i ++ ) {
|
@@ -10,16 +10,16 @@ class LP_Compress_String{
|
|
10 |
$w = chr( $compressed[0] );
|
11 |
$result = $w;
|
12 |
for ( $i = 1; $i < count( $compressed ); $i ++ ) {
|
13 |
-
$entry =
|
14 |
$k = $compressed[ $i ];
|
15 |
if ( isset( $dictionary[ $k ] ) ) {
|
16 |
$entry = $dictionary[ $k ];
|
17 |
-
}
|
18 |
$entry = $w . self::charAt( $w, 0 );
|
19 |
} else {
|
20 |
return null;
|
21 |
}
|
22 |
-
$result
|
23 |
$dictionary[ $dictSize ++ ] = $w . self::charAt( $entry, 0 );
|
24 |
$w = $entry;
|
25 |
}
|
@@ -35,15 +35,15 @@ class LP_Compress_String{
|
|
35 |
}
|
36 |
}
|
37 |
|
38 |
-
public static function chr($u){
|
39 |
-
return mb_convert_encoding('&#' . intval($u) . ';', 'UTF-8', 'HTML-ENTITIES');
|
40 |
}
|
41 |
|
42 |
-
public static function toCharCodes($c){
|
43 |
$x = 'charCodeAt';
|
44 |
$b = '';
|
45 |
$e = array();
|
46 |
-
$f = str_split($c );
|
47 |
$d = [];
|
48 |
$a = $f[0];
|
49 |
$g = 256;
|
@@ -66,68 +66,66 @@ class LP_Compress_String{
|
|
66 |
|
67 |
public static function compressString( $c ) {
|
68 |
|
69 |
-
$d = self::toCharCodes($c);
|
70 |
|
71 |
for ( $b = 0; $b < sizeof( $d ); $b ++ ) {
|
72 |
$d[ $b ] = self::chr( $d[ $b ] );
|
73 |
}
|
74 |
|
75 |
-
return join( $d,
|
76 |
-
|
77 |
-
|
78 |
-
//
|
79 |
-
//
|
80 |
-
//
|
81 |
-
//
|
82 |
-
//
|
83 |
-
//
|
84 |
-
//
|
85 |
-
//
|
86 |
-
//
|
87 |
-
//
|
88 |
-
//
|
89 |
-
//
|
90 |
-
//
|
91 |
-
//
|
92 |
-
//
|
93 |
-
//
|
94 |
-
//
|
95 |
-
//
|
96 |
-
//
|
97 |
-
//
|
98 |
-
//
|
99 |
-
//
|
100 |
-
//
|
101 |
-
//
|
102 |
-
//
|
103 |
-
//
|
104 |
-
//
|
105 |
-
//
|
106 |
-
//
|
107 |
-
//
|
108 |
-
//
|
109 |
-
// }
|
110 |
}
|
111 |
|
112 |
-
public static function utf8_char_code_at($str, $index)
|
113 |
-
|
114 |
-
$char = '';
|
115 |
$str_index = 0;
|
116 |
|
117 |
-
$str = self::utf8_scrub($str);
|
118 |
-
$len = strlen($str);
|
119 |
|
120 |
-
for ($i = 0; $i < $len; $i += 1) {
|
121 |
|
122 |
-
$char .= $str[$i];
|
123 |
|
124 |
-
if (self::utf8_check_encoding($char)) {
|
125 |
|
126 |
-
if ($str_index === $index) {
|
127 |
-
return self::utf8_ord($char);
|
128 |
}
|
129 |
|
130 |
-
$char
|
131 |
$str_index += 1;
|
132 |
}
|
133 |
}
|
@@ -135,34 +133,31 @@ class LP_Compress_String{
|
|
135 |
return null;
|
136 |
}
|
137 |
|
138 |
-
public static function utf8_scrub($str)
|
139 |
-
|
140 |
-
return htmlspecialchars_decode(htmlspecialchars($str, ENT_SUBSTITUTE, 'UTF-8'));
|
141 |
}
|
142 |
|
143 |
-
public static function utf8_check_encoding($str)
|
144 |
-
|
145 |
-
return $str === self::utf8_scrub($str);
|
146 |
}
|
147 |
|
148 |
-
public static function utf8_ord($char)
|
149 |
-
|
150 |
-
$lead = ord($char[0]);
|
151 |
|
152 |
-
if ($lead < 0x80) {
|
153 |
return $lead;
|
154 |
-
}
|
155 |
-
return (($lead & 0x1F) << 6)
|
156 |
-
|
157 |
-
}
|
158 |
-
return (($lead &
|
159 |
-
|
160 |
-
|
161 |
} else {
|
162 |
-
return (($lead &
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
}
|
167 |
}
|
168 |
}
|
1 |
<?php
|
2 |
+
class LP_Compress_String {
|
3 |
public static function decompressString( $compressed ) {
|
4 |
+
$compressed = explode( ',', $compressed );
|
5 |
$dictSize = 256;
|
6 |
$dictionary = array();
|
7 |
for ( $i = 1; $i < 256; $i ++ ) {
|
10 |
$w = chr( $compressed[0] );
|
11 |
$result = $w;
|
12 |
for ( $i = 1; $i < count( $compressed ); $i ++ ) {
|
13 |
+
$entry = '';
|
14 |
$k = $compressed[ $i ];
|
15 |
if ( isset( $dictionary[ $k ] ) ) {
|
16 |
$entry = $dictionary[ $k ];
|
17 |
+
} elseif ( $k == $dictSize ) {
|
18 |
$entry = $w . self::charAt( $w, 0 );
|
19 |
} else {
|
20 |
return null;
|
21 |
}
|
22 |
+
$result .= $entry;
|
23 |
$dictionary[ $dictSize ++ ] = $w . self::charAt( $entry, 0 );
|
24 |
$w = $entry;
|
25 |
}
|
35 |
}
|
36 |
}
|
37 |
|
38 |
+
public static function chr( $u ) {
|
39 |
+
return mb_convert_encoding( '&#' . intval( $u ) . ';', 'UTF-8', 'HTML-ENTITIES' );
|
40 |
}
|
41 |
|
42 |
+
public static function toCharCodes( $c ) {
|
43 |
$x = 'charCodeAt';
|
44 |
$b = '';
|
45 |
$e = array();
|
46 |
+
$f = str_split( $c );
|
47 |
$d = [];
|
48 |
$a = $f[0];
|
49 |
$g = 256;
|
66 |
|
67 |
public static function compressString( $c ) {
|
68 |
|
69 |
+
$d = self::toCharCodes( $c );
|
70 |
|
71 |
for ( $b = 0; $b < sizeof( $d ); $b ++ ) {
|
72 |
$d[ $b ] = self::chr( $d[ $b ] );
|
73 |
}
|
74 |
|
75 |
+
return join( $d, '' );
|
76 |
+
|
77 |
+
// $dictSize = 256;
|
78 |
+
// $dictionary = array();
|
79 |
+
// for ( $i = 0; $i < 256; $i ++ ) {
|
80 |
+
// $dictionary[ chr( $i ) ] = $i;
|
81 |
+
// }
|
82 |
+
// $w = "";
|
83 |
+
// $result = "";
|
84 |
+
// for ( $i = 0; $i < strlen( $uncompressed ); $i ++ ) {
|
85 |
+
// $c = self::charAt( $uncompressed, $i );
|
86 |
+
// $wc = $w . $c;
|
87 |
+
// if ( isset( $dictionary[ $wc ] ) ) {
|
88 |
+
// $w = $wc;
|
89 |
+
// } else {
|
90 |
+
// if ( $result != "" ) {
|
91 |
+
// $result .= "," . $dictionary[ $w ];
|
92 |
+
// } else {
|
93 |
+
// $result .= $dictionary[ $w ];
|
94 |
+
// }
|
95 |
+
// $dictionary[ $wc ] = $dictSize ++;
|
96 |
+
// $w = "" . $c;
|
97 |
+
// }
|
98 |
+
// }
|
99 |
+
// if ( $w != "" ) {
|
100 |
+
// if ( $result != "" ) {
|
101 |
+
// $result .= "," . $dictionary[ $w ];
|
102 |
+
// } else {
|
103 |
+
// $result .= $dictionary[ $w ];
|
104 |
+
//
|
105 |
+
// }
|
106 |
+
//
|
107 |
+
// return $result;
|
108 |
+
// }
|
|
|
109 |
}
|
110 |
|
111 |
+
public static function utf8_char_code_at( $str, $index ) {
|
112 |
+
$char = '';
|
|
|
113 |
$str_index = 0;
|
114 |
|
115 |
+
$str = self::utf8_scrub( $str );
|
116 |
+
$len = strlen( $str );
|
117 |
|
118 |
+
for ( $i = 0; $i < $len; $i += 1 ) {
|
119 |
|
120 |
+
$char .= $str[ $i ];
|
121 |
|
122 |
+
if ( self::utf8_check_encoding( $char ) ) {
|
123 |
|
124 |
+
if ( $str_index === $index ) {
|
125 |
+
return self::utf8_ord( $char );
|
126 |
}
|
127 |
|
128 |
+
$char = '';
|
129 |
$str_index += 1;
|
130 |
}
|
131 |
}
|
133 |
return null;
|
134 |
}
|
135 |
|
136 |
+
public static function utf8_scrub( $str ) {
|
137 |
+
return htmlspecialchars_decode( htmlspecialchars( $str, ENT_SUBSTITUTE, 'UTF-8' ) );
|
|
|
138 |
}
|
139 |
|
140 |
+
public static function utf8_check_encoding( $str ) {
|
141 |
+
return $str === self::utf8_scrub( $str );
|
|
|
142 |
}
|
143 |
|
144 |
+
public static function utf8_ord( $char ) {
|
145 |
+
$lead = ord( $char[0] );
|
|
|
146 |
|
147 |
+
if ( $lead < 0x80 ) {
|
148 |
return $lead;
|
149 |
+
} elseif ( $lead < 0xE0 ) {
|
150 |
+
return ( ( $lead & 0x1F ) << 6 )
|
151 |
+
| ( ord( $char[1] ) & 0x3F );
|
152 |
+
} elseif ( $lead < 0xF0 ) {
|
153 |
+
return ( ( $lead & 0xF ) << 12 )
|
154 |
+
| ( ( ord( $char[1] ) & 0x3F ) << 6 )
|
155 |
+
| ( ord( $char[2] ) & 0x3F );
|
156 |
} else {
|
157 |
+
return ( ( $lead & 0x7 ) << 18 )
|
158 |
+
| ( ( ord( $char[1] ) & 0x3F ) << 12 )
|
159 |
+
| ( ( ord( $char[2] ) & 0x3F ) << 6 )
|
160 |
+
| ( ord( $char[3] ) & 0x3F );
|
161 |
}
|
162 |
}
|
163 |
}
|
@@ -182,7 +182,7 @@ class LP_Datetime extends DateTime {
|
|
182 |
*
|
183 |
* @return string The date string in the specified format format.
|
184 |
*/
|
185 |
-
public function format( $format, $local = true ) {
|
186 |
if ( '0000-00-00 00:00:00' === $this->raw_date ) {
|
187 |
return '';
|
188 |
}
|
182 |
*
|
183 |
* @return string The date string in the specified format format.
|
184 |
*/
|
185 |
+
public function format( $format = '', $local = true ) {
|
186 |
if ( '0000-00-00 00:00:00' === $this->raw_date ) {
|
187 |
return '';
|
188 |
}
|
@@ -1,609 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Class LP_GDPR
|
5 |
-
*
|
6 |
-
* Personal data export and removal for LearnPress
|
7 |
-
*
|
8 |
-
* @since 4.9.6
|
9 |
-
*/
|
10 |
-
class LP_GDPR {
|
11 |
-
|
12 |
-
/**
|
13 |
-
* LP_GDPR constructor.
|
14 |
-
*/
|
15 |
-
public function __construct() {
|
16 |
-
// Filter to wp privacy personal data exporter
|
17 |
-
add_filter(
|
18 |
-
'wp_privacy_personal_data_exporters',
|
19 |
-
array( $this, 'register_exporter' ),
|
20 |
-
10
|
21 |
-
);
|
22 |
-
|
23 |
-
add_filter(
|
24 |
-
'wp_privacy_personal_data_erasers',
|
25 |
-
array( $this, 'register_data_eraser' )
|
26 |
-
);
|
27 |
-
}
|
28 |
-
|
29 |
-
public function register_data_eraser( $erasers ) {
|
30 |
-
$erasers['learnpress'] = array(
|
31 |
-
'eraser_friendly_name' => __( 'LearnPress' ),
|
32 |
-
'callback' => array( $this, 'personal_data_eraser' ),
|
33 |
-
);
|
34 |
-
|
35 |
-
return $erasers;
|
36 |
-
}
|
37 |
-
|
38 |
-
/**
|
39 |
-
* @param array $exporters
|
40 |
-
*
|
41 |
-
* @return mixed
|
42 |
-
*/
|
43 |
-
public function register_exporter( $exporters ) {
|
44 |
-
|
45 |
-
/**
|
46 |
-
* Owned courses
|
47 |
-
*/
|
48 |
-
$exporters['learnpress-owned-courses'] = array(
|
49 |
-
'exporter_friendly_name' => __( 'LearnPress Owned Courses', 'learnpress' ),
|
50 |
-
'callback' => array( $this, 'user_owned_courses' ),
|
51 |
-
);
|
52 |
-
|
53 |
-
/**
|
54 |
-
* Orders
|
55 |
-
*/
|
56 |
-
$exporters['learnpress-orders'] = array(
|
57 |
-
'exporter_friendly_name' => __( 'LearnPress Orders', 'learnpress' ),
|
58 |
-
'callback' => array( $this, 'user_orders' ),
|
59 |
-
);
|
60 |
-
|
61 |
-
/**
|
62 |
-
* Purchased courses
|
63 |
-
*/
|
64 |
-
$exporters['learnpress-purchased-courses'] = array(
|
65 |
-
'exporter_friendly_name' => __( 'LearnPress Purchased Courses', 'learnpress' ),
|
66 |
-
'callback' => array( $this, 'user_purchased_courses' ),
|
67 |
-
);
|
68 |
-
|
69 |
-
/**
|
70 |
-
* Profile
|
71 |
-
*/
|
72 |
-
$exporters['learnpress-profile'] = array(
|
73 |
-
'exporter_friendly_name' => __( 'LearnPress User Profile', 'learnpress' ),
|
74 |
-
'callback' => array( $this, 'user_profile' ),
|
75 |
-
);
|
76 |
-
|
77 |
-
return $exporters;
|
78 |
-
}
|
79 |
-
|
80 |
-
public function user_profile( $email_address, $page ) {
|
81 |
-
$export_data = array(
|
82 |
-
'data' => array(),
|
83 |
-
'done' => true,
|
84 |
-
);
|
85 |
-
|
86 |
-
$wp_user = get_user_by( 'email', $email_address );
|
87 |
-
|
88 |
-
if ( ! $wp_user ) {
|
89 |
-
return $export_data;
|
90 |
-
}
|
91 |
-
|
92 |
-
$user = learn_press_get_user( $wp_user->ID );
|
93 |
-
$profile = LP_Profile::instance( $wp_user->ID );
|
94 |
-
$export_items = array();
|
95 |
-
|
96 |
-
$user = $profile->get_user();
|
97 |
-
|
98 |
-
if ( $user ) {
|
99 |
-
$privacy = $user->get_data( 'profile_privacy' );
|
100 |
-
if ( $privacy ) {
|
101 |
-
$privacy = $user->get_data( 'profile_privacy' );
|
102 |
-
|
103 |
-
$export_item = array(
|
104 |
-
'group_id' => 'lp-profile',
|
105 |
-
'group_label' => __( 'Profile Settings', 'learnpress' ),
|
106 |
-
'item_id' => 'profile-' . $wp_user->ID,
|
107 |
-
'data' => array(),
|
108 |
-
);
|
109 |
-
foreach ( $privacy as $key => $item ) {
|
110 |
-
$export_item['data'][] = array(
|
111 |
-
'name' => $key,
|
112 |
-
'value' => $item,
|
113 |
-
);
|
114 |
-
}
|
115 |
-
$export_items[] = $export_item;
|
116 |
-
}
|
117 |
-
}
|
118 |
-
|
119 |
-
$export_data['data'] = $export_items;
|
120 |
-
|
121 |
-
return $export_data;
|
122 |
-
}
|
123 |
-
|
124 |
-
public function user_orders( $email_address, $page ) {
|
125 |
-
$number = 10; // Limit us to avoid timing out
|
126 |
-
$page = (int) $page;
|
127 |
-
$export_data = array(
|
128 |
-
'data' => array(),
|
129 |
-
'done' => true,
|
130 |
-
);
|
131 |
-
|
132 |
-
$wp_user = get_user_by( 'email', $email_address );
|
133 |
-
|
134 |
-
if ( ! $wp_user ) {
|
135 |
-
return $export_data;
|
136 |
-
}
|
137 |
-
|
138 |
-
$profile = LP_Profile::instance( $wp_user->ID );
|
139 |
-
|
140 |
-
$query_orders = $profile->query_orders(
|
141 |
-
array(
|
142 |
-
'paged' => $page,
|
143 |
-
'limit' => $number,
|
144 |
-
)
|
145 |
-
);
|
146 |
-
|
147 |
-
if ( ! $query_orders ) {
|
148 |
-
return $export_data;
|
149 |
-
}
|
150 |
-
|
151 |
-
$orders = $query_orders->get_items();
|
152 |
-
|
153 |
-
if ( ! $orders ) {
|
154 |
-
return $export_data;
|
155 |
-
}
|
156 |
-
|
157 |
-
$export_items = array();
|
158 |
-
foreach ( $orders as $order ) {
|
159 |
-
if ( ! $order instanceof LP_Order ) {
|
160 |
-
$order = learn_press_get_order( $order );
|
161 |
-
}
|
162 |
-
|
163 |
-
$data = array(
|
164 |
-
array(
|
165 |
-
'name' => __( 'Order ID', 'learnpress' ),
|
166 |
-
'value' => $order->get_order_number(),
|
167 |
-
),
|
168 |
-
array(
|
169 |
-
'name' => __( 'Order Date', 'learnpress' ),
|
170 |
-
'value' => $order->get_order_date(),
|
171 |
-
),
|
172 |
-
array(
|
173 |
-
'name' => __( 'Order status', 'learnpress' ),
|
174 |
-
'value' => $order->get_order_status(),
|
175 |
-
),
|
176 |
-
array(
|
177 |
-
'name' => __( 'Order Total', 'learnpress' ),
|
178 |
-
'value' => $order->get_formatted_order_total(),
|
179 |
-
),
|
180 |
-
);
|
181 |
-
$export_items[] = array(
|
182 |
-
'group_id' => 'lp-order',
|
183 |
-
'group_label' => __( 'Orders', 'learnpress' ),
|
184 |
-
'item_id' => "order-{$order->get_id()}",
|
185 |
-
'data' => $data,
|
186 |
-
);
|
187 |
-
}
|
188 |
-
|
189 |
-
$done = count( $orders ) < $number;
|
190 |
-
$export_data['done'] = $done;
|
191 |
-
$export_data['data'] = $export_items;
|
192 |
-
|
193 |
-
return $export_data;
|
194 |
-
}
|
195 |
-
|
196 |
-
/**
|
197 |
-
* Course list
|
198 |
-
*
|
199 |
-
* @param string $email_address
|
200 |
-
* @param int $page
|
201 |
-
*
|
202 |
-
* @return array
|
203 |
-
*/
|
204 |
-
public function user_owned_courses( $email_address, $page ) {
|
205 |
-
|
206 |
-
$number = 10; // Limit us to avoid timing out
|
207 |
-
$page = (int) $page;
|
208 |
-
$export_items = array();
|
209 |
-
|
210 |
-
$query = $this->get_courses_by_email(
|
211 |
-
'own',
|
212 |
-
$email_address,
|
213 |
-
array(
|
214 |
-
'paged' => $page,
|
215 |
-
'limit' => $number,
|
216 |
-
'status' => '*',
|
217 |
-
)
|
218 |
-
);
|
219 |
-
|
220 |
-
if ( ! $query ) {
|
221 |
-
return array(
|
222 |
-
'data' => array(),
|
223 |
-
'done' => true,
|
224 |
-
);
|
225 |
-
}
|
226 |
-
|
227 |
-
$courses = (array) $query->get_items();
|
228 |
-
|
229 |
-
if ( $courses ) {
|
230 |
-
foreach ( $courses as $course_id ) {
|
231 |
-
$course = learn_press_get_course( $course_id );
|
232 |
-
|
233 |
-
if ( ! $course ) {
|
234 |
-
continue;
|
235 |
-
}
|
236 |
-
|
237 |
-
$data = array(
|
238 |
-
array(
|
239 |
-
'name' => __( 'Course Author', 'learnpress' ),
|
240 |
-
'value' => $course->get_author_display_name(),
|
241 |
-
),
|
242 |
-
array(
|
243 |
-
'name' => __( 'Course Name', 'learnpress' ),
|
244 |
-
'value' => $course->get_title(),
|
245 |
-
),
|
246 |
-
array(
|
247 |
-
'name' => __( 'Course Date', 'learnpress' ),
|
248 |
-
'value' => get_post_field( 'post_date', $course_id ),
|
249 |
-
),
|
250 |
-
array(
|
251 |
-
'name' => __( 'Course URL', 'learnpress' ),
|
252 |
-
'value' => $course->get_permalink(),
|
253 |
-
),
|
254 |
-
);
|
255 |
-
$export_items[] = array(
|
256 |
-
'group_id' => 'lp-owned-course',
|
257 |
-
'group_label' => __( 'Owned Course', 'learnpress' ),
|
258 |
-
'item_id' => "course-{$course->get_id()}",
|
259 |
-
'data' => $data,
|
260 |
-
);
|
261 |
-
|
262 |
-
$this->_export_course_items( $export_items, $course_id );
|
263 |
-
}
|
264 |
-
}
|
265 |
-
$done = count( $courses ) < $number;
|
266 |
-
|
267 |
-
return array(
|
268 |
-
'data' => $export_items,
|
269 |
-
'done' => $done,
|
270 |
-
);
|
271 |
-
}
|
272 |
-
|
273 |
-
/**
|
274 |
-
* @param array $export_items
|
275 |
-
*/
|
276 |
-
protected function _export_course_items( &$export_items, $course_id ) {
|
277 |
-
global $post;
|
278 |
-
|
279 |
-
$post = get_post( $course_id );
|
280 |
-
setup_postdata( $post );
|
281 |
-
$course = learn_press_get_course( $course_id );
|
282 |
-
|
283 |
-
$items = $course->get_items();
|
284 |
-
|
285 |
-
if ( ! $items ) {
|
286 |
-
return;
|
287 |
-
}
|
288 |
-
|
289 |
-
foreach ( $items as $item_id ) {
|
290 |
-
$item = $course->get_item( $item_id );
|
291 |
-
$export_item_data = array(
|
292 |
-
array(
|
293 |
-
'name' => __( 'Item Name', 'learnpress' ),
|
294 |
-
'value' => $item->get_title(),
|
295 |
-
),
|
296 |
-
array(
|
297 |
-
'name' => __( 'Item Type', 'learnpress' ),
|
298 |
-
'value' => $item->get_item_type( 'display' ),
|
299 |
-
),
|
300 |
-
array(
|
301 |
-
'name' => __( 'Item URL', 'learnpress' ),
|
302 |
-
'value' => $item->get_permalink(),
|
303 |
-
),
|
304 |
-
);
|
305 |
-
|
306 |
-
$export_items[] = array(
|
307 |
-
'group_id' => 'lp-owned-course-items-' . $course_id,
|
308 |
-
'group_label' => __( 'Course Items', 'learnpress' ),
|
309 |
-
'item_id' => "course-items-{$course_id}-{$item_id}",
|
310 |
-
'data' => $export_item_data,
|
311 |
-
);
|
312 |
-
}
|
313 |
-
|
314 |
-
wp_reset_postdata();
|
315 |
-
}
|
316 |
-
|
317 |
-
/**
|
318 |
-
* @param string $email_address
|
319 |
-
* @param string $page
|
320 |
-
*
|
321 |
-
* @return array
|
322 |
-
*/
|
323 |
-
public function user_purchased_courses( $email_address, $page ) {
|
324 |
-
|
325 |
-
$number = 10; // Limit us to avoid timing out
|
326 |
-
$page = (int) $page;
|
327 |
-
$export_data = array(
|
328 |
-
'data' => array(),
|
329 |
-
'done' => true,
|
330 |
-
);
|
331 |
-
|
332 |
-
$wp_user = get_user_by( 'email', $email_address );
|
333 |
-
|
334 |
-
if ( ! $wp_user ) {
|
335 |
-
return $export_data;
|
336 |
-
}
|
337 |
-
|
338 |
-
$user = learn_press_get_user( $wp_user->ID );
|
339 |
-
$query = $this->get_courses_by_email(
|
340 |
-
'purchased',
|
341 |
-
$email_address,
|
342 |
-
array(
|
343 |
-
'paged' => $page,
|
344 |
-
'limit' => $number,
|
345 |
-
)
|
346 |
-
);
|
347 |
-
|
348 |
-
if ( ! $query ) {
|
349 |
-
return $export_data;
|
350 |
-
}
|
351 |
-
|
352 |
-
$export_items = array();
|
353 |
-
$courses = (array) $query->get_items();
|
354 |
-
|
355 |
-
if ( $courses ) {
|
356 |
-
foreach ( $courses as $course_data ) {
|
357 |
-
|
358 |
-
$course = learn_press_get_course( $course_data->get_id() );
|
359 |
-
// if ( $course_data = $user->get_course_data( $course_id ) ) {
|
360 |
-
$enrolled_date = $course_data->get_start_time();
|
361 |
-
$finished_date = $course_data->get_end_time();
|
362 |
-
$status = $course_data->get_status();
|
363 |
-
$grade = $course_data->get_grade();
|
364 |
-
// }
|
365 |
-
|
366 |
-
$data = array(
|
367 |
-
array(
|
368 |
-
'name' => __( 'Course Author', 'learnpress' ),
|
369 |
-
'value' => $course->get_author_display_name(),
|
370 |
-
),
|
371 |
-
array(
|
372 |
-
'name' => __( 'Course Name', 'learnpress' ),
|
373 |
-
'value' => $course->get_title(),
|
374 |
-
),
|
375 |
-
array(
|
376 |
-
'name' => __( 'Course Date', 'learnpress' ),
|
377 |
-
'value' => get_post_field( 'post_date', $course_data->get_id() ),
|
378 |
-
),
|
379 |
-
array(
|
380 |
-
'name' => __( 'Course URL', 'learnpress' ),
|
381 |
-
'value' => $course->get_permalink(),
|
382 |
-
),
|
383 |
-
array(
|
384 |
-
'name' => __( 'Enrolled Date', 'learnpress' ),
|
385 |
-
'value' => $enrolled_date,
|
386 |
-
),
|
387 |
-
array(
|
388 |
-
'name' => __( 'Finished Date', 'learnpress' ),
|
389 |
-
'value' => $finished_date ? $finished_date : '-',
|
390 |
-
),
|
391 |
-
array(
|
392 |
-
'name' => __( 'Course Status', 'learnpress' ),
|
393 |
-
'value' => $status,
|
394 |
-
),
|
395 |
-
array(
|
396 |
-
'name' => __( 'Course Grade', 'learnpress' ),
|
397 |
-
'value' => $status == 'finished' ? $grade : __( 'Ungraded', 'learnpress' ),
|
398 |
-
),
|
399 |
-
);
|
400 |
-
$export_items[] = array(
|
401 |
-
'group_id' => 'lp-purchased-course-' . $course_data->get_id(),
|
402 |
-
'group_label' => __( 'Purchased Course', 'learnpress' ),
|
403 |
-
'item_id' => "course-{$course_data->get_id()}",
|
404 |
-
'data' => $data,
|
405 |
-
);
|
406 |
-
|
407 |
-
$this->_export_purchased_course_items( $export_items, $course_data );
|
408 |
-
}
|
409 |
-
}
|
410 |
-
|
411 |
-
$done = count( $courses ) < $number;
|
412 |
-
$export_data['data'] = $export_items;
|
413 |
-
$export_data['done'] = $done;
|
414 |
-
|
415 |
-
return $export_data;
|
416 |
-
}
|
417 |
-
|
418 |
-
/**
|
419 |
-
* @param array $export_items
|
420 |
-
* @param LP_User_Item_Course $course_data
|
421 |
-
*/
|
422 |
-
protected function _export_purchased_course_items( &$export_items, $course_data ) {
|
423 |
-
global $post;
|
424 |
-
$post = get_post( $course_data->get_id() );
|
425 |
-
setup_postdata( $post );
|
426 |
-
$course = learn_press_get_course( $course_data->get_id() );
|
427 |
-
|
428 |
-
$items = $course_data->get_items();
|
429 |
-
|
430 |
-
if ( ! $items ) {
|
431 |
-
return;
|
432 |
-
}
|
433 |
-
|
434 |
-
foreach ( $items as $user_course_item ) {
|
435 |
-
$item = $course->get_item( $user_course_item->get_id() );
|
436 |
-
$export_item_data = array(
|
437 |
-
array(
|
438 |
-
'name' => __( 'Item Name', 'learnpress' ),
|
439 |
-
'value' => $item->get_title(),
|
440 |
-
),
|
441 |
-
array(
|
442 |
-
'name' => __( 'Item Type', 'learnpress' ),
|
443 |
-
'value' => $item->get_item_type( 'display' ),
|
444 |
-
),
|
445 |
-
array(
|
446 |
-
'name' => __( 'Item URL', 'learnpress' ),
|
447 |
-
'value' => $item->get_permalink(),
|
448 |
-
),
|
449 |
-
);
|
450 |
-
|
451 |
-
if ( $item->get_item_type() == LP_QUIZ_CPT ) {
|
452 |
-
$export_item_data[] = array(
|
453 |
-
'name' => __( 'Status', 'learnpress' ),
|
454 |
-
'value' => $user_course_item->get_result() . '%',
|
455 |
-
);
|
456 |
-
|
457 |
-
$export_item_data[] = array(
|
458 |
-
'name' => __( 'Grade', 'learnpress' ),
|
459 |
-
'value' => $user_course_item->get_graduation(),
|
460 |
-
);
|
461 |
-
} elseif ( $item->get_item_type() == LP_LESSON_CPT ) {
|
462 |
-
$export_item_data[] = array(
|
463 |
-
'name' => __( 'Completed', 'learnpress' ),
|
464 |
-
'value' => $user_course_item->get_status() === 'completed' ? __( 'Yes', 'learnpress' ) : __(
|
465 |
-
'No',
|
466 |
-
'learnpress'
|
467 |
-
),
|
468 |
-
);
|
469 |
-
}
|
470 |
-
|
471 |
-
$export_items[] = array(
|
472 |
-
'group_id' => 'lp-purchased-course-items-' . $course_data->get_id(),
|
473 |
-
'group_label' => __( 'Course Items', 'learnpress' ),
|
474 |
-
'item_id' => "course-{$course_data->get_id()}-{$user_course_item->get_id()}",
|
475 |
-
'data' => $export_item_data,
|
476 |
-
);
|
477 |
-
}
|
478 |
-
|
479 |
-
wp_reset_postdata();
|
480 |
-
}
|
481 |
-
|
482 |
-
/**
|
483 |
-
* Query all courses by user email
|
484 |
-
*
|
485 |
-
* @param string $type
|
486 |
-
* @param string $email
|
487 |
-
* @param array $args
|
488 |
-
*
|
489 |
-
* @return array|bool|LP_Query_List_Table
|
490 |
-
*/
|
491 |
-
protected function get_courses_by_email( $type = 'own', $email = '', $args = array() ) {
|
492 |
-
$user = get_user_by( 'email', $email );
|
493 |
-
|
494 |
-
if ( ! $user ) {
|
495 |
-
return false;
|
496 |
-
}
|
497 |
-
|
498 |
-
$profile = LP_Profile::instance( $user->ID );
|
499 |
-
|
500 |
-
return $profile->query_courses(
|
501 |
-
$type,
|
502 |
-
$args
|
503 |
-
);
|
504 |
-
}
|
505 |
-
|
506 |
-
/**
|
507 |
-
* Eraser personal data
|
508 |
-
*
|
509 |
-
* @param string $email
|
510 |
-
* @param int $page
|
511 |
-
*
|
512 |
-
* @return array
|
513 |
-
*/
|
514 |
-
public function personal_data_eraser( $email, $page ) {
|
515 |
-
$number = 500;
|
516 |
-
$page = (int) $page;
|
517 |
-
|
518 |
-
$eraser_data = array(
|
519 |
-
'items_removed' => false,
|
520 |
-
'items_retained' => false,
|
521 |
-
'messages' => array(),
|
522 |
-
'done' => 1,
|
523 |
-
);
|
524 |
-
|
525 |
-
$wp_user = get_user_by( 'email', $email );
|
526 |
-
|
527 |
-
if ( ! $wp_user ) {
|
528 |
-
return $eraser_data;
|
529 |
-
}
|
530 |
-
|
531 |
-
$this->_eraser_orders( $wp_user->ID, $page );
|
532 |
-
$this->_eraser_user_items( $wp_user->ID, $page );
|
533 |
-
$this->_eraser_courses( $wp_user->ID, $page );
|
534 |
-
|
535 |
-
delete_user_meta( $wp_user->ID, '_lp_profile_privacy' );
|
536 |
-
$eraser_data['items_removed'] = true;
|
537 |
-
|
538 |
-
return $eraser_data;
|
539 |
-
}
|
540 |
-
|
541 |
-
/**
|
542 |
-
* Eraser orders
|
543 |
-
*
|
544 |
-
* @param int $user_id
|
545 |
-
* @param int $page
|
546 |
-
*/
|
547 |
-
protected function _eraser_orders( $user_id, $page ) {
|
548 |
-
$curd = new LP_User_CURD();
|
549 |
-
$order_curd = new LP_Order_CURD();
|
550 |
-
|
551 |
-
$orders = $curd->get_orders( $user_id, array( 'group_by_order' => true ) );
|
552 |
-
|
553 |
-
if ( ! $orders ) {
|
554 |
-
return;
|
555 |
-
}
|
556 |
-
|
557 |
-
foreach ( $orders as $order_id => $course_ids ) {
|
558 |
-
$order = learn_press_get_order( $order_id );
|
559 |
-
wp_delete_post( $order_id );
|
560 |
-
}
|
561 |
-
|
562 |
-
}
|
563 |
-
|
564 |
-
/**
|
565 |
-
* Eraser user items
|
566 |
-
*
|
567 |
-
* @param int $user_id
|
568 |
-
* @param int $page
|
569 |
-
*/
|
570 |
-
protected function _eraser_user_items( $user_id, $page ) {
|
571 |
-
$curd = new LP_User_CURD();
|
572 |
-
$curd->delete_user_item( array( 'user_id' => $user_id ) );
|
573 |
-
}
|
574 |
-
|
575 |
-
/**
|
576 |
-
* Eraser courses
|
577 |
-
*
|
578 |
-
* @param int $user_id
|
579 |
-
* @param int $page
|
580 |
-
*/
|
581 |
-
protected function _eraser_courses( $user_id, $page ) {
|
582 |
-
global $wpdb;
|
583 |
-
|
584 |
-
$query = $wpdb->prepare(
|
585 |
-
"
|
586 |
-
SELECT *
|
587 |
-
FROM {$wpdb->posts}
|
588 |
-
WHERE post_author = %d
|
589 |
-
AND post_type = %s
|
590 |
-
",
|
591 |
-
$user_id,
|
592 |
-
LP_COURSE_CPT
|
593 |
-
);
|
594 |
-
|
595 |
-
$post_ids = $wpdb->get_col( $query );
|
596 |
-
|
597 |
-
if ( ! $post_ids ) {
|
598 |
-
return;
|
599 |
-
}
|
600 |
-
|
601 |
-
$api = new LP_Course_CURD();
|
602 |
-
foreach ( $post_ids as $post_id ) {
|
603 |
-
$api->delete_course( $post_id, true );
|
604 |
-
}
|
605 |
-
}
|
606 |
-
|
607 |
-
}
|
608 |
-
|
609 |
-
return new LP_GDPR();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1,255 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Class LP_Hard_Cache
|
5 |
-
*
|
6 |
-
* Cache content in files
|
7 |
-
*
|
8 |
-
* @since 3.0.0
|
9 |
-
*/
|
10 |
-
class LP_Hard_Cache {
|
11 |
-
|
12 |
-
/**
|
13 |
-
* @var string
|
14 |
-
*/
|
15 |
-
protected static $_root_path = '';
|
16 |
-
|
17 |
-
/**
|
18 |
-
* @var string
|
19 |
-
*/
|
20 |
-
protected static $_default_group = '';
|
21 |
-
|
22 |
-
/**
|
23 |
-
* @var bool
|
24 |
-
*/
|
25 |
-
protected static $_lock = false;
|
26 |
-
|
27 |
-
/**
|
28 |
-
* @var bool
|
29 |
-
*/
|
30 |
-
protected static $_hard_lock = false;
|
31 |
-
|
32 |
-
/**
|
33 |
-
* Init
|
34 |
-
*/
|
35 |
-
/*public static function init() {
|
36 |
-
$upload_dir = wp_upload_dir();
|
37 |
-
self::$_root_path = trailingslashit( $upload_dir['basedir'] ) . 'lp-cache';
|
38 |
-
|
39 |
-
if ( defined( 'LP_HARD_CACHE' ) ) {
|
40 |
-
self::$_lock = self::$_hard_lock = ! LP_HARD_CACHE;
|
41 |
-
} else {
|
42 |
-
self::$_lock = self::$_hard_lock = ! ( 'yes' === LP_Settings::instance()->get( 'enable_hard_cache' ) );
|
43 |
-
}
|
44 |
-
|
45 |
-
if ( self::is_locked() ) {
|
46 |
-
return;
|
47 |
-
}
|
48 |
-
|
49 |
-
@wp_mkdir_p( self::$_root_path ); // phpcs:ignore
|
50 |
-
}*/
|
51 |
-
|
52 |
-
/**
|
53 |
-
* Replace existing cache with new data.
|
54 |
-
*
|
55 |
-
* @param string $key
|
56 |
-
* @param mixed $data
|
57 |
-
* @param string $group
|
58 |
-
*
|
59 |
-
* @return bool
|
60 |
-
*/
|
61 |
-
public static function replace( $key, $data, $group = '' ) {
|
62 |
-
if ( self::is_locked() ) {
|
63 |
-
return false;
|
64 |
-
}
|
65 |
-
|
66 |
-
$file = self::get_file( $key, $group );
|
67 |
-
|
68 |
-
if ( ! file_exists( $file ) ) {
|
69 |
-
return false;
|
70 |
-
}
|
71 |
-
|
72 |
-
return self::write( $key, $data, $group );
|
73 |
-
}
|
74 |
-
|
75 |
-
/**
|
76 |
-
* Set cache content, replace if existing.
|
77 |
-
*
|
78 |
-
* @param string $key
|
79 |
-
* @param mixed $data
|
80 |
-
* @param string $group
|
81 |
-
*
|
82 |
-
* @return bool
|
83 |
-
*/
|
84 |
-
public static function set( $key, $data, $group = '' ) {
|
85 |
-
if ( self::is_locked() ) {
|
86 |
-
return false;
|
87 |
-
}
|
88 |
-
|
89 |
-
return self::write( $key, $data, $group, true );
|
90 |
-
}
|
91 |
-
|
92 |
-
/**
|
93 |
-
* Get cache from file.
|
94 |
-
*
|
95 |
-
* @param string $key
|
96 |
-
* @param string $group
|
97 |
-
*
|
98 |
-
* @return bool
|
99 |
-
*/
|
100 |
-
public static function get( $key, $group = '' ) {
|
101 |
-
if ( self::is_locked() ) {
|
102 |
-
return false;
|
103 |
-
}
|
104 |
-
|
105 |
-
return self::read( $key, $group );
|
106 |
-
}
|
107 |
-
|
108 |
-
/**
|
109 |
-
* Read content file
|
110 |
-
*
|
111 |
-
* @param string $key
|
112 |
-
* @param string $group
|
113 |
-
*
|
114 |
-
* @return bool|mixed
|
115 |
-
*/
|
116 |
-
public static function read( $key, $group = '' ) {
|
117 |
-
if ( self::is_locked() ) {
|
118 |
-
return false;
|
119 |
-
}
|
120 |
-
|
121 |
-
$file = self::get_file( $key, $group );
|
122 |
-
if ( file_exists( $file ) ) {
|
123 |
-
$f = @fopen( $file, 'r' ); // phpcs:ignore
|
124 |
-
$content = fread( $f, filesize( $file ) );
|
125 |
-
fclose( $f );
|
126 |
-
|
127 |
-
if ( ! $content ) {
|
128 |
-
return false;
|
129 |
-
}
|
130 |
-
|
131 |
-
return LP_Helper::maybe_unserialize( $content );
|
132 |
-
}
|
133 |
-
|
134 |
-
return false;
|
135 |
-
}
|
136 |
-
|
137 |
-
/**
|
138 |
-
* Write data into file.
|
139 |
-
*
|
140 |
-
* @param string $key
|
141 |
-
* @param mixed $data
|
142 |
-
* @param string $group
|
143 |
-
* @param bool $overwrite
|
144 |
-
*
|
145 |
-
* @return bool
|
146 |
-
*/
|
147 |
-
protected static function write( $key, $data, $group = '', $overwrite = false ) {
|
148 |
-
|
149 |
-
if ( self::is_locked() ) {
|
150 |
-
return false;
|
151 |
-
}
|
152 |
-
|
153 |
-
$file = self::get_file( $key, $group );
|
154 |
-
|
155 |
-
/**
|
156 |
-
* If file exists and overwrite is false
|
157 |
-
*/
|
158 |
-
if ( $overwrite && file_exists( $file ) ) {
|
159 |
-
return false;
|
160 |
-
}
|
161 |
-
|
162 |
-
$f = @fopen( $file, 'w' );
|
163 |
-
|
164 |
-
if ( ! $f ) {
|
165 |
-
return false;
|
166 |
-
}
|
167 |
-
|
168 |
-
fwrite( $f, maybe_serialize( $data ) );
|
169 |
-
fclose( $f );
|
170 |
-
|
171 |
-
return true;
|
172 |
-
}
|
173 |
-
|
174 |
-
/**
|
175 |
-
* Get file of cache by the key and group.
|
176 |
-
*
|
177 |
-
* @param string $key
|
178 |
-
* @param string $group
|
179 |
-
*
|
180 |
-
* @return string
|
181 |
-
*/
|
182 |
-
protected static function get_file( $key, $group = '' ) {
|
183 |
-
if ( self::is_locked() ) {
|
184 |
-
return false;
|
185 |
-
}
|
186 |
-
|
187 |
-
$path = array( self::$_root_path, $group );
|
188 |
-
$path = array_filter( $path );
|
189 |
-
$path = join( '/', $path );
|
190 |
-
@wp_mkdir_p( $path ); // phpcs:ignore
|
191 |
-
$file = "{$path}/{$key}.cache";
|
192 |
-
|
193 |
-
return $file;
|
194 |
-
}
|
195 |
-
|
196 |
-
protected static function get_path( $group = '' ) {
|
197 |
-
$path = array( self::$_root_path, $group );
|
198 |
-
$path = array_filter( $path );
|
199 |
-
$path = join( '/', $path );
|
200 |
-
|
201 |
-
return $path;
|
202 |
-
}
|
203 |
-
|
204 |
-
/**
|
205 |
-
* Enable for updating cache temporary even it is locked.
|
206 |
-
*/
|
207 |
-
public static function unlock() {
|
208 |
-
self::$_lock = false;
|
209 |
-
}
|
210 |
-
|
211 |
-
/**
|
212 |
-
* Disable for updating cache temporary event it is not locked.
|
213 |
-
*/
|
214 |
-
public static function lock() {
|
215 |
-
self::$_lock = true;
|
216 |
-
}
|
217 |
-
|
218 |
-
/**
|
219 |
-
* Reset lock to default.
|
220 |
-
*/
|
221 |
-
public static function reset_lock() {
|
222 |
-
self::$_lock = self::$_hard_lock;
|
223 |
-
}
|
224 |
-
|
225 |
-
/**
|
226 |
-
* Check if cache is locked
|
227 |
-
*
|
228 |
-
* @return bool
|
229 |
-
*/
|
230 |
-
public static function is_locked() {
|
231 |
-
return self::$_lock;
|
232 |
-
}
|
233 |
-
|
234 |
-
public static function flush( $group = false ) {
|
235 |
-
if ( ! function_exists( 'WP_Filesystem' ) ) {
|
236 |
-
require_once( ABSPATH . 'wp-admin/includes/file.php' );
|
237 |
-
}
|
238 |
-
WP_Filesystem();
|
239 |
-
global $wp_filesystem;
|
240 |
-
|
241 |
-
if ( ! $wp_filesystem ) {
|
242 |
-
return false;
|
243 |
-
}
|
244 |
-
|
245 |
-
if ( $group ) {
|
246 |
-
$return = $wp_filesystem->rmdir( self::get_path( $group ), true );
|
247 |
-
} else {
|
248 |
-
$return = $wp_filesystem->rmdir( self::$_root_path, true );
|
249 |
-
}
|
250 |
-
|
251 |
-
return $return;
|
252 |
-
}
|
253 |
-
}
|
254 |
-
|
255 |
-
//add_action( 'init', array( 'LP_Hard_Cache', 'init' ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -94,26 +94,10 @@ class LP_Helper {
|
|
94 |
*
|
95 |
* @param array|int $ids
|
96 |
* @Todo: tungnx - need to review code
|
|
|
97 |
*/
|
98 |
public static function cache_posts( $ids ) {
|
99 |
-
|
100 |
-
|
101 |
-
settype( $ids, 'array' );
|
102 |
-
$format = array_fill( 0, sizeof( $ids ), '%d' );
|
103 |
-
$query = $wpdb->prepare(
|
104 |
-
"
|
105 |
-
SELECT * FROM {$wpdb->posts} WHERE ID IN(" . join( ',', $format ) . ')
|
106 |
-
',
|
107 |
-
$ids
|
108 |
-
);
|
109 |
-
|
110 |
-
$posts = $wpdb->get_results( $query );
|
111 |
-
|
112 |
-
if ( $posts ) {
|
113 |
-
foreach ( $posts as $post ) {
|
114 |
-
wp_cache_set( $post->ID, $post, 'posts' );
|
115 |
-
}
|
116 |
-
}
|
117 |
}
|
118 |
|
119 |
/**
|
94 |
*
|
95 |
* @param array|int $ids
|
96 |
* @Todo: tungnx - need to review code
|
97 |
+
* @depecated 4.1.6.9
|
98 |
*/
|
99 |
public static function cache_posts( $ids ) {
|
100 |
+
//_deprecated_function( __FUNCTION__, '4.1.6.9' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
101 |
}
|
102 |
|
103 |
/**
|
@@ -39,8 +39,9 @@ class LP_Nonce_Helper {
|
|
39 |
* @since 3.0.0
|
40 |
*
|
41 |
* @return bool
|
|
|
42 |
*/
|
43 |
-
public static function verify_course( $nonce, $action, $course_id = 0, $user_id = 0 ) {
|
44 |
if ( ! $course_id ) {
|
45 |
$course_id = get_the_ID();
|
46 |
}
|
@@ -50,22 +51,25 @@ class LP_Nonce_Helper {
|
|
50 |
}
|
51 |
|
52 |
return wp_verify_nonce( $nonce, sprintf( 'learn-press-%s-course-%s-%s', $action, $course_id, $user_id ) );
|
53 |
-
}
|
54 |
|
55 |
public static function quiz_action( $action, $quiz_id, $course_id, $ajax = false ) {
|
56 |
?>
|
57 |
-
<input type="hidden" name="quiz-id" value="<?php echo $quiz_id; ?>">
|
58 |
-
<input type="hidden" name="course-id" value="<?php echo $course_id; ?>">
|
59 |
<?php if ( $ajax ) { ?>
|
60 |
-
<input type="hidden" name="lp-ajax" value="<?php echo $action; ?>-quiz">
|
61 |
<?php } else { ?>
|
62 |
-
<input type="hidden" name="lp-<?php echo $action; ?>-quiz" value="<?php echo $quiz_id; ?>">
|
63 |
<?php } ?>
|
64 |
-
<input type="hidden" name="<?php echo $action; ?>-quiz-nonce" value="<?php echo wp_create_nonce( sprintf( 'learn-press/quiz/%s/%s-%s-%s', $action, get_current_user_id(), $course_id, $quiz_id ) ); ?>">
|
65 |
<?php
|
66 |
}
|
67 |
|
68 |
-
|
|
|
|
|
|
|
69 |
if ( ! $nonce ) {
|
70 |
$nonce = LP_Request::get_post( $action . '-quiz-nonce' );
|
71 |
}
|
@@ -80,5 +84,5 @@ class LP_Nonce_Helper {
|
|
80 |
}
|
81 |
|
82 |
return wp_verify_nonce( $nonce, sprintf( 'learn-press/quiz/%s/%s-%s-%s', $action, get_current_user_id(), $course_id, $quiz_id ) );
|
83 |
-
}
|
84 |
}
|
39 |
* @since 3.0.0
|
40 |
*
|
41 |
* @return bool
|
42 |
+
* @depecated 4.1.6.9
|
43 |
*/
|
44 |
+
/*public static function verify_course( $nonce, $action, $course_id = 0, $user_id = 0 ) {
|
45 |
if ( ! $course_id ) {
|
46 |
$course_id = get_the_ID();
|
47 |
}
|
51 |
}
|
52 |
|
53 |
return wp_verify_nonce( $nonce, sprintf( 'learn-press-%s-course-%s-%s', $action, $course_id, $user_id ) );
|
54 |
+
}*/
|
55 |
|
56 |
public static function quiz_action( $action, $quiz_id, $course_id, $ajax = false ) {
|
57 |
?>
|
58 |
+
<input type="hidden" name="quiz-id" value="<?php echo esc_attr( $quiz_id ); ?>">
|
59 |
+
<input type="hidden" name="course-id" value="<?php echo esc_attr( $course_id ); ?>">
|
60 |
<?php if ( $ajax ) { ?>
|
61 |
+
<input type="hidden" name="lp-ajax" value="<?php echo esc_attr( $action ); ?>-quiz">
|
62 |
<?php } else { ?>
|
63 |
+
<input type="hidden" name="lp-<?php echo esc_attr( $action ); ?>-quiz" value="<?php echo esc_attr( $quiz_id ); ?>">
|
64 |
<?php } ?>
|
65 |
+
<input type="hidden" name="<?php echo esc_attr( $action ); ?>-quiz-nonce" value="<?php echo wp_create_nonce( sprintf( 'learn-press/quiz/%s/%s-%s-%s', $action, get_current_user_id(), $course_id, $quiz_id ) ); ?>">
|
66 |
<?php
|
67 |
}
|
68 |
|
69 |
+
/**
|
70 |
+
* @depecated 4.1.6.9
|
71 |
+
*/
|
72 |
+
/*public static function verify_quiz_action( $action, $nonce = '', $quiz_id = 0, $course_id = 0 ) {
|
73 |
if ( ! $nonce ) {
|
74 |
$nonce = LP_Request::get_post( $action . '-quiz-nonce' );
|
75 |
}
|
84 |
}
|
85 |
|
86 |
return wp_verify_nonce( $nonce, sprintf( 'learn-press/quiz/%s/%s-%s-%s', $action, get_current_user_id(), $course_id, $quiz_id ) );
|
87 |
+
}*/
|
88 |
}
|
@@ -34,9 +34,6 @@ class LP_Page_Controller {
|
|
34 |
protected function __construct() {
|
35 |
add_action( 'pre_get_posts', array( $this, 'pre_get_posts' ), 10 );
|
36 |
add_filter( 'template_include', array( $this, 'template_loader' ), 10 );
|
37 |
-
// Comment by tungnx
|
38 |
-
// add_filter( 'template_include', array( $this, 'template_content_item' ), 20 );
|
39 |
-
// add_filter( 'template_include', array( $this, 'maybe_redirect_quiz' ), 30 );
|
40 |
add_filter( 'template_include', array( $this, 'check_pages' ), 30 );
|
41 |
add_filter( 'template_include', array( $this, 'auto_shortcode' ), 50 );
|
42 |
|
@@ -391,35 +388,6 @@ class LP_Page_Controller {
|
|
391 |
return $template;
|
392 |
}
|
393 |
|
394 |
-
/**
|
395 |
-
* @editor tungnx
|
396 |
-
* @modify 4.1.3 - comment - not use
|
397 |
-
*/
|
398 |
-
/*
|
399 |
-
public function maybe_redirect_quiz( $template ) {
|
400 |
-
$course = learn_press_get_course();
|
401 |
-
$quiz = LP_Global::course_item_quiz();
|
402 |
-
$user = learn_press_get_current_user();
|
403 |
-
$redirect = false;
|
404 |
-
|
405 |
-
if ( learn_press_is_review_questions() ) {
|
406 |
-
if ( ! $quiz->get_review_questions() ) {
|
407 |
-
$redirect = $course->get_item_link( $quiz->get_id() );
|
408 |
-
}
|
409 |
-
}
|
410 |
-
|
411 |
-
if ( LP_Global::quiz_question() && ! $user->has_started_quiz( $quiz->get_id(), $course->get_id() ) ) {
|
412 |
-
$redirect = $course->get_item_link( $quiz->get_id() );
|
413 |
-
}
|
414 |
-
|
415 |
-
if ( $redirect ) {
|
416 |
-
wp_redirect( $redirect );
|
417 |
-
exit();
|
418 |
-
}
|
419 |
-
|
420 |
-
return $template;
|
421 |
-
}*/
|
422 |
-
|
423 |
/**
|
424 |
* Load data for item of course
|
425 |
*
|
@@ -438,21 +406,21 @@ class LP_Page_Controller {
|
|
438 |
*/
|
439 |
global $wp, $wp_query, $lp_course_item;
|
440 |
|
441 |
-
$lp_course = learn_press_get_course();
|
442 |
-
|
443 |
if ( LP_COURSE_CPT !== $post->post_type ) {
|
444 |
return $post;
|
445 |
}
|
446 |
|
447 |
-
$course = learn_press_get_course(
|
448 |
if ( ! $course ) {
|
449 |
return $post;
|
450 |
}
|
451 |
|
452 |
/**
|
453 |
* @deprecated v4.1.6.1 LP()->global['course'], $GLOBALS['course']
|
|
|
454 |
*/
|
455 |
-
LP()->global['course'] = $GLOBALS['course'] = $GLOBALS['lp_course'] = $course;
|
|
|
456 |
|
457 |
if ( wp_verify_nonce( LP_Request::get( 'preview' ), 'preview-' . $post->ID ) ) {
|
458 |
$GLOBALS['preview_course'] = $post->ID;
|
@@ -469,6 +437,8 @@ class LP_Page_Controller {
|
|
469 |
}
|
470 |
|
471 |
try {
|
|
|
|
|
472 |
// If item name is set in query vars
|
473 |
if ( ! is_numeric( $vars['course-item'] ) ) {
|
474 |
$item_type = $vars['item-type'];
|
@@ -481,35 +451,14 @@ class LP_Page_Controller {
|
|
481 |
return $post;
|
482 |
}
|
483 |
|
484 |
-
|
485 |
-
* Comment for reason some page-builder run wrong
|
486 |
-
*
|
487 |
-
* 1. Anywhere elementor
|
488 |
-
* 2. WPBakery
|
489 |
-
*/
|
490 |
-
/*$section_id = LP_Section_DB::getInstance()->get_section_id_by_item_id( $post_item->ID );
|
491 |
-
|
492 |
-
if ( ! $section_id ) {
|
493 |
-
throw new Exception( __( 'The item is not assigned to any section', 'learnpress' ) );
|
494 |
-
}
|
495 |
-
|
496 |
-
$course_id = LP_Section_DB::getInstance()->get_course_id_by_section( $section_id );
|
497 |
-
|
498 |
-
if ( ! $course_id ) {
|
499 |
-
throw new Exception( __( 'The item is not assigned to any course', 'learnpress' ) );
|
500 |
-
}
|
501 |
-
|
502 |
-
if ( $course_id != $post->ID ) {
|
503 |
-
throw new Exception( __( 'The item is not assigned to this course', 'learnpress' ) );
|
504 |
-
}*/
|
505 |
-
|
506 |
-
$lp_course_item = apply_filters( 'learn-press/single-course-request-item', LP_Course_Item::get_item( $post_item->ID, $course->get_id() ) );
|
507 |
|
508 |
if ( ! $lp_course_item ) {
|
509 |
return $post;
|
510 |
}
|
511 |
|
512 |
-
|
|
|
513 |
} catch ( Exception $ex ) {
|
514 |
learn_press_add_message( $ex->getMessage(), 'error' );
|
515 |
}
|
@@ -535,20 +484,6 @@ class LP_Page_Controller {
|
|
535 |
return apply_filters( 'learn-press/query/404', $this->_is_404 );
|
536 |
}
|
537 |
|
538 |
-
public function template_content_item( $template ) {
|
539 |
-
|
540 |
-
/**
|
541 |
-
* @var LP_Course $lp_course
|
542 |
-
* @var LP_Course_Item $lp_course_item
|
543 |
-
* @var LP_User $lp_user
|
544 |
-
*/
|
545 |
-
global $lp_course, $lp_course_item, $lp_user;
|
546 |
-
|
547 |
-
do_action( 'learn-press/parse-course-item', $lp_course_item, $lp_course );
|
548 |
-
|
549 |
-
return $template;
|
550 |
-
}
|
551 |
-
|
552 |
/**
|
553 |
* In preview mode, if there is a 'post_format' in query var
|
554 |
* wp check and replace our post-type to post. This make preview
|
@@ -1060,10 +995,16 @@ class LP_Page_Controller {
|
|
1060 |
$is_need_check_in_arr = true;
|
1061 |
}
|
1062 |
|
|
|
|
|
|
|
|
|
|
|
1063 |
// Meta query
|
1064 |
$meta_query = [];
|
1065 |
if ( isset( $_REQUEST['sort_by'] ) ) {
|
1066 |
-
|
|
|
1067 |
$meta_query[] = array(
|
1068 |
'key' => '_lp_price',
|
1069 |
'value' => 0,
|
@@ -1071,7 +1012,7 @@ class LP_Page_Controller {
|
|
1071 |
);
|
1072 |
}
|
1073 |
|
1074 |
-
if ( 'on_free' === $
|
1075 |
$meta_query[] = array(
|
1076 |
'key' => '_lp_price',
|
1077 |
'value' => 0,
|
@@ -1135,6 +1076,8 @@ class LP_Page_Controller {
|
|
1135 |
if ( ! empty( $posts_in ) ) {
|
1136 |
$posts_in = LP_Database::get_values_by_key( $posts_in );
|
1137 |
$q->set( 'post__in', $posts_in );
|
|
|
|
|
1138 |
}
|
1139 |
}
|
1140 |
|
34 |
protected function __construct() {
|
35 |
add_action( 'pre_get_posts', array( $this, 'pre_get_posts' ), 10 );
|
36 |
add_filter( 'template_include', array( $this, 'template_loader' ), 10 );
|
|
|
|
|
|
|
37 |
add_filter( 'template_include', array( $this, 'check_pages' ), 30 );
|
38 |
add_filter( 'template_include', array( $this, 'auto_shortcode' ), 50 );
|
39 |
|
388 |
return $template;
|
389 |
}
|
390 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
391 |
/**
|
392 |
* Load data for item of course
|
393 |
*
|
406 |
*/
|
407 |
global $wp, $wp_query, $lp_course_item;
|
408 |
|
|
|
|
|
409 |
if ( LP_COURSE_CPT !== $post->post_type ) {
|
410 |
return $post;
|
411 |
}
|
412 |
|
413 |
+
$course = learn_press_get_course();
|
414 |
if ( ! $course ) {
|
415 |
return $post;
|
416 |
}
|
417 |
|
418 |
/**
|
419 |
* @deprecated v4.1.6.1 LP()->global['course'], $GLOBALS['course']
|
420 |
+
* Some theme still use: global $course; LP()->global['course']
|
421 |
*/
|
422 |
+
//LP()->global['course'] = $GLOBALS['course'] = $GLOBALS['lp_course'] = $course;
|
423 |
+
LP()->global['course'] = $GLOBALS['course'] = $course;
|
424 |
|
425 |
if ( wp_verify_nonce( LP_Request::get( 'preview' ), 'preview-' . $post->ID ) ) {
|
426 |
$GLOBALS['preview_course'] = $post->ID;
|
437 |
}
|
438 |
|
439 |
try {
|
440 |
+
$user = learn_press_get_current_user();
|
441 |
+
|
442 |
// If item name is set in query vars
|
443 |
if ( ! is_numeric( $vars['course-item'] ) ) {
|
444 |
$item_type = $vars['item-type'];
|
451 |
return $post;
|
452 |
}
|
453 |
|
454 |
+
$lp_course_item = apply_filters( 'learn-press/single-course-request-item', $course->get_item( $post_item->ID ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
455 |
|
456 |
if ( ! $lp_course_item ) {
|
457 |
return $post;
|
458 |
}
|
459 |
|
460 |
+
// Set item viewing
|
461 |
+
$user->set_viewing_item( $lp_course_item );
|
462 |
} catch ( Exception $ex ) {
|
463 |
learn_press_add_message( $ex->getMessage(), 'error' );
|
464 |
}
|
484 |
return apply_filters( 'learn-press/query/404', $this->_is_404 );
|
485 |
}
|
486 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
487 |
/**
|
488 |
* In preview mode, if there is a 'post_format' in query var
|
489 |
* wp check and replace our post-type to post. This make preview
|
995 |
$is_need_check_in_arr = true;
|
996 |
}
|
997 |
|
998 |
+
$author_ids_str = LP_Helper::sanitize_params_submitted( $_REQUEST['c_authors'] ?? 0 );
|
999 |
+
if ( ! empty( $author_ids_str ) ) {
|
1000 |
+
$q->set( 'author', $author_ids_str );
|
1001 |
+
}
|
1002 |
+
|
1003 |
// Meta query
|
1004 |
$meta_query = [];
|
1005 |
if ( isset( $_REQUEST['sort_by'] ) ) {
|
1006 |
+
$sort_by = LP_Helper::sanitize_params_submitted( $_REQUEST['sort_by'] );
|
1007 |
+
if ( 'on_paid' === $sort_by ) {
|
1008 |
$meta_query[] = array(
|
1009 |
'key' => '_lp_price',
|
1010 |
'value' => 0,
|
1012 |
);
|
1013 |
}
|
1014 |
|
1015 |
+
if ( 'on_free' === $sort_by ) {
|
1016 |
$meta_query[] = array(
|
1017 |
'key' => '_lp_price',
|
1018 |
'value' => 0,
|
1076 |
if ( ! empty( $posts_in ) ) {
|
1077 |
$posts_in = LP_Database::get_values_by_key( $posts_in );
|
1078 |
$q->set( 'post__in', $posts_in );
|
1079 |
+
} else {
|
1080 |
+
$q->set( 'post__in', 0 );
|
1081 |
}
|
1082 |
}
|
1083 |
|
@@ -156,7 +156,7 @@ class LP_Query_List_Table implements ArrayAccess {
|
|
156 |
);
|
157 |
|
158 |
if ( $echo ) {
|
159 |
-
echo $output;
|
160 |
}
|
161 |
|
162 |
return $output;
|
@@ -172,7 +172,7 @@ class LP_Query_List_Table implements ArrayAccess {
|
|
172 |
}
|
173 |
|
174 |
if ( $echo ) {
|
175 |
-
echo $output;
|
176 |
}
|
177 |
|
178 |
return $output;
|
156 |
);
|
157 |
|
158 |
if ( $echo ) {
|
159 |
+
echo wp_kses_post( $output );
|
160 |
}
|
161 |
|
162 |
return $output;
|
172 |
}
|
173 |
|
174 |
if ( $echo ) {
|
175 |
+
echo wp_kses_post( $output );
|
176 |
}
|
177 |
|
178 |
return $output;
|
@@ -175,7 +175,7 @@ class LP_Query {
|
|
175 |
|
176 |
if ( $tabs ) {
|
177 |
foreach ( $tabs as $slug => $args ) {
|
178 |
-
$tab_slug =
|
179 |
$rules[] = array(
|
180 |
'^' . get_post_field( 'post_name', $profile_id ) . '/([^/]*)/?(' . $tab_slug . ')/?([0-9]*)/?$',
|
181 |
'index.php?page_id=' . $profile_id . '&user=$matches[1]&view=$matches[2]&view_id=$matches[3]',
|
@@ -184,7 +184,7 @@ class LP_Query {
|
|
184 |
|
185 |
if ( ! empty( $args['sections'] ) ) {
|
186 |
foreach ( $args['sections'] as $section_slug => $section ) {
|
187 |
-
$section_slug =
|
188 |
$rules[] = array(
|
189 |
'^' . get_post_field( 'post_name', $profile_id ) . '/([^/]*)/?(' . $tab_slug . ')/(' . $section_slug . ')/?([0-9]*)?$',
|
190 |
'index.php?page_id=' . $profile_id . '&user=$matches[1]&view=$matches[2]§ion=$matches[3]&view_id=$matches[4]',
|
@@ -197,14 +197,14 @@ class LP_Query {
|
|
197 |
}
|
198 |
|
199 |
// Archive course
|
200 |
-
|
201 |
if ( $course_page_id ) {
|
202 |
$rules[] = array(
|
203 |
'^' . get_post_field( 'post_name', $course_page_id ) . '/page/([0-9]{1,})/?$',
|
204 |
'index.php?pagename=' . get_post_field( 'post_name', $course_page_id ) . '&page=$matches[1]',
|
205 |
'top',
|
206 |
);
|
207 |
-
}
|
208 |
|
209 |
global $wp_rewrite;
|
210 |
|
175 |
|
176 |
if ( $tabs ) {
|
177 |
foreach ( $tabs as $slug => $args ) {
|
178 |
+
$tab_slug = $args['slug'] ?? $slug;
|
179 |
$rules[] = array(
|
180 |
'^' . get_post_field( 'post_name', $profile_id ) . '/([^/]*)/?(' . $tab_slug . ')/?([0-9]*)/?$',
|
181 |
'index.php?page_id=' . $profile_id . '&user=$matches[1]&view=$matches[2]&view_id=$matches[3]',
|
184 |
|
185 |
if ( ! empty( $args['sections'] ) ) {
|
186 |
foreach ( $args['sections'] as $section_slug => $section ) {
|
187 |
+
$section_slug = $section['slug'] ?? $section_slug;
|
188 |
$rules[] = array(
|
189 |
'^' . get_post_field( 'post_name', $profile_id ) . '/([^/]*)/?(' . $tab_slug . ')/(' . $section_slug . ')/?([0-9]*)?$',
|
190 |
'index.php?page_id=' . $profile_id . '&user=$matches[1]&view=$matches[2]§ion=$matches[3]&view_id=$matches[4]',
|
197 |
}
|
198 |
|
199 |
// Archive course
|
200 |
+
/*$course_page_id = learn_press_get_page_id( 'courses' );
|
201 |
if ( $course_page_id ) {
|
202 |
$rules[] = array(
|
203 |
'^' . get_post_field( 'post_name', $course_page_id ) . '/page/([0-9]{1,})/?$',
|
204 |
'index.php?pagename=' . get_post_field( 'post_name', $course_page_id ) . '&page=$matches[1]',
|
205 |
'top',
|
206 |
);
|
207 |
+
}*/
|
208 |
|
209 |
global $wp_rewrite;
|
210 |
|
@@ -1,1014 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Class LP_Repair_Database
|
5 |
-
*
|
6 |
-
* Repair database tool
|
7 |
-
*
|
8 |
-
* @since 3.1.0
|
9 |
-
*/
|
10 |
-
class LP_Repair_Database {
|
11 |
-
/**
|
12 |
-
* @var LP_Repair_Database
|
13 |
-
*/
|
14 |
-
protected static $instance = null;
|
15 |
-
|
16 |
-
/**
|
17 |
-
* Posts are being deleted.
|
18 |
-
*
|
19 |
-
* @var array
|
20 |
-
*/
|
21 |
-
protected $deleting_posts = array();
|
22 |
-
|
23 |
-
/**
|
24 |
-
* LP_Repair_Database constructor.
|
25 |
-
*
|
26 |
-
* @access protected
|
27 |
-
*/
|
28 |
-
protected function __construct() {
|
29 |
-
//add_action( 'save_post', array( $this, 'save_post' ), 0 );
|
30 |
-
// add_action( 'deleted_post', array( $this, 'save_post' ), 0 );
|
31 |
-
// add_action( 'learn-press/added-item-to-section', array( $this, 'added_item_to_section' ), 5000, 3 );
|
32 |
-
// add_action( 'learn-press/removed-item-from-section', array( $this, 'removed_item_from_course' ), 5000, 2 );
|
33 |
-
//add_action( 'learn-press/save-course', array( $this, 'save_course' ), 5000, 1 );
|
34 |
-
//add_action( 'learn-press/added-course-item', array( $this, 'added_course_item' ), 10, 2 );
|
35 |
-
//add_action( 'learn-press/removed-course-item', array( $this, 'removed_course_item' ), 10 );
|
36 |
-
//add_action( 'learn-press/transition-course-item-status', array( $this, 'transition_course_item_status' ), 10, 4 );
|
37 |
-
|
38 |
-
//add_action( 'before_delete_post', array( $this, 'before_delete_post' ) );
|
39 |
-
// add_action( 'deleted_post', array( $this, 'deleted_post' ) );
|
40 |
-
// add_action( 'save_post', array( $this, 'save_post' ) );
|
41 |
-
}
|
42 |
-
|
43 |
-
/**
|
44 |
-
* Stores some information of the post is being deleted.
|
45 |
-
* Eg post-type will be lost after deleted post.
|
46 |
-
*
|
47 |
-
* @param int $post_id
|
48 |
-
*
|
49 |
-
* @since 3.1.0
|
50 |
-
* @editor 4.1.4
|
51 |
-
* @modify comment - not use
|
52 |
-
*/
|
53 |
-
/*public function before_delete_post( $post_id ) {
|
54 |
-
global $wpdb;
|
55 |
-
// LP_Debug::startTransaction();
|
56 |
-
$post_type = get_post_type( $post_id );
|
57 |
-
$data = array(
|
58 |
-
'post_type' => $post_type,
|
59 |
-
);
|
60 |
-
|
61 |
-
switch ( $post_type ) {
|
62 |
-
case LP_ORDER_CPT:
|
63 |
-
$order = learn_press_get_order( $post_id );
|
64 |
-
$data['users'] = $order->get_users();
|
65 |
-
$data['child'] = $order->get_child_orders();
|
66 |
-
|
67 |
-
break;
|
68 |
-
}
|
69 |
-
|
70 |
-
$this->deleting_posts[ $post_id ] = $data;
|
71 |
-
}*/
|
72 |
-
|
73 |
-
/**
|
74 |
-
* Do stuff after post deleted.
|
75 |
-
*
|
76 |
-
* @param int $post_id
|
77 |
-
*
|
78 |
-
* @since 3.1.0
|
79 |
-
*/
|
80 |
-
/*public function deleted_post( $post_id ) {
|
81 |
-
try {
|
82 |
-
if ( ! empty( $this->deleting_posts[ $post_id ] ) ) {
|
83 |
-
$data = $this->deleting_posts[ $post_id ];
|
84 |
-
$post_type = ! empty( $data['post_type'] ) ? $data['post_type'] : '';
|
85 |
-
|
86 |
-
switch ( $post_type ) {
|
87 |
-
case LP_ORDER_CPT:
|
88 |
-
if ( ! empty( $data['users'] ) ) {
|
89 |
-
$this->remove_order_from_user_meta( $data['users'], $post_id );
|
90 |
-
}
|
91 |
-
|
92 |
-
$this->remove_order_items( $post_id );
|
93 |
-
$this->remove_user_items_by_order_id( $post_id );
|
94 |
-
|
95 |
-
if ( ! empty( $data['child'] ) ) {
|
96 |
-
$this->remove_child_orders( $data['child'] );
|
97 |
-
}
|
98 |
-
break;
|
99 |
-
}
|
100 |
-
}
|
101 |
-
} catch ( Exception $ex ) {
|
102 |
-
echo $ex->getMessage();
|
103 |
-
}
|
104 |
-
|
105 |
-
// LP_Debug::rollbackTransaction();
|
106 |
-
// die();
|
107 |
-
}*/
|
108 |
-
|
109 |
-
/**
|
110 |
-
* Remove order items and it meta data from tables
|
111 |
-
* learnpress_user_items and learnpress_user_itemmeta
|
112 |
-
* by order id.
|
113 |
-
*
|
114 |
-
* @param int $order_id
|
115 |
-
*
|
116 |
-
* @return bool|int[]
|
117 |
-
* @since 3.1.0
|
118 |
-
* @editor tungnx
|
119 |
-
* @modify 4.1.4 comment - not use
|
120 |
-
*/
|
121 |
-
/*public function remove_order_items( $order_id ) {
|
122 |
-
global $wpdb;
|
123 |
-
|
124 |
-
if ( is_array( $order_id ) ) {
|
125 |
-
foreach ( $order_id as $oid ) {
|
126 |
-
$this->remove_order_items( $oid );
|
127 |
-
}
|
128 |
-
|
129 |
-
return true;
|
130 |
-
}
|
131 |
-
|
132 |
-
$order_item_id = $wpdb->get_col( $wpdb->prepare( "SELECT order_item_id FROM {$wpdb->learnpress_order_items} WHERE order_id = %d", $order_id ) );
|
133 |
-
|
134 |
-
if ( ! $order_item_id ) {
|
135 |
-
return false;
|
136 |
-
}
|
137 |
-
|
138 |
-
$format = array_fill( 0, sizeof( $order_item_id ), '%d' );
|
139 |
-
|
140 |
-
// Delete rows from order-items and order-itemmeta
|
141 |
-
$query = $wpdb->prepare(
|
142 |
-
"
|
143 |
-
DELETE
|
144 |
-
FROM {$wpdb->learnpress_order_itemmeta}
|
145 |
-
WHERE learnpress_order_item_id IN(" . join( ',', $format ) . ')
|
146 |
-
',
|
147 |
-
$order_item_id
|
148 |
-
);
|
149 |
-
|
150 |
-
$wpdb->query( $query );
|
151 |
-
|
152 |
-
$query = $wpdb->prepare(
|
153 |
-
"
|
154 |
-
DELETE
|
155 |
-
FROM {$wpdb->learnpress_order_items}
|
156 |
-
WHERE order_item_id IN(" . join( ',', $format ) . ')
|
157 |
-
', $order_item_id ); // phpcs:ignore
|
158 |
-
|
159 |
-
$wpdb->query( $query );
|
160 |
-
|
161 |
-
return $order_item_id;
|
162 |
-
}*/
|
163 |
-
|
164 |
-
/**
|
165 |
-
* @param int[] $order_ids
|
166 |
-
* @editor tungnx
|
167 |
-
* @modify 4.1.4 comment - not use
|
168 |
-
*/
|
169 |
-
/*public function remove_child_orders( $order_ids ) {
|
170 |
-
global $wpdb;
|
171 |
-
|
172 |
-
foreach ( $order_ids as $order_id ) {
|
173 |
-
wp_delete_post( $order_id );
|
174 |
-
}
|
175 |
-
|
176 |
-
}*/
|
177 |
-
|
178 |
-
/**
|
179 |
-
* Remove user items from table learnpress_user_items
|
180 |
-
* and it's meta data from table learnpress_user_itemmeta
|
181 |
-
* by order id. Uses this function when we want to remove
|
182 |
-
* a course-item and all child-items reference to a an order.
|
183 |
-
*
|
184 |
-
* @param int[] $order_id
|
185 |
-
*
|
186 |
-
* @return bool
|
187 |
-
* @since 3.1.0
|
188 |
-
* @editor tungnx
|
189 |
-
* @modify 4.1.4 - comment - not use
|
190 |
-
*/
|
191 |
-
/*public function remove_user_items_by_order_id( $order_id ) {
|
192 |
-
if ( is_array( $order_id ) ) {
|
193 |
-
foreach ( $order_id as $oid ) {
|
194 |
-
$this->remove_user_items_by_order_id( $oid );
|
195 |
-
}
|
196 |
-
|
197 |
-
return true;
|
198 |
-
}
|
199 |
-
|
200 |
-
global $wpdb;
|
201 |
-
$query = $wpdb->prepare(
|
202 |
-
"
|
203 |
-
SELECT user_item_id
|
204 |
-
FROM {$wpdb->learnpress_user_items}
|
205 |
-
WHERE ref_id = %d AND ref_type = %s
|
206 |
-
",
|
207 |
-
$order_id,
|
208 |
-
LP_ORDER_CPT
|
209 |
-
);
|
210 |
-
|
211 |
-
$user_item_ids = $wpdb->get_col( $query );
|
212 |
-
|
213 |
-
if ( ! $user_item_ids ) {
|
214 |
-
return false;
|
215 |
-
}
|
216 |
-
|
217 |
-
$this->remove_user_items_by_user_item_id( $user_item_ids, true );
|
218 |
-
|
219 |
-
return true;
|
220 |
-
}*/
|
221 |
-
|
222 |
-
/**
|
223 |
-
* Remove user item from table user-items by primary key user_item_id.
|
224 |
-
* This function also remove row's meta data and/or child rows.
|
225 |
-
*
|
226 |
-
* @param int[] $user_item_id
|
227 |
-
* @param bool $remove_child - Optional. TRUE will remove it's child
|
228 |
-
*
|
229 |
-
* @since 3.1.0
|
230 |
-
* @editor tungnx
|
231 |
-
* @modify 4.1.4 - comment - not use
|
232 |
-
*/
|
233 |
-
/*public function remove_user_items_by_user_item_id( $user_item_id, $remove_child = true ) {
|
234 |
-
global $wpdb;
|
235 |
-
|
236 |
-
settype( $user_item_id, 'array' );
|
237 |
-
|
238 |
-
$format = array_fill( 0, sizeof( $user_item_id ), '%d' );
|
239 |
-
$child_user_item_ids = $this->get_user_items_by_parent_id( $user_item_id );
|
240 |
-
|
241 |
-
// Remove child
|
242 |
-
if ( $remove_child && $child_user_item_ids ) {
|
243 |
-
$this->remove_user_items_by_user_item_id( $child_user_item_ids, $remove_child );
|
244 |
-
}
|
245 |
-
|
246 |
-
$query = $wpdb->prepare(
|
247 |
-
"
|
248 |
-
DELETE
|
249 |
-
FROM {$wpdb->learnpress_user_itemmeta}
|
250 |
-
WHERE learnpress_user_item_id IN(" . join( ',', $format ) . ')
|
251 |
-
',
|
252 |
-
$user_item_id
|
253 |
-
);
|
254 |
-
|
255 |
-
$wpdb->query( $query );
|
256 |
-
|
257 |
-
$query = $wpdb->prepare(
|
258 |
-
"
|
259 |
-
DELETE
|
260 |
-
FROM {$wpdb->learnpress_user_items}
|
261 |
-
WHERE user_item_id IN(" . join( ',', $format ) . ')
|
262 |
-
',
|
263 |
-
$user_item_id
|
264 |
-
);
|
265 |
-
|
266 |
-
$wpdb->query( $query );
|
267 |
-
|
268 |
-
// Remove all result in table user_item_results.
|
269 |
-
foreach ( $user_item_id as $delete_id ) {
|
270 |
-
LP_User_Items_Result_DB::instance()->delete( $delete_id );
|
271 |
-
}
|
272 |
-
}*/
|
273 |
-
|
274 |
-
/**
|
275 |
-
* Remove user item from table user-items by specific user-id and item-id.
|
276 |
-
*
|
277 |
-
* @param int $user_id
|
278 |
-
* @param int $item_id
|
279 |
-
*
|
280 |
-
* @return array|bool
|
281 |
-
* @since 3.1.0
|
282 |
-
* @editor tungnx
|
283 |
-
* @modify comment - not use
|
284 |
-
*/
|
285 |
-
/*public function remove_user_item( $user_id, $item_id ) {
|
286 |
-
global $wpdb;
|
287 |
-
|
288 |
-
// Find user-item-id for passed user-id and item-id
|
289 |
-
$query = $wpdb->prepare(
|
290 |
-
"
|
291 |
-
SELECT user_item_id
|
292 |
-
FROM {$wpdb->learnpress_user_items}
|
293 |
-
WHERE user_id = %d
|
294 |
-
AND item_id = %d
|
295 |
-
",
|
296 |
-
$user_id,
|
297 |
-
$item_id
|
298 |
-
);
|
299 |
-
|
300 |
-
$user_item_ids = $wpdb->get_col( $query );
|
301 |
-
|
302 |
-
if ( $user_item_ids ) {
|
303 |
-
return false;
|
304 |
-
}
|
305 |
-
|
306 |
-
// Remove by user-item-ids
|
307 |
-
$this->remove_user_items_by_user_item_id( $user_item_ids );
|
308 |
-
|
309 |
-
return $user_item_ids;
|
310 |
-
}*/
|
311 |
-
|
312 |
-
/**
|
313 |
-
* Remove user item from table user-items by user-id.
|
314 |
-
* Uses this function in case we want to remove all item
|
315 |
-
* from an user (such as when an user will be deleted).
|
316 |
-
*
|
317 |
-
* @param int[] $user_id
|
318 |
-
*
|
319 |
-
* @return bool
|
320 |
-
* @since 3.1.0
|
321 |
-
* @editor tungnx
|
322 |
-
* @modify 4.1.4 - comment - not use
|
323 |
-
*/
|
324 |
-
/*public function remove_user_item_by_user( $user_id ) {
|
325 |
-
global $wpdb;
|
326 |
-
|
327 |
-
// If multi users passed, loop through each user
|
328 |
-
if ( is_array( $user_id ) ) {
|
329 |
-
foreach ( $user_id as $uid ) {
|
330 |
-
$this->remove_user_item_by_user( $uid );
|
331 |
-
}
|
332 |
-
|
333 |
-
return true;
|
334 |
-
}
|
335 |
-
|
336 |
-
$query = $wpdb->prepare(
|
337 |
-
"
|
338 |
-
SELECT user_item_id
|
339 |
-
FROM {$wpdb->learnpress_user_items}
|
340 |
-
WHERE user_id = %d
|
341 |
-
",
|
342 |
-
$user_id
|
343 |
-
);
|
344 |
-
|
345 |
-
$user_item_ids = $wpdb->get_col( $query );
|
346 |
-
|
347 |
-
if ( ! $user_item_ids ) {
|
348 |
-
return false;
|
349 |
-
}
|
350 |
-
|
351 |
-
$this->remove_user_items_by_user_item_id( $user_item_ids );
|
352 |
-
|
353 |
-
return true;
|
354 |
-
}*/
|
355 |
-
|
356 |
-
/**
|
357 |
-
* Remove user item from table user-items by item-id.
|
358 |
-
* Uses this function in case want to remove an item
|
359 |
-
* from all users (such as an item like course/lesson/quiz will be deleted).
|
360 |
-
*
|
361 |
-
* @param int $item_id
|
362 |
-
*
|
363 |
-
* @return array|bool
|
364 |
-
* @since 3.1.0
|
365 |
-
* @editor tungnx
|
366 |
-
* @modify 4.1.4 - comment - not use
|
367 |
-
*/
|
368 |
-
/*public function remove_user_item_by_item_id( $item_id ) {
|
369 |
-
global $wpdb;
|
370 |
-
|
371 |
-
$query = $wpdb->prepare(
|
372 |
-
"
|
373 |
-
SELECT user_item_id
|
374 |
-
FROM {$wpdb->learnpress_user_items}
|
375 |
-
WHERE item_id = %d
|
376 |
-
",
|
377 |
-
$item_id
|
378 |
-
);
|
379 |
-
|
380 |
-
$user_item_ids = $wpdb->get_col( $query );
|
381 |
-
|
382 |
-
if ( ! $user_item_ids ) {
|
383 |
-
return false;
|
384 |
-
}
|
385 |
-
|
386 |
-
$this->remove_user_items_by_user_item_id( $user_item_ids );
|
387 |
-
|
388 |
-
return $user_item_ids;
|
389 |
-
}*/
|
390 |
-
|
391 |
-
/**
|
392 |
-
* Retrieve child items from an user-item-id.
|
393 |
-
*
|
394 |
-
* @param int[] $parent_ids
|
395 |
-
*
|
396 |
-
* @return array
|
397 |
-
* @since 3.1.0
|
398 |
-
* @editor tungnx
|
399 |
-
* @modify 4.1.4 - comment - not use
|
400 |
-
*/
|
401 |
-
/*public function get_user_items_by_parent_id( $parent_ids ) {
|
402 |
-
global $wpdb;
|
403 |
-
settype( $parent_ids, 'array' );
|
404 |
-
$format = array_fill( 0, sizeof( $parent_ids ), '%d' );
|
405 |
-
|
406 |
-
$query = $wpdb->prepare(
|
407 |
-
"
|
408 |
-
SELECT user_item_id
|
409 |
-
FROM {$wpdb->learnpress_user_items}
|
410 |
-
WHERE parent_id IN(" . join( ',', $format ) . ')
|
411 |
-
',
|
412 |
-
$parent_ids
|
413 |
-
);
|
414 |
-
|
415 |
-
return $wpdb->get_col( $query );
|
416 |
-
}*/
|
417 |
-
|
418 |
-
/**
|
419 |
-
* Remove an order from user-meta.
|
420 |
-
*
|
421 |
-
* @param int[] $user_ids
|
422 |
-
* @param int $order_id
|
423 |
-
*
|
424 |
-
* @since 3.1.0
|
425 |
-
* @editor tungnx
|
426 |
-
* @modify 4.1.4 - comment - not use
|
427 |
-
*/
|
428 |
-
// public function remove_order_from_user_meta( $user_ids, $order_id ) {
|
429 |
-
// if ( ! $user_ids ) {
|
430 |
-
// return;
|
431 |
-
// }
|
432 |
-
//
|
433 |
-
// settype( $user_ids, 'array' );
|
434 |
-
// foreach ( $user_ids as $user_id ) {
|
435 |
-
// delete_user_meta( $user_id, 'orders' );
|
436 |
-
//
|
437 |
-
// /*if ( $user_orders ) {
|
438 |
-
// foreach ( $user_orders as $course_id => $course_orders ) {
|
439 |
-
// $course_orders = array_unique( $course_orders );
|
440 |
-
// if ( false !== ( $in_pos = array_search( $order_id, $course_orders ) ) ) {
|
441 |
-
// unset( $course_orders[ $in_pos ] );
|
442 |
-
// }
|
443 |
-
//
|
444 |
-
// if ( ! $course_orders ) {
|
445 |
-
// unset( $user_orders[ $course_id ] );
|
446 |
-
// } else {
|
447 |
-
// $user_orders[ $course_id ] = $course_orders;
|
448 |
-
// }
|
449 |
-
// }
|
450 |
-
// }
|
451 |
-
//
|
452 |
-
// update_user_meta( $user_id, 'order', $user_orders );*/
|
453 |
-
// }
|
454 |
-
// }
|
455 |
-
|
456 |
-
/**
|
457 |
-
* @editor tungnx
|
458 |
-
* @modify 4.1.4 - comment - not use
|
459 |
-
*/
|
460 |
-
/*public function add_order_to_user_meta( $order_id ) {
|
461 |
-
$order = learn_press_get_order( $order_id );
|
462 |
-
|
463 |
-
if ( ! $order ) {
|
464 |
-
return false;
|
465 |
-
}
|
466 |
-
|
467 |
-
if ( $order->is_multi_users() ) {
|
468 |
-
|
469 |
-
$child = $order->get_child_orders();
|
470 |
-
if ( ! $child ) {
|
471 |
-
return false;
|
472 |
-
}
|
473 |
-
|
474 |
-
foreach ( $child as $child_order_id ) {
|
475 |
-
$child_order = learn_press_get_order( $child_order_id );
|
476 |
-
|
477 |
-
}
|
478 |
-
|
479 |
-
return true;
|
480 |
-
}
|
481 |
-
|
482 |
-
$user_id = $order->get_user_id();
|
483 |
-
$user_orders = get_user_meta( $user_id, 'orders', true );
|
484 |
-
|
485 |
-
if ( $user_orders ) {
|
486 |
-
foreach ( $user_orders as $course_id => $course_orders ) {
|
487 |
-
$course_orders = array_unique( $course_orders );
|
488 |
-
$in_pos = array_search( $order_id, $course_orders );
|
489 |
-
|
490 |
-
if ( false !== $in_pos ) {
|
491 |
-
unset( $course_orders[ $in_pos ] );
|
492 |
-
}
|
493 |
-
|
494 |
-
if ( ! $course_orders ) {
|
495 |
-
unset( $user_orders[ $course_id ] );
|
496 |
-
} else {
|
497 |
-
$user_orders[ $course_id ] = $course_orders;
|
498 |
-
}
|
499 |
-
}
|
500 |
-
}
|
501 |
-
|
502 |
-
return true;
|
503 |
-
}*/
|
504 |
-
|
505 |
-
/**
|
506 |
-
* @editor tungnx
|
507 |
-
* @modify 4.1.4.1 - comment - not use
|
508 |
-
*/
|
509 |
-
/*public function save_course( $course_id ) {
|
510 |
-
$this->sync_course_data( $course_id );
|
511 |
-
}*/
|
512 |
-
|
513 |
-
/**
|
514 |
-
* @editor tungnx
|
515 |
-
* @modify 4.1.4.1 - comment - not use
|
516 |
-
*/
|
517 |
-
/*public function removed_course_item( $course_id ) {
|
518 |
-
$this->sync_course_data( $course_id );
|
519 |
-
}*/
|
520 |
-
|
521 |
-
/**
|
522 |
-
* @param int $item_id
|
523 |
-
* @param int $course_id
|
524 |
-
* @editor tungnx
|
525 |
-
* @modify 4.1.4.1 - comment - not use
|
526 |
-
*/
|
527 |
-
/*public function added_course_item( $item_id, $course_id ) {
|
528 |
-
$this->sync_course_data( $course_id );
|
529 |
-
}*/
|
530 |
-
|
531 |
-
/**
|
532 |
-
* @param int $item_id
|
533 |
-
* @param int $course_id
|
534 |
-
* @editor tungnx
|
535 |
-
* @modify 4.1.4.1 - comment - not use
|
536 |
-
*/
|
537 |
-
/*public function removed_item_from_course( $item_id, $course_id ) {
|
538 |
-
$this->sync_course_data( $course_id );
|
539 |
-
}*/
|
540 |
-
|
541 |
-
/**
|
542 |
-
* @editor tungnx
|
543 |
-
* @modify 4.1.4.1 - comment - not use
|
544 |
-
*/
|
545 |
-
/*public function transition_course_item_status( $item_id, $course_id, $old, $new ) {
|
546 |
-
if ( $old === $new ) {
|
547 |
-
return;
|
548 |
-
}
|
549 |
-
$this->sync_course_data( $course_id );
|
550 |
-
}*/
|
551 |
-
|
552 |
-
/**
|
553 |
-
* @editor tungnx
|
554 |
-
* @modify 4.1.4 - comment - not use
|
555 |
-
*/
|
556 |
-
/*public function get_user_item_type( $item_id ) {
|
557 |
-
global $wpdb;
|
558 |
-
if ( ! $item_type = get_post_type( $item_id ) ) {
|
559 |
-
$query = $wpdb->prepare(
|
560 |
-
"
|
561 |
-
SELECT item_type
|
562 |
-
FROM {$wpdb->learnpress_user_items}
|
563 |
-
WHERE item_id = %d
|
564 |
-
LIMIT 0,1
|
565 |
-
",
|
566 |
-
$item_id
|
567 |
-
);
|
568 |
-
$item_type = $wpdb->get_var( $query );
|
569 |
-
}
|
570 |
-
|
571 |
-
return $item_type;
|
572 |
-
}*/
|
573 |
-
|
574 |
-
/**
|
575 |
-
* @editor tungnx
|
576 |
-
* @modify 4.1.4 - comment - not use
|
577 |
-
*/
|
578 |
-
/*public function remove_user_itemx( $item_id ) {
|
579 |
-
global $wpdb;
|
580 |
-
|
581 |
-
$query = "
|
582 |
-
DELETE items, meta
|
583 |
-
FROM {$wpdb->learnpress_user_items} items
|
584 |
-
INNER JOIN {$wpdb->learnpress_user_itemmeta} meta ON items.user_item_id = meta.learnpress_user_item_id
|
585 |
-
";
|
586 |
-
|
587 |
-
$where = '';
|
588 |
-
|
589 |
-
if ( $this->get_user_item_type( $item_id ) === LP_COURSE_CPT ) {
|
590 |
-
$_query = $wpdb->prepare(
|
591 |
-
"
|
592 |
-
SELECT user_item_id
|
593 |
-
FROM {$wpdb->learnpress_user_items}
|
594 |
-
WHERE item_id = %d
|
595 |
-
AND parent_id = 0
|
596 |
-
",
|
597 |
-
$item_id
|
598 |
-
);
|
599 |
-
|
600 |
-
$user_item_ids = $wpdb->get_col( $_query );
|
601 |
-
$format = array_fill( 0, sizeof( $user_item_ids ), '%d' );
|
602 |
-
|
603 |
-
$where = $wpdb->prepare(
|
604 |
-
'
|
605 |
-
WHERE parent_id IN(' . join( ',', $format ) . ')
|
606 |
-
',
|
607 |
-
$user_item_ids
|
608 |
-
);
|
609 |
-
|
610 |
-
$where .= $wpdb->prepare( 'AND ref_id = %d', $item_id );
|
611 |
-
} else {
|
612 |
-
$where = $wpdb->prepare( 'item_id = %d', $item_id );
|
613 |
-
}
|
614 |
-
|
615 |
-
$query .= $where;
|
616 |
-
}*/
|
617 |
-
|
618 |
-
/**
|
619 |
-
* @param int $post_id
|
620 |
-
* @editor tungnx
|
621 |
-
* @modify 4.1.4.1 - comment - not use
|
622 |
-
*/
|
623 |
-
// public function save_post( $post_id ) {
|
624 |
-
// global $wpdb;
|
625 |
-
// $post_type = get_post_type( $post_id );
|
626 |
-
// $course_curd = new LP_Course_CURD();
|
627 |
-
//
|
628 |
-
// switch ( $post_type ) {
|
629 |
-
// /*case LP_ORDER_CPT:
|
630 |
-
// $order = learn_press_get_order( $post_id );
|
631 |
-
// if ( $order ) {
|
632 |
-
// $user_ids = $order->get_users();
|
633 |
-
// $course_ids = $order->get_item_ids();
|
634 |
-
//
|
635 |
-
// //$this->sync_course_orders( $course_ids );
|
636 |
-
// //$this->sync_user_orders( $user_ids );
|
637 |
-
// }
|
638 |
-
//
|
639 |
-
// break;*/
|
640 |
-
// case LP_COURSE_CPT: //Todo: tungnx should review code to rewrite
|
641 |
-
// default:
|
642 |
-
// // Course is support type of this item?
|
643 |
-
// if ( learn_press_is_support_course_item_type( $post_type ) ) {
|
644 |
-
//
|
645 |
-
// // Find it course
|
646 |
-
// $course_ids = $course_curd->get_course_by_item( $post_id );
|
647 |
-
// } else {
|
648 |
-
// $course_ids = array( $post_id );
|
649 |
-
// }
|
650 |
-
//
|
651 |
-
// foreach ( $course_ids as $course_id ) {
|
652 |
-
// $this->sync_course_data( $course_id );
|
653 |
-
// }
|
654 |
-
// }
|
655 |
-
// }
|
656 |
-
|
657 |
-
/**
|
658 |
-
* Sync course data when saving post.
|
659 |
-
*
|
660 |
-
* @param int $course_id
|
661 |
-
* @editor tungnx
|
662 |
-
* @version 3.1.1
|
663 |
-
* @since 3.1.0
|
664 |
-
*/
|
665 |
-
/*public function sync_course_data( int $course_id ) {
|
666 |
-
$user_curd = new LP_User_CURD();
|
667 |
-
$course_curd = new LP_Course_CURD();
|
668 |
-
|
669 |
-
$count_items = 0;
|
670 |
-
$counts = $course_curd->count_items( $course_id );
|
671 |
-
if ( $counts ) {
|
672 |
-
$count_items = array_sum( $counts );
|
673 |
-
}
|
674 |
-
|
675 |
-
update_post_meta( $course_id, 'count_items', $count_items );
|
676 |
-
}*/
|
677 |
-
|
678 |
-
/**
|
679 |
-
* Sync all
|
680 |
-
*
|
681 |
-
* @editor tungnx
|
682 |
-
* @modify 4.1.4 - comment - not use
|
683 |
-
*/
|
684 |
-
/*public function sync_all() {
|
685 |
-
$this->sync_course_orders();
|
686 |
-
$this->sync_user_courses();
|
687 |
-
}*/
|
688 |
-
|
689 |
-
public function call( $func ) {
|
690 |
-
$func = preg_replace( '~[-]+~', '_', $func );
|
691 |
-
|
692 |
-
if ( ! is_callable( array( $this, $func ) ) ) {
|
693 |
-
throw new Exception( sprintf( __( 'The method %s is not callable.', 'learnpress' ), $func ) );
|
694 |
-
}
|
695 |
-
|
696 |
-
$args = func_get_args();
|
697 |
-
unset( $args[0] );
|
698 |
-
|
699 |
-
return sizeof( $args ) ?
|
700 |
-
call_user_func_array( array( $this, $func ), $args ) :
|
701 |
-
call_user_func( array( $this, $func ) );
|
702 |
-
}
|
703 |
-
|
704 |
-
/***
|
705 |
-
* @editor tungnx
|
706 |
-
* @deprecated 4.0.7
|
707 |
-
* @reason not use on LP4, make CPU run high.
|
708 |
-
*/
|
709 |
-
/*public function queue_sync_user_course_results( $course_id ) {
|
710 |
-
global $wpdb;
|
711 |
-
$query = $wpdb->prepare(
|
712 |
-
"
|
713 |
-
SELECT DISTINCT user_id
|
714 |
-
FROM {$wpdb->learnpress_user_items}
|
715 |
-
WHERE item_id = %d
|
716 |
-
",
|
717 |
-
$course_id
|
718 |
-
);
|
719 |
-
|
720 |
-
if ( $user_ids = $wpdb->get_col( $query ) ) {
|
721 |
-
$queue_user_ids = get_option( 'sync-user-course-results' );
|
722 |
-
$first_time = ! $queue_user_ids;
|
723 |
-
$n = time();
|
724 |
-
for ( $i = $n; $i < $n + 100; $i ++ ) {
|
725 |
-
$user_ids[] = $i;
|
726 |
-
}
|
727 |
-
|
728 |
-
if ( $first_time ) {
|
729 |
-
$queue_user_ids = $user_ids;
|
730 |
-
} else {
|
731 |
-
settype( $queue_user_ids, 'array' );
|
732 |
-
$queue_user_ids = array_merge( $queue_user_ids, $user_ids );
|
733 |
-
$queue_user_ids = array_unique( $queue_user_ids );
|
734 |
-
}
|
735 |
-
|
736 |
-
$option_key = 'sync-user-course-results';
|
737 |
-
update_option( $option_key, $queue_user_ids, 'no' );
|
738 |
-
|
739 |
-
if ( $first_time || ! get_option( 'doing-sync-user-course-results' ) ) {
|
740 |
-
$bg = LP_Background_Sync_Data::instance();
|
741 |
-
$bg->is_safe( false );
|
742 |
-
$bg->push_to_queue(
|
743 |
-
array(
|
744 |
-
'action' => 'sync-user-course-results',
|
745 |
-
'course_id' => $course_id,
|
746 |
-
'option_key' => $option_key,
|
747 |
-
)
|
748 |
-
)->save()->dispatch();
|
749 |
-
$bg->reset_safe();
|
750 |
-
|
751 |
-
update_option( 'doing-sync-user-course-results', 'yes' );
|
752 |
-
}
|
753 |
-
}
|
754 |
-
}*/
|
755 |
-
|
756 |
-
/**
|
757 |
-
* Sync orders for each course
|
758 |
-
*
|
759 |
-
* @param array|string $courses
|
760 |
-
*
|
761 |
-
* @return bool|array
|
762 |
-
* @since 3.1.0
|
763 |
-
* @editor tungnx
|
764 |
-
* @modify 4.1.4 - comment - not use
|
765 |
-
*/
|
766 |
-
/*public function sync_course_orders( $courses = '*' ) {
|
767 |
-
global $wpdb;
|
768 |
-
|
769 |
-
if ( empty( $courses ) ) {
|
770 |
-
return false;
|
771 |
-
}
|
772 |
-
|
773 |
-
if ( $courses === '*' ) {
|
774 |
-
$query = $wpdb->prepare(
|
775 |
-
"
|
776 |
-
SELECT ID
|
777 |
-
FROM {$wpdb->posts}
|
778 |
-
WHERE post_type = %s
|
779 |
-
AND post_status = %s
|
780 |
-
",
|
781 |
-
LP_COURSE_CPT,
|
782 |
-
'publish'
|
783 |
-
);
|
784 |
-
|
785 |
-
$courses = $wpdb->get_col( $query );
|
786 |
-
|
787 |
-
if ( $courses ) {
|
788 |
-
return false;
|
789 |
-
}
|
790 |
-
}
|
791 |
-
|
792 |
-
$statuses = learn_press_get_order_statuses( true, true );
|
793 |
-
settype( $courses, 'array' );
|
794 |
-
|
795 |
-
$statuses_format = array_fill( 0, sizeof( $statuses ), '%s' );
|
796 |
-
$courses_format = array_fill( 0, sizeof( $courses ), '%d' );
|
797 |
-
$statuses_format = $wpdb->prepare( join( ',', $statuses_format ), $statuses );
|
798 |
-
$courses_format = $wpdb->prepare( join( ',', $courses_format ), $courses );
|
799 |
-
$wpdb->query( 'SET SESSION group_concat_max_len = 18446744073709551615' );
|
800 |
-
$query = $wpdb->prepare(
|
801 |
-
"
|
802 |
-
SELECT cid, status, orders
|
803 |
-
FROM(
|
804 |
-
SELECT oim.meta_value cid, concat(oim.meta_value, ' ', o.post_status) a, post_status `status`, GROUP_CONCAT(o.ID) orders
|
805 |
-
FROM {$wpdb->learnpress_order_itemmeta} oim
|
806 |
-
INNER JOIN {$wpdb->learnpress_order_items} oi ON oi.order_item_id = oim.learnpress_order_item_id AND oim.meta_key = %s
|
807 |
-
INNER JOIN {$wpdb->posts} o ON o.ID = oi.order_id
|
808 |
-
INNER JOIN {$wpdb->postmeta} om ON o.ID = om.post_id AND `om`.`meta_key`='_user_id'
|
809 |
-
INNER JOIN {$wpdb->users} `u` ON u.ID = `om`.`meta_value`
|
810 |
-
WHERE o.post_type = %s
|
811 |
-
AND o.post_status IN ($statuses_format)
|
812 |
-
AND oim.meta_value IN ($courses_format)
|
813 |
-
GROUP BY a, cid
|
814 |
-
) X
|
815 |
-
",
|
816 |
-
'_course_id',
|
817 |
-
'lp_order'
|
818 |
-
);
|
819 |
-
|
820 |
-
foreach ( $courses as $course_id ) {
|
821 |
-
foreach ( $statuses as $status ) {
|
822 |
-
update_post_meta( $course_id, 'order-' . str_replace( 'lp-', '', $status ), array() );
|
823 |
-
}
|
824 |
-
}
|
825 |
-
|
826 |
-
if ( $results = $wpdb->get_results( $query ) ) {
|
827 |
-
foreach ( $results as $result ) {
|
828 |
-
update_post_meta( $result->cid, 'order-' . str_replace( 'lp-', '', $result->status ), explode( ',', $result->orders ) );
|
829 |
-
}
|
830 |
-
}
|
831 |
-
|
832 |
-
return $courses;
|
833 |
-
}*/
|
834 |
-
|
835 |
-
/**
|
836 |
-
* Sync orders for each user
|
837 |
-
*
|
838 |
-
* @param array $users
|
839 |
-
* @editor tungnx
|
840 |
-
* @modify 4.1.4 - comment - not use
|
841 |
-
*/
|
842 |
-
/*public function sync_user_orders( $users = array() ) {
|
843 |
-
$api = new LP_User_CURD();
|
844 |
-
settype( $users, 'array' );
|
845 |
-
|
846 |
-
foreach ( $users as $user ) {
|
847 |
-
$orders = $api->read_orders( $user );
|
848 |
-
if ( ! $orders ) {
|
849 |
-
continue;
|
850 |
-
}
|
851 |
-
$orders = array_map( 'array_unique', $orders );
|
852 |
-
update_user_meta( $user, 'orders', $orders );
|
853 |
-
}
|
854 |
-
}*/
|
855 |
-
|
856 |
-
/**
|
857 |
-
* Sync courses for each user
|
858 |
-
*
|
859 |
-
* @since 3.1.0
|
860 |
-
* @editor tungnx
|
861 |
-
* @modify 4.1.4 - comment - not use
|
862 |
-
*/
|
863 |
-
/*public function sync_user_courses() {
|
864 |
-
// echo __FUNCTION__;
|
865 |
-
}*/
|
866 |
-
|
867 |
-
|
868 |
-
/**
|
869 |
-
* Sync final quiz for each course.
|
870 |
-
*
|
871 |
-
* @param array $courses
|
872 |
-
* @editor tungnx
|
873 |
-
* @deprecated 4.1.5
|
874 |
-
*/
|
875 |
-
// public function sync_course_final_quiz( $courses = array() ) {
|
876 |
-
// settype( $courses, 'array' );
|
877 |
-
//
|
878 |
-
// foreach ( $courses as $course_id ) {
|
879 |
-
// $course = learn_press_get_course( $course_id );
|
880 |
-
//
|
881 |
-
// if ( ! $course ) {
|
882 |
-
// continue;
|
883 |
-
// }
|
884 |
-
//
|
885 |
-
// /**
|
886 |
-
// * If course result is not set to final-quiz
|
887 |
-
// */
|
888 |
-
// if ( $course->get_data( 'course_result' ) !== 'evaluate_final_quiz' ) {
|
889 |
-
// delete_post_meta( $course_id, '_lp_final_quiz' );
|
890 |
-
// continue;
|
891 |
-
// }
|
892 |
-
//
|
893 |
-
// $items = $course->get_item_ids();
|
894 |
-
// if ( $items ) {
|
895 |
-
// foreach ( $items as $item ) {
|
896 |
-
// if ( learn_press_get_post_type( $item ) === LP_QUIZ_CPT ) {
|
897 |
-
// $final_quiz = $item;
|
898 |
-
// }
|
899 |
-
// }
|
900 |
-
// }
|
901 |
-
//
|
902 |
-
// if ( isset( $final_quiz ) ) {
|
903 |
-
// update_post_meta( $course_id, '_lp_final_quiz', $final_quiz );
|
904 |
-
// } else {
|
905 |
-
// delete_post_meta( $course_id, '_lp_final_quiz' );
|
906 |
-
// update_post_meta( $course_id, '_lp_course_result', 'evaluate_lesson' );
|
907 |
-
// }
|
908 |
-
// }
|
909 |
-
// }
|
910 |
-
|
911 |
-
/**
|
912 |
-
* @editor tungnx
|
913 |
-
* @modify 4.1.4 - comment - not use
|
914 |
-
*/
|
915 |
-
/*public function calculate_course_results( $user_id ) {
|
916 |
-
settype( $user_id, 'array' );
|
917 |
-
|
918 |
-
global $wpdb;
|
919 |
-
|
920 |
-
foreach ( $user_id as $uid ) {
|
921 |
-
$query = $wpdb->prepare(
|
922 |
-
"
|
923 |
-
SELECT DISTINCT item_id
|
924 |
-
FROM {$wpdb->learnpress_user_items} ui
|
925 |
-
INNER JOIN {$wpdb->posts} p ON p.ID = ui.item_id
|
926 |
-
WHERE user_id = %d
|
927 |
-
AND p.post_type = %s
|
928 |
-
",
|
929 |
-
$uid,
|
930 |
-
LP_COURSE_CPT
|
931 |
-
);
|
932 |
-
|
933 |
-
$course_ids = $wpdb->get_col( $query );
|
934 |
-
if ( $course_ids ) {
|
935 |
-
$user = learn_press_get_user( $uid );
|
936 |
-
foreach ( $course_ids as $course_id ) {
|
937 |
-
$item_course = $user->get_course_data( $course_id );
|
938 |
-
$course_exceeded = $item_course->is_exceeded();
|
939 |
-
|
940 |
-
if ( $course_exceeded <= 0 && ( learn_press_is_enrolled_slug( $item_course->get_status() ) ) ) {
|
941 |
-
$item_course->finish();
|
942 |
-
|
943 |
-
$start_time = $item_course->get_start_time()->getTimestamp();
|
944 |
-
$duration = $item_course->get_course()->get_duration();
|
945 |
-
|
946 |
-
learn_press_update_user_item_meta( $item_course->get_user_item_id(), 'via', 'schedule' );
|
947 |
-
learn_press_update_user_item_meta( $item_course->get_user_item_id(), 'exceeded', $course_exceeded );
|
948 |
-
} else {
|
949 |
-
$item_course->calculate_course_results();
|
950 |
-
|
951 |
-
}
|
952 |
-
}
|
953 |
-
}
|
954 |
-
}
|
955 |
-
}*/
|
956 |
-
|
957 |
-
/**
|
958 |
-
* @editor tungnx
|
959 |
-
* @modify 4.1.4 - comment - not use
|
960 |
-
*/
|
961 |
-
/*public function remove_older_post_meta() {
|
962 |
-
global $wpdb;
|
963 |
-
$query = $wpdb->prepare(
|
964 |
-
"
|
965 |
-
DELETE FROM {$wpdb->postmeta} WHERE meta_key LIKE %s
|
966 |
-
",
|
967 |
-
$wpdb->esc_like( '_lpr_' ) . '%'
|
968 |
-
);
|
969 |
-
$wpdb->query( $query );
|
970 |
-
|
971 |
-
$query = $wpdb->prepare(
|
972 |
-
"
|
973 |
-
DELETE FROM {$wpdb->usermeta} WHERE meta_key LIKE %s
|
974 |
-
",
|
975 |
-
'%' . $wpdb->esc_like( '_lpr_' ) . '%'
|
976 |
-
);
|
977 |
-
$wpdb->query( $query );
|
978 |
-
}*/
|
979 |
-
|
980 |
-
/**
|
981 |
-
* Get all ids of existing courses
|
982 |
-
*
|
983 |
-
* @return array
|
984 |
-
* @deprecated 4.1.5
|
985 |
-
*/
|
986 |
-
public function get_all_courses() {
|
987 |
-
global $wpdb;
|
988 |
-
$query = $wpdb->prepare(
|
989 |
-
"
|
990 |
-
SELECT ID
|
991 |
-
FROM {$wpdb->posts}
|
992 |
-
WHERE post_type = %s
|
993 |
-
AND post_status = %s
|
994 |
-
",
|
995 |
-
LP_COURSE_CPT,
|
996 |
-
'publish'
|
997 |
-
);
|
998 |
-
|
999 |
-
return $wpdb->get_col( $query );
|
1000 |
-
}
|
1001 |
-
|
1002 |
-
/**
|
1003 |
-
* @return LP_Repair_Database
|
1004 |
-
*/
|
1005 |
-
public static function instance() {
|
1006 |
-
if ( ! self::$instance ) {
|
1007 |
-
self::$instance = new self();
|
1008 |
-
}
|
1009 |
-
|
1010 |
-
return self::$instance;
|
1011 |
-
}
|
1012 |
-
}
|
1013 |
-
|
1014 |
-
LP_Repair_Database::instance();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -55,6 +55,8 @@ class LP_Request {
|
|
55 |
public static function process_request( $template ) {
|
56 |
if ( ! empty( $_REQUEST ) ) {
|
57 |
foreach ( $_REQUEST as $key => $value ) {
|
|
|
|
|
58 |
do_action( 'learn_press_request_handler_' . $key, $value, $key );
|
59 |
}
|
60 |
}
|
55 |
public static function process_request( $template ) {
|
56 |
if ( ! empty( $_REQUEST ) ) {
|
57 |
foreach ( $_REQUEST as $key => $value ) {
|
58 |
+
$key = LP_Helper::sanitize_params_submitted( $key );
|
59 |
+
$value = LP_Helper::sanitize_params_submitted( $value );
|
60 |
do_action( 'learn_press_request_handler_' . $key, $value, $key );
|
61 |
}
|
62 |
}
|
@@ -1,162 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Class LP_Utils
|
5 |
-
*
|
6 |
-
* Utilities.
|
7 |
-
* @deprecated 4.1.6.4
|
8 |
-
*/
|
9 |
-
class LP_Utils {
|
10 |
-
|
11 |
-
/**
|
12 |
-
* @var LP_Utils
|
13 |
-
*/
|
14 |
-
protected static $instance = null;
|
15 |
-
|
16 |
-
/**
|
17 |
-
* LP_Utils constructor.
|
18 |
-
*/
|
19 |
-
protected function __construct() {
|
20 |
-
}
|
21 |
-
|
22 |
-
/**
|
23 |
-
* Hard flush count data of users enrolled each course
|
24 |
-
* and recount all.
|
25 |
-
*
|
26 |
-
* @since 3.x.x
|
27 |
-
*
|
28 |
-
* @return array
|
29 |
-
* @deprecated
|
30 |
-
* @editor tungnx - deprecated
|
31 |
-
*/
|
32 |
-
public function flush_count_course_users() {
|
33 |
-
_deprecated_function( __FUNCTION__, '1.4.1' );
|
34 |
-
global $wpdb;
|
35 |
-
|
36 |
-
if ( ! $all_statuses = $wpdb->get_col( "SELECT DISTINCT `status` FROM {$wpdb->learnpress_user_items}" ) ) {
|
37 |
-
$all_statuses = array();
|
38 |
-
}
|
39 |
-
$all_statuses[] = 'total';
|
40 |
-
$init_values = array_fill_keys( $all_statuses, 0 );
|
41 |
-
|
42 |
-
$query = $wpdb->prepare(
|
43 |
-
"
|
44 |
-
SELECT item_id id, `status`, COUNT(user_item_id) `count`
|
45 |
-
FROM {$wpdb->learnpress_user_items}
|
46 |
-
WHERE 1 AND item_type = %s
|
47 |
-
GROUP BY item_id, `status`
|
48 |
-
ORDER BY item_id
|
49 |
-
",
|
50 |
-
LP_COURSE_CPT
|
51 |
-
);
|
52 |
-
$counts = array();
|
53 |
-
|
54 |
-
if ( $rows = $wpdb->get_results( $query ) ) {
|
55 |
-
|
56 |
-
foreach ( $rows as $row ) {
|
57 |
-
if ( empty( $counts[ $row->id ] ) ) {
|
58 |
-
$counts[ $row->id ] = $init_values;
|
59 |
-
}
|
60 |
-
|
61 |
-
$counts[ $row->id ][ $row->status ] = $row->count;
|
62 |
-
$counts[ $row->id ]['total'] += $row->count;
|
63 |
-
}
|
64 |
-
}
|
65 |
-
|
66 |
-
update_option( '_lp_count_course_users', $counts );
|
67 |
-
|
68 |
-
return $counts;
|
69 |
-
}
|
70 |
-
|
71 |
-
/**
|
72 |
-
* Counts number of users enrolled to courses.
|
73 |
-
*
|
74 |
-
* @since 3.x.x
|
75 |
-
*
|
76 |
-
* @param array $args {
|
77 |
-
*
|
78 |
-
* }
|
79 |
-
* @param bool $hard
|
80 |
-
*
|
81 |
-
* @return array
|
82 |
-
* @editor tungnx - deprecated
|
83 |
-
* @deprecated
|
84 |
-
*/
|
85 |
-
public function count_course_users( $args = array(), $hard = false ) {
|
86 |
-
_deprecated_function( __FUNCTION__, '1.4.1', 'LP_Course_DB::get_total_user_enrolled' );
|
87 |
-
$counts = get_option( '_lp_count_course_users' );
|
88 |
-
|
89 |
-
if ( is_numeric( $args ) ) {
|
90 |
-
$args = array( 'course_id' => $args );
|
91 |
-
} elseif ( is_string( $args ) ) {
|
92 |
-
$args = array( 'status' => $args );
|
93 |
-
}
|
94 |
-
|
95 |
-
$args = wp_parse_args(
|
96 |
-
$args,
|
97 |
-
array(
|
98 |
-
'course_id' => null,
|
99 |
-
'status' => '',
|
100 |
-
'total_only' => false,
|
101 |
-
)
|
102 |
-
);
|
103 |
-
|
104 |
-
if ( $args['course_id'] ) {
|
105 |
-
$course_ids = (array) $args['course_id'];
|
106 |
-
} else {
|
107 |
-
$course_ids = array();
|
108 |
-
}
|
109 |
-
|
110 |
-
if ( $hard || false === $counts ) {
|
111 |
-
$counts = $this->flush_count_course_users();
|
112 |
-
}
|
113 |
-
|
114 |
-
if ( $course_ids ) {
|
115 |
-
$counts = array_intersect_key( $counts, array_flip( $course_ids ) );
|
116 |
-
}
|
117 |
-
|
118 |
-
if ( $args['status'] ) {
|
119 |
-
$statuses = (array) $args['status'];
|
120 |
-
$_counts = array();
|
121 |
-
|
122 |
-
foreach ( $statuses as $status ) {
|
123 |
-
foreach ( $counts as $k => $value ) {
|
124 |
-
if ( empty( $_counts[ $k ] ) ) {
|
125 |
-
if ( $args['total_only'] ) {
|
126 |
-
$_counts[ $k ] = ! empty( $value[ $status ] ) ? $value[ $status ] : 0;
|
127 |
-
} else {
|
128 |
-
$_counts[ $k ] = array( $status => ! empty( $value[ $status ] ) ? $value[ $status ] : 0 );
|
129 |
-
}
|
130 |
-
} else {
|
131 |
-
if ( $args['total_only'] ) {
|
132 |
-
$_counts[ $k ] += ! empty( $value[ $status ] ) ? $value[ $status ] : 0;
|
133 |
-
} else {
|
134 |
-
$_counts[ $k ][ $status ] = ! empty( $value[ $status ] ) ? $value[ $status ] : 0;
|
135 |
-
}
|
136 |
-
}
|
137 |
-
}
|
138 |
-
}
|
139 |
-
$counts = $_counts;
|
140 |
-
} else {
|
141 |
-
if ( $args['total_only'] ) {
|
142 |
-
$counts = wp_list_pluck( $counts, 'total' );
|
143 |
-
}
|
144 |
-
}
|
145 |
-
|
146 |
-
if ( is_numeric( $args['course_id'] ) ) {
|
147 |
-
$counts = reset( $counts );
|
148 |
-
}
|
149 |
-
|
150 |
-
return $counts;
|
151 |
-
}
|
152 |
-
|
153 |
-
public static function instance() {
|
154 |
-
if ( ! self::$instance ) {
|
155 |
-
self::$instance = new self();
|
156 |
-
}
|
157 |
-
|
158 |
-
return self::$instance;
|
159 |
-
}
|
160 |
-
}
|
161 |
-
|
162 |
-
return LP_Utils::instance();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -100,12 +100,12 @@ class LP_Widget extends WP_Widget {
|
|
100 |
* @param array $instance Instance.
|
101 |
*/
|
102 |
public function widget_start( $args, $instance ) {
|
103 |
-
echo $args['before_widget'];
|
104 |
|
105 |
$title = apply_filters( 'widget_title', $this->get_instance_title( $instance ), $instance, $this->id_base );
|
106 |
|
107 |
if ( $title ) {
|
108 |
-
echo $args['before_title'] . $title . $args['after_title'];
|
109 |
}
|
110 |
}
|
111 |
|
@@ -115,7 +115,7 @@ class LP_Widget extends WP_Widget {
|
|
115 |
* @param array $args Arguments.
|
116 |
*/
|
117 |
public function widget_end( $args ) {
|
118 |
-
echo $args['after_widget'];
|
119 |
}
|
120 |
|
121 |
/**
|
@@ -141,7 +141,7 @@ class LP_Widget extends WP_Widget {
|
|
141 |
)
|
142 |
);
|
143 |
|
144 |
-
echo $this->lp_widget_content( $data, $args, $instance );
|
145 |
}
|
146 |
|
147 |
/**
|
@@ -170,9 +170,9 @@ class LP_Widget extends WP_Widget {
|
|
170 |
echo '<div class="learnpress-widget-wrapper">';
|
171 |
|
172 |
if ( is_wp_error( $content ) ) {
|
173 |
-
echo $content->get_error_message();
|
174 |
} else {
|
175 |
-
echo $content;
|
176 |
}
|
177 |
|
178 |
echo '</div>';
|
@@ -270,7 +270,7 @@ class LP_Widget extends WP_Widget {
|
|
270 |
case 'number':
|
271 |
?>
|
272 |
<p>
|
273 |
-
<label for="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>"><?php echo $setting['label']; ?></label>
|
274 |
<input class="widefat <?php echo esc_attr( $class ); ?>" id="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $key ) ); ?>" type="number" step="<?php echo isset( $setting['step'] ) ? esc_attr( $setting['step'] ) : '1'; ?>" min="<?php echo isset( $setting['min'] ) ? esc_attr( $setting['min'] ) : ''; ?>" max="<?php echo isset( $setting['max'] ) ? esc_attr( $setting['max'] ) : ''; ?>" value="<?php echo esc_attr( $value ); ?>" />
|
275 |
</p>
|
276 |
<?php
|
@@ -279,7 +279,7 @@ class LP_Widget extends WP_Widget {
|
|
279 |
case 'select':
|
280 |
?>
|
281 |
<p>
|
282 |
-
<label for="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>"><?php echo $setting['label'];
|
283 |
<select class="widefat <?php echo esc_attr( $class ); ?>" id="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $key ) ); ?>">
|
284 |
<?php foreach ( $setting['options'] as $option_key => $option_value ) : ?>
|
285 |
<option value="<?php echo esc_attr( $option_key ); ?>" <?php selected( $option_key, $value ); ?>><?php echo esc_html( $option_value ); ?></option>
|
@@ -292,7 +292,7 @@ class LP_Widget extends WP_Widget {
|
|
292 |
case 'textarea':
|
293 |
?>
|
294 |
<p>
|
295 |
-
<label for="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>"><?php echo $setting['label'];
|
296 |
<textarea class="widefat <?php echo esc_attr( $class ); ?>" id="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $key ) ); ?>" cols="20" rows="3"><?php echo esc_textarea( $value ); ?></textarea>
|
297 |
<?php if ( isset( $setting['desc'] ) ) : ?>
|
298 |
<small><?php echo esc_html( $setting['desc'] ); ?></small>
|
@@ -305,7 +305,7 @@ class LP_Widget extends WP_Widget {
|
|
305 |
?>
|
306 |
<p>
|
307 |
<input class="checkbox <?php echo esc_attr( $class ); ?>" id="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $key ) ); ?>" type="checkbox" value="1" <?php checked( $value, 1 ); ?> />
|
308 |
-
<label for="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>"><?php echo $setting['label'];
|
309 |
</p>
|
310 |
<?php
|
311 |
break;
|
@@ -313,7 +313,7 @@ class LP_Widget extends WP_Widget {
|
|
313 |
case 'autocomplete':
|
314 |
?>
|
315 |
<p>
|
316 |
-
<label for="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>"><?php echo wp_kses_post( $setting['label'] ); ?></label
|
317 |
<select class="widefat lp-widget_select_course" id="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $key ) ); ?>" data-rest-url="<?php echo get_rest_url(); ?>" data-post-type="<?php echo esc_attr( $setting['post_type'] ?? LP_COURSE_CPT ); ?>" style="width: 300px;">
|
318 |
<?php if ( ! empty( $value ) ) : ?>
|
319 |
<option value="<?php echo esc_attr( $value ); ?>" selected="selected"><?php echo esc_html( get_the_title( $value ) ); ?></option>
|
100 |
* @param array $instance Instance.
|
101 |
*/
|
102 |
public function widget_start( $args, $instance ) {
|
103 |
+
echo wp_kses_post( $args['before_widget'] );
|
104 |
|
105 |
$title = apply_filters( 'widget_title', $this->get_instance_title( $instance ), $instance, $this->id_base );
|
106 |
|
107 |
if ( $title ) {
|
108 |
+
echo wp_kses_post( $args['before_title'] . $title . $args['after_title'] );
|
109 |
}
|
110 |
}
|
111 |
|
115 |
* @param array $args Arguments.
|
116 |
*/
|
117 |
public function widget_end( $args ) {
|
118 |
+
echo wp_kses_post( $args['after_widget'] );
|
119 |
}
|
120 |
|
121 |
/**
|
141 |
)
|
142 |
);
|
143 |
|
144 |
+
echo wp_kses_post( $this->lp_widget_content( $data, $args, $instance ) );
|
145 |
}
|
146 |
|
147 |
/**
|
170 |
echo '<div class="learnpress-widget-wrapper">';
|
171 |
|
172 |
if ( is_wp_error( $content ) ) {
|
173 |
+
echo wp_kses_post( $content->get_error_message() );
|
174 |
} else {
|
175 |
+
echo wp_kses_post( $content );
|
176 |
}
|
177 |
|
178 |
echo '</div>';
|
270 |
case 'number':
|
271 |
?>
|
272 |
<p>
|
273 |
+
<label for="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>"><?php echo wp_kses_post( $setting['label'] ); ?></label>
|
274 |
<input class="widefat <?php echo esc_attr( $class ); ?>" id="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $key ) ); ?>" type="number" step="<?php echo isset( $setting['step'] ) ? esc_attr( $setting['step'] ) : '1'; ?>" min="<?php echo isset( $setting['min'] ) ? esc_attr( $setting['min'] ) : ''; ?>" max="<?php echo isset( $setting['max'] ) ? esc_attr( $setting['max'] ) : ''; ?>" value="<?php echo esc_attr( $value ); ?>" />
|
275 |
</p>
|
276 |
<?php
|
279 |
case 'select':
|
280 |
?>
|
281 |
<p>
|
282 |
+
<label for="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>"><?php echo wp_kses_post( $setting['label'] ); ?></label>
|
283 |
<select class="widefat <?php echo esc_attr( $class ); ?>" id="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $key ) ); ?>">
|
284 |
<?php foreach ( $setting['options'] as $option_key => $option_value ) : ?>
|
285 |
<option value="<?php echo esc_attr( $option_key ); ?>" <?php selected( $option_key, $value ); ?>><?php echo esc_html( $option_value ); ?></option>
|
292 |
case 'textarea':
|
293 |
?>
|
294 |
<p>
|
295 |
+
<label for="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>"><?php echo wp_kses_post( $setting['label'] ); ?></label>
|
296 |
<textarea class="widefat <?php echo esc_attr( $class ); ?>" id="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $key ) ); ?>" cols="20" rows="3"><?php echo esc_textarea( $value ); ?></textarea>
|
297 |
<?php if ( isset( $setting['desc'] ) ) : ?>
|
298 |
<small><?php echo esc_html( $setting['desc'] ); ?></small>
|
305 |
?>
|
306 |
<p>
|
307 |
<input class="checkbox <?php echo esc_attr( $class ); ?>" id="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $key ) ); ?>" type="checkbox" value="1" <?php checked( $value, 1 ); ?> />
|
308 |
+
<label for="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>"><?php echo wp_kses_post( $setting['label'] ); ?></label>
|
309 |
</p>
|
310 |
<?php
|
311 |
break;
|
313 |
case 'autocomplete':
|
314 |
?>
|
315 |
<p>
|
316 |
+
<label for="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>"><?php echo wp_kses_post( $setting['label'] ); ?></label>
|
317 |
<select class="widefat lp-widget_select_course" id="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $key ) ); ?>" data-rest-url="<?php echo get_rest_url(); ?>" data-post-type="<?php echo esc_attr( $setting['post_type'] ?? LP_COURSE_CPT ); ?>" style="width: 300px;">
|
318 |
<?php if ( ! empty( $value ) ) : ?>
|
319 |
<option value="<?php echo esc_attr( $value ); ?>" selected="selected"><?php echo esc_html( get_the_title( $value ) ); ?></option>
|
@@ -22,13 +22,6 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
|
|
22 |
*/
|
23 |
public $course_type = null;
|
24 |
|
25 |
-
/**
|
26 |
-
* Course item is viewing in single course.
|
27 |
-
*
|
28 |
-
* @var LP_Course_Item
|
29 |
-
*/
|
30 |
-
protected $_viewing_item = null;
|
31 |
-
|
32 |
/**
|
33 |
* @var LP_Course_CURD|null
|
34 |
*/
|
@@ -206,9 +199,12 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
|
|
206 |
|
207 |
/**
|
208 |
* Load course curriculum.
|
|
|
|
|
209 |
*/
|
210 |
public function load_curriculum() {
|
211 |
-
|
|
|
212 |
$item_types = array();
|
213 |
$item_by_types = array();
|
214 |
$section_items = array();
|
@@ -242,49 +238,7 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
|
|
242 |
|
243 |
foreach ( $section_items as $section_id => $its ) {
|
244 |
LP_Course_Utils::set_section_items( $section_id, $its );
|
245 |
-
}
|
246 |
-
|
247 |
-
// learn_press_cache_add_post_type( $item_by_types );
|
248 |
-
|
249 |
-
/*
|
250 |
-
return ;
|
251 |
-
////
|
252 |
-
$item_types = array();
|
253 |
-
$items = array();
|
254 |
-
$sections = array();
|
255 |
-
|
256 |
-
if ( $all_items = $this->_curd->read_course_items( $this->get_id() ) ) {
|
257 |
-
foreach ( $all_items as $item ) {
|
258 |
-
if ( empty( $item_types[ $item->type ] ) ) {
|
259 |
-
$item_types[ $item->type ] = array();
|
260 |
-
}
|
261 |
-
$item_types[ $item->type ][] = $item->id;
|
262 |
-
$items[ $item->id ] = $item->type;
|
263 |
-
|
264 |
-
if ( empty( $sections[ $item->section_id ] ) ) {
|
265 |
-
$sections[ $item->section_id ] = array();
|
266 |
-
}
|
267 |
-
$sections[ $item->section_id ][] = $item->id;
|
268 |
-
}
|
269 |
-
}
|
270 |
-
|
271 |
-
LP_Object_Cache::set( 'course-' . $this->get_id(), $item_types, 'learn-press/course-item-group-types' );
|
272 |
-
LP_Object_Cache::set( 'course-' . $this->get_id(), $items, 'learn-press/course-item-types' );
|
273 |
-
|
274 |
-
foreach ( $sections as $section_id => $section_items ) {
|
275 |
-
LP_Object_Cache::set( 'section-' . $section_id, $section_items, 'learn-press/section-items' );
|
276 |
-
}
|
277 |
-
|
278 |
-
learn_press_cache_add_post_type( $items );
|
279 |
-
|
280 |
-
|
281 |
-
//LP_Object_Cache::set( $this->get_id(), 'learn-press/course-curriculum' )
|
282 |
-
|
283 |
-
if ( $items = LP_Object_Cache::get( $this->get_id(), 'learn-press/course-curriculum' ) ) {
|
284 |
-
LP_Helper_CURD::cache_posts( $items );
|
285 |
-
}
|
286 |
-
|
287 |
-
return true;*/
|
288 |
}
|
289 |
|
290 |
/**
|
@@ -424,78 +378,9 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
|
|
424 |
}
|
425 |
|
426 |
/**
|
427 |
-
* @
|
428 |
-
*/
|
429 |
-
public function get_description() {
|
430 |
-
_deprecated_function( __FUNCTION__, '3.0.0', 'LP_Course::get_content' );
|
431 |
-
|
432 |
-
return $this->get_content();
|
433 |
-
}
|
434 |
-
|
435 |
-
/**
|
436 |
-
* Get all curriculum of this course.
|
437 |
-
*
|
438 |
-
* @param int $section_id
|
439 |
-
* @param bool $force
|
440 |
-
*
|
441 |
-
* @return bool|LP_Course_Section[]
|
442 |
-
*/
|
443 |
-
public function get_curriculum( $section_id = 0, $force = false ) {
|
444 |
-
return $this->get_sections( 'object', $section_id );
|
445 |
-
}
|
446 |
-
|
447 |
-
/**
|
448 |
-
* Return list of item's ids in course's curriculum.
|
449 |
-
*
|
450 |
-
* @param string|array $type
|
451 |
-
* @param bool $preview - True for including 'Preview' item
|
452 |
-
*
|
453 |
-
* @return array
|
454 |
-
* @since 3.0.0
|
455 |
-
* Todo: tungnx - should review and rewrite
|
456 |
*/
|
457 |
-
public function
|
458 |
-
$this->load();
|
459 |
-
|
460 |
-
if ( ! $type && $preview ) {
|
461 |
-
$items = apply_filters(
|
462 |
-
'learn-press/course-items',
|
463 |
-
LP_Object_Cache::get( $this->get_id(), 'learn-press/course-curriculum' )
|
464 |
-
);
|
465 |
-
} else {
|
466 |
-
if ( ! $type ) {
|
467 |
-
$type = learn_press_course_get_support_item_types( true );
|
468 |
-
} else {
|
469 |
-
settype( $type, 'array' );
|
470 |
-
}
|
471 |
-
|
472 |
-
$key = $this->get_id() . '-' . md5( serialize( func_get_args() ) );
|
473 |
-
$items = LP_Object_Cache::get( 'course-' . $key, 'learn-press/course-items' );
|
474 |
-
|
475 |
-
if ( false === $items ) {
|
476 |
-
$items = array();
|
477 |
-
$item_types = $this->get_item_types( true );
|
478 |
-
|
479 |
-
foreach ( $type as $t ) {
|
480 |
-
if ( isset( $item_types[ $t ] ) && ! empty( $item_types[ $t ] ) ) {
|
481 |
-
$items = array_merge( $items, $item_types[ $t ] );
|
482 |
-
}
|
483 |
-
}
|
484 |
-
|
485 |
-
$preview_items = $this->get_preview_items();
|
486 |
-
|
487 |
-
if ( ! $preview && $preview_items ) {
|
488 |
-
$items = array_diff( $items, $preview_items );
|
489 |
-
}
|
490 |
-
|
491 |
-
LP_Object_Cache::set( 'course-' . $key, $items, 'learn-press/course-items' );
|
492 |
-
}
|
493 |
-
}
|
494 |
-
|
495 |
-
return $items;
|
496 |
-
}
|
497 |
-
|
498 |
-
public function get_item_types( $group = false ) {
|
499 |
$cache_key = $group ? 'course-item-group-types' : 'course-item-types';
|
500 |
$items = LP_Object_Cache::get( 'course-' . $this->get_id(), "learn-press/{$cache_key}" );
|
501 |
$items = false;
|
@@ -532,19 +417,33 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
|
|
532 |
}
|
533 |
|
534 |
return apply_filters( "learn-press/{$cache_key}", $items, $this->get_id() );
|
535 |
-
}
|
536 |
|
537 |
/**
|
538 |
-
* Get all
|
|
|
|
|
539 |
*
|
540 |
* @return array
|
|
|
|
|
541 |
*/
|
542 |
-
public function get_item_ids() {
|
543 |
$item_ids = array();
|
544 |
-
$items = $this->get_item_types();
|
545 |
|
546 |
-
|
547 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
548 |
}
|
549 |
|
550 |
return apply_filters( 'learn-press/course-item-ids', $item_ids, $this->get_id() );
|
@@ -554,28 +453,11 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
|
|
554 |
* Get item is viewing in single course.
|
555 |
*
|
556 |
* @return LP_Course_Item
|
|
|
557 |
*/
|
558 |
public function get_viewing_item() {
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
/**
|
563 |
-
* Get raw data curriculum.
|
564 |
-
*
|
565 |
-
* @return array
|
566 |
-
* @since 3.0.0
|
567 |
-
*/
|
568 |
-
public function get_curriculum_raw() {
|
569 |
-
$sections = $this->get_sections( 'object' );
|
570 |
-
$sections_data = array();
|
571 |
-
|
572 |
-
if ( is_array( $sections ) ) {
|
573 |
-
foreach ( $sections as $section ) {
|
574 |
-
$sections_data[] = $section->to_array();
|
575 |
-
}
|
576 |
-
}
|
577 |
-
|
578 |
-
return $sections_data;
|
579 |
}
|
580 |
|
581 |
/**
|
@@ -713,23 +595,6 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
|
|
713 |
);
|
714 |
}
|
715 |
|
716 |
-
/**
|
717 |
-
* @param null $user_id
|
718 |
-
*
|
719 |
-
* @return bool|mixed
|
720 |
-
* @deprecated
|
721 |
-
* @editor tungnx
|
722 |
-
* @modify 4.1.5 comment
|
723 |
-
*/
|
724 |
-
/*public function get_course_info( $user_id = null ) {
|
725 |
-
if ( ! $user_id ) {
|
726 |
-
$user_id = get_current_user_id();
|
727 |
-
}
|
728 |
-
$user = learn_press_get_user( $user_id );
|
729 |
-
|
730 |
-
return $user ? $user->get_course_info( $this->get_id() ) : false;
|
731 |
-
}*/
|
732 |
-
|
733 |
/**
|
734 |
* Check if a course is Free
|
735 |
*
|
@@ -913,18 +778,6 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
|
|
913 |
return $this->get_regular_price_html();
|
914 |
}
|
915 |
|
916 |
-
/**
|
917 |
-
* Get all items in a course.
|
918 |
-
*
|
919 |
-
* @param string $type . Type of items, eg: lp_lesson, lp_quiz...
|
920 |
-
*
|
921 |
-
* @return array
|
922 |
-
* @deprecated
|
923 |
-
*/
|
924 |
-
public function get_curriculum_items( $type = '' ) {
|
925 |
-
return $this->get_items( $type );
|
926 |
-
}
|
927 |
-
|
928 |
/**
|
929 |
* @param bool $item_id
|
930 |
*
|
@@ -1163,14 +1016,9 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
|
|
1163 |
* @return LP_Lesson|LP_Quiz|boolean
|
1164 |
*/
|
1165 |
public function get_item( $item_id ) {
|
1166 |
-
$item =
|
1167 |
-
|
1168 |
-
|
1169 |
-
/*if ( false === wp_cache_get( $item_id, 'posts' ) ) {
|
1170 |
-
LP_Helper_CURD::cache_posts( $this->get_item_ids() );
|
1171 |
-
}*/
|
1172 |
-
|
1173 |
-
$item = LP_Course_Item::get_item( $item_id, $this->get_id() );
|
1174 |
}
|
1175 |
|
1176 |
return apply_filters( 'learn-press/course-item', $item, $item_id, $this->get_id() );
|
@@ -1199,96 +1047,6 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
|
|
1199 |
);
|
1200 |
}
|
1201 |
|
1202 |
-
/**
|
1203 |
-
* Fetch all links of course's items into cache.
|
1204 |
-
* Item Link = Course Permalink + SLUG + Item Slug
|
1205 |
-
*
|
1206 |
-
* @since 3.0.0
|
1207 |
-
* @deprecated 3.1.6.3
|
1208 |
-
*/
|
1209 |
-
/*public function get_item_links() {
|
1210 |
-
$item_links = LP_Object_Cache::get( 'course-' . $this->get_id(), 'learn-press/course-item-links' );
|
1211 |
-
$item_links = false;
|
1212 |
-
|
1213 |
-
if ( false === $item_links ) {
|
1214 |
-
$items = $this->get_item_ids();
|
1215 |
-
|
1216 |
-
if ( $items ) {
|
1217 |
-
if ( false === wp_cache_get( $items[0], 'posts' ) ) {
|
1218 |
-
LP_Helper_CURD::cache_posts( $items );
|
1219 |
-
}
|
1220 |
-
|
1221 |
-
$permalink = trailingslashit( $this->get_permalink() );
|
1222 |
-
$post_types = get_post_types( null, 'objects' );
|
1223 |
-
$has_query = strpos( $permalink, '?' ) !== false;
|
1224 |
-
$parts = explode( '?', $permalink );
|
1225 |
-
$is_permalink = '' !== get_option( 'permalink_structure' );
|
1226 |
-
$is_draft = 'draft' === get_post_status( $this->get_id() );
|
1227 |
-
$custom_prefixes = array(
|
1228 |
-
LP_QUIZ_CPT => LP_Settings::instance()->get( 'quiz_slug' ),
|
1229 |
-
LP_LESSON_CPT => LP_Settings::instance()->get( 'lesson_slug' ),
|
1230 |
-
);
|
1231 |
-
|
1232 |
-
if ( empty( $custom_prefixes[ LP_QUIZ_CPT ] ) ) {
|
1233 |
-
$custom_prefixes[ LP_QUIZ_CPT ] = $post_types[ LP_QUIZ_CPT ]->rewrite['slug'];
|
1234 |
-
}
|
1235 |
-
|
1236 |
-
if ( empty( $custom_prefixes[ LP_LESSON_CPT ] ) ) {
|
1237 |
-
$custom_prefixes[ LP_LESSON_CPT ] = $post_types[ LP_LESSON_CPT ]->rewrite['slug'];
|
1238 |
-
}
|
1239 |
-
|
1240 |
-
$custom_prefixes = array_map( 'sanitize_title_with_dashes', $custom_prefixes );
|
1241 |
-
foreach ( $custom_prefixes as $type => $custom_prefix ) {
|
1242 |
-
$custom_prefix = sanitize_title_with_dashes( $custom_prefix );
|
1243 |
-
$custom_prefixes[ $type ] = preg_replace( '!^/!', '', trailingslashit( $custom_prefix ) );
|
1244 |
-
}
|
1245 |
-
|
1246 |
-
$custom_prefixes = apply_filters(
|
1247 |
-
'learn-press/course/custom-item-prefixes',
|
1248 |
-
$custom_prefixes,
|
1249 |
-
$this->get_id()
|
1250 |
-
);
|
1251 |
-
|
1252 |
-
$slugs = apply_filters(
|
1253 |
-
'learn-press/course/custom-item-slugs',
|
1254 |
-
array(
|
1255 |
-
LP_LESSON_CPT => 'lesson',
|
1256 |
-
LP_QUIZ_CPT => 'quiz',
|
1257 |
-
)
|
1258 |
-
);
|
1259 |
-
|
1260 |
-
foreach ( $items as $item_id ) {
|
1261 |
-
$item_permalink = $permalink;
|
1262 |
-
$item_type = learn_press_get_post_type( $item_id );
|
1263 |
-
if ( ! empty( $slugs[ $item_type ] ) ) {
|
1264 |
-
$post_name = get_post_field( 'post_name', $item_id );
|
1265 |
-
$prefix = $custom_prefixes[ $item_type ];
|
1266 |
-
|
1267 |
-
if ( $is_permalink && ! $is_draft ) {
|
1268 |
-
if ( $has_query ) {
|
1269 |
-
$item_permalink = $parts[0] . $prefix . $post_name . '?' . $parts[1];
|
1270 |
-
} else {
|
1271 |
-
$item_permalink .= $prefix . $post_name;
|
1272 |
-
}
|
1273 |
-
} else {
|
1274 |
-
$item_permalink = add_query_arg(
|
1275 |
-
array( $slugs[ $item_type ] => $post_name ),
|
1276 |
-
$permalink
|
1277 |
-
);
|
1278 |
-
}
|
1279 |
-
|
1280 |
-
$item_permalink = $has_query ? untrailingslashit( $item_permalink ) : trailingslashit( $item_permalink );
|
1281 |
-
}
|
1282 |
-
$item_links[ $item_id ] = $item_permalink;
|
1283 |
-
}
|
1284 |
-
}
|
1285 |
-
|
1286 |
-
LP_Object_Cache::set( 'course-' . $this->get_id(), $item_links, 'learn-press/course-item-links' );
|
1287 |
-
}
|
1288 |
-
|
1289 |
-
return $item_links;
|
1290 |
-
}*/
|
1291 |
-
|
1292 |
/**
|
1293 |
* Get item's link
|
1294 |
*
|
@@ -1347,8 +1105,9 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
|
|
1347 |
* @param LP_Course_Item|LP_User_Item|int $item
|
1348 |
*
|
1349 |
* @return mixed
|
|
|
1350 |
*/
|
1351 |
-
public function get_item_position( $item ) {
|
1352 |
$items = $this->get_items();
|
1353 |
|
1354 |
if ( ! $items ) {
|
@@ -1361,7 +1120,7 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
|
|
1361 |
) ? $item->get_id() : absint( $item );
|
1362 |
|
1363 |
return array_search( $item_id, $items );
|
1364 |
-
}
|
1365 |
|
1366 |
/**
|
1367 |
* @return bool|mixed
|
@@ -1493,342 +1252,6 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
|
|
1493 |
|
1494 |
}
|
1495 |
|
1496 |
-
/**
|
1497 |
-
* @editor tungnx
|
1498 |
-
* @modify 4.1.4.1 comment - not use
|
1499 |
-
*/
|
1500 |
-
/*protected function _evaluate_course_by_items( $user_id = 0, $force = false, $type = '' ) {
|
1501 |
-
$items = $this->get_curriculum_items();
|
1502 |
-
$result = 0;
|
1503 |
-
|
1504 |
-
if ( $items ) {
|
1505 |
-
$completed_items = $this->count_completed_items( $user_id, $force, $type );
|
1506 |
-
$result = round( $completed_items / sizeof( $items ) * 100 );
|
1507 |
-
}
|
1508 |
-
|
1509 |
-
return apply_filters( 'learn_press_course_results_by_items', $result, $this->get_id(), $user_id );
|
1510 |
-
}*/
|
1511 |
-
|
1512 |
-
/**
|
1513 |
-
* @editor tungnx
|
1514 |
-
* @modify 4.1.4.1 comment - not use
|
1515 |
-
*/
|
1516 |
-
/*protected function _evaluate_course_by_lessons( $user_id = 0, $force = false, $type = '' ) {
|
1517 |
-
$lessons = $this->get_items( LP_LESSON_CPT );
|
1518 |
-
$result = 0;
|
1519 |
-
|
1520 |
-
if ( $lessons ) {
|
1521 |
-
$completed_items = $this->count_completed_items( $user_id, $force, 'lp_lesson' );
|
1522 |
-
$result = round( $completed_items / sizeof( $lessons ) * 100 );
|
1523 |
-
}
|
1524 |
-
|
1525 |
-
return apply_filters( 'learn_press_course_results_by_items', $result, $this->get_id(), $user_id );
|
1526 |
-
}*/
|
1527 |
-
|
1528 |
-
/**
|
1529 |
-
* Get achieved point of all quizzes per total points of all quizzes
|
1530 |
-
*
|
1531 |
-
* @param $user_id
|
1532 |
-
* @param bool $force
|
1533 |
-
*
|
1534 |
-
* @return mixed|void
|
1535 |
-
* @editor tungnx
|
1536 |
-
* @modify 4.1.3 - comment - not use
|
1537 |
-
*/
|
1538 |
-
/*public function _evaluate_course_by_quizzes_results( $user_id, $force = false ) {
|
1539 |
-
$quizzes = $this->get_items( LP_QUIZ_CPT );
|
1540 |
-
$user = learn_press_get_user( $user_id );
|
1541 |
-
$results = array();
|
1542 |
-
$achieved_point = 0;
|
1543 |
-
$total_point = 0;
|
1544 |
-
$quizzes_ids = array();
|
1545 |
-
|
1546 |
-
foreach ( $quizzes as $quiz ) {
|
1547 |
-
if ( ! $this->enable_evaluate_item( $quiz->ID, $user_id ) ) {
|
1548 |
-
continue;
|
1549 |
-
}
|
1550 |
-
|
1551 |
-
$quizzes_ids[] = $quiz->ID;
|
1552 |
-
$results[ $quiz->ID ] = $user->get_quiz_results( $quiz->ID, $this->get_id(), true );
|
1553 |
-
|
1554 |
-
if ( $quiz = wp_cache_get( $quiz->ID, 'posts' ) ) {
|
1555 |
-
$total_point += isset( $quiz->mark ) ? absint( $quiz->mark ) : 0;
|
1556 |
-
}
|
1557 |
-
|
1558 |
-
$achieved_point += is_object( $results[ $quiz->ID ] ) ? $results[ $quiz->ID ]->mark : 0;
|
1559 |
-
}
|
1560 |
-
|
1561 |
-
if ( $total_point > 0 ) {
|
1562 |
-
$result = ( $achieved_point / $total_point ) * 100;
|
1563 |
-
} else {
|
1564 |
-
$result = 0;
|
1565 |
-
}
|
1566 |
-
|
1567 |
-
return apply_filters(
|
1568 |
-
'learn_press_evaluate_course_by_quizzes_results',
|
1569 |
-
$result,
|
1570 |
-
$this->get_id(),
|
1571 |
-
$user_id
|
1572 |
-
);
|
1573 |
-
}*/
|
1574 |
-
|
1575 |
-
/**
|
1576 |
-
* @editor tungnx
|
1577 |
-
* @deprecated 4.1.4.1 comment - not use
|
1578 |
-
*/
|
1579 |
-
/*public function enable_evaluate_item( $item_id, $user_id = 0 ) {
|
1580 |
-
if ( ! $user_id ) {
|
1581 |
-
$user_id = get_current_user_id();
|
1582 |
-
}
|
1583 |
-
|
1584 |
-
return apply_filters(
|
1585 |
-
'learn_press_enable_evaluate_course_item',
|
1586 |
-
true,
|
1587 |
-
$item_id,
|
1588 |
-
$user_id,
|
1589 |
-
$this->get_id()
|
1590 |
-
);
|
1591 |
-
}*/
|
1592 |
-
|
1593 |
-
/**
|
1594 |
-
* @editor tungnx
|
1595 |
-
* @modify 4.1.4.1 comment - not use
|
1596 |
-
*/
|
1597 |
-
/*public function _evaluate_course_by_passed_quizzes_results( $user_id, $force = false ) {
|
1598 |
-
$quizzes = $this->get_items( LP_QUIZ_CPT );
|
1599 |
-
$user = learn_press_get_user( $user_id );
|
1600 |
-
$results = array();
|
1601 |
-
$achieved_point = 0;
|
1602 |
-
$total_point = 0;
|
1603 |
-
|
1604 |
-
foreach ( $quizzes as $_quiz ) {
|
1605 |
-
if ( ! $this->enable_evaluate_item( $_quiz->ID, $user_id ) ) {
|
1606 |
-
continue;
|
1607 |
-
}
|
1608 |
-
|
1609 |
-
$quiz = LP_Quiz::get_quiz( $_quiz->ID );
|
1610 |
-
|
1611 |
-
if ( $_quiz = wp_cache_get( $quiz->id, 'posts' ) ) {
|
1612 |
-
$total_point += isset( $_quiz->mark ) ? absint( $_quiz->mark ) : 0;
|
1613 |
-
}
|
1614 |
-
|
1615 |
-
$grade = $user->get_quiz_graduation( $quiz->id, $this->get_id() );
|
1616 |
-
|
1617 |
-
if ( $grade == 'passed' ) {
|
1618 |
-
$quiz_results = $user->get_quiz_results( $quiz->ID, $this->get_id(), true );
|
1619 |
-
$achieved_point += is_object( $quiz_results ) ? $quiz_results->mark : 0;
|
1620 |
-
}
|
1621 |
-
}
|
1622 |
-
|
1623 |
-
if ( $total_point > 0 ) {
|
1624 |
-
$result = ( $achieved_point / $total_point ) * 100;
|
1625 |
-
} else {
|
1626 |
-
$result = 0;
|
1627 |
-
}
|
1628 |
-
|
1629 |
-
return apply_filters(
|
1630 |
-
'learn_press_evaluate_course_by_passed_quizzes_results',
|
1631 |
-
$result,
|
1632 |
-
$this->get_id(),
|
1633 |
-
$user_id
|
1634 |
-
);
|
1635 |
-
}*/
|
1636 |
-
|
1637 |
-
/**
|
1638 |
-
* @editor tungnx
|
1639 |
-
* @modify 4.1.4.1 comment - not use
|
1640 |
-
*/
|
1641 |
-
/*public function is_evaluation( $thing ) {
|
1642 |
-
return $this->get_evaluation_results_method() == $thing;
|
1643 |
-
}*/
|
1644 |
-
|
1645 |
-
/**
|
1646 |
-
* Get number of lessons user has completed
|
1647 |
-
*
|
1648 |
-
* @param $user_id
|
1649 |
-
* @param bool $force
|
1650 |
-
*
|
1651 |
-
* @return int|mixed|null|void
|
1652 |
-
* @editor tungnx
|
1653 |
-
* @modify 4.1.4.1 - comment - not use
|
1654 |
-
*/
|
1655 |
-
/*public function get_completed_lessons( $user_id, $force = false ) {
|
1656 |
-
$key = $user_id . '-' . $this->get_id();
|
1657 |
-
|
1658 |
-
$completed_lessons = LP_Cache::get_completed_lessons( false, array() );
|
1659 |
-
|
1660 |
-
if ( ! array_key_exists( $key, $completed_lessons ) || $force ) {
|
1661 |
-
global $wpdb;
|
1662 |
-
|
1663 |
-
$course_lessons = $this->get_items( LP_LESSON_CPT );
|
1664 |
-
|
1665 |
-
if ( ! $course_lessons ) {
|
1666 |
-
return 0;
|
1667 |
-
}
|
1668 |
-
|
1669 |
-
$query = $wpdb->prepare(
|
1670 |
-
"
|
1671 |
-
SELECT count(ul.item_id)
|
1672 |
-
FROM {$wpdb->prefix}learnpress_user_items ul
|
1673 |
-
INNER JOIN {$wpdb->posts} l ON l.ID = ul.item_id
|
1674 |
-
WHERE ul.user_id = %d
|
1675 |
-
AND status = %s
|
1676 |
-
AND ul.ref_id = %d
|
1677 |
-
AND ul.item_id IN(" . join( ',', $course_lessons ) . ')
|
1678 |
-
',
|
1679 |
-
$user_id,
|
1680 |
-
'completed',
|
1681 |
-
$this->get_id()
|
1682 |
-
);
|
1683 |
-
|
1684 |
-
$completed_lessons[ $key ] = $wpdb->get_var( $query );
|
1685 |
-
|
1686 |
-
LP_Cache::set_completed_lessons( $key, $completed_lessons[ $key ] );
|
1687 |
-
}
|
1688 |
-
|
1689 |
-
return apply_filters(
|
1690 |
-
'learn_press_user_completed_lessons',
|
1691 |
-
$completed_lessons[ $key ],
|
1692 |
-
$this->get_id(),
|
1693 |
-
$user_id
|
1694 |
-
);
|
1695 |
-
}*/
|
1696 |
-
|
1697 |
-
|
1698 |
-
/**
|
1699 |
-
* Get number of lessons user has completed
|
1700 |
-
*
|
1701 |
-
* @param $user_id
|
1702 |
-
* @param bool $force
|
1703 |
-
* @param string $type
|
1704 |
-
*
|
1705 |
-
* @return int|bool
|
1706 |
-
* @editor tungnx
|
1707 |
-
* @modify 4.1.4.1 - comment - not use
|
1708 |
-
*/
|
1709 |
-
/*public function get_completed_items( $user_id = 0, $force = false, $type = '' ) {
|
1710 |
-
if ( ! $user_id ) {
|
1711 |
-
$user_id = get_current_user_id();
|
1712 |
-
}
|
1713 |
-
|
1714 |
-
$user = learn_press_get_user( $user_id );
|
1715 |
-
$items = $user ? $user->get_completed_items( $this->get_id() ) : false;
|
1716 |
-
|
1717 |
-
return apply_filters( 'learn-press/user-completed-items', $items, $user_id, $this->get_id() );
|
1718 |
-
}*/
|
1719 |
-
|
1720 |
-
/**
|
1721 |
-
* @param int $user_id
|
1722 |
-
* @param bool $force
|
1723 |
-
*
|
1724 |
-
* @return mixed
|
1725 |
-
* @editor tungnx
|
1726 |
-
* @modify 4.1.4.1 - comment - not use
|
1727 |
-
*/
|
1728 |
-
/*public function count_completed_items( $user_id = 0, $force = false, $type = '' ) {
|
1729 |
-
$items = $this->get_completed_items( $user_id, $force, $type );
|
1730 |
-
$count = 0;
|
1731 |
-
|
1732 |
-
if ( $items ) {
|
1733 |
-
$count = sizeof( $items );
|
1734 |
-
}
|
1735 |
-
|
1736 |
-
return apply_filters( 'learn_press_count_user_completed_items', $count, $this->get_id(), $user_id );
|
1737 |
-
}*/
|
1738 |
-
|
1739 |
-
/**
|
1740 |
-
* Count all items in a course.
|
1741 |
-
*
|
1742 |
-
* @param string|array $type - Optional. Filter item by it's post-type, e.g: lp_lesson
|
1743 |
-
* @param bool $include_preview - Optional. False to exclude if item is preview
|
1744 |
-
*
|
1745 |
-
* @return int
|
1746 |
-
* @editor tungnx
|
1747 |
-
* @modify 4.1.4.1 - comment - not use
|
1748 |
-
*/
|
1749 |
-
/*public function count_items( $type = '', $include_preview = true ) {
|
1750 |
-
global $wpdb;
|
1751 |
-
|
1752 |
-
$item_types = learn_press_get_course_item_types();
|
1753 |
-
$item_type_format = array_fill( 0, sizeof( $item_types ), '%s' );
|
1754 |
-
|
1755 |
-
// $query =$wpdb->prepare("
|
1756 |
-
// SELECT it.ID
|
1757 |
-
// FROM {$wpdb->posts} c
|
1758 |
-
// INNER JOIN {$wpdb->learnpress_sections} s ON s.section_course_id = c.ID
|
1759 |
-
// INNER JOIN {$wpdb->learnpress_section_items} si ON si.section_id = s.section_id
|
1760 |
-
// INNER JOIN {$wpdb->posts} it ON it.ID = si.item_id
|
1761 |
-
// WHERE c.ID = %d
|
1762 |
-
// AND it.post_type IN (".join(',', $item_type_format).")
|
1763 |
-
// ", );
|
1764 |
-
|
1765 |
-
if ( $type === '' && $include_preview === true ) {
|
1766 |
-
$count_items = $this->get_meta( 'count_items' );
|
1767 |
-
|
1768 |
-
if ( false === $count_items ) {
|
1769 |
-
$items = $this->get_item_ids();
|
1770 |
-
$count_items = sizeof( $items );
|
1771 |
-
$this->update_meta( 'count_items', $count_items );
|
1772 |
-
}
|
1773 |
-
} else {
|
1774 |
-
$key = md5(
|
1775 |
-
serialize(
|
1776 |
-
array(
|
1777 |
-
'course' => $this->get_id(),
|
1778 |
-
'type' => $type,
|
1779 |
-
'preview' => $include_preview,
|
1780 |
-
)
|
1781 |
-
)
|
1782 |
-
);
|
1783 |
-
|
1784 |
-
$count_items = LP_Object_Cache::get( $key, 'learn-press/count-items' );
|
1785 |
-
if ( false === $count_items ) {
|
1786 |
-
$count_items = 0;
|
1787 |
-
$items = $this->get_items( $type, $include_preview );
|
1788 |
-
|
1789 |
-
if ( $items ) {
|
1790 |
-
$count_items = sizeof( $items );
|
1791 |
-
}
|
1792 |
-
|
1793 |
-
LP_Object_Cache::set( $key, $count_items, 'learn-press/count-items' );
|
1794 |
-
}
|
1795 |
-
}
|
1796 |
-
|
1797 |
-
return apply_filters( 'learn-press/count-items', $count_items, $type, $include_preview, $this->get_id() );
|
1798 |
-
}*/
|
1799 |
-
|
1800 |
-
/**
|
1801 |
-
* Count all items are 'Preview' in a course.
|
1802 |
-
*
|
1803 |
-
* @return int
|
1804 |
-
* @editor tungnx
|
1805 |
-
* @deprecated 4.1.4.1 - comment - not use
|
1806 |
-
*/
|
1807 |
-
/*public function count_preview_items() {
|
1808 |
-
$count_preview = $this->get_preview_items();
|
1809 |
-
|
1810 |
-
if ( false === $count_preview ) {
|
1811 |
-
$count_preview = 0;
|
1812 |
-
$items = $this->get_items();
|
1813 |
-
|
1814 |
-
if ( $items ) {
|
1815 |
-
$count_all = sizeof( $items );
|
1816 |
-
$count_no_preview = 0;
|
1817 |
-
$no_preview_items = $this->get_items( '', false );
|
1818 |
-
|
1819 |
-
if ( $no_preview_items ) {
|
1820 |
-
$count_no_preview = sizeof( $no_preview_items );
|
1821 |
-
}
|
1822 |
-
|
1823 |
-
$count_preview = $count_all - $count_no_preview;
|
1824 |
-
}
|
1825 |
-
} else {
|
1826 |
-
$count_preview = sizeof( $count_preview );
|
1827 |
-
}
|
1828 |
-
|
1829 |
-
return apply_filters( 'learn-press/count-preview-items', $count_preview, $this->get_id() );
|
1830 |
-
}*/
|
1831 |
-
|
1832 |
public function get_preview_items() {
|
1833 |
return LP_Object_Cache::get( 'course-' . $this->get_id(), 'learn-press/course-preview-items' );
|
1834 |
}
|
@@ -1854,92 +1277,6 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
|
|
1854 |
$this->_set_data( 'final_quiz', $id );
|
1855 |
}
|
1856 |
|
1857 |
-
/**
|
1858 |
-
* Return TRUE if option to block course's items after course is exceeded turn on.
|
1859 |
-
*
|
1860 |
-
* @return bool
|
1861 |
-
* @editor tungnx
|
1862 |
-
* @deprecated 4.1.4.1
|
1863 |
-
*/
|
1864 |
-
/*public function is_block_item_content() {
|
1865 |
-
return $this->get_data( 'block_lesson_content' ) === 'yes';
|
1866 |
-
}*/
|
1867 |
-
|
1868 |
-
/**
|
1869 |
-
* Calculate results of course by final quiz
|
1870 |
-
*
|
1871 |
-
* @param int $user_id
|
1872 |
-
* @param boolean $force
|
1873 |
-
*
|
1874 |
-
* @return mixed|null
|
1875 |
-
* @editor tungnx
|
1876 |
-
* @deprecated 4.1.4.1 - comment - not use
|
1877 |
-
*/
|
1878 |
-
/*public function _evaluate_course_by_quiz( $user_id, $force = false ) {
|
1879 |
-
$user = learn_press_get_user( $user_id );
|
1880 |
-
$user_course = $user->get_course_data( $this->get_id() );
|
1881 |
-
|
1882 |
-
return $user_course ? $user_course->get_results( '' ) : 0;
|
1883 |
-
}*/
|
1884 |
-
|
1885 |
-
/**
|
1886 |
-
* @editor tungnx
|
1887 |
-
* @deprecated 4.1.4.1 - comment - not use
|
1888 |
-
*/
|
1889 |
-
/*public function evaluate_quiz( $quiz_id, $user_id, $force = false ) {
|
1890 |
-
$user = learn_press_get_user( $user_id );
|
1891 |
-
$results = $user->get_quiz_results( $quiz_id, $this->get_id() );
|
1892 |
-
|
1893 |
-
if ( ! $results ) {
|
1894 |
-
$result = 0;
|
1895 |
-
} else {
|
1896 |
-
if ( $user->get_quiz_graduation(
|
1897 |
-
$quiz_id,
|
1898 |
-
$this->get_id()
|
1899 |
-
) == 'passed' && ! empty( $results->mark_percent ) ) {
|
1900 |
-
$result = absint( $results->mark_percent );
|
1901 |
-
} else {
|
1902 |
-
$result = 0;
|
1903 |
-
}
|
1904 |
-
}
|
1905 |
-
|
1906 |
-
return $result;
|
1907 |
-
}*/
|
1908 |
-
|
1909 |
-
|
1910 |
-
/**
|
1911 |
-
* Calculate results of course by avg of all quizzes
|
1912 |
-
*
|
1913 |
-
* @param int $user_id
|
1914 |
-
* @param boolean $force
|
1915 |
-
*
|
1916 |
-
* @return mixed
|
1917 |
-
* @editor tungnx
|
1918 |
-
* @modify 4.1.3 - comment - not use
|
1919 |
-
*/
|
1920 |
-
/*public function _evaluate_course_by_quizzes( $user_id, $force = false ) {
|
1921 |
-
$quizzes = $this->get_items( LP_QUIZ_CPT );
|
1922 |
-
$result = 0;
|
1923 |
-
|
1924 |
-
if ( $quizzes ) {
|
1925 |
-
$count = 0;
|
1926 |
-
|
1927 |
-
foreach ( $quizzes as $quiz ) {
|
1928 |
-
if ( ! $this->enable_evaluate_item( $quiz->ID, $user_id ) ) {
|
1929 |
-
continue;
|
1930 |
-
}
|
1931 |
-
$result += $this->evaluate_quiz( $quiz->ID, $user_id, $force );
|
1932 |
-
$count ++;
|
1933 |
-
}
|
1934 |
-
|
1935 |
-
if ( $count ) {
|
1936 |
-
$result = round( $result / $count );
|
1937 |
-
}
|
1938 |
-
}
|
1939 |
-
|
1940 |
-
return apply_filters( 'learn_press_evaluation_course_quizzes', $result, $this->get_id(), $user_id );
|
1941 |
-
}*/
|
1942 |
-
|
1943 |
/**
|
1944 |
* Get course duration in seconds
|
1945 |
*
|
@@ -1985,55 +1322,6 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
|
|
1985 |
return $html;
|
1986 |
}
|
1987 |
|
1988 |
-
/**
|
1989 |
-
* Get expired time of this course if user has enrolled
|
1990 |
-
*
|
1991 |
-
* @param int $user_id
|
1992 |
-
* @param mixed
|
1993 |
-
*
|
1994 |
-
* @return mixed
|
1995 |
-
* @editor tungnx
|
1996 |
-
* @deprecated 4.1.4.1
|
1997 |
-
*/
|
1998 |
-
/*public function get_user_expired_time( $user_id = 0, $args = array() ) {
|
1999 |
-
if ( ! $user_id ) {
|
2000 |
-
$user_id = get_current_user_id();
|
2001 |
-
}
|
2002 |
-
|
2003 |
-
$duration = $this->get_duration();
|
2004 |
-
$user = learn_press_get_user( $user_id );
|
2005 |
-
$course_info = $user->get_course_info( $this->get_id() );
|
2006 |
-
$start_time = array_key_exists( 'start_time', $args ) ? $args['start_time'] : ( is_array( $course_info ) && array_key_exists( 'start', $course_info ) ? intval( strtotime( $course_info['start'] ) ) : 0 );
|
2007 |
-
|
2008 |
-
if ( $duration == 0 ) {
|
2009 |
-
$expired = false;
|
2010 |
-
} else {
|
2011 |
-
$expired = $start_time + $duration;
|
2012 |
-
}
|
2013 |
-
|
2014 |
-
return apply_filters( 'learn_press_user_course_expired_time', $expired, $user_id, $this->get_id() );
|
2015 |
-
}*/
|
2016 |
-
|
2017 |
-
/**
|
2018 |
-
* Checks if this course has expired
|
2019 |
-
*
|
2020 |
-
* @param int $user_id
|
2021 |
-
* @param mixed
|
2022 |
-
*
|
2023 |
-
* @return mixed
|
2024 |
-
*/
|
2025 |
-
/*public function is_expired( $user_id = 0, $args = array() ) {
|
2026 |
-
settype( $args, 'array' );
|
2027 |
-
|
2028 |
-
if ( ! $user_id ) {
|
2029 |
-
$user_id = get_current_user_id();
|
2030 |
-
}
|
2031 |
-
|
2032 |
-
$expired = $this->get_user_expired_time( $user_id, $args );
|
2033 |
-
|
2034 |
-
return apply_filters( 'learn_press_user_course_expired', $expired !== false ? ( $expired - current_time( 'timestamp' ) ) : false );
|
2035 |
-
}*/
|
2036 |
-
|
2037 |
/**
|
2038 |
* Output params for single course page
|
2039 |
*
|
@@ -2058,16 +1346,6 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
|
|
2058 |
return apply_filters( 'learn-press/course-external-link-text', _x( 'More Info', 'External Link button text', 'learnpress' ), $this->get_id() );
|
2059 |
}
|
2060 |
|
2061 |
-
/**
|
2062 |
-
* @return int
|
2063 |
-
* @deprecated 4.0.0
|
2064 |
-
*/
|
2065 |
-
public function get_retake_count() {
|
2066 |
-
_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );
|
2067 |
-
|
2068 |
-
return absint( $this->get_data( 'retake_count' ) );
|
2069 |
-
}
|
2070 |
-
|
2071 |
/**
|
2072 |
* Get main author of course.
|
2073 |
*
|
@@ -2105,50 +1383,6 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
|
|
2105 |
return apply_filters( 'learn-press/course-tags', get_the_term_list( $this->get_id(), 'course_tag', __( 'Tags: ', 'learnpress' ), ' ', '' ) );
|
2106 |
}
|
2107 |
|
2108 |
-
/**
|
2109 |
-
* Get sections of course.
|
2110 |
-
*
|
2111 |
-
* @param string $return - Optional.
|
2112 |
-
* @param int $section_id - Optional.
|
2113 |
-
*
|
2114 |
-
* @return array|bool|LP_Course_Section[]|LP_Course_Section
|
2115 |
-
* @version 4.0.0
|
2116 |
-
*/
|
2117 |
-
public function get_sections( $return = 'object', $section_id = 0 ) {
|
2118 |
-
$this->load_curriculum();
|
2119 |
-
$sections = LP_Course_Utils::get_cached_db_sections( $this->get_id() );
|
2120 |
-
|
2121 |
-
if ( false === $sections ) {
|
2122 |
-
return false;
|
2123 |
-
}
|
2124 |
-
|
2125 |
-
if ( $return == 'object' && $sections ) {
|
2126 |
-
$position = 0;
|
2127 |
-
$object_sections = array();
|
2128 |
-
|
2129 |
-
foreach ( $sections as $k => $section_data ) {
|
2130 |
-
$sid = $section_data->section_id;
|
2131 |
-
$section = LP_Course_Utils::get_cached_section( $sid );
|
2132 |
-
|
2133 |
-
if ( false === $section ) {
|
2134 |
-
$section = new LP_Course_Section( $section_data );
|
2135 |
-
$section->set_position( ++ $position );
|
2136 |
-
|
2137 |
-
LP_Course_Utils::set_cached_section( $sid, $section );
|
2138 |
-
}
|
2139 |
-
|
2140 |
-
$object_sections[ $sid ] = $section;
|
2141 |
-
}
|
2142 |
-
$sections = $object_sections;
|
2143 |
-
}
|
2144 |
-
|
2145 |
-
if ( $section_id ) {
|
2146 |
-
$sections = ! empty( $sections[ $section_id ] ) ? $sections[ $section_id ] : false;
|
2147 |
-
}
|
2148 |
-
|
2149 |
-
return apply_filters( 'learn-press/course-sections', $sections, $this->get_id(), $return, $section_id );
|
2150 |
-
}
|
2151 |
-
|
2152 |
/**
|
2153 |
* Get extra info of course.
|
2154 |
* Target Audience, Key Features, Requirements, etc...
|
@@ -2186,41 +1420,6 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
|
|
2186 |
return apply_filters( 'learn-press/course-faqs', $faqs, $this->get_id() );
|
2187 |
}
|
2188 |
|
2189 |
-
/**
|
2190 |
-
* Get evaluation results method of a course.
|
2191 |
-
*
|
2192 |
-
* @return string
|
2193 |
-
* @since 3.x.x
|
2194 |
-
* @editor tungnx
|
2195 |
-
* @modify 4.1.4.1 - comment - not use
|
2196 |
-
*/
|
2197 |
-
/*public function get_evaluation_results_method() {
|
2198 |
-
if ( empty( $this->_data['evaluation_results'] ) ) {
|
2199 |
-
$all_methods = learn_press_course_evaluation_methods( 'keys' );
|
2200 |
-
$method = get_post_meta( $this->get_id(), '_lp_course_result', true );
|
2201 |
-
|
2202 |
-
if ( ! in_array( $method, $all_methods ) ) {
|
2203 |
-
$method = key( $all_methods );
|
2204 |
-
}
|
2205 |
-
|
2206 |
-
switch ( $method ) {
|
2207 |
-
case 'evaluate_quiz':
|
2208 |
-
if ( $quiz_method = get_post_meta( $this->get_id(), '_lp_course_result_quiz', true ) ) {
|
2209 |
-
$method = $quiz_method;
|
2210 |
-
}
|
2211 |
-
}
|
2212 |
-
|
2213 |
-
$this->_data['evaluation_results'] = $method;
|
2214 |
-
}
|
2215 |
-
|
2216 |
-
return apply_filters(
|
2217 |
-
'learn-press/course-evaluation-results-method',
|
2218 |
-
$this->_data['evaluation_results'],
|
2219 |
-
$this->get_id(),
|
2220 |
-
$this
|
2221 |
-
);
|
2222 |
-
}*/
|
2223 |
-
|
2224 |
/**
|
2225 |
* Get course is set featured
|
2226 |
*
|
22 |
*/
|
23 |
public $course_type = null;
|
24 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
/**
|
26 |
* @var LP_Course_CURD|null
|
27 |
*/
|
199 |
|
200 |
/**
|
201 |
* Load course curriculum.
|
202 |
+
*
|
203 |
+
* @depecated 4.1.6.9
|
204 |
*/
|
205 |
public function load_curriculum() {
|
206 |
+
_deprecated_function( __FUNCTION__, '4.1.6.9' );
|
207 |
+
/*$item_ids = array();
|
208 |
$item_types = array();
|
209 |
$item_by_types = array();
|
210 |
$section_items = array();
|
238 |
|
239 |
foreach ( $section_items as $section_id => $its ) {
|
240 |
LP_Course_Utils::set_section_items( $section_id, $its );
|
241 |
+
}*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
242 |
}
|
243 |
|
244 |
/**
|
378 |
}
|
379 |
|
380 |
/**
|
381 |
+
* @depecated 4.1.6.9
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
382 |
*/
|
383 |
+
/*public function get_item_types( $group = false ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
384 |
$cache_key = $group ? 'course-item-group-types' : 'course-item-types';
|
385 |
$items = LP_Object_Cache::get( 'course-' . $this->get_id(), "learn-press/{$cache_key}" );
|
386 |
$items = false;
|
417 |
}
|
418 |
|
419 |
return apply_filters( "learn-press/{$cache_key}", $items, $this->get_id() );
|
420 |
+
}*/
|
421 |
|
422 |
/**
|
423 |
+
* Get all item's ids in a course.
|
424 |
+
*
|
425 |
+
* @param int $section_id
|
426 |
*
|
427 |
* @return array
|
428 |
+
* @version 4.0.1
|
429 |
+
* @modify 4.1.6.9 tungnx
|
430 |
*/
|
431 |
+
public function get_item_ids( int $section_id = 0 ): array {
|
432 |
$item_ids = array();
|
|
|
433 |
|
434 |
+
$sections_items = $this->get_full_sections_and_items_course();
|
435 |
+
foreach ( $sections_items as $section_items ) {
|
436 |
+
foreach ( $section_items->items as $item ) {
|
437 |
+
if ( $section_id ) {
|
438 |
+
if ( $section_id == $section_items->id ) {
|
439 |
+
$item_ids[] = $item->id;
|
440 |
+
}
|
441 |
+
|
442 |
+
continue;
|
443 |
+
}
|
444 |
+
|
445 |
+
$item_ids[] = $item->id;
|
446 |
+
}
|
447 |
}
|
448 |
|
449 |
return apply_filters( 'learn-press/course-item-ids', $item_ids, $this->get_id() );
|
453 |
* Get item is viewing in single course.
|
454 |
*
|
455 |
* @return LP_Course_Item
|
456 |
+
* @depecated 4.1.6.9
|
457 |
*/
|
458 |
public function get_viewing_item() {
|
459 |
+
_deprecated_function( __FUNCTION__, '4.1.6.9' );
|
460 |
+
//return apply_filters( 'learn-press/single-course-viewing-item', $this->_viewing_item, $this->get_id() );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
461 |
}
|
462 |
|
463 |
/**
|
595 |
);
|
596 |
}
|
597 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
598 |
/**
|
599 |
* Check if a course is Free
|
600 |
*
|
778 |
return $this->get_regular_price_html();
|
779 |
}
|
780 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
781 |
/**
|
782 |
* @param bool $item_id
|
783 |
*
|
1016 |
* @return LP_Lesson|LP_Quiz|boolean
|
1017 |
*/
|
1018 |
public function get_item( $item_id ) {
|
1019 |
+
$item = LP_Course_Item::get_item( $item_id );
|
1020 |
+
if ( $item instanceof LP_Course_Item ) {
|
1021 |
+
$item->set_course( $this->get_id() );
|
|
|
|
|
|
|
|
|
|
|
1022 |
}
|
1023 |
|
1024 |
return apply_filters( 'learn-press/course-item', $item, $item_id, $this->get_id() );
|
1047 |
);
|
1048 |
}
|
1049 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1050 |
/**
|
1051 |
* Get item's link
|
1052 |
*
|
1105 |
* @param LP_Course_Item|LP_User_Item|int $item
|
1106 |
*
|
1107 |
* @return mixed
|
1108 |
+
* @depecated 4.1.6.9
|
1109 |
*/
|
1110 |
+
/*public function get_item_position( $item ) {
|
1111 |
$items = $this->get_items();
|
1112 |
|
1113 |
if ( ! $items ) {
|
1120 |
) ? $item->get_id() : absint( $item );
|
1121 |
|
1122 |
return array_search( $item_id, $items );
|
1123 |
+
}*/
|
1124 |
|
1125 |
/**
|
1126 |
* @return bool|mixed
|
1252 |
|
1253 |
}
|
1254 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1255 |
public function get_preview_items() {
|
1256 |
return LP_Object_Cache::get( 'course-' . $this->get_id(), 'learn-press/course-preview-items' );
|
1257 |
}
|
1277 |
$this->_set_data( 'final_quiz', $id );
|
1278 |
}
|
1279 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1280 |
/**
|
1281 |
* Get course duration in seconds
|
1282 |
*
|
1322 |
return $html;
|
1323 |
}
|
1324 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1325 |
/**
|
1326 |
* Output params for single course page
|
1327 |
*
|
1346 |
return apply_filters( 'learn-press/course-external-link-text', _x( 'More Info', 'External Link button text', 'learnpress' ), $this->get_id() );
|
1347 |
}
|
1348 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1349 |
/**
|
1350 |
* Get main author of course.
|
1351 |
*
|
1383 |
return apply_filters( 'learn-press/course-tags', get_the_term_list( $this->get_id(), 'course_tag', __( 'Tags: ', 'learnpress' ), ' ', '' ) );
|
1384 |
}
|
1385 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1386 |
/**
|
1387 |
* Get extra info of course.
|
1388 |
* Target Audience, Key Features, Requirements, etc...
|
1420 |
return apply_filters( 'learn-press/course-faqs', $faqs, $this->get_id() );
|
1421 |
}
|
1422 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1423 |
/**
|
1424 |
* Get course is set featured
|
1425 |
*
|
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
class LP_Course_Item_Quiz extends LP_Course_Item {
|
3 |
public $name;
|
4 |
-
function __construct($name) {
|
5 |
$this->name = $name;
|
6 |
}
|
7 |
}
|
1 |
<?php
|
2 |
class LP_Course_Item_Quiz extends LP_Course_Item {
|
3 |
public $name;
|
4 |
+
function __construct( $name ) {
|
5 |
$this->name = $name;
|
6 |
}
|
7 |
}
|
@@ -381,7 +381,7 @@ if ( ! class_exists( 'LP_Course_Item' ) ) {
|
|
381 |
* @Todo: tungnx - review - rewrite - set cache - check where call this function
|
382 |
* @editor tungnx
|
383 |
* @modify 4.1.3 - change cache
|
384 |
-
* @version 4.0.
|
385 |
* @since 3.x.x
|
386 |
*/
|
387 |
public static function get_item( $item_id = 0, $course_id = 0 ) {
|
@@ -393,13 +393,13 @@ if ( ! class_exists( 'LP_Course_Item' ) ) {
|
|
393 |
$item = false;
|
394 |
|
395 |
if ( false === $item ) {
|
396 |
-
$
|
397 |
|
398 |
-
if ( ! $
|
399 |
return false;
|
400 |
}
|
401 |
|
402 |
-
$item_type = $
|
403 |
|
404 |
if ( learn_press_is_support_course_item_type( $item_type ) ) {
|
405 |
$type = str_replace( 'lp_', '', $item_type );
|
@@ -429,14 +429,15 @@ if ( ! class_exists( 'LP_Course_Item' ) ) {
|
|
429 |
$item = $class;
|
430 |
}
|
431 |
}
|
432 |
-
}
|
433 |
|
434 |
-
|
435 |
-
if ( $item instanceof LP_Course_Item ) {
|
436 |
-
$item->set_course( $course_id );
|
437 |
-
}
|
438 |
}
|
439 |
|
|
|
|
|
|
|
|
|
|
|
440 |
// $lp_course_cache->set_cache( $key_cache, $item );
|
441 |
}
|
442 |
}
|
381 |
* @Todo: tungnx - review - rewrite - set cache - check where call this function
|
382 |
* @editor tungnx
|
383 |
* @modify 4.1.3 - change cache
|
384 |
+
* @version 4.0.2
|
385 |
* @since 3.x.x
|
386 |
*/
|
387 |
public static function get_item( $item_id = 0, $course_id = 0 ) {
|
393 |
$item = false;
|
394 |
|
395 |
if ( false === $item ) {
|
396 |
+
$item_post = get_post( $item_id );
|
397 |
|
398 |
+
if ( ! $item_post ) {
|
399 |
return false;
|
400 |
}
|
401 |
|
402 |
+
$item_type = $item_post->post_type;
|
403 |
|
404 |
if ( learn_press_is_support_course_item_type( $item_type ) ) {
|
405 |
$type = str_replace( 'lp_', '', $item_type );
|
429 |
$item = $class;
|
430 |
}
|
431 |
}
|
|
|
432 |
|
433 |
+
break;
|
|
|
|
|
|
|
434 |
}
|
435 |
|
436 |
+
// Todo: don't know why when set course here, theme ivy still null course
|
437 |
+
/*if ( $item instanceof LP_Course_Item ) {
|
438 |
+
$item->set_course( $course_id );
|
439 |
+
}*/
|
440 |
+
|
441 |
// $lp_course_cache->set_cache( $key_cache, $item );
|
442 |
}
|
443 |
}
|
@@ -6,18 +6,20 @@
|
|
6 |
* @since 3.0.0
|
7 |
*/
|
8 |
class LP_Course_Section extends LP_Abstract_Object_Data {
|
9 |
-
|
10 |
/**
|
11 |
* Store section data
|
12 |
*
|
13 |
* @var null
|
14 |
*/
|
15 |
protected $data = null;
|
16 |
-
|
17 |
/**
|
18 |
* @var int
|
19 |
*/
|
20 |
protected $course_id = 0;
|
|
|
|
|
|
|
|
|
21 |
|
22 |
/**
|
23 |
* @var LP_Section_CURD
|
@@ -59,44 +61,40 @@ class LP_Course_Section extends LP_Abstract_Object_Data {
|
|
59 |
$this->_data[ $k ] = $v;
|
60 |
}
|
61 |
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
$this->_curd = new LP_Section_CURD( 0 );
|
63 |
$this->set_id( $this->_data['id'] );
|
64 |
// Load section items
|
65 |
-
$this->
|
66 |
}
|
67 |
|
68 |
/**
|
69 |
* Load items from course curriculum to it section
|
70 |
-
*
|
71 |
-
* @return bool
|
72 |
*/
|
73 |
-
protected function
|
74 |
if ( ! $this->get_id() ) {
|
75 |
return false;
|
76 |
}
|
77 |
|
|
|
|
|
|
|
78 |
// All items
|
79 |
-
$items =
|
80 |
-
if ( false === $items ) {
|
81 |
-
$items = $this->_curd->read_items( $this->get_id() );
|
82 |
-
LP_Object_Cache::set( 'section-' . $this->get_id(), $items, 'learn-press/section-items' );
|
83 |
-
}
|
84 |
|
85 |
-
|
|
|
86 |
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
if ( $item_class ) {
|
91 |
-
if ( $item_class instanceof LP_Course_Item ) {
|
92 |
-
$item_class->set_course( $this->get_course_id() );
|
93 |
-
$item_class->set_section( $this );
|
94 |
-
$this->items[ $item ] = $item_class;
|
95 |
-
}
|
96 |
}
|
97 |
}
|
98 |
-
|
99 |
-
return true;
|
100 |
}
|
101 |
|
102 |
/**
|
@@ -105,8 +103,9 @@ class LP_Course_Section extends LP_Abstract_Object_Data {
|
|
105 |
* @param array $item
|
106 |
*
|
107 |
* @return bool|LP_Course_Item
|
|
|
108 |
*/
|
109 |
-
protected function
|
110 |
if ( ! is_numeric( $item ) ) {
|
111 |
$item_id = $item->item_id;
|
112 |
} else {
|
@@ -114,7 +113,7 @@ class LP_Course_Section extends LP_Abstract_Object_Data {
|
|
114 |
}
|
115 |
|
116 |
return LP_Course_Item::get_item( $item_id );
|
117 |
-
}
|
118 |
|
119 |
/**
|
120 |
* Get data to array.
|
@@ -189,7 +188,6 @@ class LP_Course_Section extends LP_Abstract_Object_Data {
|
|
189 |
* @return array
|
190 |
*/
|
191 |
public function get_items( $type = '', $preview = true ) {
|
192 |
-
|
193 |
/**
|
194 |
* @var LP_Course_Item[] $items
|
195 |
*/
|
@@ -207,7 +205,6 @@ class LP_Course_Section extends LP_Abstract_Object_Data {
|
|
207 |
}
|
208 |
|
209 |
foreach ( $items as $item ) {
|
210 |
-
|
211 |
if ( ! $preview ) {
|
212 |
if ( $item->is_preview() ) {
|
213 |
|
6 |
* @since 3.0.0
|
7 |
*/
|
8 |
class LP_Course_Section extends LP_Abstract_Object_Data {
|
|
|
9 |
/**
|
10 |
* Store section data
|
11 |
*
|
12 |
* @var null
|
13 |
*/
|
14 |
protected $data = null;
|
|
|
15 |
/**
|
16 |
* @var int
|
17 |
*/
|
18 |
protected $course_id = 0;
|
19 |
+
/**
|
20 |
+
* @var int
|
21 |
+
*/
|
22 |
+
protected $course = 0;
|
23 |
|
24 |
/**
|
25 |
* @var LP_Section_CURD
|
61 |
$this->_data[ $k ] = $v;
|
62 |
}
|
63 |
|
64 |
+
$this->course = learn_press_get_course( $this->course_id );
|
65 |
+
|
66 |
+
if ( ! $this->course ) {
|
67 |
+
return;
|
68 |
+
}
|
69 |
+
|
70 |
$this->_curd = new LP_Section_CURD( 0 );
|
71 |
$this->set_id( $this->_data['id'] );
|
72 |
// Load section items
|
73 |
+
$this->load_items();
|
74 |
}
|
75 |
|
76 |
/**
|
77 |
* Load items from course curriculum to it section
|
|
|
|
|
78 |
*/
|
79 |
+
protected function load_items() {
|
80 |
if ( ! $this->get_id() ) {
|
81 |
return false;
|
82 |
}
|
83 |
|
84 |
+
$course = $this->course;
|
85 |
+
$section_id = $this->get_id();
|
86 |
+
|
87 |
// All items
|
88 |
+
$items = $course->get_item_ids( $section_id );
|
|
|
|
|
|
|
|
|
89 |
|
90 |
+
foreach ( $items as $item_id ) {
|
91 |
+
$item_class = $course->get_item( $item_id );
|
92 |
|
93 |
+
if ( $item_class instanceof LP_Course_Item ) {
|
94 |
+
$item_class->set_section( $this );
|
95 |
+
$this->items[ $item_id ] = $item_class;
|
|
|
|
|
|
|
|
|
|
|
|
|
96 |
}
|
97 |
}
|
|
|
|
|
98 |
}
|
99 |
|
100 |
/**
|
103 |
* @param array $item
|
104 |
*
|
105 |
* @return bool|LP_Course_Item
|
106 |
+
* @depecated 4.1.6.9
|
107 |
*/
|
108 |
+
/*protected function get_item( $item ) {
|
109 |
if ( ! is_numeric( $item ) ) {
|
110 |
$item_id = $item->item_id;
|
111 |
} else {
|
113 |
}
|
114 |
|
115 |
return LP_Course_Item::get_item( $item_id );
|
116 |
+
}*/
|
117 |
|
118 |
/**
|
119 |
* Get data to array.
|
188 |
* @return array
|
189 |
*/
|
190 |
public function get_items( $type = '', $preview = true ) {
|
|
|
191 |
/**
|
192 |
* @var LP_Course_Item[] $items
|
193 |
*/
|
205 |
}
|
206 |
|
207 |
foreach ( $items as $item ) {
|
|
|
208 |
if ( ! $preview ) {
|
209 |
if ( $item->is_preview() ) {
|
210 |
|
@@ -1,6 +1,8 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
* Class LP_Course_Utils
|
|
|
|
|
4 |
*/
|
5 |
class LP_Course_Utils {
|
6 |
|
1 |
<?php
|
2 |
/**
|
3 |
* Class LP_Course_Utils
|
4 |
+
*
|
5 |
+
* @depecated 4.1.6.9
|
6 |
*/
|
7 |
class LP_Course_Utils {
|
8 |
|
@@ -39,31 +39,6 @@ if ( ! class_exists( 'LP_Course' ) ) {
|
|
39 |
return $data;
|
40 |
}*/
|
41 |
|
42 |
-
/**
|
43 |
-
* Set item is viewing in single course.
|
44 |
-
*
|
45 |
-
* @param LP_Course_Item $item
|
46 |
-
*
|
47 |
-
* @return int|LP_Course_Item
|
48 |
-
*/
|
49 |
-
public function set_viewing_item( $item ) {
|
50 |
-
if ( $this->_viewing_item && $this->_viewing_item->get_id() == $item->get_id() ) {
|
51 |
-
return 0;
|
52 |
-
}
|
53 |
-
|
54 |
-
$user = learn_press_get_current_user();
|
55 |
-
if ( $user instanceof LP_User_Guest ) {
|
56 |
-
return 0;
|
57 |
-
}
|
58 |
-
|
59 |
-
$this->_viewing_item = $item;
|
60 |
-
$item->set_course( $this );
|
61 |
-
|
62 |
-
$user->maybe_update_item( $item->get_id(), $this->get_id() );
|
63 |
-
|
64 |
-
return $item;
|
65 |
-
}
|
66 |
-
|
67 |
/**
|
68 |
* Get default course meta.
|
69 |
*
|
@@ -297,6 +272,8 @@ if ( ! class_exists( 'LP_Course' ) ) {
|
|
297 |
} else {
|
298 |
$first_item_id = $extra_info->first_item_id;
|
299 |
}
|
|
|
|
|
300 |
}
|
301 |
} catch ( Throwable $e ) {
|
302 |
$first_item_id = 0;
|
@@ -383,9 +360,11 @@ if ( ! class_exists( 'LP_Course' ) ) {
|
|
383 |
* @return int
|
384 |
*/
|
385 |
public function count_items( string $type = '', bool $include_preview = true ): int {
|
|
|
|
|
386 |
// Get cache
|
387 |
$lp_course_cache = LP_Course_Cache::instance();
|
388 |
-
$key_cache = $
|
389 |
$total_items = $lp_course_cache->get_cache( $key_cache );
|
390 |
$count_items = 0;
|
391 |
|
@@ -393,7 +372,7 @@ if ( ! class_exists( 'LP_Course' ) ) {
|
|
393 |
$extra_info = $this->get_info_extra_for_fast_query();
|
394 |
|
395 |
if ( ! $extra_info->total_items ) {
|
396 |
-
$total_items = LP_Course_DB::getInstance()->get_total_items( $
|
397 |
$extra_info->total_items = $total_items;
|
398 |
|
399 |
// Save post meta
|
@@ -401,17 +380,21 @@ if ( ! class_exists( 'LP_Course' ) ) {
|
|
401 |
} else {
|
402 |
$total_items = $extra_info->total_items;
|
403 |
}
|
|
|
|
|
404 |
}
|
405 |
|
406 |
if ( ! empty( $total_items ) ) {
|
407 |
if ( ! empty( $type ) ) {
|
408 |
-
|
|
|
|
|
409 |
} else {
|
410 |
$count_items = $total_items->count_items;
|
411 |
}
|
412 |
}
|
413 |
|
414 |
-
return apply_filters( 'learn-press/course/count-items', intval( $count_items ), $
|
415 |
}
|
416 |
|
417 |
/**
|
@@ -435,7 +418,7 @@ if ( ! class_exists( 'LP_Course' ) ) {
|
|
435 |
|
436 |
$filter = new LP_Section_Filter();
|
437 |
$filter->section_ids = $section_ids;
|
438 |
-
$filter->author_id_course = $this->
|
439 |
|
440 |
// Delete section
|
441 |
$lp_section_db->delete_section( $filter );
|
@@ -568,7 +551,7 @@ if ( ! class_exists( 'LP_Course' ) ) {
|
|
568 |
|
569 |
/**
|
570 |
* Save key cache to array to clear
|
571 |
-
* @see LP_Background_Single_Course::save_post()
|
572 |
*/
|
573 |
LP_Courses_Cache::instance()->save_cache_keys( $key_cache );
|
574 |
LP_Courses_Cache::instance()->save_cache_keys( $key_cache_total_rows );
|
@@ -581,20 +564,278 @@ if ( ! class_exists( 'LP_Course' ) ) {
|
|
581 |
}
|
582 |
|
583 |
/**
|
584 |
-
* Get
|
585 |
*
|
586 |
-
* @
|
587 |
-
* @
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
588 |
*
|
589 |
* @return array
|
|
|
|
|
|
|
590 |
*/
|
591 |
-
public
|
592 |
-
$
|
593 |
-
|
594 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
595 |
}
|
596 |
|
597 |
-
return $
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
598 |
}
|
599 |
}
|
600 |
}
|
39 |
return $data;
|
40 |
}*/
|
41 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
/**
|
43 |
* Get default course meta.
|
44 |
*
|
272 |
} else {
|
273 |
$first_item_id = $extra_info->first_item_id;
|
274 |
}
|
275 |
+
|
276 |
+
$lp_course_cache->set_cache( $key_cache, $first_item_id );
|
277 |
}
|
278 |
} catch ( Throwable $e ) {
|
279 |
$first_item_id = 0;
|
360 |
* @return int
|
361 |
*/
|
362 |
public function count_items( string $type = '', bool $include_preview = true ): int {
|
363 |
+
$course_id = $this->get_id();
|
364 |
+
|
365 |
// Get cache
|
366 |
$lp_course_cache = LP_Course_Cache::instance();
|
367 |
+
$key_cache = "$course_id/total_items";
|
368 |
$total_items = $lp_course_cache->get_cache( $key_cache );
|
369 |
$count_items = 0;
|
370 |
|
372 |
$extra_info = $this->get_info_extra_for_fast_query();
|
373 |
|
374 |
if ( ! $extra_info->total_items ) {
|
375 |
+
$total_items = LP_Course_DB::getInstance()->get_total_items( $course_id );
|
376 |
$extra_info->total_items = $total_items;
|
377 |
|
378 |
// Save post meta
|
380 |
} else {
|
381 |
$total_items = $extra_info->total_items;
|
382 |
}
|
383 |
+
|
384 |
+
$lp_course_cache->set_cache( $key_cache, $total_items );
|
385 |
}
|
386 |
|
387 |
if ( ! empty( $total_items ) ) {
|
388 |
if ( ! empty( $type ) ) {
|
389 |
+
if ( isset( $total_items->{$type} ) ) {
|
390 |
+
$count_items = $total_items->{$type};
|
391 |
+
}
|
392 |
} else {
|
393 |
$count_items = $total_items->count_items;
|
394 |
}
|
395 |
}
|
396 |
|
397 |
+
return apply_filters( 'learn-press/course/count-items', intval( $count_items ), $course_id );
|
398 |
}
|
399 |
|
400 |
/**
|
418 |
|
419 |
$filter = new LP_Section_Filter();
|
420 |
$filter->section_ids = $section_ids;
|
421 |
+
$filter->author_id_course = $this->get_author( 'id' );
|
422 |
|
423 |
// Delete section
|
424 |
$lp_section_db->delete_section( $filter );
|
551 |
|
552 |
/**
|
553 |
* Save key cache to array to clear
|
554 |
+
* @see LP_Background_Single_Course::save_post() - clear cache when save post
|
555 |
*/
|
556 |
LP_Courses_Cache::instance()->save_cache_keys( $key_cache );
|
557 |
LP_Courses_Cache::instance()->save_cache_keys( $key_cache_total_rows );
|
564 |
}
|
565 |
|
566 |
/**
|
567 |
+
* Get full sections, items of course via Cache, extra info (if it has)
|
568 |
*
|
569 |
+
* @return array
|
570 |
+
* @since 4.1.6.9
|
571 |
+
* @version 1.0.0
|
572 |
+
* @author tungnx
|
573 |
+
*/
|
574 |
+
public function get_full_sections_and_items_course(): array {
|
575 |
+
$sections_items = [];
|
576 |
+
$course_id = $this->get_id();
|
577 |
+
|
578 |
+
try {
|
579 |
+
// Get cache
|
580 |
+
$lp_course_cache = LP_Course_Cache::instance();
|
581 |
+
$key_cache = "$course_id/sections_items";
|
582 |
+
$sections_items = $lp_course_cache->get_cache( $key_cache );
|
583 |
+
|
584 |
+
if ( ! $sections_items ) {
|
585 |
+
$extra_info = $this->get_info_extra_for_fast_query();
|
586 |
+
|
587 |
+
if ( empty( $extra_info->sections_items ) ) {
|
588 |
+
$sections_items = $this->get_sections_and_items_course_from_db_and_sort();
|
589 |
+
$extra_info->sections_items = $sections_items;
|
590 |
+
|
591 |
+
// Save post meta
|
592 |
+
$this->set_info_extra_for_fast_query( $extra_info );
|
593 |
+
} else {
|
594 |
+
$sections_items = $extra_info->sections_items;
|
595 |
+
}
|
596 |
+
|
597 |
+
$lp_course_cache->set_cache( $key_cache, $sections_items );
|
598 |
+
}
|
599 |
+
} catch ( Throwable $e ) {
|
600 |
+
if ( LP_Debug::is_debug() ) {
|
601 |
+
error_log( $e->getMessage() );
|
602 |
+
}
|
603 |
+
}
|
604 |
+
|
605 |
+
return $sections_items;
|
606 |
+
}
|
607 |
+
|
608 |
+
/**
|
609 |
+
* Get all sections and items from database, then handle sort
|
610 |
+
* Only call when data change or not set
|
611 |
*
|
612 |
* @return array
|
613 |
+
* @since 4.1.6.9
|
614 |
+
* @version 1.0.0
|
615 |
+
* @author tungnx
|
616 |
*/
|
617 |
+
public function get_sections_and_items_course_from_db_and_sort(): array {
|
618 |
+
$sections_items = [];
|
619 |
+
$course_id = $this->get_id();
|
620 |
+
$lp_course_db = LP_Course_DB::getInstance();
|
621 |
+
$lp_course_cache = LP_Course_Cache::instance();
|
622 |
+
$key_cache = "$course_id/sections_items";
|
623 |
+
|
624 |
+
try {
|
625 |
+
$sections_results = $lp_course_db->get_sections( $course_id );
|
626 |
+
$sections_items_results = $lp_course_db->get_full_sections_and_items_course( $course_id );
|
627 |
+
$count_items = count( $sections_items_results );
|
628 |
+
$index_items_last = $count_items - 1;
|
629 |
+
$section_current = 0;
|
630 |
+
|
631 |
+
foreach ( $sections_items_results as $index => $sections_item ) {
|
632 |
+
$section_new = $sections_item->section_id;
|
633 |
+
$section_order = $sections_item->section_order;
|
634 |
+
$item = new stdClass();
|
635 |
+
$item->id = $sections_item->item_id;
|
636 |
+
$item->order = $sections_item->item_order;
|
637 |
+
$item->type = $sections_item->item_type;
|
638 |
+
|
639 |
+
if ( $section_new != $section_current ) {
|
640 |
+
$sections_items[ $section_new ] = new stdClass();
|
641 |
+
$sections_items[ $section_new ]->id = $section_new;
|
642 |
+
$sections_items[ $section_new ]->order = $section_order;
|
643 |
+
$sections_items[ $section_new ]->title = $sections_item->section_name;
|
644 |
+
$sections_items[ $section_new ]->description = $sections_item->section_description;
|
645 |
+
$sections_items[ $section_new ]->items = [];
|
646 |
+
|
647 |
+
// Sort item by item_order
|
648 |
+
if ( $section_current != 0 ) {
|
649 |
+
usort(
|
650 |
+
$sections_items[ $section_current ]->items,
|
651 |
+
function ( $item1, $item2 ) {
|
652 |
+
return $item1->order - $item2->order;
|
653 |
+
}
|
654 |
+
);
|
655 |
+
}
|
656 |
+
|
657 |
+
$section_current = $section_new;
|
658 |
+
}
|
659 |
+
|
660 |
+
$sections_items[ $section_new ]->items[ $item->id ] = $item;
|
661 |
+
|
662 |
+
if ( $index_items_last === $index ) {
|
663 |
+
usort(
|
664 |
+
$sections_items[ $section_current ]->items,
|
665 |
+
function ( $item1, $item2 ) {
|
666 |
+
return $item1->order - $item2->order;
|
667 |
+
}
|
668 |
+
);
|
669 |
+
}
|
670 |
+
}
|
671 |
+
|
672 |
+
// Check case if section empty items
|
673 |
+
foreach ( $sections_results as $section ) {
|
674 |
+
$section_id = $section->section_id;
|
675 |
+
if ( isset( $sections_items[ $section_id ] ) ) {
|
676 |
+
continue;
|
677 |
+
}
|
678 |
+
|
679 |
+
$section_obj = new stdClass();
|
680 |
+
$section_obj->id = $section_id;
|
681 |
+
$section_obj->order = $section->section_order;
|
682 |
+
$section_obj->title = $section->section_name;
|
683 |
+
$section_obj->description = $section->section_description;
|
684 |
+
$section_obj->items = [];
|
685 |
+
$sections_items[ $section_id ] = $section_obj;
|
686 |
+
}
|
687 |
+
|
688 |
+
// Sort section by section_order
|
689 |
+
usort(
|
690 |
+
$sections_items,
|
691 |
+
function ( $section1, $section2 ) {
|
692 |
+
return $section1->order - $section2->order;
|
693 |
+
}
|
694 |
+
);
|
695 |
+
|
696 |
+
$lp_course_cache->set_cache( $key_cache, $sections_items );
|
697 |
+
} catch ( Throwable $e ) {
|
698 |
+
if ( LP_Debug::is_debug() ) {
|
699 |
+
error_log( $e->getMessage() );
|
700 |
+
}
|
701 |
+
}
|
702 |
+
|
703 |
+
return $sections_items;
|
704 |
+
}
|
705 |
+
|
706 |
+
/**
|
707 |
+
* Get sections of course.
|
708 |
+
*
|
709 |
+
* @param string $return - Optional.
|
710 |
+
* @param int $section_id - Optional.
|
711 |
+
*
|
712 |
+
* @return array|bool|LP_Course_Section[]|LP_Course_Section
|
713 |
+
* @version 4.0.0
|
714 |
+
*/
|
715 |
+
public function get_sections( $return = 'object', $section_id = 0 ) {
|
716 |
+
// $this->load_curriculum();
|
717 |
+
// $sections = LP_Course_Utils::get_cached_db_sections( $this->get_id() );
|
718 |
+
|
719 |
+
$sections_items = $this->get_full_sections_and_items_course();
|
720 |
+
|
721 |
+
/*if ( false === $sections ) {
|
722 |
+
return false;
|
723 |
+
}*/
|
724 |
+
|
725 |
+
//$position = 0;
|
726 |
+
$sections = array();
|
727 |
+
foreach ( $sections_items as $k => $section_items ) {
|
728 |
+
$position = $k + 1;
|
729 |
+
$section_items_tmp = [
|
730 |
+
'section_id' => $section_items->id,
|
731 |
+
'section_name' => $section_items->title,
|
732 |
+
'section_course_id' => $this->get_id(),
|
733 |
+
'section_order' => $section_items->order,
|
734 |
+
'section_description' => $section_items->description,
|
735 |
+
'items' => $section_items->items,
|
736 |
+
];
|
737 |
+
$sid = $section_items->id;
|
738 |
+
$section = new LP_Course_Section( $section_items_tmp );
|
739 |
+
$section->set_position( $position );
|
740 |
+
$sections[ $sid ] = $section;
|
741 |
+
}
|
742 |
+
|
743 |
+
if ( $section_id ) {
|
744 |
+
$sections = $sections[ $section_id ] ?? [];
|
745 |
+
}
|
746 |
+
|
747 |
+
return apply_filters( 'learn-press/course-sections', $sections, $this->get_id(), $return, $section_id );
|
748 |
+
}
|
749 |
+
|
750 |
+
/**
|
751 |
+
* Get raw data curriculum.
|
752 |
+
*
|
753 |
+
* @return array
|
754 |
+
* @since 3.0.0
|
755 |
+
* @editor tungnx
|
756 |
+
* @version 1.0.1
|
757 |
+
*/
|
758 |
+
public function get_curriculum_raw(): array {
|
759 |
+
$sections_data = array();
|
760 |
+
|
761 |
+
$sections_items = $this->get_full_sections_and_items_course();
|
762 |
+
foreach ( $sections_items as $section_items ) {
|
763 |
+
$section_items_arr = (array) $section_items;
|
764 |
+
$section_items_arr['course_id'] = $this->get_id();
|
765 |
+
$section_items_arr['items'] = [];
|
766 |
+
|
767 |
+
foreach ( $section_items->items as $item ) {
|
768 |
+
$itemObject = $this->get_item( $item->id );
|
769 |
+
|
770 |
+
if ( ! $itemObject instanceof LP_Course_Item ) {
|
771 |
+
continue;
|
772 |
+
}
|
773 |
+
|
774 |
+
$item_arr = (array) $item;
|
775 |
+
$item_arr['title'] = $itemObject->get_title();
|
776 |
+
$item_arr['preview'] = $itemObject->is_preview();
|
777 |
+
$section_items_arr['items'][] = $item_arr;
|
778 |
+
}
|
779 |
+
|
780 |
+
$sections_data[] = $section_items_arr;
|
781 |
}
|
782 |
|
783 |
+
return $sections_data;
|
784 |
+
}
|
785 |
+
|
786 |
+
/**
|
787 |
+
* Get all curriculum of this course.
|
788 |
+
*
|
789 |
+
* @param int $section_id
|
790 |
+
* @param bool $force
|
791 |
+
*
|
792 |
+
* @return bool|LP_Course_Section[]
|
793 |
+
*/
|
794 |
+
public function get_curriculum( $section_id = 0, $force = false ) {
|
795 |
+
return $this->get_sections( 'object', $section_id );
|
796 |
+
}
|
797 |
+
|
798 |
+
/**
|
799 |
+
* Return list of item's ids in course's curriculum.
|
800 |
+
*
|
801 |
+
* @param string|array $type
|
802 |
+
*
|
803 |
+
* @return array
|
804 |
+
* @since 3.0.0
|
805 |
+
* @version 3.0.2
|
806 |
+
*/
|
807 |
+
public function get_items( $type = '' ) {
|
808 |
+
//$this->load();
|
809 |
+
|
810 |
+
$sections_items = $this->get_full_sections_and_items_course();
|
811 |
+
|
812 |
+
$items = array();
|
813 |
+
|
814 |
+
foreach ( $sections_items as $section_items ) {
|
815 |
+
foreach ( $section_items->items as $item ) {
|
816 |
+
if ( ! empty( $type ) ) {
|
817 |
+
if ( $type === $item->type ) {
|
818 |
+
$items[] = $item->id;
|
819 |
+
}
|
820 |
+
} else {
|
821 |
+
$items[] = $item->id;
|
822 |
+
}
|
823 |
+
}
|
824 |
+
}
|
825 |
+
|
826 |
+
return $items;
|
827 |
+
}
|
828 |
+
|
829 |
+
/**
|
830 |
+
* Get all items in a course.
|
831 |
+
*
|
832 |
+
* @param string $type . Type of items, eg: lp_lesson, lp_quiz...
|
833 |
+
*
|
834 |
+
* @return array
|
835 |
+
* @deprecated
|
836 |
+
*/
|
837 |
+
public function get_curriculum_items( $type = '' ) {
|
838 |
+
return $this->get_items( $type );
|
839 |
}
|
840 |
}
|
841 |
}
|
@@ -1 +1 @@
|
|
1 |
-
<?php // Silence is golden.
|
1 |
+
<?php // Silence is golden.
|
@@ -52,11 +52,11 @@ function learn_press_get_course( $the_course = 0 ) {
|
|
52 |
*
|
53 |
* @return string
|
54 |
* @since 3.0.0
|
55 |
-
*
|
56 |
*/
|
57 |
-
function learn_press_create_course_action_nonce( $action, $course_id = 0, $user_id = 0 ) {
|
58 |
return LP_Nonce_Helper::create_course( $action, $course_id, $user_id );
|
59 |
-
}
|
60 |
|
61 |
/**
|
62 |
* Verify nonce for course action.
|
@@ -68,11 +68,11 @@ function learn_press_create_course_action_nonce( $action, $course_id = 0, $user_
|
|
68 |
*
|
69 |
* @return bool
|
70 |
* @since 3.0.0
|
71 |
-
*
|
72 |
*/
|
73 |
-
function learn_press_verify_course_action_nonce( $nonce, $action, $course_id = 0, $user_id = 0 ) {
|
74 |
return LP_Nonce_Helper::verify_course( $nonce, $action, $course_id, $user_id );
|
75 |
-
}
|
76 |
|
77 |
/**
|
78 |
* Get type of items are supported in course curriculum (post types).
|
@@ -215,14 +215,15 @@ function learn_press_item_meta_format( $item, $nonce = '' ) {
|
|
215 |
}
|
216 |
|
217 |
// return false to hide post format
|
218 |
-
|
|
|
219 |
printf(
|
220 |
'<label for="post-format-0" class="post-format-icon post-format-%s" title="%s"></label>',
|
221 |
$format,
|
222 |
ucfirst( $format )
|
223 |
);
|
224 |
} else {
|
225 |
-
echo $nonce;
|
226 |
}
|
227 |
}
|
228 |
}
|
@@ -654,9 +655,10 @@ add_filter( 'get_comment_link', 'learn_press_item_comment_link', 100, 4 );
|
|
654 |
* @param string $status
|
655 |
*
|
656 |
* @since 3.0.10
|
|
|
657 |
*
|
658 |
*/
|
659 |
-
function learn_press_force_refresh_course( $comment_id, $status ) {
|
660 |
|
661 |
if ( empty( $_POST['comment-post-item-course'] ) ) {
|
662 |
return;
|
@@ -668,7 +670,7 @@ function learn_press_force_refresh_course( $comment_id, $status ) {
|
|
668 |
$curd->load( $course );
|
669 |
}
|
670 |
|
671 |
-
add_action( 'comment_post', 'learn_press_force_refresh_course', 1000, 2 )
|
672 |
|
673 |
/**
|
674 |
* @editor tungnx | comment code
|
@@ -698,7 +700,10 @@ add_action( 'comment_post', 'learn_press_force_refresh_course', 1000, 2 );
|
|
698 |
}
|
699 |
}*/
|
700 |
|
701 |
-
|
|
|
|
|
|
|
702 |
function learn_press_get_nav_course_item_url( $course_id = null, $item_id = null, $content_only = false ) {
|
703 |
|
704 |
$course = learn_press_get_course( $course_id );
|
@@ -735,7 +740,7 @@ if ( ! function_exists( 'learn_press_get_nav_course_item_url' ) ) {
|
|
735 |
|
736 |
return $return;
|
737 |
}
|
738 |
-
}
|
739 |
|
740 |
if ( ! function_exists( 'learn_press_edit_item_link' ) ) {
|
741 |
/**
|
@@ -764,12 +769,15 @@ if ( ! function_exists( 'learn_press_edit_item_link' ) ) {
|
|
764 |
}
|
765 |
/**
|
766 |
* Get course id of an item by id
|
|
|
|
|
767 |
*/
|
768 |
|
769 |
if ( ! function_exists( 'learn_press_get_item_course_id' ) ) {
|
770 |
|
771 |
function learn_press_get_item_course_id( $post_id, $post_type ) {
|
772 |
-
|
|
|
773 |
|
774 |
// If the post is a course
|
775 |
if ( LP_COURSE_CPT == learn_press_get_post_type( $post_id ) ) {
|
@@ -801,12 +809,12 @@ if ( ! function_exists( 'learn_press_get_item_course_id' ) ) {
|
|
801 |
if ( false === $course_id ) {
|
802 |
$query = $wpdb->prepare(
|
803 |
"
|
804 |
-
|
805 |
-
|
806 |
-
|
807 |
-
|
808 |
-
|
809 |
-
|
810 |
",
|
811 |
$post_id
|
812 |
);
|
@@ -828,7 +836,7 @@ if ( ! function_exists( 'learn_press_get_item_course_id' ) ) {
|
|
828 |
|
829 |
}
|
830 |
|
831 |
-
return $course_id
|
832 |
}
|
833 |
}
|
834 |
|
@@ -949,50 +957,14 @@ if ( ! function_exists( 'learn_press_course_item_type_link' ) ) {
|
|
949 |
//add_filter( 'post_type_link', 'learn_press_course_item_type_link', 10, 4 );
|
950 |
|
951 |
/**
|
952 |
-
* Get course
|
953 |
-
*
|
954 |
-
* @param int $item_id
|
955 |
*
|
956 |
-
* @
|
957 |
-
* @
|
958 |
*
|
959 |
-
* @
|
960 |
-
* @deprecated 3.2.7.5
|
961 |
*/
|
962 |
-
|
963 |
-
global $wpdb;
|
964 |
-
$query = $wpdb->prepare( "
|
965 |
-
SELECT section_course_id
|
966 |
-
FROM {$wpdb->learnpress_sections} s
|
967 |
-
INNER JOIN {$wpdb->learnpress_section_items} si ON si.section_id = s.section_id
|
968 |
-
WHERE si.item_id = %d
|
969 |
-
", $item_id );
|
970 |
-
|
971 |
-
return (int) $wpdb->get_var( $query );
|
972 |
-
}*/
|
973 |
-
|
974 |
-
|
975 |
-
/*add_filter( 'template_include', 'learn_press_prepare_archive_courses' );
|
976 |
-
function learn_press_prepare_archive_courses( $template ) {
|
977 |
-
global $wp_query;
|
978 |
-
$query = ! empty( LP()->wp_query ) ? LP()->wp_query : $wp_query;
|
979 |
-
if ( ! $query || ! $query->is_main_query() ) {
|
980 |
-
return $template;
|
981 |
-
}
|
982 |
-
if ( ! empty( $query->posts ) ) {
|
983 |
-
$ids = array();
|
984 |
-
foreach ( $query->posts as $_post ) {
|
985 |
-
$ids[] = $_post->ID;
|
986 |
-
$_post = sanitize_post( $_post, 'raw' );
|
987 |
-
wp_cache_add( $_post->ID, $_post, 'posts' );
|
988 |
-
}
|
989 |
-
}
|
990 |
-
|
991 |
-
return $template;
|
992 |
-
}*/
|
993 |
-
|
994 |
-
function learn_press_course_grade_html( $grade, $echo = true ) {
|
995 |
-
$html = '';
|
996 |
switch ( $grade ) {
|
997 |
case 'passed':
|
998 |
$html = __( 'Passed', 'learnpress' );
|
@@ -1007,14 +979,12 @@ function learn_press_course_grade_html( $grade, $echo = true ) {
|
|
1007 |
$html = $grade;
|
1008 |
break;
|
1009 |
}
|
1010 |
-
// @deprecated
|
1011 |
-
$html = apply_filters( 'learn_press_course_grade_html', $html, $grade );
|
1012 |
|
1013 |
// @since 3.0.0
|
1014 |
$html = apply_filters( 'learn-press/course/grade-html', $html, $grade );
|
1015 |
|
1016 |
if ( $echo ) {
|
1017 |
-
echo $html;
|
1018 |
}
|
1019 |
|
1020 |
return $html;
|
52 |
*
|
53 |
* @return string
|
54 |
* @since 3.0.0
|
55 |
+
* @depecated 4.1.6.9
|
56 |
*/
|
57 |
+
/*function learn_press_create_course_action_nonce( $action, $course_id = 0, $user_id = 0 ) {
|
58 |
return LP_Nonce_Helper::create_course( $action, $course_id, $user_id );
|
59 |
+
}*/
|
60 |
|
61 |
/**
|
62 |
* Verify nonce for course action.
|
68 |
*
|
69 |
* @return bool
|
70 |
* @since 3.0.0
|
71 |
+
* @depecated 4.1.6.9
|
72 |
*/
|
73 |
+
/*function learn_press_verify_course_action_nonce( $nonce, $action, $course_id = 0, $user_id = 0 ) {
|
74 |
return LP_Nonce_Helper::verify_course( $nonce, $action, $course_id, $user_id );
|
75 |
+
}*/
|
76 |
|
77 |
/**
|
78 |
* Get type of items are supported in course curriculum (post types).
|
215 |
}
|
216 |
|
217 |
// return false to hide post format
|
218 |
+
$format = apply_filters( 'learn_press_course_item_format', $format, $item );
|
219 |
+
if ( $format ) {
|
220 |
printf(
|
221 |
'<label for="post-format-0" class="post-format-icon post-format-%s" title="%s"></label>',
|
222 |
$format,
|
223 |
ucfirst( $format )
|
224 |
);
|
225 |
} else {
|
226 |
+
echo esc_html( $nonce );
|
227 |
}
|
228 |
}
|
229 |
}
|
655 |
* @param string $status
|
656 |
*
|
657 |
* @since 3.0.10
|
658 |
+
* @depecated 4.1.6.9
|
659 |
*
|
660 |
*/
|
661 |
+
/*function learn_press_force_refresh_course( $comment_id, $status ) {
|
662 |
|
663 |
if ( empty( $_POST['comment-post-item-course'] ) ) {
|
664 |
return;
|
670 |
$curd->load( $course );
|
671 |
}
|
672 |
|
673 |
+
add_action( 'comment_post', 'learn_press_force_refresh_course', 1000, 2 );*/
|
674 |
|
675 |
/**
|
676 |
* @editor tungnx | comment code
|
700 |
}
|
701 |
}*/
|
702 |
|
703 |
+
/**
|
704 |
+
* @depecated 4.1.6.9
|
705 |
+
*/
|
706 |
+
/*if ( ! function_exists( 'learn_press_get_nav_course_item_url' ) ) {
|
707 |
function learn_press_get_nav_course_item_url( $course_id = null, $item_id = null, $content_only = false ) {
|
708 |
|
709 |
$course = learn_press_get_course( $course_id );
|
740 |
|
741 |
return $return;
|
742 |
}
|
743 |
+
}*/
|
744 |
|
745 |
if ( ! function_exists( 'learn_press_edit_item_link' ) ) {
|
746 |
/**
|
769 |
}
|
770 |
/**
|
771 |
* Get course id of an item by id
|
772 |
+
*
|
773 |
+
* @depecated 4.1.6.9
|
774 |
*/
|
775 |
|
776 |
if ( ! function_exists( 'learn_press_get_item_course_id' ) ) {
|
777 |
|
778 |
function learn_press_get_item_course_id( $post_id, $post_type ) {
|
779 |
+
_deprecated_function( __FUNCTION__, '4.1.6.9' );
|
780 |
+
/*global $wpdb;
|
781 |
|
782 |
// If the post is a course
|
783 |
if ( LP_COURSE_CPT == learn_press_get_post_type( $post_id ) ) {
|
809 |
if ( false === $course_id ) {
|
810 |
$query = $wpdb->prepare(
|
811 |
"
|
812 |
+
SELECT section.section_course_id
|
813 |
+
FROM {$wpdb->learnpress_sections} AS section
|
814 |
+
INNER JOIN {$wpdb->learnpress_section_items} AS item
|
815 |
+
ON item.section_id = section.section_id
|
816 |
+
WHERE item.item_id = %d
|
817 |
+
LIMIT 1
|
818 |
",
|
819 |
$post_id
|
820 |
);
|
836 |
|
837 |
}
|
838 |
|
839 |
+
return $course_id;*/
|
840 |
}
|
841 |
}
|
842 |
|
957 |
//add_filter( 'post_type_link', 'learn_press_course_item_type_link', 10, 4 );
|
958 |
|
959 |
/**
|
960 |
+
* Get grade course type can translate
|
|
|
|
|
961 |
*
|
962 |
+
* @param string $grade
|
963 |
+
* @param bool $echo
|
964 |
*
|
965 |
+
* @return mixed|void
|
|
|
966 |
*/
|
967 |
+
function learn_press_course_grade_html( string $grade = '', bool $echo = true ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
968 |
switch ( $grade ) {
|
969 |
case 'passed':
|
970 |
$html = __( 'Passed', 'learnpress' );
|
979 |
$html = $grade;
|
980 |
break;
|
981 |
}
|
|
|
|
|
982 |
|
983 |
// @since 3.0.0
|
984 |
$html = apply_filters( 'learn-press/course/grade-html', $html, $grade );
|
985 |
|
986 |
if ( $echo ) {
|
987 |
+
echo esc_html( $html );
|
988 |
}
|
989 |
|
990 |
return $html;
|
@@ -127,7 +127,7 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
|
|
127 |
* @return mixed|WP_Error
|
128 |
* @since 3.0.0
|
129 |
*/
|
130 |
-
public function
|
131 |
|
132 |
if ( ! $course_id ) {
|
133 |
return new WP_Error( __( '<p>Op! ID not found</p>', 'learnpress' ) );
|
@@ -214,6 +214,8 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
|
|
214 |
}
|
215 |
}
|
216 |
|
|
|
|
|
217 |
return $new_course_id;
|
218 |
}
|
219 |
}
|
@@ -221,6 +223,111 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
|
|
221 |
return false;
|
222 |
}
|
223 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
224 |
/**
|
225 |
* Load course data
|
226 |
*
|
@@ -229,7 +336,7 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
|
|
229 |
* @return mixed
|
230 |
*/
|
231 |
public function load( &$course ) {
|
232 |
-
$this->read_course_curriculum( $course->get_id() );
|
233 |
|
234 |
return $course;
|
235 |
}
|
@@ -242,15 +349,9 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
|
|
242 |
* @param bool $publish_only
|
243 |
*
|
244 |
* @return array
|
|
|
245 |
*/
|
246 |
-
public function read_course_items( $course_id, $publish_only = true, $section_ids = array() ) {
|
247 |
-
// Tungnx: Comment because make not work with WPML.
|
248 |
-
/*static $results = null;
|
249 |
-
|
250 |
-
if ( ! is_null( $results ) ) {
|
251 |
-
return $results;
|
252 |
-
}*/
|
253 |
-
|
254 |
global $wpdb;
|
255 |
$where = '';
|
256 |
|
@@ -298,7 +399,28 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
|
|
298 |
$results = $wpdb->get_results( $query );
|
299 |
|
300 |
return $results;
|
301 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
302 |
|
303 |
/**
|
304 |
* Get all courses that contains an item by item id.
|
@@ -331,7 +453,10 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
|
|
331 |
return $wpdb->get_col( $query );
|
332 |
}
|
333 |
|
334 |
-
|
|
|
|
|
|
|
335 |
|
336 |
if ( empty( $item['args']['course_id'] ) ) {
|
337 |
return false;
|
@@ -386,7 +511,7 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
|
|
386 |
}
|
387 |
|
388 |
return false;
|
389 |
-
}
|
390 |
|
391 |
/**
|
392 |
* Read curriculum of a course from db into cache.
|
@@ -395,7 +520,7 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
|
|
395 |
*
|
396 |
* @return array|mixed
|
397 |
*/
|
398 |
-
public function read_course_curriculum( $course_id ) {
|
399 |
|
400 |
if ( learn_press_get_post_type( $course_id ) != LP_COURSE_CPT ) {
|
401 |
return false;
|
@@ -405,12 +530,12 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
|
|
405 |
return false;
|
406 |
}
|
407 |
|
408 |
-
if ( $
|
409 |
return $this->read_course_items( $course_id );
|
410 |
}
|
411 |
|
412 |
return false;
|
413 |
-
}
|
414 |
|
415 |
/**
|
416 |
* Get sections of course
|
@@ -422,14 +547,14 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
|
|
422 |
* @version 4.0.0
|
423 |
*
|
424 |
*/
|
425 |
-
public function get_course_sections( $course_id, $return = '' ) {
|
426 |
// if ( false === ( $sections = LP_Object_Cache::get( $course_id, 'learn-press/course-sections' ) ) ) {
|
427 |
$sections = $this->read_course_sections( $course_id );
|
428 |
// }
|
429 |
|
430 |
// return $return === 'ids' ? LP_Object_Cache::get( $course_id, 'learn-press/course-sections-ids' ) : $sections;
|
431 |
return $return === 'ids' ? LP_Course_Utils::get_cached_db_sections( $course_id, 'ids' ) : $sections;
|
432 |
-
}
|
433 |
|
434 |
/**
|
435 |
* Retrieve total sections of a course.
|
@@ -499,8 +624,9 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
|
|
499 |
*
|
500 |
* @return mixed|array
|
501 |
* @version 4.0.0
|
|
|
502 |
*/
|
503 |
-
public function read_course_sections( $course_id ) {
|
504 |
global $wpdb;
|
505 |
|
506 |
settype( $course_id, 'array' );
|
@@ -536,7 +662,7 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
|
|
536 |
}
|
537 |
|
538 |
return $first_course_sections;
|
539 |
-
}
|
540 |
|
541 |
/**
|
542 |
* Remove lesson, quiz from course's curriculum.
|
@@ -791,231 +917,5 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
|
|
791 |
|
792 |
return $wpdb->get_col( $query );
|
793 |
}
|
794 |
-
|
795 |
-
/**
|
796 |
-
* Get popular courses.
|
797 |
-
*
|
798 |
-
* @param array $args
|
799 |
-
*
|
800 |
-
* @return array
|
801 |
-
* @author tungnx
|
802 |
-
* @version 1.0.0
|
803 |
-
* @depecated 4.1.6.4
|
804 |
-
*/
|
805 |
-
/*public function get_popular_courses( array $args = array() ): array {
|
806 |
-
$lp_db = LP_Course_DB::getInstance();
|
807 |
-
|
808 |
-
$filter = new LP_Course_Filter();
|
809 |
-
$filter->limit = $args['limit'];
|
810 |
-
|
811 |
-
return $lp_db->get_popular_courses( $filter );
|
812 |
-
}*/
|
813 |
-
|
814 |
-
/**
|
815 |
-
* Get popular courses.
|
816 |
-
*
|
817 |
-
* @param array $args
|
818 |
-
*
|
819 |
-
* @return array
|
820 |
-
* @editor tungnx
|
821 |
-
* @modify 4.1.4 - comment - not use
|
822 |
-
*/
|
823 |
-
/*public function get_popular_courses_bk( $args = array() ) {
|
824 |
-
global $wpdb;
|
825 |
-
|
826 |
-
$limit = ! empty( $args['limit'] ) ? $args['limit'] : - 1;
|
827 |
-
$order = ! empty( $args['order'] ) ? $args['order'] : 'DESC';
|
828 |
-
|
829 |
-
if ( $limit <= 0 ) {
|
830 |
-
$limit = 0;
|
831 |
-
}
|
832 |
-
|
833 |
-
$query = apply_filters(
|
834 |
-
'learn-press/course-curd/query-popular-courses',
|
835 |
-
$wpdb->prepare(
|
836 |
-
"
|
837 |
-
SELECT DISTINCT p.ID, COUNT(*) AS number_enrolled
|
838 |
-
FROM {$wpdb->prefix}learnpress_user_items ui
|
839 |
-
INNER JOIN {$wpdb->posts} p ON p.ID = ui.item_id
|
840 |
-
WHERE ui.item_type = %s
|
841 |
-
AND ( ui.status = %s OR ui.status = %s )
|
842 |
-
AND p.post_status = %s
|
843 |
-
ORDER BY number_enrolled {$order}
|
844 |
-
LIMIT %d
|
845 |
-
",
|
846 |
-
LP_COURSE_CPT,
|
847 |
-
'enrolled',
|
848 |
-
'finished',
|
849 |
-
'publish',
|
850 |
-
$limit
|
851 |
-
)
|
852 |
-
);
|
853 |
-
|
854 |
-
return $wpdb->get_col( $query );
|
855 |
-
}*/
|
856 |
-
|
857 |
-
/**
|
858 |
-
* @param int|array $course_id
|
859 |
-
* @param string|array $statuses
|
860 |
-
*
|
861 |
-
* @return int
|
862 |
-
* @editor tungnx
|
863 |
-
* @modify 4.1.4 - comment - not use
|
864 |
-
*/
|
865 |
-
/*public function count_by_orders( $course_id, $statuses = 'completed' ) {
|
866 |
-
return $this->count_by_orders2( $course_id, $statuses );
|
867 |
-
global $wpdb;
|
868 |
-
|
869 |
-
settype( $statuses, 'array' );
|
870 |
-
$statuses_with_prefix = array();
|
871 |
-
|
872 |
-
foreach ( $statuses as $k => $v ) {
|
873 |
-
if ( ! preg_match( '/^lp-/', $v ) ) {
|
874 |
-
$statuses_with_prefix[ $k ] = 'lp-' . $v;
|
875 |
-
}
|
876 |
-
}
|
877 |
-
$course_ids = $course_id;
|
878 |
-
settype( $course_ids, 'array' );
|
879 |
-
$fetch_ids = array();
|
880 |
-
|
881 |
-
foreach ( $course_ids as $course_id ) {
|
882 |
-
|
883 |
-
if ( LP_COURSE_CPT !== get_post_type( $course_id ) ) {
|
884 |
-
continue;
|
885 |
-
}
|
886 |
-
|
887 |
-
if ( false !== ( $count = LP_Object_Cache::get(
|
888 |
-
'course-' . $course_id,
|
889 |
-
'learn-press/course-orders'
|
890 |
-
) ) ) {
|
891 |
-
continue;
|
892 |
-
} else {
|
893 |
-
LP_Object_Cache::set( 'course-' . $course_id, 0, 'learn-press/course-orders' );
|
894 |
-
}
|
895 |
-
|
896 |
-
$fetch_ids[] = $course_id;
|
897 |
-
}
|
898 |
-
|
899 |
-
if ( $fetch_ids ) {
|
900 |
-
$in_clause = join( ',', array_fill( 0, sizeof( $statuses_with_prefix ), '%s' ) );
|
901 |
-
$in_courses_clause = join( ',', array_fill( 0, sizeof( $fetch_ids ), '%d' ) );
|
902 |
-
$query_args = array_merge(
|
903 |
-
array(
|
904 |
-
'_course_id',
|
905 |
-
LP_ORDER_CPT,
|
906 |
-
),
|
907 |
-
$statuses_with_prefix,
|
908 |
-
$fetch_ids
|
909 |
-
);
|
910 |
-
|
911 |
-
$query = $wpdb->prepare(
|
912 |
-
"
|
913 |
-
SELECT oim.meta_value cid, COUNT(oim.meta_id) `count`
|
914 |
-
FROM {$wpdb->learnpress_order_itemmeta} oim
|
915 |
-
INNER JOIN {$wpdb->learnpress_order_items} oi ON oi.order_item_id = oim.learnpress_order_item_id
|
916 |
-
AND oim.meta_key = %s
|
917 |
-
INNER JOIN {$wpdb->posts} o ON o.ID = oi.order_id
|
918 |
-
WHERE o.post_type = %s
|
919 |
-
AND o.post_status IN ($in_clause)
|
920 |
-
AND oim.meta_value IN ($in_courses_clause)
|
921 |
-
GROUP BY oim.meta_value
|
922 |
-
",
|
923 |
-
$query_args
|
924 |
-
);
|
925 |
-
|
926 |
-
if ( $rows = $wpdb->get_results( $query ) ) {
|
927 |
-
foreach ( $rows as $row ) {
|
928 |
-
if ( empty( $row->cid ) ) {
|
929 |
-
continue;
|
930 |
-
}
|
931 |
-
LP_Object_Cache::set(
|
932 |
-
'course-' . $row->cid,
|
933 |
-
intval( $row->count ),
|
934 |
-
'learn-press/course-orders'
|
935 |
-
);
|
936 |
-
}
|
937 |
-
}
|
938 |
-
}
|
939 |
-
|
940 |
-
$course_id = reset( $course_ids );
|
941 |
-
|
942 |
-
return LP_Object_Cache::get( 'course-' . $course_id, 'learn-press/course-orders' );
|
943 |
-
}*/
|
944 |
-
|
945 |
-
/**
|
946 |
-
* @param int|array $course_id
|
947 |
-
* @param string|array $statuses
|
948 |
-
*
|
949 |
-
* @return int
|
950 |
-
* @editor tungnx
|
951 |
-
* @modify 4.1.4 - comment - not use
|
952 |
-
*/
|
953 |
-
/*public function count_by_orders2( $course_id, $statuses = 'completed' ) {
|
954 |
-
global $wpdb;
|
955 |
-
|
956 |
-
settype( $statuses, 'array' );
|
957 |
-
$statuses_with_prefix = array();
|
958 |
-
|
959 |
-
foreach ( $statuses as $k => $v ) {
|
960 |
-
if ( ! preg_match( '/^lp-/', $v ) ) {
|
961 |
-
$statuses_with_prefix[ $k ] = 'lp-' . $v;
|
962 |
-
}
|
963 |
-
}
|
964 |
-
$course_ids = $course_id;
|
965 |
-
settype( $course_ids, 'array' );
|
966 |
-
$fetch_ids = array();
|
967 |
-
$all_statuses = learn_press_get_order_statuses( false, true );
|
968 |
-
|
969 |
-
foreach ( $course_ids as $course_id ) {
|
970 |
-
|
971 |
-
if ( LP_COURSE_CPT !== get_post_type( $course_id ) ) {
|
972 |
-
continue;
|
973 |
-
}
|
974 |
-
|
975 |
-
if ( ! metadata_exists( 'post', $course_id, 'order-' . $all_statuses[0] ) ) {
|
976 |
-
$fetch_ids[] = $course_id;
|
977 |
-
}
|
978 |
-
}
|
979 |
-
|
980 |
-
if ( $fetch_ids ) {
|
981 |
-
$this->update_course_orders( $fetch_ids );
|
982 |
-
}
|
983 |
-
|
984 |
-
$course_id = reset( $course_ids );
|
985 |
-
$count = 0;
|
986 |
-
foreach ( $statuses as $status ) {
|
987 |
-
$orders = get_post_meta( $course_id, 'order-' . $status, true );
|
988 |
-
if ( $orders ) {
|
989 |
-
$count += sizeof( $orders );
|
990 |
-
}
|
991 |
-
}
|
992 |
-
|
993 |
-
return $count;
|
994 |
-
}*/
|
995 |
-
|
996 |
-
/**
|
997 |
-
* @param int|array $course_id
|
998 |
-
*
|
999 |
-
* @return int
|
1000 |
-
* @deprecated
|
1001 |
-
* @editor tungnx
|
1002 |
-
* @modify 4.1.4 - comment - not use
|
1003 |
-
*/
|
1004 |
-
/*public function count_enrolled_users_by_orders( $course_id ) {
|
1005 |
-
_deprecated_function( __FUNCTION__, '4.1.4' );
|
1006 |
-
$completed = get_post_meta( $course_id, 'order-completed', true );
|
1007 |
-
$processing = get_post_meta( $course_id, 'order-processing', true );
|
1008 |
-
|
1009 |
-
return absint( $completed ) + absint( $processing );
|
1010 |
-
|
1011 |
-
$statuses = array( 'completed', 'processing' );
|
1012 |
-
$count = $this->count_by_orders( $course_id, $statuses );
|
1013 |
-
|
1014 |
-
return $count;
|
1015 |
-
}*/
|
1016 |
-
|
1017 |
-
/*public function update_course_orders( $courses ) {
|
1018 |
-
LP_Repair_Database::instance()->sync_course_orders();
|
1019 |
-
}*/
|
1020 |
}
|
1021 |
}
|
127 |
* @return mixed|WP_Error
|
128 |
* @since 3.0.0
|
129 |
*/
|
130 |
+
public function duplicate_bk( &$course_id, $args = array() ) {
|
131 |
|
132 |
if ( ! $course_id ) {
|
133 |
return new WP_Error( __( '<p>Op! ID not found</p>', 'learnpress' ) );
|
214 |
}
|
215 |
}
|
216 |
|
217 |
+
do_action( 'learn-press/after-duplicate', $course_id, $new_course_id, $args );
|
218 |
+
|
219 |
return $new_course_id;
|
220 |
}
|
221 |
}
|
223 |
return false;
|
224 |
}
|
225 |
|
226 |
+
/**
|
227 |
+
* Duplicate course.
|
228 |
+
*
|
229 |
+
* @param int $course_id
|
230 |
+
* @param array $args
|
231 |
+
*
|
232 |
+
* @return int|WP_Error
|
233 |
+
* @since 3.0.0
|
234 |
+
* @version 1.0.2
|
235 |
+
*/
|
236 |
+
public function duplicate( &$course_id, $args = array() ) {
|
237 |
+
$course_id_new = 0;
|
238 |
+
|
239 |
+
try {
|
240 |
+
if ( ! current_user_can( 'edit_posts' ) ) {
|
241 |
+
throw new Exception( 'Sorry! You don\'t have permission to duplicate this course' );
|
242 |
+
}
|
243 |
+
|
244 |
+
$course_origin = learn_press_get_course( $course_id );
|
245 |
+
if ( ! $course_origin ) {
|
246 |
+
throw new Exception( 'Course is invalid' );
|
247 |
+
}
|
248 |
+
|
249 |
+
$course_id_new = learn_press_duplicate_post( $course_id, $args );
|
250 |
+
|
251 |
+
if ( is_wp_error( $course_id_new ) ) {
|
252 |
+
return $course_id_new;
|
253 |
+
}
|
254 |
+
|
255 |
+
$this->duplicate_sections_and_items( $course_id_new, $course_origin );
|
256 |
+
|
257 |
+
// Call save course duplicate
|
258 |
+
//$course_post = get_post( $course_id_new );
|
259 |
+
LP_Course_Post_Type::instance()->save( $course_id_new );
|
260 |
+
|
261 |
+
do_action( 'learn-press/after-duplicate', $course_id, $course_id_new, $args );
|
262 |
+
} catch ( Throwable $e ) {
|
263 |
+
$course_id_new = new WP_Error( $e->getMessage() );
|
264 |
+
}
|
265 |
+
|
266 |
+
return $course_id_new;
|
267 |
+
}
|
268 |
+
|
269 |
+
/**
|
270 |
+
* Duplicate sections and items of course
|
271 |
+
* @param int $course_id_new
|
272 |
+
* @param LP_Course $course_origin
|
273 |
+
*/
|
274 |
+
public function duplicate_sections_and_items( $course_id_new, $course_origin ) {
|
275 |
+
// curriculum course
|
276 |
+
$curriculum = $course_origin->get_curriculum_raw();
|
277 |
+
|
278 |
+
// quiz curd
|
279 |
+
$quiz_curd = new LP_Quiz_CURD();
|
280 |
+
|
281 |
+
if ( is_array( $curriculum ) ) {
|
282 |
+
// new course section curd
|
283 |
+
$new_course_section_curd = new LP_Section_CURD( $course_id_new );
|
284 |
+
foreach ( $curriculum as $section ) {
|
285 |
+
$data = array(
|
286 |
+
'section_name' => $section['title'],
|
287 |
+
'section_course_id' => $course_id_new,
|
288 |
+
'section_order' => $section['order'],
|
289 |
+
'section_description' => $section['description'],
|
290 |
+
);
|
291 |
+
|
292 |
+
// clone sections to new course
|
293 |
+
$new_section = $new_course_section_curd->create( $data );
|
294 |
+
|
295 |
+
// get section items of original course
|
296 |
+
$items = $section['items'];
|
297 |
+
|
298 |
+
$new_items = array();
|
299 |
+
|
300 |
+
// duplicate items
|
301 |
+
if ( ! empty( $items ) ) {
|
302 |
+
foreach ( $items as $key => $item ) {
|
303 |
+
// duplicate quiz
|
304 |
+
if ( $item['type'] == LP_QUIZ_CPT ) {
|
305 |
+
$new_item_id = $quiz_curd->duplicate(
|
306 |
+
$item['id'],
|
307 |
+
array( 'post_status' => 'publish' )
|
308 |
+
);
|
309 |
+
} else {
|
310 |
+
// clone lesson
|
311 |
+
$new_item_id = learn_press_duplicate_post(
|
312 |
+
$item['id'],
|
313 |
+
array( 'post_status' => 'publish' )
|
314 |
+
);
|
315 |
+
}
|
316 |
+
|
317 |
+
// get new items data to add to section
|
318 |
+
$new_items[ $key ] = array(
|
319 |
+
'id' => $new_item_id,
|
320 |
+
'type' => $item['type'],
|
321 |
+
);
|
322 |
+
}
|
323 |
+
|
324 |
+
// add new clone items to section
|
325 |
+
$new_course_section_curd->add_items_section( $new_section['section_id'], $new_items );
|
326 |
+
}
|
327 |
+
}
|
328 |
+
}
|
329 |
+
}
|
330 |
+
|
331 |
/**
|
332 |
* Load course data
|
333 |
*
|
336 |
* @return mixed
|
337 |
*/
|
338 |
public function load( &$course ) {
|
339 |
+
// $this->read_course_curriculum( $course->get_id() );
|
340 |
|
341 |
return $course;
|
342 |
}
|
349 |
* @param bool $publish_only
|
350 |
*
|
351 |
* @return array
|
352 |
+
* @depecated 4.1.6.9
|
353 |
*/
|
354 |
+
/*public function read_course_items( $course_id, $publish_only = true, $section_ids = array() ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
355 |
global $wpdb;
|
356 |
$where = '';
|
357 |
|
399 |
$results = $wpdb->get_results( $query );
|
400 |
|
401 |
return $results;
|
402 |
+
|
403 |
+
//////////////////////////////////////////// Code new - tungnx
|
404 |
+
|
405 |
+
$items = [];
|
406 |
+
|
407 |
+
$course = learn_press_get_course( $course_id );
|
408 |
+
if ( ! $course ) {
|
409 |
+
return $items;
|
410 |
+
}
|
411 |
+
|
412 |
+
$sections_items = $course->get_full_sections_and_items_course();
|
413 |
+
foreach ( $sections_items as $section_items ) {
|
414 |
+
$section_id = $section_items->id;
|
415 |
+
|
416 |
+
foreach ( $section_items->items as $item ) {
|
417 |
+
$item->section_id = $section_id;
|
418 |
+
$items[] = $item;
|
419 |
+
}
|
420 |
+
}
|
421 |
+
|
422 |
+
return $items;
|
423 |
+
}*/
|
424 |
|
425 |
/**
|
426 |
* Get all courses that contains an item by item id.
|
453 |
return $wpdb->get_col( $query );
|
454 |
}
|
455 |
|
456 |
+
/**
|
457 |
+
* @depecated 4.1.6.9
|
458 |
+
*/
|
459 |
+
/*public static function update_items_format( $item ) {
|
460 |
|
461 |
if ( empty( $item['args']['course_id'] ) ) {
|
462 |
return false;
|
511 |
}
|
512 |
|
513 |
return false;
|
514 |
+
}*/
|
515 |
|
516 |
/**
|
517 |
* Read curriculum of a course from db into cache.
|
520 |
*
|
521 |
* @return array|mixed
|
522 |
*/
|
523 |
+
/*public function read_course_curriculum( $course_id ) {
|
524 |
|
525 |
if ( learn_press_get_post_type( $course_id ) != LP_COURSE_CPT ) {
|
526 |
return false;
|
530 |
return false;
|
531 |
}
|
532 |
|
533 |
+
if ( $this->get_course_sections( $course_id, 'ids' ) ) {
|
534 |
return $this->read_course_items( $course_id );
|
535 |
}
|
536 |
|
537 |
return false;
|
538 |
+
}*/
|
539 |
|
540 |
/**
|
541 |
* Get sections of course
|
547 |
* @version 4.0.0
|
548 |
*
|
549 |
*/
|
550 |
+
/*public function get_course_sections( $course_id, $return = '' ) {
|
551 |
// if ( false === ( $sections = LP_Object_Cache::get( $course_id, 'learn-press/course-sections' ) ) ) {
|
552 |
$sections = $this->read_course_sections( $course_id );
|
553 |
// }
|
554 |
|
555 |
// return $return === 'ids' ? LP_Object_Cache::get( $course_id, 'learn-press/course-sections-ids' ) : $sections;
|
556 |
return $return === 'ids' ? LP_Course_Utils::get_cached_db_sections( $course_id, 'ids' ) : $sections;
|
557 |
+
}*/
|
558 |
|
559 |
/**
|
560 |
* Retrieve total sections of a course.
|
624 |
*
|
625 |
* @return mixed|array
|
626 |
* @version 4.0.0
|
627 |
+
* @depecated 4.1.6.9
|
628 |
*/
|
629 |
+
/*public function read_course_sections( $course_id ) {
|
630 |
global $wpdb;
|
631 |
|
632 |
settype( $course_id, 'array' );
|
662 |
}
|
663 |
|
664 |
return $first_course_sections;
|
665 |
+
}*/
|
666 |
|
667 |
/**
|
668 |
* Remove lesson, quiz from course's curriculum.
|
917 |
|
918 |
return $wpdb->get_col( $query );
|
919 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
920 |
}
|
921 |
}
|
@@ -84,11 +84,14 @@ class LP_Helper_CURD {
|
|
84 |
}
|
85 |
|
86 |
$format = array_fill( 0, sizeof( $post_ids ), '%d' );
|
87 |
-
$query = $wpdb->prepare(
|
|
|
88 |
SELECT *
|
89 |
FROM {$wpdb->posts}
|
90 |
-
WHERE ID IN(" . join( ',', $format ) .
|
91 |
-
|
|
|
|
|
92 |
|
93 |
if ( false === ( $post_types = LP_Object_Cache::get( 'post-types', 'learn-press' ) ) ) {
|
94 |
$post_types = array();
|
84 |
}
|
85 |
|
86 |
$format = array_fill( 0, sizeof( $post_ids ), '%d' );
|
87 |
+
$query = $wpdb->prepare(
|
88 |
+
"
|
89 |
SELECT *
|
90 |
FROM {$wpdb->posts}
|
91 |
+
WHERE ID IN(" . join( ',', $format ) . ')
|
92 |
+
',
|
93 |
+
$post_ids
|
94 |
+
);
|
95 |
|
96 |
if ( false === ( $post_types = LP_Object_Cache::get( 'post-types', 'learn-press' ) ) ) {
|
97 |
$post_types = array();
|
@@ -81,9 +81,6 @@ if ( ! class_exists( 'LP_Lesson_CURD' ) ) {
|
|
81 |
// course curd
|
82 |
$curd = new LP_Course_CURD();
|
83 |
|
84 |
-
// allow hook
|
85 |
-
do_action( 'learn-press/before-delete-lesson', $lesson_id );
|
86 |
-
|
87 |
// remove lesson from course items
|
88 |
$curd->remove_item( $lesson_id );
|
89 |
}
|
@@ -108,8 +105,9 @@ if ( ! class_exists( 'LP_Lesson_CURD' ) ) {
|
|
108 |
return new WP_Error( __( '<p>Op! The lesson does not exist</p>', 'learnpress' ) );
|
109 |
}
|
110 |
|
|
|
111 |
// ensure that user can create lesson
|
112 |
-
if ( !
|
113 |
return new WP_Error( __( '<p>Sorry! You don\'t have permission to duplicate this lesson</p>', 'learnpress' ) );
|
114 |
}
|
115 |
|
@@ -119,6 +117,7 @@ if ( ! class_exists( 'LP_Lesson_CURD' ) ) {
|
|
119 |
if ( ! $new_lesson_id || is_wp_error( $new_lesson_id ) ) {
|
120 |
return new WP_Error( __( '<p>Sorry! Failed to duplicate lesson!</p>', 'learnpress' ) );
|
121 |
} else {
|
|
|
122 |
return $new_lesson_id;
|
123 |
}
|
124 |
}
|
81 |
// course curd
|
82 |
$curd = new LP_Course_CURD();
|
83 |
|
|
|
|
|
|
|
84 |
// remove lesson from course items
|
85 |
$curd->remove_item( $lesson_id );
|
86 |
}
|
105 |
return new WP_Error( __( '<p>Op! The lesson does not exist</p>', 'learnpress' ) );
|
106 |
}
|
107 |
|
108 |
+
$user_id = $args['meta_input']['_lp_user'] ?? get_current_user_id();
|
109 |
// ensure that user can create lesson
|
110 |
+
if ( ! user_can( $user_id, 'edit_posts' ) ) {
|
111 |
return new WP_Error( __( '<p>Sorry! You don\'t have permission to duplicate this lesson</p>', 'learnpress' ) );
|
112 |
}
|
113 |
|
117 |
if ( ! $new_lesson_id || is_wp_error( $new_lesson_id ) ) {
|
118 |
return new WP_Error( __( '<p>Sorry! Failed to duplicate lesson!</p>', 'learnpress' ) );
|
119 |
} else {
|
120 |
+
do_action( 'learn-press/after-duplicate', $lesson_id, $new_lesson_id, $args );
|
121 |
return $new_lesson_id;
|
122 |
}
|
123 |
}
|
@@ -183,6 +183,8 @@ if ( ! class_exists( 'LP_Question_CURD' ) ) {
|
|
183 |
// duplicate answer
|
184 |
$this->duplicate_answer( $question_id, $new_question_id );
|
185 |
|
|
|
|
|
186 |
return $new_question_id;
|
187 |
}
|
188 |
}
|
183 |
// duplicate answer
|
184 |
$this->duplicate_answer( $question_id, $new_question_id );
|
185 |
|
186 |
+
do_action( 'learn-press/after-duplicate', $question_id, $new_question_id, $args );
|
187 |
+
|
188 |
return $new_question_id;
|
189 |
}
|
190 |
}
|
@@ -193,6 +193,8 @@ if ( ! function_exists( 'LP_Quiz_CURD' ) ) {
|
|
193 |
}
|
194 |
}
|
195 |
|
|
|
|
|
196 |
return $new_quiz_id;
|
197 |
}
|
198 |
|
193 |
}
|
194 |
}
|
195 |
|
196 |
+
do_action( 'learn-press/after-duplicate', $quiz_id, $new_quiz_id, $args );
|
197 |
+
|
198 |
return $new_quiz_id;
|
199 |
}
|
200 |
|
@@ -33,28 +33,30 @@ class LP_Section_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
|
|
33 |
* @since 3.0.0
|
34 |
*/
|
35 |
public function create( &$args ) {
|
36 |
-
|
37 |
global $wpdb;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
$wpdb->insert(
|
50 |
-
$wpdb->learnpress_sections,
|
51 |
-
$insert_data,
|
52 |
-
array( '%d', '%s', '%d', '%s' )
|
53 |
-
);
|
54 |
-
$section['section_id'] = $wpdb->insert_id;
|
55 |
-
|
56 |
-
// allow hook
|
57 |
-
do_action( 'learn-press/after-create-section', $this->course_id, $section );
|
58 |
|
59 |
return $section;
|
60 |
}
|
@@ -226,6 +228,7 @@ class LP_Section_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
|
|
226 |
* @param int $section_id
|
227 |
*
|
228 |
* @return array
|
|
|
229 |
*/
|
230 |
public function read_items( $section_id ) {
|
231 |
global $wpdb;
|
@@ -248,37 +251,37 @@ class LP_Section_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
|
|
248 |
return $wpdb->get_col( $query );
|
249 |
}
|
250 |
|
251 |
-
/**
|
252 |
-
* @param $course_id
|
253 |
-
*
|
254 |
-
* @return int
|
255 |
-
*/
|
256 |
-
private function get_last_number_order( $course_id ) {
|
257 |
-
global $wpdb;
|
258 |
-
|
259 |
-
$query = $wpdb->prepare( "SELECT MAX(s.section_order) FROM {$wpdb->prefix}learnpress_sections AS s WHERE s.section_course_id = %d", $course_id );
|
260 |
-
$result = intval( $wpdb->get_var( $query ) );
|
261 |
-
|
262 |
-
return ( $result > 0 ) ? $result : 1;
|
263 |
-
}
|
264 |
-
|
265 |
/**
|
266 |
* Update sort sections.
|
267 |
*
|
268 |
-
* @param
|
269 |
*
|
270 |
* @return array
|
271 |
-
* @version 4.0.
|
272 |
*/
|
273 |
-
public function
|
274 |
global $wpdb;
|
275 |
|
276 |
-
|
277 |
-
|
|
|
|
|
278 |
|
279 |
$orders = array();
|
280 |
|
281 |
-
foreach ( $
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
282 |
$order = $index + 1;
|
283 |
|
284 |
$orders[ $section_id ] = $order;
|
@@ -296,9 +299,9 @@ class LP_Section_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
|
|
296 |
}
|
297 |
|
298 |
$this->get_section_items( $section_id );
|
299 |
-
}
|
300 |
|
301 |
-
LP_Course_Utils::set_cache_db_sections( $this->course_id, $new_sections );
|
302 |
|
303 |
return $orders;
|
304 |
}
|
@@ -328,7 +331,7 @@ class LP_Section_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
|
|
328 |
}
|
329 |
}
|
330 |
|
331 |
-
LP_Object_Cache::set( 'course-' . $this->course_id . '-' . $section_id, $return, 'learn-press/course-section-items' );
|
332 |
|
333 |
return $return;
|
334 |
}
|
@@ -455,7 +458,7 @@ class LP_Section_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
|
|
455 |
// $order ++;
|
456 |
}
|
457 |
|
458 |
-
LP_Object_Cache::set( 'course-' . $this->course_id . '-' . $section_id, $all_items, 'learn-press/course-section-items' );
|
459 |
|
460 |
return $result;
|
461 |
}
|
@@ -502,9 +505,11 @@ class LP_Section_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
|
|
502 |
*
|
503 |
* @return bool
|
504 |
* @version 4.0.0
|
|
|
505 |
*/
|
506 |
public function update_final_item() {
|
507 |
-
|
|
|
508 |
|
509 |
if ( ! $sections ) {
|
510 |
return false;
|
@@ -542,7 +547,7 @@ class LP_Section_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
|
|
542 |
}
|
543 |
}
|
544 |
|
545 |
-
return true
|
546 |
|
547 |
}
|
548 |
|
@@ -630,8 +635,6 @@ class LP_Section_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
|
|
630 |
}
|
631 |
}
|
632 |
|
633 |
-
LP_Object_Cache::set( 'course-' . $this->course_id . '-' . $section_id, $items, 'learn-press/course-section-items' );
|
634 |
-
|
635 |
return $items;
|
636 |
}
|
637 |
|
33 |
* @since 3.0.0
|
34 |
*/
|
35 |
public function create( &$args ) {
|
|
|
36 |
global $wpdb;
|
37 |
+
$section = [];
|
38 |
+
|
39 |
+
try {
|
40 |
+
$section = $this->parse( $args );
|
41 |
+
$section = stripslashes_deep( $section );
|
42 |
+
$last_section_order_number = LP_Section_DB::getInstance()->get_last_number_order( $section['section_course_id'] );
|
43 |
+
$section['section_order'] = $last_section_order_number + 1;
|
44 |
+
$insert_data = array(
|
45 |
+
'section_course_id' => $this->course_id,
|
46 |
+
'section_name' => $section['section_name'],
|
47 |
+
'section_order' => $section['section_order'],
|
48 |
+
'section_description' => $section['section_description'],
|
49 |
+
);
|
50 |
|
51 |
+
$wpdb->insert(
|
52 |
+
$wpdb->learnpress_sections,
|
53 |
+
$insert_data,
|
54 |
+
array( '%d', '%s', '%d', '%s' )
|
55 |
+
);
|
56 |
+
$section['section_id'] = $wpdb->insert_id;
|
57 |
+
} catch ( Throwable $e ) {
|
58 |
+
error_log( $e->getMessage() );
|
59 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
|
61 |
return $section;
|
62 |
}
|
228 |
* @param int $section_id
|
229 |
*
|
230 |
* @return array
|
231 |
+
* @depecated 4.1.6.9 Remove when release Addon Frontend Editor 4.0.1
|
232 |
*/
|
233 |
public function read_items( $section_id ) {
|
234 |
global $wpdb;
|
251 |
return $wpdb->get_col( $query );
|
252 |
}
|
253 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
254 |
/**
|
255 |
* Update sort sections.
|
256 |
*
|
257 |
+
* @param string[] $sections_new_order
|
258 |
*
|
259 |
* @return array
|
260 |
+
* @version 4.0.1
|
261 |
*/
|
262 |
+
public function update_sections_order( $sections_new_order ) {
|
263 |
global $wpdb;
|
264 |
|
265 |
+
//$current_sections = LP_Course_Utils::get_cached_db_sections( $this->course_id );
|
266 |
+
//$new_sections = array();
|
267 |
+
//$course = learn_press_get_course( $this->course_id );
|
268 |
+
//$sections_items = $course->get_full_sections_and_items_course();
|
269 |
|
270 |
$orders = array();
|
271 |
|
272 |
+
foreach ( $sections_new_order as $order_new => $section_id ) {
|
273 |
+
$order_new = $order_new + 1;
|
274 |
+
|
275 |
+
$wpdb->update(
|
276 |
+
$wpdb->learnpress_sections,
|
277 |
+
array( 'section_order' => $order_new ),
|
278 |
+
array( 'section_id' => $section_id )
|
279 |
+
);
|
280 |
+
|
281 |
+
// $this->get_section_items( $section_id );
|
282 |
+
}
|
283 |
+
|
284 |
+
/*foreach ( $sections as $index => $section_id ) {
|
285 |
$order = $index + 1;
|
286 |
|
287 |
$orders[ $section_id ] = $order;
|
299 |
}
|
300 |
|
301 |
$this->get_section_items( $section_id );
|
302 |
+
}*/
|
303 |
|
304 |
+
//LP_Course_Utils::set_cache_db_sections( $this->course_id, $new_sections );
|
305 |
|
306 |
return $orders;
|
307 |
}
|
331 |
}
|
332 |
}
|
333 |
|
334 |
+
// LP_Object_Cache::set( 'course-' . $this->course_id . '-' . $section_id, $return, 'learn-press/course-section-items' );
|
335 |
|
336 |
return $return;
|
337 |
}
|
458 |
// $order ++;
|
459 |
}
|
460 |
|
461 |
+
// LP_Object_Cache::set( 'course-' . $this->course_id . '-' . $section_id, $all_items, 'learn-press/course-section-items' );
|
462 |
|
463 |
return $result;
|
464 |
}
|
505 |
*
|
506 |
* @return bool
|
507 |
* @version 4.0.0
|
508 |
+
* @depecated 4.1.6.9
|
509 |
*/
|
510 |
public function update_final_item() {
|
511 |
+
_deprecated_function( __FUNCTION__, '4.1.6.9' );
|
512 |
+
/*$sections = LP_Course_Utils::get_cached_db_sections( $this->course_id );
|
513 |
|
514 |
if ( ! $sections ) {
|
515 |
return false;
|
547 |
}
|
548 |
}
|
549 |
|
550 |
+
return true;*/
|
551 |
|
552 |
}
|
553 |
|
635 |
}
|
636 |
}
|
637 |
|
|
|
|
|
638 |
return $items;
|
639 |
}
|
640 |
|
@@ -710,10 +710,6 @@ class LP_User_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
|
|
710 |
return $last_user_course;
|
711 |
}
|
712 |
|
713 |
-
public function get_course_access_level( $user_id, $course_id ) {
|
714 |
-
|
715 |
-
}
|
716 |
-
|
717 |
/**
|
718 |
* Load user items by item_id of course item
|
719 |
*
|
@@ -950,157 +946,158 @@ class LP_User_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
|
|
950 |
* @param int $course_id
|
951 |
*
|
952 |
* @return mixed
|
|
|
953 |
*/
|
954 |
-
public function update_user_item( $user_id, $item_id, $item_data = array(), $course_id = 0 ) {
|
955 |
-
|
956 |
-
|
957 |
-
|
958 |
-
|
959 |
-
|
960 |
-
|
961 |
-
|
962 |
-
|
963 |
-
|
964 |
-
|
965 |
-
|
966 |
-
|
967 |
-
|
968 |
-
|
969 |
-
|
970 |
-
|
971 |
-
|
972 |
-
|
973 |
-
|
974 |
-
|
975 |
-
|
976 |
-
|
977 |
-
|
978 |
-
|
979 |
-
|
980 |
-
|
981 |
-
|
982 |
-
|
983 |
-
|
984 |
-
|
985 |
-
|
986 |
-
|
987 |
-
|
988 |
-
|
989 |
-
|
990 |
-
|
991 |
-
|
992 |
-
|
993 |
-
|
994 |
-
|
995 |
-
|
996 |
-
|
997 |
-
|
998 |
-
|
999 |
-
|
1000 |
-
|
1001 |
-
|
1002 |
-
|
1003 |
-
|
1004 |
-
|
1005 |
-
|
1006 |
-
|
1007 |
-
|
1008 |
-
|
1009 |
-
|
1010 |
-
|
1011 |
-
|
1012 |
-
|
1013 |
-
|
1014 |
-
|
1015 |
-
|
1016 |
-
|
1017 |
-
|
1018 |
-
|
1019 |
-
|
1020 |
-
|
1021 |
-
|
1022 |
-
|
1023 |
-
|
1024 |
-
|
1025 |
-
|
1026 |
-
|
1027 |
-
|
1028 |
-
|
1029 |
-
|
1030 |
-
|
1031 |
-
|
1032 |
-
|
1033 |
-
|
1034 |
-
|
1035 |
-
|
1036 |
-
|
1037 |
-
|
1038 |
-
|
1039 |
-
|
1040 |
-
|
1041 |
-
|
1042 |
-
|
1043 |
-
|
1044 |
-
|
1045 |
-
|
1046 |
-
|
1047 |
-
|
1048 |
-
|
1049 |
-
|
1050 |
-
|
1051 |
-
|
1052 |
-
|
1053 |
-
|
1054 |
-
|
1055 |
-
|
1056 |
-
|
1057 |
-
|
1058 |
-
|
1059 |
-
|
1060 |
-
|
1061 |
-
|
1062 |
-
|
1063 |
-
|
1064 |
-
|
1065 |
-
|
1066 |
-
|
1067 |
-
|
1068 |
-
|
1069 |
-
|
1070 |
-
|
1071 |
-
|
1072 |
-
|
1073 |
-
|
1074 |
-
|
1075 |
-
|
1076 |
-
|
1077 |
-
|
1078 |
-
|
1079 |
-
|
1080 |
-
|
1081 |
-
|
1082 |
-
|
1083 |
-
|
1084 |
-
|
1085 |
-
|
1086 |
-
|
1087 |
-
|
1088 |
-
|
1089 |
-
|
1090 |
-
|
1091 |
-
|
1092 |
-
|
1093 |
-
|
1094 |
-
|
1095 |
-
|
1096 |
-
|
1097 |
-
|
1098 |
-
|
1099 |
-
|
1100 |
-
|
1101 |
-
|
1102 |
-
|
1103 |
-
}
|
1104 |
|
1105 |
/**
|
1106 |
* Get user item from user_items tables.
|
@@ -1160,22 +1157,29 @@ class LP_User_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
|
|
1160 |
* @param int $user_item_id
|
1161 |
*
|
1162 |
* @return bool|LP_User_Item_Course
|
|
|
1163 |
*/
|
1164 |
-
public function get_user_item_course( $user_item_id ) {
|
1165 |
if ( $item = $this->get_user_item_by_id( $user_item_id, LP_COURSE_CPT ) ) {
|
1166 |
return new LP_User_Item_Course( $item );
|
1167 |
}
|
1168 |
|
1169 |
return false;
|
1170 |
-
}
|
1171 |
|
1172 |
-
|
|
|
|
|
|
|
1173 |
return learn_press_get_user_item_meta( $user_item_id, $meta_key, $single );
|
1174 |
-
}
|
1175 |
|
1176 |
-
|
|
|
|
|
|
|
1177 |
return learn_press_update_user_item_meta( $user_item_id, $meta_key, $meta_value, $prev );
|
1178 |
-
}
|
1179 |
|
1180 |
/**
|
1181 |
* Update user item data by id.
|
@@ -1929,7 +1933,7 @@ class LP_User_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
|
|
1929 |
$select = 'SELECT * ';
|
1930 |
$from = "FROM {$wpdb->learnpress_user_items} ui";
|
1931 |
$join = '';
|
1932 |
-
$where
|
1933 |
$where .= $wpdb->prepare( 'AND user_id = %d ', $user_id );
|
1934 |
$where .= $wpdb->prepare( 'AND item_type = %s ', LP_QUIZ_CPT );
|
1935 |
$where .= $wpdb->prepare( 'AND status IN (%s, %s) ', LP_ITEM_COMPLETED, LP_ITEM_STARTED );
|
@@ -2002,7 +2006,8 @@ class LP_User_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
|
|
2002 |
|
2003 |
list( $select, $from, $join, $where, $having, $orderby ) = array_values( $query_parts );
|
2004 |
|
2005 |
-
$sql = $wpdb->prepare(
|
|
|
2006 |
SELECT * FROM (
|
2007 |
SELECT *
|
2008 |
FROM
|
@@ -2017,7 +2022,10 @@ class LP_User_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
|
|
2017 |
) AS G_User_Item
|
2018 |
ORDER BY G_User_Item.user_item_id DESC
|
2019 |
LIMIT %d, %d
|
2020 |
-
",
|
|
|
|
|
|
|
2021 |
|
2022 |
$sql = "SELECT DISTINCT item_id, MAX(user_item_id) as user_item_id , user_id, item_type, start_time, end_time, status, graduation, parent_id
|
2023 |
FROM $wpdb->learnpress_user_items
|
@@ -2027,7 +2035,6 @@ WHERE user_id = $user_id
|
|
2027 |
GROUP BY item_id
|
2028 |
ORDER BY MAX(user_item_id) DESC";
|
2029 |
|
2030 |
-
|
2031 |
$items = $wpdb->get_results( $sql, ARRAY_A );
|
2032 |
|
2033 |
if ( $items ) {
|
710 |
return $last_user_course;
|
711 |
}
|
712 |
|
|
|
|
|
|
|
|
|
713 |
/**
|
714 |
* Load user items by item_id of course item
|
715 |
*
|
946 |
* @param int $course_id
|
947 |
*
|
948 |
* @return mixed
|
949 |
+
* @depecated 4.1.6.9
|
950 |
*/
|
951 |
+
// public function update_user_item( $user_id, $item_id, $item_data = array(), $course_id = 0 ) {
|
952 |
+
// global $wpdb;
|
953 |
+
//
|
954 |
+
// $user = learn_press_get_user( $user_id );
|
955 |
+
// if ( ! $user || ( $user->get_id() != $user_id ) ) {
|
956 |
+
// return false;
|
957 |
+
// }
|
958 |
+
//
|
959 |
+
// if ( array_key_exists( 'user_item_id', $item_data ) && empty( $item_data['user_item_id'] ) ) {
|
960 |
+
// $item = false;
|
961 |
+
// } else {
|
962 |
+
// if ( func_num_args() == 4 ) {
|
963 |
+
// // $item = $this->get_user_item( $user_id, $item_id, $course_id );
|
964 |
+
// $item = $this->read_course( $user_id, $course_id );
|
965 |
+
// } else {
|
966 |
+
// $item = $this->get_user_item( $user_id, $item_id );
|
967 |
+
// }
|
968 |
+
// }
|
969 |
+
//
|
970 |
+
// // Table fields
|
971 |
+
// $table_fields = array(
|
972 |
+
// 'user_id' => '%d',
|
973 |
+
// 'item_id' => '%d',
|
974 |
+
// 'ref_id' => '%d',
|
975 |
+
// 'start_time' => '%s',
|
976 |
+
// 'end_time' => '%s',
|
977 |
+
// 'item_type' => '%s',
|
978 |
+
// 'status' => '%s',
|
979 |
+
// 'ref_type' => '%s',
|
980 |
+
// 'parent_id' => '%d',
|
981 |
+
// );
|
982 |
+
//
|
983 |
+
// // Data and format
|
984 |
+
// $data = array();
|
985 |
+
// $data_format = array();
|
986 |
+
//
|
987 |
+
// // Update it later...
|
988 |
+
// $new_status = false;
|
989 |
+
// if ( array_key_exists( 'status', $item_data ) && $item_data['status'] != $item['status'] ) {
|
990 |
+
// $new_status = $item_data['status'];
|
991 |
+
// unset( $item_data['status'] );
|
992 |
+
// }
|
993 |
+
//
|
994 |
+
// // Build data and data format
|
995 |
+
// foreach ( $item_data as $field => $value ) {
|
996 |
+
// if ( ! empty( $table_fields[ $field ] ) ) {
|
997 |
+
// $data[ $field ] = $value;
|
998 |
+
// $data_format[ $field ] = $table_fields[ $field ];
|
999 |
+
// }
|
1000 |
+
// }
|
1001 |
+
//
|
1002 |
+
// $data['user_id'] = $user_id;
|
1003 |
+
// $data['item_id'] = $item_id;
|
1004 |
+
//
|
1005 |
+
// if ( $course_id ) {
|
1006 |
+
// $data['ref_id'] = $course_id;
|
1007 |
+
// $data['ref_type'] = LP_COURSE_CPT;
|
1008 |
+
// } else {
|
1009 |
+
// $data['item_type'] = LP_COURSE_CPT;
|
1010 |
+
// }
|
1011 |
+
//
|
1012 |
+
// foreach ( $data as $k => $v ) {
|
1013 |
+
// $data_format[ $k ] = $table_fields[ $k ];
|
1014 |
+
// }
|
1015 |
+
//
|
1016 |
+
// $data_format = array_values( $data_format );
|
1017 |
+
//
|
1018 |
+
// if ( ! $item || empty( $item['user_item_id'] ) ) {
|
1019 |
+
// if ( $data['ref_type'] === LP_COURSE_CPT && empty( $data['parent_id'] ) ) {
|
1020 |
+
// return false;
|
1021 |
+
// }
|
1022 |
+
//
|
1023 |
+
// $wpdb->insert(
|
1024 |
+
// $wpdb->learnpress_user_items,
|
1025 |
+
// $data,
|
1026 |
+
// $data_format
|
1027 |
+
// );
|
1028 |
+
// $user_item_id = $wpdb->insert_id;
|
1029 |
+
// $item = $this->get_user_item_by_id( $user_item_id );
|
1030 |
+
// } else {
|
1031 |
+
// $user_item_id = $item['user_item_id'];
|
1032 |
+
// $wpdb->update(
|
1033 |
+
// $wpdb->learnpress_user_items,
|
1034 |
+
// $data,
|
1035 |
+
// array( 'user_item_id' => $user_item_id ),
|
1036 |
+
// $data_format,
|
1037 |
+
// array( '%d' )
|
1038 |
+
// );
|
1039 |
+
//
|
1040 |
+
// $item = array_merge( $item, $data );
|
1041 |
+
// }
|
1042 |
+
//
|
1043 |
+
// $is_course = ( ! $course_id ) && ( learn_press_get_post_type( $item['item_id'] ) === LP_COURSE_CPT );
|
1044 |
+
//
|
1045 |
+
// if ( $user_item_id ) {
|
1046 |
+
//
|
1047 |
+
// // Track last status if it is updated new status.
|
1048 |
+
// if ( $new_status !== false ) {
|
1049 |
+
// if ( $this->update_user_item_status( $user_item_id, $new_status ) ) {
|
1050 |
+
// $item['status'] = $new_status;
|
1051 |
+
// }
|
1052 |
+
// }
|
1053 |
+
//
|
1054 |
+
// if ( $is_course ) {
|
1055 |
+
// $course_id = $item['item_id'];
|
1056 |
+
// // Update cache to effect the change right way!
|
1057 |
+
// LP_Object_Cache::set( 'course-' . $user_id . '-' . $course_id, $item, 'learn-press/user-dcourses' );
|
1058 |
+
// } else {
|
1059 |
+
//
|
1060 |
+
// $user = learn_press_get_user( $user_id );
|
1061 |
+
// $user_course = $user->get_course_data( $course_id );
|
1062 |
+
//
|
1063 |
+
// $user_course->set_item( $item );
|
1064 |
+
//
|
1065 |
+
// // Update cache
|
1066 |
+
// $existed = false !== ( $items = LP_Object_Cache::get(
|
1067 |
+
// 'course-item-' . $user_id . '-' . $course_id . '-' . $item_id,
|
1068 |
+
// 'learn-press/user-course-items'
|
1069 |
+
// ) );
|
1070 |
+
//
|
1071 |
+
// if ( false === $items || ! empty( $items[ $user_item_id ] ) ) {
|
1072 |
+
// if ( is_array( $items ) ) {
|
1073 |
+
// $items[ $user_item_id ] = $item;
|
1074 |
+
// } else {
|
1075 |
+
// $items = array( $user_item_id => $item );
|
1076 |
+
// }
|
1077 |
+
// } else {
|
1078 |
+
// $items = array( $user_item_id => $item ) + $items;
|
1079 |
+
// }
|
1080 |
+
//
|
1081 |
+
// LP_Object_Cache::set(
|
1082 |
+
// 'course-item-' . $user_id . '-' . $course_id . '-' . $item_id,
|
1083 |
+
// $items,
|
1084 |
+
// 'learn-press/user-course-items'
|
1085 |
+
// );
|
1086 |
+
//
|
1087 |
+
// }
|
1088 |
+
//
|
1089 |
+
// wp_cache_delete( 'course-' . $user_id . '-' . $course_id, 'learn-press/user-item-object-courses' );
|
1090 |
+
//
|
1091 |
+
// /*
|
1092 |
+
// if ( $existed ) {
|
1093 |
+
// wp_cache_replace( 'course-item-' . $user_id . '-' . $course_id . '-' . $item_id, $items, 'learn-press/user-course-items' );
|
1094 |
+
// } else {
|
1095 |
+
// wp_cache_add( 'course-item-' . $user_id . '-' . $course_id . '-' . $item_id, $items, 'learn-press/user-course-items' );
|
1096 |
+
// }*/
|
1097 |
+
// }
|
1098 |
+
//
|
1099 |
+
// return $user_item_id;
|
1100 |
+
// }
|
1101 |
|
1102 |
/**
|
1103 |
* Get user item from user_items tables.
|
1157 |
* @param int $user_item_id
|
1158 |
*
|
1159 |
* @return bool|LP_User_Item_Course
|
1160 |
+
* @depecated 4.1.6.9
|
1161 |
*/
|
1162 |
+
/*public function get_user_item_course( $user_item_id ) {
|
1163 |
if ( $item = $this->get_user_item_by_id( $user_item_id, LP_COURSE_CPT ) ) {
|
1164 |
return new LP_User_Item_Course( $item );
|
1165 |
}
|
1166 |
|
1167 |
return false;
|
1168 |
+
}*/
|
1169 |
|
1170 |
+
/**
|
1171 |
+
* @depecated 4.1.6.9
|
1172 |
+
*/
|
1173 |
+
/*public function get_user_item_meta( $user_item_id, $meta_key, $single = true ) {
|
1174 |
return learn_press_get_user_item_meta( $user_item_id, $meta_key, $single );
|
1175 |
+
}*/
|
1176 |
|
1177 |
+
/**
|
1178 |
+
* @depecated 4.1.6.9
|
1179 |
+
*/
|
1180 |
+
/*public function update_user_item_meta( $user_item_id, $meta_key, $meta_value, $prev = '' ) {
|
1181 |
return learn_press_update_user_item_meta( $user_item_id, $meta_key, $meta_value, $prev );
|
1182 |
+
}*/
|
1183 |
|
1184 |
/**
|
1185 |
* Update user item data by id.
|
1933 |
$select = 'SELECT * ';
|
1934 |
$from = "FROM {$wpdb->learnpress_user_items} ui";
|
1935 |
$join = '';
|
1936 |
+
$where = 'WHERE 1=1 ';
|
1937 |
$where .= $wpdb->prepare( 'AND user_id = %d ', $user_id );
|
1938 |
$where .= $wpdb->prepare( 'AND item_type = %s ', LP_QUIZ_CPT );
|
1939 |
$where .= $wpdb->prepare( 'AND status IN (%s, %s) ', LP_ITEM_COMPLETED, LP_ITEM_STARTED );
|
2006 |
|
2007 |
list( $select, $from, $join, $where, $having, $orderby ) = array_values( $query_parts );
|
2008 |
|
2009 |
+
$sql = $wpdb->prepare(
|
2010 |
+
"
|
2011 |
SELECT * FROM (
|
2012 |
SELECT *
|
2013 |
FROM
|
2022 |
) AS G_User_Item
|
2023 |
ORDER BY G_User_Item.user_item_id DESC
|
2024 |
LIMIT %d, %d
|
2025 |
+
",
|
2026 |
+
$offset,
|
2027 |
+
$limit
|
2028 |
+
);
|
2029 |
|
2030 |
$sql = "SELECT DISTINCT item_id, MAX(user_item_id) as user_item_id , user_id, item_type, start_time, end_time, status, graduation, parent_id
|
2031 |
FROM $wpdb->learnpress_user_items
|
2035 |
GROUP BY item_id
|
2036 |
ORDER BY MAX(user_item_id) DESC";
|
2037 |
|
|
|
2038 |
$items = $wpdb->get_results( $sql, ARRAY_A );
|
2039 |
|
2040 |
if ( $items ) {
|
@@ -630,7 +630,7 @@ class LP_User_Item_CURD implements LP_Interface_CURD {
|
|
630 |
foreach ( $get_item_ids as $item_id ) {
|
631 |
$item = $course->get_item( $item_id );
|
632 |
|
633 |
-
if ( ! $item ) {
|
634 |
continue;
|
635 |
}
|
636 |
|
630 |
foreach ( $get_item_ids as $item_id ) {
|
631 |
$item = $course->get_item( $item_id );
|
632 |
|
633 |
+
if ( ! $item instanceof LP_Course_Item ) {
|
634 |
continue;
|
635 |
}
|
636 |
|
@@ -76,6 +76,8 @@ abstract class LP_Abstract_Post_Type {
|
|
76 |
add_action( 'save_post', array( $this, '_do_save_post' ), 10, 2 );
|
77 |
add_action( 'before_delete_post', array( $this, '_before_delete_post' ) );
|
78 |
add_action( 'deleted_post', array( $this, '_deleted_post' ) );
|
|
|
|
|
79 |
|
80 |
add_filter( 'manage_edit-' . $this->_post_type . '_sortable_columns', array( $this, 'sortable_columns' ) );
|
81 |
add_filter( 'manage_' . $this->_post_type . '_posts_columns', array( $this, 'columns_head' ) );
|
@@ -109,7 +111,7 @@ abstract class LP_Abstract_Post_Type {
|
|
109 |
// add_action( 'pre_get_posts', array( $this, 'update_default_meta' ) );
|
110 |
add_action( 'admin_footer', array( $this, 'admin_footer_scripts' ) );
|
111 |
|
112 |
-
add_filter( 'post_updated_messages', array( $this, 'updated_messages' ) );
|
113 |
|
114 |
$args = wp_parse_args(
|
115 |
$args,
|
@@ -175,12 +177,13 @@ abstract class LP_Abstract_Post_Type {
|
|
175 |
* @param WP_Post $post
|
176 |
* @editor tungnx
|
177 |
* @since modify 4.0.9
|
|
|
178 |
*/
|
179 |
final function _do_save_post( int $post_id = 0, WP_Post $post = null ) {
|
180 |
// Maybe remove
|
181 |
$this->maybe_remove_assigned( $post );
|
182 |
|
183 |
-
if ( ! $this->
|
184 |
return;
|
185 |
}
|
186 |
|
@@ -207,7 +210,7 @@ abstract class LP_Abstract_Post_Type {
|
|
207 |
* @since modify 4.0.9
|
208 |
*/
|
209 |
final function _before_delete_post( int $post_id ) {
|
210 |
-
if ( ! $this->
|
211 |
return;
|
212 |
}
|
213 |
|
@@ -231,7 +234,7 @@ abstract class LP_Abstract_Post_Type {
|
|
231 |
* @param int $post_id
|
232 |
*/
|
233 |
final function _deleted_post( int $post_id ) {
|
234 |
-
if ( ! $this->
|
235 |
return;
|
236 |
}
|
237 |
|
@@ -248,6 +251,97 @@ abstract class LP_Abstract_Post_Type {
|
|
248 |
// Implement from child
|
249 |
}
|
250 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
251 |
public function column_instructor( $post_id = 0 ) {
|
252 |
global $post;
|
253 |
|
@@ -544,6 +638,41 @@ abstract class LP_Abstract_Post_Type {
|
|
544 |
return true;
|
545 |
}
|
546 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
547 |
/**
|
548 |
* Check is page list posts valid
|
549 |
*
|
@@ -774,6 +903,9 @@ abstract class LP_Abstract_Post_Type {
|
|
774 |
return $actions;
|
775 |
}
|
776 |
|
|
|
|
|
|
|
777 |
public function updated_messages( $messages ) {
|
778 |
$post = get_post();
|
779 |
$post_type = get_post_type( $post );
|
@@ -807,7 +939,8 @@ abstract class LP_Abstract_Post_Type {
|
|
807 |
switch ( $this->_post_type ) {
|
808 |
case LP_LESSON_CPT:
|
809 |
case LP_QUIZ_CPT:
|
810 |
-
|
|
|
811 |
break;
|
812 |
case LP_ORDER_CPT:
|
813 |
$order = learn_press_get_order( $post->ID );
|
76 |
add_action( 'save_post', array( $this, '_do_save_post' ), 10, 2 );
|
77 |
add_action( 'before_delete_post', array( $this, '_before_delete_post' ) );
|
78 |
add_action( 'deleted_post', array( $this, '_deleted_post' ) );
|
79 |
+
add_action( 'wp_trash_post', array( $this, '_before_trash_post' ) );
|
80 |
+
add_action( 'trashed_post', array( $this, '_trashed_post' ) );
|
81 |
|
82 |
add_filter( 'manage_edit-' . $this->_post_type . '_sortable_columns', array( $this, 'sortable_columns' ) );
|
83 |
add_filter( 'manage_' . $this->_post_type . '_posts_columns', array( $this, 'columns_head' ) );
|
111 |
// add_action( 'pre_get_posts', array( $this, 'update_default_meta' ) );
|
112 |
add_action( 'admin_footer', array( $this, 'admin_footer_scripts' ) );
|
113 |
|
114 |
+
//add_filter( 'post_updated_messages', array( $this, 'updated_messages' ) );
|
115 |
|
116 |
$args = wp_parse_args(
|
117 |
$args,
|
177 |
* @param WP_Post $post
|
178 |
* @editor tungnx
|
179 |
* @since modify 4.0.9
|
180 |
+
* @version 4.0.1
|
181 |
*/
|
182 |
final function _do_save_post( int $post_id = 0, WP_Post $post = null ) {
|
183 |
// Maybe remove
|
184 |
$this->maybe_remove_assigned( $post );
|
185 |
|
186 |
+
if ( ! $this->check_post( $post_id ) ) {
|
187 |
return;
|
188 |
}
|
189 |
|
210 |
* @since modify 4.0.9
|
211 |
*/
|
212 |
final function _before_delete_post( int $post_id ) {
|
213 |
+
if ( ! $this->check_post( $post_id ) ) {
|
214 |
return;
|
215 |
}
|
216 |
|
234 |
* @param int $post_id
|
235 |
*/
|
236 |
final function _deleted_post( int $post_id ) {
|
237 |
+
if ( ! $this->check_post() ) {
|
238 |
return;
|
239 |
}
|
240 |
|
251 |
// Implement from child
|
252 |
}
|
253 |
|
254 |
+
protected $course_of_item_trashed = 0;
|
255 |
+
/**
|
256 |
+
* Hook before delete post
|
257 |
+
*
|
258 |
+
* @param int $post_id
|
259 |
+
*
|
260 |
+
* @author tungnx
|
261 |
+
* @since 4.1.6.9
|
262 |
+
* @version 1.0.0
|
263 |
+
*/
|
264 |
+
final function _before_trash_post( int $post_id ) {
|
265 |
+
if ( ! $this->check_post() ) {
|
266 |
+
return;
|
267 |
+
}
|
268 |
+
|
269 |
+
$this->before_trash_post( $post_id );
|
270 |
+
}
|
271 |
+
|
272 |
+
/**
|
273 |
+
* Before trash post
|
274 |
+
*
|
275 |
+
* @param int $post_id
|
276 |
+
*
|
277 |
+
* @return void
|
278 |
+
* @author tungnx
|
279 |
+
* @since 4.1.6.9
|
280 |
+
* @version 1.0.0.0
|
281 |
+
*/
|
282 |
+
public function before_trash_post( int $post_id ) {
|
283 |
+
// Implement from child
|
284 |
+
// Check is item type of course
|
285 |
+
$course_item_types = learn_press_get_course_item_types();
|
286 |
+
if ( ! in_array( get_post_type( $post_id ), $course_item_types ) ) {
|
287 |
+
return;
|
288 |
+
}
|
289 |
+
|
290 |
+
try {
|
291 |
+
// Set course id of item when item assign on course is trashed
|
292 |
+
$course_of_item = LP_Course_DB::getInstance()->get_course_by_item_id( $post_id );
|
293 |
+
if ( $course_of_item ) {
|
294 |
+
$this->course_of_item_trashed = $course_of_item;
|
295 |
+
}
|
296 |
+
} catch ( Throwable $e ) {
|
297 |
+
error_log( $e->getMessage() );
|
298 |
+
}
|
299 |
+
}
|
300 |
+
|
301 |
+
/**
|
302 |
+
* Hook Trashed post
|
303 |
+
*
|
304 |
+
* @param int $post_id
|
305 |
+
*
|
306 |
+
* @return void
|
307 |
+
* @author tungnx
|
308 |
+
* @since 4.1.6.9
|
309 |
+
* @version 1.0.0
|
310 |
+
*/
|
311 |
+
final function _trashed_post( int $post_id ) {
|
312 |
+
if ( ! $this->check_post() ) {
|
313 |
+
return;
|
314 |
+
}
|
315 |
+
|
316 |
+
$this->trashed_post( $post_id );
|
317 |
+
}
|
318 |
+
|
319 |
+
/**
|
320 |
+
* Method handle Trashed post
|
321 |
+
*
|
322 |
+
* @param int $post_id
|
323 |
+
* @author tungnx
|
324 |
+
* @since 4.1.6.9
|
325 |
+
* @version 1.0.0
|
326 |
+
* @return void
|
327 |
+
*/
|
328 |
+
public function trashed_post( int $post_id ) {
|
329 |
+
// Implement from child
|
330 |
+
// Check is item type of course
|
331 |
+
$course_item_types = learn_press_get_course_item_types();
|
332 |
+
if ( ! in_array( get_post_type( $post_id ), $course_item_types ) ) {
|
333 |
+
return;
|
334 |
+
}
|
335 |
+
|
336 |
+
if ( $this->course_of_item_trashed ) {
|
337 |
+
// Save course when item assign on course is trashed
|
338 |
+
$course_id = $this->course_of_item_trashed;
|
339 |
+
$course_post = get_post( $course_id );
|
340 |
+
LP_Course_Post_Type::instance()->save( $course_id, $course_post );
|
341 |
+
$this->course_of_item_trashed = 0;
|
342 |
+
}
|
343 |
+
}
|
344 |
+
|
345 |
public function column_instructor( $post_id = 0 ) {
|
346 |
global $post;
|
347 |
|
638 |
return true;
|
639 |
}
|
640 |
|
641 |
+
/**
|
642 |
+
* Check post is valid to handle
|
643 |
+
*
|
644 |
+
* @param int $post_id
|
645 |
+
*
|
646 |
+
* @return bool
|
647 |
+
* @since 4.1.6.9
|
648 |
+
* @version 1.0.0
|
649 |
+
*/
|
650 |
+
public function check_post( int $post_id = 0 ):bool {
|
651 |
+
$can_save = true;
|
652 |
+
|
653 |
+
try {
|
654 |
+
$post = get_post( $post_id );
|
655 |
+
|
656 |
+
if ( ! $post ) {
|
657 |
+
throw new Exception( 'Post is invalid' );
|
658 |
+
}
|
659 |
+
|
660 |
+
if ( $this->_post_type !== $post->post_type ) {
|
661 |
+
throw new Exception( 'Post type is invalid' );
|
662 |
+
}
|
663 |
+
|
664 |
+
if ( ! current_user_can( ADMIN_ROLE ) ) {
|
665 |
+
if ( get_current_user_id() !== $post->post_author ) {
|
666 |
+
$can_save = apply_filters( 'lp/custom-post-type/can-save', false, $post );
|
667 |
+
}
|
668 |
+
}
|
669 |
+
} catch ( Throwable $e ) {
|
670 |
+
|
671 |
+
}
|
672 |
+
|
673 |
+
return $can_save;
|
674 |
+
}
|
675 |
+
|
676 |
/**
|
677 |
* Check is page list posts valid
|
678 |
*
|
903 |
return $actions;
|
904 |
}
|
905 |
|
906 |
+
/**
|
907 |
+
* @depecated 4.1.6.9
|
908 |
+
*/
|
909 |
public function updated_messages( $messages ) {
|
910 |
$post = get_post();
|
911 |
$post_type = get_post_type( $post );
|
939 |
switch ( $this->_post_type ) {
|
940 |
case LP_LESSON_CPT:
|
941 |
case LP_QUIZ_CPT:
|
942 |
+
//$view_link = learn_press_get_item_course_id( $post->ID, $post->post_type ) ? $view_link : '';
|
943 |
+
$view_link = LP_Course_DB::getInstance()->get_course_by_item_id( $post->ID ) ? $view_link : '';
|
944 |
break;
|
945 |
case LP_ORDER_CPT:
|
946 |
$order = learn_press_get_order( $post->ID );
|
@@ -575,7 +575,7 @@ if ( ! class_exists( 'LP_Course_Post_Type' ) ) {
|
|
575 |
|
576 |
switch ( $column ) {
|
577 |
case 'thumbnail':
|
578 |
-
echo $course->get_image( 'thumbnail' );
|
579 |
break;
|
580 |
case 'instructor':
|
581 |
$this->column_instructor( $post->ID );
|
@@ -588,8 +588,6 @@ if ( ! class_exists( 'LP_Course_Post_Type' ) ) {
|
|
588 |
$html_items = array();
|
589 |
$post_types = get_post_types( null, 'objects' );
|
590 |
|
591 |
-
// $stats_objects = $curd->count_items( $post_id, 'edit' );
|
592 |
-
|
593 |
foreach ( learn_press_get_course_item_types() as $item_type ) {
|
594 |
$count_item = $course->count_items( $item_type );
|
595 |
|
@@ -603,28 +601,13 @@ if ( ! class_exists( 'LP_Course_Post_Type' ) ) {
|
|
603 |
$html_items[] = sprintf( _n( '<strong>%d</strong> ' . $singular_name, '<strong>%d</strong> ' . $plural_name, $count_item, 'learnpress' ), $count_item );
|
604 |
}
|
605 |
|
606 |
-
/*
|
607 |
-
if ( $stats_objects ) {
|
608 |
-
foreach ( $stats_objects as $type => $count ) {
|
609 |
-
if ( ! $count || ! isset( $post_types[ $type ] ) ) {
|
610 |
-
continue;
|
611 |
-
}
|
612 |
-
|
613 |
-
$post_type_object = $post_types[ $type ];
|
614 |
-
$singular_name = strtolower( $post_type_object->labels->singular_name );
|
615 |
-
$plural_name = strtolower( $post_type_object->label );
|
616 |
-
$html_items[] = sprintf( _n( '<strong>%d</strong> ' . $singular_name, '<strong>%d</strong> ' . $plural_name, $count, 'learnpress' ), $count );
|
617 |
-
}
|
618 |
-
}*/
|
619 |
-
|
620 |
$html_items = apply_filters( 'learn-press/course-count-items', $html_items );
|
621 |
|
622 |
if ( $html_items ) {
|
623 |
$output .= ' (' . implode( ', ', $html_items ) . ')';
|
624 |
}
|
625 |
|
626 |
-
echo $output;
|
627 |
-
|
628 |
} else {
|
629 |
esc_html_e( 'No content', 'learnpress' );
|
630 |
}
|
@@ -632,13 +615,12 @@ if ( ! class_exists( 'LP_Course_Post_Type' ) ) {
|
|
632 |
break;
|
633 |
|
634 |
case 'price':
|
635 |
-
echo $course->get_course_price_html();
|
636 |
break;
|
637 |
case 'students':
|
638 |
$count = $course->get_total_user_enrolled_or_purchased();
|
639 |
-
|
640 |
echo '<span class="lp-label-counter' . ( ! $count ? ' disabled' : '' ) . '">' . ( $count ? $count : 0 ) . '</span>';
|
641 |
-
|
642 |
}
|
643 |
}
|
644 |
|
@@ -664,7 +646,7 @@ if ( ! class_exists( 'LP_Course_Post_Type' ) ) {
|
|
664 |
* @editor tungnx
|
665 |
* @see LP_Background_Single_Course::handle()
|
666 |
*/
|
667 |
-
public function save( int $post_id, WP_Post $post ) {
|
668 |
// Save in background.
|
669 |
$bg = LP_Background_Single_Course::instance();
|
670 |
|
575 |
|
576 |
switch ( $column ) {
|
577 |
case 'thumbnail':
|
578 |
+
echo wp_kses_post( $course->get_image( 'thumbnail' ) );
|
579 |
break;
|
580 |
case 'instructor':
|
581 |
$this->column_instructor( $post->ID );
|
588 |
$html_items = array();
|
589 |
$post_types = get_post_types( null, 'objects' );
|
590 |
|
|
|
|
|
591 |
foreach ( learn_press_get_course_item_types() as $item_type ) {
|
592 |
$count_item = $course->count_items( $item_type );
|
593 |
|
601 |
$html_items[] = sprintf( _n( '<strong>%d</strong> ' . $singular_name, '<strong>%d</strong> ' . $plural_name, $count_item, 'learnpress' ), $count_item );
|
602 |
}
|
603 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
604 |
$html_items = apply_filters( 'learn-press/course-count-items', $html_items );
|
605 |
|
606 |
if ( $html_items ) {
|
607 |
$output .= ' (' . implode( ', ', $html_items ) . ')';
|
608 |
}
|
609 |
|
610 |
+
echo wp_kses_post( $output );
|
|
|
611 |
} else {
|
612 |
esc_html_e( 'No content', 'learnpress' );
|
613 |
}
|
615 |
break;
|
616 |
|
617 |
case 'price':
|
618 |
+
echo wp_kses_post( $course->get_course_price_html() );
|
619 |
break;
|
620 |
case 'students':
|
621 |
$count = $course->get_total_user_enrolled_or_purchased();
|
|
|
622 |
echo '<span class="lp-label-counter' . ( ! $count ? ' disabled' : '' ) . '">' . ( $count ? $count : 0 ) . '</span>';
|
623 |
+
break;
|
624 |
}
|
625 |
}
|
626 |
|
646 |
* @editor tungnx
|
647 |
* @see LP_Background_Single_Course::handle()
|
648 |
*/
|
649 |
+
public function save( int $post_id = 0, WP_Post $post = null ) {
|
650 |
// Save in background.
|
651 |
$bg = LP_Background_Single_Course::instance();
|
652 |
|
@@ -1 +1 @@
|
|
1 |
-
<?php // Silence is golden.
|
1 |
+
<?php // Silence is golden.
|
@@ -202,10 +202,10 @@ if ( ! class_exists( 'LP_Lesson_Post_Type' ) ) {
|
|
202 |
*
|
203 |
* @since 3.0.0
|
204 |
*/
|
205 |
-
public function
|
206 |
$curd = new LP_Lesson_CURD();
|
207 |
$curd->delete( $post_id );
|
208 |
-
}
|
209 |
|
210 |
/**
|
211 |
* Add columns to admin manage lesson page
|
@@ -334,8 +334,4 @@ if ( ! class_exists( 'LP_Lesson_Post_Type' ) ) {
|
|
334 |
}
|
335 |
|
336 |
$lesson_post_type = LP_Lesson_Post_Type::instance();
|
337 |
-
|
338 |
-
// Todo: Nhamdv see to rewrite
|
339 |
-
// $lesson_post_type
|
340 |
-
// ->add_meta_box( 'lesson_assigned', esc_html__( 'Assigned', 'learnpress' ), 'lesson_assigned', 'side', 'high' );
|
341 |
}
|
202 |
*
|
203 |
* @since 3.0.0
|
204 |
*/
|
205 |
+
/*public function before_delete( int $post_id = 0 ) {
|
206 |
$curd = new LP_Lesson_CURD();
|
207 |
$curd->delete( $post_id );
|
208 |
+
}*/
|
209 |
|
210 |
/**
|
211 |
* Add columns to admin manage lesson page
|
334 |
}
|
335 |
|
336 |
$lesson_post_type = LP_Lesson_Post_Type::instance();
|
|
|
|
|
|
|
|
|
337 |
}
|
@@ -340,6 +340,9 @@ if ( ! class_exists( 'LP_Order_Post_Type' ) ) {
|
|
340 |
|
341 |
if ( $action == 'editpost' ) {
|
342 |
$order = learn_press_get_order( $post_id );
|
|
|
|
|
|
|
343 |
|
344 |
$created_via = $order->get_created_via();
|
345 |
if ( empty( $created_via ) ) {
|
@@ -789,13 +792,13 @@ if ( ! class_exists( 'LP_Order_Post_Type' ) ) {
|
|
789 |
}
|
790 |
break;
|
791 |
case 'order_total':
|
792 |
-
echo
|
793 |
$title = $the_order->get_payment_method_title();
|
794 |
|
795 |
if ( $title ) {
|
796 |
?>
|
797 |
<div class="payment-method-title">
|
798 |
-
<?php echo $the_order->order_total == 0 ? $title : sprintf( __( 'Pay via <strong>%s</strong>', 'learnpress' ), apply_filters( 'learn-press/order-payment-method-title', $title, $the_order ), $the_order ); ?>
|
799 |
</div>
|
800 |
<?php
|
801 |
}
|
340 |
|
341 |
if ( $action == 'editpost' ) {
|
342 |
$order = learn_press_get_order( $post_id );
|
343 |
+
if ( ! $order ) {
|
344 |
+
return;
|
345 |
+
}
|
346 |
|
347 |
$created_via = $order->get_created_via();
|
348 |
if ( empty( $created_via ) ) {
|
792 |
}
|
793 |
break;
|
794 |
case 'order_total':
|
795 |
+
echo wp_kses_post( $the_order->get_formatted_order_total() );
|
796 |
$title = $the_order->get_payment_method_title();
|
797 |
|
798 |
if ( $title ) {
|
799 |
?>
|
800 |
<div class="payment-method-title">
|
801 |
+
<?php echo wp_kses_post( $the_order->order_total == 0 ? $title : sprintf( __( 'Pay via <strong>%s</strong>', 'learnpress' ), apply_filters( 'learn-press/order-payment-method-title', $title, $the_order ), $the_order ) ); ?>
|
802 |
</div>
|
803 |
<?php
|
804 |
}
|
@@ -115,8 +115,8 @@ if ( ! class_exists( 'LP_Question_Post_Type' ) ) {
|
|
115 |
}
|
116 |
|
117 |
$question = LP_Question::get_question( $post->ID );
|
118 |
-
$type
|
119 |
-
$answers
|
120 |
|
121 |
if ( empty( $answers ) ) {
|
122 |
$answers = array(
|
115 |
}
|
116 |
|
117 |
$question = LP_Question::get_question( $post->ID );
|
118 |
+
$type = $question->get_type();
|
119 |
+
$answers = ( $question->get_data( 'answer_options' ) ? array_values( $question->get_data( 'answer_options' ) ) : array() );
|
120 |
|
121 |
if ( empty( $answers ) ) {
|
122 |
$answers = array(
|
@@ -315,7 +315,7 @@ if ( ! class_exists( 'LP_Quiz_Post_Type' ) ) {
|
|
315 |
$duration_str = '--';
|
316 |
}
|
317 |
|
318 |
-
echo $duration_str;
|
319 |
break;
|
320 |
case 'preview':
|
321 |
printf(
|
315 |
$duration_str = '--';
|
316 |
}
|
317 |
|
318 |
+
echo esc_html( $duration_str );
|
319 |
break;
|
320 |
case 'preview':
|
321 |
printf(
|
@@ -31,21 +31,103 @@ class LP_Course_DB extends LP_Database {
|
|
31 |
* @param int $item_id
|
32 |
*
|
33 |
* @return int
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
*/
|
35 |
-
public function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
36 |
|
37 |
$query = $this->wpdb->prepare(
|
38 |
-
"
|
39 |
-
|
40 |
-
|
41 |
-
INNER JOIN {$this->tb_lp_section_items} AS si
|
42 |
ON si.section_id = s.section_id
|
43 |
-
WHERE
|
44 |
-
ORDER BY
|
45 |
-
$
|
46 |
);
|
47 |
|
48 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
}
|
50 |
|
51 |
/**
|
31 |
* @param int $item_id
|
32 |
*
|
33 |
* @return int
|
34 |
+
* @throws Exception
|
35 |
+
*/
|
36 |
+
public function get_course_by_item_id( $item_id = 0 ): int {
|
37 |
+
// Get cache
|
38 |
+
$lp_course_cache = LP_Course_Cache::instance();
|
39 |
+
$key_cache = "$item_id/course_id_of_item_id";
|
40 |
+
$course_id = $lp_course_cache->get_cache( $key_cache );
|
41 |
+
|
42 |
+
if ( ! $course_id ) {
|
43 |
+
$query = $this->wpdb->prepare(
|
44 |
+
"
|
45 |
+
SELECT section_course_id
|
46 |
+
FROM {$this->tb_lp_sections} AS s
|
47 |
+
INNER JOIN {$this->tb_lp_section_items} AS si
|
48 |
+
ON si.section_id = s.section_id
|
49 |
+
WHERE si.item_id = %d",
|
50 |
+
$item_id
|
51 |
+
);
|
52 |
+
|
53 |
+
$course_id = (int) $this->wpdb->get_var( $query );
|
54 |
+
|
55 |
+
$this->check_execute_has_error();
|
56 |
+
|
57 |
+
// Set cache
|
58 |
+
$lp_course_cache->set_cache( $key_cache, $course_id );
|
59 |
+
}
|
60 |
+
|
61 |
+
return $course_id;
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
* Get all item ids' course
|
66 |
+
*
|
67 |
+
* @param int $course_id
|
68 |
+
*
|
69 |
+
* @return array|object|stdClass[]|null
|
70 |
+
* @throws Exception
|
71 |
+
* @since 4.1.6.9
|
72 |
+
* @version 1.0.0
|
73 |
*/
|
74 |
+
public function get_full_sections_and_items_course( int $course_id = 0 ) {
|
75 |
+
$method_called_to = debug_backtrace()[1]['function'];
|
76 |
+
|
77 |
+
// Check accept call from function 'get_sections_and_items_course_from_db_and_sort'
|
78 |
+
if ( 'get_sections_and_items_course_from_db_and_sort' !== $method_called_to ) {
|
79 |
+
error_log( 'You can not call direct this function' );
|
80 |
+
return [];
|
81 |
+
}
|
82 |
|
83 |
$query = $this->wpdb->prepare(
|
84 |
+
"SELECT *
|
85 |
+
FROM {$this->tb_lp_section_items} AS si
|
86 |
+
INNER JOIN {$this->tb_lp_sections} AS s
|
|
|
87 |
ON si.section_id = s.section_id
|
88 |
+
WHERE section_course_id = %d
|
89 |
+
ORDER BY s.section_order",
|
90 |
+
$course_id
|
91 |
);
|
92 |
|
93 |
+
$sections_items = $this->wpdb->get_results( $query );
|
94 |
+
|
95 |
+
$this->check_execute_has_error();
|
96 |
+
|
97 |
+
return $sections_items;
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Get all sections' course
|
102 |
+
*
|
103 |
+
* @param int $course_id
|
104 |
+
*
|
105 |
+
* @return array|object|stdClass[]|null
|
106 |
+
* @throws Exception
|
107 |
+
* @since 4.1.6.9
|
108 |
+
* @version 1.0.0
|
109 |
+
*/
|
110 |
+
public function get_sections( int $course_id = 0 ) {
|
111 |
+
$method_called_to = debug_backtrace()[1]['function'];
|
112 |
+
|
113 |
+
// Check accept call from function 'get_sections_and_items_course_from_db_and_sort'
|
114 |
+
if ( 'get_sections_and_items_course_from_db_and_sort' !== $method_called_to ) {
|
115 |
+
error_log( 'You can not call direct this function' );
|
116 |
+
return [];
|
117 |
+
}
|
118 |
+
|
119 |
+
$query = $this->wpdb->prepare(
|
120 |
+
"SELECT * FROM {$this->tb_lp_sections}
|
121 |
+
WHERE section_course_id = %d
|
122 |
+
ORDER BY section_order",
|
123 |
+
$course_id
|
124 |
+
);
|
125 |
+
|
126 |
+
$sections_items = $this->wpdb->get_results( $query, OBJECT_K );
|
127 |
+
|
128 |
+
$this->check_execute_has_error();
|
129 |
+
|
130 |
+
return $sections_items;
|
131 |
}
|
132 |
|
133 |
/**
|
@@ -683,6 +683,8 @@ class LP_Database {
|
|
683 |
}
|
684 |
|
685 |
/**
|
|
|
|
|
686 |
* @param array $arr_object
|
687 |
* @param string $key
|
688 |
*
|
683 |
}
|
684 |
|
685 |
/**
|
686 |
+
* Get values of list object by key
|
687 |
+
*
|
688 |
* @param array $arr_object
|
689 |
* @param string $key
|
690 |
*
|
@@ -307,7 +307,30 @@ class LP_Section_DB extends LP_Database {
|
|
307 |
|
308 |
return false;
|
309 |
}
|
310 |
-
}
|
311 |
|
312 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
313 |
|
307 |
|
308 |
return false;
|
309 |
}
|
|
|
310 |
|
311 |
+
/**
|
312 |
+
* Get last section order of course
|
313 |
+
*
|
314 |
+
* @param int $course_id
|
315 |
+
*
|
316 |
+
* @return int
|
317 |
+
* @throws Exception
|
318 |
+
* @since 4.1.6.9
|
319 |
+
* @version 1.0.0
|
320 |
+
*/
|
321 |
+
public function get_last_number_order( int $course_id = 0 ): int {
|
322 |
+
$query = $this->wpdb->prepare(
|
323 |
+
"SELECT MAX(section_order)
|
324 |
+
FROM $this->tb_lp_sections
|
325 |
+
WHERE section_course_id = %d",
|
326 |
+
$course_id
|
327 |
+
);
|
328 |
+
|
329 |
+
$number_order = intval( $this->wpdb->get_var( $query ) );
|
330 |
+
|
331 |
+
$this->check_execute_has_error();
|
332 |
+
|
333 |
+
return $number_order;
|
334 |
+
}
|
335 |
+
}
|
336 |
|
@@ -28,6 +28,35 @@ class LP_User_Items_DB extends LP_Database {
|
|
28 |
return self::$_instance;
|
29 |
}
|
30 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
/**
|
32 |
* Get items by user_item_id | this is id where item_id = course_id
|
33 |
*
|
@@ -800,6 +829,51 @@ class LP_User_Items_DB extends LP_Database {
|
|
800 |
|
801 |
return apply_filters( 'lp/user/course/query/filter/count-users-attend-courses-of-author', $filter );
|
802 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
803 |
}
|
804 |
|
805 |
LP_Course_DB::getInstance();
|
28 |
return self::$_instance;
|
29 |
}
|
30 |
|
31 |
+
/**
|
32 |
+
* Get users items
|
33 |
+
*
|
34 |
+
* @return array|null|int|string
|
35 |
+
* @throws Exception
|
36 |
+
* @since 4.1.6.9
|
37 |
+
* @version 1.0.0
|
38 |
+
*/
|
39 |
+
public function get_user_items( LP_User_Items_Filter $filter, int &$total_rows = 0 ) {
|
40 |
+
$default_fields = $this->get_cols_of_table( $this->tb_lp_user_items );
|
41 |
+
$filter->fields = array_merge( $default_fields, $filter->fields );
|
42 |
+
|
43 |
+
if ( empty( $filter->collection ) ) {
|
44 |
+
$filter->collection = $this->tb_lp_user_items;
|
45 |
+
}
|
46 |
+
|
47 |
+
if ( empty( $filter->collection_alias ) ) {
|
48 |
+
$filter->collection_alias = 'ui';
|
49 |
+
}
|
50 |
+
|
51 |
+
if ( $filter->ref_id ) {
|
52 |
+
$filter->where[] = $this->wpdb->prepare( 'AND ui.ref_id = %d', $filter->ref_id );
|
53 |
+
}
|
54 |
+
|
55 |
+
$filter = apply_filters( 'lp/user_items/query/filter', $filter );
|
56 |
+
|
57 |
+
return $this->execute( $filter, $total_rows );
|
58 |
+
}
|
59 |
+
|
60 |
/**
|
61 |
* Get items by user_item_id | this is id where item_id = course_id
|
62 |
*
|
829 |
|
830 |
return apply_filters( 'lp/user/course/query/filter/count-users-attend-courses-of-author', $filter );
|
831 |
}
|
832 |
+
|
833 |
+
/**
|
834 |
+
* Get list students attend
|
835 |
+
*
|
836 |
+
* @param LP_User_Items_Filter $filter
|
837 |
+
* @param int $total_rows
|
838 |
+
*
|
839 |
+
* @return array|int|string|null
|
840 |
+
* @since 4.1.6.9
|
841 |
+
* @throws Exception
|
842 |
+
*/
|
843 |
+
public function get_students( LP_User_Items_Filter $filter, int &$total_rows = 0 ) {
|
844 |
+
$default_fields = $this->get_cols_of_table( $this->tb_users );
|
845 |
+
$filter->fields = array_merge( $default_fields, $filter->fields );
|
846 |
+
$filter->exclude_fields = [ 'user_pass', 'user_login', 'user_status', 'user_activation_key' ];
|
847 |
+
$filter->field_count = 'ID';
|
848 |
+
|
849 |
+
if ( empty( $filter->collection ) ) {
|
850 |
+
$filter->collection = $this->tb_users;
|
851 |
+
}
|
852 |
+
|
853 |
+
if ( empty( $filter->collection_alias ) ) {
|
854 |
+
$filter->collection_alias = 'u';
|
855 |
+
}
|
856 |
+
|
857 |
+
// Filter
|
858 |
+
$filter->join[] = "INNER JOIN $this->tb_lp_user_items AS ui ON u.ID = ui.user_id";
|
859 |
+
$filter->where[] = $this->wpdb->prepare( 'AND item_type =%s', LP_COURSE_CPT );
|
860 |
+
|
861 |
+
// Filter by user ids
|
862 |
+
if ( ! empty( $filter->user_ids ) ) {
|
863 |
+
$term_ids_format = LP_Helper::db_format_array( $filter->user_ids, '%d' );
|
864 |
+
$filter->where[] = $this->wpdb->prepare( 'AND r_term.term_taxonomy_id IN (' . $term_ids_format . ')', $filter->user_ids );
|
865 |
+
}
|
866 |
+
|
867 |
+
// Filter
|
868 |
+
|
869 |
+
$filter->group_by = 'ID';
|
870 |
+
|
871 |
+
// End filter
|
872 |
+
|
873 |
+
$filter = apply_filters( 'lp/course/query/students', $filter );
|
874 |
+
|
875 |
+
return $this->execute( $filter, $total_rows );
|
876 |
+
}
|
877 |
}
|
878 |
|
879 |
LP_Course_DB::getInstance();
|
@@ -470,7 +470,7 @@ if ( ! class_exists( 'LP_Email' ) ) {
|
|
470 |
* @return bool
|
471 |
*/
|
472 |
private function is_current() {
|
473 |
-
return ! empty( $_REQUEST['section'] ) && $_REQUEST['section'] == $this->id;
|
474 |
}
|
475 |
|
476 |
/**
|
@@ -619,7 +619,8 @@ if ( ! class_exists( 'LP_Email' ) ) {
|
|
619 |
public function get_content_plain(): string {
|
620 |
$template = $this->get_template( 'template_plain' );
|
621 |
$template_file = $this->template_base . $template;
|
622 |
-
$
|
|
|
623 |
$content = stripslashes( $content );
|
624 |
|
625 |
return $content;
|
@@ -1169,10 +1170,9 @@ if ( ! class_exists( 'LP_Email' ) ) {
|
|
1169 |
]
|
1170 |
);
|
1171 |
$header = ob_get_clean();
|
1172 |
-
$header = wp_kses_post( $header );
|
1173 |
|
1174 |
if ( $echo ) {
|
1175 |
-
echo $header;
|
1176 |
}
|
1177 |
|
1178 |
return $header;
|
@@ -1190,10 +1190,9 @@ if ( ! class_exists( 'LP_Email' ) ) {
|
|
1190 |
ob_start();
|
1191 |
learn_press_get_template( 'emails/email-footer.php', array( 'footer_text' => $footer_text ) );
|
1192 |
$footer = ob_get_clean();
|
1193 |
-
$footer = wp_kses_post( $footer );
|
1194 |
|
1195 |
if ( $echo ) {
|
1196 |
-
echo $footer;
|
1197 |
}
|
1198 |
|
1199 |
return $footer;
|
470 |
* @return bool
|
471 |
*/
|
472 |
private function is_current() {
|
473 |
+
return ! empty( $_REQUEST['section'] ) && sanitize_text_field( $_REQUEST['section'] ) == $this->id;
|
474 |
}
|
475 |
|
476 |
/**
|
619 |
public function get_content_plain(): string {
|
620 |
$template = $this->get_template( 'template_plain' );
|
621 |
$template_file = $this->template_base . $template;
|
622 |
+
$content_tmp = LP_WP_Filesystem::instance()->file_get_contents( $template_file );
|
623 |
+
$content = $this->settings->get( 'email_content.plain', $content_tmp );
|
624 |
$content = stripslashes( $content );
|
625 |
|
626 |
return $content;
|
1170 |
]
|
1171 |
);
|
1172 |
$header = ob_get_clean();
|
|
|
1173 |
|
1174 |
if ( $echo ) {
|
1175 |
+
echo wp_kses_post( $header );
|
1176 |
}
|
1177 |
|
1178 |
return $header;
|
1190 |
ob_start();
|
1191 |
learn_press_get_template( 'emails/email-footer.php', array( 'footer_text' => $footer_text ) );
|
1192 |
$footer = ob_get_clean();
|
|
|
1193 |
|
1194 |
if ( $echo ) {
|
1195 |
+
echo wp_kses_post( $footer );
|
1196 |
}
|
1197 |
|
1198 |
return $footer;
|
@@ -1 +1 @@
|
|
1 |
-
<?php // Silence is golden.
|
1 |
+
<?php // Silence is golden.
|
@@ -191,7 +191,8 @@ class LP_Elementor_Widget_List_Courses extends LP_Elementor_Widget_Base {
|
|
191 |
}
|
192 |
?>
|
193 |
<div class="lp-archive-courses">
|
194 |
-
<ul class="learn-press-courses" data-layout="<?php echo
|
|
|
195 |
<?php
|
196 |
global $post;
|
197 |
foreach ( $courses as $course ) {
|
191 |
}
|
192 |
?>
|
193 |
<div class="lp-archive-courses">
|
194 |
+
<ul class="learn-press-courses" data-layout="<?php echo esc_attr( $settings['grid_list_type'] ); ?>"
|
195 |
+
data-size="<?php echo absint( $settings['number_posts'] ); ?>">
|
196 |
<?php
|
197 |
global $post;
|
198 |
foreach ( $courses as $course ) {
|
@@ -149,7 +149,7 @@ class LP_Polylang {
|
|
149 |
* @return array
|
150 |
*/
|
151 |
public function args_query_user_courses( array $args, WP_REST_Request $request ): array {
|
152 |
-
$pll_current_lang = $request['pll-current-lang'] ?? '';
|
153 |
|
154 |
if ( empty( $pll_current_lang ) ) {
|
155 |
return $args;
|
149 |
* @return array
|
150 |
*/
|
151 |
public function args_query_user_courses( array $args, WP_REST_Request $request ): array {
|
152 |
+
$pll_current_lang = LP_Helper::sanitize_params_submitted( $request['pll-current-lang'] ?? '' );
|
153 |
|
154 |
if ( empty( $pll_current_lang ) ) {
|
155 |
return $args;
|
@@ -24,10 +24,18 @@ if ( ! class_exists( 'LP_User_Items_Filter' ) ) {
|
|
24 |
* @var int
|
25 |
*/
|
26 |
public $user_id = 0;
|
|
|
|
|
|
|
|
|
27 |
/**
|
28 |
* @var int
|
29 |
*/
|
30 |
public $item_id = 0;
|
|
|
|
|
|
|
|
|
31 |
/**
|
32 |
* @var string
|
33 |
*/
|
24 |
* @var int
|
25 |
*/
|
26 |
public $user_id = 0;
|
27 |
+
/**
|
28 |
+
* @var array int
|
29 |
+
*/
|
30 |
+
public $user_ids = [];
|
31 |
/**
|
32 |
* @var int
|
33 |
*/
|
34 |
public $item_id = 0;
|
35 |
+
/**
|
36 |
+
* @var array int
|
37 |
+
*/
|
38 |
+
public $course_ids = [];
|
39 |
/**
|
40 |
* @var string
|
41 |
*/
|
@@ -1 +1 @@
|
|
1 |
-
<?php // Silence is golden.
|
1 |
+
<?php // Silence is golden.
|
@@ -1 +1 @@
|
|
1 |
-
<?php // Silence is golden.
|
1 |
+
<?php // Silence is golden.
|
@@ -1 +1 @@
|
|
1 |
-
<?php // Silence is golden.
|
1 |
+
<?php // Silence is golden.
|
@@ -1 +1 @@
|
|
1 |
-
<?php // Silence is golden.
|
1 |
+
<?php // Silence is golden.
|
@@ -27,12 +27,12 @@ Here I am turning on PHP error logging to a file called "ipn_errors.log". Make
|
|
27 |
sure your web server has permissions to write to that file. In a production
|
28 |
environment it is better to have that log file outside of the web root.
|
29 |
*/
|
30 |
-
ini_set('log_errors', true);
|
31 |
-
ini_set('error_log', dirname(__FILE__).'/ipn_errors.log');
|
32 |
|
33 |
|
34 |
// instantiate the IpnListener class
|
35 |
-
include('ipnlistener.php');
|
36 |
$listener = new IpnListener();
|
37 |
|
38 |
|
@@ -70,9 +70,9 @@ $verified = $listener->processIpn($my_post_data);
|
|
70 |
try {
|
71 |
$listener->requirePostMethod();
|
72 |
$verified = $listener->processIpn();
|
73 |
-
} catch (Exception $e) {
|
74 |
-
error_log($e->getMessage());
|
75 |
-
exit(0);
|
76 |
}
|
77 |
|
78 |
|
@@ -80,7 +80,7 @@ try {
|
|
80 |
The processIpn() method returned true if the IPN was "VERIFIED" and false if it
|
81 |
was "INVALID".
|
82 |
*/
|
83 |
-
if ($verified) {
|
84 |
/*
|
85 |
Once you have a verified IPN you need to do a few more checks on the POST
|
86 |
fields--typically against data you stored in your database during when the
|
@@ -97,7 +97,7 @@ if ($verified) {
|
|
97 |
example and just send an email using the getTextReport() method to get all
|
98 |
of the details about the IPN.
|
99 |
*/
|
100 |
-
mail('YOUR EMAIL ADDRESS', 'Verified IPN', $listener->getTextReport());
|
101 |
|
102 |
} else {
|
103 |
/*
|
@@ -105,7 +105,7 @@ if ($verified) {
|
|
105 |
a good idea to have a developer or sys admin manually investigate any
|
106 |
invalid IPN.
|
107 |
*/
|
108 |
-
mail('YOUR EMAIL ADDRESS', 'Invalid IPN', $listener->getTextReport());
|
109 |
}
|
110 |
|
111 |
-
|
27 |
sure your web server has permissions to write to that file. In a production
|
28 |
environment it is better to have that log file outside of the web root.
|
29 |
*/
|
30 |
+
ini_set( 'log_errors', true );
|
31 |
+
ini_set( 'error_log', dirname( __FILE__ ) . '/ipn_errors.log' );
|
32 |
|
33 |
|
34 |
// instantiate the IpnListener class
|
35 |
+
include( 'ipnlistener.php' );
|
36 |
$listener = new IpnListener();
|
37 |
|
38 |
|
70 |
try {
|
71 |
$listener->requirePostMethod();
|
72 |
$verified = $listener->processIpn();
|
73 |
+
} catch ( Exception $e ) {
|
74 |
+
error_log( $e->getMessage() );
|
75 |
+
exit( 0 );
|
76 |
}
|
77 |
|
78 |
|
80 |
The processIpn() method returned true if the IPN was "VERIFIED" and false if it
|
81 |
was "INVALID".
|
82 |
*/
|
83 |
+
if ( $verified ) {
|
84 |
/*
|
85 |
Once you have a verified IPN you need to do a few more checks on the POST
|
86 |
fields--typically against data you stored in your database during when the
|
97 |
example and just send an email using the getTextReport() method to get all
|
98 |
of the details about the IPN.
|
99 |
*/
|
100 |
+
mail( 'YOUR EMAIL ADDRESS', 'Verified IPN', $listener->getTextReport() );
|
101 |
|
102 |
} else {
|
103 |
/*
|
105 |
a good idea to have a developer or sys admin manually investigate any
|
106 |
invalid IPN.
|
107 |
*/
|
108 |
+
mail( 'YOUR EMAIL ADDRESS', 'Invalid IPN', $listener->getTextReport() );
|
109 |
}
|
110 |
|
111 |
+
|
@@ -64,10 +64,10 @@ class IpnListener {
|
|
64 |
*/
|
65 |
public $timeout = 30;
|
66 |
|
67 |
-
private $post_data
|
68 |
-
private $post_uri
|
69 |
private $response_status = '';
|
70 |
-
private $response
|
71 |
|
72 |
const PAYPAL_HOST = 'www.paypal.com';
|
73 |
const SANDBOX_HOST = 'www.sandbox.paypal.com';
|
@@ -96,8 +96,11 @@ class IpnListener {
|
|
96 |
|
97 |
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, true );
|
98 |
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 2 );
|
99 |
-
curl_setopt(
|
100 |
-
|
|
|
|
|
|
|
101 |
curl_setopt( $ch, CURLOPT_URL, $uri );
|
102 |
curl_setopt( $ch, CURLOPT_POST, true );
|
103 |
curl_setopt( $ch, CURLOPT_POSTFIELDS, $encoded_data );
|
@@ -149,10 +152,10 @@ class IpnListener {
|
|
149 |
throw new Exception( "fsockopen error: [$errno] $errstr" );
|
150 |
}
|
151 |
|
152 |
-
$header
|
153 |
-
$header .=
|
154 |
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
|
155 |
-
$header .=
|
156 |
$header .= "Connection: Close\r\n\r\n";
|
157 |
|
158 |
fputs( $fp, $header . $encoded_data . "\r\n\r\n" );
|
@@ -160,7 +163,7 @@ class IpnListener {
|
|
160 |
while ( ! feof( $fp ) ) {
|
161 |
if ( empty( $this->response ) ) {
|
162 |
// extract HTTP status from first line
|
163 |
-
$this->response
|
164 |
$this->response_status = trim( substr( $status, 9, 4 ) );
|
165 |
} else {
|
166 |
$this->response .= fgets( $fp, 1024 );
|
@@ -279,9 +282,9 @@ class IpnListener {
|
|
279 |
// use raw POST data
|
280 |
if ( ! empty( $_POST ) ) {
|
281 |
$this->post_data = $_POST;
|
282 |
-
$encoded_data
|
283 |
} else {
|
284 |
-
throw new Exception(
|
285 |
}
|
286 |
} else {
|
287 |
// use provided data array
|
@@ -299,15 +302,15 @@ class IpnListener {
|
|
299 |
}
|
300 |
|
301 |
if ( strpos( $this->response_status, '200' ) === false ) {
|
302 |
-
throw new Exception(
|
303 |
}
|
304 |
|
305 |
-
if ( strpos( $this->response,
|
306 |
return true;
|
307 |
-
} elseif ( strpos( $this->response,
|
308 |
return false;
|
309 |
} else {
|
310 |
-
throw new Exception(
|
311 |
}
|
312 |
}
|
313 |
|
@@ -321,7 +324,7 @@ class IpnListener {
|
|
321 |
// require POST requests
|
322 |
if ( $_SERVER['REQUEST_METHOD'] && $_SERVER['REQUEST_METHOD'] != 'POST' ) {
|
323 |
header( 'Allow: POST', true, 405 );
|
324 |
-
throw new Exception(
|
325 |
}
|
326 |
}
|
327 |
}
|
64 |
*/
|
65 |
public $timeout = 30;
|
66 |
|
67 |
+
private $post_data = array();
|
68 |
+
private $post_uri = '';
|
69 |
private $response_status = '';
|
70 |
+
private $response = '';
|
71 |
|
72 |
const PAYPAL_HOST = 'www.paypal.com';
|
73 |
const SANDBOX_HOST = 'www.sandbox.paypal.com';
|
96 |
|
97 |
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, true );
|
98 |
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 2 );
|
99 |
+
curl_setopt(
|
100 |
+
$ch,
|
101 |
+
CURLOPT_CAINFO,
|
102 |
+
dirname( __FILE__ ) . '/cert/api_cert_chain.crt'
|
103 |
+
);
|
104 |
curl_setopt( $ch, CURLOPT_URL, $uri );
|
105 |
curl_setopt( $ch, CURLOPT_POST, true );
|
106 |
curl_setopt( $ch, CURLOPT_POSTFIELDS, $encoded_data );
|
152 |
throw new Exception( "fsockopen error: [$errno] $errstr" );
|
153 |
}
|
154 |
|
155 |
+
$header = "POST /cgi-bin/webscr HTTP/1.1\r\n";
|
156 |
+
$header .= 'Host: ' . $this->getPaypalHost() . "\r\n";
|
157 |
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
|
158 |
+
$header .= 'Content-Length: ' . strlen( $encoded_data ) . "\r\n";
|
159 |
$header .= "Connection: Close\r\n\r\n";
|
160 |
|
161 |
fputs( $fp, $header . $encoded_data . "\r\n\r\n" );
|
163 |
while ( ! feof( $fp ) ) {
|
164 |
if ( empty( $this->response ) ) {
|
165 |
// extract HTTP status from first line
|
166 |
+
$this->response .= $status = fgets( $fp, 1024 );
|
167 |
$this->response_status = trim( substr( $status, 9, 4 ) );
|
168 |
} else {
|
169 |
$this->response .= fgets( $fp, 1024 );
|
282 |
// use raw POST data
|
283 |
if ( ! empty( $_POST ) ) {
|
284 |
$this->post_data = $_POST;
|
285 |
+
$encoded_data .= '&' . file_get_contents( 'php://input' );
|
286 |
} else {
|
287 |
+
throw new Exception( 'No POST data found.' );
|
288 |
}
|
289 |
} else {
|
290 |
// use provided data array
|
302 |
}
|
303 |
|
304 |
if ( strpos( $this->response_status, '200' ) === false ) {
|
305 |
+
throw new Exception( 'Invalid response status: ' . $this->response_status );
|
306 |
}
|
307 |
|
308 |
+
if ( strpos( $this->response, 'VERIFIED' ) !== false ) {
|
309 |
return true;
|
310 |
+
} elseif ( strpos( $this->response, 'INVALID' ) !== false ) {
|
311 |
return false;
|
312 |
} else {
|
313 |
+
throw new Exception( 'Unexpected response from PayPal.' );
|
314 |
}
|
315 |
}
|
316 |
|
324 |
// require POST requests
|
325 |
if ( $_SERVER['REQUEST_METHOD'] && $_SERVER['REQUEST_METHOD'] != 'POST' ) {
|
326 |
header( 'Allow: POST', true, 405 );
|
327 |
+
throw new Exception( 'Invalid HTTP request method.' );
|
328 |
}
|
329 |
}
|
330 |
}
|
@@ -1 +1 @@
|
|
1 |
-
<?php // Silence is golden.
|
1 |
+
<?php // Silence is golden.
|
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
namespace Firebase\JWT;
|
3 |
|
4 |
-
class BeforeValidException extends \UnexpectedValueException
|
5 |
-
|
6 |
|
7 |
}
|
1 |
<?php
|
2 |
namespace Firebase\JWT;
|
3 |
|
4 |
+
class BeforeValidException extends \UnexpectedValueException {
|
5 |
+
|
6 |
|
7 |
}
|
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
namespace Firebase\JWT;
|
3 |
|
4 |
-
class ExpiredException extends \UnexpectedValueException
|
5 |
-
|
6 |
|
7 |
}
|
1 |
<?php
|
2 |
namespace Firebase\JWT;
|
3 |
|
4 |
+
class ExpiredException extends \UnexpectedValueException {
|
5 |
+
|
6 |
|
7 |
}
|
@@ -19,361 +19,354 @@ use \DateTime;
|
|
19 |
* @license http://opensource.org/licenses/BSD-3-Clause 3-clause BSD
|
20 |
* @link https://github.com/firebase/php-jwt
|
21 |
*/
|
22 |
-
class JWT
|
23 |
-
{
|
24 |
|
25 |
-
/**
|
26 |
-
* When checking nbf, iat or expiration times,
|
27 |
-
* we want to provide some extra leeway time to
|
28 |
-
* account for clock skew.
|
29 |
-
*/
|
30 |
-
public static $leeway = 0;
|
31 |
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
public static $timestamp = null;
|
39 |
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
);
|
48 |
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
*
|
58 |
-
* @return object The JWT's payload as a PHP object
|
59 |
-
*
|
60 |
-
* @throws UnexpectedValueException Provided JWT was invalid
|
61 |
-
* @throws SignatureInvalidException Provided JWT was invalid because the signature verification failed
|
62 |
-
* @throws BeforeValidException Provided JWT is trying to be used before it's eligible as defined by 'nbf'
|
63 |
-
* @throws BeforeValidException Provided JWT is trying to be used before it's been created as defined by 'iat'
|
64 |
-
* @throws ExpiredException Provided JWT has since expired, as defined by the 'exp' claim
|
65 |
-
*
|
66 |
-
* @uses jsonDecode
|
67 |
-
* @uses urlsafeB64Decode
|
68 |
-
*/
|
69 |
-
public static function decode($jwt, $key, array $allowed_algs = array())
|
70 |
-
{
|
71 |
-
$timestamp = is_null(static::$timestamp) ? time() : static::$timestamp;
|
72 |
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
}
|
96 |
-
if (!in_array($header->alg, $allowed_algs)) {
|
97 |
-
throw new UnexpectedValueException('Algorithm not allowed');
|
98 |
-
}
|
99 |
-
if (is_array($key) || $key instanceof \ArrayAccess) {
|
100 |
-
if (isset($header->kid)) {
|
101 |
-
if (!isset($key[$header->kid])) {
|
102 |
-
throw new UnexpectedValueException('"kid" invalid, unable to lookup correct key');
|
103 |
-
}
|
104 |
-
$key = $key[$header->kid];
|
105 |
-
} else {
|
106 |
-
throw new UnexpectedValueException('"kid" empty, unable to lookup correct key');
|
107 |
-
}
|
108 |
-
}
|
109 |
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
114 |
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
'Cannot handle token prior to ' . date(DateTime::ISO8601, $payload->nbf)
|
120 |
-
);
|
121 |
-
}
|
122 |
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
}
|
131 |
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
|
|
|
|
|
|
|
|
136 |
|
137 |
-
|
138 |
-
|
|
|
|
|
139 |
|
140 |
-
|
141 |
-
|
142 |
-
*
|
143 |
-
* @param object|array $payload PHP object or array
|
144 |
-
* @param string $key The secret key.
|
145 |
-
* If the algorithm used is asymmetric, this is the private key
|
146 |
-
* @param string $alg The signing algorithm.
|
147 |
-
* Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256'
|
148 |
-
* @param mixed $keyId
|
149 |
-
* @param array $head An array with header elements to attach
|
150 |
-
*
|
151 |
-
* @return string A signed JWT
|
152 |
-
*
|
153 |
-
* @uses jsonEncode
|
154 |
-
* @uses urlsafeB64Encode
|
155 |
-
*/
|
156 |
-
public static function encode($payload, $key, $alg = 'HS256', $keyId = null, $head = null)
|
157 |
-
{
|
158 |
-
$header = array('typ' => 'JWT', 'alg' => $alg);
|
159 |
-
if ($keyId !== null) {
|
160 |
-
$header['kid'] = $keyId;
|
161 |
-
}
|
162 |
-
if ( isset($head) && is_array($head) ) {
|
163 |
-
$header = array_merge($head, $header);
|
164 |
-
}
|
165 |
-
$segments = array();
|
166 |
-
$segments[] = static::urlsafeB64Encode(static::jsonEncode($header));
|
167 |
-
$segments[] = static::urlsafeB64Encode(static::jsonEncode($payload));
|
168 |
-
$signing_input = implode('.', $segments);
|
169 |
|
170 |
-
|
171 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
172 |
|
173 |
-
|
174 |
-
|
175 |
|
176 |
-
|
177 |
-
|
178 |
-
*
|
179 |
-
* @param string $msg The message to sign
|
180 |
-
* @param string|resource $key The secret key
|
181 |
-
* @param string $alg The signing algorithm.
|
182 |
-
* Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256'
|
183 |
-
*
|
184 |
-
* @return string An encrypted message
|
185 |
-
*
|
186 |
-
* @throws DomainException Unsupported algorithm was specified
|
187 |
-
*/
|
188 |
-
public static function sign($msg, $key, $alg = 'HS256')
|
189 |
-
{
|
190 |
-
if (empty(static::$supported_algs[$alg])) {
|
191 |
-
throw new DomainException('Algorithm not supported');
|
192 |
-
}
|
193 |
-
list($function, $algorithm) = static::$supported_algs[$alg];
|
194 |
-
switch($function) {
|
195 |
-
case 'hash_hmac':
|
196 |
-
return hash_hmac($algorithm, $msg, $key, true);
|
197 |
-
case 'openssl':
|
198 |
-
$signature = '';
|
199 |
-
$success = openssl_sign($msg, $signature, $key, $algorithm);
|
200 |
-
if (!$success) {
|
201 |
-
throw new DomainException("OpenSSL unable to sign data");
|
202 |
-
} else {
|
203 |
-
return $signature;
|
204 |
-
}
|
205 |
-
}
|
206 |
-
}
|
207 |
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
226 |
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
return hash_equals($signature, $hash);
|
245 |
-
}
|
246 |
-
$len = min(static::safeStrlen($signature), static::safeStrlen($hash));
|
247 |
|
248 |
-
$status = 0;
|
249 |
-
for ($i = 0; $i < $len; $i++) {
|
250 |
-
$status |= (ord($signature[$i]) ^ ord($hash[$i]));
|
251 |
-
}
|
252 |
-
$status |= (sta
|
19 |
* @license http://opensource.org/licenses/BSD-3-Clause 3-clause BSD
|
20 |
* @link https://github.com/firebase/php-jwt
|
21 |
*/
|
22 |
+
class JWT {
|
|
|
23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
|
25 |
+
/**
|
26 |
+
* When checking nbf, iat or expiration times,
|
27 |
+
* we want to provide some extra leeway time to
|
28 |
+
* account for clock skew.
|
29 |
+
*/
|
30 |
+
public static $leeway = 0;
|
|
|
31 |
|
32 |
+
/**
|
33 |
+
* Allow the current timestamp to be specified.
|
34 |
+
* Useful for fixing a value within unit testing.
|
35 |
+
*
|
36 |
+
* Will default to PHP time() value if null.
|
37 |
+
*/
|
38 |
+
public static $timestamp = null;
|
|
|
39 |
|
40 |
+
public static $supported_algs = array(
|
41 |
+
'HS256' => array( 'hash_hmac', 'SHA256' ),
|
42 |
+
'HS512' => array( 'hash_hmac', 'SHA512' ),
|
43 |
+
'HS384' => array( 'hash_hmac', 'SHA384' ),
|
44 |
+
'RS256' => array( 'openssl', 'SHA256' ),
|
45 |
+
'RS384' => array( 'openssl', 'SHA384' ),
|
46 |
+
'RS512' => array( 'openssl', 'SHA512' ),
|
47 |
+
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
|
49 |
+
/**
|
50 |
+
* Decodes a JWT string into a PHP object.
|
51 |
+
*
|
52 |
+
* @param string $jwt The JWT
|
53 |
+
* @param string|array $key The key, or map of keys.
|
54 |
+
* If the algorithm used is asymmetric, this is the public key
|
55 |
+
* @param array $allowed_algs List of supported verification algorithms
|
56 |
+
* Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256'
|
57 |
+
*
|
58 |
+
* @return object The JWT's payload as a PHP object
|
59 |
+
*
|
60 |
+
* @throws UnexpectedValueException Provided JWT was invalid
|
61 |
+
* @throws SignatureInvalidException Provided JWT was invalid because the signature verification failed
|
62 |
+
* @throws BeforeValidException Provided JWT is trying to be used before it's eligible as defined by 'nbf'
|
63 |
+
* @throws BeforeValidException Provided JWT is trying to be used before it's been created as defined by 'iat'
|
64 |
+
* @throws ExpiredException Provided JWT has since expired, as defined by the 'exp' claim
|
65 |
+
*
|
66 |
+
* @uses jsonDecode
|
67 |
+
* @uses urlsafeB64Decode
|
68 |
+
*/
|
69 |
+
public static function decode( $jwt, $key, array $allowed_algs = array() ) {
|
70 |
+
$timestamp = is_null( static::$timestamp ) ? time() : static::$timestamp;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
71 |
|
72 |
+
if ( empty( $key ) ) {
|
73 |
+
throw new InvalidArgumentException( 'Key may not be empty' );
|
74 |
+
}
|
75 |
+
$tks = explode( '.', $jwt );
|
76 |
+
if ( count( $tks ) != 3 ) {
|
77 |
+
throw new UnexpectedValueException( 'Wrong number of segments' );
|
78 |
+
}
|
79 |
+
list($headb64, $bodyb64, $cryptob64) = $tks;
|
80 |
+
if ( null === ( $header = static::jsonDecode( static::urlsafeB64Decode( $headb64 ) ) ) ) {
|
81 |
+
throw new UnexpectedValueException( 'Invalid header encoding' );
|
82 |
+
}
|
83 |
+
if ( null === $payload = static::jsonDecode( static::urlsafeB64Decode( $bodyb64 ) ) ) {
|
84 |
+
throw new UnexpectedValueException( 'Invalid claims encoding' );
|
85 |
+
}
|
86 |
+
if ( false === ( $sig = static::urlsafeB64Decode( $cryptob64 ) ) ) {
|
87 |
+
throw new UnexpectedValueException( 'Invalid signature encoding' );
|
88 |
+
}
|
89 |
+
if ( empty( $header->alg ) ) {
|
90 |
+
throw new UnexpectedValueException( 'Empty algorithm' );
|
91 |
+
}
|
92 |
+
if ( empty( static::$supported_algs[ $header->alg ] ) ) {
|
93 |
+
throw new UnexpectedValueException( 'Algorithm not supported' );
|
94 |
+
}
|
95 |
+
if ( ! in_array( $header->alg, $allowed_algs ) ) {
|
96 |
+
throw new UnexpectedValueException( 'Algorithm not allowed' );
|
97 |
+
}
|
98 |
+
if ( is_array( $key ) || $key instanceof \ArrayAccess ) {
|
99 |
+
if ( isset( $header->kid ) ) {
|
100 |
+
if ( ! isset( $key[ $header->kid ] ) ) {
|
101 |
+
throw new UnexpectedValueException( '"kid" invalid, unable to lookup correct key' );
|
102 |
+
}
|
103 |
+
$key = $key[ $header->kid ];
|
104 |
+
} else {
|
105 |
+
throw new UnexpectedValueException( '"kid" empty, unable to lookup correct key' );
|
106 |
+
}
|
107 |
+
}
|
108 |
|
109 |
+
// Check the signature
|
110 |
+
if ( ! static::verify( "$headb64.$bodyb64", $sig, $key, $header->alg ) ) {
|
111 |
+
throw new SignatureInvalidException( 'Signature verification failed' );
|
112 |
+
}
|
|
|
|
|
|
|
113 |
|
114 |
+
// Check if the nbf if it is defined. This is the time that the
|
115 |
+
// token can actually be used. If it's not yet that time, abort.
|
116 |
+
if ( isset( $payload->nbf ) && $payload->nbf > ( $timestamp + static::$leeway ) ) {
|
117 |
+
throw new BeforeValidException(
|
118 |
+
'Cannot handle token prior to ' . date( DateTime::ISO8601, $payload->nbf )
|
119 |
+
);
|
120 |
+
}
|
|
|
121 |
|
122 |
+
// Check that this token has been created before 'now'. This prevents
|
123 |
+
// using tokens that have been created for later use (and haven't
|
124 |
+
// correctly used the nbf claim).
|
125 |
+
if ( isset( $payload->iat ) && $payload->iat > ( $timestamp + static::$leeway ) ) {
|
126 |
+
throw new BeforeValidException(
|
127 |
+
'Cannot handle token prior to ' . date( DateTime::ISO8601, $payload->iat )
|
128 |
+
);
|
129 |
+
}
|
130 |
|
131 |
+
// Check if this token has expired.
|
132 |
+
if ( isset( $payload->exp ) && ( $timestamp - static::$leeway ) >= $payload->exp ) {
|
133 |
+
throw new ExpiredException( 'Expired token' );
|
134 |
+
}
|
135 |
|
136 |
+
return $payload;
|
137 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
138 |
|
139 |
+
/**
|
140 |
+
* Converts and signs a PHP object or array into a JWT string.
|
141 |
+
*
|
142 |
+
* @param object|array $payload PHP object or array
|
143 |
+
* @param string $key The secret key.
|
144 |
+
* If the algorithm used is asymmetric, this is the private key
|
145 |
+
* @param string $alg The signing algorithm.
|
146 |
+
* Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256'
|
147 |
+
* @param mixed $keyId
|
148 |
+
* @param array $head An array with header elements to attach
|
149 |
+
*
|
150 |
+
* @return string A signed JWT
|
151 |
+
*
|
152 |
+
* @uses jsonEncode
|
153 |
+
* @uses urlsafeB64Encode
|
154 |
+
*/
|
155 |
+
public static function encode( $payload, $key, $alg = 'HS256', $keyId = null, $head = null ) {
|
156 |
+
$header = array(
|
157 |
+
'typ' => 'JWT',
|
158 |
+
'alg' => $alg,
|
159 |
+
);
|
160 |
+
if ( $keyId !== null ) {
|
161 |
+
$header['kid'] = $keyId;
|
162 |
+
}
|
163 |
+
if ( isset( $head ) && is_array( $head ) ) {
|
164 |
+
$header = array_merge( $head, $header );
|
165 |
+
}
|
166 |
+
$segments = array();
|
167 |
+
$segments[] = static::urlsafeB64Encode( static::jsonEncode( $header ) );
|
168 |
+
$segments[] = static::urlsafeB64Encode( static::jsonEncode( $payload ) );
|
169 |
+
$signing_input = implode( '.', $segments );
|
170 |
|
171 |
+
$signature = static::sign( $signing_input, $key, $alg );
|
172 |
+
$segments[] = static::urlsafeB64Encode( $signature );
|
173 |
|
174 |
+
return implode( '.', $segments );
|
175 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
176 |
|
177 |
+
/**
|
178 |
+
* Sign a string with a given key and algorithm.
|
179 |
+
*
|
180 |
+
* @param string $msg The message to sign
|
181 |
+
* @param string|resource $key The secret key
|
182 |
+
* @param string $alg The signing algorithm.
|
183 |
+
* Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256'
|
184 |
+
*
|
185 |
+
* @return string An encrypted message
|
186 |
+
*
|
187 |
+
* @throws DomainException Unsupported algorithm was specified
|
188 |
+
*/
|
189 |
+
public static function sign( $msg, $key, $alg = 'HS256' ) {
|
190 |
+
if ( empty( static::$supported_algs[ $alg ] ) ) {
|
191 |
+
throw new DomainException( 'Algorithm not supported' );
|
192 |
+
}
|
193 |
+
list($function, $algorithm) = static::$supported_algs[ $alg ];
|
194 |
+
switch ( $function ) {
|
195 |
+
case 'hash_hmac':
|
196 |
+
return hash_hmac( $algorithm, $msg, $key, true );
|
197 |
+
case 'openssl':
|
198 |
+
$signature = '';
|
199 |
+
$success = openssl_sign( $msg, $signature, $key, $algorithm );
|
200 |
+
if ( ! $success ) {
|
201 |
+
throw new DomainException( 'OpenSSL unable to sign data' );
|
202 |
+
} else {
|
203 |
+
return $signature;
|
204 |
+
}
|
205 |
+
}
|
206 |
+
}
|
207 |
|
208 |
+
/**
|
209 |
+
* Verify a signature with the message, key and method. Not all methods
|
210 |
+
* are symmetric, so we must have a separate verify and sign method.
|
211 |
+
*
|
212 |
+
* @param string $msg The original message (header and body)
|
213 |
+
* @param string $signature The original signature
|
214 |
+
* @param string|resource $key For HS*, a string key works. for RS*, must be a resource of an openssl public key
|
215 |
+
* @param string $alg The algorithm
|
216 |
+
*
|
217 |
+
* @return bool
|
218 |
+
*
|
219 |
+
* @throws DomainException Invalid Algorithm or OpenSSL failure
|
220 |
+
*/
|
221 |
+
private static function verify( $msg, $signature, $key, $alg ) {
|
222 |
+
if ( empty( static::$supported_algs[ $alg ] ) ) {
|
223 |
+
throw new DomainException( 'Algorithm not supported' );
|
224 |
+
}
|
|
|
|
|
|
|
225 |
|
|
|
|
|
|
|
|
|
|