Element_OphCoTherapyapplication_PatientSuitability::updateDecisionTreeResponses PHP Метод

updateDecisionTreeResponses() публичный Метод

public updateDecisionTreeResponses ( $side, $update_responses )
    public function updateDecisionTreeResponses($side, $update_responses)
    {
        $current_responses = array();
        $save_responses = array();
        if ($side == $this::LEFT) {
            $responses = $this->left_responses;
        } elseif ($side == $this::RIGHT) {
            $responses = $this->right_responses;
        } else {
            throw Exception('Invalid side value');
        }
        foreach ($responses as $curr_resp) {
            $current_responses[$curr_resp->node_id] = $curr_resp;
        }
        // go through each node response, if there isn't one for this element,
        // create it and store for saving
        // if there is, check if the value is the same ... if it has changed
        // update and store for saving, otherwise remove from the current responses array
        // anything left in current responses at the end is ripe for deleting
        foreach ($update_responses as $node_id => $value) {
            if (!array_key_exists($node_id, $current_responses)) {
                $s = new OphCoTherapyapplication_PatientSuitability_DecisionTreeNodeResponse();
                $s->attributes = array('patientsuit_id' => $this->id, 'eye_id' => $side, 'node_id' => $node_id, 'value' => $value);
                $save_responses[] = $s;
            } else {
                if ($current_responses[$node_id]->value != $value) {
                    $current_responses[$node_id]->value = $value;
                    $save_responses[] = $current_responses[$node_id];
                }
                // don't want to delete this, so remove from list which we use later to delete
                unset($current_responses[$node_id]);
            }
        }
        // save what needs saving
        foreach ($save_responses as $save) {
            $save->save();
        }
        // delete any that are no longer relevant
        foreach ($current_responses as $curr) {
            $curr->delete();
        }
    }