Пример #1
0
/**
 * Cleans up all the groups and groupings in a course (it does this best-effort 
 * i.e. if one deletion fails, it still attempts further deletions).
 * IMPORTANT: Note that if the groups and groupings are used by other courses 
 * somehow, they will still be deleted - it doesn't protect against this. 
 * @param int $courseid The id of the course
 * @return boolean True if the clean up was successful, false otherwise. 
 */
function groups_cleanup_groups($courseid)
{
    $success = true;
    // Delete all the groupings
    $groupings = groups_get_groupings($courseid);
    if ($groupings != false) {
        foreach ($groupings as $groupingid) {
            $groupingdeleted = groups_delete_grouping($groupingid);
            if (!$groupingdeleted) {
                $success = false;
            }
        }
    }
    // Delete all the groups
    $groupids = groups_get_groups($courseid);
    if ($groupids != false) {
        foreach ($groupids as $groupid) {
            $groupdeleted = groups_delete_group($groupid);
            if (!$groupdeleted) {
                $success = false;
            }
        }
    }
    return $success;
}
Пример #2
0
 public static function tearDownAfterClass()
 {
     foreach (self::$groups as $group) {
         groups_delete_group($group);
     }
     if (is_multisite()) {
         wpmu_delete_user(self::$user);
         wpmu_delete_user(self::$admin_user);
     } else {
         wp_delete_user(self::$user);
         wp_delete_user(self::$admin_user);
     }
     self::commit_transaction();
 }
 public static function tearDownAfterClass()
 {
     foreach (self::$group_ids as $group_id) {
         groups_delete_group($group_id);
     }
     foreach (self::$user_ids as $user_id) {
         if (is_multisite()) {
             wpmu_delete_user($user_id);
         } else {
             wp_delete_user($user_id);
         }
     }
     self::commit_transaction();
 }
Пример #4
0
 /**
  * Delete some groups
  * @param array|struct $params
  * @subparam integer $params:groupid
  * @return boolean result
  */
 static function delete_groups($params)
 {
     if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) {
         $deletionsuccessfull = true;
         foreach ($params as $groupid) {
             if (!groups_delete_group(clean_param($groupid, PARAM_INTEGER))) {
                 $deletionsuccessfull = false;
             }
         }
         return $deletionsuccessfull;
     } else {
         throw new moodle_exception('wscouldnotdeletegroupnopermission');
     }
 }
 public function test_groups_get_group_by_name()
 {
     $this->resetAfterTest(true);
     $generator = $this->getDataGenerator();
     // Create a course category and course.
     $cat = $generator->create_category(array('parent' => 0));
     $course = $generator->create_course(array('category' => $cat->id));
     $name1 = 'Name 1';
     $name2 = 'Name 2';
     // Test with an empty and a null idnumber.
     $this->assertFalse(groups_get_group_by_name($course->id, ''));
     $this->assertFalse(groups_get_group_by_name($course->id, null));
     // Even when a group exists.
     $generator->create_group(array('courseid' => $course->id));
     $this->assertFalse(groups_get_group_by_name($course->id, ''));
     $this->assertFalse(groups_get_group_by_name($course->id, null));
     // Test with a valid name, but one that doesn't exist yet.
     $this->assertFalse(groups_get_group_by_name($course->id, $name1));
     $this->assertFalse(groups_get_group_by_name($course->id, $name2));
     // We should now have a valid group returned by the name search.
     $group1 = $generator->create_group(array('courseid' => $course->id, 'name' => $name1));
     $this->assertEquals($group1->id, groups_get_group_by_name($course->id, $name1));
     $this->assertFalse(groups_get_group_by_name($course->id, $name2));
     // We should now have a two valid groups returned by the name search.
     $group2 = $generator->create_group(array('courseid' => $course->id, 'name' => $name2));
     $this->assertEquals($group1->id, groups_get_group_by_name($course->id, $name1));
     $this->assertEquals($group2->id, groups_get_group_by_name($course->id, $name2));
     // Delete a group.
     $this->assertTrue(groups_delete_group($group1));
     $this->assertFalse(groups_get_group_by_name($course->id, $name1));
     $this->assertEquals($group2->id, groups_get_group_by_name($course->id, $name2));
     /*
      * Group idnumbers are unique within a course so test that we don't
      * retrieve groups for the first course.
      */
     // Create a second course.
     $course = $generator->create_course(array('category' => $cat->id));
     // An empty name should always return a false value.
     $this->assertFalse(groups_get_group_by_name($course->id, ''));
     $this->assertFalse(groups_get_group_by_name($course->id, null));
     // Our existing names shouldn't be returned here as we're in a different course.
     $this->assertFalse(groups_get_group_by_name($course->id, $name1));
     $this->assertFalse(groups_get_group_by_name($course->id, $name2));
     // We should be able to reuse the idnumbers again since this is a different course.
     $group1 = $generator->create_group(array('courseid' => $course->id, 'name' => $name1));
     $this->assertEquals($group1->id, groups_get_group_by_name($course->id, $name1));
     $group2 = $generator->create_group(array('courseid' => $course->id, 'name' => $name2));
     $this->assertEquals($group2->id, groups_get_group_by_name($course->id, $name2));
 }
Пример #6
0
 /**
  * Group deleted
  *
  * @param \core\event\group_deleted $event
  * @return void
  */
 public static function group_deleted(\core\event\group_deleted $event)
 {
     global $DB;
     $group = $event->get_record_snapshot('groups', $event->objectid);
     $courseids = local_metagroups_parent_courses($group->courseid);
     foreach ($courseids as $courseid) {
         $course = get_course($courseid);
         if ($metagroup = $DB->get_record('groups', array('courseid' => $course->id, 'idnumber' => $group->id))) {
             groups_delete_group($metagroup);
         }
     }
 }
 function group_delete($id, $id2)
 {
     return !groups_get_group(array('group_id' => $id)) || groups_delete_group($id);
 }
Пример #8
0
/**
 * Given an ID of an instance of this module, this function will
 * permanently delete the instance and any data that depends on it.
 */
