protected function updateDeveloperOrganizations(EntityDeveloper $developer)
{
$organizationsData = $this->githubDeveloper->getOrganizations($developer);
$developerOrganizations = $developer->getOrganizations();
$developerOrganizationNames = array();
foreach ($organizationsData as $organization) {
$developerOrganizationNames[] = $organization['login'];
}
// Add missed organizations
foreach ($developerOrganizationNames as $organizationName) {
$isBelongTo = $developerOrganizations->exists(function ($key, $element) use($organizationName) {
return $organizationName === $element->getName();
});
if ($isBelongTo) {
continue;
}
if (!($organizationEntity = $this->organizationRepository->findOneByName($organizationName))) {
$organizationEntity = $this->githubOrganization->import($organizationName, $update = true, $updateMembers = false);
$this->entityManager->persist($organizationEntity);
}
$developer->addOrganization($organizationEntity);
}
// Remove extra organizations
foreach ($developerOrganizations as $developerOrganization) {
$extraOrganization = !in_array($developerOrganization->getName(), $developerOrganizationNames, true);
if ($extraOrganization) {
$developer->removeOrganization($developerOrganization);
}
}
}