/** * Edit the related bug,case or result info object * * @author youzhao.zxw<*****@*****.**> * @param string $infoType bug,case or result * @param string $action edit action * @param array $mixedInfo include basic and custom config info * @return array edit result information. */ public static function editInfo($infoType, $action, $mixedInfo) { $className = ucfirst(strtolower($infoType)) . 'Info'; $targetModel = new $className(); $basicInfoParams = $mixedInfo['basic']; $resultInfo = array(); $oldRecordAttributs = array(); $basicInfoId = 0; if (isset($basicInfoParams['id'])) { $basicInfoId = $basicInfoParams['id']; $className = ucfirst(strtolower($infoType)) . 'Info'; $targetModel = new $className(); $basicInfo = $targetModel->model()->findByPk((int) $basicInfoParams['id']); $oldRecord = self::loadModel($infoType, $basicInfoParams['id']); $basicInfo->attributes = $oldRecord->getBasicInfo()->attributes; $oldRecordAttributs = array(); $oldRecordAttributs['basic'] = $basicInfo->attributes; $oldRecordAttributs['custom'] = $oldRecord->getCustomInfo(); if (Info::TYPE_BUG == $infoType) { $legalActionArr = $targetModel->model()->getLegalActionByState($basicInfo[$infoType . '_status']); if (!in_array($action, $legalActionArr)) { $resultInfo['status'] = CommonService::$ApiResult['FAIL']; $resultInfo['detail']['id'] = Yii::t('Common', self::ERROR_WRONG_ACTION); return $resultInfo; } } } else { $basicInfo = new $className(); } $basicInfo->attributes = $basicInfoParams; $basicInfo->scenario = $action; if (Info::ACTION_IMPORT == $action) { if (BugInfo::STATUS_RESOLVED == $basicInfo[$infoType . '_status']) { $basicInfo->scenario = BugInfo::ACTION_RESOLVE; } else { if (BugInfo::STATUS_CLOSED == $basicInfo[$infoType . '_status']) { $basicInfo->scenario = BugInfo::ACTION_CLOSE; } } } if (Info::TYPE_BUG == $infoType && Info::ACTION_IMPORT != $action) { $basicInfo->setAttribute($infoType . '_status', self::getBugStatusByAction($action)); } $basicModelValid = $basicInfo->validate(); if (!$basicModelValid) { $resultInfo['status'] = CommonService::$ApiResult['FAIL']; $resultInfo['detail'] = $basicInfo->getErrors(); return $resultInfo; } $repeatStepForMail = self::getRepeatStep($basicInfoParams, $infoType); $actionNoteForWangwang = ''; if (isset($basicInfoParams['action_note'])) { $actionNoteForWangwang = $basicInfoParams['action_note']; } $customParams = self::parseMultiSelectedData($mixedInfo['custom']); $attachmentFile = $mixedInfo['attachment_file']; $deletedFileIdStr = ''; if (!empty($basicInfoParams['deleted_file_id'])) { $deletedFileIdStr = $basicInfoParams['deleted_file_id']; } $productId = $basicInfo->product_id; $connection = Yii::app()->db; $transaction = $connection->beginTransaction(); try { $customValidateResult = FieldConfigService::validateCustomFieldData($infoType, $productId, $basicInfoId, $customParams, $action); if (CommonService::$ApiResult['SUCCESS'] == $customValidateResult['status']) { if (!$basicInfo->save(false)) { $resultInfo['status'] = CommonService::$ApiResult['FAIL']; $resultInfo['detail'] = $basicInfo->getErrors(); if (CommonService::$ApiResult['FAIL'] == $customValidateResult['status']) { $resultInfo['detail'] = array_merge($resultInfo['detail'], $customValidateResult['detail']); } } else { $customTableName = 'etton' . $infoType . '_' . $productId; $customParams[$infoType . '_id'] = $basicInfo->id; $customParams = self::handleCustomDate($infoType, $productId, $customParams); if (isset($basicInfoParams['id'])) { $insertResult = Yii::app()->db->createCommand()->update('{{' . $customTableName . '}}', $customParams, $infoType . '_id=:infoId', array(':infoId' => $basicInfoParams['id'])); } else { $insertResult = Yii::app()->db->createCommand()->insert('{{' . $customTableName . '}}', $customParams); } $addActionResult = self::addActionNotes($infoType, $action, $basicInfo, $oldRecordAttributs); if (CommonService::$ApiResult['FAIL'] == $addActionResult['status']) { $resultInfo = $addActionResult; return $resultInfo; } else { $deletedFileResult = TestFileService::dropFile($deletedFileIdStr, $addActionResult['detail']['id']); $saveAttachmentResult = TestFileService::saveAttachmentFile($attachmentFile, $addActionResult['detail']['id'], $basicInfo->id, $infoType, $productId); if (CommonService::$ApiResult['FAIL'] == $saveAttachmentResult['status']) { $resultInfo = $saveAttachmentResult; return $resultInfo; } } $transaction->commit(); $resultInfo['status'] = CommonService::$ApiResult['SUCCESS']; $resultInfo['detail'] = array('id' => $basicInfo->id); if (Info::ACTION_IMPORT != $action) { self::sendMessage($basicInfo->id, $infoType, $addActionResult['detail']['id'], $repeatStepForMail, $actionNoteForWangwang); } } } else { $resultInfo = $customValidateResult; } return $resultInfo; } catch (Exception $e) { $transaction->rollBack(); $resultInfo['status'] = CommonService::$ApiResult['FAIL']; $resultInfo['detail']['id'] = $e->getMessage(); } return $resultInfo; }