function facetoface_delete_instance($id) {
    global $CFG, $DB;
  require_once $CFG->dirroot.'/local/evaluations/lib.php';
  require_once $CFG->dirroot.'/group/lib.php';
    if (!$facetoface = $DB->get_record('facetoface', array('id' => $id))) {
        return false;
    }

    $result = true;

    $transaction = $DB->start_delegated_transaction();

    $DB->delete_records_select(
        'facetoface_signups_status',
        "signupid IN
        (
            SELECT
            id
            FROM
    {facetoface_signups}
    WHERE
    sessionid IN
    (
        SELECT
        id
        FROM
    {facetoface_sessions}
    WHERE
    facetoface = ? ))
    ", array($facetoface->id));
    /*===========When batch delete that time we delete records from 'course_modules' and 'context' data tables started by rajut*/
    
    $get_course_modules_id=$DB->get_record('course_modules',array('instance'=>$facetoface->id));
    //print_object($get_course_modules_id);
     $get_course_modules_id_context=$DB->get_record('context',array('contextlevel'=>70,'instanceid'=>$get_course_modules_id->id));
      //print_object($get_course_modules_id_context);
    $DB->delete_records('context', array('id' => $get_course_modules_id_context->id));
    $DB->delete_records('course_modules', array('id' => $get_course_modules_id->id->id));
    //exit;
/*===========When batch delete that time we delete records from 'course_modules' and 'context' data tables Ended by rajut*/
    $DB->delete_records_select('facetoface_signups', "sessionid IN (SELECT id FROM {facetoface_sessions} WHERE facetoface = ?)", array($facetoface->id));

    $DB->delete_records_select('facetoface_sessions_dates', "sessionid in (SELECT id FROM {facetoface_sessions} WHERE facetoface = ?)", array($facetoface->id));

    // Notifications.
    $DB->delete_records('facetoface_notification', array('facetofaceid' => $facetoface->id));
    $DB->delete_records_select('facetoface_notification_sent',
            "sessionid IN (SELECT id FROM {facetoface_sessions} WHERE facetoface = ?)", array($facetoface->id));
    $DB->delete_records_select('facetoface_notification_hist',
            "sessionid IN (SELECT id FROM {facetoface_sessions} WHERE facetoface = ?)", array($facetoface->id));

    $DB->delete_records('facetoface_sessions', array('facetoface' => $facetoface->id));

   

    $DB->delete_records('event', array('modulename' => 'facetoface', 'instance' => $facetoface->id));

    facetoface_grade_item_delete($facetoface);

    $transaction->allow_commit();
    /*=====================Started by rajut when delete batch?delete local_batch_users and local_batch_courses===========*/
    $local_batch_courses=$DB->record_exists('local_batch_courses', array('batchid' => $facetoface->id));
    if($local_batch_courses==1){
        $assigned_course=$DB->get_record('local_batch_courses',array('batchid' => $facetoface->id));

       $assigned_users=$DB->get_records_sql("SELECT * FROM {local_batch_users} WHERE f2fid= $facetoface->id");
       if(!empty($assigned_users)){
            foreach($assigned_users as $assigned_user){ 
                $manual = enrol_get_plugin('manual');
                $studentrole = $DB->get_record('role', array('shortname'=>'student'));
                $instance = $DB->get_record('enrol', array('courseid'=>$assigned_course->courseid, 'enrol'=>'manual'), '*', MUST_EXIST);
                if($instance){
                   $timeend='';
                   if(!$DB->record_exists_sql("SELECT * FROM {course_completions} WHERE course=$assigned_course->courseid AND userid=$assigned_user->userid and timecompleted!=''")){
                        $local_batch_courses=$DB->get_records_sql("SELECT lbu.* FROM {local_batch_users} lbu
                                                                  JOIN {facetoface} fa ON fa.id=lbu.f2fid and fa.active in (0,1,8,3)
                                                                  where lbu.courseid=$assigned_course->courseid and lbu.userid=$assigned_user->userid
                                                                and fa.id!=$facetoface->id");
					   if(count($local_batch_courses)==0){
                           $manual->unenrol_user($instance,$assigned_user->userid, $studentrole->id,time(),$timeend);
                        }
                        //$manual->unenrol_user($instance,$assigned_user->userid, $studentrole->id,time(),$timeend);
                   }
                }
            $deleterecord_users=$DB->delete_records('local_batch_users',array('id'=>$assigned_user->id,'userid'=>$assigned_user->userid));
            }
       }
       if($assigned_course->groupid!=0)
       groups_delete_group($assigned_course->groupid);
     $deleterecord_course=$DB->delete_records('local_batch_courses',array('id'=>$assigned_course->id,'courseid'=>$assigned_course->courseid));
    
    }else{
        
        $assigned_users=$DB->get_records_sql("SELECT * FROM {local_batch_users} WHERE f2fid= $facetoface->id");
       if(!empty($assigned_users)){
            foreach($assigned_users as $assigned_user){    
             $deleterecord_users=$DB->delete_records('local_batch_users',array('id'=>$assigned_user->id,'userid'=>$assigned_user->userid));
            }
       }
        
    }
    $local_evaluation_feedback=$DB->record_exists('local_evaluation', array('classid' => $facetoface->id));
   
     if($local_evaluation_feedback==1){
           $feedbacks=$DB->get_records('local_evaluation',array('classid'=>$facetoface->id));
           
           foreach($feedbacks as $feedback){
            
             $deletefeedback=delete_complete_evaluation($feedback->id);
              //print_object($deletefeedback);exit;
           }
     }
      $DB->delete_records('facetoface', array('id' => $facetoface->id));
    /*=====================Ended by rajut when delete batch?delete local_batch_users and local_batch_courses===========*/
    
    
    return $result;
}
Пример #9
0
		}
        $course_batch=new stdClass();
        $course_batch->id=$confirm;
         $course_batch->courseid=0;
		 $course_batch->testid=0;
		 $course_batch->groupid=0;
        $assigned_course=$DB->update_record('local_batch_courses',$course_batch);
        //$deleterecord=$DB->delete_records('local_batch_courses',array('id'=>$confirm,'courseid'=>$courseid));
		
	return redirect($CFG->wwwroot.'/mod/facetoface/view_sessions.php?sessiontype='.$batchid->active.'&batchid='.$batchid->id);
        //redirect($CFG->wwwroot.'/mod/facetoface/view_sessions.php');
  }elseif($confirm>0&&$testid>0){
	 $assigned_course=$DB->get_record('local_batch_courses',array('id'=>$confirm,'testid'=>$testid));
	 $batchid=$DB->get_record('facetoface',array('id'=>$assigned_course->batchid));
	 if(($assigned_course->testid) !=0 && ($assigned_course->groupid!=0)){
					
			remove_groups_data($assigned_course->testid,$assigned_course->groupid);
			groups_delete_group($assigned_course->groupid);
	   
		}
	    $course_batch=new stdClass();
        $course_batch->id=$confirm;
		 $course_batch->testid=0;
		 $course_batch->groupid=0;
        $assigned_course=$DB->update_record('local_batch_courses',$course_batch);
		
	return redirect($CFG->wwwroot.'/mod/facetoface/view_sessions.php?sessiontype='.$batchid->active.'&batchid='.$batchid->id);
	   //redirect($CFG->wwwroot.'/mod/facetoface/view_sessions.php');
  }

echo $OUTPUT->footer();
Пример #10
0
function groups_screen_group_admin_delete_group() {
	global $bp;

	if ( $bp->current_component == $bp->groups->slug && 'delete-group' == $bp->action_variables[0] ) {

		if ( !$bp->is_item_admin && !is_super_admin() )
			return false;

		if ( isset( $_REQUEST['delete-group-button'] ) && isset( $_REQUEST['delete-group-understand'] ) ) {
			/* Check the nonce first. */
			if ( !check_admin_referer( 'groups_delete_group' ) )
				return false;

			// Group admin has deleted the group, now do it.
			if ( !groups_delete_group( $bp->groups->current_group->id ) ) {
				bp_core_add_message( __( 'There was an error deleting the group, please try again.', 'buddypress' ), 'error' );
			} else {
				bp_core_add_message( __( 'The group was deleted successfully', 'buddypress' ) );

				do_action( 'groups_group_deleted', $bp->groups->current_group->id );

				bp_core_redirect( $bp->loggedin_user->domain . $bp->groups->slug . '/' );
			}

			bp_core_redirect( $bp->loggedin_user->domain . $bp->current_component );
		}

		do_action( 'groups_screen_group_admin_delete_group', $bp->groups->current_group->id );

		bp_core_load_template( apply_filters( 'groups_template_group_admin_delete_group', 'groups/single/home' ) );
	}
}
Пример #11
0
function bp_organizer_delete_group()
{
    $group_id = (int) $_REQUEST['group_id'];
    if (!current_user_can('manage_options')) {
        die(__('Only administrators can delete groups with the organizer.', 'bp-group-organizer'));
    }
    check_ajax_referer('delete-group_' . $group_id);
    if (groups_delete_group($group_id)) {
        do_action('groups_group_deleted', $group_id);
        die('success');
    }
    die(__('Group delete failed.', 'bp-group-organizer'));
}
Пример #12
0
    /**
     * Test the group event handlers
     */
    public function test_group_event_handlers() {
        global $DB,$CFG;

        $this->resetAfterTest();

        $this->setAdminUser();

        // Setup course, user and groups

        $course = $this->getDataGenerator()->create_course();
        $user1 = $this->getDataGenerator()->create_user();
        $studentrole = $DB->get_record('role', array('shortname'=>'student'));
        $this->assertNotEmpty($studentrole);
        $this->assertTrue(enrol_try_internal_enrol($course->id, $user1->id, $studentrole->id));
        $group1 = $this->getDataGenerator()->create_group(array('courseid'=>$course->id));
        $group2 = $this->getDataGenerator()->create_group(array('courseid'=>$course->id));
        $this->assertTrue(groups_add_member($group1, $user1));
        $this->assertTrue(groups_add_member($group2, $user1));

        $uniqueid = 0;

        $quiz_generator = $this->getDataGenerator()->get_plugin_generator('mod_quiz');

        $quiz = $quiz_generator->create_instance(array('course'=>$course->id, 'timeclose'=>1200, 'timelimit'=>0));

        // add a group1 override
        $DB->insert_record('quiz_overrides', array('quiz'=>$quiz->id, 'groupid'=>$group1->id, 'timeclose'=>1300, 'timelimit'=>null));

        // add an attempt
        $attemptid = $DB->insert_record('quiz_attempts', array('quiz'=>$quiz->id, 'userid'=>$user1->id, 'state'=>'inprogress', 'timestart'=>100, 'timecheckstate'=>0, 'layout'=>'', 'uniqueid'=>$uniqueid++));

        // update timecheckstate
        quiz_update_open_attempts(array('quizid'=>$quiz->id));
        $this->assertEquals(1300, $DB->get_field('quiz_attempts', 'timecheckstate', array('id'=>$attemptid)));

        // remove from group
        $this->assertTrue(groups_remove_member($group1, $user1));
        $this->assertEquals(1200, $DB->get_field('quiz_attempts', 'timecheckstate', array('id'=>$attemptid)));

        // add back to group
        $this->assertTrue(groups_add_member($group1, $user1));
        $this->assertEquals(1300, $DB->get_field('quiz_attempts', 'timecheckstate', array('id'=>$attemptid)));

        // delete group
        groups_delete_group($group1);
        $this->assertEquals(1200, $DB->get_field('quiz_attempts', 'timecheckstate', array('id'=>$attemptid)));
        $this->assertEquals(0, $DB->count_records('quiz_overrides', array('quiz'=>$quiz->id)));

        // add a group2 override
        $DB->insert_record('quiz_overrides', array('quiz'=>$quiz->id, 'groupid'=>$group2->id, 'timeclose'=>1400, 'timelimit'=>null));
        quiz_update_open_attempts(array('quizid'=>$quiz->id));
        $this->assertEquals(1400, $DB->get_field('quiz_attempts', 'timecheckstate', array('id'=>$attemptid)));

        // delete user1 from all groups
        groups_delete_group_members($course->id, $user1->id);
        $this->assertEquals(1200, $DB->get_field('quiz_attempts', 'timecheckstate', array('id'=>$attemptid)));

        // add back to group2
        $this->assertTrue(groups_add_member($group2, $user1));
        $this->assertEquals(1400, $DB->get_field('quiz_attempts', 'timecheckstate', array('id'=>$attemptid)));

        // delete everyone from all groups
        groups_delete_group_members($course->id);
        $this->assertEquals(1200, $DB->get_field('quiz_attempts', 'timecheckstate', array('id'=>$attemptid)));
    }
