Pods::remove_from PHP Method

remove_from() public method

Remove an item from the values of a relationship field, remove a value from a number field (field-1), remove time to a date field
See also: PodsAPI::save_pod_item
Since: 2.3.3
public remove_from ( string $field, mixed $value = null, integer $id = null ) : integer
$field string Field name
$value mixed ID(s) to add, int|float to add to number field, string for dates (-1 week), or string for text
$id integer (optional) ID of the pod item to update
return integer The item ID
    public function remove_from($field, $value = null, $id = null)
    {
        $pod =& $this;
        $fetch = false;
        if (null === $id) {
            $fetch = true;
            $id = $this->id();
        } elseif ($id != $this->id()) {
            $pod = pods($this->pod, $id);
        }
        $this->do_hook('remove_from', $field, $value, $id);
        if (!isset($this->fields[$field])) {
            return $id;
        }
        // Tableless fields
        if (in_array($this->fields[$field]['type'], PodsForm::tableless_field_types())) {
            if (empty($value)) {
                $value = array();
            }
            if (!empty($value)) {
                if (!is_array($value)) {
                    $value = explode(',', $value);
                }
                if ('pick' == $this->fields[$field]['type'] && in_array($this->fields[$field]['pick_object'], PodsForm::simple_tableless_objects())) {
                    $current_value = $pod->raw($field);
                    if (!empty($current_value)) {
                        $current_value = (array) $current_value;
                    }
                    foreach ($current_value as $k => $v) {
                        if (in_array($v, $value)) {
                            unset($current_value[$k]);
                        }
                    }
                    $value = $current_value;
                } else {
                    $related_ids = $this->api->lookup_related_items($this->fields[$field]['id'], $this->pod_data['id'], $id, $this->fields[$field], $this->pod_data);
                    foreach ($value as $k => $v) {
                        if (!preg_match('/[^0-9]/', $v)) {
                            $value[$k] = (int) $v;
                        } else {
                        }
                    }
                    foreach ($related_ids as $k => $v) {
                        if (in_array($v, $value)) {
                            unset($related_ids[$k]);
                        }
                    }
                    $value = $related_ids;
                }
                if (!empty($value)) {
                    $value = array_filter(array_unique($value));
                } else {
                    $value = array();
                }
            }
        } elseif (in_array($this->fields[$field]['type'], PodsForm::number_field_types())) {
            // Date fields don't support empty for removing
            if (empty($value)) {
                return $id;
            }
            $current_value = (double) $pod->raw($field);
            $value = $current_value - (double) $value;
        } elseif (in_array($this->fields[$field]['type'], PodsForm::date_field_types())) {
            // Date fields don't support empty for removing
            if (empty($value)) {
                return $id;
            }
            $current_value = $pod->raw($field);
            if (0 < strlen($current_value)) {
                $value = strtotime($value, strtotime($current_value));
            } else {
                $value = strtotime($value);
            }
            $value = date_i18n('Y-m-d h:i:s', $value);
        }
        // @todo handle object fields and taxonomies
        $params = array('pod' => $this->pod, 'id' => $id, 'data' => array($field => $value));
        $id = $this->api->save_pod_item($params);
        if (0 < $id && $fetch) {
            $pod->fetch($id, false);
        }
        return $id;
    }