403Webshell
Server IP : 62.173.141.34  /  Your IP : 216.73.217.88
Web Server : Apache/2.4.63 (Ubuntu) mod_fcgid/2.3.9 OpenSSL/3.0.2
System : Linux server7.msonline.ru 5.15.0-179-generic #189-Ubuntu SMP Tue May 5 18:20:56 UTC 2026 x86_64
User : izihss ( 1005)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,exec,system,passthru,shell_exec,proc_open,popen
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /home/izihss/web/izihss.ru/public_html/wp-content/plugins/wp-filebase/classes/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/izihss/web/izihss.ru/public_html/wp-content/plugins/wp-filebase/classes/File.php
<?php

wpfb_loadclass('Item');

class WPFB_File extends WPFB_Item
{

    const THUMB_REGEX = '/^-([0-9]+)x([0-9]+)\.(jpg|jpeg|png|gif)$/i';

    var $file_id = 0;
    var $file_name;
    var $file_name_original;
    var $file_path;
    var $file_size = 0;
    var $file_mtime = 0;
    var $file_hash;
    var $file_remote_uri;
    var $file_thumbnail;

    var $file_user_roles;


    var $file_display_name;
    var $file_version;
    var $file_date;
    var $file_description;
    var $file_tags;

    var $file_author;
    var $file_language;
    var $file_platform;
    var $file_requirement;
    var $file_license;

    var $file_offline = 0;
    var $file_direct_linking = 0;
    var $file_force_download = 0;
    var $file_category = 0;
    var $file_category_name;
    var $file_update_of = 0; // TODO
    var $file_post_id = 0;
    var $file_attach_order = 0;
    var $file_wpattach_id = 0;
    var $file_added_by = 0;
    var $file_hits = 0;
    var $file_ratings = 0; // TODO
    var $file_rating_sum = 0; // TODO
    var $file_last_dl_ip;
    var $file_last_dl_time;
    var $file_rescan_pending = 0;
    var $file_scan_lock = 0;

    //var $file_edited_time;
    //var $file_meta;

    static $cache = array();

    //static $cache_complete = false;


    /**
     * @param string $extra_sql
     *
     * @return WPFB_File[]
     */
    static function GetFiles($extra_sql = '')
    {
        global $wpdb;
        $files = array();
        $results = $wpdb->get_results("SELECT `$wpdb->wpfilebase_files`.* FROM $wpdb->wpfilebase_files $extra_sql", ARRAY_A);

        if (!empty($results)) {
            foreach (array_keys($results) as $i) {
                $id               = 0+$results[$i]['file_id'];
                self::$cache[$id] = new WPFB_File($results[$i]);
                $files[$id]       = self::$cache[$id];
            }

            if(count($results) > 500) {
                unset($results);
                $wpdb->flush();
            }
        }

        return $files;
    }

    public static function GetReadPermsWhere($user = null)
    {
        return self::GetPermissionWhere('file_added_by', 'file_user_roles', $user);
    }

    static function GetSqlCatWhereStr($cat_id)
    {
        if (is_array($cat_id))
            return implode("OR", array_map(array(__CLASS__, __FUNCTION__), $cat_id));

        $cat_id = (int)$cat_id;
        return " (`file_category` = $cat_id) ";
    }

