示例#1
0
 /**
  * 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;
 }