/** * Update the procedures for this element with the given ids. * * @param $procedure_ids * * @throws Exception */ public function updateProcedures($procedure_ids) { $current_procedures = array(); foreach ($this->procedure_assignments as $pa) { $current_procedures[$pa->proc_id] = $pa; } foreach ($procedure_ids as $i => $proc_id) { $display_order = $i + 1; if (isset($current_procedures[$proc_id])) { $procedure_assignment = $current_procedures[$proc_id]; if ($procedure_assignment->display_order != $display_order) { $procedure_assignment->display_order = $display_order; if (!$procedure_assignment->save()) { throw new Exception('Unable to save procedure assignment'); } } unset($current_procedures[$proc_id]); } else { $procedure_assignment = new OphTrOperationnote_ProcedureListProcedureAssignment(); $procedure_assignment->procedurelist_id = $this->id; $procedure_assignment->proc_id = $proc_id; $procedure_assignment->display_order = $display_order; if (!$procedure_assignment->save()) { throw new Exception('Unable to save procedure assignment'); } } } // delete remaining current procedures foreach ($current_procedures as $pa) { if (!$pa->delete()) { throw new Exception('Unable to delete procedure assignment: ' . print_r($pa->getErrors(), true)); } } }