    private static function genSelectSql($where, $check_permissions, $order = null, $limit = -1, $offset = -1)
    {
        global $wpdb, $current_user;

        // parse where
        if (empty($where))
            $where_str = '1=1';
        elseif (is_array($where)) {
            $where_str = '';
            foreach ($where as $field => $value) {
                if ($where_str != '')
                    $where_str .= "AND ";
                $o = $field{strlen($field) - 1};
                $op = ($o == '>') ? '>' : ($o == '<' ? '<' : '=');
                $field = rtrim($field, '<>');
                if (is_numeric($value))
                    $where_str .= "$field $op $value ";
                else
                    $where_str .= "$field $op '" . esc_sql($value) . "' ";
            }
        } else
            $where_str = &$where;

        if ($check_permissions != false) {
            if ($check_permissions === 'edit') {

                $can_edit_others = ((current_user_can('edit_others_posts') && !WPFB_Core::$settings->private_files) || current_user_can('manage_options'));
                $edit_cond = $can_edit_others ? "1=1" : ("file_added_by = " . ((int)$current_user->ID));


                $where_str = "($where_str) AND (" . self::GetReadPermsWhere() . ") AND ($edit_cond)";
            } else
                $where_str = "($where_str) AND (" . self::GetReadPermsWhere(is_object($check_permissions) ? $check_permissions : null) . ") AND file_offline = '0'";
        }


        // join id3 table if found in where clause
        $join_str = (strpos($where_str, $wpdb->wpfilebase_files_id3) !== false) ? " LEFT JOIN $wpdb->wpfilebase_files_id3 ON ( $wpdb->wpfilebase_files_id3.file_id = $wpdb->wpfilebase_files.file_id ) " : "";

        // parse order
        if (empty($order))
            $order_str = '';
        elseif (is_array($order)) {
            $order_str = 'ORDER BY ';
            foreach ($order as $field => $dir)
                $order_str .= "$field " . ((strtoupper($dir) == "DESC") ? "DESC" : "ASC") . ", ";
            $order_str .= "$wpdb->wpfilebase_files.file_id ASC";
        } else
            $order_str = "ORDER BY $order";

        if ($offset > 0)
            $limit_str = "LIMIT " . ((int)$offset) . ", " . ((int)$limit);
        elseif ($limit > 0)
            $limit_str = "LIMIT " . ((int)$limit);
        else
            $limit_str = '';

        //echo "$wpdb->wpfilebase_files $join_str WHERE ($where_str) $order_str $limit_str";
        return "$wpdb->wpfilebase_files $join_str WHERE ($where_str) $order_str $limit_str";
    }

    /**
     * Queries Files
     *
     * @param array|string $where Associative Where Array or SQL Expression
     * @param bool|string $check_permissions Whether to check permissions ('edit' to check edit permissions for current user)
     * @param array|string $order File Sorting Array or SQL Expression
     * @param int $limit Description
     * @param int $offset Description
     * @return WPFB_File[] Array of File Objects.
     */
    static function GetFiles2($where = null, $check_permissions = false, $order = null, $limit = -1, $offset = -1)
    {
        global $wpdb;
        $files = array();
        $results = $wpdb->get_results("SELECT `$wpdb->wpfilebase_files`.* FROM " . self::genSelectSql($where, $check_permissions, $order, $limit, $offset));
        if (!empty($results)) {
            foreach (array_keys($results) as $i) {
                $id = (int)$results[$i]->file_id;
                self::$cache[$id] = new WPFB_File($results[$i]);
                $files[$id] = self::$cache[$id];
            }
        } elseif (!empty($wpdb->last_error) && current_user_can('upload_files')) {
            echo "<b>Database error</b>: " . $wpdb->last_error; // print debug only if usr can upload
        }

        unset($results); //
        return $files;
    }

    /**
     * Get file by id
     *
     * @access public
     *
     * @param int $id ID
     * @return WPFB_File
     */
    static function GetFile($id)
    {
        $id = (int)($id);
        if (isset(self::$cache[$id]) || WPFB_File::GetFiles("WHERE file_id = $id"))
            return self::$cache[$id];
        return null;
    }

    static function GetNumFiles($sql_or_cat = -1)
    {
        global $wpdb;
        static $n = -1;
        if ($sql_or_cat == -1 && $n >= 0)
            return $n;
        if (is_numeric($sql_or_cat))
            $sql_or_cat = (($sql_or_cat >= 0) ? " WHERE file_category = $sql_or_cat" : "");
        $nn = $wpdb->get_var("SELECT COUNT($wpdb->wpfilebase_files.file_id) FROM $wpdb->wpfilebase_files $sql_or_cat");
        if ($sql_or_cat == -1)
            $n = $nn;
        return $nn;
    }

    static function GetNumFiles2($where='', $check_permissions = true)
    {
        global $wpdb;
        $n = $wpdb->get_var("SELECT COUNT(`{$wpdb->wpfilebase_files}`.`file_id`) FROM " . self::genSelectSql($where, $check_permissions));
        return (int)$n;
    }

