public static function record_delete($object, $type = 'delete')
 {
     $delete = new SyncroDelete();
     $delete->ContentID = $object->ContentID;
     $delete->Type = $object->ClassName;
     $delete->Deleted = gmdate('Y-m-d H:i:s');
     $delete->write();
 }
 public function onAfterUnpublish()
 {
     if ($this->owner->MasterNode == SiteConfig::current_site_config()->SystemID) {
         SyncroDelete::record_delete($this->owner);
     }
 }
 /**
  * Lists all updated data objects since a particular date that the caller would be interested in
  * 
  * @param date $since 
  * 
  * @return DataObjectSet
  *				The list of data objects that have been created/changed since 
  * 
  */
 public function listUpdates($since, $system, $until = null)
 {
     $dateFormat = '/\\d\\d\\d\\d-\\d\\d-\\d\\d \\d\\d:\\d\\d:\\d\\d/';
     $since = gmdate('Y-m-d H:i:s', strtotime($since));
     if ($until) {
         $until = gmdate('Y-m-d H:i:s', strtotime($until));
     }
     if (!preg_match($dateFormat, $since)) {
         throw new Exception("Invalid date");
     }
     $typesToSync = $this->syncListTypes;
     if (count($typesToSync) == 1 && $typesToSync[0] == 'SyncroTestObject') {
         $typesToSync = array('Page', 'File');
     }
     // restrict to only those items we have been granted sync rights to
     $requiredPerm = $this->strictAccess ? 'Syncro' : 'View';
     // we only get objects edited SINCE a certain time
     // and that didn't originate in the remote server
     $filter = array("{$this->filterDate}:GreaterThan" => $since, 'MasterNode:not' => $system);
     if ($until) {
         $filter["{$this->filterDate}:LessThan"] = $until;
     }
     $allUpdates = array();
     $rels = array();
     foreach ($typesToSync as $type) {
         if ($type == 'SyncroTestObject') {
             continue;
         }
         $objects = DataList::create($type)->filter($filter)->sort('LastEditedUTC', 'ASC')->limit(500)->restrict($requiredPerm);
         //			$objects = $this->dataService->getAll($type, $filter, '"LastEditedUTC" ASC', "", "", $requiredPerm);
         if ($objects) {
             foreach ($objects as $object) {
                 if ($object->hasMethod('forSyncro')) {
                     $toSync = $object->forSyncro();
                 } else {
                     $toSync = $this->syncroObject($object);
                 }
                 // some that we force
                 // note that UpdatedUTC is not sent as it is always a local node specific date
                 $toSync['MasterNode'] = $object->MasterNode;
                 $toSync['ContentID'] = $object->ContentID;
                 $toSync['ClassName'] = $object->ClassName;
                 $toSync['LastEditedUTC'] = $object->LastEditedUTC;
                 $toSync['CreatedUTC'] = $object->CreatedUTC;
                 $toSync['OriginalID'] = $object->OriginalID;
                 if (isset($toSync['has_one']) || isset($toSync['many_many'])) {
                     $relInfo = new stdClass();
                     $relInfo->SYNCROREL = true;
                     $relInfo->Type = $object->ClassName;
                     $relInfo->ContentID = $object->ContentID;
                     $relInfo->MasterNode = SiteConfig::current_site_config()->SystemID;
                     if (isset($toSync['has_one']) && count($toSync['has_one'])) {
                         $relInfo->has_one = $toSync['has_one'];
                         unset($toSync['has_one']);
                     }
                     if (isset($toSync['many_many']) && count($toSync['many_many'])) {
                         $relInfo->many_many = $toSync['many_many'];
                         unset($toSync['many_many']);
                     }
                     $rels[] = $relInfo;
                 }
                 $allUpdates[] = $toSync;
             }
         }
     }
     $deletes = SyncroDelete::get()->filter(array('Deleted:GreaterThan' => $since));
     //		$deletes = DataObject::get('SyncroDelete', '"Deleted" >= \'' . $since . '\'');
     if ($deletes) {
         foreach ($deletes as $del) {
             $del = array('SYNCRODELETE' => 'DELETE', 'ContentID' => $del->ContentID, 'Type' => $del->Type, 'MasterNode' => SiteConfig::current_site_config()->SystemID, 'Deleted' => $del->Created);
             $allUpdates[] = $del;
         }
     }
     foreach ($rels as $relation) {
         $allUpdates[] = $relation;
     }
     return $allUpdates;
 }