Zdroj: http://prochazka.clanweb.eu/index.php?a=php/hcm-modul-download-objekt-verze-3.0.1  •  Vydáno: 30.3.2013 15:54  •  Autor: hacesoft

HCM modul Download OBJEKT - verze 3.0.1.

icons pic Modul pro RS (redakční systém) SunLight CMS 7.5.x. na počítání staženích souborů.

HCM modulu Download ve verzi 3.0.1. Nová verze je doplněna o dva řádky. Řádek 50 zabezpečuje, že se po každém stažení aktualizuje v databázi velikost souboru. Dále na řádku 62 je mazání neaktuálních záznamů v databázi. Pokud se stane, že soubor z webu odstraníte, tak v databázi nadále zůstane informace o bývalém souboru. Vše ostatní je jako u předchozí verze. Nebudu zde popisovat použiti HCM modulu, jeho instalaci a podobně. Nedoporučuji v adresáři na webu kde jsou umístěné soubory na stáhnutí vytvářet další adresáře a tak rozdělovat jednotlivé soubory do skupin. Tento skript Download verze 3.0.1. nemá žádný problém. Ale skript který dělá výpis všech stažitelných souboru, si už neporadí s takovýmto uspořádání.

Stáhnout HCM modul: download_object301.php.

HCM kód download modulu 3.0.1.:

PHP code
<?php
// Autor www.prochazka.zde.cz
// verze souboru  v3.0.1.    -objekt
// dne 31.12.2012 - vytvoreni modulu
// dne 25.2.2013 - verze 3.0.0 - predelani na objekt
// dne 26.3.2013 - verze 3.0.1. - opraven skript, aktualizace velikosti souboru a mazani neaktualnich zaznamu.

if(!defined('_core')) exit;
function _HCM_hacesoft_download($SPatchFile='', $SshowFile=''){
     $download = new HCM_download($SPatchFile,$SshowFile, _indexroot."web/download");
     $download->DataBind();
     $sBuffer = $download->GetUrl();
     return $sBuffer;}

class HCM_download {
    Private $nazev_tabulky="";
    Private $sNazevSouboru;
    Private $sFullPatchFile;  
    private $first = 0;
    public $SPatchFile="";
    public $SshowFile="";
    public $sAdrScript;
    public $UrlParameterName="download";  
    public $cesta_k_souborum;
    public $sNameTable ="download";
    public $cat_title_seo="list";
    public $title="";  
   
    public function __construct($SPatchFile="",$SshowFile="",$cesta_k_souborum=""){
        $this->SPatchFile = $SPatchFile;
        $this->SshowFile = $SshowFile;
        $this->sAdrScript = $this->GetAdrScript();
        $this->cesta_k_souborum = $cesta_k_souborum;
        if (isset($GLOBALS['query']['cat_title_seo'])){$this->cat_title_seo = $GLOBALS['query']['cat_title_seo'];}
        $this->title = $GLOBALS['query']['title'];
        $this->nazev_tabulky = _mysql_prefix."-".$this->sNameTable."-hac";}
   
    public function GetUrl (){
        if (!isset($_GET[$this->UrlParameterName])){
             return "<a href='".$this->sAdrScript.'&'.$this->UrlParameterName.'='.$this->SPatchFile."' >".$this->SshowFile."</a>";}}
             
    public function DataBind (){
        if (isset($_GET[$this->UrlParameterName])){
            $this->sNazevSouboru = $_GET[$this->UrlParameterName];
            $this->sFullPatchFile = $this->cesta_k_souborum."/".$this->sNazevSouboru;
            unset ($_GET[$this->UrlParameterName]);
            if (file_exists($this->sFullPatchFile)){
                $sDatumNew = date ("j.n.Y H:i:s");    
                $query = DB::query_row('SELECT * FROM `'.$this->nazev_tabulky.'` WHERE `soubor`="'.$this->sNazevSouboru.'"');
                $sSize = $this->nFormatFileSize(FileSize($this->sFullPatchFile));    
                if (is_bool($query) === false){
                        $pocet_stazeni =  $query['stazeni'] + 1;
                        $query = DB::query('UPDATE `'.$this->nazev_tabulky.'` SET `stazeni` ="'.$pocet_stazeni.'",
                        `velikost` ="'
.$sSize.'",`naposledy_stazen` ="'.$sDatumNew.'" WHERE `soubor` ="'.$this->sNazevSouboru.'"');}
                else{ //Soubor existuje ale doposud neni veden v databazi, tak ho do databaze zapisem
                   $sDatumfile = date ("j.n.Y H:i:s", filemtime($this->sFullPatchFile));        
                   $query = DB::query("INSERT INTO `".$this->nazev_tabulky."` (soubor,rubrika,velikost,datum,verze,popis,stazeni,naposledy_stazen,hodnoceni,pocet_hodnotitelu)
                   VALUES ('$this->sNazevSouboru', '$this->cat_title_seo', '$sSize', '$sDatumfile', '', '$this->title', 1, '$sDatumNew','0','0')"
);    
                }
                $sBuffer= substr ($this->sFullPatchFile,-4);//(délka není zadána, pozice prvního znaku je záporná, proto se počítá od konce)
                if ($sBuffer != ".php"){header("location: $this->sFullPatchFile");} //Posly soubor -posly jakykoliv jen ne s priponou php, ochrana aby utocnik si neposlal nejaky script
            }else{$query = DB::query('DELETE FROM `'.$this->nazev_tabulky.'`  WHERE `soubor` ="'.$this->sNazevSouboru.'"');}//soubor uz neexistuje, smazat v databazi zaznam
        }}
    private function nFormatFileSize($a){
    $unim = array("B", "KB", "MB", "GB", "TB", "PB");$c = 0;
    while ($a >= 1024){$c++;$a = $a / 1024;}
    return number_format($a,($c ? 2 : 0), ",", ".")." ".$unim[$c];}
   
    private function GetAdrScript(){
        $hrefprefix = $_SERVER['SCRIPT_NAME'];
        $this->first=1;
        foreach ( $_GET as $key=>$value){
          if ($key == $this->UrlParameterName)
            continue;
            if ($this->first){
             $hrefprefix .= "?".$key."=".$value;
             $this->first = 0;}
            else
             $hrefprefix .= "&".$key."=".$value;}
    return $hrefprefix;}}
?>