Пример #13
0
function groups_screen_group_admin_delete_group()
{
    global $bp, $group_obj;
    if ($bp->current_component == $bp->groups->slug && 'delete-group' == $bp->action_variables[0]) {
        if (!$bp->is_item_admin) {
            return false;
        }
        if (isset($_POST['delete-group-button']) && isset($_POST['delete-group-understand'])) {
            // Group admin has deleted the group, now do it.
            if (!groups_delete_group($_POST['group-id'])) {
                bp_core_add_message(__('There was an error deleting the group, please try again.', 'buddypress'), 'error');
            } else {
                bp_core_add_message(__('The group was deleted successfully', 'buddypress'));
                do_action('groups_group_deleted', $_POST['group-id']);
                bp_core_redirect($bp->loggedin_user->domain . $bp->groups->slug . '/');
            }
            bp_core_redirect($bp->loggedin_user->domain . $bp->current_component);
        } else {
            do_action('groups_screen_group_admin_delete_group', $group_obj->id);
            bp_core_load_template(apply_filters('groups_template_group_admin_delete_group', 'groups/admin/delete-group'));
        }
    }
}
Пример #14
0
 /**
  * @group remove_from_group
  */
 public function test_wp_idea_stream_groups_delete_private_group()
 {
     $bp = buddypress();
     $group = new BP_Groups_Group($this->group_id);
     $group->status = 'private';
     $group->save();
     // Set current group
     $bp->groups->current_group = groups_get_group(array('group_id' => $this->group_id, 'populate_extras' => true));
     $u = $this->factory->user->create();
     groups_join_group($this->group_id, $u);
     $idea1 = $this->factory->idea->create(array('author' => $u, 'metas' => array('group_id' => $this->group_id), 'status' => 'private'));
     $idea2 = $this->factory->idea->create(array('author' => $u, 'metas' => array('group_id' => $this->group_id), 'status' => 'private'));
     $deleted = groups_delete_group($this->group_id);
     // Check metas
     $this->assertEmpty(wp_idea_stream_ideas_get_meta($idea1, 'group_id'));
     $this->assertEmpty(wp_idea_stream_ideas_get_meta($idea2, 'group_id'));
     $ideas = wp_idea_stream_ideas_get_ideas(array('include' => array($idea1, $idea2)));
     $public_ideas = wp_filter_object_list($ideas['ideas'], array('post_status' => 'publish'), 'and', 'ID');
     $this->assertEqualSets(array($idea1, $idea2), $public_ideas, 'Ideas removed from a group should always be public');
 }
/**
 * This function is called when a 'group_deleted' event is triggered.
 *
 *  @param object $eventdata The group object deleted.
 *  @return boolean Always return true so that the event gets cleared.
 *
 */
