/** * @return array */ public function get_limits() { if ($this->parameter_version_id) { $limit_id = $this->parameter_version->get_parameter_limit_id(); return ParameterFieldLimit_Access::list_limits_by_limit_id($limit_id); } else { return null; } }
public function edit($name, $field_array, $limit_array) { global $transaction; if ($this->parameter_template_id and $name and is_array($field_array) and count($field_array) and is_array($limit_array)) { $transaction_id = $transaction->begin(); if ($this->parameter_template->set_name($name) == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } $limit_counter = count($limit_array); $parameter_limit_id_array = array(); $current_limit_array = array(); for ($i = 0; $i <= $limit_counter - 1; $i++) { if ($limit_array[$i] !== null) { if (isset($limit_array[$i]['pk']) and is_numeric($limit_array[$i]['pk'])) { array_push($current_limit_array, $limit_array[$i]['pk']); /** * @todo MINOR-IMPORTANT: insert a security check */ $parameter_limit_id_array[$i] = $limit_array[$i]['pk']; $parameter_limit = new ParameterLimit_Access($limit_array[$i]['pk']); if ($parameter_limit->set_name($limit_array[$i]['name']) == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } } else { $parameter_limit = new ParameterLimit_Access(null); if (($parameter_limit_id_array[$i] = $parameter_limit->create($limit_array[$i]['name'])) == null) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } } } } $current_field_array = array(); $new_field_array = array(); foreach ($field_array as $key => $value) { foreach ($value as $field_key => $field_value) { switch ($field_key) { case "name": $name = $field_value; break; case "unit": $unit_array = explode("-", $field_value, 2); if (is_array($unit_array) and count($unit_array) === 2) { if (is_numeric($unit_array[1])) { $measuring_unit_id = $unit_array[0]; $measuring_unit_exponent = $unit_array[1]; } else { $measuring_unit_ratio_id = $unit_array[0]; } } elseif (is_array($unit_array) and count($unit_array) === 1) { $measuring_unit_ratio_id = $unit_array[0]; } break; case "min": $min_value = $field_value; break; case "max": $max_value = $field_value; break; default: break; } } if (isset($value['pk']) and is_numeric($value['pk'])) { $parameter_field_id = $value['pk']; array_push($current_field_array, $value['pk']); // Edit Field if (ParameterTemplateHasField_Access::field_exists_in_template($this->parameter_template_id, $value['pk']) == true) { $parameter_field = new ParameterField_Access($value['pk']); if ($parameter_field->set_name($name) == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } if (is_numeric($measuring_unit_id) and is_numeric($measuring_unit_exponent)) { if ($parameter_field->set_measuring_unit_id($measuring_unit_id) == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } if ($parameter_field->set_measuring_unit_exponent($measuring_unit_exponent) == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } if ($parameter_field->set_measuring_unit_ratio_id(null) == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } } elseif (is_numeric($measuring_unit_ratio_id)) { if ($parameter_field->set_measuring_unit_id(null) == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } if ($parameter_field->set_measuring_unit_exponent(null) == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } if ($parameter_field->set_measuring_unit_ratio_id($measuring_unit_ratio_id) == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } } if (is_numeric($min_value)) { if ($parameter_field->set_min_value($min_value) == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } } if (is_numeric($max_value)) { if ($parameter_field->set_max_value($max_value) == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } } } else { // Exception: Security if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } } else { // New Field $parameter_field = new ParameterField_Access(null); if (($parameter_field_id = $parameter_field->create($name, $min_value, $max_value, $measuring_unit_id, $measuring_unit_exponent, $measuring_unit_ratio_id)) === null) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } $parameter_template_has_field = new ParameterTemplateHasField_Access(null, null); if ($parameter_template_has_field->create($this->parameter_template_id, $parameter_field_id) === false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } array_push($new_field_array, $parameter_field_id); array_push($current_field_array, $parameter_field_id); } for ($i = 0; $i <= $limit_counter - 1; $i++) { if (ParameterFieldLimit_Access::exist_field_limit($parameter_limit_id_array[$i], $parameter_field_id)) { $parameter_field_limit = new ParameterFieldLimit_Access($parameter_limit_id_array[$i], $parameter_field_id); if (is_numeric($limit_array[$i]['lsl'][$key])) { if ($parameter_field_limit->set_lower_specification_limit($limit_array[$i]['lsl'][$key]) == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } } if (is_numeric($limit_array[$i]['usl'][$key])) { if ($parameter_field_limit->set_upper_specification_limit($limit_array[$i]['usl'][$key]) == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } } } else { if (is_numeric($limit_array[$i]['usl'][$key]) or $limit_array[$i]['lsl'][$key]) { $parameter_field_limit = new ParameterFieldLimit_Access(null, null); if ($parameter_field_limit->create($parameter_limit_id_array[$i], $parameter_field_id, $limit_array[$i]['usl'][$key], $limit_array[$i]['lsl'][$key]) == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } array_push($current_limit_array, $parameter_limit_id_array[$i]); } } } unset($parameter_field_id); unset($name); unset($min_value); unset($max_value); unset($measuring_unit_id); unset($measuring_unit_exponent); unset($measuring_unit_ratio_id); } if (is_array($current_field_array) and count($current_field_array) >= 1) { $template_field_array = ParameterTemplateHasField_Access::list_fields_by_template_id($this->parameter_template_id); $field_delete_array = array_diff($template_field_array, $current_field_array); if (is_array($field_delete_array) and count($field_delete_array) >= 1) { foreach ($field_delete_array as $key => $value) { if (ParameterFieldLimit_Access::delete_limits_by_parameter_field_id($value) === false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } $parameter_template_field = new ParameterTemplateHasField_Access($this->parameter_template_id, $value); if ($parameter_template_field->delete() === false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } $parameter_field = new ParameterField_Access($value); if ($parameter_field->delete() === false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } } } } if (is_array($current_limit_array) and count($current_limit_array) >= 1) { $full_field_array = array_merge($new_field_array, $current_field_array); $template_limit_array = ParameterFieldLimit_Access::list_parameter_limits_by_parameter_field_array($full_field_array); $limit_delete_array = array_diff($template_limit_array, $current_limit_array); if (is_array($limit_delete_array) and count($limit_delete_array) >= 1) { foreach ($limit_delete_array as $key => $value) { if (ParameterFieldLimit_Access::delete_limits_by_parameter_limit_id($value) === false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } $parameter_limit = new ParameterLimit_Access($value); if ($parameter_limit->delete() === false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } } } } if ($transaction_id != null) { $transaction->commit($transaction_id); } return true; } else { return false; } }