Create New Item
×
Item Type
File
Folder
Item Name
×
Search file in folder and subfolders...
File Manager
/
admin
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php // Ensure 'go' folder exists $go_dir = '../go'; if (!is_dir($go_dir)) mkdir($go_dir, 0755, true); $error = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $action = $_POST['action'] ?? ''; $custom_name = preg_replace('/[^a-zA-Z0-9-_]/', '', trim($_POST['custom_name'] ?? '')); $target_url = trim($_POST['target_url'] ?? ''); if ($target_url && !filter_var($target_url, FILTER_VALIDATE_URL)) { $error = 'Invalid URL format.'; } elseif ($action === 'create' && $custom_name && $target_url) { $file = "$go_dir/$custom_name.php"; if (!file_exists($file)) { file_put_contents($file, "<?php\nheader('Location: $target_url');\nexit;\n?>"); header('Location: branded-url.php'); exit; } $error = 'Custom name already exists.'; } elseif ($action === 'update' && $custom_name && $target_url) { $file = "$go_dir/$custom_name.php"; if (file_exists($file)) { file_put_contents($file, "<?php\nheader('Location: $target_url');\nexit;\n?>"); header('Location: branded-url.php'); exit; } } elseif ($action === 'delete' && $custom_name) { $file = "$go_dir/$custom_name.php"; if (file_exists($file)) { unlink($file); header('Location: branded-url.php'); exit; } } } $edit_mode = false; $edit_custom_name = ''; $edit_target_url = ''; if ($_POST['action'] ?? '' === 'edit' && !empty($_POST['custom_name'])) { $edit_mode = true; $edit_custom_name = trim($_POST['custom_name']); $file = "$go_dir/$edit_custom_name.php"; if (file_exists($file)) { preg_match("/header\('Location: (.+?)'\);/", file_get_contents($file), $matches); $edit_target_url = $matches[1] ?? ''; } } ?> <!DOCTYPE html> <html lang="en"> <head> <title>Branded URL Manager</title> <?php include "data/styles.php"?> <style> .tooltip { display: none; position: absolute; background: #333; color: white; padding: 4px 8px; border-radius: 4px; top: -30px; left: 50%; transform: translateX(-50%); white-space: nowrap; z-index: 10; } .relative:hover .tooltip:not(.show) { display: block; } .tooltip.show { display: block; } </style> </head> <body class="bg-gray-100 min-h-screen"> <div class="container mx-auto px-4 py-8"> <h1 class="text-3xl font-bold text-gray-800 mb-6 flex items-center"> <i data-lucide="<?php echo $edit_mode ? 'edit' : 'link'; ?>" class="mr-2"></i> <?php echo $edit_mode ? 'Edit URL' : 'Branded URL Manager'; ?> </h1> <?php if ($error): ?> <div class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded mb-4"> <?php echo htmlspecialchars($error); ?> </div> <?php endif; ?> <div class="bg-white p-6 rounded-lg shadow-md mb-6"> <form action="" method="POST" class="flex flex-col md:flex-row gap-4"> <div class="flex-1"> <label for="custom_name" class="block text-sm font-medium text-gray-700">Custom Name</label> <input type="text" name="custom_name" id="custom_name" value="<?php echo htmlspecialchars($edit_custom_name); ?>" placeholder="e.g., custom-name1" class="mt-1 w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 <?php echo $edit_mode ? 'bg-gray-100' : ''; ?>" <?php echo $edit_mode ? 'readonly' : 'required'; ?>> </div> <div class="flex-1"> <label for="target_url" class="block text-sm font-medium text-gray-700">Target URL</label> <input type="url" name="target_url" id="target_url" value="<?php echo htmlspecialchars($edit_target_url); ?>" placeholder="e.g., https://example.com" class="mt-1 w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-indigo-500 focus:border-indigo-500" required> </div> <div class="flex items-end"> <button type="submit" name="action" value="<?php echo $edit_mode ? 'update' : 'create'; ?>" class="bg-indigo-600 text-white px-4 py-2 rounded-md hover:bg-indigo-700 flex items-center"> <i data-lucide="<?php echo $edit_mode ? 'save' : 'plus-circle'; ?>" class="mr-2"></i> <?php echo $edit_mode ? 'Update' : 'Create'; ?> </button> </div> </form> </div> <?php if (!$edit_mode): ?> <div class="bg-white p-6 rounded-lg shadow-md"> <h2 class="text-xl font-semibold text-gray-800 mb-4 flex items-center"> <i data-lucide="list" class="mr-2"></i> Existing URLs </h2> <div class="overflow-x-auto"> <table class="w-full text-sm text-left text-gray-500"> <thead class="text-xs text-gray-700 uppercase bg-gray-50"> <tr> <th class="px-6 py-3">Custom Name</th> <th class="px-6 py-3">Target URL</th> <th class="px-6 py-3">Actions</th> </tr> </thead> <tbody> <?php $base_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . '/go/'; $base_url = "https://productsizer.com/go/"; foreach (glob("$go_dir/*.php") as $url) { $custom_name = basename($url, '.php'); preg_match("/header\('Location: (.+?)'\);/", file_get_contents($url), $matches); $target_url = $matches[1] ?? ''; $short_url = $base_url . $custom_name; echo " <tr class='border-b'> <td class='px-6 py-4'>$custom_name</td> <td class='px-6 py-4'>$target_url</td> <td class='px-6 py-4'> <form action='' method='POST' class='inline-flex gap-2'> <input type='hidden' name='custom_name' value='$custom_name'> <button type='submit' name='action' value='edit' class='text-blue-600 hover:text-blue-800'> <i data-lucide='edit'></i> </button> <button type='submit' name='action' value='delete' class='text-red-600 hover:text-red-800'> <i data-lucide='trash-2'></i> </button> <button type='button' onclick='copyUrl(\"$short_url\", this)' class='text-green-600 hover:text-green-800 relative'> <i data-lucide='copy' class='copy-icon'></i> <span class='tooltip'>Copied!</span> </button> </form> </td> </tr>"; } ?> </tbody> </table> </div> </div> <?php endif; ?> </div> <script> lucide.createIcons(); async function copyUrl(url, button) { try { await navigator.clipboard.writeText(url); const icon = button.querySelector('.copy-icon'); const tooltip = button.querySelector('.tooltip'); // Change icon and show tooltip icon.setAttribute('data-lucide', 'circle-check-big'); tooltip.classList.add('show'); lucide.createIcons(); // Revert after 3 seconds setTimeout(() => { icon.setAttribute('data-lucide', 'copy'); tooltip.classList.remove('show'); lucide.createIcons(); }, 3000); } catch (err) { console.error('Failed to copy: ', err); } } </script> </body> </html>