Skip to content
Snippets Groups Projects
media_helper.php 3.41 KiB
Newer Older
  • Learn to ignore specific revisions
  • /**
     * @copyright  2020 Podlibre
     * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
     * @link       https://castopod.org/
     */
    
    
    /**
     * Saves a file to the corresponding podcast folder in `public/media`
     *
    
     * @param \CodeIgniter\HTTP\Files\UploadedFile|\CodeIgniter\Files\File $file
    
     * @param string $podcast_name
     * @param string $file_name
     *
    
     * @return string The episode's file path in media root
    
     */
    function save_podcast_media($file, $podcast_name, $media_name)
    {
    
        $file_name = $media_name . '.' . $file->getExtension();
    
    
        $mediaRoot = config('App')->mediaRoot;
    
        if (!file_exists($mediaRoot . '/' . $podcast_name)) {
            mkdir($mediaRoot . '/' . $podcast_name, 0777, true);
            touch($mediaRoot . '/' . $podcast_name . '/index.html');
    
    
        // move to media folder and overwrite file if already existing
    
        $file->move($mediaRoot . '/' . $podcast_name . '/', $file_name, true);
    
    
        return $podcast_name . '/' . $file_name;
    }
    
    
    function download_file($fileUrl)
    {
    
        $client = \Config\Services::curlrequest();
        $uri = new \CodeIgniter\HTTP\URI($fileUrl);
    
        $response = $client->get($uri, [
            'headers' => [
                'User-Agent' => 'Castopod/' . CP_VERSION,
            ],
        ]);
    
        // redirect to new file location
        $newFileUrl = $fileUrl;
        while (
            in_array(
                $response->getStatusCode(),
                [
                    ResponseInterface::HTTP_MOVED_PERMANENTLY,
                    ResponseInterface::HTTP_FOUND,
                    ResponseInterface::HTTP_SEE_OTHER,
                    ResponseInterface::HTTP_NOT_MODIFIED,
                    ResponseInterface::HTTP_TEMPORARY_REDIRECT,
                    ResponseInterface::HTTP_PERMANENT_REDIRECT,
                ],
                true
            )
        ) {
            $newFileUrl = (string) trim(
                $response->getHeader('location')->getValue()
            );
            $newLocation = new \CodeIgniter\HTTP\URI($newFileUrl);
            $response = $client->get($newLocation, [
                'headers' => [
                    'User-Agent' => 'Castopod/' . CP_VERSION,
                ],
                'http_errors' => false,
            ]);
        }
    
        $tmpFilename =
            time() .
            '_' .
            bin2hex(random_bytes(10)) .
            '.' .
    
            pathinfo($newFileUrl, PATHINFO_EXTENSION);
    
        $tmpFilePath = WRITEPATH . 'uploads/' . $tmpFilename;
    
        file_put_contents($tmpFilePath, $response->getBody());
    
    
        return new \CodeIgniter\Files\File($tmpFilePath);
    }
    
    
    /**
     * Prefixes the root media path to a given uri
     *
     * @param  mixed  $uri      URI string or array of URI segments
     * @return string
     */
    function media_path($uri = ''): string
    {
        // convert segment array to string
        if (is_array($uri)) {
            $uri = implode('/', $uri);
        }
        $uri = trim($uri, '/');
    
        return config('App')->mediaRoot . '/' . $uri;
    }
    
    
    /**
     * Return the media base URL to use in views
     *
     * @param  mixed  $uri      URI string or array of URI segments
     * @param  string $protocol
     * @return string
     */
    function media_url($uri = '', string $protocol = null): string
    {
        return base_url(config('App')->mediaRoot . '/' . $uri, $protocol);
    }
    
    Benjamin Bellamy's avatar
    Benjamin Bellamy committed
    
    function media_base_url($uri = '')
    {
        // convert segment array to string
        if (is_array($uri)) {
            $uri = implode('/', $uri);
        }
        $uri = trim($uri, '/');
    
        return rtrim(config('App')->mediaBaseURL, '/') .
            '/' .
            config('App')->mediaRoot .
            '/' .
            $uri;
    }