question = $question; $this->setAcceptURL($accept_url); $this->setDeclineURL($decline_url); } /** * Set the url the acceptance request is sent to. * * @param string $url * @param array $parameters * @return QuestionBox instance to allow chaining */ public function setAcceptURL($url, array $parameters = []) { $parameters = array_merge( $this->extractURLParameters($url), $parameters ); $this->accept_url = $url; $this->accept_parameters = $parameters; return $this; } /** * Set the url the declination url is sent to. * * @param string $url * @param array $parameters * @return QuestionBox instance to allow chaining */ public function setDeclineURL($url, array $parameters = []) { $parameters = array_merge( $this->extractURLParameters($url), $parameters ); $this->decline_url = $url; $this->decline_parameters = $parameters; return $this; } /** * Sets boths url for acceptance and declination to the same url. * * @param string $url * @return QuestionBox instance to allow chaining */ public function setBaseURL($url) { $this->setAcceptURL($url); $this->setDeclineURL($url); return $this; } /** * Defines whether a stud.ip ticket should be included in the question. * * @param bool $name * @return QuestionBox instance to allow chaining */ public function includeTicket($name = 'studip_ticket') { $this->include_ticket = $name; return $this; } /** * Renders the question box as html. * * @return string */ public function __toString() { // Include fresh ticket if ($this->include_ticket) { $this->accept_parameters[$this->include_ticket] = get_ticket(); } return $GLOBALS['template_factory']->render('shared/question-box', [ 'question' => $this->question, 'accept_url' => $this->accept_url, 'accept_parameters' => $this->accept_parameters, 'decline_url' => $this->decline_url, 'decline_parameters' => $this->decline_parameters, ]); } /** * Extracts parameters from a url. * * @param string $url * @return array */ protected function extractURLParameters($url) { $query = parse_url($url, PHP_URL_QUERY); parse_str($query, $parameters); return $parameters; } }