public function renderClone($id) { $campaign = new Campaign($id); $form = new DeferoForm('cloneForm'); $form->addTextElement('currentReference', $campaign->reference); $form->addTextElement('newReference'); $form->addSubmitElement('Clone'); $form->getElement('currentReference')->addAttribute('disabled'); $form->hydrate($this->request()->postVariables()); if (!$form->getData('newReference')) { return '<h3>Clone ' . $campaign->name . '</h3>' . $form; } try { $campaign->reference = $form->getData('newReference'); $campaign->saveAsNew(); $newId = $campaign->id(); $campaign = new Campaign($newId); $oldCampaign = new Campaign($id); $languages = $this->config('i18n')->getArr('languages'); $msg = $campaign->message(); $oldMsg = $oldCampaign->message(); foreach ($languages as $lang) { $msg->setLanguage($lang)->reload(); $oldMsg->setLanguage($lang)->reload(); $oldData = $oldMsg->jsonSerialize(); unset($oldData['id'], $oldData['campaign_id'], $oldData['created_at'], $oldData['updated_at']); $msg->hydrate($oldData); foreach ($msg->getRawAttributes() as $attr) { $attr->setModified(); } $msg->saveChanges(); } return Redirect::to("/campaigns/{$newId}")->with("msg", new TransportMessage('info', 'Campaign Cloned')); } catch (\Exception $e) { return Redirect::to("/campaigns/{$id}")->with('msg', new TransportMessage("error", $e->getMessage())); } }