Example #1
0
    }
    if ($blnResult) {
        foreach (NarroImportStatistics::$arrStatistics as $strName => $strValue) {
            if ($strName == 'Start time') {
                $strValue = date('Y-m-d H:i:s', $strValue);
            }
            if ($strName == 'End time') {
                $strValue = date('Y-m-d H:i:s', $strValue);
            }
            if ($strValue != 0) {
                NarroLogger::LogInfo(stripslashes($strName) . ': ' . $strValue);
            }
        }
    }
} elseif (in_array('--export', $argv)) {
    $objNarroImporter = new NarroProjectImporter();
    $objNarroImporter->SkipUntranslated = (bool) array_search('--skip-untranslated', $argv);
    NarroPluginHandler::$blnEnablePlugins = !(bool) array_search('--disable-plugins', $argv);
    if (!NarroPluginHandler::$blnEnablePlugins) {
        NarroLogger::LogInfo('Plugins deactivated');
    }
    if (array_search('--exported-suggestion', $argv)) {
        $objNarroImporter->ExportedSuggestion = $argv[array_search('--exported-suggestion', $argv) + 1];
    }
    if (array_search('--export-author-list', $argv) !== false) {
        $objNarroImporter->ExportAuthorList = $argv[array_search('--export-author-list', $argv) + 1];
    }
    if (array_search('--project', $argv) !== false) {
        $intProjectId = $argv[array_search('--project', $argv) + 1];
    }
    if (array_search('--template-lang', $argv) !== false) {
 public function btnImport_Click($strFormId, $strControlId, $strParameter)
 {
     if (!QApplication::HasPermissionForThisLang('Can import project', $this->objProject->ProjectId)) {
         return false;
     }
     $strProcLogFile = __TMP_PATH__ . '/' . $this->objProject->ProjectId . '-' . QApplication::$TargetLanguage->LanguageCode . '-import-process.log';
     $strProcPidFile = __TMP_PATH__ . '/' . $this->objProject->ProjectId . '-' . QApplication::$TargetLanguage->LanguageCode . '-import-process.pid';
     $strProgressFile = __TMP_PATH__ . '/import-' . $this->objProject->ProjectId . '-' . QApplication::$TargetLanguage->LanguageCode;
     if ($strParameter == 1) {
         if (NarroUtils::IsProcessRunning('import', $this->objProject->ProjectId)) {
             $this->objImportProgress->Translated = NarroProgress::GetProgress($this->objProject->ProjectId, 'import');
             $this->objImportProgress->MarkAsModified();
         } else {
             $this->lblImport->Text = t('Import finished.');
             if (QApplication::$UseAjax) {
                 QApplication::ExecuteJavaScript('if (typeof lastImportId != \'undefined\') clearInterval(lastImportId)');
             }
             if (file_exists($strProcLogFile) && filesize($strProcLogFile)) {
                 NarroLogger::LogInfo(sprintf('There are messages from the background process: %s', file_get_contents($strProcLogFile)));
             }
             if (file_exists($strProcLogFile)) {
                 unlink($strProcLogFile);
             }
             if (file_exists($strProcPidFile)) {
                 unlink($strProcPidFile);
             }
             if (file_exists($strProgressFile)) {
                 unlink($strProgressFile);
             }
             $this->lblImport->Visible = true;
             $this->btnImport->Visible = true;
             $this->btnKillProcess->Visible = false;
             $this->objImportProgress->Translated = 0;
             $this->objImportProgress->Visible = false;
         }
         $this->pnlLogViewer->MarkAsModified();
     } elseif ($strParameter == 2) {
         $this->pnlLogViewer->ProjectId = $this->objProject->ProjectId;
         $this->pnlLogViewer->LanguageId = QApplication::GetLanguageId();
         $this->pnlLogViewer->DateStart = QDateTime::Now();
         NarroProgress::ClearProgressFileName($this->objProject->ProjectId, 'import');
         set_time_limit(0);
         if (file_exists($strProcLogFile)) {
             unlink($strProcLogFile);
         }
         if (file_exists($strProcPidFile)) {
             unlink($strProcPidFile);
         }
         if (file_exists($strProgressFile)) {
             unlink($strProgressFile);
         }
         $objNarroImporter = new NarroProjectImporter();
         /**
          * Get boolean options
          */
         $objNarroImporter->CheckEqual = true;
         $objNarroImporter->Approve = $this->chkApproveImportedTranslations->Checked;
         $objNarroImporter->ApproveAlreadyApproved = !$this->chkApproveOnlyNotApproved->Checked;
         $objNarroImporter->OnlySuggestions = !$this->chkImportSourceTexts->Checked;
         $objNarroImporter->Project = $this->objProject;
         $objNarroImporter->ImportUnchangedFiles = $this->chkImportUnchangedFiles->Checked;
         $objNarroImporter->User = QApplication::$User;
         $objNarroImporter->TargetLanguage = QApplication::$TargetLanguage;
         $objNarroImporter->SourceLanguage = NarroLanguage::LoadByLanguageCode(NarroLanguage::SOURCE_LANGUAGE_CODE);
         try {
             $objNarroImporter->TranslationPath = $this->pnlTranslationsSource->Directory;
             $objNarroImporter->TemplatePath = $this->objProject->DefaultTemplatePath;
         } catch (Exception $objEx) {
             NarroLogger::LogError(sprintf('An error occurred during import: %s', $objEx->getMessage()));
             $this->lblImport->Text = sprintf(t('Import failed: %s'), $objEx->getMessage());
             return false;
         }
         try {
             $objNarroImporter->ImportProject();
         } catch (Exception $objEx) {
             NarroLogger::LogError(sprintf('An error occurred during import: %s', $objEx->getMessage()));
             $this->lblImport->Text = sprintf(t('Import failed: %s'), $objEx->getMessage());
         }
         $this->lblImport->Visible = true;
         $this->btnImport->Visible = true;
         $this->btnKillProcess->Visible = false;
         $this->objImportProgress->Visible = false;
         $this->pnlLogViewer->MarkAsModified();
     } else {
         $this->pnlLogViewer->ProjectId = $this->objProject->ProjectId;
         $this->pnlLogViewer->LanguageId = QApplication::GetLanguageId();
         $this->pnlLogViewer->DateStart = QDateTime::Now();
         NarroProgress::ClearProgressFileName($this->objProject->ProjectId, 'import');
         $this->pnlLogViewer->MarkAsModified();
         $this->btnImport->Visible = false;
         $this->btnKillProcess->Visible = QApplication::HasPermission('Administrator', $this->objProject, QApplication::$TargetLanguage->LanguageCode) && !$this->btnImport->Visible;
         $this->objImportProgress->Visible = true;
         $this->objImportProgress->Translated = 0;
         $this->lblImport->Text = '';
         try {
             $strCommand = sprintf(__PHP_CLI_PATH__ . ' ' . escapeshellarg(sprintf('%s/includes/narro/importer/narro-cli.php', __DOCROOT__ . __SUBDIRECTORY__)) . ' --import --minloglevel 3 --project %d --user %d --check-equal ' . ($this->chkApproveImportedTranslations->Checked ? '--approve ' : '') . ($this->chkImportUnchangedFiles->Checked ? '--import-unchanged-files ' : '') . ($this->chkApproveOnlyNotApproved->Checked ? '' : '--approve-already-approved ') . (!$this->chkImportSourceTexts->Checked || !QApplication::HasPermission('Can import project', $this->objProject->ProjectId) ? '--only-suggestions ' : '') . ' --template-lang %s --translation-lang %s --template-directory %s --translation-directory %s', (int) $this->objProject->ProjectId, (int) QApplication::$User->UserId, escapeshellarg(NarroLanguage::SOURCE_LANGUAGE_CODE), escapeshellarg(QApplication::$TargetLanguage->LanguageCode), escapeshellarg($this->objProject->DefaultTemplatePath), escapeshellarg($this->pnlTranslationsSource->Directory));
         } catch (Exception $objEx) {
             NarroLogger::LogError(sprintf('An error occurred during import: %s', $objEx->getMessage()));
             $this->lblImport->Text = sprintf(t('Import failed: %s'), $objEx->getMessage());
             $this->lblImport->Visible = true;
             $this->btnImport->Visible = true;
             $this->btnKillProcess->Visible = QApplication::HasPermission('Administrator', $this->objProject, QApplication::$TargetLanguage->LanguageCode) && !$this->btnImport->Visible;
             $this->objImportProgress->Translated = 0;
             $this->objImportProgress->Visible = false;
             $this->pnlLogViewer->MarkAsModified();
             return false;
         }
         if (file_exists($strProcLogFile) && is_writable($strProcLogFile)) {
             unlink($strProcLogFile);
         }
         NarroUtils::Exec($strCommand, $arrOutput, $arrError, $intRetVal, true);
         if ($intRetVal == 0) {
             if (QApplication::$UseAjax) {
                 QApplication::ExecuteJavaScript(sprintf('lastImportId = setInterval("qc.pA(\'%s\', \'%s\', \'QClickEvent\', \'1\')", %d);', $strFormId, $strControlId, 2000));
             } else {
                 $this->btnImport_Click($strFormId, $strControlId, 1);
             }
         } else {
             $this->objImportProgress->Visible = false;
             NarroLogger::LogError('Failed to launch a background process, there will be no progress displayed, and it might take a while, please wait for more messages');
             $this->pnlLogViewer->MarkAsModified();
             /**
              * try importing without launching a background process
              */
             if (QApplication::$UseAjax) {
                 QApplication::ExecuteJavaScript(sprintf('lastImportId = setTimeout("qc.pA(\'%s\', \'%s\', \'QClickEvent\', \'2\')", %d);', $strFormId, $strControlId, 2000));
             } else {
                 $this->btnImport_Click($strFormId, $strControlId, 2);
             }
         }
     }
 }
Example #3
0
     for ($i = 1; $i < 11; $i++) {
         if ($intLangIdx * 10 / $intLangCnt <= $i) {
             $strLanguageProgress .= '-';
         } else {
             $strLanguageProgress .= '+';
         }
     }
     $objDateSpan = new QDateTimeSpan(time() - $intStartTime);
     printf("\rProject %s [%s], %d/%d, language %s, [%s], %d/%d, started %s ago               ", $objProject->ProjectName, $strProjectProgress, $intProjIdx, $intProjCnt, $objLanguage->LanguageName, $strLanguageProgress, $intLangIdx, $intLangCnt, $objDateSpan->SimpleDisplay());
     @ob_flush();
 }
 QApplication::$TargetLanguage = $objLanguage;
 $objProjectProgress = NarroProjectProgress::LoadByProjectIdLanguageId($objProject->ProjectId, $objLanguage->LanguageId);
 if (!$objProjectProgress || $objProjectProgress->Active) {
     try {
         $objNarroImporter = new NarroProjectImporter();
         /**
          * Get boolean options
          */
         $objNarroImporter->CheckEqual = !(bool) array_search('--do-not-check-equal', $argv);
         $objNarroImporter->ImportSuggestions = !(bool) array_search('--no-suggestions', $argv);
         $objNarroImporter->Approve = (bool) array_search('--approve', $argv);
         $objNarroImporter->ApproveAlreadyApproved = (bool) array_search('--approve-already-approved', $argv);
         $objNarroImporter->OnlySuggestions = (bool) array_search('--only-suggestions', $argv);
         $objNarroImporter->ImportUnchangedFiles = (bool) array_search('--import-unchanged-files', $argv);
         NarroPluginHandler::$blnEnablePlugins = !(bool) array_search('--disable-plugins', $argv);
         $strSourceLanguage = NarroLanguage::SOURCE_LANGUAGE_CODE;
         if (array_search('--user', $argv) !== false) {
             $intUserId = $argv[array_search('--user', $argv) + 1];
         }
         /**
 public function btnExport_Click($strFormId, $strControlId, $strParameter)
 {
     if (!QApplication::HasPermissionForThisLang('Can export project', $this->objProject->ProjectId)) {
         return false;
     }
     $strProcLogFile = __TMP_PATH__ . '/' . $this->objProject->ProjectId . '-' . QApplication::$TargetLanguage->LanguageCode . '-export-process.log';
     if ($strParameter == 1) {
         if (NarroUtils::IsProcessRunning('export', $this->objProject->ProjectId)) {
             $this->objExportProgress->Translated = NarroProgress::GetProgress($this->objProject->ProjectId, 'export');
             $this->objExportProgress->MarkAsModified();
         } else {
             $this->lblExport->Text = t('Export finished.');
             if (QApplication::$UseAjax) {
                 QApplication::ExecuteJavaScript('if (typeof lastExportId != \'undefined\') clearInterval(lastExportId)');
             }
             if (file_exists($strProcLogFile) && filesize($strProcLogFile)) {
                 NarroLogger::LogInfo(sprintf('There are messages from the background process: %s', file_get_contents($strProcLogFile)));
             }
             $this->lblExport->Visible = true;
             $this->btnExport->Visible = true;
             $this->btnKillProcess->Visible = false;
             $this->objExportProgress->Translated = 0;
             $this->objExportProgress->Visible = false;
             QApplication::$PluginHandler->DisplayExportMessage($this->objProject);
             if (is_array(QApplication::$PluginHandler->PluginReturnValues)) {
                 foreach (QApplication::$PluginHandler->PluginReturnValues as $strPluginName => $mixReturnValue) {
                     if (count($mixReturnValue) == 2 && $mixReturnValue[0] instanceof NarroProject && is_string($mixReturnValue[1]) && $mixReturnValue[1] != '') {
                         $this->lblExport->Text .= sprintf('<br /><span class="info"><b>%s</b>: %s</span>', $strPluginName, nl2br($mixReturnValue[1]));
                     }
                 }
             }
         }
         $this->pnlLogViewer->MarkAsModified();
     } elseif ($strParameter == 2) {
         $this->pnlLogViewer->DateStart = QDateTime::Now();
         $this->pnlLogViewer->ProjectId = $this->objProject->ProjectId;
         $this->pnlLogViewer->LanguageId = QApplication::GetLanguageId();
         NarroProgress::ClearProgressFileName($this->objProject->ProjectId, 'import');
         set_time_limit(0);
         if ($this->chkCleanDirectory->Checked) {
             NarroUtils::RecursiveDelete($this->objProject->DefaultTranslationPath . '/*');
         }
         $objNarroImporter = new NarroProjectImporter();
         /**
          * Get boolean options
          */
         $objNarroImporter->ExportedSuggestion = $this->lstExportSuggestionType->SelectedValue;
         $objNarroImporter->Project = $this->objProject;
         $objNarroImporter->ExportAuthorList = $this->txtAuthor->Text;
         $objNarroImporter->User = QApplication::$User;
         $objNarroImporter->TargetLanguage = QApplication::$TargetLanguage;
         $objNarroImporter->SourceLanguage = NarroLanguage::LoadByLanguageCode(NarroLanguage::SOURCE_LANGUAGE_CODE);
         try {
             $objNarroImporter->TranslationPath = $this->objProject->DefaultTranslationPath;
             $objNarroImporter->TemplatePath = $this->objProject->DefaultTemplatePath;
         } catch (Exception $objEx) {
             NarroLogger::LogError(sprintf('An error occurred during export: %s', $objEx->getMessage()));
             $this->lblExport->Text = t('Export failed.');
         }
         try {
             $objNarroImporter->ExportProject();
         } catch (Exception $objEx) {
             NarroLogger::LogError(sprintf('An error occurred during export: %s', $objEx->getMessage()));
             $this->lblExport->Text = t('Export failed.');
         }
         $this->lblExport->Visible = true;
         $this->btnExport->Visible = true;
         $this->btnKillProcess->Visible = false;
         $this->objExportProgress->Visible = false;
         $this->pnlLogViewer->MarkAsModified();
     } else {
         $this->pnlLogViewer->DateStart = QDateTime::Now();
         $this->pnlLogViewer->ProjectId = $this->objProject->ProjectId;
         $this->pnlLogViewer->LanguageId = QApplication::GetLanguageId();
         if ($this->chkCleanDirectory->Checked) {
             NarroUtils::RecursiveDelete($this->objProject->DefaultTranslationPath . '/*');
         }
         $this->btnExport->Visible = false;
         $this->btnKillProcess->Visible = $this->btnKillProcess->Visible = QApplication::HasPermission('Administrator', $this->objProject, QApplication::$TargetLanguage->LanguageCode);
         $this->objExportProgress->Visible = true;
         $this->objExportProgress->Translated = 0;
         $this->lblExport->Text = '';
         try {
             $strCommand = sprintf('%s %s --export --project %d --user %d --template-lang %s --translation-lang %s --template-directory %s --translation-directory %s --exported-suggestion %d --export-author-list %s', __PHP_CLI_PATH__, escapeshellarg(sprintf('%s/includes/narro/importer/narro-cli.php', __DOCROOT__ . __SUBDIRECTORY__)), (int) $this->objProject->ProjectId, (int) QApplication::$User->UserId, escapeshellarg(NarroLanguage::SOURCE_LANGUAGE_CODE), escapeshellarg(QApplication::$TargetLanguage->LanguageCode), escapeshellarg($this->objProject->DefaultTemplatePath), escapeshellarg($this->objProject->DefaultTranslationPath), (int) $this->lstExportSuggestionType->SelectedValue, escapeshellarg($this->txtAuthor->Text));
         } catch (Exception $objEx) {
             NarroLogger::LogError(sprintf('An error occurred during export: %s', $objEx->getMessage()));
             $this->lblExport->Text = t('Export failed.');
             $this->lblExport->Visible = true;
             $this->btnExport->Visible = true;
             $this->btnKillProcess->Visible = false;
             $this->objExportProgress->Translated = 0;
             $this->objExportProgress->Visible = false;
             $this->pnlLogViewer->MarkAsModified();
             return false;
         }
         if (file_exists($strProcLogFile) && is_writable($strProcLogFile)) {
             unlink($strProcLogFile);
         }
         $mixProcess = proc_open("{$strCommand} &", array(2 => array("file", $strProcLogFile, 'a')), $foo);
         if ($mixProcess) {
             if (QApplication::$UseAjax) {
                 QApplication::ExecuteJavaScript(sprintf('lastExportId = setInterval("qc.pA(\'%s\', \'%s\', \'QClickEvent\', \'1\')", %d);', $strFormId, $strControlId, 2000));
             } else {
                 $this->btnExport_Click($strFormId, $strControlId, 1);
             }
         } else {
             $this->objExportProgress->Visible = false;
             NarroLogger::LogError('Failed to launch a background process, there will be no progress displayed, and it might take a while, please wait for more messages');
             $this->pnlLogViewer->MarkAsModified();
             /**
              * try exporting without launching a background process
              */
             if (QApplication::$UseAjax) {
                 QApplication::ExecuteJavaScript(sprintf('lastExportId = setTimeout("qc.pA(\'%s\', \'%s\', \'QClickEvent\', \'2\')", %d);', $strFormId, $strControlId, 2000));
             } else {
                 $this->btnExport_Click($strFormId, $strControlId, 2);
             }
         }
     }
 }