PodsField_Pick::save PHP Method

save() public method

Save the value to the DB
Since: 2.3
public save ( mixed $value, integer $id = null, string $name = null, array $options = null, array $fields = null, array $pod = null, object $params = null )
$value mixed
$id integer
$name string
$options array
$fields array
$pod array
$params object
    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']);
            }
        }
    }