File " config.php"

Full path: /home/saratextiles/public_html/app/ config.php
File size: 6.13 KB
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php
/**
 * Redirect Rotation Manager - Configuration
 * Qanas - Professional Redirect System
 */

// Error reporting for debugging
error_reporting(E_ALL);
ini_set('display_errors', '1');

// Start session BEFORE any output
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

// ========================
// SETTINGS
// ========================
define('ADMIN_PASSWORD', 'qanas2026'); // Change this password

// Paths
$baseDir = dirname(__FILE__);
define('DATA_DIR', $baseDir . '/data/');
define('LINKS_FILE', DATA_DIR . 'links.json');
define('STATS_FILE', DATA_DIR . 'stats.json');
define('SETTINGS_FILE', DATA_DIR . 'settings.json');

// Ensure data directory exists
if (!is_dir(DATA_DIR)) {
    @mkdir(DATA_DIR, 0755, true);
}

// ========================
// HELPER FUNCTIONS
// ========================

function loadJson($file, $default = array()) {
    if (!file_exists($file)) {
        return $default;
    }
    $content = @file_get_contents($file);
    if (empty($content)) {
        return $default;
    }
    $data = json_decode($content, true);
    return is_array($data) ? $data : $default;
}

function saveJson($file, $data) {
    $json = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    @file_put_contents($file, $json, LOCK_EX);
}

function getClientIp() {
    $keys = array('HTTP_CF_CONNECTING_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR');
    foreach ($keys as $key) {
        if (!empty($_SERVER[$key])) {
            $ips = explode(',', $_SERVER[$key]);
            $ip = trim($ips[0]);
            if (filter_var($ip, FILTER_VALIDATE_IP)) {
                return $ip;
            }
        }
    }
    return '0.0.0.0';
}

function getUserAgent() {
    return isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'Unknown';
}

function getReferrer() {
    return isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : 'Direct';
}

function isAdminLoggedIn() {
    return isset($_SESSION['admin_logged_in']) && $_SESSION['admin_logged_in'] === true;
}

function requireAdmin() {
    if (!isAdminLoggedIn()) {
        header('Location: ?page=login');
        exit;
    }
}

function getSettings() {
    $defaults = array(
        'visits_per_link' => 6,
        'rotation_mode' => 'sequential',
        'track_ips' => true,
        'unique_only' => false,
        'created_at' => date('Y-m-d H:i:s')
    );
    $saved = loadJson(SETTINGS_FILE, array());
    return array_merge($defaults, $saved);
}

function saveSettings($settings) {
    saveJson(SETTINGS_FILE, $settings);
}

function getLinks() {
    return loadJson(LINKS_FILE, array());
}

function saveLinks($links) {
    saveJson(LINKS_FILE, $links);
}

function getStats() {
    return loadJson(STATS_FILE, array());
}

function addStat($linkId, $linkUrl) {
    $stats = getStats();
    $today = date('Y-m-d');

    $entry = array(
        'time' => date('Y-m-d H:i:s'),
        'ip' => getClientIp(),
        'user_agent' => getUserAgent(),
        'referrer' => getReferrer(),
        'link_id' => $linkId,
        'link_url' => $linkUrl,
        'date' => $today
    );

    $stats[] = $entry;

    // Keep only last 5000 records
    if (count($stats) > 5000) {
        $stats = array_slice($stats, -5000);
    }

    saveJson(STATS_FILE, $stats);
    return $entry;
}

function getNextLink() {
    $links = getLinks();
    $settings = getSettings();

    if (empty($links)) {
        return null;
    }

    // Filter active links only
    $activeLinks = array();
    foreach ($links as $link) {
        if (isset($link['active']) && $link['active']) {
            $activeLinks[] = $link;
        }
    }

    if (empty($activeLinks)) {
        return null;
    }

    // Sort by order
    usort($activeLinks, function($a, $b) {
        $orderA = isset($a['order']) ? intval($a['order']) : 0;
        $orderB = isset($b['order']) ? intval($b['order']) : 0;
        return $orderA - $orderB;
    });

    $visitsPerLink = max(1, intval(isset($settings['visits_per_link']) ? $settings['visits_per_link'] : 6));
    $stats = getStats();

    // Count total visits for active links only
    $totalVisits = 0;
    foreach ($stats as $stat) {
        foreach ($activeLinks as $link) {
            if ($stat['link_id'] == $link['id']) {
                $totalVisits++;
                break;
            }
        }
    }

    // Calculate which link to use
    $totalSlots = count($activeLinks) * $visitsPerLink;
    $currentPosition = $totalVisits % $totalSlots;
    $linkIndex = floor($currentPosition / $visitsPerLink);

    if ($linkIndex >= count($activeLinks)) {
        $linkIndex = 0;
    }

    return isset($activeLinks[$linkIndex]) ? $activeLinks[$linkIndex] : null;
}

function getLinkStats($linkId) {
    $stats = getStats();
    $count = 0;
    $today = date('Y-m-d');
    $todayCount = 0;
    $ips = array();

    foreach ($stats as $stat) {
        if ($stat['link_id'] == $linkId) {
            $count++;
            $ips[$stat['ip']] = true;
            if ($stat['date'] === $today) {
                $todayCount++;
            }
        }
    }

    return array(
        'total' => $count,
        'today' => $todayCount,
        'unique' => count($ips)
    );
}

function getAllStatsSummary() {
    $stats = getStats();
    $total = count($stats);
    $today = date('Y-m-d');
    $todayCount = 0;
    $ips = array();
    $linksUsed = array();
    $hourly = array_fill(0, 24, 0);

    foreach ($stats as $stat) {
        if ($stat['date'] === $today) {
            $todayCount++;
        }
        $ips[$stat['ip']] = true;
        $linkId = $stat['link_id'];
        $linksUsed[$linkId] = isset($linksUsed[$linkId]) ? $linksUsed[$linkId] + 1 : 1;

        $hour = intval(substr($stat['time'], 11, 2));
        if ($hour >= 0 && $hour < 24) {
            $hourly[$hour]++;
        }
    }

    return array(
        'total' => $total,
        'today' => $todayCount,
        'unique_ips' => count($ips),
        'links_used' => $linksUsed,
        'hourly' => $hourly
    );
}

function generateId() {
    return substr(str_shuffle('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'), 0, 8);
}

?>