    static function GetAttachedFiles($post_id, $show_all = false)
    {
        $post_id = intval($post_id);
        return WPFB_File::GetFiles2(array('file_post_id' => $post_id), !$show_all && WPFB_Core::$settings->hide_inaccessible, WPFB_Core::GetSortSql(null, true));
    }

    /**
     *
     * @global type $wpdb
     * @param type $post_id
     * @return WPFB_File
     */
    static function GetByPost($post_id)
    {
        global $wpdb;
        $row = $wpdb->get_row("SELECT `$wpdb->wpfilebase_files`.* FROM $wpdb->wpfilebase_files WHERE file_wpattach_id = " . (int)$post_id . " LIMIT 1");
        return empty($row) ? null : new WPFB_File($row);
    }

    function __construct($db_row = null)
    {
        parent::__construct($db_row);
        $this->is_file = true;
    }

    function DBSave($throw_on_error=false)
    { // validate some values before saving (fixes for mysql strict mode)
        if ($this->locked > 0)
            return $this->TriggerLockedError($throw_on_error);
        $ints = array('file_category', 'file_post_id', 'file_attach_order', 'file_wpattach_id', 'file_added_by', 'file_update_of', 'file_hits', 'file_ratings', 'file_rating_sum');
        foreach ($ints as $i)
            $this->$i = (int)($this->$i);
        $this->file_offline = (int)!empty($this->file_offline);
        $this->file_direct_linking = (int)$this->file_direct_linking;
        $this->file_force_download = (int)!empty($this->file_force_download);
        if (empty($this->file_last_dl_time))
            $this->file_last_dl_time = '0000-00-00 00:00:00';
        $this->file_size = 0 + $this->file_size;
        $r = parent::DBSave($throw_on_error);
        return $r;
    }

    // gets the extension of the file (including .)
    function GetExtension()
    {
        return strtolower(strrchr($this->file_name, '.'));
    }

    function GetType()
    {
        $ext = substr($this->GetExtension(), 1);
        if (($type = wp_ext2type($ext)))
            return $type;
        return $ext;
    }

    function CreateThumbnail($src_image = '', $del_src = false)
    {
        wpfb_loadclass('FileUtils');

        $src_set = !empty($src_image) && file_exists($src_image);
        $tmp_src = $del_src;
        if (!$src_set) {
            if (file_exists($this->GetLocalPath()))
                $src_image = $this->GetLocalPath();
            elseif ($this->IsRemote()) {
                // if remote file, download it and use as source
                $res = wpfb_call('Admin', 'SideloadFile', $this);
                $src_image = $res['file'];
                $tmp_src = true;
            }
        }

        if (!file_exists($src_image) || @filesize($src_image) < 3) {
            if ($tmp_src)
                @unlink($src_image);
            return;
        }

        $ext = trim($this->GetExtension(), '.');
        $src_size = array();

        if (!WPFB_FileUtils::FileHasImageExt($this->file_name) &&
            !($src_set && WPFB_FileUtils::IsValidImage($src_image, $src_size))
        ) { // check if valid image
            if ($tmp_src)
                @unlink($src_image);
            return;
        }
        $this->DeleteThumbnail(); // delete old thumbnail

        $thumb_size = (int)WPFB_Core::$settings->thumbnail_size;
        if ($thumb_size == 0) {
            if ($tmp_src)
                @unlink($src_image);
            return;
        }

        $thumb = WPFB_FileUtils::CreateThumbnail($src_image, $thumb_size);


        $success = (!empty($thumb) && !is_wp_error($thumb) && is_string($thumb) && file_exists($thumb));

        if (!$src_set && !$success) {
            $this->file_thumbnail = null;
        } else {
            // fallback to source image WARNING: src img will be moved or deleted!
            if ($src_set && !$success)
                $thumb = $src_image;

            $this->file_thumbnail = basename(trim($thumb, '.')); // FIX: need to trim . when image has no extension

            if (!is_dir(dirname($this->GetThumbPath())))
                WPFB_Admin::Mkdir(dirname($this->GetThumbPath()));
            if (!@rename($thumb, $this->GetThumbPath())) {
                $this->file_thumbnail = null;
                @unlink($thumb);
            } else
                @chmod($this->GetThumbPath(), octdec(WPFB_PERM_FILE));
        }

        if ($tmp_src)
            @unlink($src_image);
    }

