[ultimatemember form_id=”760″]
| <?php | |
| /** | |
| * Plugin Name: H5P Results | |
| * Description: Adds custom shortcodes for H5P results. | |
| * Author: Tristan Mackay | |
| * Version: 1.0 | |
| * Text Domain: h5p-results | |
| * | |
| * License: GNU General Public License v3.0 | |
| * License URI: http://www.gnu.org/licenses/gpl-3.0.html | |
| * | |
| * @author Tristan Mackay | |
| * @copyright Copyright (c) 2017 | |
| * | |
| */ | |
| defined( ‘ABSPATH‘ ) or exit; | |
| function h5p_results_func($atts){ | |
| global $wpdb; | |
| $atts = shortcode_atts( array( | |
| ‘display‘ => ‘list‘, | |
| ‘tablename‘ => ‘H5P Results‘, | |
| ‘userid‘ => ‘none‘, | |
| ), $atts ); | |
| $current_user = wp_get_current_user(); | |
| if($atts[‘userid‘] !== ‘none‘) | |
| $current_user->ID = $atts[‘userid‘]; | |
| $results = $wpdb->get_results( “SELECT id, slug FROM `wp_h5p_contents`;“ ); | |
| $sql_string = ‘SELECT ‘; | |
| if($atts[‘userid‘] == ‘all‘){ | |
| $sql_string = “SELECT u.display_name, “; | |
| $atts[‘display‘] = ‘row‘; | |
| } | |
| foreach ($results as $result){ | |
| $sql_string .= “IFNULL(CONCAT(r“.$result->id.“.score , ‘/’, r“.$result->id.“.max_score),’N/A’) as ‘“.$result->slug.“‘, “; | |
| } | |
| $sql_string = substr($sql_string, 0, –2); | |
| $sql_string .= “ FROM `wp_users` as u “; | |
| foreach ($results as $result){ | |
| $sql_string .= “left join `wp_h5p_results` as r“.$result->id.“ on r“.$result->id.“.user_id = u.id and r“.$result->id.“.content_id = “.$result->id.“ “; | |
| } | |
| if($atts[‘userid‘] !== ‘all‘) | |
| $sql_string .= “WHERE u.id =“.$current_user->ID ; | |
| $results = $wpdb->get_results($sql_string); | |
| if($atts[‘display‘] == ‘row‘){ | |
| $html = “<table border=’1′>“. | |
| ‘<table class=”h5p-results”> | |
| <thead> | |
| <tr>‘; | |
| foreach ($results as $result){ | |
| $result = (array)$result; | |
| $result_keys = array_keys($result); // get keys | |
| } | |
| foreach ($result_keys as $result_key){ | |
| $html .= ‘<th>‘.$result_key.‘</th>‘; | |
| } | |
| $html .= ‘</tr></thead>‘; | |
| foreach ($results as $row){ | |
| $html .= “<tr>“; | |
| foreach ($row as $r){ | |
| $html .= “<td>“ . $r . “</td>“; | |
| } | |
| $html .= “</tr>“; | |
| //close off table mn | |
| } | |
| $html .= “</tbody></table>“; | |
| } | |
| if($atts[‘display‘] == ‘list‘){ | |
| $sql = “SELECT c.title, c.slug, r.score, r.max_score, “. | |
| “r.opened, r.finished FROM `wp_h5p_results` r LEFT JOIN “. | |
| “`wp_h5p_contents` AS c ON c.id = r.content_id WHERE r.user_id = “ | |
| .$current_user->ID; | |
| $results = $wpdb->get_results($sql); | |
| $html = ‘<table> | |
| <caption>‘.$atts[‘tablename‘].‘</caption> | |
| <thead> | |
| <tr> | |
| <th scope=”col”>Title</th> | |
| <th scope=”col”>Result</th> | |
| <th scope=”col”>Result %</th> | |
| <th scope=”col”>Completion date</th> | |
| <th scope=”col”>Time taken</th> | |
| </tr> | |
| </thead> | |
| <tbody>‘; | |
| if(count($results) >= 1){ | |
| foreach($results as $result){ | |
| // work out time taken | |
| $duration = (string)$result->finished – (string)$result->opened; | |
| $minutes = floor($duration / 60); | |
| $seconds = $duration % 60; | |
| // convert score to % | |
| $score_percent = (string)$result->score / (string)$result->max_score * 100; | |
| $result->finished = date(‘m/d/Y‘, $result->finished); | |
| $html .= ‘<tr><td>‘.$result->title.‘</td><td>‘. | |
| $result->score.‘/‘.$result->max_score.‘</td><td>‘. | |
| substr($score_percent,0,5).‘</td><td>‘. | |
| $result->finished.‘</td><td>‘. | |
| $minutes.‘:‘.$seconds.‘</td></tr>‘; | |
| } | |
| }else{ | |
| $html .= ‘<tr><td colspan=”5″>No results</td></tr>‘; | |
| } | |
| $html .= ‘</tbody></table>‘; | |
| } | |
| unset($atts); | |
| unset($current_user); | |
| return($html); | |
| } | |
| add_shortcode(‘h5p_results‘, ‘h5p_results_func‘); |