public function setup()
 {
     parent::setup();
     /*
      * Here, the plugin form code
      */
 }
 protected function doSave($con = null)
 {
     parent::doSave($con);
     $this->getObject()->getMailingList()->invalidateCache();
     $metas = $this->getObject()->getMailingList()->getMailingListMeta();
     // TODO: optimize
     $contact_metas = $this->getObject()->getContactMeta();
     foreach ($metas as $meta) {
         /* @var $meta MailingListMeta */
         $value = $this->getValue('meta_' . $meta['id']);
         if ($meta['kind'] == MailingListMeta::KIND_CHOICE && $meta->getMulti()) {
             if (!is_array($value)) {
                 $value = array();
             }
             $keep_multis = array();
             foreach ($contact_metas as $cc) {
                 if ($cc['mailing_list_meta_id'] === $meta['id']) {
                     /* @var $cc ContactMeta */
                     if (in_array($cc->getMailingListMetaChoiceId(), $value)) {
                         $keep_multis[] = $cc->getMailingListMetaChoiceId();
                         // keep
                     } else {
                         $cc->delete($con);
                         // delete
                     }
                 }
             }
             foreach ($value as $value_i) {
                 if (!in_array($value_i, $keep_multis)) {
                     $contact_meta = new ContactMeta();
                     // create
                     $contact_meta->setMailingListMetaId($meta['id']);
                     $contact_meta->setContactId($this->getObject()->getId());
                     $contact_meta->setMailingListMetaChoiceId($value_i);
                     $contact_meta->save($con);
                 }
             }
         } else {
             $contact_meta = null;
             foreach ($contact_metas as $cc) {
                 if ($cc['mailing_list_meta_id'] === $meta['id']) {
                     $contact_meta = $cc;
                     break;
                 }
             }
             if ($contact_meta === null) {
                 $contact_meta = new ContactMeta();
                 $contact_meta->setMailingListMetaId($meta['id']);
                 $contact_meta->setContactId($this->getObject()->getId());
             }
             switch ($meta['kind']) {
                 case MailingListMeta::KIND_CHOICE:
                     $contact_meta->setMailingListMetaChoiceId($value);
                     break;
                 case MailingListMeta::KIND_FREE:
                     $contact_meta->setValue($value);
                     break;
             }
             $contact_meta->save($con);
         }
     }
 }
 public function configure()
 {
     parent::configure();
 }