/**
  * generates a general information array
  *
  * @param string reference language
  * @param array language key array
  * @param object file object
  * @return array general information array
  * @see outputGeneral()
  */
 public static function genGeneralInfoArray($refLang, $languages, $fileObj)
 {
     // reference language data informations
     $localRefLangData = $fileObj->getLocalLangData($refLang);
     // generate needed data
     foreach ($languages as $langKey) {
         // get origin data and meta informations
         $origin = $fileObj->getOriginLangData($langKey);
         $infos['default']['meta'] = $fileObj->getMetaData();
         // language data
         $localLangData = $fileObj->getLocalLangData($langKey);
         // detailed constants informations
         $infos[$langKey]['numUntranslated'] = count(array_diff_key($localRefLangData, $localLangData));
         $infos[$langKey]['numUnknown'] = count(array_diff_key($localLangData, $localRefLangData));
         $infos[$langKey]['numTranslated'] = count(array_intersect_key($localLangData, $localRefLangData));
         // get location type
         if ($fileObj->getVar('workspace') != 'xll') {
             $locType = typo3Lib::checkFileLocation($origin);
             if ($locType == 'local') {
                 $infos[$langKey]['type'] = $GLOBALS['LANG']->getLL('ext.local');
             } elseif ($locType == 'global') {
                 $infos[$langKey]['type'] = $GLOBALS['LANG']->getLL('ext.global');
             } elseif ($locType == 'system') {
                 $infos[$langKey]['type'] = $GLOBALS['LANG']->getLL('ext.system');
             } elseif ($locType == 'l10n') {
                 $infos[$langKey]['type'] = $GLOBALS['LANG']->getLL('lang.file.l10n');
                 $infos[$langKey]['type2'] = 'l10n';
             } else {
                 $infos[$langKey]['type'] = $GLOBALS['LANG']->getLL('ext.unknown');
             }
             if ($infos[$langKey]['type2'] != 'l10n') {
                 if ($fileObj->checkLocalizedFile(basename($origin), $langKey)) {
                     $infos[$langKey]['type2'] = 'splitted';
                 } else {
                     $infos[$langKey]['type2'] = 'merged';
                 }
             }
         } else {
             $infos[$langKey]['type'] = 'xll';
             $infos[$langKey]['type2'] = 'merged';
         }
         // set origin
         try {
             $infos[$langKey]['origin'] = '[-]';
             if (!empty($origin)) {
                 $infos[$langKey]['origin'] = typo3Lib::transTypo3File($origin, false);
             }
         } catch (Exception $e) {
             $infos[$langKey]['origin'] = sgLib::trimPath(PATH_site, $origin);
         }
     }
     return $infos;
 }
 /**
  * prepares the final Content
  *
  * @return string prepared content (xml)
  */
 private function prepareBackupContent()
 {
     // convert all values to utf-8
     if ($GLOBALS['TYPO3_CONF_VARS']['BE']['forceCharset'] != 'utf-8') {
         $localLang = typo3Lib::utf8($this->localLang, true, array('default'));
     } else {
         $localLang = $this->localLang;
     }
     // set meta
     $phpArray['meta'] = $this->meta;
     // set array
     foreach ($this->originLang as $lang => $origin) {
         // set origin
         try {
             $phpArray['data'][$lang]['meta']['origin'] = typo3Lib::transTypo3File($origin, false);
         } catch (Exception $e) {
             $phpArray['data'][$lang]['meta']['origin'] = substr($origin, strlen(PATH_site));
         }
         // set data
         if (is_array($localLang[$lang])) {
             foreach ($localLang[$lang] as $labelKey => $labelVal) {
                 $phpArray['data'][$lang]['langData'][$labelKey] = $labelVal;
             }
         }
     }
     // define assocTagNames
     $options['parentTagMap'] = array('data' => 'languageKey', 'langData' => 'label');
     // get xml
     return t3lib_div::array2xml($phpArray, '', 0, 'LFBackup', 0, $options);
 }
 /**
  * generates output for management of backups
  *
  * @param array meta information data (only the extensions part)
  * @param string extension path (absolute)
  * @return string output (HTML code)
  */
 public static function outputManageBackups($metaArray, $extPath)
 {
     // generate form
     $content .= '<input type="hidden" name="submitted" value="1" />';
     $content .= '<input type="hidden" name="delete" value="0" />';
     $content .= '<input type="hidden" name="restore" value="0" />';
     $content .= '<input type="hidden" name="origDiff" value="0" />';
     $content .= '<input type="hidden" name="deleteAll" value="0" />';
     $content .= '<input type="hidden" name="file" value="" />';
     $content .= '<input type="hidden" name="langFile" value="" />';
     // begin table
     $content .= '<table id="tx-lfeditor-table" ' . 'summary="' . $GLOBALS['LANG']->getLL('table.backups') . '">';
     // table header
     $content .= '<thead><tr>';
     $content .= '<th class="bgColor5"> ' . $GLOBALS['LANG']->getLL('function.backupMgr.date') . ' </th>';
     $content .= '<th class="bgColor5"> ' . $GLOBALS['LANG']->getLL('function.backupMgr.state') . ' </th>';
     $content .= '<th class="bgColor5"> ' . $GLOBALS['LANG']->getLL('lang.file.file') . ' </th>';
     $content .= '<th id="tx-lfeditor-table-markup1" class="bgColor5">' . '<a href="#" title="' . $GLOBALS['LANG']->getLL('function.backupMgr.deleteAll') . '" ' . 'onclick="submitBackupForm(\'\', \'\', 0, 0, 1, 0);">' . '<img src="../res/images/garbage.gif" alt="' . $GLOBALS['LANG']->getLL('function.backupMgr.delete') . '" /> </a> </th>';
     $recover = strtoupper(substr($GLOBALS['LANG']->getLL('function.backupMgr.recover'), 0, 1));
     $content .= '<th id="tx-lfeditor-table-markup2">' . $recover . '</th>';
     $diff = strtoupper(substr($GLOBALS['LANG']->getLL('function.backupMgr.diff.diff'), 0, 1));
     $content .= '<th id="tx-lfeditor-table-markup3">' . $diff . '</th>';
     $content .= '</tr></thead>';
     // table body
     $content .= '<tbody>';
     $i = 0;
     $keys = array_keys($metaArray);
     foreach ($keys as $langFile) {
         foreach ($metaArray[$langFile] as $filename => $informations) {
             // get path to filename
             $backupPath = $informations['pathBackup'];
             $file = typo3Lib::fixFilePath(PATH_site . '/' . $backupPath . '/' . $filename);
             $origFile = typo3Lib::fixFilePath($extPath . '/' . $langFile);
             // check state
             $content .= '<tr>';
             $stateBool = false;
             if (!is_file($file)) {
                 $state = '<td class="tx-lfeditor-badMarkup bgColor4">' . $GLOBALS['LANG']->getLL('function.backupMgr.missing') . '</td>';
             } elseif (!is_file($origFile)) {
                 $state = '<td class="tx-lfeditor-badMarkup bgColor4">' . $GLOBALS['LANG']->getLL('lang.file.missing') . '</td>';
             } else {
                 $stateBool = true;
                 $state = '<td class="tx-lfeditor-goodMarkup bgColor4">' . $GLOBALS['LANG']->getLL('function.backupMgr.ok') . '</td>';
             }
             // generate row
             $content .= '<td class="bgColor4">' . date('Y-m-d<b\\r />H:i:s', $informations['createdAt']) . '</td>';
             $content .= $state;
             $content .= '<td class="bgColor4">' . $langFile . '</td>';
             // delete
             $name = $GLOBALS['LANG']->getLL('function.const.delete.delete');
             $content .= '<td class="bgColor4"> <a href="#" title="' . $name . '" ' . 'onclick="submitBackupForm(\'' . $filename . '\', \'' . $langFile . '\', ' . '1, 0, 0, 0);"> <img src="../res/images/garbage.gif" title="' . $name . '" ' . 'alt="' . $name . '" /> </a> </td>';
             // restore/diff
             if ($stateBool) {
                 $name = $GLOBALS['LANG']->getLL('function.backupMgr.recover');
                 $content .= '<td class="bgColor4"> <a href="#" title="' . $name . '" ' . 'onclick="submitBackupForm(\'' . $filename . '\', \'' . $langFile . '\', ' . '0, 1, 0, 0);"> <img src="../res/images/recover.gif" title="' . $name . '" ' . 'alt="' . $name . '" /> </a> </td>';
                 $name = $GLOBALS['LANG']->getLL('function.backupMgr.diff.diff');
                 $content .= '<td class="bgColor4"> <a href="#" title="' . $name . '" ' . 'onclick="submitBackupForm(\'' . $filename . '\', \'' . $langFile . '\', ' . '0, 0, 0, 1);"> <img src="../res/images/diff.gif" title="' . $name . '" ' . 'alt="' . $name . '" /> </a> </td>';
                 $content .= '</tr>';
             } else {
                 $content .= '<td class="bgColor4">[-]</td><td class="bgColor4">[-]</td>';
             }
         }
     }
     $content .= '</tbody></table>';
     return $content;
 }
