/**
  * 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>';
}
Пример #5
0
                        $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();
Пример #6
0
 /**
  * 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;
 }
Пример #8
0
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);
}
Пример #13
0
<?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;
 }