private function auto_update_max() {
        global $CFG, $DB;
        if ($this->aggregation != GRADE_AGGREGATE_SUM) {
            // not needed at all
            return;
        }

        // Find grade items of immediate children (category or grade items) and force site settings.
        $this->load_grade_item();
        $depends_on = $this->grade_item->depends_on();

        // Check to see if the gradebook is frozen. This allows grades to not be altered at all until a user verifies that they
        // wish to update the grades.
        $gradebookcalculationfreeze = 'gradebook_calculations_freeze_' . $this->courseid;
        $oldextracreditcalculation = isset($CFG->$gradebookcalculationfreeze) && ($CFG->$gradebookcalculationfreeze <= 20150627);
        // Only run if the gradebook isn't frozen.
        if (!$oldextracreditcalculation) {
            // Don't automatically update the max for calculated items.
            if ($this->grade_item->is_calculated()) {
                return;
            }
        }

        $items = false;
        if (!empty($depends_on)) {
            list($usql, $params) = $DB->get_in_or_equal($depends_on);
            $sql = "SELECT *
                      FROM {grade_items}
                     WHERE id $usql";
            $items = $DB->get_records_sql($sql, $params);
        }

        if (!$items) {

            if ($this->grade_item->grademax != 0 or $this->grade_item->gradetype != GRADE_TYPE_VALUE) {
                $this->grade_item->grademax  = 0;
                $this->grade_item->grademin  = 0;
                $this->grade_item->gradetype = GRADE_TYPE_VALUE;
                $this->grade_item->update('aggregation');
            }
            return;
        }

        //find max grade possible
        $maxes = array();

        foreach ($items as $item) {

            if ($item->aggregationcoef > 0) {
                // extra credit from this activity - does not affect total
                continue;
            } else if ($item->aggregationcoef2 <= 0) {
                // Items with a weight of 0 do not affect the total.
                continue;
            }

            if ($item->gradetype == GRADE_TYPE_VALUE) {
                $maxes[$item->id] = $item->grademax;

            } else if ($item->gradetype == GRADE_TYPE_SCALE) {
                $maxes[$item->id] = $item->grademax; // 0 = nograde, 1 = first scale item, 2 = second scale item
            }
        }

        if ($this->can_apply_limit_rules()) {
            // Apply droplow and keephigh.
            $this->apply_limit_rules($maxes, $items);
        }
        $max = array_sum($maxes);

        // update db if anything changed
        if ($this->grade_item->grademax != $max or $this->grade_item->grademin != 0 or $this->grade_item->gradetype != GRADE_TYPE_VALUE) {
            $this->grade_item->grademax  = $max;
            $this->grade_item->grademin  = 0;
            $this->grade_item->gradetype = GRADE_TYPE_VALUE;
            $this->grade_item->update('aggregation');
        }
    }
private function auto_update_max() {
        global $CFG, $DB;
        if ($this->aggregation != GRADE_AGGREGATE_SUM) {
            // not needed at all
            return;
        }

        // Find grade items of immediate children (category or grade items) and force site settings.
        $this->load_grade_item();
        $depends_on = $this->grade_item->depends_on();

        // Check to see if the gradebook is frozen. This allows grades to not be altered at all until a user verifies that they
        // wish to update the grades.
        $gradebookcalculationfreeze = 'gradebook_calculations_freeze_' . $this->courseid;
        $oldextracreditcalculation = isset($CFG->$gradebookcalculationfreeze) && ($CFG->$gradebookcalculationfreeze <= 20150627);
        // Only run if the gradebook isn't frozen.
        if (!$oldextracreditcalculation) {
            // Don't automatically update the max for calculated items.
            if ($this->grade_item->is_calculated()) {
                return;
            }
        }

        $items = false;
        if (!empty($depends_on)) {
            list($usql, $params) = $DB->get_in_or_equal($depends_on);
            $sql = "SELECT *
                      FROM {grade_items}
                     WHERE id $usql";
            $items = $DB->get_records_sql($sql, $params);
        }

        if (!$items) {

            if ($this->grade_item->grademax != 0 or $this->grade_item->gradetype != GRADE_TYPE_VALUE) {
                $this->grade_item->grademax  = 0;
                $this->grade_item->grademin  = 0;
                $this->grade_item->gradetype = GRADE_TYPE_VALUE;
                $this->grade_item->update('aggregation');
            }
            return;
        }

        //find max grade possible
        $maxes = array();

        foreach ($items as $item) {

            if ($item->aggregationcoef > 0) {
                // extra credit from this activity - does not affect total
                continue;
            } else if ($item->aggregationcoef2 <= 0) {
                // Items with a weight of 0 do not affect the total.
                continue;
            }

            if ($item->gradetype == GRADE_TYPE_VALUE) {
                $maxes[$item->id] = $item->grademax;

            } else if ($item->gradetype == GRADE_TYPE_SCALE) {
                $maxes[$item->id] = $item->grademax; // 0 = nograde, 1 = first scale item, 2 = second scale item
            }
        }

        if ($this->can_apply_limit_rules()) {
            // Apply droplow and keephigh.
            $this->apply_limit_rules($maxes, $items);
        }
        $max = array_sum($maxes);

        // update db if anything changed
        if ($this->grade_item->grademax != $max or $this->grade_item->grademin != 0 or $this->grade_item->gradetype != GRADE_TYPE_VALUE) {
            $this->grade_item->grademax  = $max;
            $this->grade_item->grademin  = 0;
            $this->grade_item->gradetype = GRADE_TYPE_VALUE;
            $this->grade_item->update('aggregation');
        }
    }
