Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
4 / 4
CRAP
100.00% covered (success)
100.00%
34 / 34
Translation
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
4 / 4
6
100.00% covered (success)
100.00%
34 / 34
 upload
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
18 / 18
 export
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
5 / 5
 download
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
9 / 9
 getStatus
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
<?php
/**
 * Crowdin API implementation in PHP.
 *
 * @copyright  Copyright (C) 2016 Nikolai Plath (elkuku)
 * @license    WTFPL - See license.txt
 */
namespace ElKuKu\Crowdin\Package;
use ElKuKu\Crowdin\
{
    Languagefile, Package
};
use Psr\Http\Message\ResponseInterface;
/**
 * Class Translation
 *
 * @since  1.0
 */
Class Translation extends Package
{
    /**
     * Upload existing translations to your Crowdin project.
     *
     * @param   Languagefile  $languagefile            The translation object.
     * @param   string        $language                The language tag.
     * @param   boolean       $importDuplicates        Defines whether to add translation if there is
     *                                                 the same translation previously added.
     *                                                 Acceptable values are: 0 or 1. Default is 0.
     * @param   boolean       $importEqualSuggestions  Defines whether to add translation if it is equal to
     *                                                 source string at Crowdin.
     *                                                 Acceptable values are: 0 or 1. Default is 0.
     * @param   boolean       $autoImproveImports      Mark uploaded translations as approved.
     *                                                 Acceptable values are: 0 or 1. Default is 0.
     *
     * @see     https://crowdin.com/page/api/upload-translation
     * @since   1.0.1
     *
     * @return ResponseInterface
     */
    public function upload(
        Languagefile $languagefile, string $language, bool $importDuplicates = false,
        bool $importEqualSuggestions = false, bool $autoImproveImports = false) : ResponseInterface
    {
        $data = [];
        $data[] = [
            'name'     => 'import_duplicates',
            'contents' => (int) $importDuplicates
        ];
        $data[] = [
            'name'     => 'import_eq_suggestions',
            'contents' => (int) $importEqualSuggestions
        ];
        $data[] = [
            'name'     => 'auto_approve_imported',
            'contents' => (int) $autoImproveImports
        ];
        $data[] = [
            'name'     => 'language',
            'contents' => $language
        ];
        $data[] = [
            'name'     => 'files[' . $languagefile->getCrowdinPath() . ']',
            'contents' => fopen($languagefile->getLocalPath(), 'r')
        ];
        return $this->getHttpClient()
            ->post($this->getBasePath('upload-translation'), ['multipart' => $data]);
    }
    /**
     * Build ZIP archive with the latest translations. Please note that this method can be invoked
     * only once per 30 minutes (there is no such restriction for organization plans). Also API
     * call will be ignored if there were no changes in the project since previous export. You can
     * see whether ZIP archive with latest translations was actually build by status attribute
     * ("built" or "skipped") returned in response.
     *
     * @param   string  $branch  The name of related version branch.
     *
     * @since 1.0.4
     * @see   https://crowdin.com/page/api/export
     *
     * @return ResponseInterface
     */
    public function export(string $branch = '') : ResponseInterface
    {
        $path = $this->getBasePath('export');
        if ($branch)
        {
            $path .= '&branch=' . $branch;
        }
        return $this->getHttpClient()
            ->get($path);
    }
    /**
     * Download ZIP file with translations. You can choose the language of translation
     * you need or download all of them at once.
     * Note: If you would like to download the most recent translations you may want
     * to use export API method before downloading.
     *
     * @param   string  $package  Language code or "all" to download a bundle with translations to all languages.
     * @param   string  $toPath   Local path where to download the translation package.
     * @param   string  $branch   The name of related version branch.
     *
     * @since 1.0.4
     * @see   https://crowdin.com/page/api/download
     *
     * @return \Psr\Http\Message\ResponseInterface
     */
    public function download(string $package, string $toPath, string $branch = '') : ResponseInterface
    {
        $path = sprintf(
            'project/%s/download/%s?key=%s',
            $this->getProjectId(),
            $package,
            $this->getApiKey()
        );
        if ($branch)
        {
            $path .= '&branch=' . $branch;
        }
        return $this->getHttpClient()
            ->get($path, ['sink' => $toPath]);
    }
    /**
     * Track overall translation and proofreading progresses of each target language.
     * Default response format is XML.
     *
     * @see    https://crowdin.com/page/api/status
     * @since  1.0.4
     *
     * @return ResponseInterface
     */
    public function getStatus() : ResponseInterface
    {
        return $this->getHttpClient()
            ->get($this->getBasePath('status'));
    }
}