• File: downloader.php
  • File size: 11.33 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php
/**
 * VFM - veno file manager: include/downloader.php
 * Show download buttons for shared links
 *
 * PHP version >= 5.3
 *
 * @category  PHP
 * @package   VenoFileManager
 * @author    Nicola Franchini <support@veno.it>
 * @copyright 2013 Nicola Franchini
 * @license   Exclusively sold on CodeCanyon
 * @link      http://filemanager.veno.it/
 */
if (!defined('VFM_APP')) {
    return;
}
/**
 * Downloader
 */
$expired = true;

$share_path = basename(dirname(__DIR__)) == '_content' ? dirname(dirname(__DIR__)) : dirname(__DIR__);
$share_json = $share_path.'/_content/share/'.$getdownloadlist.'.json';

if ($getdownloadlist && file_exists($share_json)) {
    $expired = false;

    $datarray = json_decode(file_get_contents($share_json), true);
    $passa = true;
    $passcap = true;
    $passpass = true;

    $pass = (isset($datarray['pass']) ? $datarray['pass'] : false);

    if ($pass) {
        $passa = false;
        $passpass = false;
        $postpass = isset($_POST['dwnldpwd']) ? $_POST['dwnldpwd'] : false;
        if ($postpass) {
            if (md5($postpass) === $pass) {
                $passa = true;
                $passpass = true;
            }
        }
    }

    if (!Utils::checkCaptcha('show_captcha_download')) {
        $passa = false;
        $passcap = false;
    }

    $hash = $datarray['hash'];
    $time = $datarray['time'];
    $lifetime = isset($datarray['lifetime']) ? (int)$datarray['lifetime'] : (int)$setUp->getConfig('lifetime');
    $sh = md5($time.$hash);

    if ($passa === true) {
        $direct_links = $setUp->getConfig('direct_links');
        $target = '';

        $countfiles = 0;

        if ($downloader->checkTime($time, $lifetime)) {
            $onetime_download = $setUp->getConfig('one_time_download') ? $getdownloadlist : '0';
            include_once 'vfm-admin/icons/vfm-icons.php';
            $pieces = explode(",", $datarray['attachments']);
            $totalsize = 0;

            if (count($pieces) > 1) {
                ?>
            <div class="col-12 bigzip text-center my-4">
                <button type="button" class="btn btn-primary btn-lg centertext zipshare" data-time="<?php echo $time; ?>" data-hash="<?php echo $hash; ?>" data-downloadlist="<?php echo $datarray['attachments']; ?>" data-onetime="<?php echo $onetime_download; ?>">
                    <i class="bi bi-archive fs-1"></i> .zip
                </button>
            </div>
                <?php
            } ?>

            <div class="col-12">
                <div class="row shared-links">
            <?php


            foreach ($pieces as $count => $pezzo) {
                $myfile = urldecode(base64_decode($pezzo));

                if (file_exists($myfile)) {
                    $filepathinfo = Utils::mbPathinfo($myfile);
                    $filename = $filepathinfo['basename'];
                    $extension = strtolower($filepathinfo['extension']);
                    $filesize = Utils::getFileSize($myfile);
                    $totalsize += $filesize;
                    $thisicon = array_key_exists($extension, $_IMAGES) ? $_IMAGES[$extension] : 'file-earmark';

                    // Set pretty links
                    if ($setUp->getConfig('enable_prettylinks') == true) {
                        $downlink = 'download/'.$countfiles.'/sh/'.$sh.'/share/'.$getdownloadlist;
                        $modal_downlink = $countfiles.'/sh/'.$sh.'/share/'.$getdownloadlist;
                    } else {
                        $downlink = 'vfm-admin/vfm-downloader.php?q='.$countfiles.'&sh='.$sh.'&share='.$getdownloadlist;
                        $modal_downlink = $countfiles.'&sh='.$sh.'&share='.$getdownloadlist;
                    }
                    $countfiles++;

                    // Set link to direct file
                    if ($direct_links === true || $extension === 'pdf') {
                        $target = 'target="_blank"';
                    }

                    $imgdata = 'data-ext="'.$extension.'"';
                    $icon = '<a class="btn btn-primary service-btn d-flex align-items-center justify-content-center" href="'.$downlink.'" '.$target.'><div style="width:2rem;"><i class="bi bi-'.$thisicon.'"></i></div></a>';
                    $audiotypes = array(
                        'mp3',
                        'wav',
                        'flac',
                        'aac',
                    );

                    if (in_array($extension, $audiotypes) && $setUp->getConfig('share_playmusic') === true) {
                        $imgdata .= ' data-type="audio"';
                        $icon = '<a type="audio/mp3" id="vfm-audio-share-'.$count.'" class="sm2_button sm2_share btn btn-primary service-btn d-flex align-items-center justify-content-center" href="'.$downlink.'&audio=play">
                            <div style="width:2rem;"><i class="trackload bi bi-arrow-clockwise vfm-spin"></i>
                            <i class="trackpause bi bi-pause-circle"></i>
                            <i class="trackplay bi bi-disc vfm-spin"></i>
                            <i class="trackstop bi bi-play-circle"></i></div></a>';
                    }

                    $imagetypes = array(
                        'jpg',
                        'jpeg',
                        'gif',
                        'png',
                    );

                    $videotypes = array(
                        'mp4',
                        'webm',
                        'ogg',
                    );
                    $typeclass = false;

                    $iconimg = '<div style="width:2rem;"><i class="bi bi-'.$thisicon.'"></i></div>';

                    if ((in_array($extension, $videotypes) && $setUp->getConfig('share_playvideo') === true ) || (in_array($extension, $imagetypes) && $setUp->getConfig('share_thumbnails') === true)) {
                        if (in_array($extension, $imagetypes) && $setUp->getConfig('share_thumbnails') === true) {
                            $typeclass = 'thumb m-0 p-0';
                            // $iconclass = 'bi-eye';
                            $iconimg = '<img style="height:3.5rem; width:3.5rem; max-width:none;" src="'.$imageServer->showThumbnail(base64_decode($pezzo), true).'?in=1">';
                        }
                        if (in_array($extension, $videotypes) && $setUp->getConfig('share_playvideo') === true) {
                            $typeclass = 'vid';
                           // $iconclass = 'bi-play-btn';
                            $iconimg = '<div style="width:2rem"><i class="bi bi-play-btn"></i></div>';
                        }
                        // if (in_array($extension, $videotypes) && $setUp->getConfig('share_playvideo') === true) {
                        $imgdata .= ' data-name="'.$filename.'" data-link="'.$pezzo.'" data-linkencoded="'.$modal_downlink.'"';
                        $icon = '<a '.$imgdata.' class="btn btn-primary '.$typeclass.' vfm-gall service-btn d-flex align-items-center justify-content-center" href="'.$downlink.'">'.$iconimg.'</i></a>';
                    }

                    $download_btn = '<a class="btn btn-primary service-btn d-flex align-items-center justify-content-center" href="'.$downlink.'" '.$target.'><i class="bi bi-download"></i></a>';
                    ?>
                    <div class="col-md-6">
                        <div class="btn-group w-100 mb-4">
                            <?php echo $icon; ?>
                            <a class="btn btn-primary main-btn py-3 d-flex w-100" href="<?php echo $downlink; ?>" <?php echo $target; ?>>
                                <div class="wrap-title">
                                <span class="small overflowed">
                                    <?php echo $filename; ?>
                                </span>
                                </div>
                                <span class="ms-auto small itemsize">
                                    <?php echo $setUp->formatsize($filesize); ?>
                                </span>
                            </a>
                            <?php echo $download_btn; ?>
                        </div>
                    </div>
                    <?php
                }
            } ?>
            </div></div>
            <?php
        }

        // download link time expired
        // or no more file available
        if ($countfiles < 1 || $downloader->checkTime($time, $lifetime) == false) {
            unlink($share_json);
            $expired = true;
        }
    } // END if $passa == true

    if ($passa !== true) { ?>
        <div class="row" id="dwnldpwd">
            <div class="col-sm-4">
            </div>
            <div class="col-sm-4 card">
                <div class="card-body">
                <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']);?>">
                <?php
                if (strlen($pass) > 0) {
                    if ($postpass && $passpass !== true) {
                        ?>
                        <script type="text/javascript">
                            var $error2 = $('<div class="alert-wrap container py-4"><div class="nope alert alert-danger alert-dismissible fade show" role="alert">'
                            + ' <?php echo $setUp->getString("wrong_pass"); ?>'
                            + '<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div></div>');
                            $('#error').append($error2);
                        </script>
                        <?php
                    } ?>
                    <div class="form-group mb-3">
                        <label class="form-label" for="dwnldpwd"><?php echo $setUp->getString("password"); ?></label>
                        <input type="password" name="dwnldpwd" class="form-control" placeholder="******">
                    </div>
                    <?php
                }
                /* ************************ CAPTCHA ************************* */
                if ($setUp->getConfig("show_captcha_download") == true) {
                    $capath = "vfm-admin/";
                    include "vfm-admin/include/captcha.php";
                    if ($_SERVER['REQUEST_METHOD'] === 'POST' && $passcap !== true) { 
                        ?>
                        <script type="text/javascript">
                            var $error = $('<div class="alert-wrap container py-4"><div class="nope alert alert-danger alert-dismissible fade show" role="alert">'
                            + ' <?php echo $setUp->getString("wrong_captcha"); ?>'
                            + '<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div></div>');
                            $('#error').append($error);
                        </script>  
                        <?php
                    }
                } ?>
                    <div class="form-group mb-3">
                        <div class="d-grid gap-2">
                            <button type="submit" class="btn btn-primary"><i class="bi bi-check-lg"></i></button>
                        </div>
                    </div>
                </form>
                </div>
            </div>
            <div class="col-sm-4"></div>
        </div>
        <?php
    }
}

if ($expired === true) { ?>
    <div class="col-12 text-center">
        <a class="btn btn-primary btn-lg" href="./"><?php echo $setUp->getString("link_expired"); ?></a>
    </div>
    <?php
}