Last changes
This commit is contained in:
parent
d90b02d3ac
commit
2dee2bda19
146
analytics.php
Normal file
146
analytics.php
Normal file
@ -0,0 +1,146 @@
|
||||
<?php
|
||||
session_start();
|
||||
if (!isset($_SESSION['user'])) {
|
||||
header('Location: login.php');
|
||||
exit;
|
||||
}
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Analytics</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--bg-color: #f8f9fa;
|
||||
--sidebar-bg: #ffffff;
|
||||
--text-color: #343a40;
|
||||
--heading-color: #212529;
|
||||
--primary-color: #007bff;
|
||||
--border-color: #dee2e6;
|
||||
--card-bg: #ffffff;
|
||||
--shadow: 0 0 15px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: 'Inter', sans-serif;
|
||||
background-color: var(--bg-color);
|
||||
color: var(--text-color);
|
||||
display: flex;
|
||||
}
|
||||
.sidebar {
|
||||
width: 260px;
|
||||
background-color: var(--sidebar-bg);
|
||||
border-right: 1px solid var(--border-color);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100vh;
|
||||
position: fixed;
|
||||
box-shadow: var(--shadow);
|
||||
}
|
||||
.sidebar-header {
|
||||
padding: 1.5rem;
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
color: var(--primary-color);
|
||||
border-bottom: 1px solid var(--border-color);
|
||||
text-align: center;
|
||||
}
|
||||
.sidebar-nav {
|
||||
flex-grow: 1;
|
||||
list-style: none;
|
||||
padding: 1rem 0;
|
||||
margin: 0;
|
||||
}
|
||||
.sidebar-nav a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 1rem 1.5rem;
|
||||
text-decoration: none;
|
||||
color: var(--text-color);
|
||||
font-weight: 500;
|
||||
transition: background-color 0.2s, color 0.2s;
|
||||
border-left: 3px solid transparent;
|
||||
}
|
||||
.sidebar-nav a:hover, .sidebar-nav a.active {
|
||||
background-color: #e9ecef;
|
||||
color: var(--primary-color);
|
||||
border-left-color: var(--primary-color);
|
||||
}
|
||||
.sidebar-footer {
|
||||
padding: 1.5rem;
|
||||
border-top: 1px solid var(--border-color);
|
||||
}
|
||||
.logout-btn {
|
||||
display: block;
|
||||
width: 100%;
|
||||
padding: 0.8rem;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
background: var(--primary-color);
|
||||
color: #ffffff;
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
transition: background-color 0.2s;
|
||||
}
|
||||
.logout-btn:hover {
|
||||
background-color: #0056b3;
|
||||
}
|
||||
.main-content {
|
||||
margin-left: 260px;
|
||||
flex-grow: 1;
|
||||
padding: 3rem;
|
||||
}
|
||||
h1 {
|
||||
font-size: 2.2rem;
|
||||
font-weight: 700;
|
||||
color: var(--heading-color);
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.coming-soon {
|
||||
text-align: center;
|
||||
padding: 4rem;
|
||||
background-color: var(--card-bg);
|
||||
border-radius: 12px;
|
||||
border: 1px solid var(--border-color);
|
||||
box-shadow: var(--shadow);
|
||||
}
|
||||
.coming-soon h2 {
|
||||
font-size: 1.8rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="sidebar">
|
||||
<div class="sidebar-header">Digital Suite</div>
|
||||
<nav class="sidebar-nav">
|
||||
<a href="dashboard.php">Dashboard</a>
|
||||
<a href="post-generator.php">Post Generator</a>
|
||||
|
||||
<a href="image-library.php">Image Library</a>
|
||||
<a href="video-library.php">Video Library</a>
|
||||
<a href="website-builder.php">Website Builder</a>
|
||||
<a href="analytics.php" class="active">Analytics</a>
|
||||
<a href="settings.php">Settings</a>
|
||||
</nav>
|
||||
<div class="sidebar-footer">
|
||||
<a href="?action=logout" class="logout-btn">Logout</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<main class="main-content">
|
||||
<h1>Analytics</h1>
|
||||
<div class="coming-soon">
|
||||
<h2>Coming Soon!</h2>
|
||||
<p>This feature is under development. Check back later for updates.</p>
|
||||
</div>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
287
dashboard.php
Normal file
287
dashboard.php
Normal file
@ -0,0 +1,287 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
@ini_set('display_errors', '1');
|
||||
@error_reporting(E_ALL);
|
||||
|
||||
session_start();
|
||||
|
||||
if (!isset($_SESSION['user'])) {
|
||||
header('Location: login.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
$user = $_SESSION['user'];
|
||||
|
||||
if (isset($_GET['action']) && $_GET['action'] === 'logout') {
|
||||
session_destroy();
|
||||
header('Location: login.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
// Get stats
|
||||
$userDesignsDir = '/home/blari/executor/workspace/users_data/' . session_id() . '/designs';
|
||||
$userImagesDir = '/home/blari/executor/workspace/users_data/' . session_id() . '/images';
|
||||
$userVideosDir = '/home/blari/executor/workspace/users_data/' . session_id() . '/videos';
|
||||
|
||||
$designCount = count(glob($userDesignsDir . '/*'));
|
||||
$imageCount = count(glob($userImagesDir . '/*'));
|
||||
$videoCount = count(glob($userVideosDir . '/*'));
|
||||
|
||||
?>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Dashboard - Digital Marketing Suite</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--bg-color: #f8f9fa;
|
||||
--sidebar-bg: #ffffff;
|
||||
--text-color: #343a40;
|
||||
--heading-color: #212529;
|
||||
--primary-color: #6a11cb;
|
||||
--primary-color-dark: #5a0fb3;
|
||||
--border-color: #dee2e6;
|
||||
--card-bg: #ffffff;
|
||||
--shadow: 0 4px 6px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: 'Inter', sans-serif;
|
||||
background-color: var(--bg-color);
|
||||
color: var(--text-color);
|
||||
display: flex;
|
||||
}
|
||||
.sidebar {
|
||||
width: 260px;
|
||||
background-color: var(--sidebar-bg);
|
||||
border-right: 1px solid var(--border-color);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100vh;
|
||||
position: fixed;
|
||||
box-shadow: 0 0 15px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
.sidebar-header {
|
||||
padding: 1.5rem;
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
color: var(--primary-color);
|
||||
border-bottom: 1px solid var(--border-color);
|
||||
text-align: center;
|
||||
}
|
||||
.sidebar-nav {
|
||||
flex-grow: 1;
|
||||
list-style: none;
|
||||
padding: 1rem 0;
|
||||
margin: 0;
|
||||
}
|
||||
.sidebar-nav a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 1rem 1.5rem;
|
||||
text-decoration: none;
|
||||
color: var(--text-color);
|
||||
font-weight: 500;
|
||||
transition: background-color 0.2s, color 0.2s;
|
||||
border-left: 3px solid transparent;
|
||||
}
|
||||
.sidebar-nav a:hover, .sidebar-nav a.active {
|
||||
background-color: #f1eafa;
|
||||
color: var(--primary-color);
|
||||
border-left-color: var(--primary-color);
|
||||
}
|
||||
.sidebar-footer {
|
||||
padding: 1.5rem;
|
||||
border-top: 1px solid var(--border-color);
|
||||
}
|
||||
.logout-btn {
|
||||
display: block;
|
||||
width: 100%;
|
||||
padding: 0.8rem;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
background: var(--primary-color);
|
||||
color: #ffffff;
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
transition: background-color 0.2s;
|
||||
}
|
||||
.logout-btn:hover {
|
||||
background-color: var(--primary-color-dark);
|
||||
}
|
||||
.main-content {
|
||||
margin-left: 260px;
|
||||
flex-grow: 1;
|
||||
padding: 3rem;
|
||||
}
|
||||
header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
h1 {
|
||||
font-size: 2.2rem;
|
||||
font-weight: 700;
|
||||
color: var(--heading-color);
|
||||
}
|
||||
.stats-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
||||
gap: 1.5rem;
|
||||
margin-bottom: 2.5rem;
|
||||
}
|
||||
.stat-card {
|
||||
background-color: var(--card-bg);
|
||||
border-radius: 12px;
|
||||
padding: 1.5rem;
|
||||
border: 1px solid var(--border-color);
|
||||
box-shadow: var(--shadow);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.stat-card .icon {
|
||||
font-size: 2rem;
|
||||
margin-right: 1rem;
|
||||
padding: 0.8rem;
|
||||
border-radius: 50%;
|
||||
color: #fff;
|
||||
}
|
||||
.stat-card:nth-child(1) .icon { background-color: #6a11cb; }
|
||||
.stat-card:nth-child(2) .icon { background-color: #2575fc; }
|
||||
.stat-card:nth-child(3) .icon { background-color: #ff6b6b; }
|
||||
.stat-card .value {
|
||||
font-size: 2rem;
|
||||
font-weight: 700;
|
||||
}
|
||||
.stat-card .label {
|
||||
font-size: 0.9rem;
|
||||
color: #6c757d;
|
||||
}
|
||||
.grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
||||
gap: 2rem;
|
||||
}
|
||||
.card {
|
||||
background-color: var(--card-bg);
|
||||
border-radius: 12px;
|
||||
padding: 2rem;
|
||||
border: 1px solid var(--border-color);
|
||||
box-shadow: var(--shadow);
|
||||
transition: transform 0.2s, box-shadow 0.2s;
|
||||
}
|
||||
.card:hover {
|
||||
transform: translateY(-5px);
|
||||
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.08);
|
||||
}
|
||||
.card h3 {
|
||||
margin: 0 0 0.75rem;
|
||||
font-size: 1.3rem;
|
||||
font-weight: 700;
|
||||
color: var(--heading-color);
|
||||
}
|
||||
.card p {
|
||||
margin: 0 0 1.5rem;
|
||||
font-size: 1rem;
|
||||
line-height: 1.6;
|
||||
}
|
||||
.card .btn {
|
||||
display: inline-block;
|
||||
padding: 0.7rem 1.5rem;
|
||||
border-radius: 8px;
|
||||
background-color: var(--primary-color);
|
||||
color: #ffffff;
|
||||
text-decoration: none;
|
||||
font-weight: 500;
|
||||
transition: background-color 0.2s;
|
||||
}
|
||||
.card .btn:hover {
|
||||
background-color: var(--primary-color-dark);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="sidebar">
|
||||
<div class="sidebar-header">
|
||||
Digital Suite
|
||||
</div>
|
||||
<nav class="sidebar-nav">
|
||||
<a href="dashboard.php" class="active">Dashboard</a>
|
||||
<a href="post-generator.php">Post Generator</a>
|
||||
|
||||
<a href="image-library.php">Image Library</a>
|
||||
<a href="video-library.php">Video Library</a>
|
||||
<a href="website-builder.php">Website Builder</a>
|
||||
<a href="analytics.php">Analytics</a>
|
||||
<a href="settings.php">Settings</a>
|
||||
</nav>
|
||||
<div class="sidebar-footer">
|
||||
<a href="?action=logout" class="logout-btn">Logout</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<main class="main-content">
|
||||
<header>
|
||||
<h1>Dashboard</h1>
|
||||
<div>Welcome, <strong><?= htmlspecialchars($user['business_name']) ?></strong>!</div>
|
||||
</header>
|
||||
|
||||
<div class="stats-grid">
|
||||
<div class="stat-card">
|
||||
<div class="icon">🎨</div>
|
||||
<div>
|
||||
<div class="value"><?= $designCount ?></div>
|
||||
<div class="label">Designs Created</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="stat-card">
|
||||
<div class="icon">🖼️</div>
|
||||
<div>
|
||||
<div class="value"><?= $imageCount ?></div>
|
||||
<div class="label">Images Uploaded</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="stat-card">
|
||||
<div class="icon">🎬</div>
|
||||
<div>
|
||||
<div class="value"><?= $videoCount ?></div>
|
||||
<div class="label">Videos Uploaded</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid">
|
||||
<div class="card">
|
||||
<h3>AI Post Generator</h3>
|
||||
<p>Create engaging social media posts from text descriptions.</p>
|
||||
<a href="post-generator.php" class="btn">Generate Post</a>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3>Image Library</h3>
|
||||
<p>Upload and manage your image assets for your marketing campaigns.</p>
|
||||
<a href="image-library.php" class="btn">View Images</a>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3>Video Library</h3>
|
||||
<p>Upload and manage your video assets for your marketing campaigns.</p>
|
||||
<a href="video-library.php" class="btn">View Videos</a>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3>AI Website Builder</h3>
|
||||
<p>Generate a professional website for your business in just a few clicks.</p>
|
||||
<a href="website-builder.php" class="btn">Build Your Site</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
7
data/users.json
Normal file
7
data/users.json
Normal file
@ -0,0 +1,7 @@
|
||||
[
|
||||
{
|
||||
"business_name": "Qwerty LLP",
|
||||
"email": "qwerty@gmail.com",
|
||||
"password": "$2y$10$0qE1vtMnakmsBJu8lhFXruB1\/I4t.1Ezr0KsIGHSnaXPUV47p5b3i"
|
||||
}
|
||||
]
|
||||
4
healthz.php
Normal file
4
healthz.php
Normal file
@ -0,0 +1,4 @@
|
||||
<?php
|
||||
header('Content-Type: text/plain');
|
||||
http_response_code(200);
|
||||
echo "ok";
|
||||
262
image-library.php
Normal file
262
image-library.php
Normal file
@ -0,0 +1,262 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
@ini_set('display_errors', '1');
|
||||
@error_reporting(E_ALL);
|
||||
|
||||
session_start();
|
||||
|
||||
if (!isset($_SESSION['user'])) {
|
||||
header('Location: login.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
$user = $_SESSION['user'];
|
||||
$error = null;
|
||||
$success = null;
|
||||
|
||||
$userImagesDir = '/home/blari/executor/workspace/users_data/' . session_id() . '/images';
|
||||
if (!is_dir($userImagesDir)) {
|
||||
mkdir($userImagesDir, 0777, true);
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['image'])) {
|
||||
$image = $_FILES['image'];
|
||||
if ($image['error'] === UPLOAD_ERR_OK) {
|
||||
$imageFileType = strtolower(pathinfo($image['name'], PATHINFO_EXTENSION));
|
||||
$allowedTypes = ['jpg', 'jpeg', 'png', 'gif'];
|
||||
if (in_array($imageFileType, $allowedTypes)) {
|
||||
$imageName = uniqid() . '.' . $imageFileType;
|
||||
$imagePath = $userImagesDir . '/' . $imageName;
|
||||
if (move_uploaded_file($image['tmp_name'], $imagePath)) {
|
||||
$success = 'Image uploaded successfully!';
|
||||
} else {
|
||||
$error = 'Could not save uploaded image.';
|
||||
}
|
||||
} else {
|
||||
$error = 'Invalid file type. Only JPG, JPEG, PNG, and GIF are allowed.';
|
||||
}
|
||||
} else {
|
||||
$error = 'Error uploading file.';
|
||||
}
|
||||
}
|
||||
|
||||
$images = glob($userImagesDir . '/*.{jpg,jpeg,png,gif}', GLOB_BRACE);
|
||||
|
||||
?>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Image Library - Digital Marketing Suite</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--bg-color: #f8f9fa;
|
||||
--sidebar-bg: #ffffff;
|
||||
--text-color: #343a40;
|
||||
--heading-color: #212529;
|
||||
--primary-color: #007bff;
|
||||
--border-color: #dee2e6;
|
||||
--card-bg: #ffffff;
|
||||
--shadow: 0 0 15px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: 'Inter', sans-serif;
|
||||
background-color: var(--bg-color);
|
||||
color: var(--text-color);
|
||||
display: flex;
|
||||
}
|
||||
.sidebar {
|
||||
width: 260px;
|
||||
background-color: var(--sidebar-bg);
|
||||
border-right: 1px solid var(--border-color);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100vh;
|
||||
position: fixed;
|
||||
box-shadow: var(--shadow);
|
||||
}
|
||||
.sidebar-header {
|
||||
padding: 1.5rem;
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
color: var(--primary-color);
|
||||
border-bottom: 1px solid var(--border-color);
|
||||
text-align: center;
|
||||
}
|
||||
.sidebar-nav {
|
||||
flex-grow: 1;
|
||||
list-style: none;
|
||||
padding: 1rem 0;
|
||||
margin: 0;
|
||||
}
|
||||
.sidebar-nav a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 1rem 1.5rem;
|
||||
text-decoration: none;
|
||||
color: var(--text-color);
|
||||
font-weight: 500;
|
||||
transition: background-color 0.2s, color 0.2s;
|
||||
border-left: 3px solid transparent;
|
||||
}
|
||||
.sidebar-nav a:hover, .sidebar-nav a.active {
|
||||
background-color: #e9ecef;
|
||||
color: var(--primary-color);
|
||||
border-left-color: var(--primary-color);
|
||||
}
|
||||
.sidebar-footer {
|
||||
padding: 1.5rem;
|
||||
border-top: 1px solid var(--border-color);
|
||||
}
|
||||
.logout-btn {
|
||||
display: block;
|
||||
width: 100%;
|
||||
padding: 0.8rem;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
background: var(--primary-color);
|
||||
color: #ffffff;
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
transition: background-color 0.2s;
|
||||
}
|
||||
.logout-btn:hover {
|
||||
background-color: #0056b3;
|
||||
}
|
||||
.main-content {
|
||||
margin-left: 260px;
|
||||
flex-grow: 1;
|
||||
padding: 3rem;
|
||||
}
|
||||
h1 {
|
||||
font-size: 2.2rem;
|
||||
font-weight: 700;
|
||||
color: var(--heading-color);
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.upload-form {
|
||||
background-color: var(--card-bg);
|
||||
border-radius: 12px;
|
||||
padding: 2.5rem;
|
||||
border: 1px solid var(--border-color);
|
||||
box-shadow: var(--shadow);
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.form-group {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
.form-group label {
|
||||
display: block;
|
||||
font-weight: 500;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
.form-group input {
|
||||
width: 100%;
|
||||
padding: 0.8rem;
|
||||
border-radius: 8px;
|
||||
border: 1px solid var(--border-color);
|
||||
font-size: 1rem;
|
||||
}
|
||||
.submit-btn {
|
||||
display: inline-block;
|
||||
padding: 0.8rem 1.5rem;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
background-color: var(--primary-color);
|
||||
color: #ffffff;
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
}
|
||||
.image-gallery {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
||||
gap: 1.5rem;
|
||||
}
|
||||
.image-card {
|
||||
border-radius: 12px;
|
||||
overflow: hidden;
|
||||
box-shadow: var(--shadow);
|
||||
position: relative;
|
||||
}
|
||||
.image-card img {
|
||||
width: 100%;
|
||||
height: 200px;
|
||||
object-fit: cover;
|
||||
}
|
||||
.message {
|
||||
padding: 1rem;
|
||||
border-radius: 8px;
|
||||
margin-bottom: 1.5rem;
|
||||
font-weight: 500;
|
||||
}
|
||||
.message.success {
|
||||
background-color: #d4edda;
|
||||
color: #155724;
|
||||
border: 1px solid #c3e6cb;
|
||||
}
|
||||
.message.error {
|
||||
background-color: #f8d7da;
|
||||
color: #721c24;
|
||||
border: 1px solid #f5c6cb;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="sidebar">
|
||||
<div class="sidebar-header">Digital Suite</div>
|
||||
<nav class="sidebar-nav">
|
||||
<a href="dashboard.php">Dashboard</a>
|
||||
<a href="post-generator.php">Post Generator</a>
|
||||
<a href="designs.php">My Designs</a>
|
||||
<a href="image-library.php" class="active">Image Library</a>
|
||||
<a href="website-builder.php">Website Builder</a>
|
||||
<a href="analytics.php">Analytics</a>
|
||||
<a href="settings.php">Settings</a>
|
||||
</nav>
|
||||
<div class="sidebar-footer">
|
||||
<a href="?action=logout" class="logout-btn">Logout</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<main class="main-content">
|
||||
<h1>Image Library</h1>
|
||||
|
||||
<?php if ($success): ?>
|
||||
<div class="message success"><?= $success ?></div>
|
||||
<?php endif; ?>
|
||||
<?php if ($error): ?>
|
||||
<div class="message error"><?= $error ?></div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="upload-form">
|
||||
<form method="POST" enctype="multipart/form-data">
|
||||
<div class="form-group">
|
||||
<label for="image">Upload Image</label>
|
||||
<input type="file" id="image" name="image" accept="image/*" required>
|
||||
</div>
|
||||
<button type="submit" class="submit-btn">Upload</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="image-gallery">
|
||||
<?php foreach ($images as $image): ?>
|
||||
<div class="image-card">
|
||||
<img src="<?= str_replace('/home/blari/executor/workspace/', '', $image) ?>" alt="User Image">
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
<?php if (empty($images)): ?>
|
||||
<p>No images uploaded yet.</p>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
227
index.php
227
index.php
@ -3,101 +3,184 @@ declare(strict_types=1);
|
||||
@ini_set('display_errors', '1');
|
||||
@error_reporting(E_ALL);
|
||||
@date_default_timezone_set('UTC');
|
||||
|
||||
$phpVersion = PHP_VERSION;
|
||||
$now = date('Y-m-d H:i:s');
|
||||
?>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>New Style</title>
|
||||
<title>MarketingSuite - AI-Powered Digital Marketing</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap" rel="stylesheet">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;600;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--bg-color-start: #6a11cb;
|
||||
--bg-color-end: #2575fc;
|
||||
--text-color: #ffffff;
|
||||
--card-bg-color: rgba(255, 255, 255, 0.01);
|
||||
--card-border-color: rgba(255, 255, 255, 0.1);
|
||||
--primary-color: #6a11cb;
|
||||
--secondary-color: #2575fc;
|
||||
--text-color: #333;
|
||||
--light-gray: #f8f9fa;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: 'Inter', sans-serif;
|
||||
background: linear-gradient(45deg, var(--bg-color-start), var(--bg-color-end));
|
||||
font-family: 'Poppins', sans-serif;
|
||||
color: var(--text-color);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
min-height: 100vh;
|
||||
text-align: center;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
body::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100"><path d="M-10 10L110 10M10 -10L10 110" stroke-width="1" stroke="rgba(255,255,255,0.05)"/></svg>');
|
||||
animation: bg-pan 20s linear infinite;
|
||||
z-index: -1;
|
||||
}
|
||||
@keyframes bg-pan {
|
||||
0% { background-position: 0% 0%; }
|
||||
100% { background-position: 100% 100%; }
|
||||
}
|
||||
main {
|
||||
padding: 2rem;
|
||||
}
|
||||
.card {
|
||||
background: var(--card-bg-color);
|
||||
border: 1px solid var(--card-border-color);
|
||||
border-radius: 16px;
|
||||
padding: 2rem;
|
||||
backdrop-filter: blur(20px);
|
||||
-webkit-backdrop-filter: blur(20px);
|
||||
box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
h1 {
|
||||
font-size: 3rem;
|
||||
.navbar-brand {
|
||||
font-weight: 700;
|
||||
margin: 0 0 1rem;
|
||||
letter-spacing: -1px;
|
||||
color: var(--primary-color) !important;
|
||||
}
|
||||
p {
|
||||
margin: 0.5rem 0;
|
||||
font-size: 1.1rem;
|
||||
.hero {
|
||||
background: linear-gradient(45deg, rgba(106, 17, 203, 0.8), rgba(37, 117, 252, 0.8)), url('https://images.unsplash.com/photo-1460925895917-afdab827c52f?q=80&w=1920&auto=format&fit=crop') no-repeat center center;
|
||||
background-size: cover;
|
||||
color: white;
|
||||
padding: 180px 0;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
code {
|
||||
background: rgba(0,0,0,0.2);
|
||||
padding: 2px 6px;
|
||||
border-radius: 4px;
|
||||
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
||||
.hero h1 {
|
||||
font-size: 4.5rem;
|
||||
font-weight: 700;
|
||||
animation: fadeInDown 1s;
|
||||
}
|
||||
footer {
|
||||
position: absolute;
|
||||
bottom: 1rem;
|
||||
font-size: 0.8rem;
|
||||
opacity: 0.7;
|
||||
.hero p {
|
||||
font-size: 1.6rem;
|
||||
animation: fadeInUp 1s;
|
||||
}
|
||||
.hero .btn {
|
||||
animation: fadeInUp 1s;
|
||||
}
|
||||
.feature-icon {
|
||||
font-size: 3.5rem;
|
||||
color: var(--primary-color);
|
||||
transition: transform 0.3s;
|
||||
}
|
||||
.feature-icon:hover {
|
||||
transform: scale(1.2);
|
||||
}
|
||||
#features h3 {
|
||||
font-weight: 600;
|
||||
}
|
||||
.testimonial {
|
||||
background-color: var(--light-gray);
|
||||
}
|
||||
.testimonial .card {
|
||||
border: none;
|
||||
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
|
||||
}
|
||||
.btn-primary {
|
||||
background-color: var(--primary-color);
|
||||
border-color: var(--primary-color);
|
||||
padding: 12px 30px;
|
||||
font-weight: 600;
|
||||
transition: background-color 0.3s, transform 0.3s;
|
||||
}
|
||||
.btn-primary:hover {
|
||||
background-color: var(--secondary-color);
|
||||
border-color: var(--secondary-color);
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
@keyframes fadeInDown {
|
||||
from { opacity: 0; transform: translateY(-20px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
@keyframes fadeInUp {
|
||||
from { opacity: 0; transform: translateY(20px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<div class="card">
|
||||
<h1>Welcome!</h1>
|
||||
<p>Your project is ready to conquer the peaks.</p>
|
||||
<p>PHP version: <code><?= htmlspecialchars($phpVersion) ?></code></p>
|
||||
|
||||
<nav class="navbar navbar-expand-lg navbar-light bg-light shadow-sm">
|
||||
<div class="container">
|
||||
<a class="navbar-brand" href="#" style="font-weight: 700; color: #6a11cb;">MarketingSuite</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ms-auto">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="login.php">Login</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="btn btn-primary" href="register.php" role="button">Get Started</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<header class="hero">
|
||||
<div class="container">
|
||||
<h1 class="display-3">Supercharge Your Marketing with AI</h1>
|
||||
<p class="lead">The all-in-one platform to generate content, build websites, and drive growth.</p>
|
||||
<a href="register.php" class="btn btn-primary btn-lg mt-3">Sign Up for Free</a>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<section id="features" class="py-5">
|
||||
<div class="container text-center">
|
||||
<h2 class="mb-5">Everything You Need to Succeed</h2>
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<div class="feature-icon mb-3">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" fill="currentColor" class="bi bi-magic" viewBox="0 0 16 16">
|
||||
<path d="M9.5 2.672a.5.5 0 1 0 1 0V.672a.5.5 0 0 0-1 0zM11.293.293a.5.5 0 0 0-.707.707L12.293 2.707a.5.5 0 0 0 .707-.707zM1.5 11.672a.5.5 0 1 0 1 0v2a.5.5 0 0 0-1 0zm1.707 1.707a.5.5 0 0 0-.707-.707L.793 14.293a.5.5 0 0 0 .707.707zM6 0.5a.5.5 0 0 0 0 1h4a.5.5 0 0 0 0-1zM.5 6a.5.5 0 0 0 1 0V2a.5.5 0 0 0-1 0zm11.293 9.293a.5.5 0 0 0-.707.707l1.707 1.707a.5.5 0 0 0 .707-.707zM1.5 2.672a.5.5 0 1 0 1 0V.672a.5.5 0 0 0-1 0z"/>
|
||||
<path d="M6.5 3A.5.5 0 0 1 6 3.5V12h3.5a.5.5 0 0 1 0 1H6v1.5a.5.5 0 0 1-1 0V13H1.5a.5.5 0 0 1 0-1H5V3.5A.5.5 0 0 1 6.5 3"/>
|
||||
<path d="M8.5 4.5a.5.5 0 0 0-1 0v3h-3a.5.5 0 0 0 0 1h3v3a.5.5 0 0 0 1 0v-3h3a.5.5 0 0 0 0-1h-3z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3>AI Post Generator</h3>
|
||||
<p>Effortlessly create engaging social media content and overcome writer's block.</p>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="feature-icon mb-3">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" fill="currentColor" class="bi bi-layout-text-window-reverse" viewBox="0 0 16 16">
|
||||
<path d="M13 6.5a.5.5 0 0 0-.5-.5h-5a.5.5 0 0 0 0 1h5a.5.5 0 0 0 .5-.5m0 3a.5.5 0 0 0-.5-.5h-5a.5.5 0 0 0 0 1h5a.5.5 0 0 0 .5-.5m.5 2.5a.5.5 0 0 1-.5.5h-5a.5.5 0 0 1 0-1h5a.5.5 0 0 1 .5.5"/>
|
||||
<path d="M14 0a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2zM2 1a1 1 0 0 0-1 1v1h14V2a1 1 0 0 0-1-1zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3>AI Website Builder</h3>
|
||||
<p>Instantly build a professional, mobile-friendly website for your business.</p>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="feature-icon mb-3">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" fill="currentColor" class="bi bi-bar-chart-line-fill" viewBox="0 0 16 16">
|
||||
<path d="M11 2a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v12h.5a.5.5 0 0 1 0 1H.5a.5.5 0 0 1 0-1H1v-3a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v3h1V7a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v7h1z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3>Analytics & Insights</h3>
|
||||
<p>Track your growth and make data-driven decisions with a powerful analytics dashboard.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="testimonials" class="py-5 testimonial">
|
||||
<div class="container">
|
||||
<h2 class="text-center mb-5">Loved by Businesses Worldwide</h2>
|
||||
<div class="row">
|
||||
<div class="col-md-6 offset-md-3">
|
||||
<div class="card text-center">
|
||||
<div class="card-body">
|
||||
<p class="lead">"This platform has been a game-changer for our marketing efforts. We're saving hours every week and our engagement has skyrocketed."</p>
|
||||
</div>
|
||||
<div class="card-footer text-muted">
|
||||
- Sarah L., Founder of a Small Business
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer class="py-4 bg-dark text-white text-center">
|
||||
<div class="container">
|
||||
<p class="mb-0">© <?= date('Y') ?> MarketingSuite. All Rights Reserved.</p>
|
||||
</div>
|
||||
</main>
|
||||
<footer>
|
||||
Page updated: <?= htmlspecialchars($now) ?> (UTC)
|
||||
</footer>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
191
login.php
Normal file
191
login.php
Normal file
@ -0,0 +1,191 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
@ini_set('display_errors', '1');
|
||||
@error_reporting(E_ALL);
|
||||
|
||||
session_start();
|
||||
|
||||
$users_file = __DIR__ . '/data/users.json';
|
||||
|
||||
$errors = [];
|
||||
$email = '';
|
||||
|
||||
if (isset($_SESSION['user'])) {
|
||||
header('Location: dashboard.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
$success_message = '';
|
||||
if (isset($_SESSION['success_message'])) {
|
||||
$success_message = $_SESSION['success_message'];
|
||||
unset($_SESSION['success_message']);
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$email = trim($_POST['email'] ?? '');
|
||||
$password = $_POST['password'] ?? '';
|
||||
|
||||
if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
||||
$errors[] = 'A valid email is required.';
|
||||
}
|
||||
if (empty($password)) {
|
||||
$errors[] = 'Password is required.';
|
||||
}
|
||||
|
||||
if (empty($errors)) {
|
||||
$users = json_decode(file_get_contents($users_file), true);
|
||||
$found_user = null;
|
||||
|
||||
foreach ($users as $user) {
|
||||
if ($user['email'] === $email) {
|
||||
$found_user = $user;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ($found_user && password_verify($password, $found_user['password'])) {
|
||||
$_SESSION['user'] = [
|
||||
'email' => $found_user['email'],
|
||||
'business_name' => $found_user['business_name']
|
||||
];
|
||||
header('Location: dashboard.php');
|
||||
exit;
|
||||
} else {
|
||||
$errors[] = 'Invalid email or password.';
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Login - Digital Marketing Suite</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--bg-color: #f8f9fa;
|
||||
--text-color: #343a40;
|
||||
--heading-color: #212529;
|
||||
--primary-color: #007bff;
|
||||
--border-color: #dee2e6;
|
||||
--card-bg: #ffffff;
|
||||
--shadow: 0 0 15px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: 'Inter', sans-serif;
|
||||
background-color: var(--bg-color);
|
||||
color: var(--text-color);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100vh;
|
||||
}
|
||||
.login-container {
|
||||
width: 100%;
|
||||
max-width: 400px;
|
||||
padding: 2.5rem;
|
||||
background-color: var(--card-bg);
|
||||
border-radius: 12px;
|
||||
box-shadow: var(--shadow);
|
||||
}
|
||||
h1 {
|
||||
font-size: 2rem;
|
||||
font-weight: 700;
|
||||
color: var(--heading-color);
|
||||
text-align: center;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.form-group {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
.form-group label {
|
||||
display: block;
|
||||
font-weight: 500;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
.form-group input {
|
||||
width: 100%;
|
||||
padding: 0.8rem;
|
||||
border-radius: 8px;
|
||||
border: 1px solid var(--border-color);
|
||||
font-size: 1rem;
|
||||
transition: border-color 0.2s, box-shadow 0.2s;
|
||||
}
|
||||
.form-group input:focus {
|
||||
outline: none;
|
||||
border-color: var(--primary-color);
|
||||
box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.25);
|
||||
}
|
||||
.submit-btn {
|
||||
display: block;
|
||||
width: 100%;
|
||||
padding: 0.8rem;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
background: var(--primary-color);
|
||||
color: #ffffff;
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
transition: background-color 0.2s;
|
||||
}
|
||||
.submit-btn:hover {
|
||||
background-color: #0056b3;
|
||||
}
|
||||
.message {
|
||||
padding: 1rem;
|
||||
border-radius: 8px;
|
||||
margin-bottom: 1.5rem;
|
||||
font-weight: 500;
|
||||
text-align: center;
|
||||
}
|
||||
.message.error {
|
||||
background-color: #f8d7da;
|
||||
color: #721c24;
|
||||
border: 1px solid #f5c6cb;
|
||||
}
|
||||
.form-footer {
|
||||
text-align: center;
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<div class="card">
|
||||
<h1>Login</h1>
|
||||
<?php if ($success_message): ?>
|
||||
<div class="success">
|
||||
<p><?= htmlspecialchars($success_message) ?></p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php if (!empty($errors)): ?>
|
||||
<div class="errors">
|
||||
<?php foreach ($errors as $error): ?>
|
||||
<p><?= htmlspecialchars($error) ?></p>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<form action="login.php" method="post">
|
||||
<div class="form-group">
|
||||
<label for="email">Email</label>
|
||||
<input type="email" id="email" name="email" value="<?= htmlspecialchars($email) ?>" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="password">Password</label>
|
||||
<input type="password" id="password" name="password" required>
|
||||
</div>
|
||||
<button type="submit">Login</button>
|
||||
</form>
|
||||
<div class="register-link">
|
||||
<p>Don't have an account? <a href="register.php">Sign Up</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
286
post-generator.php
Normal file
286
post-generator.php
Normal file
@ -0,0 +1,286 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
@ini_set('display_errors', '1');
|
||||
@error_reporting(E_ALL);
|
||||
|
||||
session_start();
|
||||
|
||||
if (!isset($_SESSION['user'])) {
|
||||
header('Location: login.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
$user = $_SESSION['user'];
|
||||
$error = null;
|
||||
$success = null;
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$title = $_POST['title'] ?? 'Untitled';
|
||||
$content = $_POST['content'] ?? 'Hello, world!';
|
||||
$bgColor = $_POST['bg_color'] ?? '#ffffff';
|
||||
|
||||
// Sanitize title to use as a filename
|
||||
$filename = preg_replace('/[^a-zA-Z0-9_\-]/ ', '_', strtolower($title)) . '_' . time() . '.png';
|
||||
|
||||
$userDesignsDir = '/home/blari/executor/workspace/users_data/' . session_id() . '/images';
|
||||
if (!is_dir($userDesignsDir)) {
|
||||
mkdir($userDesignsDir, 0777, true);
|
||||
}
|
||||
|
||||
$filePath = $userDesignsDir . '/' . $filename;
|
||||
|
||||
try {
|
||||
// --- Image Generation using GD Library ---
|
||||
$image = imagecreatetruecolor(1080, 1080);
|
||||
if ($image === false) {
|
||||
throw new Exception('Cannot Initialize new GD image stream');
|
||||
}
|
||||
|
||||
// Allocate colors
|
||||
list($r, $g, $b) = sscanf($bgColor, "#%02x%02x%02x");
|
||||
$backgroundColor = imagecolorallocate($image, $r, $g, $b);
|
||||
$textColor = imagecolorallocate($image, 0, 0, 0);
|
||||
|
||||
// Fill background
|
||||
imagefill($image, 0, 0, $backgroundColor);
|
||||
|
||||
// Add text
|
||||
$font = '/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf'; // A default font path
|
||||
if (!file_exists($font)) {
|
||||
// Fallback if font not found
|
||||
$font = null;
|
||||
}
|
||||
|
||||
// Add title text
|
||||
imagettftext($image, 72, 0, 50, 150, $textColor, $font, $title);
|
||||
|
||||
// Add content text
|
||||
imagettftext($image, 40, 0, 50, 300, $textColor, $font, wordwrap($content, 40, "\n"));
|
||||
|
||||
// Save the image
|
||||
if (!imagepng($image, $filePath)) {
|
||||
throw new Exception('Could not save image.');
|
||||
}
|
||||
|
||||
// Free up memory
|
||||
imagedestroy($image);
|
||||
|
||||
$success = "Image generated successfully! <a href='image-library.php'>View Image Library</a>";
|
||||
|
||||
} catch (Exception $e) {
|
||||
$error = "Error generating image: " . $e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Post Generator - Digital Marketing Suite</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--bg-color: #f8f9fa;
|
||||
--sidebar-bg: #ffffff;
|
||||
--text-color: #343a40;
|
||||
--heading-color: #212529;
|
||||
--primary-color: #007bff;
|
||||
--border-color: #dee2e6;
|
||||
--card-bg: #ffffff;
|
||||
--shadow: 0 0 15px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: 'Inter', sans-serif;
|
||||
background-color: var(--bg-color);
|
||||
color: var(--text-color);
|
||||
display: flex;
|
||||
}
|
||||
.sidebar {
|
||||
width: 260px;
|
||||
background-color: var(--sidebar-bg);
|
||||
border-right: 1px solid var(--border-color);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100vh;
|
||||
position: fixed;
|
||||
box-shadow: var(--shadow);
|
||||
}
|
||||
.sidebar-header {
|
||||
padding: 1.5rem;
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
color: var(--primary-color);
|
||||
border-bottom: 1px solid var(--border-color);
|
||||
text-align: center;
|
||||
}
|
||||
.sidebar-nav {
|
||||
flex-grow: 1;
|
||||
list-style: none;
|
||||
padding: 1rem 0;
|
||||
margin: 0;
|
||||
}
|
||||
.sidebar-nav a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 1rem 1.5rem;
|
||||
text-decoration: none;
|
||||
color: var(--text-color);
|
||||
font-weight: 500;
|
||||
transition: background-color 0.2s, color 0.2s;
|
||||
border-left: 3px solid transparent;
|
||||
}
|
||||
.sidebar-nav a:hover, .sidebar-nav a.active {
|
||||
background-color: #e9ecef;
|
||||
color: var(--primary-color);
|
||||
border-left-color: var(--primary-color);
|
||||
}
|
||||
.sidebar-footer {
|
||||
padding: 1.5rem;
|
||||
border-top: 1px solid var(--border-color);
|
||||
}
|
||||
.logout-btn {
|
||||
display: block;
|
||||
width: 100%;
|
||||
padding: 0.8rem;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
background: var(--primary-color);
|
||||
color: #ffffff;
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
transition: background-color 0.2s;
|
||||
}
|
||||
.logout-btn:hover {
|
||||
background-color: #0056b3;
|
||||
}
|
||||
.main-content {
|
||||
margin-left: 260px;
|
||||
flex-grow: 1;
|
||||
padding: 3rem;
|
||||
}
|
||||
h1 {
|
||||
font-size: 2.2rem;
|
||||
font-weight: 700;
|
||||
color: var(--heading-color);
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.generator-form {
|
||||
background-color: var(--card-bg);
|
||||
border-radius: 12px;
|
||||
padding: 2.5rem;
|
||||
border: 1px solid var(--border-color);
|
||||
box-shadow: var(--shadow);
|
||||
max-width: 700px;
|
||||
}
|
||||
.form-group {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
.form-group label {
|
||||
display: block;
|
||||
font-weight: 500;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
.form-group input, .form-group textarea, .form-group select {
|
||||
width: 100%;
|
||||
padding: 0.8rem;
|
||||
border-radius: 8px;
|
||||
border: 1px solid var(--border-color);
|
||||
font-size: 1rem;
|
||||
transition: border-color 0.2s, box-shadow 0.2s;
|
||||
}
|
||||
.form-group input:focus, .form-group textarea:focus, .form-group select:focus {
|
||||
outline: none;
|
||||
border-color: var(--primary-color);
|
||||
box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.25);
|
||||
}
|
||||
.form-group textarea {
|
||||
min-height: 120px;
|
||||
resize: vertical;
|
||||
}
|
||||
.submit-btn {
|
||||
display: inline-block;
|
||||
padding: 0.8rem 1.5rem;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
background-color: var(--primary-color);
|
||||
color: #ffffff;
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
transition: background-color 0.2s;
|
||||
}
|
||||
.submit-btn:hover {
|
||||
background-color: #0056b3;
|
||||
}
|
||||
.message {
|
||||
padding: 1rem;
|
||||
border-radius: 8px;
|
||||
margin-bottom: 1.5rem;
|
||||
font-weight: 500;
|
||||
}
|
||||
.message.success {
|
||||
background-color: #d4edda;
|
||||
color: #155724;
|
||||
border: 1px solid #c3e6cb;
|
||||
}
|
||||
.message.error {
|
||||
background-color: #f8d7da;
|
||||
color: #721c24;
|
||||
border: 1px solid #f5c6cb;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="sidebar">
|
||||
<div class="sidebar-header">Digital Suite</div>
|
||||
<nav class="sidebar-nav">
|
||||
<a href="dashboard.php">Dashboard</a>
|
||||
<a href="post-generator.php" class="active">Post Generator</a>
|
||||
|
||||
<a href="image-library.php">Image Library</a>
|
||||
<a href="video-library.php">Video Library</a>
|
||||
<a href="website-builder.php">Website Builder</a>
|
||||
<a href="analytics.php">Analytics</a>
|
||||
<a href="settings.php">Settings</a>
|
||||
</nav>
|
||||
<div class="sidebar-footer">
|
||||
<a href="?action=logout" class="logout-btn">Logout</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<main class="main-content">
|
||||
<h1>AI Post Generator</h1>
|
||||
|
||||
<?php if ($success): ?>
|
||||
<div class="message success"><?= $success ?></div>
|
||||
<?php endif; ?>
|
||||
<?php if ($error): ?>
|
||||
<div class="message error"><?= $error ?></div>
|
||||
<?php endif; ?>
|
||||
|
||||
<form class="generator-form" method="POST" action="post-generator.php">
|
||||
<div class="form-group">
|
||||
<label for="title">Post Title</label>
|
||||
<input type="text" id="title" name="title" placeholder="e.g., Summer Sale!" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="content">Content</label>
|
||||
<textarea id="content" name="content" placeholder="e.g., Get 50% off all items this weekend." required></textarea>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="bg_color">Background Color</label>
|
||||
<input type="color" id="bg_color" name="bg_color" value="#6a11cb">
|
||||
</div>
|
||||
<button type="submit" class="submit-btn">Generate Post</button>
|
||||
</form>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
191
register.php
Normal file
191
register.php
Normal file
@ -0,0 +1,191 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
@ini_set('display_errors', '1');
|
||||
@error_reporting(E_ALL);
|
||||
|
||||
session_start();
|
||||
|
||||
$data_dir = __DIR__ . '/data';
|
||||
if (!is_dir($data_dir)) {
|
||||
mkdir($data_dir, 0777, true);
|
||||
}
|
||||
$users_file = $data_dir . '/users.json';
|
||||
if (!file_exists($users_file)) {
|
||||
file_put_contents($users_file, json_encode([]));
|
||||
}
|
||||
|
||||
$errors = [];
|
||||
$success_message = '';
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$business_name = trim($_POST['business_name'] ?? '');
|
||||
$email = trim($_POST['email'] ?? '');
|
||||
$password = $_POST['password'] ?? '';
|
||||
|
||||
if (empty($business_name)) {
|
||||
$errors[] = 'Business name is required.';
|
||||
}
|
||||
if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
||||
$errors[] = 'A valid email is required.';
|
||||
}
|
||||
if (empty($password) || strlen($password) < 8) {
|
||||
$errors[] = 'Password must be at least 8 characters long.';
|
||||
}
|
||||
|
||||
if (empty($errors)) {
|
||||
$users = json_decode(file_get_contents($users_file), true);
|
||||
|
||||
foreach ($users as $user) {
|
||||
if ($user['email'] === $email) {
|
||||
$errors[] = 'An account with this email already exists.';
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($errors)) {
|
||||
$users[] = [
|
||||
'business_name' => $business_name,
|
||||
'email' => $email,
|
||||
'password' => password_hash($password, PASSWORD_DEFAULT),
|
||||
];
|
||||
file_put_contents($users_file, json_encode($users, JSON_PRETTY_PRINT));
|
||||
|
||||
$_SESSION['success_message'] = 'Registration successful! You can now log in.';
|
||||
header('Location: login.php');
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Sign Up - Digital Marketing Suite</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--bg-color: #f8f9fa;
|
||||
--text-color: #343a40;
|
||||
--heading-color: #212529;
|
||||
--primary-color: #007bff;
|
||||
--border-color: #dee2e6;
|
||||
--card-bg: #ffffff;
|
||||
--shadow: 0 0 15px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: 'Inter', sans-serif;
|
||||
background-color: var(--bg-color);
|
||||
color: var(--text-color);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100vh;
|
||||
}
|
||||
.register-container {
|
||||
width: 100%;
|
||||
max-width: 400px;
|
||||
padding: 2.5rem;
|
||||
background-color: var(--card-bg);
|
||||
border-radius: 12px;
|
||||
box-shadow: var(--shadow);
|
||||
}
|
||||
h1 {
|
||||
font-size: 2rem;
|
||||
font-weight: 700;
|
||||
color: var(--heading-color);
|
||||
text-align: center;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.form-group {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
.form-group label {
|
||||
display: block;
|
||||
font-weight: 500;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
.form-group input {
|
||||
width: 100%;
|
||||
padding: 0.8rem;
|
||||
border-radius: 8px;
|
||||
border: 1px solid var(--border-color);
|
||||
font-size: 1rem;
|
||||
transition: border-color 0.2s, box-shadow 0.2s;
|
||||
}
|
||||
.form-group input:focus {
|
||||
outline: none;
|
||||
border-color: var(--primary-color);
|
||||
box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.25);
|
||||
}
|
||||
.submit-btn {
|
||||
display: block;
|
||||
width: 100%;
|
||||
padding: 0.8rem;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
background: var(--primary-color);
|
||||
color: #ffffff;
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
transition: background-color 0.2s;
|
||||
}
|
||||
.submit-btn:hover {
|
||||
background-color: #0056b3;
|
||||
}
|
||||
.message {
|
||||
padding: 1rem;
|
||||
border-radius: 8px;
|
||||
margin-bottom: 1.5rem;
|
||||
font-weight: 500;
|
||||
text-align: center;
|
||||
}
|
||||
.message.error {
|
||||
background-color: #f8d7da;
|
||||
color: #721c24;
|
||||
border: 1px solid #f5c6cb;
|
||||
}
|
||||
.form-footer {
|
||||
text-align: center;
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<div class="card">
|
||||
<h1>Create Account</h1>
|
||||
<?php if (!empty($errors)): ?>
|
||||
<div class="errors">
|
||||
<?php foreach ($errors as $error): ?>
|
||||
<p><?= htmlspecialchars($error) ?></p>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<form action="register.php" method="post">
|
||||
<div class="form-group">
|
||||
<label for="business_name">Business Name</label>
|
||||
<input type="text" id="business_name" name="business_name" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="email">Email</label>
|
||||
<input type="email" id="email" name="email" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="password">Password</label>
|
||||
<input type="password" id="password" name="password" required minlength="8">
|
||||
</div>
|
||||
<button type="submit">Sign Up</button>
|
||||
</form>
|
||||
<div class="login-link">
|
||||
<p>Already have an account? <a href="login.php">Log In</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
146
settings.php
Normal file
146
settings.php
Normal file
@ -0,0 +1,146 @@
|
||||
<?php
|
||||
session_start();
|
||||
if (!isset($_SESSION['user'])) {
|
||||
header('Location: login.php');
|
||||
exit;
|
||||
}
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Settings</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--bg-color: #f8f9fa;
|
||||
--sidebar-bg: #ffffff;
|
||||
--text-color: #343a40;
|
||||
--heading-color: #212529;
|
||||
--primary-color: #007bff;
|
||||
--border-color: #dee2e6;
|
||||
--card-bg: #ffffff;
|
||||
--shadow: 0 0 15px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: 'Inter', sans-serif;
|
||||
background-color: var(--bg-color);
|
||||
color: var(--text-color);
|
||||
display: flex;
|
||||
}
|
||||
.sidebar {
|
||||
width: 260px;
|
||||
background-color: var(--sidebar-bg);
|
||||
border-right: 1px solid var(--border-color);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100vh;
|
||||
position: fixed;
|
||||
box-shadow: var(--shadow);
|
||||
}
|
||||
.sidebar-header {
|
||||
padding: 1.5rem;
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
color: var(--primary-color);
|
||||
border-bottom: 1px solid var(--border-color);
|
||||
text-align: center;
|
||||
}
|
||||
.sidebar-nav {
|
||||
flex-grow: 1;
|
||||
list-style: none;
|
||||
padding: 1rem 0;
|
||||
margin: 0;
|
||||
}
|
||||
.sidebar-nav a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 1rem 1.5rem;
|
||||
text-decoration: none;
|
||||
color: var(--text-color);
|
||||
font-weight: 500;
|
||||
transition: background-color 0.2s, color 0.2s;
|
||||
border-left: 3px solid transparent;
|
||||
}
|
||||
.sidebar-nav a:hover, .sidebar-nav a.active {
|
||||
background-color: #e9ecef;
|
||||
color: var(--primary-color);
|
||||
border-left-color: var(--primary-color);
|
||||
}
|
||||
.sidebar-footer {
|
||||
padding: 1.5rem;
|
||||
border-top: 1px solid var(--border-color);
|
||||
}
|
||||
.logout-btn {
|
||||
display: block;
|
||||
width: 100%;
|
||||
padding: 0.8rem;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
background: var(--primary-color);
|
||||
color: #ffffff;
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
transition: background-color 0.2s;
|
||||
}
|
||||
.logout-btn:hover {
|
||||
background-color: #0056b3;
|
||||
}
|
||||
.main-content {
|
||||
margin-left: 260px;
|
||||
flex-grow: 1;
|
||||
padding: 3rem;
|
||||
}
|
||||
h1 {
|
||||
font-size: 2.2rem;
|
||||
font-weight: 700;
|
||||
color: var(--heading-color);
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.coming-soon {
|
||||
text-align: center;
|
||||
padding: 4rem;
|
||||
background-color: var(--card-bg);
|
||||
border-radius: 12px;
|
||||
border: 1px solid var(--border-color);
|
||||
box-shadow: var(--shadow);
|
||||
}
|
||||
.coming-soon h2 {
|
||||
font-size: 1.8rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="sidebar">
|
||||
<div class="sidebar-header">Digital Suite</div>
|
||||
<nav class="sidebar-nav">
|
||||
<a href="dashboard.php">Dashboard</a>
|
||||
<a href="post-generator.php">Post Generator</a>
|
||||
|
||||
<a href="image-library.php">Image Library</a>
|
||||
<a href="video-library.php">Video Library</a>
|
||||
<a href="website-builder.php">Website Builder</a>
|
||||
<a href="analytics.php">Analytics</a>
|
||||
<a href="settings.php" class="active">Settings</a>
|
||||
</nav>
|
||||
<div class="sidebar-footer">
|
||||
<a href="?action=logout" class="logout-btn">Logout</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<main class="main-content">
|
||||
<h1>Settings</h1>
|
||||
<div class="coming-soon">
|
||||
<h2>Coming Soon!</h2>
|
||||
<p>This feature is under development. Check back later for updates.</p>
|
||||
</div>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
25
templates/website/classic.html
Normal file
25
templates/website/classic.html
Normal file
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{BUSINESS_NAME}}</title>
|
||||
<style>
|
||||
body { font-family: serif; margin: 0; }
|
||||
.hero { background-color: #333; color: white; padding: 4rem 2rem; text-align: center; }
|
||||
.hero h1 { font-size: 3rem; margin: 0; }
|
||||
.hero p { font-size: 1.2rem; }
|
||||
.content { padding: 2rem; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header class="hero">
|
||||
<h1>{{BUSINESS_NAME}}</h1>
|
||||
<p>{{TAGLINE}}</p>
|
||||
</header>
|
||||
<main class="content">
|
||||
<h2>Welcome to our website!</h2>
|
||||
<p>This is a classic website generated for your business.</p>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
25
templates/website/modern.html
Normal file
25
templates/website/modern.html
Normal file
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{BUSINESS_NAME}}</title>
|
||||
<style>
|
||||
body { font-family: sans-serif; margin: 0; }
|
||||
.hero { background-color: #6a11cb; color: white; padding: 4rem 2rem; text-align: center; }
|
||||
.hero h1 { font-size: 3rem; margin: 0; }
|
||||
.hero p { font-size: 1.2rem; }
|
||||
.content { padding: 2rem; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header class="hero">
|
||||
<h1>{{BUSINESS_NAME}}</h1>
|
||||
<p>{{TAGLINE}}</p>
|
||||
</header>
|
||||
<main class="content">
|
||||
<h2>Welcome to our website!</h2>
|
||||
<p>This is a simple, modern website generated for your business.</p>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
25
templates/website/vibrant.html
Normal file
25
templates/website/vibrant.html
Normal file
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{BUSINESS_NAME}}</title>
|
||||
<style>
|
||||
body { font-family: sans-serif; margin: 0; }
|
||||
.hero { background-color: #ff6b6b; color: white; padding: 4rem 2rem; text-align: center; }
|
||||
.hero h1 { font-size: 3rem; margin: 0; }
|
||||
.hero p { font-size: 1.2rem; }
|
||||
.content { padding: 2rem; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header class="hero">
|
||||
<h1>{{BUSINESS_NAME}}</h1>
|
||||
<p>{{TAGLINE}}</p>
|
||||
</header>
|
||||
<main class="content">
|
||||
<h2>Welcome to our website!</h2>
|
||||
<p>This is a vibrant website generated for your business.</p>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
284
video-generator.php
Normal file
284
video-generator.php
Normal file
@ -0,0 +1,284 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
@ini_set('display_errors', '1');
|
||||
@error_reporting(E_ALL);
|
||||
|
||||
session_start();
|
||||
|
||||
if (!isset($_SESSION['user'])) {
|
||||
header('Location: login.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
$user = $_SESSION['user'];
|
||||
$error = null;
|
||||
$success = null;
|
||||
|
||||
// Check for ffmpeg
|
||||
$ffmpeg_path = 'ffmpeg'; // or provide full path
|
||||
$ffmpeg_check = shell_exec("command -v $ffmpeg_path");
|
||||
|
||||
if (empty($ffmpeg_check)) {
|
||||
$error = "Error: ffmpeg is not installed or not in the system\'s PATH. Video generation is disabled.";
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST' && empty($error)) {
|
||||
$title = $_POST['title'] ?? 'Untitled Video';
|
||||
$images = $_FILES['images'] ?? [];
|
||||
|
||||
$userVideosDir = '/home/blari/executor/workspace/users_data/' . session_id() . '/videos';
|
||||
if (!is_dir($userVideosDir)) {
|
||||
mkdir($userVideosDir, 0777, true);
|
||||
}
|
||||
|
||||
$uploaded_files = [];
|
||||
if (!empty($images)) {
|
||||
for ($i = 0; $i < count($images['name']); $i++) {
|
||||
if ($images['error'][$i] === UPLOAD_ERR_OK) {
|
||||
$tmp_name = $images['tmp_name'][$i];
|
||||
$name = basename($images['name'][$i]);
|
||||
$upload_path = '/tmp/' . uniqid() . '-' . $name;
|
||||
move_uploaded_file($tmp_name, $upload_path);
|
||||
$uploaded_files[] = $upload_path;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (count($uploaded_files) > 0) {
|
||||
$filename = preg_replace('/[^a-zA-Z0-9_\-]/ ', '_', strtolower($title)) . '_' . time() . '.mp4';
|
||||
$outputPath = $userVideosDir . '/' . $filename;
|
||||
|
||||
// Create a text file for ffmpeg input
|
||||
$list_file_path = '/tmp/ffmpeg_list_' . uniqid() . '.txt';
|
||||
$list_content = "";
|
||||
foreach ($uploaded_files as $file) {
|
||||
$list_content .= "file '" . $file . "'\n";
|
||||
$list_content .= "duration 3\n"; // Each image shows for 3 seconds
|
||||
}
|
||||
file_put_contents($list_file_path, $list_content);
|
||||
|
||||
// FFmpeg command
|
||||
$cmd = "$ffmpeg_path -f concat -safe 0 -i $list_file_path -c:v libx264 -r 30 -pix_fmt yuv420p $outputPath 2>&1";
|
||||
|
||||
$output = shell_exec($cmd);
|
||||
|
||||
if (file_exists($outputPath)) {
|
||||
$success = "Video generated successfully! <a href='video-library.php'>View Video Library</a>";
|
||||
} else {
|
||||
$error = "Error generating video. Please check server logs. FFmpeg output: <pre>$output</pre>";
|
||||
}
|
||||
|
||||
// Clean up temporary files
|
||||
unlink($list_file_path);
|
||||
foreach ($uploaded_files as $file) {
|
||||
unlink($file);
|
||||
}
|
||||
} else {
|
||||
$error = "Please upload at least one image to generate a video.";
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Video Generator - Digital Marketing Suite</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--bg-color: #f8f9fa;
|
||||
--sidebar-bg: #ffffff;
|
||||
--text-color: #343a40;
|
||||
--heading-color: #212529;
|
||||
--primary-color: #007bff;
|
||||
--border-color: #dee2e6;
|
||||
--card-bg: #ffffff;
|
||||
--shadow: 0 0 15px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: 'Inter', sans-serif;
|
||||
background-color: var(--bg-color);
|
||||
color: var(--text-color);
|
||||
display: flex;
|
||||
}
|
||||
.sidebar {
|
||||
width: 260px;
|
||||
background-color: var(--sidebar-bg);
|
||||
border-right: 1px solid var(--border-color);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100vh;
|
||||
position: fixed;
|
||||
box-shadow: var(--shadow);
|
||||
}
|
||||
.sidebar-header {
|
||||
padding: 1.5rem;
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
color: var(--primary-color);
|
||||
border-bottom: 1px solid var(--border-color);
|
||||
text-align: center;
|
||||
}
|
||||
.sidebar-nav {
|
||||
flex-grow: 1;
|
||||
list-style: none;
|
||||
padding: 1rem 0;
|
||||
margin: 0;
|
||||
}
|
||||
.sidebar-nav a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 1rem 1.5rem;
|
||||
text-decoration: none;
|
||||
color: var(--text-color);
|
||||
font-weight: 500;
|
||||
transition: background-color 0.2s, color 0.2s;
|
||||
border-left: 3px solid transparent;
|
||||
}
|
||||
.sidebar-nav a:hover, .sidebar-nav a.active {
|
||||
background-color: #e9ecef;
|
||||
color: var(--primary-color);
|
||||
border-left-color: var(--primary-color);
|
||||
}
|
||||
.sidebar-footer {
|
||||
padding: 1.5rem;
|
||||
border-top: 1px solid var(--border-color);
|
||||
}
|
||||
.logout-btn {
|
||||
display: block;
|
||||
width: 100%;
|
||||
padding: 0.8rem;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
background: var(--primary-color);
|
||||
color: #ffffff;
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
transition: background-color 0.2s;
|
||||
}
|
||||
.logout-btn:hover {
|
||||
background-color: #0056b3;
|
||||
}
|
||||
.main-content {
|
||||
margin-left: 260px;
|
||||
flex-grow: 1;
|
||||
padding: 3rem;
|
||||
}
|
||||
h1 {
|
||||
font-size: 2.2rem;
|
||||
font-weight: 700;
|
||||
color: var(--heading-color);
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.generator-form {
|
||||
background-color: var(--card-bg);
|
||||
border-radius: 12px;
|
||||
padding: 2.5rem;
|
||||
border: 1px solid var(--border-color);
|
||||
box-shadow: var(--shadow);
|
||||
max-width: 700px;
|
||||
}
|
||||
.form-group {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
.form-group label {
|
||||
display: block;
|
||||
font-weight: 500;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
.form-group input, .form-group textarea, .form-group select {
|
||||
width: 100%;
|
||||
padding: 0.8rem;
|
||||
border-radius: 8px;
|
||||
border: 1px solid var(--border-color);
|
||||
font-size: 1rem;
|
||||
transition: border-color 0.2s, box-shadow 0.2s;
|
||||
}
|
||||
.form-group input:focus, .form-group textarea:focus, .form-group select:focus {
|
||||
outline: none;
|
||||
border-color: var(--primary-color);
|
||||
box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.25);
|
||||
}
|
||||
.submit-btn {
|
||||
display: inline-block;
|
||||
padding: 0.8rem 1.5rem;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
background-color: var(--primary-color);
|
||||
color: #ffffff;
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
transition: background-color 0.2s;
|
||||
}
|
||||
.submit-btn:hover {
|
||||
background-color: #0056b3;
|
||||
}
|
||||
.message {
|
||||
padding: 1rem;
|
||||
border-radius: 8px;
|
||||
margin-bottom: 1.5rem;
|
||||
font-weight: 500;
|
||||
}
|
||||
.message.success {
|
||||
background-color: #d4edda;
|
||||
color: #155724;
|
||||
border: 1px solid #c3e6cb;
|
||||
}
|
||||
.message.error {
|
||||
background-color: #f8d7da;
|
||||
color: #721c24;
|
||||
border: 1px solid #f5c6cb;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="sidebar">
|
||||
<div class="sidebar-header">Digital Suite</div>
|
||||
<nav class="sidebar-nav">
|
||||
<a href="dashboard.php">Dashboard</a>
|
||||
<a href="post-generator.php">Post Generator</a>
|
||||
<a href="image-library.php">Image Library</a>
|
||||
<a href="video-generator.php" class="active">Video Generator</a>
|
||||
<a href="video-library.php">Video Library</a>
|
||||
<a href="website-builder.php">Website Builder</a>
|
||||
<a href="analytics.php">Analytics</a>
|
||||
<a href="settings.php">Settings</a>
|
||||
</nav>
|
||||
<div class="sidebar-footer">
|
||||
<a href="?action=logout" class="logout-btn">Logout</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<main class="main-content">
|
||||
<h1>AI Video Generator</h1>
|
||||
|
||||
<?php if ($success): ?>
|
||||
<div class="message success"><?= $success ?></div>
|
||||
<?php endif; ?>
|
||||
<?php if ($error): ?>
|
||||
<div class="message error"><?= $error ?></div>
|
||||
<?php endif; ?>
|
||||
|
||||
<form class="generator-form" method="POST" action="video-generator.php" enctype="multipart/form-data">
|
||||
<div class="form-group">
|
||||
<label for="title">Video Title</label>
|
||||
<input type="text" id="title" name="title" placeholder="e.g., My Awesome Slideshow" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="images">Images</label>
|
||||
<input type="file" id="images" name="images[]" accept="image/*" multiple required>
|
||||
</div>
|
||||
<button type="submit" class="submit-btn" <?php if (!empty($error) && strpos($error, 'ffmpeg') !== false) echo 'disabled'; ?>>Generate Video</button>
|
||||
</form>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
266
video-library.php
Normal file
266
video-library.php
Normal file
@ -0,0 +1,266 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
@ini_set('display_errors', '1');
|
||||
@error_reporting(E_ALL);
|
||||
|
||||
session_start();
|
||||
|
||||
if (!isset($_SESSION['user'])) {
|
||||
header('Location: login.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
$user = $_SESSION['user'];
|
||||
$error = null;
|
||||
$success = null;
|
||||
|
||||
$userVideosDir = '/home/blari/executor/workspace/users_data/' . session_id() . '/videos';
|
||||
if (!is_dir($userVideosDir)) {
|
||||
mkdir($userVideosDir, 0777, true);
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['video'])) {
|
||||
$video = $_FILES['video'];
|
||||
if ($video['error'] === UPLOAD_ERR_OK) {
|
||||
$videoFileType = strtolower(pathinfo($video['name'], PATHINFO_EXTENSION));
|
||||
$allowedTypes = ['mp4', 'mov', 'avi', 'webm'];
|
||||
if (in_array($videoFileType, $allowedTypes)) {
|
||||
$videoName = uniqid() . '.' . $videoFileType;
|
||||
$videoPath = $userVideosDir . '/' . $videoName;
|
||||
if (move_uploaded_file($video['tmp_name'], $videoPath)) {
|
||||
$success = 'Video uploaded successfully!';
|
||||
} else {
|
||||
$error = 'Could not save uploaded video.';
|
||||
}
|
||||
} else {
|
||||
$error = 'Invalid file type. Only MP4, MOV, AVI, and WEBM are allowed.';
|
||||
}
|
||||
} else {
|
||||
$error = 'Error uploading file.';
|
||||
}
|
||||
}
|
||||
|
||||
$videos = glob($userVideosDir . '/*.{mp4,mov,avi,webm}', GLOB_BRACE);
|
||||
|
||||
?>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Video Library - Digital Marketing Suite</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--bg-color: #f8f9fa;
|
||||
--sidebar-bg: #ffffff;
|
||||
--text-color: #343a40;
|
||||
--heading-color: #212529;
|
||||
--primary-color: #007bff;
|
||||
--border-color: #dee2e6;
|
||||
--card-bg: #ffffff;
|
||||
--shadow: 0 0 15px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: 'Inter', sans-serif;
|
||||
background-color: var(--bg-color);
|
||||
color: var(--text-color);
|
||||
display: flex;
|
||||
}
|
||||
.sidebar {
|
||||
width: 260px;
|
||||
background-color: var(--sidebar-bg);
|
||||
border-right: 1px solid var(--border-color);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100vh;
|
||||
position: fixed;
|
||||
box-shadow: var(--shadow);
|
||||
}
|
||||
.sidebar-header {
|
||||
padding: 1.5rem;
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
color: var(--primary-color);
|
||||
border-bottom: 1px solid var(--border-color);
|
||||
text-align: center;
|
||||
}
|
||||
.sidebar-nav {
|
||||
flex-grow: 1;
|
||||
list-style: none;
|
||||
padding: 1rem 0;
|
||||
margin: 0;
|
||||
}
|
||||
.sidebar-nav a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 1rem 1.5rem;
|
||||
text-decoration: none;
|
||||
color: var(--text-color);
|
||||
font-weight: 500;
|
||||
transition: background-color 0.2s, color 0.2s;
|
||||
border-left: 3px solid transparent;
|
||||
}
|
||||
.sidebar-nav a:hover, .sidebar-nav a.active {
|
||||
background-color: #e9ecef;
|
||||
color: var(--primary-color);
|
||||
border-left-color: var(--primary-color);
|
||||
}
|
||||
.sidebar-footer {
|
||||
padding: 1.5rem;
|
||||
border-top: 1px solid var(--border-color);
|
||||
}
|
||||
.logout-btn {
|
||||
display: block;
|
||||
width: 100%;
|
||||
padding: 0.8rem;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
background: var(--primary-color);
|
||||
color: #ffffff;
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
transition: background-color 0.2s;
|
||||
}
|
||||
.logout-btn:hover {
|
||||
background-color: #0056b3;
|
||||
}
|
||||
.main-content {
|
||||
margin-left: 260px;
|
||||
flex-grow: 1;
|
||||
padding: 3rem;
|
||||
}
|
||||
h1 {
|
||||
font-size: 2.2rem;
|
||||
font-weight: 700;
|
||||
color: var(--heading-color);
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.upload-form {
|
||||
background-color: var(--card-bg);
|
||||
border-radius: 12px;
|
||||
padding: 2.5rem;
|
||||
border: 1px solid var(--border-color);
|
||||
box-shadow: var(--shadow);
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.form-group {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
.form-group label {
|
||||
display: block;
|
||||
font-weight: 500;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
.form-group input {
|
||||
width: 100%;
|
||||
padding: 0.8rem;
|
||||
border-radius: 8px;
|
||||
border: 1px solid var(--border-color);
|
||||
font-size: 1rem;
|
||||
}
|
||||
.submit-btn {
|
||||
display: inline-block;
|
||||
padding: 0.8rem 1.5rem;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
background-color: var(--primary-color);
|
||||
color: #ffffff;
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
}
|
||||
.video-gallery {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
||||
gap: 1.5rem;
|
||||
}
|
||||
.video-card {
|
||||
border-radius: 12px;
|
||||
overflow: hidden;
|
||||
box-shadow: var(--shadow);
|
||||
position: relative;
|
||||
}
|
||||
.video-card video {
|
||||
width: 100%;
|
||||
height: 200px;
|
||||
object-fit: cover;
|
||||
}
|
||||
.message {
|
||||
padding: 1rem;
|
||||
border-radius: 8px;
|
||||
margin-bottom: 1.5rem;
|
||||
font-weight: 500;
|
||||
}
|
||||
.message.success {
|
||||
background-color: #d4edda;
|
||||
color: #155724;
|
||||
border: 1px solid #c3e6cb;
|
||||
}
|
||||
.message.error {
|
||||
background-color: #f8d7da;
|
||||
color: #721c24;
|
||||
border: 1px solid #f5c6cb;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="sidebar">
|
||||
<div class="sidebar-header">Digital Suite</div>
|
||||
<nav class="sidebar-nav">
|
||||
<a href="dashboard.php">Dashboard</a>
|
||||
<a href="post-generator.php">Post Generator</a>
|
||||
|
||||
<a href="image-library.php">Image Library</a>
|
||||
<a href="video-library.php" class="active">Video Library</a>
|
||||
<a href="website-builder.php">Website Builder</a>
|
||||
<a href="analytics.php">Analytics</a>
|
||||
<a href="settings.php">Settings</a>
|
||||
</nav>
|
||||
<div class="sidebar-footer">
|
||||
<a href="?action=logout" class="logout-btn">Logout</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<main class="main-content">
|
||||
<h1>Video Library</h1>
|
||||
|
||||
<?php if ($success): ?>
|
||||
<div class="message success"><?= $success ?></div>
|
||||
<?php endif; ?>
|
||||
<?php if ($error): ?>
|
||||
<div class="message error"><?= $error ?></div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="upload-form">
|
||||
<form method="POST" enctype="multipart/form-data">
|
||||
<div class="form-group">
|
||||
<label for="video">Upload Video</label>
|
||||
<input type="file" id="video" name="video" accept="video/*" required>
|
||||
</div>
|
||||
<button type="submit" class="submit-btn">Upload</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="video-gallery">
|
||||
<?php foreach ($videos as $video): ?>
|
||||
<div class="video-card">
|
||||
<video controls>
|
||||
<source src="<?= str_replace('/home/blari/executor/workspace/', '', $video) ?>" type="video/mp4">
|
||||
Your browser does not support the video tag.
|
||||
</video>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
<?php if (empty($videos)): ?>
|
||||
<p>No videos uploaded yet.</p>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
14
view-website.php
Normal file
14
view-website.php
Normal file
@ -0,0 +1,14 @@
|
||||
<?php
|
||||
session_start();
|
||||
if (!isset($_SESSION['user'])) {
|
||||
header('Location: login.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
$websitePath = '/home/blari/executor/workspace/users_data/' . session_id() . '/websites/index.html';
|
||||
|
||||
if (file_exists($websitePath)) {
|
||||
readfile($websitePath);
|
||||
} else {
|
||||
echo "Website not found. Please generate it first from the Website Builder.";
|
||||
}
|
||||
324
website-builder.php
Normal file
324
website-builder.php
Normal file
@ -0,0 +1,324 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
@ini_set('display_errors', '1');
|
||||
@error_reporting(E_ALL);
|
||||
|
||||
session_start();
|
||||
|
||||
if (!isset($_SESSION['user'])) {
|
||||
header('Location: login.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
$user = $_SESSION['user'];
|
||||
$error = null;
|
||||
$success = null;
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
if (!isset($_SESSION['user']) || !session_id()) {
|
||||
$error = "Error: Your session has expired or is invalid. Please log in again.";
|
||||
} else {
|
||||
$template = $_POST['template'] ?? 'modern';
|
||||
$businessName = $_POST['business_name'] ?? $user['business_name'];
|
||||
$tagline = $_POST['tagline'] ?? '';
|
||||
|
||||
$baseUserDir = '/home/blari/executor/workspace/users_data/';
|
||||
if (!is_dir($baseUserDir)) {
|
||||
$error = "Error: The base user data directory does not exist. Please contact support.";
|
||||
} elseif (!is_writable($baseUserDir)) {
|
||||
$error = "Error: The user data directory is not writable. Please check permissions.";
|
||||
} else {
|
||||
$userWebsitesDir = $baseUserDir . session_id() . '/websites';
|
||||
if (!is_dir($userWebsitesDir) && !mkdir($userWebsitesDir, 0777, true)) {
|
||||
$error = "Error: Could not create website directory at '{$userWebsitesDir}'. Please check permissions.";
|
||||
} else {
|
||||
$websiteFilename = 'index.html';
|
||||
$websitePath = $userWebsitesDir . '/' . $websiteFilename;
|
||||
|
||||
$templatePath = "templates/website/{$template}.html";
|
||||
if (!file_exists($templatePath)) {
|
||||
$error = "Error: The selected template file could not be found.";
|
||||
} else {
|
||||
$templateContent = file_get_contents($templatePath);
|
||||
$templateContent = str_replace('{{BUSINESS_NAME}}', htmlspecialchars($businessName), $templateContent);
|
||||
$templateContent = str_replace('{{TAGLINE}}', htmlspecialchars($tagline), $templateContent);
|
||||
|
||||
if (file_put_contents($websitePath, $templateContent) === false) {
|
||||
$error = "Could not save website to '{$websitePath}'. Please ensure the directory is writable.";
|
||||
} else {
|
||||
$success = "Website generated successfully! <a href='view-website.php' target='_blank'>View Website</a>";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Website Builder - Digital Marketing Suite</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--bg-color: #f8f9fa;
|
||||
--sidebar-bg: #ffffff;
|
||||
--text-color: #343a40;
|
||||
--heading-color: #212529;
|
||||
--primary-color: #007bff;
|
||||
--border-color: #dee2e6;
|
||||
--card-bg: #ffffff;
|
||||
--shadow: 0 0 15px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: 'Inter', sans-serif;
|
||||
background-color: var(--bg-color);
|
||||
color: var(--text-color);
|
||||
display: flex;
|
||||
}
|
||||
.sidebar {
|
||||
width: 260px;
|
||||
background-color: var(--sidebar-bg);
|
||||
border-right: 1px solid var(--border-color);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100vh;
|
||||
position: fixed;
|
||||
box-shadow: var(--shadow);
|
||||
}
|
||||
.sidebar-header {
|
||||
padding: 1.5rem;
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
color: var(--primary-color);
|
||||
border-bottom: 1px solid var(--border-color);
|
||||
text-align: center;
|
||||
}
|
||||
.sidebar-nav {
|
||||
flex-grow: 1;
|
||||
list-style: none;
|
||||
padding: 1rem 0;
|
||||
margin: 0;
|
||||
}
|
||||
.sidebar-nav a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 1rem 1.5rem;
|
||||
text-decoration: none;
|
||||
color: var(--text-color);
|
||||
font-weight: 500;
|
||||
transition: background-color 0.2s, color 0.2s;
|
||||
border-left: 3px solid transparent;
|
||||
}
|
||||
.sidebar-nav a:hover, .sidebar-nav a.active {
|
||||
background-color: #e9ecef;
|
||||
color: var(--primary-color);
|
||||
border-left-color: var(--primary-color);
|
||||
}
|
||||
.sidebar-footer {
|
||||
padding: 1.5rem;
|
||||
border-top: 1px solid var(--border-color);
|
||||
}
|
||||
.logout-btn {
|
||||
display: block;
|
||||
width: 100%;
|
||||
padding: 0.8rem;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
background: var(--primary-color);
|
||||
color: #ffffff;
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
transition: background-color 0.2s;
|
||||
}
|
||||
.logout-btn:hover {
|
||||
background-color: #0056b3;
|
||||
}
|
||||
.main-content {
|
||||
margin-left: 260px;
|
||||
flex-grow: 1;
|
||||
padding: 3rem;
|
||||
}
|
||||
h1 {
|
||||
font-size: 2.2rem;
|
||||
font-weight: 700;
|
||||
color: var(--heading-color);
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.builder-form {
|
||||
background-color: var(--card-bg);
|
||||
border-radius: 12px;
|
||||
padding: 2.5rem;
|
||||
border: 1px solid var(--border-color);
|
||||
box-shadow: var(--shadow);
|
||||
max-width: 800px;
|
||||
}
|
||||
.form-group {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
.form-group label {
|
||||
display: block;
|
||||
font-weight: 500;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
.form-group input, .form-group textarea {
|
||||
width: 100%;
|
||||
padding: 0.8rem;
|
||||
border-radius: 8px;
|
||||
border: 1px solid var(--border-color);
|
||||
font-size: 1rem;
|
||||
transition: border-color 0.2s, box-shadow 0.2s;
|
||||
}
|
||||
.form-group input:focus, .form-group textarea:focus {
|
||||
outline: none;
|
||||
border-color: var(--primary-color);
|
||||
box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.25);
|
||||
}
|
||||
.template-selector {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
||||
gap: 1.5rem;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
.template-card {
|
||||
border: 2px solid var(--border-color);
|
||||
border-radius: 8px;
|
||||
cursor: pointer;
|
||||
transition: border-color 0.2s, box-shadow 0.2s, transform 0.2s;
|
||||
}
|
||||
.template-card:hover {
|
||||
transform: translateY(-5px);
|
||||
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.template-card.active {
|
||||
border-color: var(--primary-color);
|
||||
box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.3);
|
||||
}
|
||||
.template-card .template-preview {
|
||||
width: 100%;
|
||||
height: 150px;
|
||||
border-radius: 6px 6px 0 0;
|
||||
}
|
||||
.template-card .template-name {
|
||||
padding: 0.8rem;
|
||||
font-weight: 500;
|
||||
text-align: center;
|
||||
}
|
||||
.submit-btn {
|
||||
display: inline-block;
|
||||
padding: 0.8rem 1.5rem;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
background-color: var(--primary-color);
|
||||
color: #ffffff;
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
transition: background-color 0.2s;
|
||||
}
|
||||
.submit-btn:hover {
|
||||
background-color: #0056b3;
|
||||
}
|
||||
.message {
|
||||
padding: 1rem;
|
||||
border-radius: 8px;
|
||||
margin-bottom: 1.5rem;
|
||||
font-weight: 500;
|
||||
}
|
||||
.message.success {
|
||||
background-color: #d4edda;
|
||||
color: #155724;
|
||||
border: 1px solid #c3e6cb;
|
||||
}
|
||||
.message.error {
|
||||
background-color: #f8d7da;
|
||||
color: #721c24;
|
||||
border: 1px solid #f5c6cb;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="sidebar">
|
||||
<div class="sidebar-header">Digital Suite</div>
|
||||
<nav class="sidebar-nav">
|
||||
<a href="dashboard.php">Dashboard</a>
|
||||
<a href="post-generator.php">Post Generator</a>
|
||||
|
||||
<a href="image-library.php">Image Library</a>
|
||||
<a href="video-library.php">Video Library</a>
|
||||
<a href="website-builder.php" class="active">Website Builder</a>
|
||||
<a href="analytics.php">Analytics</a>
|
||||
<a href="settings.php">Settings</a>
|
||||
</nav>
|
||||
<div class="sidebar-footer">
|
||||
<a href="?action=logout" class="logout-btn">Logout</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<main class="main-content">
|
||||
<h1>AI Website Builder</h1>
|
||||
|
||||
<?php if ($success): ?>
|
||||
<div class="message success"><?= $success ?></div>
|
||||
<?php endif; ?>
|
||||
<?php if ($error): ?>
|
||||
<div class="message error"><?= $error ?></div>
|
||||
<?php endif; ?>
|
||||
|
||||
<form class="builder-form" method="POST" action="website-builder.php">
|
||||
<div class="form-group">
|
||||
<label>Select a Template</label>
|
||||
<div class="template-selector">
|
||||
<div class="template-card active" data-template="modern">
|
||||
<div class="template-preview" style="background-color: #e9ecef;"></div>
|
||||
<div class="template-name">Modern</div>
|
||||
</div>
|
||||
<div class="template-card" data-template="classic">
|
||||
<div class="template-preview" style="background-color: #f8f9fa;"></div>
|
||||
<div class="template-name">Classic</div>
|
||||
</div>
|
||||
<div class="template-card" data-template="vibrant">
|
||||
<div class="template-preview" style="background-color: #6a11cb;"></div>
|
||||
<div class="template-name">Vibrant</div>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="template" id="template-input" value="modern">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="business_name">Business Name</label>
|
||||
<input type="text" id="business_name" name="business_name" value="<?= htmlspecialchars($user['business_name']) ?>" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="tagline">Tagline / Headline</label>
|
||||
<input type="text" id="tagline" name="tagline" placeholder="e.g., The best widgets in town">
|
||||
</div>
|
||||
|
||||
<button type="submit" class="submit-btn">Generate Website</button>
|
||||
</form>
|
||||
</main>
|
||||
|
||||
<script>
|
||||
const templateCards = document.querySelectorAll('.template-card');
|
||||
const templateInput = document.getElementById('template-input');
|
||||
|
||||
templateCards.forEach(card => {
|
||||
card.addEventListener('click', () => {
|
||||
templateCards.forEach(c => c.classList.remove('active'));
|
||||
card.classList.add('active');
|
||||
templateInput.value = card.dataset.template;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Loading…
x
Reference in New Issue
Block a user