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