/** * 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; }
/** * 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; }