/** * Find all for type. * Optionally populate with local and remote resource data. */ public static function findAllForType($type, $findFlags = 0) { $syncer = RemoteSyncPlugin::instance()->getSyncerByType($type); $syncResources = SyncResource::findAllBy("type", $type); $syncResourcesBySlug = array(); foreach ($syncResources as $syncResource) { $syncResourcesBySlug[$syncResource->getSlug()] = $syncResource; } if ($findFlags & SyncResource::POPULATE_LOCAL) { $slugs = $syncer->listResourceSlugs(); foreach ($slugs as $slug) { if (!isset($syncResourcesBySlug[$slug])) { $syncResource = new SyncResource($type, $slug); $syncResources[] = $syncResource; $syncResourcesBySlug[$slug] = $syncResource; } } } usort($syncResources, "SyncResource::cmpResourceWeight"); if ($findFlags & SyncResource::POPULATE_REMOTE) { $remoteResources = RemoteResource::fetchAllForType($type); foreach ($remoteResources as $remoteResource) { $slug = $remoteResource->getSlug(); if (!isset($syncResourcesBySlug[$slug])) { $syncResource = new SyncResource($type, $slug); $syncResources[] = $syncResource; $syncResourcesBySlug[$slug] = $syncResource; } $syncResource = $syncResourcesBySlug[$slug]; $syncResource->setRemoteResource($remoteResource); } foreach ($syncResources as $syncResource) { $syncResource->remoteResourceSet = TRUE; } } if ($findFlags & SyncResource::ONLY_LOCAL_EXISTING) { if ($findFlags & SyncResource::POPULATE_REMOTE) { throw new Exception("Can't use POPULATE_REMOTE and ONLY_LOCAL_EXISTING at the same time"); } $tmp = $syncResources; $syncResources = array(); foreach ($tmp as $syncResource) { if ($syncResource->getLocalRevision()) { $syncResources[] = $syncResource; } } } return $syncResources; }