function get_group_courseware($group_id = null) { global $bp; if (!$group_id) { $group_id = $bp->groups->current_group->id; } $group_data['bibliography'] = array(); $group_data['assignments_count'] = 0; $group_data['responses_count'] = 0; $group_data['own_responses_count'] = 0; $group_data['assignment_topics_count'] = 0; $group_data['user_grades'] = array(); $group_data['user_bookmark'] = null; $group_data['courses'] = (array) BPSP_Courses::has_courses($group_id); $group_data['lectures'] = (array) BPSP_Lectures::has_lectures($group_id); $group_data['assignments'] = (array) BPSP_Assignments::has_assignments($group_id); $group_data['schedules'] = BPSP_Schedules::has_schedules($group_id); $group_data['lectures'] = BPSP_Lectures::has_lectures($group_id); $posts = array_merge($group_data['courses'], $group_data['assignments']); if ($posts) { foreach ($posts as &$post) { // Get group bibs $group_data['bibliography'] = array_merge($group_data['bibliography'], BPSP_Bibliography::get_bibs($post->ID)); // Get group responses if ($post->post_type == 'assignment') { // Forum threads if (get_post_meta($post->ID, 'topic_link', true) != '') { $group_data['assignment_topics_count'] += 1; } // Responses $post->responses = get_children(array('post_parent' => $post->ID, 'post_type' => 'response')); foreach ($post->responses as $pr) { if ($pr->post_author == get_current_user_id()) { $group_data['own_responses_count']++; } $group_data['responses_count']++; } // Gradebook $group_data['user_grades'][] = BPSP_Gradebook::load_grade_by_user_id($post->ID, $bp->loggedin_user->id); } } } $bookmark = get_user_meta(get_current_user_id(), 'bookmark_' . bp_get_group_id(), true); if ($bookmark) { $group_data['user_bookmark'] = BPSP_Lectures::is_lecture($bookmark); } $group_data['assignments_count'] = count($group_data['assignments']); $group_data['bibliography_count'] = count($group_data['bibliography']); return $group_data; }
/** * edit_assignment_screen( $vars ) * * Hooks into screen_handler * Edit assignment screen * * @param Array $vars a set of variables received for this screen template * @return Array $vars a set of variable passed to this screen template */ function edit_assignment_screen($vars) { global $bp; $nonce_name = 'edit_assignment'; $updated_assignment_id = $this->current_assignment; $old_assignment = $this->is_assignment($this->current_assignment); if (!$this->has_assignment_caps($bp->loggedin_user->id) && !is_super_admin() || $bp->loggedin_user->id != $old_assignment->post_author) { $vars['die'] = __('BuddyPress Courseware Error while forbidden user tried to update the assignment.', 'bpsp'); return $vars; } // Update assignment if (isset($_POST['assignment']) && $_POST['assignment']['object'] == 'group' && BPSP_Lectures::is_lecture($_POST['assignment']['lecture_id']) && isset($_POST['_wpnonce'])) { $updated_assignment = $_POST['assignment']; $is_nonce = wp_verify_nonce($_POST['_wpnonce'], $nonce_name); if (true != $is_nonce) { $vars['error'] = __('Nonce Error while editing the assignment.', 'bpsp'); } else { if (isset($updated_assignment['title']) && isset($updated_assignment['content']) && isset($updated_assignment['course_id']) && is_numeric($updated_assignment['group_id'])) { $updated_assignment['title'] = strip_tags($updated_assignment['title']); $updated_assignment_id = wp_update_post(array('ID' => $old_assignment->ID, 'post_title' => $updated_assignment['title'], 'post_content' => $updated_assignment['content'])); if (is_object($updated_assignment_id) && isset($updated_assignment_id->ID)) { $updated_assignment_id = $updated_assignment_id->ID; } if ($updated_assignment_id) { wp_set_post_terms($updated_assignment_id, $updated_assignment['course_id'], 'course_id'); if (strtotime($updated_assignment['due_date'])) { update_post_meta($updated_assignment_id, 'due_date', $updated_assignment['due_date'], $old_assignment->due_date); } if (isset($updated_assignment['lecture_id'])) { update_post_meta($updated_assignment_id, 'lecture_id', $updated_assignment['lecture_id']); } // Save the formbuilder if (isset($updated_assignment['form']) && !empty($updated_assignment['form'])) { $this->frmb->load_serialized($updated_assignment['form']); if ($this->frmb->get_data()) { update_post_meta($updated_assignment_id, 'form_data', $this->frmb->get_data(), $old_assignment->form_data); } } $vars['message'] = __('Assignment was updated.', 'bpsp'); do_action('courseware_assignment_activity', $this->is_assignment($updated_assignment_id), 'update'); } else { $vars['error'] = __('Assignment could not be updated.', 'bpsp'); } } } } $vars['name'] = 'edit_assignment'; $vars['group_id'] = $bp->groups->current_group->id; $vars['user_id'] = $bp->loggedin_user->id; $vars['lecture_id'] = get_post_meta(isset($new_assignment_id) ? $new_assignment_id : $old_assignment->ID, 'lecture_id', true); $vars['lectures'] = BPSP_Lectures::has_lectures($bp->groups->current_group->id); $vars['assignment'] = $this->is_assignment($updated_assignment_id); $vars['assignment_edit_uri'] = $vars['current_uri'] . '/assignment/' . $this->current_assignment->post_name . '/edit/'; $vars['assignment_delete_uri'] = $vars['current_uri'] . '/assignment/' . $this->current_assignment->post_name . '/delete/'; $vars['assignment_permalink'] = $vars['current_uri'] . '/assignment/' . $this->current_assignment->post_name; $vars['nonce'] = wp_nonce_field($nonce_name, '_wpnonce', true, false); $vars['delete_nonce'] = add_query_arg('_wpnonce', wp_create_nonce('delete_assignment'), $vars['assignment_delete_uri']); $vars['trail'] = array($vars['assignment']->lecture->post_title => $vars['assignment']->lecture->permalink, __('Editing Assignment: ') . $vars['assignment']->post_title => $vars['assignment']->permalink); return $vars; }
/** * new_schedule_screen( $vars ) * * Hooks into screen_handler * Adds a UI to add new schedules. * * @param Array $vars a set of variables received for this screen template * @return Array $vars a set of variable passed to this screen template */ function new_schedule_screen($vars) { global $bp; $nonce_name = 'new_schedule'; $repeats = null; if (!$this->has_schedule_caps($bp->loggedin_user->id) && !is_super_admin()) { $vars['die'] = __('BuddyPress Courseware Error while forbidden user tried to add a new course.', 'bpsp'); return $vars; } // Save new schedule if (isset($_POST['schedule']) && $_POST['schedule']['object'] == 'group' && isset($_POST['_wpnonce'])) { if (empty($_POST['schedule']['title']) || empty($_POST['schedule']['desc']) || empty($_POST['schedule']['start_date'])) { $vars['error'] = __('New schedule could not be added. Missing description/title and/or start date.', 'bpsp'); $vars['schedule']->title = $_POST['schedule']['title']; $vars['schedule']->desc = $_POST['schedule']['desc']; $_POST = null; return $this->new_schedule_screen($vars); } $new_schedule = $_POST['schedule']; if (!empty($new_schedule['repetition']) && !empty($new_schedule['repetition_times'])) { $repeats = array('interval' => $new_schedule['repetition'], 'count' => $new_schedule['repetition_times']); } else { $repeats = null; } $valid_dates = $this->datecheck($new_schedule['start_date'], $new_schedule['end_date'], $repeats); $is_nonce = wp_verify_nonce($_POST['_wpnonce'], $nonce_name); if (true != $is_nonce) { $vars['die'] = __('Nonce Error while adding a schedule.', 'bpsp'); return $vars; } else { if (!empty($new_schedule['desc']) || !empty($new_schedule['group_id']) || !$valid_dates) { // create a template $first_schedule = array('post_author' => $bp->loggedin_user->id, 'post_title' => sanitize_text_field($new_schedule['title']), 'post_content' => sanitize_text_field($new_schedule['desc']), 'post_status' => 'publish', 'post_type' => 'schedule', 'cw_group_id' => $new_schedule['group_id'], 'cw_start_date' => $new_schedule['start_date'], 'cw_end_date' => $new_schedule['end_date'], 'cw_location' => sanitize_text_field($new_schedule['location'])); if (BPSP_Courses::is_course($new_schedule['course_id'])) { $first_schedule['cw_course_id'] = $new_schedule['course_id']; } if (BPSP_Lectures::is_lecture($new_schedule['lecture_id'])) { $first_schedule['cw_lecture_id'] = $new_schedule['lecture_id']; } // store first schedule $new_schedules[] = array_filter($first_schedule); // generate repeated events if (is_array($valid_dates)) { foreach ($valid_dates as $p) { $schedule_copy = reset($new_schedules); $schedule_copy['cw_start_date'] = $p['start_date']; $schedule_copy['cw_end_date'] = $p['end_date']; $new_schedules[] = $schedule_copy; } } // Add all schedules $counted_schedules = count($new_schedules); foreach ($new_schedules as $newschedule) { $newschedule_id = wp_insert_post($newschedule); if ($newschedule_id) { wp_set_post_terms($newschedule_id, $newschedule['cw_group_id'], 'group_id'); if ($newschedule['cw_course_id']) { wp_set_post_terms($newschedule_id, $newschedule['cw_course_id'], 'course_id'); } add_post_meta($newschedule_id, 'lecture_id', $newschedule['cw_lecture_id']); add_post_meta($newschedule_id, 'start_date', $newschedule['cw_start_date']); add_post_meta($newschedule_id, 'end_date', $newschedule['cw_end_date']); if ($newschedule['cw_location']) { add_post_meta($newschedule_id, 'location', $newschedule['cw_location']); } } } $vars['message'] = __('New schedule was added.', 'bpsp'); do_action('courseware_schedule_activity', $counted_schedules); return $this->list_schedules_screen($vars); } else { $vars['error'] = __('New schedule could not be added.', 'bpsp'); } } } $vars['name'] = 'new_schedule'; $vars['group_id'] = $bp->groups->current_group->id; $vars['course_id'] = $this->current_course->ID; $vars['user_id'] = $bp->loggedin_user->id; $vars['lectures'] = BPSP_Lectures::has_lectures($bp->groups->current_group->id); $vars['nonce'] = wp_nonce_field($nonce_name, '_wpnonce', true, false); $vars['trail'] = array(__('New Schedule', 'bpsp') => ''); return $vars; }
/** * prev_lecture( $lecture ) * Get the previous lecture * * @param Mixed $lecture object, current lecture * @return Mixed the previous $lecture object */ function prev_lecture($lecture) { global $bp; // Get lectures $lectures = BPSP_Lectures::has_lectures($bp->groups->current_group->id); if (empty($lectures)) { return null; } // Try to sort them by menu_order usort($lectures, array('BPSP_Lectures', 'cmp_menu_order')); // Use WordPress's hierarchical algorithm $hierarchy = get_page_hierarchy($lectures, 0); // Find current position in hierarchy while (next($hierarchy)) { if (current($hierarchy) == $lecture->post_name) { break; } } $prev = prev($hierarchy); if ($prev) { return BPSP_Lectures::is_lecture($prev); } else { return null; } }