function fn_group_deleted_handler($eventdata)
{
    global $CFG;
    static $eventinprogress;
    require_once "{$CFG->dirroot}/enrol/enrol.class.php";
    /// Set a semaphore so that we don't do this for any group deleted from here.
    /// Without this, we would do the same operations again for every delete made in this function.
    if (!empty($eventinprogress)) {
        return true;
    } else {
        $eventinprogress = true;
    }
    if ($eventdata->courseid == SITEID) {
        /// Remove all associated course groups and associations.
        if (!($cgroups = get_records('block_fn_site_groups', 'sitegroupid', $eventdata->id))) {
            /// If no courses, nothing to do.
            return true;
        }
        foreach ($cgroups as $cgroup) {
            groups_delete_group($cgroup->coursegroupid);
            delete_records('block_fn_site_groups', 'id', $cgroup->id);
        }
    } else {
        /// Remove the course group association.
        delete_records('block_fn_site_groups', 'coursegroupid', $eventdata->id);
    }
    return true;
}
 $record->eventdescription = empty($data->description) ? null : $data->description;
 $record->blockinstanceid = $oldunlocksystem->blockinstanceid;
 $record->restrictions = empty($data->availabilityconditionsjson) ? null : $data->availabilityconditionsjson;
 $usid = $DB->insert_record('content_unlock_system', $record);
 $record = new stdClass();
 $record->unlocksystemid = $usid;
 $record->processorid = $USER->id;
 $DB->insert_record('content_unlock_processor', $record);
 $unlock_conditions = $DB->get_records('content_unlock_condition', array('unlocksystemid' => $oldunlocksystem->id));
 foreach ($unlock_conditions as $unlock_condition) {
     unset($unlock_condition->id);
     $unlock_condition->unlocksystemid = $usid;
     $DB->insert_record('content_unlock_condition', $unlock_condition);
 }
 if ($oldunlocksystem->mode == 1) {
     groups_delete_group($oldunlocksystem->groupid);
 }
 if ($data->mode == 0) {
     $visibility = $data->coursemodulevisibility == 0 ? 1 : 0;
     set_coursemodule_visible($data->coursemodule, $visibility);
 } else {
     $group_data = new stdClass();
     $group_data->name = 'us' . $usid;
     $group_data->courseid = $courseid;
     $groupid = groups_create_group($group_data);
     $record = new stdClass();
     $record->id = $usid;
     $record->groupid = $groupid;
     $DB->update_record('content_unlock_system', $record);
     $availability = $DB->get_field('course_modules', 'availability', array('id' => $data->coursemodule));
     $record = new stdClass();
Пример #17
0
/**
 * Delete all groups from course
 *
 * @param int $courseid
 * @param bool $showfeedback
 * @return bool success
 */
function groups_delete_groups($courseid, $showfeedback = false)
{
    global $CFG, $DB, $OUTPUT;
    $groups = $DB->get_recordset('groups', array('courseid' => $courseid));
    foreach ($groups as $group) {
        groups_delete_group($group);
    }
    // Invalidate the grouping cache for the course
    cache_helper::invalidate_by_definition('core', 'groupdata', array(), array($courseid));
    // TODO MDL-41312 Remove events_trigger_legacy('groups_groups_deleted').
    // This event is kept here for backwards compatibility, because it cannot be
    // translated to a new event as it is wrong.
    events_trigger_legacy('groups_groups_deleted', $courseid);
    if ($showfeedback) {
        echo $OUTPUT->notification(get_string('deleted') . ' - ' . get_string('groups', 'group'), 'notifysuccess');
    }
    return true;
}
Пример #18
0
 /**
  * Outputs the content of the administration tab and manages actions taken in this tab
  */
 public function view_administration()
 {
     global $SESSION, $OUTPUT, $PAGE, $DB, $USER, $CFG;
     $output = $PAGE->get_renderer('mod_grouptool');
     $id = $this->cm->id;
     $context = context_course::instance($this->course->id);
     // Get applicable roles!
     $rolenames = array();
     if ($roles = get_profile_roles($context)) {
         foreach ($roles as $role) {
             $rolenames[$role->id] = strip_tags(role_get_name($role, $context));
         }
     }
     $filter = optional_param('filter', null, PARAM_INT);
     if ($filter !== null) {
         set_user_preference('mod_grouptool_group_filter', $filter, $USER->id);
     } else {
         $filter = get_user_preferences('mod_grouptool_group_filter', self::FILTER_ACTIVE, $USER->id);
     }
     $inactivetabs = array();
     $filtertabs['active'] = new tabobject(self::FILTER_ACTIVE, $CFG->wwwroot . '/mod/grouptool/view.php?id=' . $id . '&tab=group_admin&filter=' . self::FILTER_ACTIVE, get_string('active', 'grouptool'), '', false);
     $filtertabs['inactive'] = new tabobject(self::FILTER_INACTIVE, $CFG->wwwroot . '/mod/grouptool/view.php?id=' . $id . '&tab=group_admin&filter=' . self::FILTER_INACTIVE, get_string('inactive'), '', false);
     $filtertabs['all'] = new tabobject(self::FILTER_ALL, $CFG->wwwroot . '/mod/grouptool/view.php?id=' . $id . '&tab=group_admin&filter=' . self::FILTER_ALL, get_string('all'), '', false);
     echo html_writer::tag('div', $OUTPUT->tabtree($filtertabs, $filter, $inactivetabs), array('id' => 'filtertabs'));
     // Check if everything has been confirmed, so we can finally start working!
     if (optional_param('confirm', 0, PARAM_BOOL)) {
         if (isset($SESSION->grouptool->view_administration->createGroupings)) {
             require_capability('mod/grouptool:create_groupings', $this->context);
             $target = required_param('target', PARAM_INT);
             switch ($target) {
                 // ...grpg_target | grpg_groupingname | use_all (0 sel | 1 all).
                 case 0:
                     // Invalid - no action! TODO Add message!
                     $error = true;
                     $preview = '';
                     break;
                 case -2:
                     // One grouping per group!
                     list($error, $preview) = $this->create_group_groupings();
                     break;
                 case -1:
                     // One new grouping for all!
                     list($error, $preview) = $this->update_grouping($target, required_param('name', PARAM_ALPHANUMEXT));
                     break;
                 default:
                     list($error, $preview) = $this->update_grouping($target);
                     break;
             }
             $preview = html_writer::tag('div', $preview, array('class' => 'centered'));
             echo $OUTPUT->box($preview, 'generalbox');
         }
         unset($SESSION->grouptool->view_administration);
     }
     if ($rename = optional_param('rename', 0, PARAM_INT)) {
         // Show Rename Form!
         $gform = new \mod_grouptool\group_rename_form(null, array('id' => $this->cm->id, 'instance' => $this->cm->instance, 'rename' => $rename));
         if (!$gform->is_cancelled() && ($fromform = $gform->get_data())) {
             $group = new stdClass();
             $group->id = $fromform->rename;
             $group->name = $fromform->name;
             $group->courseid = $fromform->courseid;
             groups_update_group($group);
         } else {
             if (!$gform->is_cancelled()) {
                 $data = new stdClass();
                 $data->name = $DB->get_field('groups', 'name', array('id' => $rename));
                 $gform->set_data($data);
                 $gform->display();
                 echo $OUTPUT->footer();
                 die;
             }
         }
     }
     if ($resize = optional_param('resize', 0, PARAM_INT)) {
         // Show Rename Form!
         $gform = new \mod_grouptool\group_resize_form(null, array('id' => $this->cm->id, 'instance' => $this->cm->instance, 'resize' => $resize));
         if (!$gform->is_cancelled() && ($fromform = $gform->get_data())) {
             if (empty($fromform->size)) {
                 $DB->set_field('grouptool_agrps', 'grpsize', null, array('groupid' => $fromform->resize, 'grouptoolid' => $this->cm->id));
             } else {
                 $group = new stdClass();
                 $group->id = $DB->get_field('grouptool_agrps', 'id', array('groupid' => $fromform->resize, 'grouptoolid' => $this->cm->instance));
                 $group->grpsize = $fromform->size;
                 $DB->update_record('grouptool_agrps', $group);
             }
         } else {
             if (!$gform->is_cancelled()) {
                 $data = new stdClass();
                 $data->size = $DB->get_field('grouptool_agrps', 'grpsize', array('groupid' => $resize, 'grouptoolid' => $this->cm->instance));
                 $gform->set_data($data);
                 $gform->display();
                 echo $OUTPUT->footer();
                 die;
             }
         }
     }
     if ($delete = optional_param('delete', 0, PARAM_INT)) {
         if (!optional_param('confirm', 0, PARAM_BOOL)) {
             // Show Confirm!
             $cancel = new moodle_url($PAGE->url);
             $continue = new moodle_url($cancel, array('confirm' => 1, 'delete' => $delete));
             $cancel = new single_button($cancel, get_string('no'), 'post');
             $continue = new single_button($continue, get_string('yes'), 'post');
             $confirmtext = get_string('confirm_delete', 'grouptool');
             echo $this->confirm($confirmtext, $continue, $cancel);
             echo $OUTPUT->footer();
             die;
         } else {
             // Delete it!
             groups_delete_group($delete);
         }
     }
     if ($toggle = optional_param('toggle', 0, PARAM_INT)) {
         if (!empty($toggle)) {
             $conditions = array('grouptoolid' => $this->cm->instance, 'groupid' => $toggle);
             if (!$DB->record_exists('grouptool_agrps', $conditions)) {
                 echo $OUTPUT->box($OUTPUT->notification(get_string('group_not_found', 'grouptool'), 'notifyproblem', $conditions), 'generalbox');
             } else {
                 $record = $DB->get_record('grouptool_agrps', $conditions);
                 if (!empty($record->active)) {
                     $DB->set_field('grouptool_agrps', 'active', 0, $conditions);
                 } else {
                     $DB->set_field('grouptool_agrps', 'active', 1, $conditions);
                 }
             }
         }
     }
     if (($bulkaction = optional_param('bulkaction', null, PARAM_ALPHA)) && ($selected = optional_param_array('selected', array(), PARAM_INT)) && optional_param('start_bulkaction', 0, PARAM_BOOL)) {
         switch ($bulkaction) {
             case 'activate':
                 // ...also via ajax bulk action?
                 // Activate now!
                 $groups = optional_param_array('selected', null, PARAM_INT);
                 if (!empty($groups)) {
                     list($grpsql, $grpparams) = $DB->get_in_or_equal($groups);
                     $DB->set_field_select("grouptool_agrps", "active", 1, " grouptoolid = ? AND groupid " . $grpsql, array_merge(array($this->cm->instance), $grpparams));
                 }
                 echo $OUTPUT->notification(get_string('activated_groups', 'grouptool'), 'notifysuccess');
                 $continue = new moodle_url($PAGE->url, array('tab' => 'group_admin'));
                 echo $this->confirm('', $continue);
                 break;
             case 'deactivate':
                 // ...also via ajax bulk action?
                 // Deactivate now!
                 $groups = optional_param_array('selected', null, PARAM_INT);
                 if (!empty($groups)) {
                     list($grpsql, $grpparams) = $DB->get_in_or_equal($groups);
                     $DB->set_field_select("grouptool_agrps", "active", 0, " grouptoolid = ? AND groupid " . $grpsql, array_merge(array($this->cm->instance), $grpparams));
                 }
                 echo $OUTPUT->notification(get_string('deactivated_groups', 'grouptool'), 'notifysuccess');
                 $continue = new moodle_url($PAGE->url, array('tab' => 'group_admin'));
                 echo $this->confirm('', $continue);
                 break;
             case 'delete':
                 // ...also via ajax bulk action?
                 // Show confirmation dialogue!
                 if (optional_param('confirm', 0, PARAM_BOOL)) {
                     $groups = optional_param_array('selected', null, PARAM_INT);
                     $groups = $DB->get_records_list('groups', 'id', $groups);
                     foreach ($groups as $group) {
                         groups_delete_group($group);
                     }
                     echo $OUTPUT->notification(get_string('successfully_deleted_groups', 'grouptool'), 'notifysuccess');
                     $continue = new moodle_url($PAGE->url, array('tab' => 'group_admin'));
                     echo $this->confirm('', $continue);
                 } else {
                     $cancel = new moodle_url($PAGE->url, array('tab' => 'group_admin'));
                     $params = array('confirm' => 1, 'bulkaction' => 'delete', 'start_bulkaction' => 1);
                     $text = get_string('confirm_delete', 'grouptool') . html_writer::start_tag('ul');
                     $groups = $DB->get_records_list('groups', 'id', $selected);
                     foreach ($selected as $select) {
                         $params['selected[' . $select . ']'] = $select;
                         $text .= html_writer::tag('li', $groups[$select]->name);
                     }
                     $text .= html_writer::end_tag('ul');
                     $continue = new moodle_url($cancel, $params);
                     echo $this->confirm($text, $continue, $cancel);
                     echo $OUTPUT->footer();
                     die;
                 }
                 break;
             case 'grouping':
                 // Show grouping creation form!
                 $selected = optional_param_array('selected', array(), PARAM_INT);
                 $mform = new \mod_grouptool\groupings_creation_form(null, array('id' => $id, 'selected' => $selected));
                 $groups = $DB->get_records_list('groups', 'id', $selected);
                 if ($mform->is_cancelled()) {
                     $bulkaction = null;
                     $selected = array();
                 } else {
                     if ($fromform = $mform->get_data()) {
                         // Some groupings should be created...
                         if ($fromform->target == -2) {
                             // One new grouping per group!
                             foreach ($groups as $group) {
                                 $grouping = new stdClass();
                                 if (!($grouping->id = groups_get_grouping_by_name($this->course->id, $group->name))) {
                                     $grouping = new stdClass();
                                     $grouping->courseid = $this->course->id;
                                     $grouping->name = $group->name;
                                     $grouping->id = groups_create_grouping($grouping);
                                 }
                                 // Insert group!
                                 groups_assign_grouping($grouping->id, $group->id);
                             }
                         } else {
                             if ($fromform->target == -1) {
                                 // One new grouping!
                                 // Create grouping if it doesn't exist...
                                 $grouping = new stdClass();
                                 if (!($grouping->id = groups_get_grouping_by_name($this->course->id, $fromform->name))) {
                                     $grouping = new stdClass();
                                     $grouping->courseid = $this->course->id;
                                     $grouping->name = trim($fromform->name);
                                     $grouping->id = groups_create_grouping($grouping);
                                 }
                                 // Insert groups!
                                 foreach ($groups as $group) {
                                     groups_assign_grouping($grouping->id, $group->id);
                                 }
                             } else {
                                 if ($fromform->target > 0) {
                                     // Existing Grouping!
                                     $grouping = groups_get_grouping($fromform->target);
                                     if ($grouping) {
                                         foreach ($groups as $group) {
                                             groups_assign_grouping($grouping->id, $group->id);
                                         }
                                     }
                                 }
                             }
                         }
                         // ...redirect to show sortlist again!
                         $url = new moodle_url('/mod/grouptool/view.php', array('id' => $this->cm->id, 'tab' => 'group_admin', 'filter' => $filter));
                         $text = $OUTPUT->notification(get_string('groupings_created_and_groups_added', 'grouptool'), 'notifymessage');
                         echo $this->confirm($text, $url);
                     } else {
                         $mform->display();
                     }
                 }
                 break;
         }
     }
     if (!$bulkaction || !$selected || !optional_param('start_bulkaction', 0, PARAM_BOOL)) {
         // Show form!
         $formaction = new moodle_url('/mod/grouptool/view.php', array('id' => $this->cm->id, 'tab' => 'group_admin', 'filter' => $filter));
         $mform = new MoodleQuickForm('bulk', 'post', $formaction, '');
         $mform->addElement('hidden', 'sesskey');
         $mform->setDefault('sesskey', sesskey());
         $sortlist = new \mod_grouptool\output\sortlist($this->course->id, $this->cm, $filter);
         $sortlistcontroller = new \mod_grouptool\output\sortlist_controller($sortlist);
         $mform->addElement('html', $output->render($sortlistcontroller));
         $mform->addElement('html', $output->render($sortlist));
         $actions = array('' => get_string('choose', 'grouptool'), 'activate' => get_string('setactive', 'grouptool'), 'deactivate' => get_string('setinactive', 'grouptool'), 'delete' => get_string('delete'), 'grouping' => get_string('createinsertgrouping', 'grouptool'));
         $grp = array();
         $grp[] =& $mform->createElement('static', 'with_selection', '', get_string('with_selection', 'grouptool'));
         $grp[] =& $mform->createElement('select', 'bulkaction', '', $actions);
         $grp[] =& $mform->createElement('submit', 'start_bulkaction', get_string('start', 'grouptool'));
         $mform->addGroup($grp, 'actiongrp', '', ' ', false);
         $mform->disable_form_change_checker();
         $mform->display();
         switch ($filter) {
             case self::FILTER_ACTIVE:
                 $curfilter = 'active';
                 break;
             case self::FILTER_INACTIVE:
                 $curfilter = 'inactive';
                 break;
             case self::FILTER_ALL:
                 $curfilter = 'all';
                 break;
         }
         $PAGE->requires->yui_module('moodle-mod_grouptool-administration', 'M.mod_grouptool.init_administration', array(array('lang' => current_language(), 'contextid' => $this->context->id, 'filter' => $curfilter, 'filterid' => $filter, 'globalsize' => $this->grouptool->grpsize)));
         $PAGE->requires->strings_for_js(array('active', 'inactive', 'confirm_delete'), 'mod_grouptool');
         $PAGE->requires->string_for_js('ajax_edit_size_help', 'mod_grouptool');
         $PAGE->requires->strings_for_js(array('yes', 'no'), 'moodle');
     }
 }
Пример #19
0
/**
 * Handle the display of the Delete Group page.
 */
function groups_screen_group_admin_delete_group()
{
    global $bp;
    if ('delete-group' != bp_get_group_current_admin_tab()) {
        return false;
    }
    if (!bp_is_item_admin() && !bp_current_user_can('bp_moderate')) {
        return false;
    }
    if (isset($_REQUEST['delete-group-button']) && isset($_REQUEST['delete-group-understand'])) {
        // Check the nonce first.
        if (!check_admin_referer('groups_delete_group')) {
            return false;
        }
        do_action('groups_before_group_deleted', $bp->groups->current_group->id);
        // Group admin has deleted the group, now do it.
        if (!groups_delete_group($bp->groups->current_group->id)) {
            bp_core_add_message(__('There was an error deleting the group. Please try again.', 'buddypress'), 'error');
        } else {
            bp_core_add_message(__('The group was deleted successfully', 'buddypress'));
            do_action('groups_group_deleted', $bp->groups->current_group->id);
            bp_core_redirect(trailingslashit(bp_loggedin_user_domain() . bp_get_groups_slug()));
        }
        bp_core_redirect(trailingslashit(bp_loggedin_user_domain() . bp_get_groups_slug()));
    }
    do_action('groups_screen_group_admin_delete_group', $bp->groups->current_group->id);
    bp_core_load_template(apply_filters('groups_template_group_admin_delete_group', 'groups/single/home'));
}
Пример #20
0
                echo $OUTPUT->box_end();
                echo $OUTPUT->footer();
                die;
            }
        }
    }
} else {
    if ($unselect and $canunselect and isset($mygroups[$unselect])) {
        // user unselected group
        if (!$isopen) {
            $problems[] = get_string('cannotunselectclosed', 'mod_groupselect');
        } else {
            if ($confirm and data_submitted() and confirm_sesskey()) {
                groups_remove_member($unselect, $USER->id);
                if ($groupselect->deleteemptygroups and !groups_get_members($unselect, $USER->id)) {
                    groups_delete_group($unselect);
                    $DB->delete_records('groupselect_passwords', array('groupid' => $unselect));
                }
                //add_to_log ( $course->id, 'groupselect', 'unselect', 'view.php?id=' . $cm->id, $groupselect->id, $cm->id );
                redirect($PAGE->url);
            } else {
                $grpname = format_string($mygroups[$unselect]->name, true, array('context' => $context));
                echo $OUTPUT->header();
                echo $OUTPUT->heading(get_string('unselect', 'mod_groupselect', $grpname));
                $yesurl = new moodle_url('/mod/groupselect/view.php', array('id' => $cm->id, 'unselect' => $unselect, 'confirm' => 1, 'sesskey' => sesskey()));
                $message = get_string('unselectconfirm', 'mod_groupselect', $grpname);
                echo $OUTPUT->confirm($message, $yesurl, $PAGE->url);
                echo $OUTPUT->footer();
                die;
            }
        }
Пример #21
0
/**
 * Set up the Groups admin page.
 *
 * Loaded before the page is rendered, this function does all initial setup,
 * including: processing form requests, registering contextual help, and
 * setting up screen options.
 *
 * @since 1.7.0
 *
 * @global BP_Groups_List_Table $bp_groups_list_table Groups screen list table.
 */
function bp_groups_admin_load()
{
    global $bp_groups_list_table;
    // Build redirection URL
    $redirect_to = remove_query_arg(array('action', 'action2', 'gid', 'deleted', 'error', 'updated', 'success_new', 'error_new', 'success_modified', 'error_modified'), $_SERVER['REQUEST_URI']);
    // Decide whether to load the dev version of the CSS and JavaScript
    $min = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : 'min.';
    $doaction = bp_admin_list_table_current_bulk_action();
    /**
     * Fires at top of groups admin page.
     *
     * @since 1.7.0
     *
     * @param string $doaction Current $_GET action being performed in admin screen.
     */
    do_action('bp_groups_admin_load', $doaction);
    // Edit screen
    if ('do_delete' == $doaction && !empty($_GET['gid'])) {
        check_admin_referer('bp-groups-delete');
        $group_ids = wp_parse_id_list($_GET['gid']);
        $count = 0;
        foreach ($group_ids as $group_id) {
            if (groups_delete_group($group_id)) {
                $count++;
            }
        }
        $redirect_to = add_query_arg('deleted', $count, $redirect_to);
        bp_core_redirect($redirect_to);
    } elseif ('edit' == $doaction && !empty($_GET['gid'])) {
        // columns screen option
        add_screen_option('layout_columns', array('default' => 2, 'max' => 2));
        get_current_screen()->add_help_tab(array('id' => 'bp-group-edit-overview', 'title' => __('Overview', 'buddypress'), 'content' => '<p>' . __('This page is a convenient way to edit the details associated with one of your groups.', 'buddypress') . '</p>' . '<p>' . __('The Name and Description box is fixed in place, but you can reposition all the other boxes using drag and drop, and can minimize or expand them by clicking the title bar of each box. Use the Screen Options tab to hide or unhide, or to choose a 1- or 2-column layout for this screen.', 'buddypress') . '</p>'));
        // Help panel - sidebar links
        get_current_screen()->set_help_sidebar('<p><strong>' . __('For more information:', 'buddypress') . '</strong></p>' . '<p><a href="https://buddypress.org/support">' . __('Support Forums', 'buddypress') . '</a></p>');
        // Register metaboxes for the edit screen.
        add_meta_box('submitdiv', _x('Save', 'group admin edit screen', 'buddypress'), 'bp_groups_admin_edit_metabox_status', get_current_screen()->id, 'side', 'high');
        add_meta_box('bp_group_settings', _x('Settings', 'group admin edit screen', 'buddypress'), 'bp_groups_admin_edit_metabox_settings', get_current_screen()->id, 'side', 'core');
        add_meta_box('bp_group_add_members', _x('Add New Members', 'group admin edit screen', 'buddypress'), 'bp_groups_admin_edit_metabox_add_new_members', get_current_screen()->id, 'normal', 'core');
        add_meta_box('bp_group_members', _x('Manage Members', 'group admin edit screen', 'buddypress'), 'bp_groups_admin_edit_metabox_members', get_current_screen()->id, 'normal', 'core');
        /**
         * Fires after the registration of all of the default group meta boxes.
         *
         * @since 1.7.0
         */
        do_action('bp_groups_admin_meta_boxes');
        // Enqueue JavaScript files
        wp_enqueue_script('postbox');
        wp_enqueue_script('dashboard');
        // Index screen
    } else {
        // Create the Groups screen list table
        $bp_groups_list_table = new BP_Groups_List_Table();
        // per_page screen option
        add_screen_option('per_page', array('label' => _x('Groups', 'Groups per page (screen options)', 'buddypress')));
        // Help panel - overview text
        get_current_screen()->add_help_tab(array('id' => 'bp-groups-overview', 'title' => __('Overview', 'buddypress'), 'content' => '<p>' . __('You can manage groups much like you can manage comments and other content. This screen is customizable in the same ways as other management screens, and you can act on groups by using the on-hover action links or the Bulk Actions.', 'buddypress') . '</p>'));
        get_current_screen()->add_help_tab(array('id' => 'bp-groups-overview-actions', 'title' => __('Group Actions', 'buddypress'), 'content' => '<p>' . __('Clicking "Visit" will take you to the group&#8217;s public page. Use this link to see what the group looks like on the front end of your site.', 'buddypress') . '</p>' . '<p>' . __('Clicking "Edit" will take you to a Dashboard panel where you can manage various details about the group, such as its name and description, its members, and other settings.', 'buddypress') . '</p>' . '<p>' . __('If you click "Delete" under a specific group, or select a number of groups and then choose Delete from the Bulk Actions menu, you will be led to a page where you&#8217;ll be asked to confirm the permanent deletion of the group(s).', 'buddypress') . '</p>'));
        // Help panel - sidebar links
        get_current_screen()->set_help_sidebar('<p><strong>' . __('For more information:', 'buddypress') . '</strong></p>' . '<p>' . __('<a href="https://buddypress.org/support/">Support Forums</a>', 'buddypress') . '</p>');
    }
    $bp = buddypress();
    // Enqueue CSS and JavaScript
    wp_enqueue_script('bp_groups_admin_js', $bp->plugin_url . "bp-groups/admin/js/admin.{$min}js", array('jquery', 'wp-ajax-response', 'jquery-ui-autocomplete'), bp_get_version(), true);
    wp_localize_script('bp_groups_admin_js', 'BP_Group_Admin', array('add_member_placeholder' => __('Start typing a username to add a new member.', 'buddypress'), 'warn_on_leave' => __('If you leave this page, you will lose any unsaved changes you have made to the group.', 'buddypress')));
    wp_enqueue_style('bp_groups_admin_css', $bp->plugin_url . "bp-groups/admin/css/admin.{$min}css", array(), bp_get_version());
    wp_style_add_data('bp_groups_admin_css', 'rtl', true);
    if ($min) {
        wp_style_add_data('bp_groups_admin_css', 'suffix', $min);
    }
    if ($doaction && 'save' == $doaction) {
        // Get group ID
        $group_id = isset($_REQUEST['gid']) ? (int) $_REQUEST['gid'] : '';
        $redirect_to = add_query_arg(array('gid' => (int) $group_id, 'action' => 'edit'), $redirect_to);
        // Check this is a valid form submission
        check_admin_referer('edit-group_' . $group_id);
        // Get the group from the database
        $group = groups_get_group('group_id=' . $group_id);
        // If the group doesn't exist, just redirect back to the index
        if (empty($group->slug)) {
            wp_redirect($redirect_to);
            exit;
        }
        // Check the form for the updated properties
        // Store errors
        $error = 0;
        $success_new = $error_new = $success_modified = $error_modified = array();
        // Group name and description are handled with
        // groups_edit_base_group_details()
        if (!groups_edit_base_group_details($group_id, $_POST['bp-groups-name'], $_POST['bp-groups-description'], 0)) {
            $error = $group_id;
            // using negative integers for different error messages... eek!
            if (empty($_POST['bp-groups-name']) && empty($_POST['bp-groups-description'])) {
                $error = -3;
            } elseif (empty($_POST['bp-groups-name'])) {
                $error = -1;
            } elseif (empty($_POST['bp-groups-description'])) {
                $error = -2;
            }
        }
        // Enable discussion forum
        $enable_forum = isset($_POST['group-show-forum']) ? 1 : 0;
        /**
         * Filters the allowed status values for the group.
         *
         * @since 1.0.2
         *
         * @param array $value Array of allowed group statuses.
         */
        $allowed_status = apply_filters('groups_allowed_status', array('public', 'private', 'hidden'));
        $status = in_array($_POST['group-status'], (array) $allowed_status) ? $_POST['group-status'] : 'public';
        /**
         * Filters the allowed invite status values for the group.
         *
         * @since 1.5.0
         *
         * @param array $value Array of allowed invite statuses.
         */
        $allowed_invite_status = apply_filters('groups_allowed_invite_status', array('members', 'mods', 'admins'));
        $invite_status = in_array($_POST['group-invite-status'], (array) $allowed_invite_status) ? $_POST['group-invite-status'] : 'members';
        if (!groups_edit_group_settings($group_id, $enable_forum, $status, $invite_status)) {
            $error = $group_id;
        }
        // Process new members
        $user_names = array();
        if (!empty($_POST['bp-groups-new-members'])) {
            $user_names = array_merge($user_names, explode(',', $_POST['bp-groups-new-members']));
        }
        if (!empty($user_names)) {
            foreach (array_values($user_names) as $user_name) {
                $un = trim($user_name);
                // Make sure the user exists before attempting
                // to add to the group
                $user = get_user_by('slug', $un);
                if (empty($user)) {
                    $error_new[] = $un;
                } else {
                    if (!groups_join_group($group_id, $user->ID)) {
                        $error_new[] = $un;
                    } else {
                        $success_new[] = $un;
                    }
                }
            }
        }
        // Process member role changes
        if (!empty($_POST['bp-groups-role']) && !empty($_POST['bp-groups-existing-role'])) {
            // Before processing anything, make sure you're not
            // attempting to remove the all user admins
            $admin_count = 0;
            foreach ((array) $_POST['bp-groups-role'] as $new_role) {
                if ('admin' == $new_role) {
                    $admin_count++;
                    break;
                }
            }
            if (!$admin_count) {
                $redirect_to = add_query_arg('no_admins', 1, $redirect_to);
                $error = $group_id;
            } else {
                // Process only those users who have had their roles changed
                foreach ((array) $_POST['bp-groups-role'] as $user_id => $new_role) {
                    $existing_role = isset($_POST['bp-groups-existing-role'][$user_id]) ? $_POST['bp-groups-existing-role'][$user_id] : '';
                    if ($existing_role != $new_role) {
                        switch ($new_role) {
                            case 'mod':
                                // Admin to mod is a demotion. Demote to
                                // member, then fall through
                                if ('admin' == $existing_role) {
                                    groups_demote_member($user_id, $group_id);
                                }
                            case 'admin':
                                // If the user was banned, we must
                                // unban first
                                if ('banned' == $existing_role) {
                                    groups_unban_member($user_id, $group_id);
                                }
                                // At this point, each existing_role
                                // is a member, so promote
                                $result = groups_promote_member($user_id, $group_id, $new_role);
                                break;
                            case 'member':
                                if ('admin' == $existing_role || 'mod' == $existing_role) {
                                    $result = groups_demote_member($user_id, $group_id);
                                } elseif ('banned' == $existing_role) {
                                    $result = groups_unban_member($user_id, $group_id);
                                }
                                break;
                            case 'banned':
                                $result = groups_ban_member($user_id, $group_id);
                                break;
                            case 'remove':
                                $result = groups_remove_member($user_id, $group_id);
                                break;
                        }
                        // Store the success or failure
                        if ($result) {
                            $success_modified[] = $user_id;
                        } else {
                            $error_modified[] = $user_id;
                        }
                    }
                }
            }
        }
        /**
         * Fires before redirect so plugins can do something first on save action.
         *
         * @since 1.6.0
         *
         * @param int $group_id ID of the group being edited.
         */
        do_action('bp_group_admin_edit_after', $group_id);
        // Create the redirect URL
        if ($error) {
            // This means there was an error updating group details
            $redirect_to = add_query_arg('error', (int) $error, $redirect_to);
        } else {
            // Group details were update successfully
            $redirect_to = add_query_arg('updated', 1, $redirect_to);
        }
        if (!empty($success_new)) {
            $success_new = implode(',', array_filter($success_new, 'urlencode'));
            $redirect_to = add_query_arg('success_new', $success_new, $redirect_to);
        }
        if (!empty($error_new)) {
            $error_new = implode(',', array_filter($error_new, 'urlencode'));
            $redirect_to = add_query_arg('error_new', $error_new, $redirect_to);
        }
        if (!empty($success_modified)) {
            $success_modified = implode(',', array_filter($success_modified, 'urlencode'));
            $redirect_to = add_query_arg('success_modified', $success_modified, $redirect_to);
        }
        if (!empty($error_modified)) {
            $error_modified = implode(',', array_filter($error_modified, 'urlencode'));
            $redirect_to = add_query_arg('error_modified', $error_modified, $redirect_to);
        }
        /**
         * Filters the URL to redirect to after successfully editing a group.
         *
         * @since 1.7.0
         *
         * @param string $redirect_to URL to redirect user to.
         */
        wp_redirect(apply_filters('bp_group_admin_edit_redirect', $redirect_to));
        exit;
        // If a referrer and a nonce is supplied, but no action, redirect back.
    } elseif (!empty($_GET['_wp_http_referer'])) {
        wp_redirect(remove_query_arg(array('_wp_http_referer', '_wpnonce'), stripslashes($_SERVER['REQUEST_URI'])));
        exit;
    }
}
Пример #22
0
 /**
  * Delete all group membership information for the specified user
  *
  * @global object $bp BuddyPress global settings
  * @global wpdb $wpdb WordPress database object
  * @param int $user_id
  * @since 1.0
  * @uses BP_Groups_Member
  */
 function delete_all_for_user($user_id)
 {
     global $bp, $wpdb;
     // Get all the group ids for the current user's groups and update counts
     $group_ids = BP_Groups_Member::get_group_ids($user_id);
     foreach ($group_ids['groups'] as $group_id) {
         groups_update_groupmeta($group_id, 'total_member_count', groups_get_total_member_count($group_id) - 1);
         // If current user is the creator of a group and is the sole admin, delete that group to avoid counts going out-of-sync
         if (groups_is_user_admin($user_id, $group_id) && count(groups_get_group_admins($group_id)) < 2 && groups_is_user_creator($user_id, $group_id)) {
             groups_delete_group($group_id);
         }
     }
     return $wpdb->query($wpdb->prepare("DELETE FROM {$bp->groups->table_name_members} WHERE user_id = %d", $user_id));
 }
Пример #23
0
function blended_delete_sign_member_or_group($idteam, $member, $option)
{
    global $DB;
    $blended_teams = $DB->get_records('blended_team');
    foreach ($blended_teams as $blended_team) {
        if ($blended_team->id_team == $idteam) {
            $f = $blended_team;
        }
    }
    $g = $DB->get_record('groups', array('id' => $idteam));
    $l = $DB->get_record('blended_assign_grouping', array('id_assign' => $f->id_assignment));
    if ($option == 'member') {
        $del = groups_remove_member($idteam, $member->userid);
        blended_delete_team_member($idteam, $member->id);
    }
    if ($option == 'group') {
        $del = groups_delete_group($idteam);
        groups_unassign_grouping($l->id_grouping, $idteam);
        blended_delete_team($idteam, $f->id_assignment);
        blended_delete_team_member($idteam);
        //Se debe realizar la comprobación de que si no hay mas equipos se borre el agrupamiento
        if (!($teams = $DB->get_records('groupings_groups', array('groupingid' => $l->id_grouping)))) {
            groups_delete_grouping($l->id_grouping);
            $DB->delete_records('blended_assign_grouping', array('id_grouping' => $l->id_grouping));
        }
    }
}
Пример #24
0
     //UAIOPEN - se agrega la funcionalidad de unirse al grupo con envio de solicitudes
 //UAIOPEN - se agrega la funcionalidad de unirse al grupo con envio de solicitudes
 case 'joingroup':
     if (count($groupids) == 0 & count($groupids) > 1) {
         print_error('errorjoinone', 'group', $returnurl);
     }
     $joingroup = $groupids[0];
     redirect(new moodle_url('/group/join.php', array('courseid' => $courseid, 'group' => $joingroup)));
     break;
     //UAIOPEN - se agrega la funcionalidad de dejar el grupo
 //UAIOPEN - se agrega la funcionalidad de dejar el grupo
 case 'leavegroup':
     $leavegroup = $my_groupid;
     $members = groups_get_members($leavegroup);
     if (count($members) == 1) {
         groups_delete_group($leavegroup);
     } else {
         $member_group = $DB->get_records_sql('SELECT id,userid FROM {groups_members} WHERE groupid = ? and roleid = ? LIMIT 1', array($my_groupid, "2"));
         foreach ($member_group as $member_leader) {
             $member_new_leader = new stdClass();
             $member_new_leader->id = $member_leader->id;
             $member_new_leader->groupid = $leavegroup;
             $member_new_leader->leader_group = $member_leader->userid;
         }
         //UAIOPEN - actualiza el líder
         groups_update_leader($member_new_leader);
         //UAIOPEN - remueve al participante
         groups_remove_member($leavegroup, $USER->id);
     }
     redirect(new moodle_url('/group/index.php', array('id' => $courseid)));
     break;
Пример #25
0
}
require_login($course);
$context = get_context_instance(CONTEXT_COURSE, $course->id);
require_capability('moodle/course:managegroups', $context);
$returnurl = $CFG->wwwroot . '/group/index.php?id=' . $course->id . '&amp;group=' . $id;
if ($id and $delete) {
    if (!$confirm) {
        print_header(get_string('deleteselectedgroup', 'group'), get_string('deleteselectedgroup', 'group'));
        $optionsyes = array('id' => $id, 'delete' => 1, 'courseid' => $courseid, 'sesskey' => sesskey(), 'confirm' => 1);
        $optionsno = array('id' => $courseid);
        notice_yesno(get_string('deletegroupconfirm', 'group', $group->name), 'group.php', 'index.php', $optionsyes, $optionsno, 'get', 'get');
        print_footer();
        die;
    } else {
        if (confirm_sesskey()) {
            if (groups_delete_group($id)) {
                // MDL-9983
                $eventdata = new object();
                $eventdata->group = $id;
                $eventdata->course = $courseid;
                events_trigger('group_deleted', $eventdata);
                redirect('index.php?id=' . $course->id);
            } else {
                print_error('erroreditgroup', 'group', $returnurl);
            }
        }
    }
}
/// First create the form
$editform = new group_form();
$editform->set_data($group);
Пример #26
0
 public function test_group_deleted_event()
 {
     $this->resetAfterTest();
     $course = $this->getDataGenerator()->create_course();
     $group = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
     $sink = $this->redirectEvents();
     groups_delete_group($group->id);
     $events = $sink->get_events();
     $this->assertCount(1, $events);
     $event = reset($events);
     $this->assertInstanceOf('\\core\\event\\group_deleted', $event);
     $this->assertEventLegacyData($group, $event);
     $this->assertSame('groups_group_deleted', $event->get_legacy_eventname());
     $this->assertEquals(context_course::instance($course->id), $event->get_context());
     $this->assertEquals($group->id, $event->objectid);
     $url = new moodle_url('/group/index.php', array('id' => $event->courseid));
     $this->assertEquals($url, $event->get_url());
 }
Пример #27
0
 /**
  * Delete groups
  *
  * @param array $groupids array of group ids
  * @since Moodle 2.2
  */
 public static function delete_groups($groupids)
 {
     global $CFG, $DB;
     require_once "{$CFG->dirroot}/group/lib.php";
     $params = self::validate_parameters(self::delete_groups_parameters(), array('groupids' => $groupids));
     $transaction = $DB->start_delegated_transaction();
     foreach ($params['groupids'] as $groupid) {
         // validate params
         $groupid = validate_param($groupid, PARAM_INT);
         if (!($group = groups_get_group($groupid, '*', IGNORE_MISSING))) {
             // silently ignore attempts to delete nonexisting groups
             continue;
         }
         // now security checks
         $context = context_course::instance($group->courseid, IGNORE_MISSING);
         try {
             self::validate_context($context);
         } catch (Exception $e) {
             $exceptionparam = new stdClass();
             $exceptionparam->message = $e->getMessage();
             $exceptionparam->courseid = $group->courseid;
             throw new moodle_exception('errorcoursecontextnotvalid', 'webservice', '', $exceptionparam);
         }
         require_capability('moodle/course:managegroups', $context);
         groups_delete_group($group);
     }
     $transaction->allow_commit();
 }
Пример #28
0
                $error = 'Can not create group!';
                // should not happen
                $failed = true;
                break;
            }
            $createdgroups[] = $groupid;
            foreach ($group['members'] as $user) {
                groups_add_member($groupid, $user->id);
            }
            if ($grouping) {
                groups_assign_grouping($grouping->id, $groupid);
            }
        }
        if ($failed) {
            foreach ($createdgroups as $groupid) {
                groups_delete_group($groupid);
            }
            if ($createdgrouping) {
                groups_delete_grouping($createdgrouping);
            }
        } else {
            redirect($returnurl);
        }
    }
}
/// Print header
print_header_simple($strgroups, ': ' . $strgroups, $navigation, '', '', true, '', navmenu($course));
print_heading($strautocreategroups);
if ($error != '') {
    notify($error);
}
Пример #29
0
/**
 * Handle the display of the Delete Group page.
 */
