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(); }