<?php
/*-------------------------------------------------------+
| Copyright (C) SuperParba
| http://superparba.eu/
+--------------------------------------------------------+
| Filename: top.php
| Author: Darius
+--------------------------------------------------------*/

require_once __DIR__."/maincore.php";
require_once THEMES."templates/header.php";

//if (iGUEST) redirect(BASEDIR."index.php");

$topcats = array(
    'web' => array(
        'posts' => "",
        'shouts' => "",
        'comments' => "",
        'medias' => "",
        'contributors' => "",
        'liked' => "1",
        'funniest' => "2",
        'disliked' => "3",
        'popular' => "4",
    ),
    'crews' => array(
        'gang' => array(
        	'mdata' => GetTopOfGang((isMobile ? 20 : 24))
        ),
        'company' => array(
        	'mdata' => GetTopOfCompany((isMobile ? 20 : 52))
        ),
    ),
    'plyrs' => array(
        'time' => PLAYER_DATA_HODIN,
        'money' => PLAYER_DATA_BANKA,
        'marihuana' => PLAYER_DATA_MARIHUANA,
        'gangsters' => array(
        	'server' => "samp",
        	'mdata' => PLAYER_DATA_GANGBODY
        ),
        'loyal' => array(
        	'server' => "samp",
        	'mdata' => PLAYER_DATA_VER
        ),
        'events' => array(
        	'server' => "samp",
            'data' => PLAYER_DATA_EVENT,
            'index' => 60, 
        ),
        'event' => array(
            'server' => "fivem",
            'mdata' => "ITEM"
        ),
        'docks' => array(
        	'server' => "samp",
            'data' => PLAYER_DATA_EVENT,
            'index' => 6, 
        ),
        'dock' => array(
            'server' => "fivem",
            'mdata' => PLAYER_DATA_DOCKS
        ),
        'online' => array(
        	'server' => "samp",
        	'data' => PLAYER_DATA_EVENT,
        	'index' => 52,
        ),
        'jobs' => array(
            'data' => PLAYER_DATA_JOBPOINTS,
            'index' => 1,
        ),
        'kills' => PLAYER_DATA_ZABIL,
        'deaths' => PLAYER_DATA_UMREL,
        'revents' => array(
            'server' => "samp",
            'data' => PLAYER_DATA_EVENT,
            'index' => 101,
        ),
        'horseshoes' => array(
            'server' => "samp",
            'data' => PLAYER_DATA_EVENT,
            'index' => 106,
        ),
        'challenges' => array(
            'server' => "samp",
            'data' => PLAYER_DATA_EVENT,
            'index' => 107,
        ),
        'reputation' => array(
            'server' => "fivem",
            'mdata' => PLAYER_DATA_RANK
        ),
        'challenges_historic' => array(
            'server' => "fivem",
            'mdata' => PLAYER_DATA_CHALLENGES
        ),
        'drift_max' => array(
            'server' => "fivem",
            'mdata' => DRIFT_MAX
        )
        /*
        'level' => array(
            'server' => "fivem",
            'mdata' => PLAYER_DATA_LEVEL
        )  
        */
    ),
);

function TopExists($category) {
    global $topcats;

    foreach ($topcats as $key) {
        if (isset($key[$category]))
            return true;
    }
    return false;
}

function GetTopCategoryData($category, $group = false) {
    global $topcats;

    $i = 0;
    foreach ($topcats as $key) {
        foreach ($key as $catkey => $catval) {
            if ($catkey == $category) {
                if (!$group) {
                    if (isset($catval['data']))
                        return "ITEM";
                    elseif (isset($catval['mdata']))
                    	return $catval['mdata'];
                    else
                        return $catval;
                }
                else
                    return array_keys($topcats)[$i];
            }
        }
        $i++;
    }
}

function GetExData($group, $cat, $limit) {
    global $topcats;
    $gdata = $topcats[$group][$cat]['data'];
    $gindex = $topcats[$group][$cat]['index'];

    if ($cat == "jobs" && SERVER == "fivem")
        return GetTopOfPlayers("points_".@$_GET['job'],$limit);
    elseif ($cat == "jobs" && SERVER == "samp")
        return GetTopOfPlayersEx("JOBPOINTS",@$_GET['job'],$limit);
    else
        return GetTopOfPlayersEx($gdata,$gindex,$limit);
} 