    function GetPostUrl()
    {
        return empty($this->file_post_id) ? '' : WPFB_Core::GetPostUrl($this->file_post_id) . '#wpfb-file-' . $this->file_id;
    }

    function GetFormattedSize()
    {
        return wpfb_call('Output', 'FormatFilesize', $this->file_size);
    }

    function GetFormattedDate($f = 'file_date')
    {
        return (empty($this->$f) || $this->$f == '0000-01-00 00:00:00') ? null : mysql2date(WPFB_Core::$settings->file_date_format, $this->$f);
    }

    function GetModifiedTime($gmt = false)
    {
        return max(mysql2date('U', $this->file_date), $this->file_mtime) + ($gmt ? 0 : (get_option('gmt_offset') * 3600));
    }

    function CurUserCanDelete($user = null)
    {
        return $this->CurUserCanEdit($user);
    }

    // only deletes file/thumbnail on FS, keeping DB entry
    function Delete($keep_thumb = false)
    {
        if (!$keep_thumb)
            $this->DeleteThumbnail();

        $this->file_remote_uri = null;

        if ($this->IsLocal() && @unlink($this->GetLocalPath())) {
            $this->file_name = null;
            $this->file_size = 0;
            $this->file_date = null;
            return true;
        }
        return false;
    }

    function DeleteThumbnail()
    {
        $thumb = $this->GetThumbPath();
        if (!empty($thumb) && file_exists($thumb))
            @unlink($thumb);
        $this->file_thumbnail = null;
        if (!$this->locked)
            $this->DBSave();
    }

    // completly removes the file from DB (and FS)
    function Remove($bulk = false, $dont_delete = false)
    {
        global $wpdb;

        $id = (int)$this->file_id;

        if ($this->file_category > 0 && ($parent = $this->GetParent()) != null)
            $parent->NotifyFileRemoved($this);
        // remove file entry
        $wpdb->query("DELETE FROM $wpdb->wpfilebase_files WHERE file_id = $id");

        $wpdb->query("DELETE FROM $wpdb->wpfilebase_files_id3 WHERE file_id = $id");

        if (!$bulk)
            self::UpdateTags();

        $this->Lock(true); // prevent Delete() from saving to DB!

        return $dont_delete || $this->Delete();
    }

    private function getInfoValue($path)
    {
        if (!isset($this->info)) { // caching
            global $wpdb;
            if ($this->file_id <= 0)
                return join('->', $path);
            $info = $wpdb->get_var("SELECT value FROM $wpdb->wpfilebase_files_id3 WHERE file_id = $this->file_id");
            $this->info = is_null($info) ? 0 : unserialize(base64_decode($info));
        }

        if (empty($this->info))
            return null;

        $val = $this->info;
        foreach ($path as $p) {
            if (!isset($val[$p])) {
                if (isset($val[0]) && count($val) == 1) // if single array skip to first element
                    $val = $val[0];
                else
                    return null;
            }
            $val = $val[$p];
        }
        if (is_array($val))
            $val = join(', ', $val);
        if ($p == 'bitrate') {
            $val /= 1000;
            $val = round($val) . ' kBit/s';
        }
        return $val;
    }

