/**
  * 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;
 }
 /**
  * generates output of a language diff
  *
  * @param array language content (difference between backup and origin)
  * @param array meta content (difference between backup and origin)
  * @param array original language content
  * @param array backup language content
  * @param array original origins of each language
  * @param array backup origins of each language
  * @param array original meta content
  * @param array backup meta content
  * @return string output (html code)
  */
 public static function outputManageBackupsDiff($diff, $metaDiff, $origLang, $backupLang, $origOriginLang, $backupOriginLang, $origMeta, $backupMeta)
 {
     // begin fieldset
     $content = '<fieldset class="tx-lfeditor-fieldset bgColor5">';
     $content .= '<legend class="bgColor3">' . $GLOBALS['LANG']->getLL('function.backupMgr.diff.diff') . '</legend>';
     // hint
     $content .= '<p class="tx-lfeditor-goodMarkup"> xyz -- ' . $GLOBALS['LANG']->getLL('function.backupMgr.diff.goodMarkupHint') . '</p>';
     $content .= '<p class="tx-lfeditor-badMarkup"> xyz -- ' . $GLOBALS['LANG']->getLL('function.backupMgr.diff.badMarkupHint') . '</p>';
     // meta entry
     if (count($metaDiff)) {
         $content .= '<fieldset class="bgColor4"> <legend class="bgColor3">' . $GLOBALS['LANG']->getLL('function.backupMgr.diff.meta') . '</legend> <dl>';
         foreach ($metaDiff as $label => $value) {
             $value = htmlspecialchars($value);
             if (!isset($backupMeta[$label])) {
                 // constant added
                 $content .= '<dt class="tx-lfeditor-goodMarkup">' . $label . '</dt>';
             } elseif (!isset($origMeta[$label])) {
                 // constant lost
                 $content .= '<dt class="tx-lfeditor-badMarkup">' . $label . '</dt>';
             } else {
                 // constant normal
                 $content .= '<dt>' . $label . '</dt>';
             }
             $content .= '<dd>' . $value . '</dd>';
         }
         $content .= '</dl> </fieldset>';
     }
     // loop each language entry
     foreach ($diff as $langKey => $data) {
         if (!count($data) && $origOriginLang[$langKey] == $backupOriginLang[$langKey]) {
             continue;
         }
         // get state
         if ($backupOriginLang[$langKey] != $backupOriginLang['default']) {
             try {
                 $state = $GLOBALS['LANG']->getLL('lang.splitted') . ' -- ';
                 $state .= typo3Lib::transTypo3File($backupOriginLang[$langKey], false);
             } catch (Exception $e) {
                 $state .= $backupOriginLang[$langKey];
             }
         } else {
             $state = $GLOBALS['LANG']->getLL('lang.merged');
         }
         $content .= '<fieldset class="bgColor4"> <legend class="bgColor3">' . $langKey . ' (' . $state . ')</legend> <dl>';
         foreach ($data as $label => $value) {
             $value = htmlspecialchars($value);
             if (!isset($backupLang[$langKey][$label])) {
                 // constant added
                 $content .= '<dt class="tx-lfeditor-goodMarkup">' . $label . '</dt>';
             } elseif (!isset($origLang[$langKey][$label])) {
                 // constant lost
                 $content .= '<dt class="tx-lfeditor-badMarkup">' . $label . '</dt>';
             } else {
                 // constant normal
                 $content .= '<dt>' . $label . '</dt>';
             }
             $content .= '<dd>' . $value . '</dd>';
         }
         $content .= '</dl> </fieldset>';
     }
     $content .= '</fieldset>';
     return $content;
 }
Ejemplo n.º 3
0
 /**
  * code for all actions of function "general"
  *
  * @throws LFException raised if something failes
  * @return boolean true or false (only false if some files should be mailed)
  */
 private function actionFuncGeneral()
 {
     // get vars
     $splitFile = t3lib_div::_POST('splitFile');
     $transFile = t3lib_div::_POST('transFile');
     $langModes = t3lib_div::_POST('langModes');
     $language = t3lib_div::_POST('language');
     $metaArray = t3lib_div::_POST('meta');
     $mailIt = t3lib_div::_POST('mailIt');
     $sendMail = t3lib_div::_POST('sendMail');
     $emailToAddress = t3lib_div::_POST('mailItEmailToAddress');
     $emailFromAddress = t3lib_div::_POST('mailItEmailFromAddress');
     $emailSubject = t3lib_div::_POST('mailItEmailSubject');
     $emailText = t3lib_div::_POST('mailItEmailText');
     // redirect
     if (!empty($language)) {
         header("Location: http://" . $_SERVER['HTTP_HOST'] . rtrim($_SERVER['PHP_SELF'], '/\\') . '?SET[langList]=' . $language . '&SET[function]=const.treeview');
     }
     // zip and mail selected languages
     if (is_array($mailIt)) {
         if (!$sendMail) {
             return false;
         }
         $zipFile = new zipfile();
         foreach ($mailIt as $langKey => $in) {
             $origin = $this->fileObj->getOriginLangData($langKey);
             try {
                 $saveOrigin = typo3Lib::transTypo3File($origin, false);
                 $saveOrigin = str_replace('EXT:', '', $saveOrigin);
             } catch (Exception $e) {
                 $saveOrigin = substr($origin, strlen(PATH_site));
             }
             $zipFile->addFile(file_get_contents($origin), $saveOrigin);
         }
         $dumpBuffer = $zipFile->file();
         // try to send mail
         try {
             sgLib::sendMail($emailSubject, $emailText, $emailFromAddress, $emailToAddress, $dumpBuffer, 'files.zip');
         } catch (Exception $e) {
             throw new LFException('failure.failure', 0, '(' . $e->getMessage() . ')');
         }
     }
     // write meta informations
     try {
         $this->execWrite(array(), $metaArray);
     } catch (LFException $e) {
         throw $e;
     }
     // split or merge
     if ($splitFile == 1 || $splitFile == 2 || $splitFile == 3 || is_array($langModes)) {
         // set vars
         if ($splitFile != 1 && $splitFile != 2 && $splitFile != 3) {
             $splitFile = 0;
         }
         $langKeys = tx_lfeditor_mod1_functions::buildLangArray();
         // generate langModes
         foreach ($langKeys as $langKey) {
             if (!isset($langModes[$langKey])) {
                 $langModes[$langKey] = $splitFile;
             }
         }
         // exec split or merge
         try {
             $this->execSplitFile($langModes);
         } catch (LFException $e) {
             throw $e;
         }
         // reinitialize file object
         try {
             $this->initFileObject($this->MOD_SETTINGS['langFileList'], $this->MOD_SETTINGS['extList'], $this->MOD_SETTINGS['wsList']);
         } catch (LFException $e) {
             throw $e;
         }
     }
     // transform file
     try {
         if (!empty($transFile) && $this->fileObj->getVar('fileType') != $transFile) {
             $newFile = sgLib::setFileExtension($transFile, $this->fileObj->getVar('relFile'));
             $this->execTransform($transFile, $newFile);
             if ($this->MOD_SETTINGS['wsList'] != 'xll') {
                 header("Location: http://" . $_SERVER['HTTP_HOST'] . rtrim($_SERVER['PHP_SELF'], '/\\') . '?SET[langFileList]=' . $newFile);
             }
         }
     } catch (LFException $e) {
         throw $e;
     }
     return true;
 }
 /**
  * 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);
 }
 /**
  * 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;
 }