function SetIndexData($group, $cat, $val) {
    global $topcats;
    $topcats[$group][$cat]['index'] = $val;
}

function getpr($i) {
    $pr = " tpr";
    if (($i+1) % 4 == 0)
        $pr = "";

    return $pr;
}

function getrc($i) {
    $rankc = "#999";
    if (($i+1) == 1) $rankc = "gold";
    elseif (($i+1) == 2) $rankc = "#d6d6d6";
    elseif (($i+1) == 3) $rankc = "#cd7f32";
    return $rankc;
}

$topcat = "";
if (isset($_GET['category']) && TopExists($_GET['category']))
    $topcat = GetTopCategoryData($_GET['category']);
else
    redirect(BASEDIR."index.php");

$group = GetTopCategoryData($_GET['category'], true);
if (isset($topcats[$group][$_GET['category']]['server']) && $topcats[$group][$_GET['category']]['server'] != SERVER)
	redirect(BASEDIR."top.php?category=posts");

opentable($locale['SP_srvinf_rk']." - ".$locale['tops_c_'.substr($group, 0,1).substr($_GET['category'], 0,3)]);

    echo "<ul class='nav nav-tabs nav-fill'>\n";
        foreach ($topcats as $ckey => $cvalue) {
            echo "<li class='nav-item'>";
                echo "<a class='nav-link".($group == $ckey ? " active" : "")."' href='".BASEDIR."top.php?category=".array_keys($cvalue)[0]."'>".$locale['tops_'.$ckey]."</a>";
            echo "</li>\n";
        }
    echo "</ul>\n";

    echo "<ul class='nav nav-tabs nav-fill'>\n";
        foreach ($topcats[$group] as $key => $value) {
        	if (isset($value['server']) && $value['server'] != SERVER)
        		continue;

            echo "<li class='nav-item'>";
                echo "<a class='nav-link".($_GET['category'] == $key ? " active" : "")."' href='".BASEDIR."top.php?category=".$key."'>".$locale['tops_c_'.substr($group, 0,1).substr($key, 0,3)]."</a>";
            echo "</li>\n";
        }
    echo "</ul>\n";

    echo "<div class='row m-0'>\n";
        if(!isset($_GET['job'])) $_GET['job'] = 0;
        if ($group == "plyrs") {
            if ($_GET['category'] == "jobs") {
                //if (isset($_GET['job']) && isnum($_GET['job']) && $_GET['job']>0 && $_GET['job']<=count($locale['acc_job']))
                    //$topcats['plyrs']['jobs']['index'] = $_GET['job'];

                /*if (SERVER == "fivem") {
                    $disabledJobs = [3, 22];

                    if (in_array($topcats['plyrs']['jobs']['index'], $disabledJobs)) {
                        $topcats['plyrs']['jobs']['index'] = $_GET['job']-1;
                    }
                }*/

                echo "<select id='jobsel' class='custom-select my-2'>\n";
                    foreach ($locale['acc_job_'.SERVER] as $i => $value) 
                    {
                    //for ($i=1; $i < count($locale['acc_job']); $i++) {
                        /*if (SERVER == "fivem" && in_array($i, $disabledJobs)) {
                            continue;
                        }*/

                        $sel = /*$topcats['plyrs']['jobs']['index'] == $i*/ @$_GET['job'] == $i ? " selected" : "";
                        echo "<option value='".BASEDIR."top.php?category=jobs&job=".$i."'".$sel.">".$locale['acc_job_'.SERVER][$i]."</option>\n";
                    }
                echo "</select>\n";

                add_to_footer("<script type='text/javascript'>
                    $('#jobsel').on('change', function(){
                        window.location = $(this).val();
                    });
                </script>");
            }

            $limit = isMobile ? 20 : 100;
            if ($_GET['category'] == "event")
                $data = GetTopOfFivemWinners($limit);
            else if ($topcat == "ITEM")
                $data = GetExData($group,$_GET['category'],$limit);
            else
                $data = GetTopOfPlayers($topcat,$limit);

            $fileSuffix = SERVER == "samp" ? ".png" : ".webp";
            $rank = $previous = 0;
            for ($i=0; $i<$data[$i]; $i++) {
                // temp fix
                /*if ($data[$i][$topcat] > 10000000 && $_GET['category'] == "online")
                    continue;*/

                $query = dbquery("SELECT * FROM ".DB_USERS." WHERE ".(SERVER == "samp" ? "user_id" : "user_acclinker")."='".$data[$i]['WEB_ID']."'");
                if (dbrows($query)) {
                    $udat = dbarray($query);
                    $data[$i][PLAYER_DATA_NICK] = profile_link($udat['user_id'],$udat['user_name'],$udat['user_status']);
                }

                if ($_GET['category'] == "time" && SERVER == "fivem")
                    $data[$i][$topcat] = round($data[$i][$topcat]/60);

                if ($_GET['category'] == "reputation")
                    $data[$i][$topcat] = (sqrt(5)*sqrt(4*$data[$i][$topcat]+45)-15)/10;

                if ($_GET['category'] == "drift_max")
                    $data[$i][$topcat] = $data[$i][$topcat]/1000.0;
                            

                $rank = $previous > $data[$i][$topcat] ? $rank+1 : $rank;
                $previous = $data[$i][$topcat];

                echo "<div class='col-lg-3 col-md-3 col-sm-3 tmb".getpr($i)."'>\n";
                    echo "<div id='tops'>\n";
                        echo "<div class='pos' style='color:".getrc($rank).";'>#".($rank+1)."</div>\n";

                        if (file_exists(THEME."images/skins/".SERVER."/".$data[$i][PLAYER_DATA_SKIN].$fileSuffix))
                            echo "<div class='skin ".(SERVER == "fivem" ? "fivem" : "")."' style='background-image: url(".THEME."images/skins/".SERVER."/".$data[$i][PLAYER_DATA_SKIN].$fileSuffix.");'></div>\n";
                        else
                            echo "<div class='skin quest' style='background-image: url(".THEME."images/skins/question.svg);'></div>\n";

                        echo "<div class='text-center'>\n";
                            echo "<div class='nick'>".$data[$i][PLAYER_DATA_NICK]."</div>\n";
                            echo "<div class='stat badge badge-primary'>".number_format($data[$i][$topcat],0,',','&nbsp;').$locale['tops_'.substr($group, 0,1).substr($_GET['category'], 0,3)]."</div>\n";
                        echo "</div>\n";
                    echo "</div>\n";
                echo "</div>\n";
            }
        } else if ($group == "crews") {
            $data = $topcat;
            $rank = $previous = 0;

            if (!$data[0]) {
                redirect(BASEDIR."top.php?category=posts");
            }

            for ($i=0; $i<$data[$i]; $i++) {
                $rank = $previous > $data[$i][CREW_DATA_RESPECT] ? $rank+1 : $rank;
                $previous = $data[$i][CREW_DATA_RESPECT];

                echo "<div class='col-lg-3 col-md-3 col-sm-3 tmb".getpr($i)."'>\n";
                    echo "<div id='tops'>\n";
                        echo "<div class='pos' style='color:".getrc($rank).";'>#".($rank+1)."</div>\n";

                        echo "<div class='text-center'>\n";
                            echo "<div class='nick'>".fixlatin(preg_replace('#\{(.*?)\}#si', '\2', $data[$i][CREW_DATA_NAME]))."</div>\n";
                            echo "<div class='stat badge badge-primary'>".number_format($data[$i][CREW_DATA_RESPECT],0,',','&nbsp;').$locale['tops_'.substr($group, 0,1).substr($_GET['category'], 0,3)]."</div>\n";
                        echo "</div>\n";
                    echo "</div>\n";
                echo "</div>\n";
            }
        } else if ($group == "web") {
            $limit = isMobile ? 20 : 100;
            if ($_GET['category'] == "posts") {
                require_once INCLUDES."forum_include.php";
                $result = dbquery("SELECT * FROM ".DB_USERS." ORDER BY user_posts DESC LIMIT 0,".$limit);
            } elseif ($_GET['category'] == "shouts") {
                $result = dbquery(
                    "SELECT s.shout_name, COUNT(*) AS user_posts, u.user_id, u.user_name, u.user_status, u.user_avatar
                    FROM ".DB_PREFIX."shoutbox s
                    LEFT JOIN ".DB_USERS." u ON s.shout_name = u.user_id
                    WHERE u.user_id != ''
                    GROUP BY s.shout_name ORDER BY user_posts DESC LIMIT 0,".$limit
                );
            } elseif ($_GET['category'] == "comments") {
                $result = dbquery(
                    "SELECT s.comment_name, COUNT(*) AS user_posts, u.user_id, u.user_name, u.user_status, u.user_avatar
                    FROM ".DB_COMMENTS." s
                    LEFT JOIN ".DB_USERS." u ON s.comment_name = u.user_id
                    WHERE u.user_id != ''
                    GROUP BY s.comment_name ORDER BY user_posts DESC LIMIT 0,".$limit
                );
            } elseif ($_GET['category'] == "medias") {
                include INFUSIONS."gallery_panel/infusion_db.php";
                $result = dbquery(
                    "SELECT s.media_owner, COUNT(*) AS user_posts, u.user_id, u.user_name, u.user_status, u.user_avatar
                    FROM ".DB_GALLERY." s
                    LEFT JOIN ".DB_USERS." u ON s.media_owner = u.user_id
                    WHERE u.user_id != '' AND s.media_status='1'
                    GROUP BY s.media_owner HAVING user_posts > 0 ORDER BY user_posts DESC LIMIT 0,".$limit
                );
            } elseif ($_GET['category'] == "contributors") {
                $result = dbquery(
                    "SELECT s.thread_author, COUNT(*) AS user_posts, u.user_id, u.user_name, u.user_status, u.user_avatar
                    FROM ".DB_THREADS." s
                    LEFT JOIN ".DB_USERS." u ON s.thread_author = u.user_id
                    WHERE u.user_id != '' AND s.forum_id = '219'
                    GROUP BY s.thread_author ORDER BY user_posts DESC LIMIT 0,".$limit
                );
            } else {
                $catnames = array(
                    'posts' => array(
                        '1',
                        $locale['tops_c_wpos'], 
                        DB_POSTS,
                        'post_id',
                        'post_author',
                    ),
                    /*'news' => array(
                        '2',
                        $locale['global_082'], 
                        DB_NEWS,
                        'news_id',
                        'news_name',
                    ),*/
                    'articles' => array(
                        '4',
                        $locale['SP_menu_articls'], 
                        DB_ARTICLES,
                        'article_id',
                        'article_name',
                    ),
                    'comments' => array(
                        '5',
                        $locale['tops_c_wcom'], 
                        DB_COMMENTS,
                        'comment_id',
                        'comment_name',
                    ),
                    'gallery' => array(
                        '6',
                        'Media', 
                        'sp_gallery',
                        'media_id',
                        'media_owner',
                    ),
                    'index' => 'posts'
                );

                if (isset($_GET['data'], $catnames[$_GET['data']]))
                    $catnames['index'] = $_GET['data'];

                echo "<select id='catsel' class='custom-select my-2'>\n";

                    foreach ($catnames as $cat => $data) {
                        if ($cat != "index") {
                            $sel = $catnames['index'] == $cat ? " selected" : "";
                            echo "<option value='".BASEDIR."top.php?category=".$_GET['category']."&data=".$cat."'".$sel.">".$data[1]."</option>\n";
                        }
                    }

                echo "</select>\n";

                add_to_footer("<script type='text/javascript'>
                    $('#catsel').on('change', function(){
                        window.location = $(this).val();
                    });
                </script>");

                $result = dbquery(
                    "SELECT l.post_id, COUNT(*) AS user_posts, g.*, u.user_id, u.user_name, u.user_status, u.user_avatar
                    FROM ".DB_LIKES." l
                    LEFT JOIN ".$catnames[$catnames['index']][2]." g ON l.post_id = g.".$catnames[$catnames['index']][3]."
                    LEFT JOIN ".DB_USERS." u ON g.".$catnames[$catnames['index']][4]." = u.user_id
                    ".($catnames['index'] == "posts" ? "LEFT JOIN ".DB_FORUMS." f ON g.forum_id = f.forum_id WHERE f.forum_language LIKE '%".LANGUAGE."%' AND f.forum_server LIKE '%".SERVER."%' AND (".groupaccess('f.forum_access')." ".moderatoraccess('f.forum_moderators').") AND " : ($catnames['index'] == "articles" ? "LEFT JOIN ".DB_ARTICLE_CATS." a ON g.article_cat = a.article_cat_id WHERE a.article_cat_language LIKE '%".LANGUAGE."%' AND ".groupaccess('a.article_cat_access')." AND a.article_cat_server LIKE '%".SERVER."%' AND " : "WHERE "))."
                    l.type='".$topcat."' AND l.class='".$catnames[$catnames['index']][0]."' AND u.user_id != '' ".($catnames['index'] == "gallery" ? "AND media_language LIKE '%".LANGUAGE."%' AND media_server LIKE '%".SERVER."%'" : "")."
                    GROUP BY l.post_id ORDER BY user_posts DESC, u.user_name ASC LIMIT 0,".$limit
                );
            }

            $rank = 1; $i = $previous = 0;
            while ($data = dbarray($result)) {
                if (isset($catnames)) {
                    if ($catnames['index'] == "posts")
                        $link = FORUM."viewthread.php?pid=".$data['post_id'];
                    elseif ($catnames['index'] == "articles")
                        $link = BASEDIR."articles.php?article_id=".$data['article_id'];
                    elseif ($catnames['index'] == "gallery")
                        $link = INFUSIONS."gallery_panel/gallery.php?media=".$data['media_id'];
                    elseif ($catnames['index'] == "comments") {
                        $comms_per_page = $settings['comments_per_page'];
                        $rowstart = 0;

                        $reply_count = dbcount("(comment_id)", DB_COMMENTS, "comment_type='".$data['comment_type']."' AND comment_id<='".$data['comment_id']."' AND comment_item_id='".$data['comment_item_id']."'");
                        if ($reply_count > $comms_per_page) {
                            $rowstart = ((ceil($reply_count / $comms_per_page) -1) * $comms_per_page);
                        }

                        if ($data['comment_type'] == "A") {
                            $res = dbquery("
                                SELECT a.article_id FROM ".DB_ARTICLES." a
                                LEFT JOIN ".DB_ARTICLE_CATS." ac ON a.article_cat = ac.article_cat_id 
                                WHERE a.article_id = '".$data['comment_item_id']."' AND ac.article_cat_language LIKE '%".LANGUAGE."%' AND ac.article_cat_server LIKE '%".SERVER."%'"
                            );
                            if (!dbrows($res))
                                continue;

                            $link = BASEDIR."articles.php?article_id=".$data['comment_item_id'];
                        } elseif ($data['comment_type'] == "N") {
                            $samelang = dbcount("(news_id)", DB_NEWS, "news_id='".$data['comment_item_id']."' AND news_language LIKE '%".LANGUAGE."%' AND news_server LIKE '%".SERVER."%'");
                            if (!$samelang)
                                continue;

                            $link = BASEDIR."news.php?readmore=".$data['comment_item_id'];
                        } elseif ($data['comment_type'] == "GP") {
                            $samelang = dbcount("(media_id)", "sp_gallery", "media_id='".$data['comment_item_id']."' AND media_language LIKE '%".LANGUAGE."%' AND media_server LIKE '%".SERVER."%'");
                            if (!$samelang)
                                continue;

                            $link = INFUSIONS."gallery_panel/gallery.php?media=".$data['comment_item_id'];
                        }

                        $link .= "&c_start=".$rowstart."#c".$data[$catnames[$catnames['index']][3]];
                    }
                }

                $rank = $previous > $data['user_posts'] ? $rank+1 : $rank;
                $previous = $data['user_posts'];

                echo "<div class='col-lg-3 col-md-3 col-sm-3 tmb".getpr($i)."'>\n";
                    echo "<div id='tops' class='wtops'>\n";
                        echo "<div class='pos' style='color:".getrc(($rank-1)).";'>#".$rank."</div>\n";
                        echo "<div class='rounded-circle rounded-svg text-center'>".display_avatar($data, "48px")."</div>\n";

                        echo "<div class='text-center'>\n";
                            echo "<div class='nick'>".profile_link($data['user_id'], $data['user_name'], $data['user_status'])."</div>\n";
                            if ($_GET['category'] == "posts") echo show_forum_rank($data['user_posts'], 101, $data['user_groups'], true);
                            if (isset($catnames)) echo "<div><a href='".$link."' target='_blank'>".$locale['global_140']."</a></div>\n";
                            echo "<div class='stat badge badge-primary'>".number_format($data['user_posts'],0,',','&nbsp;')." ".$locale['tops_'.substr($group, 0,1).substr($_GET['category'], 0,3)]."</div>\n";
                        echo "</div>\n";
                    echo "</div>\n";
                echo "</div>\n";
                $i++;
            }
        }
    echo "</div>\n";

closetable();

require_once THEMES."templates/footer.php";