/** * add a diagnosis to the specified parent if it doesn't already exist there. * * @throws Exception */ public function actionAddDiagnosis() { $parent = null; if (@$_POST['parent_id'] && !($parent = OphCoTherapyapplication_TherapyDisorder::model()->findByPk((int) $_POST['parent_id']))) { throw new Exception('Cannot find parent with id ' . $parent->id); } if (!($disorder = Disorder::model()->findByPk((int) @$_POST['disorder_id']))) { throw new Exception('Unknown disorder id ' . @$_POST['disorder_id']); } // check not already been added $criteria = new CDbCriteria(); $criteria->condition = 'disorder_id = :did'; $criteria->params = array(':did' => $disorder->id); if ($parent) { $criteria->condition .= ' AND parent_id = :pid'; $criteria->params[':pid'] = $parent->id; } else { $criteria->condition .= ' AND parent_id is NULL'; } if (OphCoTherapyapplication_TherapyDisorder::model()->find($criteria)) { Yii::app()->user->setFlash('failure', 'Disorder already set at this level'); } else { $therapy_disorder = new OphCoTherapyapplication_TherapyDisorder(); $therapy_disorder->disorder_id = $disorder->id; $query = 'SELECT MAX(display_order) AS maxdisplay FROM ' . OphCoTherapyapplication_TherapyDisorder::model()->tableName(); if ($parent) { $therapy_disorder->parent_id = $parent->id; $query .= ' WHERE parent_id = ' . $parent->id; } $val = Yii::app()->db->createCommand($query)->queryRow(); $therapy_disorder->display_order = $val['maxdisplay'] + 1; if (!$therapy_disorder->save()) { throw new Exception('Unable to save new therapy disorder ' . print_r($therapy_disorder->getErrors(), true)); } Yii::app()->user->setFlash('success', 'Disorder added'); Audit::add('admin', 'create', $therapy_disorder->id, null, array('module' => 'OphCoTherapyapplication', 'model' => 'OphCoTherapyapplication_TherapyDisorder')); } $this->redirect(array('viewdiagnoses', 'parent_id' => @$_POST['parent_id'])); }