Пример #4
0
 /**
  * code for output generation of function "backupMgr"
  *
  * @throws LFException raised if meta array is empty (no backup files)
  * @return string generated html content
  */
 private function outputFuncBackupMgr()
 {
     // get vars
     $filename = t3lib_div::_POST('file');
     $origDiff = t3lib_div::_POST('origDiff');
     $extPath = $this->MOD_SETTINGS['extList'];
     // get output
     $metaArray = $this->backupObj->getMetaInfos(2);
     if (!count($metaArray)) {
         throw new LFException('failure.backup.noFiles', 1);
     }
     $content = tx_lfeditor_mod1_template::outputManageBackups($metaArray, $extPath);
     if ($origDiff) {
         // set backup file
         $metaArray = $this->backupObj->getMetaInfos(3);
         $informations = array('absPath' => typo3Lib::fixFilePath(PATH_site . '/' . $metaArray[$filename]['pathBackup']), 'relFile' => $filename);
         $this->backupObj->setVar($informations);
         // exec diff
         try {
             // read original file
             $this->initFileObject($this->backupObj->getVar('langFile'), PATH_site . '/' . $this->backupObj->getVar('extPath'), $this->MOD_SETTINGS['wsList']);
             // read backup file
             $this->backupObj->readFile();
             // get language data
             $origLang = $this->fileObj->getLocalLangData();
             $backupLocalLang = $this->backupObj->getLocalLangData();
             // get meta data
             $origMeta = $this->fileObj->getMetaData();
             $backupMeta = $this->backupObj->getMetaData();
             $diff = tx_lfeditor_mod1_functions::getBackupDiff(0, $origLang, $backupLocalLang);
             $metaDiff = tx_lfeditor_mod1_functions::getMetaDiff(0, $origMeta, $backupMeta);
         } catch (LFException $e) {
             return $e->getMessage() . $content;
         }
     }
     // generate diff
     if (is_array($diff)) {
         $content .= tx_lfeditor_mod1_template::outputManageBackupsDiff($diff, $metaDiff, $this->fileObj->getLocalLangData(), $this->backupObj->getLocalLangData(), $this->fileObj->getOriginLangData(), $this->backupObj->getOriginLangData(), $this->fileObj->getMetaData(), $this->backupObj->getMetaData());
     }
     return $content;
 }
 /**
  * prepares the final xll content
  *
  * @return array xll file as key and content as value
  */
 protected function prepareFileContents()
 {
     // convert all language values to utf-8
     if ($GLOBALS['TYPO3_CONF_VARS']['BE']['forceCharset'] != 'utf-8') {
         $this->localLang = typo3Lib::utf8($this->localLang, true, array('default'));
     }
     $mainFileContent = array('meta' => $this->prepareMeta());
     $languages = explode('|', TYPO3_languages);
     foreach ($languages as $langKey) {
         $mainFileContent = array_merge_recursive($mainFileContent, $this->getLangContent($this->localLang[$langKey], $langKey));
     }
     // prepare Content for the main file
     $languageFiles[$this->absFile] = $this->array2xml($mainFileContent, 'T3locallang');
     return $languageFiles;
 }
 /**
  * prepares the final content
  *
  * @return array language files as key and content as value
  */
 protected function prepareFileContents()
 {
     // convert all language values to utf-8
     if ($GLOBALS['TYPO3_CONF_VARS']['BE']['forceCharset'] != 'utf-8') {
         $this->localLang = typo3Lib::utf8($this->localLang, true, array('default'));
     }
     // prepare Content
     $mainFileContent = array('meta' => $this->prepareMeta());
     $languages = explode('|', TYPO3_languages);
     foreach ($languages as $lang) {
         // get content of localized and main file
         if ($this->checkLocalizedFile(basename($this->originLang[$lang]), $lang)) {
             if (is_array($this->localLang[$lang]) && count($this->localLang[$lang])) {
                 $languageFiles[$this->originLang[$lang]] .= $this->array2xml($this->getLangContent($this->localLang[$lang], $lang), 'T3locallangExt');
             }
             try {
                 $mainFileContent['data'][$lang] = typo3Lib::transTypo3File($this->originLang[$lang], false);
             } catch (Exception $e) {
                 if (!typo3Lib::checkFileLocation($this->originLang[$lang]) == 'l10n') {
                     $mainFileContent['data'][$lang] = $this->originLang[$lang];
                 }
             }
         } else {
             $mainFileContent = array_merge_recursive($mainFileContent, $this->getLangContent($this->localLang[$lang], $lang));
         }
     }
     // only a localized file?
     if ($this->checkLocalizedFile(basename($this->absFile), TYPO3_languages)) {
         return $languageFiles;
     }
     // prepare Content for the main file
     $languageFiles[$this->absFile] = $this->array2xml($mainFileContent, 'T3locallang');
     return $languageFiles;
 }
