/**
  * upload an attachment
  *
  * @param  Integer  $forumId
  * @param  String  $groupId
  * @return  Object  $oMbqEtAtt
  */
 public function uploadAttachment($oMbqEtForum, $groupId = null)
 {
     //ref wcf\action\AJAXUploadAction,wcf\action\AJAXProxyAction,wcf\data\attachment\AttachmentAction
     $parameters['objectType'] = 'com.woltlab.wbb.post';
     $parameters['objectID'] = 0;
     $parameters['tmpHash'] = $groupId ? $groupId : StringUtil::getRandomID();
     $parameters['parentObjectID'] = $oMbqEtForum->forumId->oriValue;
     $parameters['__files'] = UploadHandler::getUploadHandler('attachment');
     //ref AJAXUploadAction::readParameters()
     $oAttachmentAction = new AttachmentAction(array(), 'upload', $parameters);
     //ref AJAXProxyAction::invoke()
     $oAttachmentAction->validateAction();
     //todo:catch exception
     $ret = $oAttachmentAction->executeAction();
     //todo:catch exception
     if ($ret['returnValues']['attachments']) {
         $r = array_shift($ret['returnValues']['attachments']);
         $oMbqEtAtt = MbqMain::$oClk->newObj('MbqEtAtt');
         $oMbqEtAtt->attId->setOriValue($r['attachmentID']);
         $oMbqEtAtt->groupId->setOriValue($parameters['tmpHash']);
         $oMbqEtAtt->filtersSize->setOriValue($r['filesize']);
         $oMbqEtAtt->uploadFileName->setOriValue($r['filename']);
         return $oMbqEtAtt;
     } else {
         MbqError::alert('', "Upload attachment failed!", '', MBQ_ERR_APP);
     }
 }
 /**
  * @see	wcf\action\IAction::readParameters()
  */
 public function readParameters()
 {
     parent::readParameters();
     $this->parameters['__files'] = UploadHandler::getUploadHandler('__files');
 }
 /**
  * Creates the upload handler for the given option.
  * 
  * @param	\wcf\data\option\Option		$option
  */
 protected function createUploadHandler(Option $option)
 {
     if (!isset($this->uploadHandlers[$option->optionName])) {
         $this->uploadHandlers[$option->optionName] = UploadHandler::getUploadHandler($option->optionName);
     }
 }