public function save($value, $id = null, $name = null, $options = null, $fields = null, $pod = null, $params = null)
{
if (empty(self::$api)) {
self::$api = pods_api();
}
$options['id'] = (int) $options['id'];
if (!isset(self::$related_data[$options['id']])) {
return;
}
$related_pod = self::$related_data[$options['id']]['related_pod'];
$related_field = self::$related_data[$options['id']]['related_field'];
$related_pick_limit = self::$related_data[$options['id']]['related_pick_limit'];
// Bidirectional relationship updates
if (!empty($related_field)) {
// Don't use no conflict mode unless this isn't the current pod type
$no_conflict = true;
if ($related_pod['type'] != $pod['type']) {
$no_conflict = pods_no_conflict_check($related_pod['type']);
}
if (!$no_conflict) {
pods_no_conflict_on($related_pod['type']);
}
$value = array_filter($value);
foreach ($value as $related_id) {
if (isset(self::$related_data[$options['id']]['related_ids_' . $related_id]) && !empty(self::$related_data[$options['id']]['related_ids_' . $related_id])) {
$bidirectional_ids = self::$related_data[$options['id']]['related_ids_' . $related_id];
} else {
$bidirectional_ids = self::$api->lookup_related_items($related_field['id'], $related_pod['id'], $related_id, $related_field, $related_pod);
}
$bidirectional_ids = array_filter($bidirectional_ids);
if (empty($bidirectional_ids)) {
$bidirectional_ids = array();
}
$remove_ids = array();
if (0 < $related_pick_limit && !empty($bidirectional_ids) && !in_array($id, $bidirectional_ids)) {
while ($related_pick_limit <= count($bidirectional_ids)) {
$remove_ids[] = (int) array_pop($bidirectional_ids);
}
}
// Remove this item from related items no longer related to
$remove_ids = array_unique(array_filter($remove_ids));
// Add to related items
if (!in_array($id, $bidirectional_ids)) {
$bidirectional_ids[] = $id;
} elseif (empty($remove_ids)) {
continue;
}
self::$api->save_relationships($related_id, $bidirectional_ids, $related_pod, $related_field);
if (!empty($remove_ids)) {
self::$api->delete_relationships($remove_ids, $related_id, $pod, $options);
}
}
if (!$no_conflict) {
pods_no_conflict_off($related_pod['type']);
}
}
}