Source of file IntercomBulkLoadTask.php
Size: 2,216 Bytes - Last Modified: 2021-12-23T10:37:44+00:00
/var/www/docs.ssmods.com/process/src/code/IntercomBulkLoadTask.php
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | <?php namespace SilverStripe\Intercom; use SilverStripe\Control\Director; use SilverStripe\Core\Injector\Injector; use SilverStripe\Dev\BuildTask; use SilverStripe\Dev\Debug; use SilverStripe\Intercom\Intercom; /** * Build task to bulk-load all relevant users into Intercom via the API */ class IntercomBulkLoadTask extends BuildTask { private static $segment = 'IntercomBulkLoadTask'; public function run($request) { $intercom = Injector::inst()->get(Intercom::class); if ($jobID = $request->getVar('JobID')) { $job = $intercom->getBulkJob($request->getVar('JobID')); Debug::dump($job->getInfo()); Debug::dump($job->getErrors()); } else { $members = $intercom->getUserList(); // Intercom has a hard limit of 100 on bulk jobs foreach ($this->chunkDataList($members, 100) as $memberchunk) { echo "<li>" . implode("</li>\n<li>", $memberchunk->column('Email')), "</li>\n"; $result = $intercom->bulkLoadUsers($memberchunk); $jobID = $result->getID(); if (Director::is_cli()) { echo "Job id $jobID\n"; echo "To see status, run: sake dev/tasks/IntercomBulkLoadTask JobID=$jobID\n"; } else { echo "<p>Job id $jobID</p>\n"; echo "<p><a href=\"" . Director::absoluteURL('dev/tasks/IntercomBulkLoadTask?JobID=' . urlencode($jobID)) . "\">Click here to see job status</a></p>"; } echo "\n"; } } } /** * @param $datalist * @param $chunksize * @return array */ public function chunkDataList($datalist, $chunksize) { $count = $datalist->count(); if ($count < $chunksize) { return [$datalist]; } $rounds = round($count / $chunksize); $chunks = []; $offset = 0; for ($i = 0; $i < $rounds; $i++) { $chunks[] = $datalist->limit($chunksize, $offset); $offset = $offset + $chunksize; } return $chunks; } } |