/** * @param array $pa_options * duplicate_subitems */ public function duplicate($pa_options = null) { $vb_we_set_transaction = false; if (!$this->inTransaction()) { $this->setTransaction($o_t = new Transaction($this->getDb())); $vb_we_set_transaction = true; } else { $o_t = $this->getTransaction(); } if ($t_dupe = parent::duplicate($pa_options)) { $vb_duplicate_subitems = caGetOption('duplicate_subitems', $pa_options, false); if ($vb_duplicate_subitems) { // Try to dupe related ca_tour_stops rows $o_db = $this->getDb(); $qr_res = $o_db->query("\n\t\t\t\t\tSELECT *\n\t\t\t\t\tFROM ca_tour_stops\n\t\t\t\t\tWHERE \n\t\t\t\t\t\ttour_id = ? AND deleted = 0\n\t\t\t\t", (int) $this->getPrimaryKey()); $va_stops = array(); while ($qr_res->nextRow()) { //$va_stops[$qr_res->get('stop_id')] = $qr_res->getRow(); $t_stop = new ca_tour_stops(); $t_stop->setTransaction($o_t); $t_stop->load($qr_res->get('stop_id')); if ($t_dupe_stop = $t_stop->duplicate($pa_options)) { $t_dupe_stop->setTransaction($o_t); $t_dupe_stop->setMode(ACCESS_WRITE); $t_dupe_stop->set('tour_id', $t_dupe->getPrimaryKey()); $t_dupe_stop->update(); if ($t_dupe_stop->numErrors()) { $this->errors = $t_dupe_stop->errors; if ($vb_we_set_transaction) { $this->removeTransaction(false); } return false; } } } } } if ($vb_we_set_transaction) { $this->removeTransaction(true); } return $t_dupe; }