original_string: protected function social_calculate_sample($sampleid, $tablename, $starttime = false, $endtime = false) {
  
          // May not be available.
          $user = $this->retrieve('user', $sampleid);
  
          if (!$useractivities = $this->get_student_activities($sampleid, $tablename, $starttime, $endtime)) {
              // Null if no activities.
              return null;
          }
  
          $scoreperactivity = (self::get_max_value() - self::get_min_value()) / count($useractivities);
  
          $score = self::get_min_value();
  
          foreach ($useractivities as $contextid => $cm) {
  
              $potentiallevel = $this->get_social_breadth_level($cm);
              if (!is_int($potentiallevel)
                      || $potentiallevel > self::MAX_SOCIAL_LEVEL
                      || $potentiallevel < self::SOCIAL_LEVEL_1) {
                  throw new \coding_exception('Activities\' potential social breadth go from 1 to ' .
                      community_of_inquiry_activity::MAX_SOCIAL_LEVEL . '.');
              }
              $scoreperlevel = $scoreperactivity / $potentiallevel;
              switch ($potentiallevel) {
                  case self::SOCIAL_LEVEL_2:
                  case self::SOCIAL_LEVEL_3:
                  case self::SOCIAL_LEVEL_4:
                  case self::SOCIAL_LEVEL_5:
                      // Core activities social breadth only reaches level 2, until core activities social
                      // breadth do not reach level 5 we limit it to what we currently support, which is level 2.
  
                      // Social breadth level 2 is to view feedback. (Same as cognitive level 3).
  
                      if ($this->any_feedback('viewed', $cm, $contextid, $user)) {
                          // Max score for level 2.
                          $score += $scoreperlevel * 2;
                          break;
                      }
                      // The user didn't reach the activity max social breadth, continue with level 1.
  
                  case self::SOCIAL_LEVEL_1:
                      // Social breadth level 1 is just accessing the activity.
                      if ($this->any_log($contextid, $user)) {
                          $score += $scoreperlevel;
                      }
              }
  
          }
  
          // To avoid decimal problems.
          if ($score > self::MAX_VALUE) {
              return self::MAX_VALUE;
          } else if ($score < self::MIN_VALUE) {
              return self::MIN_VALUE;
          }
          return $score;
      }
code: protected function social_calculate_sample($sampleid, $tablename, $starttime = false, $endtime = false) {
  
          // May not be available.
          $user = $this->retrieve('user', $sampleid);
  
          if (!$useractivities = $this->get_student_activities($sampleid, $tablename, $starttime, $endtime)) {
              // Null if no activities.
              return null;
          }
  
          $scoreperactivity = (self::get_max_value() - self::get_min_value()) / count($useractivities);
  
          $score = self::get_min_value();
  
          foreach ($useractivities as $contextid => $cm) {
  
              $potentiallevel = $this->get_social_breadth_level($cm);
              if (!is_int($potentiallevel)
                      || $potentiallevel > self::MAX_SOCIAL_LEVEL
                      || $potentiallevel < self::SOCIAL_LEVEL_1) {
                  throw new \coding_exception('Activities\' potential social breadth go from 1 to ' .
                      community_of_inquiry_activity::MAX_SOCIAL_LEVEL . '.');
              }
              $scoreperlevel = $scoreperactivity / $potentiallevel;
              switch ($potentiallevel) {
                  case self::SOCIAL_LEVEL_2:
                  case self::SOCIAL_LEVEL_3:
                  case self::SOCIAL_LEVEL_4:
                  case self::SOCIAL_LEVEL_5:
                      // Core activities social breadth only reaches level 2, until core activities social
                      // breadth do not reach level 5 we limit it to what we currently support, which is level 2.
  
                      // Social breadth level 2 is to view feedback. (Same as cognitive level 3).
  
                      if ($this->any_feedback('viewed', $cm, $contextid, $user)) {
                          // Max score for level 2.
                          $score += $scoreperlevel * 2;
                          break;
                      }
                      // The user didn't reach the activity max social breadth, continue with level 1.
  
                  case self::SOCIAL_LEVEL_1:
                      // Social breadth level 1 is just accessing the activity.
                      if ($this->any_log($contextid, $user)) {
                          $score += $scoreperlevel;
                      }
              }
  
          }
  
          // To avoid decimal problems.
          if ($score > self::MAX_VALUE) {
              return self::MAX_VALUE;
          } else if ($score < self::MIN_VALUE) {
              return self::MIN_VALUE;
          }
          return $score;
      }
code_tokens: protected function social_calculate_sample ( $ sampleid , $ tablename , $ starttime = false , $ endtime = false ) { // May not be available. $ user = $ this -> retrieve ( 'user' , $ sampleid ) ; if ( ! $ useractivities = $ this -> get_student_activities ( $ sampleid , $ tablename , $ starttime , $ endtime ) ) { // Null if no activities. return null ; } $ scoreperactivity = ( self :: get_max_value ( ) - self :: get_min_value ( ) ) / count ( $ useractivities ) ; $ score = self :: get_min_value ( ) ; foreach ( $ useractivities as $ contextid => $ cm ) { $ potentiallevel = $ this -> get_social_breadth_level ( $ cm ) ; if ( ! is_int ( $ potentiallevel ) || $ potentiallevel > self :: MAX_SOCIAL_LEVEL || $ potentiallevel < self :: SOCIAL_LEVEL_1 ) { throw new \ coding_exception ( 'Activities\' potential social breadth go from 1 to ' . community_of_inquiry_activity :: MAX_SOCIAL_LEVEL . '.' ) ; } $ scoreperlevel = $ scoreperactivity / $ potentiallevel ; switch ( $ potentiallevel ) { case self :: SOCIAL_LEVEL_2 : case self :: SOCIAL_LEVEL_3 : case self :: SOCIAL_LEVEL_4 : case self :: SOCIAL_LEVEL_5 : // Core activities social breadth only reaches level 2, until core activities social // breadth do not reach level 5 we limit it to what we currently support, which is level 2. // Social breadth level 2 is to view feedback. (Same as cognitive level 3). if ( $ this -> any_feedback ( 'viewed' , $ cm , $ contextid , $ user ) ) { // Max score for level 2. $ score += $ scoreperlevel * 2 ; break ; } // The user didn't reach the activity max social breadth, continue with level 1. case self :: SOCIAL_LEVEL_1 : // Social breadth level 1 is just accessing the activity. if ( $ this -> any_log ( $ contextid , $ user ) ) { $ score += $ scoreperlevel ; } } } // To avoid decimal problems. if ( $ score > self :: MAX_VALUE ) { return self :: MAX_VALUE ; } else if ( $ score < self :: MIN_VALUE ) { return self :: MIN_VALUE ; } return $ score ; }
docstring: Calculates the social breadth of a sample.
  
  @param int $sampleid
  @param string $tablename
  @param int $starttime
  @param int $endtime
  @return float|int|null
docstring_tokens: Calculates the social breadth of a sample .