/**
  * @param string $extensionKey
  * @param string $version
  * @param string $username
  * @param string $password
  * @return array
  */
 public function deleteExtensionVersion($extensionKey, $version, $username, $password)
 {
     $compiler = new SoapDataCompiler();
     $payload = $compiler->createSoapData($username, $password, array('extensionKey' => $extensionKey, 'version' => $version));
     return $this->getConnection()->call(Connection::FUNCTION_DELETEVERSION, $payload, $username, $password);
 }
 /**
  * @param string $extensionKey
  * @param array $extensionData
  * @param string $username
  * @param string $password
  * @param string $comment
  * @return array
  */
 public function createSoapData($extensionKey, $extensionData, $username, $password, $comment)
 {
     // Create dependency / conflict information:
     $dependenciesArr = $this->createDependenciesArray($extensionData, ExtensionUploadPacker::KIND_DEPENDENCY);
     $dependenciesArr = array_merge($dependenciesArr, $this->createDependenciesArray($extensionData, ExtensionUploadPacker::KIND_CONFLICT));
     $dependenciesArr = array_merge($dependenciesArr, $this->createDependenciesArray($extensionData, ExtensionUploadPacker::KIND_SUGGEST));
     // Compile data for SOAP call:
     $extension = array('extensionKey' => $extensionKey, 'version' => $this->valueOrDefault($extensionData, 'version'), 'metaData' => array('title' => $this->valueOrDefault($extensionData, 'title'), 'description' => $this->valueOrDefault($extensionData, 'description'), 'category' => $this->valueOrDefault($extensionData, 'category'), 'state' => $this->valueOrDefault($extensionData, 'state'), 'authorName' => $this->valueOrDefault($extensionData, 'author'), 'authorEmail' => $this->valueOrDefault($extensionData, 'author_email'), 'authorCompany' => $this->valueOrDefault($extensionData, 'author_company')), 'technicalData' => array('dependencies' => $dependenciesArr, 'loadOrder' => $this->valueOrDefault($extensionData, 'loadOrder'), 'uploadFolder' => (bool) $this->valueOrDefault($extensionData, 'uploadFolder'), 'createDirs' => $this->valueOrDefault($extensionData, 'createDirs'), 'shy' => $this->valueOrDefault($extensionData, 'shy', FALSE), 'modules' => $this->valueOrDefault($extensionData, 'module'), 'modifyTables' => $this->valueOrDefault($extensionData, 'modify_tables'), 'priority' => $this->valueOrDefault($extensionData, 'priority'), 'clearCacheOnLoad' => (bool) $this->valueOrDefault($extensionData, 'clearCacheOnLoad'), 'lockType' => $this->valueOrDefault($extensionData, 'lockType'), 'doNotLoadInFEe' => $this->valueOrDefault($extensionData, 'doNotLoadInFE'), 'docPath' => $this->valueOrDefault($extensionData, 'docPath')), 'infoData' => array('codeLines' => intval($extensionData['misc']['codelines']), 'codeBytes' => intval($extensionData['misc']['codebytes']), 'codingGuidelinesCompliance' => $this->valueOrDefault($extensionData, 'CGLcompliance'), 'codingGuidelinesComplianceNotes' => $this->valueOrDefault($extensionData, 'CGLcompliance_note'), 'uploadComment' => $comment, 'techInfo' => $extensionData['techInfo']));
     $files = array();
     foreach ($extensionData['FILES'] as $filename => $infoArr) {
         $files[] = array('name' => $infoArr['name'], 'size' => intval($infoArr['size']), 'modificationTime' => intval($infoArr['mtime']), 'isExecutable' => intval($infoArr['is_executable']), 'content' => $infoArr['content'], 'contentMD5' => $infoArr['content_md5']);
     }
     $compier = new SoapDataCompiler();
     return $compier->createSoapData($username, $password, array('extensionData' => $extension, 'filesData' => $files));
 }