    public function get_tpl_var($name, $extra = null)
    {
        switch ($name) {
            case 'file_url':
                return htmlspecialchars($this->GetUrl());
            case 'file_url_rel':
                return htmlspecialchars(WPFB_Core::$settings->download_base . '/' . str_replace('\\', '/', $this->GetLocalPathRel()));
            case 'file_post_url':
                return htmlspecialchars(!($url = $this->GetPostUrl()) ? $this->GetUrl() : $url);
            case 'file_icon_url':
                return htmlspecialchars($this->GetIconUrl());
            case 'file_small_icon':
                return '<img src="' . esc_attr($this->GetIconUrl('small')) . '" alt="' . esc_attr(sprintf(__('Icon of %s', 'wp-filebase'), $this->file_display_name)) . '" style="vertical-align:middle;width:auto;' . ((WPFB_Core::$settings->small_icon_size > 0) ? ('height:' . WPFB_Core::$settings->small_icon_size . 'px;') : '') . '" />';
            case 'file_size':
                return $this->GetFormattedSize();
            case 'file_path':
                return htmlspecialchars($this->GetLocalPathRel());

            case 'file_category':
                return htmlspecialchars(is_object($cat = $this->GetParent()) ? $cat->cat_name : '');
            case 'cat_small_icon':
                return is_null($cat = $this->GetParent()) ? '' : ('<img src="' . htmlspecialchars($cat->GetIconUrl('small')) . '" alt="' . esc_attr(sprintf(__('Icon of %s', 'wp-filebase'), $cat->cat_name)) . '" style="width:auto;height:' . WPFB_Core::$settings->small_icon_size . 'px;vertical-align:middle;" />');
            case 'cat_icon_url':
                return is_null($cat = $this->GetParent()) ? '' : htmlspecialchars($cat->GetIconUrl());
            case 'cat_url':
                return is_null($cat = $this->GetParent()) ? '' : htmlspecialchars($cat->GetUrl());
            case 'cat_id':
                return $this->file_category;

            case 'file_cat_folder':
                return htmlspecialchars(is_object($cat = $this->GetParent()) ? $cat->cat_folder : '');

            case 'file_languages':
                return wpfb_call('Output', 'ParseSelOpts', array('languages', $this->file_language), true);
            case 'file_platforms':
                return wpfb_call('Output', 'ParseSelOpts', array('platforms', $this->file_platform), true);
            case 'file_requirements':
                return wpfb_call('Output', 'ParseSelOpts', array('requirements', $this->file_requirement, true), true);
            case 'file_license':
                return wpfb_call('Output', 'ParseSelOpts', array('licenses', $this->file_license, true), true);

            //case 'file_required_level':	return ($this->file_required_level - 1);
            case 'file_user_can_access':
                return $this->CurUserCanAccess();
            case 'file_user_can_edit':
                return $this->CurUserCanEdit();

            case 'file_description':
                return nl2br($this->file_description);
            case 'file_tags':
                return esc_html(str_replace(',', ', ', trim($this->file_tags, ',')));

            case 'file_date':
            case 'file_last_dl_time':
                return htmlspecialchars($this->GetFormattedDate($name));

            case 'file_extension':
                return strtolower(substr(strrchr($this->file_name, '.'), 1));
            case 'file_type':
                return wpfb_call('Download', 'GetFileType', $this->file_name);

            case 'file_url_encoded':
                return htmlspecialchars(urlencode($this->GetUrl()));

            case 'file_added_by':
                return (empty($this->file_added_by) || !($usr = get_userdata($this->file_added_by))) ? '' : esc_html($usr->display_name);

            case 'file_edit_url':
                return $this->GetEditUrl();

            case 'uid':
                return self::$tpl_uid;

            case 'is_mobile': return wp_is_mobile();

        }

        if (strpos($name, 'file_info/') === 0) {
            $path = explode('/', substr($name, 10));
            return esc_html($this->getInfoValue($path));
        } elseif (strpos($name, 'file_custom') === 0) // dont esc custom
            return isset($this->$name) ? $this->$name : '';

        // string length limit:
        if (!isset($this->$name) && ($p = strpos($name, ':')) > 0) {
            $maxlen = (int)substr($name, $p + 1);
            $name = substr($name, 0, $p);
            $str = $this->get_tpl_var($name);
            if ($maxlen > 3 && strlen($str) > $maxlen)
                $str = (function_exists('mb_substr') ? mb_substr($str, 0, $maxlen - 3, 'utf8') : mb_substr($str, 0, $maxlen - 3)) . '...';
            return $str;
        }

        if (isset($extra->$name))
            return $extra->$name;

        return isset($this->$name) ? esc_html($this->$name) : '';
    }

