original_string: protected function prepare_data(int $timenow) {
          global $DB;
  
          $sql = "SELECT p.*, f.id AS forum, f.course
                    FROM {forum_queue} q
              INNER JOIN {forum_posts} p ON p.id = q.postid
              INNER JOIN {forum_discussions} d ON d.id = p.discussion
              INNER JOIN {forum} f ON f.id = d.forum
                   WHERE q.userid = :userid
                     AND q.timemodified < :timemodified
                ORDER BY d.id, q.timemodified ASC";
  
          $queueparams = [
                  'userid' => $this->recipient->id,
                  'timemodified' => $timenow,
              ];
  
          $posts = $DB->get_recordset_sql($sql, $queueparams);
          $discussionids = [];
          $forumids = [];
          $courseids = [];
          $userids = [];
          foreach ($posts as $post) {
              $discussionids[] = $post->discussion;
              $forumids[] = $post->forum;
              $courseids[] = $post->course;
              $userids[] = $post->userid;
              unset($post->forum);
              if (!isset($this->posts[$post->discussion])) {
                  $this->posts[$post->discussion] = [];
              }
              $this->posts[$post->discussion][$post->id] = $post;
          }
          $posts->close();
  
          if (empty($discussionids)) {
              // All posts have been removed since the task was queued.
              $this->empty_queue($this->recipient->id, $timenow);
              return;
          }
  
          list($in, $params) = $DB->get_in_or_equal($discussionids);
          $this->discussions = $DB->get_records_select('forum_discussions', "id {$in}", $params);
  
          list($in, $params) = $DB->get_in_or_equal($forumids);
          $this->forums = $DB->get_records_select('forum', "id {$in}", $params);
  
          list($in, $params) = $DB->get_in_or_equal($courseids);
          $this->courses = $DB->get_records_select('course', "id $in", $params);
  
          list($in, $params) = $DB->get_in_or_equal($userids);
          $this->users = $DB->get_records_select('user', "id $in", $params);
  
          $this->fill_digest_cache();
  
          $this->empty_queue($this->recipient->id, $timenow);
      }
code: protected function prepare_data(int $timenow) {
          global $DB;
  
          $sql = "SELECT p.*, f.id AS forum, f.course
                    FROM {forum_queue} q
              INNER JOIN {forum_posts} p ON p.id = q.postid
              INNER JOIN {forum_discussions} d ON d.id = p.discussion
              INNER JOIN {forum} f ON f.id = d.forum
                   WHERE q.userid = :userid
                     AND q.timemodified < :timemodified
                ORDER BY d.id, q.timemodified ASC";
  
          $queueparams = [
                  'userid' => $this->recipient->id,
                  'timemodified' => $timenow,
              ];
  
          $posts = $DB->get_recordset_sql($sql, $queueparams);
          $discussionids = [];
          $forumids = [];
          $courseids = [];
          $userids = [];
          foreach ($posts as $post) {
              $discussionids[] = $post->discussion;
              $forumids[] = $post->forum;
              $courseids[] = $post->course;
              $userids[] = $post->userid;
              unset($post->forum);
              if (!isset($this->posts[$post->discussion])) {
                  $this->posts[$post->discussion] = [];
              }
              $this->posts[$post->discussion][$post->id] = $post;
          }
          $posts->close();
  
          if (empty($discussionids)) {
              // All posts have been removed since the task was queued.
              $this->empty_queue($this->recipient->id, $timenow);
              return;
          }
  
          list($in, $params) = $DB->get_in_or_equal($discussionids);
          $this->discussions = $DB->get_records_select('forum_discussions', "id {$in}", $params);
  
          list($in, $params) = $DB->get_in_or_equal($forumids);
          $this->forums = $DB->get_records_select('forum', "id {$in}", $params);
  
          list($in, $params) = $DB->get_in_or_equal($courseids);
          $this->courses = $DB->get_records_select('course', "id $in", $params);
  
          list($in, $params) = $DB->get_in_or_equal($userids);
          $this->users = $DB->get_records_select('user', "id $in", $params);
  
          $this->fill_digest_cache();
  
          $this->empty_queue($this->recipient->id, $timenow);
      }
code_tokens: protected function prepare_data ( int $ timenow ) { global $ DB ; $ sql = "SELECT p.*, f.id AS forum, f.course
                    FROM {forum_queue} q
              INNER JOIN {forum_posts} p ON p.id = q.postid
              INNER JOIN {forum_discussions} d ON d.id = p.discussion
              INNER JOIN {forum} f ON f.id = d.forum
                   WHERE q.userid = :userid
                     AND q.timemodified < :timemodified
                ORDER BY d.id, q.timemodified ASC" ; $ queueparams = [ 'userid' => $ this -> recipient -> id , 'timemodified' => $ timenow , ] ; $ posts = $ DB -> get_recordset_sql ( $ sql , $ queueparams ) ; $ discussionids = [ ] ; $ forumids = [ ] ; $ courseids = [ ] ; $ userids = [ ] ; foreach ( $ posts as $ post ) { $ discussionids [ ] = $ post -> discussion ; $ forumids [ ] = $ post -> forum ; $ courseids [ ] = $ post -> course ; $ userids [ ] = $ post -> userid ; unset ( $ post -> forum ) ; if ( ! isset ( $ this -> posts [ $ post -> discussion ] ) ) { $ this -> posts [ $ post -> discussion ] = [ ] ; } $ this -> posts [ $ post -> discussion ] [ $ post -> id ] = $ post ; } $ posts -> close ( ) ; if ( empty ( $ discussionids ) ) { // All posts have been removed since the task was queued. $ this -> empty_queue ( $ this -> recipient -> id , $ timenow ) ; return ; } list ( $ in , $ params ) = $ DB -> get_in_or_equal ( $ discussionids ) ; $ this -> discussions = $ DB -> get_records_select ( 'forum_discussions' , "id {$in}" , $ params ) ; list ( $ in , $ params ) = $ DB -> get_in_or_equal ( $ forumids ) ; $ this -> forums = $ DB -> get_records_select ( 'forum' , "id {$in}" , $ params ) ; list ( $ in , $ params ) = $ DB -> get_in_or_equal ( $ courseids ) ; $ this -> courses = $ DB -> get_records_select ( 'course' , "id $in" , $ params ) ; list ( $ in , $ params ) = $ DB -> get_in_or_equal ( $ userids ) ; $ this -> users = $ DB -> get_records_select ( 'user' , "id $in" , $ params ) ; $ this -> fill_digest_cache ( ) ; $ this -> empty_queue ( $ this -> recipient -> id , $ timenow ) ; }
docstring: Prepare the data for this run.
  
  Note: This will also remove posts from the queue.
  
  @param   int     $timenow
docstring_tokens: Prepare the data for this run .