Add migrations for Google Ads settings and demo data

- Create migration for global settings table and add google_ads_customer_id and google_ads_start_date columns to clients table.
- Add migration to include product_url column in products_data table.
- Insert demo data for campaigns, products, and their history for client 'pomysloweprezenty.pl'.
- Implement client management interface with modals for adding and editing clients, including Google Ads Customer ID and data retrieval start date.
This commit is contained in:
2026-02-15 17:46:32 +01:00
parent 32f25dc48c
commit afe9d6216d
32 changed files with 8088 additions and 2288 deletions

View File

@@ -4,14 +4,13 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>crmPro</title>
<meta name="keywords" content="">
<meta name="description" content="">
<meta name="robots" content="all">
<title>adsPRO</title>
<meta name="robots" content="noindex, nofollow">
<link href="/layout/favicon.png" rel="icon" type="image/x-icon">
<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=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
<script src="https://cdn.datatables.net/2.1.7/js/dataTables.min.js"></script>
@@ -26,11 +25,9 @@
<script src="/libraries/select2/js/select2.full.min.js"></script>
<script src="/libraries/functions.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/2.1.7/css/dataTables.bootstrap5.min.css">
<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
<link rel="Stylesheet" type="text/css" href="/libraries/framework/skin/default_skin/css/theme.css">
<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="/libraries/framework/vendor/plugins/datepicker/css/bootstrap-datetimepicker.css">
<link rel="Stylesheet" type="text/css" href="/libraries/framework/vendor/plugins/daterange/daterangepicker.css">
<link rel="Stylesheet" type="text/css" href="/libraries/framework/admin-tools/admin-forms/css/admin-forms.css">
<link rel="stylesheet" type="text/css" href="/libraries/framework/vendor/plugins/daterange/daterangepicker.css">
<link rel="stylesheet" type="text/css" href="/libraries/jquery-confirm/jquery-confirm.min.css">
<link rel="stylesheet" type="text/css" href="/libraries/select2/css/select2.min.css">
<link rel="stylesheet" type="text/css" href="/libraries/select2/css/select2-bootstrap-5-theme.min.css">
@@ -38,71 +35,146 @@
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
</head>
<body class="logged">
<div class="top">
<div class="logo">
<a href="/">crm<span>Pro</span></a>
</div>
<div class="user-nav">
<div class="trigger">
<i class="fa fa-user"></i> <span><?= $this -> user[ 'email' ];?></span>
<?php
$module = $this -> current_module;
?>
<!-- Sidebar -->
<aside class="sidebar" id="sidebar">
<div class="sidebar-header">
<div class="sidebar-logo">
<a href="/">
<span class="logo-text">ads<strong>PRO</strong></span>
</a>
</div>
<button class="sidebar-toggle" id="sidebarToggle">
<i class="fa-solid fa-angles-left"></i>
</button>
</div>
<nav class="sidebar-nav">
<ul>
<li>
<a href="/users/settings/">Ustawienia</a>
<li class="<?= $module === 'campaigns' ? 'active' : '' ?>">
<a href="/campaigns">
<i class="fa-solid fa-bullhorn"></i>
<span>Kampanie</span>
</a>
</li>
<li id="divider"></li>
<li>
<a href="/users/logout/">Wyloguj się</a>
<li class="<?= $module === 'products' ? 'active' : '' ?>">
<a href="/products">
<i class="fa-solid fa-box-open"></i>
<span>Produkty</span>
</a>
</li>
<li class="<?= $module === 'clients' ? 'active' : '' ?>">
<a href="/clients">
<i class="fa-solid fa-building"></i>
<span>Klienci</span>
</a>
</li>
<li class="<?= $module === 'allegro' ? 'active' : '' ?>">
<a href="/allegro">
<i class="fa-solid fa-file-import"></i>
<span>Allegro import</span>
</a>
</li>
<li class="nav-divider"></li>
<li class="<?= $module === 'users' ? 'active' : '' ?>">
<a href="/settings">
<i class="fa-solid fa-gear"></i>
<span>Ustawienia</span>
</a>
</li>
</ul>
</nav>
<div class="sidebar-footer">
<div class="sidebar-user">
<div class="user-avatar">
<i class="fa-solid fa-user"></i>
</div>
<div class="user-info">
<span class="user-email"><?= $this -> user['email']; ?></span>
</div>
</div>
<a href="/logout" class="sidebar-logout" title="Wyloguj się">
<i class="fa-solid fa-right-from-bracket"></i>
<span>Wyloguj</span>
</a>
</div>
</aside>
<!-- Main content -->
<div class="main-wrapper" id="mainWrapper">
<header class="topbar">
<button class="topbar-toggle" id="topbarToggle">
<i class="fa-solid fa-bars"></i>
</button>
<div class="topbar-breadcrumb">
<?php
$breadcrumbs = [
'campaigns' => 'Kampanie',
'products' => 'Produkty',
'clients' => 'Klienci',
'allegro' => 'Allegro import',
'users' => 'Ustawienia',
];
echo $breadcrumbs[$module] ?? 'adsPRO';
?>
</div>
</header>
<main class="content">
<? if ( $this -> alert ): ?>
<div class="app-alert"><?= $this -> alert; ?></div>
<? endif; ?>
<?= $this -> content; ?>
</main>
</div>
<div class="main-menu">
<ul>
<li>
<a href="/campaigns/main_view/">Kampanie</a>
</li>
<li>
<a href="/products/main_view/">Produkty</a>
</li>
<li>
<a href="/allegro/main_view/">Allegro import</a>
</li>
</ul>
</div>
<div class="main">
<? if ( $this -> alert ):?>
<div class="alert"><?= $this -> alert;?></div>
<? endif;?>
<?= $this -> content;?>
</div>
<!-- Popup domyslny -->
<div class="default_popup">
<div class="popup_content">
<div class="popup_header">
<div class="title"></div>
<div class="close"><i class="fa fa-times"></i></div>
<div class="close"><i class="fa-solid fa-xmark"></i></div>
</div>
<div class="popup_body"></div>
</div>
</div>
<script type="text/javascript">$
$( function() {
$( 'input.date' ).datepicker({
<script type="text/javascript">
// Sidebar toggle
$(function() {
var sidebar = $('#sidebar');
var mainWrapper = $('#mainWrapper');
var collapsed = localStorage.getItem('sidebar_collapsed') === 'true';
if (collapsed) {
sidebar.addClass('collapsed');
mainWrapper.addClass('expanded');
}
$('#sidebarToggle, #topbarToggle').on('click', function() {
sidebar.toggleClass('collapsed');
mainWrapper.toggleClass('expanded');
localStorage.setItem('sidebar_collapsed', sidebar.hasClass('collapsed'));
});
// Datepicker
$('input.date').datepicker({
language: 'pl',
autoClose: true
});
// Popup close
$('body').on('click', '.default_popup .close', function(e) {
e.preventDefault();
$('.default_popup .popup_body').empty();
$('.default_popup').hide();
return false;
});
});
$( 'body' ).on( 'click', '.default_popup .close', function(e) {
e.preventDefault();
$( '.default_popup .popup_body' ).empty();
$( '.default_popup' ).hide();
return false;
});
function show_default_popup( content ) {
$( '.default_popup .popup_body' ).html( content );
$( '.default_popup' ).fadeIn();
function show_default_popup(content) {
$('.default_popup .popup_body').html(content);
$('.default_popup').fadeIn();
}
</script>
</body>