diff --git a/assets/css/frontend.css b/assets/css/frontend.css index 3126b8bba7..8f9bb03046 100755 --- a/assets/css/frontend.css +++ b/assets/css/frontend.css @@ -1 +1 @@ -@-webkit-keyframes spin-360{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0);zoom:1}50%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);zoom:1}to{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0);zoom:1}}@font-face{font-family:'FontAwesomeSensei';src:url('../fonts/fontawesome-webfont.eot');src:url('../fonts/fontawesome-webfont.eot?#iefix') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff') format('woff'),url('../fonts/fontawesome-webfont.ttf') format('truetype');font-weight:normal;font-style:normal}#main .course{position:relative;margin:0 0 1.618em;padding:0 0 1em;border-bottom:1px solid #e2e2e2}#main .course:after{content:"\0020";display:block;height:0;overflow:hidden;clear:both}#main .course header h2{margin:0}#main .course .course-meta{margin-bottom:20px}#main .course .course-meta .status{padding:.382em 1em;-webkit-border-radius:5px;border-radius:5px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;color:#fff;font-weight:bold;background:#c6c6c6}#main .course .course-meta .status:before{font-family:'FontAwesomeSensei';display:inline-block;font-size:100%;margin-right:.618em;font-weight:normal;line-height:1em;width:1em}#main .course .course-meta .status.completed{background:#63a95f}#main .course .course-meta .status.completed:before{content:"\f00c"}#main .course .course-meta .status.in-progress:before{content:"\f110"}#main .course .course-meta .status.register{background:#ed6c6c}#main .course .course-meta .status.register a{color:#fff}#main .course .course-meta .view-results{text-align:right;margin:5px 0;font-size:90%}#main .course .course-meta .single_add_to_cart_button{font-size:1em;position:relative;top:.2em}#main .course .sensei-course-meta{font-style:italic;font-size:.9em;color:#888}#main .course .sensei-course-meta a{color:#555}#main .course .sensei-course-meta .course-price{position:absolute;top:0;right:0;display:block;font-style:normal;font-weight:bold;font-size:2.244em;color:#222;-webkit-border-radius:300px;border-radius:300px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box}#main .course .entry-actions span{margin:0 1em 0 0}#main .course .course-lessons>header{margin:2.244em 0 1.618em;padding:2.244em 0 0;border-top:2px solid #e6e6e6}#main .course .course-lessons>header .course-completion-rate{font-style:italic}#main .course .course-lessons>header .meter{margin:1em 0 3em}#main .course .course-lessons .lesson header h2{margin:0}#main .course .course-lessons .lesson p.lesson-meta{font-style:italic;font-size:.9em;color:#888}#main .course .course-lessons .lesson p.lesson-meta a{color:#555}#main .course .course-lessons .lesson p.lesson-meta span{padding-left:15px}#main .course .course-lessons .lesson p.lesson-meta span:first-child{padding-left:0}#main .course .course-lessons .lesson p.lesson-meta .lesson-status{font-style:normal}#main .course .course-lessons .lesson p.lesson-meta .lesson-status.complete{color:#63a95f}#main .course .course-lessons .lesson p.lesson-meta .lesson-status.complete:before{font-family:'FontAwesomeSensei';display:inline-block;font-size:100%;margin-right:.618em;font-weight:normal;line-height:1em;width:1em;content:'\f00c'}#main .course .course-lessons .lesson p.lesson-meta .lesson-status.in-progress{color:#555}#main .course .course-lessons .lesson p.lesson-meta .lesson-status.in-progress:before{font-family:'FontAwesomeSensei';display:inline-block;font-size:100%;margin-right:.618em;font-weight:normal;line-height:1em;width:1em;content:'\f110'}.lesson .lesson-meta{margin:0 0 1.618em}.lesson-course{margin:2em 0;font-style:italic;color:#888;font-size:.9em}.lesson-course a:after{font-family:'FontAwesomeSensei';display:inline-block;font-size:100%;margin-left:.618em;font-weight:normal;line-height:1em;width:1em;text-align:right;content:'\f112';margin-left:3px}.quiz form ol#sensei-quiz-list{margin:0 0 1.618em 0}.quiz form ol#sensei-quiz-list li{position:relative;margin:0 0 1.618em;font-size:1.1em}.quiz form ol#sensei-quiz-list li>span{display:block;margin:0 0 1em;font-weight:bold}.quiz form ol#sensei-quiz-list li>span span{float:right}.quiz form ol#sensei-quiz-list li ul{position:relative;z-index:1;margin:.53em 0}.quiz form ol#sensei-quiz-list li ul li{margin:0 0 .382em;font-weight:normal;font-size:.9em;list-style:none}.quiz form ol#sensei-quiz-list li ul li.right_answer{color:green}.quiz form ol#sensei-quiz-list li ul li.user_right{color:green;font-weight:700}.quiz form ol#sensei-quiz-list li ul li.user_wrong{color:red}.quiz form ol#sensei-quiz-list li ul li input{margin:0 .382em 0 0}.quiz form ol#sensei-quiz-list li ul li label{vertical-align:middle}.quiz form ol#sensei-quiz-list li .answer_message{position:absolute;right:0;top:50%;width:100%;z-index:2;text-align:right}.quiz form ol#sensei-quiz-list li .answer_message span{text-align:right}.quiz form ol#sensei-quiz-list li .answer_message.has_notes{cursor:help}.quiz form ol#sensei-quiz-list li .answer_message.has_notes span{border-bottom:1px dotted}.quiz form ol#sensei-quiz-list li .answer_message.user_right{color:green;border-color:green}.quiz form ol#sensei-quiz-list li .answer_message.user_wrong{color:red;border-color:red}.quiz form ol#sensei-quiz-list li .answer_message .notes{display:none;cursor:help;z-index:9;position:absolute;top:20px;right:0;width:50%;background:#FFF;border:1px solid;-webkit-border-radius:10px;border-radius:10px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;padding:10px;font-size:85%;text-align:left}.quiz form ol#sensei-quiz-list li.essay-paste .answer_message,.quiz form ol#sensei-quiz-list li.gap-fill .answer_message,.quiz form ol#sensei-quiz-list li.multi-line .answer_message,.quiz form ol#sensei-quiz-list li.single-line .answer_message{position:relative;margin:10px 0;text-align:right}.quiz form input.quiz-submit{margin-right:10px}.quiz input.quiz-submit.complete,.lesson input.quiz-submit.complete{background:#63a95f}.quiz input.quiz-submit.reset,.lesson input.quiz-submit.reset{background:#ed6c6c}.lesson input.quiz-submit{margin-top:1em}.single-lesson .lesson_button_form{display:inline}div.course-container div.course{display:block;padding:5px}section.entry span.course-lesson-count{padding-left:10px}section.entry span.course-category{padding-left:10px}section.entry span.course-lesson-progress{padding-left:10px}section.entry span.course-price{padding-left:10px}#my-courses #loginform label{font-weight:bold;margin:0 1em 0 0}#my-courses #loginform .login-username,#my-courses #loginform .login-password{clear:both}#my-courses #loginform .login-remember{float:left;margin:.2em 7.2em 0 0;font-size:.9em}#my-courses #loginform .login-remember label{font-weight:normal}#my-courses.ui-tabs{position:relative;zoom:1}#my-courses.ui-tabs .ui-tabs-nav{margin:0 0 10px!important;float:left;width:100%;padding:.2em 0 0}#my-courses.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:1px;margin:0 .2em 1px 0;border-bottom:0!important;padding:0;white-space:nowrap}#my-courses.ui-tabs .ui-tabs-nav li a{float:left;padding:5px 20px;font-weight:bold;color:#777;text-decoration:none;outline:none!important;line-height:1;cursor:pointer}#my-courses.ui-tabs .ui-tabs-nav li.ui-tabs-selected{margin-bottom:0;padding-bottom:1px}#my-courses.ui-tabs .ui-tabs-nav li.ui-tabs-selected a{cursor:text}#my-courses.ui-tabs .ui-tabs-nav li.ui-state-hover a{color:#555}#my-courses.ui-tabs .ui-tabs-nav li.ui-state-active a{color:#333;background:#e2e2e2;border-radius:100px;-moz-border-radius:100px;-webkit-border-radius:100px}#my-courses.ui-tabs .ui-tabs-nav li.ui-state-disabled a{cursor:text}#my-courses.ui-tabs .ui-tabs-nav li.ui-state-processing a{cursor:text}#my-courses.ui-tabsui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a{cursor:pointer}#my-courses.ui-tabs .ui-tabs-panel{clear:both;display:block;border-width:0;padding:1em 0;background:0}#my-courses.ui-tabs .ui-tabs-hide{display:none!important}#learner-info h2{margin:20px 0}#learner-info .learner-avatar{float:right;width:120px}#learner-info .learner-content{float:left;width:calc(100% - 140px);width:-webkit-calc(100% - 140px);width:-moz-calc(100% - 140px);width:-o-calc(100% - 140px)}#learner-info .learner-content h2{margin-top:0}#learner-info .fix{clear:both}.course-container{margin:0 0 4.236em}.course-container .archive-header{border:0;padding:0}.course-container .archive-header h1{margin:0;padding:0 0 .53em;border:0;font-size:1.387em;color:#333;border-bottom:2px solid #e6e6e6;width:100%}.course-container .navigation{float:right;margin:-10px 0 0;text-align:right}.course-container .navigation a{font-weight:bold;text-transform:uppercase;font-size:11px}.course-results-lessons h2{margin:20px 0}.course-results-lessons h2.total-grade{text-decoration:underline}.course-results-lessons h2.total-grade .lesson-grade{text-decoration:underline}.course-results-lessons h2 .lesson-grade{float:right}.meter{height:25px;position:relative;margin:20px 0;background:#ededed;-moz-border-radius:25px;-webkit-border-radius:25px;border-radius:25px;clear:both}.meter>span{display:block;padding:1px 10px 0 0;height:100%;background-color:#63a95f;position:relative;overflow:hidden;text-align:right;color:#fff;min-width:45px;font-weight:bold;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.meter.orange>span{background:#d3d3d3}.meter.red>span{background:#ed6c6c}.alignleft{float:left;margin:0 1.618em 1em 0}.alignright{float:right;margin:0 0 1em 1.618em}.aligncenter{display:block;text-align:center;margin:0 auto 1.618em}.nav-next,.nav-prev{width:auto!important}.nav-next{float:right}.nav-next .meta-nav:before{content:"\2192"}.nav-prev{float:left}.nav-prev .meta-nav:before{content:"\2190"}.course-container p.sensei-message,.course p.sensei-message,.lesson p.sensei-message,.quiz p.sensei-message,.learner-info p.sensei-message,.course-container div.sensei-message,.course div.sensei-message,.lesson div.sensei-message,.quiz div.sensei-message,.learner-info div.sensei-message{margin:1.387em 0 1.618em 0;padding:1em 1.618em;border:none!important;-webkit-border-radius:5px;border-radius:5px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box}.course-container p.sensei-message:before,.course p.sensei-message:before,.lesson p.sensei-message:before,.quiz p.sensei-message:before,.learner-info p.sensei-message:before,.course-container div.sensei-message:before,.course div.sensei-message:before,.lesson div.sensei-message:before,.quiz div.sensei-message:before,.learner-info div.sensei-message:before{font-family:'FontAwesomeSensei';display:inline-block;font-size:100%;margin-right:.618em;font-weight:normal;line-height:1em;width:1em;font-size:1.387em;position:relative;top:.1em}.course-container p.sensei-message.medium,.course p.sensei-message.medium,.lesson p.sensei-message.medium,.quiz p.sensei-message.medium,.learner-info p.sensei-message.medium,.course-container div.sensei-message.medium,.course div.sensei-message.medium,.lesson div.sensei-message.medium,.quiz div.sensei-message.medium,.learner-info div.sensei-message.medium{padding:18px 20px 18px 50px;font-size:1.1em}.course-container p.sensei-message.large,.course p.sensei-message.large,.lesson p.sensei-message.large,.quiz p.sensei-message.large,.learner-info p.sensei-message.large,.course-container div.sensei-message.large,.course div.sensei-message.large,.lesson div.sensei-message.large,.quiz div.sensei-message.large,.learner-info div.sensei-message.large{padding:25px 27px 25px 50px;font-size:1.2em}.course-container p.sensei-message.rounded,.course p.sensei-message.rounded,.lesson p.sensei-message.rounded,.quiz p.sensei-message.rounded,.learner-info p.sensei-message.rounded,.course-container div.sensei-message.rounded,.course div.sensei-message.rounded,.lesson div.sensei-message.rounded,.quiz div.sensei-message.rounded,.learner-info div.sensei-message.rounded{-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.course-container p.sensei-message a,.course p.sensei-message a,.lesson p.sensei-message a,.quiz p.sensei-message a,.learner-info p.sensei-message a,.course-container div.sensei-message a,.course div.sensei-message a,.lesson div.sensei-message a,.quiz div.sensei-message a,.learner-info div.sensei-message a{text-decoration:underline}.course-container p.sensei-message a:hover,.course p.sensei-message a:hover,.lesson p.sensei-message a:hover,.quiz p.sensei-message a:hover,.learner-info p.sensei-message a:hover,.course-container div.sensei-message a:hover,.course div.sensei-message a:hover,.lesson div.sensei-message a:hover,.quiz div.sensei-message a:hover,.learner-info div.sensei-message a:hover{text-decoration:none}.course-container p.sensei-message.alert,.course p.sensei-message.alert,.lesson p.sensei-message.alert,.quiz p.sensei-message.alert,.learner-info p.sensei-message.alert,.course-container div.sensei-message.alert,.course div.sensei-message.alert,.lesson div.sensei-message.alert,.quiz div.sensei-message.alert,.learner-info div.sensei-message.alert{background:#ffd9c8}.course-container p.sensei-message.alert:before,.course p.sensei-message.alert:before,.lesson p.sensei-message.alert:before,.quiz p.sensei-message.alert:before,.learner-info p.sensei-message.alert:before,.course-container div.sensei-message.alert:before,.course div.sensei-message.alert:before,.lesson div.sensei-message.alert:before,.quiz div.sensei-message.alert:before,.learner-info div.sensei-message.alert:before{content:'\f071';color:#ed6c6c}.course-container p.sensei-message.alert a,.course p.sensei-message.alert a,.lesson p.sensei-message.alert a,.quiz p.sensei-message.alert a,.learner-info p.sensei-message.alert a,.course-container div.sensei-message.alert a,.course div.sensei-message.alert a,.lesson div.sensei-message.alert a,.quiz div.sensei-message.alert a,.learner-info div.sensei-message.alert a{color:#e73f3f}.course-container p.sensei-message.alert a:hover,.course p.sensei-message.alert a:hover,.lesson p.sensei-message.alert a:hover,.quiz p.sensei-message.alert a:hover,.learner-info p.sensei-message.alert a:hover,.course-container div.sensei-message.alert a:hover,.course div.sensei-message.alert a:hover,.lesson div.sensei-message.alert a:hover,.quiz div.sensei-message.alert a:hover,.learner-info div.sensei-message.alert a:hover{color:#e52828}.course-container p.sensei-message.download,.course p.sensei-message.download,.lesson p.sensei-message.download,.quiz p.sensei-message.download,.learner-info p.sensei-message.download,.course-container div.sensei-message.download,.course div.sensei-message.download,.lesson div.sensei-message.download,.quiz div.sensei-message.download,.learner-info div.sensei-message.download,.course-container p.sensei-message.tick,.course p.sensei-message.tick,.lesson p.sensei-message.tick,.quiz p.sensei-message.tick,.learner-info p.sensei-message.tick,.course-container div.sensei-message.tick,.course div.sensei-message.tick,.lesson div.sensei-message.tick,.quiz div.sensei-message.tick,.learner-info div.sensei-message.tick{background:#edfcd5}.course-container p.sensei-message.download:before,.course p.sensei-message.download:before,.lesson p.sensei-message.download:before,.quiz p.sensei-message.download:before,.learner-info p.sensei-message.download:before,.course-container div.sensei-message.download:before,.course div.sensei-message.download:before,.lesson div.sensei-message.download:before,.quiz div.sensei-message.download:before,.learner-info div.sensei-message.download:before,.course-container p.sensei-message.tick:before,.course p.sensei-message.tick:before,.lesson p.sensei-message.tick:before,.quiz p.sensei-message.tick:before,.learner-info p.sensei-message.tick:before,.course-container div.sensei-message.tick:before,.course div.sensei-message.tick:before,.lesson div.sensei-message.tick:before,.quiz div.sensei-message.tick:before,.learner-info div.sensei-message.tick:before{content:'\f019';color:#63a95f}.course-container p.sensei-message.download a,.course p.sensei-message.download a,.lesson p.sensei-message.download a,.quiz p.sensei-message.download a,.learner-info p.sensei-message.download a,.course-container div.sensei-message.download a,.course div.sensei-message.download a,.lesson div.sensei-message.download a,.quiz div.sensei-message.download a,.learner-info div.sensei-message.download a,.course-container p.sensei-message.tick a,.course p.sensei-message.tick a,.lesson p.sensei-message.tick a,.quiz p.sensei-message.tick a,.learner-info p.sensei-message.tick a,.course-container div.sensei-message.tick a,.course div.sensei-message.tick a,.lesson div.sensei-message.tick a,.quiz div.sensei-message.tick a,.learner-info div.sensei-message.tick a{color:#4e8b4a}.course-container p.sensei-message.download a:hover,.course p.sensei-message.download a:hover,.lesson p.sensei-message.download a:hover,.quiz p.sensei-message.download a:hover,.learner-info p.sensei-message.download a:hover,.course-container div.sensei-message.download a:hover,.course div.sensei-message.download a:hover,.lesson div.sensei-message.download a:hover,.quiz div.sensei-message.download a:hover,.learner-info div.sensei-message.download a:hover,.course-container p.sensei-message.tick a:hover,.course p.sensei-message.tick a:hover,.lesson p.sensei-message.tick a:hover,.quiz p.sensei-message.tick a:hover,.learner-info p.sensei-message.tick a:hover,.course-container div.sensei-message.tick a:hover,.course div.sensei-message.tick a:hover,.lesson div.sensei-message.tick a:hover,.quiz div.sensei-message.tick a:hover,.learner-info div.sensei-message.tick a:hover{color:#457a42}.course-container p.sensei-message.tick:before,.course p.sensei-message.tick:before,.lesson p.sensei-message.tick:before,.quiz p.sensei-message.tick:before,.learner-info p.sensei-message.tick:before,.course-container div.sensei-message.tick:before,.course div.sensei-message.tick:before,.lesson div.sensei-message.tick:before,.quiz div.sensei-message.tick:before,.learner-info div.sensei-message.tick:before{content:'\f00c'}.course-container p.sensei-message.info,.course p.sensei-message.info,.lesson p.sensei-message.info,.quiz p.sensei-message.info,.learner-info p.sensei-message.info,.course-container div.sensei-message.info,.course div.sensei-message.info,.lesson div.sensei-message.info,.quiz div.sensei-message.info,.learner-info div.sensei-message.info{background:#eee}.course-container p.sensei-message.info:before,.course p.sensei-message.info:before,.lesson p.sensei-message.info:before,.quiz p.sensei-message.info:before,.learner-info p.sensei-message.info:before,.course-container div.sensei-message.info:before,.course div.sensei-message.info:before,.lesson div.sensei-message.info:before,.quiz div.sensei-message.info:before,.learner-info div.sensei-message.info:before{content:'\f05a'}.course-container p.sensei-message.info a,.course p.sensei-message.info a,.lesson p.sensei-message.info a,.quiz p.sensei-message.info a,.learner-info p.sensei-message.info a,.course-container div.sensei-message.info a,.course div.sensei-message.info a,.lesson div.sensei-message.info a,.quiz div.sensei-message.info a,.learner-info div.sensei-message.info a{color:#3b3b3b}.course-container p.sensei-message.info a:hover,.course p.sensei-message.info a:hover,.lesson p.sensei-message.info a:hover,.quiz p.sensei-message.info a:hover,.learner-info p.sensei-message.info a:hover,.course-container div.sensei-message.info a:hover,.course div.sensei-message.info a:hover,.lesson div.sensei-message.info a:hover,.quiz div.sensei-message.info a:hover,.learner-info div.sensei-message.info a:hover{color:#2f2f2f}.course-container p.sensei-message.note,.course p.sensei-message.note,.lesson p.sensei-message.note,.quiz p.sensei-message.note,.learner-info p.sensei-message.note,.course-container div.sensei-message.note,.course div.sensei-message.note,.lesson div.sensei-message.note,.quiz div.sensei-message.note,.learner-info div.sensei-message.note{background:#fef6d2}.course-container p.sensei-message.note:before,.course p.sensei-message.note:before,.lesson p.sensei-message.note:before,.quiz p.sensei-message.note:before,.learner-info p.sensei-message.note:before,.course-container div.sensei-message.note:before,.course div.sensei-message.note:before,.lesson div.sensei-message.note:before,.quiz div.sensei-message.note:before,.learner-info div.sensei-message.note:before{content:'\f0f6'}.course-container p.sensei-message.normal,.course p.sensei-message.normal,.lesson p.sensei-message.normal,.quiz p.sensei-message.normal,.learner-info p.sensei-message.normal,.course-container div.sensei-message.normal,.course div.sensei-message.normal,.lesson div.sensei-message.normal,.quiz div.sensei-message.normal,.learner-info div.sensei-message.normal{background:#eee;padding:9px 15px}.course-container p.sensei-message .view-quiz,.course p.sensei-message .view-quiz,.lesson p.sensei-message .view-quiz,.quiz p.sensei-message .view-quiz,.learner-info p.sensei-message .view-quiz,.course-container div.sensei-message .view-quiz,.course div.sensei-message .view-quiz,.lesson div.sensei-message .view-quiz,.quiz div.sensei-message .view-quiz,.learner-info div.sensei-message .view-quiz{float:right}.course-container a.button,.course a.button,.lesson a.button,.quiz a.button,.course-container a.comment-reply-link,.course a.comment-reply-link,.lesson a.comment-reply-link,.quiz a.comment-reply-link,.course-container #commentform #submit,.course #commentform #submit,.lesson #commentform #submit,.quiz #commentform #submit,.course-container .submit,.course .submit,.lesson .submit,.quiz .submit,.course-container input[type=submit],.course input[type=submit],.lesson input[type=submit],.quiz input[type=submit],.course-container input.button,.course input.button,.lesson input.button,.quiz input.button,.course-container button.button,.course button.button,.lesson button.button,.quiz button.button{display:inline-block;padding:5px 20px 4px;border:0;color:#fff;text-align:center;text-shadow:none;text-decoration:none;text-transform:uppercase;font-weight:bold;font-size:11px;font-family:inherit;cursor:pointer;overflow:visible;width:auto;line-height:1.618em;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;white-space:nowrap;-webkit-appearance:none;-webkit-border-radius:5px;border-radius:5px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;background:#52a8e8;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.course-container a.button:hover,.course a.button:hover,.lesson a.button:hover,.quiz a.button:hover,.course-container a.comment-reply-link:hover,.course a.comment-reply-link:hover,.lesson a.comment-reply-link:hover,.quiz a.comment-reply-link:hover,.course-container #commentform #submit:hover,.course #commentform #submit:hover,.lesson #commentform #submit:hover,.quiz #commentform #submit:hover,.course-container .submit:hover,.course .submit:hover,.lesson .submit:hover,.quiz .submit:hover,.course-container input[type=submit]:hover,.course input[type=submit]:hover,.lesson input[type=submit]:hover,.quiz input[type=submit]:hover,.course-container input.button:hover,.course input.button:hover,.lesson input.button:hover,.quiz input.button:hover,.course-container button.button:hover,.course button.button:hover,.lesson button.button:hover,.quiz button.button:hover{text-decoration:none;background:#3b9de5}.course-container a.button:active,.course a.button:active,.lesson a.button:active,.quiz a.button:active,.course-container a.comment-reply-link:active,.course a.comment-reply-link:active,.lesson a.comment-reply-link:active,.quiz a.comment-reply-link:active,.course-container #commentform #submit:active,.course #commentform #submit:active,.lesson #commentform #submit:active,.quiz #commentform #submit:active,.course-container .submit:active,.course .submit:active,.lesson .submit:active,.quiz .submit:active,.course-container input[type=submit]:active,.course input[type=submit]:active,.lesson input[type=submit]:active,.quiz input[type=submit]:active,.course-container input.button:active,.course input.button:active,.lesson input.button:active,.quiz input.button:active,.course-container button.button:active,.course button.button:active,.lesson button.button:active,.quiz button.button:active{border-color:#005393;-webkit-box-shadow:inset 0 0 7px rgba(0,0,0,0.3),0 1px 0 #fff;-moz-box-shadow:inset 0 0 7px rgba(0,0,0,0.3),0 1px 0 #fff;box-shadow:inset 0 0 7px rgba(0,0,0,0.3),0 1px 0 #fff}.course-container a.button.large,.course a.button.large,.lesson a.button.large,.quiz a.button.large,.course-container a.comment-reply-link.large,.course a.comment-reply-link.large,.lesson a.comment-reply-link.large,.quiz a.comment-reply-link.large,.course-container #commentform #submit.large,.course #commentform #submit.large,.lesson #commentform #submit.large,.quiz #commentform #submit.large,.course-container .submit.large,.course .submit.large,.lesson .submit.large,.quiz .submit.large,.course-container input[type=submit].large,.course input[type=submit].large,.lesson input[type=submit].large,.quiz input[type=submit].large,.course-container input.button.large,.course input.button.large,.lesson input.button.large,.quiz input.button.large,.course-container button.button.large,.course button.button.large,.lesson button.button.large,.quiz button.button.large{font-size:1.387em}.course-container a.button.small,.course a.button.small,.lesson a.button.small,.quiz a.button.small,.course-container a.comment-reply-link.small,.course a.comment-reply-link.small,.lesson a.comment-reply-link.small,.quiz a.comment-reply-link.small,.course-container #commentform #submit.small,.course #commentform #submit.small,.lesson #commentform #submit.small,.quiz #commentform #submit.small,.course-container .submit.small,.course .submit.small,.lesson .submit.small,.quiz .submit.small,.course-container input[type=submit].small,.course input[type=submit].small,.lesson input[type=submit].small,.quiz input[type=submit].small,.course-container input.button.small,.course input.button.small,.lesson input.button.small,.quiz input.button.small,.course-container button.button.small,.course button.button.small,.lesson button.button.small,.quiz button.button.small{font-size:.857em}.course-container a.button.course-complete,.course a.button.course-complete,.lesson a.button.course-complete,.quiz a.button.course-complete,.course-container a.comment-reply-link.course-complete,.course a.comment-reply-link.course-complete,.lesson a.comment-reply-link.course-complete,.quiz a.comment-reply-link.course-complete,.course-container #commentform #submit.course-complete,.course #commentform #submit.course-complete,.lesson #commentform #submit.course-complete,.quiz #commentform #submit.course-complete,.course-container .submit.course-complete,.course .submit.course-complete,.lesson .submit.course-complete,.quiz .submit.course-complete,.course-container input[type=submit].course-complete,.course input[type=submit].course-complete,.lesson input[type=submit].course-complete,.quiz input[type=submit].course-complete,.course-container input.button.course-complete,.course input.button.course-complete,.lesson input.button.course-complete,.quiz input.button.course-complete,.course-container button.button.course-complete,.course button.button.course-complete,.lesson button.button.course-complete,.quiz button.button.course-complete{background:#63a95f}.course-container a.button.course-complete:hover,.course a.button.course-complete:hover,.lesson a.button.course-complete:hover,.quiz a.button.course-complete:hover,.course-container a.comment-reply-link.course-complete:hover,.course a.comment-reply-link.course-complete:hover,.lesson a.comment-reply-link.course-complete:hover,.quiz a.comment-reply-link.course-complete:hover,.course-container #commentform #submit.course-complete:hover,.course #commentform #submit.course-complete:hover,.lesson #commentform #submit.course-complete:hover,.quiz #commentform #submit.course-complete:hover,.course-container .submit.course-complete:hover,.course .submit.course-complete:hover,.lesson .submit.course-complete:hover,.quiz .submit.course-complete:hover,.course-container input[type=submit].course-complete:hover,.course input[type=submit].course-complete:hover,.lesson input[type=submit].course-complete:hover,.quiz input[type=submit].course-complete:hover,.course-container input.button.course-complete:hover,.course input.button.course-complete:hover,.lesson input.button.course-complete:hover,.quiz input.button.course-complete:hover,.course-container button.button.course-complete:hover,.course button.button.course-complete:hover,.lesson button.button.course-complete:hover,.quiz button.button.course-complete:hover{background:#579b53}.course-container a.button.course-delete,.course a.button.course-delete,.lesson a.button.course-delete,.quiz a.button.course-delete,.course-container a.comment-reply-link.course-delete,.course a.comment-reply-link.course-delete,.lesson a.comment-reply-link.course-delete,.quiz a.comment-reply-link.course-delete,.course-container #commentform #submit.course-delete,.course #commentform #submit.course-delete,.lesson #commentform #submit.course-delete,.quiz #commentform #submit.course-delete,.course-container .submit.course-delete,.course .submit.course-delete,.lesson .submit.course-delete,.quiz .submit.course-delete,.course-container input[type=submit].course-delete,.course input[type=submit].course-delete,.lesson input[type=submit].course-delete,.quiz input[type=submit].course-delete,.course-container input.button.course-delete,.course input.button.course-delete,.lesson input.button.course-delete,.quiz input.button.course-delete,.course-container button.button.course-delete,.course button.button.course-delete,.lesson button.button.course-delete,.quiz button.button.course-delete{background:#ed6c6c}.course-container a.button.course-delete:hover,.course a.button.course-delete:hover,.lesson a.button.course-delete:hover,.quiz a.button.course-delete:hover,.course-container a.comment-reply-link.course-delete:hover,.course a.comment-reply-link.course-delete:hover,.lesson a.comment-reply-link.course-delete:hover,.quiz a.comment-reply-link.course-delete:hover,.course-container #commentform #submit.course-delete:hover,.course #commentform #submit.course-delete:hover,.lesson #commentform #submit.course-delete:hover,.quiz #commentform #submit.course-delete:hover,.course-container .submit.course-delete:hover,.course .submit.course-delete:hover,.lesson .submit.course-delete:hover,.quiz .submit.course-delete:hover,.course-container input[type=submit].course-delete:hover,.course input[type=submit].course-delete:hover,.lesson input[type=submit].course-delete:hover,.quiz input[type=submit].course-delete:hover,.course-container input.button.course-delete:hover,.course input.button.course-delete:hover,.lesson input.button.course-delete:hover,.quiz input.button.course-delete:hover,.course-container button.button.course-delete:hover,.course button.button.course-delete:hover,.lesson button.button.course-delete:hover,.quiz button.button.course-delete:hover{background:#ea5555}#submit{-webkit-appearance:none}@media only screen and (min-width:768px){#main .course .course-meta .course-start{margin-top:.53em}.single.logged-in #main .type-course{border:0}.single.logged-in #main .type-course header h1{margin-right:150px}} \ No newline at end of file +@-webkit-keyframes spin-360{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0);zoom:1}50%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);zoom:1}to{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0);zoom:1}}@font-face{font-family:'FontAwesomeSensei';src:url('../fonts/fontawesome-webfont.eot');src:url('../fonts/fontawesome-webfont.eot?#iefix') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff') format('woff'),url('../fonts/fontawesome-webfont.ttf') format('truetype');font-weight:normal;font-style:normal}#main .course{position:relative;margin:0 0 1.618em;padding:0 0 1em;border-bottom:1px solid #e2e2e2}#main .course:after{content:"\0020";display:block;height:0;overflow:hidden;clear:both}#main .course header h2{margin:0}#main .course .course-meta{margin-bottom:20px;clear:both}#main .course .course-meta .view-results{text-align:right;margin:5px 0;font-size:90%}#main .course .course-meta .single_add_to_cart_button{font-size:1em;position:relative;top:.2em}#main .course .sensei-course-meta{font-style:italic;font-size:.9em;color:#888}#main .course .sensei-course-meta a{color:#555}#main .course .sensei-course-meta .course-price{position:absolute;top:0;right:0;display:block;font-style:normal;font-weight:bold;font-size:2.244em;color:#222;-webkit-border-radius:300px;border-radius:300px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box}#main .course .entry-actions span{margin:0 1em 0 0}#main .course .course-lessons>header{margin:2.244em 0 1.618em;padding:2.244em 0 0;border-top:2px solid #e6e6e6}#main .course .course-lessons>header .course-completion-rate{font-style:italic}#main .course .course-lessons>header .meter{margin:1em 0 3em}#main .course .course-lessons .lesson header h2{margin:0}#main .course .course-lessons .lesson p.lesson-meta{font-style:italic;font-size:.9em;color:#888}#main .course .course-lessons .lesson p.lesson-meta a{color:#555}#main .course .course-lessons .lesson p.lesson-meta span{padding-left:15px}#main .course .course-lessons .lesson p.lesson-meta span:first-child{padding-left:0}#main .course .course-lessons .lesson p.lesson-meta .lesson-status{font-style:normal}#main .course .course-lessons .lesson p.lesson-meta .lesson-status.complete{color:#63a95f}#main .course .course-lessons .lesson p.lesson-meta .lesson-status.complete:before{font-family:'FontAwesomeSensei';display:inline-block;font-size:100%;margin-right:.618em;font-weight:normal;line-height:1em;width:1em;content:'\f00c'}#main .course .course-lessons .lesson p.lesson-meta .lesson-status.in-progress{color:#555}#main .course .course-lessons .lesson p.lesson-meta .lesson-status.in-progress:before{font-family:'FontAwesomeSensei';display:inline-block;font-size:100%;margin-right:.618em;font-weight:normal;line-height:1em;width:1em;content:'\f110'}.course .status,.course-lessons .status,.course-container .status{padding:.382em 1em;-webkit-border-radius:5px;border-radius:5px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;color:#fff;font-weight:bold;background:#c6c6c6;display:inline-block}.course .status:before,.course-lessons .status:before,.course-container .status:before{font-family:'FontAwesomeSensei';display:inline-block;font-size:100%;margin-right:.618em;font-weight:normal;line-height:1em;width:1em}.course .status.completed,.course-lessons .status.completed,.course-container .status.completed{background:#63a95f}.course .status.completed:before,.course-lessons .status.completed:before,.course-container .status.completed:before{content:"\f00c"}.course .status.in-progress:before,.course-lessons .status.in-progress:before,.course-container .status.in-progress:before{content:"\f110"}.course .status.register,.course-lessons .status.register,.course-container .status.register{background:#ed6c6c}.course .status.register a,.course-lessons .status.register a,.course-container .status.register a{color:#fff}.lesson .lesson-meta{margin:0 0 1.618em}.lesson-course{margin:2em 0;font-style:italic;color:#888;font-size:.9em}.lesson-course a:after{font-family:'FontAwesomeSensei';display:inline-block;font-size:100%;margin-left:.618em;font-weight:normal;line-height:1em;width:1em;text-align:right;content:'\f112';margin-left:3px}.quiz form ol#sensei-quiz-list{margin:0 0 1.618em 0}.quiz form ol#sensei-quiz-list li{position:relative;margin:0 0 1.618em;font-size:1.1em}.quiz form ol#sensei-quiz-list li>span{display:block;margin:0 0 1em;font-weight:bold}.quiz form ol#sensei-quiz-list li>span span{float:right}.quiz form ol#sensei-quiz-list li ul{position:relative;z-index:1;margin:.53em 0}.quiz form ol#sensei-quiz-list li ul li{margin:0 0 .382em;font-weight:normal;font-size:.9em;list-style:none}.quiz form ol#sensei-quiz-list li ul li.right_answer{color:green}.quiz form ol#sensei-quiz-list li ul li.user_right{color:green;font-weight:700}.quiz form ol#sensei-quiz-list li ul li.user_wrong{color:red}.quiz form ol#sensei-quiz-list li ul li input{margin:0 .382em 0 0}.quiz form ol#sensei-quiz-list li ul li label{vertical-align:middle}.quiz form ol#sensei-quiz-list li .answer_message{position:absolute;right:0;top:50%;width:50%;z-index:2;text-align:right}.quiz form ol#sensei-quiz-list li .answer_message span{text-align:right}.quiz form ol#sensei-quiz-list li .answer_message.has_notes span{cursor:help;border-bottom:1px dotted}.quiz form ol#sensei-quiz-list li .answer_message.user_right{color:green;border-color:green}.quiz form ol#sensei-quiz-list li .answer_message.user_wrong{color:red;border-color:red}.quiz form ol#sensei-quiz-list li .answer_message .notes{display:none;cursor:help;z-index:9;position:absolute;top:20px;right:0;width:100%;background:#FFF;border:1px solid;-webkit-border-radius:10px;border-radius:10px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;padding:10px;font-size:85%;text-align:left}.quiz form ol#sensei-quiz-list li.essay-paste .answer_message,.quiz form ol#sensei-quiz-list li.gap-fill .answer_message,.quiz form ol#sensei-quiz-list li.multi-line .answer_message,.quiz form ol#sensei-quiz-list li.single-line .answer_message{position:relative;width:100%;margin:10px 0;text-align:right}.quiz form ol#sensei-quiz-list li.essay-paste .answer_message .notes,.quiz form ol#sensei-quiz-list li.gap-fill .answer_message .notes,.quiz form ol#sensei-quiz-list li.multi-line .answer_message .notes,.quiz form ol#sensei-quiz-list li.single-line .answer_message .notes{width:50%}.quiz form input.quiz-submit{margin-right:10px}.quiz input.quiz-submit.complete,.lesson input.quiz-submit.complete{background:#63a95f}.quiz input.quiz-submit.reset,.lesson input.quiz-submit.reset{background:#ed6c6c}.lesson input.quiz-submit{margin-top:1em}.single-lesson .lesson_button_form{display:inline}div.course-container div.course{display:block;padding:5px}section.entry span.course-lesson-count{padding-left:10px}section.entry span.course-category{padding-left:10px}section.entry span.course-lesson-progress{padding-left:10px}section.entry span.course-price{padding-left:10px}#my-courses #loginform label{font-weight:bold;margin:0 1em 0 0}#my-courses #loginform .login-username,#my-courses #loginform .login-password{clear:both}#my-courses #loginform .login-remember{float:left;margin:.2em 7.2em 0 0;font-size:.9em}#my-courses #loginform .login-remember label{font-weight:normal}#my-courses.ui-tabs{position:relative;zoom:1}#my-courses.ui-tabs .ui-tabs-nav{margin:0 0 10px!important;float:left;width:100%;padding:.2em 0 0}#my-courses.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:1px;margin:0 .2em 1px 0;border-bottom:0!important;padding:0;white-space:nowrap}#my-courses.ui-tabs .ui-tabs-nav li a{float:left;padding:5px 20px;font-weight:bold;color:#777;text-decoration:none;outline:none!important;line-height:1;cursor:pointer}#my-courses.ui-tabs .ui-tabs-nav li.ui-tabs-selected{margin-bottom:0;padding-bottom:1px}#my-courses.ui-tabs .ui-tabs-nav li.ui-tabs-selected a{cursor:text}#my-courses.ui-tabs .ui-tabs-nav li.ui-state-hover a{color:#555}#my-courses.ui-tabs .ui-tabs-nav li.ui-state-active a{color:#333;background:#e2e2e2;border-radius:100px;-moz-border-radius:100px;-webkit-border-radius:100px}#my-courses.ui-tabs .ui-tabs-nav li.ui-state-disabled a{cursor:text}#my-courses.ui-tabs .ui-tabs-nav li.ui-state-processing a{cursor:text}#my-courses.ui-tabsui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a{cursor:pointer}#my-courses.ui-tabs .ui-tabs-panel{clear:both;display:block;border-width:0;padding:1em 0;background:0}#my-courses.ui-tabs .ui-tabs-hide{display:none!important}#learner-info h2{margin:20px 0}#learner-info .learner-avatar{float:right;width:120px}#learner-info .learner-content{float:left;width:calc(100% - 140px);width:-webkit-calc(100% - 140px);width:-moz-calc(100% - 140px);width:-o-calc(100% - 140px)}#learner-info .learner-content h2{margin-top:0}#learner-info .fix{clear:both}.course-container{margin:0 0 4.236em}.course-container .archive-header{border:0;padding:0}.course-container .archive-header h1{margin:0;padding:0 0 .53em;border:0;font-size:1.387em;color:#333;border-bottom:2px solid #e6e6e6;width:100%}.course-container .navigation{float:right;margin:-10px 0 0;text-align:right}.course-container .navigation a{font-weight:bold;text-transform:uppercase;font-size:11px}.course-results-lessons h2{margin:20px 0}.course-results-lessons h2.total-grade{text-decoration:underline}.course-results-lessons h2.total-grade .lesson-grade{text-decoration:underline}.course-results-lessons h2 .lesson-grade{float:right}.meter{height:25px;position:relative;margin:20px 0;background:#ededed;-moz-border-radius:25px;-webkit-border-radius:25px;border-radius:25px;clear:both}.meter>span{display:block;padding:1px 10px 0 0;height:100%;background-color:#63a95f;position:relative;overflow:hidden;text-align:right;color:#fff;min-width:45px;font-weight:bold;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.meter.orange>span{background:#d3d3d3}.meter.red>span{background:#ed6c6c}.alignleft{float:left;margin:0 1.618em 1em 0}.alignright{float:right;margin:0 0 1em 1.618em}.aligncenter{display:block;text-align:center;margin:0 auto 1.618em}.nav-next,.nav-prev{width:auto!important}.nav-next{float:right}.nav-next .meta-nav:before{content:"\2192"}.nav-prev{float:left}.nav-prev .meta-nav:before{content:"\2190"}.course-container p.sensei-message,.course p.sensei-message,.lesson p.sensei-message,.quiz p.sensei-message,.learner-info p.sensei-message,.course-container div.sensei-message,.course div.sensei-message,.lesson div.sensei-message,.quiz div.sensei-message,.learner-info div.sensei-message{margin:1.387em 0 1.618em 0;padding:1em 1.618em;border:none!important;-webkit-border-radius:5px;border-radius:5px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box}.course-container p.sensei-message:before,.course p.sensei-message:before,.lesson p.sensei-message:before,.quiz p.sensei-message:before,.learner-info p.sensei-message:before,.course-container div.sensei-message:before,.course div.sensei-message:before,.lesson div.sensei-message:before,.quiz div.sensei-message:before,.learner-info div.sensei-message:before{font-family:'FontAwesomeSensei';display:inline-block;font-size:100%;margin-right:.618em;font-weight:normal;line-height:1em;width:1em;font-size:1.387em;position:relative;top:.1em}.course-container p.sensei-message.medium,.course p.sensei-message.medium,.lesson p.sensei-message.medium,.quiz p.sensei-message.medium,.learner-info p.sensei-message.medium,.course-container div.sensei-message.medium,.course div.sensei-message.medium,.lesson div.sensei-message.medium,.quiz div.sensei-message.medium,.learner-info div.sensei-message.medium{padding:18px 20px 18px 50px;font-size:1.1em}.course-container p.sensei-message.large,.course p.sensei-message.large,.lesson p.sensei-message.large,.quiz p.sensei-message.large,.learner-info p.sensei-message.large,.course-container div.sensei-message.large,.course div.sensei-message.large,.lesson div.sensei-message.large,.quiz div.sensei-message.large,.learner-info div.sensei-message.large{padding:25px 27px 25px 50px;font-size:1.2em}.course-container p.sensei-message.rounded,.course p.sensei-message.rounded,.lesson p.sensei-message.rounded,.quiz p.sensei-message.rounded,.learner-info p.sensei-message.rounded,.course-container div.sensei-message.rounded,.course div.sensei-message.rounded,.lesson div.sensei-message.rounded,.quiz div.sensei-message.rounded,.learner-info div.sensei-message.rounded{-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.course-container p.sensei-message a,.course p.sensei-message a,.lesson p.sensei-message a,.quiz p.sensei-message a,.learner-info p.sensei-message a,.course-container div.sensei-message a,.course div.sensei-message a,.lesson div.sensei-message a,.quiz div.sensei-message a,.learner-info div.sensei-message a{text-decoration:underline}.course-container p.sensei-message a:hover,.course p.sensei-message a:hover,.lesson p.sensei-message a:hover,.quiz p.sensei-message a:hover,.learner-info p.sensei-message a:hover,.course-container div.sensei-message a:hover,.course div.sensei-message a:hover,.lesson div.sensei-message a:hover,.quiz div.sensei-message a:hover,.learner-info div.sensei-message a:hover{text-decoration:none}.course-container p.sensei-message.alert,.course p.sensei-message.alert,.lesson p.sensei-message.alert,.quiz p.sensei-message.alert,.learner-info p.sensei-message.alert,.course-container div.sensei-message.alert,.course div.sensei-message.alert,.lesson div.sensei-message.alert,.quiz div.sensei-message.alert,.learner-info div.sensei-message.alert{background:#ffd9c8}.course-container p.sensei-message.alert:before,.course p.sensei-message.alert:before,.lesson p.sensei-message.alert:before,.quiz p.sensei-message.alert:before,.learner-info p.sensei-message.alert:before,.course-container div.sensei-message.alert:before,.course div.sensei-message.alert:before,.lesson div.sensei-message.alert:before,.quiz div.sensei-message.alert:before,.learner-info div.sensei-message.alert:before{content:'\f071';color:#ed6c6c}.course-container p.sensei-message.alert a,.course p.sensei-message.alert a,.lesson p.sensei-message.alert a,.quiz p.sensei-message.alert a,.learner-info p.sensei-message.alert a,.course-container div.sensei-message.alert a,.course div.sensei-message.alert a,.lesson div.sensei-message.alert a,.quiz div.sensei-message.alert a,.learner-info div.sensei-message.alert a{color:#e73f3f}.course-container p.sensei-message.alert a:hover,.course p.sensei-message.alert a:hover,.lesson p.sensei-message.alert a:hover,.quiz p.sensei-message.alert a:hover,.learner-info p.sensei-message.alert a:hover,.course-container div.sensei-message.alert a:hover,.course div.sensei-message.alert a:hover,.lesson div.sensei-message.alert a:hover,.quiz div.sensei-message.alert a:hover,.learner-info div.sensei-message.alert a:hover{color:#e52828}.course-container p.sensei-message.download,.course p.sensei-message.download,.lesson p.sensei-message.download,.quiz p.sensei-message.download,.learner-info p.sensei-message.download,.course-container div.sensei-message.download,.course div.sensei-message.download,.lesson div.sensei-message.download,.quiz div.sensei-message.download,.learner-info div.sensei-message.download,.course-container p.sensei-message.tick,.course p.sensei-message.tick,.lesson p.sensei-message.tick,.quiz p.sensei-message.tick,.learner-info p.sensei-message.tick,.course-container div.sensei-message.tick,.course div.sensei-message.tick,.lesson div.sensei-message.tick,.quiz div.sensei-message.tick,.learner-info div.sensei-message.tick{background:#edfcd5}.course-container p.sensei-message.download:before,.course p.sensei-message.download:before,.lesson p.sensei-message.download:before,.quiz p.sensei-message.download:before,.learner-info p.sensei-message.download:before,.course-container div.sensei-message.download:before,.course div.sensei-message.download:before,.lesson div.sensei-message.download:before,.quiz div.sensei-message.download:before,.learner-info div.sensei-message.download:before,.course-container p.sensei-message.tick:before,.course p.sensei-message.tick:before,.lesson p.sensei-message.tick:before,.quiz p.sensei-message.tick:before,.learner-info p.sensei-message.tick:before,.course-container div.sensei-message.tick:before,.course div.sensei-message.tick:before,.lesson div.sensei-message.tick:before,.quiz div.sensei-message.tick:before,.learner-info div.sensei-message.tick:before{content:'\f019';color:#63a95f}.course-container p.sensei-message.download a,.course p.sensei-message.download a,.lesson p.sensei-message.download a,.quiz p.sensei-message.download a,.learner-info p.sensei-message.download a,.course-container div.sensei-message.download a,.course div.sensei-message.download a,.lesson div.sensei-message.download a,.quiz div.sensei-message.download a,.learner-info div.sensei-message.download a,.course-container p.sensei-message.tick a,.course p.sensei-message.tick a,.lesson p.sensei-message.tick a,.quiz p.sensei-message.tick a,.learner-info p.sensei-message.tick a,.course-container div.sensei-message.tick a,.course div.sensei-message.tick a,.lesson div.sensei-message.tick a,.quiz div.sensei-message.tick a,.learner-info div.sensei-message.tick a{color:#4e8b4a}.course-container p.sensei-message.download a:hover,.course p.sensei-message.download a:hover,.lesson p.sensei-message.download a:hover,.quiz p.sensei-message.download a:hover,.learner-info p.sensei-message.download a:hover,.course-container div.sensei-message.download a:hover,.course div.sensei-message.download a:hover,.lesson div.sensei-message.download a:hover,.quiz div.sensei-message.download a:hover,.learner-info div.sensei-message.download a:hover,.course-container p.sensei-message.tick a:hover,.course p.sensei-message.tick a:hover,.lesson p.sensei-message.tick a:hover,.quiz p.sensei-message.tick a:hover,.learner-info p.sensei-message.tick a:hover,.course-container div.sensei-message.tick a:hover,.course div.sensei-message.tick a:hover,.lesson div.sensei-message.tick a:hover,.quiz div.sensei-message.tick a:hover,.learner-info div.sensei-message.tick a:hover{color:#457a42}.course-container p.sensei-message.tick:before,.course p.sensei-message.tick:before,.lesson p.sensei-message.tick:before,.quiz p.sensei-message.tick:before,.learner-info p.sensei-message.tick:before,.course-container div.sensei-message.tick:before,.course div.sensei-message.tick:before,.lesson div.sensei-message.tick:before,.quiz div.sensei-message.tick:before,.learner-info div.sensei-message.tick:before{content:'\f00c'}.course-container p.sensei-message.info,.course p.sensei-message.info,.lesson p.sensei-message.info,.quiz p.sensei-message.info,.learner-info p.sensei-message.info,.course-container div.sensei-message.info,.course div.sensei-message.info,.lesson div.sensei-message.info,.quiz div.sensei-message.info,.learner-info div.sensei-message.info{background:#eee}.course-container p.sensei-message.info:before,.course p.sensei-message.info:before,.lesson p.sensei-message.info:before,.quiz p.sensei-message.info:before,.learner-info p.sensei-message.info:before,.course-container div.sensei-message.info:before,.course div.sensei-message.info:before,.lesson div.sensei-message.info:before,.quiz div.sensei-message.info:before,.learner-info div.sensei-message.info:before{content:'\f05a'}.course-container p.sensei-message.info a,.course p.sensei-message.info a,.lesson p.sensei-message.info a,.quiz p.sensei-message.info a,.learner-info p.sensei-message.info a,.course-container div.sensei-message.info a,.course div.sensei-message.info a,.lesson div.sensei-message.info a,.quiz div.sensei-message.info a,.learner-info div.sensei-message.info a{color:#3b3b3b}.course-container p.sensei-message.info a:hover,.course p.sensei-message.info a:hover,.lesson p.sensei-message.info a:hover,.quiz p.sensei-message.info a:hover,.learner-info p.sensei-message.info a:hover,.course-container div.sensei-message.info a:hover,.course div.sensei-message.info a:hover,.lesson div.sensei-message.info a:hover,.quiz div.sensei-message.info a:hover,.learner-info div.sensei-message.info a:hover{color:#2f2f2f}.course-container p.sensei-message.note,.course p.sensei-message.note,.lesson p.sensei-message.note,.quiz p.sensei-message.note,.learner-info p.sensei-message.note,.course-container div.sensei-message.note,.course div.sensei-message.note,.lesson div.sensei-message.note,.quiz div.sensei-message.note,.learner-info div.sensei-message.note{background:#fef6d2}.course-container p.sensei-message.note:before,.course p.sensei-message.note:before,.lesson p.sensei-message.note:before,.quiz p.sensei-message.note:before,.learner-info p.sensei-message.note:before,.course-container div.sensei-message.note:before,.course div.sensei-message.note:before,.lesson div.sensei-message.note:before,.quiz div.sensei-message.note:before,.learner-info div.sensei-message.note:before{content:'\f0f6'}.course-container p.sensei-message.normal,.course p.sensei-message.normal,.lesson p.sensei-message.normal,.quiz p.sensei-message.normal,.learner-info p.sensei-message.normal,.course-container div.sensei-message.normal,.course div.sensei-message.normal,.lesson div.sensei-message.normal,.quiz div.sensei-message.normal,.learner-info div.sensei-message.normal{background:#eee;padding:9px 15px}.course-container p.sensei-message .view-quiz,.course p.sensei-message .view-quiz,.lesson p.sensei-message .view-quiz,.quiz p.sensei-message .view-quiz,.learner-info p.sensei-message .view-quiz,.course-container div.sensei-message .view-quiz,.course div.sensei-message .view-quiz,.lesson div.sensei-message .view-quiz,.quiz div.sensei-message .view-quiz,.learner-info div.sensei-message .view-quiz{float:right}.course-container a.button,.course a.button,.lesson a.button,.quiz a.button,.course-container a.comment-reply-link,.course a.comment-reply-link,.lesson a.comment-reply-link,.quiz a.comment-reply-link,.course-container #commentform #submit,.course #commentform #submit,.lesson #commentform #submit,.quiz #commentform #submit,.course-container .submit,.course .submit,.lesson .submit,.quiz .submit,.course-container input[type=submit],.course input[type=submit],.lesson input[type=submit],.quiz input[type=submit],.course-container input.button,.course input.button,.lesson input.button,.quiz input.button,.course-container button.button,.course button.button,.lesson button.button,.quiz button.button{display:inline-block;padding:5px 20px 4px;border:0;color:#fff;text-align:center;text-shadow:none;text-decoration:none;text-transform:uppercase;font-weight:bold;font-size:11px;font-family:inherit;cursor:pointer;overflow:visible;width:auto;line-height:1.618em;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;white-space:nowrap;-webkit-appearance:none;-webkit-border-radius:5px;border-radius:5px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;background:#52a8e8;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.course-container a.button:hover,.course a.button:hover,.lesson a.button:hover,.quiz a.button:hover,.course-container a.comment-reply-link:hover,.course a.comment-reply-link:hover,.lesson a.comment-reply-link:hover,.quiz a.comment-reply-link:hover,.course-container #commentform #submit:hover,.course #commentform #submit:hover,.lesson #commentform #submit:hover,.quiz #commentform #submit:hover,.course-container .submit:hover,.course .submit:hover,.lesson .submit:hover,.quiz .submit:hover,.course-container input[type=submit]:hover,.course input[type=submit]:hover,.lesson input[type=submit]:hover,.quiz input[type=submit]:hover,.course-container input.button:hover,.course input.button:hover,.lesson input.button:hover,.quiz input.button:hover,.course-container button.button:hover,.course button.button:hover,.lesson button.button:hover,.quiz button.button:hover{text-decoration:none;background:#3b9de5}.course-container a.button:active,.course a.button:active,.lesson a.button:active,.quiz a.button:active,.course-container a.comment-reply-link:active,.course a.comment-reply-link:active,.lesson a.comment-reply-link:active,.quiz a.comment-reply-link:active,.course-container #commentform #submit:active,.course #commentform #submit:active,.lesson #commentform #submit:active,.quiz #commentform #submit:active,.course-container .submit:active,.course .submit:active,.lesson .submit:active,.quiz .submit:active,.course-container input[type=submit]:active,.course input[type=submit]:active,.lesson input[type=submit]:active,.quiz input[type=submit]:active,.course-container input.button:active,.course input.button:active,.lesson input.button:active,.quiz input.button:active,.course-container button.button:active,.course button.button:active,.lesson button.button:active,.quiz button.button:active{border-color:#005393;-webkit-box-shadow:inset 0 0 7px rgba(0,0,0,0.3),0 1px 0 #fff;-moz-box-shadow:inset 0 0 7px rgba(0,0,0,0.3),0 1px 0 #fff;box-shadow:inset 0 0 7px rgba(0,0,0,0.3),0 1px 0 #fff}.course-container a.button.large,.course a.button.large,.lesson a.button.large,.quiz a.button.large,.course-container a.comment-reply-link.large,.course a.comment-reply-link.large,.lesson a.comment-reply-link.large,.quiz a.comment-reply-link.large,.course-container #commentform #submit.large,.course #commentform #submit.large,.lesson #commentform #submit.large,.quiz #commentform #submit.large,.course-container .submit.large,.course .submit.large,.lesson .submit.large,.quiz .submit.large,.course-container input[type=submit].large,.course input[type=submit].large,.lesson input[type=submit].large,.quiz input[type=submit].large,.course-container input.button.large,.course input.button.large,.lesson input.button.large,.quiz input.button.large,.course-container button.button.large,.course button.button.large,.lesson button.button.large,.quiz button.button.large{font-size:1.387em}.course-container a.button.small,.course a.button.small,.lesson a.button.small,.quiz a.button.small,.course-container a.comment-reply-link.small,.course a.comment-reply-link.small,.lesson a.comment-reply-link.small,.quiz a.comment-reply-link.small,.course-container #commentform #submit.small,.course #commentform #submit.small,.lesson #commentform #submit.small,.quiz #commentform #submit.small,.course-container .submit.small,.course .submit.small,.lesson .submit.small,.quiz .submit.small,.course-container input[type=submit].small,.course input[type=submit].small,.lesson input[type=submit].small,.quiz input[type=submit].small,.course-container input.button.small,.course input.button.small,.lesson input.button.small,.quiz input.button.small,.course-container button.button.small,.course button.button.small,.lesson button.button.small,.quiz button.button.small{font-size:.857em}.course-container a.button.course-complete,.course a.button.course-complete,.lesson a.button.course-complete,.quiz a.button.course-complete,.course-container a.comment-reply-link.course-complete,.course a.comment-reply-link.course-complete,.lesson a.comment-reply-link.course-complete,.quiz a.comment-reply-link.course-complete,.course-container #commentform #submit.course-complete,.course #commentform #submit.course-complete,.lesson #commentform #submit.course-complete,.quiz #commentform #submit.course-complete,.course-container .submit.course-complete,.course .submit.course-complete,.lesson .submit.course-complete,.quiz .submit.course-complete,.course-container input[type=submit].course-complete,.course input[type=submit].course-complete,.lesson input[type=submit].course-complete,.quiz input[type=submit].course-complete,.course-container input.button.course-complete,.course input.button.course-complete,.lesson input.button.course-complete,.quiz input.button.course-complete,.course-container button.button.course-complete,.course button.button.course-complete,.lesson button.button.course-complete,.quiz button.button.course-complete{background:#63a95f}.course-container a.button.course-complete:hover,.course a.button.course-complete:hover,.lesson a.button.course-complete:hover,.quiz a.button.course-complete:hover,.course-container a.comment-reply-link.course-complete:hover,.course a.comment-reply-link.course-complete:hover,.lesson a.comment-reply-link.course-complete:hover,.quiz a.comment-reply-link.course-complete:hover,.course-container #commentform #submit.course-complete:hover,.course #commentform #submit.course-complete:hover,.lesson #commentform #submit.course-complete:hover,.quiz #commentform #submit.course-complete:hover,.course-container .submit.course-complete:hover,.course .submit.course-complete:hover,.lesson .submit.course-complete:hover,.quiz .submit.course-complete:hover,.course-container input[type=submit].course-complete:hover,.course input[type=submit].course-complete:hover,.lesson input[type=submit].course-complete:hover,.quiz input[type=submit].course-complete:hover,.course-container input.button.course-complete:hover,.course input.button.course-complete:hover,.lesson input.button.course-complete:hover,.quiz input.button.course-complete:hover,.course-container button.button.course-complete:hover,.course button.button.course-complete:hover,.lesson button.button.course-complete:hover,.quiz button.button.course-complete:hover{background:#579b53}.course-container a.button.course-delete,.course a.button.course-delete,.lesson a.button.course-delete,.quiz a.button.course-delete,.course-container a.comment-reply-link.course-delete,.course a.comment-reply-link.course-delete,.lesson a.comment-reply-link.course-delete,.quiz a.comment-reply-link.course-delete,.course-container #commentform #submit.course-delete,.course #commentform #submit.course-delete,.lesson #commentform #submit.course-delete,.quiz #commentform #submit.course-delete,.course-container .submit.course-delete,.course .submit.course-delete,.lesson .submit.course-delete,.quiz .submit.course-delete,.course-container input[type=submit].course-delete,.course input[type=submit].course-delete,.lesson input[type=submit].course-delete,.quiz input[type=submit].course-delete,.course-container input.button.course-delete,.course input.button.course-delete,.lesson input.button.course-delete,.quiz input.button.course-delete,.course-container button.button.course-delete,.course button.button.course-delete,.lesson button.button.course-delete,.quiz button.button.course-delete{background:#ed6c6c}.course-container a.button.course-delete:hover,.course a.button.course-delete:hover,.lesson a.button.course-delete:hover,.quiz a.button.course-delete:hover,.course-container a.comment-reply-link.course-delete:hover,.course a.comment-reply-link.course-delete:hover,.lesson a.comment-reply-link.course-delete:hover,.quiz a.comment-reply-link.course-delete:hover,.course-container #commentform #submit.course-delete:hover,.course #commentform #submit.course-delete:hover,.lesson #commentform #submit.course-delete:hover,.quiz #commentform #submit.course-delete:hover,.course-container .submit.course-delete:hover,.course .submit.course-delete:hover,.lesson .submit.course-delete:hover,.quiz .submit.course-delete:hover,.course-container input[type=submit].course-delete:hover,.course input[type=submit].course-delete:hover,.lesson input[type=submit].course-delete:hover,.quiz input[type=submit].course-delete:hover,.course-container input.button.course-delete:hover,.course input.button.course-delete:hover,.lesson input.button.course-delete:hover,.quiz input.button.course-delete:hover,.course-container button.button.course-delete:hover,.course button.button.course-delete:hover,.lesson button.button.course-delete:hover,.quiz button.button.course-delete:hover{background:#ea5555}#submit{-webkit-appearance:none}@media only screen and (min-width:768px){#main .course .course-meta .course-start{margin-top:.53em}.single.logged-in #main .type-course{border:0}.single.logged-in #main .type-course header h1{margin-right:150px}} \ No newline at end of file diff --git a/assets/css/frontend.less b/assets/css/frontend.less index 62ef036913..c4406ffc75 100644 --- a/assets/css/frontend.less +++ b/assets/css/frontend.less @@ -37,33 +37,7 @@ License: GPL version 2 or later - http://www.gnu.org/licenses/old-licenses/gpl-2 } .course-meta { margin-bottom: 20px; - .status { - padding: .382em 1em; - .border_radius(5px); - color: #fff; - font-weight: bold; - background: darken(@bg_dark, 5%); - &:before { - .iconbefore(); - } - &.completed { - background: @success; - &:before { - content: "\f00c"; - } - } - &.in-progress { - &:before { - content: "\f110"; - } - } - &.register { - background: @error; - a { - color: #fff; - } - } - } + clear: both; .view-results { text-align: right; margin: 5px 0; @@ -152,6 +126,39 @@ License: GPL version 2 or later - http://www.gnu.org/licenses/old-licenses/gpl-2 } } +/* Status Indicators */ + +.course, .course-lessons, .course-container { + .status { + padding: .382em 1em; + .border_radius(5px); + color: #fff; + font-weight: bold; + background: darken(@bg_dark, 5%); + display: inline-block; + &:before { + .iconbefore(); + } + &.completed { + background: @success; + &:before { + content: "\f00c"; + } + } + &.in-progress { + &:before { + content: "\f110"; + } + } + &.register { + background: @error; + a { + color: #fff; + } + } + } +} + .lesson { .lesson-meta { margin: 0 0 1.618em; @@ -217,15 +224,15 @@ License: GPL version 2 or later - http://www.gnu.org/licenses/old-licenses/gpl-2 position: absolute; right: 0; top: 50%; - width: 100%; + width: 50%; z-index: 2; text-align: right; span { text-align: right; } &.has_notes { - cursor: help; span { + cursor: help; border-bottom: 1px dotted; } } @@ -244,7 +251,7 @@ License: GPL version 2 or later - http://www.gnu.org/licenses/old-licenses/gpl-2 position: absolute; top: 20px; right: 0; - width: 50%; + width: 100%; background: #FFF; border: 1px solid; .border_radius(); @@ -256,8 +263,12 @@ License: GPL version 2 or later - http://www.gnu.org/licenses/old-licenses/gpl-2 &.essay-paste, &.gap-fill, &.multi-line, &.single-line { .answer_message { position: relative; + width: 100%; margin: 10px 0; text-align: right; + .notes { + width: 50%; + } } } } diff --git a/assets/js/general-frontend.js b/assets/js/general-frontend.js index 0e3693afef..512a7c557f 100755 --- a/assets/js/general-frontend.js +++ b/assets/js/general-frontend.js @@ -14,11 +14,11 @@ jQuery(document).ready( function($) { }, 1200); }); - jQuery(".answer_message.has_notes").mouseover(function() { - jQuery(this).children(".notes").show(); + jQuery(".answer_message.has_notes span").mouseover(function() { + jQuery(this).siblings(".notes").show(); }); - jQuery(".answer_message.has_notes").mouseout(function() { - jQuery(this).children(".notes").hide(); + jQuery(".answer_message.has_notes span").mouseout(function() { + jQuery(this).siblings(".notes").hide(); }); }); diff --git a/assets/js/lesson-metadata.js b/assets/js/lesson-metadata.js index 28635ae24a..3384e03456 100755 --- a/assets/js/lesson-metadata.js +++ b/assets/js/lesson-metadata.js @@ -78,12 +78,12 @@ jQuery(document).ready( function($) { * @access public */ jQuery.fn.resetAddQuestionForm = function() { - jQuery( '#add-new-question' ).find('div').children('input').each( function() { + jQuery( '#add-new-question' ).find('div').find('input').each( function() { if ( jQuery( this ).attr( 'type' ) != 'radio' ) { jQuery(this).attr( 'value', '' ); } // End If Statement }); - jQuery( '#add-new-question' ).find('div').children('textarea').each( function() { + jQuery( '#add-new-question' ).find('div').find('textarea').each( function() { jQuery(this).attr( 'value', '' ); }); } @@ -505,14 +505,14 @@ jQuery(document).ready( function($) { break; } // End Switch Statement // Handle Required Fields - jQuery( '#add-new-question' ).find( 'div.question_required_fields' ).children('p').children( 'input' ).each( function() { + jQuery( '#add-new-question' ).find( 'div.question_required_fields' ).find( 'input' ).each( function() { if ( jQuery( this ).attr( 'type' ) != 'radio' ) { dataToPost += '&' + jQuery( this ).attr( 'name' ) + '=' + encodeURIComponent( jQuery( this ).attr( 'value' ) ); } // End If Statement }); // Handle Question Input Fields var radioCount = 0; - jQuery( '#add-new-question' ).find( 'div.' + divFieldsClass ).children('p').children( 'input' ).each( function() { + jQuery( '#add-new-question' ).find( 'div.' + divFieldsClass ).find( 'input' ).each( function() { if ( jQuery( this ).attr( 'type' ) == 'radio' ) { // Only get the selected radio button if ( radioCount == 0 ) { diff --git a/changelog.txt b/changelog.txt index f0e988b950..40d4ba15b0 100755 --- a/changelog.txt +++ b/changelog.txt @@ -1,5 +1,17 @@ *** Sensei Changelog *** +2014.01.23 - version 1.4.8 + * New - Allowing access to courses when WooCommerce order is marked as processing + * Fix - Ensuring that all purchased courses show up on the My Courses page + * Fix - Fixing auto grading when all user's answers are incorrect + * Fix - IE compatibility fix for course completion + * Fix - Fixing update script so that all questions are not reset to multiple choice on update + * Fix - Fixing sanitisation of answer input fields + * Fix - Fixing saving of true/false questions + * Fix - Ensuring that new questions do not contain data from previous question added + * Fix - Preventing completed courses widget from showing all courses if none are completed + * Tweak - General CSS tweaks + 2013.12.13 - version 1.4.7 * Fix - Fixing add question function for WordPress 3.8+ diff --git a/classes/class-woothemes-sensei-course.php b/classes/class-woothemes-sensei-course.php index b884712aad..b43e9fa477 100755 --- a/classes/class-woothemes-sensei-course.php +++ b/classes/class-woothemes-sensei-course.php @@ -897,6 +897,10 @@ public function load_user_courses_content( $user = false, $manage = false ) { $active_html = ''; if( $user ) { + + // Allow action to be run before My Courses content has loaded + do_action( 'sensei_before_my_courses', $user->ID ); + // Logic for Active and Completed Courses if ( isset( $woothemes_sensei->settings->settings[ 'my_course_amount' ] ) && ( 0 < absint( $woothemes_sensei->settings->settings[ 'my_course_amount' ] ) ) ) { $amount = absint( $woothemes_sensei->settings->settings[ 'my_course_amount' ] ); diff --git a/classes/class-woothemes-sensei-frontend.php b/classes/class-woothemes-sensei-frontend.php index 0c194709cf..b989194307 100755 --- a/classes/class-woothemes-sensei-frontend.php +++ b/classes/class-woothemes-sensei-frontend.php @@ -123,6 +123,9 @@ public function __construct () { add_action( 'woocommerce_thankyou', array( $this, 'course_link_from_order' ), 10, 1 ); add_action( 'woocommerce_view_order', array( $this, 'course_link_from_order' ), 10, 1 ); + // Make sure correct courses are marked as active on My Courses page + add_action( 'sensei_before_my_courses', array( $this, 'activate_purchased_courses' ), 10, 1 ); + } // End __construct() /** @@ -1362,7 +1365,10 @@ public function sensei_course_start() { do_action( 'sensei_user_course_start', $current_user->ID, $post->ID ); - echo ''; + // Refresh page to avoid re-posting + ?> + + show_messages(); } + /** + * Activate all purchased courses for user + * @since 1.4.8 + * @param integer $user_id User ID + * @return void + */ + public function activate_purchased_courses( $user_id = 0 ) { + + if( $user_id ) { + + if( WooThemes_Sensei_Utils::sensei_is_woocommerce_activated() ) { + + // Get all user's orders + $order_args = array( + 'post_type' => 'shop_order', + 'posts_per_page' => -1, + 'meta_query' => array( + array( + 'key' => '_customer_user', + 'value' => $user_id + ) + ), + 'tax_query' => array( + array( + 'taxonomy' => 'shop_order_status', + 'field' => 'slug', + 'terms' => array( 'completed', 'processing' ) + ) + ) + ); + $orders = get_posts( $order_args ); + + $product_ids = array(); + $order_ids = array(); + foreach( $orders as $post ) { + + // Only process each order once + $processed = get_post_meta( $post->ID, 'sensei_products_processed', true ); + if( $processed && $processed == 'processed' ) { + continue; + } + + // Get course product IDs from order + $order = new WC_Order( $post->ID ); + $items = $order->get_items(); + foreach( $items as $item ) { + $product_id = $item['product_id']; + $product_ids[] = $product_id; + } + + $order_ids[] = $post->ID; + } + + if( count( $product_ids ) > 0 ) { + + // Get all courses from user's orders + $course_args = array( + 'post_type' => 'course', + 'posts_per_page' => -1, + 'meta_query' => array( + array( + 'key' => '_course_woocommerce_product', + 'value' => $product_ids, + 'compare' => 'IN' + ) + ) + ); + $courses = get_posts( $course_args ); + + foreach( $courses as $course ) { + + // Ignore course if already completed + $course_completed = WooThemes_Sensei_Utils::sensei_get_activity_value( array( 'post_id' => $course->ID, 'user_id' => $user_id, 'type' => 'sensei_course_end', 'field' => 'comment_content' ) ); + if( '' != $course_completed ) { + continue; + } + + // Ignore course if already started + $course_started = WooThemes_Sensei_Utils::sensei_get_activity_value( array( 'post_id' => $course->ID, 'user_id' => $user_id, 'type' => 'sensei_course_start', 'field' => 'comment_content' ) ); + if( '' != $course_started ) { + continue; + } + + // Mark course as started by user + WooThemes_Sensei_Utils::user_start_course( $user_id, $course->ID ); + } + } + + if( count( $order_ids ) > 0 ) { + foreach( $order_ids as $order_id ) { + // Mark order as processed + update_post_meta( $order_id, 'sensei_products_processed', 'processed' ); + } + } + } + } + } + } // End Class ?> \ No newline at end of file diff --git a/classes/class-woothemes-sensei-lesson.php b/classes/class-woothemes-sensei-lesson.php index 123f83adb6..fa9afd81fb 100755 --- a/classes/class-woothemes-sensei-lesson.php +++ b/classes/class-woothemes-sensei-lesson.php @@ -814,7 +814,7 @@ public function enqueue_scripts( $hook ) { if ( ( ( isset( $post_type ) && in_array( $post_type, $allowed_post_types ) ) && ( isset( $hook ) && in_array( $hook, $allowed_post_type_pages ) ) ) || ( isset( $hook ) && in_array( $hook, $allowed_hooks ) ) ) { // Load the lessons script - wp_enqueue_script( 'woosensei-lesson-metadata', $woothemes_sensei->plugin_url . 'assets/js/lesson-metadata.js', array( 'jquery' ), '1.4.7' ); + wp_enqueue_script( 'woosensei-lesson-metadata', $woothemes_sensei->plugin_url . 'assets/js/lesson-metadata.js', array( 'jquery' ), '1.4.8' ); wp_enqueue_script( 'woosensei-lesson-chosen', $woothemes_sensei->plugin_url . 'assets/chosen/chosen.jquery.min.js', array( 'jquery' ), '1.3.0' ); wp_enqueue_script( 'woosensei-chosen-ajax', $woothemes_sensei->plugin_url . 'assets/chosen/ajax-chosen.jquery.min.js', array( 'jquery', 'woosensei-lesson-chosen' ), '1.4.6' ); $translation_strings = array(); diff --git a/classes/class-woothemes-sensei-updates.php b/classes/class-woothemes-sensei-updates.php index 5e9f65a927..e74da0aa8f 100755 --- a/classes/class-woothemes-sensei-updates.php +++ b/classes/class-woothemes-sensei-updates.php @@ -84,160 +84,162 @@ public function add_update_admin_screen() { * @return void */ public function sensei_updates_page() { - // Page contents - ?> -
+ // Only allow admins to load this page and run the update functions + if( current_user_can( 'administrator' ) ) { + ?> +
-

-

+

+

- = 0 && ( ( isset( $_POST['checked'][0] ) && '' != $_POST['checked'][0] ) || ( isset( $_GET['functions'] ) && '' != $_GET['functions'] ) ) ) { + = 0 && ( ( isset( $_POST['checked'][0] ) && '' != $_POST['checked'][0] ) || ( isset( $_GET['functions'] ) && '' != $_GET['functions'] ) ) ) { - // Setup the data variables - $n = intval( $_GET['n'] ); - $functions_list = ''; - $done_processing = false; + // Setup the data variables + $n = intval( $_GET['n'] ); + $functions_list = ''; + $done_processing = false; - // Check for updates to run - if ( isset( $_POST['checked'][0] ) && '' != $_POST['checked'][0] ) { + // Check for updates to run + if ( isset( $_POST['checked'][0] ) && '' != $_POST['checked'][0] ) { - foreach ( $_POST['checked'] as $key => $value ) { + foreach ( $_POST['checked'] as $key => $value ) { - // Dynamic function call - if ( method_exists( $this, $value) ) { - $done_processing = call_user_func_array( array( $this, $value ), array( 5, $n ) ); - } else { - $done_processing = call_user_func_array( $value, array( 5, $n ) ); - } // End If Statement + // Dynamic function call + if ( method_exists( $this, $value) ) { + $done_processing = call_user_func_array( array( $this, $value ), array( 5, $n ) ); + } else { + $done_processing = call_user_func_array( $value, array( 5, $n ) ); + } // End If Statement - // Add to functions list get args - if ( '' == $functions_list ) { - $functions_list .= $value; - } else { - $functions_list .= '+' . $value; - } // End If Statement + // Add to functions list get args + if ( '' == $functions_list ) { + $functions_list .= $value; + } else { + $functions_list .= '+' . $value; + } // End If Statement - // Mark update has having been run - $this->set_update_run( $value ); + // Mark update has having been run + $this->set_update_run( $value ); - } // End For Loop + } // End For Loop - } // End If Statement + } // End If Statement - // Check for updates to run - if ( isset( $_GET['functions'] ) && '' != $_GET['functions'] ) { + // Check for updates to run + if ( isset( $_GET['functions'] ) && '' != $_GET['functions'] ) { - // Existing functions from GET variables instead of POST - $functions_array = $_GET['functions']; + // Existing functions from GET variables instead of POST + $functions_array = $_GET['functions']; - foreach ( $functions_array as $key => $value ) { + foreach ( $functions_array as $key => $value ) { - // Dynamic function call - if ( method_exists( $this, $value) ) { - $done_processing = call_user_func_array( array( $this, $value ), array( 5, $n ) ); - } else { - $done_processing = call_user_func_array( $value, array( 5, $n ) ); - } // End If Statement + // Dynamic function call + if ( method_exists( $this, $value) ) { + $done_processing = call_user_func_array( array( $this, $value ), array( 5, $n ) ); + } else { + $done_processing = call_user_func_array( $value, array( 5, $n ) ); + } // End If Statement - // Add to functions list get args - if ( '' == $functions_list ) { - $functions_list .= $value; - } else { - $functions_list .= '+' . $value; - } // End If Statement + // Add to functions list get args + if ( '' == $functions_list ) { + $functions_list .= $value; + } else { + $functions_list .= '+' . $value; + } // End If Statement - } // End For Loop + } // End For Loop - } // End If Statement + } // End If Statement - if ( ! $done_processing ) { ?> + if ( ! $done_processing ) { ?> -

+

-

  

-   

+ + +

+

or .

+ + -

-

or .

- - - -

-

', '' ); ?>

- -

- - - - - - - - - - - - - - - - - - - - - updates, array( $this, 'sort_updates' ) ); - $this->updates = array_reverse( $this->updates, true ); - foreach( $this->updates as $version => $version_updates ) { - foreach( $version_updates as $type => $updates ) { - foreach( $updates as $update => $data ) { - $update_run = $this->has_update_run( $update ); - $product = 'Sensei'; - if ( isset( $data['product'] ) && '' != $data['product'] ) { - $product = $data['product']; - } // End If Statement - ?> - - - - - - - - +

', '' ); ?>

+ +

+ +
-

- -

- -

-

+ + + + + + + + + + + + + + + + + + + updates, array( $this, 'sort_updates' ) ); + $this->updates = array_reverse( $this->updates, true ); + foreach( $this->updates as $version => $version_updates ) { + foreach( $version_updates as $type => $updates ) { + foreach( $updates as $update => $data ) { + $update_run = $this->has_update_run( $update ); + $product = 'Sensei'; + if ( isset( $data['product'] ) && '' != $data['product'] ) { + $product = $data['product']; + } // End If Statement + ?> + + + + + + + + - + ?> + -
+

+ +

+ +

+

+ - + - updates as $version => $value ) { - foreach ( $this->updates[$version] as $upgrade_type => $function_to_run ) { - if ( $upgrade_type == $type ) { - $updated = false; - // Run the update function - foreach ( $function_to_run as $function_name => $update_data ) { - if ( isset( $function_name ) && '' != $function_name ) { - if ( ! in_array( $function_name, $this->updates_run ) ) { - $updated = false; - if ( method_exists( $this, $function_name ) ) { - $updated = call_user_func( array( $this, $function_name ) ); - } elseif( function_exists( $function_name ) ) { - $updated = call_user_func( $function_name ); - } else { - // Nothing to see here... - } // End If Statement - if ( $updated ) { - array_push( $this->updates_run, $function_name ); - } // End If Statement - } - } // End If Statement - } // End For Loop - } // End If Statement + + // Only allow admins to run update functions + if( current_user_can( 'administrator' ) ) { + + // Run through all functions + foreach ( $this->updates as $version => $value ) { + foreach ( $this->updates[$version] as $upgrade_type => $function_to_run ) { + if ( $upgrade_type == $type ) { + $updated = false; + // Run the update function + foreach ( $function_to_run as $function_name => $update_data ) { + if ( isset( $function_name ) && '' != $function_name ) { + if ( ! in_array( $function_name, $this->updates_run ) ) { + $updated = false; + if ( method_exists( $this, $function_name ) ) { + $updated = call_user_func( array( $this, $function_name ) ); + } elseif( function_exists( $function_name ) ) { + $updated = call_user_func( $function_name ); + } else { + // Nothing to see here... + } // End If Statement + if ( $updated ) { + array_push( $this->updates_run, $function_name ); + } // End If Statement + } + } // End If Statement + } // End For Loop + } // End If Statement + } // End For Loop } // End For Loop - } // End For Loop - update_option( $this->token . '-upgrades', $this->updates_run ); - return true; + + update_option( $this->token . '-upgrades', $this->updates_run ); + return true; + + } + return false; } // End update() /** @@ -377,9 +387,18 @@ public function set_default_question_type() { ); $questions = get_posts( $args ); + $already_run = true; foreach( $questions as $question ) { - wp_set_post_terms( $question->ID, array( $question_type ), 'question-type' ); + if( $already_run ) { + $terms = wp_get_post_terms( $question->ID, 'question-type' ); + if( is_array( $terms ) && count( $terms ) > 0 ) { + break; + } + } + $already_run = false; + wp_set_post_terms( $question->ID, array( 'multiple-choice' ), 'question-type' ); } + return true; } // End set_default_question_type diff --git a/classes/class-woothemes-sensei-utils.php b/classes/class-woothemes-sensei-utils.php index 345bfde9a3..42dcc84fe0 100755 --- a/classes/class-woothemes-sensei-utils.php +++ b/classes/class-woothemes-sensei-utils.php @@ -353,12 +353,28 @@ public function sensei_save_quiz_answers( $submitted = false, $user_id = 0 ) { if( $submitted && intval( $user_id ) > 0 ) { foreach( $submitted as $question_id => $answer ) { + + // Get question type + $question_types = wp_get_post_terms( $question_id, 'question-type' ); + foreach( $question_types as $type ) { + $question_type = $type->slug; + } + + // Sanitise answer + switch( $question_type ) { + case 'essay-paste': $answer = nl2br( stripslashes( $answer ) ); break; + case 'multi-line': $answer = nl2br( stripslashes( $answer ) ); break; + case 'single-line': $answer = stripslashes( $answer ); break; + case 'gap-fill': $answer = stripslashes( $answer ); break; + default: $answer = maybe_serialize( $answer ); break; + } + $args = array( 'post_id' => $question_id, 'username' => $user->user_login, 'user_email' => $user->user_email, 'user_url' => $user->user_url, - 'data' => base64_encode( maybe_serialize( $answer ) ), + 'data' => base64_encode( $answer ), 'type' => 'sensei_user_answer', /* FIELD SIZE 20 */ 'parent' => 0, 'user_id' => $user_id, @@ -656,7 +672,7 @@ public function sensei_add_answer_notes( $question_id = 0, $user_id = 0, $notes $activity_logged = false; if( intval( $question_id ) > 0 ) { - $notes = base64_encode( $notes ); + $notes = base64_encode( stripslashes( $notes ) ); $args = array( 'post_id' => $question_id, 'username' => $user->user_login, @@ -953,7 +969,7 @@ public static function sensei_user_quiz_status_message( $lesson_id = 0, $user_id } elseif ( isset( $lesson_complete ) && $lesson_complete ) { - if ( isset( $quiz_grade ) && $quiz_grade && abs( $quiz_grade ) >= 0 ) { + if ( isset( $quiz_grade ) && ! is_bool( $quiz_grade ) && abs( $quiz_grade ) >= 0 ) { if ( $quiz_grade >= abs( round( $quiz_passmark_float, 2 ) ) ) { @@ -993,7 +1009,7 @@ public static function sensei_user_quiz_status_message( $lesson_id = 0, $user_id } } else { - if ( isset( $quiz_grade ) && $quiz_grade && abs( $quiz_grade ) >= 0 ) { + if ( isset( $quiz_grade ) && ! is_bool( $quiz_grade ) && abs( $quiz_grade ) >= 0 ) { if ( $quiz_grade >= abs( round( $quiz_passmark_float, 2 ) ) ) { $status = 'passed'; @@ -1037,5 +1053,42 @@ public static function sensei_user_quiz_status_message( $lesson_id = 0, $user_id return array( 'status' => $status, 'box_class' => $box_class, 'message' => $message, 'extra' => $extra ); } + /** + * Start course for user + * @since 1.4.8 + * @param integer $user_id User ID + * @param integer $course_id Course ID + * @return void + */ + public function user_start_course( $user_id = 0, $course_id = 0 ) { + + if( $user_id && $course_id ) { + + // Get user object + $user = get_userdata( $user_id ); + + // Add user to course + $args = array( + 'post_id' => $course_id, + 'username' => $user->user_login, + 'user_email' => $user->user_email, + 'user_url' => $user->user_url, + 'data' => __( 'Course started by the user', 'woothemes-sensei' ), + 'type' => 'sensei_course_start', /* FIELD SIZE 20 */ + 'parent' => 0, + 'user_id' => $user_id + ); + $activity_logged = WooThemes_Sensei_Utils::sensei_log_activity( $args ); + + // Allow further actions + if ( $activity_logged ) { + do_action( 'sensei_user_course_start', $user_id, $course_id ); + return true; + } + } + + return false; + } + } // End Class ?> \ No newline at end of file diff --git a/classes/class-woothemes-sensei.php b/classes/class-woothemes-sensei.php index 2beee5e891..3134823777 100755 --- a/classes/class-woothemes-sensei.php +++ b/classes/class-woothemes-sensei.php @@ -138,6 +138,7 @@ public function __construct ( $file ) { add_action( 'woocommerce_payment_complete' , array( $this, 'sensei_woocommerce_complete_order' ) ); add_action( 'woocommerce_thankyou' , array( $this, 'sensei_woocommerce_complete_order' ) ); add_action( 'woocommerce_order_status_completed' , array( $this, 'sensei_woocommerce_complete_order' ) ); + add_action( 'woocommerce_order_status_processing' , array( $this, 'sensei_woocommerce_complete_order' ) ); add_action( 'woocommerce_order_status_cancelled' , array( $this, 'sensei_woocommerce_cancel_order' ) ); add_action( 'woocommerce_order_status_refunded' , array( $this, 'sensei_woocommerce_cancel_order' ) ); add_action( 'subscriptions_activated_for_order', array( $this, 'sensei_activate_subscription' ) ); diff --git a/templates/single-quiz/question_type-boolean.php b/templates/single-quiz/question_type-boolean.php index 5ddc96c353..4bcc36ad5e 100644 --- a/templates/single-quiz/question_type-boolean.php +++ b/templates/single-quiz/question_type-boolean.php @@ -36,7 +36,7 @@ $answer_message = false; $answer_notes = false; -if( $lesson_complete && $user_quiz_grade && $user_quiz_grade != '' ) { +if( $lesson_complete && $user_quiz_grade != '' ) { $user_correct = false; $answer_message = __( 'Incorrect', 'woothemes-sensei' ); $answer_message_class = 'user_wrong'; @@ -72,6 +72,10 @@ $answer_class = 'user_right'; } $answer_class .= ' right_answer'; + } else { + if( ! $user_correct ) { + $answer_class = 'user_wrong'; + } } } ?> @@ -84,6 +88,10 @@ $answer_class = 'user_right'; } $answer_class .= ' right_answer'; + } else { + if( ! $user_correct ) { + $answer_class = 'user_wrong'; + } } } ?> diff --git a/templates/single-quiz/question_type-essay-paste.php b/templates/single-quiz/question_type-essay-paste.php index 641b72a07c..562b8255d7 100644 --- a/templates/single-quiz/question_type-essay-paste.php +++ b/templates/single-quiz/question_type-essay-paste.php @@ -35,7 +35,7 @@ $answer_message = false; $answer_notes = false; -if( $lesson_complete && $user_quiz_grade && $user_quiz_grade != '' ) { +if( $lesson_complete && $user_quiz_grade != '' ) { $user_correct = false; $answer_message = __( 'Incorrect', 'woothemes-sensei' ); $answer_message_class = 'user_wrong'; diff --git a/templates/single-quiz/question_type-gap-fill.php b/templates/single-quiz/question_type-gap-fill.php index a680ba9490..2260570079 100644 --- a/templates/single-quiz/question_type-gap-fill.php +++ b/templates/single-quiz/question_type-gap-fill.php @@ -36,7 +36,7 @@ $answer_message = false; $answer_notes = false; -if( $lesson_complete && $user_quiz_grade && $user_quiz_grade != '' ) { +if( $lesson_complete && $user_quiz_grade != '' ) { $user_correct = false; $answer_message = __( 'Incorrect', 'woothemes-sensei' ); $answer_message_class = 'user_wrong'; diff --git a/templates/single-quiz/question_type-multi-line.php b/templates/single-quiz/question_type-multi-line.php index bd756470b2..8d999c2073 100644 --- a/templates/single-quiz/question_type-multi-line.php +++ b/templates/single-quiz/question_type-multi-line.php @@ -35,7 +35,7 @@ $answer_message = false; $answer_notes = false; -if( $lesson_complete && $user_quiz_grade && $user_quiz_grade != '' ) { +if( $lesson_complete && $user_quiz_grade != '' ) { $user_correct = false; $answer_message = __( 'Incorrect', 'woothemes-sensei' ); $answer_message_class = 'user_wrong'; diff --git a/templates/single-quiz/question_type-multiple-choice.php b/templates/single-quiz/question_type-multiple-choice.php index 0a85868570..37d954af8c 100644 --- a/templates/single-quiz/question_type-multiple-choice.php +++ b/templates/single-quiz/question_type-multiple-choice.php @@ -35,7 +35,7 @@ $answer_message = false; $answer_notes = false; -if( $lesson_complete && $user_quiz_grade && $user_quiz_grade != '' ) { +if( $lesson_complete && $user_quiz_grade != '' ) { $user_correct = false; $answer_message = __( 'Incorrect', 'woothemes-sensei' ); $answer_message_class = 'user_wrong'; diff --git a/templates/single-quiz/question_type-single-line.php b/templates/single-quiz/question_type-single-line.php index 1e81598168..aa0727776a 100644 --- a/templates/single-quiz/question_type-single-line.php +++ b/templates/single-quiz/question_type-single-line.php @@ -35,7 +35,7 @@ $answer_message = false; $answer_notes = false; -if( $lesson_complete && $user_quiz_grade && $user_quiz_grade != '' ) { +if( $lesson_complete && $user_quiz_grade != '' ) { $user_correct = false; $answer_message = __( 'Incorrect', 'woothemes-sensei' ); $answer_message_class = 'user_wrong'; diff --git a/widgets/widget-woothemes-sensei-course-component.php b/widgets/widget-woothemes-sensei-course-component.php index f8c909fe1b..e98e1ebaee 100644 --- a/widgets/widget-woothemes-sensei-course-component.php +++ b/widgets/widget-woothemes-sensei-course-component.php @@ -202,10 +202,10 @@ protected function load_component ( $instance ) { $posts_array = array(); - if ( !empty( $course_ids ) ) { + if ( ! empty( $course_ids ) ) { $posts_array = $woothemes_sensei->post_types->course->course_query( intval( $instance['limit'] ), esc_attr( $instance['component'] ), $course_ids ); } else { - if ( 'activecourses' == esc_attr( $instance['component'] ) ) { + if ( 'activecourses' == esc_attr( $instance['component'] ) || 'completedcourses' == esc_attr( $instance['component'] ) ) { $posts_array = array(); } else { $posts_array = $woothemes_sensei->post_types->course->course_query( intval( $instance['limit'] ), esc_attr( $instance['component'] ) ); diff --git a/woothemes-sensei.php b/woothemes-sensei.php index 3285cca539..10d8af1068 100644 --- a/woothemes-sensei.php +++ b/woothemes-sensei.php @@ -3,7 +3,7 @@ Plugin Name: Sensei Plugin URI: http://www.woothemes.com/products/sensei/ Description: Sensei by WooThemes is the best Learning Management System ever! -Version: 1.4.7 +Version: 1.4.8 Author: WooThemes Author URI: http://www.woothemes.com/ License: GPL version 2 or later - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html @@ -31,7 +31,7 @@ if ( ! is_admin() ) require_once( 'inc/woothemes-sensei-template.php' ); global $woothemes_sensei; $woothemes_sensei = new WooThemes_Sensei( __FILE__ ); - $woothemes_sensei->version = '1.4.7'; + $woothemes_sensei->version = '1.4.8'; /** * Plugin updates