Ejemplo n.º 1
0
 public static function finishLookingForPhraseTitles($addOnPhrases, XenForo_Model_Phrase $phraseModel)
 {
     static $whitelistedPrefixes = array('admin_navigation_', 'admin_permission_', 'cron_entry_', 'option_', 'permission_', 'style_property_');
     $foundPhraseTitles = DevHelper_Helper_Phrase::getFoundPhraseTitles();
     $usedPhraseTitles = array();
     $foundButUnusedPhraseTitles = array();
     foreach ($addOnPhrases as $phrase) {
         $used = in_array($phrase['title'], $foundPhraseTitles);
         if (!$used) {
             foreach ($whitelistedPrefixes as $prefix) {
                 if (strpos($phrase['title'], $prefix) === 0) {
                     $used = true;
                     break;
                 }
             }
         }
         if (!$used) {
             echo "Add-on phrase not used: <span style='color: red'>{$phrase['title']}</span>\n";
         } else {
             $usedPhraseTitles[] = $phrase['title'];
         }
     }
     foreach ($foundPhraseTitles as $phraseTitle) {
         if (!in_array($phraseTitle, $usedPhraseTitles)) {
             $foundButUnusedPhraseTitles[] = $phraseTitle;
         }
     }
     if (!empty($foundButUnusedPhraseTitles)) {
         $foundButUnusedPhrases = $phraseModel->getPhrasesInLanguageByTitles($foundButUnusedPhraseTitles);
         foreach ($foundButUnusedPhraseTitles as $phraseTitle) {
             $good = true;
             if (empty($foundButUnusedPhrases[$phraseTitle])) {
                 echo "Phrase not found: <span style='color: red'>{$phraseTitle}</span>\n";
                 $good = false;
             }
             if ($good) {
                 $foundButUnusedPhrase = $foundButUnusedPhrases[$phraseTitle];
                 if (!empty($foundButUnusedPhrase['addon_id']) and $foundButUnusedPhrase['addon_id'] !== 'XenForo') {
                     echo "Phrase from another add-on: <span style='color: red'>{$phraseTitle}</span> ({$foundButUnusedPhrase['addon_id']})\n";
                     $good = false;
                 }
             }
             if (!$good) {
                 $phraseUsages = self::getPhraseUsages($phraseTitle);
                 foreach ($phraseUsages as $phraseUsagePath => $phraseUsageLine) {
                     echo "    <span style='color: #ddd'>Used in {$phraseUsagePath}:{$phraseUsageLine}</span>\n";
                 }
             }
         }
     }
 }
Ejemplo n.º 2
0
 public function actionFileExport()
 {
     $addOnId = $this->_input->filterSingle('addon_id', XenForo_Input::STRING);
     $addOn = $this->_getAddOnOrError($addOnId);
     $config = $this->_getConfigModel()->loadAddOnConfig($addOn);
     $exportPath = $config->getExportPath();
     if ($exportPath === false) {
         return $this->responseNoPermission();
     }
     DevHelper_Helper_Phrase::startLookingForPhraseTitles();
     DevHelper_Helper_Xfcp::startLookingForXfcpClasses();
     echo '<pre>';
     DevHelper_Generator_File::fileExport($addOn, $config, $exportPath);
     /** @var XenForo_Model_Template $templateModel */
     $templateModel = $this->getModelFromCache('XenForo_Model_Template');
     $templates = $templateModel->getMasterTemplatesInAddOn($addOn['addon_id']);
     foreach ($templates as $template) {
         /** @var DevHelper_XenForo_DataWriter_Template $dw */
         $dw = XenForo_DataWriter::create('XenForo_DataWriter_Template');
         $dw->setExistingData($template, true);
         if ($dw->DevHelper_saveTemplate()) {
             echo "Saved template {$template['title']}\n";
         }
     }
     /** @var XenForo_Model_Phrase $phraseModel */
     $phraseModel = $this->getModelFromCache('XenForo_Model_Phrase');
     $phrases = $phraseModel->getMasterPhrasesInAddOn($addOnId);
     DevHelper_Helper_Phrase::finishLookingForPhraseTitles($phrases, $phraseModel);
     DevHelper_Helper_Xfcp::finishLookingForXfcpClasses($addOn, $config);
     echo '</pre>';
     DevHelper_Generator_Code_XenForoConfig::updateConfig('development.default_addon', $addOn['addon_id']);
     die('Done');
 }
Ejemplo n.º 3
0
 protected static function _fileExport($entry, &$exportPath, &$rootPath, $options)
 {
     if (empty($entry)) {
         return;
     }
     $relativePath = trim(str_replace($rootPath, '', $entry), '/');
     if (in_array($relativePath, $options['excludes'])) {
         echo "<span style='color: #ddd'>Excluded       {$relativePath}</span>\n";
         return;
     }
     foreach ($options['excludeRegExs'] as $excludeRegEx) {
         if (preg_match($excludeRegEx, $relativePath)) {
             echo "<span style='color: #ddd'>RegExcluded    {$relativePath}</span>\n";
             return;
         }
     }
     if (is_dir($entry)) {
         echo "<span style='color: #ddd'>Browsing       {$relativePath}</span>\n";
         $children = array();
         $dh = opendir($entry);
         while ($child = readdir($dh)) {
             if (substr($child, 0, 1) === '.') {
                 // ignore . (current directory)
                 // ignore .. (parent directory)
                 // ignore hidden files (dot files/directories)
                 continue;
             }
             $children[] = $child;
         }
         foreach ($children as $child) {
             if (!empty($options['force'])) {
                 $options['force'] = false;
             }
             // reset `force` option for children
             self::_fileExport($entry . '/' . $child, $exportPath, $rootPath, $options);
         }
     } elseif (is_file($entry)) {
         $ext = XenForo_Helper_File::getFileExtension($entry);
         if (!empty($options['force']) || in_array($ext, $options['extensions']) && strpos(basename($entry), '.') !== 0 || in_array(strtolower(basename($entry)), $options['filenames_lowercase'])) {
             if ($options['addon_id'] == 'devHelper') {
                 $isDevHelper = strpos($entry, 'DevHelper/DevHelper') !== false;
             } else {
                 $isDevHelper = strpos($entry, 'DevHelper') !== false;
             }
             if (!$isDevHelper) {
                 $entryExportPath = $exportPath . '/' . $relativePath;
                 if ($ext === 'php') {
                     DevHelper_Helper_ShippableHelper::checkForUpdate($entry);
                 }
                 $contents = self::fileGetContents($entry);
                 if (!empty($contents)) {
                     if ($ext === 'php') {
                         DevHelper_Helper_Phrase::parsePhpForPhraseTracking($relativePath, $contents);
                         DevHelper_Helper_Xfcp::parsePhpForXfcpClass($relativePath, $contents);
                     }
                     $result = self::writeFile($entryExportPath, $contents, false, false);
                     if ($result === true) {
                         echo "Exporting      {$relativePath} OK\n";
                     } elseif ($result === 'skip') {
                         echo "<span style='color: #ddd'>Exporting      {$relativePath} SKIPPED</span>\n";
                     }
                 }
             }
         }
     }
 }