diff --git a/admin/add.php b/admin/add.php new file mode 100644 index 0000000..54d96f0 --- /dev/null +++ b/admin/add.php @@ -0,0 +1,67 @@ +prepare($sql); + $stmt->execute(['title' => $title, 'description' => $description, 'image_url' => $image_url]); + header('Location: index.php'); + exit; + } + } catch (PDOException $e) { + error_log("Database error: " . $e->getMessage()); + } + } +} +?> + + + + + + + Add Project + + + + +
+

Add New Project

+
+
+
+
+ + +
+
+ + +
+
+ + +
+ + Cancel +
+
+
+
+ + diff --git a/admin/delete.php b/admin/delete.php new file mode 100644 index 0000000..6248964 --- /dev/null +++ b/admin/delete.php @@ -0,0 +1,26 @@ +prepare($sql); + $stmt->execute(['id' => $id]); + } + } catch (PDOException $e) { + error_log("Database error: " . $e->getMessage()); + } +} + +header('Location: index.php'); +exit; diff --git a/admin/edit.php b/admin/edit.php new file mode 100644 index 0000000..37b633b --- /dev/null +++ b/admin/edit.php @@ -0,0 +1,90 @@ +prepare("SELECT * FROM projects WHERE id = :id"); + $stmt->execute(['id' => $id]); + $project = $stmt->fetch(PDO::FETCH_ASSOC); + } +} catch (PDOException $e) { + error_log("Database error: " . $e->getMessage()); +} + +if (!$project) { + header('Location: index.php'); + exit; +} + +if ($_SERVER['REQUEST_METHOD'] == 'POST') { + $title = $_POST['title'] ?? ''; + $description = $_POST['description'] ?? ''; + $image_url = $_POST['image_url'] ?? ''; + + if ($title) { + try { + $pdo = db(); + if ($pdo) { + $sql = "UPDATE projects SET title = :title, description = :description, image_url = :image_url WHERE id = :id"; + $stmt = $pdo->prepare($sql); + $stmt->execute(['title' => $title, 'description' => $description, 'image_url' => $image_url, 'id' => $id]); + header('Location: index.php'); + exit; + } + } catch (PDOException $e) { + error_log("Database error: " . $e->getMessage()); + } + } +} +?> + + + + + + + Edit Project + + + + +
+

Edit Project

+
+
+
+
+ + +
+
+ + +
+
+ + +
+ + Cancel +
+
+
+
+ + diff --git a/admin/index.php b/admin/index.php new file mode 100644 index 0000000..f02a633 --- /dev/null +++ b/admin/index.php @@ -0,0 +1,77 @@ +query("SELECT * FROM projects ORDER BY created_at DESC"); + if ($stmt) { + $projects = $stmt->fetchAll(PDO::FETCH_ASSOC); + } + } +} catch (PDOException $e) { + error_log("Database error: " . $e->getMessage()); +} +?> + + + + + + + Admin Dashboard + + + + +
+
+

Admin Dashboard

+ Logout +
+ +
+
+

Projects

+ Add New Project + + + + + + + + + + + + + + + + + + + + + + + +
TitleDescriptionActions
No projects found.
... + Edit + Delete +
+
+
+
+ + diff --git a/admin/login.php b/admin/login.php new file mode 100644 index 0000000..fbd1538 --- /dev/null +++ b/admin/login.php @@ -0,0 +1,58 @@ + + + + + + + + Admin Login + + + + +
+
+
+
+
+

Admin Login

+
+
+ + +
+ +
+ +
+ +
+
+
+
+
+
+
+ + diff --git a/admin/logout.php b/admin/logout.php new file mode 100644 index 0000000..95db42c --- /dev/null +++ b/admin/logout.php @@ -0,0 +1,6 @@ + { + 'use strict' + + const forms = document.querySelectorAll('.needs-validation') + + Array.from(forms).forEach(form => { + form.addEventListener('submit', event => { + if (!form.checkValidity()) { + event.preventDefault() + event.stopPropagation() + } + + form.classList.add('was-validated') + }, false) + }) +})(); + +// Show toast notification for form submission status +document.addEventListener('DOMContentLoaded', () => { + const urlParams = new URLSearchParams(window.location.search); + const status = urlParams.get('status'); + const message = urlParams.get('message'); + + if (status) { + const toastContainer = document.getElementById('toast-container'); + const toastHTML = ` + + `; + toastContainer.innerHTML = toastHTML; + const toastEl = toastContainer.querySelector('.toast'); + const toast = new bootstrap.Toast(toastEl, { delay: 5000 }); + toast.show(); + } +}); + +// Initialize Particles.js +particlesJS.load('particles-js', 'assets/particles.json', function() { + console.log('particles.js config loaded'); +}); \ No newline at end of file diff --git a/assets/particles.json b/assets/particles.json new file mode 100644 index 0000000..bc57868 --- /dev/null +++ b/assets/particles.json @@ -0,0 +1,110 @@ +{ + "particles": { + "number": { + "value": 80, + "density": { + "enable": true, + "value_area": 800 + } + }, + "color": { + "value": "#ffffff" + }, + "shape": { + "type": "circle", + "stroke": { + "width": 0, + "color": "#000000" + }, + "polygon": { + "nb_sides": 5 + }, + "image": { + "src": "img/github.svg", + "width": 100, + "height": 100 + } + }, + "opacity": { + "value": 0.5, + "random": false, + "anim": { + "enable": false, + "speed": 1, + "opacity_min": 0.1, + "sync": false + } + }, + "size": { + "value": 3, + "random": true, + "anim": { + "enable": false, + "speed": 40, + "size_min": 0.1, + "sync": false + } + }, + "line_linked": { + "enable": true, + "distance": 150, + "color": "#ffffff", + "opacity": 0.4, + "width": 1 + }, + "move": { + "enable": true, + "speed": 6, + "direction": "none", + "random": false, + "straight": false, + "out_mode": "out", + "bounce": false, + "attract": { + "enable": false, + "rotateX": 600, + "rotateY": 1200 + } + } + }, + "interactivity": { + "detect_on": "canvas", + "events": { + "onhover": { + "enable": true, + "mode": "repulse" + }, + "onclick": { + "enable": true, + "mode": "push" + }, + "resize": true + }, + "modes": { + "grab": { + "distance": 400, + "line_linked": { + "opacity": 1 + } + }, + "bubble": { + "distance": 400, + "size": 40, + "duration": 2, + "opacity": 8, + "speed": 3 + }, + "repulse": { + "distance": 200, + "duration": 0.4 + }, + "push": { + "particles_nb": 4 + }, + "remove": { + "particles_nb": 2 + } + } + }, + "retina_detect": true +} \ No newline at end of file diff --git a/contact.php b/contact.php new file mode 100644 index 0000000..569d134 --- /dev/null +++ b/contact.php @@ -0,0 +1,38 @@ + - - + + - - - New Style - - - - - - - - - - - - - - - - - - - + + + + + Имя Фамилия | Личное Портфолио + + + + + + + + + + + + + + + + + + + + + + + + + + - -
-
-