function groups_screen_group_admin_delete_group()
{
    if ('delete-group' != bp_get_group_current_admin_tab()) {
        return false;
    }
    if (!bp_is_item_admin() && !bp_current_user_can('bp_moderate')) {
        return false;
    }
    $bp = buddypress();
    if (isset($_REQUEST['delete-group-button']) && isset($_REQUEST['delete-group-understand'])) {
        // Check the nonce first.
        if (!check_admin_referer('groups_delete_group')) {
            return false;
        }
        /**
         * Fires before the deletion of a group from the Delete Group page.
         *
         * @since 1.5.0
         *
         * @param int $id ID of the group being deleted.
         */
        do_action('groups_before_group_deleted', $bp->groups->current_group->id);
        // Group admin has deleted the group, now do it.
        if (!groups_delete_group($bp->groups->current_group->id)) {
            bp_core_add_message(__('There was an error deleting the group. Please try again.', 'buddypress'), 'error');
        } else {
            bp_core_add_message(__('The group was deleted successfully.', 'buddypress'));
            /**
             * Fires after the deletion of a group from the Delete Group page.
             *
             * @since 1.0.0
             *
             * @param int $id ID of the group being deleted.
             */
            do_action('groups_group_deleted', $bp->groups->current_group->id);
            bp_core_redirect(trailingslashit(bp_loggedin_user_domain() . bp_get_groups_slug()));
        }
        bp_core_redirect(trailingslashit(bp_loggedin_user_domain() . bp_get_groups_slug()));
    }
    /**
     * Fires before the loading of the Delete Group page template.
     *
     * @since 1.0.0
     *
     * @param int $id ID of the group that is being displayed.
     */
    do_action('groups_screen_group_admin_delete_group', $bp->groups->current_group->id);
    /**
     * Filters the template to load for the Delete Group page.
     *
     * @since 1.0.0
     *
     * @param string $value Path to the Delete Group template.
     */
    bp_core_load_template(apply_filters('groups_template_group_admin_delete_group', 'groups/single/home'));
}
Пример #30
-1
function blended_actualizar_agrupamiento($updated_teams, grade_item $item, $blended, $delete_empty)
{
    global $DB;
    $output = '';
    $r = 0;
    //obtengo el identificador del curso
    $grouping = blended_get_grouping($item, $blended);
    //groups_get_grouping($groupingid,'*',MUST_EXIST);//$DB->get_record('groupings',array('id'=>$groupingid));
    $courseid = $grouping->courseid;
    //Obtención de la  lista de id de los usuarios introducidos en el curso:
    $lista_usuarios = get_enrolled_users(context_course::instance($courseid), '', 0, 'u.id,u.idnumber');
    $lista_idnumbers = array();
    // 	//Obtenci�n de la lista de 'idnumber' de estos usuarios
    foreach ($lista_usuarios as $id => $lista) {
        if (!empty($lista->idnumber)) {
            $lista_idnumbers[$id] = $lista->idnumber;
        }
        // 		$r++;
    }
    // 	$r=0;
    // 	$lista_id=array();
    // 	foreach($lista_idnumbers as $lista){
    // 		$lista_id[$r]=blended_clean_idnumber($lista);
    // 		$r++;
    // 	}
    $members_processed = array();
    /* Actualizo los grupos actualizando el nombre del grupo
       y volviendo a introducir los miembros comprobando que el usuario introducido existe */
    $r = 0;
    foreach ($updated_teams as $i => $updatedteam) {
        // Check members
        $form_members = array();
        foreach ($updatedteam->members as $memberid) {
            //compruebo que el usuario introducido existe y si es as� que lo guarde
            if (key_exists($memberid, $lista_idnumbers)) {
                // user is specified by moodle id
                if (array_search($memberid, $form_members) === false) {
                    $form_members[] = $memberid;
                }
            } else {
                if (key_exists($memberid, $lista_usuarios)) {
                    // user is specified by id_number
                    if (array_search($memberid, $form_members) === false) {
                        $form_members[] = $memberid;
                    }
                }
            }
        }
        // Update/Create/delete Group
        // Create/Update Group information
        //
        if (count($form_members) == 0 && $delete_empty) {
            // An empty membership deletes the group ??
            groups_delete_group($updatedteam->id);
        } else {
            //guardo los miembros en un array
            $current_team = blended_get_team($updatedteam->id);
            if ($current_team) {
                //si existe lo actualizo
                $current_team->name = $updatedteam->name;
                groups_update_group($current_team);
            } else {
                if (count($form_members) > 0 || $updatedteam->name != '') {
                    //si no existe lo creo
                    $itemname = blended_get_item_name($item);
                    $data = new stdClass();
                    $data->courseid = $courseid;
                    $data->name = $updatedteam->name;
                    $data->description_editor['text'] = "Group for activity:  '{$itemname}'.";
                    $data->description_editor['format'] = FORMAT_PLAIN;
                    $updatedteam->id = groups_create_group($data);
                    groups_assign_grouping($grouping->id, $updatedteam->id, time(), true);
                } else {
                    continue;
                    // team with no id, no name, and no components
                }
            }
            $current_team = blended_get_team($updatedteam->id, true);
            $current_members = array_keys($current_team->members);
            // find members to remove
            $members_to_delete = array_diff($current_members, $form_members);
            $members_to_add = array_diff($form_members, $current_members);
            // remove old members
            $need_reelect_leader = false;
            foreach ($members_to_delete as $memberid) {
                $need_reelect_leader = $current_team->leaderid == $memberid;
                blended_remove_team_member($current_team, $memberid);
                //				     groups_remove_member($team->id, $member->id);
            }
            // update team conf
            $current_team = blended_get_team($current_team);
            // Add current members
            foreach ($members_to_add as $memberid) {
                groups_add_member($current_team->id, $memberid);
                if ($memberid == $current_team->leaderid) {
                    $need_reelect_leader = false;
                }
                if (key_exists($memberid, $members_processed)) {
                    $members_processed[$memberid]++;
                } else {
                    $members_processed[$memberid] = 1;
                }
            }
            if (!isset($current_team->leaderid)) {
                $need_reelect_leader = true;
            }
            // check leadership
            if (count($members_to_add) > 0 && count($members_to_delete) > 0 && $need_reelect_leader) {
                // elect new leader
                blended_set_team_leaderid($current_team->id, $form_members[0]);
                global $OUTPUT, $DB;
                $a = new stdClass();
                $a->username = fullname($DB->get_record('user', array('id' => $form_members[0])));
                $a->teamname = $current_team->name;
                $output .= $OUTPUT->notification(get_string('userpromotedtoleader', 'blended', $a));
            }
        }
    }
    return $output;
    // 	//Actualizaci�n de las calificaciones(si existen) : comparar los miembros con los de "grade_grades" y si
    // 	//no estan en el vector borrarlos de la tabla
    $grades_moodle = grade_get_grades($courseid, $item->itemtype, $item->itemmodule, $item->iteminstance);
    $grades_item = $grades_moodle->items[0];
    $grades = $grades_item->grades;
    //Para cada miembro de la tabla miro si esta en el vector $miembros_grupos
    $cont_gr = 0;
    $cont_group = 0;
    foreach ($grades as $grade) {
        foreach ($miembros_grupos as $miembro_gr) {
            foreach ($miembro_gr as $miembro) {
                if ($grade->userid != $miembro->id) {
                    $cont_gr++;
                }
                if ($cont_gr == count($miembro_gr)) {
                    $cont_group++;
                    continue;
                }
            }
            if ($cont_gr == count($miembros_grupos)) {
                print_error("borra en tabla!!");
                //Entonces ese id no esta en los mimebros y hay que borrarlo de la tabla
                $DB->delete_records('grade_grades', array('itemid' => $grade_item->id, 'userid' => $grade->userid));
                continue;
            }
        }
    }
    // 	$DB->delete_records('grade_grades',array('itemid'=>$grade_item->id));
    //Comprobaci�n de la repetici�n de miembros en distintos equipos:
    $contador = array();
    foreach ($lista_idnumbers as $t) {
        $valor = 1;
        foreach ($miembros_grupos as $miembro_gr) {
            foreach ($miembro_gr as $miembro) {
                if ($miembro->idnumber == $t) {
                    //meto en un contador para el valor del id de cada usuario las veces que se repite
                    $contador[$miembro->id] = $valor;
                    $valor++;
                }
            }
        }
    }
    return $contador;
}