public function createOrUpdateAssetSource($object_id, $images) { $sequence = 0; foreach ($images as $image) { $asset = Source::firstOrNew(['origin_id' => $image->source_id]); $asset->object_id = $object_id; $asset->source_uri = $image->source_url; $asset->source_sequence = $sequence; $asset->save(); $sequence++; } }
/** * Execute the console command. * * @return mixed */ public function handle() { $source = $this->option('source'); // get all object ids from source $source_object_uids = $this->harvester->getAllIDs($source); // get all harvester object uids $objects = \DB::table('objects')->lists('object_uid'); $harvester_object_uids = ['results' => $objects, 'total' => count($objects)]; $harvester_object_uids = (object) $harvester_object_uids; // get harvester_object_uids not in the source_object_uids array $harvester_delete = array_diff($harvester_object_uids->results, $source_object_uids->results); // delete harvesterUIDs if not in sourceIDs foreach ($harvester_delete as $object_uid) { $object = Object::where('object_uid', '=', $object_uid)->first(); $object->delete(); Source::where('object_id', '=', $object->id)->delete(); Asset::where('object_id', '=', $object->id)->delete(); } // get source_object_uids not in the harvester_object_uids array $harvester_queue = array_diff($source_object_uids->results, $harvester_object_uids->results); // queue sourceIDs if not in harvesterIDs foreach ($harvester_queue as $object_uid) { // Queue artisan command for data only \Artisan::queue('harvest:object', ['--uid' => $object_uid, '--only' => 'data', '--source' => $source]); // Queue command to process images $command = new HarvestImages($object_uid); $this->dispatch($command); } // compare sourece assets to harvester assets foreach ($source_object_uids->results as $source_uid) { // if source uid has not already been queued then compare assets if (!in_array($source_uid, $harvester_queue)) { // get source object $source_object = $this->harvester->getObject($source_uid, $source); // get source object assets $source_asset_ids = []; foreach ($source_object->images as $asset) { $source_asset_ids[] = $asset->source_id; } // get harvester object $harvester_object = Object::with(['source'])->where('object_uid', '=', $source_uid)->first(); // get harvester object $harvester_asset_ids = []; foreach ($harvester_object->source as $asset) { $harvester_asset_ids[] = $asset->origin_id; } // get harvester_asset_ids not in the source_asset_ids array $harvester_asset_delete = array_diff($harvester_asset_ids, $source_asset_ids); // delete harvester source assets no longer found in the source $harvester_delete_queue = false; foreach ($harvester_asset_delete as $origin_id) { // remove source reference from database Source::where('object_id', '=', $harvester_object->id)->delete(); Asset::where('object_id', '=', $harvester_object->id)->delete(); $harvester_delete_queue = true; } // regenerate images associated with object if ($harvester_delete_queue) { // Queue artisan command for data only \Artisan::queue('harvest:object', ['--uid' => $source_uid, '--only' => 'data', '--source' => $source]); // Queue command to process images $command = new HarvestImages($source_uid); $this->dispatch($command); } // get source_asset_ids not in the harvester_object_ids array $harvester_asset_queue = array_diff($source_asset_ids, $harvester_asset_ids); if (!empty($harvester_asset_queue)) { // Queue artisan command for data only \Artisan::queue('harvest:object', ['--uid' => $source_uid, '--only' => 'data', '--source' => $source]); // Queue command to process images $command = new HarvestImages($source_uid); $this->dispatch($command); } } } // Queue the export command if ($this->option('export')) { \Artisan::queue('harvest:export', ['--deleted' => true]); \Artisan::queue('harvest:export', ['--modified' => true]); } }
/** * Execute the console command. * * @return mixed */ public function handle() { $source = $this->option('source'); $only = $this->option('only'); $objects = \DB::table('objects')->pluck('object_uid'); $objects = ['results' => $objects, 'total' => count($objects)]; $objects = (object) $objects; $deleted_uids = []; if ($this->option('initial')) { $this->info('Getting all object IDs for seeding.'); } if ($this->option('refresh')) { $this->info('Getting all object IDs for refresh.'); } if ($this->option('update')) { $this->info('Getting all updated object IDs.'); } // create extended types maybe should of a harvester config if ($this->option('initial')) { $this->harvester->createTypes(); } // get all object_uid from piction if ($this->option('initial')) { $response = $this->harvester->getAllIDs($source); } // set response to objects in harvester if ($this->option('refresh')) { $response = $this->harvester->getAllIDs($source); // get object ids that are still part of piciton response $intersectResponse = array_intersect($objects->results, $response->results); // get items that have been deleted from source $deleted_uids = array_diff($objects->results, $response->results); // set response to intersectResponse $response->results = $intersectResponse; $response->total = count($intersectResponse); } if ($this->option('update')) { // get updated ids from piciton $response = $this->harvester->getUpdateIDs($source); // get all ids from piction $allResponse = $this->harvester->getAllIDs($source); // get deleted ids not in the all response $deleted_uids = array_diff($objects->results, $allResponse->results); // get ids from all response not currently in harvester $added_uids = array_diff($allResponse->results, $objects->results); // get ids that are also not in the updated response $diffAdded_uids = array_diff($added_uids, $response->results); // merge response with diff added $response->results = array_merge($response->results, $diffAdded_uids); // set count of response $response->total = count($response->results); } $objectIDs = $response->results; if (count($objectIDs) > 0) { // start progress display in console $this->output->progressStart($response->total); foreach ($objectIDs as $objectID) { if ($only == 'null') { // Queue artisan command for data only \Artisan::queue('harvest:object', ['--uid' => $objectID, '--only' => 'data', '--source' => $source]); // Queue command to process images $command = new HarvestImages($objectID); $this->dispatch($command); } if ($only == 'data') { // Queue artisan command for data only \Artisan::queue('harvest:object', ['--uid' => $objectID, '--only' => 'data', '--source' => $source]); } if ($only == 'images') { // Queue command to process images $command = new HarvestImages($objectID); $this->dispatch($command); } // advance progress display in console $this->output->progressAdvance(); } // complete progress display in console $this->output->progressFinish(); } else { $this->info('No objects have been updated.'); } if (!empty($deleted_uids)) { foreach ($deleted_uids as $object_uid) { $object = Object::where('object_uid', '=', $object_uid)->first(); $object->delete(); Source::where('object_id', '=', $object->id)->delete(); Asset::where('object_id', '=', $object->id)->delete(); } } // Queue the export command if ($this->option('export')) { \Artisan::queue('harvest:export', ['--modified' => true]); \Artisan::queue('harvest:export', ['--deleted' => true]); } }