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;
 }
Example #2
0
 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()));
     }
 }