/** * Extend user capabilities with Groups user capabilities. * * @param array $allcaps the capabilities the user has * @param array $caps the requested capabilities * @param array $args capability context which can provide the requested capability as $args[0], the user ID as $args[1] and the related object's ID as $args[2] */ public static function user_has_cap($allcaps, $caps, $args) { $user_id = isset($args[1]) ? $args[1] : null; $groups_user = new Groups_User($user_id); if (is_array($caps)) { // we need to deactivate this because invoking $groups_user->can() // would trigger this same function and we would end up // in an infinite loop remove_filter('user_has_cap', array(__CLASS__, 'user_has_cap'), 10, 3); foreach ($caps as $cap) { if ($groups_user->can($cap)) { $allcaps[$cap] = true; } } add_filter('user_has_cap', array(__CLASS__, 'user_has_cap'), 10, 3); } return $allcaps; }
/** * Get all the capabilities that the user has (only user defined). * * @param $user * * @return array array of capabilities and groups */ public function get_user_capabilities_and_groups($user_id) { if (isset($this->_user_capabilities_groups)) { // return value in cache return $this->_user_capabilities_groups; } $user_capabilities = array(); // Fetch current user's groups $groups_user = new Groups_User($user_id); $groups = $groups_user->__get(Groups_User::CACHE_GROUP); if (!isset($groups)) { return null; } foreach ($groups as $group) { if (!isset($group)) { continue; } // Fetch capabilities of current user's groups $capabilities = $group->__get(Groups_User::CAPABILITIES); if (!isset($capabilities)) { continue; } foreach ($capabilities as $capability) { if (isset($capability) && isset($capability->capability)) { $user_capabilities[] = array('capability' => $capability->capability->capability, 'group' => $group->name); } } } // Store in cache: this value is used for all documents returned by a Solr query $this->_user_capabilities_groups = $user_capabilities; return $this->_user_capabilities_groups; }
/** * Returns true if the user has any of the capabilities that grant access to the post. * * @param int $post_id post id * @param int $user_id user id or null for current user * @return boolean true if user can read the post */ public static function user_can_read_post($post_id, $user_id = null) { $result = false; if (!empty($post_id)) { if ($user_id === null) { $user_id = get_current_user_id(); } $cached = Groups_Cache::get(self::CAN_READ_POST . '_' . $user_id . '_' . $post_id, self::CACHE_GROUP); if ($cached !== null) { $result = $cached->value; unset($cached); } else { $groups_user = new Groups_User($user_id); $read_caps = self::get_read_post_capabilities($post_id); if (!empty($read_caps)) { foreach ($read_caps as $read_cap) { if ($groups_user->can($read_cap)) { $result = true; break; } } } else { $result = true; } $result = apply_filters('groups_post_access_user_can_read_post', $result, $post_id, $user_id); Groups_Cache::set(self::CAN_READ_POST . '_' . $user_id . '_' . $post_id, $result, self::CACHE_GROUP); } } return $result; }
function savedquest_options() { if (!current_user_can('manage_options')) { wp_die(__('You do not have sufficient permissions to access this page.')); } echo '<div class="wrap" style="background:#fff;">'; if (isset($_GET['tab'])) { $tab = $_GET['tab']; } else { $tab = ""; } saved_admin_tab($tab); if ($tab == "quiztaken" or $tab == "") { ?> <table class="wp-list-table widefat fixed striped pages" width="100%" style="border-spacing: 0; text-align:center;" > <tr> <th>Lesson ID</th> <th>Lesson Title</th> <th>Number Of Questions</th> <th>Question Answered</th> <th>Unanswered Question</th> <th>User</th> <th>User Id</th> <th>DATE And Time</th> </tr> <?php $svequiz = get_option('savequiz_list'); ?> <?php foreach ($svequiz as $quizdata) { ?> <tr> <td><?php echo $quizdata['lesson_id']; ?> </td> <td><?php echo $quizdata['lesson_title']; ?> </td> <td><?php echo $quizdata['total_questtion']; ?> </td> <td><?php echo $quizdata['question_answered']; ?> (<?php echo get_percentage($quizdata['total_questtion'], $quizdata['question_answered']) . "%"; ?> )</td> <td><?php echo $quizdata['remaining_question']; ?> (<?php echo 100 - get_percentage($quizdata['total_questtion'], $quizdata['question_answered']) . "%"; ?> )</td> <td><?php echo $quizdata['fullname']; ?> </td> <td><?php echo $quizdata['user_id']; ?> </td> <td><?php echo $quizdata['DATETIME']; ?> </td> </tr> <?php } ?> </table> <?php } elseif ($tab == "timesession") { $user_last_login_logout = get_option('user_last_login_logout'); ?> <br /><br/> <table class="wp-list-table widefat fixed striped pages" width="100%" style="border-spacing: 0; text-align:center;" > <tr> <th>User ID</th> <th>Full Name</th> <th>Last Login</th> <th>Last Logout</th> <th>Amout of Time Spent</th> <th>Role</th> </tr> <?php $svequiz = get_option('savequiz_list'); ?> <?php foreach ($user_last_login_logout as $last_login_logout) { ?> <?php if ($last_login_logout['user_id'] != "") { ?> <?php $user_info = get_userdata($last_login_logout['user_id']); ?> <tr> <td><?php echo $last_login_logout['user_id']; ?> </td> <td><?php echo $user_info->display_name; ?> </td> <td><?php echo gettime_st($last_login_logout['logintime']); ?> </td> <td><?php echo gettime_st($last_login_logout['logouttime']); ?> </td> <?php if ($last_login_logout['logouttime'] != "") { $date1 = date_create($last_login_logout['logintime']); $date2 = date_create($last_login_logout['logouttime']); $diff = date_diff($date1, $date2); $diftime = $diff->format("%h Hours %i Minute %s Seconds"); } else { $diftime = ""; } ?> <th><?php echo $diftime; ?> </th> <td><?php echo implode(', ', $user_info->roles); ?> </td> </tr> <?php } ?> <?php } ?> </table><br /><br /> <?php } elseif ($tab == "timequizecompleted") { global $woothemes_sensei, $post, $current_user, $wp_query, $learner_user; echo "<table class='wp-list-table widefat fixed striped pages'>"; $allUsers = get_users(); echo "<tr>\r\r\n\t\t\t\t<th>User</th>\r\r\n\t\t\t\t<th>Courses</th>\r\r\n\t\t\t\t<th>Percentage Incomplete</th>\r\r\n\t\t\t\t<th>Percentage Complete</th>\r\r\n\t\t\t\t<th>Percentage Competent</th>\r\r\n\t\t\t\t<th>Percentage Attempted</th>\r\r\n\t\t\t\t<th>Length of time Course Completed</th>\r\r\n\t\t\t </tr>"; foreach ($allUsers as $user) { $args = array('post_type' => 'course'); $courses = get_posts($args); $i = 1; foreach ($courses as $course) { $course_user_grade = WooThemes_Sensei_Utils::sensei_course_user_grade($course->ID, $user->ID); $course_status = WooThemes_Sensei_Utils::user_course_status($course->ID, $user->ID); $course_status_update = get_comment_meta($course_status->comment_ID); if (!empty($course_status)) { $displayed_lessons = array(); $modules = Sensei()->modules->get_course_modules(intval($course->ID)); foreach ($modules as $module) { $args = array('post_type' => 'lesson', 'post_status' => 'publish', 'posts_per_page' => -1, 'meta_query' => array(array('key' => '_lesson_course', 'value' => intval($course->ID), 'compare' => '=')), 'tax_query' => array(array('taxonomy' => Sensei()->modules->taxonomy, 'field' => 'id', 'terms' => intval($module->term_id))), 'meta_key' => '_order_module_' . $module->term_id, 'orderby' => 'meta_value_num date', 'order' => 'ASC', 'suppress_filters' => 0); $lessons = get_posts($args); if (count($lessons) > 0) { $html .= '<h3>' . $module->name . '</h3>' . "\n"; $count = 0; foreach ($lessons as $lesson_item) { $lesson_grade = ' n/a'; $has_questions = get_post_meta($lesson_item->ID, '_quiz_has_questions', true); if ($has_questions) { $lesson_status = WooThemes_Sensei_Utils::user_lesson_status($lesson_item->ID, $user->ID); // Get user quiz grade $lesson_grade = get_comment_meta($lesson_status->comment_ID, 'grade', true); if ($lesson_grade) { $lesson_grade .= '%'; } $modulequizdata = get_comment_meta($lesson_status->comment_ID); //echo "<a href='".get_post_permalink($lesson_item->ID)."'>".$lesson_item->post_title."</a><br />"; $modulequestion_asked = count(explode(",", $modulequizdata['questions_asked'][0])); $moduleanswered_quiz = count(unserialize($modulequizdata['quiz_answers'][0])); //echo "number of questions:".$modulequestion_asked."<br />"; //echo "number of Answered:".$moduleanswered_quiz."<br />"; if ($course_status->comment_approved == "complete") { $attempted = "(100%)"; } else { if ($modulequizdata['grade'][0] == "") { if ($lesson_status->comment_approved == "passed") { $attempted = 'P/Q'; } else { if ($modulequestion_asked >= $moduleanswered_quiz) { if ($modulequizdata['quiz_answers'][0] == "") { $attempted = ""; } else { $attempted = "( " . get_percentage($modulequestion_asked, $moduleanswered_quiz) . "% ) Saved"; } } } } else { $attempted = "( " . get_percentage($modulequestion_asked, $moduleanswered_quiz) . "% )"; } //echo "<pre>"; //echo "Attempted:".$attempted."<br />"; //echo $user->user_email."<br />"; //echo $modulequizdata['grade'][0]."<br />"; //echo $modulequizdata['quiz_answers'][0]."<br />"; //print_r($lesson_status); //echo "</pre>"; } } $html .= '<a href="' . esc_url(get_permalink($lesson_item->ID)) . '" title="' . esc_attr(sprintf(__('Start %s', 'woothemes-sensei'), $lesson_item->post_title)) . '">' . esc_html(sprintf(__('%s', 'woothemes-sensei'), $lesson_item->post_title)) . '</a> ' . $attempted . '<br />'; $displayed_lessons[] = $lesson_item->ID; } } } $args = array('post_type' => 'lesson', 'posts_per_page' => -1, 'suppress_filters' => 0, 'meta_key' => '_order_' . $course->ID, 'orderby' => 'meta_value_num date', 'order' => 'ASC', 'meta_query' => array(array('key' => '_lesson_course', 'value' => intval($course->ID))), 'post__not_in' => $displayed_lessons); $lessons = get_posts($args); //echo "Number of lesson in a course: ".count($lessons); if (0 < count($lessons)) { $html .= '<h3>' . __('Other Lessons', 'woothemes-sensei') . '</h3>' . "\n"; } if ($course_status_update['percent'][0] == 100) { $date1 = date_create($course_status_update['start'][0]); $date2 = date_create($course_status->comment_date); $diff = date_diff($date1, $date2); $diftime = $diff->format("%h Hours %i Minute %s Seconds"); } else { $diftime = "course not completed yet."; } $allcourseid[] = $course->ID; $incomplete = 100 - $course_status_update['percent'][0]; echo "<tr><td>"; echo $user->user_email; echo "</td>"; echo "<td>"; echo "<a href='" . get_post_permalink($course->ID) . "'>" . $course->post_title . "</a>"; echo "</td>"; echo "<td>"; echo $incomplete . "%"; echo "</td>"; echo "<td>"; echo $course_status_update['percent'][0] . "%"; echo "</td>"; echo "<td>"; echo $course_user_grade . "%"; echo "</td>"; echo "<td>"; echo $html; $html = ""; foreach ($lessons as $lesson_item) { $lesson_grade = 'n/a'; $has_questions = get_post_meta($lesson_item->ID, '_quiz_has_questions', true); if ($has_questions) { $lesson_status = WooThemes_Sensei_Utils::user_lesson_status($lesson_item->ID, $user->ID); // Get user quiz grade $lesson_grade = get_comment_meta($lesson_status->comment_ID, 'grade', true); if ($lesson_grade) { $lesson_grade .= '%'; } } $quizdata = get_comment_meta($lesson_status->comment_ID); //echo "<h1>Comment</h1>"; //print_r(get_comment_meta( $lesson_status->comment_ID )); //echo "<h1>LESSON STATUS</h1>"; //print_r($lesson_status); echo "<a href='" . get_post_permalink($lesson_item->ID) . "'>" . $lesson_item->post_title . "</a> "; //print_r($quizdata); $question_asked = count(explode(",", $quizdata['questions_asked'][0])); $answered_quiz = count(unserialize($quizdata['quiz_answers'][0])); if ($quizdata['grade'][0] == "") { if ($question_asked > $answered_quiz) { echo "( " . get_percentage($question_asked, $answered_quiz) . "% )"; } } else { echo "(100%)"; } echo '<br />'; } // End For Loop echo "</td>"; echo "<td>"; echo $diftime; echo "</td>"; echo "</tr>"; //echo $course->post_title." (".$course_status_update['percent'][0]."% Complete) (". $incomplete . "% incomplete) (". $course_user_grade . "% Competent)<br />"; $i++; } } } echo "</table>"; } elseif ($tab == "threshold") { //declare the wpdb for custom query global $wpdb; //check for submitted data if (isset($_POST['submittreshold']) && ($_POST['submittreshold'] = "submit")) { // declare users and variables $allUsers = get_users(); $modules_completed = $_POST['completionpermonth']; $courseid = $_POST['course']; $course_name = get_the_title($courseid); $array_to_csv = array(array('Student Name', 'Course Name ')); //user loop ----- loop user get the groups and course the course they take foreach ($allUsers as $user) { //declare course function calls $course_user_grade = WooThemes_Sensei_Utils::sensei_course_user_grade($courseid, $user->ID); $user_course_status = WooThemes_Sensei_Utils::user_course_status($courseid, $user->ID); $course_status_info = get_comment_meta($user_course_status->comment_ID); $started_course = WooThemes_Sensei_Utils::user_started_course($courseid, $user->ID); $course_status = WooThemes_Sensei_Utils::sensei_user_course_status_message($courseid, $user->ID); $completed_course = WooThemes_Sensei_Utils::user_completed_course($user_course_status); //get the user groups $useringroup = new Groups_User($user->ID); $user_groups = $useringroup->__get('groups'); $displayed_lessons = array(); //declare and get module values $modules = Sensei()->modules->get_course_modules(intval($courseid)); $modules_content = Sensei()->modules->course_module_content(intval($courseid)); //echo "<pre>"; //echo $user->user_email."<br />"; //echo "sensei_user_course_status_message: "; //print_r($course_status); //echo "<br />"; //echo "started_course: "."<br />"; $course_status_info['start'][0]; $datenow = date('Y-m-d h:i:s'); $date1 = date_create($course_status_info['start'][0]); $date2 = date_create($datenow); $diff = date_diff($date1, $date2); $diftime = $diff->format("%m"); if ($diftime < 1) { $diftime = 1; } //echo "</pre>"; //module loop per user foreach ($modules as $module) { $args = array('post_type' => 'lesson', 'post_status' => 'publish', 'posts_per_page' => -1, 'meta_query' => array(array('key' => '_lesson_course', 'value' => intval($courseid), 'compare' => '=')), 'tax_query' => array(array('taxonomy' => Sensei()->modules->taxonomy, 'field' => 'id', 'terms' => intval($module->term_id))), 'meta_key' => '_order_module_' . $module->term_id, 'orderby' => 'meta_value_num date', 'order' => 'ASC', 'suppress_filters' => 0); $lessons = get_posts($args); $num_of_lesson = count($lessons); //lessson loop per user foreach ($lessons as $lesson_item) { $is_lesson_completed = WooThemes_Sensei_Utils::user_completed_lesson($lesson_item->ID, $user->ID); if ($is_lesson_completed == 1) { $lesson_completed[] = $is_lesson_completed; } } //echo "lesson completed:". count($lesson_completed)."<br />"; if (count($lesson_completed) > 0) { if ($num_of_lesson == count($lesson_completed)) { $completed_modules_per_user[] = 1; $total_module_passed[] = 1; //echo "---Module completed <br />"; } else { //echo "---Module not completed <br />"; } } else { //echo "---Module not completed <br />"; } unset($lesson_completed); unset($completed_modules_per_user); } $overaalltotal_module_passed = count($total_module_passed); //echo $overaalltotal_module_passed . " module being passed"; //loop throughout the user group under a user if (is_array($user_groups)) { foreach ($user_groups as $user_group) { if ($user_group->group_id == $_POST['group']) { if (!empty($user_course_status)) { $modules_completed_from_groups = $user_group->description; if ($modules_completed == "") { $modules_completed = $modules_completed_from_groups; } $num_of_module_x_difftime = $modules_completed * $diftime; //echo "<br />num_of_module_x_difftime:".$num_of_module_x_difftime; if ($overaalltotal_module_passed >= $num_of_module_x_difftime) { $array_to_csv[] = array($user->display_name, $course_name); //$userid_within_group[$user->user_email] = $user->ID; } } } //echo $user_group->group_id."<br />"; } } unset($total_module_passed); } //echo "<pre>"; //echo $modules_completed; //print_r($array_to_csv); //echo "</pre>"; convert_to_csv($array_to_csv, 'report-' . md5(date('Y-m-d h:i:s')) . '.csv', ','); } ?> <div class="form-wrap" style="padding:20px;"> <form action="" method="post"> <div> <label> Group: </label> <?php $groups = $wpdb->get_results('SELECT * FROM `wp_groups_group`'); ?> <select name="group"> <?php foreach ($groups as $group) { echo "<option value='" . $group->group_id . "'>"; echo $group->name; echo "</option>"; } ?> </select> </div> <div> <label> Course: </label> <?php $course = new WP_Query(array('post_type' => 'course')); ?> <select name="course"> <?php // The Loop if ($course->have_posts()) { while ($course->have_posts()) { $course->the_post(); echo '<option value="' . $course->post->ID . '">' . get_the_title() . '</option>'; } } /* Restore original Post Data */ ?> </select> <?php wp_reset_postdata(); ?> </div> <div> <label> How many modules should be completed by now? </label> <input type="text" name="completionpermonth" /> </div><br /><br /> <input type="submit" class="button button-primary" name="submittreshold" value="submit" /> </form> </div> <?php } elseif ($tab == "incremental-progress") { wp_enqueue_script('jquery-ui-datepicker'); wp_enqueue_style('jquery-style', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css'); //declare the wpdb for custom query global $wpdb; //check for submitted data if (isset($_POST['submitincrenmental']) && ($_POST['submitincrenmental'] = "submit")) { // declare users and variables $allUsers = get_users(); $modules_completed = $_POST['completionpermonth']; $courseid = $_POST['course']; $course_name = get_the_title($courseid); $array_to_csv = array(array('Student Name', 'Course Name ', 'Lesson Title')); //user loop ----- loop user get the groups and course the course they take foreach ($allUsers as $user) { //declare course function calls $course_user_grade = WooThemes_Sensei_Utils::sensei_course_user_grade($courseid, $user->ID); $user_course_status = WooThemes_Sensei_Utils::user_course_status($courseid, $user->ID); $course_status_info = get_comment_meta($user_course_status->comment_ID); $started_course = WooThemes_Sensei_Utils::user_started_course($courseid, $user->ID); $course_status = WooThemes_Sensei_Utils::sensei_user_course_status_message($courseid, $user->ID); $completed_course = WooThemes_Sensei_Utils::user_completed_course($user_course_status); //get the user groups $useringroup = new Groups_User($user->ID); $user_groups = $useringroup->__get('groups'); $displayed_lessons = array(); //declare and get module values $modules = Sensei()->modules->get_course_modules(intval($courseid)); $modules_content = Sensei()->modules->course_module_content(intval($courseid)); $course_status_info['start'][0]; $datenow = date('Y-m-d h:i:s'); $date1 = date_create($course_status_info['start'][0]); $date2 = date_create($datenow); $diff = date_diff($date1, $date2); $diftime = $diff->format("%m"); if ($diftime < 1) { $diftime = 1; } //echo "</pre>"; //module loop per user foreach ($modules as $module) { $args = array('post_type' => 'lesson', 'post_status' => 'publish', 'posts_per_page' => -1, 'meta_query' => array(array('key' => '_lesson_course', 'value' => intval($courseid), 'compare' => '=')), 'tax_query' => array(array('taxonomy' => Sensei()->modules->taxonomy, 'field' => 'id', 'terms' => intval($module->term_id))), 'meta_key' => '_order_module_' . $module->term_id, 'orderby' => 'meta_value_num date', 'order' => 'ASC', 'suppress_filters' => 0); $lessons = get_posts($args); $num_of_lesson = count($lessons); //lessson loop per user foreach ($lessons as $lesson_item) { $is_lesson_completed = WooThemes_Sensei_Utils::user_completed_lesson($lesson_item->ID, $user->ID); $lesson_status = WooThemes_Sensei_Utils::user_lesson_status($lesson_item->ID, $user->ID); $modulequizdata = get_comment_meta($lesson_status->comment_ID); if (!empty($lesson_status->comment_date)) { echo "<pre>"; //echo $lesson_status->comment_date."<br />"; //echo $_POST['date1']."<br />"; $lesson_completion_date = date("Y-m-d", strtotime($lesson_status->comment_date)); //echo "<br />"; //echo $_POST['date2']."<br />"; //echo "lesson is completed:".$is_lesson_completed."<br />"; //print_r($lesson_item); echo "</pre>"; } if ($is_lesson_completed == 1) { $date1 = strtotime($_POST['date1']); $date2 = strtotime($_POST['date2']); $lesson_completion_date_str = strtotime($lesson_completion_date); if ($lesson_completion_date_str > $date1 && $lesson_completion_date_str < $date2) { //echo "lesson is completed:".$is_lesson_completed."<br />"; //echo "user ".$user->display_name." pass this". $lesson_completion_date; $user_id_onrange[$user->ID] = $lesson_item->post_title; } } } //echo "lesson completed:". count($lesson_completed)."<br />"; } //loop throughout the user group under a user if (is_array($user_groups)) { foreach ($user_groups as $user_group) { if ($user_group->group_id == $_POST['group']) { if (!empty($user_course_status)) { if (array_key_exists($user->ID, $user_id_onrange)) { $array_to_csv[] = array($user->display_name, $course_name, $user_id_onrange[$user->ID]); } } } //echo $user_group->group_id."<br />"; } } } //print_r($user_id_onrange); //echo "<pre>"; //echo $modules_completed; //print_r($array_to_csv); //echo "</pre>"; convert_to_csv($array_to_csv, 'report-incremental-progress' . md5(date('Y-m-d h:i:s')) . '.csv', $headers); } ?> <div class="form-wrap" style="padding:20px;"> <form action="" method="post"> <div> <label> Group: </label> <?php $groups = $wpdb->get_results('SELECT * FROM `wp_groups_group`'); ?> <select name="group"> <?php foreach ($groups as $group) { echo "<option value='" . $group->group_id . "'>"; echo $group->name; echo "</option>"; } ?> </select> </div><br /> <div> <label> Course: </label> <?php $course = new WP_Query(array('post_type' => 'course')); ?> <select name="course"> <?php // The Loop if ($course->have_posts()) { while ($course->have_posts()) { $course->the_post(); echo '<option value="' . $course->post->ID . '">' . get_the_title() . '</option>'; } } /* Restore original Post Data */ ?> </select> <?php wp_reset_postdata(); ?> </div><br /> <div> <label> Date: </label> From<input type="text" id="date1" name="date1" /> to <input type="text" id="date2" name="date2" /> </div><br /><br /> <input type="submit" class="button button-primary" name="submitincrenmental" value="submit" /> </form> </div> <script> jQuery(document).ready(function() { jQuery('#date1').datepicker({ dateFormat : 'yy-mm-dd' }); jQuery('#date2').datepicker({ dateFormat : 'yy-mm-dd' }); }); </script> <?php } elseif ($tab == "total-progress") { //declare the wpdb for custom query global $wpdb; //check for submitted data if (isset($_POST['submittotalprogress']) && ($_POST['submittotalprogress'] = "submit")) { // declare users and variables $allUsers = get_users(); $modules_completed = $_POST['completionpermonth']; $courseid = $_POST['course']; $course_name = get_the_title($courseid); $array_to_csv = array(array('Student Name', 'Course Name', 'Lesson Title')); //user loop ----- loop user get the groups and course the course they take foreach ($allUsers as $user) { //declare course function calls $course_user_grade = WooThemes_Sensei_Utils::sensei_course_user_grade($courseid, $user->ID); $user_course_status = WooThemes_Sensei_Utils::user_course_status($courseid, $user->ID); $course_status_info = get_comment_meta($user_course_status->comment_ID); $started_course = WooThemes_Sensei_Utils::user_started_course($courseid, $user->ID); $course_status = WooThemes_Sensei_Utils::sensei_user_course_status_message($courseid, $user->ID); $completed_course = WooThemes_Sensei_Utils::user_completed_course($user_course_status); //get the user groups $useringroup = new Groups_User($user->ID); $user_groups = $useringroup->__get('groups'); $displayed_lessons = array(); //declare and get module values $modules = Sensei()->modules->get_course_modules(intval($courseid)); $modules_content = Sensei()->modules->course_module_content(intval($courseid)); //echo "<pre>"; //echo $user->user_email."<br />"; //echo "sensei_user_course_status_message: "; //print_r($course_status); //echo "<br />"; //echo "started_course: "."<br />"; $course_status_info['start'][0]; $datenow = date('Y-m-d h:i:s'); $date1 = date_create($course_status_info['start'][0]); $date2 = date_create($datenow); $diff = date_diff($date1, $date2); $diftime = $diff->format("%m"); if ($diftime < 1) { $diftime = 1; } //echo "</pre>"; //module loop per user foreach ($modules as $module) { $args = array('post_type' => 'lesson', 'post_status' => 'publish', 'posts_per_page' => -1, 'meta_query' => array(array('key' => '_lesson_course', 'value' => intval($courseid), 'compare' => '=')), 'tax_query' => array(array('taxonomy' => Sensei()->modules->taxonomy, 'field' => 'id', 'terms' => intval($module->term_id))), 'meta_key' => '_order_module_' . $module->term_id, 'orderby' => 'meta_value_num date', 'order' => 'ASC', 'suppress_filters' => 0); $lessons = get_posts($args); $num_of_lesson = count($lessons); //lessson loop per user foreach ($lessons as $lesson_item) { $is_lesson_completed = WooThemes_Sensei_Utils::user_completed_lesson($lesson_item->ID, $user->ID); if ($is_lesson_completed == 1) { $lesson_taken[$user->ID][] = $lesson_item->post_title; } } } $overaalltotal_module_passed = count($total_module_passed); //echo $overaalltotal_module_passed . " module being passed"; //loop throughout the user group under a user if (is_array($user_groups)) { foreach ($user_groups as $user_group) { if ($user_group->group_id == $_POST['group']) { if (!empty($user_course_status)) { $array_to_csv[] = array($user->display_name, $course_name, join("|", $lesson_taken[$user->ID])); //$userid_within_group[$user->user_email] = $user->ID; } } //echo $user_group->group_id."<br />"; } } //echo "<pre>"; //print_r($lesson_taken); //echo "<pre>"; unset($total_module_passed); unset($lesson_taken); } //echo "<pre>"; //echo $modules_completed; //print_r($array_to_csv); //echo "</pre>"; convert_to_csv($array_to_csv, 'report-total-progress' . md5(date('Y-m-d h:i:s')) . '.csv', ','); } ?> <div class="form-wrap" style="padding:20px;"> <form action="" method="post"> <div> <label> Group: </label> <?php $groups = $wpdb->get_results('SELECT * FROM `wp_groups_group`'); ?> <select name="group"> <?php foreach ($groups as $group) { echo "<option value='" . $group->group_id . "'>"; echo $group->name; echo "</option>"; } ?> </select> </div> <div> <label> Course: </label> <?php $course = new WP_Query(array('post_type' => 'course')); ?> <select name="course"> <?php // The Loop if ($course->have_posts()) { while ($course->have_posts()) { $course->the_post(); echo '<option value="' . $course->post->ID . '">' . get_the_title() . '</option>'; } } /* Restore original Post Data */ ?> </select> <?php wp_reset_postdata(); ?> </div> <br /><br /> <input type="submit" class="button button-primary" name="submittotalprogress" value="submit" /> </form> </div> <?php } echo '</div>'; }
$id_list = implode(",", $group_ids); $parent_group_ids = $wpdb->get_results("SELECT parent_id FROM {$group_table} WHERE parent_id IS NOT NULL AND group_id IN ({$id_list})"); if ($parent_group_ids) { foreach ($parent_group_ids as $parent_group_id) { $parent_group_id = Groups_Utility::id($parent_group_id->parent_id); if (!in_array($parent_group_id, $group_ids)) { $group_ids[] = $parent_group_id; } } } } $id_list = implode(",", $group_ids); $rows = $wpdb->get_results("SELECT {$group_capability_table}.capability_id, {$capability_table}.capability FROM {$group_capability_table} LEFT JOIN {$capability_table} ON {$group_capability_table}.capability_id = {$capability_table}.capability_id WHERE group_id IN ({$id_list})"); if (count($rows) > 0) { foreach ($rows as $row) { if (!in_array($row->capability_id, $capability_ids)) { $capabilities[] = $row->capability; $capability_ids[] = $row->capability_id; } } } } } Groups_Cache::set(self::CAPABILITIES . $this->user->ID, $capabilities, self::CACHE_GROUP); Groups_Cache::set(self::CAPABILITY_IDS . $this->user->ID, $capability_ids, self::CACHE_GROUP); Groups_Cache::set(self::GROUP_IDS . $this->user->ID, $group_ids, self::CACHE_GROUP); } } } Groups_User::init();
/** * Renders the current or a specific user's groups. * Attributes: * - "user_id" OR "user_login" OR "user_email" to identify the user, if none given assumes the current user * - "format" : one of "list" "div" "ul" or "ol" - "list" and "ul" are equivalent * - "list_class" : defaults to "groups" * - "item_class" : defaults to "name" * - "order_by" : defaults to "name", also accepts "group_id" * - "order" : default to "ASC", also accepts "asc", "desc" and "DESC" * * @param array $atts attributes * @param string $content not used * @return rendered groups for current user */ public static function groups_user_groups($atts, $content = null) { $output = ""; $options = shortcode_atts(array('user_id' => null, 'user_login' => null, 'user_email' => null, 'format' => 'list', 'list_class' => 'groups', 'item_class' => 'name', 'order_by' => 'name', 'order' => 'ASC'), $atts); $user_id = null; if ($options['user_id'] !== null) { if ($user = get_user_by('id', $options['user_id'])) { $user_id = $user->ID; } } else { if ($options['user_id'] !== null) { if ($user = get_user_by('login', $options['user_login'])) { $user_id = $user->ID; } } else { if ($options['user_email'] !== null) { if ($user = get_user_by('email', $options['user_login'])) { $user_id = $user->ID; } } } } if ($user_id === null) { $user_id = get_current_user_id(); } if ($user_id !== null) { $user = new Groups_User($user_id); $groups = $user->__get('groups'); if (!empty($groups)) { switch ($options['order_by']) { case 'group_id': usort($groups, array(__CLASS__, 'sort_id')); break; default: usort($groups, array(__CLASS__, 'sort_name')); } switch ($options['order']) { case 'desc': case 'DESC': $groups = array_reverse($groups); break; } switch ($options['format']) { case 'list': case 'ul': $output .= '<ul class="' . esc_attr($options['list_class']) . '">'; break; case 'ol': $output .= '<ol class="' . esc_attr($options['list_class']) . '">'; break; default: $output .= '<div class="' . esc_attr($options['list_class']) . '">'; } foreach ($groups as $group) { switch ($options['format']) { case 'list': case 'ul': case 'ol': $output .= '<li class="' . esc_attr($options['item_class']) . '">' . $group->__get('name') . '</li>'; break; default: $output .= '<div class="' . esc_attr($options['item_class']) . '">' . $group->__get('name') . '</div>'; } } switch ($options['format']) { case 'list': case 'ul': $output .= '</ul>'; break; case 'ol': $output .= '</ol>'; break; default: $output .= '</div>'; } } } return $output; }
/** * Takes one attribute "capability" that must be a valid capability label, * or a comma-separaed list of those. * The content is shown if the current user has none of the capabilities. * * @param array $atts attributes * @param string $content content to render */ public static function groups_can_not($atts, $content = null) { $output = ""; $options = shortcode_atts(array("capability" => ""), $atts); if ($content !== null) { $groups_user = new Groups_User(get_current_user_id()); $capability = $options['capability']; $capabilities = array_map('trim', explode(',', $capability)); $show_content = true; foreach ($capabilities as $capability) { if ($groups_user->can($capability)) { $show_content = false; break; } } if ($show_content) { remove_shortcode('groups_can_not'); $content = do_shortcode($content); add_shortcode('groups_can_not', array(__CLASS__, 'groups_can_not')); $output = $content; } } return $output; }
function hide_shipping_based_on_group($rates, $package) { if (is_user_logged_in()) { global $current_user; $current_user = wp_get_current_user(); $userid = $current_user->ID; $user = new Groups_User($userid); $groups = $user->__get('groups'); if ($groups[1] != NULL) { $groupObj = get_object_vars($groups[1]); $groupObjTarget = get_object_vars($groupObj[group]); $groupName = $groupObjTarget['name']; $sixName = "6 Bottle Club Level"; $twelveName = "12 Bottle Club Level"; } else { $groupName = "Registered"; } if ($groupName == $sixName) { $myRate = $rates['6_bottle_club']; $rates = array(); $rates['6_bottle_club'] = $myRate; } else { if ($groupName == $twelveName) { $myRate = $rates['12_bottle_club']; $rates = array(); $rates['12_bottle_club'] = $myRate; } else { unset($rates['6_bottle_club']); unset($rates['12_bottle_club']); } } } else { unset($rates['6_bottle_club']); unset($rates['12_bottle_club']); } return $rates; }
/** * @return array of valid read capabilities for the current or given user */ public static function get_valid_read_caps_for_user($user_id = null) { $result = array(); $user = new Groups_User($user_id === null ? get_current_user_id() : $user_id); $valid_read_caps = Groups_Options::get_option(Groups_Post_Access::READ_POST_CAPABILITIES, array(Groups_Post_Access::READ_POST_CAPABILITY)); foreach ($valid_read_caps as $valid_read_cap) { if ($capability = Groups_Capability::read_by_capability($valid_read_cap)) { if ($user->can($capability->capability)) { $result[] = $valid_read_cap; } } } return $result; }
<?php get_header(); // // // // check if user is logged in // // // if (is_user_logged_in()) { ?> <?php // // // // get user id // // // $groups_user = new Groups_User(get_current_user_id()); // // // // if users has access to My Consumables group // // // if ($groups_user->can('My Consumables')) { ?> <div class="page-title"> <h1>Hello <?php echo $current_user->first_name; ?> ,</h1> <?php $my_products = array(); $my_groups = array(); query_posts(array('post_type' => 'product', 'posts_per_page' => '-1')); while (have_posts()) { the_post();
/** * Takes one attribute "capability" that must be a valid capability label. * The content is shown if the current user does NOT have the capability. * * @param array $atts attributes * @param string $content content to render */ public static function groups_can_not($atts, $content = null) { $output = ""; $options = shortcode_atts(array("capability" => ""), $atts); if ($content !== null) { $groups_user = new Groups_User(get_current_user_id()); $capability = $options['capability']; if (!$groups_user->can($capability)) { remove_shortcode('groups_can_not'); $content = do_shortcode($content); add_shortcode('groups_can_not', array(__CLASS__, 'groups_can_not')); $output = $content; } } return $output; }
function get_page_group_machines() { /* * This is where we initiate out variables! * * $page_machines is the array in which the list of user accessible * machine names will be stored, you will want to display this * * $groups stores all of the ithinxx groups the user has * access to, these are set in wp-admin and have matching capabilities * applied to products and other pages that require restricted access * * $taxonomy_machines gets all the the machine tags applied to a post * the machines stored in $taxonomy_machines are not necessarily * available to the user * */ global $page_machines; global $page_groups; $page_machines = array(); $page_groups = array(); $groups_user = new Groups_User(get_current_user_id()); $groups = $groups_user->__get('groups'); $taxonomy_machines = get_the_terms($post->ID, 'taxonomy-machines'); /* * This function loops through all of the groups collected above * and within these groups, loops through all of the machine tags * applied to the post/product/page * */ foreach ($groups as $group) { /* * Loops through each machine name applied to post * */ foreach ($taxonomy_machines as $machine) { /* * Get the names of current ( in loop ) group and machine * */ $machine_name = $machine->name; $group_name = $group->name; /* * Replaces spaces with "-" and makes lowercase for comparing against $group_name_sort * */ $machine_name_sort = strtolower($machine_name); $machine_name_sort = str_replace(" ", "-", $machine_name_sort); /* * Replace spaces with "-" and makes lowercase for comparing against $machine_name_sort. * Also removes the part after the machine name in $group_name_sort. * */ $group_name_sort = strtolower($group_name); $group_name_sort = str_replace(" ", "-", $group_name_sort); if (strpos($group_name_sort, '|')) { $group_name_sort = str_replace("-|-", "|", $group_name_sort); $group_name_sort = strstr($group_name_sort, '|', true); } if ($machine_name_sort == $group_name_sort) { $page_machines[] = $machine_name; $page_groups[] = $group_name; } } } /* * This removes all the duplicate machine values * stored within $page_machines so that they can * be loop cleanly :) * */ $page_machines = array_unique($page_machines); $page_groups = array_unique($page_groups); }
<?php ini_set('display_errors', 1); include "../../../../wp-load.php"; include_once 'functions.php'; $username = $_POST['username']; $password = $_POST['password']; $data = array(); $user = ml_login_wordpress($username, $password); if (get_class($user) == "WP_User") { // Get capabilities from Groups plugin if it's present if (class_exists('Groups_User')) { $group_user = new Groups_User($user->ID); $data['user'] = array(); $data['user']['name'] = "{$user->user_firstname} {$user->user_lastname}"; $data['groups'] = array(); $data['capabilities'] = array(); $groups = $group_user->__get('groups'); foreach ($groups as $group) { $g = array(); $g['id'] = $group->group_id; $g['name'] = $group->name; $data['groups'][] = $g; //capabilities $capabilities = $group->__get('capabilities'); if ($capabilities != NULL) { foreach ($capabilities as $capability) { $data['capabilities'][] = $capability->__get('capability'); } } }
/** * Returns true if the user has any of the capabilities that grant access to the post. * * @param int $post_id post id * @param int $user_id user id or null for current user * @return boolean true if user can read the post */ public static function user_can_read_post($post_id, $user_id = null) { $result = false; if (!empty($post_id)) { if ($user_id === null) { $user_id = get_current_user_id(); } $groups_user = new Groups_User($user_id); $read_caps = self::get_read_post_capabilities($post_id); if (!empty($read_caps)) { foreach ($read_caps as $read_cap) { if ($groups_user->can($read_cap)) { $result = true; break; } } } else { $result = true; } } return $result; }