Netson\L4gettext\Commands\ExtractCommand::fire PHP Метод

fire() публичный Метод

Execute the console command.
public fire ( ) : void
Результат void
    public function fire()
    {
        /**
         * check if any php files exist in the input folder
         */
        $input_folder = app_path() . DIRECTORY_SEPARATOR . $this->option('input_folder') . DIRECTORY_SEPARATOR;
        $views_folder = app_path() . DIRECTORY_SEPARATOR . $this->option('views_folder') . DIRECTORY_SEPARATOR;
        $additional_folders = base_path() . DIRECTORY_SEPARATOR;
        /**
         * determine file pattern to search for
         */
        $pattern = getGlobPattern($this->option("levels"));
        $phpFiles = $views_folder . "{" . $pattern . "}*.php";
        /**
         * Merge the php files in compiled folder as well as views folder
         * The array_filter weeds out the blade templates from view since they are already
         * in the compiled folder
         */
        $templates = array_merge(File::glob($input_folder . "*.php"), array_filter(File::glob($phpFiles, GLOB_BRACE), function ($path) {
            return substr_count($path, 'blade.php') === 0;
        }));
        /**
         * sanity check
         */
        if (!is_array($this->option("additional_input_folders"))) {
            throw new \Netson\L4gettext\AdditionalInputFoldersNotArrayException("The additional_input_folders option should be an array, [" . gettype($this->option("additional_input_folders")) . "] given");
        }
        /**
         * fetch any additional input folders from the command line or config option
         */
        foreach ($this->option("additional_input_folders") as $additional_folder) {
            // sanity check
            if (!File::isDirectory($additional_folder)) {
                throw new \Netson\L4gettext\AdditionalInputFolderNotFoundException("The additional input folder [{$additional_folder}] does not exist; please check your configuration");
            }
            // generate the pattern for this folder
            $compiler_additional_pattern = $additional_folders . $additional_folder . DIRECTORY_SEPARATOR . "{" . $pattern . "}*.php";
            // merge with additional input folders
            $templates = array_merge($templates, File::glob($compiler_additional_pattern, GLOB_BRACE));
        }
        // determine number of files in input folder
        $i = count($templates);
        // sanity check
        if ($i < 1) {
            // throw exception
            throw new \Netson\L4gettext\NoFilesToExtractFromException("No templates found");
            /* CODE TO BE USED ONCE UNIT TESTING OF INTERACTIVE COMMANDS IS WORKING
                          // print error
                          $this->error("  the given input folder [$input_folder] does not contain any php files to parse");
            
                          // ask if compiler should be run
                          if ($this->confirm("  would you like to run the compiler using the default settings? [y|n]"))
                          {
                          $this->line(""); // add empty line
                          $this->call('l4gettext:compile'); // call compile command
                          // re-check
                          $templates = File::glob($input_folder . "*.php");
            
                          // determine number of files in input folder
                          $i = count($templates);
                          }
                          else
                          {
                          $this->line(""); // add empty line
                          return;
                          }
                         */
        }
        // add info
        $this->comment("  [{$i}] files found in input folder [{$input_folder}], views folder [{$views_folder}]");
        /**
         * array containging all xgettext parameters
         */
        $xgettext_arguments = array();
        /**
         * fetch path to xgettext binary and set binary
         */
        $path = $this->option('binary_path') == "" ? "" : $this->option('binary_path') . DIRECTORY_SEPARATOR;
        $xgettext_arguments[] = $path . $this->option('binary');
        /**
         * add language argument
         */
        if ($this->option('language')) {
            $xgettext_arguments[] = "--language=" . $this->option('language');
        }
        /**
         * add comments argument
         */
        if ($this->option('comments')) {
            $xgettext_arguments[] = "--add-comments=" . $this->option('comments');
        }
        /**
         * add force_po argument
         */
        if ($this->option('force_po') == true) {
            $xgettext_arguments[] = "--force-po";
        }
        /**
         * add output folder argument
         */
        $xgettext_output_file = storage_path() . DIRECTORY_SEPARATOR . $this->option("output_folder") . DIRECTORY_SEPARATOR . Config::get("l4gettext::config.textdomain") . ".pot";
        if ($this->option('output_folder')) {
            $xgettext_arguments[] = "--output=" . $xgettext_output_file;
        }
        /**
         * add from code argument
         */
        if ($this->option('from_code')) {
            $xgettext_arguments[] = "--from-code=" . $this->option('from_code');
        }
        /**
         * add copyright holder argument
         */
        if ($this->option('copyright_holder')) {
            $xgettext_arguments[] = "--copyright-holder=" . $this->option('copyright_holder');
        }
        /**
         * add package name argument
         */
        if ($this->option('package_name')) {
            $xgettext_arguments[] = "--package-name=" . $this->option('package_name');
        }
        /**
         * add package version argument
         */
        if ($this->option('package_version')) {
            $xgettext_arguments[] = "--package-version=" . $this->option('package_version');
        }
        /**
         * add email address option
         */
        if ($this->option('email_address')) {
            $xgettext_arguments[] = "--msgid-bugs-address=" . $this->option('email_address');
        }
        /**
         * add keyword options
         */
        $keyword_list = array_merge($this->option('keywords'), $this->option('additional_keywords'));
        // loop through all keywords
        foreach ($keyword_list as $k) {
            $xgettext_arguments[] = "--keyword={$k}";
            // using the shorthand xgettext notation for the keywords: -k%k
        }
        // add info
        $this->comment("  [" . count($keyword_list) . "] keywords found");
        /**
         * add join-existing argument
         */
        if ($this->option('join-existing')) {
            $this->comment($this->option('join-existing'));
            $xgettext_arguments[] = "-j";
        }
        /**
         * add input folder argument
         */
        if ($this->option('input_folder')) {
            foreach ($templates as $t) {
                $xgettext_arguments[] = $t;
            }
        }
        /**
         * create symfony process and execute
         */
        $builder = $this->procBuilder;
        $builder->setArguments($xgettext_arguments);
        // fetch and execute process
        $process = $builder->getProcess();
        $process->run();
        /**
         * check if process completed successfully
         */
        if (!$process->isSuccessful()) {
            throw new \Netson\L4gettext\XgettextException("The xgettext command could not be executed:" . PHP_EOL . "[" . $process->getExitCode() . "] " . $process->getExitCodeText() . PHP_EOL . PHP_EOL . "Attempted to execute the following command:" . PHP_EOL . $process->getCommandLine());
        }
        /**
         * add output info for user
         */
        $this->info("  POT file located in [{$xgettext_output_file}]");
        $this->info("  xgettext successfully executed");
    }