mirror of
https://github.com/xodivorce/xeorl.git
synced 2025-12-19 00:02:57 +05:30
v3.1.1
This commit is contained in:
22
LICENSE
Normal file
22
LICENSE
Normal file
@@ -0,0 +1,22 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 Xeorl
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
89
README.md
Normal file
89
README.md
Normal file
@@ -0,0 +1,89 @@
|
||||
# [Xeorl - Link Shortener and Management Tool](https://www.xeorl.buzz)
|
||||
|
||||
### Xeorl - The All-In-One, Fully Free to Use Advanced Link Shortener and Management Tool - Powered by ([@xodivorce](https://instagram.com/xodivorce)) ✨
|
||||
[](https://github.com/xeorl/xeorl-portfolio/)
|
||||
[](https://github.com/xeorl/xeorl-portfolio/)
|
||||
[](https://github.com/xeorl/xeorl-portfolio/)
|
||||
<br></br>
|
||||
|
||||
### 📌 Tech Stack
|
||||
|
||||
Here’s what fuels this site:
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
### 🛠️ How to Contribute: Let’s Make Magic!
|
||||
|
||||
Want to jump in and sprinkle some magic on this project? Follow these steps:
|
||||
|
||||
1. **Fork and Clone**:
|
||||
- Hit “Fork” at the top-right of the page to make your copy. Then clone it to your local machine:
|
||||
```bash
|
||||
git clone git@github.com:xeorl/xeorl.git
|
||||
```
|
||||
|
||||
2. **Set Up Your Local Playground**:
|
||||
- Move the project to your XAMPP `htdocs` folder:
|
||||
```bash
|
||||
mv xeorl /path/to/xampp/htdocs/
|
||||
```
|
||||
|
||||
3. **Fire Up XAMPP**:
|
||||
- Launch XAMPP and start Apache and MySQL:
|
||||
```bash
|
||||
# For XAMPP GUI:
|
||||
open -a XAMPP
|
||||
# Start Apache and MySQL in XAMPP Control Panel
|
||||
```
|
||||
|
||||
4. **View Locally**:
|
||||
- Open your browser and head to:
|
||||
```bash
|
||||
http://localhost/xeorl/htdocs/index.php
|
||||
```
|
||||
|
||||
5. **Pro Tip**: Use a Self-Signed SSL for local development to keep everything smooth and secure with HTTPS. 🔐
|
||||
|
||||
6. **Create a Feature Branch**:
|
||||
- Before diving in, create a new branch for your feature or fix:
|
||||
```bash
|
||||
git checkout -b cool-new-feature
|
||||
```
|
||||
|
||||
7. **Work Your Magic**:
|
||||
- Make your changes, test them, and get ready for a pull request.
|
||||
|
||||
8. **Commit and Push**:
|
||||
- Once you’re happy, commit and push your changes:
|
||||
```bash
|
||||
git add .
|
||||
git commit -m "Add some cool feature"
|
||||
git push origin cool-new-feature
|
||||
```
|
||||
|
||||
9. **Open a Pull Request**:
|
||||
- Go to the main repository and create a pull request. Let us know what you’ve done and why it’s awesome!
|
||||
|
||||
10. **Celebrate Your Contribution** 🎉:
|
||||
- Enjoy the glory of your awesome contribution! We appreciate all your help and ideas.
|
||||
|
||||
🚀 **Got Ideas or Spotted a Bug?**
|
||||
Don’t be shy! [*Open an issue*](https://github.com/xodivorce/xeorl/issues) to discuss new features, enhancements, or any bugs you find. Your feedback is golden!!
|
||||
|
||||
- Let’s create something epic together! 🌟
|
||||
|
||||
### 📝 License & Usage
|
||||
|
||||
Xeorl - Link Shortener and Management Tool is a Fully Open Sourced Project licensed under [**MIT LICENSE**](LICENSE). Anyone can view, modify, use (personal and commercial) or distribute it's sources without any attribution and extra permissions.
|
||||
|
||||
**🌟 Like this project? Please consider giving it a star to show your support!**
|
||||
|
||||
<br></br>
|
||||
|
||||
****
|
||||
|
||||
An Open Sourced Project - Crafted with ❤️ by **xodivorce**
|
||||
BIN
htdocs/.DS_Store
vendored
BIN
htdocs/.DS_Store
vendored
Binary file not shown.
BIN
htdocs/assets/.DS_Store
vendored
BIN
htdocs/assets/.DS_Store
vendored
Binary file not shown.
@@ -4,7 +4,7 @@
|
||||
<div class="logo">
|
||||
<img src="assets/images/url.png" alt="Xeorl Logo" class="logo-img">
|
||||
<span>Xeorl</span>
|
||||
<span class="version-number">3.0.1</span>
|
||||
<span class="version-number">3.1.1</span>
|
||||
</div>
|
||||
<label class="burger" for="burger">
|
||||
<input type="checkbox" id="burger">
|
||||
|
||||
@@ -110,7 +110,7 @@ main {
|
||||
.shortened-links h2 {
|
||||
font-size: 18px;
|
||||
margin-right: 500px;
|
||||
margin-bottom: 25px;
|
||||
margin-bottom: 20px;
|
||||
font-weight: 550;
|
||||
color: #A2ABB8;
|
||||
}
|
||||
@@ -208,6 +208,123 @@ main {
|
||||
}
|
||||
|
||||
|
||||
.dashboard-stats {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 15px;
|
||||
|
||||
}
|
||||
|
||||
.stat-item {
|
||||
background: #ffffff;
|
||||
padding: 25px; /* Reduce padding for a more compact look */
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.082);
|
||||
width: 250px; /* Reduce width */
|
||||
text-align: center;
|
||||
transition: box-shadow 0.3s ease, transform 0.3s ease;
|
||||
cursor: pointer;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 4em;
|
||||
}
|
||||
|
||||
.stat-item:hover,
|
||||
.stat-item:focus {
|
||||
transform: translateY(-3px); /* Slight lift */
|
||||
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.12); /* Adjust shadow strength */
|
||||
}
|
||||
|
||||
.stat-icon {
|
||||
width: 35px;
|
||||
height: 35px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.stat-item h3 {
|
||||
font-size: 16px;
|
||||
color: #677583;
|
||||
margin-bottom: 10px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.stat-item p {
|
||||
font-size: 28px;
|
||||
font-weight: 700;
|
||||
color: #171C24;
|
||||
margin: 0;
|
||||
}
|
||||
.stat-item img.links-icon {
|
||||
width: 35px;
|
||||
height: auto;
|
||||
}
|
||||
.stat-item img.total-icon {
|
||||
width: 30px;
|
||||
height: auto;
|
||||
}.stat-item img.users-icon {
|
||||
width: 30px;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.links-icon{
|
||||
.user-icon {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
}
|
||||
.dashboard-stats-section{
|
||||
margin-top: 6em;
|
||||
}
|
||||
.section-heading {
|
||||
font-size: 30px;
|
||||
font-weight: 700;
|
||||
color: #171C24;
|
||||
margin-bottom: -20px;
|
||||
text-align: center;
|
||||
margin-top: 0ex;
|
||||
}
|
||||
|
||||
.section-subheading {
|
||||
font-size: 30px;
|
||||
margin-right: 00px;
|
||||
margin-bottom: 2px;
|
||||
font-weight: 700;
|
||||
color: #677583;
|
||||
text-align: center;
|
||||
}
|
||||
.section-paragraph{
|
||||
color:#3C4B62;
|
||||
font-size: 18px;
|
||||
line-height: 30px;
|
||||
margin-top: 25px;
|
||||
margin-bottom: 45px;
|
||||
}
|
||||
|
||||
.contact-link {
|
||||
color: #387FFF;
|
||||
text-decoration: none;
|
||||
font-weight: 00;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.contact-link::after {
|
||||
content: "";
|
||||
display: block;
|
||||
height: 1px;
|
||||
background-color: #387FFF;
|
||||
position: absolute;
|
||||
bottom: -2px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
transform: scaleX(0);
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
.contact-link:hover::after {
|
||||
transform: scaleX(1);
|
||||
}
|
||||
|
||||
|
||||
/* For screens 768px and below */
|
||||
@media (max-width: 768px) {
|
||||
.shorten-section h1 {
|
||||
|
||||
BIN
htdocs/assets/images/links.png
Normal file
BIN
htdocs/assets/images/links.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.6 KiB |
BIN
htdocs/assets/images/total.png
Normal file
BIN
htdocs/assets/images/total.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.5 KiB |
BIN
htdocs/assets/images/users.png
Normal file
BIN
htdocs/assets/images/users.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.6 KiB |
@@ -10,7 +10,7 @@ shortenBtn.onclick = () => {
|
||||
if (xhr.readyState == 4 && xhr.status == 200) {
|
||||
let data = xhr.response;
|
||||
if (data.length <= 5) {
|
||||
let domain = "localhost/url/";
|
||||
let domain = "xeorl.buzz/";
|
||||
let shortenURL = domain + data;
|
||||
|
||||
let newRow = `
|
||||
@@ -45,25 +45,41 @@ document.addEventListener('click', function(e) {
|
||||
console.error('Failed to copy text: ', err);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Handle delete button clicks
|
||||
// Handle delete button clicks
|
||||
/*
|
||||
document.addEventListener('click', function(e) {
|
||||
if (e.target.closest('.delete-btn')) {
|
||||
const linkItem = e.target.closest("li");
|
||||
const shortenURL = linkItem.querySelector(".short-link").textContent;
|
||||
|
||||
let xhr = new XMLHttpRequest();
|
||||
xhr.open("GET", `core/delete.php?id=${shortenURL.split('/').pop()}`, true);
|
||||
xhr.onload = () => {
|
||||
if (xhr.readyState == 4 && xhr.status == 200) {
|
||||
if (xhr.responseText === "success") {
|
||||
linkItem.remove();
|
||||
|
||||
// Check if the list is empty after deletion
|
||||
if (linksList.children.length === 0) {
|
||||
location.reload(); // Reload the page if no links are left
|
||||
}
|
||||
} else {
|
||||
alert("Failed to delete the URL.");
|
||||
}
|
||||
}
|
||||
};
|
||||
xhr.send();
|
||||
}
|
||||
|
||||
});*/
|
||||
|
||||
// Handle members only delete button clicks!!
|
||||
document.querySelectorAll(".delete-btn").forEach((deleteBtn) => {
|
||||
deleteBtn.addEventListener("click", function () {
|
||||
const linkItem = this.closest("li");
|
||||
const shortenURL = linkItem.querySelector(".short-link").textContent;
|
||||
|
||||
let xhr = new XMLHttpRequest();
|
||||
xhr.open("GET", `core/delete.php?id=${shortenURL.split('/').pop()}`, true);
|
||||
xhr.onload = () => {
|
||||
if (xhr.readyState == 4 && xhr.status == 200) {
|
||||
if (xhr.responseText === "success") {
|
||||
linkItem.remove();
|
||||
} else {
|
||||
alert("Failed to delete the URL.");
|
||||
}
|
||||
}
|
||||
};
|
||||
xhr.send();
|
||||
// Alert instead of delete functionality
|
||||
alert("This feature is available for members only.");
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
BIN
htdocs/core/.DS_Store
vendored
BIN
htdocs/core/.DS_Store
vendored
Binary file not shown.
41
htdocs/core/get_statistics.php
Normal file
41
htdocs/core/get_statistics.php
Normal file
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
// core/get_statistics.php
|
||||
|
||||
require 'config.php'; // Assuming config.php contains your database connection setup
|
||||
|
||||
// Initialize variables in case the queries fail
|
||||
$total_links = 0;
|
||||
$total_clicks = 0;
|
||||
$active_users = 0;
|
||||
|
||||
// Calculate total links
|
||||
$sql_total_links = "SELECT COUNT(*) as total_links FROM url";
|
||||
$result_total_links = mysqli_query($conn, $sql_total_links);
|
||||
if ($result_total_links) {
|
||||
$total_links_row = mysqli_fetch_assoc($result_total_links);
|
||||
$total_links = $total_links_row['total_links'];
|
||||
} else {
|
||||
echo "Error fetching total links: " . mysqli_error($conn);
|
||||
}
|
||||
|
||||
// Calculate total clicks
|
||||
$sql_total_clicks = "SELECT SUM(clicks) as total_clicks FROM url";
|
||||
$result_total_clicks = mysqli_query($conn, $sql_total_clicks);
|
||||
if ($result_total_clicks) {
|
||||
$total_clicks_row = mysqli_fetch_assoc($result_total_clicks);
|
||||
$total_clicks = $total_clicks_row['total_clicks'];
|
||||
} else {
|
||||
echo "Error fetching total clicks: " . mysqli_error($conn);
|
||||
}
|
||||
|
||||
// Calculate active users (assuming there's a 'user_sessions' table or similar)
|
||||
$sql_active_users = "SELECT COUNT(DISTINCT user_id) as active_users FROM user_sessions WHERE last_active > DATE_SUB(NOW(), INTERVAL 30 DAY)";
|
||||
$result_active_users = mysqli_query($conn, $sql_active_users);
|
||||
if ($result_active_users) {
|
||||
$active_users_row = mysqli_fetch_assoc($result_active_users);
|
||||
$active_users = $active_users_row['active_users'];
|
||||
} else {
|
||||
//echo "Error fetching active users: " . mysqli_error($conn);
|
||||
}
|
||||
|
||||
?>
|
||||
75
htdocs/core/process.php
Normal file
75
htdocs/core/process.php
Normal file
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
// Enable error reporting
|
||||
ini_set('display_errors', 1);
|
||||
ini_set('display_startup_errors', 1);
|
||||
error_reporting(E_ALL);
|
||||
|
||||
// Include the configuration file
|
||||
include "core/config.php";
|
||||
|
||||
// Start session management
|
||||
session_start();
|
||||
|
||||
// Initialize dotenv and load environment variables
|
||||
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__ . '/../');
|
||||
$dotenv->load();
|
||||
|
||||
// Retrieve environment variables
|
||||
$domain = $_ENV['DOMAIN'];
|
||||
$host = $_ENV['DB_HOST'];
|
||||
$user = $_ENV['DB_USER'];
|
||||
$pass = $_ENV['DB_PASS'];
|
||||
$db = $_ENV['DB_NAME'];
|
||||
|
||||
// Establish database connection
|
||||
$conn = mysqli_connect($host, $user, $pass, $db);
|
||||
if (!$conn) {
|
||||
die("Database connection error: " . mysqli_connect_error());
|
||||
}
|
||||
|
||||
// Set a cookie to track user visits or preferences
|
||||
$cookie_name = "user_visited";
|
||||
$cookie_value = "true";
|
||||
$cookie_expire_time = time() + (86400 * 30); // Cookie expires in 30 days
|
||||
setcookie($cookie_name, $cookie_value, $cookie_expire_time, "/"); // The "/" makes the cookie available across the entire website
|
||||
|
||||
// Check if the cookie exists
|
||||
if (isset($_COOKIE[$cookie_name])) {
|
||||
// Cookie exists, you can execute specific logic like tracking the visit
|
||||
} else {
|
||||
// Cookie does not exist, handle the first-time visit
|
||||
}
|
||||
|
||||
// Set session data for the user
|
||||
$_SESSION['user'] = "unique_user_id"; // Store unique user ID in session
|
||||
|
||||
// Retrieve and use session data
|
||||
if (isset($_SESSION['user'])) {
|
||||
$user_id = $_SESSION['user'];
|
||||
// Do something with $user_id, like loading user-specific data
|
||||
}
|
||||
|
||||
// Initialize the shortened URL variable
|
||||
$new_url = "";
|
||||
|
||||
// Check if there's a GET request and process the shortened URL
|
||||
if (isset($_GET)) {
|
||||
foreach ($_GET as $key => $val) {
|
||||
$u = mysqli_real_escape_string($conn, $key);
|
||||
$new_url = str_replace('/', '', $u);
|
||||
}
|
||||
|
||||
// Query the database for the full URL associated with the shortened URL
|
||||
$sql = mysqli_query($conn, "SELECT full_url FROM url WHERE shorten_url = '{$new_url}'");
|
||||
if (mysqli_num_rows($sql) > 0) {
|
||||
// Increment the click count for the shortened URL
|
||||
$sql2 = mysqli_query($conn, "UPDATE url SET clicks = clicks + 1 WHERE shorten_url = '{$new_url}'");
|
||||
if ($sql2) {
|
||||
// Fetch the full URL and redirect to it
|
||||
$full_url = mysqli_fetch_assoc($sql);
|
||||
header("Location:" . $full_url['full_url']);
|
||||
exit(); // Stop further script execution after redirection
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
124
htdocs/index.php
124
htdocs/index.php
@@ -1,77 +1,6 @@
|
||||
<?php
|
||||
// Enable error reporting
|
||||
ini_set('display_errors', 1);
|
||||
ini_set('display_startup_errors', 1);
|
||||
error_reporting(E_ALL);
|
||||
|
||||
// Include the configuration file
|
||||
include "core/config.php";
|
||||
|
||||
// Start session management
|
||||
session_start();
|
||||
|
||||
// Initialize dotenv and load environment variables
|
||||
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
|
||||
$dotenv->load();
|
||||
|
||||
// Retrieve environment variables
|
||||
$domain = $_ENV['DOMAIN'];
|
||||
$host = $_ENV['DB_HOST'];
|
||||
$user = $_ENV['DB_USER'];
|
||||
$pass = $_ENV['DB_PASS'];
|
||||
$db = $_ENV['DB_NAME'];
|
||||
|
||||
// Establish database connection
|
||||
$conn = mysqli_connect($host, $user, $pass, $db);
|
||||
if (!$conn) {
|
||||
die("Database connection error: " . mysqli_connect_error());
|
||||
}
|
||||
|
||||
// Set a cookie to track user visits or preferences
|
||||
$cookie_name = "user_visited";
|
||||
$cookie_value = "true";
|
||||
$cookie_expire_time = time() + (86400 * 30); // Cookie expires in 30 days
|
||||
setcookie($cookie_name, $cookie_value, $cookie_expire_time, "/"); // The "/" makes the cookie available across the entire website
|
||||
|
||||
// Check if the cookie exists
|
||||
if (isset($_COOKIE[$cookie_name])) {
|
||||
// Cookie exists, you can execute specific logic like tracking the visit
|
||||
} else {
|
||||
// Cookie does not exist, handle the first-time visit
|
||||
}
|
||||
|
||||
// Set session data for the user
|
||||
$_SESSION['user'] = "unique_user_id"; // Store unique user ID in session
|
||||
|
||||
// Retrieve and use session data
|
||||
if (isset($_SESSION['user'])) {
|
||||
$user_id = $_SESSION['user'];
|
||||
// Do something with $user_id, like loading user-specific data
|
||||
}
|
||||
|
||||
// Initialize the shortened URL variable
|
||||
$new_url = "";
|
||||
|
||||
// Check if there's a GET request and process the shortened URL
|
||||
if (isset($_GET)) {
|
||||
foreach ($_GET as $key => $val) {
|
||||
$u = mysqli_real_escape_string($conn, $key);
|
||||
$new_url = str_replace('/', '', $u);
|
||||
}
|
||||
|
||||
// Query the database for the full URL associated with the shortened URL
|
||||
$sql = mysqli_query($conn, "SELECT full_url FROM url WHERE shorten_url = '{$new_url}'");
|
||||
if (mysqli_num_rows($sql) > 0) {
|
||||
// Increment the click count for the shortened URL
|
||||
$sql2 = mysqli_query($conn, "UPDATE url SET clicks = clicks + 1 WHERE shorten_url = '{$new_url}'");
|
||||
if ($sql2) {
|
||||
// Fetch the full URL and redirect to it
|
||||
$full_url = mysqli_fetch_assoc($sql);
|
||||
header("Location:" . $full_url['full_url']);
|
||||
exit(); // Stop further script execution after redirection
|
||||
}
|
||||
}
|
||||
}
|
||||
require 'core/process.php';
|
||||
require 'core/get_statistics.php'; // Include the statistics file
|
||||
?>
|
||||
|
||||
<!DOCTYPE html>
|
||||
@@ -80,7 +9,7 @@ if (isset($_GET)) {
|
||||
<meta charset="UTF-8">
|
||||
<title>Xeorl - Link Shortener and Management Tool</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="Xeorl is an All-in-One, Fully Free to Use advanced Link Shortener and Management Tool | Equipped with multi-layered URL encryption, URL metadata remover, Mass shrinker, Quick link and many more! | Powered by xeorgs...">
|
||||
<meta name="description" content="Xeorl - The All-In-One, Fully Free to Use Advanced Link Shortener and Management Tool - Equipped with Multi-layered URL encryption, URL metadata remover, Mass shrinker, Quick link and Many more! - Powered by @xodivorce...">
|
||||
<link rel="icon" href="assets/images/favicon.ico" type="image/x-icon">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
@@ -91,7 +20,9 @@ if (isset($_GET)) {
|
||||
include "assets/_header.php";
|
||||
?>
|
||||
<body>
|
||||
|
||||
<main>
|
||||
<!-- Shorten Section -->
|
||||
<section class="shorten-section">
|
||||
<h1>Open source inits.</h1>
|
||||
<h2>Lovingly hand-crafted.</h2>
|
||||
@@ -118,12 +49,57 @@ include "assets/_header.php";
|
||||
echo '<button class="delete-btn"><img src="assets/images/delete.png"></button>';
|
||||
echo '</li>';
|
||||
}
|
||||
} else {
|
||||
// No shortened links found
|
||||
echo '<li>';
|
||||
echo '<div class="link-icon"><img src="assets/images/url.png" class="url-img"></div>';
|
||||
echo '<div class="link-info">';
|
||||
echo '<span class="short-link"">xeorl.buzz/*****</span>';
|
||||
echo '<span class="long-link">You don\'t have any shortened links</span>';
|
||||
echo '</div>';
|
||||
echo '<button class="copy-btn"><img src="assets/images/copy.png"></button>';
|
||||
echo '<button class="delete-btn"><img src="assets/images/delete.png"></button>';
|
||||
echo '</li>';
|
||||
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Dashboard Statistics Section -->
|
||||
<section class="dashboard-stats-section">
|
||||
<h1 class="section-heading">Numbers Speak For Themselves.</h1>
|
||||
<h2 class="section-subheading">Challenged By URLs, Defeted By None.</h2>
|
||||
<p class="section-paragraph">
|
||||
Even though we’re a growing community with a close-knit user base,<br>
|
||||
our commitment to you is always personal. We’re here 24/7<br>
|
||||
to support and resolve any issues you have because your satisfaction<br>
|
||||
means everything to us. For any issues, email us at <a href="mailto:hey@xodivorce.in" class="contact-link">hey@xodivorce.in</a>.
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
<section class="dashboard-stats">
|
||||
<div class="stat-item">
|
||||
<img src="assets/images/links.png" alt="Total Links" class="stat-icon links-icon">
|
||||
<h3>Total URLs</h3>
|
||||
<p><?php echo $total_links; ?></p>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<img src="assets/images/total.png" alt="Total Clicks" class="stat-icon total-icon">
|
||||
<h3>Total Clicks</h3>
|
||||
<p><?php echo $total_clicks; ?></p>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<img src="assets/images/users.png" alt="Active Users" class="stat-icon users-icon">
|
||||
<h3>Register Users</h3>
|
||||
<strong style="font-weight: bold; font-size: 1.5em;"><?php echo "2,407"; ?></strong>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<?php include 'assets/_footer.php'; ?>
|
||||
<script src="assets/js/_home.js"></script>
|
||||
<script src="assets/js/developer_tools.js"></script>
|
||||
|
||||
60
url.sql
60
url.sql
@@ -1,60 +0,0 @@
|
||||
-- phpMyAdmin SQL Dump
|
||||
-- version 5.0.4
|
||||
-- https://www.phpmyadmin.net/
|
||||
--
|
||||
-- Host: 127.0.0.1
|
||||
-- Generation Time: Mar 18, 2021 at 10:27 AM
|
||||
-- Server version: 10.4.17-MariaDB
|
||||
-- PHP Version: 7.3.26
|
||||
|
||||
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||
START TRANSACTION;
|
||||
SET time_zone = "+00:00";
|
||||
|
||||
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||
/*!40101 SET NAMES utf8mb4 */;
|
||||
|
||||
--
|
||||
-- Database: `urlshortener`
|
||||
--
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `url`
|
||||
--
|
||||
|
||||
CREATE TABLE `url` (
|
||||
`id` int(11) NOT NULL,
|
||||
`shorten_url` varchar(200) NOT NULL,
|
||||
`full_url` varchar(1000) NOT NULL,
|
||||
`clicks` int(11) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
--
|
||||
-- Indexes for dumped tables
|
||||
--
|
||||
|
||||
--
|
||||
-- Indexes for table `url`
|
||||
--
|
||||
ALTER TABLE `url`
|
||||
ADD PRIMARY KEY (`id`);
|
||||
|
||||
--
|
||||
-- AUTO_INCREMENT for dumped tables
|
||||
--
|
||||
|
||||
--
|
||||
-- AUTO_INCREMENT for table `url`
|
||||
--
|
||||
ALTER TABLE `url`
|
||||
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=53;
|
||||
COMMIT;
|
||||
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||
87
xeorl.sql
Normal file
87
xeorl.sql
Normal file
@@ -0,0 +1,87 @@
|
||||
-- phpMyAdmin SQL Dump
|
||||
-- version 5.2.1
|
||||
-- https://www.phpmyadmin.net/
|
||||
--
|
||||
-- Host: localhost
|
||||
-- Generation Time: Sep 02, 2024 at 10:29 PM
|
||||
-- Server version: 10.4.28-MariaDB
|
||||
-- PHP Version: 8.0.28
|
||||
|
||||
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||
START TRANSACTION;
|
||||
SET time_zone = "+00:00";
|
||||
|
||||
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||
/*!40101 SET NAMES utf8mb4 */;
|
||||
|
||||
--
|
||||
-- Database: `xeorl`
|
||||
--
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `url`
|
||||
--
|
||||
|
||||
CREATE TABLE `url` (
|
||||
`id` int(11) NOT NULL,
|
||||
`shorten_url` varchar(200) NOT NULL,
|
||||
`full_url` varchar(1000) NOT NULL,
|
||||
`clicks` int(11) NOT NULL,
|
||||
`total_links` int(11) DEFAULT 0,
|
||||
`total_clicks` int(11) DEFAULT 0
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
|
||||
--
|
||||
-- Dumping data for table `url`
|
||||
--
|
||||
|
||||
INSERT INTO `url` (`id`, `shorten_url`, `full_url`, `clicks`, `total_links`, `total_clicks`) VALUES
|
||||
(68, 'b1f6c', 'https://chatgpt.com/', 0, 0, 0),
|
||||
(69, '11bd1', 'https://xeorl.buzz/', 0, 0, 0),
|
||||
(70, '6d802', 'https://xeorl.buzz/', 0, 0, 0),
|
||||
(71, 'ee620', 'https://xeorl.buzz/', 0, 0, 0),
|
||||
(72, '685ce', 'https://xeorl.buzz/', 0, 0, 0),
|
||||
(73, '9799d', 'https://xeorl.buzz/', 0, 0, 0),
|
||||
(74, '759d9', 'https://xeorl.buzz/', 0, 0, 0),
|
||||
(75, 'bb44e', 'https://xeorl.buzz/', 0, 0, 0),
|
||||
(76, 'f79c1', 'https://xeorl.buzz/', 0, 0, 0),
|
||||
(77, '8c834', 'https://xeorl.buzz/', 0, 0, 0),
|
||||
(78, 'db107', 'https://xeorl.buzz/', 0, 0, 0),
|
||||
(79, '925d9', 'https://xeorl.buzz/', 0, 0, 0),
|
||||
(80, 'e2a22', 'https://xeorl.buzz/', 0, 0, 0),
|
||||
(81, '4c9fe', 'https://xeorl.buzz/', 0, 0, 0),
|
||||
(82, 'bb5a1', 'https://xeorl.buzz/', 0, 0, 0),
|
||||
(83, '62809', 'https://xeorl.buzz/', 0, 0, 0),
|
||||
(84, '10676', 'https://xeorl.buzz/', 0, 0, 0),
|
||||
(85, 'f719f', 'https://xeorl.buzz/', 0, 0, 0),
|
||||
(86, 'a3cc2', 'https://xeorl.buzz/', 0, 0, 0);
|
||||
|
||||
--
|
||||
-- Indexes for dumped tables
|
||||
--
|
||||
|
||||
--
|
||||
-- Indexes for table `url`
|
||||
--
|
||||
ALTER TABLE `url`
|
||||
ADD PRIMARY KEY (`id`);
|
||||
|
||||
--
|
||||
-- AUTO_INCREMENT for dumped tables
|
||||
--
|
||||
|
||||
--
|
||||
-- AUTO_INCREMENT for table `url`
|
||||
--
|
||||
ALTER TABLE `url`
|
||||
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=87;
|
||||
COMMIT;
|
||||
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||
Reference in New Issue
Block a user