diff --git a/mod/feedback/item/feedback_item_class.php b/mod/feedback/item/feedback_item_class.php index 92eb10a4265..ec8294da471 100644 --- a/mod/feedback/item/feedback_item_class.php +++ b/mod/feedback/item/feedback_item_class.php @@ -55,12 +55,25 @@ abstract class feedback_item_base { * @return bool */ public function get_data() { + if ($this->item !== null) { + return true; + } if ($this->item = $this->item_form->get_data()) { return true; } return false; } + /** + * Set the item data (to be used by data generators). + * + * @param stdClass $itemdata the item data to set + * @since Moodle 3.3 + */ + public function set_data($itemdata) { + $this->item = $itemdata; + } + /** * Creates and returns an instance of the form for editing the item * diff --git a/mod/feedback/item/info/lib.php b/mod/feedback/item/info/lib.php index b96772cff27..3df76d23ff3 100644 --- a/mod/feedback/item/info/lib.php +++ b/mod/feedback/item/info/lib.php @@ -81,9 +81,10 @@ class feedback_item_info extends feedback_item_base { public function save_item() { global $DB; - if (!$item = $this->item_form->get_data()) { + if (!$this->get_data()) { return false; } + $item = $this->item; if (isset($item->clone_item) AND $item->clone_item) { $item->id = ''; //to clone this item diff --git a/mod/feedback/item/label/lib.php b/mod/feedback/item/label/lib.php index 6fa83bf5472..9fabd5126d0 100644 --- a/mod/feedback/item/label/lib.php +++ b/mod/feedback/item/label/lib.php @@ -89,9 +89,10 @@ class feedback_item_label extends feedback_item_base { public function save_item() { global $DB; - if (!$item = $this->item_form->get_data()) { + if (!$this->get_data()) { return false; } + $item = $this->item; if (isset($item->clone_item) AND $item->clone_item) { $item->id = ''; //to clone this item diff --git a/mod/feedback/item/multichoice/lib.php b/mod/feedback/item/multichoice/lib.php index d3b628bc16a..e9205ff5ac8 100644 --- a/mod/feedback/item/multichoice/lib.php +++ b/mod/feedback/item/multichoice/lib.php @@ -71,9 +71,10 @@ class feedback_item_multichoice extends feedback_item_base { public function save_item() { global $DB; - if (!$item = $this->item_form->get_data()) { + if (!$this->get_data()) { return false; } + $item = $this->item; if (isset($item->clone_item) AND $item->clone_item) { $item->id = ''; //to clone this item diff --git a/mod/feedback/item/multichoicerated/lib.php b/mod/feedback/item/multichoicerated/lib.php index 8be2faa97e8..8f80a5294a5 100644 --- a/mod/feedback/item/multichoicerated/lib.php +++ b/mod/feedback/item/multichoicerated/lib.php @@ -76,9 +76,10 @@ class feedback_item_multichoicerated extends feedback_item_base { public function save_item() { global $DB; - if (!$item = $this->item_form->get_data()) { + if (!$this->get_data()) { return false; } + $item = $this->item; if (isset($item->clone_item) AND $item->clone_item) { $item->id = ''; //to clone this item diff --git a/mod/feedback/item/numeric/lib.php b/mod/feedback/item/numeric/lib.php index add58cb88ae..2cddf274c94 100644 --- a/mod/feedback/item/numeric/lib.php +++ b/mod/feedback/item/numeric/lib.php @@ -76,9 +76,10 @@ class feedback_item_numeric extends feedback_item_base { public function save_item() { global $DB; - if (!$item = $this->item_form->get_data()) { + if (!$this->get_data()) { return false; } + $item = $this->item; if (isset($item->clone_item) AND $item->clone_item) { $item->id = ''; //to clone this item diff --git a/mod/feedback/item/textarea/lib.php b/mod/feedback/item/textarea/lib.php index 30172ca5f7a..6e9f5a901c9 100644 --- a/mod/feedback/item/textarea/lib.php +++ b/mod/feedback/item/textarea/lib.php @@ -76,9 +76,10 @@ class feedback_item_textarea extends feedback_item_base { public function save_item() { global $DB; - if (!$item = $this->item_form->get_data()) { + if (!$this->get_data()) { return false; } + $item = $this->item; if (isset($item->clone_item) AND $item->clone_item) { $item->id = ''; //to clone this item diff --git a/mod/feedback/item/textfield/lib.php b/mod/feedback/item/textfield/lib.php index cf0b3b0b1b2..c491f0b648f 100644 --- a/mod/feedback/item/textfield/lib.php +++ b/mod/feedback/item/textfield/lib.php @@ -73,9 +73,10 @@ class feedback_item_textfield extends feedback_item_base { public function save_item() { global $DB; - if (!$item = $this->item_form->get_data()) { + if (!$this->get_data()) { return false; } + $item = $this->item; if (isset($item->clone_item) AND $item->clone_item) { $item->id = ''; //to clone this item