/** * {@inheritdoc} */ public function save($entity) { $is_update = !empty($entity->developerId); if (!$is_update) { // Force Developer object to figure out if it's an update or insert. $is_update = NULL; } if ($entity->email) { $uid = db_select('users', 'u')->fields('u', array('uid'))->condition('mail', $entity->email)->execute()->fetchField(); } else { $uid = 0; } $default_config = devconnect_default_org_config(); $old_entity = (array) $entity; if (empty($entity->orgNames)) { $entity->orgNames = array('default'); } $overall_success = TRUE; foreach ($entity->orgNames as $org) { if ($org == 'default' || $org == $default_config->orgName) { $config = $default_config; } else { $config = devconnect_default_org_config($org); } $dev = new Developer($config); $dev->fromArray($old_entity); try { $dev->save($is_update); $new_entity = new DeveloperEntity($dev->toArray()); if ($new_entity->email && $uid > 1) { $new_entity->uid = $uid; // Prevent cache from being rewritten. $uid = 0; } $this->devCache[$new_entity->developerId] = $new_entity; } catch (ResponseException $e) { $overall_success = FALSE; } } if (!$overall_success) { return FALSE; } return $is_update ? SAVED_UPDATED : SAVED_NEW; }