Location: PHPKode > scripts > Admidio > admidio-2.2.9/adm_program/system/classes/table_file.php
<?php
/******************************************************************************
 * Klasse fuer den Zugriff auf die Datenbanktabelle adm_files
 *
 * Copyright    : (c) 2004 - 2011 The Admidio Team
 * Homepage     : http://www.admidio.org
 * License      : GNU Public License 2 http://www.gnu.org/licenses/gpl-2.0.html
 *
 * Diese Klasse dient dazu ein Fileobjekt zu erstellen.
 * Eine Datei kann ueber diese Klasse in der Datenbank verwaltet werden
 *
 * Neben den Methoden der Elternklasse TableAccess, stehen noch zusaetzlich
 * folgende Methoden zur Verfuegung:
 *
 * getFileForDownload($file_id)
 *                         - File mit der uebergebenen ID aus der Datenbank auslesen fuer 
 *                           das Downloadmodul. Hier wird auch direkt ueberprueft ob die 
 *                           Datei oder der Ordner gesperrt ist.
 * getCompletePathOfFile() - Gibt den kompletten Pfad der Datei zurueck
 *
 *****************************************************************************/

require_once(SERVER_PATH. '/adm_program/system/classes/table_access.php');

class TableFile extends TableAccess
{
    // Konstruktor
    public function __construct(&$db, $fil_id = 0)
    {
        parent::__construct($db, TBL_FILES, 'fil', $fil_id);
    }


    // File mit der uebergebenen ID aus der Datenbank auslesen
    public function readData($file_id, $sql_where_condition = '', $sql_additional_tables = '')
    {
        global $g_current_organization;

        $sql_additional_tables .= TBL_FOLDERS;
        $sql_where_condition   .= '    fil_id     = '.$file_id.'
                                   AND fil_fol_id = fol_id
                                   AND fol_type   = "DOWNLOAD"
                                   AND fol_org_id = '. $g_current_organization->getValue('org_id');
        return parent::readData($file_id, $sql_where_condition, $sql_additional_tables);
    }


    // File mit der uebergebenen ID aus der Datenbank auslesen fuer das Downloadmodul
    // Hier wird auch direkt ueberprueft ob die Datei oder der Ordner gesperrt ist.
    public function getFileForDownload($file_id)
    {
        global $g_current_organization, $g_current_user, $g_valid_login;

        $this->readData($file_id);

        //Pruefen ob der aktuelle Benutzer Rechte an der Datei hat
        //Gucken ob ueberhaupt ein Datensatz gefunden wurde...
        if ($this->getValue('fil_id'))
        {

            //Falls die Datei gelocked ist und der User keine Downloadadminrechte hat, bekommt er nix zu sehen..
            if (!$g_current_user->editDownloadRight() && $this->getValue('fil_locked'))
            {
                $this->clear();
            }
            else if (!$g_valid_login && !$this->getValue('fol_public'))
            {
                //Wenn der Ordner nicht public ist und der Benutzer nicht eingeloggt ist, bekommt er nix zu sehen..
                $this->clear();
            }
            else if (!$g_current_user->editDownloadRight() && !$this->getValue('fol_public'))
            {
                //Wenn der Ordner nicht public ist und der Benutzer keine Downloadadminrechte hat, muessen die Rechte untersucht werden
                $sql_rights = 'SELECT count(*)
                         FROM '. TBL_FOLDER_ROLES. ', '. TBL_MEMBERS. '
                        WHERE flr_fol_id = '. $this->getValue('fol_id'). '
                          AND flr_rol_id = mem_rol_id
                          AND mem_usr_id = '. $g_current_user->getValue('usr_id'). '
                          AND mem_begin <= "'.DATE_NOW.'"
                          AND mem_end    > "'.DATE_NOW.'"';
                $result_rights = $this->db->query($sql_rights);
                $row_rights = $this->db->fetch_array($result_rights);
                $row_count  = $row_rights[0];

                //Falls der User in keiner Rolle Mitglied ist, die Rechte an dem Ordner besitzt
                //wird auch kein Ordner geliefert.
                if ($row_count == 0)
                {
                    $this->clear();
                }

            }
        }
    }


    //Gibt den kompletten Pfad der Datei zurueck
    public function getCompletePathOfFile()
    {
        //Dateinamen und Pfad zusammen setzen
        $fileName     = $this->getValue('fil_name');
        $folderPath   = $this->getValue('fol_path');
        $folderName   = $this->getValue('fol_name');
        $completePath = SERVER_PATH. $folderPath. '/'. $folderName. '/'. $fileName;

        return $completePath;
    }


    // die Methode wird innerhalb von delete() aufgerufen
    //und loescht das File physikalisch von der Platte bevor es aus der DB geloescht wird
    public function delete()
    {
        @chmod($this->getCompletePathOfFile(), 0777);
        @unlink($this->getCompletePathOfFile());

        //Auch wenn das Loeschen nicht klappt wird true zurueckgegeben,
        //damit der Eintrag aus der DB verschwindet.
        return parent::delete();
    }


    // interne Funktion, die Defaultdaten fur Insert und Update vorbelegt
    // die Funktion wird innerhalb von save() aufgerufen
    public function save($updateFingerPrint = true)
    {
        global $g_current_organization, $g_current_user;

        if($this->new_record)
        {
            $this->setValue('fil_timestamp', DATETIME_NOW);
            $this->setValue('fil_usr_id', $g_current_user->getValue('usr_id'));
        }
        parent::save($updateFingerPrint);
    }
}
?>
Return current item: Admidio