    function DownloadDenied($msg_id)
    {
        if (WPFB_Core::$settings->inaccessible_redirect && !is_user_logged_in()) {
            //auth_redirect();
            $redirect = (WPFB_Core::$settings->login_redirect_src && wp_get_referer()) ? wp_get_referer() : $this->GetUrl();
            $login_url = wp_login_url($redirect, true); // force re-auth
            wp_redirect($login_url);
            exit;
        }
        $msg = WPFB_Core::GetOpt($msg_id);
        if (!$msg)
            $msg = $msg_id;
        elseif (@preg_match('/^https?:\/\//i', $msg)) {
            wp_redirect($msg); // redirect if msg is url
            exit;
        }
        wp_die((empty($msg) || !is_string($msg)) ? __('Cheatin&#8217; uh?') : $msg);
        exit;
    }

    // checks permissions, tracks download and sends the file
    function Download()
    {
        global $wpdb, $current_user, $user_ID;

        @error_reporting(0);
        wpfb_loadclass('Category', 'Download');
        $downloader_ip = preg_replace('/[^0-9a-fA-F:., ]/', '', $_SERVER['REMOTE_ADDR']);
        get_currentuserinfo();
        $logged_in = (!empty($user_ID));
        $user_role = $logged_in ? reset($current_user->roles) : null; // get user's highest role (like in user-eidt.php)
        $is_admin = current_user_can('manage_options');

        // check user level
        if (!$this->CurUserCanAccess())
            $this->DownloadDenied('inaccessible_msg');

        // check offline
        if ($this->file_offline && !$is_admin)
            wp_die(WPFB_Core::$settings->file_offline_msg);

        // check referrer
        if ($this->file_direct_linking != 1) {
            // if referer check failed, redirect to the file post
            if (!WPFB_Download::RefererCheck()) {
                $url = WPFB_Core::GetPostUrl($this->file_post_id);
                if (empty($url))
                    $url = home_url();
                wp_redirect($url);
                exit;
            }
        }

        // check traffic
        if ($this->IsLocal() && !WPFB_Download::CheckTraffic($this->file_size)) {
            header('HTTP/1.x 503 Service Unavailable');
            wp_die(WPFB_Core::$settings->traffic_exceeded_msg);
        }

        // check daily user limit
        if (!$is_admin && WPFB_Core::$settings->daily_user_limits) {
            if (!$logged_in)
                $this->DownloadDenied('inaccessible_msg');

            $today = intval(date('z'));
            $usr_dls_today = intval(get_user_option(WPFB_OPT_NAME . '_dls_today'));
            $usr_last_dl_day = intval(date('z', intval(get_user_option(WPFB_OPT_NAME . '_last_dl'))));
            if ($today != $usr_last_dl_day)
                $usr_dls_today = 0;

            // check for limit
            $dl_limit = intval(WPFB_Core::GetOpt('daily_limit_' . $user_role));
            if ($dl_limit > 0 && $usr_dls_today >= $dl_limit)
                $this->DownloadDenied(sprintf(WPFB_Core::$settings->daily_limit_exceeded_msg, $dl_limit));

            $usr_dls_today++;
            update_user_option($user_ID, WPFB_OPT_NAME . '_dls_today', $usr_dls_today);
            update_user_option($user_ID, WPFB_OPT_NAME . '_last_dl', time());
        }

        $head_only = ($_SERVER["REQUEST_METHOD"] == "HEAD");
        list($begin, $end) = WPFB_Download::ParseRangeHeader($this->file_size);

        // count download (only downloads starting at first byte)
        if ( $begin == 0 && !$head_only &&  (!$is_admin || !WPFB_Core::$settings->ignore_admin_dls) ) {
            $last_dl_time = mysql2date('U', $this->file_last_dl_time, false);
            if (empty($this->file_last_dl_ip) || $this->file_last_dl_ip != $downloader_ip || ((time() - $last_dl_time) > 86400))
            {
                $this->file_hits++;
                $this->file_last_dl_ip = $downloader_ip;
                $this->file_last_dl_time = current_time('mysql');

                $wpdb->query("UPDATE " . $wpdb->wpfilebase_files
                    . " SET file_hits = file_hits + 1, file_last_dl_ip = '"
                    . $downloader_ip . "', file_last_dl_time = '"
                    . $this->file_last_dl_time . "' WHERE file_id = "
                    . (0+$this->file_id));
            }
        }

        // external hooks
        do_action('wpfilebase_file_downloaded', $this->file_id);

        $url = $this->GetRemoteUri(true);
        $is_local_remote = !empty($url) && parse_url($url, PHP_URL_SCHEME) === 'file' && is_readable($url);

        // download or redirect		
        if ($this->IsLocal() || $is_local_remote) {
            $bw = 'bitrate_' . ($logged_in ? 'registered' : 'unregistered');
            WPFB_Download::SendFile($is_local_remote ? $url : $this->GetLocalPath(), array(
                'bandwidth' => WPFB_Core::$settings->$bw,
                'etag' => $this->file_hash,
                'md5_hash' => WPFB_Core::$settings->fake_md5 ? null : $this->file_hash, // only send real md5
                'force_download' => (WPFB_Core::$settings->force_download || $this->file_force_download),
                'cache_max_age' => 10,
                'filename' => empty($this->file_name_original) ? $this->file_name : $this->file_name_original
            ));
        } else {
            // avoid redirect caching
            //header('HTTP/1.1 301 Moved Permanently');
            header('Cache-Control: no-store, no-cache, must-revalidate');
            header('Expires: Thu, 01 Jan 1970 00:00:00 GMT');
            header('Location: ' . $url);
        }

        exit;
    }

