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