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