예제 #1
0
 /**
  * Fetches metadata and stores it to the corresponding place. This includes the mirror list,
  * extension XML files.
  *
  * @param	string		Type of data to fetch: (mirrors)
  * @param	boolean		If true the method doesn't produce any output
  * @return	void
  */
 function fetchMetaData($metaType)
 {
     global $TYPO3_CONF_VARS;
     $content = '';
     switch ($metaType) {
         case 'mirrors':
             $mfile = t3lib_div::tempnam('mirrors');
             $mirrorsFile = t3lib_div::getURL($this->MOD_SETTINGS['mirrorListURL'], 0, array(TYPO3_user_agent));
             if ($mirrorsFile === false) {
                 t3lib_div::unlink_tempfile($mfile);
                 $content = '<p>' . sprintf($GLOBALS['LANG']->getLL('ext_import_list_not_updated'), $this->MOD_SETTINGS['mirrorListURL']) . ' ' . $GLOBALS['LANG']->getLL('translation_problems') . '</p>';
             } else {
                 t3lib_div::writeFile($mfile, $mirrorsFile);
                 $mirrors = implode('', gzfile($mfile));
                 t3lib_div::unlink_tempfile($mfile);
                 $mirrors = $this->xmlHandler->parseMirrorsXML($mirrors);
                 if (is_array($mirrors) && count($mirrors)) {
                     t3lib_BEfunc::getModuleData($this->MOD_MENU, array('extMirrors' => serialize($mirrors)), $this->MCONF['name'], '', 'extMirrors');
                     $this->MOD_SETTINGS['extMirrors'] = serialize($mirrors);
                     $content = '<p>' . sprintf($GLOBALS['LANG']->getLL('ext_import_list_updated'), count($mirrors)) . '</p>';
                 } else {
                     $content = '<p>' . $mirrors . '<br />' . $GLOBALS['LANG']->getLL('ext_import_list_empty') . '</p>';
                 }
             }
             break;
         case 'extensions':
             $this->fetchMetaData('mirrors');
             // if we fetch the extensions anyway, we can as well keep this up-to-date
             $mirror = $this->getMirrorURL();
             $extfile = $mirror . 'extensions.xml.gz';
             $extmd5 = t3lib_div::getURL($mirror . 'extensions.md5', 0, array(TYPO3_user_agent));
             if (is_file(PATH_site . 'typo3temp/extensions.xml.gz')) {
                 $localmd5 = md5_file(PATH_site . 'typo3temp/extensions.xml.gz');
             }
             // count cached extensions. If cache is empty re-fill it
             $cacheCount = $GLOBALS['TYPO3_DB']->exec_SELECTcountRows('extkey', 'cache_extensions');
             if ($extmd5 === false) {
                 $content .= '<p>' . sprintf($GLOBALS['LANG']->getLL('ext_import_md5_not_updated'), $mirror . 'extensions.md5') . $GLOBALS['LANG']->getLL('translation_problems') . '</p>';
             } elseif ($extmd5 == $localmd5 && $cacheCount) {
                 $flashMessage = t3lib_div::makeInstance('t3lib_FlashMessage', $GLOBALS['LANG']->getLL('ext_import_list_unchanged'), $GLOBALS['LANG']->getLL('ext_import_list_unchanged_header'), t3lib_FlashMessage::INFO);
                 $content .= $flashMessage->render();
             } else {
                 $extXML = t3lib_div::getURL($extfile, 0, array(TYPO3_user_agent));
                 if ($extXML === false) {
                     $content .= '<p>' . sprintf($GLOBALS['LANG']->getLL('ext_import_list_unchanged'), $extfile) . ' ' . $GLOBALS['LANG']->getLL('translation_problems') . '</p>';
                 } else {
                     t3lib_div::writeFile(PATH_site . 'typo3temp/extensions.xml.gz', $extXML);
                     $content .= $this->xmlHandler->parseExtensionsXML(PATH_site . 'typo3temp/extensions.xml.gz');
                 }
             }
             break;
     }
     return $content;
 }