Advertisement
codelion

steps-ui.php

Sep 9th, 2014
406
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.52 KB | None | 0 0
  1. <?php
  2. /**
  3. * Custom Achievement Steps UI
  4. *
  5. * @package BadgeOS LearnDash
  6. * @subpackage Achievements
  7. * @author Credly, LLC
  8. * @license http://www.gnu.org/licenses/agpl.txt GNU AGPL v3.0
  9. * @link https://credly.com
  10. */
  11.  
  12. /**
  13. * Update badgeos_get_step_requirements to include our custom requirements
  14. *
  15. * @since 1.0.0
  16. *
  17. * @param array $requirements The current step requirements
  18. * @param integer $step_id The given step's post ID
  19. *
  20. * @return array The updated step requirements
  21. */
  22. function badgeos_learndash_step_requirements( $requirements, $step_id ) {
  23.  
  24. // Add our new requirements to the list
  25. $requirements[ 'learndash_trigger' ] = get_post_meta( $step_id, '_badgeos_learndash_trigger', true );
  26. $requirements[ 'learndash_object_id' ] = (int) get_post_meta( $step_id, '_badgeos_learndash_object_id', true );
  27. $requirements[ 'learndash_object_arg1' ] = (int) get_post_meta( $step_id, '_badgeos_learndash_object_arg1', true );
  28.  
  29. // Return the requirements array
  30. return $requirements;
  31.  
  32. }
  33.  
  34. add_filter( 'badgeos_get_step_requirements', 'badgeos_learndash_step_requirements', 10, 2 );
  35.  
  36. /**
  37. * Filter the BadgeOS Triggers selector with our own options
  38. *
  39. * @since 1.0.0
  40. *
  41. * @param array $triggers The existing triggers array
  42. *
  43. * @return array The updated triggers array
  44. */
  45. function badgeos_learndash_activity_triggers( $triggers ) {
  46.  
  47. $triggers[ 'learndash_trigger' ] = __( 'LearnDash Activity', 'badgeos-learndash' );
  48.  
  49. return $triggers;
  50.  
  51. }
  52.  
  53. add_filter( 'badgeos_activity_triggers', 'badgeos_learndash_activity_triggers' );
  54.  
  55. /**
  56. * Add LearnDash Triggers selector to the Steps UI
  57. *
  58. * @since 1.0.0
  59. *
  60. * @param integer $step_id The given step's post ID
  61. * @param integer $post_id The given parent post's post ID
  62. */
  63. function badgeos_learndash_step_learndash_trigger_select( $step_id, $post_id ) {
  64.  
  65. // Setup our select input
  66. echo '<select name="learndash_trigger" class="select-learndash-trigger">';
  67. echo '<option value="">' . __( 'Select a LearnDash Trigger', 'badgeos-learndash' ) . '</option>';
  68.  
  69. // Loop through all of our LearnDash trigger groups
  70. $current_trigger = get_post_meta( $step_id, '_badgeos_learndash_trigger', true );
  71.  
  72. $learndash_triggers = $GLOBALS[ 'badgeos_learndash' ]->triggers;
  73.  
  74. if ( !empty( $learndash_triggers ) ) {
  75. foreach ( $learndash_triggers as $trigger => $trigger_label ) {
  76. if ( is_array( $trigger_label ) ) {
  77. $optgroup_name = $trigger;
  78. $triggers = $trigger_label;
  79.  
  80. echo '<optgroup label="' . esc_attr( $optgroup_name ) . '">';
  81. // Loop through each trigger in the group
  82. foreach ( $triggers as $trigger_hook => $trigger_name ) {
  83. echo '<option' . selected( $current_trigger, $trigger_hook, false ) . ' value="' . esc_attr( $trigger_hook ) . '">' . esc_html( $trigger_name ) . '</option>';
  84. }
  85. echo '</optgroup>';
  86. }
  87. else {
  88. echo '<option' . selected( $current_trigger, $trigger, false ) . ' value="' . esc_attr( $trigger ) . '">' . esc_html( $trigger_label ) . '</option>';
  89. }
  90. }
  91. }
  92.  
  93. echo '</select>';
  94.  
  95. }
  96.  
  97. add_action( 'badgeos_steps_ui_html_after_trigger_type', 'badgeos_learndash_step_learndash_trigger_select', 10, 2 );
  98.  
  99. /**
  100. * Add a BuddyPress group selector to the Steps UI
  101. *
  102. * @since 1.0.0
  103. *
  104. * @param integer $step_id The given step's post ID
  105. * @param integer $post_id The given parent post's post ID
  106. */
  107. function badgeos_learndash_step_etc_select( $step_id, $post_id ) {
  108.  
  109. $current_trigger = get_post_meta( $step_id, '_badgeos_learndash_trigger', true );
  110. $current_object_id = (int) get_post_meta( $step_id, '_badgeos_learndash_object_id', true );
  111. $current_object_arg1 = (int) get_post_meta( $step_id, '_badgeos_learndash_object_arg1', true );
  112.  
  113. // Quizes
  114. echo '<select name="badgeos_learndash_quiz_id" class="select-quiz-id">';
  115. echo '<option value="">' . __( 'Any Quiz', 'badgeos-learndash' ) . '</option>';
  116.  
  117. // Loop through all objects
  118. $objects = get_posts( array(
  119. 'post_type' => 'sfwd-quiz',
  120. 'post_status' => 'publish',
  121. 'posts_per_page' => -1
  122. ) );
  123.  
  124. if ( !empty( $objects ) ) {
  125. foreach ( $objects as $object ) {
  126. $selected = '';
  127.  
  128. if ( in_array( $current_trigger, array( 'learndash_quiz_completed', 'badgeos_learndash_quiz_completed_specific' ) ) )
  129. $selected = selected( $current_object_id, $object->ID, false );
  130.  
  131. echo '<option' . $selected . ' value="' . $object->ID . '">' . esc_html( get_the_title( $object->ID ) ) . '</option>';
  132. }
  133. }
  134.  
  135. echo '</select>';
  136.  
  137. // Grade input
  138. $grade = 100;
  139.  
  140. if ( in_array( $current_trigger, array( 'badgeos_learndash_quiz_completed_specific' ) ) )
  141. $grade = (int) $current_object_arg1;
  142.  
  143. if ( empty( $grade ) )
  144. $grade = 100;
  145.  
  146. echo '<span><input name="badgeos_learndash_quiz_grade" class="input-quiz-grade" type="text" value="' . $grade . '" size="3" maxlength="3" placeholder="100" />%</span>';
  147.  
  148. // Lesson Topics
  149. echo '<select name="badgeos_learndash_topic_id" class="select-topic-id">';
  150. echo '<option value="">' . __( 'Any Lesson Topic', 'badgeos-learndash' ) . '</option>';
  151.  
  152. // Loop through all objects
  153. $objects = get_posts( array(
  154. 'post_type' => 'sfwd-topic',
  155. 'post_status' => 'publish',
  156. 'posts_per_page' => -1
  157. ) );
  158.  
  159. if ( !empty( $objects ) ) {
  160. foreach ( $objects as $object ) {
  161. $selected = '';
  162.  
  163. if ( in_array( $current_trigger, array( 'learndash_topic_completed' ) ) )
  164. $selected = selected( $current_object_id, $object->ID, false );
  165.  
  166. echo '<option' . $selected . ' value="' . $object->ID . '">' . esc_html( get_the_title( $object->ID ) ) . '</option>';
  167. }
  168. }
  169.  
  170. echo '</select>';
  171.  
  172. // Lessons
  173. echo '<select name="badgeos_learndash_lesson_id" class="select-lesson-id">';
  174. echo '<option value="">' . __( 'Any Lesson', 'badgeos-learndash' ) . '</option>';
  175.  
  176. // Loop through all objects
  177. $objects = get_posts( array(
  178. 'post_type' => 'sfwd-lessons',
  179. 'post_status' => 'publish',
  180. 'posts_per_page' => -1
  181. ) );
  182.  
  183. if ( !empty( $objects ) ) {
  184. foreach ( $objects as $object ) {
  185. $selected = '';
  186.  
  187. if ( in_array( $current_trigger, array( 'learndash_lesson_completed' ) ) )
  188. $selected = selected( $current_object_id, $object->ID, false );
  189.  
  190. echo '<option' . $selected . ' value="' . $object->ID . '">' . esc_html( get_the_title( $object->ID ) ) . '</option>';
  191. }
  192. }
  193.  
  194. echo '</select>';
  195.  
  196. // Courses
  197. echo '<select name="badgeos_learndash_course_id" class="select-course-id">';
  198. echo '<option value="">' . __( 'Any Course', 'badgeos-learndash' ) . '</option>';
  199.  
  200. // Loop through all objects
  201. $objects = get_posts( array(
  202. 'post_type' => 'sfwd-courses',
  203. 'post_status' => 'publish',
  204. 'posts_per_page' => -1
  205. ) );
  206.  
  207. if ( !empty( $objects ) ) {
  208. foreach ( $objects as $object ) {
  209. $selected = '';
  210.  
  211. if ( in_array( $current_trigger, array( 'learndash_course_completed' ) ) )
  212. $selected = selected( $current_object_id, $object->ID, false );
  213.  
  214. echo '<option' . $selected . ' value="' . $object->ID . '">' . esc_html( get_the_title( $object->ID ) ) . '</option>';
  215. }
  216. }
  217.  
  218. echo '</select>';
  219.  
  220. // Course Category
  221. echo '<select name="badgeos_learndash_course_category_id" class="select-course-category-id">';
  222. echo '<option value="">' . __( 'Any Course Tag', 'badgeos-learndash' ) . '</option>';
  223.  
  224. // Loop through all objects
  225. $objects = get_terms( 'post_tag', array(
  226. 'hide_empty' => false
  227. ) );
  228.  
  229. if ( !empty( $objects ) ) {
  230. foreach ( $objects as $object ) {
  231. $selected = '';
  232.  
  233. if ( in_array( $current_trigger, array( 'badgeos_learndash_course_completed_tag' ) ) )
  234. $selected = selected( $current_object_id, $object->term_id, false );
  235.  
  236. echo '<option' . $selected . ' value="' . $object->term_id . '">' . esc_html( $object->name ) . '</option>';
  237. }
  238. }
  239.  
  240. echo '</select>';
  241.  
  242. }
  243.  
  244. add_action( 'badgeos_steps_ui_html_after_trigger_type', 'badgeos_learndash_step_etc_select', 10, 2 );
  245.  
  246. /**
  247. * AJAX Handler for saving all steps
  248. *
  249. * @since 1.0.0
  250. *
  251. * @param string $title The original title for our step
  252. * @param integer $step_id The given step's post ID
  253. * @param array $step_data Our array of all available step data
  254. *
  255. * @return string Our potentially updated step title
  256. */
  257. function badgeos_learndash_save_step( $title, $step_id, $step_data ) {
  258.  
  259. // If we're working on a LearnDash trigger
  260. if ( 'learndash_trigger' == $step_data[ 'trigger_type' ] ) {
  261.  
  262. // Update our LearnDash trigger post meta
  263. update_post_meta( $step_id, '_badgeos_learndash_trigger', $step_data[ 'learndash_trigger' ] );
  264.  
  265. // Rewrite the step title
  266. $title = $step_data[ 'learndash_trigger_label' ];
  267.  
  268. $object_id = 0;
  269. $object_arg1 = 0;
  270.  
  271. // Quiz specific (pass)
  272. if ( 'learndash_quiz_completed' == $step_data[ 'learndash_trigger' ] ) {
  273. // Get Object ID
  274. $object_id = (int) $step_data[ 'learndash_quiz_id' ];
  275.  
  276. // Set new step title
  277. if ( empty( $object_id ) ) {
  278. $title = __( 'Completed any quiz', 'badgeos-learndash' );
  279. }
  280. else {
  281. $title = sprintf( __( 'Completed quiz "%s"', 'badgeos-learndash' ), get_the_title( $object_id ) );
  282. }
  283. }
  284. // Quiz specific (grade specific)
  285. elseif ( 'badgeos_learndash_quiz_completed_specific' == $step_data[ 'learndash_trigger' ] ) {
  286. // Get Object ID
  287. $object_id = (int) $step_data[ 'learndash_quiz_id' ];
  288. $object_arg1 = (int) $step_data[ 'learndash_quiz_grade' ];
  289.  
  290. // Set new step title
  291. if ( empty( $object_id ) ) {
  292. $title = sprintf( __( 'Completed any quiz with a score of %d or higher', 'badgeos-learndash' ), $object_arg1 );
  293. }
  294. else {
  295. $title = sprintf( __( 'Completed quiz "%s" with a score of %d or higher', 'badgeos-learndash' ), get_the_title( $object_id ), $object_arg1 );
  296. }
  297. }
  298. // Quiz specific (fail)
  299. elseif ( 'badgeos_learndash_quiz_completed_fail' == $step_data[ 'learndash_trigger' ] ) {
  300. // Get Object ID
  301. $object_id = (int) $step_data[ 'learndash_quiz_id' ];
  302.  
  303. // Set new step title
  304. if ( empty( $object_id ) ) {
  305. $title = sprintf( __( 'Failed any quiz', 'badgeos-learndash' ), $object_arg1 );
  306. }
  307. else {
  308. $title = sprintf( __( 'Failed quiz "%s"', 'badgeos-learndash' ), get_the_title( $object_id ), $object_arg1 );
  309. }
  310. }
  311. // Topic specific
  312. elseif ( 'learndash_topic_completed' == $step_data[ 'learndash_trigger' ] ) {
  313. // Get Object ID
  314. $object_id = (int) $step_data[ 'learndash_lesson_id' ];
  315.  
  316. // Set new step title
  317. if ( empty( $object_id ) ) {
  318. $title = __( 'Completed any lesson topic', 'badgeos-learndash' );
  319. }
  320. else {
  321. $title = sprintf( __( 'Completed lesson topic "%s"', 'badgeos-learndash' ), get_the_title( $object_id ) );
  322. }
  323. }
  324. // Lesson specific
  325. elseif ( 'learndash_lesson_completed' == $step_data[ 'learndash_trigger' ] ) {
  326. // Get Object ID
  327. $object_id = (int) $step_data[ 'learndash_lesson_id' ];
  328.  
  329. // Set new step title
  330. if ( empty( $object_id ) ) {
  331. $title = __( 'Completed any lesson', 'badgeos-learndash' );
  332. }
  333. else {
  334. $title = sprintf( __( 'Completed lesson "%s"', 'badgeos-learndash' ), get_the_title( $object_id ) );
  335. }
  336. }
  337. // Course specific
  338. elseif ( 'learndash_course_completed' == $step_data[ 'learndash_trigger' ] ) {
  339. // Get Object ID
  340. $object_id = (int) $step_data[ 'learndash_course_id' ];
  341.  
  342. // Set new step title
  343. if ( empty( $object_id ) ) {
  344. $title = __( 'Completed any course', 'badgeos-learndash' );
  345. }
  346. else {
  347. $title = sprintf( __( 'Completed course "%s"', 'badgeos-learndash' ), get_the_title( $object_id ) );
  348. }
  349. }
  350. // Course Category specific
  351. elseif ( 'badgeos_learndash_course_completed_tag' == $step_data[ 'learndash_trigger' ] ) {
  352. // Get Object ID
  353. $object_id = (int) $step_data[ 'learndash_course_category_id' ];
  354.  
  355. // Set new step title
  356. if ( empty( $object_id ) ) {
  357. $title = __( 'Completed course in any tag', 'badgeos-learndash' );
  358. }
  359. else {
  360. $title = sprintf( __( 'Completed course in tag "%s"', 'badgeos-learndash' ), get_term( $object_id, 'post_tag' )->name );
  361. }
  362. }
  363.  
  364. // Store our Object ID in meta
  365. update_post_meta( $step_id, '_badgeos_learndash_object_id', $object_id );
  366. update_post_meta( $step_id, '_badgeos_learndash_object_arg1', $object_arg1 );
  367. }
  368.  
  369. // Send back our custom title
  370. return $title;
  371.  
  372. }
  373.  
  374. add_filter( 'badgeos_save_step', 'badgeos_learndash_save_step', 10, 3 );
  375.  
  376. /**
  377. * Include custom JS for the BadgeOS Steps UI
  378. *
  379. * @since 1.0.0
  380. */
  381. function badgeos_learndash_step_js() {
  382.  
  383. ?>
  384. <script type="text/javascript">
  385. jQuery( document ).ready( function ( $ ) {
  386.  
  387. // Listen for our change to our trigger type selector
  388. $( document ).on( 'change', '.select-trigger-type', function () {
  389.  
  390. var trigger_type = $( this );
  391.  
  392. // Show our group selector if we're awarding based on a specific group
  393. if ( 'learndash_trigger' == trigger_type.val() ) {
  394. trigger_type.siblings( '.select-learndash-trigger' ).show().change();
  395. }
  396. else {
  397. trigger_type.siblings( '.select-learndash-trigger' ).hide().change();
  398. }
  399.  
  400. } );
  401.  
  402. // Listen for our change to our trigger type selector
  403. $( document ).on( 'change', '.select-learndash-trigger,' +
  404. '.select-quiz-id,' +
  405. '.select-topic-id,' +
  406. '.select-lesson-id,' +
  407. '.select-course-id,' +
  408. '.select-course-category-id', function () {
  409.  
  410. badgeos_learndash_step_change( $( this ) );
  411.  
  412. } );
  413.  
  414. // Trigger a change so we properly show/hide our LearnDash menues
  415. $( '.select-trigger-type' ).change();
  416.  
  417. // Inject our custom step details into the update step action
  418. $( document ).on( 'update_step_data', function ( event, step_details, step ) {
  419. step_details.learndash_trigger = $( '.select-learndash-trigger', step ).val();
  420. step_details.learndash_trigger_label = $( '.select-learndash-trigger option', step ).filter( ':selected' ).text();
  421.  
  422. step_details.learndash_quiz_id = $( '.select-quiz-id', step ).val();
  423. step_details.learndash_quiz_grade = $( '.input-quiz-grade', step ).val();
  424. step_details.learndash_lesson_id = $( '.select-topic-id', step ).val();
  425. step_details.learndash_lesson_id = $( '.select-lesson-id', step ).val();
  426. step_details.learndash_course_id = $( '.select-course-id', step ).val();
  427. step_details.learndash_course_category_id = $( '.select-course-category-id', step ).val();
  428. } );
  429.  
  430. } );
  431.  
  432. function badgeos_learndash_step_change( $this ) {
  433. var trigger_parent = $this.parent(),
  434. trigger_value = trigger_parent.find( '.select-learndash-trigger' ).val();
  435.  
  436. // Quiz specific
  437. trigger_parent.find( '.select-quiz-id' )
  438. .toggle(
  439. ( 'learndash_quiz_completed' == trigger_value
  440. || 'badgeos_learndash_quiz_completed_specific' == trigger_value
  441. || 'badgeos_learndash_quiz_completed_fail' == trigger_value )
  442. );
  443.  
  444. // Lesson Topic specific
  445. trigger_parent.find( '.select-topic-id' )
  446. .toggle( 'learndash_topic_completed' == trigger_value );
  447.  
  448. // Lesson specific
  449. trigger_parent.find( '.select-lesson-id' )
  450. .toggle( 'learndash_lesson_completed' == trigger_value );
  451.  
  452. // Course specific
  453. trigger_parent.find( '.select-course-id' )
  454. .toggle( 'learndash_course_completed' == trigger_value );
  455.  
  456. // Course Category specific
  457. trigger_parent.find( '.select-course-category-id' )
  458. .toggle( 'badgeos_learndash_course_completed_tag' == trigger_value );
  459.  
  460. // Quiz Grade specific
  461. trigger_parent.find( '.input-quiz-grade' ).parent() // target parent span
  462. .toggle( 'badgeos_learndash_quiz_completed_specific' == trigger_value );
  463.  
  464. if ( ( 'learndash_quiz_completed' == trigger_value
  465. && '' != trigger_parent.find( '.select-quiz-id' ).val() )
  466. || ( 'badgeos_learndash_quiz_completed_specific' == trigger_value
  467. && '' != trigger_parent.find( '.select-quiz-id' ).val() )
  468. || ( 'badgeos_learndash_quiz_completed_fail' == trigger_value
  469. && '' != trigger_parent.find( '.select-quiz-id' ).val() )
  470. || ( 'learndash_topic_completed' == trigger_value
  471. && '' != trigger_parent.find( '.select-topic-id' ).val() )
  472. || ( 'learndash_lesson_completed' == trigger_value
  473. && '' != trigger_parent.find( '.select-lesson-id' ).val() )
  474. || ( 'learndash_course_completed' == trigger_value
  475. && '' != trigger_parent.find( '.select-course-id' ).val() )
  476. || ( 'badgeos_learndash_course_completed_tag' == trigger_value
  477. && '' != trigger_parent.find( '.select-course-category-id' ).val() ) ) {
  478. trigger_parent.find( '.required-count' )
  479. .val( '1' )
  480. .prop( 'disabled', true );
  481. }
  482. }
  483. </script>
  484. <?php
  485. }
  486.  
  487. add_action( 'admin_footer', 'badgeos_learndash_step_js' );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement