public function renderEdit($pid) { $processors = $this->_campaign->processors; $definedProcessors = $this->config('processors')->jsonSerialize(); if (!isset($processors[$pid])) { return $this->renderNew(); } $pData = $processors[$pid]; $form = new DeferoForm('edit_processor'); $form->addSelectElement('processorType', array_map('class_shortname', $definedProcessors)); $form->getElement('processorType')->addAttribute('disabled'); $processor = $this->config('processors')->getStr($pData->processorType); $processor = new $processor(); // populate types $class = new \ReflectionClass($processor); foreach ($class->getProperties(\ReflectionProperty::IS_PUBLIC) as $p) { $default = $p->getValue($processor); // get property type (enum) // use reflection to check for enumclass if ($t = DocBlockHelper::getBlock($processor, $p->getName(), 'enumclass')) { $form->addSelectElement($p->getName(), (new OptionBuilder(new $t()))->getOptions(), $default); } else { $form->addTextElement($p->getName(), $default); } } $form->addSubmitElement(); $form->hydrate((array) $processor); $form->hydrate((array) $pData); if ($this->request()->postVariables()) { $form->hydrate($this->request()->postVariables()); if ($form->isValid() && $form->csrfCheck()) { $processors[$pid] = $form->jsonSerialize(); $this->_campaign->processors = $processors; $this->_campaign->saveChanges(); return Redirect::to('/campaigns/' . $this->getInt('cid')); } } echo $form; }
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())); } }