Analyzing your requirements and generating your website…

-
- Loading… -
-

AI is collecting your requirements and applying the first changes.

-

This page will update automatically as the plan is implemented.

-

Runtime: PHP — UTC

-
-
- + + + +
+ + +
+ + +
+ +
+ +
+ +
+
+

Креативный разработчик и дизайнер

+

Я создаю красивые и функциональные сайты. Добро пожаловать в мое личное пространство в сети.

+ Связаться +
+
+ + +
+
+

Обо мне

+
+
+ Портрет +
+
+

Привет! Я увлеченный разработчик со склонностью к созданию элегантных решений в кратчайшие сроки. Я люблю чистый код, хороший дизайн и чашку кофе. Мой опыт охватывает различные технологии, что позволяет мне решать разнообразные задачи.

+

Этот сайт — демонстрация моего пути и навыков. Он построен на классическом стеке LAMP, демонстрируя мощность и гибкость этой надежной технологии. Не стесняйтесь осмотреться и написать мне, если хотите сотрудничать!

+
+
+
+
+ + query("SELECT * FROM projects ORDER BY created_at DESC"); + if ($stmt) { + $projects = $stmt->fetchAll(PDO::FETCH_ASSOC); + } + } +} catch (PDOException $e) { + // Log error or handle it gracefully + error_log("Database error: " . $e->getMessage()); +} +?> + +
+
+

Мои работы

+
+ +
+

Пока нет проектов для отображения. Зайдите позже!

+
+ + +
+
+ <?php echo htmlspecialchars($project['title']); ?> +
+
+

+
+ +
+
+ + +
+
+
+ + +
+
+

Свяжитесь со мной

+
+
+
+
+ + +
Пожалуйста, введите ваше имя.
+
+
+ + +
Пожалуйста, введите корректный email.
+
+
+ + +
Пожалуйста, введите ваше сообщение.
+
+
+ +
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/invoice.php b/invoice.php new file mode 100644 index 0000000..4fdba1b --- /dev/null +++ b/invoice.php @@ -0,0 +1,259 @@ + + + + + + + Инвойс <?= $invoice_number ?> + + + + +
+
+
+

Инвойс

+
+ +
+
+ + + + + + + + + + + + + +
Номер #
Дата
Срок оплаты
+
+
+ +
+
Кому:
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
ОписаниеКол-воЦенаСумма
+ +
+ + + + + + + + + + + + + +
Подытог:
Налог (%):
Итого:
+
+ +
+ + +
+
Примечания:
+

+
+ + + +
+ + + diff --git a/tools.php b/tools.php new file mode 100644 index 0000000..f1ae6f6 --- /dev/null +++ b/tools.php @@ -0,0 +1,303 @@ + [ + ['role' => 'system', 'content' => 'You are a helpful assistant.'], + ['role' => 'user', 'content' => $user_prompt], + ], + ]); + + if (!empty($response['success'])) { + $ai_response = LocalAIApi::extractText($response); + } else { + $ai_response = 'Ошибка: Не удалось получить ответ от AI.'; + } + } +} +?> + + + + + + Инструменты - Ваше Имя + + + + + + + + + +
+ + + +
+
+

Инструменты

+

Полезные инструменты для автоматизации ваших задач.

+
+ +
+
+
+
+

AI-чат

+

Задайте любой вопрос и получите ответ от искусственного интеллекта.

+
+
+ + +
+ +
+ +
+
+ Вы: +

+
+
+ AI: +

+
+
+ +
+
+
+ +
+
+
+

Генератор инвойсов

+

Создайте профессиональный инвойс и сохраните его в PDF.

+
+
+
+
От кого
+
+ +
+
+ +
+
+
+
Кому
+
+ +
+
+ +
+
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + +
ОписаниеКол-воЦена за ед.Сумма
+ + + +
+
+
+
Валюта:
+
+ +
+
+
+
Подытог:
+
0.00
+
+
+
Налог (%):
+
+ +
+
+
+
+
Итого:
+
0.00
+
+
+
+ +
+ + +
+ +
+ +
+
+
+
+
+
+
+ + + + + + + + + + + \ No newline at end of file