public function onAfterWrite() { parent::onAfterWrite(); if ($this->isChanged("ID") && $this->getFirstWrite() && $this->getSyncMailChimp()) { $apikey = SiteConfig::current_site_config()->getMCAPIKey(); $api = new MCAPI($apikey); $list = $this->getComponent("MCList"); if (!empty($list)) { // Limitited to 50 Bytes (Hopefully 50 Chars) $SegmentTitle = substr($this->Title, 0, 45); $api->listStaticSegmentAdd($list->ListID, $SegmentTitle); if ($api->errorCode) { SS_Log::log("API Call Failed: listStaticSegmentAdd(); | Error Code = " . $api->errorCode . " | Error Message = " . $api->errorMessage, SS_Log::ERR); } else { SS_Log::log("API Call Success: listStaticSegmentAdd();", SS_Log::NOTICE); // Make Second Call To Return MailChimp Segment ID $segments = $api->listStaticSegments($list->ListID); foreach ($segments as $segment) { // Make Sure We Capture the WHOLE Event ID! $id_chars = strlen((string) $this->EventID); $id = substr($segment['name'], 6, $id_chars); if ($id == $this->EventID) { SS_Log::log("This Event ID = " . $this->EventID . ", Static Segment Named " . $segment['name'] . " Relates to Event ID " . $id, SS_Log::NOTICE); SS_Log::log("We Have a Match", SS_Log::NOTICE); $this->setField("MCListSegmentID", $segment['id']); $this->write(); break; } } } } } // END: if($this->isChanged("ID")) { $this->setFirstWrite(false); }
public function UpdateSegments($list = null) { if (!is_object($list)) { SS_Log::log("UpdateSegments() Requireds a MCList Object Parameter!", SS_Log::ERR); return false; } $api = new MCAPI($this->apikey); $retval = $api->listStaticSegments($list->ListID); if ($api->errorCode) { SS_Log::log("API Call Failed: listStaticSegments('" . $list->ListID . "); Error Code = " . $api->errorCode . " | Error Message = " . $api->errorMessage, SS_Log::ERR); return false; } else { SS_Log::log("API Call Success: listStaticSegments('" . $list->ListID . ");", SS_Log::NOTICE); if (!empty($retval)) { $LiveSegmentIDs = array(); foreach ($retval as $segment) { $dl = new DataList("MCListSegment"); $seg = $dl->where("\"MCListSegmentID\" = '" . $segment['id'] . "'")->first(); // Create New Segment If It Doesnt Yet Exist On The Site (i.e. It Was Created On MailChimp) if (empty($seg)) { $seg = new MCListSegment(); $seg->setField("Title", $segment['name']); $seg->setField("MCListSegmentID", $segment['id']); $seg->setField("MCListID", $list->ID); $seg->setSyncMailChimp(false); $seg->write(); } $LiveSegmentIDs[] = $segment['id']; } } // Get List of Segments Which Exist On Site But Not On MailChimp $where = "\"MCListID\" = '" . $list->ID . "'"; $where .= !empty($LiveSegmentIDs) ? "AND \"MCListSegmentID\" NOT IN (" . $this->arrayToCSV($LiveSegmentIDs) . ")" : ""; // Don't Delete Segments Which Still Exist $dl = new DataList("MCListSegment"); $deadSegs = $dl->where($where); // Delete Dead Segments (Deleted On MailChimp Directly) if (!empty($deadSegs)) { foreach ($deadSegs as $deadSeg) { $deadSeg->setSyncMailChimp(false); $deadSeg->delete(); } } } return true; }