00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 if (!defined('SOAP_1_2')) {
00031 require_once('class.nusoap.php');
00032 # require_once('/usr/share/php/SOAP/Client.php');
00033 }
00034 require_once('class.em_soap.php');
00035
00046 class SC_mod_tools_em_terconnection {
00047 var $wsdlURL;
00048 var $emObj;
00049
00059 function fetchExtension($extKey, $version, $expectedMD5, $mirrorURL) {
00060 $mirrorURL .= $extKey{0}.'/'.$extKey{1}.'/'.$extKey.'_'.$version.'.t3x';
00061 $t3x = t3lib_div::getURL($mirrorURL);
00062 $MD5 = md5($t3x);
00063
00064 if($t3x===false) return 'The T3X file could not be fetched. Possible reasons: network problems, allow_url_fopen is off, curl is not enabled in Install tool.';
00065
00066 if($MD5 == $expectedMD5) {
00067
00068 return $this->decodeExchangeData($t3x);
00069 } else {
00070 return 'Error: MD5 hash of downloaded file not as expected:<br />'.$MD5.' != '.$expectedMD5;
00071 }
00072 }
00073
00082 function fetchTranslation($extKey, $lang, $mirrorURL) {
00083 $mirrorURL .= $extKey{0}.'/'.$extKey{1}.'/'.$extKey.'-l10n/'.$extKey.'-l10n-'.$lang.'.zip';
00084 $l10n = t3lib_div::getURL($mirrorURL);
00085
00086 if($l10n !== false) {
00087 return array($l10n);
00088 } else {
00089 return 'Error: Translation could not be fetched.';
00090 }
00091 }
00092
00100 function fetchTranslationStatus($extKey, $mirrorURL) {
00101
00102 $url = $mirrorURL . $extKey{0}.'/'.$extKey{1}.'/'.$extKey.'-l10n/'.$extKey.'-l10n.xml';
00103 $remote = t3lib_div::getURL($url);
00104
00105 if($remote !== false) {
00106 $parsed = $this->emObj->xmlhandler->parseL10nXML($remote);
00107 return $parsed['languagePackIndex'];
00108 }
00109
00110 return FALSE;
00111 }
00112
00121 function decodeServerData($externalData) {
00122 $parts = explode(':',$externalData,4);
00123 $dat = base64_decode($parts[2]);
00124
00125 if (ltrim($parts[0])==md5($dat)) {
00126 if ($parts[1]=='gzcompress') {
00127 if (function_exists('gzuncompress')) {
00128 $dat = gzuncompress($dat);
00129 } else return 'Decoding Error: No decompressor available for compressed content. gzuncompress() function is not available!';
00130 }
00131 $listArr = unserialize($dat);
00132
00133 if (is_array($listArr)) {
00134 return $listArr;
00135 } else {
00136 return 'Error: Unserialized information was not an array - strange!';
00137 }
00138 } else return 'Error: MD5 hashes in T3X data did not match!';
00139 }
00140
00148 function decodeExchangeData($str) {
00149 $parts = explode(':',$str,3);
00150 if ($parts[1]=='gzcompress') {
00151 if (function_exists('gzuncompress')) {
00152 $parts[2] = gzuncompress($parts[2]);
00153 } else return 'Decoding Error: No decompressor available for compressed content. gzcompress()/gzuncompress() functions are not available!';
00154 }
00155 if (md5($parts[2]) == $parts[0]) {
00156 $output = unserialize($parts[2]);
00157 if (is_array($output)) {
00158 return array($output,'');
00159 } else return 'Error: Content could not be unserialized to an array. Strange (since MD5 hashes match!)';
00160 } else return 'Error: MD5 mismatch. Maybe the extension file was downloaded and saved as a text file by the browser and thereby corrupted!? (Always select "All" filetype when saving extensions)';
00161 }
00162
00163
00170 function makeUploadDataFromArray($uploadArray) {
00171 if (is_array($uploadArray)) {
00172 $serialized = serialize($uploadArray);
00173 $md5 = md5($serialized);
00174
00175 $content = $md5.':';
00176 $content.= 'gzcompress:';
00177 $content.= gzcompress($serialized);
00178 }
00179 return $content;
00180 }
00181
00188 function uploadToTER($em) {
00189 $uArr = $this->emObj->makeUploadArray($em['extKey'],$em['extInfo']);
00190 if(!is_array($uArr)) return $uArr;
00191
00192
00193 $newVersionBase = $em['extInfo']['EM_CONF']['version'];
00194 switch((string)$em['upload']['mode']) {
00195 case 'new_dev':
00196 $cmd='dev';
00197 break;
00198 case 'new_sub':
00199 $cmd='sub';
00200 break;
00201 case 'new_main':
00202 $cmd='main';
00203 break;
00204 case 'custom':
00205 $newVersionBase = $em['upload']['version'];
00206 case 'latest':
00207 default:
00208 $cmd='';
00209 break;
00210 }
00211 $versionArr = $this->emObj->renderVersion($newVersionBase, $cmd);
00212 $em['version'] = $versionArr['version'];
00213
00214
00215 $dependenciesArr = array ();
00216 $extKeysArr = $uArr['EM_CONF']['constraints']['depends'];
00217
00218 if (is_array($extKeysArr)) {
00219 foreach ($extKeysArr as $extKey => $version) {
00220 if (strlen($extKey)) {
00221 $dependenciesArr [] = array (
00222 'kind' => 'depends',
00223 'extensionKey' => utf8_encode($extKey),
00224 'versionRange' => utf8_encode($version),
00225 );
00226 }
00227 }
00228 }
00229
00230 $extKeysArr = $uArr['EM_CONF']['constraints']['conflicts'];
00231 if (is_array($extKeysArr)) {
00232 foreach ($extKeysArr as $extKey => $version) {
00233 if (strlen($extKey)) {
00234 $dependenciesArr [] = array (
00235 'kind' => 'conflicts',
00236 'extensionKey' => utf8_encode($extKey),
00237 'versionRange' => utf8_encode($version),
00238 );
00239 }
00240 }
00241 }
00242
00243
00244 $accountData = array(
00245 'username' => $em['user']['fe_u'],
00246 'password' => $em['user']['fe_p']
00247 );
00248 $extensionData = array (
00249 'extensionKey' => utf8_encode($em['extKey']),
00250 'version' => utf8_encode($em['version']),
00251 'metaData' => array (
00252 'title' => utf8_encode($uArr['EM_CONF']['title']),
00253 'description' => utf8_encode($uArr['EM_CONF']['description']),
00254 'category' => utf8_encode($uArr['EM_CONF']['category']),
00255 'state' => utf8_encode($uArr['EM_CONF']['state']),
00256 'authorName' => utf8_encode($uArr['EM_CONF']['author']),
00257 'authorEmail' => utf8_encode($uArr['EM_CONF']['author_email']),
00258 'authorCompany' => utf8_encode($uArr['EM_CONF']['author_company']),
00259 ),
00260 'technicalData' => array (
00261 'dependencies' => $dependenciesArr,
00262 'loadOrder' => utf8_encode($uArr['EM_CONF']['loadOrder']),
00263 'uploadFolder' => (boolean) intval($uArr['EM_CONF']['uploadfolder']),
00264 'createDirs' => utf8_encode($uArr['EM_CONF']['createDirs']),
00265 'shy' => (boolean) intval($uArr['EM_CONF']['shy']),
00266 'modules' => utf8_encode($uArr['EM_CONF']['module']),
00267 'modifyTables' => utf8_encode($uArr['EM_CONF']['modify_tables']),
00268 'priority' => utf8_encode($uArr['EM_CONF']['priority']),
00269 'clearCacheOnLoad' => (boolean) intval($uArr['EM_CONF']['clearCacheOnLoad']),
00270 'lockType' => utf8_encode($uArr['EM_CONF']['lockType']),
00271 ),
00272 'infoData' => array(
00273 'codeLines' => intval($uArr['misc']['codelines']),
00274 'codeBytes' => intval($uArr['misc']['codebytes']),
00275 'codingGuidelinesCompliance' => utf8_encode($uArr['EM_CONF']['CGLcompliance']),
00276 'codingGuidelinesComplianceNotes' => utf8_encode($uArr['EM_CONF']['CGLcompliance_note']),
00277 'uploadComment' => utf8_encode($em['upload']['comment']),
00278 'techInfo' => $uArr['techInfo'],
00279 ),
00280 );
00281
00282 $filesData = array();
00283 foreach ($uArr['FILES'] as $filename => $infoArr) {
00284 $content = version_compare(phpversion(), '5.1.0', '<') ? base64_encode($infoArr['content']) : $infoArr['content'];
00285 $filesData['fileData'][] = array (
00286 'name' => utf8_encode($infoArr['name']),
00287 'size' => intval($infoArr['size']),
00288 'modificationTime' => intval($infoArr['mtime']),
00289 'isExecutable' => intval($infoArr['is_executable']),
00290 'content' => $content,
00291 'contentMD5' => $infoArr['content_md5'],
00292 );
00293 }
00294
00295 $soap = t3lib_div::makeInstance('em_soap');
00296 $soap->init(array('wsdl'=>$this->wsdlURL,'soapoptions'=> array('trace'=>1,'exceptions'=>0)));
00297 $response = $soap->call('uploadExtension', array('accountData' => $accountData, 'extensionData' => $extensionData, 'filesData' => $filesData));
00298
00299 if($response===false) {
00300 switch(true) {
00301 case is_string($soap->error):
00302 return $soap->error;
00303 break;
00304 default:
00305 return $soap->error->faultstring;
00306 }
00307 }
00308
00309 return $response;
00310 }
00311 }
00312 ?>