original_string: public static function set_pin_state($discussionid, $targetstate) {
          global $PAGE, $USER;
          $params = self::validate_parameters(self::set_pin_state_parameters(), [
              'discussionid' => $discussionid,
              'targetstate' => $targetstate,
          ]);
          $vaultfactory = mod_forum\local\container::get_vault_factory();
          $managerfactory = mod_forum\local\container::get_manager_factory();
          $forumvault = $vaultfactory->get_forum_vault();
          $discussionvault = $vaultfactory->get_discussion_vault();
          $discussion = $discussionvault->get_from_id($params['discussionid']);
          $forum = $forumvault->get_from_id($discussion->get_forum_id());
          $capabilitymanager = $managerfactory->get_capability_manager($forum);
  
          self::validate_context($forum->get_context());
  
          $legacydatamapperfactory = mod_forum\local\container::get_legacy_data_mapper_factory();
          if (!$capabilitymanager->can_pin_discussions($USER)) {
              // Nothing to do. We won't actually output any content here though.
              throw new \moodle_exception('cannotpindiscussions', 'mod_forum');
          }
  
          $discussion->set_pinned($targetstate);
          $discussionvault->update_discussion($discussion);
  
          $exporterfactory = mod_forum\local\container::get_exporter_factory();
          $exporter = $exporterfactory->get_discussion_exporter($USER, $forum, $discussion);
          return $exporter->export($PAGE->get_renderer('mod_forum'));
      }
code: public static function set_pin_state($discussionid, $targetstate) {
          global $PAGE, $USER;
          $params = self::validate_parameters(self::set_pin_state_parameters(), [
              'discussionid' => $discussionid,
              'targetstate' => $targetstate,
          ]);
          $vaultfactory = mod_forum\local\container::get_vault_factory();
          $managerfactory = mod_forum\local\container::get_manager_factory();
          $forumvault = $vaultfactory->get_forum_vault();
          $discussionvault = $vaultfactory->get_discussion_vault();
          $discussion = $discussionvault->get_from_id($params['discussionid']);
          $forum = $forumvault->get_from_id($discussion->get_forum_id());
          $capabilitymanager = $managerfactory->get_capability_manager($forum);
  
          self::validate_context($forum->get_context());
  
          $legacydatamapperfactory = mod_forum\local\container::get_legacy_data_mapper_factory();
          if (!$capabilitymanager->can_pin_discussions($USER)) {
              // Nothing to do. We won't actually output any content here though.
              throw new \moodle_exception('cannotpindiscussions', 'mod_forum');
          }
  
          $discussion->set_pinned($targetstate);
          $discussionvault->update_discussion($discussion);
  
          $exporterfactory = mod_forum\local\container::get_exporter_factory();
          $exporter = $exporterfactory->get_discussion_exporter($USER, $forum, $discussion);
          return $exporter->export($PAGE->get_renderer('mod_forum'));
      }
code_tokens: public static function set_pin_state ( $ discussionid , $ targetstate ) { global $ PAGE , $ USER ; $ params = self :: validate_parameters ( self :: set_pin_state_parameters ( ) , [ 'discussionid' => $ discussionid , 'targetstate' => $ targetstate , ] ) ; $ vaultfactory = mod_forum \ local \ container :: get_vault_factory ( ) ; $ managerfactory = mod_forum \ local \ container :: get_manager_factory ( ) ; $ forumvault = $ vaultfactory -> get_forum_vault ( ) ; $ discussionvault = $ vaultfactory -> get_discussion_vault ( ) ; $ discussion = $ discussionvault -> get_from_id ( $ params [ 'discussionid' ] ) ; $ forum = $ forumvault -> get_from_id ( $ discussion -> get_forum_id ( ) ) ; $ capabilitymanager = $ managerfactory -> get_capability_manager ( $ forum ) ; self :: validate_context ( $ forum -> get_context ( ) ) ; $ legacydatamapperfactory = mod_forum \ local \ container :: get_legacy_data_mapper_factory ( ) ; if ( ! $ capabilitymanager -> can_pin_discussions ( $ USER ) ) { // Nothing to do. We won't actually output any content here though. throw new \ moodle_exception ( 'cannotpindiscussions' , 'mod_forum' ) ; } $ discussion -> set_pinned ( $ targetstate ) ; $ discussionvault -> update_discussion ( $ discussion ) ; $ exporterfactory = mod_forum \ local \ container :: get_exporter_factory ( ) ; $ exporter = $ exporterfactory -> get_discussion_exporter ( $ USER , $ forum , $ discussion ) ; return $ exporter -> export ( $ PAGE -> get_renderer ( 'mod_forum' ) ) ; }
docstring: Set the pin state.
  
  @param   int     $discussionid
  @param   bool    $targetstate
  @return  \stdClass
docstring_tokens: Set the pin state .