private function auto_update_max ( ) { global $ CFG , $ DB ; if ( $ this -> aggregation != GRADE_AGGREGATE_SUM ) { // not needed at all return ; } // Find grade items of immediate children (category or grade items) and force site settings. $ this -> load_grade_item ( ) ; $ depends_on = $ this -> grade_item -> depends_on ( ) ; // Check to see if the gradebook is frozen. This allows grades to not be altered at all until a user verifies that they // wish to update the grades. $ gradebookcalculationfreeze = 'gradebook_calculations_freeze_' . $ this -> courseid ; $ oldextracreditcalculation = isset ( $ CFG -> $ gradebookcalculationfreeze ) && ( $ CFG -> $ gradebookcalculationfreeze <= 20150627 ) ; // Only run if the gradebook isn't frozen. if ( ! $ oldextracreditcalculation ) { // Don't automatically update the max for calculated items. if ( $ this -> grade_item -> is_calculated ( ) ) { return ; } } $ items = false ; if ( ! empty ( $ depends_on ) ) { list ( $ usql , $ params ) = $ DB -> get_in_or_equal ( $ depends_on ) ; $ sql = "SELECT *
                      FROM {grade_items}
                     WHERE id $usql" ; $ items = $ DB -> get_records_sql ( $ sql , $ params ) ; } if ( ! $ items ) { if ( $ this -> grade_item -> grademax != 0 or $ this -> grade_item -> gradetype != GRADE_TYPE_VALUE ) { $ this -> grade_item -> grademax = 0 ; $ this -> grade_item -> grademin = 0 ; $ this -> grade_item -> gradetype = GRADE_TYPE_VALUE ; $ this -> grade_item -> update ( 'aggregation' ) ; } return ; } //find max grade possible $ maxes = array ( ) ; foreach ( $ items as $ item ) { if ( $ item -> aggregationcoef > 0 ) { // extra credit from this activity - does not affect total continue ; } else if ( $ item -> aggregationcoef2 <= 0 ) { // Items with a weight of 0 do not affect the total. continue ; } if ( $ item -> gradetype == GRADE_TYPE_VALUE ) { $ maxes [ $ item -> id ] = $ item -> grademax ; } else if ( $ item -> gradetype == GRADE_TYPE_SCALE ) { $ maxes [ $ item -> id ] = $ item -> grademax ; // 0 = nograde, 1 = first scale item, 2 = second scale item } } if ( $ this -> can_apply_limit_rules ( ) ) { // Apply droplow and keephigh. $ this -> apply_limit_rules ( $ maxes , $ items ) ; } $ max = array_sum ( $ maxes ) ; // update db if anything changed if ( $ this -> grade_item -> grademax != $ max or $ this -> grade_item -> grademin != 0 or $ this -> grade_item -> gradetype != GRADE_TYPE_VALUE ) { $ this -> grade_item -> grademax = $ max ; $ this -> grade_item -> grademin = 0 ; $ this -> grade_item -> gradetype = GRADE_TYPE_VALUE ; $ this -> grade_item -> update ( 'aggregation' ) ; } }
Some aggregation types may need to update their max grade.

This must be executed after updating the weights as it relies on them.

@return void
Some aggregation types may need to update their max grade .