private function extract_project($project, $project_settings, $format_message = true) { $url_name = sprintf($this->source_type_templates[$project_settings[$project->id]['type']], $project_settings[$project->id]['setting']); $source_file = download_url($url_name); if (!is_wp_error($source_file)) { include dirname(__FILE__) . '/include/extract/makepot.php'; // Get a temporary file, use gpa as the first four letters of it. $temp_dir = tempnam(sys_get_temp_dir(), 'gpa'); $temp_pot = tempnam(sys_get_temp_dir(), 'gpa'); // Now delete the file and recreate it as a directory. unlink($temp_dir); mkdir($temp_dir); $zip = new ZipArchive(); if ($zip->open($source_file) === TRUE) { $zip->extractTo($temp_dir); $zip->close(); unlink($source_file); } else { unlink($source_file); return '<div class="notice updated"><p>' . sprintf(__('Failed to extract zip file: "%s".'), $source_file) . '</p></div>'; } $makepot = new MakePOT(); $makepot->generic($temp_dir, $temp_pot); $format = gp_array_get(GP::$formats, gp_post('format', 'po'), null); $translations = $format->read_originals_from_file($temp_pot); $this->delTree($temp_dir); unlink($temp_pot); if (FALSE === $translations) { return '<div class="notice updated"><p>' . __('Failed to read strings from source code.') . '</p></div>'; } list($originals_added, $originals_existing, $originals_fuzzied, $originals_obsoleted) = GP::$original->import_for_project($project, $translations); if (true === $format_message) { $message = '<div class="notice updated"><p>'; } $message .= sprintf(__('%1$s new strings added, %2$s updated, %3$s fuzzied, and %4$s obsoleted in the "%5$s" project.'), $originals_added, $originals_existing, $originals_fuzzied, $originals_obsoleted, $project->name); if (true === $format_message) { $message .= '</p></div>'; } } else { if (true === $format_message) { $message = '<div class="notice updated"><p>'; } $message .= sprintf(__('Failed to download "%s".'), $url_name) . '</p></div>'; if (true === $format_message) { $message .= '</p></div>'; } } return $message; }