Dalexhd icon

cache icons

Dalexhd | PRO | 09/06/18 07:20:57 PM UTC | 0 ⭐ | 420 👁️ | Never ⏰ | []
PHP |

4.23 KB

|

None

|

0 👍

/

0 👎

<?php
    /********************************
 
    Author: Tymoteusz `Razor Meister` Bartnik
 
    Contact: [email protected]
 
    Function: cache_avatars()
 
    ********************************/
use Jenssegers\ImageHash\ImageHash;
use Jenssegers\ImageHash\Implementations\DifferenceHash;
class cache_icons
{
    private static $name;
    private static $cfg;
    private static $ip;
    private static $icons_cache;
 
    static public function construct($event_name)
    {
        global $cfg, $connect;
        self::$cfg = $cfg[$event_name];
        self::$name = $event_name;
        self::$ip = $connect['IP'];
    }
 
    static private function get_iconId($icon) {
 
        if($icon < 0)
        {
            $icon = sprintf('%u', $icon & 0xffffffff);
        }
        return $icon;
    }
 
    static private function update_data($data, $icons_cache)
    {
        global $query_sql, $clients;
 
        $update = false;
        foreach ($data as $icon_id => $iconData) {
            if ($iconData['action'] == "insert") {
                $result = $query_sql->query("SELECT `icon_id`, `icon_hash` FROM `server_icons` WHERE `icon_id` = '".$icon_id."'");
                if ($result->rowCount() == 0) {
                    $update = true;
                    file_put_contents(self::$cfg['icons_path'] . $iconData['image_hash'] . ".png", base64_decode($iconData['base_64']));
                    $query_sql->exec("INSERT INTO `server_icons`(`icon_id`, `icon_hash`) VALUES ('" . $icon_id . "','" . $iconData['image_hash'] . "')");
                    $icons_cache[] = $icon_id;
                }
            }elseif ($iconData['action'] == "delete") {
                $key = array_search($icon_id, $icons_cache);
                $result = $query_sql->query("SELECT `icon_id`, `icon_hash` FROM `server_icons` WHERE `icon_id` = '".$icon_id."'");
                if ($result->rowCount() > 0) {
                    $result = $result->fetch(PDO::FETCH_ASSOC);
                    $result_2 = $query_sql->query("SELECT `icon_hash` FROM `server_icons` WHERE `icon_hash` = '".$result['icon_hash']."'");
                    $update = true;
                    $query_sql->exec("DELETE FROM `server_icons` WHERE `icon_id`='".$icon_id."'");
                    if ($result_2->rowCount() == 1) {
                        unlink(self::$cfg['icons_path'].$result['icon_hash'].".png");
                        unset($icons_cache[$key]);
                    }
                }
            }
        }
        if ($update) {
            file_put_contents("include/cache/icons.txt", json_encode($icons_cache));
        }
    }
    static public function before_clients()
    {
        global $query, $logs_manager, $all_instances, $event_info; 
 
        $sftp = new \phpseclib\Net\SFTP(self::$ip);
        $hasher = new ImageHash(new DifferenceHash());
 
        $cache = file_get_contents(self::$cfg['file']);
        $icons_cache = json_decode(($cache == "" ? "[]" : $cache), true);
 
        $file_list = array();
        if (!$sftp->login(self::$cfg['remote_credentials']['user'], base64_decode(self::$cfg['remote_credentials']['password']))) {
            $logs_manager::write_info("[".self::$name."] - error while connecting to server: ".self::$ip.".");
            echo '> Por favor revisa las credenciales remotas!' . PHP_EOL;
            exit();
        }else{
            $unfiltered_file_list = $sftp->rawlist(self::$cfg['remote_path']);
            $filtered_remote_ids = array_map(function ($val) {
                if ($val !== 0) {
                    return self::get_iconId(explode("_", $val)[1]);
                }
            }, array_keys(
                array_filter($unfiltered_file_list, function ($data, $file_name) {
                    if ($data['type'] == 1 && substr($file_name, 0, 5) == 'icon_') {
                        return true;
                    }
                }, ARRAY_FILTER_USE_BOTH)
            ));
 
            $delete = array_values(array_diff($icons_cache, $filtered_remote_ids));
            $insert = array_values(array_diff($filtered_remote_ids, $icons_cache));
 
 
            if (count($delete) > 0) {
                foreach ($delete as $key => $icon_id) {
                    $cache_key = array_search($icon_id, $icons_cache);
                    $action = "delete";
                    $file_list[$icon_id] = compact('action');
                }
            }
 
            if (count($insert) > 0) {
                foreach ($insert as $key => $file_name) {
                    $base_64 = base64_encode($sftp->get(self::$cfg['remote_path']."icon_".$file_name));
                    $image_hash = md5($hasher->hash($base_64));
                    $icon_id = self::get_iconId($file_name);
                    $action = "insert";
                    $file_list[$icon_id] = compact('base_64', 'image_hash', 'action');
                }
            }
        }
        self::update_data($file_list, $icons_cache);
    }
}
?>

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