Пример #7
0
 /**
  * converts an absolute or relative typo3 style (EXT:) file path
  *
  * @throws Exception raised, if the conversion fails
  * @param string absolute file or an typo3 relative file (EXT:)
  * @param boolean generate to relative(false) or absolute file
  * @return string converted file path
  */
 public static function transTypo3File($file, $mode)
 {
     $extType['local'] = typo3Lib::pathLocalExt;
     $extType['global'] = typo3Lib::pathGlobalExt;
     $extType['system'] = typo3Lib::pathSysExt;
     // relative to absolute
     if ($mode) {
         if (strpos($file, 'EXT:') === false) {
             throw new Exception('no typo3 relative path "' . $file . '"');
         }
         $cleanFile = sgLib::trimPath('EXT:', $file);
         foreach ($extType as $type) {
             $path = typo3Lib::fixFilePath(PATH_site . '/' . $type . '/' . $cleanFile);
             if (is_dir(dirname($path))) {
                 return $path;
             }
         }
         throw new Exception('cant convert typo3 relative file "' . $file . '"');
     } else {
         foreach ($extType as $type) {
             if (strpos($file, $type) === false) {
                 continue;
             }
             return 'EXT:' . sgLib::trimPath($type, sgLib::trimPath(PATH_site, $file));
         }
         throw new Exception('cant convert absolute file "' . $file . '"');
     }
 }
 /**
  * sets informations
  *
  * structure:
  * $infos["absPath"] = absolute path to an extension or file
  * $infos["relFile"] = relative path with filename from "absPath"
  * $infos["workspace"] = workspace (base or xll)
  * $infos["fileType"] = file type (php or xml)
  * $infos["localLang"] = language data
  * $infos["originLang"] = origin language array
  * $infos["meta"] = meta data
  *
  * @param array informations (see above)
  * @return void
  */
 public function setVar($informations)
 {
     // path and file informations
     if (!empty($informations['absPath'])) {
         $this->absPath = typo3Lib::fixFilePath($informations['absPath'] . '/');
     }
     if (!empty($informations['relFile'])) {
         $this->relFile = typo3Lib::fixFilePath($informations['relFile']);
     }
     $this->absFile = $this->absPath . $this->relFile;
     // filetype and workspace
     if (!empty($informations['workspace'])) {
         $this->workspace = $informations['workspace'];
     }
     if (!empty($informations['fileType'])) {
         $this->fileType = $informations['fileType'];
     }
     // data arrays
     if (!count($this->localLang) && is_array($informations['localLang'])) {
         $this->localLang = $informations['localLang'];
     }
     if (!count($this->originLang) && is_array($informations['originLang'])) {
         $this->originLang = $informations['originLang'];
     }
     if (!count($this->meta) && is_array($informations['meta'])) {
         $this->meta = $informations['meta'];
     }
 }
 /**
  * prepares the final content
  *
  * @return array language files as key and content as value
  */
 protected function prepareFileContents()
 {
     // convert all language values from utf-8 to the original charset
     if ($GLOBALS['TYPO3_CONF_VARS']['BE']['forceCharset'] == 'utf-8') {
         $this->localLang = typo3Lib::utf8($this->localLang, false, array('default'));
     }
     // prepare Content
     unset($mainFileContent);
     $languages = explode('|', TYPO3_languages);
     foreach ($languages as $lang) {
         // get content of localized and main file
         if ($this->checkLocalizedFile(basename($this->originLang[$lang]), $lang)) {
             if (is_array($this->localLang[$lang]) && count($this->localLang[$lang])) {
                 $languageFiles[$this->originLang[$lang]] = $this->getHeader();
                 $languageFiles[$this->originLang[$lang]] .= $this->getLangContentLoc($this->localLang[$lang], $lang);
                 $languageFiles[$this->originLang[$lang]] .= $this->getFooter();
             }
             $mainFileContent .= "\t'{$lang}' => 'EXT',\n";
         } else {
             $mainFileContent .= $this->getLangContent($this->localLang[$lang], $lang);
         }
     }
     // only a localized file?
     if ($this->checkLocalizedFile(basename($this->absFile), TYPO3_languages)) {
         return $languageFiles;
     }
     // prepare Content for the main file
     $languageFiles[$this->absFile] = $this->getHeader();
     $languageFiles[$this->absFile] .= '$LFMETA = array (' . "\n";
     $languageFiles[$this->absFile] .= $this->prepareMeta();
     $languageFiles[$this->absFile] .= ');' . "\n\n";
     $languageFiles[$this->absFile] .= '$LOCAL_LANG = array (' . "\n";
     $languageFiles[$this->absFile] .= $mainFileContent;
     $languageFiles[$this->absFile] .= ');' . "\n";
     $languageFiles[$this->absFile] .= $this->getFooter();
     return $languageFiles;
 }
 /**
  * extends writing of language files for xll
  *
  * @throws LFException raised if parent method fails or the xll file cant be created
  * @return boolean always true
  */
 public function writeFile()
 {
     // create xll directory
     try {
         sgLib::createDir($this->absPath, PATH_site);
     } catch (Exception $e) {
         throw new LFException('failure.failure', 0, '(' . $e->getMessage() . ')');
     }
     // write xll file
     try {
         parent::writeFile();
     } catch (LFException $e) {
         throw $e;
     }
     // set only new values in localconf if something changed
     $relXLLFile = sgLib::trimPath(PATH_site, $this->absFile);
     if ($GLOBALS['TYPO3_CONF_VARS']['BE']['XLLfile'][$this->typo3RelFile] == $relXLLFile) {
         return true;
     }
     try {
         $fileRef = substr($this->typo3RelFile, 0, strrpos($this->typo3RelFile, '.'));
         $addLine = '$TYPO3_CONF_VARS[\'BE\'][\'XLLfile\'][\'' . $fileRef . '.xml\']';
         typo3Lib::writeLocalconf($addLine, $relXLLFile);
         $GLOBALS['TYPO3_CONF_VARS']['BE']['XLLfile'][$fileRef . '.xml'] = $relXLLFile;
         // create alternative
         $addLine = '$TYPO3_CONF_VARS[\'BE\'][\'XLLfile\'][\'' . $fileRef . '.php\']';
         typo3Lib::writeLocalconf($addLine, $relXLLFile);
         $GLOBALS['TYPO3_CONF_VARS']['BE']['XLLfile'][$fileRef . '.php'] = $relXLLFile;
     } catch (Exception $e) {
         throw new LFException('failure.failure', 0, '(' . $e->getMessage() . ')');
     }
     return true;
 }