original_string: protected static function export_discussion_data(int $userid, array $mappings) {
          global $DB;
  
          // Find all of the discussions, and discussion subscriptions for this forum.
          list($foruminsql, $forumparams) = $DB->get_in_or_equal(array_keys($mappings), SQL_PARAMS_NAMED);
          $sql = "SELECT
                      d.*,
                      g.name as groupname,
                      dsub.preference
                    FROM {forum} f
                    JOIN {forum_discussions} d ON d.forum = f.id
               LEFT JOIN {groups} g ON g.id = d.groupid
               LEFT JOIN {forum_discussion_subs} dsub ON dsub.discussion = d.id AND dsub.userid = :dsubuserid
               LEFT JOIN {forum_posts} p ON p.discussion = d.id
                   WHERE f.id ${foruminsql}
                     AND (
                          d.userid    = :discussionuserid OR
                          p.userid    = :postuserid OR
                          dsub.id IS NOT NULL
                     )
          ";
  
          $params = [
              'postuserid'        => $userid,
              'discussionuserid'  => $userid,
              'dsubuserid'        => $userid,
          ];
          $params += $forumparams;
  
          // Keep track of the forums which have data.
          $forumswithdata = [];
  
          $discussions = $DB->get_recordset_sql($sql, $params);
          foreach ($discussions as $discussion) {
              // No need to take timestart into account as the user has some involvement already.
              // Ignore discussion timeend as it should not block access to user data.
              $forumswithdata[$discussion->forum] = true;
              $context = \context::instance_by_id($mappings[$discussion->forum]);
  
              // Store related metadata for this discussion.
              static::export_discussion_subscription_data($userid, $context, $discussion);
  
              $discussiondata = (object) [
                  'name' => format_string($discussion->name, true),
                  'pinned' => transform::yesno((bool) $discussion->pinned),
                  'timemodified' => transform::datetime($discussion->timemodified),
                  'usermodified' => transform::datetime($discussion->usermodified),
                  'creator_was_you' => transform::yesno($discussion->userid == $userid),
              ];
  
              // Store the discussion content.
              writer::with_context($context)
                  ->export_data(static::get_discussion_area($discussion), $discussiondata);
  
              // Forum discussions do not have any files associately directly with them.
          }
  
          $discussions->close();
  
          return $forumswithdata;
      }
code: protected static function export_discussion_data(int $userid, array $mappings) {
          global $DB;
  
          // Find all of the discussions, and discussion subscriptions for this forum.
          list($foruminsql, $forumparams) = $DB->get_in_or_equal(array_keys($mappings), SQL_PARAMS_NAMED);
          $sql = "SELECT
                      d.*,
                      g.name as groupname,
                      dsub.preference
                    FROM {forum} f
                    JOIN {forum_discussions} d ON d.forum = f.id
               LEFT JOIN {groups} g ON g.id = d.groupid
               LEFT JOIN {forum_discussion_subs} dsub ON dsub.discussion = d.id AND dsub.userid = :dsubuserid
               LEFT JOIN {forum_posts} p ON p.discussion = d.id
                   WHERE f.id ${foruminsql}
                     AND (
                          d.userid    = :discussionuserid OR
                          p.userid    = :postuserid OR
                          dsub.id IS NOT NULL
                     )
          ";
  
          $params = [
              'postuserid'        => $userid,
              'discussionuserid'  => $userid,
              'dsubuserid'        => $userid,
          ];
          $params += $forumparams;
  
          // Keep track of the forums which have data.
          $forumswithdata = [];
  
          $discussions = $DB->get_recordset_sql($sql, $params);
          foreach ($discussions as $discussion) {
              // No need to take timestart into account as the user has some involvement already.
              // Ignore discussion timeend as it should not block access to user data.
              $forumswithdata[$discussion->forum] = true;
              $context = \context::instance_by_id($mappings[$discussion->forum]);
  
              // Store related metadata for this discussion.
              static::export_discussion_subscription_data($userid, $context, $discussion);
  
              $discussiondata = (object) [
                  'name' => format_string($discussion->name, true),
                  'pinned' => transform::yesno((bool) $discussion->pinned),
                  'timemodified' => transform::datetime($discussion->timemodified),
                  'usermodified' => transform::datetime($discussion->usermodified),
                  'creator_was_you' => transform::yesno($discussion->userid == $userid),
              ];
  
              // Store the discussion content.
              writer::with_context($context)
                  ->export_data(static::get_discussion_area($discussion), $discussiondata);
  
              // Forum discussions do not have any files associately directly with them.
          }
  
          $discussions->close();
  
          return $forumswithdata;
      }
code_tokens: protected static function export_discussion_data ( int $ userid , array $ mappings ) { global $ DB ; // Find all of the discussions, and discussion subscriptions for this forum. list ( $ foruminsql , $ forumparams ) = $ DB -> get_in_or_equal ( array_keys ( $ mappings ) , SQL_PARAMS_NAMED ) ; $ sql = "SELECT
                      d.*,
                      g.name as groupname,
                      dsub.preference
                    FROM {forum} f
                    JOIN {forum_discussions} d ON d.forum = f.id
               LEFT JOIN {groups} g ON g.id = d.groupid
               LEFT JOIN {forum_discussion_subs} dsub ON dsub.discussion = d.id AND dsub.userid = :dsubuserid
               LEFT JOIN {forum_posts} p ON p.discussion = d.id
                   WHERE f.id ${foruminsql}
                     AND (
                          d.userid    = :discussionuserid OR
                          p.userid    = :postuserid OR
                          dsub.id IS NOT NULL
                     )
          " ; $ params = [ 'postuserid' => $ userid , 'discussionuserid' => $ userid , 'dsubuserid' => $ userid , ] ; $ params += $ forumparams ; // Keep track of the forums which have data. $ forumswithdata = [ ] ; $ discussions = $ DB -> get_recordset_sql ( $ sql , $ params ) ; foreach ( $ discussions as $ discussion ) { // No need to take timestart into account as the user has some involvement already. // Ignore discussion timeend as it should not block access to user data. $ forumswithdata [ $ discussion -> forum ] = true ; $ context = \ context :: instance_by_id ( $ mappings [ $ discussion -> forum ] ) ; // Store related metadata for this discussion. static :: export_discussion_subscription_data ( $ userid , $ context , $ discussion ) ; $ discussiondata = ( object ) [ 'name' => format_string ( $ discussion -> name , true ) , 'pinned' => transform :: yesno ( ( bool ) $ discussion -> pinned ) , 'timemodified' => transform :: datetime ( $ discussion -> timemodified ) , 'usermodified' => transform :: datetime ( $ discussion -> usermodified ) , 'creator_was_you' => transform :: yesno ( $ discussion -> userid == $ userid ) , ] ; // Store the discussion content. writer :: with_context ( $ context ) -> export_data ( static :: get_discussion_area ( $ discussion ) , $ discussiondata ) ; // Forum discussions do not have any files associately directly with them. } $ discussions -> close ( ) ; return $ forumswithdata ; }
docstring: Store all information about all discussions that we have detected this user to have access to.
  
  @param   int         $userid The userid of the user whose data is to be exported.
  @param   array       $mappings A list of mappings from forumid => contextid.
  @return  array       Which forums had data written for them.
docstring_tokens: Store all information about all discussions that we have detected this user to have access to .