    function GetRemoteUri($die_on_error=false)
    {
        return $this->file_remote_uri;
    }

    function SetPostId($id)
    {
        $id = intval($id);
        if ($this->file_post_id == $id)
            return;
        $this->file_post_id = $id;
        if ($id > 0)
            $this->file_attach_order = count(self::GetAttachedFiles($id)) + 1;
        if (!$this->locked)
            $this->DBSave();
    }

    function SetModifiedTime($mysql_date_or_timestamp)
    {
        if (!is_numeric($mysql_date_or_timestamp))
            $mysql_date_or_timestamp = mysql2date('U', $mysql_date_or_timestamp);
        if ($this->IsLocal()) {
            if (!@touch($this->GetLocalPath(), $mysql_date_or_timestamp))
                return false;
            $this->file_mtime = filemtime($this->GetLocalPath());
        } else {
            $this->file_mtime = $mysql_date_or_timestamp;
        }
        if (!$this->locked)
            $this->DBSave();
        return $this->file_mtime;
    }

    function SetTags($tags)
    {
        if (is_string($tags))
            $tags = explode(',', $tags);
        $tags = array_unique(array_map('trim', (array)$tags));
        $this->file_tags = ',' . implode(',', $tags) . ',';
        if (!$this->locked)
            $this->DBSave();
        self::UpdateTags($this);
    }

    function GetTags()
    {
        return explode(',', trim($this->file_tags, ','));
    }

    function SetRescanPending($force_thumb=false) {
        $this->file_rescan_pending = max($this->file_rescan_pending, $force_thumb ? 2:1);
        if(!$this->locked)
            $this->DBSave();
    }

    static function UpdateTags($cur_file = null)
    {
        $tags = array();
        $files = self::GetFiles2((empty($cur_file) ? "" : "file_id <> $cur_file->file_id AND ") . "file_tags <> ''", false);
        if (!empty($cur_file))
            $files[$cur_file->file_id] = $cur_file;
        foreach ($files as $file) {
            $fts = $file->GetTags();
            foreach ($fts as $ft) {
                $tags[$ft] = isset($tags[$ft]) ? ($tags[$ft] + 1) : 1;
            }
        }
        ksort($tags);
        update_option(WPFB_OPT_NAME . '_ftags', $tags);
    }


    // TODO move to RemoteSync
    function SetRemoteSyncMeta($rev, $rsync_id, $uri_expires, $guid = '')
    {
        return false;
    }

    /**
     *
     * @global type $wpdb
     * @return WPFB_RemoteFileInfo
     */
    function GetRemoteSyncMeta()
    {
        return false;
    }


    function GetWPAttachmentID()
    {
        return $this->file_wpattach_id;
        //global $wpdb;
        //return $wpdb->get_var( $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid = %s", $this->GetUrl()) );
    }

    function IsRemote()
    {
        return !empty($this->file_remote_uri);
    }

    function IsLocal()
    {
        return empty($this->file_remote_uri);
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit